plum-e2e 2.9.17 → 2.10.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 (705) hide show
  1. package/backend/constants/socketEvents.js +8 -14
  2. package/backend/lib/serverBootstrap.js +4 -4
  3. package/backend/mcp/server.js +3 -3
  4. package/backend/prisma/migrations/20260829000000_add_run_queue/migration.sql +29 -0
  5. package/backend/prisma/schema.prisma +30 -0
  6. package/backend/routes/active-runs.routes.js +10 -6
  7. package/backend/routes/node.routes.js +7 -0
  8. package/backend/routes/trigger.routes.js +8 -5
  9. package/backend/server.js +5 -1
  10. package/backend/services/cronService.js +15 -443
  11. package/backend/services/nodeExecutionService.js +13 -1
  12. package/backend/services/runExecutorService.js +423 -0
  13. package/backend/services/runQueueService.js +276 -0
  14. package/backend/services/runnerService.js +22 -4
  15. package/backend/services/triggerService.js +13 -231
  16. package/backend/websockets/socketHandler.js +32 -590
  17. package/frontend/.svelte-kit/adapter-node/.vite/manifest.json +35 -35
  18. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/BackLink.DRrgBGDC.css +6 -0
  19. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_layout.HkPnpRl9.css +6 -0
  20. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.B9H_IpSU.css +6 -0
  21. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.Be5c3USL.css +6 -0
  22. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.COwSGmmy.css +6 -0
  23. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.ClS4XkkN.css +6 -0
  24. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.Dp6vaGRc.css +6 -0
  25. package/frontend/.svelte-kit/adapter-node/chunks/BackLink.js +1 -1
  26. package/frontend/.svelte-kit/adapter-node/chunks/Badge.js +1 -1
  27. package/frontend/.svelte-kit/adapter-node/chunks/ConfirmModal.js +1 -1
  28. package/frontend/.svelte-kit/adapter-node/chunks/EmptyState.js +1 -1
  29. package/frontend/.svelte-kit/adapter-node/chunks/Modal.js +1 -1
  30. package/frontend/.svelte-kit/adapter-node/chunks/Toast.js +1 -1
  31. package/frontend/.svelte-kit/adapter-node/chunks/constants.js +6 -4
  32. package/frontend/.svelte-kit/adapter-node/chunks/format.js +3 -3
  33. package/frontend/.svelte-kit/adapter-node/chunks/index.js +4 -4
  34. package/frontend/.svelte-kit/adapter-node/chunks/internal.js +1 -1
  35. package/frontend/.svelte-kit/adapter-node/chunks/reports.js +1 -1
  36. package/frontend/.svelte-kit/adapter-node/chunks/reports2.js +38 -40
  37. package/frontend/.svelte-kit/adapter-node/chunks/repository.js +8 -0
  38. package/frontend/.svelte-kit/adapter-node/chunks/runner.js +10 -20
  39. package/frontend/.svelte-kit/adapter-node/entries/pages/live/_id_/_page.svelte.js +254 -0
  40. package/frontend/.svelte-kit/adapter-node/entries/pages/login/_page.svelte.js +1 -1
  41. package/frontend/.svelte-kit/adapter-node/entries/pages/reports/_id_/_page.svelte.js +29 -24
  42. package/frontend/.svelte-kit/adapter-node/entries/pages/reports/_page.svelte.js +23 -19
  43. package/frontend/.svelte-kit/adapter-node/entries/pages/scheduled-tests/_page.svelte.js +3 -3
  44. package/frontend/.svelte-kit/adapter-node/entries/pages/settings/_page.svelte.js +173 -51
  45. package/frontend/.svelte-kit/adapter-node/entries/pages/setup/_page.svelte.js +1 -1
  46. package/frontend/.svelte-kit/adapter-node/entries/pages/test-repository/runs/_id_/_page.svelte.js +1 -1
  47. package/frontend/.svelte-kit/adapter-node/entries/pages/test-repository/suites/_id_/_page.svelte.js +63 -11
  48. package/frontend/.svelte-kit/adapter-node/manifest-full.js +10 -10
  49. package/frontend/.svelte-kit/adapter-node/manifest.js +10 -10
  50. package/frontend/.svelte-kit/adapter-node/nodes/0.js +2 -2
  51. package/frontend/.svelte-kit/adapter-node/nodes/1.js +1 -1
  52. package/frontend/.svelte-kit/adapter-node/nodes/10.js +1 -1
  53. package/frontend/.svelte-kit/adapter-node/nodes/11.js +1 -1
  54. package/frontend/.svelte-kit/adapter-node/nodes/12.js +2 -2
  55. package/frontend/.svelte-kit/adapter-node/nodes/2.js +1 -1
  56. package/frontend/.svelte-kit/adapter-node/nodes/3.js +3 -3
  57. package/frontend/.svelte-kit/adapter-node/nodes/4.js +3 -3
  58. package/frontend/.svelte-kit/adapter-node/nodes/5.js +3 -3
  59. package/frontend/.svelte-kit/adapter-node/nodes/6.js +3 -3
  60. package/frontend/.svelte-kit/adapter-node/nodes/7.js +1 -1
  61. package/frontend/.svelte-kit/adapter-node/nodes/8.js +2 -2
  62. package/frontend/.svelte-kit/adapter-node/nodes/9.js +1 -1
  63. package/frontend/.svelte-kit/ambient.d.ts +28 -28
  64. package/frontend/.svelte-kit/generated/client/app.js +4 -4
  65. package/frontend/.svelte-kit/generated/client/nodes/13.js +6 -0
  66. package/frontend/.svelte-kit/generated/client/nodes/3.js +1 -1
  67. package/frontend/.svelte-kit/generated/client/nodes/4.js +1 -1
  68. package/frontend/.svelte-kit/generated/client/nodes/5.js +1 -1
  69. package/frontend/.svelte-kit/generated/client/nodes/6.js +1 -1
  70. package/frontend/.svelte-kit/generated/client-optimized/app.js +4 -4
  71. package/frontend/.svelte-kit/generated/client-optimized/nodes/3.js +1 -1
  72. package/frontend/.svelte-kit/generated/client-optimized/nodes/4.js +1 -1
  73. package/frontend/.svelte-kit/generated/client-optimized/nodes/5.js +1 -1
  74. package/frontend/.svelte-kit/generated/client-optimized/nodes/6.js +1 -1
  75. package/frontend/.svelte-kit/generated/server/internal.js +1 -1
  76. package/frontend/.svelte-kit/output/client/.vite/manifest.json +413 -401
  77. package/frontend/.svelte-kit/output/client/_app/immutable/assets/0.CmJTG5mP.css +6 -0
  78. package/frontend/.svelte-kit/output/client/_app/immutable/assets/12.B9H_IpSU.css +6 -0
  79. package/frontend/.svelte-kit/output/client/_app/immutable/assets/3.Be5c3USL.css +6 -0
  80. package/frontend/.svelte-kit/output/client/_app/immutable/assets/5.ClS4XkkN.css +6 -0
  81. package/frontend/.svelte-kit/output/client/_app/immutable/assets/6.BN5XbLUX.css +6 -0
  82. package/frontend/.svelte-kit/output/client/_app/immutable/assets/8.COwSGmmy.css +6 -0
  83. package/frontend/.svelte-kit/output/client/_app/immutable/assets/BackLink.DRrgBGDC.css +6 -0
  84. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_layout.HkPnpRl9.css +6 -0
  85. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.B9H_IpSU.css +6 -0
  86. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.Be5c3USL.css +6 -0
  87. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.COwSGmmy.css +6 -0
  88. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.ClS4XkkN.css +6 -0
  89. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.Dp6vaGRc.css +6 -0
  90. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/2-KCkWZO.js +6 -0
  91. package/frontend/{build/client/_app/immutable/chunks/CNdcuGR0.js → .svelte-kit/output/client/_app/immutable/chunks/B00vxw57.js} +1 -1
  92. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/B0_HKFXV.js +6 -0
  93. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{t-La0hgu.js → BAvTKHxT.js} +1 -1
  94. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BJ_ypKl3.js +6 -0
  95. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BbYY_TzB.js +6 -0
  96. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Beula-TH.js +11 -0
  97. package/frontend/{build/client/_app/immutable/chunks/CKDtmZUQ.js → .svelte-kit/output/client/_app/immutable/chunks/C00jnSU2.js} +1 -1
  98. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/C2_rQ4aY.js +175 -0
  99. package/frontend/{build/client/_app/immutable/chunks/DCgHuuvs.js → .svelte-kit/output/client/_app/immutable/chunks/C7uEQ-LH.js} +1 -1
  100. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/C8S7qQjQ.js +6 -0
  101. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{CzlPaHY9.js → CZWchtW8.js} +1 -1
  102. package/frontend/{build/client/_app/immutable/chunks/2zMvi6fR.js → .svelte-kit/output/client/_app/immutable/chunks/CboYYxrf.js} +1 -1
  103. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CeH-RgMb.js +6 -0
  104. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{CgnwuKKO.js → CegSvdD-.js} +1 -1
  105. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CfkUW1vA.js +6 -0
  106. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Cfmt4_tJ.js +6 -0
  107. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Cgw8TOOy.js +6 -0
  108. package/frontend/{build/client/_app/immutable/chunks/C1Vid6wz.js → .svelte-kit/output/client/_app/immutable/chunks/Ck6C3Fl0.js} +1 -1
  109. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CoTEzvLa.js +6 -0
  110. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{DMZwI8Cj.js → DAmOMhaf.js} +1 -1
  111. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DB3YXVFP.js +6 -0
  112. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{w0D4Uzlq.js → DWzEJYIF.js} +1 -1
  113. package/frontend/{build/client/_app/immutable/chunks/CMEtqUfQ.js → .svelte-kit/output/client/_app/immutable/chunks/DgQy0SB2.js} +1 -1
  114. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{kkA1mrsH.js → DiVmSEJa.js} +2 -2
  115. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Dl-F6VCo.js +6 -0
  116. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DuAVKaL3.js +6 -0
  117. package/frontend/{build/client/_app/immutable/chunks/BmZ9upwL.js → .svelte-kit/output/client/_app/immutable/chunks/GDjpV3r7.js} +1 -1
  118. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/K1h4wprj.js +6 -0
  119. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{DDZw0L0T.js → d2K3c8Kx.js} +1 -1
  120. package/frontend/.svelte-kit/output/client/_app/immutable/entry/app.DRjRA71t.js +7 -0
  121. package/frontend/{build/client/_app/immutable/entry/start.4qxHHAcl.js → .svelte-kit/output/client/_app/immutable/entry/start.BXOLyf9R.js} +1 -1
  122. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/0.CRb8Nyce.js +6 -0
  123. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{1.Df9sLw8b.js → 1.BI97il3r.js} +1 -1
  124. package/frontend/{build/client/_app/immutable/nodes/10.DEbnxfND.js → .svelte-kit/output/client/_app/immutable/nodes/10.kyazROhw.js} +1 -1
  125. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{11.BViaDK2m.js → 11.B3vMgT2v.js} +1 -1
  126. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/12.DkPcIrgW.js +6 -0
  127. package/frontend/{build/client/_app/immutable/nodes/2.BCPSg7H4.js → .svelte-kit/output/client/_app/immutable/nodes/2.Dr6yugXz.js} +1 -1
  128. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/3.DUiL7fb5.js +6 -0
  129. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{3.8BFAJoHT.js → 4.DDADylfF.js} +1 -1
  130. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/5.N4CeDeoD.js +6 -0
  131. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/6.DWd93Bv5.js +10 -0
  132. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/7.c8d1cQQM.js +6 -0
  133. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/8.Cvd3MauU.js +9 -0
  134. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{9.CvfGx3Hu.js → 9.BOK0GNF_.js} +1 -1
  135. package/frontend/.svelte-kit/output/client/_app/version.json +1 -1
  136. package/frontend/.svelte-kit/output/server/.vite/manifest.json +35 -35
  137. package/frontend/.svelte-kit/output/server/_app/immutable/assets/BackLink.DRrgBGDC.css +6 -0
  138. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_layout.HkPnpRl9.css +6 -0
  139. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.B9H_IpSU.css +6 -0
  140. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.Be5c3USL.css +6 -0
  141. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.COwSGmmy.css +6 -0
  142. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.ClS4XkkN.css +6 -0
  143. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.Dp6vaGRc.css +6 -0
  144. package/frontend/.svelte-kit/output/server/chunks/BackLink.js +1 -1
  145. package/frontend/.svelte-kit/output/server/chunks/Badge.js +1 -1
  146. package/frontend/.svelte-kit/output/server/chunks/ConfirmModal.js +1 -1
  147. package/frontend/.svelte-kit/output/server/chunks/EmptyState.js +1 -1
  148. package/frontend/.svelte-kit/output/server/chunks/Modal.js +1 -1
  149. package/frontend/.svelte-kit/output/server/chunks/Toast.js +1 -1
  150. package/frontend/.svelte-kit/output/server/chunks/constants.js +6 -4
  151. package/frontend/.svelte-kit/output/server/chunks/format.js +3 -3
  152. package/frontend/.svelte-kit/output/server/chunks/index.js +4 -4
  153. package/frontend/.svelte-kit/output/server/chunks/internal.js +1 -1
  154. package/frontend/.svelte-kit/output/server/chunks/reports.js +1 -1
  155. package/frontend/.svelte-kit/output/server/chunks/reports2.js +38 -40
  156. package/frontend/.svelte-kit/output/server/chunks/repository.js +8 -0
  157. package/frontend/.svelte-kit/output/server/chunks/runner.js +10 -20
  158. package/frontend/.svelte-kit/output/server/entries/pages/live/_id_/_page.svelte.js +254 -0
  159. package/frontend/.svelte-kit/output/server/entries/pages/login/_page.svelte.js +1 -1
  160. package/frontend/.svelte-kit/output/server/entries/pages/reports/_id_/_page.svelte.js +29 -24
  161. package/frontend/.svelte-kit/output/server/entries/pages/reports/_page.svelte.js +23 -19
  162. package/frontend/.svelte-kit/output/server/entries/pages/scheduled-tests/_page.svelte.js +3 -3
  163. package/frontend/.svelte-kit/output/server/entries/pages/settings/_page.svelte.js +173 -51
  164. package/frontend/.svelte-kit/output/server/entries/pages/setup/_page.svelte.js +1 -1
  165. package/frontend/.svelte-kit/output/server/entries/pages/test-repository/runs/_id_/_page.svelte.js +1 -1
  166. package/frontend/.svelte-kit/output/server/entries/pages/test-repository/suites/_id_/_page.svelte.js +63 -11
  167. package/frontend/.svelte-kit/output/server/manifest-full.js +10 -10
  168. package/frontend/.svelte-kit/output/server/manifest.js +10 -10
  169. package/frontend/.svelte-kit/output/server/nodes/0.js +2 -2
  170. package/frontend/.svelte-kit/output/server/nodes/1.js +1 -1
  171. package/frontend/.svelte-kit/output/server/nodes/10.js +1 -1
  172. package/frontend/.svelte-kit/output/server/nodes/11.js +1 -1
  173. package/frontend/.svelte-kit/output/server/nodes/12.js +2 -2
  174. package/frontend/.svelte-kit/output/server/nodes/2.js +1 -1
  175. package/frontend/.svelte-kit/output/server/nodes/3.js +3 -3
  176. package/frontend/.svelte-kit/output/server/nodes/4.js +3 -3
  177. package/frontend/.svelte-kit/output/server/nodes/5.js +3 -3
  178. package/frontend/.svelte-kit/output/server/nodes/6.js +3 -3
  179. package/frontend/.svelte-kit/output/server/nodes/7.js +1 -1
  180. package/frontend/.svelte-kit/output/server/nodes/8.js +2 -2
  181. package/frontend/.svelte-kit/output/server/nodes/9.js +1 -1
  182. package/frontend/build/client/_app/immutable/assets/0.CmJTG5mP.css +6 -0
  183. package/frontend/build/client/_app/immutable/assets/0.CmJTG5mP.css.br +0 -0
  184. package/frontend/build/client/_app/immutable/assets/0.CmJTG5mP.css.gz +0 -0
  185. package/frontend/build/client/_app/immutable/assets/12.B9H_IpSU.css +6 -0
  186. package/frontend/build/client/_app/immutable/assets/12.B9H_IpSU.css.br +0 -0
  187. package/frontend/build/client/_app/immutable/assets/12.B9H_IpSU.css.gz +0 -0
  188. package/frontend/build/client/_app/immutable/assets/3.Be5c3USL.css +6 -0
  189. package/frontend/build/client/_app/immutable/assets/3.Be5c3USL.css.br +0 -0
  190. package/frontend/build/client/_app/immutable/assets/3.Be5c3USL.css.gz +0 -0
  191. package/frontend/build/client/_app/immutable/assets/5.ClS4XkkN.css +6 -0
  192. package/frontend/build/client/_app/immutable/assets/5.ClS4XkkN.css.br +0 -0
  193. package/frontend/build/client/_app/immutable/assets/5.ClS4XkkN.css.gz +0 -0
  194. package/frontend/build/client/_app/immutable/assets/6.BN5XbLUX.css +6 -0
  195. package/frontend/build/client/_app/immutable/assets/6.BN5XbLUX.css.br +0 -0
  196. package/frontend/build/client/_app/immutable/assets/6.BN5XbLUX.css.gz +0 -0
  197. package/frontend/build/client/_app/immutable/assets/8.COwSGmmy.css +6 -0
  198. package/frontend/build/client/_app/immutable/assets/8.COwSGmmy.css.br +0 -0
  199. package/frontend/build/client/_app/immutable/assets/8.COwSGmmy.css.gz +0 -0
  200. package/frontend/build/client/_app/immutable/assets/BackLink.DRrgBGDC.css +6 -0
  201. package/frontend/build/client/_app/immutable/assets/BackLink.DRrgBGDC.css.br +0 -0
  202. package/frontend/build/client/_app/immutable/assets/BackLink.DRrgBGDC.css.gz +0 -0
  203. package/frontend/build/client/_app/immutable/assets/_layout.HkPnpRl9.css +6 -0
  204. package/frontend/build/client/_app/immutable/assets/_layout.HkPnpRl9.css.br +0 -0
  205. package/frontend/build/client/_app/immutable/assets/_layout.HkPnpRl9.css.gz +0 -0
  206. package/frontend/build/client/_app/immutable/assets/_page.B9H_IpSU.css +6 -0
  207. package/frontend/build/client/_app/immutable/assets/_page.B9H_IpSU.css.br +0 -0
  208. package/frontend/build/client/_app/immutable/assets/_page.B9H_IpSU.css.gz +0 -0
  209. package/frontend/build/client/_app/immutable/assets/_page.Be5c3USL.css +6 -0
  210. package/frontend/build/client/_app/immutable/assets/_page.Be5c3USL.css.br +0 -0
  211. package/frontend/build/client/_app/immutable/assets/_page.Be5c3USL.css.gz +0 -0
  212. package/frontend/build/client/_app/immutable/assets/_page.COwSGmmy.css +6 -0
  213. package/frontend/build/client/_app/immutable/assets/_page.COwSGmmy.css.br +0 -0
  214. package/frontend/build/client/_app/immutable/assets/_page.COwSGmmy.css.gz +0 -0
  215. package/frontend/build/client/_app/immutable/assets/_page.ClS4XkkN.css +6 -0
  216. package/frontend/build/client/_app/immutable/assets/_page.ClS4XkkN.css.br +0 -0
  217. package/frontend/build/client/_app/immutable/assets/_page.ClS4XkkN.css.gz +0 -0
  218. package/frontend/build/client/_app/immutable/assets/_page.Dp6vaGRc.css +6 -0
  219. package/frontend/build/client/_app/immutable/assets/_page.Dp6vaGRc.css.br +0 -0
  220. package/frontend/build/client/_app/immutable/assets/_page.Dp6vaGRc.css.gz +0 -0
  221. package/frontend/build/client/_app/immutable/chunks/2-KCkWZO.js +6 -0
  222. package/frontend/build/client/_app/immutable/chunks/2-KCkWZO.js.br +0 -0
  223. package/frontend/build/client/_app/immutable/chunks/2-KCkWZO.js.gz +0 -0
  224. package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/CNdcuGR0.js → build/client/_app/immutable/chunks/B00vxw57.js} +1 -1
  225. package/frontend/build/client/_app/immutable/chunks/B00vxw57.js.br +0 -0
  226. package/frontend/build/client/_app/immutable/chunks/B00vxw57.js.gz +0 -0
  227. package/frontend/build/client/_app/immutable/chunks/B0_HKFXV.js +6 -0
  228. package/frontend/build/client/_app/immutable/chunks/B0_HKFXV.js.br +0 -0
  229. package/frontend/build/client/_app/immutable/chunks/B0_HKFXV.js.gz +0 -0
  230. package/frontend/build/client/_app/immutable/chunks/{t-La0hgu.js → BAvTKHxT.js} +1 -1
  231. package/frontend/build/client/_app/immutable/chunks/BAvTKHxT.js.br +0 -0
  232. package/frontend/build/client/_app/immutable/chunks/BAvTKHxT.js.gz +0 -0
  233. package/frontend/build/client/_app/immutable/chunks/BJ_ypKl3.js +6 -0
  234. package/frontend/build/client/_app/immutable/chunks/BJ_ypKl3.js.br +0 -0
  235. package/frontend/build/client/_app/immutable/chunks/BJ_ypKl3.js.gz +0 -0
  236. package/frontend/build/client/_app/immutable/chunks/BbYY_TzB.js +6 -0
  237. package/frontend/build/client/_app/immutable/chunks/BbYY_TzB.js.br +0 -0
  238. package/frontend/build/client/_app/immutable/chunks/BbYY_TzB.js.gz +0 -0
  239. package/frontend/build/client/_app/immutable/chunks/Beula-TH.js +11 -0
  240. package/frontend/build/client/_app/immutable/chunks/Beula-TH.js.br +0 -0
  241. package/frontend/build/client/_app/immutable/chunks/Beula-TH.js.gz +0 -0
  242. package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/CKDtmZUQ.js → build/client/_app/immutable/chunks/C00jnSU2.js} +1 -1
  243. package/frontend/build/client/_app/immutable/chunks/C00jnSU2.js.br +0 -0
  244. package/frontend/build/client/_app/immutable/chunks/C00jnSU2.js.gz +0 -0
  245. package/frontend/build/client/_app/immutable/chunks/C2_rQ4aY.js +175 -0
  246. package/frontend/build/client/_app/immutable/chunks/C2_rQ4aY.js.br +0 -0
  247. package/frontend/build/client/_app/immutable/chunks/C2_rQ4aY.js.gz +0 -0
  248. package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/DCgHuuvs.js → build/client/_app/immutable/chunks/C7uEQ-LH.js} +1 -1
  249. package/frontend/build/client/_app/immutable/chunks/C7uEQ-LH.js.br +0 -0
  250. package/frontend/build/client/_app/immutable/chunks/C7uEQ-LH.js.gz +0 -0
  251. package/frontend/build/client/_app/immutable/chunks/C8S7qQjQ.js +6 -0
  252. package/frontend/build/client/_app/immutable/chunks/C8S7qQjQ.js.br +0 -0
  253. package/frontend/build/client/_app/immutable/chunks/C8S7qQjQ.js.gz +0 -0
  254. package/frontend/build/client/_app/immutable/chunks/{CzlPaHY9.js → CZWchtW8.js} +1 -1
  255. package/frontend/build/client/_app/immutable/chunks/CZWchtW8.js.br +0 -0
  256. package/frontend/build/client/_app/immutable/chunks/CZWchtW8.js.gz +0 -0
  257. package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/2zMvi6fR.js → build/client/_app/immutable/chunks/CboYYxrf.js} +1 -1
  258. package/frontend/build/client/_app/immutable/chunks/CboYYxrf.js.br +6 -0
  259. package/frontend/build/client/_app/immutable/chunks/CboYYxrf.js.gz +0 -0
  260. package/frontend/build/client/_app/immutable/chunks/CeH-RgMb.js +6 -0
  261. package/frontend/build/client/_app/immutable/chunks/CeH-RgMb.js.br +0 -0
  262. package/frontend/build/client/_app/immutable/chunks/CeH-RgMb.js.gz +0 -0
  263. package/frontend/build/client/_app/immutable/chunks/{CgnwuKKO.js → CegSvdD-.js} +1 -1
  264. package/frontend/build/client/_app/immutable/chunks/CegSvdD-.js.br +0 -0
  265. package/frontend/build/client/_app/immutable/chunks/CegSvdD-.js.gz +0 -0
  266. package/frontend/build/client/_app/immutable/chunks/CfkUW1vA.js +6 -0
  267. package/frontend/build/client/_app/immutable/chunks/CfkUW1vA.js.br +0 -0
  268. package/frontend/build/client/_app/immutable/chunks/CfkUW1vA.js.gz +0 -0
  269. package/frontend/build/client/_app/immutable/chunks/Cfmt4_tJ.js +6 -0
  270. package/frontend/build/client/_app/immutable/chunks/Cfmt4_tJ.js.br +0 -0
  271. package/frontend/build/client/_app/immutable/chunks/Cfmt4_tJ.js.gz +0 -0
  272. package/frontend/build/client/_app/immutable/chunks/Cgw8TOOy.js +6 -0
  273. package/frontend/build/client/_app/immutable/chunks/Cgw8TOOy.js.br +0 -0
  274. package/frontend/build/client/_app/immutable/chunks/Cgw8TOOy.js.gz +0 -0
  275. package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/C1Vid6wz.js → build/client/_app/immutable/chunks/Ck6C3Fl0.js} +1 -1
  276. package/frontend/build/client/_app/immutable/chunks/Ck6C3Fl0.js.br +0 -0
  277. package/frontend/build/client/_app/immutable/chunks/Ck6C3Fl0.js.gz +0 -0
  278. package/frontend/build/client/_app/immutable/chunks/CoTEzvLa.js +6 -0
  279. package/frontend/build/client/_app/immutable/chunks/CoTEzvLa.js.br +0 -0
  280. package/frontend/build/client/_app/immutable/chunks/CoTEzvLa.js.gz +0 -0
  281. package/frontend/build/client/_app/immutable/chunks/{DMZwI8Cj.js → DAmOMhaf.js} +1 -1
  282. package/frontend/build/client/_app/immutable/chunks/DAmOMhaf.js.br +0 -0
  283. package/frontend/build/client/_app/immutable/chunks/DAmOMhaf.js.gz +0 -0
  284. package/frontend/build/client/_app/immutable/chunks/DB3YXVFP.js +6 -0
  285. package/frontend/build/client/_app/immutable/chunks/DB3YXVFP.js.br +0 -0
  286. package/frontend/build/client/_app/immutable/chunks/DB3YXVFP.js.gz +0 -0
  287. package/frontend/build/client/_app/immutable/chunks/{w0D4Uzlq.js → DWzEJYIF.js} +1 -1
  288. package/frontend/build/client/_app/immutable/chunks/DWzEJYIF.js.br +7 -0
  289. package/frontend/build/client/_app/immutable/chunks/DWzEJYIF.js.gz +0 -0
  290. package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/CMEtqUfQ.js → build/client/_app/immutable/chunks/DgQy0SB2.js} +1 -1
  291. package/frontend/build/client/_app/immutable/chunks/DgQy0SB2.js.br +0 -0
  292. package/frontend/build/client/_app/immutable/chunks/DgQy0SB2.js.gz +0 -0
  293. package/frontend/build/client/_app/immutable/chunks/{kkA1mrsH.js → DiVmSEJa.js} +2 -2
  294. package/frontend/build/client/_app/immutable/chunks/DiVmSEJa.js.br +0 -0
  295. package/frontend/build/client/_app/immutable/chunks/DiVmSEJa.js.gz +0 -0
  296. package/frontend/build/client/_app/immutable/chunks/Dl-F6VCo.js +6 -0
  297. package/frontend/build/client/_app/immutable/chunks/Dl-F6VCo.js.br +0 -0
  298. package/frontend/build/client/_app/immutable/chunks/Dl-F6VCo.js.gz +0 -0
  299. package/frontend/build/client/_app/immutable/chunks/DuAVKaL3.js +6 -0
  300. package/frontend/build/client/_app/immutable/chunks/DuAVKaL3.js.br +0 -0
  301. package/frontend/build/client/_app/immutable/chunks/DuAVKaL3.js.gz +0 -0
  302. package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/BmZ9upwL.js → build/client/_app/immutable/chunks/GDjpV3r7.js} +1 -1
  303. package/frontend/build/client/_app/immutable/chunks/GDjpV3r7.js.br +0 -0
  304. package/frontend/build/client/_app/immutable/chunks/GDjpV3r7.js.gz +0 -0
  305. package/frontend/build/client/_app/immutable/chunks/K1h4wprj.js +6 -0
  306. package/frontend/build/client/_app/immutable/chunks/K1h4wprj.js.br +0 -0
  307. package/frontend/build/client/_app/immutable/chunks/K1h4wprj.js.gz +0 -0
  308. package/frontend/build/client/_app/immutable/chunks/{DDZw0L0T.js → d2K3c8Kx.js} +1 -1
  309. package/frontend/build/client/_app/immutable/chunks/d2K3c8Kx.js.br +0 -0
  310. package/frontend/build/client/_app/immutable/chunks/d2K3c8Kx.js.gz +0 -0
  311. package/frontend/build/client/_app/immutable/entry/app.DRjRA71t.js +7 -0
  312. package/frontend/build/client/_app/immutable/entry/app.DRjRA71t.js.br +0 -0
  313. package/frontend/build/client/_app/immutable/entry/app.DRjRA71t.js.gz +0 -0
  314. package/frontend/{.svelte-kit/output/client/_app/immutable/entry/start.4qxHHAcl.js → build/client/_app/immutable/entry/start.BXOLyf9R.js} +1 -1
  315. package/frontend/build/client/_app/immutable/entry/{start.4qxHHAcl.js.br → start.BXOLyf9R.js.br} +1 -1
  316. package/frontend/build/client/_app/immutable/entry/{start.4qxHHAcl.js.gz → start.BXOLyf9R.js.gz} +0 -0
  317. package/frontend/build/client/_app/immutable/nodes/0.CRb8Nyce.js +6 -0
  318. package/frontend/build/client/_app/immutable/nodes/0.CRb8Nyce.js.br +0 -0
  319. package/frontend/build/client/_app/immutable/nodes/0.CRb8Nyce.js.gz +0 -0
  320. package/frontend/build/client/_app/immutable/nodes/{1.Df9sLw8b.js → 1.BI97il3r.js} +1 -1
  321. package/frontend/build/client/_app/immutable/nodes/1.BI97il3r.js.br +0 -0
  322. package/frontend/build/client/_app/immutable/nodes/1.BI97il3r.js.gz +0 -0
  323. package/frontend/{.svelte-kit/output/client/_app/immutable/nodes/10.DEbnxfND.js → build/client/_app/immutable/nodes/10.kyazROhw.js} +1 -1
  324. package/frontend/build/client/_app/immutable/nodes/10.kyazROhw.js.br +0 -0
  325. package/frontend/build/client/_app/immutable/nodes/10.kyazROhw.js.gz +0 -0
  326. package/frontend/build/client/_app/immutable/nodes/{11.BViaDK2m.js → 11.B3vMgT2v.js} +1 -1
  327. package/frontend/build/client/_app/immutable/nodes/11.B3vMgT2v.js.br +0 -0
  328. package/frontend/build/client/_app/immutable/nodes/11.B3vMgT2v.js.gz +0 -0
  329. package/frontend/build/client/_app/immutable/nodes/12.DkPcIrgW.js +6 -0
  330. package/frontend/build/client/_app/immutable/nodes/12.DkPcIrgW.js.br +0 -0
  331. package/frontend/build/client/_app/immutable/nodes/12.DkPcIrgW.js.gz +0 -0
  332. package/frontend/{.svelte-kit/output/client/_app/immutable/nodes/2.BCPSg7H4.js → build/client/_app/immutable/nodes/2.Dr6yugXz.js} +1 -1
  333. package/frontend/build/client/_app/immutable/nodes/2.Dr6yugXz.js.br +0 -0
  334. package/frontend/build/client/_app/immutable/nodes/2.Dr6yugXz.js.gz +0 -0
  335. package/frontend/build/client/_app/immutable/nodes/3.DUiL7fb5.js +6 -0
  336. package/frontend/build/client/_app/immutable/nodes/3.DUiL7fb5.js.br +0 -0
  337. package/frontend/build/client/_app/immutable/nodes/3.DUiL7fb5.js.gz +0 -0
  338. package/frontend/build/client/_app/immutable/nodes/{3.8BFAJoHT.js → 4.DDADylfF.js} +1 -1
  339. package/frontend/build/client/_app/immutable/nodes/4.DDADylfF.js.br +0 -0
  340. package/frontend/build/client/_app/immutable/nodes/4.DDADylfF.js.gz +0 -0
  341. package/frontend/build/client/_app/immutable/nodes/5.N4CeDeoD.js +6 -0
  342. package/frontend/build/client/_app/immutable/nodes/5.N4CeDeoD.js.br +0 -0
  343. package/frontend/build/client/_app/immutable/nodes/5.N4CeDeoD.js.gz +0 -0
  344. package/frontend/build/client/_app/immutable/nodes/6.DWd93Bv5.js +10 -0
  345. package/frontend/build/client/_app/immutable/nodes/6.DWd93Bv5.js.br +0 -0
  346. package/frontend/build/client/_app/immutable/nodes/6.DWd93Bv5.js.gz +0 -0
  347. package/frontend/build/client/_app/immutable/nodes/7.c8d1cQQM.js +6 -0
  348. package/frontend/build/client/_app/immutable/nodes/7.c8d1cQQM.js.br +0 -0
  349. package/frontend/build/client/_app/immutable/nodes/7.c8d1cQQM.js.gz +0 -0
  350. package/frontend/build/client/_app/immutable/nodes/8.Cvd3MauU.js +9 -0
  351. package/frontend/build/client/_app/immutable/nodes/8.Cvd3MauU.js.br +0 -0
  352. package/frontend/build/client/_app/immutable/nodes/8.Cvd3MauU.js.gz +0 -0
  353. package/frontend/build/client/_app/immutable/nodes/{9.CvfGx3Hu.js → 9.BOK0GNF_.js} +1 -1
  354. package/frontend/build/client/_app/immutable/nodes/9.BOK0GNF_.js.br +0 -0
  355. package/frontend/build/client/_app/immutable/nodes/9.BOK0GNF_.js.gz +0 -0
  356. package/frontend/build/client/_app/version.json +1 -1
  357. package/frontend/build/client/_app/version.json.br +0 -0
  358. package/frontend/build/client/_app/version.json.gz +0 -0
  359. package/frontend/build/server/chunks/0-_rljpEay.js +22 -0
  360. package/frontend/build/server/chunks/0-_rljpEay.js.map +5 -0
  361. package/frontend/build/server/chunks/{1-Kxn9d30Z.js → 1-B3HpigzL.js} +3 -3
  362. package/frontend/build/server/chunks/{1-Kxn9d30Z.js.map → 1-B3HpigzL.js.map} +1 -1
  363. package/frontend/build/server/chunks/10-BQBBYpxV.js +14 -0
  364. package/frontend/build/server/chunks/10-BQBBYpxV.js.map +5 -0
  365. package/frontend/build/server/chunks/11-10xw0TIP.js +14 -0
  366. package/frontend/build/server/chunks/11-10xw0TIP.js.map +5 -0
  367. package/frontend/build/server/chunks/12-CZ3_Uw3c.js +14 -0
  368. package/frontend/build/server/chunks/{12-De6Ol6pu.js.map → 12-CZ3_Uw3c.js.map} +1 -1
  369. package/frontend/build/server/chunks/2-DioMbKbC.js +14 -0
  370. package/frontend/build/server/chunks/{2-Dc_rKWoK.js.map → 2-DioMbKbC.js.map} +1 -1
  371. package/frontend/build/server/chunks/3-CgiZg_9v.js +14 -0
  372. package/frontend/build/server/chunks/3-CgiZg_9v.js.map +5 -0
  373. package/frontend/build/server/chunks/4-BM-49dbE.js +14 -0
  374. package/frontend/build/server/chunks/4-BM-49dbE.js.map +5 -0
  375. package/frontend/build/server/chunks/5-Brx_KOzy.js +14 -0
  376. package/frontend/build/server/chunks/5-Brx_KOzy.js.map +5 -0
  377. package/frontend/build/server/chunks/6-C5swINND.js +14 -0
  378. package/frontend/build/server/chunks/6-C5swINND.js.map +5 -0
  379. package/frontend/build/server/chunks/7-B8e4y3CB.js +14 -0
  380. package/frontend/build/server/chunks/{7-DiQJZEF_.js.map → 7-B8e4y3CB.js.map} +1 -1
  381. package/frontend/build/server/chunks/8-BZtkZMIZ.js +14 -0
  382. package/frontend/build/server/chunks/8-BZtkZMIZ.js.map +5 -0
  383. package/frontend/build/server/chunks/9-BMAKiAem.js +14 -0
  384. package/frontend/build/server/chunks/{9-DirZG_Lu.js.map → 9-BMAKiAem.js.map} +1 -1
  385. package/frontend/build/server/chunks/{BackLink-BJ8NaemM.js → BackLink-CMpNTYqE.js} +2 -2
  386. package/frontend/build/server/chunks/BackLink-CMpNTYqE.js.map +5 -0
  387. package/frontend/build/server/chunks/{Badge-44ZTDx0V.js → Badge-BTWnF9pA.js} +2 -2
  388. package/frontend/build/server/chunks/Badge-BTWnF9pA.js.map +5 -0
  389. package/frontend/build/server/chunks/{ConfirmModal-C0EAXcq_.js → ConfirmModal-CtGWHl0v.js} +3 -3
  390. package/frontend/build/server/chunks/ConfirmModal-CtGWHl0v.js.map +5 -0
  391. package/frontend/build/server/chunks/{EmptyState-BA_eXaeR.js → EmptyState-Zpm9tJe1.js} +2 -2
  392. package/frontend/build/server/chunks/EmptyState-Zpm9tJe1.js.map +5 -0
  393. package/frontend/build/server/chunks/{Modal-DChG187n.js → Modal-BJJMnfIg.js} +2 -2
  394. package/frontend/build/server/chunks/Modal-BJJMnfIg.js.map +5 -0
  395. package/frontend/build/server/chunks/{Toast-v-q4ZnYq.js → Toast-CHB87F8k.js} +2 -2
  396. package/frontend/build/server/chunks/Toast-CHB87F8k.js.map +5 -0
  397. package/frontend/build/server/chunks/{_layout.svelte-CHVI3Prt.js → _layout.svelte-C_6nsIpT.js} +7 -7
  398. package/frontend/build/server/chunks/{_layout.svelte-CHVI3Prt.js.map → _layout.svelte-C_6nsIpT.js.map} +1 -1
  399. package/frontend/build/server/chunks/{_page.svelte-1jo8MapI.js → _page.svelte-BNwU9zza.js} +11 -10
  400. package/frontend/build/server/chunks/_page.svelte-BNwU9zza.js.map +5 -0
  401. package/frontend/build/server/chunks/{_page.svelte-04WxjOuH.js → _page.svelte-Bamoq11m.js} +8 -8
  402. package/frontend/build/server/chunks/{_page.svelte-04WxjOuH.js.map → _page.svelte-Bamoq11m.js.map} +1 -1
  403. package/frontend/build/server/chunks/{_page.svelte-Kg69DDaM.js → _page.svelte-BrYksycU.js} +5 -5
  404. package/frontend/build/server/chunks/_page.svelte-BrYksycU.js.map +5 -0
  405. package/frontend/build/server/chunks/{_page.svelte-BuFusRK1.js → _page.svelte-CAlhaCzS.js} +12 -12
  406. package/frontend/build/server/chunks/_page.svelte-CAlhaCzS.js.map +5 -0
  407. package/frontend/build/server/chunks/_page.svelte-CTebwzwy.js +62 -0
  408. package/frontend/build/server/chunks/_page.svelte-CTebwzwy.js.map +5 -0
  409. package/frontend/build/server/chunks/{_page.svelte-1as75nPc.js → _page.svelte-CbTrCeeX.js} +32 -28
  410. package/frontend/build/server/chunks/_page.svelte-CbTrCeeX.js.map +5 -0
  411. package/frontend/build/server/chunks/{_page.svelte-D3E6Eojd.js → _page.svelte-Cf6bI1Y2.js} +5 -5
  412. package/frontend/build/server/chunks/_page.svelte-Cf6bI1Y2.js.map +5 -0
  413. package/frontend/build/server/chunks/{_page.svelte-CWWeZuid.js → _page.svelte-CmJKt3-H.js} +71 -19
  414. package/frontend/build/server/chunks/_page.svelte-CmJKt3-H.js.map +5 -0
  415. package/frontend/build/server/chunks/{_page.svelte-CB8-QBNg.js → _page.svelte-DHZhNTPg.js} +11 -10
  416. package/frontend/build/server/chunks/{_page.svelte-CB8-QBNg.js.map → _page.svelte-DHZhNTPg.js.map} +1 -1
  417. package/frontend/build/server/chunks/_page.svelte-DObTHQe2.js +257 -0
  418. package/frontend/build/server/chunks/_page.svelte-DObTHQe2.js.map +5 -0
  419. package/frontend/build/server/chunks/{_page.svelte-8gELc_B1.js → _page.svelte-ywHy9KCh.js} +182 -59
  420. package/frontend/build/server/chunks/_page.svelte-ywHy9KCh.js.map +5 -0
  421. package/frontend/build/server/chunks/{auth-Chw-wBpI.js → auth-DDPlushv.js} +2 -2
  422. package/frontend/build/server/chunks/{auth-Chw-wBpI.js.map → auth-DDPlushv.js.map} +1 -1
  423. package/frontend/build/server/chunks/{client-DEmxR_a-.js → client-CsTiGNZy.js} +2 -2
  424. package/frontend/build/server/chunks/{client-DEmxR_a-.js.map → client-CsTiGNZy.js.map} +1 -1
  425. package/frontend/build/server/chunks/{constants-CXTaQaB6.js → constants-BYVkTZ-O.js} +3 -2
  426. package/frontend/build/server/chunks/constants-BYVkTZ-O.js.map +5 -0
  427. package/frontend/build/server/chunks/{error.svelte-BD3xNemk.js → error.svelte-BXr4lXlB.js} +3 -3
  428. package/frontend/build/server/chunks/{error.svelte-BD3xNemk.js.map → error.svelte-BXr4lXlB.js.map} +1 -1
  429. package/frontend/build/server/chunks/{format-CiNRMfHu.js → format-2pqy61MU.js} +2 -2
  430. package/frontend/build/server/chunks/{format-CiNRMfHu.js.map → format-2pqy61MU.js.map} +1 -1
  431. package/frontend/build/server/chunks/{index-server-B3M9vyh2.js → index-server-53nOZg5X.js} +2 -2
  432. package/frontend/build/server/chunks/{index-server-B3M9vyh2.js.map → index-server-53nOZg5X.js.map} +1 -1
  433. package/frontend/build/server/chunks/{index2-5R1tbrep.js → index2-DGcbugKe.js} +2 -2
  434. package/frontend/build/server/chunks/{index2-5R1tbrep.js.map → index2-DGcbugKe.js.map} +1 -1
  435. package/frontend/build/server/chunks/{reports-D_ApeeNh.js → reports-WuXG6tj3.js} +2 -2
  436. package/frontend/build/server/chunks/{reports-D_ApeeNh.js.map → reports-WuXG6tj3.js.map} +1 -1
  437. package/frontend/build/server/chunks/{reports2-BtElN_53.js → reports2-CCpI0xkQ.js} +7 -8
  438. package/frontend/build/server/chunks/reports2-CCpI0xkQ.js.map +5 -0
  439. package/frontend/build/server/chunks/{repository-FYYV_vKE.js → repository-TYWcFuWP.js} +6 -2
  440. package/frontend/build/server/chunks/repository-TYWcFuWP.js.map +5 -0
  441. package/frontend/build/server/chunks/runner-D5yCWOsy.js +27 -0
  442. package/frontend/build/server/chunks/runner-D5yCWOsy.js.map +5 -0
  443. package/frontend/build/server/chunks/{stores-BLenR3c1.js → stores-C4ZkywTG.js} +3 -3
  444. package/frontend/build/server/chunks/{stores-BLenR3c1.js.map → stores-C4ZkywTG.js.map} +1 -1
  445. package/frontend/build/server/chunks/{theme-nAx-GvX_.js → theme-C81wSe5T.js} +2 -2
  446. package/frontend/build/server/chunks/{theme-nAx-GvX_.js.map → theme-C81wSe5T.js.map} +1 -1
  447. package/frontend/build/server/index.js +2 -2
  448. package/frontend/build/server/index.js.map +1 -1
  449. package/frontend/build/server/manifest.js +23 -23
  450. package/frontend/build/server/manifest.js.map +1 -1
  451. package/frontend/src/lib/components/layout/RunnerPanel.svelte +186 -266
  452. package/frontend/src/lib/copy/reports.js +9 -0
  453. package/frontend/src/lib/copy/runners.js +9 -6
  454. package/frontend/src/lib/socketEvents.js +3 -15
  455. package/frontend/src/lib/stores/runner.js +62 -46
  456. package/frontend/src/routes/{reports/live → live/[id]}/+page.svelte +112 -183
  457. package/frontend/src/routes/scheduled-tests/+page.svelte +2 -2
  458. package/package.json +1 -1
  459. package/backend/services/activeRunsService.js +0 -55
  460. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/BackLink.CvWWuO3h.css +0 -6
  461. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_layout.BuhMvMUj.css +0 -6
  462. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.0Eln51hV.css +0 -6
  463. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.BZfe6nWe.css +0 -6
  464. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.Bj_a_5lv.css +0 -6
  465. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.BwgOqeMo.css +0 -6
  466. package/frontend/.svelte-kit/adapter-node/_app/immutable/assets/_page.CFnbmY-D.css +0 -6
  467. package/frontend/.svelte-kit/adapter-node/entries/pages/reports/live/_page.svelte.js +0 -247
  468. package/frontend/.svelte-kit/output/client/_app/immutable/assets/0.BhSG-jZH.css +0 -6
  469. package/frontend/.svelte-kit/output/client/_app/immutable/assets/12.Bj_a_5lv.css +0 -6
  470. package/frontend/.svelte-kit/output/client/_app/immutable/assets/4.0Eln51hV.css +0 -6
  471. package/frontend/.svelte-kit/output/client/_app/immutable/assets/5.DFV9OgAu.css +0 -6
  472. package/frontend/.svelte-kit/output/client/_app/immutable/assets/6.CFnbmY-D.css +0 -6
  473. package/frontend/.svelte-kit/output/client/_app/immutable/assets/8.BwgOqeMo.css +0 -6
  474. package/frontend/.svelte-kit/output/client/_app/immutable/assets/BackLink.CvWWuO3h.css +0 -6
  475. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_layout.BuhMvMUj.css +0 -6
  476. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.0Eln51hV.css +0 -6
  477. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.BZfe6nWe.css +0 -6
  478. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.Bj_a_5lv.css +0 -6
  479. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.BwgOqeMo.css +0 -6
  480. package/frontend/.svelte-kit/output/client/_app/immutable/assets/_page.CFnbmY-D.css +0 -6
  481. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/3InFPLvE.js +0 -6
  482. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BAACMRH5.js +0 -6
  483. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BAMUGSh7.js +0 -6
  484. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BKuh57WU.js +0 -6
  485. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/BUwxRmHf.js +0 -6
  486. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/C8OURRSs.js +0 -6
  487. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CGeZlCaI.js +0 -6
  488. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CMBQQ9RZ.js +0 -6
  489. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CUC98kMZ.js +0 -6
  490. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/Co3xKhEp.js +0 -6
  491. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/CuqnZUex.js +0 -6
  492. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DHM6H-es.js +0 -7
  493. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DSLBMEpr.js +0 -6
  494. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/DbgD7JLa.js +0 -6
  495. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/TOCyHP97.js +0 -11
  496. package/frontend/.svelte-kit/output/client/_app/immutable/entry/app.KrtMZ3my.js +0 -7
  497. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/0.C8DodwXs.js +0 -11
  498. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/12.BMSCSd88.js +0 -6
  499. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/4.D-YT_JJe.js +0 -6
  500. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/5.DVeH2eQP.js +0 -6
  501. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/6.DI7-IJhN.js +0 -6
  502. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/7.C-pKvVZy.js +0 -6
  503. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/8.93Mb3ofT.js +0 -9
  504. package/frontend/.svelte-kit/output/server/_app/immutable/assets/BackLink.CvWWuO3h.css +0 -6
  505. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_layout.BuhMvMUj.css +0 -6
  506. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.0Eln51hV.css +0 -6
  507. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.BZfe6nWe.css +0 -6
  508. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.Bj_a_5lv.css +0 -6
  509. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.BwgOqeMo.css +0 -6
  510. package/frontend/.svelte-kit/output/server/_app/immutable/assets/_page.CFnbmY-D.css +0 -6
  511. package/frontend/.svelte-kit/output/server/entries/pages/reports/live/_page.svelte.js +0 -247
  512. package/frontend/build/client/_app/immutable/assets/0.BhSG-jZH.css +0 -6
  513. package/frontend/build/client/_app/immutable/assets/0.BhSG-jZH.css.br +0 -0
  514. package/frontend/build/client/_app/immutable/assets/0.BhSG-jZH.css.gz +0 -0
  515. package/frontend/build/client/_app/immutable/assets/12.Bj_a_5lv.css +0 -6
  516. package/frontend/build/client/_app/immutable/assets/12.Bj_a_5lv.css.br +0 -0
  517. package/frontend/build/client/_app/immutable/assets/12.Bj_a_5lv.css.gz +0 -0
  518. package/frontend/build/client/_app/immutable/assets/4.0Eln51hV.css +0 -6
  519. package/frontend/build/client/_app/immutable/assets/4.0Eln51hV.css.br +0 -0
  520. package/frontend/build/client/_app/immutable/assets/4.0Eln51hV.css.gz +0 -0
  521. package/frontend/build/client/_app/immutable/assets/5.DFV9OgAu.css +0 -6
  522. package/frontend/build/client/_app/immutable/assets/5.DFV9OgAu.css.br +0 -0
  523. package/frontend/build/client/_app/immutable/assets/5.DFV9OgAu.css.gz +0 -0
  524. package/frontend/build/client/_app/immutable/assets/6.CFnbmY-D.css +0 -6
  525. package/frontend/build/client/_app/immutable/assets/6.CFnbmY-D.css.br +0 -0
  526. package/frontend/build/client/_app/immutable/assets/6.CFnbmY-D.css.gz +0 -0
  527. package/frontend/build/client/_app/immutable/assets/8.BwgOqeMo.css +0 -6
  528. package/frontend/build/client/_app/immutable/assets/8.BwgOqeMo.css.br +0 -0
  529. package/frontend/build/client/_app/immutable/assets/8.BwgOqeMo.css.gz +0 -0
  530. package/frontend/build/client/_app/immutable/assets/BackLink.CvWWuO3h.css +0 -6
  531. package/frontend/build/client/_app/immutable/assets/BackLink.CvWWuO3h.css.br +0 -0
  532. package/frontend/build/client/_app/immutable/assets/BackLink.CvWWuO3h.css.gz +0 -0
  533. package/frontend/build/client/_app/immutable/assets/_layout.BuhMvMUj.css +0 -6
  534. package/frontend/build/client/_app/immutable/assets/_layout.BuhMvMUj.css.br +0 -0
  535. package/frontend/build/client/_app/immutable/assets/_layout.BuhMvMUj.css.gz +0 -0
  536. package/frontend/build/client/_app/immutable/assets/_page.0Eln51hV.css +0 -6
  537. package/frontend/build/client/_app/immutable/assets/_page.0Eln51hV.css.br +0 -0
  538. package/frontend/build/client/_app/immutable/assets/_page.0Eln51hV.css.gz +0 -0
  539. package/frontend/build/client/_app/immutable/assets/_page.BZfe6nWe.css +0 -6
  540. package/frontend/build/client/_app/immutable/assets/_page.BZfe6nWe.css.br +0 -0
  541. package/frontend/build/client/_app/immutable/assets/_page.BZfe6nWe.css.gz +0 -0
  542. package/frontend/build/client/_app/immutable/assets/_page.Bj_a_5lv.css +0 -6
  543. package/frontend/build/client/_app/immutable/assets/_page.Bj_a_5lv.css.br +0 -0
  544. package/frontend/build/client/_app/immutable/assets/_page.Bj_a_5lv.css.gz +0 -0
  545. package/frontend/build/client/_app/immutable/assets/_page.BwgOqeMo.css +0 -6
  546. package/frontend/build/client/_app/immutable/assets/_page.BwgOqeMo.css.br +0 -0
  547. package/frontend/build/client/_app/immutable/assets/_page.BwgOqeMo.css.gz +0 -0
  548. package/frontend/build/client/_app/immutable/assets/_page.CFnbmY-D.css +0 -6
  549. package/frontend/build/client/_app/immutable/assets/_page.CFnbmY-D.css.br +0 -0
  550. package/frontend/build/client/_app/immutable/assets/_page.CFnbmY-D.css.gz +0 -0
  551. package/frontend/build/client/_app/immutable/chunks/2zMvi6fR.js.br +0 -0
  552. package/frontend/build/client/_app/immutable/chunks/2zMvi6fR.js.gz +0 -0
  553. package/frontend/build/client/_app/immutable/chunks/3InFPLvE.js +0 -6
  554. package/frontend/build/client/_app/immutable/chunks/3InFPLvE.js.br +0 -0
  555. package/frontend/build/client/_app/immutable/chunks/3InFPLvE.js.gz +0 -0
  556. package/frontend/build/client/_app/immutable/chunks/BAACMRH5.js +0 -6
  557. package/frontend/build/client/_app/immutable/chunks/BAACMRH5.js.br +0 -0
  558. package/frontend/build/client/_app/immutable/chunks/BAACMRH5.js.gz +0 -0
  559. package/frontend/build/client/_app/immutable/chunks/BAMUGSh7.js +0 -6
  560. package/frontend/build/client/_app/immutable/chunks/BAMUGSh7.js.br +0 -0
  561. package/frontend/build/client/_app/immutable/chunks/BAMUGSh7.js.gz +0 -0
  562. package/frontend/build/client/_app/immutable/chunks/BKuh57WU.js +0 -6
  563. package/frontend/build/client/_app/immutable/chunks/BKuh57WU.js.br +0 -0
  564. package/frontend/build/client/_app/immutable/chunks/BKuh57WU.js.gz +0 -0
  565. package/frontend/build/client/_app/immutable/chunks/BUwxRmHf.js +0 -6
  566. package/frontend/build/client/_app/immutable/chunks/BUwxRmHf.js.br +0 -0
  567. package/frontend/build/client/_app/immutable/chunks/BUwxRmHf.js.gz +0 -0
  568. package/frontend/build/client/_app/immutable/chunks/BmZ9upwL.js.br +0 -0
  569. package/frontend/build/client/_app/immutable/chunks/BmZ9upwL.js.gz +0 -0
  570. package/frontend/build/client/_app/immutable/chunks/C1Vid6wz.js.br +0 -0
  571. package/frontend/build/client/_app/immutable/chunks/C1Vid6wz.js.gz +0 -0
  572. package/frontend/build/client/_app/immutable/chunks/C8OURRSs.js +0 -6
  573. package/frontend/build/client/_app/immutable/chunks/C8OURRSs.js.br +0 -0
  574. package/frontend/build/client/_app/immutable/chunks/C8OURRSs.js.gz +0 -0
  575. package/frontend/build/client/_app/immutable/chunks/CGeZlCaI.js +0 -6
  576. package/frontend/build/client/_app/immutable/chunks/CGeZlCaI.js.br +0 -0
  577. package/frontend/build/client/_app/immutable/chunks/CGeZlCaI.js.gz +0 -0
  578. package/frontend/build/client/_app/immutable/chunks/CKDtmZUQ.js.br +0 -0
  579. package/frontend/build/client/_app/immutable/chunks/CKDtmZUQ.js.gz +0 -0
  580. package/frontend/build/client/_app/immutable/chunks/CMBQQ9RZ.js +0 -6
  581. package/frontend/build/client/_app/immutable/chunks/CMBQQ9RZ.js.br +0 -0
  582. package/frontend/build/client/_app/immutable/chunks/CMBQQ9RZ.js.gz +0 -0
  583. package/frontend/build/client/_app/immutable/chunks/CMEtqUfQ.js.br +0 -0
  584. package/frontend/build/client/_app/immutable/chunks/CMEtqUfQ.js.gz +0 -0
  585. package/frontend/build/client/_app/immutable/chunks/CNdcuGR0.js.br +0 -0
  586. package/frontend/build/client/_app/immutable/chunks/CNdcuGR0.js.gz +0 -0
  587. package/frontend/build/client/_app/immutable/chunks/CUC98kMZ.js +0 -6
  588. package/frontend/build/client/_app/immutable/chunks/CUC98kMZ.js.br +0 -0
  589. package/frontend/build/client/_app/immutable/chunks/CUC98kMZ.js.gz +0 -0
  590. package/frontend/build/client/_app/immutable/chunks/CgnwuKKO.js.br +0 -0
  591. package/frontend/build/client/_app/immutable/chunks/CgnwuKKO.js.gz +0 -0
  592. package/frontend/build/client/_app/immutable/chunks/Co3xKhEp.js +0 -6
  593. package/frontend/build/client/_app/immutable/chunks/Co3xKhEp.js.br +0 -0
  594. package/frontend/build/client/_app/immutable/chunks/Co3xKhEp.js.gz +0 -0
  595. package/frontend/build/client/_app/immutable/chunks/CuqnZUex.js +0 -6
  596. package/frontend/build/client/_app/immutable/chunks/CuqnZUex.js.br +0 -5
  597. package/frontend/build/client/_app/immutable/chunks/CuqnZUex.js.gz +0 -0
  598. package/frontend/build/client/_app/immutable/chunks/CzlPaHY9.js.br +0 -0
  599. package/frontend/build/client/_app/immutable/chunks/CzlPaHY9.js.gz +0 -0
  600. package/frontend/build/client/_app/immutable/chunks/DCgHuuvs.js.br +0 -0
  601. package/frontend/build/client/_app/immutable/chunks/DCgHuuvs.js.gz +0 -0
  602. package/frontend/build/client/_app/immutable/chunks/DDZw0L0T.js.br +0 -0
  603. package/frontend/build/client/_app/immutable/chunks/DDZw0L0T.js.gz +0 -0
  604. package/frontend/build/client/_app/immutable/chunks/DHM6H-es.js +0 -7
  605. package/frontend/build/client/_app/immutable/chunks/DHM6H-es.js.br +0 -0
  606. package/frontend/build/client/_app/immutable/chunks/DHM6H-es.js.gz +0 -0
  607. package/frontend/build/client/_app/immutable/chunks/DMZwI8Cj.js.br +0 -0
  608. package/frontend/build/client/_app/immutable/chunks/DMZwI8Cj.js.gz +0 -0
  609. package/frontend/build/client/_app/immutable/chunks/DSLBMEpr.js +0 -6
  610. package/frontend/build/client/_app/immutable/chunks/DSLBMEpr.js.br +0 -0
  611. package/frontend/build/client/_app/immutable/chunks/DSLBMEpr.js.gz +0 -0
  612. package/frontend/build/client/_app/immutable/chunks/DbgD7JLa.js +0 -6
  613. package/frontend/build/client/_app/immutable/chunks/DbgD7JLa.js.br +0 -0
  614. package/frontend/build/client/_app/immutable/chunks/DbgD7JLa.js.gz +0 -0
  615. package/frontend/build/client/_app/immutable/chunks/TOCyHP97.js +0 -11
  616. package/frontend/build/client/_app/immutable/chunks/TOCyHP97.js.br +0 -0
  617. package/frontend/build/client/_app/immutable/chunks/TOCyHP97.js.gz +0 -0
  618. package/frontend/build/client/_app/immutable/chunks/kkA1mrsH.js.br +0 -0
  619. package/frontend/build/client/_app/immutable/chunks/kkA1mrsH.js.gz +0 -0
  620. package/frontend/build/client/_app/immutable/chunks/t-La0hgu.js.br +0 -0
  621. package/frontend/build/client/_app/immutable/chunks/t-La0hgu.js.gz +0 -0
  622. package/frontend/build/client/_app/immutable/chunks/w0D4Uzlq.js.br +0 -0
  623. package/frontend/build/client/_app/immutable/chunks/w0D4Uzlq.js.gz +0 -0
  624. package/frontend/build/client/_app/immutable/entry/app.KrtMZ3my.js +0 -7
  625. package/frontend/build/client/_app/immutable/entry/app.KrtMZ3my.js.br +0 -0
  626. package/frontend/build/client/_app/immutable/entry/app.KrtMZ3my.js.gz +0 -0
  627. package/frontend/build/client/_app/immutable/nodes/0.C8DodwXs.js +0 -11
  628. package/frontend/build/client/_app/immutable/nodes/0.C8DodwXs.js.br +0 -0
  629. package/frontend/build/client/_app/immutable/nodes/0.C8DodwXs.js.gz +0 -0
  630. package/frontend/build/client/_app/immutable/nodes/1.Df9sLw8b.js.br +0 -0
  631. package/frontend/build/client/_app/immutable/nodes/1.Df9sLw8b.js.gz +0 -0
  632. package/frontend/build/client/_app/immutable/nodes/10.DEbnxfND.js.br +0 -0
  633. package/frontend/build/client/_app/immutable/nodes/10.DEbnxfND.js.gz +0 -0
  634. package/frontend/build/client/_app/immutable/nodes/11.BViaDK2m.js.br +0 -0
  635. package/frontend/build/client/_app/immutable/nodes/11.BViaDK2m.js.gz +0 -0
  636. package/frontend/build/client/_app/immutable/nodes/12.BMSCSd88.js +0 -6
  637. package/frontend/build/client/_app/immutable/nodes/12.BMSCSd88.js.br +0 -0
  638. package/frontend/build/client/_app/immutable/nodes/12.BMSCSd88.js.gz +0 -0
  639. package/frontend/build/client/_app/immutable/nodes/2.BCPSg7H4.js.br +0 -0
  640. package/frontend/build/client/_app/immutable/nodes/2.BCPSg7H4.js.gz +0 -0
  641. package/frontend/build/client/_app/immutable/nodes/3.8BFAJoHT.js.br +0 -0
  642. package/frontend/build/client/_app/immutable/nodes/3.8BFAJoHT.js.gz +0 -0
  643. package/frontend/build/client/_app/immutable/nodes/4.D-YT_JJe.js +0 -6
  644. package/frontend/build/client/_app/immutable/nodes/4.D-YT_JJe.js.br +0 -0
  645. package/frontend/build/client/_app/immutable/nodes/4.D-YT_JJe.js.gz +0 -0
  646. package/frontend/build/client/_app/immutable/nodes/5.DVeH2eQP.js +0 -6
  647. package/frontend/build/client/_app/immutable/nodes/5.DVeH2eQP.js.br +0 -0
  648. package/frontend/build/client/_app/immutable/nodes/5.DVeH2eQP.js.gz +0 -0
  649. package/frontend/build/client/_app/immutable/nodes/6.DI7-IJhN.js +0 -6
  650. package/frontend/build/client/_app/immutable/nodes/6.DI7-IJhN.js.br +0 -0
  651. package/frontend/build/client/_app/immutable/nodes/6.DI7-IJhN.js.gz +0 -0
  652. package/frontend/build/client/_app/immutable/nodes/7.C-pKvVZy.js +0 -6
  653. package/frontend/build/client/_app/immutable/nodes/7.C-pKvVZy.js.br +0 -0
  654. package/frontend/build/client/_app/immutable/nodes/7.C-pKvVZy.js.gz +0 -0
  655. package/frontend/build/client/_app/immutable/nodes/8.93Mb3ofT.js +0 -9
  656. package/frontend/build/client/_app/immutable/nodes/8.93Mb3ofT.js.br +0 -0
  657. package/frontend/build/client/_app/immutable/nodes/8.93Mb3ofT.js.gz +0 -0
  658. package/frontend/build/client/_app/immutable/nodes/9.CvfGx3Hu.js.br +0 -0
  659. package/frontend/build/client/_app/immutable/nodes/9.CvfGx3Hu.js.gz +0 -0
  660. package/frontend/build/server/chunks/0-D5YWFygh.js +0 -22
  661. package/frontend/build/server/chunks/0-D5YWFygh.js.map +0 -5
  662. package/frontend/build/server/chunks/10-l6_ikL_D.js +0 -14
  663. package/frontend/build/server/chunks/10-l6_ikL_D.js.map +0 -5
  664. package/frontend/build/server/chunks/11-CNLerze_.js +0 -14
  665. package/frontend/build/server/chunks/11-CNLerze_.js.map +0 -5
  666. package/frontend/build/server/chunks/12-De6Ol6pu.js +0 -14
  667. package/frontend/build/server/chunks/2-Dc_rKWoK.js +0 -14
  668. package/frontend/build/server/chunks/3-DrRqVrcX.js +0 -14
  669. package/frontend/build/server/chunks/3-DrRqVrcX.js.map +0 -5
  670. package/frontend/build/server/chunks/4-Bo04DC5Z.js +0 -14
  671. package/frontend/build/server/chunks/4-Bo04DC5Z.js.map +0 -5
  672. package/frontend/build/server/chunks/5-CFeE5dPZ.js +0 -14
  673. package/frontend/build/server/chunks/5-CFeE5dPZ.js.map +0 -5
  674. package/frontend/build/server/chunks/6-DZk37MZH.js +0 -14
  675. package/frontend/build/server/chunks/6-DZk37MZH.js.map +0 -5
  676. package/frontend/build/server/chunks/7-DiQJZEF_.js +0 -14
  677. package/frontend/build/server/chunks/8-CKPVFOqJ.js +0 -14
  678. package/frontend/build/server/chunks/8-CKPVFOqJ.js.map +0 -5
  679. package/frontend/build/server/chunks/9-DirZG_Lu.js +0 -14
  680. package/frontend/build/server/chunks/BackLink-BJ8NaemM.js.map +0 -5
  681. package/frontend/build/server/chunks/Badge-44ZTDx0V.js.map +0 -5
  682. package/frontend/build/server/chunks/ConfirmModal-C0EAXcq_.js.map +0 -5
  683. package/frontend/build/server/chunks/EmptyState-BA_eXaeR.js.map +0 -5
  684. package/frontend/build/server/chunks/Modal-DChG187n.js.map +0 -5
  685. package/frontend/build/server/chunks/Toast-v-q4ZnYq.js.map +0 -5
  686. package/frontend/build/server/chunks/_page.svelte-1as75nPc.js.map +0 -5
  687. package/frontend/build/server/chunks/_page.svelte-1jo8MapI.js.map +0 -5
  688. package/frontend/build/server/chunks/_page.svelte-8gELc_B1.js.map +0 -5
  689. package/frontend/build/server/chunks/_page.svelte-BuFusRK1.js.map +0 -5
  690. package/frontend/build/server/chunks/_page.svelte-CAVyp70V.js +0 -250
  691. package/frontend/build/server/chunks/_page.svelte-CAVyp70V.js.map +0 -5
  692. package/frontend/build/server/chunks/_page.svelte-CWWeZuid.js.map +0 -5
  693. package/frontend/build/server/chunks/_page.svelte-D3E6Eojd.js.map +0 -5
  694. package/frontend/build/server/chunks/_page.svelte-Kg69DDaM.js.map +0 -5
  695. package/frontend/build/server/chunks/_page.svelte-L9fuiN_q.js +0 -57
  696. package/frontend/build/server/chunks/_page.svelte-L9fuiN_q.js.map +0 -5
  697. package/frontend/build/server/chunks/constants-CXTaQaB6.js.map +0 -5
  698. package/frontend/build/server/chunks/reports2-BtElN_53.js.map +0 -5
  699. package/frontend/build/server/chunks/repository-FYYV_vKE.js.map +0 -5
  700. package/frontend/build/server/chunks/runner-DC7hXbnY.js +0 -37
  701. package/frontend/build/server/chunks/runner-DC7hXbnY.js.map +0 -5
  702. /package/frontend/.svelte-kit/output/client/_app/immutable/assets/{3.BR3wgXcZ.css → 4.BR3wgXcZ.css} +0 -0
  703. /package/frontend/build/client/_app/immutable/assets/{3.BR3wgXcZ.css → 4.BR3wgXcZ.css} +0 -0
  704. /package/frontend/build/client/_app/immutable/assets/{3.BR3wgXcZ.css.br → 4.BR3wgXcZ.css.br} +0 -0
  705. /package/frontend/build/client/_app/immutable/assets/{3.BR3wgXcZ.css.gz → 4.BR3wgXcZ.css.gz} +0 -0
