@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.
Files changed (783) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{Dwws9U0D.js → -f7BAm1H.js} +1 -1
  3. package/.output/public/_nuxt/{BjCHB89N.js → 4gYNA-d4.js} +1 -1
  4. package/.output/public/_nuxt/5A6ITZXj.js +1 -0
  5. package/.output/public/_nuxt/8PUUncmO.js +44 -0
  6. package/.output/public/_nuxt/A1pj0VnG.js +1 -0
  7. package/.output/public/_nuxt/{DZ3Vfcpz.js → AbmKWFQQ.js} +1 -1
  8. package/.output/public/_nuxt/B3obW6cw.js +3 -0
  9. package/.output/public/_nuxt/{QmMoMxLM.js → B7FTvFWq.js} +3 -3
  10. package/.output/public/_nuxt/{DXbPFI1d.js → B8zkOmwo.js} +1 -1
  11. package/.output/public/_nuxt/B96M2gdj.js +1 -0
  12. package/.output/public/_nuxt/{BFP6M-20.js → B99fbi73.js} +1 -1
  13. package/.output/public/_nuxt/{DD5HpaW9.js → B9OLmp0f.js} +1 -1
  14. package/.output/public/_nuxt/BKkF4pPD.js +1 -0
  15. package/.output/public/_nuxt/BT3wGCTI.js +1 -0
  16. package/.output/public/_nuxt/BUa0V0Ly.js +1 -0
  17. package/.output/public/_nuxt/BUkim3TM.js +1 -0
  18. package/.output/public/_nuxt/BVc14Ncz.js +4 -0
  19. package/.output/public/_nuxt/BY0HxR3t.js +17 -0
  20. package/.output/public/_nuxt/B_xAMWQS.js +2 -0
  21. package/.output/public/_nuxt/BdQoBaOv.js +1 -0
  22. package/.output/public/_nuxt/{Cng9gj7q.js → BdfhYr-u.js} +1 -1
  23. package/.output/public/_nuxt/BgRu_3tT.js +1 -0
  24. package/.output/public/_nuxt/{BBK2-Krn.js → BiO7RBWb.js} +2 -2
  25. package/.output/public/_nuxt/BicAJ6U8.js +1 -0
  26. package/.output/public/_nuxt/BjaRappk.js +1 -0
  27. package/.output/public/_nuxt/Bm62iDV5.js +1 -0
  28. package/.output/public/_nuxt/{C9YzQCiq.js → BmUfSNMV.js} +1 -1
  29. package/.output/public/_nuxt/Bnxf8nbZ.js +1 -0
  30. package/.output/public/_nuxt/{CsUoYK75.js → Bow4tTR0.js} +1 -1
  31. package/.output/public/_nuxt/{B2oUeBbA.js → BrQEE053.js} +1 -1
  32. package/.output/public/_nuxt/BzRRzmwm.js +1 -0
  33. package/.output/public/_nuxt/{CN1mJlvD.js → C0_yH0N7.js} +1 -1
  34. package/.output/public/_nuxt/C1gTN4Q8.js +1 -0
  35. package/.output/public/_nuxt/{CNMoZYMv.js → C2hkrSey.js} +1 -1
  36. package/.output/public/_nuxt/{rTvJTef_.js → C8e1EbJI.js} +1 -1
  37. package/.output/public/_nuxt/CA9B2HE5.js +1 -0
  38. package/.output/public/_nuxt/{oFM1KLWA.js → CAAwCT7H.js} +1 -1
  39. package/.output/public/_nuxt/{qpI-_f9Q.js → CAvY22RE.js} +1 -1
  40. package/.output/public/_nuxt/{BLIRKrbM.js → CEfS4-oS.js} +4 -4
  41. package/.output/public/_nuxt/CIoSMkpp.js +1 -0
  42. package/.output/public/_nuxt/{hH1UFE3Z.js → CIrFl3MW.js} +1 -1
  43. package/.output/public/_nuxt/CJFtzlQ4.js +1 -0
  44. package/.output/public/_nuxt/{hgHc4teu.js → CNyV9YpI.js} +1 -1
  45. package/.output/public/_nuxt/CSJ-eOQM.js +1 -0
  46. package/.output/public/_nuxt/CTU1mrhq.js +1 -0
  47. package/.output/public/_nuxt/CXEH9OPk.js +1 -0
  48. package/.output/public/_nuxt/CahpB9Z2.js +5 -0
  49. package/.output/public/_nuxt/{C8OCrfDP.js → Cbh--1MW.js} +1 -1
  50. package/.output/public/_nuxt/CeG9pBAD.js +1 -0
  51. package/.output/public/_nuxt/{DBtBvrYc.js → CeW8v31b.js} +1 -1
  52. package/.output/public/_nuxt/{DZUgX70W.js → CjPfj7ya.js} +1 -1
  53. package/.output/public/_nuxt/Cnsmicv2.js +79 -0
  54. package/.output/public/_nuxt/CsLojMwR.js +1 -0
  55. package/.output/public/_nuxt/{BXY_PWcx.js → Cus22Ud3.js} +2 -2
  56. package/.output/public/_nuxt/{4TxgDGVa.js → CwGWJbiy.js} +1 -1
  57. package/.output/public/_nuxt/Cx6gc2VW.js +1 -0
  58. package/.output/public/_nuxt/{B1X__ilH.js → CxyAzHr3.js} +1 -1
  59. package/.output/public/_nuxt/{BJtlcTrb.js → CzAPFPpL.js} +1 -1
  60. package/.output/public/_nuxt/D--H4jLI.js +1 -0
  61. package/.output/public/_nuxt/D-c8ZSws.js +1 -0
  62. package/.output/public/_nuxt/D1POo6S4.js +10 -0
  63. package/.output/public/_nuxt/D5tke0B5.js +1 -0
  64. package/.output/public/_nuxt/D8nkF-OO.js +3 -0
  65. package/.output/public/_nuxt/DA25RkyK.js +1 -0
  66. package/.output/public/_nuxt/{DZ1zNBVM.js → DIB-5fUJ.js} +1 -1
  67. package/.output/public/_nuxt/DJmoLeVt.js +1 -0
  68. package/.output/public/_nuxt/DJxlKFGb.js +1 -0
  69. package/.output/public/_nuxt/DMec-OLo.js +1 -0
  70. package/.output/public/_nuxt/DPCxhHri.js +1 -0
  71. package/.output/public/_nuxt/{By4YL7mx.js → DSqHUrvO.js} +1 -1
  72. package/.output/public/_nuxt/DabzhQB1.js +1 -0
  73. package/.output/public/_nuxt/{D5oNv2cB.js → DdwHkKfV.js} +1 -1
  74. package/.output/public/_nuxt/{CfOLBbW9.js → DeY2JkR2.js} +1 -1
  75. package/.output/public/_nuxt/{CPLJeOCb.js → DfgOx_ou.js} +1 -1
  76. package/.output/public/_nuxt/DmkUdSS4.js +1 -0
  77. package/.output/public/_nuxt/{CUvGJXY3.js → DoIREDVb.js} +1 -1
  78. package/.output/public/_nuxt/DpZ1r1HA.js +1 -0
  79. package/.output/public/_nuxt/{BOCwBVnz.js → Dpd16JVI.js} +1 -1
  80. package/.output/public/_nuxt/DqcKngf3.js +1 -0
  81. package/.output/public/_nuxt/{xqiPI_FQ.js → DrfE8IY0.js} +1 -1
  82. package/.output/public/_nuxt/{BeFDVhpA.js → DsesNydr.js} +1 -1
  83. package/.output/public/_nuxt/{D0cnIs93.js → DtHJgCS8.js} +1 -1
  84. package/.output/public/_nuxt/Dtd4rC58.js +9 -0
  85. package/.output/public/_nuxt/Du2W7Jne.js +254 -0
  86. package/.output/public/_nuxt/DuwtTfO8.js +2 -0
  87. package/.output/public/_nuxt/Dy-TJ0Mt.js +1 -0
  88. package/.output/public/_nuxt/{BlnwU1OO.js → Dy86h-7P.js} +1 -1
  89. package/.output/public/_nuxt/{B-IcwqZ2.js → Dyeqn3aG.js} +1 -1
  90. package/.output/public/_nuxt/{BlA8mIS-.js → FaFoMVKo.js} +1 -1
  91. package/.output/public/_nuxt/GPNI1ffD.js +4 -0
  92. package/.output/public/_nuxt/{DWowvnwc.js → H94BMf3L.js} +1 -1
  93. package/.output/public/_nuxt/HPNQD6v3.js +1 -0
  94. package/.output/public/_nuxt/HXadJrHu.js +2 -0
  95. package/.output/public/_nuxt/KyA_4Ks-.js +1 -0
  96. package/.output/public/_nuxt/{e7zD3uJ0.js → L3kAWB2a.js} +1 -1
  97. package/.output/public/_nuxt/McL25vkx.js +34 -0
  98. package/.output/public/_nuxt/Nn93e_Mz.js +1 -0
  99. package/.output/public/_nuxt/TagBadge.By1E6r4y.css +1 -0
  100. package/.output/public/_nuxt/UdR3DBPS.js +1 -0
  101. package/.output/public/_nuxt/Und3xXFc.js +5 -0
  102. package/.output/public/_nuxt/_mj6CfPa.js +1 -0
  103. package/.output/public/_nuxt/b-GYfcrQ.js +1 -0
  104. package/.output/public/_nuxt/bLcjFslv.js +1 -0
  105. package/.output/public/_nuxt/builds/latest.json +1 -1
  106. package/.output/public/_nuxt/builds/meta/e659b3e1-0e61-4971-940e-10063f9f4763.json +1 -0
  107. package/.output/public/_nuxt/entry.DmptwB51.css +1 -0
  108. package/.output/public/_nuxt/{wHnZ9OaL.js → hC_z4G8p.js} +1 -1
  109. package/.output/public/_nuxt/{DZOS7Fh7.js → hNh4CIL0.js} +1 -1
  110. package/.output/public/_nuxt/{kjYMoWWx.js → l5WKbU4h.js} +3 -3
  111. package/.output/public/_nuxt/oAClCn_h.js +1 -0
  112. package/.output/public/_nuxt/{gnCL8GjZ.js → pQqGiNch.js} +1 -1
  113. package/.output/public/_nuxt/ryMzSDUj.js +2 -0
  114. package/.output/public/demo/seed.version.json +2 -2
  115. package/.output/server/chunks/_/ai-prompt-preview.mjs +38 -0
  116. package/.output/server/chunks/_/ai-prompt-preview.mjs.map +1 -0
  117. package/.output/server/chunks/_/collect.mjs +122 -0
  118. package/.output/server/chunks/_/collect.mjs.map +1 -0
  119. package/.output/server/chunks/_/markers.mjs +1 -1
  120. package/.output/server/chunks/_/quarantine.mjs +112 -0
  121. package/.output/server/chunks/_/quarantine.mjs.map +1 -0
  122. package/.output/server/chunks/_/users.mjs +1 -1
  123. package/.output/server/chunks/build/{Alert-Bp1Wz_sq.mjs → Alert-C4xq8lao.mjs} +2 -2
  124. package/.output/server/chunks/build/Alert-C4xq8lao.mjs.map +1 -0
  125. package/.output/server/chunks/build/{Breadcrumb-C9ZPTLym.mjs → Breadcrumb-Ak2Lg3oM.mjs} +3 -3
  126. package/.output/server/chunks/build/Breadcrumb-Ak2Lg3oM.mjs.map +1 -0
  127. package/.output/server/chunks/build/{BreadcrumbNav-C3y42Vun.mjs → BreadcrumbNav-DO7I_z-n.mjs} +3 -3
  128. package/.output/server/chunks/build/BreadcrumbNav-DO7I_z-n.mjs.map +1 -0
  129. package/.output/server/chunks/build/{BrowserBadge-DNCp9pF-.mjs → BrowserBadge-MFvBwxmD.mjs} +67 -7
  130. package/.output/server/chunks/build/BrowserBadge-MFvBwxmD.mjs.map +1 -0
  131. package/.output/server/chunks/build/{ChartCard-Fr557IbV.mjs → ChartCard-Y1UKwMsf.mjs} +2 -2
  132. package/.output/server/chunks/build/ChartCard-Y1UKwMsf.mjs.map +1 -0
  133. package/.output/server/chunks/build/{Checkbox-cVOSIY93.mjs → Checkbox-4Q5d0fa0.mjs} +8 -8
  134. package/.output/server/chunks/build/Checkbox-4Q5d0fa0.mjs.map +1 -0
  135. package/.output/server/chunks/build/CiEnvCard-DB5DvBh1.mjs +1492 -0
  136. package/.output/server/chunks/build/CiEnvCard-DB5DvBh1.mjs.map +1 -0
  137. package/.output/server/chunks/build/{CodeBlock-BGwNmJ8J.mjs → CodeBlock-BgE-NSmE.mjs} +7 -22
  138. package/.output/server/chunks/build/CodeBlock-BgE-NSmE.mjs.map +1 -0
  139. package/.output/server/chunks/build/{DashboardNavbar-Bdp-OwTN.mjs → DashboardNavbar-BHmMSPX7.mjs} +3 -3
  140. package/.output/server/chunks/build/DashboardNavbar-BHmMSPX7.mjs.map +1 -0
  141. package/.output/server/chunks/build/{DashboardSidebarToggle-Ji6ADuqF.mjs → DashboardSidebarToggle-DCTnHiIv.mjs} +3 -3
  142. package/.output/server/chunks/build/DashboardSidebarToggle-DCTnHiIv.mjs.map +1 -0
  143. package/.output/server/chunks/build/{DataLocationCard-D6xSOrme.mjs → DataLocationCard-B_YHdzSz.mjs} +3 -3
  144. package/.output/server/chunks/build/DataLocationCard-B_YHdzSz.mjs.map +1 -0
  145. package/.output/server/chunks/build/{DiagnosisPanel-DV1xwGu4.mjs → DiagnosisPanel-CALyEmcJ.mjs} +17 -528
  146. package/.output/server/chunks/build/DiagnosisPanel-CALyEmcJ.mjs.map +1 -0
  147. package/.output/server/chunks/build/DurationValue-D20oGbnc.mjs +43 -0
  148. package/.output/server/chunks/build/DurationValue-D20oGbnc.mjs.map +1 -0
  149. package/.output/server/chunks/build/{EmptyState-DV3oT_xz.mjs → EmptyState-DC2q_7TD.mjs} +3 -3
  150. package/.output/server/chunks/build/EmptyState-DC2q_7TD.mjs.map +1 -0
  151. package/.output/server/chunks/build/{EntityLinks-DeOP13Kr.mjs → EntityLinks-BBHWssHH.mjs} +6 -6
  152. package/.output/server/chunks/build/EntityLinks-BBHWssHH.mjs.map +1 -0
  153. package/.output/server/chunks/build/{EnvManagedBadge-Qpn58Nmr.mjs → EnvManagedBadge-UwD2b9v2.mjs} +3 -3
  154. package/.output/server/chunks/build/EnvManagedBadge-UwD2b9v2.mjs.map +1 -0
  155. package/.output/server/chunks/build/{FormField-B-GSn_VR.mjs → FormField-B0HKsdMd.mjs} +3 -3
  156. package/.output/server/chunks/build/FormField-B0HKsdMd.mjs.map +1 -0
  157. package/.output/server/chunks/build/{HelpHint-YEMWtKu1.mjs → HelpHint-DrcIv-Oj.mjs} +53 -6
  158. package/.output/server/chunks/build/HelpHint-DrcIv-Oj.mjs.map +1 -0
  159. package/.output/server/chunks/build/{Label-DBvbHd3A.mjs → Label-DYDR1Oeh.mjs} +2 -2
  160. package/.output/server/chunks/build/Label-DYDR1Oeh.mjs.map +1 -0
  161. package/.output/server/chunks/build/{MiniRunBars-C3HG-EYm.mjs → MiniRunBars-CZMugDrh.mjs} +2 -2
  162. package/.output/server/chunks/build/MiniRunBars-CZMugDrh.mjs.map +1 -0
  163. package/.output/server/chunks/build/{Modal-CfA78Hm1.mjs → Modal-pSDlXzT3.mjs} +2 -2
  164. package/.output/server/chunks/build/Modal-pSDlXzT3.mjs.map +1 -0
  165. package/.output/server/chunks/build/{OpenInIdeLink-B92wosXu.mjs → OpenInIdeLink-CQWKKChd.mjs} +6 -6
  166. package/.output/server/chunks/build/{OpenInIdeLink-B92wosXu.mjs.map → OpenInIdeLink-CQWKKChd.mjs.map} +1 -1
  167. package/.output/server/chunks/build/{ProjectTestCasesTable-9Ia825h8.mjs → ProjectTestCasesTable-Bo61P5K1.mjs} +120 -45
  168. package/.output/server/chunks/build/ProjectTestCasesTable-Bo61P5K1.mjs.map +1 -0
  169. package/.output/server/chunks/build/{RovingFocusItem-CxhHdNGo.mjs → RovingFocusItem--OEHI2P3.mjs} +2 -2
  170. package/.output/server/chunks/build/RovingFocusItem--OEHI2P3.mjs.map +1 -0
  171. package/.output/server/chunks/build/{RunReports-BpJqLHY9.mjs → RunReports-DFLv51TX.mjs} +8 -6
  172. package/.output/server/chunks/build/RunReports-DFLv51TX.mjs.map +1 -0
  173. package/.output/server/chunks/build/{RunStatusBadge-BhmJ_RKM.mjs → RunStatusBadge-FfGb6bkW.mjs} +3 -2
  174. package/.output/server/chunks/build/RunStatusBadge-FfGb6bkW.mjs.map +1 -0
  175. package/.output/server/chunks/build/{SectionCard-COd9TuDq.mjs → SectionCard-CN-v0FZ_.mjs} +2 -2
  176. package/.output/server/chunks/build/SectionCard-CN-v0FZ_.mjs.map +1 -0
  177. package/.output/server/chunks/build/{Select-ppPz926C.mjs → Select-5DK9frQ7.mjs} +4 -4
  178. package/.output/server/chunks/build/Select-5DK9frQ7.mjs.map +1 -0
  179. package/.output/server/chunks/build/{SelectMenu-799c_Ils.mjs → SelectMenu-D-2FSqBU.mjs} +939 -7
  180. package/.output/server/chunks/build/{SelectMenu-799c_Ils.mjs.map → SelectMenu-D-2FSqBU.mjs.map} +1 -1
  181. package/.output/server/chunks/build/{Separator-CxZdx8kw.mjs → Separator-CR4WcEKD.mjs} +2 -2
  182. package/.output/server/chunks/build/Separator-CR4WcEKD.mjs.map +1 -0
  183. package/.output/server/chunks/build/{SettingsField-DDD4oqys.mjs → SettingsField-BZfx4ma1.mjs} +6 -6
  184. package/.output/server/chunks/build/SettingsField-BZfx4ma1.mjs.map +1 -0
  185. package/.output/server/chunks/build/{Slideover-B95Rj237.mjs → Slideover-D270EZZD.mjs} +3 -3
  186. package/.output/server/chunks/build/Slideover-D270EZZD.mjs.map +1 -0
  187. package/.output/server/chunks/build/{Switch-xQQ3_ME1.mjs → Switch-B5Fp8ULt.mjs} +5 -5
  188. package/.output/server/chunks/build/Switch-B5Fp8ULt.mjs.map +1 -0
  189. package/.output/server/chunks/build/{Table-CPhhVzDv.mjs → Table-BRk04Hd2.mjs} +3 -3
  190. package/.output/server/chunks/build/Table-BRk04Hd2.mjs.map +1 -0
  191. package/.output/server/chunks/build/{Tabs-BV9XqjoO.mjs → Tabs-BkSOnbaB.mjs} +3 -3
  192. package/.output/server/chunks/build/Tabs-BkSOnbaB.mjs.map +1 -0
  193. package/.output/server/chunks/build/TagBadge-DwzoFCBb.mjs +31 -0
  194. package/.output/server/chunks/build/TagBadge-DwzoFCBb.mjs.map +1 -0
  195. package/.output/server/chunks/build/TagBadge-styles.jhuZ4NjP.mjs +8 -0
  196. package/.output/server/chunks/build/TagBadge-styles.jhuZ4NjP.mjs.map +1 -0
  197. package/.output/server/chunks/build/{TestCaseHistoryChart-DMb-xSJa.mjs → TestCaseHistoryChart-CSi64vVA.mjs} +6 -6
  198. package/.output/server/chunks/build/TestCaseHistoryChart-CSi64vVA.mjs.map +1 -0
  199. package/.output/server/chunks/build/TestMetaBadges-D5_yUtIP.mjs +200 -0
  200. package/.output/server/chunks/build/TestMetaBadges-D5_yUtIP.mjs.map +1 -0
  201. package/.output/server/chunks/build/{TestStatusBar-CEzt76wk.mjs → TestStatusBar-DX3EhlyP.mjs} +15 -15
  202. package/.output/server/chunks/build/TestStatusBar-DX3EhlyP.mjs.map +1 -0
  203. package/.output/server/chunks/build/{Textarea-DrrqQUVG.mjs → Textarea-Dv2-lOvW.mjs} +2 -2
  204. package/.output/server/chunks/build/Textarea-Dv2-lOvW.mjs.map +1 -0
  205. package/.output/server/chunks/build/{Tooltip-7vwuDPrZ.mjs → Tooltip-Dv4htNP6.mjs} +3 -3
  206. package/.output/server/chunks/build/Tooltip-Dv4htNP6.mjs.map +1 -0
  207. package/.output/server/chunks/build/{VisuallyHiddenInput-C9eJVpPW.mjs → VisuallyHiddenInput-BHvzNumK.mjs} +2 -2
  208. package/.output/server/chunks/build/VisuallyHiddenInput-BHvzNumK.mjs.map +1 -0
  209. package/.output/server/chunks/build/{_id_-CE0Gso6i.mjs → _id_-BdG37K7s.mjs} +91 -42
  210. package/.output/server/chunks/build/_id_-BdG37K7s.mjs.map +1 -0
  211. package/.output/server/chunks/build/{_id_-bWcP2xFl.mjs → _id_-BdJs7BJZ.mjs} +719 -448
  212. package/.output/server/chunks/build/_id_-BdJs7BJZ.mjs.map +1 -0
  213. package/.output/server/chunks/build/{_id_-B2yirIuA.mjs → _id_-BxA6IgWr.mjs} +831 -368
  214. package/.output/server/chunks/build/_id_-BxA6IgWr.mjs.map +1 -0
  215. package/.output/server/chunks/build/{_id_-B4V5fop6.mjs → _id_-C_uSBiyU.mjs} +296 -60
  216. package/.output/server/chunks/build/{_id_-B4V5fop6.mjs.map → _id_-C_uSBiyU.mjs.map} +1 -1
  217. package/.output/server/chunks/build/{about-CoJjvUwM.mjs → about-BE0UV-8-.mjs} +456 -61
  218. package/.output/server/chunks/build/about-BE0UV-8-.mjs.map +1 -0
  219. package/.output/server/chunks/build/{account-Cn-eZqXM.mjs → account-DAfvaD-F.mjs} +21 -9
  220. package/.output/server/chunks/build/account-DAfvaD-F.mjs.map +1 -0
  221. package/.output/server/chunks/build/{ai-7jdaPOmj.mjs → ai-Cn05ch0u.mjs} +45 -23
  222. package/.output/server/chunks/build/{ai-7jdaPOmj.mjs.map → ai-Cn05ch0u.mjs.map} +1 -1
  223. package/.output/server/chunks/build/{analytics-B276WPeU.mjs → analytics-Bo_B_jko.mjs} +66 -41
  224. package/.output/server/chunks/build/analytics-Bo_B_jko.mjs.map +1 -0
  225. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  226. package/.output/server/chunks/build/compare-RxHSOdsO.mjs +12 -0
  227. package/.output/server/chunks/build/{db.client-aHcD0wyX.mjs → db.client-CQoVTYB9.mjs} +83 -5
  228. package/.output/server/chunks/build/db.client-CQoVTYB9.mjs.map +1 -0
  229. package/.output/server/chunks/build/{default-BSzdkM_L.mjs → default-CbNHaFsy.mjs} +622 -78
  230. package/.output/server/chunks/build/default-CbNHaFsy.mjs.map +1 -0
  231. package/.output/server/chunks/build/{docs-BN_x1OW3.mjs → docs-B_llWMxx.mjs} +30 -49
  232. package/.output/server/chunks/build/{docs-BN_x1OW3.mjs.map → docs-B_llWMxx.mjs.map} +1 -1
  233. package/.output/server/chunks/build/{edit-C9Z7oZeu.mjs → edit-J0asTFg8.mjs} +29 -18
  234. package/.output/server/chunks/build/edit-J0asTFg8.mjs.map +1 -0
  235. package/.output/server/chunks/build/{fetch-8kznMtBM.mjs → fetch-B4FwBOzu.mjs} +3 -3
  236. package/.output/server/chunks/build/fetch-B4FwBOzu.mjs.map +1 -0
  237. package/.output/server/chunks/build/{forgot-password-BqPF4Rxs.mjs → forgot-password-CC__1OnV.mjs} +17 -5
  238. package/.output/server/chunks/build/forgot-password-CC__1OnV.mjs.map +1 -0
  239. package/.output/server/chunks/build/{help-content-DmFnuhNu.mjs → help-content-C876a9WD.mjs} +37 -8
  240. package/.output/server/chunks/build/help-content-C876a9WD.mjs.map +1 -0
  241. package/.output/server/chunks/build/import-CS9oylTN.mjs +1021 -0
  242. package/.output/server/chunks/build/import-CS9oylTN.mjs.map +1 -0
  243. package/.output/server/chunks/build/{index-CULN3-en.mjs → index-CU2nZhAa.mjs} +113 -42
  244. package/.output/server/chunks/build/index-CU2nZhAa.mjs.map +1 -0
  245. package/.output/server/chunks/build/{index-BR9hw6qk.mjs → index-DE45ycdZ.mjs} +51 -31
  246. package/.output/server/chunks/build/index-DE45ycdZ.mjs.map +1 -0
  247. package/.output/server/chunks/build/{index-BK9PTRpd.mjs → index-e9skCi-V.mjs} +85 -69
  248. package/.output/server/chunks/build/{index-BK9PTRpd.mjs.map → index-e9skCi-V.mjs.map} +1 -1
  249. package/.output/server/chunks/build/{index-DVUtBexc.mjs → index-hGHlmyxj.mjs} +1520 -288
  250. package/.output/server/chunks/build/index-hGHlmyxj.mjs.map +1 -0
  251. package/.output/server/chunks/build/{index-Ba-Fifra.mjs → index-tR6owKzj.mjs} +18 -6
  252. package/.output/server/chunks/build/index-tR6owKzj.mjs.map +1 -0
  253. package/.output/server/chunks/build/{isValueEqualOrExist-DBZjbD_3.mjs → isValueEqualOrExist-D2qw9YEr.mjs} +3 -3
  254. package/.output/server/chunks/build/isValueEqualOrExist-D2qw9YEr.mjs.map +1 -0
  255. package/.output/server/chunks/build/{login-D2XZDuek.mjs → login-Da4u1IlW.mjs} +19 -7
  256. package/.output/server/chunks/build/login-Da4u1IlW.mjs.map +1 -0
  257. package/.output/server/chunks/build/{mcp-_o6cMS6m.mjs → mcp-uhVCCwQM.mjs} +359 -24
  258. package/.output/server/chunks/build/mcp-uhVCCwQM.mjs.map +1 -0
  259. package/.output/server/chunks/build/{notifications-Dzm9c0u_.mjs → notifications-fx_qnKGA.mjs} +27 -21
  260. package/.output/server/chunks/build/notifications-fx_qnKGA.mjs.map +1 -0
  261. package/.output/server/chunks/build/pr-feedback-X6-70iF0.mjs +368 -0
  262. package/.output/server/chunks/build/pr-feedback-X6-70iF0.mjs.map +1 -0
  263. package/.output/server/chunks/build/{reset-password-gpFzIEDj.mjs → reset-password-BmrUS4ZD.mjs} +17 -5
  264. package/.output/server/chunks/build/reset-password-BmrUS4ZD.mjs.map +1 -0
  265. package/.output/server/chunks/build/server.mjs +238 -36
  266. package/.output/server/chunks/build/{settings-pNyPBXVa.mjs → settings-CCYe7rsc.mjs} +23 -10
  267. package/.output/server/chunks/build/settings-CCYe7rsc.mjs.map +1 -0
  268. package/.output/server/chunks/build/{settings-metadata-B0wo5R-W.mjs → settings-metadata-DrEqWcW-.mjs} +11 -2
  269. package/.output/server/chunks/build/settings-metadata-DrEqWcW-.mjs.map +1 -0
  270. package/.output/server/chunks/build/{storage-XelzuyPy.mjs → storage-CJEmviCD.mjs} +41 -31
  271. package/.output/server/chunks/build/storage-CJEmviCD.mjs.map +1 -0
  272. package/.output/server/chunks/build/styles.mjs +1 -0
  273. package/.output/server/chunks/build/{tags-DrCQ7QSw.mjs → tags-DauTe_F-.mjs} +22 -10
  274. package/.output/server/chunks/build/tags-DauTe_F-.mjs.map +1 -0
  275. package/.output/server/chunks/build/{test-cases-pmOxi-AN.mjs → test-cases-thBbAykw.mjs} +38 -24
  276. package/.output/server/chunks/build/test-cases-thBbAykw.mjs.map +1 -0
  277. package/.output/server/chunks/build/{timeout-hygiene-CNs71Iah.mjs → timeout-hygiene-CbnSaVbK.mjs} +20 -8
  278. package/.output/server/chunks/build/timeout-hygiene-CbnSaVbK.mjs.map +1 -0
  279. package/.output/server/chunks/build/{useAiStatus-ZO987RY7.mjs → useAiStatus-CxjMmDDY.mjs} +89 -89
  280. package/.output/server/chunks/build/useAiStatus-CxjMmDDY.mjs.map +1 -0
  281. package/.output/server/chunks/build/{useCopy-BQQKcwlq.mjs → useCopy-CeKWgHyT.mjs} +2 -2
  282. package/.output/server/chunks/build/useCopy-CeKWgHyT.mjs.map +1 -0
  283. package/.output/server/chunks/build/{PageStateCard-Bwee6JTk.mjs → useCopyRich-RJKhWoyj.mjs} +472 -63
  284. package/.output/server/chunks/build/useCopyRich-RJKhWoyj.mjs.map +1 -0
  285. package/.output/server/chunks/build/useDesktopDownload-BepjqxOt.mjs +46 -0
  286. package/.output/server/chunks/build/useDesktopDownload-BepjqxOt.mjs.map +1 -0
  287. package/.output/server/chunks/build/{useFormControl-BLpq1s4O.mjs → useFormControl-CZ9So7iX.mjs} +2 -2
  288. package/.output/server/chunks/build/useFormControl-CZ9So7iX.mjs.map +1 -0
  289. package/.output/server/chunks/build/{useOpenInIde-kMZ7Jw5c.mjs → useOpenInIde-BbTnPhFA.mjs} +3 -3
  290. package/.output/server/chunks/build/useOpenInIde-BbTnPhFA.mjs.map +1 -0
  291. package/.output/server/chunks/build/{useSettingsNav-NjI2seBy.mjs → useSettingsNav-DnQKacz8.mjs} +6 -6
  292. package/.output/server/chunks/build/useSettingsNav-DnQKacz8.mjs.map +1 -0
  293. package/.output/server/chunks/build/useTauri-Kf3HE_42.mjs +11 -0
  294. package/.output/server/chunks/build/useTauri-Kf3HE_42.mjs.map +1 -0
  295. package/.output/server/chunks/build/{useTreeViewCookie-DVYpxW-p.mjs → useTreeViewCookie-CQjQdTkH.mjs} +2 -2
  296. package/.output/server/chunks/build/useTreeViewCookie-CQjQdTkH.mjs.map +1 -0
  297. package/.output/server/chunks/build/{users-NmAUZs3i.mjs → users-CTUqXyGh.mjs} +22 -10
  298. package/.output/server/chunks/build/users-CTUqXyGh.mjs.map +1 -0
  299. package/.output/server/chunks/build/{wasted-time-CguAF9zc.mjs → wasted-time-BNTPIyrC.mjs} +26 -14
  300. package/.output/server/chunks/build/wasted-time-BNTPIyrC.mjs.map +1 -0
  301. package/.output/server/chunks/nitro/nitro.mjs +6438 -1964
  302. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  303. package/.output/server/chunks/routes/__piwi/session.get.mjs +13 -1
  304. package/.output/server/chunks/routes/__piwi/session.get.mjs.map +1 -1
  305. package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs +12 -0
  306. package/.output/server/chunks/routes/api/admin/cleanup.delete.mjs.map +1 -1
  307. package/.output/server/chunks/routes/api/admin/stats.get.mjs +12 -0
  308. package/.output/server/chunks/routes/api/admin/stats.get.mjs.map +1 -1
  309. package/.output/server/chunks/routes/api/ai/status.get.mjs +12 -0
  310. package/.output/server/chunks/routes/api/ai/status.get.mjs.map +1 -1
  311. package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs +12 -0
  312. package/.output/server/chunks/routes/api/analytics/_widget_.get.mjs.map +1 -1
  313. package/.output/server/chunks/routes/api/auth/change-password.post.mjs +12 -0
  314. package/.output/server/chunks/routes/api/auth/change-password.post.mjs.map +1 -1
  315. package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs +12 -0
  316. package/.output/server/chunks/routes/api/auth/forgot-password.post.mjs.map +1 -1
  317. package/.output/server/chunks/routes/api/auth/login.post.mjs +12 -0
  318. package/.output/server/chunks/routes/api/auth/login.post.mjs.map +1 -1
  319. package/.output/server/chunks/routes/api/auth/logout.post.mjs +12 -0
  320. package/.output/server/chunks/routes/api/auth/logout.post.mjs.map +1 -1
  321. package/.output/server/chunks/routes/api/auth/me.get.mjs +12 -0
  322. package/.output/server/chunks/routes/api/auth/me.get.mjs.map +1 -1
  323. package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs +12 -0
  324. package/.output/server/chunks/routes/api/auth/oauth/_provider/callback.get.mjs.map +1 -1
  325. package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs +12 -0
  326. package/.output/server/chunks/routes/api/auth/oauth/_provider/login.get.mjs.map +1 -1
  327. package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs +12 -0
  328. package/.output/server/chunks/routes/api/auth/oauth/_provider/unlink.post.mjs.map +1 -1
  329. package/.output/server/chunks/routes/api/auth/reset-password.post.mjs +12 -0
  330. package/.output/server/chunks/routes/api/auth/reset-password.post.mjs.map +1 -1
  331. package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs +12 -0
  332. package/.output/server/chunks/routes/api/auth/send-verify-email.post.mjs.map +1 -1
  333. package/.output/server/chunks/routes/api/auth/setup.get.mjs +12 -0
  334. package/.output/server/chunks/routes/api/auth/setup.get.mjs.map +1 -1
  335. package/.output/server/chunks/routes/api/auth/setup.post.mjs +12 -0
  336. package/.output/server/chunks/routes/api/auth/setup.post.mjs.map +1 -1
  337. package/.output/server/chunks/routes/api/auth/verify-email.get.mjs +12 -0
  338. package/.output/server/chunks/routes/api/auth/verify-email.get.mjs.map +1 -1
  339. package/.output/server/chunks/routes/api/channels/_id/test.post.mjs +12 -0
  340. package/.output/server/chunks/routes/api/channels/_id/test.post.mjs.map +1 -1
  341. package/.output/server/chunks/routes/api/channels/_id_.delete.mjs +12 -0
  342. package/.output/server/chunks/routes/api/channels/_id_.delete.mjs.map +1 -1
  343. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs +12 -0
  344. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/approve.post.mjs.map +1 -1
  345. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs +12 -0
  346. package/.output/server/chunks/routes/api/cluster-merge-suggestions/_id/reject.post.mjs.map +1 -1
  347. package/.output/server/chunks/routes/api/desktop/import-local.post.mjs +88 -0
  348. package/.output/server/chunks/routes/api/desktop/import-local.post.mjs.map +1 -0
  349. package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs +12 -0
  350. package/.output/server/chunks/routes/api/desktop/reporter-config.get.mjs.map +1 -1
  351. package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs +13 -1
  352. package/.output/server/chunks/routes/api/failure-clusters/_id/base-commit.patch.mjs.map +1 -1
  353. package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs +13 -1
  354. package/.output/server/chunks/routes/api/failure-clusters/_id/branches.get.mjs.map +1 -1
  355. package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs +13 -1
  356. package/.output/server/chunks/routes/api/failure-clusters/_id/commit-diff.get.mjs.map +1 -1
  357. package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs +13 -1
  358. package/.output/server/chunks/routes/api/failure-clusters/_id/commits.get.mjs.map +1 -1
  359. package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs +24 -1
  360. package/.output/server/chunks/routes/api/failure-clusters/_id/context.get.mjs.map +1 -1
  361. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs +13 -1
  362. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose/stream.post.mjs.map +1 -1
  363. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs +13 -1
  364. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnose.post.mjs.map +1 -1
  365. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs +13 -1
  366. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnoses.get.mjs.map +1 -1
  367. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs +13 -1
  368. package/.output/server/chunks/routes/api/failure-clusters/_id/diagnosis.get.mjs.map +1 -1
  369. package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs +64 -0
  370. package/.output/server/chunks/routes/api/failure-clusters/_id/export.get.mjs.map +1 -0
  371. package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs +13 -1
  372. package/.output/server/chunks/routes/api/failure-clusters/_id/extract-cases.post.mjs.map +1 -1
  373. package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs +56 -0
  374. package/.output/server/chunks/routes/api/failure-clusters/_id/fix-plan.get.mjs.map +1 -0
  375. package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs +13 -1
  376. package/.output/server/chunks/routes/api/failure-clusters/_id/status.patch.mjs.map +1 -1
  377. package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs +13 -1
  378. package/.output/server/chunks/routes/api/failure-clusters/_id_.get.mjs.map +1 -1
  379. package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs +13 -1
  380. package/.output/server/chunks/routes/api/failure-diagnoses/_id/feedback.patch.mjs.map +1 -1
  381. package/.output/server/chunks/routes/api/files/_...path_.get.mjs +13 -32
  382. package/.output/server/chunks/routes/api/files/_...path_.get.mjs.map +1 -1
  383. package/.output/server/chunks/routes/api/health.get.mjs +13 -1
  384. package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
  385. package/.output/server/chunks/routes/api/index.get.mjs +12 -0
  386. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  387. package/.output/server/chunks/routes/api/index.get2.mjs +13 -1
  388. package/.output/server/chunks/routes/api/index.get2.mjs.map +1 -1
  389. package/.output/server/chunks/routes/api/index.get3.mjs +13 -1
  390. package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -1
  391. package/.output/server/chunks/routes/api/index.get4.mjs +13 -1
  392. package/.output/server/chunks/routes/api/index.get4.mjs.map +1 -1
  393. package/.output/server/chunks/routes/api/index.get5.mjs +12 -0
  394. package/.output/server/chunks/routes/api/index.get5.mjs.map +1 -1
  395. package/.output/server/chunks/routes/api/index.post.mjs +12 -0
  396. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  397. package/.output/server/chunks/routes/api/index.post2.mjs +13 -1
  398. package/.output/server/chunks/routes/api/index.post2.mjs.map +1 -1
  399. package/.output/server/chunks/routes/api/index.post3.mjs +13 -1
  400. package/.output/server/chunks/routes/api/index.post3.mjs.map +1 -1
  401. package/.output/server/chunks/routes/api/index.post4.mjs +13 -1
  402. package/.output/server/chunks/routes/api/index.post4.mjs.map +1 -1
  403. package/.output/server/chunks/routes/api/index.post5.mjs +13 -1
  404. package/.output/server/chunks/routes/api/index.post5.mjs.map +1 -1
  405. package/.output/server/chunks/routes/api/index.post6.mjs +12 -0
  406. package/.output/server/chunks/routes/api/index.post6.mjs.map +1 -1
  407. package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs +13 -1
  408. package/.output/server/chunks/routes/api/links/_id/refresh.post.mjs.map +1 -1
  409. package/.output/server/chunks/routes/api/links/_id_.delete.mjs +13 -1
  410. package/.output/server/chunks/routes/api/links/_id_.delete.mjs.map +1 -1
  411. package/.output/server/chunks/routes/api/links/_id_.patch.mjs +13 -1
  412. package/.output/server/chunks/routes/api/links/_id_.patch.mjs.map +1 -1
  413. package/.output/server/chunks/routes/api/markers/_id_.delete.mjs +13 -1
  414. package/.output/server/chunks/routes/api/markers/_id_.delete.mjs.map +1 -1
  415. package/.output/server/chunks/routes/api/markers/_id_.put.mjs +13 -1
  416. package/.output/server/chunks/routes/api/markers/_id_.put.mjs.map +1 -1
  417. package/.output/server/chunks/routes/api/notifications/stream.get.mjs +13 -1
  418. package/.output/server/chunks/routes/api/notifications/stream.get.mjs.map +1 -1
  419. package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs +13 -1
  420. package/.output/server/chunks/routes/api/projects/_id/cluster-merge-suggestions.get.mjs.map +1 -1
  421. package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs +13 -1
  422. package/.output/server/chunks/routes/api/projects/_id/failure-clusters.get.mjs.map +1 -1
  423. package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs +13 -1
  424. package/.output/server/chunks/routes/api/projects/_id/flaky-classify.post.mjs.map +1 -1
  425. package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs +22 -2
  426. package/.output/server/chunks/routes/api/projects/_id/flaky-tests.get.mjs.map +1 -1
  427. package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs +13 -1
  428. package/.output/server/chunks/routes/api/projects/_id/latest-run.get.mjs.map +1 -1
  429. package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs +13 -1
  430. package/.output/server/chunks/routes/api/projects/_id/markers.get.mjs.map +1 -1
  431. package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs +13 -1
  432. package/.output/server/chunks/routes/api/projects/_id/markers.post.mjs.map +1 -1
  433. package/.output/server/chunks/routes/api/projects/_id/members.get.mjs +13 -1
  434. package/.output/server/chunks/routes/api/projects/_id/members.get.mjs.map +1 -1
  435. package/.output/server/chunks/routes/api/projects/_id/members.put.mjs +13 -1
  436. package/.output/server/chunks/routes/api/projects/_id/members.put.mjs.map +1 -1
  437. package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs +13 -1
  438. package/.output/server/chunks/routes/api/projects/_id/performance.get.mjs.map +1 -1
  439. package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs +58 -0
  440. package/.output/server/chunks/routes/api/projects/_id/quarantine/_testCaseId_.delete.mjs.map +1 -0
  441. package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs +57 -0
  442. package/.output/server/chunks/routes/api/projects/_id/quarantine.get.mjs.map +1 -0
  443. package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs +72 -0
  444. package/.output/server/chunks/routes/api/projects/_id/quarantine.post.mjs.map +1 -0
  445. package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs +13 -1
  446. package/.output/server/chunks/routes/api/projects/_id/slow-tests.get.mjs.map +1 -1
  447. package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs +13 -1
  448. package/.output/server/chunks/routes/api/projects/_id/spec-health.get.mjs.map +1 -1
  449. package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs +13 -1
  450. package/.output/server/chunks/routes/api/projects/_id/test-cases.get.mjs.map +1 -1
  451. package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs +13 -1
  452. package/.output/server/chunks/routes/api/projects/_id/timeout-opportunities.get.mjs.map +1 -1
  453. package/.output/server/chunks/routes/api/projects/_id_.delete.mjs +13 -1
  454. package/.output/server/chunks/routes/api/projects/_id_.delete.mjs.map +1 -1
  455. package/.output/server/chunks/routes/api/projects/_id_.get.mjs +13 -1
  456. package/.output/server/chunks/routes/api/projects/_id_.get.mjs.map +1 -1
  457. package/.output/server/chunks/routes/api/projects/_id_.put.mjs +13 -1
  458. package/.output/server/chunks/routes/api/projects/_id_.put.mjs.map +1 -1
  459. package/.output/server/chunks/routes/api/projects/menu.get.mjs +13 -1
  460. package/.output/server/chunks/routes/api/projects/menu.get.mjs.map +1 -1
  461. package/.output/server/chunks/routes/api/projects/overview.get.mjs +13 -1
  462. package/.output/server/chunks/routes/api/projects/overview.get.mjs.map +1 -1
  463. package/.output/server/chunks/routes/api/projects.get.mjs +13 -1
  464. package/.output/server/chunks/routes/api/projects.get.mjs.map +1 -1
  465. package/.output/server/chunks/routes/api/search.get.mjs +13 -1
  466. package/.output/server/chunks/routes/api/search.get.mjs.map +1 -1
  467. package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs +13 -1
  468. package/.output/server/chunks/routes/api/settings/ai/limits.get.mjs.map +1 -1
  469. package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs +13 -1
  470. package/.output/server/chunks/routes/api/settings/ai/limits.put.mjs.map +1 -1
  471. package/.output/server/chunks/routes/api/settings/ai/models.post.mjs +12 -0
  472. package/.output/server/chunks/routes/api/settings/ai/models.post.mjs.map +1 -1
  473. package/.output/server/chunks/routes/api/settings/ai/test.post.mjs +13 -1
  474. package/.output/server/chunks/routes/api/settings/ai/test.post.mjs.map +1 -1
  475. package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs +13 -1
  476. package/.output/server/chunks/routes/api/settings/ai/usage.get.mjs.map +1 -1
  477. package/.output/server/chunks/routes/api/settings/ai.get.mjs +13 -1
  478. package/.output/server/chunks/routes/api/settings/ai.get.mjs.map +1 -1
  479. package/.output/server/chunks/routes/api/settings/ai.put.mjs +13 -1
  480. package/.output/server/chunks/routes/api/settings/ai.put.mjs.map +1 -1
  481. package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs +57 -0
  482. package/.output/server/chunks/routes/api/settings/pr-feedback.get.mjs.map +1 -0
  483. package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs +63 -0
  484. package/.output/server/chunks/routes/api/settings/pr-feedback.put.mjs.map +1 -0
  485. package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs +12 -0
  486. package/.output/server/chunks/routes/api/settings/smtp/test.post.mjs.map +1 -1
  487. package/.output/server/chunks/routes/api/settings/smtp.get.mjs +13 -1
  488. package/.output/server/chunks/routes/api/settings/smtp.get.mjs.map +1 -1
  489. package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs +13 -1
  490. package/.output/server/chunks/routes/api/settings/timeout-hygiene.get.mjs.map +1 -1
  491. package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs +13 -1
  492. package/.output/server/chunks/routes/api/settings/timeout-hygiene.put.mjs.map +1 -1
  493. package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs +13 -1
  494. package/.output/server/chunks/routes/api/settings/wasted-waits.get.mjs.map +1 -1
  495. package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs +13 -1
  496. package/.output/server/chunks/routes/api/settings/wasted-waits.put.mjs.map +1 -1
  497. package/.output/server/chunks/routes/api/stream.get.mjs +13 -1
  498. package/.output/server/chunks/routes/api/stream.get.mjs.map +1 -1
  499. package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs +13 -1
  500. package/.output/server/chunks/routes/api/subscriptions/_id_.delete.mjs.map +1 -1
  501. package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs +13 -1
  502. package/.output/server/chunks/routes/api/subscriptions/_id_.patch.mjs.map +1 -1
  503. package/.output/server/chunks/routes/api/tags/_id_.delete.mjs +13 -1
  504. package/.output/server/chunks/routes/api/tags/_id_.delete.mjs.map +1 -1
  505. package/.output/server/chunks/routes/api/tags/_id_.put.mjs +13 -1
  506. package/.output/server/chunks/routes/api/tags/_id_.put.mjs.map +1 -1
  507. package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs +13 -1
  508. package/.output/server/chunks/routes/api/test-cases/_id/history.get.mjs.map +1 -1
  509. package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs +13 -1
  510. package/.output/server/chunks/routes/api/test-cases/_id/stability-trend.get.mjs.map +1 -1
  511. package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs +13 -1
  512. package/.output/server/chunks/routes/api/test-cases/_id_.get.mjs.map +1 -1
  513. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs +13 -1
  514. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnose.post.mjs.map +1 -1
  515. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs +25 -3
  516. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis-context.get.mjs.map +1 -1
  517. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs +13 -1
  518. package/.output/server/chunks/routes/api/test-run-cases/_id/diagnosis.get.mjs.map +1 -1
  519. package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs +60 -0
  520. package/.output/server/chunks/routes/api/test-run-cases/_id/export.get.mjs.map +1 -0
  521. package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs +13 -1
  522. package/.output/server/chunks/routes/api/test-run-cases/_id/traces.get.mjs.map +1 -1
  523. package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs +13 -1
  524. package/.output/server/chunks/routes/api/test-run-cases/_id_.get.mjs.map +1 -1
  525. package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs +13 -1
  526. package/.output/server/chunks/routes/api/test-runs/_id/begin.post.mjs.map +1 -1
  527. package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs +13 -1
  528. package/.output/server/chunks/routes/api/test-runs/_id/case-files.post.mjs.map +1 -1
  529. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs +17 -3
  530. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/dom-snapshot.get.mjs.map +1 -1
  531. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs +13 -1
  532. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/environment-diff.get.mjs.map +1 -1
  533. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs +13 -1
  534. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-healing.get.mjs.map +1 -1
  535. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs +13 -1
  536. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/locator-pick.post.mjs.map +1 -1
  537. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs +13 -1
  538. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network-body.get.mjs.map +1 -1
  539. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs +13 -1
  540. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-network.get.mjs.map +1 -1
  541. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs +13 -1
  542. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/trace-stacks.get.mjs.map +1 -1
  543. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs +13 -1
  544. package/.output/server/chunks/routes/api/test-runs/_id/cases/_caseId/visual-diff.get.mjs.map +1 -1
  545. package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs +13 -1
  546. package/.output/server/chunks/routes/api/test-runs/_id/events.post.mjs.map +1 -1
  547. package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs +13 -1
  548. package/.output/server/chunks/routes/api/test-runs/_id/failure-groups.get.mjs.map +1 -1
  549. package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs +15 -1
  550. package/.output/server/chunks/routes/api/test-runs/_id/finish.post.mjs.map +1 -1
  551. package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs +196 -0
  552. package/.output/server/chunks/routes/api/test-runs/_id/gate.post.mjs.map +1 -0
  553. package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs +13 -1
  554. package/.output/server/chunks/routes/api/test-runs/_id/heartbeat.post.mjs.map +1 -1
  555. package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs +13 -1
  556. package/.output/server/chunks/routes/api/test-runs/_id/insights.get.mjs.map +1 -1
  557. package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs +13 -1
  558. package/.output/server/chunks/routes/api/test-runs/_id/network-requests.get.mjs.map +1 -1
  559. package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs +13 -1
  560. package/.output/server/chunks/routes/api/test-runs/_id/regression-context.get.mjs.map +1 -1
  561. package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs +13 -1
  562. package/.output/server/chunks/routes/api/test-runs/_id/stream.get.mjs.map +1 -1
  563. package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs +13 -1
  564. package/.output/server/chunks/routes/api/test-runs/_id/summary.get.mjs.map +1 -1
  565. package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs +13 -1
  566. package/.output/server/chunks/routes/api/test-runs/_id_.delete.mjs.map +1 -1
  567. package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs +13 -1
  568. package/.output/server/chunks/routes/api/test-runs/_id_.get.mjs.map +1 -1
  569. package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs +13 -1
  570. package/.output/server/chunks/routes/api/test-runs/_id_.patch.mjs.map +1 -1
  571. package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs +77 -0
  572. package/.output/server/chunks/routes/api/test-runs/import/check.post.mjs.map +1 -0
  573. package/.output/server/chunks/routes/api/test-runs/import.post.mjs +77 -0
  574. package/.output/server/chunks/routes/api/test-runs/import.post.mjs.map +1 -0
  575. package/.output/server/chunks/routes/api/test-runs/recent.get.mjs +13 -1
  576. package/.output/server/chunks/routes/api/test-runs/recent.get.mjs.map +1 -1
  577. package/.output/server/chunks/routes/api/test-runs/setup.post.mjs +13 -1
  578. package/.output/server/chunks/routes/api/test-runs/setup.post.mjs.map +1 -1
  579. package/.output/server/chunks/routes/api/test-runs/start.post.mjs +13 -1
  580. package/.output/server/chunks/routes/api/test-runs/start.post.mjs.map +1 -1
  581. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs +32 -15
  582. package/.output/server/chunks/routes/api/test-runs/submit.post.mjs.map +1 -1
  583. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs +21 -6
  584. package/.output/server/chunks/routes/api/test-runs/upload.post.mjs.map +1 -1
  585. package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs +156 -3
  586. package/.output/server/chunks/routes/api/tests/cleanup.delete.mjs.map +1 -1
  587. package/.output/server/chunks/routes/api/traces/check.post.mjs +13 -1
  588. package/.output/server/chunks/routes/api/traces/check.post.mjs.map +1 -1
  589. package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs +12 -0
  590. package/.output/server/chunks/routes/api/users/_id/api-keys/_keyId_.delete.mjs.map +1 -1
  591. package/.output/server/chunks/routes/api/users/_id/index.get.mjs +12 -0
  592. package/.output/server/chunks/routes/api/users/_id/index.get.mjs.map +1 -1
  593. package/.output/server/chunks/routes/api/users/_id/index.post.mjs +13 -1
  594. package/.output/server/chunks/routes/api/users/_id/index.post.mjs.map +1 -1
  595. package/.output/server/chunks/routes/api/users/_id/invite.post.mjs +13 -1
  596. package/.output/server/chunks/routes/api/users/_id/invite.post.mjs.map +1 -1
  597. package/.output/server/chunks/routes/api/users/_id/projects.get.mjs +13 -1
  598. package/.output/server/chunks/routes/api/users/_id/projects.get.mjs.map +1 -1
  599. package/.output/server/chunks/routes/api/users/_id/projects.put.mjs +13 -1
  600. package/.output/server/chunks/routes/api/users/_id/projects.put.mjs.map +1 -1
  601. package/.output/server/chunks/routes/api/users/_id_.delete.mjs +12 -0
  602. package/.output/server/chunks/routes/api/users/_id_.delete.mjs.map +1 -1
  603. package/.output/server/chunks/routes/api/users/_id_.patch.mjs +12 -0
  604. package/.output/server/chunks/routes/api/users/_id_.patch.mjs.map +1 -1
  605. package/.output/server/chunks/routes/api/version.get.mjs +13 -1
  606. package/.output/server/chunks/routes/api/version.get.mjs.map +1 -1
  607. package/.output/server/chunks/routes/mcp.post.mjs +13 -1
  608. package/.output/server/chunks/routes/mcp.post.mjs.map +1 -1
  609. package/.output/server/chunks/routes/renderer.mjs +1 -1
  610. package/.output/server/chunks/tasks/sweep.mjs +12 -0
  611. package/.output/server/chunks/tasks/sweep.mjs.map +1 -1
  612. package/.output/server/chunks/tasks/sweep2.mjs +12 -0
  613. package/.output/server/chunks/tasks/sweep2.mjs.map +1 -1
  614. package/.output/server/database/migrations/0039_remarkable_jean_grey.sql +2 -0
  615. package/.output/server/database/migrations/0040_organic_phalanx.sql +8 -0
  616. package/.output/server/database/migrations/0041_tense_gravity.sql +5 -0
  617. package/.output/server/database/migrations/0042_burly_hemingway.sql +19 -0
  618. package/.output/server/database/migrations/meta/0039_snapshot.json +3403 -0
  619. package/.output/server/database/migrations/meta/0040_snapshot.json +3457 -0
  620. package/.output/server/database/migrations/meta/0041_snapshot.json +3492 -0
  621. package/.output/server/database/migrations/meta/0042_snapshot.json +3618 -0
  622. package/.output/server/database/migrations/meta/_journal.json +28 -0
  623. package/.output/server/database/migrations-pg/0040_lazy_layla_miller.sql +2 -0
  624. package/.output/server/database/migrations-pg/0041_light_screwball.sql +8 -0
  625. package/.output/server/database/migrations-pg/0042_serious_layla_miller.sql +5 -0
  626. package/.output/server/database/migrations-pg/0043_wonderful_mordo.sql +19 -0
  627. package/.output/server/database/migrations-pg/meta/0040_snapshot.json +4060 -0
  628. package/.output/server/database/migrations-pg/meta/0041_snapshot.json +4123 -0
  629. package/.output/server/database/migrations-pg/meta/0042_snapshot.json +4153 -0
  630. package/.output/server/database/migrations-pg/meta/0043_snapshot.json +4308 -0
  631. package/.output/server/database/migrations-pg/meta/_journal.json +28 -0
  632. package/.output/server/index.mjs +13 -1
  633. package/.output/server/index.mjs.map +1 -1
  634. package/.output/server/node_modules/fflate/esm/index.mjs +2710 -0
  635. package/.output/server/node_modules/fflate/package.json +128 -0
  636. package/.output/server/node_modules/highlight.js/es/languages/yaml.js +213 -0
  637. package/.output/server/node_modules/marked/lib/marked.esm.js +72 -0
  638. package/.output/server/node_modules/marked/package.json +103 -0
  639. package/.output/server/package.json +3 -1
  640. package/package.json +2 -2
  641. package/.output/public/_nuxt/9-wVZMur.js +0 -4
  642. package/.output/public/_nuxt/B-5GukRk.js +0 -1
  643. package/.output/public/_nuxt/B1G3GGhQ.js +0 -1
  644. package/.output/public/_nuxt/B1zMFx24.js +0 -1
  645. package/.output/public/_nuxt/B4jvLMfS.js +0 -1
  646. package/.output/public/_nuxt/BBnX5xw4.js +0 -2
  647. package/.output/public/_nuxt/BHpUiv6j.js +0 -3
  648. package/.output/public/_nuxt/BLOUs6AE.js +0 -5
  649. package/.output/public/_nuxt/BT6p4Pgt.js +0 -2
  650. package/.output/public/_nuxt/BUXSUkJ_.js +0 -1
  651. package/.output/public/_nuxt/BVf6Yx9V.js +0 -26
  652. package/.output/public/_nuxt/BbS6Bwby.js +0 -1
  653. package/.output/public/_nuxt/Bd3HqPMF.js +0 -1
  654. package/.output/public/_nuxt/BeKvLsja.js +0 -2
  655. package/.output/public/_nuxt/BeUm5UNV.js +0 -1
  656. package/.output/public/_nuxt/BfV444H3.js +0 -3
  657. package/.output/public/_nuxt/BjKamgHq.js +0 -1
  658. package/.output/public/_nuxt/BoJdjCVl.js +0 -4
  659. package/.output/public/_nuxt/BreO2PiA.js +0 -1
  660. package/.output/public/_nuxt/BvIDC_R-.js +0 -1
  661. package/.output/public/_nuxt/ByuJWADR.js +0 -34
  662. package/.output/public/_nuxt/C1dyLp_j.js +0 -1
  663. package/.output/public/_nuxt/CAUgpKsF.js +0 -2
  664. package/.output/public/_nuxt/CL9-VLTJ.js +0 -1
  665. package/.output/public/_nuxt/CazDIG_m.js +0 -1
  666. package/.output/public/_nuxt/CcXaak_K.js +0 -1
  667. package/.output/public/_nuxt/CdMuck_X.js +0 -1
  668. package/.output/public/_nuxt/CfPSts5n.js +0 -1
  669. package/.output/public/_nuxt/CfROFPse.js +0 -1
  670. package/.output/public/_nuxt/Cnapl7lZ.js +0 -1
  671. package/.output/public/_nuxt/CscWZxCi.js +0 -1
  672. package/.output/public/_nuxt/CuicKV-B.js +0 -34
  673. package/.output/public/_nuxt/Cyiu1VQD.js +0 -1
  674. package/.output/public/_nuxt/D6PUPmRC.js +0 -1
  675. package/.output/public/_nuxt/DCl2yo4g.js +0 -8
  676. package/.output/public/_nuxt/DHXWp5yD.js +0 -1
  677. package/.output/public/_nuxt/DHltYerF.js +0 -114
  678. package/.output/public/_nuxt/DLXydYJb.js +0 -47
  679. package/.output/public/_nuxt/DRPSi76A.js +0 -1
  680. package/.output/public/_nuxt/DS53kyHJ.js +0 -1
  681. package/.output/public/_nuxt/DWhBqv_7.js +0 -1
  682. package/.output/public/_nuxt/Dd0kK5WH.js +0 -1
  683. package/.output/public/_nuxt/Df7kUO0m.js +0 -1
  684. package/.output/public/_nuxt/Dga3Av-m.js +0 -1
  685. package/.output/public/_nuxt/DgwTpwfB.js +0 -1
  686. package/.output/public/_nuxt/DkI145a5.js +0 -1
  687. package/.output/public/_nuxt/DoFBTaDR.js +0 -1
  688. package/.output/public/_nuxt/Dr_dI5hB.js +0 -1
  689. package/.output/public/_nuxt/EPZOxdgq.js +0 -1
  690. package/.output/public/_nuxt/R1nNqTru.js +0 -1
  691. package/.output/public/_nuxt/S5DLdEpg.js +0 -4
  692. package/.output/public/_nuxt/builds/meta/7caf3cb3-d272-4dbd-bb3f-1eeb64fab5d1.json +0 -1
  693. package/.output/public/_nuxt/entry.ChQMshd4.css +0 -1
  694. package/.output/public/_nuxt/gCELhaU9.js +0 -1
  695. package/.output/public/_nuxt/ipDzNHcs.js +0 -5
  696. package/.output/public/_nuxt/kS3boz40.js +0 -1
  697. package/.output/public/_nuxt/qH_j2A3a.js +0 -1
  698. package/.output/public/_nuxt/r3SBLxtE.js +0 -1
  699. package/.output/public/_nuxt/rsiRgrVM.js +0 -1
  700. package/.output/public/_nuxt/swrbBdtB.js +0 -1
  701. package/.output/public/sw.js +0 -1
  702. package/.output/public/workbox-2fbc6a65.js +0 -1
  703. package/.output/server/chunks/build/Alert-Bp1Wz_sq.mjs.map +0 -1
  704. package/.output/server/chunks/build/Breadcrumb-C9ZPTLym.mjs.map +0 -1
  705. package/.output/server/chunks/build/BreadcrumbNav-C3y42Vun.mjs.map +0 -1
  706. package/.output/server/chunks/build/BrowserBadge-DNCp9pF-.mjs.map +0 -1
  707. package/.output/server/chunks/build/ChartCard-Fr557IbV.mjs.map +0 -1
  708. package/.output/server/chunks/build/Checkbox-cVOSIY93.mjs.map +0 -1
  709. package/.output/server/chunks/build/CiEnvCard-DXPOhdSG.mjs +0 -640
  710. package/.output/server/chunks/build/CiEnvCard-DXPOhdSG.mjs.map +0 -1
  711. package/.output/server/chunks/build/CodeBlock-BGwNmJ8J.mjs.map +0 -1
  712. package/.output/server/chunks/build/DashboardNavbar-Bdp-OwTN.mjs.map +0 -1
  713. package/.output/server/chunks/build/DashboardSidebarToggle-Ji6ADuqF.mjs.map +0 -1
  714. package/.output/server/chunks/build/DataLocationCard-D6xSOrme.mjs.map +0 -1
  715. package/.output/server/chunks/build/DiagnosisPanel-DV1xwGu4.mjs.map +0 -1
  716. package/.output/server/chunks/build/EmptyState-DV3oT_xz.mjs.map +0 -1
  717. package/.output/server/chunks/build/EntityLinks-DeOP13Kr.mjs.map +0 -1
  718. package/.output/server/chunks/build/EnvManagedBadge-Qpn58Nmr.mjs.map +0 -1
  719. package/.output/server/chunks/build/FormField-B-GSn_VR.mjs.map +0 -1
  720. package/.output/server/chunks/build/HelpHint-YEMWtKu1.mjs.map +0 -1
  721. package/.output/server/chunks/build/Label-DBvbHd3A.mjs.map +0 -1
  722. package/.output/server/chunks/build/MiniRunBars-C3HG-EYm.mjs.map +0 -1
  723. package/.output/server/chunks/build/Modal-CfA78Hm1.mjs.map +0 -1
  724. package/.output/server/chunks/build/PageStateCard-Bwee6JTk.mjs.map +0 -1
  725. package/.output/server/chunks/build/ProjectTestCasesTable-9Ia825h8.mjs.map +0 -1
  726. package/.output/server/chunks/build/RovingFocusItem-CxhHdNGo.mjs.map +0 -1
  727. package/.output/server/chunks/build/RunReports-BpJqLHY9.mjs.map +0 -1
  728. package/.output/server/chunks/build/RunStatusBadge-BhmJ_RKM.mjs.map +0 -1
  729. package/.output/server/chunks/build/SectionCard-COd9TuDq.mjs.map +0 -1
  730. package/.output/server/chunks/build/Select-ppPz926C.mjs.map +0 -1
  731. package/.output/server/chunks/build/Separator-CxZdx8kw.mjs.map +0 -1
  732. package/.output/server/chunks/build/SettingsField-DDD4oqys.mjs.map +0 -1
  733. package/.output/server/chunks/build/Slideover-B95Rj237.mjs.map +0 -1
  734. package/.output/server/chunks/build/Switch-xQQ3_ME1.mjs.map +0 -1
  735. package/.output/server/chunks/build/Table-CPhhVzDv.mjs.map +0 -1
  736. package/.output/server/chunks/build/Tabs-BV9XqjoO.mjs.map +0 -1
  737. package/.output/server/chunks/build/TagBadge-BDcvvGxw.mjs +0 -47
  738. package/.output/server/chunks/build/TagBadge-BDcvvGxw.mjs.map +0 -1
  739. package/.output/server/chunks/build/TestCaseHistoryChart-DMb-xSJa.mjs.map +0 -1
  740. package/.output/server/chunks/build/TestStatusBar-CEzt76wk.mjs.map +0 -1
  741. package/.output/server/chunks/build/Textarea-DrrqQUVG.mjs.map +0 -1
  742. package/.output/server/chunks/build/Tooltip-7vwuDPrZ.mjs.map +0 -1
  743. package/.output/server/chunks/build/VisuallyHiddenInput-C9eJVpPW.mjs.map +0 -1
  744. package/.output/server/chunks/build/_id_-B2yirIuA.mjs.map +0 -1
  745. package/.output/server/chunks/build/_id_-CE0Gso6i.mjs.map +0 -1
  746. package/.output/server/chunks/build/_id_-bWcP2xFl.mjs.map +0 -1
  747. package/.output/server/chunks/build/about-CoJjvUwM.mjs.map +0 -1
  748. package/.output/server/chunks/build/account-Cn-eZqXM.mjs.map +0 -1
  749. package/.output/server/chunks/build/analytics-B276WPeU.mjs.map +0 -1
  750. package/.output/server/chunks/build/db.client-aHcD0wyX.mjs.map +0 -1
  751. package/.output/server/chunks/build/default-BSzdkM_L.mjs.map +0 -1
  752. package/.output/server/chunks/build/edit-C9Z7oZeu.mjs.map +0 -1
  753. package/.output/server/chunks/build/fetch-8kznMtBM.mjs.map +0 -1
  754. package/.output/server/chunks/build/forgot-password-BqPF4Rxs.mjs.map +0 -1
  755. package/.output/server/chunks/build/help-content-DmFnuhNu.mjs.map +0 -1
  756. package/.output/server/chunks/build/index-BR9hw6qk.mjs.map +0 -1
  757. package/.output/server/chunks/build/index-Ba-Fifra.mjs.map +0 -1
  758. package/.output/server/chunks/build/index-CULN3-en.mjs.map +0 -1
  759. package/.output/server/chunks/build/index-DVUtBexc.mjs.map +0 -1
  760. package/.output/server/chunks/build/isValueEqualOrExist-DBZjbD_3.mjs.map +0 -1
  761. package/.output/server/chunks/build/login-D2XZDuek.mjs.map +0 -1
  762. package/.output/server/chunks/build/mcp-_o6cMS6m.mjs.map +0 -1
  763. package/.output/server/chunks/build/notifications-Dzm9c0u_.mjs.map +0 -1
  764. package/.output/server/chunks/build/reset-password-gpFzIEDj.mjs.map +0 -1
  765. package/.output/server/chunks/build/settings-metadata-B0wo5R-W.mjs.map +0 -1
  766. package/.output/server/chunks/build/settings-pNyPBXVa.mjs.map +0 -1
  767. package/.output/server/chunks/build/storage-XelzuyPy.mjs.map +0 -1
  768. package/.output/server/chunks/build/tags-DrCQ7QSw.mjs.map +0 -1
  769. package/.output/server/chunks/build/test-cases-pmOxi-AN.mjs.map +0 -1
  770. package/.output/server/chunks/build/timeout-hygiene-CNs71Iah.mjs.map +0 -1
  771. package/.output/server/chunks/build/useAiStatus-ZO987RY7.mjs.map +0 -1
  772. package/.output/server/chunks/build/useCopy-BQQKcwlq.mjs.map +0 -1
  773. package/.output/server/chunks/build/useFormControl-BLpq1s4O.mjs.map +0 -1
  774. package/.output/server/chunks/build/useOpenInIde-kMZ7Jw5c.mjs.map +0 -1
  775. package/.output/server/chunks/build/useSettingsNav-NjI2seBy.mjs.map +0 -1
  776. package/.output/server/chunks/build/useTauri-lRT8zkLv.mjs +0 -7
  777. package/.output/server/chunks/build/useTauri-lRT8zkLv.mjs.map +0 -1
  778. package/.output/server/chunks/build/useTreeViewCookie-DVYpxW-p.mjs.map +0 -1
  779. package/.output/server/chunks/build/users-NmAUZs3i.mjs.map +0 -1
  780. package/.output/server/chunks/build/virtualizer-ZaqK4guJ.mjs +0 -940
  781. package/.output/server/chunks/build/virtualizer-ZaqK4guJ.mjs.map +0 -1
  782. package/.output/server/chunks/build/wasted-time-CguAF9zc.mjs.map +0 -1
  783. /package/.output/public/_nuxt/{PageStateCard.BrM5HWjY.css → useCopyRich.BrM5HWjY.css} +0 -0
