@piwitests/server 0.18.2 → 0.20.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/{Dwws9U0D.js → -f7BAm1H.js} +1 -1
- package/.output/public/_nuxt/{BjCHB89N.js → 4gYNA-d4.js} +1 -1
- package/.output/public/_nuxt/5A6ITZXj.js +1 -0
- package/.output/public/_nuxt/8PUUncmO.js +44 -0
- package/.output/public/_nuxt/A1pj0VnG.js +1 -0
- package/.output/public/_nuxt/{DZ3Vfcpz.js → AbmKWFQQ.js} +1 -1
- package/.output/public/_nuxt/B3obW6cw.js +3 -0
- package/.output/public/_nuxt/{QmMoMxLM.js → B7FTvFWq.js} +3 -3
- package/.output/public/_nuxt/{DXbPFI1d.js → B8zkOmwo.js} +1 -1
- package/.output/public/_nuxt/B96M2gdj.js +1 -0
- package/.output/public/_nuxt/{BFP6M-20.js → B99fbi73.js} +1 -1
- package/.output/public/_nuxt/{DD5HpaW9.js → B9OLmp0f.js} +1 -1
- package/.output/public/_nuxt/BKkF4pPD.js +1 -0
- package/.output/public/_nuxt/BT3wGCTI.js +1 -0
- package/.output/public/_nuxt/BUa0V0Ly.js +1 -0
- package/.output/public/_nuxt/BUkim3TM.js +1 -0
- package/.output/public/_nuxt/BVc14Ncz.js +4 -0
- package/.output/public/_nuxt/BY0HxR3t.js +17 -0
- package/.output/public/_nuxt/B_xAMWQS.js +2 -0
- package/.output/public/_nuxt/BdQoBaOv.js +1 -0
- package/.output/public/_nuxt/{Cng9gj7q.js → BdfhYr-u.js} +1 -1
- package/.output/public/_nuxt/BgRu_3tT.js +1 -0
- package/.output/public/_nuxt/{BBK2-Krn.js → BiO7RBWb.js} +2 -2
- package/.output/public/_nuxt/BicAJ6U8.js +1 -0
- package/.output/public/_nuxt/BjaRappk.js +1 -0
- package/.output/public/_nuxt/Bm62iDV5.js +1 -0
- package/.output/public/_nuxt/{C9YzQCiq.js → BmUfSNMV.js} +1 -1
- package/.output/public/_nuxt/Bnxf8nbZ.js +1 -0
- package/.output/public/_nuxt/{CsUoYK75.js → Bow4tTR0.js} +1 -1
- package/.output/public/_nuxt/{B2oUeBbA.js → BrQEE053.js} +1 -1
- package/.output/public/_nuxt/BzRRzmwm.js +1 -0
- package/.output/public/_nuxt/{CN1mJlvD.js → C0_yH0N7.js} +1 -1
- package/.output/public/_nuxt/C1gTN4Q8.js +1 -0
- package/.output/public/_nuxt/{CNMoZYMv.js → C2hkrSey.js} +1 -1
- package/.output/public/_nuxt/{rTvJTef_.js → C8e1EbJI.js} +1 -1
- package/.output/public/_nuxt/CA9B2HE5.js +1 -0
- package/.output/public/_nuxt/{oFM1KLWA.js → CAAwCT7H.js} +1 -1
- package/.output/public/_nuxt/{qpI-_f9Q.js → CAvY22RE.js} +1 -1
- package/.output/public/_nuxt/{BLIRKrbM.js → CEfS4-oS.js} +4 -4
- package/.output/public/_nuxt/CIoSMkpp.js +1 -0
- package/.output/public/_nuxt/{hH1UFE3Z.js → CIrFl3MW.js} +1 -1
- package/.output/public/_nuxt/CJFtzlQ4.js +1 -0
- package/.output/public/_nuxt/{hgHc4teu.js → CNyV9YpI.js} +1 -1
- package/.output/public/_nuxt/CSJ-eOQM.js +1 -0
- package/.output/public/_nuxt/CTU1mrhq.js +1 -0
- package/.output/public/_nuxt/CXEH9OPk.js +1 -0
- package/.output/public/_nuxt/CahpB9Z2.js +5 -0
- package/.output/public/_nuxt/{C8OCrfDP.js → Cbh--1MW.js} +1 -1
- package/.output/public/_nuxt/CeG9pBAD.js +1 -0
- package/.output/public/_nuxt/{DBtBvrYc.js → CeW8v31b.js} +1 -1
- package/.output/public/_nuxt/{DZUgX70W.js → CjPfj7ya.js} +1 -1
- package/.output/public/_nuxt/Cnsmicv2.js +79 -0
- package/.output/public/_nuxt/CsLojMwR.js +1 -0
- package/.output/public/_nuxt/{BXY_PWcx.js → Cus22Ud3.js} +2 -2
- package/.output/public/_nuxt/{4TxgDGVa.js → CwGWJbiy.js} +1 -1
- package/.output/public/_nuxt/Cx6gc2VW.js +1 -0
- package/.output/public/_nuxt/{B1X__ilH.js → CxyAzHr3.js} +1 -1
- package/.output/public/_nuxt/{BJtlcTrb.js → CzAPFPpL.js} +1 -1
- package/.output/public/_nuxt/D--H4jLI.js +1 -0
- package/.output/public/_nuxt/D-c8ZSws.js +1 -0
- package/.output/public/_nuxt/D1POo6S4.js +10 -0
- package/.output/public/_nuxt/D5tke0B5.js +1 -0
- package/.output/public/_nuxt/D8nkF-OO.js +3 -0
- package/.output/public/_nuxt/DA25RkyK.js +1 -0
- package/.output/public/_nuxt/{DZ1zNBVM.js → DIB-5fUJ.js} +1 -1
- package/.output/public/_nuxt/DJmoLeVt.js +1 -0
- package/.output/public/_nuxt/DJxlKFGb.js +1 -0
- package/.output/public/_nuxt/DMec-OLo.js +1 -0
- package/.output/public/_nuxt/DPCxhHri.js +1 -0
- package/.output/public/_nuxt/{By4YL7mx.js → DSqHUrvO.js} +1 -1
- package/.output/public/_nuxt/DabzhQB1.js +1 -0
- package/.output/public/_nuxt/{D5oNv2cB.js → DdwHkKfV.js} +1 -1
- package/.output/public/_nuxt/{CfOLBbW9.js → DeY2JkR2.js} +1 -1
- package/.output/public/_nuxt/{CPLJeOCb.js → DfgOx_ou.js} +1 -1
- package/.output/public/_nuxt/DmkUdSS4.js +1 -0
- package/.output/public/_nuxt/{CUvGJXY3.js → DoIREDVb.js} +1 -1
- package/.output/public/_nuxt/DpZ1r1HA.js +1 -0
- package/.output/public/_nuxt/{BOCwBVnz.js → Dpd16JVI.js} +1 -1
- package/.output/public/_nuxt/DqcKngf3.js +1 -0
- package/.output/public/_nuxt/{xqiPI_FQ.js → DrfE8IY0.js} +1 -1
- package/.output/public/_nuxt/{BeFDVhpA.js → DsesNydr.js} +1 -1
- package/.output/public/_nuxt/{D0cnIs93.js → DtHJgCS8.js} +1 -1
- package/.output/public/_nuxt/Dtd4rC58.js +9 -0
- package/.output/public/_nuxt/Du2W7Jne.js +254 -0
- package/.output/public/_nuxt/DuwtTfO8.js +2 -0
- package/.output/public/_nuxt/Dy-TJ0Mt.js +1 -0
- package/.output/public/_nuxt/{BlnwU1OO.js → Dy86h-7P.js} +1 -1
- package/.output/public/_nuxt/{B-IcwqZ2.js → Dyeqn3aG.js} +1 -1
- package/.output/public/_nuxt/{BlA8mIS-.js → FaFoMVKo.js} +1 -1
- package/.output/public/_nuxt/GPNI1ffD.js +4 -0
- package/.output/public/_nuxt/{DWowvnwc.js → H94BMf3L.js} +1 -1
- package/.output/public/_nuxt/HPNQD6v3.js +1 -0
- package/.output/public/_nuxt/HXadJrHu.js +2 -0
- package/.output/public/_nuxt/KyA_4Ks-.js +1 -0
- package/.output/public/_nuxt/{e7zD3uJ0.js → L3kAWB2a.js} +1 -1
- package/.output/public/_nuxt/McL25vkx.js +34 -0
- package/.output/public/_nuxt/Nn93e_Mz.js +1 -0
- package/.output/public/_nuxt/TagBadge.By1E6r4y.css +1 -0
- package/.output/public/_nuxt/UdR3DBPS.js +1 -0
- package/.output/public/_nuxt/Und3xXFc.js +5 -0
- package/.output/public/_nuxt/_mj6CfPa.js +1 -0
- package/.output/public/_nuxt/b-GYfcrQ.js +1 -0
- package/.output/public/_nuxt/bLcjFslv.js +1 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/e659b3e1-0e61-4971-940e-10063f9f4763.json +1 -0
- package/.output/public/_nuxt/entry.DmptwB51.css +1 -0
- package/.output/public/_nuxt/{wHnZ9OaL.js → hC_z4G8p.js} +1 -1
- package/.output/public/_nuxt/{DZOS7Fh7.js → hNh4CIL0.js} +1 -1
- package/.output/public/_nuxt/{kjYMoWWx.js → l5WKbU4h.js} +3 -3
- package/.output/public/_nuxt/oAClCn_h.js +1 -0
- package/.output/public/_nuxt/{gnCL8GjZ.js → pQqGiNch.js} +1 -1
- package/.output/public/_nuxt/ryMzSDUj.js +2 -0
- package/.output/public/demo/seed.version.json +2 -2
- package/.output/server/chunks/_/ai-prompt-preview.mjs +38 -0
- package/.output/server/chunks/_/ai-prompt-preview.mjs.map +1 -0
- package/.output/server/chunks/_/collect.mjs +122 -0
- package/.output/server/chunks/_/collect.mjs.map +1 -0
- package/.output/server/chunks/_/markers.mjs +1 -1
- package/.output/server/chunks/_/quarantine.mjs +112 -0
- package/.output/server/chunks/_/quarantine.mjs.map +1 -0
- package/.output/server/chunks/_/users.mjs +1 -1
- package/.output/server/chunks/build/{Alert-Bp1Wz_sq.mjs → Alert-C4xq8lao.mjs} +2 -2
- package/.output/server/chunks/build/Alert-C4xq8lao.mjs.map +1 -0
- package/.output/server/chunks/build/{Breadcrumb-C9ZPTLym.mjs → Breadcrumb-Ak2Lg3oM.mjs} +3 -3
- package/.output/server/chunks/build/Breadcrumb-Ak2Lg3oM.mjs.map +1 -0
- package/.output/server/chunks/build/{BreadcrumbNav-C3y42Vun.mjs → BreadcrumbNav-DO7I_z-n.mjs} +3 -3
- package/.output/server/chunks/build/BreadcrumbNav-DO7I_z-n.mjs.map +1 -0
- package/.output/server/chunks/build/{BrowserBadge-DNCp9pF-.mjs → BrowserBadge-MFvBwxmD.mjs} +67 -7
- package/.output/server/chunks/build/BrowserBadge-MFvBwxmD.mjs.map +1 -0
- package/.output/server/chunks/build/{ChartCard-Fr557IbV.mjs → ChartCard-Y1UKwMsf.mjs} +2 -2
- package/.output/server/chunks/build/ChartCard-Y1UKwMsf.mjs.map +1 -0
- package/.output/server/chunks/build/{Checkbox-cVOSIY93.mjs → Checkbox-4Q5d0fa0.mjs} +8 -8
- package/.output/server/chunks/build/Checkbox-4Q5d0fa0.mjs.map +1 -0
- package/.output/server/chunks/build/CiEnvCard-DB5DvBh1.mjs +1492 -0
- package/.output/server/chunks/build/CiEnvCard-DB5DvBh1.mjs.map +1 -0
- package/.output/server/chunks/build/{CodeBlock-BGwNmJ8J.mjs → CodeBlock-BgE-NSmE.mjs} +7 -22
- package/.output/server/chunks/build/CodeBlock-BgE-NSmE.mjs.map +1 -0
- package/.output/server/chunks/build/{DashboardNavbar-Bdp-OwTN.mjs → DashboardNavbar-BHmMSPX7.mjs} +3 -3
- package/.output/server/chunks/build/DashboardNavbar-BHmMSPX7.mjs.map +1 -0
- package/.output/server/chunks/build/{DashboardSidebarToggle-Ji6ADuqF.mjs → DashboardSidebarToggle-DCTnHiIv.mjs} +3 -3
- package/.output/server/chunks/build/DashboardSidebarToggle-DCTnHiIv.mjs.map +1 -0
- package/.output/server/chunks/build/{DataLocationCard-D6xSOrme.mjs → DataLocationCard-B_YHdzSz.mjs} +3 -3
- package/.output/server/chunks/build/DataLocationCard-B_YHdzSz.mjs.map +1 -0
- package/.output/server/chunks/build/{DiagnosisPanel-DV1xwGu4.mjs → DiagnosisPanel-CALyEmcJ.mjs} +17 -528
- package/.output/server/chunks/build/DiagnosisPanel-CALyEmcJ.mjs.map +1 -0
- package/.output/server/chunks/build/DurationValue-D20oGbnc.mjs +43 -0
- package/.output/server/chunks/build/DurationValue-D20oGbnc.mjs.map +1 -0
- package/.output/server/chunks/build/{EmptyState-DV3oT_xz.mjs → EmptyState-DC2q_7TD.mjs} +3 -3
- package/.output/server/chunks/build/EmptyState-DC2q_7TD.mjs.map +1 -0
- package/.output/server/chunks/build/{EntityLinks-DeOP13Kr.mjs → EntityLinks-BBHWssHH.mjs} +6 -6
- package/.output/server/chunks/build/EntityLinks-BBHWssHH.mjs.map +1 -0
- package/.output/server/chunks/build/{EnvManagedBadge-Qpn58Nmr.mjs → EnvManagedBadge-UwD2b9v2.mjs} +3 -3
- package/.output/server/chunks/build/EnvManagedBadge-UwD2b9v2.mjs.map +1 -0
- package/.output/server/chunks/build/{FormField-B-GSn_VR.mjs → FormField-B0HKsdMd.mjs} +3 -3
- package/.output/server/chunks/build/FormField-B0HKsdMd.mjs.map +1 -0
- package/.output/server/chunks/build/{HelpHint-YEMWtKu1.mjs → HelpHint-DrcIv-Oj.mjs} +53 -6
- package/.output/server/chunks/build/HelpHint-DrcIv-Oj.mjs.map +1 -0
- package/.output/server/chunks/build/{Label-DBvbHd3A.mjs → Label-DYDR1Oeh.mjs} +2 -2
- package/.output/server/chunks/build/Label-DYDR1Oeh.mjs.map +1 -0
- package/.output/server/chunks/build/{MiniRunBars-C3HG-EYm.mjs → MiniRunBars-CZMugDrh.mjs} +2 -2
- package/.output/server/chunks/build/MiniRunBars-CZMugDrh.mjs.map +1 -0
- package/.output/server/chunks/build/{Modal-CfA78Hm1.mjs → Modal-pSDlXzT3.mjs} +2 -2
- package/.output/server/chunks/build/Modal-pSDlXzT3.mjs.map +1 -0
- package/.output/server/chunks/build/{OpenInIdeLink-B92wosXu.mjs → OpenInIdeLink-CQWKKChd.mjs} +6 -6
- package/.output/server/chunks/build/{OpenInIdeLink-B92wosXu.mjs.map → OpenInIdeLink-CQWKKChd.mjs.map} +1 -1
- package/.output/server/chunks/build/{ProjectTestCasesTable-9Ia825h8.mjs → ProjectTestCasesTable-Bo61P5K1.mjs} +120 -45
- package/.output/server/chunks/build/ProjectTestCasesTable-Bo61P5K1.mjs.map +1 -0
- package/.output/server/chunks/build/{RovingFocusItem-CxhHdNGo.mjs → RovingFocusItem--OEHI2P3.mjs} +2 -2
- package/.output/server/chunks/build/RovingFocusItem--OEHI2P3.mjs.map +1 -0
- package/.output/server/chunks/build/{RunReports-BpJqLHY9.mjs → RunReports-DFLv51TX.mjs} +8 -6
- package/.output/server/chunks/build/RunReports-DFLv51TX.mjs.map +1 -0
- package/.output/server/chunks/build/{RunStatusBadge-BhmJ_RKM.mjs → RunStatusBadge-FfGb6bkW.mjs} +3 -2
- package/.output/server/chunks/build/RunStatusBadge-FfGb6bkW.mjs.map +1 -0
- package/.output/server/chunks/build/{SectionCard-COd9TuDq.mjs → SectionCard-CN-v0FZ_.mjs} +2 -2
- package/.output/server/chunks/build/SectionCard-CN-v0FZ_.mjs.map +1 -0
- package/.output/server/chunks/build/{Select-ppPz926C.mjs → Select-5DK9frQ7.mjs} +4 -4
- package/.output/server/chunks/build/Select-5DK9frQ7.mjs.map +1 -0
- package/.output/server/chunks/build/{SelectMenu-799c_Ils.mjs → SelectMenu-D-2FSqBU.mjs} +939 -7
- package/.output/server/chunks/build/{SelectMenu-799c_Ils.mjs.map → SelectMenu-D-2FSqBU.mjs.map} +1 -1
- package/.output/server/chunks/build/{Separator-CxZdx8kw.mjs → Separator-CR4WcEKD.mjs} +2 -2
- package/.output/server/chunks/build/Separator-CR4WcEKD.mjs.map +1 -0
- package/.output/server/chunks/build/{SettingsField-DDD4oqys.mjs → SettingsField-BZfx4ma1.mjs} +6 -6
- package/.output/server/chunks/build/SettingsField-BZfx4ma1.mjs.map +1 -0
- package/.output/server/chunks/build/{Slideover-B95Rj237.mjs → Slideover-D270EZZD.mjs} +3 -3
- package/.output/server/chunks/build/Slideover-D270EZZD.mjs.map +1 -0
- package/.output/server/chunks/build/{Switch-xQQ3_ME1.mjs → Switch-B5Fp8ULt.mjs} +5 -5
- package/.output/server/chunks/build/Switch-B5Fp8ULt.mjs.map +1 -0
- package/.output/server/chunks/build/{Table-CPhhVzDv.mjs → Table-BRk04Hd2.mjs} +3 -3
- package/.output/server/chunks/build/Table-BRk04Hd2.mjs.map +1 -0
- package/.output/server/chunks/build/{Tabs-BV9XqjoO.mjs → Tabs-BkSOnbaB.mjs} +3 -3
- package/.output/server/chunks/build/Tabs-BkSOnbaB.mjs.map +1 -0
- package/.output/server/chunks/build/TagBadge-DwzoFCBb.mjs +31 -0
- package/.output/server/chunks/build/TagBadge-DwzoFCBb.mjs.map +1 -0
- package/.output/server/chunks/build/TagBadge-styles.jhuZ4NjP.mjs +8 -0
- package/.output/server/chunks/build/TagBadge-styles.jhuZ4NjP.mjs.map +1 -0
- package/.output/server/chunks/build/{TestCaseHistoryChart-DMb-xSJa.mjs → TestCaseHistoryChart-CSi64vVA.mjs} +6 -6
- package/.output/server/chunks/build/TestCaseHistoryChart-CSi64vVA.mjs.map +1 -0
- package/.output/server/chunks/build/TestMetaBadges-D5_yUtIP.mjs +200 -0
- package/.output/server/chunks/build/TestMetaBadges-D5_yUtIP.mjs.map +1 -0
- package/.output/server/chunks/build/{TestStatusBar-CEzt76wk.mjs → TestStatusBar-DX3EhlyP.mjs} +15 -15
- package/.output/server/chunks/build/TestStatusBar-DX3EhlyP.mjs.map +1 -0
- package/.output/server/chunks/build/{Textarea-DrrqQUVG.mjs → Textarea-Dv2-lOvW.mjs} +2 -2
- package/.output/server/chunks/build/Textarea-Dv2-lOvW.mjs.map +1 -0
- package/.output/server/chunks/build/{Tooltip-7vwuDPrZ.mjs → Tooltip-Dv4htNP6.mjs} +3 -3
- package/.output/server/chunks/build/Tooltip-Dv4htNP6.mjs.map +1 -0
- package/.output/server/chunks/build/{VisuallyHiddenInput-C9eJVpPW.mjs → VisuallyHiddenInput-BHvzNumK.mjs} +2 -2
- package/.output/server/chunks/build/VisuallyHiddenInput-BHvzNumK.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-CE0Gso6i.mjs → _id_-BdG37K7s.mjs} +91 -42
- package/.output/server/chunks/build/_id_-BdG37K7s.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-bWcP2xFl.mjs → _id_-BdJs7BJZ.mjs} +719 -448
- package/.output/server/chunks/build/_id_-BdJs7BJZ.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-B2yirIuA.mjs → _id_-BxA6IgWr.mjs} +831 -368
- package/.output/server/chunks/build/_id_-BxA6IgWr.mjs.map +1 -0
- package/.output/server/chunks/build/{_id_-B4V5fop6.mjs → _id_-C_uSBiyU.mjs} +296 -60
- package/.output/server/chunks/build/{_id_-B4V5fop6.mjs.map → _id_-C_uSBiyU.mjs.map} +1 -1
- package/.output/server/chunks/build/{about-CoJjvUwM.mjs → about-BE0UV-8-.mjs} +456 -61
- package/.output/server/chunks/build/about-BE0UV-8-.mjs.map +1 -0
- package/.output/server/chunks/build/{account-Cn-eZqXM.mjs → account-DAfvaD-F.mjs} +21 -9
- package/.output/server/chunks/build/account-DAfvaD-F.mjs.map +1 -0
- package/.output/server/chunks/build/{ai-7jdaPOmj.mjs → ai-Cn05ch0u.mjs} +45 -23
- package/.output/server/chunks/build/{ai-7jdaPOmj.mjs.map → ai-Cn05ch0u.mjs.map} +1 -1
- package/.output/server/chunks/build/{analytics-B276WPeU.mjs → analytics-Bo_B_jko.mjs} +66 -41
- package/.output/server/chunks/build/analytics-Bo_B_jko.mjs.map +1 -0
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/compare-RxHSOdsO.mjs +12 -0
- package/.output/server/chunks/build/{db.client-aHcD0wyX.mjs → db.client-CQoVTYB9.mjs} +83 -5
- package/.output/server/chunks/build/db.client-CQoVTYB9.mjs.map +1 -0
- package/.output/server/chunks/build/{default-BSzdkM_L.mjs → default-CbNHaFsy.mjs} +622 -78
- package/.output/server/chunks/build/default-CbNHaFsy.mjs.map +1 -0
- package/.output/server/chunks/build/{docs-BN_x1OW3.mjs → docs-B_llWMxx.mjs} +30 -49
- package/.output/server/chunks/build/{docs-BN_x1OW3.mjs.map → docs-B_llWMxx.mjs.map} +1 -1
- package/.output/server/chunks/build/{edit-C9Z7oZeu.mjs → edit-J0asTFg8.mjs} +29 -18
- package/.output/server/chunks/build/edit-J0asTFg8.mjs.map +1 -0
- package/.output/server/chunks/build/{fetch-8kznMtBM.mjs → fetch-B4FwBOzu.mjs} +3 -3
- package/.output/server/chunks/build/fetch-B4FwBOzu.mjs.map +1 -0
- package/.output/server/chunks/build/{forgot-password-BqPF4Rxs.mjs → forgot-password-CC__1OnV.mjs} +17 -5
- package/.output/server/chunks/build/forgot-password-CC__1OnV.mjs.map +1 -0
- package/.output/server/chunks/build/{help-content-DmFnuhNu.mjs → help-content-C876a9WD.mjs} +37 -8
- package/.output/server/chunks/build/help-content-C876a9WD.mjs.map +1 -0
- package/.output/server/chunks/build/import-CS9oylTN.mjs +1021 -0
- package/.output/server/chunks/build/import-CS9oylTN.mjs.map +1 -0
- package/.output/server/chunks/build/{index-CULN3-en.mjs → index-CU2nZhAa.mjs} +113 -42
- package/.output/server/chunks/build/index-CU2nZhAa.mjs.map +1 -0
- package/.output/server/chunks/build/{index-BR9hw6qk.mjs → index-DE45ycdZ.mjs} +51 -31
- package/.output/server/chunks/build/index-DE45ycdZ.mjs.map +1 -0
- package/.output/server/chunks/build/{index-BK9PTRpd.mjs → index-e9skCi-V.mjs} +85 -69
- package/.output/server/chunks/build/{index-BK9PTRpd.mjs.map → index-e9skCi-V.mjs.map} +1 -1
- package/.output/server/chunks/build/{index-DVUtBexc.mjs → index-hGHlmyxj.mjs} +1520 -288
- package/.output/server/chunks/build/index-hGHlmyxj.mjs.map +1 -0
- package/.output/server/chunks/build/{index-Ba-Fifra.mjs → index-tR6owKzj.mjs} +18 -6
- package/.output/server/chunks/build/index-tR6owKzj.mjs.map +1 -0
- package/.output/server/chunks/build/{isValueEqualOrExist-DBZjbD_3.mjs → isValueEqualOrExist-D2qw9YEr.mjs} +3 -3
- package/.output/server/chunks/build/isValueEqualOrExist-D2qw9YEr.mjs.map +1 -0
- package/.output/server/chunks/build/{login-D2XZDuek.mjs → login-Da4u1IlW.mjs} +19 -7
- package/.output/server/chunks/build/login-Da4u1IlW.mjs.map +1 -0
- package/.output/server/chunks/build/{mcp-_o6cMS6m.mjs → mcp-uhVCCwQM.mjs} +359 -24
- package/.output/server/chunks/build/mcp-uhVCCwQM.mjs.map +1 -0
- package/.output/server/chunks/build/{notifications-Dzm9c0u_.mjs → notifications-fx_qnKGA.mjs} +27 -21
- package/.output/server/chunks/build/notifications-fx_qnKGA.mjs.map +1 -0
- package/.output/server/chunks/build/pr-feedback-X6-70iF0.mjs +368 -0
- package/.output/server/chunks/build/pr-feedback-X6-70iF0.mjs.map +1 -0
- package/.output/server/chunks/build/{reset-password-gpFzIEDj.mjs → reset-password-BmrUS4ZD.mjs} +17 -5
- package/.output/server/chunks/build/reset-password-BmrUS4ZD.mjs.map +1 -0
- package/.output/server/chunks/build/server.mjs +238 -36
- package/.output/server/chunks/build/{settings-pNyPBXVa.mjs → settings-CCYe7rsc.mjs} +23 -10
- package/.output/server/chunks/build/settings-CCYe7rsc.mjs.map +1 -0
- package/.output/server/chunks/build/{settings-metadata-B0wo5R-W.mjs → settings-metadata-DrEqWcW-.mjs} +11 -2
- package/.output/server/chunks/build/settings-metadata-DrEqWcW-.mjs.map +1 -0
- package/.output/server/chunks/build/{storage-XelzuyPy.mjs → storage-CJEmviCD.mjs} +41 -31
- package/.output/server/chunks/build/storage-CJEmviCD.mjs.map +1 -0
- package/.output/server/chunks/build/styles.mjs +1 -0
- package/.output/server/chunks/build/{tags-DrCQ7QSw.mjs → tags-DauTe_F-.mjs} +22 -10
- package/.output/server/chunks/build/tags-DauTe_F-.mjs.map +1 -0
- package/.output/server/chunks/build/{test-cases-pmOxi-AN.mjs → test-cases-thBbAykw.mjs} +38 -24
- package/.output/server/chunks/build/test-cases-thBbAykw.mjs.map +1 -0
- package/.output/server/chunks/build/{timeout-hygiene-CNs71Iah.mjs → timeout-hygiene-CbnSaVbK.mjs} +20 -8
- package/.output/server/chunks/build/timeout-hygiene-CbnSaVbK.mjs.map +1 -0
- package/.output/server/chunks/build/{useAiStatus-ZO987RY7.mjs → useAiStatus-CxjMmDDY.mjs} +89 -89
- package/.output/server/chunks/build/useAiStatus-CxjMmDDY.mjs.map +1 -0
- package/.output/server/chunks/build/{useCopy-BQQKcwlq.mjs → useCopy-CeKWgHyT.mjs} +2 -2
- package/.output/server/chunks/build/useCopy-CeKWgHyT.mjs.map +1 -0
- package/.output/server/chunks/build/{PageStateCard-Bwee6JTk.mjs → useCopyRich-RJKhWoyj.mjs} +472 -63
- package/.output/server/chunks/build/useCopyRich-RJKhWoyj.mjs.map +1 -0
- package/.output/server/chunks/build/useDesktopDownload-BepjqxOt.mjs +46 -0
- package/.output/server/chunks/build/useDesktopDownload-BepjqxOt.mjs.map +1 -0
- package/.output/server/chunks/build/{useFormControl-BLpq1s4O.mjs → useFormControl-CZ9So7iX.mjs} +2 -2
- package/.output/server/chunks/build/useFormControl-CZ9So7iX.mjs.map +1 -0
- package/.output/server/chunks/build/{useOpenInIde-kMZ7Jw5c.mjs → useOpenInIde-BbTnPhFA.mjs} +3 -3
- package/.output/server/chunks/build/useOpenInIde-BbTnPhFA.mjs.map +1 -0
- package/.output/server/chunks/build/{useSettingsNav-NjI2seBy.mjs → useSettingsNav-DnQKacz8.mjs} +6 -6
- package/.output/server/chunks/build/useSettingsNav-DnQKacz8.mjs.map +1 -0
- package/.output/server/chunks/build/useTauri-Kf3HE_42.mjs +11 -0
- package/.output/server/chunks/build/useTauri-Kf3HE_42.mjs.map +1 -0
- package/.output/server/chunks/build/{useTreeViewCookie-DVYpxW-p.mjs → useTreeViewCookie-CQjQdTkH.mjs} +2 -2
- package/.output/server/chunks/build/useTreeViewCookie-CQjQdTkH.mjs.map +1 -0
- package/.output/server/chunks/build/{users-NmAUZs3i.mjs → users-CTUqXyGh.mjs} +22 -10
- package/.output/server/chunks/build/users-CTUqXyGh.mjs.map +1 -0
- package/.output/server/chunks/build/{wasted-time-CguAF9zc.mjs → wasted-time-BNTPIyrC.mjs} +26 -14
- package/.output/server/chunks/build/wasted-time-BNTPIyrC.mjs.map +1 -0
- package/.output/server/chunks/nitro/nitro.mjs +6438 -1964
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/chunks/routes/__piwi/session.get.mjs +13 -1
- package/.output/server/chunks/routes/__piwi/session.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs +12 -0
- package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/admin/stats.get.mjs +12 -0
- package/.output/server/chunks/routes/api/admin/stats.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/ai/status.get.mjs +12 -0
- package/.output/server/chunks/routes/api/ai/status.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs +12 -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 +12 -0
- 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 +12 -0
- package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/login.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/login.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/logout.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/logout.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/me.get.mjs +12 -0
- 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 +12 -0
- 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 +12 -0
- 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 +12 -0
- 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 +12 -0
- 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 +12 -0
- 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 +12 -0
- package/.output/server/chunks/routes/api/auth/setup.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/setup.post.mjs +12 -0
- package/.output/server/chunks/routes/api/auth/setup.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/auth/verify-email.get.mjs +12 -0
- 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 +12 -0
- package/.output/server/chunks/routes/api/channels/_id/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/channels/_id_.delete.mjs +12 -0
- 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 +12 -0
- 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 +12 -0
- 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 +88 -0
- package/.output/server/chunks/routes/api/desktop/import-local.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs +12 -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 +13 -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 +13 -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 +13 -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 +13 -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 +24 -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 +13 -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 +13 -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 +13 -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 +13 -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 +64 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs +13 -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 +56 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs +13 -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 +13 -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 +13 -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 +13 -32
- package/.output/server/chunks/routes/api/files/_...path_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/health.get.mjs +13 -1
- package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +12 -0
- package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get2.mjs +13 -1
- package/.output/server/chunks/routes/api/index.get2.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get3.mjs +13 -1
- package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get4.mjs +13 -1
- package/.output/server/chunks/routes/api/index.get4.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get5.mjs +12 -0
- package/.output/server/chunks/routes/api/index.get5.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post.mjs +12 -0
- package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post2.mjs +13 -1
- package/.output/server/chunks/routes/api/index.post2.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post3.mjs +13 -1
- package/.output/server/chunks/routes/api/index.post3.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post4.mjs +13 -1
- package/.output/server/chunks/routes/api/index.post4.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post5.mjs +13 -1
- package/.output/server/chunks/routes/api/index.post5.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post6.mjs +12 -0
- package/.output/server/chunks/routes/api/index.post6.mjs.map +1 -1
- package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs +13 -1
- package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/links/_id_.delete.mjs +13 -1
- package/.output/server/chunks/routes/api/links/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/links/_id_.patch.mjs +13 -1
- package/.output/server/chunks/routes/api/links/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/markers/_id_.delete.mjs +13 -1
- package/.output/server/chunks/routes/api/markers/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/markers/_id_.put.mjs +13 -1
- package/.output/server/chunks/routes/api/markers/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/notifications/stream.get.mjs +13 -1
- 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 +13 -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 +13 -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 +13 -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 +22 -2
- 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 +13 -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 +13 -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 +13 -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 +13 -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 +13 -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 +13 -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 +58 -0
- package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs.map +1 -0
- package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs +57 -0
- package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs +72 -0
- package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs +13 -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 +13 -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 +13 -1
- package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs +13 -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 +13 -1
- package/.output/server/chunks/routes/api/projects/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/_id_.put.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/_id_.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/menu.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/menu.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects/overview.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects/overview.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/projects.get.mjs +13 -1
- package/.output/server/chunks/routes/api/projects.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/search.get.mjs +13 -1
- package/.output/server/chunks/routes/api/search.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs +13 -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 +13 -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 +12 -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 +13 -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 +13 -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 +13 -1
- package/.output/server/chunks/routes/api/settings/ai.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/ai.put.mjs +13 -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 +57 -0
- package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs +63 -0
- package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs.map +1 -0
- package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs +12 -0
- package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/settings/smtp.get.mjs +13 -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 +13 -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 +13 -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 +13 -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 +13 -1
- package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs.map +1 -1
- package/.output/server/chunks/routes/api/stream.get.mjs +13 -1
- package/.output/server/chunks/routes/api/stream.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs +13 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs +13 -1
- package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tags/_id_.delete.mjs +13 -1
- package/.output/server/chunks/routes/api/tags/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tags/_id_.put.mjs +13 -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 +13 -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 +13 -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 +13 -1
- package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs +13 -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 +25 -3
- 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 +13 -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 +60 -0
- package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs.map +1 -0
- package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs +13 -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 +13 -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 +13 -1
- 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 +13 -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 +17 -3
- 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 +13 -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 +13 -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 +13 -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 +13 -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 +13 -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 +13 -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 +13 -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 +13 -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 +13 -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 +15 -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 +196 -0
- package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs +13 -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 +13 -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 +13 -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 +13 -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 +13 -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 +13 -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 +13 -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 +13 -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 +13 -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 +77 -0
- package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/test-runs/import.post.mjs +77 -0
- package/.output/server/chunks/routes/api/test-runs/import.post.mjs.map +1 -0
- package/.output/server/chunks/routes/api/test-runs/recent.get.mjs +13 -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 +13 -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 +13 -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 +32 -15
- 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 +21 -6
- package/.output/server/chunks/routes/api/test-runs/upload.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs +156 -3
- package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/traces/check.post.mjs +13 -1
- 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 +12 -0
- 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 +12 -0
- 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 +13 -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 +13 -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 +13 -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 +13 -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 +12 -0
- package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/users/_id_.patch.mjs +12 -0
- package/.output/server/chunks/routes/api/users/_id_.patch.mjs.map +1 -1
- package/.output/server/chunks/routes/api/version.get.mjs +13 -1
- package/.output/server/chunks/routes/api/version.get.mjs.map +1 -1
- package/.output/server/chunks/routes/mcp.post.mjs +13 -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/tasks/sweep.mjs +12 -0
- package/.output/server/chunks/tasks/sweep.mjs.map +1 -1
- package/.output/server/chunks/tasks/sweep2.mjs +12 -0
- package/.output/server/chunks/tasks/sweep2.mjs.map +1 -1
- package/.output/server/database/migrations/0039_remarkable_jean_grey.sql +2 -0
- package/.output/server/database/migrations/0040_organic_phalanx.sql +8 -0
- package/.output/server/database/migrations/0041_tense_gravity.sql +5 -0
- package/.output/server/database/migrations/0042_burly_hemingway.sql +19 -0
- package/.output/server/database/migrations/meta/0039_snapshot.json +3403 -0
- package/.output/server/database/migrations/meta/0040_snapshot.json +3457 -0
- package/.output/server/database/migrations/meta/0041_snapshot.json +3492 -0
- package/.output/server/database/migrations/meta/0042_snapshot.json +3618 -0
- package/.output/server/database/migrations/meta/_journal.json +28 -0
- package/.output/server/database/migrations-pg/0040_lazy_layla_miller.sql +2 -0
- package/.output/server/database/migrations-pg/0041_light_screwball.sql +8 -0
- package/.output/server/database/migrations-pg/0042_serious_layla_miller.sql +5 -0
- package/.output/server/database/migrations-pg/0043_wonderful_mordo.sql +19 -0
- package/.output/server/database/migrations-pg/meta/0040_snapshot.json +4060 -0
- package/.output/server/database/migrations-pg/meta/0041_snapshot.json +4123 -0
- package/.output/server/database/migrations-pg/meta/0042_snapshot.json +4153 -0
- package/.output/server/database/migrations-pg/meta/0043_snapshot.json +4308 -0
- package/.output/server/database/migrations-pg/meta/_journal.json +28 -0
- package/.output/server/index.mjs +13 -1
- package/.output/server/index.mjs.map +1 -1
- package/.output/server/node_modules/fflate/esm/index.mjs +2710 -0
- package/.output/server/node_modules/fflate/package.json +128 -0
- package/.output/server/node_modules/highlight.js/es/languages/yaml.js +213 -0
- package/.output/server/node_modules/marked/lib/marked.esm.js +72 -0
- package/.output/server/node_modules/marked/package.json +103 -0
- package/.output/server/package.json +3 -1
- package/package.json +2 -2
- package/.output/public/_nuxt/9-wVZMur.js +0 -4
- package/.output/public/_nuxt/B-5GukRk.js +0 -1
- package/.output/public/_nuxt/B1G3GGhQ.js +0 -1
- package/.output/public/_nuxt/B1zMFx24.js +0 -1
- package/.output/public/_nuxt/B4jvLMfS.js +0 -1
- package/.output/public/_nuxt/BBnX5xw4.js +0 -2
- package/.output/public/_nuxt/BHpUiv6j.js +0 -3
- package/.output/public/_nuxt/BLOUs6AE.js +0 -5
- package/.output/public/_nuxt/BT6p4Pgt.js +0 -2
- package/.output/public/_nuxt/BUXSUkJ_.js +0 -1
- package/.output/public/_nuxt/BVf6Yx9V.js +0 -26
- package/.output/public/_nuxt/BbS6Bwby.js +0 -1
- package/.output/public/_nuxt/Bd3HqPMF.js +0 -1
- package/.output/public/_nuxt/BeKvLsja.js +0 -2
- package/.output/public/_nuxt/BeUm5UNV.js +0 -1
- package/.output/public/_nuxt/BfV444H3.js +0 -3
- package/.output/public/_nuxt/BjKamgHq.js +0 -1
- package/.output/public/_nuxt/BoJdjCVl.js +0 -4
- package/.output/public/_nuxt/BreO2PiA.js +0 -1
- package/.output/public/_nuxt/BvIDC_R-.js +0 -1
- package/.output/public/_nuxt/ByuJWADR.js +0 -34
- package/.output/public/_nuxt/C1dyLp_j.js +0 -1
- package/.output/public/_nuxt/CAUgpKsF.js +0 -2
- package/.output/public/_nuxt/CL9-VLTJ.js +0 -1
- package/.output/public/_nuxt/CazDIG_m.js +0 -1
- package/.output/public/_nuxt/CcXaak_K.js +0 -1
- package/.output/public/_nuxt/CdMuck_X.js +0 -1
- package/.output/public/_nuxt/CfPSts5n.js +0 -1
- package/.output/public/_nuxt/CfROFPse.js +0 -1
- package/.output/public/_nuxt/Cnapl7lZ.js +0 -1
- package/.output/public/_nuxt/CscWZxCi.js +0 -1
- package/.output/public/_nuxt/CuicKV-B.js +0 -34
- package/.output/public/_nuxt/Cyiu1VQD.js +0 -1
- package/.output/public/_nuxt/D6PUPmRC.js +0 -1
- package/.output/public/_nuxt/DCl2yo4g.js +0 -8
- package/.output/public/_nuxt/DHXWp5yD.js +0 -1
- package/.output/public/_nuxt/DHltYerF.js +0 -114
- package/.output/public/_nuxt/DLXydYJb.js +0 -47
- package/.output/public/_nuxt/DRPSi76A.js +0 -1
- package/.output/public/_nuxt/DS53kyHJ.js +0 -1
- package/.output/public/_nuxt/DWhBqv_7.js +0 -1
- package/.output/public/_nuxt/Dd0kK5WH.js +0 -1
- package/.output/public/_nuxt/Df7kUO0m.js +0 -1
- package/.output/public/_nuxt/Dga3Av-m.js +0 -1
- package/.output/public/_nuxt/DgwTpwfB.js +0 -1
- package/.output/public/_nuxt/DkI145a5.js +0 -1
- package/.output/public/_nuxt/DoFBTaDR.js +0 -1
- package/.output/public/_nuxt/Dr_dI5hB.js +0 -1
- package/.output/public/_nuxt/EPZOxdgq.js +0 -1
- package/.output/public/_nuxt/R1nNqTru.js +0 -1
- package/.output/public/_nuxt/S5DLdEpg.js +0 -4
- package/.output/public/_nuxt/builds/meta/7caf3cb3-d272-4dbd-bb3f-1eeb64fab5d1.json +0 -1
- package/.output/public/_nuxt/entry.ChQMshd4.css +0 -1
- package/.output/public/_nuxt/gCELhaU9.js +0 -1
- package/.output/public/_nuxt/ipDzNHcs.js +0 -5
- package/.output/public/_nuxt/kS3boz40.js +0 -1
- package/.output/public/_nuxt/qH_j2A3a.js +0 -1
- package/.output/public/_nuxt/r3SBLxtE.js +0 -1
- package/.output/public/_nuxt/rsiRgrVM.js +0 -1
- package/.output/public/_nuxt/swrbBdtB.js +0 -1
- package/.output/public/sw.js +0 -1
- package/.output/public/workbox-2fbc6a65.js +0 -1
- package/.output/server/chunks/build/Alert-Bp1Wz_sq.mjs.map +0 -1
- package/.output/server/chunks/build/Breadcrumb-C9ZPTLym.mjs.map +0 -1
- package/.output/server/chunks/build/BreadcrumbNav-C3y42Vun.mjs.map +0 -1
- package/.output/server/chunks/build/BrowserBadge-DNCp9pF-.mjs.map +0 -1
- package/.output/server/chunks/build/ChartCard-Fr557IbV.mjs.map +0 -1
- package/.output/server/chunks/build/Checkbox-cVOSIY93.mjs.map +0 -1
- package/.output/server/chunks/build/CiEnvCard-DXPOhdSG.mjs +0 -640
- package/.output/server/chunks/build/CiEnvCard-DXPOhdSG.mjs.map +0 -1
- package/.output/server/chunks/build/CodeBlock-BGwNmJ8J.mjs.map +0 -1
- package/.output/server/chunks/build/DashboardNavbar-Bdp-OwTN.mjs.map +0 -1
- package/.output/server/chunks/build/DashboardSidebarToggle-Ji6ADuqF.mjs.map +0 -1
- package/.output/server/chunks/build/DataLocationCard-D6xSOrme.mjs.map +0 -1
- package/.output/server/chunks/build/DiagnosisPanel-DV1xwGu4.mjs.map +0 -1
- package/.output/server/chunks/build/EmptyState-DV3oT_xz.mjs.map +0 -1
- package/.output/server/chunks/build/EntityLinks-DeOP13Kr.mjs.map +0 -1
- package/.output/server/chunks/build/EnvManagedBadge-Qpn58Nmr.mjs.map +0 -1
- package/.output/server/chunks/build/FormField-B-GSn_VR.mjs.map +0 -1
- package/.output/server/chunks/build/HelpHint-YEMWtKu1.mjs.map +0 -1
- package/.output/server/chunks/build/Label-DBvbHd3A.mjs.map +0 -1
- package/.output/server/chunks/build/MiniRunBars-C3HG-EYm.mjs.map +0 -1
- package/.output/server/chunks/build/Modal-CfA78Hm1.mjs.map +0 -1
- package/.output/server/chunks/build/PageStateCard-Bwee6JTk.mjs.map +0 -1
- package/.output/server/chunks/build/ProjectTestCasesTable-9Ia825h8.mjs.map +0 -1
- package/.output/server/chunks/build/RovingFocusItem-CxhHdNGo.mjs.map +0 -1
- package/.output/server/chunks/build/RunReports-BpJqLHY9.mjs.map +0 -1
- package/.output/server/chunks/build/RunStatusBadge-BhmJ_RKM.mjs.map +0 -1
- package/.output/server/chunks/build/SectionCard-COd9TuDq.mjs.map +0 -1
- package/.output/server/chunks/build/Select-ppPz926C.mjs.map +0 -1
- package/.output/server/chunks/build/Separator-CxZdx8kw.mjs.map +0 -1
- package/.output/server/chunks/build/SettingsField-DDD4oqys.mjs.map +0 -1
- package/.output/server/chunks/build/Slideover-B95Rj237.mjs.map +0 -1
- package/.output/server/chunks/build/Switch-xQQ3_ME1.mjs.map +0 -1
- package/.output/server/chunks/build/Table-CPhhVzDv.mjs.map +0 -1
- package/.output/server/chunks/build/Tabs-BV9XqjoO.mjs.map +0 -1
- package/.output/server/chunks/build/TagBadge-BDcvvGxw.mjs +0 -47
- package/.output/server/chunks/build/TagBadge-BDcvvGxw.mjs.map +0 -1
- package/.output/server/chunks/build/TestCaseHistoryChart-DMb-xSJa.mjs.map +0 -1
- package/.output/server/chunks/build/TestStatusBar-CEzt76wk.mjs.map +0 -1
- package/.output/server/chunks/build/Textarea-DrrqQUVG.mjs.map +0 -1
- package/.output/server/chunks/build/Tooltip-7vwuDPrZ.mjs.map +0 -1
- package/.output/server/chunks/build/VisuallyHiddenInput-C9eJVpPW.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-B2yirIuA.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-CE0Gso6i.mjs.map +0 -1
- package/.output/server/chunks/build/_id_-bWcP2xFl.mjs.map +0 -1
- package/.output/server/chunks/build/about-CoJjvUwM.mjs.map +0 -1
- package/.output/server/chunks/build/account-Cn-eZqXM.mjs.map +0 -1
- package/.output/server/chunks/build/analytics-B276WPeU.mjs.map +0 -1
- package/.output/server/chunks/build/db.client-aHcD0wyX.mjs.map +0 -1
- package/.output/server/chunks/build/default-BSzdkM_L.mjs.map +0 -1
- package/.output/server/chunks/build/edit-C9Z7oZeu.mjs.map +0 -1
- package/.output/server/chunks/build/fetch-8kznMtBM.mjs.map +0 -1
- package/.output/server/chunks/build/forgot-password-BqPF4Rxs.mjs.map +0 -1
- package/.output/server/chunks/build/help-content-DmFnuhNu.mjs.map +0 -1
- package/.output/server/chunks/build/index-BR9hw6qk.mjs.map +0 -1
- package/.output/server/chunks/build/index-Ba-Fifra.mjs.map +0 -1
- package/.output/server/chunks/build/index-CULN3-en.mjs.map +0 -1
- package/.output/server/chunks/build/index-DVUtBexc.mjs.map +0 -1
- package/.output/server/chunks/build/isValueEqualOrExist-DBZjbD_3.mjs.map +0 -1
- package/.output/server/chunks/build/login-D2XZDuek.mjs.map +0 -1
- package/.output/server/chunks/build/mcp-_o6cMS6m.mjs.map +0 -1
- package/.output/server/chunks/build/notifications-Dzm9c0u_.mjs.map +0 -1
- package/.output/server/chunks/build/reset-password-gpFzIEDj.mjs.map +0 -1
- package/.output/server/chunks/build/settings-metadata-B0wo5R-W.mjs.map +0 -1
- package/.output/server/chunks/build/settings-pNyPBXVa.mjs.map +0 -1
- package/.output/server/chunks/build/storage-XelzuyPy.mjs.map +0 -1
- package/.output/server/chunks/build/tags-DrCQ7QSw.mjs.map +0 -1
- package/.output/server/chunks/build/test-cases-pmOxi-AN.mjs.map +0 -1
- package/.output/server/chunks/build/timeout-hygiene-CNs71Iah.mjs.map +0 -1
- package/.output/server/chunks/build/useAiStatus-ZO987RY7.mjs.map +0 -1
- package/.output/server/chunks/build/useCopy-BQQKcwlq.mjs.map +0 -1
- package/.output/server/chunks/build/useFormControl-BLpq1s4O.mjs.map +0 -1
- package/.output/server/chunks/build/useOpenInIde-kMZ7Jw5c.mjs.map +0 -1
- package/.output/server/chunks/build/useSettingsNav-NjI2seBy.mjs.map +0 -1
- package/.output/server/chunks/build/useTauri-lRT8zkLv.mjs +0 -7
- package/.output/server/chunks/build/useTauri-lRT8zkLv.mjs.map +0 -1
- package/.output/server/chunks/build/useTreeViewCookie-DVYpxW-p.mjs.map +0 -1
- package/.output/server/chunks/build/users-NmAUZs3i.mjs.map +0 -1
- package/.output/server/chunks/build/virtualizer-ZaqK4guJ.mjs +0 -940
- package/.output/server/chunks/build/virtualizer-ZaqK4guJ.mjs.map +0 -1
- package/.output/server/chunks/build/wasted-time-CguAF9zc.mjs.map +0 -1
- /package/.output/public/_nuxt/{PageStateCard.BrM5HWjY.css → useCopyRich.BrM5HWjY.css} +0 -0
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{_ as Be}from"./B4jvLMfS.js";import{_ as Le}from"./rsiRgrVM.js";import{d as ee,o as s,f as S,g as p,i as t,p as Y,k as e,j as c,c as l,t as o,q as m,s as ue,m as w,v as te,x as ye,F as L,y as Q,_ as ie,z as Pe,A as De,h as P,r as x,B as ne,C as Oe,l as J,D as ke,E as He,G as qe,H as fe,I as Ge,b as Ke,u as We,w as Je,e as Ze,J as Qe}from"./DHltYerF.js";import{_ as be}from"./D6PUPmRC.js";import{_ as Xe,a as Ye}from"./CdMuck_X.js";import{_ as ge}from"./DHXWp5yD.js";import{_ as et}from"./DS53kyHJ.js";import{_ as tt}from"./CN1mJlvD.js";import{_ as $e}from"./BeFDVhpA.js";import{u as st,_ as nt,a as at,i as ot,b as lt,c as rt,s as ve,d as it}from"./BVf6Yx9V.js";import{c as _e,f as ce,a as ct,b as Ce,s as pe,e as de,r as he,d as ut}from"./BeKvLsja.js";import{_ as we,a as dt,b as mt,c as ft,d as pt,e as gt,f as xt,g as Se,h as vt,i as _t,j as ht,k as yt,l as kt}from"./BLOUs6AE.js";import{_ as xe}from"./swrbBdtB.js";import{_ as bt}from"./B1X__ilH.js";import{_ as $t}from"./EPZOxdgq.js";import{_ as Ct}from"./BJtlcTrb.js";import{_ as wt}from"./qpI-_f9Q.js";import{_ as Te}from"./B-5GukRk.js";import{u as St,p as Tt,_ as jt}from"./ByuJWADR.js";import{b as It}from"./Df7kUO0m.js";import{u as Ut}from"./DXbPFI1d.js";import{u as zt}from"./By4YL7mx.js";import"./BbS6Bwby.js";import"./r3SBLxtE.js";import"./Dwws9U0D.js";import"./B2oUeBbA.js";import"./BHpUiv6j.js";import"./BUXSUkJ_.js";import"./gnCL8GjZ.js";import"./Bd3HqPMF.js";import"./qH_j2A3a.js";import"./CcXaak_K.js";import"./BFP6M-20.js";import"./hH1UFE3Z.js";const Rt={class:"flex items-center gap-3 flex-1 min-w-0 justify-between"},Et={class:"flex items-center gap-3 min-w-0"},At={class:"font-mono text-sm truncate text-gray-600 dark:text-gray-400 min-w-0"},Vt={class:"flex items-center gap-3 shrink-0 max-sm:hidden"},Mt={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},Nt={class:"text-xs text-gray-500 tabular-nums whitespace-nowrap"},Ft={key:1,class:"text-xs text-gray-400 whitespace-nowrap"},Bt={class:"grid grid-cols-1 lg:grid-cols-12 gap-4"},Lt={class:"space-y-3"},Pt={key:0,class:"text-sm font-medium break-words text-gray-500 dark:text-gray-400"},Dt={class:"flex flex-wrap gap-2"},Ot={class:"text-sm text-gray-500"},Ht={class:"flex items-start gap-3"},qt={class:"flex flex-col gap-1 shrink-0"},Gt={class:"flex-1 min-w-0 space-y-1.5"},Kt={class:"flex justify-end"},Wt=ee({__name:"ClusterSummary",props:{cluster:{},triageStatus:{},triageNote:{},triageSaving:{type:Boolean},triageChanged:{type:Boolean}},emits:["update:triageStatus","update:triageNote","save-triage"],setup(a,{emit:U}){const u=U,{summaryColSpanClass:b}=st(()=>1),f=[{label:"Open",value:"open",color:"warning"},{label:"Resolved",value:"resolved",color:"success"},{label:"Ignored",value:"ignored",color:"neutral"}];return(g,n)=>{const d=ue,C=te,V=ge,E=ye,R=et,T=tt,h=ie,I=$e,v=nt;return s(),S(v,{"storage-key":"failure-cluster"},{folded:p(()=>[t("div",Rt,[t("div",Et,[c(d,{color:("clusterStatusColor"in g?g.clusterStatusColor:e(ct))(a.cluster.status),variant:"solid",size:"sm",class:"shrink-0 capitalize"},{default:p(()=>[w(o(a.cluster.status),1)]),_:1},8,["color"]),t("span",At,o(a.cluster.signature),1),a.cluster.errorType?(s(),S(d,{key:0,color:("clusterErrorTypeColor"in g?g.clusterErrorTypeColor:e(_e))(a.cluster.errorType),variant:"subtle",size:"sm"},{default:p(()=>[w(o(a.cluster.errorType),1)]),_:1},8,["color"])):m("",!0)]),t("div",Vt,[t("span",Mt,o(a.cluster.occurrences)+" occurrence"+o(a.cluster.occurrences===1?"":"s"),1),t("span",Nt,o(a.cluster.affectedTests)+" "+o(a.cluster.affectedTests===1?"test":"tests"),1),a.cluster.diagnosis?.status==="completed"&&a.cluster.diagnosis?.category?(s(),S(d,{key:0,color:"neutral",variant:"outline",size:"sm",class:"gap-1 whitespace-nowrap"},{default:p(()=>[c(C,{name:"i-lucide-sparkles",class:"size-3"}),w(" "+o(a.cluster.diagnosis.category),1)]),_:1})):m("",!0),a.cluster.lastSeenAt?(s(),l("span",Ft," last seen "+o(("formatRelativeTime"in g?g.formatRelativeTime:e(ce))(a.cluster.lastSeenAt)),1)):m("",!0)])])]),default:p(()=>[t("div",Bt,[t("div",{class:Y(e(b))},[c(T,{title:a.cluster.signature},{default:p(()=>[t("div",Lt,[a.cluster.title?(s(),l("p",Pt,o(a.cluster.title),1)):m("",!0),t("div",Dt,[a.cluster.errorType?(s(),S(d,{key:0,color:("clusterErrorTypeColor"in g?g.clusterErrorTypeColor:e(_e))(a.cluster.errorType),variant:"subtle"},{default:p(()=>[w(o(a.cluster.errorType),1)]),_:1},8,["color"])):m("",!0),c(d,{color:"neutral",variant:"subtle"},{default:p(()=>[w(o(a.cluster.occurrences)+" occurrence"+o(a.cluster.occurrences===1?"":"s"),1)]),_:1}),c(d,{color:"neutral",variant:"subtle"},{default:p(()=>[w(o(a.cluster.affectedTests)+" "+o(a.cluster.affectedTests===1?"test":"tests")+" affected ",1)]),_:1}),a.cluster.diagnosis?.status==="completed"&&a.cluster.diagnosis?.category?(s(),S(d,{key:1,color:"neutral",variant:"outline",class:"gap-1"},{default:p(()=>[c(C,{name:"i-lucide-sparkles",class:"size-3"}),w(" "+o(a.cluster.diagnosis.category),1)]),_:1})):m("",!0),c(V,{topic:"cluster.concept"})]),t("p",Ot,[n[2]||(n[2]=w(" First seen in ",-1)),c(E,{to:`/test-runs/${a.cluster.firstSeenRunId}`,class:"text-primary hover:underline"},{default:p(()=>[w(" run #"+o(a.cluster.firstSeenRunId),1)]),_:1},8,["to"]),a.cluster.firstSeenAt?(s(),l(L,{key:0},[w(" ("+o(("formatRelativeTime"in g?g.formatRelativeTime:e(ce))(a.cluster.firstSeenAt))+") ",1)],64)):m("",!0),n[3]||(n[3]=w(" · Last seen in ",-1)),c(E,{to:`/test-runs/${a.cluster.lastSeenRunId}`,class:"text-primary hover:underline"},{default:p(()=>[w(" run #"+o(a.cluster.lastSeenRunId),1)]),_:1},8,["to"]),a.cluster.lastSeenAt?(s(),l(L,{key:1},[w(" ("+o(("formatRelativeTime"in g?g.formatRelativeTime:e(ce))(a.cluster.lastSeenAt))+") ",1)],64)):m("",!0),a.cluster.lastSeenRunStatus?(s(),S(R,{key:2,status:a.cluster.lastSeenRunStatus,size:"sm",class:"ml-1 align-middle"},null,8,["status"])):m("",!0)])])]),_:1},8,["title"])],2),c(T,{class:"lg:col-span-3",icon:"i-lucide-triangle-alert","icon-class":"text-amber-500",title:"Triage",help:"cluster.triage"},{default:p(()=>[t("div",Ht,[t("div",qt,[(s(),l(L,null,Q(f,j=>c(h,{key:j.value,size:"xs",class:"justify-start",color:a.triageStatus===j.value?j.color:"neutral",variant:a.triageStatus===j.value?"solid":"outline",onClick:G=>u("update:triageStatus",j.value)},{default:p(()=>[w(o(j.label),1)]),_:2},1032,["color","variant","onClick"])),64))]),t("div",Gt,[c(I,{"model-value":a.triageNote,placeholder:"Optional note…",rows:3,class:"text-sm w-full","onUpdate:modelValue":n[0]||(n[0]=j=>u("update:triageNote",j))},null,8,["model-value"]),t("div",Kt,[a.triageChanged?(s(),S(h,{key:0,size:"xs",icon:"i-lucide-check",loading:a.triageSaving,onClick:n[1]||(n[1]=j=>u("save-triage"))},{default:p(()=>[...n[4]||(n[4]=[w(" Save ",-1)])]),_:1},8,["loading"])):m("",!0)])])])]),_:1})])]),_:1})}}}),Jt=Object.assign(Wt,{__name:"ClusterSummary"}),Zt={class:"divide-y divide-default"},Qt={class:"text-xs font-mono text-gray-700 dark:text-gray-300 break-all whitespace-pre-wrap"},Xt={class:"text-xs font-mono text-gray-600 dark:text-gray-400 truncate"},Yt=ee({__name:"TestEvidenceSignals",props:De({consoleLogs:{},networkRequests:{}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:["update:open"],setup(a){const U=a,u=P(()=>Array.isArray(U.consoleLogs)?U.consoleLogs.filter(d=>d.type==="error"||d.type==="warning"):[]),b=P(()=>Array.isArray(U.networkRequests)?U.networkRequests.filter(d=>d.status&&d.status>=400):[]),f=P(()=>u.value.length>0||b.value.length>0),g=P(()=>{const d=[];return u.value.length&&d.push(`${u.value.length} console`),b.value.length&&d.push(`${b.value.length} network`),d.join(", ")}),n=Pe(a,"open");return(d,C)=>{const V=te,E=ue,R=we;return e(f)?(s(),S(R,{key:0,icon:"i-lucide-triangle-alert",label:`Signals (${e(g)})`,open:n.value,"onUpdate:open":C[0]||(C[0]=T=>n.value=T)},{default:p(()=>[t("div",Zt,[e(u).length>0?(s(),l(L,{key:0},[C[1]||(C[1]=t("div",{class:"px-3 py-1 bg-gray-50 dark:bg-gray-800/40"},[t("p",{class:"text-[10px] font-semibold text-gray-400 uppercase tracking-wide"},"Console")],-1)),(s(!0),l(L,null,Q(e(u),(T,h)=>(s(),l("div",{key:"log-"+h,class:"px-3 py-1.5 flex items-start gap-2"},[c(V,{name:T.type==="error"?"i-lucide-x-circle":"i-lucide-alert-triangle",class:Y(["size-3.5 mt-0.5 shrink-0",T.type==="error"?"text-red-500":"text-yellow-500"])},null,8,["name","class"]),t("p",Qt,o(T.text),1)]))),128))],64)):m("",!0),e(b).length>0?(s(),l(L,{key:1},[C[2]||(C[2]=t("div",{class:"px-3 py-1 bg-gray-50 dark:bg-gray-800/40"},[t("p",{class:"text-[10px] font-semibold text-gray-400 uppercase tracking-wide"},"Network")],-1)),(s(!0),l(L,null,Q(e(b),(T,h)=>(s(),l("div",{key:"req-"+h,class:"px-3 py-1.5 flex items-center gap-2"},[c(E,{color:T.status>=500?"error":"warning",variant:"subtle",size:"sm",class:"shrink-0 font-mono"},{default:p(()=>[w(o(T.status),1)]),_:2},1032,["color"]),t("p",Xt,o(T.url),1)]))),128))],64)):m("",!0)])]),_:1},8,["label","open"])):m("",!0)}}}),es=Object.assign(Yt,{__name:"TestEvidenceSignals"}),ts={class:"space-y-3"},ss={key:0,class:"flex gap-0 border-b border-default overflow-x-auto"},ns=["title","onClick"],as={key:0,class:"opacity-60 ml-1"},os={key:1,class:"flex items-start justify-between gap-2 flex-wrap"},ls={class:"min-w-0"},rs={class:"text-sm font-medium break-words"},is={key:2,class:"flex items-center justify-center py-10"},cs={key:0,class:"flex flex-wrap gap-1.5"},us={class:"divide-y divide-default"},ds={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},ms={key:0,class:"text-xs font-mono text-red-500 whitespace-pre-wrap break-all"},fs={class:"overflow-x-auto max-h-72"},ps={class:"max-h-64 overflow-auto"},gs=ee({__name:"ClusterTestEvidence",props:{affectedTestCases:{},projectKey:{},projectName:{}},setup(a){const U=a,u=x(U.affectedTestCases[0]?.recentTestRunsCaseId??null),b=P(()=>U.affectedTestCases.find(r=>r.recentTestRunsCaseId===u.value)),f=x(null),g=x([]),n=x(!1),d=x(!1),C=x(!1),V=x(!1),E=x(!1),R=x(!1),T=x(!1),h=new Map;function I(){C.value=!1,V.value=!1,E.value=!1,R.value=!1,T.value=!1}async function v(r){I();const $=h.get(r);if($){f.value=$.detail,g.value=$.traces,n.value=!1,d.value=!1;return}n.value=!0,d.value=!0,f.value=null,g.value=[];const[B,H]=await Promise.allSettled([$fetch(`/api/test-run-cases/${r}`),$fetch(`/api/test-run-cases/${r}/traces`)]);B.status==="fulfilled"&&(f.value=B.value),n.value=!1,H.status==="fulfilled"&&(g.value=H.value),d.value=!1,B.status==="fulfilled"&&H.status==="fulfilled"&&h.set(r,{detail:B.value,traces:H.value})}const j=new Map,G=x(null),D=x("trace"),M=P(()=>G.value?.frames??[]);async function O(r){if(G.value=j.get(r)??null,j.has(r)||g.value.length===0)return;const $=f.value?.testRun?.id;if($)try{const B=await $fetch(`/api/test-runs/${$}/cases/${r}/trace-stacks`),H=B.status==="ok"&&B.frames?.length?B:null;j.set(r,H),u.value===r&&(G.value=H)}catch{j.set(r,null)}}ne([f,g],()=>{D.value="trace",u.value&&O(u.value)}),ne(u,r=>{r&&v(r)}),Oe(()=>{u.value&&v(u.value)});const A=P(()=>{const r=f.value?.steps;return Array.isArray(r)?r.filter($=>$.error):[]}),F=P(()=>f.value?.testSource?f.value.testSource.split(`
|
|
2
|
-
`).length:0),z=P(()=>{const r=f.value;if(!r)return[];const $=r.attachments.filter(y=>ot(y.path,y.contentType)).length,B=r.attachments.filter(y=>lt(y.path,y.contentType)).length,H=Array.isArray(r.consoleLogs)?r.consoleLogs.filter(y=>y.type==="error"||y.type==="warning").length:0,X=Array.isArray(r.networkRequests)?r.networkRequests.filter(y=>(y.status??0)>=400).length:0;return[{icon:"i-lucide-image",label:"screenshots",count:$},{icon:"i-lucide-video",label:"videos",count:B},{icon:"i-lucide-bug-play",label:"traces",count:g.value.length},{icon:"i-lucide-list-checks",label:"failing steps",count:A.value.length},{icon:"i-lucide-triangle-alert",label:"signals",count:H+X},{icon:"i-lucide-code",label:"source",count:r.testSourceFrames?.length||(r.testSource?1:0)},{icon:"i-lucide-accessibility",label:"ARIA",count:r.ariaSnapshot?1:0}].filter(y=>y.count>0)});return(r,$)=>{const B=xe,H=ie,X=te,y=ue,i=dt,k=mt,N=ft,q=we,K=es,W=bt,Z=pt,ae=gt,se=at,oe=xt;return s(),l("div",ts,[a.affectedTestCases.length>1?(s(),l("div",ss,[(s(!0),l(L,null,Q(a.affectedTestCases,_=>(s(),l("button",{key:_.recentTestRunsCaseId,class:Y(["px-3 py-1.5 text-xs whitespace-nowrap border-b-2 -mb-px transition-colors",e(u)===_.recentTestRunsCaseId?"border-primary text-primary font-medium":"border-transparent text-gray-500 hover:text-gray-700 dark:hover:text-gray-300"]),title:_.title,onClick:le=>u.value=_.recentTestRunsCaseId},[w(o(_.title.split(" › ").pop())+" ",1),_.runCount>1?(s(),l("span",as,o(_.runCount)+"×",1)):m("",!0)],10,ns))),128))])):m("",!0),e(b)?(s(),l("div",os,[t("div",ls,[t("p",rs,o(e(b).title),1),c(B,{"file-path":e(b).filePath,"project-key":a.projectKey,"project-name":a.projectName,class:"text-xs text-gray-400"},null,8,["file-path","project-key","project-name"])]),c(H,{to:`/test-run-cases/${e(b).recentTestRunsCaseId}`,size:"xs",variant:"outline",color:"neutral","trailing-icon":"i-lucide-arrow-right"},{default:p(()=>[...$[6]||($[6]=[w(" Open test run case ",-1)])]),_:1},8,["to"])])):m("",!0),e(n)?(s(),l("div",is,[c(X,{name:"i-lucide-loader-circle",class:"size-5 animate-spin text-gray-400"})])):e(f)?(s(),l(L,{key:3},[e(z).length?(s(),l("div",cs,[(s(!0),l(L,null,Q(e(z),_=>(s(),S(y,{key:_.label,color:"neutral",variant:"subtle",size:"sm",class:"gap-1"},{default:p(()=>[c(X,{name:_.icon,class:"size-3"},null,8,["name"]),w(" "+o(_.count)+" "+o(_.label),1)]),_:2},1024))),128))])):m("",!0),c(i,{attachments:e(f).attachments},null,8,["attachments"]),c(k,{attachments:e(f).attachments},null,8,["attachments"]),c(N,{traces:e(g),loading:e(d)},null,8,["traces","loading"]),e(A).length>0?(s(),S(q,{key:1,icon:"i-lucide-list-checks",label:"Failing steps",count:e(A).length,open:e(C),"onUpdate:open":$[0]||($[0]=_=>J(C)?C.value=_:null)},{default:p(()=>[t("div",us,[(s(!0),l(L,null,Q(e(A),(_,le)=>(s(),l("div",{key:le,class:"px-3 py-2 space-y-0.5"},[t("p",ds,o(le+1)+". "+o(_.title),1),_.error?.message?(s(),l("p",ms,o(_.error.message),1)):m("",!0)]))),128))])]),_:1},8,["count","open"])):m("",!0),c(K,{"console-logs":e(f).consoleLogs,"network-requests":e(f).networkRequests,open:e(V),"onUpdate:open":$[1]||($[1]=_=>J(V)?V.value=_:null)},null,8,["console-logs","network-requests","open"]),e(f).testSourceFrames?.length||e(f).testSource||e(M).length?(s(),S(q,{key:2,icon:"i-lucide-code",label:"Test source",count:e(M).length||e(f).testSourceFrames?.length||e(F),open:e(E),"onUpdate:open":$[3]||($[3]=_=>J(E)?E.value=_:null)},{default:p(()=>[e(M).length&&(e(f).testSourceFrames?.length||e(f).testSource)?(s(),S(W,{key:0,modelValue:e(D),"onUpdate:modelValue":$[2]||($[2]=_=>J(D)?D.value=_:null),items:[{label:`Full stack (${e(M).length})`,value:"trace"},{label:`Captured (${e(f).testSourceFrames?.length||1})`,value:"captured"}],size:"xs",variant:"link",class:"mb-1.5",ui:{list:"gap-2",trigger:"px-1.5"}},null,8,["modelValue","items"])):m("",!0),t("div",fs,[e(D)==="trace"&&e(M).length?(s(),S(Z,{key:0,frames:e(M),"project-key":a.projectKey,"project-name":a.projectName},null,8,["frames","project-key","project-name"])):e(f).testSourceFrames?.length?(s(),S(ae,{key:1,frames:e(f).testSourceFrames,"project-key":a.projectKey,"project-name":a.projectName},null,8,["frames","project-key","project-name"])):e(f).testSource?(s(),S(se,{key:2,text:"```typescript\n"+e(f).testSource+"\n```"},null,8,["text"])):m("",!0)])]),_:1},8,["count","open"])):m("",!0),e(f).ariaSnapshot?(s(),S(q,{key:3,icon:"i-lucide-accessibility",label:"ARIA snapshot",open:e(R),"onUpdate:open":$[4]||($[4]=_=>J(R)?R.value=_:null)},{default:p(()=>[t("div",ps,[c(se,{text:"```yaml\n"+e(f).ariaSnapshot+"\n```"},null,8,["text"])])]),_:1},8,["open"])):m("",!0),e(f).pageState?(s(),S(q,{key:4,icon:"i-lucide-database",label:"App state",open:e(T),"onUpdate:open":$[5]||($[5]=_=>J(T)?T.value=_:null)},{default:p(()=>[c(oe,{"page-state":e(f).pageState,plain:""},null,8,["page-state"])]),_:1},8,["open"])):m("",!0)],64)):m("",!0)])}}}),xs=Object.assign(gs,{__name:"ClusterTestEvidence"}),vs={key:0,class:"flex items-center gap-1.5 overflow-hidden min-w-0"},_s={class:"text-primary shrink-0"},hs={class:"text-gray-500 truncate text-xs font-sans"},ys={key:1,class:"text-primary text-xs"},ks={key:2,class:"text-gray-400 font-sans text-xs"},bs={class:"w-96 p-2 space-y-2"},$s={class:"flex items-center gap-1"},Cs={class:"flex items-center gap-1"},ws={key:0,class:"flex items-center gap-2 px-2 py-1.5 text-xs rounded-md bg-primary/5 text-gray-600 dark:text-gray-300"},Ss={class:"font-medium text-green-600 dark:text-green-400"},Ts={class:"font-medium text-red-600 dark:text-red-400"},js={class:"text-gray-400"},Is={key:1,class:"flex items-center justify-center gap-2 py-6 text-gray-400"},Us={key:2,class:"py-4 text-center text-sm text-red-500"},zs={key:3,class:"flex items-start gap-2 px-2 py-2 text-xs text-amber-700 dark:text-amber-400 bg-amber-50 dark:bg-amber-900/20 rounded-md"},Rs={key:4,class:"max-h-80 overflow-y-auto space-y-px"},Es={class:"text-xs text-primary"},As={key:1,class:"py-4 text-center text-sm text-gray-400"},Vs=["onClick"],Ms={class:"text-xs text-primary shrink-0 w-14 pt-px"},Ns={class:"flex-1 min-w-0"},Fs={class:"text-xs font-medium leading-snug truncate"},Bs={class:"text-xs text-gray-400 leading-snug truncate"},Ls=ee({__name:"CommitPicker",props:{modelValue:{},clusterId:{}},emits:["update:modelValue"],setup(a,{emit:U}){const u=a,b=U,f=x(!1),g=x(""),n=x([]),d=x(null),C=x(null),V=x(!1),E=x(!1),R=x(null),T=x(null),h=x([]),I=x(!1),v=x(void 0),j=P(()=>{if(!u.modelValue)return null;const z=u.modelValue.trim();return n.value.find($=>$.sha===z||$.sha.startsWith(z))??{sha:z,shortSha:z.slice(0,7),message:"",author:"",date:""}});async function G(){if(!h.value.length){I.value=!0;try{const z=await $fetch(`/api/failure-clusters/${u.clusterId}/branches`);h.value=z.branches}catch{}finally{I.value=!1}}}async function D(){const z=u.modelValue||"";V.value=!0,E.value=!1,T.value=null;try{const r={};z&&(r.baseline=z),v.value&&(r.branch=v.value);const $=await $fetch(`/api/failure-clusters/${u.clusterId}/commits`,{query:r});n.value=$.commits,C.value=$.aggregate,d.value=$.error??null,T.value=z}catch{E.value=!0}finally{V.value=!1}}ne(v,()=>{n.value=[],T.value=null,D()}),ne(f,async z=>{if(z){await Promise.all([G(),D()]),await qe();const r=R.value?.$el?.querySelector("input")??R.value?.$el;r instanceof HTMLElement&&r.focus()}else g.value=""});const M=P(()=>Ce(n.value,g.value)),O=P(()=>{const z=g.value.trim();return!/^[0-9a-f]{7,40}$/i.test(z)||M.value.some(r=>r.sha.startsWith(z.toLowerCase()))?null:z});function A(z){b("update:modelValue",z),f.value=!1}function F(z){z.stopPropagation(),d.value=null,C.value=null,b("update:modelValue",""),f.value=!1}return(z,r)=>{const $=ie,B=te,H=$t,X=ke,y=He;return s(),S(y,{open:e(f),"onUpdate:open":r[4]||(r[4]=i=>J(f)?f.value=i:null)},{content:p(()=>[t("div",bs,[t("div",$s,[c(B,{name:"i-lucide-git-branch",class:"size-3.5 text-gray-400 shrink-0"}),c(H,{modelValue:e(v),"onUpdate:modelValue":r[0]||(r[0]=i=>J(v)?v.value=i:null),items:e(h),placeholder:"Default branch",size:"xs",class:"flex-1",loading:e(I),disabled:e(I)},null,8,["modelValue","items","loading","disabled"])]),t("div",Cs,[c(X,{ref_key:"searchInputRef",ref:R,modelValue:e(g),"onUpdate:modelValue":r[1]||(r[1]=i=>J(g)?g.value=i:null),placeholder:"Search message, author, SHA…",size:"xs",icon:"i-lucide-search",class:"flex-1"},null,8,["modelValue"]),a.modelValue?(s(),S($,{key:0,size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-x",title:"Clear baseline",onClick:r[2]||(r[2]=i=>F(i))})):m("",!0)]),e(C)&&a.modelValue&&!e(V)?(s(),l("div",ws,[c(B,{name:"i-lucide-git-compare-arrows",class:"size-3.5 shrink-0 text-primary"}),r[5]||(r[5]=t("span",null,"Since baseline:",-1)),t("span",Ss,"+"+o(e(C).linesAdded),1),t("span",Ts,"-"+o(e(C).linesRemoved),1),t("span",js,"across "+o(e(C).filesChanged)+" file"+o(e(C).filesChanged===1?"":"s"),1)])):m("",!0),e(V)?(s(),l("div",Is,[c(B,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),r[6]||(r[6]=t("span",{class:"text-sm"},"Loading commits…",-1))])):e(E)?(s(),l("div",Us," Failed to load commits — check your SCM token in Settings → AI ")):e(d)&&!e(V)&&e(n).length===0?(s(),l("div",zs,[c(B,{name:"i-lucide-triangle-alert",class:"size-3.5 shrink-0 mt-0.5"}),t("span",null,o(e(d)),1)])):(s(),l("div",Rs,[e(O)?(s(),l("button",{key:0,class:"w-full text-left px-2 py-1.5 rounded flex items-center gap-2 hover:bg-elevated transition-colors border border-dashed border-default",onClick:r[3]||(r[3]=i=>A(e(O)))},[c(B,{name:"i-lucide-git-commit-horizontal",class:"size-3.5 text-gray-400 shrink-0"}),r[7]||(r[7]=t("span",{class:"text-xs text-gray-500"},"Use commit",-1)),t("code",Es,o(e(O).slice(0,7)),1)])):m("",!0),e(M).length===0&&!e(O)?(s(),l("div",As,o(e(g)?"No commits match":"No commits available"),1)):m("",!0),(s(!0),l(L,null,Q(e(M),i=>(s(),l("button",{key:i.sha,class:Y(["w-full text-left px-2 py-1.5 rounded flex items-start gap-2 hover:bg-elevated transition-colors",a.modelValue===i.sha?"bg-primary/10 ring-1 ring-inset ring-primary/30":""]),onClick:k=>A(i.sha)},[t("code",Ms,o(i.shortSha),1),t("div",Ns,[t("p",Fs,o(i.message),1),t("p",Bs,[w(o(i.author),1),i.date?(s(),l(L,{key:0},[w(" · "+o(e(ce)(i.date)),1)],64)):m("",!0)])]),a.modelValue===i.sha?(s(),S(B,{key:0,name:"i-lucide-check",class:"size-3.5 text-primary shrink-0 mt-0.5"})):m("",!0)],10,Vs))),128))]))])]),default:p(()=>[c($,{size:"xs",color:"neutral",variant:"outline",icon:a.modelValue?"i-lucide-git-branch-plus":"i-lucide-git-branch","trailing-icon":"i-lucide-chevron-down",class:"min-w-36 max-w-48 font-mono"},{default:p(()=>[e(j)?.message?(s(),l("span",vs,[t("code",_s,o(e(j).shortSha),1),t("span",hs,o(e(j).message),1)])):a.modelValue?(s(),l("span",ys,o(a.modelValue.slice(0,7))+"…",1)):(s(),l("span",ks,"baseline commit…"))]),_:1},8,["icon"])]),_:1},8,["open"])}}}),Ps=Object.assign(Ls,{__name:"CommitPicker"}),Ds={class:"space-y-3"},Os={key:0,class:"space-y-1"},Hs={class:"text-xs font-semibold text-gray-500 uppercase tracking-wide px-1"},qs={class:"rounded-md border border-default overflow-hidden divide-y divide-default"},Gs={class:"text-xs text-gray-400 shrink-0"},Ks={class:"text-xs text-gray-700 dark:text-gray-300 truncate"},Ws={class:"space-y-1"},Js={class:"text-xs font-semibold text-gray-500 uppercase tracking-wide px-1"},Zs={key:0,class:"text-yellow-500 font-normal normal-case"},Qs={class:"rounded-md border border-default overflow-hidden divide-y divide-default"},Xs=["onClick"],Ys={class:"text-xs font-mono flex-1 truncate text-gray-700 dark:text-gray-300"},en={class:"text-xs text-gray-400 shrink-0 tabular-nums"},tn={key:0,class:"text-green-500"},sn={key:1,class:"text-gray-300 mx-0.5"},nn={key:2,class:"text-red-500"},an={key:0,class:"border-t border-default overflow-x-auto max-h-96"},on=ee({__name:"ScmChangesView",props:{changes:{}},setup(a){const U=x(new Set);function u(b){const f=new Set(U.value);f.has(b)?f.delete(b):f.add(b),U.value=f}return(b,f)=>{const g=te,n=Se;return s(),l("div",Ds,[a.changes.commits.length>0?(s(),l("div",Os,[t("p",Hs,o(a.changes.commits.length)+" commit"+o(a.changes.commits.length===1?"":"s"),1),t("div",qs,[(s(!0),l(L,null,Q(a.changes.commits,d=>(s(),l("div",{key:d.sha,class:"flex items-center gap-2 px-3 py-1.5"},[c(g,{name:"i-lucide-git-commit-horizontal",class:"size-3.5 text-gray-400 shrink-0"}),t("code",Gs,o(d.sha.slice(0,7)),1),t("span",Ks,o(d.message),1)]))),128))])])):m("",!0),t("div",Ws,[t("p",Js,[w(o(a.changes.files.length)+" file"+o(a.changes.files.length===1?"":"s")+" changed ",1),a.changes.patchesOmitted?(s(),l("span",Zs," — diff too large, file names only ")):m("",!0)]),t("div",Qs,[(s(!0),l(L,null,Q(a.changes.files,d=>(s(),l("div",{key:d.filename},[t("button",{class:Y(["w-full flex items-center gap-2 px-3 py-1.5 text-left hover:bg-gray-50 dark:hover:bg-gray-800/50 transition-colors",d.patch?"cursor-pointer":"cursor-default"]),onClick:C=>d.patch&&u(d.filename)},[c(g,{name:("scmFileStatusMeta"in b?b.scmFileStatusMeta:e(pe))(d.status).icon,class:Y(["size-3.5 shrink-0",("scmFileStatusMeta"in b?b.scmFileStatusMeta:e(pe))(d.status).color])},null,8,["name","class"]),t("span",Ys,o(d.filename),1),t("span",en,[d.additions?(s(),l("span",tn,"+"+o(d.additions),1)):m("",!0),d.additions&&d.deletions?(s(),l("span",sn,"/")):m("",!0),d.deletions?(s(),l("span",nn,"-"+o(d.deletions),1)):m("",!0)]),d.patch?(s(),S(g,{key:0,name:e(U).has(d.filename)?"i-lucide-chevron-up":"i-lucide-chevron-down",class:"size-3.5 text-gray-400 shrink-0"},null,8,["name"])):m("",!0)],10,Xs),d.patch&&e(U).has(d.filename)?(s(),l("div",an,[c(n,{patch:d.patch},null,8,["patch"])])):m("",!0)]))),128))])])])}}}),ln=Object.assign(on,{__name:"ScmChangesView"}),rn={class:"border border-default rounded-lg overflow-clip text-xs font-mono"},cn={class:"sticky top-0 z-10 flex items-center justify-between px-3 py-1.5 bg-elevated border-b border-default text-gray-600 dark:text-gray-300"},un={class:"font-medium truncate"},dn={class:"shrink-0 flex items-center gap-1.5 ml-2 text-[11px]"},mn={key:0,class:"text-green-600 dark:text-green-400"},fn={key:1,class:"text-red-600 dark:text-red-400"},pn={key:1,class:"px-3 py-2 text-gray-400 text-[11px]"},gn=ee({__name:"DiffFile",props:{file:{}},setup(a){return(U,u)=>{const b=ue,f=Se;return s(),l("div",rn,[t("div",cn,[t("span",un,o(a.file.filename),1),t("span",dn,[a.file.additions?(s(),l("span",mn,"+"+o(a.file.additions),1)):m("",!0),a.file.deletions?(s(),l("span",fn,"-"+o(a.file.deletions),1)):m("",!0),c(b,{label:a.file.status,size:"xs",variant:"subtle",color:("scmFileStatusMeta"in U?U.scmFileStatusMeta:e(pe))(a.file.status).badgeColor},null,8,["label","color"])])]),a.file.patch?(s(),S(f,{key:0,patch:a.file.patch},null,8,["patch"])):(s(),l("div",pn,"No patch available"))])}}}),xn=Object.assign(gn,{__name:"DiffFile"}),vn={class:"inline-flex items-center gap-1"},_n={class:"flex h-[72vh] overflow-hidden"},hn={class:"w-72 shrink-0 border-r border-default flex flex-col"},yn={class:"p-2 border-b border-default space-y-2 shrink-0"},kn={class:"flex items-center gap-2 text-xs text-gray-500"},bn={class:"ml-auto"},$n={key:2,class:"flex-1 overflow-y-auto flex flex-col"},Cn={key:0,class:"py-6 text-center text-sm text-gray-400 flex-1"},wn=["onClick"],Sn=["checked","onChange"],Tn={class:"flex-1 min-w-0"},jn={class:"text-xs font-medium leading-snug truncate"},In={class:"text-[10px] text-gray-400 leading-snug mt-0.5 flex items-center gap-1 min-w-0"},Un={class:"text-primary shrink-0"},zn={class:"truncate"},Rn={key:0,class:"shrink-0"},En={key:1,class:"p-2 shrink-0 space-y-1.5"},An={key:0,class:"flex items-center gap-1.5 text-xs text-red-500 px-1"},Vn={class:"flex-1 overflow-y-auto flex flex-col min-w-0"},Mn={key:0,class:"flex-1 flex items-center justify-center text-gray-400 text-sm"},Nn={key:2,class:"flex-1 p-4 space-y-3"},Fn={key:0,class:"space-y-0.5 pb-3 border-b border-default"},Bn={class:"flex items-center gap-2"},Ln={class:"text-xs font-mono text-primary"},Pn={class:"text-xs text-gray-400"},Dn={class:"text-sm font-semibold"},On={key:1,class:"text-sm text-gray-400 pt-2"},Hn={key:4,class:"flex-1 flex items-center justify-center text-sm text-gray-400"},qn={class:"flex items-center gap-3 w-full"},Gn={class:"flex-1 flex items-center gap-2 text-sm text-gray-500 min-w-0"},Kn={class:"font-medium text-gray-700 dark:text-gray-200 shrink-0"},Wn={class:"shrink-0"},Jn={class:"text-green-600 dark:text-green-400 shrink-0 font-medium"},Zn={class:"text-red-600 dark:text-red-400 shrink-0 font-medium"},Qn={key:1,class:"text-gray-400 text-xs shrink-0"},Xn={key:1},me=50,Yn=ee({__name:"CommitBrowserModal",props:{open:{type:Boolean},clusterId:{},initialSelected:{},autoSelectedShas:{}},emits:["update:open","confirm"],setup(a,{emit:U}){const u=a,b=P(()=>new Set(u.autoSelectedShas??[])),f=U,g=x(""),n=x([]),d=x(me),C=x(!1),V=x(!1),E=x(!1),R=x(null),T=x(null),h=x(new Set),I=x(null),v=Ge({}),j=x(null),G=x(!1),D=x(null),M=P(()=>n.value.find(y=>y.sha===I.value)??null),O=P(()=>Ce(n.value,g.value)),A=P(()=>{let y=0,i=0,k=0,N=0;for(const q of h.value){if(!(q in v)){N++;continue}const K=v[q];K&&(y+=K.files.length,i+=K.files.reduce((W,Z)=>W+Z.additions,0),k+=K.files.reduce((W,Z)=>W+Z.deletions,0))}return{files:y,linesAdded:i,linesRemoved:k,unreviewed:N}});async function F(y){y?(V.value=!0,R.value=null):(E.value=!0,T.value=null);try{const i=await $fetch(`/api/failure-clusters/${u.clusterId}/commits`,{query:{limit:d.value}});n.value=i.commits,C.value=i.hasMore??!1,i.error&&!i.commits.length&&(y?R.value=i.error:T.value=i.error),y&&i.commits[0]&&r(i.commits[0].sha)}catch(i){y?R.value=de(i):T.value=de(i)}finally{V.value=!1,E.value=!1}}async function z(){d.value+=me,await F(!1)}ne(()=>u.open,async y=>{if(y){if(h.value=new Set(u.initialSelected??[]),n.value.length){!I.value&&n.value[0]&&r(n.value[0].sha);return}d.value=me,await F(!0)}});async function r(y){if(I.value!==y){if(I.value=y,D.value=null,y in v){j.value=v[y],G.value=!1;return}j.value=null,G.value=!0;try{const i=await $fetch(`/api/failure-clusters/${u.clusterId}/commit-diff`,{query:{sha:y}});v[y]=i,I.value===y&&(j.value=i)}catch(i){I.value===y&&(D.value=de(i))}finally{I.value===y&&(G.value=!1)}}}function $(y){const i=new Set(h.value);i.has(y)?i.delete(y):i.add(y),h.value=i}function B(){h.value=new Set(O.value.map(y=>y.sha))}function H(){h.value=new Set}function X(){f("confirm",[...h.value]),f("update:open",!1)}return(y,i)=>{const k=ge,N=ke,q=Ct,K=ie,W=wt,Z=ue,ae=te,se=xn,oe=Te;return s(),S(oe,{open:a.open,title:"Browse commits",ui:{content:"max-w-6xl",body:"p-0 overflow-hidden"},"onUpdate:open":i[4]||(i[4]=_=>f("update:open",_))},{title:p(()=>[t("span",vn,[i[5]||(i[5]=w("Browse commits ",-1)),c(k,{topic:"cluster.commit-browser"})])]),body:p(()=>[t("div",_n,[t("div",hn,[t("div",yn,[c(N,{modelValue:e(g),"onUpdate:modelValue":i[0]||(i[0]=_=>J(g)?g.value=_:null),placeholder:"Search commits…",size:"xs",icon:"i-lucide-search"},null,8,["modelValue"]),t("div",kn,[t("button",{class:"hover:text-primary transition-colors",onClick:B},"All"),i[6]||(i[6]=t("span",null,"·",-1)),t("button",{class:"hover:text-primary transition-colors",onClick:H},"None"),t("span",bn,o(e(h).size>0?`${e(h).size} selected`:"none selected"),1)])]),e(V)?(s(),S(q,{key:0,text:"Loading…",padded:!1,class:"flex-1"})):e(R)?(s(),S(W,{key:1,text:e(R),padded:!1,class:"flex-1 p-4"},{action:p(()=>[c(K,{size:"xs",color:"neutral",variant:"outline",onClick:i[1]||(i[1]=_=>F(!0))},{default:p(()=>[...i[7]||(i[7]=[w(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):(s(),l("div",$n,[e(O).length===0?(s(),l("div",Cn,o(e(g)?"No commits match":"No commits"),1)):m("",!0),(s(!0),l(L,null,Q(e(O),_=>(s(),l("button",{key:_.sha,class:Y(["w-full text-left px-2.5 py-2 flex items-start gap-2.5 hover:bg-elevated transition-colors border-b border-default/50 last:border-0 shrink-0",e(I)===_.sha?"bg-elevated":""]),onClick:le=>r(_.sha)},[t("input",{type:"checkbox",checked:e(h).has(_.sha),class:"mt-0.5 shrink-0 cursor-pointer accent-primary",onClick:i[2]||(i[2]=fe(()=>{},["stop"])),onChange:le=>$(_.sha)},null,40,Sn),t("div",Tn,[t("p",jn,o(_.message||"(no message)"),1),t("p",In,[t("code",Un,o(_.shortSha),1),t("span",zn,o(_.author),1),_.date?(s(),l("span",Rn,"· "+o(e(ce)(_.date)),1)):m("",!0),e(b).has(_.sha)?(s(),S(Z,{key:1,size:"xs",color:"info",variant:"soft",class:"shrink-0"},{default:p(()=>[...i[8]||(i[8]=[w(" auto ",-1)])]),_:1})):m("",!0)])])],10,wn))),128)),e(C)&&!e(g)?(s(),l("div",En,[e(T)?(s(),l("p",An,[c(ae,{name:"i-lucide-circle-alert",class:"size-3.5 shrink-0"}),w(" "+o(e(T)),1)])):m("",!0),c(K,{size:"xs",color:"neutral",variant:"outline",block:"",loading:e(E),onClick:z},{default:p(()=>[...i[9]||(i[9]=[w(" Load more ",-1)])]),_:1},8,["loading"])])):m("",!0)]))]),t("div",Vn,[e(I)?e(G)?(s(),S(q,{key:1,text:"Loading diff…",padded:!1,class:"flex-1"})):e(j)?(s(),l("div",Nn,[e(M)?(s(),l("div",Fn,[t("div",Bn,[t("code",Ln,o(e(M).shortSha),1),t("span",Pn,[w(o(e(M).author),1),e(M).date?(s(),l(L,{key:0},[w(" · "+o(e(ce)(e(M).date)),1)],64)):m("",!0)])]),t("p",Dn,o(e(M).message),1)])):m("",!0),e(j).files.length===0?(s(),l("div",On,"No file changes in this commit")):m("",!0),(s(!0),l(L,null,Q(e(j).files,_=>(s(),S(se,{key:_.filename,file:_},null,8,["file"]))),128))])):e(D)?(s(),S(W,{key:3,text:e(D),padded:!1,class:"flex-1 p-6"},{action:p(()=>[...i[10]||(i[10]=[t("p",{class:"text-xs text-gray-400"},"Click the commit again to retry",-1)])]),_:1},8,["text"])):(s(),l("div",Hn," Diff not available for this commit ")):(s(),l("div",Mn," Select a commit to view its diff "))])])]),footer:p(()=>[t("div",qn,[t("div",Gn,[e(h).size>0?(s(),l(L,{key:0},[t("span",Kn,o(e(h).size)+" commit"+o(e(h).size===1?"":"s"),1),e(A).files>0||e(A).linesAdded>0||e(A).linesRemoved>0?(s(),l(L,{key:0},[i[11]||(i[11]=t("span",{class:"text-gray-300 dark:text-gray-600"},"·",-1)),t("span",Wn,o(e(A).files)+" file"+o(e(A).files===1?"":"s"),1),t("span",Jn,"+"+o(e(A).linesAdded),1),t("span",Zn,"-"+o(e(A).linesRemoved),1)],64)):m("",!0),e(A).unreviewed>0?(s(),l("span",Qn," ("+o(e(A).unreviewed)+" unreviewed) ",1)):m("",!0)],64)):(s(),l("span",Xn,"No commits selected"))]),c(K,{color:"neutral",variant:"ghost",onClick:i[3]||(i[3]=_=>f("update:open",!1))},{default:p(()=>[...i[12]||(i[12]=[w(" Cancel ",-1)])]),_:1}),c(K,{color:"primary",disabled:e(h).size===0,onClick:X},{default:p(()=>[...i[13]||(i[13]=[w(" Add to context ",-1)])]),_:1},8,["disabled"])])]),_:1},8,["open"])}}}),ea=Object.assign(Yn,{__name:"CommitBrowserModal"});function je(a){return{scmStatus:P(()=>{const u=a.value?.scm;if(!u)return{color:"text-gray-400",icon:"i-lucide-git-branch",text:"Git context unavailable",detail:""};if(u.baseCommitUsed){if(u.filesCount===0)return{color:"text-yellow-500",icon:"i-lucide-git-branch-plus",text:`Manual baseline ${u.baseCommitUsed.slice(0,7)} · fetch failed`,detail:"network error or missing SCM token (check AI settings)"};const g=u.patchesOmitted?", no patches (diff too large)":u.patchesTruncated?`, ${u.patchedFilesCount} with patches (some cut)`:`, ${u.patchedFilesCount} with patches`;return{color:"text-blue-500",icon:"i-lucide-git-branch-plus",text:`Manual baseline ${u.baseCommitUsed.slice(0,7)} · ${u.filesCount} files${g}`,detail:u.hasLastGreen?"overrides last passing run baseline":"no last passing run"}}if(!u.hasLastGreen)return{color:"text-gray-400",icon:"i-lucide-git-branch",text:"No last passing run",detail:"enter a baseline commit below to enable diff"};if(!u.hasCommitRange)return{color:"text-gray-400",icon:"i-lucide-git-branch",text:"No commit range",detail:"reporter did not send SCM metadata"};if(!u.provider)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:"Unsupported SCM host",detail:"only GitHub, GitLab and Bitbucket are supported"};if(u.filesCount===0)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:`${u.provider} · fetch failed`,detail:"network error or missing SCM token (check AI settings)"};if(u.patchesOmitted)return{color:"text-yellow-500",icon:"i-lucide-git-branch",text:`${u.provider} · ${u.filesCount} files`,detail:"diff too large — file list only, no patches"};const b=u.patchesTruncated?", some patches cut (budget)":"",f=u.commitsCount>0?` · ${u.commitsCount} commit${u.commitsCount>1?"s":""}`:"";return{color:"text-green-500",icon:"i-lucide-git-branch",text:`${u.provider} · ${u.filesCount} files · ${u.patchedFilesCount} with patches${b}${f}`,detail:""}})}}const ta={class:"space-y-3"},sa={class:"pb-2 border-b border-default"},na={class:"flex items-center gap-2 flex-wrap"},aa={class:"text-xs text-gray-500 font-medium shrink-0 inline-flex items-center gap-1"},oa={class:"flex items-center gap-1.5 ml-auto"},la={key:0,class:"flex items-center gap-1 px-2 py-0.5 rounded-full bg-primary/10 text-primary text-xs font-medium"},ra={key:0,class:"flex items-start gap-1.5 text-xs px-2 py-1.5 rounded-md bg-elevated border border-default"},ia={key:0,class:"text-gray-400 ml-1"},ca={key:1,class:"flex items-center justify-center py-6"},ua={key:3,class:"text-xs text-gray-400 text-center py-4"},da=ee({__name:"ClusterInvestigation",setup(a){const{clusterId:U,baseCommit:u,selectedCommitShas:b,autoSelectedCommits:f,baseCommitIsPinned:g,coverage:n,scmChanges:d,contextLoading:C,refreshContext:V}=St(),E=x(!1),{scmStatus:R}=je(n);return(T,h)=>{const I=ge,v=Ps,j=te,G=be,D=ie,M=ln,O=ea;return s(),l(L,null,[t("div",ta,[t("div",sa,[t("div",na,[t("span",aa,[h[5]||(h[5]=w(" Baseline ",-1)),c(I,{topic:"cluster.baseline"})]),c(v,{modelValue:e(u),"onUpdate:modelValue":h[0]||(h[0]=A=>J(u)?u.value=A:null),"cluster-id":e(U)},null,8,["modelValue","cluster-id"]),e(g)?(s(),S(G,{key:0,text:"Baseline commit pinned for this cluster"},{default:p(()=>[c(j,{name:"i-lucide-pin",class:"size-3.5 text-primary shrink-0"})]),_:1})):m("",!0),t("div",oa,[e(b).length?(s(),l("div",la,[c(j,{name:"i-lucide-git-commit-horizontal",class:"size-3"}),t("span",null,o(e(b).length)+" commit"+o(e(b).length===1?"":"s"),1),t("button",{class:"ml-0.5 hover:opacity-70 transition-opacity",onClick:h[1]||(h[1]=A=>b.value=[])},[c(j,{name:"i-lucide-x",class:"size-3"})])])):m("",!0),c(D,{size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-list",onClick:h[2]||(h[2]=A=>E.value=!0)},{default:p(()=>[...h[6]||(h[6]=[w(" Browse ",-1)])]),_:1}),c(D,{icon:"i-lucide-refresh-cw",size:"xs",color:"neutral",variant:"outline",loading:e(C),onClick:e(V)},null,8,["loading","onClick"])])])]),e(n)?(s(),l("div",ra,[c(j,{name:e(R).icon,class:Y(["size-3.5 mt-0.5 shrink-0",e(R).color])},null,8,["name","class"]),t("div",null,[t("span",{class:Y(e(R).color)},o(e(R).text),3),e(R).detail?(s(),l("span",ia,"— "+o(e(R).detail),1)):m("",!0)])])):m("",!0),e(C)&&!e(d)?(s(),l("div",ca,[c(j,{name:"i-lucide-loader-circle",class:"size-4 animate-spin text-gray-400"})])):e(d)?(s(),S(M,{key:2,changes:e(d)},null,8,["changes"])):e(n)&&!e(C)&&!e(d)?(s(),l("p",ua," No changes found in this range. ")):m("",!0)]),c(O,{open:e(E),"onUpdate:open":h[3]||(h[3]=A=>J(E)?E.value=A:null),"cluster-id":e(U),"initial-selected":e(b),"auto-selected-shas":e(f),onConfirm:h[4]||(h[4]=A=>b.value=A)},null,8,["open","cluster-id","initial-selected","auto-selected-shas"])],64)}}}),ma=Object.assign(da,{__name:"ClusterInvestigation"}),fa={class:"flex flex-col h-[60vh]"},pa={class:"flex items-center gap-3 px-4 py-2.5 border-b border-default text-sm shrink-0"},ga={key:0,class:"ml-auto text-xs text-gray-500"},xa={class:"flex-1 overflow-y-auto"},va={class:"w-full text-sm"},_a=["onClick"],ha={class:"px-4 py-2.5"},ya=["checked","onChange"],ka={class:"px-2 py-2.5 min-w-0"},ba={class:"truncate font-medium text-gray-800 dark:text-gray-200 max-w-[24rem]"},$a={class:"px-2 py-2.5 text-gray-500 text-xs max-w-[16rem] hidden sm:table-cell"},Ca={class:"px-2 py-2.5 text-right text-gray-500 text-xs"},wa={key:0},Sa={class:"shrink-0 border-t border-default px-4 py-3 space-y-1.5"},Ta={key:0,class:"shrink-0 px-4 pb-3 flex items-center gap-1.5 text-xs text-red-500"},ja={class:"flex items-center gap-3 w-full"},Ia=ee({__name:"ClusterExtractCasesModal",props:{open:{type:Boolean},clusterId:{},affectedTestCases:{},projectKey:{},projectName:{}},emits:["update:open","extracted"],setup(a,{emit:U}){const u=a,b=U,f=Ke(),g=x(new Set),n=x(""),d=x(!1),C=x(null);function V(){g.value=new Set(u.affectedTestCases.map(I=>I.testCaseId))}function E(){g.value=new Set}function R(I){const v=new Set(g.value);v.has(I)?v.delete(I):v.add(I),g.value=v}ne(()=>u.open,I=>{I&&(E(),n.value="",C.value=null)});const T=P(()=>g.value.size);async function h(){if(T.value!==0){d.value=!0,C.value=null;try{await $fetch(`/api/failure-clusters/${u.clusterId}/extract-cases`,{method:"POST",body:{testCaseIds:[...g.value],triageNote:n.value.trim()||void 0}}),f.add({title:`Extracted ${T.value} test ${T.value===1?"case":"cases"}`,color:"success"}),b("extracted"),b("update:open",!1)}catch(I){C.value=de(I)}finally{d.value=!1}}}return(I,v)=>{const j=ye,G=xe,D=$e,M=te,O=ie,A=Te;return s(),S(A,{open:a.open,title:"Extract test cases",ui:{content:"max-w-4xl",body:"p-0 flex flex-col overflow-hidden"},"onUpdate:open":v[4]||(v[4]=F=>b("update:open",F))},{body:p(()=>[t("div",fa,[t("div",pa,[t("button",{class:"text-xs font-medium text-primary hover:underline",onClick:V},"Select all"),v[5]||(v[5]=t("span",{class:"text-gray-300 dark:text-gray-600"},"·",-1)),t("button",{class:"text-xs font-medium text-primary hover:underline",onClick:E},"Deselect all"),e(T)>0?(s(),l("span",ga,o(e(T))+" selected ",1)):m("",!0)]),t("div",xa,[t("table",va,[v[8]||(v[8]=t("thead",{class:"sticky top-0 bg-gray-50 dark:bg-gray-800 border-b border-default"},[t("tr",null,[t("th",{class:"w-10 px-4 py-2.5"}),t("th",{class:"text-left px-2 py-2.5 font-medium text-gray-500 text-xs uppercase tracking-wide"},"Test"),t("th",{class:"text-left px-2 py-2.5 font-medium text-gray-500 text-xs uppercase tracking-wide hidden sm:table-cell"}," File "),t("th",{class:"text-right px-2 py-2.5 font-medium text-gray-500 text-xs uppercase tracking-wide w-20"}," Occurrences ")])],-1)),t("tbody",null,[(s(!0),l(L,null,Q(a.affectedTestCases,F=>(s(),l("tr",{key:F.testCaseId,class:"border-b border-default/50 hover:bg-elevated transition-colors cursor-pointer",onClick:z=>R(F.testCaseId)},[t("td",ha,[t("input",{type:"checkbox",checked:e(g).has(F.testCaseId),class:"shrink-0 cursor-pointer accent-primary",onClick:v[0]||(v[0]=fe(()=>{},["stop"])),onChange:z=>R(F.testCaseId)},null,40,ya)]),t("td",ka,[t("p",ba,o(F.title),1),c(j,{to:`/test-cases/${F.testCaseId}`,class:"text-[10px] text-primary hover:underline mt-0.5 inline-block",onClick:v[1]||(v[1]=fe(()=>{},["stop"]))},{default:p(()=>[...v[6]||(v[6]=[w(" View details ",-1)])]),_:1},8,["to"])]),t("td",$a,[c(G,{"file-path":F.filePath,"project-key":a.projectKey,"project-name":a.projectName,class:"max-w-full"},null,8,["file-path","project-key","project-name"])]),t("td",Ca,o(F.runCount),1)],8,_a))),128)),a.affectedTestCases.length===0?(s(),l("tr",wa,[...v[7]||(v[7]=[t("td",{colspan:"4",class:"px-4 py-8 text-center text-gray-400 text-sm"},"No test cases in this cluster.",-1)])])):m("",!0)])])]),t("div",Sa,[v[9]||(v[9]=t("label",{class:"text-xs font-medium text-gray-500 uppercase tracking-wide"},"Triage note (optional)",-1)),c(D,{modelValue:e(n),"onUpdate:modelValue":v[2]||(v[2]=F=>J(n)?n.value=F:null),placeholder:"Add a note explaining why these tests were extracted…",rows:2,class:"text-sm w-full"},null,8,["modelValue"])]),e(C)?(s(),l("p",Ta,[c(M,{name:"i-lucide-circle-alert",class:"size-3.5 shrink-0"}),w(" "+o(e(C)),1)])):m("",!0)])]),footer:p(()=>[t("div",ja,[v[11]||(v[11]=t("div",{class:"flex-1"},null,-1)),c(O,{color:"neutral",variant:"ghost",disabled:e(d),onClick:v[3]||(v[3]=F=>b("update:open",!1))},{default:p(()=>[...v[10]||(v[10]=[w(" Cancel ",-1)])]),_:1},8,["disabled"]),c(O,{color:"warning",disabled:e(T)===0,loading:e(d),onClick:h},{default:p(()=>[w(" Extract"+o(e(T)>0?` ${e(T)}`:""),1)]),_:1},8,["disabled","loading"])])]),_:1},8,["open"])}}}),Ua=Object.assign(Ia,{__name:"ClusterExtractCasesModal"}),za={key:0,class:"flex flex-col h-full min-h-0 max-xl:overflow-y-auto xl:overflow-hidden"},Ra={class:"border-b border-default shrink-0"},Ea={class:"grid grid-cols-1 xl:grid-cols-[3fr_2fr] gap-4 p-1 xl:flex-1 xl:min-h-0 xl:overflow-hidden"},Aa={class:"space-y-4 xl:overflow-y-auto"},Va={class:"font-mono text-xs"},Ma=["innerHTML"],Na={class:"inline-flex items-center gap-1.5"},Fa={class:"xl:overflow-y-auto"},Ba={key:1,class:"flex items-center justify-center h-64 text-gray-500"},ko=ee({__name:"[id]",async setup(a){let U,u;const b=We(),f=parseInt(String(b.params.id)),g=Tt(f),{data:n,refresh:d}=([U,u]=Je(()=>Ut(`/api/failure-clusters/${f}`,"$y4C0kntcH9")),U=await U,u(),U);Ze(P(()=>({title:`${n.value?.signature??"Failure cluster"} — Piwi Dashboard`})));const C=x(n.value?.status??"open"),V=x(n.value?.triageNote??""),E=x(!1);ne(()=>n.value?.status,k=>{k&&(C.value=k)}),ne(()=>n.value?.triageNote,k=>{V.value=k??""});const R=P(()=>C.value!==(n.value?.status??"open")||V.value.trim()!==(n.value?.triageNote??""));async function T(){E.value=!0;try{await $fetch(`/api/failure-clusters/${f}/status`,{method:"PATCH",body:{status:C.value,triageNote:V.value.trim()||null}}),d()}finally{E.value=!1}}const h=x(!1);function I(){h.value=!1,d()}const{copyRich:v,copied:j}=rt();function G(){const k=n.value;if(!k)return;const N=window.location.href,q=se=>se.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),K=[k.errorType,`${k.occurrences} occurrence${k.occurrences===1?"":"s"}`,`${k.affectedTests} test${k.affectedTests===1?"":"s"} affected`,k.status!=="open"?k.status:null].filter(Boolean).join(" · "),W=k.diagnosis?.status==="completed"&&k.diagnosis.summary?`AI diagnosis (${k.diagnosis.category??"unknown"}, ${k.diagnosis.confidence??"?"} confidence): ${k.diagnosis.summary}`:null,Z=[`❌ Failure cluster: ${k.signature}`,K,"",...k.sampleError?["Sample error:",ve(k.sampleError),""]:[],...W?[W,""]:[],`Cluster: ${N}`].join(`
|
|
3
|
-
`),ae=[`<p><strong>❌ Failure cluster</strong>: <code>${q(k.signature)}</code></p>`,`<p><em>${q(K)}</em></p>`,k.sampleError?`<p><strong>Sample error:</strong></p><pre>${he(k.sampleError)}</pre>`:"",W?`<p><strong>AI diagnosis</strong> (${q(k.diagnosis?.category??"unknown")}, ${q(k.diagnosis?.confidence??"?")} confidence):<br>${q(k.diagnosis.summary)}</p>`:"",`<p>🔗 <a href="${N}">View failure cluster</a></p>`].join("");v(Z,ae,{toast:"Failure cluster copied"})}const D=P(()=>{const k=n.value?.sampleError;return k?ve(k).split(`
|
|
4
|
-
`).find(N=>N.trim())??"":""}),{scmStatus:M}=je(g.coverage),O=P(()=>It((n.value?.affectedTestCases??[]).map(k=>({filePath:k.filePath,title:k.title,line:null,projectName:null})))),{copy:A,copied:F}=zt(),z=x(null),r=x(null),$=x(null),B=x(null),H=x(null),X=x(null),y={sampleError:()=>z.value,executionError:()=>z.value,environmentDiff:()=>B.value,visualDiff:()=>H.value,domSnapshot:()=>X.value,scmInvestigation:()=>$.value,selectedCommits:()=>$.value,topSuspectedCommit:()=>$.value,failingAction:()=>$.value,affectedTests:()=>r.value,testSource:()=>r.value,sourceFiles:()=>r.value,steps:()=>r.value,failingSteps:()=>r.value,console:()=>r.value,networkRequests:()=>r.value,serverTraces:()=>r.value,ariaSnapshot:()=>r.value,screenshots:()=>r.value,tracePointers:()=>r.value,artifacts:()=>r.value};Qe(it,{canLocate:k=>k in y,open:k=>y[k]?.()?.reveal()});const i=P(()=>[{label:"Home",icon:"i-lucide-house",to:"/"},{label:"Projects",to:"/projects"},...n.value?.project?[{label:n.value.project.label||n.value.project.name||"Project",to:`/projects/${n.value.project.id}?tab=failure-clusters`}]:[{label:"Project"}],{label:`Failure cluster #${f}`}]);return(k,N)=>{const q=Be,K=Le,W=ie,Z=be,ae=Ye,se=Jt,oe=vt,_=_t,le=ht,Ie=yt,Ue=kt,ze=xe,Re=ue,Ee=xs,Ae=te,Ve=ma,Me=jt,Ne=Xe,Fe=Ua;return s(),l(L,null,[c(Ne,{id:"failure-cluster-detail"},{header:p(()=>[c(ae,null,{leading:p(()=>[c(q),c(K,{items:e(i)},null,8,["items"])]),right:p(()=>[e(n)?(s(),S(Z,{key:0,text:e(j)?"Copied!":"Copy failure cluster"},{default:p(()=>[c(W,{size:"sm",variant:"ghost",color:"neutral",icon:e(j)?"i-lucide-check":"i-lucide-clipboard",onClick:G},null,8,["icon"])]),_:1},8,["text"])):m("",!0)]),_:1})]),body:p(()=>[e(n)?(s(),l("div",za,[t("div",Ra,[c(se,{cluster:e(n),"triage-status":e(C),"triage-note":e(V),"triage-saving":e(E),"triage-changed":e(R),"onUpdate:triageStatus":N[0]||(N[0]=re=>C.value=re),"onUpdate:triageNote":N[1]||(N[1]=re=>V.value=re),onSaveTriage:T},null,8,["cluster","triage-status","triage-note","triage-saving","triage-changed"])]),t("div",Ea,[t("div",Aa,[e(n).sampleError?(s(),S(oe,{key:0,ref_key:"errorSection",ref:z,"storage-key":"cluster-error",icon:"i-lucide-circle-x","icon-class":"text-red-500",title:"Error message"},{folded:p(()=>[t("span",Va,o(e(D)),1)]),default:p(()=>[t("div",{class:"text-xs font-mono overflow-x-auto whitespace-pre-wrap",innerHTML:e(he)(e(n).sampleError)},null,8,Ma)]),_:1},512)):m("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(_,{key:1,ref:"locatorSection","storage-key":"cluster-locators","run-id":e(n).lastSeenRunId,"test-runs-case-id":e(n).affectedTestCases[0].recentTestRunsCaseId,"affected-count":e(n).affectedTestCases.length},null,8,["run-id","test-runs-case-id","affected-count"])):m("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(le,{key:2,ref_key:"envDiffSection",ref:B,"storage-key":"cluster-env-diff","run-id":e(n).lastSeenRunId,"test-runs-case-id":e(n).affectedTestCases[0].recentTestRunsCaseId},null,8,["run-id","test-runs-case-id"])):m("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(Ie,{key:3,ref_key:"visualDiffSection",ref:H,"storage-key":"cluster-visual-diff","run-id":e(n).lastSeenRunId,"test-runs-case-id":e(n).affectedTestCases[0].recentTestRunsCaseId},null,8,["run-id","test-runs-case-id"])):m("",!0),e(n).affectedTestCases?.length&&e(n).affectedTestCases[0]?.recentTestRunsCaseId?(s(),S(Ue,{key:4,ref_key:"domSnapshotSection",ref:X,"storage-key":"cluster-dom-snapshot","run-id":e(n).lastSeenRunId,"test-runs-case-id":e(n).affectedTestCases[0].recentTestRunsCaseId},null,8,["run-id","test-runs-case-id"])):m("",!0),e(n).affectedTestCases?.length?(s(),S(oe,{key:5,ref_key:"evidenceSection",ref:r,"storage-key":"cluster-evidence",icon:"i-lucide-flask-conical",title:"Test evidence",help:"cluster.evidence"},{folded:p(()=>[w(o(e(n).affectedTests)+" "+o(e(n).affectedTests===1?"test":"tests")+" · "+o(e(n).occurrences)+" occurrence"+o(e(n).occurrences===1?"":"s")+" · ",1),e(n).affectedTestCases[0]?.filePath?(s(),S(ze,{key:0,"file-path":e(n).affectedTestCases[0].filePath,"project-key":e(n).project?.id,"project-name":e(n).project?.name,class:"text-xs"},null,8,["file-path","project-key","project-name"])):m("",!0)]),actions:p(()=>[c(Re,{color:"neutral",variant:"subtle",size:"sm"},{default:p(()=>[w(o(e(n).affectedTestCases.length)+" "+o(e(n).affectedTestCases.length===1?"test":"tests"),1)]),_:1}),c(W,{size:"xs",variant:"outline",color:"neutral",icon:e(F)?"i-lucide-check":"i-lucide-play",title:e(F)?"Copied!":("copyPreview"in k?k.copyPreview:e(ut))(e(O)),onClick:N[2]||(N[2]=re=>e(A)(e(O),{toast:"Retry command copied"}))},{default:p(()=>[...N[5]||(N[5]=[w(" Copy retry command ",-1)])]),_:1},8,["icon","title"]),c(Z,{text:"Unlink incorrectly clustered test cases from this group"},{default:p(()=>[c(W,{size:"xs",color:"warning",variant:"outline",icon:"i-lucide-arrow-up-from-line",onClick:N[3]||(N[3]=re=>h.value=!0)},{default:p(()=>[...N[6]||(N[6]=[w(" Extract ",-1)])]),_:1})]),_:1})]),default:p(()=>[c(Ee,{"affected-test-cases":e(n).affectedTestCases,"project-key":e(n).project?.id,"project-name":e(n).project?.name},null,8,["affected-test-cases","project-key","project-name"])]),_:1},512)):m("",!0),c(oe,{ref_key:"scmSection",ref:$,"storage-key":"cluster-scm",icon:"i-lucide-git-compare-arrows",title:"What changed",help:"cluster.scm"},{folded:p(()=>[t("span",Na,[c(Ae,{name:e(M).icon,class:Y(["size-3.5 shrink-0",e(M).color])},null,8,["name","class"]),t("span",{class:Y(e(M).color)},o(e(M).text),3)])]),default:p(()=>[c(Ve)]),_:1},512)]),t("div",Fa,[c(Me,{"cluster-id":e(f),"last-seen-run-id":e(n)?.lastSeenRunId,"affected-test-cases":e(n)?.affectedTestCases??[]},null,8,["cluster-id","last-seen-run-id","affected-test-cases"])])])])):(s(),l("div",Ba,"Cluster not found."))]),_:1}),e(n)?(s(),S(Fe,{key:0,open:e(h),"cluster-id":e(f),"affected-test-cases":e(n).affectedTestCases??[],"project-key":e(n).project?.id,"project-name":e(n).project?.name,"onUpdate:open":N[4]||(N[4]=re=>h.value=re),onExtracted:I},null,8,["open","cluster-id","affected-test-cases","project-key","project-name"])):m("",!0)],64)}}});export{ko as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as k}from"./B2oUeBbA.js";import{d as _,f as r,g as l,k as b,o as n,c as a,t as u,m as h,F as g,y as V,h as f,i as y,q as v,aa as x,T as p}from"./DHltYerF.js";import{_ as B}from"./DHXWp5yD.js";import{_ as $}from"./C9YzQCiq.js";import{_ as E}from"./DZ3Vfcpz.js";import{h as M}from"./r3SBLxtE.js";const F={key:0},q={key:1},S={class:"font-mono text-xs"},T={key:0},A={key:2},C=_({__name:"EnvManagedAlert",props:{envVars:{},title:{},description:{}},setup(e){const t=e,c=f(()=>t.title??"Managed by environment variables");return(o,s)=>{const d=k;return n(),r(d,{icon:"i-lucide-lock",color:"neutral",variant:"subtle",title:b(c)},{description:l(()=>[e.description?(n(),a("span",F,u(e.description),1)):e.envVars?.length?(n(),a("span",q,[s[0]||(s[0]=h(" These settings are pinned by ",-1)),(n(!0),a(g,null,V(e.envVars,(i,m)=>(n(),a(g,{key:i},[y("code",S,u(i),1),m<e.envVars.length-1?(n(),a("span",T,", ")):v("",!0)],64))),128)),s[1]||(s[1]=h(" and cannot be changed here. Edit the environment and restart to change them. ",-1))])):(n(),a("span",A," These settings are pinned by environment variables and cannot be changed here. "))]),_:1},8,["title"])}}}),z=Object.assign(C,{__name:"EnvManagedAlert"}),N={class:"inline-flex items-center gap-1"},j=_({__name:"SettingsField",props:{label:{},help:{},envVars:{},envManaged:{type:Boolean},description:{},hint:{},required:{type:Boolean},name:{},disabled:{type:Boolean}},setup(e){const t=e,c=f(()=>{if(t.envVars)return t.envVars;if(t.help)return M(t.help)});return(o,s)=>{const d=B,i=$,m=E;return n(),r(m,{label:e.label,description:e.description,hint:e.hint,required:e.required,name:e.name,disabled:e.disabled||e.envManaged},x({label:l(()=>[y("span",N,[h(u(e.label)+" ",1),e.help?(n(),r(d,{key:0,topic:e.help},null,8,["topic"])):v("",!0),e.envManaged?(n(),r(i,{key:1,"env-vars":b(c)},null,8,["env-vars"])):v("",!0)])]),default:l(()=>[p(o.$slots,"default")]),_:2},[o.$slots.trailing?{name:"trailing",fn:l(()=>[p(o.$slots,"trailing")]),key:"0"}:void 0]),1032,["label","description","hint","required","name","disabled"])}}}),G=Object.assign(j,{__name:"SettingsField"});export{z as _,G as a};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as F,S as Z,o as i,f as P,g as u,T,m as I,U as Q,k as e,V as H,W as Oe,X as Ke,h as k,Y as Ge,Z as Qe,$ as Ze,t as x,c as $,i as f,O as de,p as N,j as d,v as Y,F as A,y as le,s as Re,x as $e,q as w,_ as G,r as M,a0 as He,a1 as We,a2 as Xe,a3 as Ye,a4 as Je,a5 as et,a6 as tt,u as at,a as st,K as lt,B as te,D as nt,l as ae,a7 as ot,a8 as ue}from"./DHltYerF.js";import{_ as it}from"./B1zMFx24.js";import{_ as rt}from"./BjCHB89N.js";import{_ as ut}from"./BJtlcTrb.js";import{_ as dt}from"./qpI-_f9Q.js";import{_ as ct}from"./C1dyLp_j.js";import{_ as pt}from"./B2oUeBbA.js";import{_ as qe}from"./DoFBTaDR.js";import{j as ce,t as pe,h as fe,p as me,f as ge,e as ft}from"./BeKvLsja.js";import{_ as mt}from"./swrbBdtB.js";import{_ as gt}from"./BXY_PWcx.js";import{_ as vt}from"./CN1mJlvD.js";import{u as _t}from"./CfOLBbW9.js";import{u as yt}from"./DXbPFI1d.js";var bt=F({__name:"PaginationEllipsis",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(r){const c=r;return Z(),(s,v)=>(i(),P(e(H),Q(c,{"data-type":"ellipsis"}),{default:u(()=>[T(s.$slots,"default",{},()=>[v[0]||(v[0]=I("…"))])]),_:3},16))}}),ht=bt;const[J,xt]=Ge("PaginationRoot");var kt=F({__name:"PaginationRoot",props:{page:{type:Number,required:!1},defaultPage:{type:Number,required:!1,default:1},itemsPerPage:{type:Number,required:!0},total:{type:Number,required:!1,default:0},siblingCount:{type:Number,required:!1,default:2},disabled:{type:Boolean,required:!1},showEdges:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"nav"}},emits:["update:page"],setup(r,{emit:c}){const s=r,v=c,{siblingCount:m,disabled:t,showEdges:C}=Oe(s);Z();const b=Ke(s,"page",v,{defaultValue:s.defaultPage,passive:s.page===void 0}),j=k(()=>Math.max(1,Math.ceil(s.total/(s.itemsPerPage||1))));return xt({page:b,onPageChange(L){b.value=L},pageCount:j,siblingCount:m,disabled:t,showEdges:C}),(L,D)=>(i(),P(e(H),{as:L.as,"as-child":L.asChild},{default:u(()=>[T(L.$slots,"default",{page:e(b),pageCount:j.value})]),_:3},8,["as","as-child"]))}}),Ct=kt,Pt=F({__name:"PaginationFirst",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r,s=J();Z();const v=k(()=>s.page.value===1||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"First Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(1))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("First page"))])]),_:3},16,["type","disabled"]))}}),Rt=Pt,$t=F({__name:"PaginationLast",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r,s=J();Z();const v=k(()=>s.page.value===s.pageCount.value||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"Last Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(e(s).pageCount.value))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("Last page"))])]),_:3},16,["type","disabled"]))}}),qt=$t;function K(r,c){const s=c-r+1;return Array.from({length:s},(v,m)=>m+r)}function St(r){return r.map(c=>typeof c=="number"?{type:"page",value:c}:{type:"ellipsis"})}const se="ellipsis";function zt(r,c,s,v){const t=c,C=Math.max(r-s,1),b=Math.min(r+s,t);if(v){const L=Math.min(2*s+5,c)-2,D=C>3&&Math.abs(t-L-1+1)>2&&Math.abs(C-1)>2,B=b<t-2&&Math.abs(t-L)>2&&Math.abs(t-b)>2;if(!D&&B)return[...K(1,L),se,t];if(D&&!B){const l=K(t-L+1,t);return[1,se,...l]}if(D&&B){const l=K(C,b);return[1,se,...l,se,t]}return K(1,t)}else{const j=s*2+1;return c<j?K(1,t):r<=s+1?K(1,j):c-r<=s?K(c-j+1,t):K(C,b)}}var It=F({__name:"PaginationList",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(r){const c=r;Z();const s=J(),v=k(()=>St(zt(s.page.value,s.pageCount.value,s.siblingCount.value,s.showEdges.value)));return(m,t)=>(i(),P(e(H),Qe(Ze(c)),{default:u(()=>[T(m.$slots,"default",{items:v.value})]),_:3},16))}}),Lt=It,Nt=F({__name:"PaginationListItem",props:{value:{type:Number,required:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r;Z();const s=J(),v=k(()=>s.page.value===c.value),m=k(()=>s.disabled.value);return(t,C)=>(i(),P(e(H),Q(c,{"data-type":"page","aria-label":`Page ${t.value}`,"aria-current":v.value?"page":void 0,"data-selected":v.value?"true":void 0,disabled:m.value,type:t.as==="button"?"button":void 0,onClick:C[0]||(C[0]=b=>!m.value&&e(s).onPageChange(t.value))}),{default:u(()=>[T(t.$slots,"default",{},()=>[I(x(t.value),1)])]),_:3},16,["aria-label","aria-current","data-selected","disabled","type"]))}}),jt=Nt,Tt=F({__name:"PaginationNext",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r;Z();const s=J(),v=k(()=>s.page.value===s.pageCount.value||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"Next Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(e(s).page.value+1))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("Next page"))])]),_:3},16,["type","disabled"]))}}),wt=Tt,Ft=F({__name:"PaginationPrev",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(r){const c=r;Z();const s=J(),v=k(()=>s.page.value===1||s.disabled.value);return(m,t)=>(i(),P(e(H),Q(c,{"aria-label":"Previous Page",type:m.as==="button"?"button":void 0,disabled:v.value,onClick:t[0]||(t[0]=C=>!v.value&&e(s).onPageChange(e(s).page.value-1))}),{default:u(()=>[T(m.$slots,"default",{},()=>[t[1]||(t[1]=I("Prev page"))])]),_:3},16,["type","disabled"]))}}),Dt=Ft;const Bt=["title"],Et={class:"h-1.5 w-14 shrink-0 overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700"},Vt={class:"text-sm font-medium tabular-nums"},Mt={key:1,class:"text-sm text-muted",title:"No executed runs yet"},At=F({__name:"PassRateIndicator",props:{rate:{}},setup(r){const c=r,s=k(()=>c.rate==null?null:Math.round(c.rate*100)),v=k(()=>s.value==null?"":s.value>=80?"bg-green-500":s.value>=50?"bg-amber-500":"bg-red-500");return(m,t)=>e(s)!=null?(i(),$("div",{key:0,class:"flex items-center gap-2",title:`${e(s)}% of executed runs passed`},[f("div",Et,[f("div",{class:N([e(v),"h-full rounded-full transition-all"]),style:de({width:`${e(s)}%`})},null,6)]),f("span",Vt,x(e(s))+"%",1)],8,Bt)):(i(),$("span",Mt,"—"))}}),Se=Object.assign(At,{__name:"PassRateIndicator"}),Ut={class:"rounded-lg border border-default text-sm"},Ot={class:"flex items-center justify-end px-3 py-1.5 border-b border-default bg-elevated"},Kt=["disabled","title"],Gt=["onClick"],Qt={class:"text-xs text-muted tabular-nums shrink-0"},Zt={class:"w-24 sm:w-32 shrink-0 max-sm:hidden"},Ht={class:"flex items-center gap-3 shrink-0"},Wt=["title"],Xt={key:0,class:"text-xs text-muted tabular-nums max-sm:hidden"},Yt=["title"],Jt={key:0,class:"text-center py-8 text-muted"},ea=F({__name:"ProjectTestCasesTree",props:{items:{},hasFilter:{type:Boolean}},setup(r){const c=r;function s(l){return(l.suitePath||"").split("").filter(Boolean)}function v(l){const n={passed:0,failed:0,skipped:0,flaky:0,didNotRun:0,total:0,cases:l.length};for(const g of l)n.passed+=g.passedRuns,n.failed+=g.failedRuns,n.skipped+=g.skippedRuns,n.flaky+=g.flakyRuns,n.didNotRun+=g.didNotRunRuns,n.total+=g.totalRuns;return n}const m=M(new Set),t=k(()=>m.value.size===0);function C(l){return c.hasFilter?!0:!m.value.has(l)}function b(l){if(c.hasFilter)return;const n=new Set(m.value);n.has(l)?n.delete(l):n.add(l),m.value=n}function j(){const l=new Set;for(const n of c.items){l.add(`file:${n.filePath}`);const g=s(n);for(let y=1;y<=g.length;y++)l.add(`group:${n.filePath}${g.slice(0,y).join("")}`)}return[...l]}function L(){m.value=new Set(j())}function D(){m.value=new Set}function B(l,n,g,y,h){const S=n.filter(o=>s(o).length===y.length),q=n.filter(o=>s(o).length>y.length),z=new Map;for(const o of q){const R=s(o)[y.length];z.has(R)||z.set(R,[]),z.get(R).push(o)}for(const[o,R]of z){const ee=[...y,o],V=`group:${g}${ee.join("")}`;l.push({kind:"group",depth:h,key:V,label:o,agg:v(R)}),C(V)&&B(l,R,g,ee,h+1)}for(const o of S)l.push({kind:"case",depth:h,key:`case:${o.id}`,testCase:o})}const U=k(()=>{const l=[],n=new Map;for(const g of c.items){const y=g.filePath||"unknown";n.has(y)||n.set(y,[]),n.get(y).push(g)}for(const[g,y]of[...n.entries()].sort(([h],[S])=>h.localeCompare(S))){const h=`file:${g}`;l.push({kind:"group",depth:0,key:h,label:g,agg:v(y)}),C(h)&&B(l,y,g,[],1)}return l});return(l,n)=>{const g=Y,y=qe,h=Re,S=$e,q=Se,z=G;return i(),$("div",Ut,[f("div",Ot,[f("button",{class:N(["flex items-center gap-1 text-xs transition-colors",r.hasFilter?"text-muted cursor-not-allowed opacity-50":"text-muted hover:text-default"]),disabled:r.hasFilter,title:r.hasFilter?"Clear filters to collapse/expand":e(t)?"Collapse all":"Expand all",onClick:n[0]||(n[0]=o=>e(t)?L():D())},[d(g,{name:e(t)?"i-lucide-fold-vertical":"i-lucide-unfold-vertical",class:"size-3.5"},null,8,["name"]),I(" "+x(e(t)?"Collapse all":"Expand all"),1)],10,Kt)]),(i(!0),$(A,null,le(e(U),o=>(i(),$(A,{key:o.key},[o.kind==="group"?(i(),$("div",{key:0,class:N(["flex items-center gap-2 py-2 pr-3 border-b border-default last:border-b-0 select-none",[o.depth===0?"bg-elevated":"bg-default",!r.hasFilter&&"cursor-pointer"]]),style:de({paddingLeft:`${o.depth*20+12}px`}),onClick:R=>b(o.key)},[d(g,{name:C(o.key)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5 text-muted shrink-0"},null,8,["name"]),d(g,{name:o.depth===0?"i-lucide-file-code-2":"i-lucide-folder-open",class:N(["size-4 shrink-0",o.depth===0?"text-blue-500":"text-amber-500"])},null,8,["name","class"]),f("span",{class:N(["font-medium truncate min-w-0",[o.depth===0?"text-default font-mono text-xs sm:text-sm":"text-muted"]])},x(o.label),3),f("span",Qt,x(o.agg.cases)+" "+x(o.agg.cases===1?"case":"cases"),1),n[1]||(n[1]=f("div",{class:"flex-1"},null,-1)),f("div",Zt,[d(y,{passed:o.agg.passed,failed:o.agg.failed,skipped:o.agg.skipped,flaky:o.agg.flaky,"did-not-run":o.agg.didNotRun,total:o.agg.total},null,8,["passed","failed","skipped","flaky","did-not-run","total"])])],14,Gt)):(i(),$("div",{key:1,class:"flex flex-wrap items-center gap-x-2 gap-y-1 pr-3 py-1.5 border-b border-default last:border-b-0 hover:bg-gray-50 dark:hover:bg-gray-900/40 transition-colors",style:de({paddingLeft:`${o.depth*20+12}px`})},[d(g,{name:"i-lucide-flask-conical",class:"size-3.5 text-muted shrink-0"}),d(h,{color:("testCaseCategoryColor"in l?l.testCaseCategoryColor:e(pe))(o.testCase.status),size:"xs",variant:"subtle",class:"capitalize shrink-0"},{default:u(()=>[I(x(("formatStatusLabel"in l?l.formatStatusLabel:e(ce))(o.testCase.status)),1)]),_:2},1032,["color"]),d(S,{to:`/test-cases/${o.testCase.id}`,class:"text-sm text-primary hover:underline truncate flex-1 min-w-32",title:o.testCase.title},{default:u(()=>[I(x(o.testCase.title),1)]),_:2},1032,["to","title"]),f("div",Ht,[d(q,{rate:o.testCase.passRate},null,8,["rate"]),f("span",{class:"text-xs text-muted tabular-nums max-sm:hidden",title:`${o.testCase.totalRuns} runs`},x(o.testCase.totalRuns)+"× ",9,Wt),o.testCase.avgDuration!=null?(i(),$("span",Xt,x(("formatDuration"in l?l.formatDuration:e(fe))(o.testCase.avgDuration)),1)):w("",!0),f("span",{class:"text-xs text-muted max-sm:hidden",title:("prettyDateFormat"in l?l.prettyDateFormat:e(me))(o.testCase.lastRun)},x(("formatRelativeTime"in l?l.formatRelativeTime:e(ge))(o.testCase.lastRun)),9,Yt),d(z,{to:`/test-cases/${o.testCase.id}`,size:"xs",variant:"outline"},{default:u(()=>[...n[2]||(n[2]=[I("View",-1)])]),_:1},8,["to"])])],4))],64))),128)),e(U).length===0?(i(),$("div",Jt,[d(g,{name:"i-lucide-search-x",class:"size-6 mx-auto mb-2 text-gray-300 dark:text-gray-600"}),n[3]||(n[3]=f("p",{class:"text-sm"},"No test cases match your filters.",-1))])):w("",!0)])}}}),ta=Object.assign(ea,{__name:"ProjectTestCasesTree"}),aa={slots:{root:"",list:"flex items-center gap-1",ellipsis:"pointer-events-none",label:"min-w-5 text-center",first:"",prev:"",item:"",next:"",last:""}},sa={__name:"UPagination",props:{as:{type:null,required:!1},firstIcon:{type:null,required:!1},prevIcon:{type:null,required:!1},nextIcon:{type:null,required:!1},lastIcon:{type:null,required:!1},ellipsisIcon:{type:null,required:!1},color:{type:null,required:!1,default:"neutral"},variant:{type:null,required:!1,default:"outline"},activeColor:{type:null,required:!1,default:"primary"},activeVariant:{type:null,required:!1,default:"solid"},showControls:{type:Boolean,required:!1,default:!0},size:{type:null,required:!1},to:{type:Function,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultPage:{type:Number,required:!1},disabled:{type:Boolean,required:!1},itemsPerPage:{type:Number,required:!1,default:10},page:{type:Number,required:!1},showEdges:{type:Boolean,required:!1,default:!1},siblingCount:{type:Number,required:!1,default:2},total:{type:Number,required:!1,default:0}},emits:["update:page"],setup(r,{emit:c}){const s=r,v=c,m=He(),t=We("pagination",s),{dir:C}=Xe(),b=Ye(),j=Je(et(t,"as","defaultPage","disabled","itemsPerPage","page","showEdges","siblingCount","total"),v),L=k(()=>t.firstIcon||(C.value==="rtl"?b.ui.icons.chevronDoubleRight:b.ui.icons.chevronDoubleLeft)),D=k(()=>t.prevIcon||(C.value==="rtl"?b.ui.icons.chevronRight:b.ui.icons.chevronLeft)),B=k(()=>t.nextIcon||(C.value==="rtl"?b.ui.icons.chevronLeft:b.ui.icons.chevronRight)),U=k(()=>t.lastIcon||(C.value==="rtl"?b.ui.icons.chevronDoubleLeft:b.ui.icons.chevronDoubleRight)),l=k(()=>tt({extend:aa,...b.ui?.pagination||{}})());return(n,g)=>(i(),P(e(Ct),Q(e(j),{"data-slot":"root",class:l.value.root({class:[e(t).ui?.root,e(t).class]})}),{default:u(({page:y,pageCount:h})=>[d(e(Lt),{"data-slot":"list",class:N(l.value.list({class:e(t).ui?.list}))},{default:u(({items:S})=>[e(t).showControls||m.first?(i(),P(e(Rt),{key:0,"as-child":"","data-slot":"first",class:N(l.value.first({class:e(t).ui?.first}))},{default:u(()=>[T(n.$slots,"first",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:L.value,to:e(t).to?.(1)},null,8,["color","variant","size","icon","to"])])]),_:3},8,["class"])):w("",!0),e(t).showControls||m.prev?(i(),P(e(Dt),{key:1,"as-child":"","data-slot":"prev",class:N(l.value.prev({class:e(t).ui?.prev}))},{default:u(()=>[T(n.$slots,"prev",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:D.value,to:y>1?e(t).to?.(y-1):void 0},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):w("",!0),(i(!0),$(A,null,le(S,(q,z)=>(i(),$(A,{key:z},[q.type==="page"?(i(),P(e(jt),{key:0,"as-child":"",value:q.value,"data-slot":"item",class:N(l.value.item({class:e(t).ui?.item}))},{default:u(()=>[T(n.$slots,"item",Q({ref_for:!0},{item:q,index:z,page:y,pageCount:h}),()=>[d(G,{color:y===q.value?e(t).activeColor:e(t).color,variant:y===q.value?e(t).activeVariant:e(t).variant,size:e(t).size,label:String(q.value),ui:{label:l.value.label()},to:e(t).to?.(q.value),square:""},null,8,["color","variant","size","label","ui","to"])])]),_:2},1032,["value","class"])):(i(),P(e(ht),{key:1,"as-child":"","data-slot":"ellipsis",class:N(l.value.ellipsis({class:e(t).ui?.ellipsis}))},{default:u(()=>[T(n.$slots,"ellipsis",{ui:l.value},()=>[d(G,{as:"div",color:e(t).color,variant:e(t).variant,size:e(t).size,icon:e(t).ellipsisIcon||e(b).ui.icons.ellipsis},null,8,["color","variant","size","icon"])])]),_:3},8,["class"]))],64))),128)),e(t).showControls||m.next?(i(),P(e(wt),{key:2,"as-child":"","data-slot":"next",class:N(l.value.next({class:e(t).ui?.next}))},{default:u(()=>[T(n.$slots,"next",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:B.value,to:y<h?e(t).to?.(y+1):void 0},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):w("",!0),e(t).showControls||m.last?(i(),P(e(qt),{key:3,"as-child":"","data-slot":"last",class:N(l.value.last({class:e(t).ui?.last}))},{default:u(()=>[T(n.$slots,"last",{},()=>[d(G,{color:e(t).color,variant:e(t).variant,size:e(t).size,icon:U.value,to:e(t).to?.(h)},null,8,["color","variant","size","icon","to"])])]),_:2},1032,["class"])):w("",!0)]),_:2},1032,["class"])]),_:3},16,["class"]))}},la={class:"flex items-center rounded-md border border-default overflow-hidden"},na={class:"text-sm text-muted tabular-nums"},oa={class:"flex flex-wrap items-center gap-1"},ia=["aria-pressed","onClick"],ra={class:"mt-3 flex items-center justify-center gap-2"},ua={class:"hidden md:block overflow-x-auto"},da={class:"min-w-0 space-y-0.5"},ca={class:"flex items-center gap-1 text-xs text-muted"},pa={class:"text-sm tabular-nums"},fa={key:0,class:"text-sm text-muted tabular-nums"},ma={key:1,class:"text-sm text-muted"},ga=["title"],va={class:"flex justify-end"},_a={class:"space-y-2 md:hidden"},ya={class:"flex items-start justify-between gap-2"},ba={class:"flex items-center gap-1 text-xs text-muted min-w-0"},ha={class:"flex flex-wrap items-center justify-between gap-x-3 gap-y-1"},xa={class:"text-xs text-muted tabular-nums"},ka={key:0,class:"text-xs text-muted tabular-nums"},Ca=["title"],Pa={class:"mt-4 flex flex-wrap items-center justify-between gap-3"},Ra={class:"flex flex-wrap items-center gap-3"},$a={class:"text-sm text-muted tabular-nums"},qa={class:"flex items-center gap-1.5"},Sa=1e3,Pe=25,za=F({__name:"ProjectTestCasesTable",props:{projectId:{},projectName:{},syncQuery:{type:Boolean}},emits:["total"],setup(r,{expose:c,emit:s}){const v=r,m=s,t=at(),C=st(),{treeView:b,setTreeView:j}=_t("project-test-cases"),L=[{label:"10 / page",value:10},{label:"25 / page",value:25},{label:"50 / page",value:50},{label:"100 / page",value:100}],D=[{label:"Last 7 days",value:7},{label:"Last 30 days",value:30},{label:"Last 90 days",value:90},{label:"Last year",value:365},{label:"All time",value:0}],B=[{label:"Passed",value:"passed",color:"green"},{label:"Failed",value:"failed",color:"red"},{label:"Flaky",value:"flaky",color:"orange"},{label:"Skipped",value:"skipped",color:"gray"},{label:"Didn't run",value:"didnotrun",color:"amber"}],U=lt().public.demoMode?0:30,l=v.syncQuery?t.query:{},n=M(Math.max(1,Number(l.page)||1)),g=M(typeof l.q=="string"?l.q:""),y=M(g.value),h=M(typeof l.status=="string"?l.status.split(",").filter(Boolean):[]),S=M(typeof l.age=="string"&&l.age!==""?Math.max(0,Number(l.age)||0):U),q=M(typeof l.sort=="string"?l.sort:"lastRun"),z=M(l.dir==="asc"?"asc":"desc"),o=Number(l.pageSize),R=M(L.some(p=>p.value===o)?o:Pe);te(y,ot(p=>{g.value=p.trim()},300)),te([g,h,S,q,z,R,b],()=>{n.value=1});const ee=k(()=>({limit:b.value?Sa:R.value,offset:b.value?0:(n.value-1)*R.value,...g.value?{q:g.value}:{},...h.value.length>0?{status:h.value.join(",")}:{},maxAgeDays:S.value,sort:q.value,dir:z.value})),{data:V,status:ne,error:ve,refresh:oe}=yt(`/api/projects/${v.projectId}/test-cases`,{query:ee},"$6hxagaRDEc");te(()=>V.value?.total,p=>{p!=null&&m("total",p)},{immediate:!0}),v.syncQuery&&te([g,h,S,q,z,n,R],()=>{C.replace({query:{...t.query,q:g.value||void 0,status:h.value.length>0?h.value.join(","):void 0,age:S.value!==U?String(S.value):void 0,sort:q.value!=="lastRun"?q.value:void 0,dir:z.value!=="desc"?z.value:void 0,page:n.value>1?String(n.value):void 0,pageSize:R.value!==Pe?String(R.value):void 0}})});function ze(p){h.value=h.value.includes(p)?h.value.filter(_=>_!==p):[...h.value,p]}function Ie(p){q.value===p?z.value=z.value==="asc"?"desc":"asc":(q.value=p,z.value=p==="title"?"asc":"desc")}function W(p,_){return()=>{const O=q.value===_,re=O?z.value==="asc"?"i-lucide-chevron-up":"i-lucide-chevron-down":"i-lucide-chevrons-up-down";return ue("button",{type:"button",class:"flex items-center gap-1 font-semibold select-none cursor-pointer hover:text-highlighted transition-colors",onClick:()=>Ie(_)},[p,ue(Y,{name:re,class:["shrink-0 size-3.5",!O&&"opacity-40"]})])}}const Le=k(()=>[{accessorKey:"title",header:W("Test case","title")},{accessorKey:"status",header:W("Status","status")},{accessorKey:"totalRuns",header:W("Runs","totalRuns")},{accessorKey:"passRate",header:W("Pass rate","passRate")},{id:"results",header:"Results"},{accessorKey:"avgDuration",header:W("Avg duration","avgDuration")},{accessorKey:"lastRun",header:W("Last run","lastRun")},{id:"actions",header:()=>ue("div",{class:"text-right"},"Actions")}]),X=k(()=>V.value?.items??[]),E=k(()=>V.value?.total??0),Ne=k(()=>E.value===0?0:(n.value-1)*R.value+1),je=k(()=>b.value?X.value.length:Math.min(n.value*R.value,E.value)),ie=k(()=>g.value!==""||h.value.length>0),Te=k(()=>ie.value||S.value!==0),we=k(()=>ne.value==="pending"&&!V.value);return c({refresh:oe}),(p,_)=>{const O=G,re=nt,_e=it,Fe=rt,De=ut,Be=dt,ye=ct,Ee=pt,Ve=ta,be=$e,he=mt,xe=Re,ke=Se,Ce=qe,Me=gt,Ae=sa,Ue=vt;return i(),P(Ue,{title:"Test cases",icon:"i-lucide-flask-conical",count:e(V)?.total,help:"project.test-cases"},{actions:u(()=>[d(O,{icon:"i-lucide-refresh-cw",size:"sm",color:"neutral",variant:"ghost","aria-label":"Refresh test cases",loading:e(ne)==="pending"&&!!e(V),onClick:_[0]||(_[0]=()=>e(oe)())},null,8,["loading"])]),default:u(()=>[d(Fe,{class:"mb-4"},{start:u(()=>[f("div",la,[f("button",{type:"button",class:N(["px-2 py-1 text-xs transition-colors",e(b)?"text-muted hover:bg-elevated/60":"bg-primary text-white dark:text-white"]),title:"Flat list",onClick:_[1]||(_[1]=a=>e(j)(!1))},[d(e(Y),{name:"i-lucide-list",class:"size-3.5"})],2),f("button",{type:"button",class:N(["px-2 py-1 text-xs transition-colors",e(b)?"bg-primary text-white dark:text-white":"text-muted hover:bg-elevated/60"]),title:"Tree view",onClick:_[2]||(_[2]=a=>e(j)(!0))},[d(e(Y),{name:"i-lucide-folder-tree",class:"size-3.5"})],2)]),f("span",na,x(e(E))+" "+x(e(E)===1?"case":"cases"),1)]),default:u(()=>[d(re,{modelValue:e(y),"onUpdate:modelValue":_[3]||(_[3]=a=>ae(y)?y.value=a:null),placeholder:"Search title or file...",icon:"i-lucide-search",size:"sm",class:"min-w-48 max-sm:flex-1","aria-label":"Search test cases"},null,8,["modelValue"]),f("div",oa,[(i(),$(A,null,le(B,a=>f("button",{key:a.value,type:"button",class:N(["inline-flex items-center gap-1.5 px-2 py-1 rounded-md text-xs font-medium transition-colors whitespace-nowrap",e(h).includes(a.value)?a.color==="green"?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":a.color==="red"?"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400":a.color==="orange"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":a.color==="amber"?"bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400":"bg-gray-200 text-gray-700 dark:bg-gray-700 dark:text-gray-300":"bg-gray-100 text-gray-500 dark:bg-gray-800 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700"]),"aria-pressed":e(h).includes(a.value),onClick:Ia=>ze(a.value)},[f("span",{class:N(["size-2 rounded-full shrink-0",a.color==="green"?"bg-green-500":a.color==="red"?"bg-red-500":a.color==="orange"?"bg-orange-500":a.color==="amber"?"bg-amber-500":"bg-gray-400"])},null,2),I(" "+x(a.label),1)],10,ia)),64))]),d(_e,{modelValue:e(S),"onUpdate:modelValue":_[4]||(_[4]=a=>ae(S)?S.value=a:null),items:D,size:"sm",class:"w-36","aria-label":"Last run age filter"},null,8,["modelValue"])]),_:1}),e(we)?(i(),P(De,{key:0,text:"Loading test cases..."})):e(ve)?(i(),P(Be,{key:1,text:("errorMessage"in p?p.errorMessage:e(ft))(e(ve),"Failed to load test cases")},{action:u(()=>[d(O,{size:"sm",variant:"outline",onClick:_[5]||(_[5]=()=>e(oe)())},{default:u(()=>[..._[10]||(_[10]=[I("Retry",-1)])]),_:1})]),_:1},8,["text"])):e(E)===0?(i(),$(A,{key:2},[e(Te)?(i(),P(ye,{key:1,icon:"i-lucide-search-x",text:"No test cases match your filters."},{default:u(()=>[f("div",ra,[e(S)!==0?(i(),P(O,{key:0,size:"sm",variant:"outline",onClick:_[6]||(_[6]=a=>S.value=0)},{default:u(()=>[..._[11]||(_[11]=[I("Show all time",-1)])]),_:1})):w("",!0),e(ie)?(i(),P(O,{key:1,size:"sm",variant:"ghost",onClick:_[7]||(_[7]=()=>{y.value="",g.value="",h.value=[]})},{default:u(()=>[..._[12]||(_[12]=[I(" Clear filters ",-1)])]),_:1})):w("",!0)])]),_:1})):(i(),P(ye,{key:0,icon:"i-lucide-flask-conical",text:"No test cases yet for this project."}))],64)):(i(),$("div",{key:3,class:N([{"opacity-60 pointer-events-none":e(ne)==="pending"},"transition-opacity"])},[e(b)?(i(),$(A,{key:0},[e(X).length<e(E)?(i(),P(Ee,{key:0,color:"warning",variant:"subtle",icon:"i-lucide-triangle-alert",class:"mb-3",title:`Showing the first ${e(X).length} of ${e(E)} cases — narrow the search or filters to see the rest.`},null,8,["title"])):w("",!0),d(Ve,{items:e(X),"has-filter":e(ie)},null,8,["items","has-filter"])],64)):(i(),$(A,{key:1},[f("div",ua,[d(Me,{data:e(X),columns:e(Le),ui:{base:"w-full table-fixed border-separate border-spacing-0 min-w-[56rem]",thead:"[&>tr]:bg-elevated/50 [&>tr]:after:content-none",tbody:"[&>tr]:last:[&>td]:border-b-0 [&>tr]:hover:bg-gray-50 dark:[&>tr]:hover:bg-gray-900/50",th:"first:rounded-l-lg last:rounded-r-lg border-y border-default first:border-l last:border-r",td:"border-b border-default"}},{"title-cell":u(({row:a})=>[f("div",da,[d(be,{to:`/test-cases/${a.original.id}`,class:"text-sm font-medium text-primary hover:underline truncate block",title:a.original.title},{default:u(()=>[I(x(a.original.title),1)]),_:2},1032,["to","title"]),f("div",ca,[d(e(Y),{name:"i-lucide-file-code",class:"size-3 shrink-0"}),d(he,{"file-path":a.original.filePath,"project-key":r.projectId,"project-name":r.projectName,class:"min-w-0"},null,8,["file-path","project-key","project-name"])])])]),"status-cell":u(({row:a})=>[d(xe,{color:("testCaseCategoryColor"in p?p.testCaseCategoryColor:e(pe))(a.original.status),variant:"subtle",size:"sm",class:"capitalize"},{default:u(()=>[I(x(("formatStatusLabel"in p?p.formatStatusLabel:e(ce))(a.original.status)),1)]),_:2},1032,["color"])]),"totalRuns-cell":u(({row:a})=>[f("span",pa,x(a.original.totalRuns),1)]),"passRate-cell":u(({row:a})=>[d(ke,{rate:a.original.passRate},null,8,["rate"])]),"results-cell":u(({row:a})=>[d(Ce,{passed:a.original.passedRuns,failed:a.original.failedRuns,skipped:a.original.skippedRuns,flaky:a.original.flakyRuns,"did-not-run":a.original.didNotRunRuns,total:a.original.totalRuns},null,8,["passed","failed","skipped","flaky","did-not-run","total"])]),"avgDuration-cell":u(({row:a})=>[a.original.avgDuration!=null?(i(),$("span",fa,x(("formatDuration"in p?p.formatDuration:e(fe))(a.original.avgDuration)),1)):(i(),$("span",ma,"—"))]),"lastRun-cell":u(({row:a})=>[f("span",{class:"text-sm text-muted",title:("prettyDateFormat"in p?p.prettyDateFormat:e(me))(a.original.lastRun)},x(a.original.lastRun!=null?("formatRelativeTime"in p?p.formatRelativeTime:e(ge))(a.original.lastRun):"—"),9,ga)]),"actions-cell":u(({row:a})=>[f("div",va,[d(O,{to:`/test-cases/${a.original.id}`,size:"sm",variant:"outline","trailing-icon":"i-lucide-arrow-right"},{default:u(()=>[..._[13]||(_[13]=[I(" View ",-1)])]),_:1},8,["to"])])]),_:1},8,["data","columns"])]),f("div",_a,[(i(!0),$(A,null,le(e(X),a=>(i(),$("div",{key:a.id,class:"rounded-lg border border-default p-3 space-y-2"},[f("div",ya,[d(be,{to:`/test-cases/${a.id}`,class:"text-sm font-medium text-primary hover:underline min-w-0 truncate",title:a.title},{default:u(()=>[I(x(a.title),1)]),_:2},1032,["to","title"]),d(xe,{color:("testCaseCategoryColor"in p?p.testCaseCategoryColor:e(pe))(a.status),variant:"subtle",size:"sm",class:"capitalize shrink-0"},{default:u(()=>[I(x(("formatStatusLabel"in p?p.formatStatusLabel:e(ce))(a.status)),1)]),_:2},1032,["color"])]),f("div",ba,[d(e(Y),{name:"i-lucide-file-code",class:"size-3 shrink-0"}),d(he,{"file-path":a.filePath,"project-key":r.projectId,"project-name":r.projectName,class:"min-w-0"},null,8,["file-path","project-key","project-name"])]),d(Ce,{passed:a.passedRuns,failed:a.failedRuns,skipped:a.skippedRuns,flaky:a.flakyRuns,"did-not-run":a.didNotRunRuns,total:a.totalRuns},null,8,["passed","failed","skipped","flaky","did-not-run","total"]),f("div",ha,[d(ke,{rate:a.passRate},null,8,["rate"]),f("span",xa,x(a.totalRuns)+" runs",1),a.avgDuration!=null?(i(),$("span",ka,x(("formatDuration"in p?p.formatDuration:e(fe))(a.avgDuration)),1)):w("",!0),f("span",{class:"text-xs text-muted",title:("prettyDateFormat"in p?p.prettyDateFormat:e(me))(a.lastRun)},x(a.lastRun!=null?("formatRelativeTime"in p?p.formatRelativeTime:e(ge))(a.lastRun):"—"),9,Ca)])]))),128))]),f("div",Pa,[f("div",Ra,[f("span",$a,"Showing "+x(e(Ne))+"–"+x(e(je))+" of "+x(e(E)),1),f("div",qa,[_[14]||(_[14]=f("span",{class:"text-sm text-muted"},"Rows per page",-1)),d(_e,{modelValue:e(R),"onUpdate:modelValue":_[8]||(_[8]=a=>ae(R)?R.value=a:null),items:L,size:"sm",class:"w-28","aria-label":"Rows per page"},null,8,["modelValue"])])]),e(E)>e(R)?(i(),P(Ae,{key:0,page:e(n),"onUpdate:page":_[9]||(_[9]=a=>ae(n)?n.value=a:null),total:e(E),"items-per-page":e(R),size:"sm"},null,8,["page","total","items-per-page"])):w("",!0)])],64))],2))]),_:1},8,["count"])}}}),Ka=Object.assign(za,{__name:"ProjectTestCasesTable"});export{Ka as _};
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import{b as se,B as V,C as be,al as ke,r as h,h as Q,am as Ce,J as qe,d as re,o as p,f as H,g as D,j as g,_ as le,m as k,i as l,q as T,l as _e,k as e,E as We,c as $,v as we,t as j,F as K,y as ie,p as Z,x as Ve,G as Je}from"./DHltYerF.js";import{_ as Ye}from"./DHXWp5yD.js";import{_ as Ge}from"./BUXSUkJ_.js";import{c as Xe,m as Ke,i as Qe,e as Ze,h as et,f as tt,g as st,j as nt}from"./BVf6Yx9V.js";import{u as ot}from"./By4YL7mx.js";import{_ as at}from"./BeFDVhpA.js";import{f as $e,w as it,k as rt}from"./BeKvLsja.js";import{_ as lt}from"./B2oUeBbA.js";import{u as ct}from"./hH1UFE3Z.js";const ut=globalThis.setInterval,ce=Symbol("cluster-diagnosis");function dt(v){const a=se(),u=h(""),d=h(""),x=h([]),y=h([]),I=Q(()=>!!d.value),O=h(null),R=h([]),U=h(0),P=h(0),M=h(null),f=h(null),r=h(!1),t=h(null),o=h(!1);let s=null,i=null,m=!0;function S(){const c={};return u.value.trim()&&(c.baseCommit=u.value.trim()),x.value.length&&(c.selectedCommitShas=x.value),c}async function C(){r.value=!0;try{const c=await $fetch(`/api/failure-clusters/${v}/context`,{query:{...S(),format:"json"}});O.value=c.text,R.value=c.sections,U.value=c.tokenEstimate,P.value=c.imageTokenEstimate??0,M.value=c.coverage,f.value=c.scmChanges??null}catch{O.value="(failed to load context)",R.value=[],U.value=0,P.value=0,M.value=null,f.value=null}finally{r.value=!1}}async function A(c){try{await $fetch(`/api/failure-clusters/${v}/base-commit`,{method:"PATCH",body:{commit:c||null}}),d.value=c}catch{}}function z(){s&&(clearInterval(s),s=null)}function w(){if(s)return;let c=0;s=ut(async()=>{c+=3e3,await W(),(!t.value||t.value.status!=="running"||c>=12e4)&&z()},3e3)}async function W(){try{const c=await $fetch(`/api/failure-clusters/${v}/diagnosis`);t.value=c.diagnosis}catch{}}async function J(c={}){o.value=!0;try{const E=c.force?`/api/failure-clusters/${v}/diagnose?force=true`:`/api/failure-clusters/${v}/diagnose`,F={};c.additionalContext&&(F.additionalContext=c.additionalContext),u.value.trim()&&(F.baseCommit=u.value.trim()),x.value.length&&(F.selectedCommitShas=x.value),c.images?.length&&(F.images=c.images),t.value=await $fetch(E,{method:"POST",body:Object.keys(F).length?F:void 0}),t.value?.status==="running"&&w()}catch(E){E?.statusCode===409?w():a.add({title:"Diagnosis failed",description:String(E?.message??E),color:"error"})}finally{o.value=!1}}return V(u,c=>{m||(i&&clearTimeout(i),i=setTimeout(()=>C(),900),c!==d.value&&A(c))}),V(x,()=>{m||C()},{deep:!0}),V(t,c=>{c?.status==="running"?w():z()}),be(async()=>{try{const c=await $fetch(`/api/failure-clusters/${v}/diagnosis`);t.value=c.diagnosis,c.manualBaseCommit&&(d.value=c.manualBaseCommit,u.value=c.manualBaseCommit);const E=c.diagnosis?.details;E?.selectedCommitShas&&Array.isArray(E.selectedCommitShas)&&(x.value=E.selectedCommitShas),E?.autoSelectedCommits&&Array.isArray(E.autoSelectedCommits)&&(y.value=E.autoSelectedCommits)}catch{}m=!1,C(),t.value?.status==="running"&&w()}),ke(()=>{z(),i&&clearTimeout(i)}),{clusterId:v,baseCommit:u,savedBaseCommit:d,selectedCommitShas:x,autoSelectedCommits:y,baseCommitIsPinned:I,contextText:O,contextSections:R,tokenEstimate:U,imageTokenEstimate:P,coverage:M,scmChanges:f,contextLoading:r,refreshContext:C,diagnosis:t,posting:o,runDiagnosis:J}}function ft(v){const a=dt(v);return qe(ce,a),a}function Os(){const v=Ce(ce);if(!v)throw new Error("useClusterDiagnosis() must be used under a page that called provideClusterDiagnosis()");return v}function pt(v){const a=Ce(ce,null);if(a)return a;if(v==null)throw new Error("useOrProvideClusterDiagnosis() requires a clusterId when used outside provideClusterDiagnosis()");return ft(v)}const mt={class:"w-56 p-1 space-y-0.5"},gt=re({__name:"DiagnosisExportMenu",props:{contextText:{},diagnosis:{},screenshots:{},clusterSignature:{},clusterUrl:{},clusterOccurrences:{},clusterErrorType:{},sampleError:{}},setup(v){const a=v,{copy:u}=ot(),{copyRich:d}=Xe(),x=h(!1);function y(){const t=[];return a.clusterErrorType&&t.push(a.clusterErrorType),a.clusterOccurrences&&t.push(`${a.clusterOccurrences} occurrence${a.clusterOccurrences===1?"":"s"}`),t.join(" · ")}function I(){const t=a.clusterSignature??"Failure cluster",o=y(),s=a.diagnosis?.status==="completed"&&a.diagnosis.summary?`AI diagnosis (${a.diagnosis.category??"unknown"}, ${a.diagnosis.confidence??"?"}): ${a.diagnosis.summary}`:null,i=[`🔍 Investigation: ${t}`,o||null,"",...a.sampleError?["Error:",Ke(a.sampleError),""]:[],...s?[s,""]:[],a.clusterUrl?`Cluster: ${a.clusterUrl}`:null].filter(C=>C!==null).join(`
|
|
2
|
-
`),m=C=>C.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),S=[`<p><strong>🔍 Investigation: <code>${m(t)}</code></strong></p>`,o?`<p><em>${m(o)}</em></p>`:"",a.sampleError?`<p><strong>Error:</strong></p><pre>${m(a.sampleError)}</pre>`:"",s?`<p><strong>AI diagnosis</strong> (${m(a.diagnosis?.category??"")}, ${m(a.diagnosis?.confidence??"")}):<br>${m(a.diagnosis.summary)}</p>`:"",a.clusterUrl?`<p>🔗 <a href="${a.clusterUrl}">View cluster</a></p>`:""].join("");d(i,S,{toast:"Investigation summary copied"}),x.value=!1}function O(){if(!a.contextText)return;const o=(a.screenshots?.length?`## Screenshots
|
|
3
|
-
|
|
4
|
-
${a.screenshots.map(s=>``).join(`
|
|
5
|
-
|
|
6
|
-
`)}
|
|
7
|
-
|
|
8
|
-
`:"")+"```\n"+a.contextText+"\n```";u(o,{toast:"AI context (Markdown) copied"}),x.value=!1}function R(){if(!a.contextText)return;const t=JSON.stringify({text:a.contextText,exportedAt:new Date().toISOString()},null,2);u(t,{toast:"AI context (JSON) copied"}),x.value=!1}function U(t){const o=w=>w.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),s=[];let i=!1,m="";const S=[];let C=!1;function A(){if(S.length){const w=m?` class="language-${o(m)}"`:"";s.push(`<pre><code${w}>${o(S.join(`
|
|
9
|
-
`))}</code></pre>`),S.length=0}m=""}function z(){C&&(s.push("</ul>"),C=!1)}for(const w of t.split(`
|
|
10
|
-
`)){if(w.startsWith("```")){z(),i?(A(),i=!1):(A(),i=!0,m=w.slice(3).trim());continue}if(i){S.push(w);continue}if(w.startsWith("- ")){C||(s.push("<ul>"),C=!0),s.push(`<li>${o(w.slice(2))}</li>`);continue}if(z(),w.startsWith("## ")){s.push(`<h2>${o(w.slice(3))}</h2>`);continue}if(w.startsWith("### ")){s.push(`<h3>${o(w.slice(4))}</h3>`);continue}if(w.startsWith("> ")){s.push(`<blockquote>${o(w.slice(2))}</blockquote>`);continue}if(w.trim()===""){s.push("<br>");continue}s.push(`<p>${o(w)}</p>`)}return z(),i&&A(),s.join(`
|
|
11
|
-
`)}function P(){if(!a.screenshots?.length)return"";const t=s=>s.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");return`<section><h2>Screenshots</h2><div style="display:flex;flex-wrap:wrap;gap:4px">${a.screenshots.map(s=>`<figure style="display:inline-block;margin:4px 4px 8px;text-align:center"><img src="data:${t(s.mediaType)};base64,${s.data}" alt="${t(s.name)}" style="max-width:320px;max-height:220px;border-radius:6px;border:1px solid #e4e4e7;display:block" /><figcaption style="font-size:0.7em;color:#71717a;margin-top:3px">${t(s.name)}</figcaption></figure>`).join("")}</div></section>`}function M(){if(!a.contextText)return;const t=a.contextText,o=U(t),i=`<!DOCTYPE html><html><head><meta charset="utf-8"><title>AI Diagnosis Context</title><style>body{font-family:system-ui,sans-serif;max-width:900px;margin:2em auto;padding:0 1em;line-height:1.6}h2{color:#1a1a2e;margin-top:1.5em}h3{color:#16213e;margin-top:1.2em}pre{background:#f4f4f5;padding:1em;border-radius:6px;overflow-x:auto;font-size:0.9em}code{font-family:ui-monospace,monospace}blockquote{border-left:3px solid #d4d4d8;padding-left:1em;color:#52525b;margin:1em 0}li{margin:0.25em 0}figure{margin:0}section+section{border-top:1px solid #e4e4e7;padding-top:1em}</style></head><body>${P()}<section>${o}</section></body></html>`;try{navigator.clipboard.write([new ClipboardItem({"text/plain":new Blob([t],{type:"text/plain"}),"text/html":new Blob([i],{type:"text/html"})})]),se().add({title:"AI context (HTML) copied",icon:"i-lucide-check",color:"success",duration:2e3})}catch{u(i,{toast:"AI context (HTML) copied"})}x.value=!1}function f(){if(!a.diagnosis||a.diagnosis.status!=="completed")return;const t=a.diagnosis,o=t.details,s=[];t.category&&s.push(`Category: ${t.category}`),t.confidence&&s.push(`Confidence: ${t.confidence}`),s.push(""),t.summary&&s.push(t.summary),t.rootCause&&s.push(`
|
|
12
|
-
Root cause: ${t.rootCause}`);const i=o?.evidence??[];i.length&&(s.push(`
|
|
13
|
-
Evidence:`),i.forEach(z=>s.push(`- ${z}`)));const m=o?.suggestedFix;m?.patch?s.push(`
|
|
14
|
-
Suggested fix (patch):
|
|
15
|
-
${m.patch}`):m?.code&&s.push(`
|
|
16
|
-
Suggested fix (code):
|
|
17
|
-
${m.code}`);const S=s.join(`
|
|
18
|
-
`),C=z=>z.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),A=[`<dl>${t.category?`<dt>Category</dt><dd>${C(t.category)}</dd>`:""}${t.confidence?`<dt>Confidence</dt><dd>${C(t.confidence)}</dd>`:""}</dl>`,t.summary?`<p><strong>${C(t.summary)}</strong></p>`:"",t.rootCause?`<p><strong>Root cause:</strong> ${C(t.rootCause)}</p>`:""].join("");d(S,A,{toast:"Diagnosis copied"}),x.value=!1}function r(){if(!a.diagnosis)return;const o=a.diagnosis.details?.suggestedFix?.patch;o&&u(o,{toast:"Suggested patch copied"}),x.value=!1}return(t,o)=>{const s=le,i=Ge,m=We;return p(),H(m,{open:e(x),"onUpdate:open":o[0]||(o[0]=S=>_e(x)?x.value=S:null)},{content:D(()=>[l("div",mt,[o[8]||(o[8]=l("p",{class:"text-xs font-medium text-gray-500 px-2 pt-1 pb-1"},"Copy / export",-1)),g(s,{block:"",size:"sm",color:"neutral",variant:"ghost",class:"justify-start",icon:"i-lucide-clipboard-list",onClick:I},{default:D(()=>[...o[2]||(o[2]=[k(" Investigation summary ",-1)])]),_:1}),v.contextText?(p(),H(s,{key:0,block:"",size:"sm",color:"neutral",variant:"ghost",class:"justify-start",icon:"i-lucide-file-text",onClick:O},{default:D(()=>[...o[3]||(o[3]=[k(" Full context (Markdown) ",-1)])]),_:1})):T("",!0),v.contextText?(p(),H(s,{key:1,block:"",size:"sm",color:"neutral",variant:"ghost",class:"justify-start",icon:"i-lucide-file-json",onClick:R},{default:D(()=>[...o[4]||(o[4]=[k(" Full context (JSON) ",-1)])]),_:1})):T("",!0),v.contextText?(p(),H(s,{key:2,block:"",size:"sm",color:"neutral",variant:"ghost",class:"justify-start",icon:"i-lucide-file-code",onClick:M},{default:D(()=>[...o[5]||(o[5]=[k(" Full context (HTML) ",-1)])]),_:1})):T("",!0),g(i,{class:"my-1"}),v.diagnosis?.status==="completed"?(p(),H(s,{key:3,block:"",size:"sm",color:"neutral",variant:"ghost",class:"justify-start",icon:"i-lucide-sparkles",onClick:f},{default:D(()=>[...o[6]||(o[6]=[k(" Diagnosis only ",-1)])]),_:1})):T("",!0),v.diagnosis?.status==="completed"&&v.diagnosis.details?.suggestedFix?.patch?(p(),H(s,{key:4,block:"",size:"sm",color:"neutral",variant:"ghost",class:"justify-start",icon:"i-lucide-code",onClick:r},{default:D(()=>[...o[7]||(o[7]=[k(" Suggested patch ",-1)])]),_:1})):T("",!0)])]),default:D(()=>[g(s,{icon:"i-lucide-download",size:"xs",color:"neutral",variant:"outline",title:"Copy / export"},{default:D(()=>[...o[1]||(o[1]=[k(" Export ",-1)])]),_:1})]),_:1},8,["open"])}}}),vt=Object.assign(gt,{__name:"DiagnosisExportMenu"}),xt={key:0,class:"flex items-center gap-1.5 text-xs text-gray-400 py-1"},yt={key:1,class:"space-y-1.5"},ht={class:"flex items-center justify-between"},bt={class:"text-xs font-medium text-gray-500"},kt={class:"text-gray-400 font-normal"},Ct={class:"flex gap-0.5"},_t={class:"grid grid-cols-4 gap-1.5"},wt=["onClick"],$t={class:"relative"},St=["src","alt"],Tt={class:"absolute top-0.5 right-0.5"},Dt={class:"px-1 py-0.5 bg-elevated space-y-0.5"},At=["title"],Et={class:"flex items-center gap-1 flex-wrap"},zt={key:0,class:"text-[8px] text-gray-400 leading-tight"},It={key:1,class:"text-[8px] text-gray-400 leading-tight truncate"},Rt={key:2,class:"text-[8px] text-gray-400 leading-tight ml-auto"},he=8,jt=re({__name:"DiagnosisScreenshots",props:{affectedTestCases:{}},emits:["update:images"],setup(v,{emit:a}){const u=v,d=a;async function x(r){const t=(r.type||"image/webp").split(";")[0].trim();return new Promise((o,s)=>{const i=new FileReader;i.onload=()=>{const m=i.result.split(",")[1];m!=null?o({data:m,mediaType:t}):s(new Error("Failed to read blob"))},i.onerror=s,i.readAsDataURL(r)})}const y=h([]),I=h(!1);async function O(){if(!u.affectedTestCases.length)return;I.value=!0,y.value=[];const r=[];for(const t of u.affectedTestCases){if(r.length>=he)break;try{const o=await $fetch(`/api/test-run-cases/${t.recentTestRunsCaseId}`);for(const s of o.attachments??[]){if(!Qe(s.path,s.contentType))continue;if(r.length>=he)break;const i=s.name||s.path.split("/").pop()||"screenshot",m=`/api/files/${it(s.path)}?compress=1`;try{const S=await fetch(m);if(!S.ok)continue;const C=await S.blob(),{data:A,mediaType:z}=await x(C);r.push({src:`data:${z};base64,${A}`,data:A,mediaType:z,name:i,selected:!0,caseTitle:t.title,status:o.status,retries:o.retries,browser:o.browser,startTime:o.testRun?.startTime??null})}catch{}}}catch{}}y.value=r,I.value=!1,R()}function R(){d("update:images",y.value.filter(r=>r.selected).map(({name:r,mediaType:t,data:o})=>({name:r,mediaType:t,data:o})))}function U(r){y.value[r].selected=!y.value[r].selected,R()}function P(){y.value.forEach(r=>r.selected=!0),R()}function M(){y.value.forEach(r=>r.selected=!1),R()}const f=Q(()=>y.value.filter(r=>r.selected).length);return be(O),(r,t)=>{const o=we,s=le;return e(I)?(p(),$("div",xt,[g(o,{name:"i-lucide-loader-2",class:"size-3 animate-spin"}),t[0]||(t[0]=k(" Loading screenshots from test evidence… ",-1))])):e(y).length?(p(),$("div",yt,[l("div",ht,[l("span",bt,[t[1]||(t[1]=k(" Test screenshots ",-1)),l("span",kt,"("+j(e(f))+"/"+j(e(y).length)+" will be sent to AI)",1)]),l("div",Ct,[g(s,{size:"xs",color:"neutral",variant:"ghost",onClick:P},{default:D(()=>[...t[2]||(t[2]=[k("All",-1)])]),_:1}),g(s,{size:"xs",color:"neutral",variant:"ghost",onClick:M},{default:D(()=>[...t[3]||(t[3]=[k("None",-1)])]),_:1})])]),l("div",_t,[(p(!0),$(K,null,ie(e(y),(i,m)=>(p(),$("div",{key:m,class:Z(["cursor-pointer rounded overflow-hidden border-2 transition-all",i.selected?"border-primary":"border-default opacity-50"]),onClick:S=>U(m)},[l("div",$t,[l("img",{src:i.src,alt:i.name,class:"w-full h-14 object-cover object-top"},null,8,St),l("div",Tt,[g(o,{name:i.selected?"i-lucide-check-circle-2":"i-lucide-circle",class:Z(["size-3.5 drop-shadow",i.selected?"text-primary":"text-gray-300"])},null,8,["name","class"])])]),l("div",Dt,[l("p",{class:"text-[9px] text-gray-700 dark:text-gray-300 truncate font-medium leading-tight",title:i.caseTitle},j(i.caseTitle),9,At),l("div",Et,[l("span",{class:Z(["text-[8px] px-1 rounded leading-tight font-medium",i.status==="passed"?"bg-success/15 text-success":i.status==="failed"?"bg-error/15 text-error":"bg-neutral/15 text-gray-500"])},j(i.status),3),i.retries>0?(p(),$("span",zt,"retry "+j(i.retries),1)):T("",!0),i.browser?(p(),$("span",It,j(i.browser),1)):T("",!0),i.startTime?(p(),$("span",Rt,j(e($e)(i.startTime)),1)):T("",!0)])])],10,wt))),128))])])):T("",!0)}}}),Bt=Object.assign(jt,{__name:"DiagnosisScreenshots"});function Ot(v){const a=h(""),u=h(null),d=h("idle"),x=h(null),y=h(null);let I=null;function O(){I&&(I.abort(),I=null),d.value==="streaming"&&(d.value="cancelled")}function R(){O(),a.value="",u.value=null,d.value="idle",x.value=null,y.value=null}async function U(f={}){a.value="",u.value=null,y.value=null,x.value=null,d.value="streaming";const r=e(v);I=new AbortController;const t=new URLSearchParams;f.force&&t.set("force","true");const o=`/api/failure-clusters/${r}/diagnose/stream${t.toString()?"?"+t.toString():""}`;try{const s=await $fetch.raw(o,{method:"POST",body:{additionalContext:f.additionalContext,images:f.images,baseCommit:f.baseCommit,selectedCommitShas:f.selectedCommitShas,scope:f.scope,testRunsCaseId:f.testRunsCaseId},responseType:"stream",signal:I.signal,ignoreResponseError:!0}),i=s._data??s.body;if(!i)throw new Error("No response body from streaming endpoint");let m;if(i instanceof ReadableStream)m=i.getReader();else if(i instanceof Uint8Array||i instanceof ArrayBuffer){const z=new TextDecoder().decode(i instanceof ArrayBuffer?new Uint8Array(i):i);M(z),d.value==="streaming"&&(d.value="error",y.value="Stream ended without a result event");return}else if(typeof i?.getReader=="function")m=i.getReader();else if(i?.pipeThrough)m=i.getReader();else throw new Error("Unsupported stream response format");const S=new TextDecoder;let C="";for(;;){const{done:A,value:z}=await m.read();if(A)break;C+=S.decode(z,{stream:!0});const w=C.split(`
|
|
19
|
-
|
|
20
|
-
`);C=w.pop()||"";let W=!1;for(const J of w){const c=P(J);if(c){if(c.event==="result")x.value=c.data,d.value="complete",W=!0;else if(c.event==="thinking"){const E=c.data;a.value+=E.text}else if(c.event==="stage")u.value=c.data.stage;else if(c.event==="error"){const E=c.data;y.value=E.message,d.value="error"}}}if(W)break}if(C.trim()){const A=P(C.trim());A&&(A.event==="result"?(x.value=A.data,d.value="complete"):A.event==="error"&&(y.value=A.data.message,d.value="error"))}d.value==="streaming"&&(y.value||(d.value="complete"))}catch(s){if(s?.name==="AbortError"){d.value="cancelled";return}y.value=String(s?.message??s),d.value="error"}finally{I=null}}function P(f){if(!f.trim())return null;const r=f.split(`
|
|
21
|
-
`);let t="message",o="";for(const s of r)s.startsWith("event: ")?t=s.slice(7).trim():s.startsWith("data: ")?o+=s.slice(6):s.startsWith(":");if(!o)return null;try{return{event:t,data:JSON.parse(o)}}catch{return{event:t,data:o}}}function M(f){const r=f.split(`
|
|
22
|
-
|
|
23
|
-
`);for(const t of r){const o=P(t);if(o)if(o.event==="result")x.value=o.data,d.value="complete";else if(o.event==="thinking"){const s=o.data;a.value+=s.text}else o.event==="stage"?u.value=o.data.stage:o.event==="error"&&(y.value=o.data.message,d.value="error")}}return ke(()=>{O()}),{thinkingText:a,stage:u,status:d,result:x,error:y,startStream:U,cancel:O,reset:R}}const Pt=200*1024,Ut=5*1024*1024,Mt=["image/jpeg","image/png","image/gif","image/webp"];function Ft(v){return new Promise((a,u)=>{const d=new FileReader;d.onload=()=>{const x=d.result.split(",")[1];x!==void 0?a(x):u(new Error("Failed to read file"))},d.onerror=u,d.readAsDataURL(v)})}function Lt(){const v=se(),a=h([]),u=h([]),d=h(!1);async function x(f){for(const r of Array.from(f))if(Mt.includes(r.type)){if(r.size>Ut){v.add({title:"Image too large",description:`${r.name} exceeds 5 MB`,color:"error"});continue}const t=await Ft(r),o=`data:${r.type};base64,${t}`;u.value.push({name:r.name,mediaType:r.type,data:t,preview:o,size:r.size})}else{if(r.size>Pt){v.add({title:"File too large",description:`${r.name} exceeds 200 KB`,color:"error"});continue}const t=await r.text();a.value.push({name:r.name,content:t,size:r.size})}}function y(f){f.preventDefault(),d.value=!0}function I(f){f.currentTarget?.contains(f.relatedTarget)||(d.value=!1)}function O(f){f.preventDefault(),d.value=!1,f.dataTransfer?.files?.length&&x(f.dataTransfer.files)}function R(f){a.value.splice(f,1)}function U(f){u.value.splice(f,1)}function P(){return a.value.length?`## Attached Files
|
|
24
|
-
|
|
25
|
-
${a.value.map(r=>`### ${r.name}
|
|
26
|
-
\`\`\`
|
|
27
|
-
${r.content}
|
|
28
|
-
\`\`\``).join(`
|
|
29
|
-
|
|
30
|
-
`)}`:""}function M(){return u.value.map(f=>({name:f.name,mediaType:f.mediaType,data:f.data}))}return{files:a,images:u,dragOver:d,processFiles:x,onDragOver:y,onDragLeave:I,onDrop:O,removeFile:R,removeImage:U,filesMarkdown:P,imagesPayload:M}}const Nt={class:"space-y-4"},Ht={class:"pb-2 border-b border-default"},qt={class:"flex items-center justify-between gap-2"},Wt={class:"flex items-center gap-1.5"},Vt={class:"text-xs text-gray-400"},Jt={class:"flex items-center gap-1.5"},Yt={key:0,class:"flex items-center gap-2 px-3 py-2 rounded-lg bg-elevated/50 border border-default text-xs"},Gt={class:"text-gray-500"},Xt={key:1,class:"flex items-center gap-2 px-3 py-2 rounded-lg bg-elevated/50 border border-default text-xs"},Kt={class:"flex items-center gap-1 mb-1"},Qt={key:0,class:"text-primary"},Zt={key:0},es={class:"flex items-center gap-2 px-3 pb-2 pt-1 border-t border-default"},ts={key:0,class:"text-xs text-primary"},ss={key:1,class:"text-xs text-gray-400"},ns={key:0,class:"flex flex-wrap gap-2"},os={class:"max-w-40 truncate"},as={class:"text-gray-400"},is=["onClick"],rs={key:1,class:"flex flex-wrap gap-2"},ls=["src","alt"],cs={class:"absolute inset-0 bg-black/40 opacity-0 group-hover:opacity-100 transition-opacity rounded-lg flex items-center justify-center"},us=["onClick"],ds={class:"text-xs text-gray-500 text-center mt-0.5 w-16 truncate"},fs={key:3,class:"pt-1"},ps={key:4,class:"rounded-lg border border-default overflow-hidden"},ms={class:"flex items-center justify-between gap-2 px-3 py-2 bg-elevated/30 border-b border-default"},gs={class:"flex items-center gap-2 text-sm text-gray-500"},vs={key:0,class:"inline-flex items-center gap-1 text-xs text-gray-400"},xs={key:1,class:"text-gray-400 italic"},ys={class:"px-3 py-1.5 border-t border-default text-xs text-gray-400 flex items-center gap-2"},hs={key:5,class:"rounded-lg border border-warning/40 bg-warning/5 p-3 space-y-2"},bs={class:"flex items-center gap-2 text-sm"},ks={class:"flex items-center gap-2 pt-1"},Cs={class:"text-xs text-gray-400"},_s={key:4,class:"flex flex-col items-center justify-center p-8 text-center text-gray-400 border border-dashed border-default rounded-lg"},ws={class:"text-sm inline-flex items-center gap-1"},$s={class:"pt-1 text-center"},Ss=re({__name:"DiagnosisPanel",props:{clusterId:{},lastSeenRunId:{},affectedTestCases:{}},setup(v){const a=v,{diagnosis:u,posting:d,contextText:x,contextSections:y,tokenEstimate:I,imageTokenEstimate:O,contextLoading:R,coverage:U,baseCommit:P,selectedCommitShas:M,refreshContext:f,runDiagnosis:r}=pt(a.clusterId),{aiStatus:t}=Ze();se();const{permission:o,active:s,requestPermission:i,toggleEnabled:m}=ct(),{thinkingText:S,stage:C,status:A,result:z,error:w,startStream:W,cancel:J}=Ot(Q(()=>a.clusterId??0)),c=Lt(),{files:E,images:F,dragOver:ue,processFiles:Se,onDragOver:de,onDragLeave:fe,onDrop:pe,removeFile:Te,removeImage:De}=c,L=h(""),me=h(null),ge=h([]),Y=Q(()=>[...ge.value,...F.value.length?c.imagesPayload():[]]),q=h(!1),G=h(!1),ne=h(null),ee=h(null);function ve(b){ne.value=b,q.value=!0}const Ae=Q(()=>{const b=u.value?.details;if(!b)return[];const n=[];if(Array.isArray(b.evidence)&&n.push(...b.evidence),Array.isArray(b.hypotheses))for(const B of b.hypotheses)Array.isArray(B?.evidence)&&n.push(...B.evidence);return nt(n)});V(S,()=>{Je(()=>{ee.value&&(ee.value.scrollTop=ee.value.scrollHeight)})}),V(z,b=>{b&&(u.value=b)}),V(()=>u.value?.details,b=>{if(!b)return;const n=b;typeof n.additionalContext=="string"&&n.additionalContext.trim()&&!L.value&&(L.value=n.additionalContext)},{immediate:!0});function Ee(b){L.value=L.value?`${L.value}
|
|
31
|
-
|
|
32
|
-
${b}`:b,G.value=!0}function xe(){const b=[];L.value.trim()&&b.push(L.value.trim());const n=c.filesMarkdown();return n&&b.push(n),b.join(`
|
|
33
|
-
|
|
34
|
-
`)}async function oe(b=!1){await W({force:b,additionalContext:xe()||void 0,baseCommit:P.value.trim()||void 0,selectedCommitShas:M.value.length?[...M.value]:void 0,images:Y.value.length?Y.value:void 0})}async function ze(b=!1){await r({force:b,additionalContext:xe()||void 0,images:Y.value.length?Y.value:void 0})}function Ie(){u.value=null}function ye(b){return b.status==="running"&&Date.now()-new Date(b.updatedAt).getTime()>300*1e3}function te(){return A.value==="streaming"}function Re(){return!te()&&(!u.value||u.value.status==="failed"||ye(u.value))}function je(){return!te()&&u.value&&(u.value.status==="completed"||u.value.status==="failed")}return(b,n)=>{const B=we,ae=Ye,Be=vt,N=le,Oe=tt,Pe=et,Ue=at,Me=Bt,Fe=lt,Le=st,Ne=Ve;return p(),$("div",Nt,[l("div",Ht,[l("div",qt,[l("div",Wt,[g(B,{name:"i-lucide-sparkles",class:"size-4 text-primary shrink-0"}),n[17]||(n[17]=l("span",{class:"text-sm font-semibold"},"Diagnosis",-1)),g(ae,{topic:"cluster.diagnosis"}),l("span",Vt,[n[15]||(n[15]=k(" — ",-1)),g(B,{name:"i-lucide-triangle-alert",class:"size-3 shrink-0 inline"}),n[16]||(n[16]=k(" AI-generated, verify before applying ",-1))])]),l("div",Jt,[g(Be,{"context-text":e(x),diagnosis:e(u),screenshots:e(Y)},null,8,["context-text","diagnosis","screenshots"]),g(N,{icon:e(q)?"i-lucide-eye-off":"i-lucide-eye",size:"xs",color:"neutral",variant:"outline",loading:e(R),onClick:n[0]||(n[0]=_=>q.value=!e(q))},{default:D(()=>[k(j(e(q)?"Hide context":"Show context"),1)]),_:1},8,["icon","loading"]),e(u)&&e(u).status==="completed"?(p(),H(N,{key:0,icon:"i-lucide-refresh-cw",size:"xs",color:"primary",variant:"soft",loading:e(d),onClick:n[1]||(n[1]=_=>oe(!0))},{default:D(()=>[...n[18]||(n[18]=[k(" Re-diagnose ",-1)])]),_:1},8,["loading"])):T("",!0)])])]),e(o)==="granted"&&e(t)?.configured?(p(),$("div",Yt,[g(B,{name:"i-lucide-bell",class:Z(["size-3.5 shrink-0",e(s)?"text-primary":"text-gray-400"])},null,8,["class"]),l("span",Gt,j(e(s)?"Diagnosis notifications on":"Diagnosis notifications off"),1),g(N,{size:"xs",color:e(s)?"neutral":"primary",variant:"outline",onClick:e(m)},{default:D(()=>[k(j(e(s)?"Disable":"Enable"),1)]),_:1},8,["color","onClick"])])):e(o)==="default"&&e(t)?.configured?(p(),$("div",Xt,[g(B,{name:"i-lucide-bell",class:"size-3.5 text-gray-400 shrink-0"}),n[20]||(n[20]=l("span",{class:"text-gray-500"},"Notify when diagnosis completes?",-1)),g(N,{size:"xs",color:"neutral",variant:"outline",onClick:e(i)},{default:D(()=>[...n[19]||(n[19]=[k("Enable",-1)])]),_:1},8,["onClick"])])):T("",!0),e(t)?.configured?(p(),H(Oe,{key:2,sections:e(y),"not-applicable":e(U)?.notApplicable,"token-estimate":e(I),loading:e(R),onViewSection:ve,onOpen:n[2]||(n[2]=_=>q.value=!0)},null,8,["sections","not-applicable","token-estimate","loading"])):T("",!0),g(Pe,{open:e(q),sections:e(y),"token-estimate":e(I),"image-token-estimate":e(O),loading:e(R),"focus-section":e(ne),"cited-sections":e(Ae),"not-applicable-sections":e(U)?.notApplicable,"onUpdate:open":n[3]||(n[3]=_=>{q.value=_,_||(ne.value=null)}),onRefresh:e(f)},null,8,["open","sections","token-estimate","image-token-estimate","loading","focus-section","cited-sections","not-applicable-sections","onRefresh"]),e(t)?.configured?(p(),$(K,{key:3},[l("div",null,[l("div",Kt,[l("button",{class:"flex items-center gap-1.5 text-xs font-medium text-gray-500 hover:text-gray-700 dark:hover:text-gray-300 text-left",onClick:n[4]||(n[4]=_=>G.value=!e(G))},[g(B,{name:e(G)?"i-lucide-chevron-down":"i-lucide-chevron-right",class:"size-3.5"},null,8,["name"]),n[21]||(n[21]=k(" Additional context ",-1)),e(E).length||e(F).length||e(L).trim()?(p(),$("span",Qt," ("+j(e(E).length+e(F).length+(e(L).trim()?1:0))+") ",1)):T("",!0)]),g(ae,{topic:"cluster.context-input"})]),e(G)?(p(),$("div",Zt,[l("div",{class:Z(["rounded-lg border-2 transition-colors",e(ue)?"border-primary bg-primary/5 border-solid":"border-dashed border-default"]),onDragover:n[8]||(n[8]=(..._)=>e(de)&&e(de)(..._)),onDragleave:n[9]||(n[9]=(..._)=>e(fe)&&e(fe)(..._)),onDrop:n[10]||(n[10]=(..._)=>e(pe)&&e(pe)(..._))},[g(Ue,{modelValue:e(L),"onUpdate:modelValue":n[5]||(n[5]=_=>_e(L)?L.value=_:null),placeholder:"e.g. We deployed a new auth middleware yesterday\\u2026",rows:3,class:"w-full text-sm border-0 bg-transparent focus:ring-0"},null,8,["modelValue"]),l("div",es,[l("input",{ref_key:"fileInputRef",ref:me,type:"file",multiple:"",class:"hidden",accept:".txt,.log,.md,.json,.ts,.js,.py,.sql,.xml,.yaml,.yml,.html,.css,.env,image/*",onChange:n[6]||(n[6]=_=>e(Se)(_.target.files))},null,544),g(N,{icon:"i-lucide-paperclip",size:"xs",color:"neutral",variant:"ghost",onClick:n[7]||(n[7]=_=>e(me)?.click())},{default:D(()=>[...n[22]||(n[22]=[k(" Attach files ",-1)])]),_:1}),e(ue)?(p(),$("span",ts,"Drop files here\\u2026")):(p(),$("span",ss,"or drag & drop text files and images"))])],34)])):T("",!0)]),e(E).length?(p(),$("div",ns,[(p(!0),$(K,null,ie(e(E),(_,X)=>(p(),$("div",{key:X,class:"flex items-center gap-1.5 bg-elevated rounded-full px-2.5 py-1 text-xs border border-default"},[g(B,{name:"i-lucide-file-text",class:"size-3 text-gray-500 shrink-0"}),l("span",os,j(_.name),1),l("span",as,j(("formatBytes"in b?b.formatBytes:e(rt))(_.size)),1),l("button",{class:"text-gray-400 hover:text-error ml-0.5",onClick:He=>e(Te)(X)},[g(B,{name:"i-lucide-x",class:"size-3"})],8,is)]))),128))])):T("",!0),e(F).length?(p(),$("div",rs,[(p(!0),$(K,null,ie(e(F),(_,X)=>(p(),$("div",{key:X,class:"relative group"},[l("img",{src:_.preview,alt:_.name,class:"h-16 w-16 object-cover rounded-lg border border-default"},null,8,ls),l("div",cs,[l("button",{class:"text-white",onClick:He=>e(De)(X)},[g(B,{name:"i-lucide-x",class:"size-4"})],8,us)]),l("p",ds,j(_.name),1)]))),128))])):T("",!0),v.affectedTestCases?.length?(p(),H(Me,{key:2,"affected-test-cases":v.affectedTestCases,"onUpdate:images":n[11]||(n[11]=_=>ge.value=_)},null,8,["affected-test-cases"])):T("",!0),Re()?(p(),$("div",fs,[g(N,{icon:"i-lucide-sparkles",size:"sm",color:"primary",variant:"solid",loading:e(d),onClick:n[12]||(n[12]=_=>oe())},{default:D(()=>[...n[23]||(n[23]=[k(" Diagnose with AI ",-1)])]),_:1},8,["loading"])])):T("",!0),te()?(p(),$("div",ps,[l("div",ms,[l("div",gs,[g(B,{name:"i-lucide-loader-2",class:"size-4 animate-spin text-primary"}),n[24]||(n[24]=l("span",null,"Analyzing failure cluster",-1)),e(C)?(p(),$("span",vs,[g(B,{name:"i-lucide-workflow",class:"size-3"}),k(" "+j(e(C)==="research"?"Researching patterns":"Diagnosing root cause"),1)])):T("",!0)]),g(N,{size:"xs",color:"neutral",variant:"ghost",icon:"i-lucide-x",title:"Cancel diagnosis",onClick:e(J)},null,8,["onClick"])]),l("div",{ref_key:"thinkingContainer",ref:ee,class:"max-h-64 overflow-y-auto p-3 text-xs font-mono leading-relaxed whitespace-pre-wrap break-words text-gray-600 dark:text-gray-400 bg-elevated/10"},[e(S)?(p(),$(K,{key:0},[k(j(e(S))+" ",1),n[25]||(n[25]=l("span",{class:"inline-block w-2 h-4 bg-primary/60 animate-pulse ml-0.5 align-text-bottom"},null,-1))],64)):(p(),$("span",xs,"Waiting for model response\\u2026"))],512),l("div",ys,[g(B,{name:"i-lucide-file-text",class:"size-3"}),l("span",null,j(e(S).length.toLocaleString())+" characters received",1)])])):T("",!0),e(u)?.status==="running"&&!ye(e(u))&&!te()?(p(),$("div",hs,[l("div",bs,[g(B,{name:"i-lucide-alert-triangle",class:"size-4 text-warning shrink-0"}),n[26]||(n[26]=l("span",{class:"font-medium text-warning-700 dark:text-warning-400"},"Diagnosis was interrupted",-1))]),n[29]||(n[29]=l("p",{class:"text-xs text-gray-500"}," A previous diagnosis started but never completed — the server may have restarted. You can restart it below. ",-1)),l("div",ks,[g(N,{icon:"i-lucide-refresh-cw",size:"xs",color:"warning",variant:"solid",loading:e(d),onClick:n[13]||(n[13]=_=>oe(!0))},{default:D(()=>[...n[27]||(n[27]=[k(" Restart diagnosis ",-1)])]),_:1},8,["loading"]),g(N,{size:"xs",color:"neutral",variant:"ghost",loading:e(d),onClick:Ie},{default:D(()=>[...n[28]||(n[28]=[k(" Dismiss ",-1)])]),_:1},8,["loading"])]),l("p",Cs,"Started "+j(e($e)(e(u).updatedAt)),1)])):T("",!0),e(w)?(p(),H(Fe,{key:6,color:"error",icon:"i-lucide-alert-circle",title:"Streaming diagnosis failed",description:e(w),class:"mt-2"},{actions:D(()=>[g(N,{size:"xs",color:"neutral",variant:"outline",onClick:n[14]||(n[14]=_=>ze(!0))},{default:D(()=>[...n[30]||(n[30]=[k(" Retry (fallback) ",-1)])]),_:1})]),_:1},8,["description"])):T("",!0),je()?(p(),H(Le,{key:7,diagnosis:e(u),"last-seen-run-id":v.lastSeenRunId,onViewSection:ve,onPrefillContext:Ee},null,8,["diagnosis","last-seen-run-id"])):T("",!0)],64)):(p(),$("div",_s,[g(B,{name:"i-lucide-sparkles",class:"size-8 mb-2 opacity-30"}),l("p",ws,[n[31]||(n[31]=k(" AI diagnosis is not configured ",-1)),g(ae,{topic:"cluster.ai-setup"})]),g(N,{to:"/settings/ai",size:"xs",color:"neutral",variant:"outline",class:"mt-3"},{default:D(()=>[...n[32]||(n[32]=[k(" Configure in Settings ",-1)])]),_:1}),n[33]||(n[33]=l("p",{class:"text-xs text-gray-400 mt-4 max-w-xs"},[k(" Use the "),l("strong",null,"Show context"),k(" button above to inspect the full diagnosis context and copy it for use with your own AI tool. ")],-1))])),l("div",$s,[g(Ne,{to:"/mcp",class:"inline-flex items-center gap-1 text-xs text-gray-400 hover:text-primary transition-colors"},{default:D(()=>[g(B,{name:"i-lucide-bot",class:"size-3"}),n[34]||(n[34]=k(" Query this cluster from your AI agent via the MCP server ",-1))]),_:1})])])}}}),Ps=Object.assign(Ss,{__name:"DiagnosisPanel"});export{Ps as _,ft as p,Os as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as s,o as t,c as o,f as c,q as l,i as m,t as r,T as i,p as d,v as p}from"./DHltYerF.js";const _={class:"text-sm"},f=s({__name:"EmptyState",props:{text:{},icon:{},padded:{type:Boolean,default:!0}},setup(e){return(a,u)=>{const n=p;return t(),o("div",{class:d(["flex flex-col items-center justify-center gap-2 text-center text-gray-500",e.padded&&"py-8"])},[e.icon?(t(),c(n,{key:0,name:e.icon,class:"size-6 opacity-60"},null,8,["name"])):l("",!0),m("p",_,r(e.text),1),i(a.$slots,"default")],2)}}}),y=Object.assign(f,{__name:"EmptyState"});export{y as _};
|