@@ -4,32 +4,12 @@
4
4
  */
5
5
 
6
6
  const cron = require('node-cron');
7
- const { spawn } = require('child_process');
8
- const fs = require('fs');
9
- const os = require('os');
10
- const path = require('path');
11
7
  const prisma = require('./prisma');
12
- const runnerService = require('./runnerService');
13
- const reportService = require('./reportService');
14
- const settingsService = require('./settingsService');
15
- const notificationService = require('./notificationService');
16
- const activeRunsService = require('./activeRunsService');
17
- const { startRRwebPoller } = require('../lib/rrwebPoller');
18
- const { BUILT_IN_RUNNER_ID, TRIGGER_REMOTE, TRIGGER_TYPE } = require('../constants/triggers');
8
+ const runQueueService = require('./runQueueService');
9
+ const { BUILT_IN_RUNNER_ID, TRIGGER_TYPE } = require('../constants/triggers');
19
10
  const { DEFAULT_BROWSER } = require('../constants/defaults');
20
- const { PLUM_MODE_NODE } = require('../constants/env');
21
- const { SOCKET_EVENTS } = require('../constants/socketEvents');
22
- const { JOB_STATUS } = require('../constants/jobStatus');
23
- const { getTestIdsForTag, chunkTests, buildTagExpression } = require('../lib/testChunker');
24
- const { readCucumberReportFile } = require('../lib/reportFilename');
25
- const { runWithRetries } = require('../lib/retryRunner');
26
11
 