@@ -1 +0,0 @@
1
- import{d as i,o as t,c as o,F as c,y as l,f as p,g as _,m,t as f,k as a,q as u,_ as h}from"./DHltYerF.js";import{k as d,x as g,w as k}from"./BeKvLsja.js";const x={key:0,class:"flex flex-wrap gap-1"},y=i({__name:"RunReports",props:{reports:{}},setup(n){return(s,B)=>{const r=h;return n.reports?.length?(t(),o("div",x,[(t(!0),o(c,null,l(n.reports,e=>(t(),p(r,{key:`${e.type}-${e.path}`,href:`/api/files/${a(k)(e.path)}`,icon:("reportIcon"in s?s.reportIcon:a(g))(e.type),title:e.size?a(d)(e.size):e.label,target:"_blank",size:"xs",variant:"outline"},{default:_(()=>[m(f(e.label),1)]),_:2},1032,["href","icon","title"]))),128))])):u("",!0)}}}),$=Object.assign(y,{__name:"RunReports"});export{$ as _};
@@ -1 +0,0 @@
1
- import{K as o}from"./DHltYerF.js";function n(){const t=o();return String(t.public.desktop)==="true"}export{n as u};
@@ -1 +0,0 @@
1
- import{c as j,d as E,D as N,a as R,e as b,f as _,g as T,b as A}from"./B-5GukRk.js";import{a0 as I,a1 as L,a2 as z,a3 as F,a4 as G,a5 as U,bs as K,o as a,f as l,g as r,k as e,p as c,T as d,q as i,j as h,U as k,bv as Z,bG as J,bH as M,m,t as v,c as q,_ as Q,i as W,Z as X,$ as Y,h as x,b4 as B,bI as ee,a6 as te}from"./DHltYerF.js";const se={slots:{overlay:"fixed inset-0 bg-elevated/75",content:"fixed bg-default divide-y divide-default sm:ring ring-default sm:shadow-lg flex flex-col focus:outline-none",header:"flex items-center gap-1.5 p-4 sm:px-6 min-h-(--ui-header-height)",wrapper:"",body:"flex-1 overflow-y-auto p-4 sm:p-6",footer:"flex items-center gap-1.5 p-4 sm:px-6",title:"text-highlighted font-semibold",description:"mt-1 text-muted text-sm",close:"absolute top-4 end-4"},variants:{side:{top:{content:""},right:{content:"max-w-md"},bottom:{content:""},left:{content:"max-w-md"}},inset:{true:{content:"rounded-lg"}},transition:{true:{overlay:"data-[state=open]:animate-[fade-in_200ms_ease-out] data-[state=closed]:animate-[fade-out_200ms_ease-in]"}}},compoundVariants:[{side:"top",inset:!0,class:{content:"max-h-[calc(100%-2rem)] inset-x-4 top-4"}},{side:"top",inset:!1,class:{content:"max-h-full inset-x-0 top-0"}},{side:"right",inset:!0,class:{content:"w-[calc(100%-2rem)] inset-y-4 right-4"}},{side:"right",inset:!1,class:{content:"w-full inset-y-0 right-0"}},{side:"bottom",inset:!0,class:{content:"max-h-[calc(100%-2rem)] inset-x-4 bottom-4"}},{side:"bottom",inset:!1,class:{content:"max-h-full inset-x-0 bottom-0"}},{side:"left",inset:!0,class:{content:"w-[calc(100%-2rem)] inset-y-4 left-4"}},{side:"left",inset:!1,class:{content:"w-full inset-y-0 left-0"}},{transition:!0,side:"top",class:{content:"data-[state=open]:animate-[slide-in-from-top_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-top_200ms_ease-in-out]"}},{transition:!0,side:"right",class:{content:"data-[state=open]:animate-[slide-in-from-right_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-right_200ms_ease-in-out]"}},{transition:!0,side:"bottom",class:{content:"data-[state=open]:animate-[slide-in-from-bottom_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-bottom_200ms_ease-in-out]"}},{transition:!0,side:"left",class:{content:"data-[state=open]:animate-[slide-in-from-left_200ms_ease-in-out] data-[state=closed]:animate-[slide-out-to-left_200ms_ease-in-out]"}}]},le={__name:"USlideover",props:{title:{type:String,required:!1},description:{type:String,required:!1},content:{type:Object,required:!1},overlay:{type:Boolean,required:!1,default:!0},transition:{type:Boolean,required:!1,default:!0},side:{type:null,required:!1,default:"right"},inset:{type:Boolean,required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},close:{type:[Boolean,Object],required:!1,default:!0},closeIcon:{type:null,required:!1},dismissible:{type:Boolean,required:!1,default:!0},class:{type:null,required:!1},ui:{type:Object,required:!1},open:{type:Boolean,required:!1},defaultOpen:{type:Boolean,required:!1},modal:{type:Boolean,required:!1,default:!0},unmountOnHide:{type:Boolean,required:!1}},emits:["leave","after:leave","enter","after:enter","close:prevent","update:open"],setup(D,{emit:O}){const P=D,p=O,s=I(),t=L("slideover",P),{t:C}=z(),$=F(),S=G(U(t,"open","defaultOpen","modal","unmountOnHide"),p),w=K(B(()=>t.portal)),H=B(()=>t.content),V=x(()=>t.dismissible?{pointerDownOutside:ee}:["interactOutside","escapeKeyDown"].reduce((n,y)=>(n[y]=f=>{f.preventDefault(),p("close:prevent")},n),{})),u=x(()=>te({extend:se,...$.ui?.slideover||{}})({transition:t.transition,side:t.side,inset:t.inset}));return(o,n)=>(a(),l(e(A),X(Y(e(S))),{default:r(({open:y,close:f})=>[s.default?(a(),l(e(j),{key:0,"as-child":"",class:c(e(t).class)},{default:r(()=>[d(o.$slots,"default",{open:y})]),_:2},1032,["class"])):i("",!0),h(e(E),k(e(w),{"force-mount":e(w).disabled&&e(t).unmountOnHide===!1||void 0}),{default:r(()=>[h(e(Z),null,{default:r(()=>[e(t).overlay?(a(),l(e(N),{key:0,"data-slot":"overlay",class:c(u.value.overlay({class:e(t).ui?.overlay}))},null,8,["class"])):i("",!0),h(e(R),k({"data-side":e(t).side,"data-slot":"content",class:u.value.content({class:[!s.default&&e(t).class,e(t).ui?.content]})},H.value,{onEnter:n[0]||(n[0]=g=>p("enter")),onAfterEnter:n[1]||(n[1]=g=>p("after:enter")),onLeave:n[2]||(n[2]=g=>p("leave")),onAfterLeave:n[3]||(n[3]=g=>p("after:leave"))},J(V.value)),{default:r(()=>[!e(t).title&&!s.title||!e(t).description&&!s.description||s.content?(a(),l(e(M),{key:0},{default:r(()=>[!e(t).title&&!s.title?(a(),l(e(b),{key:0})):s.content?(a(),l(e(b),{key:1},{default:r(()=>[d(o.$slots,"title",{},()=>[m(v(e(t).title),1)])]),_:3})):i("",!0),!e(t).description&&!s.description?(a(),l(e(_),{key:2})):s.content?(a(),l(e(_),{key:3},{default:r(()=>[d(o.$slots,"description",{},()=>[m(v(e(t).description),1)])]),_:3})):i("",!0)]),_:3})):i("",!0),d(o.$slots,"content",{close:f},()=>[s.header||e(t).title||s.title||e(t).description||s.description||e(t).close||s.close?(a(),q("div",{key:0,"data-slot":"header",class:c(u.value.header({class:e(t).ui?.header}))},[d(o.$slots,"header",{close:f},()=>[e(t).title||s.title||e(t).description||s.description?(a(),q("div",{key:0,"data-slot":"wrapper",class:c(u.value.wrapper({class:e(t).ui?.wrapper}))},[e(t).title||s.title?(a(),l(e(b),{key:0,"data-slot":"title",class:c(u.value.title({class:e(t).ui?.title}))},{default:r(()=>[d(o.$slots,"title",{},()=>[m(v(e(t).title),1)])]),_:3},8,["class"])):i("",!0),e(t).description||s.description?(a(),l(e(_),{key:1,"data-slot":"description",class:c(u.value.description({class:e(t).ui?.description}))},{default:r(()=>[d(o.$slots,"description",{},()=>[m(v(e(t).description),1)])]),_:3},8,["class"])):i("",!0)],2)):i("",!0),d(o.$slots,"actions"),e(t).close||s.close?(a(),l(e(T),{key:1,"as-child":""},{default:r(()=>[d(o.$slots,"close",{ui:u.value},()=>[e(t).close?(a(),l(Q,k({key:0,icon:e(t).closeIcon||e($).ui.icons.close,color:"neutral",variant:"ghost","aria-label":e(C)("slideover.close")},typeof e(t).close=="object"?e(t).close:{},{"data-slot":"close",class:u.value.close({class:e(t).ui?.close})}),null,16,["icon","aria-label","class"])):i("",!0)])]),_:2},1024)):i("",!0)])],2)):i("",!0),W("div",{"data-slot":"body",class:c(u.value.body({class:e(t).ui?.body}))},[d(o.$slots,"body",{close:f})],2),s.footer?(a(),q("div",{key:1,"data-slot":"footer",class:c(u.value.footer({class:e(t).ui?.footer}))},[d(o.$slots,"footer",{close:f})],2)):i("",!0)])]),_:2},1040,["data-side","class"])]),_:2},1024)]),_:2},1040,["force-mount"])]),_:3},16))}};export{le as _};
@@ -1,34 +0,0 @@
1
- import{_ as Ot,a as At}from"./B4jvLMfS.js";import{_ as Lt,a as zt}from"./CdMuck_X.js";import{_ as Bt}from"./B1zMFx24.js";import{d as z,am as Ut,C as Ft,G as qt,ab as Wt,B as vt,o as s,c as k,h as T,r as ft,j as $,l as at,k as t,f as v,g as f,i as r,v as it,p as N,t as g,q as P,m as j,_ as F,w as B,F as V,y as O,ae as Mt,x as Q,O as ot,s as wt,e as Gt}from"./DHltYerF.js";import{_ as Ht}from"./EPZOxdgq.js";import{_ as Yt}from"./xqiPI_FQ.js";import{u as Xt}from"./BbS6Bwby.js";import{u as _t}from"./DXbPFI1d.js";import{_ as Jt}from"./BjCHB89N.js";import{_ as Qt}from"./B2oUeBbA.js";import{e as q,f as lt,h as Zt,c as Kt}from"./BeKvLsja.js";import{_ as W}from"./BJtlcTrb.js";import{_ as G}from"./qpI-_f9Q.js";import{_ as H}from"./C1dyLp_j.js";import{_ as K}from"./CN1mJlvD.js";import{_ as te}from"./Cyiu1VQD.js";import{_ as Rt}from"./Dga3Av-m.js";import{_ as ee}from"./DS53kyHJ.js";import{_ as ct}from"./DWhBqv_7.js";import{X as se,b as Et,c as dt,d as ae,i as ne,e as re,f as oe,g as et,m as mt,h as le,j as kt,k as ie,l as $t,s as st,n as St,o as ce,p as de,q as ue,r as me,t as pe,P as _e,v as ye,_ as bt,u as Dt,a as xt,C as yt,w as ge,O as Z}from"./4TxgDGVa.js";import{_ as ut}from"./hgHc4teu.js";import{N as jt}from"./kjYMoWWx.js";import{_ as he,a as fe}from"./CUvGJXY3.js";import"./qH_j2A3a.js";import"./Bd3HqPMF.js";import"./CcXaak_K.js";import"./BFP6M-20.js";import"./CPLJeOCb.js";import"./DkI145a5.js";import"./gnCL8GjZ.js";import"./e7zD3uJ0.js";import"./DHXWp5yD.js";import"./r3SBLxtE.js";import"./By4YL7mx.js";import"./Dwws9U0D.js";import"./D7W_4Sqc.js";function be({x:M,y:e,w:l,h:p,tl:a=!1,tr:R=!1,bl:u=!1,br:D=!1,r:b=0}){let m;m=`M${M+b},${e}h${l-2*b}`;let n=R?b:0,i=R?0:b;return m+=`a${n},${n} 0 0 1 ${n},${n}`,m+=`h${i}v${i}`,m+=`v${p-2*b}`,n=D?b:0,i=D?0:b,m+=`a${n},${n} 0 0 1 ${-n},${n}`,m+=`v${i}h${-i}`,m+=`h${2*b-l}`,n=u?b:0,i=u?0:b,m+=`a${n},${n} 0 0 1 ${-n},${-n}`,m+=`h${-i}v${-i}`,m+=`v${2*b-p}`,n=a?b:0,i=a?0:b,m+=`a${n},${n} 0 0 1 ${n},${-n}`,m+=`v${-i}h${i}`,m+="z",m}const xe=Object.assign(Object.assign({},se),{color:void 0,barMaxWidth:void 0,barWidth:void 0,dataStep:void 0,barPadding:0,roundedCorners:2,cursor:null,barMinHeight1Px:!1,barMinHeightZeroValue:null,orientation:Et.Vertical}),Tt=dt`
2
- label: stacked-bar-component;
3
- `,ve=ne`
4
- :root {
5
- --vis-stacked-bar-cursor: default;
6
- --vis-stacked-bar-fill-color: var(--vis-color-main);
7
- --vis-stacked-bar-stroke-color: none;
8
- --vis-stacked-bar-stroke-width: 0px;
9
- --vis-stacked-bar-hover-stroke-width: none;
10
- --vis-stacked-bar-hover-stroke-color: none;
11
-
12
- /* Dark Theme */
13
- --vis-dark-stacked-bar-stroke-color: none;
14
- }
15
-
16
- ${ae} ${`.${Tt}`} {
17
- --vis-stacked-bar-stroke-color: var(--vis-dark-stacked-bar-stroke-color);
18
- }
19
- `,rt=dt`
20
- label: bar;
21
- fill: var(--vis-stacked-bar-fill-color);
22
- stroke: var(--vis-stacked-bar-stroke-color);
23
- stroke-width: var(--vis-stacked-bar-stroke-width);
24
- cursor: var(--vis-stacked-bar-cursor);
25
-
26
- &:hover {
27
- stroke-width: var(--vis-stacked-bar-hover-stroke-width);
28
- stroke: var(--vis-stacked-bar-hover-stroke-color);
29
- }
30
- `,gt=dt`
31
- label: barGroup;
32
- `,Vt=dt`
33
- label: barGroupExit;
34
- `,ke=Object.freeze(Object.defineProperty({__proto__:null,bar:rt,barGroup:gt,barGroupExit:Vt,globalStyles:ve,root:Tt},Symbol.toStringTag,{value:"Module"}));class It extends re{constructor(e){super(),this._defaultConfig=xe,this.config=this._defaultConfig,this.getAccessors=()=>oe(this.config.y)?this.config.y:[this.config.y],this.stacked=!0,this.events={},this._barData=[],e&&this.setConfig(e)}get bleed(){if(this._barData=this._getVisibleData(),this._barData.length===0)return{top:0,bottom:0,left:0,right:0};const e=!this.isVertical()&&this.dataScale.range()[0]>this.dataScale.range()[1],l=this.dataScale.domain(),p=this._getBarWidth()/2,a=this._barData.map((C,y)=>et(C,this.config.x,y)),R=mt(a),u=le(a),D=this.dataScale(R),b=this.dataScale(u),m=this.dataScale.invert(D+(e?p:-p)),n=this.dataScale.invert(b+(e?-p:p)),i=m<=l[0]?this.dataScale(l[0])-this.dataScale(m):0,E=n>l[1]?this.dataScale(n)-this.dataScale(l[1]):0;return{top:this.isVertical()?0:e?-E:i,bottom:this.isVertical()?0:e?-i:E,left:this.isVertical()?i:0,right:this.isVertical()?E:0}}get dataScale(){return this.isVertical()?this.xScale:this.yScale}get valueScale(){return this.isVertical()?this.yScale:this.xScale}isVertical(){return this.config.orientation===Et.Vertical}_render(e){const{config:l}=this,p=kt(e)?e:l.duration,a=this.getAccessors(),R=ie(this._barData,0,a,this._prevNegative);this._prevNegative=R.map(y=>!!y.isMostlyNegative);const u=this.g.selectAll(`.${gt}`).data(this._barData,(y,h)=>{var c;return`${(c=$t(y,l.id,h))!==null&&c!==void 0?c:h}`}),D=(y,h)=>{const c=this.dataScale(et(y,l.x,h)),S=this.isVertical()?c:0,o=this.isVertical()?0:c;return`translate(${S},${o})`},m=u.enter().append("g").attr("class",gt).attr("transform",D).style("opacity",1).merge(u);st(m,p).attr("transform",D).style("opacity",1);const n=u.exit().attr("class",Vt);st(n,p).style("opacity",0).remove().on("interrupt",function(){this.remove()}),st(n.selectAll(`.${rt}`),p).attr("transform",this.isVertical()?`translate(0,${this._height/3})`:`translate(${this._width/6},0)`);const i=m.selectAll(`.${rt}`).data((y,h)=>{const c=R.map((S,o)=>({datum:y,index:h,stacked:S[h],stackIndex:o})).filter(S=>S.stacked[0]!==S.stacked[1]);return c.forEach((S,o)=>{S.isEnding=o===c.length-1||o<=c.length-1&&c[o+1].stacked[0]!==S.stacked[1]}),c},y=>y.stackIndex),C=i.enter().append("path").attr("class",rt).attr("d",y=>this._getBarPath(y,!0)).style("fill",y=>St(y.datum,l.color,y.stackIndex)).merge(i);st(C,p).attr("d",y=>this._getBarPath(y)).style("fill",y=>St(y.datum,l.color,y.stackIndex)).style("cursor",y=>$t(y.datum,l.cursor,y.stackIndex)),st(i.exit(),p).style("opacity",0).remove().on("interrupt",function(){this.remove()})}_getBarWidth(){const{config:e,datamodel:{data:l}}=this;if(ce(l))return 0;if(e.barWidth)return mt([e.barWidth,e.barMaxWidth]);const p=this.dataScale.bandwidth,a=this.dataScale.domain?this.dataScale.domain():[];let u=1+(p?a.length:a[1]-a[0])/e.dataStep||!p&&l.filter((m,n)=>{const i=et(m,e.x,n);return i>=a[0]&&i<=a[1]}).length||l.length;!p&&u>=2&&(u+=1);const b=(u<2?1:1-e.barPadding)*(this.isVertical()?this._width:this._height)/u;return mt([b,e.barMaxWidth])}_getVisibleData(){const{config:e,datamodel:{data:l}}=this,p=this._getBarWidth(),a=l.length<2?0:p/2,R=this.dataScale,u=Math.abs(R.invert(a)-R.invert(0));return l?.filter((b,m)=>{const n=et(b,e.x,m),i=R.domain(),E=+i[0],C=+i[1];return n>=E-u&&n<=C+u})}_getBarPath(e,l=!1){const{config:p}=this,a=this.getAccessors(),R=this._getBarWidth(),u=e.stacked[1]<0,D=e.isEnding,b=et(e.datum,a[e.stackIndex],e.index),m=l?0:Math.abs(this.valueScale(e.stacked[0])-this.valueScale(e.stacked[1])),n=!l&&p.barMinHeight1Px&&m<1&&isFinite(b)&&b!==p.barMinHeightZeroValue?1:m,i=l?this.valueScale(0):this.valueScale(u?e.stacked[0]:e.stacked[1])-(m<1&&p.barMinHeight1Px?1:0),E=-R/2,C=R,y=p.roundedCorners?kt(p.roundedCorners)?+p.roundedCorners:C/2:0,h=me(y,0,Math.min(m,C)/2),c=this.yScale.range()[0]>this.yScale.range()[1];return be({x:this.isVertical()?E:i-n,y:this.isVertical()?i+(c?0:-n):E,w:this.isVertical()?C:n,h:this.isVertical()?n:C,tl:D&&(this.isVertical()?!u&&c||u&&!c:u),tr:D&&(this.isVertical()?!u&&c||u&&!c:!u),br:D&&(this.isVertical()?u&&c||!u&&!c:!u),bl:D&&(this.isVertical()?u&&c||!u&&!c:u),r:h})}_mapEventDatum(e){return{datum:Object.assign(Object.assign({},e),e.datum),index:e.index}}getValueScaleExtent(e){const{datamodel:l}=this,p=this.getAccessors(),a=e?this._getVisibleData():l.data;return de(a,...p)}getDataScaleExtent(){const{config:e,datamodel:l}=this;return ue(l.data,e.x)}getYDataExtent(e){return this.isVertical()?this.getValueScaleExtent(e):this.getDataScaleExtent()}getXDataExtent(){return this.isVertical()?this.getDataScaleExtent():this.getValueScaleExtent(!1)}}It.selectors=ke;const $e={"data-vis-component":""},Se=z({__name:"index",props:{color:{type:[Function,String,Array,null]},barWidth:{},barMaxWidth:{},dataStep:{},barPadding:{},roundedCorners:{type:[Number,Boolean]},cursor:{type:[Function,String,null]},barMinHeight1Px:{type:Boolean},barMinHeightZeroValue:{},orientation:{},x:{type:[Function,Number,null]},y:{type:[Function,Number,null,Array]},id:{type:Function},xScale:{type:[Object,Function]},yScale:{type:[Object,Function]},excludeFromDomainCalculation:{type:Boolean},duration:{},events:{},attributes:{},data:{}},setup(M,{expose:e}){const l=Ut(pe),p=M,a=T(()=>l.data.value??p.data),R=_e(p),u=ft();return Ft(()=>{qt(()=>{u.value=new It(R.value),u.value?.setData(a.value),l.update(u.value)})}),Wt(()=>{u.value?.destroy(),l.destroy()}),vt(R,(D,b)=>{ye(D,b)||(u.value?.setConfig(R.value),u.value?.render())}),vt(a,()=>{u.value?.setData(a.value)}),e({component:u}),(D,b)=>(s(),k("div",$e))}}),Ce=30,ht=3650;function Me(M){const e={days:String(M.days)};return M.projectIds&&M.projectIds.length>0&&(e.projects=M.projectIds.join(",")),M.environment&&(e.environment=M.environment),M.fullRunsOnly||(e.fullRunsOnly="false"),e}const J={days:Ce,projectIds:[],environment:null,fullRunsOnly:!0};function we(){const M=Xt("piwi-analytics-scope",{default:()=>({...J}),encode:p=>JSON.stringify(p),decode:p=>{try{return p?{...J,...JSON.parse(p)}:{...J}}catch{return{...J}}}}),e=T(()=>({days:M.value.days,projectIds:M.value.projectIds.length>0?M.value.projectIds:void 0,environment:M.value.environment,fullRunsOnly:M.value.fullRunsOnly})),l=T(()=>Me(e.value));return{state:M,scope:e,scopeQuery:l}}function Y(M,e){return _t(`/api/analytics/${M}`,{query:T(e),lazy:!0,server:!1},"$EEH4o0rJ7t")}const Re={class:"flex items-center gap-3 flex-wrap"},Ee={class:"flex items-center gap-1.5"},De={key:0,class:"text-gray-500"},je={key:1,class:"truncate"},Te={key:2},Ve={class:"flex items-center gap-1.5 cursor-pointer select-none text-sm text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-100 transition-colors"},pt="All environments",Ie=z({__name:"AnalyticsScopeBar",props:{modelValue:{},availableProjects:{},availableEnvironments:{}},emits:["update:modelValue"],setup(M,{emit:e}){const l=M,p=e,a=[{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:ht}],R=T({get:()=>l.modelValue.days,set:y=>p("update:modelValue",{...l.modelValue,days:y})}),u=T(()=>l.availableProjects.map(y=>({label:y.label||y.name,value:y.id}))),D=T({get:()=>l.modelValue.projectIds,set:y=>p("update:modelValue",{...l.modelValue,projectIds:y})});function b(y){return u.value.find(h=>h.value===y)?.label??`#${y}`}const m=T({get:()=>l.modelValue.environment??pt,set:y=>p("update:modelValue",{...l.modelValue,environment:y===pt?null:y})}),n=T(()=>[pt,...l.availableEnvironments]),i=T({get:()=>l.modelValue.fullRunsOnly,set:y=>p("update:modelValue",{...l.modelValue,fullRunsOnly:y})}),E=T(()=>l.modelValue.days===J.days&&l.modelValue.projectIds.length===0&&l.modelValue.environment===null&&l.modelValue.fullRunsOnly===J.fullRunsOnly);function C(){p("update:modelValue",{...J})}return(y,h)=>{const c=Bt,S=it,o=Ht,d=Yt,_=F;return s(),k("div",Re,[$(c,{modelValue:t(R),"onUpdate:modelValue":h[0]||(h[0]=w=>at(R)?R.value=w:null),items:a,size:"sm",class:"min-w-[140px]",icon:"i-lucide-calendar-range"},null,8,["modelValue"]),t(u).length>0?(s(),v(o,{key:0,modelValue:t(D),"onUpdate:modelValue":h[1]||(h[1]=w=>at(D)?D.value=w:null),items:t(u),"value-key":"value",multiple:"",searchable:"",size:"sm",class:"min-w-[170px]",placeholder:"All projects"},{default:f(({modelValue:w})=>[r("div",Ee,[$(S,{name:"i-lucide-folder",class:N(["size-3.5 shrink-0",w.length?"text-primary":"text-gray-400"])},null,8,["class"]),w.length?w.length===1?(s(),k("span",je,g(b(w[0])),1)):(s(),k("span",Te,g(w.length)+" projects",1)):(s(),k("span",De,"All projects"))])]),_:1},8,["modelValue","items"])):P("",!0),M.availableEnvironments.length>0?(s(),v(c,{key:1,modelValue:t(m),"onUpdate:modelValue":h[2]||(h[2]=w=>at(m)?m.value=w:null),items:t(n),size:"sm",class:"min-w-[160px]",icon:"i-lucide-server"},null,8,["modelValue","items"])):P("",!0),r("label",Ve,[$(d,{modelValue:t(i),"onUpdate:modelValue":h[3]||(h[3]=w=>at(i)?i.value=w:null),size:"sm"},null,8,["modelValue"]),h[4]||(h[4]=j(" Full runs only ",-1))]),t(E)?P("",!0):(s(),v(_,{key:2,variant:"ghost",size:"sm",color:"neutral",icon:"i-lucide-x",onClick:C},{default:f(()=>[...h[5]||(h[5]=[j(" Reset ",-1)])]),_:1}))])}}}),Pe=Object.assign(Ie,{__name:"AnalyticsScopeBar"}),Pt=[{id:"insights",title:"Insights",icon:"i-lucide-lightbulb",size:"half"},{id:"pass-rate-heatmap",title:"Pass rate heatmap",icon:"i-lucide-grid-3x3",size:"half"},{id:"portfolio",title:"Portfolio health",icon:"i-lucide-table-properties",size:"full"},{id:"ci-time-trend",title:"CI time",icon:"i-lucide-timer",size:"half"},{id:"wasted-time",title:"Wasted CI time",icon:"i-lucide-hourglass",size:"half"},{id:"flaky-leaderboard",title:"Flakiest tests",icon:"i-lucide-repeat",size:"half"},{id:"cluster-landscape",title:"Failure clusters",icon:"i-lucide-layers",size:"half"},{id:"regression-velocity",title:"Regression velocity",icon:"i-lucide-git-pull-request-arrow",size:"half"},{id:"browser-matrix",title:"Browser matrix",icon:"i-lucide-monitor-smartphone",size:"half"},{id:"slow-endpoints",title:"Slow endpoints",icon:"i-lucide-gauge",size:"full"}];new Set(Pt.map(M=>M.id));const Ne={key:3,class:"divide-y divide-gray-100 dark:divide-gray-800"},Oe={class:"min-w-0"},Ae={class:"text-sm font-medium"},Le={key:0,class:"text-xs text-gray-500 dark:text-gray-400 mt-0.5"},ze=z({__name:"InsightsFeed",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("insights",()=>p.query)),e=await e,l(),e),b=Q,m={critical:{icon:"i-lucide-octagon-alert",class:"text-red-500",border:"border-l-red-500"},warning:{icon:"i-lucide-triangle-alert",class:"text-amber-500",border:"border-l-amber-400"},info:{icon:"i-lucide-info",class:"text-blue-500",border:"border-l-blue-400"},positive:{icon:"i-lucide-trending-up",class:"text-green-500",border:"border-l-green-500"}};return(n,i)=>{const E=W,C=F,y=G,h=H,c=it,S=K;return s(),v(S,{icon:"i-lucide-lightbulb",title:"Insights",count:t(a)?.length||void 0,help:"analytics.insights"},{default:f(()=>[t(R)?(s(),v(E,{key:0})):t(u)?(s(),v(y,{key:1,text:`Couldn't load insights: ${("errorMessage"in n?n.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(C,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:i[0]||(i[0]=o=>t(D)())},{default:f(()=>[...i[1]||(i[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).length===0?(s(),v(h,{key:2,icon:"i-lucide-check-circle",text:"Nothing needs your attention in this period."})):(s(),k("div",Ne,[(s(!0),k(V,null,O(t(a),o=>(s(),v(Mt(o.to?t(b):"div"),{key:o.id,to:o.to,class:N(["flex items-start gap-3 py-3 pl-3 border-l-2",[m[o.severity].border,o.to?"hover:bg-gray-50 dark:hover:bg-gray-800/60 rounded-r transition-colors":""]])},{default:f(()=>[$(c,{name:m[o.severity].icon,class:N(["size-4 mt-0.5 shrink-0",m[o.severity].class])},null,8,["name","class"]),r("div",Oe,[r("p",Ae,g(o.message),1),o.detail?(s(),k("p",Le,g(o.detail),1)):P("",!0)])]),_:2},1032,["to","class"]))),128))]))]),_:1},8,["count"])}}}),Be=Object.assign(ze,{__name:"InsightsFeed"}),Ue={class:"md:hidden space-y-3"},Fe={class:"flex items-center justify-between gap-2"},qe={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},We={key:0},Ge={class:"hidden md:block"},He={class:"w-full text-sm"},Ye={class:"divide-y divide-gray-100 dark:divide-gray-800"},Xe={class:"py-2.5 pr-4"},Je={class:"flex items-center gap-2 min-w-0"},Qe={class:"py-2.5 pr-4"},Ze={class:"w-36"},Ke={class:"py-2.5 pr-4 text-right"},ts={class:"py-2.5 pr-4 text-right tabular-nums"},es={class:"py-2.5 pr-4 text-right tabular-nums text-gray-500 dark:text-gray-400"},ss={class:"py-2.5 text-right"},as={class:"text-xs text-gray-500 dark:text-gray-400"},ns={key:1,class:"text-xs text-gray-400"},rs=z({__name:"PortfolioScorecard",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("portfolio",()=>p.query)),e=await e,l(),e);function b(n){return n===null?"text-gray-400":n>=90?"text-green-600 dark:text-green-400":n>=50?"text-yellow-600 dark:text-yellow-400":"text-red-600 dark:text-red-400"}function m(n){return n===null||Math.abs(n)<1?null:n>0?{icon:"i-lucide-trending-up",class:"text-green-600 dark:text-green-400"}:{icon:"i-lucide-trending-down",class:"text-red-600 dark:text-red-400"}}return(n,i)=>{const E=W,C=F,y=G,h=H,c=Q,S=te,o=Rt,d=it,_=ee,w=ct,I=K;return s(),v(I,{icon:"i-lucide-table-properties",title:"Portfolio health",count:t(a)?.length||void 0,help:"analytics.portfolio"},{default:f(()=>[t(R)?(s(),v(E,{key:0})):t(u)?(s(),v(y,{key:1,text:`Couldn't load the portfolio: ${("errorMessage"in n?n.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(C,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:i[0]||(i[0]=x=>t(D)())},{default:f(()=>[...i[1]||(i[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).length===0?(s(),v(h,{key:2,text:"No projects with runs in this period."})):(s(),k(V,{key:3},[r("div",Ue,[(s(!0),k(V,null,O(t(a),x=>(s(),k("div",{key:x.projectId,class:"rounded-lg border border-gray-200 dark:border-gray-800 p-3 space-y-2"},[r("div",Fe,[$(c,{to:`/projects/${x.projectId}`,class:"font-medium truncate hover:text-primary"},{default:f(()=>[j(g(x.label||x.name),1)]),_:2},1032,["to"]),r("span",{class:N(["tabular-nums font-semibold shrink-0",b(x.passRate)])},g(x.passRate!==null?`${x.passRate}%`:"—"),3)]),$(S,{runs:x.recentRuns,height:20},null,8,["runs"]),r("div",qe,[r("span",null,g(x.runCount)+" runs · "+g(x.flakyTests)+" flaky · "+g(x.openClusters)+" open clusters",1),x.latestRun?(s(),k("span",We,g(("formatRelativeTime"in n?n.formatRelativeTime:t(lt))(x.latestRun.startTime)),1)):P("",!0)])]))),128))]),r("div",Ge,[$(w,{"min-width":"52rem"},{default:f(()=>[r("table",He,[i[2]||(i[2]=r("thead",null,[r("tr",{class:"text-left text-xs text-gray-500 uppercase tracking-wider border-b border-gray-200 dark:border-gray-800"},[r("th",{class:"py-2 pr-4 font-medium"},"Project"),r("th",{class:"py-2 pr-4 font-medium"},"Trend"),r("th",{class:"py-2 pr-4 font-medium text-right"},"Pass rate"),r("th",{class:"py-2 pr-4 font-medium text-right"},"Runs"),r("th",{class:"py-2 pr-4 font-medium text-right"},"Flaky"),r("th",{class:"py-2 pr-4 font-medium text-right"},"Avg run"),r("th",{class:"py-2 pr-4 font-medium text-right"},"Open clusters"),r("th",{class:"py-2 font-medium text-right"},"Latest run")])],-1)),r("tbody",Ye,[(s(!0),k(V,null,O(t(a),x=>(s(),k("tr",{key:x.projectId},[r("td",Xe,[r("div",Je,[$(c,{to:`/projects/${x.projectId}`,class:"font-medium truncate hover:text-primary"},{default:f(()=>[j(g(x.label||x.name),1)]),_:2},1032,["to"]),(s(!0),k(V,null,O(x.tags.slice(0,2),U=>(s(),v(o,{key:U.id,text:U.text,color:U.color},null,8,["text","color"]))),128))])]),r("td",Qe,[r("div",Ze,[$(S,{runs:x.recentRuns,height:22},null,8,["runs"])])]),r("td",Ke,[r("span",{class:N(["inline-flex items-center gap-1 tabular-nums font-semibold",b(x.passRate)])},[j(g(x.passRate!==null?`${x.passRate}%`:"—")+" ",1),m(x.passRateDelta)?(s(),v(d,{key:0,name:m(x.passRateDelta).icon,class:N(["size-3.5",m(x.passRateDelta).class]),title:`${x.passRateDelta>0?"+":""}${x.passRateDelta} pts vs previous period`},null,8,["name","class","title"])):P("",!0)],2)]),r("td",ts,g(x.runCount),1),r("td",{class:N(["py-2.5 pr-4 text-right tabular-nums",x.flakyTests>0?"text-amber-600 dark:text-amber-400":""])},g(x.flakyTests),3),r("td",es,g(x.avgRunDurationMs?("formatDuration"in n?n.formatDuration:t(Zt))(x.avgRunDurationMs):"—"),1),r("td",{class:N(["py-2.5 pr-4 text-right tabular-nums",x.openClusters>0?"text-red-600 dark:text-red-400":""])},g(x.openClusters),3),r("td",ss,[x.latestRun?(s(),v(c,{key:0,to:`/test-runs/${x.latestRun.id}`,class:"inline-flex items-center gap-2 hover:text-primary"},{default:f(()=>[$(_,{status:x.latestRun.status},null,8,["status"]),r("span",as,g(("formatRelativeTime"in n?n.formatRelativeTime:t(lt))(x.latestRun.startTime)),1)]),_:2},1032,["to"])):(s(),k("span",ns,"No runs"))])]))),128))])])]),_:1})])],64))]),_:1},8,["count"])}}}),os=Object.assign(rs,{__name:"PortfolioScorecard"}),ls={class:"space-y-1"},is={class:"flex gap-px"},cs=["title"],ds={class:"grid gap-2",style:{"grid-template-columns":"8rem 1fr"}},us={class:"relative h-4"},ms=z({__name:"PassRateHeatmap",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("pass-rate-heatmap",()=>p.query)),e=await e,l(),e);function b(c){return c===null?{}:c>=99.5?{backgroundColor:"rgba(34, 197, 94, 0.85)"}:c>=90?{backgroundColor:"rgba(34, 197, 94, 0.5)"}:c>=75?{backgroundColor:"rgba(245, 158, 11, 0.55)"}:c>=50?{backgroundColor:"rgba(249, 115, 22, 0.65)"}:{backgroundColor:"rgba(239, 68, 68, 0.75)"}}function m(c,S,o){const d=a.value?.buckets[S]??"",_=(a.value?.bucketDays??1)>1?` (${a.value.bucketDays} days)`:"";return`${c.label||c.name} · ${d}${_}: ${o!==null?`${o}% passed`:"no runs"}`}const n=[{color:"rgba(34, 197, 94, 0.85)",label:"100%"},{color:"rgba(34, 197, 94, 0.5)",label:"≥ 90%"},{color:"rgba(245, 158, 11, 0.55)",label:"≥ 75%"},{color:"rgba(249, 115, 22, 0.65)",label:"≥ 50%"},{color:"rgba(239, 68, 68, 0.75)",label:"< 50%"}],i=T(()=>{const c=a.value?.bucketDays??1;return c>1?`One cell = ${c} days`:"One cell = one day"}),E=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],C=T(()=>{const c=a.value?.buckets??[];return c.length>1&&c[0].slice(0,4)!==c[c.length-1].slice(0,4)});function y(c){const[S,o,d]=c.split("-"),_=E[Number(o)-1];return C.value?`${_} ${S}`:`${_} ${Number(d)}`}const h=T(()=>{const c=a.value?.buckets??[],S=c.length;if(S===0)return[];const o=Math.min(C.value?4:5,S),d=new Set,_=[];for(let w=0;w<o;w++){const I=o===1?0:Math.round(w*(S-1)/(o-1));if(d.has(I))continue;d.add(I);const x=I===0?0:I===S-1?100:(I+.5)/S*100,U=I===0?"translateX(0)":I===S-1?"translateX(-100%)":"translateX(-50%)";_.push({index:I,label:y(c[I]),left:x,transform:U})}return _});return(c,S)=>{const o=W,d=F,_=G,w=H,I=Q,x=bt,U=ct,X=ut;return s(),v(X,{icon:"i-lucide-grid-3x3",title:"Pass rate heatmap",subtitle:t(i),help:"analytics.heatmap"},{default:f(()=>[t(R)?(s(),v(o,{key:0})):t(u)?(s(),v(_,{key:1,text:`Couldn't load the heatmap: ${("errorMessage"in c?c.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(d,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:S[0]||(S[0]=A=>t(D)())},{default:f(()=>[...S[1]||(S[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).rows.length===0?(s(),v(w,{key:2,text:"No runs in this period."})):(s(),v(U,{key:3,"min-width":"22rem"},{default:f(()=>[r("div",ls,[(s(!0),k(V,null,O(t(a).rows,A=>(s(),k("div",{key:A.projectId,class:"grid items-center gap-2",style:{"grid-template-columns":"8rem 1fr"}},[$(I,{to:`/projects/${A.projectId}`,class:"text-sm truncate hover:text-primary",title:A.label||A.name},{default:f(()=>[j(g(A.label||A.name),1)]),_:2},1032,["to","title"]),r("div",is,[(s(!0),k(V,null,O(A.cells,(nt,tt)=>(s(),k("div",{key:tt,class:"h-6 flex-1 rounded-sm min-w-1 bg-gray-100 dark:bg-gray-800",style:ot(b(nt)),title:m(A,tt,nt)},null,12,cs))),128))])]))),128)),r("div",ds,[S[2]||(S[2]=r("span",null,null,-1)),r("div",us,[(s(!0),k(V,null,O(t(h),A=>(s(),k("span",{key:A.index,class:"absolute top-0 text-xs text-gray-400 whitespace-nowrap",style:ot({left:`${A.left}%`,transform:A.transform})},g(A.label),5))),128))])]),$(x,{items:n,dense:""})])]),_:1}))]),_:1},8,["subtitle"])}}}),ps=Object.assign(ms,{__name:"PassRateHeatmap"}),_s={key:3,class:"w-full relative"},ys={class:"p-2 text-sm text-gray-900 dark:text-gray-100"},gs={class:"font-semibold mb-1"},hs={class:"text-gray-400 text-xs"},Ct="rgb(59, 130, 246)",fs=z({__name:"CiTimeTrendChart",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("ci-time-trend",()=>p.query)),e=await e,l(),e),b=T(()=>a.value?.points.map(o=>({date:new Date(o.date),totalMinutes:o.totalMinutes,runCount:o.runCount}))??[]),m=T(()=>b.value.some(o=>o.runCount>0)),n=o=>o.date,i=o=>o.totalMinutes,E=ft(null),{tooltipData:C,tooltipPos:y,onRenderComplete:h}=Dt(E,b,{x:o=>o.date,series:[{y:o=>o.totalMinutes,color:Ct}]}),c=T(()=>{if(!a.value||a.value.deltaPct===null)return null;const o=a.value.deltaPct;return{label:`${o>0?"+":""}${o}% vs previous period`,class:o>25?"text-red-600 dark:text-red-400":o<-10?"text-green-600 dark:text-green-400":"text-gray-500"}}),S=T(()=>{if(!a.value)return;const o=a.value.totalMinutes;return`${o<60?`${Math.round(o)} min`:`${Math.round(o/60*10)/10} h`} across ${a.value.runCount} runs`});return(o,d)=>{const _=W,w=F,I=G,x=H,U=ut;return s(),v(U,{icon:"i-lucide-timer",title:"CI time",subtitle:t(S),help:"analytics.ci-time"},{actions:f(()=>[t(c)?(s(),k("span",{key:0,class:N(["text-xs font-medium tabular-nums",t(c).class])},g(t(c).label),3)):P("",!0)]),default:f(()=>[t(R)?(s(),v(_,{key:0})):t(u)?(s(),v(I,{key:1,text:`Couldn't load CI time: ${("errorMessage"in o?o.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(w,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:d[0]||(d[0]=X=>t(D)())},{default:f(()=>[...d[1]||(d[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):t(m)?(s(),k("div",_s,[$(t(xt),{ref_key:"xyContainerRef",ref:E,data:t(b),height:220,padding:{top:10,right:10,bottom:0,left:0},"on-render-complete":t(h)},{default:f(()=>[$(t(jt),{x:n,y:i,color:"rgba(59, 130, 246, 0.15)","curve-type":t(yt).MonotoneX},null,8,["curve-type"]),$(t(ge),{x:n,y:i,color:Ct,"curve-type":t(yt).MonotoneX,"line-width":2},null,8,["curve-type"]),$(t(Z),{type:"x","tick-format":X=>new Date(X).toLocaleDateString("en-US",{month:"short",day:"numeric"})},null,8,["tick-format"]),$(t(Z),{type:"y",label:"Minutes","tick-format":X=>X.toString()},null,8,["tick-format"])]),_:1},8,["data","on-render-complete"]),t(C)?(s(),k("div",{key:0,class:"fixed z-50 pointer-events-none bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 max-w-[240px]",style:ot({left:`${t(y).x}px`,top:`${t(y).y}px`})},[r("div",ys,[r("div",gs,g(new Date(t(C).date).toLocaleDateString("en-US",{month:"short",day:"numeric"})),1),r("div",null,g(t(C).totalMinutes)+" minutes",1),r("div",hs,g(t(C).runCount)+" runs",1)])],4)):P("",!0)])):(s(),v(x,{key:2,text:"No runs in this period."}))]),_:1},8,["subtitle"])}}}),bs=Object.assign(fs,{__name:"CiTimeTrendChart"}),xs={key:3,class:"w-full relative"},vs={class:"p-2 text-sm text-gray-900 dark:text-gray-100"},ks={class:"font-semibold mb-1"},$s={key:1,class:"mt-4 flex items-start gap-2 rounded-lg border border-amber-200 bg-amber-50 p-2.5 text-sm dark:border-amber-900/50 dark:bg-amber-950/30"},Ss={class:"text-gray-700 dark:text-gray-300"},Cs={class:"font-semibold"},Ms={key:2,class:"mt-4 space-y-1"},ws={class:"tabular-nums text-gray-500 dark:text-gray-400 shrink-0"},Rs=z({__name:"WastedTimeChart",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("wasted-time",()=>p.query)),e=await e,l(),e),b=T(()=>a.value?.points.map(_=>({date:new Date(_.date),waitMinutes:_.waitMinutes,failedExecMinutes:_.failedExecMinutes}))??[]),m=T(()=>b.value.some(_=>_.waitMinutes>0||_.failedExecMinutes>0)),n=_=>_.date,i=["rgb(245, 158, 11)","rgb(239, 68, 68)"],E=ft(null),{tooltipData:C,tooltipPos:y,onRenderComplete:h}=Dt(E,b,{x:_=>_.date,series:[{y:_=>_.waitMinutes,color:i[0]},{y:_=>_.failedExecMinutes,color:i[1]}]}),c=[{color:i[0],label:"Wait steps"},{color:i[1],label:"Failed attempts"}],S=T(()=>{if(!a.value)return;const _=a.value.totalWaitMinutes+a.value.totalFailedExecMinutes;return`${_<60?`${Math.round(_)} min`:`${Math.round(_/60*10)/10} h`} of CI time produced no signal`}),o=T(()=>a.value?.timeoutReclaimable??null),d=T(()=>{const _=o.value?.estimatedMinutes??0;return _<60?`${Math.round(_)} min`:`${Math.round(_/60*10)/10} h`});return(_,w)=>{const I=bt,x=W,U=F,X=G,A=H,nt=it,tt=Q,Nt=ut;return s(),v(Nt,{icon:"i-lucide-hourglass",title:"Wasted CI time",subtitle:t(S),help:"analytics.wasted-time"},{legend:f(()=>[$(I,{items:c,dense:""})]),default:f(()=>[t(R)?(s(),v(x,{key:0})):t(u)?(s(),v(X,{key:1,text:`Couldn't load wasted time: ${("errorMessage"in _?_.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(U,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:w[0]||(w[0]=L=>t(D)())},{default:f(()=>[...w[1]||(w[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):t(m)?(s(),k("div",xs,[$(t(xt),{ref_key:"xyContainerRef",ref:E,data:t(b),height:220,padding:{top:10,right:10,bottom:0,left:0},"on-render-complete":t(h)},{default:f(()=>[$(t(jt),{x:n,y:[L=>L.waitMinutes,L=>L.failedExecMinutes],color:i,"curve-type":t(yt).MonotoneX},null,8,["y","curve-type"]),$(t(Z),{type:"x","tick-format":L=>new Date(L).toLocaleDateString("en-US",{month:"short",day:"numeric"})},null,8,["tick-format"]),$(t(Z),{type:"y",label:"Minutes","tick-format":L=>L.toString()},null,8,["tick-format"])]),_:1},8,["data","on-render-complete"]),t(C)?(s(),k("div",{key:0,class:"fixed z-50 pointer-events-none bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 max-w-[240px]",style:ot({left:`${t(y).x}px`,top:`${t(y).y}px`})},[r("div",vs,[r("div",ks,g(new Date(t(C).date).toLocaleDateString("en-US",{month:"short",day:"numeric"})),1),r("div",null,[w[2]||(w[2]=r("span",{class:"text-amber-500"},"●",-1)),j(" Wait steps: "+g(t(C).waitMinutes)+" min",1)]),r("div",null,[w[3]||(w[3]=r("span",{class:"text-red-500"},"●",-1)),j(" Failed attempts: "+g(t(C).failedExecMinutes)+" min",1)])])],4)):P("",!0),t(o)?(s(),k("div",$s,[$(nt,{name:"i-lucide-scissors",class:"mt-0.5 shrink-0 text-amber-500"}),r("div",Ss,[w[5]||(w[5]=j(" Up to ",-1)),r("span",Cs,"≈"+g(t(d)),1),j(" of this is avoidable — "+g(t(o).oversizedCount)+" oversized "+g(t(o).oversizedCount===1?"timeout":"timeouts")+" and "+g(t(o).staleSlowCount)+" stale ",1),w[6]||(w[6]=r("code",{class:"text-xs"},"test.slow()",-1)),j(" "+g(t(o).staleSlowCount===1?"mark":"marks")+" inflate the failed-attempt time above. ",1),t(o).topProjectId?(s(),v(tt,{key:0,to:`/projects/${t(o).topProjectId}#performance`,class:"text-primary hover:underline"},{default:f(()=>[...w[4]||(w[4]=[j("Review",-1)])]),_:1},8,["to"])):P("",!0)])])):P("",!0),t(a)&&t(a).byProject.length>0?(s(),k("div",Ms,[(s(!0),k(V,null,O(t(a).byProject.slice(0,5),L=>(s(),k("div",{key:L.projectId,class:"flex items-center justify-between text-sm"},[$(tt,{to:`/projects/${L.projectId}`,class:"truncate hover:text-primary"},{default:f(()=>[j(g(L.label||L.name),1)]),_:2},1032,["to"]),r("span",ws,g(Math.round(L.waitMinutes+L.failedExecMinutes))+" min ",1)]))),128))])):P("",!0)])):(s(),v(A,{key:2,text:"No wasted time recorded in this period."}))]),_:1},8,["subtitle"])}}}),Es=Object.assign(Rs,{__name:"WastedTimeChart"}),Ds={key:3,class:"divide-y divide-gray-100 dark:divide-gray-800"},js={class:"flex-1 min-w-0"},Ts={class:"text-sm font-medium truncate"},Vs={class:"text-xs text-gray-500 dark:text-gray-400 truncate"},Is={class:"text-right shrink-0"},Ps=z({__name:"GlobalFlakyLeaderboard",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("flaky-leaderboard",()=>p.query)),e=await e,l(),e);function b(n){return n>=60?"text-red-600 dark:text-red-400":n>=30?"text-amber-600 dark:text-amber-400":"text-gray-500"}function m(n){return n.retryPassRuns>0?`flaked ${n.retryPassRuns}/${n.totalRuns} runs`:`${n.alternations} status flips in ${n.totalRuns} runs`}return(n,i)=>{const E=W,C=F,y=G,h=H,c=Rt,S=Q,o=K;return s(),v(o,{icon:"i-lucide-repeat",title:"Flakiest tests",count:t(a)?.length||void 0,subtitle:"Across all projects, sorted by impact",help:"analytics.flaky-leaderboard"},{default:f(()=>[t(R)?(s(),v(E,{key:0})):t(u)?(s(),v(y,{key:1,text:`Couldn't load flaky tests: ${("errorMessage"in n?n.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(C,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:i[0]||(i[0]=d=>t(D)())},{default:f(()=>[...i[1]||(i[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).length===0?(s(),v(h,{key:2,text:"No flaky tests detected. Nice and stable."})):(s(),k("div",Ds,[(s(!0),k(V,null,O(t(a),d=>(s(),v(S,{key:`${d.projectId}-${d.testCaseId}`,to:`/test-cases/${d.testCaseId}`,class:"flex items-center gap-3 py-2.5 hover:bg-gray-50 dark:hover:bg-gray-800/60 rounded transition-colors"},{default:f(()=>[r("span",{class:N(["tabular-nums font-bold text-sm w-10 text-right shrink-0",b(d.score)])},g(d.score),3),r("div",js,[r("p",Ts,g(d.title),1),r("p",Vs,[j(g(d.projectLabel||d.projectName)+" · "+g(m(d))+" ",1),d.lastFlakeAt?(s(),k(V,{key:0},[j(" · last "+g(("formatRelativeTime"in n?n.formatRelativeTime:t(lt))(d.lastFlakeAt)),1)],64)):P("",!0)])]),r("div",Is,[r("p",{class:N(["text-sm tabular-nums",d.wastedCiMinutes>=30?"text-red-600 dark:text-red-400":d.wastedCiMinutes>=5?"text-amber-600 dark:text-amber-400":"text-gray-500"])},g(Math.round(d.wastedCiMinutes))+" min ",3),d.rootCause?(s(),v(c,{key:0,text:d.rootCause,color:"neutral"},null,8,["text"])):P("",!0)])]),_:2},1032,["to"]))),128))]))]),_:1},8,["count"])}}}),Ns=Object.assign(Ps,{__name:"GlobalFlakyLeaderboard"}),Os={key:3,class:"space-y-4"},As={key:0,class:"flex flex-wrap gap-1.5"},Ls={class:"divide-y divide-gray-100 dark:divide-gray-800"},zs={class:"flex-1 min-w-0"},Bs={class:"text-sm font-medium truncate"},Us={class:"text-xs text-gray-500 dark:text-gray-400 truncate"},Fs={class:"text-right text-xs shrink-0"},qs={class:"tabular-nums font-medium"},Ws=z({__name:"ClusterLandscape",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("cluster-landscape",()=>p.query)),e=await e,l(),e);function b(m){return m>=30?"text-red-600 dark:text-red-400":m>=14?"text-amber-600 dark:text-amber-400":"text-gray-500"}return(m,n)=>{const i=W,E=F,C=G,y=H,h=fe,c=he,S=wt,o=Q,d=K;return s(),v(d,{icon:"i-lucide-layers",title:"Failure clusters",subtitle:"Open root causes across all projects",help:"analytics.cluster-landscape"},{default:f(()=>[t(R)?(s(),v(i,{key:0})):t(u)?(s(),v(C,{key:1,text:`Couldn't load clusters: ${("errorMessage"in m?m.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(E,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:n[0]||(n[0]=_=>t(D)())},{default:f(()=>[...n[1]||(n[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).totalOpen===0&&t(a).resolvedInPeriod===0?(s(),v(y,{key:2,icon:"i-lucide-check-circle",text:"No open failure clusters."})):(s(),k("div",Os,[$(c,null,{default:f(()=>[$(h,{label:"Open",value:t(a).totalOpen,"value-class":t(a).totalOpen>0?"text-red-600 dark:text-red-400":""},null,8,["value","value-class"]),$(h,{label:"Resolved this period",value:t(a).resolvedInPeriod},null,8,["value"]),$(h,{label:"Oldest open",value:t(a).clusters.length>0?`${Math.max(...t(a).clusters.map(_=>_.ageDays))} d`:"—",size:"lg"},null,8,["value"])]),_:1}),t(a).byErrorType.length>0?(s(),k("div",As,[(s(!0),k(V,null,O(t(a).byErrorType,_=>(s(),v(S,{key:_.errorType,color:("clusterErrorTypeColor"in m?m.clusterErrorTypeColor:t(Kt))(_.errorType),variant:"subtle",size:"sm"},{default:f(()=>[j(g(_.errorType)+" · "+g(_.count),1)]),_:2},1032,["color"]))),128))])):P("",!0),r("div",Ls,[(s(!0),k(V,null,O(t(a).clusters.slice(0,8),_=>(s(),v(o,{key:_.id,to:`/failure-clusters/${_.id}`,class:"flex items-center gap-3 py-2.5 hover:bg-gray-50 dark:hover:bg-gray-800/60 rounded transition-colors"},{default:f(()=>[r("div",zs,[r("p",Bs,g(_.title||_.signature),1),r("p",Us,[j(g(_.projectLabel||_.projectName)+" ",1),_.errorType?(s(),k(V,{key:0},[j(" · "+g(_.errorType),1)],64)):P("",!0)])]),r("div",Fs,[r("p",qs,g(_.occurrences)+"×",1),r("p",{class:N(["tabular-nums",b(_.ageDays)])},g(_.ageDays)+" d open",3)])]),_:2},1032,["to"]))),128))])]))]),_:1})}}}),Gs=Object.assign(Ws,{__name:"ClusterLandscape"}),Hs={key:3,class:"w-full"},Ys=z({__name:"RegressionVelocityChart",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("regression-velocity",()=>p.query)),e=await e,l(),e),b=T(()=>a.value?.points.map(h=>({date:new Date(h.date),regressions:h.regressions,newFlaky:h.newFlaky}))??[]),m=T(()=>b.value.some(h=>h.regressions>0||h.newFlaky>0)),n=h=>h.date,i=["rgb(239, 68, 68)","rgb(147, 51, 234)"],E=[{color:i[0],label:"New regressions"},{color:i[1],label:"Newly flaky"}],C=T(()=>{if(!a.value||a.value.deltaPct===null)return null;const h=a.value.deltaPct;return{label:`${h>0?"+":""}${h}% vs previous period`,class:h>0?"text-red-600 dark:text-red-400":"text-green-600 dark:text-green-400"}}),y=T(()=>{if(a.value)return`${a.value.totalRegressions} new regressions, ${a.value.totalNewFlaky} newly flaky`});return(h,c)=>{const S=bt,o=W,d=F,_=G,w=H,I=ut;return s(),v(I,{icon:"i-lucide-git-pull-request-arrow",title:"Regression velocity",subtitle:t(y),help:"analytics.regression-velocity"},{legend:f(()=>[$(S,{items:E,dense:""})]),actions:f(()=>[t(C)?(s(),k("span",{key:0,class:N(["text-xs font-medium tabular-nums",t(C).class])},g(t(C).label),3)):P("",!0)]),default:f(()=>[t(R)?(s(),v(o,{key:0})):t(u)?(s(),v(_,{key:1,text:`Couldn't load regression velocity: ${("errorMessage"in h?h.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(d,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:c[0]||(c[0]=x=>t(D)())},{default:f(()=>[...c[1]||(c[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):t(m)?(s(),k("div",Hs,[$(t(xt),{data:t(b),height:220,padding:{top:10,right:10,bottom:0,left:0}},{default:f(()=>[$(t(Se),{x:n,y:[x=>x.regressions,x=>x.newFlaky],color:i,"rounded-corners":2},null,8,["y"]),$(t(Z),{type:"x","tick-format":x=>new Date(x).toLocaleDateString("en-US",{month:"short",day:"numeric"})},null,8,["tick-format"]),$(t(Z),{type:"y",label:"Count","tick-format":x=>x.toString()},null,8,["tick-format"])]),_:1},8,["data"])])):(s(),v(w,{key:2,icon:"i-lucide-shield-check",text:"No new regressions in this period."}))]),_:1},8,["subtitle"])}}}),Xs=Object.assign(Ys,{__name:"RegressionVelocityChart"}),Js={class:"w-full text-sm border-separate border-spacing-1"},Qs={class:"pr-2 max-w-[12rem]"},Zs=["title"],Ks=z({__name:"BrowserMatrix",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("browser-matrix",()=>p.query)),e=await e,l(),e);function b(m){return m===null?"bg-gray-100 dark:bg-gray-800 text-gray-400":m>=99.5?"bg-green-500/85 text-white":m>=90?"bg-green-500/45":m>=75?"bg-amber-500/50":m>=50?"bg-orange-500/60":"bg-red-500/70 text-white"}return(m,n)=>{const i=W,E=F,C=G,y=H,h=Q,c=ct,S=K;return s(),v(S,{icon:"i-lucide-monitor-smartphone",title:"Browser matrix",help:"analytics.browser-matrix"},{default:f(()=>[t(R)?(s(),v(i,{key:0})):t(u)?(s(),v(C,{key:1,text:`Couldn't load the browser matrix: ${("errorMessage"in m?m.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(E,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:n[0]||(n[0]=o=>t(D)())},{default:f(()=>[...n[1]||(n[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).rows.length===0?(s(),v(y,{key:2,text:"No runs with browser data in this period."})):(s(),v(c,{key:3,"min-width":"30rem"},{default:f(()=>[r("table",Js,[r("thead",null,[r("tr",null,[n[2]||(n[2]=r("th",{class:"text-left text-xs text-gray-500 uppercase tracking-wider font-medium pr-2"},"Project",-1)),(s(!0),k(V,null,O(t(a).browsers,o=>(s(),k("th",{key:o,class:"text-xs text-gray-500 uppercase tracking-wider font-medium px-1 text-center"},g(o),1))),128))])]),r("tbody",null,[(s(!0),k(V,null,O(t(a).rows,o=>(s(),k("tr",{key:o.projectId},[r("td",Qs,[$(h,{to:`/projects/${o.projectId}`,class:"truncate hover:text-primary block",title:o.label||o.name},{default:f(()=>[j(g(o.label||o.name),1)]),_:2},1032,["to","title"])]),(s(!0),k(V,null,O(o.cells,(d,_)=>(s(),k("td",{key:_,class:N(["text-center tabular-nums rounded-md px-2 py-1.5 font-medium",b(d)]),title:`${o.label||o.name} · ${t(a).browsers[_]}: ${d!==null?`${d}% passed`:"no tests"}`},g(d!==null?`${Math.round(d)}%`:"—"),11,Zs))),128))]))),128))])])]),_:1}))]),_:1})}}}),ta=Object.assign(Ks,{__name:"BrowserMatrix"}),ea={class:"md:hidden space-y-3"},sa={class:"flex items-center gap-2 min-w-0"},aa={class:"text-xs truncate"},na={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},ra={key:0,class:"text-red-600 dark:text-red-400 tabular-nums"},oa={class:"hidden md:block"},la={class:"w-full text-sm"},ia={class:"divide-y divide-gray-100 dark:divide-gray-800"},ca={class:"py-2.5 pr-4"},da={class:"flex items-center gap-2 min-w-0"},ua=["title"],ma={class:"py-2.5 pr-4 text-right tabular-nums"},pa={class:"py-2.5 pr-4 text-right tabular-nums text-gray-500"},_a={class:"py-2.5 pr-4 text-right tabular-nums text-gray-500"},ya={class:"py-2.5 text-right tabular-nums"},ga=z({__name:"SlowEndpointsTable",props:{query:{}},async setup(M){let e,l;const p=M,{data:a,pending:R,error:u,refresh:D}=([e,l]=B(()=>Y("slow-endpoints",()=>p.query)),e=await e,l(),e);function b(n){return n>=1e3?"text-red-600 dark:text-red-400":n>=500?"text-amber-600 dark:text-amber-400":"text-gray-600 dark:text-gray-300"}function m(n){return{GET:"info",POST:"success",PUT:"warning",PATCH:"warning",DELETE:"error"}[n.toUpperCase()]??"neutral"}return(n,i)=>{const E=W,C=F,y=G,h=H,c=wt,S=ct,o=K;return s(),v(o,{icon:"i-lucide-gauge",title:"Slow endpoints",count:t(a)?.endpoints.length||void 0,subtitle:"Backend calls across all projects, slowest first",help:"analytics.slow-endpoints"},{default:f(()=>[t(R)?(s(),v(E,{key:0})):t(u)?(s(),v(y,{key:1,text:`Couldn't load slow endpoints: ${("errorMessage"in n?n.errorMessage:t(q))(t(u))}`},{action:f(()=>[$(C,{size:"sm",color:"neutral",variant:"outline",icon:"i-lucide-refresh-cw",onClick:i[0]||(i[0]=d=>t(D)())},{default:f(()=>[...i[1]||(i[1]=[j(" Retry ",-1)])]),_:1})]),_:1},8,["text"])):!t(a)||t(a).endpoints.length===0?(s(),v(h,{key:2,icon:"i-lucide-network",text:"No network requests captured in this period."})):(s(),k(V,{key:3},[r("div",ea,[(s(!0),k(V,null,O(t(a).endpoints,d=>(s(),k("div",{key:`${d.method} ${d.route}`,class:"rounded-lg border border-gray-200 dark:border-gray-800 p-3 space-y-1.5"},[r("div",sa,[$(c,{color:m(d.method),variant:"subtle",size:"sm"},{default:f(()=>[j(g(d.method),1)]),_:2},1032,["color"]),r("code",aa,g(d.route),1)]),r("div",na,[r("span",null,[i[2]||(i[2]=j("p90 ",-1)),r("span",{class:N(["tabular-nums font-medium",b(d.p90Ms)])},g(d.p90Ms)+" ms",3)]),r("span",null,g(d.requests)+" reqs · "+g(d.projectCount)+" proj",1),d.errorRate>0?(s(),k("span",ra,g(d.errorRate)+"% err",1)):P("",!0)])]))),128))]),r("div",oa,[$(S,{"min-width":"44rem"},{default:f(()=>[r("table",la,[i[3]||(i[3]=r("thead",null,[r("tr",{class:"text-left text-xs text-gray-500 uppercase tracking-wider border-b border-gray-200 dark:border-gray-800"},[r("th",{class:"py-2 pr-4 font-medium"},"Endpoint"),r("th",{class:"py-2 pr-4 font-medium text-right"},"Requests"),r("th",{class:"py-2 pr-4 font-medium text-right"},"p50"),r("th",{class:"py-2 pr-4 font-medium text-right"},"p90"),r("th",{class:"py-2 pr-4 font-medium text-right"},"Max"),r("th",{class:"py-2 pr-4 font-medium text-right"},"Errors"),r("th",{class:"py-2 font-medium text-right"},"Projects")])],-1)),r("tbody",ia,[(s(!0),k(V,null,O(t(a).endpoints,d=>(s(),k("tr",{key:`${d.method} ${d.route}`},[r("td",ca,[r("div",da,[$(c,{color:m(d.method),variant:"subtle",size:"sm"},{default:f(()=>[j(g(d.method),1)]),_:2},1032,["color"]),r("code",{class:"text-xs truncate max-w-[22rem]",title:d.route},g(d.route),9,ua)])]),r("td",ma,g(d.requests),1),r("td",pa,g(d.p50Ms)+" ms",1),r("td",{class:N(["py-2.5 pr-4 text-right tabular-nums font-medium",b(d.p90Ms)])},g(d.p90Ms)+" ms ",3),r("td",_a,g(d.maxMs)+" ms",1),r("td",{class:N(["py-2.5 pr-4 text-right tabular-nums",d.errorRate>0?"text-red-600 dark:text-red-400":"text-gray-400"])},g(d.errorRate)+"% ",3),r("td",ya,g(d.projectCount),1)]))),128))])])]),_:1})])],64))]),_:1},8,["count"])}}}),ha=Object.assign(ga,{__name:"SlowEndpointsTable"}),fa={class:"space-y-6"},ba={class:"grid grid-cols-1 xl:grid-cols-2 gap-6 items-start"},sn=z({__name:"analytics",async setup(M){let e,l;Gt({title:"Analytics - Piwi Dashboard"});const{state:p,scopeQuery:a}=we(),{data:R}=([e,l]=B(()=>_t("/api/projects/menu",{lazy:!0,server:!1,default:()=>[]},"$jZuDAh0IrH")),e=await e,l(),e),{data:u}=([e,l]=B(()=>_t("/api/test-runs/recent",{lazy:!0,server:!1,default:()=>[]},"$lmj5ErCURQ")),e=await e,l(),e),D=T(()=>{const E=new Set;for(const C of u.value??[])C.environment&&E.add(C.environment);return[...E].sort()}),b=T(()=>{const E=u.value??[];return E.length===0?null:Math.max(...E.map(C=>new Date(C.startTime).getTime()))}),m=T(()=>{if(b.value===null||p.value.days>=ht)return!1;const E=Date.now()-p.value.days*24*60*60*1e3;return b.value<E});function n(){p.value={...p.value,days:ht}}const i={insights:Be,portfolio:os,"pass-rate-heatmap":ps,"ci-time-trend":bs,"wasted-time":Es,"flaky-leaderboard":Ns,"cluster-landscape":Gs,"regression-velocity":Xs,"browser-matrix":ta,"slow-endpoints":ha};return(E,C)=>{const y=Ot,h=At,c=zt,S=Pe,o=Jt,d=Qt,_=Lt;return s(),v(_,{id:"analytics"},{header:f(()=>[$(c,null,{leading:f(()=>[$(y),$(h,{items:[{label:"Analytics",icon:"i-lucide-chart-line",to:"/analytics"}]})]),_:1})]),body:f(()=>[r("div",fa,[$(o,null,{default:f(()=>[$(S,{modelValue:t(p),"onUpdate:modelValue":C[0]||(C[0]=w=>at(p)?p.value=w:null),"available-projects":t(R),"available-environments":t(D)},null,8,["modelValue","available-projects","available-environments"])]),_:1}),t(m)?(s(),v(d,{key:0,icon:"i-lucide-calendar-off",color:"warning",variant:"subtle",title:`No test runs in the last ${t(p).days} days`,description:`Your most recent run was ${("formatRelativeTime"in E?E.formatRelativeTime:t(lt))(t(b))} — the widgets below look empty because the selected range excludes it.`,actions:[{label:"Show all time",color:"warning",variant:"solid",size:"xs",onClick:n}]},null,8,["title","description","actions"])):P("",!0),r("div",ba,[(s(!0),k(V,null,O(t(Pt),w=>(s(),k("div",{key:w.id,class:N(w.size==="full"?"xl:col-span-2":"")},[(s(),v(Mt(i[w.id]),{query:t(a)},null,8,["query"]))],2))),128))])])]),_:1})}}});export{sn as default};
@@ -1 +0,0 @@
1
- import{d as g,o as s,c as a,F as l,y as o,f as p,x as f,p as b,k as y,O as k,h as _}from"./DHltYerF.js";const x=g({__name:"MiniRunBars",props:{runs:{},height:{default:28},maxBars:{default:20}},setup(n){const i=n;function u(t){return["running","initialising","finalizing"].includes(t.status)?"bg-blue-400 dark:bg-blue-500":t.flakyTests>0&&t.status==="passed"?"bg-amber-400 dark:bg-amber-400":t.status==="passed"?"bg-green-500":["failed","timedout","interrupted"].includes(t.status)?"bg-red-500":"bg-gray-300 dark:bg-gray-600"}function c(t){const r=[`Run #${t.id}`,`Status: ${t.status}`,`${t.passedTests}/${t.totalTests} passed`];return t.flakyTests>0&&r.push(`${t.flakyTests} flaky`),r.join(" · ")}const d=_(()=>Math.max(0,i.maxBars-i.runs.length));return(t,r)=>{const m=f;return s(),a("div",{class:"flex items-stretch gap-px",style:k({height:`${n.height}px`})},[(s(!0),a(l,null,o(n.runs,e=>(s(),p(m,{key:e.id,to:`/test-runs/${e.id}`,title:c(e),class:b(["flex-1 rounded-sm transition-opacity hover:opacity-70 min-w-0",u(e)])},null,8,["to","title","class"]))),128)),(s(!0),a(l,null,o(y(d),e=>(s(),a("div",{key:`empty-${e}`,class:"flex-1 rounded-sm bg-gray-100 dark:bg-gray-800 min-w-0"}))),128))],4)}}}),$=Object.assign(x,{__name:"MiniRunBars"});export{$ as _};
@@ -1 +0,0 @@
1
- import{d as T,S as P,o as u,f as v,g as n,T as q,Z as L,$,k as e,bn as V,c0 as O,X as W,B as G,bM as U,ba as X,h as b,r as N,Y,C as A,aL as H,j as w,bm as Z,U as m,bH as J,m as Q,t as K,H as ee,bl as te,bx as E,bi as ae,c1 as re,bo as oe,ae as se,aB as le,br as ne,az as ie,V as ue,bG as de,be as pe,a0 as fe,a1 as ce,a3 as ge,a4 as ve,a5 as ye,bs as be,q as x,bv as _e,c as F,p as I,F as me,y as qe,bD as Ce,b4 as R,a6 as he}from"./DHltYerF.js";var Te=T({__name:"TooltipArrow",props:{width:{type:Number,required:!1,default:10},height:{type:Number,required:!1,default:5},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"svg"}},setup(i){const d=i;return P(),(t,p)=>(u(),v(e(V),L($(d)),{default:n(()=>[q(t.$slots,"default")]),_:3},16))}}),we=Te;const j="tooltip.open",[S,Pe]=Y("TooltipRoot");var ke=T({__name:"TooltipRoot",props:{defaultOpen:{type:Boolean,required:!1,default:!1},open:{type:Boolean,required:!1,default:void 0},delayDuration:{type:Number,required:!1,default:void 0},disableHoverableContent:{type:Boolean,required:!1,default:void 0},disableClosingTrigger:{type:Boolean,required:!1,default:void 0},disabled:{type:Boolean,required:!1,default:void 0},ignoreNonKeyboardFocus:{type:Boolean,required:!1,default:void 0}},emits:["update:open"],setup(i,{emit:d}){const t=i,p=d;P();const r=O(),a=b(()=>t.disableHoverableContent??r.disableHoverableContent.value),g=b(()=>t.disableClosingTrigger??r.disableClosingTrigger.value),f=b(()=>t.disabled??r.disabled.value),y=b(()=>t.delayDuration??r.delayDuration.value),_=b(()=>t.ignoreNonKeyboardFocus??r.ignoreNonKeyboardFocus.value),o=W(t,"open",p,{defaultValue:t.defaultOpen,passive:t.open===void 0});G(o,B=>{r.onClose&&(B?(r.onOpen(),document.dispatchEvent(new CustomEvent(j))):r.onClose())});const s=N(!1),l=N(),C=b(()=>o.value?s.value?"delayed-open":"instant-open":"closed"),{start:D,stop:h}=U(()=>{s.value=!0,o.value=!0},y,{immediate:!1});function c(){h(),s.value=!1,o.value=!0}function k(){h(),o.value=!1}function z(){D()}return Pe({contentId:"",open:o,stateAttribute:C,trigger:l,onTriggerChange(B){l.value=B},onTriggerEnter(){r.isOpenDelayed.value?z():c()},onTriggerLeave(){a.value?k():h()},onOpen:c,onClose:k,disableHoverableContent:a,disableClosingTrigger:g,disabled:f,ignoreNonKeyboardFocus:_}),(B,He)=>(u(),v(e(X),null,{default:n(()=>[q(B.$slots,"default",{open:e(o)})]),_:3}))}}),Be=ke,Oe=T({__name:"TooltipContentImpl",props:{ariaLabel:{type:String,required:!1},asChild:{type:Boolean,required:!1,default:void 0},as:{type:null,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},avoidCollisions:{type:Boolean,required:!1,default:void 0},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1,default:void 0},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1}},emits:["escapeKeyDown","pointerDownOutside"],setup(i,{emit:d}){const t=i,p=d,r=S(),a=O(),{forwardRef:g,currentElement:f}=P(),y=b(()=>t.ariaLabel||f.value?.textContent),_=b(()=>{const{ariaLabel:o,...s}=t;return E(s,a.content.value??{},{side:"top",sideOffset:0,align:"center",avoidCollisions:!0,collisionBoundary:[],collisionPadding:0,arrowPadding:0,sticky:"partial",hideWhenDetached:!1})});return A(()=>{H(window,"scroll",o=>{o.target?.contains(r.trigger.value)&&r.onClose()},{capture:!0}),H(window,j,r.onClose)}),(o,s)=>(u(),v(e(te),{"as-child":"","disable-outside-pointer-events":!1,onEscapeKeyDown:s[0]||(s[0]=l=>p("escapeKeyDown",l)),onPointerDownOutside:s[1]||(s[1]=l=>{e(r).disableClosingTrigger.value&&e(r).trigger.value?.contains(l.target)&&l.preventDefault(),p("pointerDownOutside",l)}),onFocusOutside:s[2]||(s[2]=ee(()=>{},["prevent"])),onDismiss:s[3]||(s[3]=l=>e(r).onClose())},{default:n(()=>[w(e(Z),m({ref:e(g),"data-state":e(r).stateAttribute.value},{...o.$attrs,..._.value},{style:{"--reka-tooltip-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-tooltip-content-available-width":"var(--reka-popper-available-width)","--reka-tooltip-content-available-height":"var(--reka-popper-available-height)","--reka-tooltip-trigger-width":"var(--reka-popper-anchor-width)","--reka-tooltip-trigger-height":"var(--reka-popper-anchor-height)"}}),{default:n(()=>[q(o.$slots,"default"),w(e(J),{id:e(r).contentId,role:"tooltip"},{default:n(()=>[Q(K(y.value),1)]),_:1},8,["id"])]),_:3},16,["data-state"])]),_:3}))}}),M=Oe,De=T({__name:"TooltipContentHoverable",props:{ariaLabel:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1}},setup(i){const t=ae(i),{forwardRef:p,currentElement:r}=P(),{trigger:a,onClose:g}=S(),f=O(),{isPointerInTransit:y,onPointerExit:_}=re(a,r);return f.isPointerInTransitRef=y,_(()=>{g()}),(o,s)=>(u(),v(M,m({ref:e(p)},e(t)),{default:n(()=>[q(o.$slots,"default")]),_:3},16))}}),xe=De,Ne=T({__name:"TooltipContent",props:{forceMount:{type:Boolean,required:!1},ariaLabel:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1}},emits:["escapeKeyDown","pointerDownOutside"],setup(i,{emit:d}){const t=i,p=d,r=S(),a=oe(t,p),{forwardRef:g}=P();return(f,y)=>(u(),v(e(le),{present:f.forceMount||e(r).open.value},{default:n(()=>[(u(),v(se(e(r).disableHoverableContent.value?M:xe),m({ref:e(g)},e(a)),{default:n(()=>[q(f.$slots,"default")]),_:3},16))]),_:3},8,["present"]))}}),Se=Ne,Fe=T({__name:"TooltipPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(i){const d=i;return(t,p)=>(u(),v(e(ne),L($(d)),{default:n(()=>[q(t.$slots,"default")]),_:3},16))}}),Re=Fe,Ee=T({__name:"TooltipTrigger",props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(i){const d=i,t=S(),p=O();t.contentId||=ie(void 0,"reka-tooltip-content");const{forwardRef:r,currentElement:a}=P(),g=N(!1),f=N(!1),y=b(()=>t.disabled.value?{}:{click:h,focus:C,pointermove:s,pointerleave:l,pointerdown:o,blur:D});A(()=>{t.onTriggerChange(a.value)});function _(){setTimeout(()=>{g.value=!1},1)}function o(){t.open&&!t.disableClosingTrigger.value&&t.onClose(),g.value=!0,document.addEventListener("pointerup",_,{once:!0})}function s(c){c.pointerType!=="touch"&&!f.value&&!p.isPointerInTransitRef.value&&(t.onTriggerEnter(),f.value=!0)}function l(){t.onTriggerLeave(),f.value=!1}function C(c){g.value||t.ignoreNonKeyboardFocus.value&&!c.target.matches?.(":focus-visible")||t.onOpen()}function D(){t.onClose()}function h(){t.disableClosingTrigger.value||t.onClose()}return(c,k)=>(u(),v(e(pe),{"as-child":"",reference:c.reference},{default:n(()=>[w(e(ue),m({ref:e(r),"aria-describedby":e(t).open.value?e(t).contentId:void 0,"data-state":e(t).stateAttribute.value,as:c.as,"as-child":d.asChild,"data-grace-area-trigger":""},de(y.value)),{default:n(()=>[q(c.$slots,"default")]),_:3},16,["aria-describedby","data-state","as","as-child"])]),_:3},8,["reference"]))}}),Le=Ee;const $e={slots:{content:"flex items-center gap-1 bg-default text-highlighted shadow-sm rounded-sm ring ring-default h-6 px-2.5 py-1 text-xs select-none data-[state=delayed-open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] origin-(--reka-tooltip-content-transform-origin) pointer-events-auto",arrow:"fill-bg stroke-default",text:"truncate",kbds:"hidden lg:inline-flex items-center shrink-0 gap-0.5 not-first-of-type:before:content-['·'] not-first-of-type:before:me-0.5",kbdsSize:"sm"}},Ae={__name:"UTooltip",props:{text:{type:String,required:!1},kbds:{type:Array,required:!1},content:{type:Object,required:!1},arrow:{type:[Boolean,Object],required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},reference:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultOpen:{type:Boolean,required:!1},open:{type:Boolean,required:!1},delayDuration:{type:Number,required:!1},disableHoverableContent:{type:Boolean,required:!1},disableClosingTrigger:{type:Boolean,required:!1},disabled:{type:Boolean,required:!1},ignoreNonKeyboardFocus:{type:Boolean,required:!1}},emits:["update:open"],setup(i,{emit:d}){const t=i,p=d,r=fe(),a=ce("tooltip",t),g=ge(),f=O(),y=ve(ye(a,"defaultOpen","open","delayDuration","disableHoverableContent","disableClosingTrigger","ignoreNonKeyboardFocus"),p),_=be(R(()=>a.portal)),o=R(()=>E(a.content,f.content.value,{side:"bottom",sideOffset:8,collisionPadding:8})),s=R(()=>E(a.arrow,{rounded:!0})),l=b(()=>he({extend:$e,...g.ui?.tooltip||{}})({side:o.value.side}));return(C,D)=>(u(),v(e(Be),m(e(y),{disabled:!(e(a).text||e(a).kbds?.length||r.content)||e(a).disabled}),{default:n(({open:h})=>[r.default||e(a).reference?(u(),v(e(Le),m({key:0},C.$attrs,{"as-child":"",reference:e(a).reference,class:e(a).class}),{default:n(()=>[q(C.$slots,"default",{open:h})]),_:2},1040,["reference","class"])):x("",!0),w(e(Re),L($(e(_))),{default:n(()=>[w(e(_e),null,{default:n(()=>[w(e(Se),m(o.value,{"data-slot":"content",class:l.value.content({class:[!r.default&&e(a).class,e(a).ui?.content]})}),{default:n(()=>[q(C.$slots,"content",{ui:l.value},()=>[e(a).text?(u(),F("span",{key:0,"data-slot":"text",class:I(l.value.text({class:e(a).ui?.text}))},K(e(a).text),3)):x("",!0),e(a).kbds?.length?(u(),F("span",{key:1,"data-slot":"kbds",class:I(l.value.kbds({class:e(a).ui?.kbds}))},[(u(!0),F(me,null,qe(e(a).kbds,(c,k)=>(u(),v(Ce,m({key:k,size:e(a).ui?.kbdsSize||l.value.kbdsSize()},{ref_for:!0},typeof c=="string"?{value:c}:c),null,16,["size"]))),128))],2)):x("",!0)]),e(a).arrow?(u(),v(e(we),m({key:0},s.value,{"data-slot":"arrow",class:l.value.arrow({class:e(a).ui?.arrow})}),null,16,["class"])):x("",!0)]),_:3},16,["class"])]),_:3})]),_:3},16)]),_:3},16,["disabled"]))}};export{Ae as _};
@@ -1,8 +0,0 @@
1
- import{_ as Q,a as Y}from"./CUvGJXY3.js";import{_ as D}from"./CN1mJlvD.js";import{_ as H}from"./Cng9gj7q.js";import{d as B,f as v,g as m,o as p,i as e,t as V,j as a,k as t,m as _,h as S,_ as j,b as J,C as X,c as $,v as M,r as w,aw as P,w as I,F as Z,q as h,K as tt,aJ as et}from"./DHltYerF.js";import{_ as E}from"./BHpUiv6j.js";import{u as N}from"./By4YL7mx.js";import{_ as ot}from"./BOCwBVnz.js";import{a as nt}from"./DHXWp5yD.js";import{f as st}from"./BeKvLsja.js";import{u as at}from"./Cnapl7lZ.js";import{u as U}from"./DXbPFI1d.js";import"./Dwws9U0D.js";import"./e7zD3uJ0.js";import"./qH_j2A3a.js";import"./DkI145a5.js";import"./CcXaak_K.js";import"./r3SBLxtE.js";const it={class:"space-y-3 text-sm"},lt={class:"space-y-1"},rt={class:"flex items-start gap-2"},ct={class:"text-xs break-all flex-1"},ut={class:"space-y-1"},dt=B({__name:"DesktopReporterCard",props:{url:{},token:{}},setup(f){const n=f,{copy:l}=N(),i=S(()=>`reporter: [
2
- ['@piwitests/reporter', {
3
- serverUrl: '${n.url}',
4
- projectName: 'my-project',
5
- apiKey: '${n.token}',
6
- }],
7
- ],`);return(u,r)=>{const o=j,d=E,g=D;return p(),v(g,{icon:"i-lucide-upload",title:"Send results to this app"},{subtitle:m(()=>[...r[1]||(r[1]=[_(" Point the Playwright reporter at this desktop app. The access token is a local secret — prefer passing it via a ",-1),e("code",null,"PIWI_API_KEY",-1),_(" env var rather than committing it. ",-1)])]),default:m(()=>[e("div",it,[e("div",lt,[r[2]||(r[2]=e("div",{class:"text-muted"},"Access token",-1)),e("div",rt,[e("code",ct,V(f.token),1),a(o,{icon:"i-lucide-copy",color:"neutral",variant:"ghost",size:"xs","aria-label":"Copy access token",onClick:r[0]||(r[0]=k=>t(l)(f.token,{toast:!0}))})])]),e("div",ut,[r[3]||(r[3]=e("div",{class:"text-muted"},"playwright.config.ts",-1)),a(d,{code:t(i),lang:"typescript"},null,8,["code"])])])]),_:1})}}}),pt=Object.assign(dt,{__name:"DesktopReporterCard"}),mt={class:"space-y-3 text-sm"},_t={class:"space-y-1"},ft={class:"flex items-start gap-2"},kt={class:"text-xs break-all flex-1"},vt={class:"space-y-1"},gt={class:"flex items-start gap-2"},bt={class:"text-xs break-all flex-1"},yt={class:"space-y-1"},xt=B({__name:"DesktopMcpCard",props:{url:{},token:{}},setup(f){const n=f,{copy:l}=N(),i=S(()=>`${n.url}/mcp`),u=S(()=>`claude mcp add --transport http piwi ${i.value} \\
8
- --header "Authorization: Bearer ${n.token}"`);return(r,o)=>{const d=j,g=E,k=D;return p(),v(k,{icon:"i-lucide-plug",title:"Connect an AI assistant (MCP)"},{subtitle:m(()=>[...o[2]||(o[2]=[_(" This app exposes a local MCP endpoint. Point your client at the URL below and authenticate with the access token — it is the Bearer token, even though sign-in is off. ",-1)])]),default:m(()=>[e("div",mt,[e("div",_t,[o[3]||(o[3]=e("div",{class:"text-muted"},"MCP URL",-1)),e("div",ft,[e("code",kt,V(t(i)),1),a(d,{icon:"i-lucide-copy",color:"neutral",variant:"ghost",size:"xs","aria-label":"Copy MCP URL",onClick:o[0]||(o[0]=c=>t(l)(t(i),{toast:!0}))})])]),e("div",vt,[o[4]||(o[4]=e("div",{class:"text-muted"},"Access token",-1)),e("div",gt,[e("code",bt,V(f.token),1),a(d,{icon:"i-lucide-copy",color:"neutral",variant:"ghost",size:"xs","aria-label":"Copy access token",onClick:o[1]||(o[1]=c=>t(l)(f.token,{toast:!0}))})])]),e("div",yt,[o[5]||(o[5]=e("div",{class:"text-muted"},"Claude Code",-1)),a(g,{code:t(u),lang:"sh"},null,8,["code"])])])]),_:1})}}}),ht=Object.assign(xt,{__name:"DesktopMcpCard"}),Ct={key:0,class:"flex items-center gap-2 text-sm text-muted"},wt={key:1,class:"space-y-4"},$t={class:"flex items-start justify-between gap-4"},St={class:"flex items-start justify-between gap-4"},Dt={key:2,class:"space-y-1 text-sm text-muted"},Bt=B({__name:"DesktopServiceCard",setup(f){const n=J(),l=w(!0),i=w(!1),u=w(!1),r=w(!1),o=w(!1);async function d(){const c=P();if(!c){i.value=!1,l.value=!1;return}try{const s=await c.invoke("desktop_get_service_settings");r.value=!!s.run_in_background,o.value=!!s.start_on_login,i.value=!0}catch{i.value=!1}finally{l.value=!1}}X(d);async function g(c){const s=P();if(s){u.value=!0;try{await s.invoke("desktop_set_run_in_background",{enabled:c}),r.value=c}catch{n.add({title:'Could not update "Run in background"',color:"error"})}finally{u.value=!1}}}async function k(c){const s=P();if(s){u.value=!0;try{await s.invoke("desktop_set_start_on_login",{enabled:c}),o.value=c}catch{n.add({title:'Could not update "Start on login"',color:"error"})}finally{u.value=!1}}}return(c,s)=>{const R=M,C=ot,L=D;return p(),v(L,{icon:"i-lucide-monitor-cog",title:"Desktop app"},{subtitle:m(()=>[...s[0]||(s[0]=[_(" Keep Piwi running in the background and start it automatically when you log in. ",-1)])]),default:m(()=>[t(l)?(p(),$("div",Ct,[a(R,{name:"i-lucide-loader-2",class:"size-4 animate-spin"}),s[1]||(s[1]=_(" Checking… ",-1))])):t(i)?(p(),$("div",wt,[e("div",$t,[s[2]||(s[2]=e("div",{class:"space-y-0.5"},[e("p",{class:"text-sm font-medium"},"Run in background"),e("p",{class:"text-xs text-muted"},"Closing the window keeps the server running in the tray instead of quitting.")],-1)),a(C,{"model-value":t(r),disabled:t(u),"onUpdate:modelValue":g},null,8,["model-value","disabled"])]),e("div",St,[s[3]||(s[3]=e("div",{class:"space-y-0.5"},[e("p",{class:"text-sm font-medium"},"Start on login"),e("p",{class:"text-xs text-muted"}," Launch Piwi automatically (hidden in the tray) when you sign in to your computer. ")],-1)),a(C,{"model-value":t(o),disabled:t(u),"onUpdate:modelValue":k},null,8,["model-value","disabled"])])])):(p(),$("div",Dt,[...s[4]||(s[4]=[e("p",null,"Manage these from the Piwi tray icon:",-1),e("p",{class:"text-xs"},[_(" Right-click the Piwi icon in your system tray for "),e("strong",null,"Run in background"),_(" and "),e("strong",null,"Start on login"),_(". On Windows the icon may be hidden under the “show hidden icons” arrow (▲) next to the clock — drag it onto the taskbar to keep it in view. ")],-1)])]))]),_:1})}}}),Rt=Object.assign(Bt,{__name:"DesktopServiceCard"}),Lt={class:"space-y-6"},Pt={class:"flex flex-wrap items-center gap-x-6 gap-y-3 text-sm"},Yt=B({__name:"about",async setup(f){let n,l;const i=tt(),u=at(),{data:r}=([n,l]=I(()=>U("/api/version","$mIoGdvWYhF")),n=await n,l(),n),{data:o}=([n,l]=I(()=>U("/api/admin/stats",{immediate:u,default:()=>null},"$IuuLVEbWlE")),n=await n,l(),n),{data:d}=([n,l]=I(()=>U("/api/desktop/reporter-config",{immediate:u,default:()=>null},"$A4rSe7BAN_")),n=await n,l(),n),g=i.public.appVersion,k=i.public.buildSha,c=i.public.buildTime,s=i.public.nodeVersion,R=i.public.authEnabled,C=S(()=>k?k.slice(0,7):null),L=S(()=>{const b=r.value?.dbBackend;return b==="postgresql"?"PostgreSQL":b==="sqlite"?"SQLite":b??null});return(b,y)=>{const x=Y,O=Q,A=D,z=H,q=pt,F=ht,K=Rt,T=nt,W=M,G=et;return p(),$("div",Lt,[a(A,{icon:"i-lucide-info",title:"Application"},{default:m(()=>[a(O,null,{default:m(()=>[a(x,{label:"Version",value:`v${t(g)}`},null,8,["value"]),t(C)?(p(),v(x,{key:0,label:"Build",value:t(C),hint:t(k)},null,8,["value","hint"])):h("",!0),t(c)?(p(),v(x,{key:1,label:"Built",value:("formatRelativeTime"in b?b.formatRelativeTime:t(st))(t(c)),hint:t(c)},null,8,["value","hint"])):h("",!0),a(x,{label:"Node.js",value:t(s)},null,8,["value"]),a(x,{label:"Database",value:t(L)},null,8,["value"]),a(x,{label:"Authentication",value:t(R)?"Enabled":"Disabled"},null,8,["value"])]),_:1})]),_:1}),t(u)?(p(),$(Z,{key:0},[t(o)?(p(),v(z,{key:0,database:t(o).databaseLocation,storage:t(o).storageLocation},null,8,["database","storage"])):h("",!0),t(d)?(p(),v(q,{key:1,url:t(d).url,token:t(d).token},null,8,["url","token"])):h("",!0),t(d)?(p(),v(F,{key:2,url:t(d).url,token:t(d).token},null,8,["url","token"])):h("",!0),a(K)],64)):h("",!0),a(A,{icon:"i-lucide-book-open",title:"Resources"},{default:m(()=>[e("div",Pt,[a(T,{to:""},{default:m(()=>[...y[0]||(y[0]=[_("Documentation",-1)])]),_:1}),a(T,{to:"api"},{default:m(()=>[...y[1]||(y[1]=[_("API reference",-1)])]),_:1}),a(G,{to:"https://github.com/piwitests/platform",target:"_blank",rel:"noopener noreferrer",class:"inline-flex items-center gap-1 text-primary hover:underline"},{default:m(()=>[y[2]||(y[2]=_(" GitHub ",-1)),a(W,{name:"i-lucide-external-link",class:"w-3.5 h-3.5 shrink-0"})]),_:1})])]),_:1})])}}});export{Yt as default};
@@ -1 +0,0 @@
1
- import{d as W,o as r,f as m,aJ as b,k as e,g as u,T as O,v as x,q as n,h as _,m as P,E as M,l as v,j as D,c as l,t as p,i as E,F as L,y as C,r as k,_ as N}from"./DHltYerF.js";import{H as U}from"./r3SBLxtE.js";import{u as H}from"./By4YL7mx.js";const G="https://piwitests.github.io";function w(t){return`${G}/${t.replace(/^\//,"")}`}const B=W({__name:"DocLink",props:{to:{},noIcon:{type:Boolean}},setup(t){const a=t,h=_(()=>w(a.to));return(s,o)=>{const A=x,I=b;return r(),m(I,{to:e(h),target:"_blank",rel:"noopener noreferrer",class:"inline-flex items-center gap-1 text-primary hover:underline"},{default:u(()=>[O(s.$slots,"default",{},()=>[o[0]||(o[0]=P("Learn more",-1))]),t.noIcon?n("",!0):(r(),m(A,{key:0,name:"i-lucide-external-link",class:"w-3.5 h-3.5 shrink-0"}))]),_:3},8,["to"])}}}),X=Object.assign(B,{__name:"DocLink"}),y={PIWI_SITE_URL:{description:"Public base URL of the instance (e.g. https://piwi.example.com). Used to build links in emails.",category:"general",type:"url",example:"https://piwi.example.com",notes:"When unset, links in emails point to http://localhost:3000 and OAuth callback URLs are inferred from the request host — set it when running behind a reverse proxy."},PIWI_SECRET_KEY:{description:"Master key for AES-256-GCM encryption of secrets stored in the database (AI API keys, webhook/SCM secrets). Strongly recommended in production.",category:"general",secret:!0,example:"a 64-char random hex string",notes:"Falls back to an insecure built-in development key (with a startup warning in production). Generate one with `node -e \"console.log(require('node:crypto').randomBytes(32).toString('hex'))\"`."},PIWI_BUILD_DIR:{description:"Overrides the Nuxt build output directory. Used by the test harness to isolate parallel builds.",category:"build",runtimeOnly:!0,type:"path"},PIWI_BUILD_SHA:{description:"Commit SHA baked into the build for provenance. Shown on Settings → About. Set as a build-time arg.",category:"build",runtimeOnly:!0},PIWI_DESKTOP_TOKEN:{description:"Per-install access token the desktop (Tauri) app injects to gate its local server. Set automatically by the desktop shell — not user-configurable. Absent on the server build.",category:"desktop",secret:!0,runtimeOnly:!0,since:"0.16.0"},PIWI_DATABASE_PATH:{description:"Path to the SQLite database file (used when PIWI_DATABASE_URL is not set).",category:"database",type:"path",default:".data/piwi.db",relevantWhen:{PIWI_DATABASE_URL:""}},PIWI_DATABASE_URL:{description:"PostgreSQL connection string. When set, PostgreSQL is used instead of SQLite and migrations run automatically on startup.",category:"database",secret:!0,example:"postgres://piwi:piwi@db:5432/piwi",docs:"deployment#docker-compose-with-postgresql"},PIWI_RETENTION_DAYS:{description:"Days of test-run history the nightly retention sweep keeps. Unset or 0 disables automatic run pruning (the default — pruning is opt-in).",category:"database",type:"number",min:0,docs:"storage#data-retention"},PIWI_RETENTION_NOTIFICATION_DAYS:{description:"Days to keep sent/failed notification outbox rows before the nightly sweep prunes them (default 30; 0 keeps them forever).",category:"database",type:"number",default:"30",min:0},PIWI_RETENTION_DIAGNOSIS_VERSIONS:{description:"AI-diagnosis history versions kept per diagnosis by the nightly sweep (default 20; 0 disables capping).",category:"database",type:"number",default:"20",min:0},PIWI_STORAGE_TYPE:{description:'Storage backend for test artifacts (HTML reports, traces, attachments): "local" or "s3".',category:"storage",type:"enum",enum:["local","s3"],default:"local",notes:"Only the exact value `s3` selects S3; any other value falls back to local storage."},PIWI_STORAGE_PATH:{description:'Directory for local file storage (when PIWI_STORAGE_TYPE is "local").',category:"storage",type:"path",default:".data/storage",relevantWhen:{PIWI_STORAGE_TYPE:"local"}},PIWI_S3_BUCKET:{description:'S3 bucket name for artifact storage (when PIWI_STORAGE_TYPE is "s3").',category:"storage",relevantWhen:{PIWI_STORAGE_TYPE:"s3"},requiredWhen:{PIWI_STORAGE_TYPE:"s3"},docs:"storage#s3-compatible-storage"},PIWI_S3_REGION:{description:'S3 bucket region (when PIWI_STORAGE_TYPE is "s3").',category:"storage",example:"us-east-1",relevantWhen:{PIWI_STORAGE_TYPE:"s3"},requiredWhen:{PIWI_STORAGE_TYPE:"s3"}},PIWI_S3_ACCESS_KEY_ID:{description:"S3 access key id with write access to the bucket.",category:"storage",secret:!0,relevantWhen:{PIWI_STORAGE_TYPE:"s3"},requiredWhen:{PIWI_STORAGE_TYPE:"s3"}},PIWI_S3_SECRET_ACCESS_KEY:{description:"S3 secret access key.",category:"storage",secret:!0,relevantWhen:{PIWI_STORAGE_TYPE:"s3"},requiredWhen:{PIWI_STORAGE_TYPE:"s3"}},PIWI_S3_ENDPOINT:{description:"Custom endpoint for S3-compatible services (MinIO, R2, Spaces).",category:"storage",type:"url",example:"https://minio.example.com",relevantWhen:{PIWI_STORAGE_TYPE:"s3"}},PIWI_S3_FORCE_PATH_STYLE:{description:"Use path-style addressing (required by some S3-compatible services).",category:"storage",type:"boolean",relevantWhen:{PIWI_STORAGE_TYPE:"s3"},notes:"Defaults to on when a custom endpoint is set, off otherwise; only the exact value `false` turns it off explicitly."},PIWI_AUTH_ENABLED:{description:'Set to "true" to enable role-based access control and API keys. Off by default.',category:"auth",type:"boolean",default:"false"},PIWI_AUTH_SECRET:{description:"Secret used to sign/encrypt session cookies. Required when PIWI_AUTH_ENABLED is true.",category:"auth",secret:!0,relevantWhen:{PIWI_AUTH_ENABLED:"true"},requiredWhen:{PIWI_AUTH_ENABLED:"true"},notes:"The server refuses to start when auth is enabled and this is unset."},PIWI_OAUTH_GOOGLE_CLIENT_ID:{description:"Google OAuth client id (optional single sign-on).",category:"oauth",relevantWhen:{PIWI_AUTH_ENABLED:"true"},requiredWhen:{PIWI_OAUTH_GOOGLE_CLIENT_SECRET:"*"},docs:"authentication#oauth-google-github"},PIWI_OAUTH_GOOGLE_CLIENT_SECRET:{description:"Google OAuth client secret.",category:"oauth",secret:!0,relevantWhen:{PIWI_AUTH_ENABLED:"true"},requiredWhen:{PIWI_OAUTH_GOOGLE_CLIENT_ID:"*"}},PIWI_OAUTH_GITHUB_CLIENT_ID:{description:"GitHub OAuth client id (optional single sign-on).",category:"oauth",relevantWhen:{PIWI_AUTH_ENABLED:"true"},requiredWhen:{PIWI_OAUTH_GITHUB_CLIENT_SECRET:"*"},docs:"authentication#oauth-google-github"},PIWI_OAUTH_GITHUB_CLIENT_SECRET:{description:"GitHub OAuth client secret.",category:"oauth",secret:!0,relevantWhen:{PIWI_AUTH_ENABLED:"true"},requiredWhen:{PIWI_OAUTH_GITHUB_CLIENT_ID:"*"}},PIWI_OAUTH_ALLOWED_DOMAINS:{description:"Comma-separated verified email domains allowed to sign in via OAuth (all providers).",category:"oauth",type:"list",example:"example.com,corp.example.com",relevantWhen:{PIWI_AUTH_ENABLED:"true"},notes:"Only verified emails in these domains are accepted. Empty means no domain restriction."},PIWI_OAUTH_GITHUB_ALLOWED_ORGS:{description:"Comma-separated GitHub org logins a user must belong to (requests read:org scope).",category:"oauth",type:"list",relevantWhen:{PIWI_OAUTH_GITHUB_CLIENT_ID:"*"}},PIWI_AI_PROVIDER:{description:'AI provider for failure diagnosis: "anthropic" or "openai" (OpenAI-compatible).',category:"ai",type:"enum",enum:["anthropic","openai"]},PIWI_AI_API_KEY:{description:"API key for the diagnosis provider. Takes precedence over the DB-stored key.",category:"ai",secret:!0,relevantWhen:{PIWI_AI_PROVIDER:"*"},requiredWhen:{PIWI_AI_PROVIDER:"anthropic"},notes:"Optional for OpenAI-compatible providers that need no key (e.g. a local model)."},PIWI_AI_MODEL:{description:"Diagnosis model name (default: claude-opus-4-8 for Anthropic).",category:"ai",example:"claude-opus-4-8",relevantWhen:{PIWI_AI_PROVIDER:"*"},requiredWhen:{PIWI_AI_PROVIDER:"openai"}},PIWI_AI_BASE_URL:{description:"Base URL for OpenAI-compatible providers (e.g. http://localhost:11434/v1).",category:"ai",type:"url",example:"http://localhost:11434/v1",relevantWhen:{PIWI_AI_PROVIDER:"*"},requiredWhen:{PIWI_AI_PROVIDER:"openai"}},PIWI_AI_AUTO_DIAGNOSE:{description:'Set to "true" to auto-diagnose new failure clusters when a run finishes.',category:"ai",type:"boolean",default:"false",relevantWhen:{PIWI_AI_PROVIDER:"*"}},PIWI_AI_AUTO_DIAGNOSE_MAX:{description:"Max clusters auto-diagnosed per finished run (budget cap; default 3).",category:"ai",type:"number",default:"3",min:1,relevantWhen:{PIWI_AI_AUTO_DIAGNOSE:"true"}},PIWI_AI_RESEARCH_PROVIDER:{description:"Provider for the optional research (pre-analysis) stage. Falls back to PIWI_AI_PROVIDER.",category:"ai",type:"enum",enum:["anthropic","openai"],relevantWhen:{PIWI_AI_RESEARCH_MODEL:"*"}},PIWI_AI_RESEARCH_MODEL:{description:"Cheaper/faster model for the research stage. Empty disables the two-stage pipeline.",category:"ai",relevantWhen:{PIWI_AI_PROVIDER:"*"}},PIWI_AI_RESEARCH_BASE_URL:{description:"Base URL for the research-stage provider. Falls back to PIWI_AI_BASE_URL.",category:"ai",type:"url",relevantWhen:{PIWI_AI_RESEARCH_MODEL:"*"}},PIWI_AI_RESEARCH_API_KEY:{description:"API key for the research-stage provider. Falls back to PIWI_AI_API_KEY.",category:"ai",secret:!0,relevantWhen:{PIWI_AI_RESEARCH_MODEL:"*"}},PIWI_AI_EMBEDDING_PROVIDER:{description:"Provider for embeddings (semantic failure clustering). Falls back to PIWI_AI_PROVIDER.",category:"ai",type:"enum",enum:["openai"],relevantWhen:{PIWI_AI_EMBEDDING_MODEL:"*"},notes:'Must resolve to an OpenAI-compatible provider — Anthropic has no embeddings API — so the fallback only helps when the main provider is "openai".'},PIWI_AI_EMBEDDING_MODEL:{description:"Embedding model name (e.g. text-embedding-3-small).",category:"ai",example:"text-embedding-3-small",relevantWhen:{PIWI_AI_PROVIDER:"*"},notes:"Empty disables semantic clustering (and the embedding fallbacks)."},PIWI_AI_EMBEDDING_BASE_URL:{description:"Base URL for the embedding provider. Falls back to PIWI_AI_BASE_URL.",category:"ai",type:"url",relevantWhen:{PIWI_AI_EMBEDDING_MODEL:"*"}},PIWI_AI_EMBEDDING_API_KEY:{description:"API key for the embedding provider. Falls back to PIWI_AI_API_KEY.",category:"ai",secret:!0,relevantWhen:{PIWI_AI_EMBEDDING_MODEL:"*"}},PIWI_AI_MAX_SAMPLE_ERROR_CHARS:{description:"Max characters of raw error text (per error block).",category:"ai-limits",type:"number",default:"10000",min:200,max:5e4},PIWI_AI_MAX_SCM_PATCH_BUDGET:{description:"Total characters of diff patches across changed files.",category:"ai-limits",type:"number",default:"15000",min:0,max:5e4},PIWI_AI_MAX_AFFECTED_TESTS:{description:"Max affected tests listed in the diagnosis context.",category:"ai-limits",type:"number",default:"30",min:1,max:200},PIWI_AI_MAX_STEPS:{description:"Max recent test steps included.",category:"ai-limits",type:"number",default:"50",min:1,max:200},PIWI_AI_MAX_CONSOLE_ENTRIES:{description:"Max console error/warning entries included.",category:"ai-limits",type:"number",default:"30",min:0,max:200},PIWI_AI_MAX_CONSOLE_ENTRY_CHARS:{description:"Max characters per console entry.",category:"ai-limits",type:"number",default:"1000",min:50,max:5e3},PIWI_AI_MAX_NETWORK_REQUESTS:{description:"Max failed network requests included.",category:"ai-limits",type:"number",default:"25",min:0,max:200},PIWI_AI_MAX_ARIA_SNAPSHOT_CHARS:{description:"Max characters of the page ARIA snapshot.",category:"ai-limits",type:"number",default:"12000",min:0,max:5e4},PIWI_AI_MAX_TEST_SOURCE_CHARS:{description:"Max characters of the test source snippet.",category:"ai-limits",type:"number",default:"8000",min:0,max:5e4},PIWI_AI_MAX_SOURCE_FILES:{description:"Max full source files fetched from SCM to ground patches (0 disables).",category:"ai-limits",type:"number",default:"4",min:0,max:20},PIWI_AI_MAX_SOURCE_FILE_CHARS:{description:"Max characters per fetched full source file.",category:"ai-limits",type:"number",default:"12000",min:0,max:5e4},PIWI_AI_MAX_SERVER_LOG_ENTRIES:{description:"Max backend server log entries (from X-Piwi-Logs header) included.",category:"ai-limits",type:"number",default:"50",min:0,max:200},PIWI_AI_MAX_SERVER_LOG_ENTRY_CHARS:{description:"Max characters per backend server log entry.",category:"ai-limits",type:"number",default:"1000",min:50,max:5e3},PIWI_AI_MAX_SERVER_TRACE_SPANS:{description:"Max backend server spans (from X-Piwi-Trace header) included in AI diagnosis (0 disables).",category:"ai-limits",type:"number",default:"40",min:0,max:500,since:"0.16.0"},PIWI_AI_MAX_IMAGES:{description:"Max screenshots auto-included in the diagnosis context.",category:"ai-limits",type:"number",default:"5",min:0,max:20},PIWI_AI_MAX_PASSED_PEERS:{description:"Max peer tests in the same file listed when they passed.",category:"ai-limits",type:"number",default:"20",min:0,max:100},PIWI_AI_MAX_CONSOLE_WINDOW:{description:"Max console entries of any type in the window before failure.",category:"ai-limits",type:"number",default:"50",min:0,max:200},PIWI_AI_SLOW_REQUEST_MS:{description:"Network request duration (ms) threshold for flagging as slow.",category:"ai-limits",type:"number",default:"1500",min:100,max:3e4},PIWI_AI_MAX_TRACE_ACTIONS:{description:"Max actions extracted from trace ZIP for failing-action context (0 disables).",category:"ai-limits",type:"number",default:"10",min:0,max:50},PIWI_AI_TRACE_DOM_CHARS:{description:"Max characters for the trace-derived DOM/ARIA excerpt in failing-action context.",category:"ai-limits",type:"number",default:"6000",min:0,max:2e4},PIWI_AI_MAX_TRACE_STACK_FRAMES:{description:"Max call-stack frames (with source windows) from the trace call-stack section (0 disables).",category:"ai-limits",type:"number",default:"10",min:0,max:50},PIWI_AI_MAX_TRACE_NETWORK_REQUESTS:{description:"Max requests included from the trace network stream (0 disables).",category:"ai-limits",type:"number",default:"20",min:0,max:200},PIWI_AI_MAX_DOM_SNAPSHOT_CHARS:{description:"Max characters of the failure-time DOM snapshot rendered from the trace (0 disables).",category:"ai-limits",type:"number",default:"8000",min:0,max:5e4},PIWI_AI_IMAGE_MAX_EDGE:{description:"Screenshots are downscaled to at most this many pixels on the long edge before being sent.",category:"ai-limits",type:"number",default:"1920",min:512,max:8192},PIWI_INGEST_MAX_CONSOLE_ENTRIES:{description:"Max console entries stored per test execution.",category:"ingest",type:"number",default:"200",min:10,max:5e3},PIWI_INGEST_MAX_CONSOLE_ENTRY_CHARS:{description:"Max characters stored per console entry.",category:"ingest",type:"number",default:"2000",min:200,max:2e4},PIWI_INGEST_MAX_STEPS:{description:"Max test steps stored per execution.",category:"ingest",type:"number",default:"500",min:20,max:5e3},PIWI_INGEST_MAX_STEP_EVENTS:{description:"Max step events stored per execution.",category:"ingest",type:"number",default:"1000",min:20,max:1e4},PIWI_INGEST_MAX_ARIA_CHARS:{description:"Max characters of the ARIA snapshot stored per failing execution.",category:"ingest",type:"number",default:"100000",min:1e3,max:1e6},PIWI_INGEST_MAX_ERROR_CHARS:{description:"Max characters of error text stored per execution (head and tail are kept).",category:"ingest",type:"number",default:"20000",min:1e3,max:1e5},PIWI_INGEST_MAX_SAMPLE_ERROR_CHARS:{description:"Max characters of the sample error stored per failure cluster.",category:"ingest",type:"number",default:"50000",min:1e3,max:2e5},PIWI_INGEST_MAX_TEST_SOURCE_CHARS:{description:"Max characters of the test source snippet stored per failing execution.",category:"ingest",type:"number",default:"50000",min:1e3,max:2e5},PIWI_INGEST_MAX_SOURCE_FRAMES:{description:"Max source stack frames stored per failing execution.",category:"ingest",type:"number",default:"8",min:1,max:32},PIWI_INGEST_MAX_SOURCE_FRAME_CHARS:{description:"Max characters per stored source frame snippet.",category:"ingest",type:"number",default:"4000",min:500,max:2e4},PIWI_AUTO_MARKERS:{description:"Automatically create a timeline marker when a run’s environment, Playwright version, or reporter version changes from the previous run (default: enabled). Set to false to disable.",category:"markers",type:"boolean",default:"true",docs:"timeline-markers",notes:"Only the exact value `false` disables auto-markers."},PIWI_TEST_LOGS_DISABLED:{description:"Disable X-Piwi-Logs response header emission (default: auto-disabled in production, enabled in development).",category:"testing",type:"boolean",docs:"backend-logs",notes:"Unset: capture is on in development and off in production builds; `true` forces it off everywhere, `false` forces it on even in production."},PIWI_CLUSTER_SIMILARITY_THRESHOLD:{description:"Cosine similarity (0–1) above which two failure embeddings merge into one cluster.",category:"clustering",type:"number",default:"0.92",min:0,max:1,relevantWhen:{PIWI_AI_EMBEDDING_MODEL:"*"},notes:"Must be greater than 0 and at most 1; invalid values fall back to the default."},PIWI_CLUSTER_SUGGEST_THRESHOLD:{description:"Similarity at which a failure is suggested (not auto-merged) as related to a cluster.",category:"clustering",type:"number",default:"0.80",min:0,max:1,relevantWhen:{PIWI_AI_EMBEDDING_MODEL:"*"},notes:"Capped at the merge threshold."},PIWI_SMTP_HOST:{description:"SMTP server hostname for outbound email.",category:"smtp",example:"smtp.example.com"},PIWI_SMTP_PORT:{description:"SMTP port (default 587; 465 for implicit TLS).",category:"smtp",type:"number",default:"587",min:1,max:65535,relevantWhen:{PIWI_SMTP_HOST:"*"}},PIWI_SMTP_USER:{description:"SMTP username.",category:"smtp",relevantWhen:{PIWI_SMTP_HOST:"*"},requiredWhen:{PIWI_SMTP_HOST:"*"}},PIWI_SMTP_PASS:{description:"SMTP password. Never returned by the API.",category:"smtp",secret:!0,relevantWhen:{PIWI_SMTP_HOST:"*"},requiredWhen:{PIWI_SMTP_HOST:"*"}},PIWI_SMTP_FROM:{description:"From address for outbound email (e.g. noreply@example.com).",category:"smtp",example:"noreply@example.com",relevantWhen:{PIWI_SMTP_HOST:"*"},requiredWhen:{PIWI_SMTP_HOST:"*"}},PIWI_SMTP_FROM_NAME:{description:"Display name for the from address (optional).",category:"smtp",default:"Piwi Dashboard",relevantWhen:{PIWI_SMTP_HOST:"*"}},PIWI_SMTP_SECURE:{description:'Set to "true" for implicit TLS on port 465 (default false → STARTTLS/plain).',category:"smtp",type:"boolean",relevantWhen:{PIWI_SMTP_HOST:"*"},notes:"Defaults to on when the port is 465, off otherwise."},PIWI_WASTED_WAIT_PATTERNS:{description:"Glob patterns (comma or newline separated) defining which wait steps count as wasted time. Locks the UI when set.",category:"wasted-time",type:"list",default:"Wait for timeout*,*waitForTimeout*",notes:"Case-insensitive globs (`*` and `?`) matched against a wait step’s title or source location. Use `*` to count every wait."},PIWI_DEMO_MODE:{description:'Set to "true" to build the standalone client-side demo SPA (no server).',category:"demo",runtimeOnly:!0,type:"boolean"},PIWI_BASE_URL:{description:"Base URL the metadata test spec targets (defaults to http://localhost:3000).",category:"test",runtimeOnly:!0},PIWI_POSTGRES_TEST_URL:{description:"PostgreSQL connection string used by the Postgres test suite.",category:"test",runtimeOnly:!0,secret:!0},PIWI_S3_TEST_BUCKET:{description:"S3 bucket for the storage integration tests.",category:"test",runtimeOnly:!0},PIWI_S3_TEST_REGION:{description:"Region for the S3 storage integration tests.",category:"test",runtimeOnly:!0},PIWI_S3_TEST_ACCESS_KEY_ID:{description:"Access key id for the S3 storage integration tests.",category:"test",runtimeOnly:!0,secret:!0},PIWI_S3_TEST_SECRET_ACCESS_KEY:{description:"Secret access key for the S3 storage integration tests.",category:"test",runtimeOnly:!0,secret:!0},PIWI_S3_TEST_ENDPOINT:{description:"Custom endpoint for the S3 storage integration tests.",category:"test",runtimeOnly:!0},PIWI_MAILPIT_URL:{description:"Mailpit base URL; when set, the email/notification E2E tests run against it.",category:"test",runtimeOnly:!0},PIWI_MAILPIT_SMTP_PORT:{description:"SMTP port the email E2E tests send to (Mailpit).",category:"test",runtimeOnly:!0},PIWI_EMAIL_SERVER_URL:{description:"Base URL the email test spec targets.",category:"test",runtimeOnly:!0}};function f(t){return y[t]}function ie(t){return Object.keys(y).filter(a=>y[a].category===t)}const V={key:0,class:"font-medium mb-1"},Y={class:"text-muted"},q={key:1,class:"mt-2 space-y-1"},F={class:"text-muted text-xs"},K={class:"flex flex-col gap-1.5"},$=["title","onClick"],Q={class:"block font-mono text-xs bg-elevated rounded px-1.5 py-0.5 select-all cursor-pointer group-hover:ring-1 ring-default"},j={key:0,class:"block text-muted text-[11px] mt-0.5"},z={key:2,class:"mt-2 flex flex-col gap-1"},J=W({__name:"HelpHint",props:{topic:{},title:{},text:{},doc:{},envVars:{},size:{}},setup(t){const a=t,{copy:h}=H(),s=_(()=>a.topic?U[a.topic]:null),o=_(()=>a.title??s.value?.title),A=_(()=>a.text??s.value?.text??""),I=_(()=>a.doc??s.value?.doc),d=_(()=>a.envVars??s.value?.envVars),g=k(!1);return(Z,c)=>{const T=N,S=X,R=M;return r(),m(R,{open:e(g),"onUpdate:open":c[0]||(c[0]=i=>v(g)?g.value=i:null),ui:{content:"max-w-xs p-3 text-sm"}},{content:u(()=>[e(o)?(r(),l("p",V,p(e(o)),1)):n("",!0),E("p",Y,p(e(A)),1),e(d)?.length?(r(),l("div",q,[E("p",F,"Environment variable"+p(e(d).length>1?"s":"")+":",1),E("div",K,[(r(!0),l(L,null,C(e(d),i=>(r(),l("button",{key:i,type:"button",class:"group text-left",title:`Click to copy ${i}`,onClick:ee=>e(h)(i,{toast:`Copied ${i}`})},[E("code",Q,p(i),1),e(f)(i).description?(r(),l("span",j,p(e(f)(i).description),1)):n("",!0)],8,$))),128))])])):n("",!0),e(I)||e(d)?.length?(r(),l("div",z,[e(I)?(r(),m(S,{key:0,to:e(I)},{default:u(()=>[...c[1]||(c[1]=[P("Learn more",-1)])]),_:1},8,["to"])):n("",!0),e(d)?.length?(r(),m(S,{key:1,to:"configuration"},{default:u(()=>[...c[2]||(c[2]=[P("Configuration reference",-1)])]),_:1})):n("",!0)])):n("",!0)]),default:u(()=>[D(T,{size:t.size??"xs",variant:"ghost",color:"neutral",icon:"i-lucide-circle-help","aria-label":e(o)?`Help: ${e(o)}`:"Help",title:"What is this?",class:"text-muted hover:text-default align-middle"},null,8,["size","aria-label"])]),_:1},8,["open"])}}}),oe=Object.assign(J,{__name:"HelpHint"});export{oe as _,X as a,w as d,ie as e,f as g};