27
12
  const scheduledJobs = {};
28
- let _io = null;
29
-
30
- const setSocketIO = (io) => {
31
- _io = io;
32
- };
33
13
 
34
14
  // ---------------------------------------------------------------------------
35
15
  // Internal helpers
@@ -44,431 +24,24 @@ function parseRunnerIds(str) {
44
24
  .filter(Boolean);
45
25
  }
46
26
 
47
- /** Resolves display names and DB ids for a list of runner IDs. */
48
- async function resolveLaneInfos(runnerIds) {
49
- return Promise.all(
50
- runnerIds.map(async (id) => {
51
- if (id === BUILT_IN_RUNNER_ID) return { id, name: 'Built-in', dbId: null };
52
- const r = await runnerService.getById(id);
53
- return { id, name: r?.name ?? id, dbId: r?.id ?? null };
54
- })
55
- );
56
- }
57
-
58
27
  // ---------------------------------------------------------------------------
59
28
  // Run paths
60
29
  // ---------------------------------------------------------------------------
61
30
 
62
- /**
63
- * Spawns one `npm run test` attempt for a single-built-in-runner cron task.
64
- * When `suppressSave` is set, PLUM_MODE=node forces generate-report.js to skip
65
- * its own DB save — used by the retry path, which persists exactly one merged
66
- * report itself once every attempt is done.
67
- */
68
- function runSingleBuiltInAttempt({ taskName, currentTag, workers, browser, suppressSave, onLog }) {
69
- return new Promise((resolve) => {
70
- const ssDir = path.join(os.tmpdir(), `plum-cron-ss-${Date.now()}`);
71
- fs.mkdirSync(ssDir, { recursive: true });
72
-
73
- const env = {
74
- ...process.env,
75
- TAG: currentTag,
76
- TRIGGER: taskName,
77
- BROWSER: browser,
78
- PLUM_SS_DIR: ssDir
79
- };
80
- if (workers > 1) env.PARALLEL = String(workers);
81
- if (suppressSave) env.PLUM_MODE = PLUM_MODE_NODE;
82
-
83
- const task = spawn('npm', ['run', 'test'], { env, shell: true });
84
-
85
- const ssPoller = startRRwebPoller(ssDir, (batch) => {
86
- if (_io) {
87
- _io.emit(SOCKET_EVENTS.BG_RUN_LANE_RRWEB_BATCH, {
88
- runId: taskName,
89
- id: BUILT_IN_RUNNER_ID,
90
- ...batch
91
- });
92
- }
93
- });
94
-
95
- task.stdout.on('data', (d) => {
96
- process.stdout.write(d);
97
- onLog(d.toString());
98
- });
99
- task.stderr.on('data', (d) => {
100
- process.stderr.write(d);
101
- onLog(`[ERROR] ${d.toString()}`);
102
- });
103
- task.on('close', (code) => {
104
- ssPoller.stop();
105
- fs.rm(ssDir, { recursive: true, force: true }, () => {});
106
- resolve({ code, raw: suppressSave ? readCucumberReportFile() : null });
107
- });
108
- });
109
- }
110
-
111
- /**
112
- * Single built-in runner — spawns tests locally.
113
- * TRIGGER is set to taskName so generate-report.js can persist it correctly.
114
- */
115
- async function runSingleBuiltIn({ taskName, tags, workers, browser, notifyDiscord, notifySlack }) {
116
- const startedAt = Date.now();
117
- const { maxRetries } = await settingsService.getProject();
118
-
119
- const onLog = (text) => {
120
- if (_io) _io.emit(SOCKET_EVENTS.BG_RUN_LOG, { runId: taskName, log: text });
121
- };
122
-
123
- if (maxRetries === 0) {
124
- const { code } = await runSingleBuiltInAttempt({
125
- taskName,
126
- currentTag: tags,
127
- workers,
128
- browser,
129
- suppressSave: false,
130
- onLog
131
- });
132
- console.log(`Task "${taskName}" finished with code ${code}`);
133
-
134
- prisma.report
135
- .findFirst({
136
- where: { triggerType: taskName },
137
- orderBy: { createdAt: 'desc' },
138
- select: { id: true, status: true, content: true }
139
- })
140
- .then((report) => {
141
- activeRunsService.unregisterRun(taskName);
142
- if (_io)
143
- _io.emit(SOCKET_EVENTS.BG_RUN_DONE, {
144
- runId: taskName,
145
- code,
146
- reportId: report?.id ?? null
147
- });
148
-
149
- if (report) {
150
- prisma.report
151
- .update({ where: { id: report.id }, data: { duration: Date.now() - startedAt } })
152
- .catch(() => {});
153
- }
154
-
155
- if (report && (notifyDiscord || notifySlack)) {
156
- return notificationService.send({
157
- jobName: taskName,
158
- status: report.status,
159
- content: report.content,
160
- browser,
161
- tags,
162
- reportId: report.id,
163
- notifyDiscord,
164
- notifySlack
165
- });
166
- }
167
- })
168
- .catch((e) => {
169
- console.error(`[cron] Notification failed: ${e.message}`);
170
- activeRunsService.unregisterRun(taskName);
171
- if (_io) _io.emit(SOCKET_EVENTS.BG_RUN_DONE, { runId: taskName, code, reportId: null });
172
- });
173
- return;
174
- }
175
-
176
- const { code, rawJson, attempts } = await runWithRetries({
177
- maxRetries,
178
- spawnAttempt: async (tagOverride) => {
179
- const { code, raw } = await runSingleBuiltInAttempt({
180
- taskName,
181
- currentTag: tagOverride ?? tags,
182
- workers,
183
- browser,
184
- suppressSave: true,
185
- onLog
186
- });
187
- return { code, rawJson: raw ? JSON.parse(raw) : [] };
188
- },
189
- onLog
190
- });
191
-
192
- console.log(`Task "${taskName}" finished with code ${code}`);
193
-
194
- let report = null;
195
- try {
196
- report = await reportService.saveReport({
197
- rawCucumberJson: rawJson,
198
- tags,
199
- triggerType: taskName,
200
- workerCount: workers,
201
- browser,
202
- duration: Date.now() - startedAt,
203
- attempts
204
- });
205
- } catch (e) {
206
- console.error(`[cron] Failed to save report: ${e.message}`);
207
- }
208
-
209
- activeRunsService.unregisterRun(taskName);
210
- if (_io)
211
- _io.emit(SOCKET_EVENTS.BG_RUN_DONE, { runId: taskName, code, reportId: report?.id ?? null });
212
-
213
- if (report && (notifyDiscord || notifySlack)) {
214
- notificationService
215
- .send({
216
- jobName: taskName,
217
- status: report.status,
218
- content: report.content,
219
- browser,
220
- tags,
221
- reportId: report.id,
222
- notifyDiscord,
223
- notifySlack
224
- })
225
- .catch((e) => console.error(`[cron] Notification failed: ${e.message}`));
226
- }
227
- }
228
-
229
- /**
230
- * Multi-runner distributed path — splits tests across nodes and combines reports.
231
- * triggerType = taskName so the combined report is correctly attributed.
232
- */
233
- async function runDistributed({
234
- taskName,
235
- tags,
236
- workers,
237
- browser,
238
- runnerIds,
239
- notifyDiscord,
240
- notifySlack
241
- }) {
242
- const dispatchStartedAt = Date.now();
243
- const { maxRetries } = await settingsService.getProject();
244
- const allIds = getTestIdsForTag(tags);
245
- const chunks = chunkTests(allIds, runnerIds.length);
246
-
247
- // Surplus runners beyond the number of non-empty chunks would fall back to
248
- // running the full tag expression, producing duplicate scenarios in the report.
249
- const activeRunnerIds = runnerIds.slice(0, chunks.length);
250
-
251
- if (activeRunnerIds.length === 0) {
252
- console.log(`Task "${taskName}" — no tests found, skipping.`);
253
- activeRunsService.unregisterRun(taskName);
254
- if (_io) _io.emit(SOCKET_EVENTS.BG_RUN_DONE, { runId: taskName, code: 0, reportId: null });
255
- return;
256
- }
257
-
258
- const laneInfos = await resolveLaneInfos(activeRunnerIds);
259
-
260
- if (_io) {
261
- _io.emit(SOCKET_EVENTS.BG_RUN_LANES_INIT, {
262
- runId: taskName,
263
- lanes: laneInfos.map((l, i) => ({ id: l.id, name: l.name, testCount: chunks[i].length }))
264
- });
265
- }
266
-
267
- const collectedReports = new Array(activeRunnerIds.length).fill(null);
268
- const laneAttempts = new Array(activeRunnerIds.length).fill(null);
269
- let doneCount = 0;
270
- let overallCode = 0;
271
-
272
- function onLaneDone(idx, laneId, code, reportContent, attempts = null) {
273
- if (code !== 0) overallCode = code;
274
- collectedReports[idx] = reportContent;
275
- laneAttempts[idx] = attempts;
276
- doneCount++;
277
- if (_io) {
278
- _io.emit(SOCKET_EVENTS.BG_RUN_LANE_STATUS, {
279
- runId: taskName,
280
- laneId,
281
- status: code === 0 ? JOB_STATUS.DONE : JOB_STATUS.ERROR
282
- });
283
- }
284
-
285
- if (doneCount === activeRunnerIds.length) {
286
- console.log(`Task "${taskName}" — all runners done (exit ${overallCode})`);
287
-
288
- reportService
289
- .saveCombinedReport({
290
- reports: collectedReports,
291
- runners: laneInfos,
292
- workers,
293
- overallCode,
294
- tag: tags,
295
- triggerType: taskName,
296
- browser,
297
- duration: Date.now() - dispatchStartedAt,
298
- attemptsByLane: laneAttempts
299
- })
300
- .then((saved) => {
301
- activeRunsService.unregisterRun(taskName);
302
- if (_io) {
303
- _io.emit(SOCKET_EVENTS.BG_RUN_DONE, {
304
- runId: taskName,
305
- code: overallCode,
306
- reportId: saved?.id ?? null
307
- });
308
- }
309
- if (saved && (notifyDiscord || notifySlack)) {
310
- return notificationService.send({
311
- jobName: taskName,
312
- status: saved.status,
313
- content: saved.content,
314
- browser,
315
- tags,
316
- reportId: saved.id,
317
- notifyDiscord,
318
- notifySlack
319
- });
320
- }
321
- })
322
- .catch((e) => {
323
- console.error(`[cron] Failed to save combined report: ${e.message}`);
324
- activeRunsService.unregisterRun(taskName);
325
- if (_io)
326
- _io.emit(SOCKET_EVENTS.BG_RUN_DONE, {
327
- runId: taskName,
328
- code: overallCode,
329
- reportId: null
330
- });
331
- });
332
- }
333
- }
334
-
335
- for (let i = 0; i < activeRunnerIds.length; i++) {
336
- const lane = laneInfos[i];
337
- const laneId = lane.id;
338
- const chunkTag = buildTagExpression(chunks[i]);
339
-
340
- if (lane.id === BUILT_IN_RUNNER_ID) {
341
- const idx = i;
342
- const onLog = (text) => {
343
- if (_io) _io.emit(SOCKET_EVENTS.BG_RUN_LANE_LOG, { runId: taskName, laneId, log: text });
344
- };
345
-
346
- const spawnBuiltInLaneAttempt = (currentTag) =>
347
- new Promise((resolve) => {
348
- const ssDir = path.join(os.tmpdir(), `plum-cron-ss-${Date.now()}-${idx}`);
349
- fs.mkdirSync(ssDir, { recursive: true });
350
-
351
- const env = {
352
- ...process.env,
353
- TAG: currentTag,
354
- TRIGGER: TRIGGER_REMOTE, // node-mode: file naming only, not persisted to DB
355
- BROWSER: browser,
356
- PLUM_MODE: PLUM_MODE_NODE,
357
- PLUM_SS_DIR: ssDir
358
- };
359
- if (workers > 1) env.PARALLEL = String(workers);
360
-
361
- const task = spawn('npm', ['run', 'test'], { env, shell: true });
362
-
363
- const ssPoller = startRRwebPoller(ssDir, (batch) => {
364
- if (_io) {
365
- _io.emit(SOCKET_EVENTS.BG_RUN_LANE_RRWEB_BATCH, {
366
- runId: taskName,
367
- id: laneId,
368
- ...batch
369
- });
370
- }
371
- });
372
-
373
- task.stdout.on('data', (d) => {
374
- process.stdout.write(d);
375
- onLog(d.toString());
376
- });
377
- task.stderr.on('data', (d) => {
378
- process.stderr.write(d);
379
- onLog(`[ERROR] ${d.toString()}`);
380
- });
381
- task.on('close', (code) => {
382
- ssPoller.stop();
383
- fs.rm(ssDir, { recursive: true, force: true }, () => {});
384
- const raw = readCucumberReportFile() ?? '[]';
385
- resolve({ code, rawJson: JSON.parse(raw) });
386
- });
387
- });
388
-
389
- runWithRetries({
390
- maxRetries,
391
- spawnAttempt: (t) => spawnBuiltInLaneAttempt(t ?? chunkTag),
392
- onLog
393
- }).then(({ code, rawJson, attempts }) =>
394
- onLaneDone(idx, laneId, code, JSON.stringify(rawJson), attempts)
395
- );
396
- } else {
397
- const idx = i;
398
- const onLog = (log) => {
399
- process.stdout.write(log);
400
- if (_io) _io.emit(SOCKET_EVENTS.BG_RUN_LANE_LOG, { runId: taskName, laneId, log });
401
- };
402
-
403
- const spawnRemoteLaneAttempt = (currentTag) =>
404
- new Promise((resolve) => {
405
- runnerService.dispatchAndPoll(
406
- lane.id,
407
- { tags: currentTag, browser, workers },
408
- onLog,
409
- (code, content) => resolve({ code, rawJson: content ? JSON.parse(content) : [] }),
410
- (batch) => {
411
- if (_io) {
412
- _io.emit(SOCKET_EVENTS.BG_RUN_LANE_RRWEB_BATCH, {
413
- runId: taskName,
414
- id: laneId,
415
- ...batch
416
- });
417
- }
418
- }
419
- );
420
- });
421
-
422
- runWithRetries({
423
- maxRetries,
424
- spawnAttempt: (t) => spawnRemoteLaneAttempt(t ?? chunkTag),
425
- onLog
426
- }).then(({ code, rawJson, attempts }) =>
427
- onLaneDone(idx, laneId, code, JSON.stringify(rawJson), attempts)
428
- );
429
- }
430
- }
431
- }
432
-
433
- // ---------------------------------------------------------------------------
434
- // Public: job execution
435
- // ---------------------------------------------------------------------------
436
-
437
31
  async function runCronJob(job) {
438
- const {
439
- taskName,
440
- tags,
441
- workers,
442
- browser,
443
- runnerIds: runnerIdsStr,
444
- notifyDiscord,
445
- notifySlack
446
- } = job;
447
- const runnerIds = parseRunnerIds(runnerIdsStr);
448
-
449
- const label = taskName;
450
- const meta = { tag: tags, browser, workers };
451
- activeRunsService.registerRun(taskName, { kind: TRIGGER_TYPE.CRON, label, meta });
452
- if (_io) {
453
- _io.emit(SOCKET_EVENTS.BG_RUN_START, { runId: taskName, kind: TRIGGER_TYPE.CRON, label, meta });
454
- }
455
- console.log(`Running scheduled task: "${taskName}" → runners: ${runnerIds.join(', ')}`);
456
-
457
- const isSingleBuiltIn = runnerIds.length === 1 && runnerIds[0] === BUILT_IN_RUNNER_ID;
458
-
459
- if (isSingleBuiltIn) {
460
- runSingleBuiltIn({ taskName, tags, workers, browser, notifyDiscord, notifySlack });
461
- } else {
462
- await runDistributed({
463
- taskName,
464
- tags,
465
- workers,
466
- browser,
467
- runnerIds,
468
- notifyDiscord,
469
- notifySlack
470
- });
471
- }
32
+ const runnerIds = parseRunnerIds(job.runnerIds);
33
+ console.log(`Queuing scheduled task: "${job.taskName}" → runners: ${runnerIds.join(', ')}`);
34
+ await runQueueService.enqueue({
35
+ kind: TRIGGER_TYPE.CRON,
36
+ triggerType: job.taskName,
37
+ label: job.taskName,
38
+ tag: job.tags ?? '',
39
+ workers: job.workers ?? 1,
40
+ browser: job.browser ?? DEFAULT_BROWSER,
41
+ runnerIds,
42
+ notifyDiscord: job.notifyDiscord ?? false,
43
+ notifySlack: job.notifySlack ?? false
44
+ });
472
45
  }
473
46
 
474
47
  // ---------------------------------------------------------------------------
@@ -620,7 +193,6 @@ const toggleCronJob = async (taskName, enabled) => {
620
193
  module.exports = {
621
194
  init,
622
195
  reload,
623
- setSocketIO,
624
196
  getAllCronJobs,
625
197
  addCronJob,
626
198
  removeCronJob,
@@ -90,6 +90,7 @@ function startJob({
90
90
  });
91
91
 
92
92
  const proc = spawn('npm', ['run', 'test'], { env, shell: true, cwd: BACKEND_DIR });
93
+ jobs[jobId].proc = proc;
93
94
  proc.stdout.on('data', (d) => {
94
95
  jobs[jobId].logs += d.toString();
95
96
  });
@@ -137,4 +138,15 @@ function pollJob(jobId, offset, rrwebOffset = 0) {
137
138
  };
138
139
  }
139
140
 
140
- module.exports = { startJob, getJob, pollJob };
141
+ // Primary server asks a node to stop a job when the user cancels a run. The
142
+ // proc's own close handler still runs and marks the job done/errored.
143
+ function cancelJob(jobId) {
144
+ const job = jobs[jobId];
145
+ if (!job) return false;
146
+ try {
147
+ job.proc?.kill('SIGTERM');
148
+ } catch {}
149
+ return true;
150
+ }
151
+
152
+ module.exports = { startJob, getJob, pollJob, cancelJob };