prefect 3.7.7.dev2__py3-none-any.whl → 3.7.8.dev2__py3-none-any.whl

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 (321) hide show
  1. prefect/_build_info.py +3 -3
  2. prefect/runner/_workspace_resolver.py +17 -12
  3. prefect/server/AGENTS.md +1 -1
  4. prefect/server/api/_ui_static.py +0 -1
  5. prefect/server/api/server.py +3 -21
  6. prefect/server/api/workers.py +1 -0
  7. prefect/server/models/artifacts.py +0 -2
  8. prefect/server/models/work_queues.py +2 -2
  9. prefect/server/models/workers.py +1 -1
  10. prefect/server/schemas/core.py +1 -1
  11. prefect/server/services/task_run_recorder.py +9 -4
  12. prefect/server/ui-v2/assets/{admin-BAL15Uwl.js → admin-BwmAgV1B.js} +2 -2
  13. prefect/server/ui-v2/assets/{admin-BAL15Uwl.js.map → admin-BwmAgV1B.js.map} +1 -1
  14. prefect/server/ui-v2/assets/{artifact._id-D_htSbFc.js → artifact._id-DClBSNAc.js} +2 -2
  15. prefect/server/ui-v2/assets/{artifact._id-D_htSbFc.js.map → artifact._id-DClBSNAc.js.map} +1 -1
  16. prefect/server/ui-v2/assets/{artifact._id-C4vG8kN1.js → artifact._id-iTe860fK.js} +2 -2
  17. prefect/server/ui-v2/assets/{artifact._id-C4vG8kN1.js.map → artifact._id-iTe860fK.js.map} +1 -1
  18. prefect/server/ui-v2/assets/{artifacts-C94H1frM.js → artifacts-1uXI5WqD.js} +2 -2
  19. prefect/server/ui-v2/assets/{artifacts-C94H1frM.js.map → artifacts-1uXI5WqD.js.map} +1 -1
  20. prefect/server/ui-v2/assets/{artifacts-Dp1Cpics.js → artifacts-DK4EqGvl.js} +2 -2
  21. prefect/server/ui-v2/assets/{artifacts-Dp1Cpics.js.map → artifacts-DK4EqGvl.js.map} +1 -1
  22. prefect/server/ui-v2/assets/{automation-wizard-DHwU3ycN.js → automation-wizard-BY0XuXdq.js} +2 -2
  23. prefect/server/ui-v2/assets/{automation-wizard-DHwU3ycN.js.map → automation-wizard-BY0XuXdq.js.map} +1 -1
  24. prefect/server/ui-v2/assets/{automation._id-DVj5sQsY.js → automation._id-CjmsSv3o.js} +2 -2
  25. prefect/server/ui-v2/assets/{automation._id-DVj5sQsY.js.map → automation._id-CjmsSv3o.js.map} +1 -1
  26. prefect/server/ui-v2/assets/{automation._id-BPP0PFKR.js → automation._id-D9vm0dSK.js} +2 -2
  27. prefect/server/ui-v2/assets/{automation._id-BPP0PFKR.js.map → automation._id-D9vm0dSK.js.map} +1 -1
  28. prefect/server/ui-v2/assets/{automation_._id.edit-DXzu8308.js → automation_._id.edit-BsdiStqs.js} +2 -2
  29. prefect/server/ui-v2/assets/{automation_._id.edit-DXzu8308.js.map → automation_._id.edit-BsdiStqs.js.map} +1 -1
  30. prefect/server/ui-v2/assets/{automation_._id.edit-k_rZNDO5.js → automation_._id.edit-DYOqiH15.js} +2 -2
  31. prefect/server/ui-v2/assets/{automation_._id.edit-k_rZNDO5.js.map → automation_._id.edit-DYOqiH15.js.map} +1 -1
  32. prefect/server/ui-v2/assets/{automations-BBolpYje.js → automations-Dy7MEBCd.js} +2 -2
  33. prefect/server/ui-v2/assets/{automations-BBolpYje.js.map → automations-Dy7MEBCd.js.map} +1 -1
  34. prefect/server/ui-v2/assets/{automations-DEbtnaKI.js → automations-I0rut3oU.js} +2 -2
  35. prefect/server/ui-v2/assets/{automations-DEbtnaKI.js.map → automations-I0rut3oU.js.map} +1 -1
  36. prefect/server/ui-v2/assets/{automations-DXpkq-mg.js → automations-_spzfcQs.js} +2 -2
  37. prefect/server/ui-v2/assets/{automations-DXpkq-mg.js.map → automations-_spzfcQs.js.map} +1 -1
  38. prefect/server/ui-v2/assets/{automations-header-Bnufh1Se.js → automations-header-C_QvzcNT.js} +2 -2
  39. prefect/server/ui-v2/assets/{automations-header-Bnufh1Se.js.map → automations-header-C_QvzcNT.js.map} +1 -1
  40. prefect/server/ui-v2/assets/{automations-wizard-DIhcWuKm.js → automations-wizard-e40bFU9E.js} +2 -2
  41. prefect/server/ui-v2/assets/{automations-wizard-DIhcWuKm.js.map → automations-wizard-e40bFU9E.js.map} +1 -1
  42. prefect/server/ui-v2/assets/{badge-fyOQcNnR.js → badge-vurAYgxc.js} +2 -2
  43. prefect/server/ui-v2/assets/{badge-fyOQcNnR.js.map → badge-vurAYgxc.js.map} +1 -1
  44. prefect/server/ui-v2/assets/{base-job-template-form-section-xk-gbxny.js → base-job-template-form-section-DTh4Y5Ah.js} +2 -2
  45. prefect/server/ui-v2/assets/{base-job-template-form-section-xk-gbxny.js.map → base-job-template-form-section-DTh4Y5Ah.js.map} +1 -1
  46. prefect/server/ui-v2/assets/{block-type-details-Dq_SyCWm.js → block-type-details-CtMrR5QH.js} +2 -2
  47. prefect/server/ui-v2/assets/{block-type-details-Dq_SyCWm.js.map → block-type-details-CtMrR5QH.js.map} +1 -1
  48. prefect/server/ui-v2/assets/{block-type-logo-Cc5Lt-3a.js → block-type-logo-1_gehAYP.js} +2 -2
  49. prefect/server/ui-v2/assets/{block-type-logo-Cc5Lt-3a.js.map → block-type-logo-1_gehAYP.js.map} +1 -1
  50. prefect/server/ui-v2/assets/{block._id-DJ4swXQO.js → block._id-BrKW8FYY.js} +2 -2
  51. prefect/server/ui-v2/assets/{block._id-DJ4swXQO.js.map → block._id-BrKW8FYY.js.map} +1 -1
  52. prefect/server/ui-v2/assets/{block._id-7jcwcanq.js → block._id-D_TLERFK.js} +2 -2
  53. prefect/server/ui-v2/assets/{block._id-7jcwcanq.js.map → block._id-D_TLERFK.js.map} +1 -1
  54. prefect/server/ui-v2/assets/{block_._id.edit-CuQ59RzS.js → block_._id.edit-B2yl9C11.js} +2 -2
  55. prefect/server/ui-v2/assets/{block_._id.edit-CuQ59RzS.js.map → block_._id.edit-B2yl9C11.js.map} +1 -1
  56. prefect/server/ui-v2/assets/{block_._id.edit-X_LCGBMi.js → block_._id.edit-BbupcySJ.js} +2 -2
  57. prefect/server/ui-v2/assets/{block_._id.edit-X_LCGBMi.js.map → block_._id.edit-BbupcySJ.js.map} +1 -1
  58. prefect/server/ui-v2/assets/{blocks-D5uMj6X5.js → blocks-BVpxRYTR.js} +2 -2
  59. prefect/server/ui-v2/assets/{blocks-D5uMj6X5.js.map → blocks-BVpxRYTR.js.map} +1 -1
  60. prefect/server/ui-v2/assets/{blocks-CVpOVsR9.js → blocks-SUmL0Ghr.js} +2 -2
  61. prefect/server/ui-v2/assets/{blocks-CVpOVsR9.js.map → blocks-SUmL0Ghr.js.map} +1 -1
  62. prefect/server/ui-v2/assets/button-BmBv3lZP.js +3 -0
  63. prefect/server/ui-v2/assets/{button-D1nS4G4b.js.map → button-BmBv3lZP.js.map} +1 -1
  64. prefect/server/ui-v2/assets/{card-zAxS3Fox.js → card-BWi7Wr_R.js} +2 -2
  65. prefect/server/ui-v2/assets/{card-zAxS3Fox.js.map → card-BWi7Wr_R.js.map} +1 -1
  66. prefect/server/ui-v2/assets/{catalog-Cvuu07RM.js → catalog-2OlitMXZ.js} +2 -2
  67. prefect/server/ui-v2/assets/{catalog-Cvuu07RM.js.map → catalog-2OlitMXZ.js.map} +1 -1
  68. prefect/server/ui-v2/assets/{catalog-DBnpD4_R.js → catalog-BcBjU7Yy.js} +2 -2
  69. prefect/server/ui-v2/assets/{catalog-DBnpD4_R.js.map → catalog-BcBjU7Yy.js.map} +1 -1
  70. prefect/server/ui-v2/assets/{catalog_._slug-DMHkouWh.js → catalog_._slug-CpeIUyfC.js} +2 -2
  71. prefect/server/ui-v2/assets/{catalog_._slug-DMHkouWh.js.map → catalog_._slug-CpeIUyfC.js.map} +1 -1
  72. prefect/server/ui-v2/assets/{catalog_._slug-DwC2yZo9.js → catalog_._slug-DxivsC4n.js} +2 -2
  73. prefect/server/ui-v2/assets/{catalog_._slug-DwC2yZo9.js.map → catalog_._slug-DxivsC4n.js.map} +1 -1
  74. prefect/server/ui-v2/assets/{catalog_._slug_.create-DEjqmQ5H.js → catalog_._slug_.create-BfAYCqzV.js} +2 -2
  75. prefect/server/ui-v2/assets/{catalog_._slug_.create-DEjqmQ5H.js.map → catalog_._slug_.create-BfAYCqzV.js.map} +1 -1
  76. prefect/server/ui-v2/assets/{catalog_._slug_.create-pWiWaBhm.js → catalog_._slug_.create-DIls_o2s.js} +2 -2
  77. prefect/server/ui-v2/assets/{catalog_._slug_.create-pWiWaBhm.js.map → catalog_._slug_.create-DIls_o2s.js.map} +1 -1
  78. prefect/server/ui-v2/assets/{checkbox-CnS0zOAZ.js → checkbox-C61fowvt.js} +2 -2
  79. prefect/server/ui-v2/assets/{checkbox-CnS0zOAZ.js.map → checkbox-C61fowvt.js.map} +1 -1
  80. prefect/server/ui-v2/assets/{concurrency-limit._id-C1JAbeF7.js → concurrency-limit._id-BD5OWaxK.js} +2 -2
  81. prefect/server/ui-v2/assets/{concurrency-limit._id-C1JAbeF7.js.map → concurrency-limit._id-BD5OWaxK.js.map} +1 -1
  82. prefect/server/ui-v2/assets/{concurrency-limit._id-D2km7zi6.js → concurrency-limit._id-C5IwLXM-.js} +2 -2
  83. prefect/server/ui-v2/assets/{concurrency-limit._id-D2km7zi6.js.map → concurrency-limit._id-C5IwLXM-.js.map} +1 -1
  84. prefect/server/ui-v2/assets/{concurrency-limits-CiuVe4lC.js → concurrency-limits-Bc84E04d.js} +2 -2
  85. prefect/server/ui-v2/assets/{concurrency-limits-CiuVe4lC.js.map → concurrency-limits-Bc84E04d.js.map} +1 -1
  86. prefect/server/ui-v2/assets/{concurrency-limits-Bo4VHM4m.js → concurrency-limits-DbbgieMK.js} +2 -2
  87. prefect/server/ui-v2/assets/{concurrency-limits-Bo4VHM4m.js.map → concurrency-limits-DbbgieMK.js.map} +1 -1
  88. prefect/server/ui-v2/assets/{create-DC_F9Vc2.js → create-B5swJNpx.js} +2 -2
  89. prefect/server/ui-v2/assets/{create-DC_F9Vc2.js.map → create-B5swJNpx.js.map} +1 -1
  90. prefect/server/ui-v2/assets/{create-CXr3hIap.js → create-CLSh2YYJ.js} +2 -2
  91. prefect/server/ui-v2/assets/{create-CXr3hIap.js.map → create-CLSh2YYJ.js.map} +1 -1
  92. prefect/server/ui-v2/assets/{create-KsVh0LQQ.js → create-DR2ACvWj.js} +2 -2
  93. prefect/server/ui-v2/assets/{create-KsVh0LQQ.js.map → create-DR2ACvWj.js.map} +1 -1
  94. prefect/server/ui-v2/assets/{create-B8bILmAp.js → create-DUZ4ILfd.js} +2 -2
  95. prefect/server/ui-v2/assets/{create-B8bILmAp.js.map → create-DUZ4ILfd.js.map} +1 -1
  96. prefect/server/ui-v2/assets/{cron-input-B9vmWBhI.js → cron-input-DTg4XKWR.js} +2 -2
  97. prefect/server/ui-v2/assets/{cron-input-B9vmWBhI.js.map → cron-input-DTg4XKWR.js.map} +1 -1
  98. prefect/server/ui-v2/assets/{data-table-C_Co3B-8.js → data-table-BeZEMPPj.js} +2 -2
  99. prefect/server/ui-v2/assets/{data-table-C_Co3B-8.js.map → data-table-BeZEMPPj.js.map} +1 -1
  100. prefect/server/ui-v2/assets/{data-table-hPoc29Gc.js → data-table-CYvl_mU7.js} +2 -2
  101. prefect/server/ui-v2/assets/{data-table-hPoc29Gc.js.map → data-table-CYvl_mU7.js.map} +1 -1
  102. prefect/server/ui-v2/assets/{deployment-form-CrL1aiF2.js → deployment-form-BdWBEIGb.js} +3 -3
  103. prefect/server/ui-v2/assets/{deployment-form-CrL1aiF2.js.map → deployment-form-BdWBEIGb.js.map} +1 -1
  104. prefect/server/ui-v2/assets/{deployment-links-CtiX6W-O.js → deployment-links-DcaHRana.js} +2 -2
  105. prefect/server/ui-v2/assets/{deployment-links-CtiX6W-O.js.map → deployment-links-DcaHRana.js.map} +1 -1
  106. prefect/server/ui-v2/assets/{deployment._id-8DHzBBqN.js → deployment._id-DSpkCkrD.js} +2 -2
  107. prefect/server/ui-v2/assets/{deployment._id-8DHzBBqN.js.map → deployment._id-DSpkCkrD.js.map} +1 -1
  108. prefect/server/ui-v2/assets/{deployment._id-B5njgUVH.js → deployment._id-QB9oUwli.js} +2 -2
  109. prefect/server/ui-v2/assets/{deployment._id-B5njgUVH.js.map → deployment._id-QB9oUwli.js.map} +1 -1
  110. prefect/server/ui-v2/assets/{deployment_._id.duplicate-P68wrx5d.js → deployment_._id.duplicate-Buq607hT.js} +2 -2
  111. prefect/server/ui-v2/assets/{deployment_._id.duplicate-P68wrx5d.js.map → deployment_._id.duplicate-Buq607hT.js.map} +1 -1
  112. prefect/server/ui-v2/assets/{deployment_._id.duplicate-DSE5qVrl.js → deployment_._id.duplicate-CxoXM02K.js} +2 -2
  113. prefect/server/ui-v2/assets/{deployment_._id.duplicate-DSE5qVrl.js.map → deployment_._id.duplicate-CxoXM02K.js.map} +1 -1
  114. prefect/server/ui-v2/assets/deployment_._id.edit-B4-TptEu.js +2 -0
  115. prefect/server/ui-v2/assets/{deployment_._id.edit-BmCwRQfG.js.map → deployment_._id.edit-B4-TptEu.js.map} +1 -1
  116. prefect/server/ui-v2/assets/{deployment_._id.edit-BRk2Bs0U.js → deployment_._id.edit-BLbczGE6.js} +2 -2
  117. prefect/server/ui-v2/assets/{deployment_._id.edit-BRk2Bs0U.js.map → deployment_._id.edit-BLbczGE6.js.map} +1 -1
  118. prefect/server/ui-v2/assets/{deployment_._id.run-SWWrS_XP.js → deployment_._id.run-OoFiqasU.js} +2 -2
  119. prefect/server/ui-v2/assets/{deployment_._id.run-SWWrS_XP.js.map → deployment_._id.run-OoFiqasU.js.map} +1 -1
  120. prefect/server/ui-v2/assets/{deployment_._id.run-Bqnf9Hd8.js → deployment_._id.run-aNTvRx3C.js} +2 -2
  121. prefect/server/ui-v2/assets/{deployment_._id.run-Bqnf9Hd8.js.map → deployment_._id.run-aNTvRx3C.js.map} +1 -1
  122. prefect/server/ui-v2/assets/{deployments-B5DW6oSd.js → deployments-Bg48iYTk.js} +2 -2
  123. prefect/server/ui-v2/assets/{deployments-B5DW6oSd.js.map → deployments-Bg48iYTk.js.map} +1 -1
  124. prefect/server/ui-v2/assets/{deployments-vfpjs2Zu.js → deployments-C9hCXqaw.js} +2 -2
  125. prefect/server/ui-v2/assets/{deployments-vfpjs2Zu.js.map → deployments-C9hCXqaw.js.map} +1 -1
  126. prefect/server/ui-v2/assets/{deployments-C1tmJw6Q.js → deployments-f9_6GjVM.js} +2 -2
  127. prefect/server/ui-v2/assets/{deployments-C1tmJw6Q.js.map → deployments-f9_6GjVM.js.map} +1 -1
  128. prefect/server/ui-v2/assets/{dialog-DIuvBKov.js → dialog-kjByAu2K.js} +2 -2
  129. prefect/server/ui-v2/assets/{dialog-DIuvBKov.js.map → dialog-kjByAu2K.js.map} +1 -1
  130. prefect/server/ui-v2/assets/{dist-BWGcVrLy.js → dist-D70cmkC4.js} +2 -2
  131. prefect/server/ui-v2/assets/{dist-BWGcVrLy.js.map → dist-D70cmkC4.js.map} +1 -1
  132. prefect/server/ui-v2/assets/{event-resource-display-Bb5tg3Sp.js → event-resource-display-BbTlxvM0.js} +2 -2
  133. prefect/server/ui-v2/assets/{event-resource-display-Bb5tg3Sp.js.map → event-resource-display-BbTlxvM0.js.map} +1 -1
  134. prefect/server/ui-v2/assets/{event._eventDate._eventId-DSEdek1y.js → event._eventDate._eventId-52Pjmxbr.js} +2 -2
  135. prefect/server/ui-v2/assets/{event._eventDate._eventId-DSEdek1y.js.map → event._eventDate._eventId-52Pjmxbr.js.map} +1 -1
  136. prefect/server/ui-v2/assets/{event._eventDate._eventId-i_o9_8J0.js → event._eventDate._eventId-CxWp57nP.js} +2 -2
  137. prefect/server/ui-v2/assets/{event._eventDate._eventId-i_o9_8J0.js.map → event._eventDate._eventId-CxWp57nP.js.map} +1 -1
  138. prefect/server/ui-v2/assets/{events-Ba2H0nXG.js → events-DCxvBjip.js} +2 -2
  139. prefect/server/ui-v2/assets/{events-Ba2H0nXG.js.map → events-DCxvBjip.js.map} +1 -1
  140. prefect/server/ui-v2/assets/{events-DEk8mDv8.js → events-Vcoo_bS9.js} +2 -2
  141. prefect/server/ui-v2/assets/{events-DEk8mDv8.js.map → events-Vcoo_bS9.js.map} +1 -1
  142. prefect/server/ui-v2/assets/{events-timeline-BcJ4EZ3S.js → events-timeline-CnmVZdtM.js} +2 -2
  143. prefect/server/ui-v2/assets/{events-timeline-BcJ4EZ3S.js.map → events-timeline-CnmVZdtM.js.map} +1 -1
  144. prefect/server/ui-v2/assets/{flow-run-graph-C7Yv3ssM.js → flow-run-graph-CbD29Wck.js} +2 -2
  145. prefect/server/ui-v2/assets/{flow-run-graph-C7Yv3ssM.js.map → flow-run-graph-CbD29Wck.js.map} +1 -1
  146. prefect/server/ui-v2/assets/{flow-run._id-m92ddStD.js → flow-run._id-Bz9FocWM.js} +2 -2
  147. prefect/server/ui-v2/assets/{flow-run._id-m92ddStD.js.map → flow-run._id-Bz9FocWM.js.map} +1 -1
  148. prefect/server/ui-v2/assets/{flow-run._id-MIyYC3qx.js → flow-run._id-DbsY1HyI.js} +3 -3
  149. prefect/server/ui-v2/assets/{flow-run._id-MIyYC3qx.js.map → flow-run._id-DbsY1HyI.js.map} +1 -1
  150. prefect/server/ui-v2/assets/{flow-run._id-CuDYZEu4.js → flow-run._id-DqyOqm6l.js} +2 -2
  151. prefect/server/ui-v2/assets/{flow-run._id-CuDYZEu4.js.map → flow-run._id-DqyOqm6l.js.map} +1 -1
  152. prefect/server/ui-v2/assets/{flow-runs-Aasu1lzC.js → flow-runs-BlvuNAbf.js} +2 -2
  153. prefect/server/ui-v2/assets/{flow-runs-Aasu1lzC.js.map → flow-runs-BlvuNAbf.js.map} +1 -1
  154. prefect/server/ui-v2/assets/{flow._id-XXB9UBEF.js → flow._id-C7Rk6PoH.js} +2 -2
  155. prefect/server/ui-v2/assets/{flow._id-XXB9UBEF.js.map → flow._id-C7Rk6PoH.js.map} +1 -1
  156. prefect/server/ui-v2/assets/{flow._id-BRbwflJa.js → flow._id-DgOouag4.js} +2 -2
  157. prefect/server/ui-v2/assets/{flow._id-BRbwflJa.js.map → flow._id-DgOouag4.js.map} +1 -1
  158. prefect/server/ui-v2/assets/{flows-DeHBhtYq.js → flows-BKgvWEsn.js} +2 -2
  159. prefect/server/ui-v2/assets/{flows-DeHBhtYq.js.map → flows-BKgvWEsn.js.map} +1 -1
  160. prefect/server/ui-v2/assets/{flows-DxzYYVqT.js → flows-BmMWNEVL.js} +2 -2
  161. prefect/server/ui-v2/assets/{flows-DxzYYVqT.js.map → flows-BmMWNEVL.js.map} +1 -1
  162. prefect/server/ui-v2/assets/{flows-GKacvQcS.js → flows-C-NRpuYa.js} +2 -2
  163. prefect/server/ui-v2/assets/{flows-GKacvQcS.js.map → flows-C-NRpuYa.js.map} +1 -1
  164. prefect/server/ui-v2/assets/{header-DLLIG_v_.js → header-B--ytya-.js} +2 -2
  165. prefect/server/ui-v2/assets/{header-DLLIG_v_.js.map → header-B--ytya-.js.map} +1 -1
  166. prefect/server/ui-v2/assets/{header-C1Kl0PQt.js → header-Bn60nLKw.js} +2 -2
  167. prefect/server/ui-v2/assets/{header-C1Kl0PQt.js.map → header-Bn60nLKw.js.map} +1 -1
  168. prefect/server/ui-v2/assets/{header-BmLqNPjl.js → header-BvXtnaKL.js} +2 -2
  169. prefect/server/ui-v2/assets/{header-BmLqNPjl.js.map → header-BvXtnaKL.js.map} +1 -1
  170. prefect/server/ui-v2/assets/{index-DpPA2bX1.js → index-SebwJ2h3.js} +7 -7
  171. prefect/server/ui-v2/assets/index-SebwJ2h3.js.map +1 -0
  172. prefect/server/ui-v2/assets/{index-BNTLwS1u.css → index-iPs14a-7.css} +1 -1
  173. prefect/server/ui-v2/assets/{input-BaSLpSlc.js → input-Dr0oypOO.js} +2 -2
  174. prefect/server/ui-v2/assets/{input-BaSLpSlc.js.map → input-Dr0oypOO.js.map} +1 -1
  175. prefect/server/ui-v2/assets/{json-input-Ck4wcenx.js → json-input-C4f9tary.js} +2 -2
  176. prefect/server/ui-v2/assets/{json-input-Ck4wcenx.js.map → json-input-C4f9tary.js.map} +1 -1
  177. prefect/server/ui-v2/assets/{key-value-C2vDi3xo.js → key-value-C6T0AQJ-.js} +2 -2
  178. prefect/server/ui-v2/assets/{key-value-C2vDi3xo.js.map → key-value-C6T0AQJ-.js.map} +1 -1
  179. prefect/server/ui-v2/assets/{key._key-D_htSbFc.js → key._key-DClBSNAc.js} +2 -2
  180. prefect/server/ui-v2/assets/{key._key-D_htSbFc.js.map → key._key-DClBSNAc.js.map} +1 -1
  181. prefect/server/ui-v2/assets/{key._key-DZrY5Jq5.js → key._key-XPS7oVq5.js} +2 -2
  182. prefect/server/ui-v2/assets/{key._key-DZrY5Jq5.js.map → key._key-XPS7oVq5.js.map} +1 -1
  183. prefect/server/ui-v2/assets/{label-WfC7LL4G.js → label-K0MrFuta.js} +2 -2
  184. prefect/server/ui-v2/assets/{label-WfC7LL4G.js.map → label-K0MrFuta.js.map} +1 -1
  185. prefect/server/ui-v2/assets/{lazy-markdown-CCDNtAxT.js → lazy-markdown-uVUtgyxS.js} +2 -2
  186. prefect/server/ui-v2/assets/{lazy-markdown-CCDNtAxT.js.map → lazy-markdown-uVUtgyxS.js.map} +1 -1
  187. prefect/server/ui-v2/assets/{login-BeT_TSuo.js → login-BrODzAEz.js} +2 -2
  188. prefect/server/ui-v2/assets/{login-BeT_TSuo.js.map → login-BrODzAEz.js.map} +1 -1
  189. prefect/server/ui-v2/assets/{markdown-input-4x3dDfbx.js → markdown-input-tBIKaGf7.js} +2 -2
  190. prefect/server/ui-v2/assets/{markdown-input-4x3dDfbx.js.map → markdown-input-tBIKaGf7.js.map} +1 -1
  191. prefect/server/ui-v2/assets/{popover-wLn6-LQK.js → popover-DxOdMf4-.js} +2 -2
  192. prefect/server/ui-v2/assets/{popover-wLn6-LQK.js.map → popover-DxOdMf4-.js.map} +1 -1
  193. prefect/server/ui-v2/assets/python-example-snippet-BfhCQ6Qd.js +3 -0
  194. prefect/server/ui-v2/assets/{python-example-snippet-BxNh5JeI.js.map → python-example-snippet-BfhCQ6Qd.js.map} +1 -1
  195. prefect/server/ui-v2/assets/{python-input-WU0VDfRW.js → python-input-CsGs2knT.js} +2 -2
  196. prefect/server/ui-v2/assets/{python-input-WU0VDfRW.js.map → python-input-CsGs2knT.js.map} +1 -1
  197. prefect/server/ui-v2/assets/{route-error-state-DChqMSir.js → route-error-state-D3zpyudZ.js} +2 -2
  198. prefect/server/ui-v2/assets/{route-error-state-DChqMSir.js.map → route-error-state-D3zpyudZ.js.map} +1 -1
  199. prefect/server/ui-v2/assets/{run-logs-CRosV4hp.js → run-logs-Cg817JNc.js} +2 -2
  200. prefect/server/ui-v2/assets/{run-logs-CRosV4hp.js.map → run-logs-Cg817JNc.js.map} +1 -1
  201. prefect/server/ui-v2/assets/{runs-BJ5vg2mD.js → runs-BLE8kTnW.js} +2 -2
  202. prefect/server/ui-v2/assets/{runs-BJ5vg2mD.js.map → runs-BLE8kTnW.js.map} +1 -1
  203. prefect/server/ui-v2/assets/{runs-CDLtNNwI.js → runs-r6c5QXLm.js} +2 -2
  204. prefect/server/ui-v2/assets/{runs-CDLtNNwI.js.map → runs-r6c5QXLm.js.map} +1 -1
  205. prefect/server/ui-v2/assets/{schedule-badge-CMgyQe0S.js → schedule-badge-W3ssm5sb.js} +2 -2
  206. prefect/server/ui-v2/assets/{schedule-badge-CMgyQe0S.js.map → schedule-badge-W3ssm5sb.js.map} +1 -1
  207. prefect/server/ui-v2/assets/{schema-form-Dj8aocnY.js → schema-form-C_mXU59h.js} +3 -3
  208. prefect/server/ui-v2/assets/{schema-form-Dj8aocnY.js.map → schema-form-C_mXU59h.js.map} +1 -1
  209. prefect/server/ui-v2/assets/{select-Cvo9G-Ih.js → select-y2lIflCz.js} +2 -2
  210. prefect/server/ui-v2/assets/{select-Cvo9G-Ih.js.map → select-y2lIflCz.js.map} +1 -1
  211. prefect/server/ui-v2/assets/{service-DqISgcwD.js → service-DQBoCx1F.js} +2 -2
  212. prefect/server/ui-v2/assets/{service-DqISgcwD.js.map → service-DQBoCx1F.js.map} +1 -1
  213. prefect/server/ui-v2/assets/{settings-DnjyoScP.js → settings-9Ww5jBq4.js} +2 -2
  214. prefect/server/ui-v2/assets/{settings-DnjyoScP.js.map → settings-9Ww5jBq4.js.map} +1 -1
  215. prefect/server/ui-v2/assets/{skeleton-DArRq_9V.js → skeleton-CPJoizSQ.js} +2 -2
  216. prefect/server/ui-v2/assets/{skeleton-DArRq_9V.js.map → skeleton-CPJoizSQ.js.map} +1 -1
  217. prefect/server/ui-v2/assets/{state-badge-ngrQ67nq.js → state-badge-DFFq5COZ.js} +2 -2
  218. prefect/server/ui-v2/assets/{state-badge-ngrQ67nq.js.map → state-badge-DFFq5COZ.js.map} +1 -1
  219. prefect/server/ui-v2/assets/{state-select-bUmduh8e.js → state-select-TCSj7IPn.js} +2 -2
  220. prefect/server/ui-v2/assets/{state-select-bUmduh8e.js.map → state-select-TCSj7IPn.js.map} +1 -1
  221. prefect/server/ui-v2/assets/{status-badge-BCzVdEts.js → status-badge-5pEl4xty.js} +2 -2
  222. prefect/server/ui-v2/assets/{status-badge-BCzVdEts.js.map → status-badge-5pEl4xty.js.map} +1 -1
  223. prefect/server/ui-v2/assets/{tag-badge-group-BYDgVfl7.js → tag-badge-group-vf-EXVLw.js} +2 -2
  224. prefect/server/ui-v2/assets/{tag-badge-group-BYDgVfl7.js.map → tag-badge-group-vf-EXVLw.js.map} +1 -1
  225. prefect/server/ui-v2/assets/{tag-badge-DTVaiChx.js → tag-badge-mp5HxqMT.js} +2 -2
  226. prefect/server/ui-v2/assets/{tag-badge-DTVaiChx.js.map → tag-badge-mp5HxqMT.js.map} +1 -1
  227. prefect/server/ui-v2/assets/{tags-input-hwPEN4A8.js → tags-input-DS8uhDId.js} +2 -2
  228. prefect/server/ui-v2/assets/{tags-input-hwPEN4A8.js.map → tags-input-DS8uhDId.js.map} +1 -1
  229. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-C9Cd2k_x.js → task-run-concurrency-limits-reset-dialog-DVCB_sAN.js} +2 -2
  230. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-C9Cd2k_x.js.map → task-run-concurrency-limits-reset-dialog-DVCB_sAN.js.map} +1 -1
  231. prefect/server/ui-v2/assets/{task-run._id-Bh4SxXPB.js → task-run._id-BF5yIJbu.js} +2 -2
  232. prefect/server/ui-v2/assets/{task-run._id-Bh4SxXPB.js.map → task-run._id-BF5yIJbu.js.map} +1 -1
  233. prefect/server/ui-v2/assets/{task-run._id-CRu9NFG7.js → task-run._id-DwniCJAS.js} +2 -2
  234. prefect/server/ui-v2/assets/{task-run._id-CRu9NFG7.js.map → task-run._id-DwniCJAS.js.map} +1 -1
  235. prefect/server/ui-v2/assets/{task-runs-ChRc-e48.js → task-runs-juaJgpw8.js} +2 -2
  236. prefect/server/ui-v2/assets/{task-runs-ChRc-e48.js.map → task-runs-juaJgpw8.js.map} +1 -1
  237. prefect/server/ui-v2/assets/{timezone-select-C5FfG9pp.js → timezone-select-BxW5YhB3.js} +2 -2
  238. prefect/server/ui-v2/assets/{timezone-select-C5FfG9pp.js.map → timezone-select-BxW5YhB3.js.map} +1 -1
  239. prefect/server/ui-v2/assets/{toggle-group-_u3r2CNw.js → toggle-group-cZa2kNKg.js} +2 -2
  240. prefect/server/ui-v2/assets/{toggle-group-_u3r2CNw.js.map → toggle-group-cZa2kNKg.js.map} +1 -1
  241. prefect/server/ui-v2/assets/{tooltip-C9wxoNDR.js → tooltip-BzlEotat.js} +2 -2
  242. prefect/server/ui-v2/assets/{tooltip-C9wxoNDR.js.map → tooltip-BzlEotat.js.map} +1 -1
  243. prefect/server/ui-v2/assets/{trigger-details-CHNjlEuw.js → trigger-details-Bv6ZRMq5.js} +2 -2
  244. prefect/server/ui-v2/assets/{trigger-details-CHNjlEuw.js.map → trigger-details-Bv6ZRMq5.js.map} +1 -1
  245. prefect/server/ui-v2/assets/{ui-settings-CaRokgmg.js → ui-settings-Hapar41k.js} +2 -2
  246. prefect/server/ui-v2/assets/{ui-settings-CaRokgmg.js.map → ui-settings-Hapar41k.js.map} +1 -1
  247. prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-BughSutx.js → use-delete-automation-confirmation-dialog-Bk5-cKjd.js} +2 -2
  248. prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-BughSutx.js.map → use-delete-automation-confirmation-dialog-Bk5-cKjd.js.map} +1 -1
  249. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-CKHqokBH.js → use-delete-block-document-confirmation-dialog-CYyZ4sTs.js} +2 -2
  250. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-CKHqokBH.js.map → use-delete-block-document-confirmation-dialog-CYyZ4sTs.js.map} +1 -1
  251. prefect/server/ui-v2/assets/{use-delete-deployment-confirmation-dialog-C3ycZNgq.js → use-delete-deployment-confirmation-dialog-CHPDQ8vA.js} +2 -2
  252. prefect/server/ui-v2/assets/{use-delete-deployment-confirmation-dialog-C3ycZNgq.js.map → use-delete-deployment-confirmation-dialog-CHPDQ8vA.js.map} +1 -1
  253. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-DhfQBVCF.js → use-get-artifacts-flow-task-runs-3svJ-Wms.js} +2 -2
  254. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-DhfQBVCF.js.map → use-get-artifacts-flow-task-runs-3svJ-Wms.js.map} +1 -1
  255. prefect/server/ui-v2/assets/{use-page-size-preference-h2fMa3uB.js → use-page-size-preference-IOpF1ai0.js} +2 -2
  256. prefect/server/ui-v2/assets/{use-page-size-preference-h2fMa3uB.js.map → use-page-size-preference-IOpF1ai0.js.map} +1 -1
  257. prefect/server/ui-v2/assets/{use-resource-options-D89EKwub.js → use-resource-options-BEKWTTOl.js} +2 -2
  258. prefect/server/ui-v2/assets/{use-resource-options-D89EKwub.js.map → use-resource-options-BEKWTTOl.js.map} +1 -1
  259. prefect/server/ui-v2/assets/{use-stepper-EHPLdSM1.js → use-stepper-C1f9nvnR.js} +2 -2
  260. prefect/server/ui-v2/assets/{use-stepper-EHPLdSM1.js.map → use-stepper-C1f9nvnR.js.map} +1 -1
  261. prefect/server/ui-v2/assets/{variables-CNffa7fL.js → variables-BWiRHQ3L.js} +2 -2
  262. prefect/server/ui-v2/assets/{variables-CNffa7fL.js.map → variables-BWiRHQ3L.js.map} +1 -1
  263. prefect/server/ui-v2/assets/{variables-CuEJhTIi.js → variables-CxOLIk60.js} +2 -2
  264. prefect/server/ui-v2/assets/{variables-CuEJhTIi.js.map → variables-CxOLIk60.js.map} +1 -1
  265. prefect/server/ui-v2/assets/vendor-radix-CTETmXwX.js +42 -0
  266. prefect/server/ui-v2/assets/vendor-radix-CTETmXwX.js.map +1 -0
  267. prefect/server/ui-v2/assets/{vendor-react-BIruhmht.js → vendor-react-Db0NSBGF.js} +2 -2
  268. prefect/server/ui-v2/assets/{vendor-react-BIruhmht.js.map → vendor-react-Db0NSBGF.js.map} +1 -1
  269. prefect/server/ui-v2/assets/{vendor-recharts-CPNKWlI4.js → vendor-recharts-CnUR3BGJ.js} +2 -2
  270. prefect/server/ui-v2/assets/{vendor-recharts-CPNKWlI4.js.map → vendor-recharts-CnUR3BGJ.js.map} +1 -1
  271. prefect/server/ui-v2/assets/vendor-tanstack-Dx3GObhk.js +5 -0
  272. prefect/server/ui-v2/assets/vendor-tanstack-Dx3GObhk.js.map +1 -0
  273. prefect/server/ui-v2/assets/{work-pool-queue-form-D2p9bV5H.js → work-pool-queue-form-Bq2X5LHj.js} +2 -2
  274. prefect/server/ui-v2/assets/{work-pool-queue-form-D2p9bV5H.js.map → work-pool-queue-form-Bq2X5LHj.js.map} +1 -1
  275. prefect/server/ui-v2/assets/{work-pool-queue-toggle-mpNXNH8j.js → work-pool-queue-toggle-J85yKGTD.js} +2 -2
  276. prefect/server/ui-v2/assets/{work-pool-queue-toggle-mpNXNH8j.js.map → work-pool-queue-toggle-J85yKGTD.js.map} +1 -1
  277. prefect/server/ui-v2/assets/{work-pool._workPoolName-yitWW_tk.js → work-pool._workPoolName-YCXOdHVr.js} +2 -2
  278. prefect/server/ui-v2/assets/{work-pool._workPoolName-yitWW_tk.js.map → work-pool._workPoolName-YCXOdHVr.js.map} +1 -1
  279. prefect/server/ui-v2/assets/{work-pool._workPoolName-CE8bmrct.js → work-pool._workPoolName-bUofZYwQ.js} +2 -2
  280. prefect/server/ui-v2/assets/{work-pool._workPoolName-CE8bmrct.js.map → work-pool._workPoolName-bUofZYwQ.js.map} +1 -1
  281. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-D0nx4Eah.js → work-pool_._workPoolName.edit-CYfVbRNf.js} +2 -2
  282. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-D0nx4Eah.js.map → work-pool_._workPoolName.edit-CYfVbRNf.js.map} +1 -1
  283. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-DA2UEqLu.js → work-pool_._workPoolName.edit-DiXs_liC.js} +2 -2
  284. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-DA2UEqLu.js.map → work-pool_._workPoolName.edit-DiXs_liC.js.map} +1 -1
  285. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-JXuxoDuG.js → work-pool_._workPoolName.queue._workQueueName-BQuxeqDJ.js} +2 -2
  286. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-JXuxoDuG.js.map → work-pool_._workPoolName.queue._workQueueName-BQuxeqDJ.js.map} +1 -1
  287. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-DBjFQl5l.js → work-pool_._workPoolName.queue._workQueueName-DKeaiBcU.js} +2 -2
  288. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-DBjFQl5l.js.map → work-pool_._workPoolName.queue._workQueueName-DKeaiBcU.js.map} +1 -1
  289. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue.create-D66B3TgZ.js → work-pool_._workPoolName.queue.create-BOXgjauS.js} +2 -2
  290. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue.create-D66B3TgZ.js.map → work-pool_._workPoolName.queue.create-BOXgjauS.js.map} +1 -1
  291. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue.create-C4-aNOiQ.js → work-pool_._workPoolName.queue.create-D13u2idT.js} +2 -2
  292. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue.create-C4-aNOiQ.js.map → work-pool_._workPoolName.queue.create-D13u2idT.js.map} +1 -1
  293. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue_._workQueueName.edit-D0mwu3Qq.js → work-pool_._workPoolName.queue_._workQueueName.edit-B9IWAocA.js} +2 -2
  294. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue_._workQueueName.edit-D0mwu3Qq.js.map → work-pool_._workPoolName.queue_._workQueueName.edit-B9IWAocA.js.map} +1 -1
  295. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue_._workQueueName.edit-BhfkkDyJ.js → work-pool_._workPoolName.queue_._workQueueName.edit-IUEqbb8N.js} +2 -2
  296. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue_._workQueueName.edit-BhfkkDyJ.js.map → work-pool_._workPoolName.queue_._workQueueName.edit-IUEqbb8N.js.map} +1 -1
  297. prefect/server/ui-v2/assets/{work-pools-CGC3mSny.js → work-pools-CF0R3DPQ.js} +2 -2
  298. prefect/server/ui-v2/assets/{work-pools-CGC3mSny.js.map → work-pools-CF0R3DPQ.js.map} +1 -1
  299. prefect/server/ui-v2/assets/{work-pools-CfA9RMA9.js → work-pools-CFgVsLNa.js} +2 -2
  300. prefect/server/ui-v2/assets/{work-pools-CfA9RMA9.js.map → work-pools-CFgVsLNa.js.map} +1 -1
  301. prefect/server/ui-v2/assets/{work-pools-CN3RyiZN.js → work-pools-Ca2SI6yr.js} +2 -2
  302. prefect/server/ui-v2/assets/{work-pools-CN3RyiZN.js.map → work-pools-Ca2SI6yr.js.map} +1 -1
  303. prefect/server/ui-v2/assets/{work-queue-icon-text-9KRWnE0A.js → work-queue-icon-text-D1EV2W3e.js} +2 -2
  304. prefect/server/ui-v2/assets/{work-queue-icon-text-9KRWnE0A.js.map → work-queue-icon-text-D1EV2W3e.js.map} +1 -1
  305. prefect/server/ui-v2/assets/{work-queue-select-CLtC0i-b.js → work-queue-select-DRgR5_TX.js} +2 -2
  306. prefect/server/ui-v2/assets/{work-queue-select-CLtC0i-b.js.map → work-queue-select-DRgR5_TX.js.map} +1 -1
  307. prefect/server/ui-v2/index.html +30 -30
  308. prefect/server/utilities/worker_channel.py +17 -2
  309. {prefect-3.7.7.dev2.dist-info → prefect-3.7.8.dev2.dist-info}/METADATA +2 -2
  310. {prefect-3.7.7.dev2.dist-info → prefect-3.7.8.dev2.dist-info}/RECORD +313 -313
  311. prefect/server/ui-v2/assets/button-D1nS4G4b.js +0 -3
  312. prefect/server/ui-v2/assets/deployment_._id.edit-BmCwRQfG.js +0 -2
  313. prefect/server/ui-v2/assets/index-DpPA2bX1.js.map +0 -1
  314. prefect/server/ui-v2/assets/python-example-snippet-BxNh5JeI.js +0 -3
  315. prefect/server/ui-v2/assets/vendor-radix-Dlx3ZkX2.js +0 -42
  316. prefect/server/ui-v2/assets/vendor-radix-Dlx3ZkX2.js.map +0 -1
  317. prefect/server/ui-v2/assets/vendor-tanstack-CghpeqA9.js +0 -5
  318. prefect/server/ui-v2/assets/vendor-tanstack-CghpeqA9.js.map +0 -1
  319. {prefect-3.7.7.dev2.dist-info → prefect-3.7.8.dev2.dist-info}/WHEEL +0 -0
  320. {prefect-3.7.7.dev2.dist-info → prefect-3.7.8.dev2.dist-info}/entry_points.txt +0 -0
  321. {prefect-3.7.7.dev2.dist-info → prefect-3.7.8.dev2.dist-info}/licenses/LICENSE +0 -0
prefect/_build_info.py CHANGED
@@ -1,5 +1,5 @@
1
1
  # Generated by versioningit
2
- __version__ = "3.7.7.dev2"
3
- __build_date__ = "2026-07-02 09:11:30.092077+00:00"
4
- __git_commit__ = "ab6a0dc6d01900814612a11dc41d0d80c9549112"
2
+ __version__ = "3.7.8.dev2"
3
+ __build_date__ = "2026-07-07 09:14:19.574605+00:00"
4
+ __git_commit__ = "3f47d765fea655c92f2d700fedee8635ea2d4d2f"
5
5
  __dirty__ = False
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import argparse
4
- import builtins
5
4
  import contextlib
6
5
  import os
7
6
  import sys
@@ -20,7 +19,8 @@ from prefect.deployments.steps.core import (
20
19
  run_steps,
21
20
  )
22
21
  from prefect.filesystems import LocalFileSystem
23
- from prefect.logging.loggers import get_logger
22
+ from prefect.logging.handlers import APILogHandler
23
+ from prefect.logging.loggers import PrefectLogAdapter, flow_run_logger
24
24
  from prefect.utilities.filesystem import relative_path_to_current_platform
25
25
  from prefect.utilities.processutils import get_sys_executable
26
26
 
@@ -29,7 +29,6 @@ if TYPE_CHECKING:
29
29
  from prefect.client.schemas.objects import FlowRun
30
30
  from prefect.client.schemas.responses import DeploymentResponse
31
31
 
32
- LOGGER = get_logger("prefect.runner.workspace_resolver")
33
32
  STORAGE_BASE_PATH_PLACEHOLDER = "$STORAGE_BASE_PATH"
34
33
 
35
34
 
@@ -67,11 +66,6 @@ def get_workspace_resolver_command(
67
66
  ]
68
67
 
69
68
 
70
- def _stderr_print(*args: Any, **kwargs: Any) -> None:
71
- kwargs.pop("style", None)
72
- builtins.print(*args, file=sys.stderr, **kwargs)
73
-
74
-
75
69
  def _resolve_runtime_entrypoint(entrypoint: str) -> str:
76
70
  if ":" not in entrypoint:
77
71
  return entrypoint
@@ -211,6 +205,7 @@ async def _ensure_entrypoint_in_workspace(
211
205
  workspace_root: Path,
212
206
  source_cwd: Path,
213
207
  storage_base_path: Path | None,
208
+ logger: PrefectLogAdapter,
214
209
  ) -> Path:
215
210
  if _has_entrypoint_file(deployment.entrypoint, workspace_root):
216
211
  return workspace_root
@@ -229,6 +224,7 @@ async def _ensure_entrypoint_in_workspace(
229
224
  workspace_root,
230
225
  source_cwd,
231
226
  storage_base_path,
227
+ logger,
232
228
  )
233
229
  return workspace_root
234
230
 
@@ -259,6 +255,7 @@ async def _pull_storage_into_workspace(
259
255
  workspace_root: Path,
260
256
  source_cwd: Path,
261
257
  storage_base_path: Path | None,
258
+ logger: PrefectLogAdapter,
262
259
  ) -> Path:
263
260
  local_path = _workspace_destination_for_deployment_path(
264
261
  deployment.path, workspace_root, storage_base_path
@@ -285,7 +282,7 @@ async def _pull_storage_into_workspace(
285
282
  )
286
283
  storage_block = LocalFileSystem(basepath=from_path)
287
284
 
288
- LOGGER.info("Downloading flow code from storage at %r", from_path)
285
+ logger.info("Downloading flow code from storage at %r", from_path)
289
286
  await storage_block.get_directory(from_path=from_path, local_path=str(local_path))
290
287
  return local_path
291
288
 
@@ -301,6 +298,8 @@ async def prepare_workspace(
301
298
  f"Deployment {deployment.id} does not have an entrypoint and can not be run."
302
299
  )
303
300
 
301
+ run_logger = flow_run_logger(flow_run)
302
+
304
303
  source_cwd = Path.cwd().resolve()
305
304
  storage_base_path = _get_configured_storage_base_path()
306
305
  resolved_workspace_root = Path(workspace_root).expanduser().resolve()
@@ -314,6 +313,7 @@ async def prepare_workspace(
314
313
  resolved_workspace_root,
315
314
  source_cwd,
316
315
  storage_base_path,
316
+ run_logger,
317
317
  )
318
318
  local_runtime_directory = _resolve_local_runtime_directory(
319
319
  deployment.path, source_cwd, storage_base_path
@@ -326,7 +326,9 @@ async def prepare_workspace(
326
326
  working_directory = resolved_workspace_root
327
327
  step_selected_working_directory = False
328
328
  os.chdir(resolved_workspace_root)
329
- LOGGER.info("Running %s deployment pull step(s)", len(deployment.pull_steps))
329
+ run_logger.info(
330
+ "Running %s deployment pull step(s)", len(deployment.pull_steps)
331
+ )
330
332
 
331
333
  def _track_step_workspace(
332
334
  _step: dict[str, Any],
@@ -359,10 +361,10 @@ async def prepare_workspace(
359
361
  with _observe_step_completion(_track_step_workspace):
360
362
  await run_steps(
361
363
  deployment.pull_steps,
362
- print_function=_stderr_print,
364
+ print_function=run_logger.warning,
363
365
  deployment=deployment,
364
366
  flow_run=flow_run,
365
- logger=LOGGER,
367
+ logger=run_logger,
366
368
  )
367
369
  finally:
368
370
  _PULL_STEP_SOURCE_CWD.reset(source_cwd_token)
@@ -374,6 +376,7 @@ async def prepare_workspace(
374
376
  resolved_workspace_root,
375
377
  source_cwd,
376
378
  storage_base_path,
379
+ run_logger,
377
380
  )
378
381
 
379
382
  os.chdir(working_directory)
@@ -436,6 +439,8 @@ async def _main_async(argv: list[str] | None = None) -> int:
436
439
  sys.stdout.write(result.model_dump_json())
437
440
  sys.stdout.write("\n")
438
441
  return 1
442
+ finally:
443
+ await APILogHandler.aflush()
439
444
 
440
445
  result = PreparedWorkspaceResult(status="success", workspace=workspace)
441
446
  sys.stdout.write(result.model_dump_json())
prefect/server/AGENTS.md CHANGED
@@ -67,7 +67,7 @@ alembic_revision("description") # Create a new migration
67
67
 
68
68
  ## UI Serving Architecture
69
69
 
70
- Both V1 and V2 UI bundles are served simultaneously when available: V1 at `PREFECT_UI_SERVE_BASE` (default `/`), V2 at `{base_url}/v2`. The `redirect_to_preferred_ui` middleware routes neutral entry points using the `prefect_ui_version` cookie. `PREFECT_SERVER_UI_V2_ENABLED` sets the *default* for browsers with no saved preference — it does not remove V1 or force all users to V2. Both bundles must be built before packaging (`PREFECT_REQUIRE_PACKAGED_UI_BUNDLES=1` enforces this via `hatch_build.py`).
70
+ Both V1 and V2 UI bundles are served simultaneously when available: V1 at `PREFECT_UI_SERVE_BASE` (default `/`), V2 at `{base_url}/v2`. The `redirect_to_preferred_ui` middleware routes neutral entry points using the `prefect_ui_version` cookie. `PREFECT_SERVER_UI_V2_ENABLED` sets the *default* for browsers with no saved preference — it does not remove V1 or force all users to V2. Both bundles must be built before packaging (`PREFECT_REQUIRE_PACKAGED_UI_BUNDLES=1` enforces this via `hatch_build.py`). **The version-redirect `Location` header must be a relative path** — using `request.url.replace(...)` builds an absolute URL that embeds the internal Host behind a reverse proxy and leaks it to the client.
71
71
 
72
72
  ## Main Subsystems
73
73
 
@@ -19,7 +19,6 @@ class UIBundle:
19
19
  static_dir: str
20
20
  base_url: str
21
21
  cache_key: str
22
- mount_name: str
23
22
 
24
23
 
25
24
  def log_ui_static_copy_error(
@@ -43,7 +43,6 @@ from fastapi.openapi.utils import get_openapi
43
43
  from fastapi.responses import JSONResponse, RedirectResponse
44
44
  from fastapi.staticfiles import StaticFiles
45
45
  from packaging.version import Version
46
- from starlette.exceptions import HTTPException
47
46
  from typing_extensions import Self
48
47
 
49
48
  import prefect
@@ -176,21 +175,6 @@ def _install_sqlite_locked_log_filter() -> None:
176
175
  _SQLITE_LOCKED_LOG_FILTER = filter_
177
176
 
178
177
 
179
- class SPAStaticFiles(StaticFiles):
180
- """
181
- Implementation of `StaticFiles` for serving single page applications.
182
-
183
- Adds `get_response` handling to ensure that when a resource isn't found the
184
- application still returns the index.
185
- """
186
-
187
- async def get_response(self, path: str, scope: Any) -> Response:
188
- try:
189
- return await super().get_response(path, scope)
190
- except HTTPException:
191
- return await super().get_response("./index.html", scope)
192
-
193
-
194
178
  def _normalize_ui_base_url(base_url: str) -> str:
195
179
  if not base_url:
196
180
  return "/"
@@ -616,7 +600,6 @@ def create_ui_app(ephemeral: bool) -> FastAPI:
616
600
  static_dir=build_static_dir("v1", str(prefect.__ui_static_subpath__)),
617
601
  base_url=v1_base_url,
618
602
  cache_key=f"v1:{prefect.__version__}:{v1_base_url}",
619
- mount_name="ui_v1",
620
603
  ),
621
604
  UIBundle(
622
605
  version="v2",
@@ -624,7 +607,6 @@ def create_ui_app(ephemeral: bool) -> FastAPI:
624
607
  static_dir=build_static_dir("v2", str(prefect.__ui_v2_static_subpath__)),
625
608
  base_url=v2_base_url,
626
609
  cache_key=f"v2:{prefect.__version__}:{v2_base_url}",
627
- mount_name="ui_v2",
628
610
  ),
629
611
  ]
630
612
 
@@ -767,10 +749,10 @@ def create_ui_app(ephemeral: bool) -> FastAPI:
767
749
  if bundle is None:
768
750
  continue
769
751
 
770
- ui_app.mount(
752
+ ui_app.frontend(
771
753
  bundle.base_url,
772
- SPAStaticFiles(directory=bundle.static_dir),
773
- name=bundle.mount_name,
754
+ directory=bundle.static_dir,
755
+ fallback="index.html",
774
756
  )
775
757
 
776
758
  return ui_app
@@ -1148,6 +1148,7 @@ async def worker_channel_connect(
1148
1148
  work_pool_id=ready.payload.initial_snapshot.work_pool.id,
1149
1149
  consumer_id=hello.payload.consumer_id,
1150
1150
  worker_name=hello.payload.worker_name,
1151
+ work_pool_updated=ready.payload.initial_snapshot.work_pool.updated,
1151
1152
  cleanup_queue=(
1152
1153
  cleanup_queue
1153
1154
  if CLEANUP_DELIVERY_CAPABILITY
@@ -309,7 +309,6 @@ async def read_artifacts(
309
309
  task_run_filter: Only select artifacts whose task runs matching this filter
310
310
  deployment_filter: Only select artifacts whose flow runs belong to deployments matching this filter
311
311
  flow_filter: Only select artifacts whose flow runs belong to flows matching this filter
312
- work_pool_filter: Only select artifacts whose flow runs belong to work pools matching this filter
313
312
  """
314
313
  query = sa.select(db.Artifact).order_by(*sort.as_sql_sort())
315
314
 
@@ -357,7 +356,6 @@ async def read_latest_artifacts(
357
356
  task_run_filter: Only select artifacts whose task runs matching this filter
358
357
  deployment_filter: Only select artifacts whose flow runs belong to deployments matching this filter
359
358
  flow_filter: Only select artifacts whose flow runs belong to flows matching this filter
360
- work_pool_filter: Only select artifacts whose flow runs belong to work pools matching this filter
361
359
  """
362
360
  query = sa.select(db.ArtifactCollection).order_by(*sort.as_sql_sort())
363
361
  query = await _apply_artifact_collection_filters(
@@ -294,11 +294,11 @@ async def read_work_queue_by_name(
294
294
  db: PrefectDBInterface, session: AsyncSession, name: str
295
295
  ) -> Optional[orm_models.WorkQueue]:
296
296
  """
297
- Reads a WorkQueue by id.
297
+ Reads a WorkQueue by name.
298
298
 
299
299
  Args:
300
300
  session (AsyncSession): A database session
301
- work_queue_id (str): a WorkQueue id
301
+ name (str): a WorkQueue name
302
302
 
303
303
  Returns:
304
304
  orm_models.WorkQueue: the WorkQueue
@@ -325,7 +325,7 @@ async def update_work_pool(
325
325
  Args:
326
326
  session (AsyncSession): A database session
327
327
  work_pool_id (UUID): a WorkPool id
328
- worker: the work queue data
328
+ work_pool: the work pool data
329
329
  emit_status_change: function to call when work pool
330
330
  status is changed
331
331
  emit_update_event: whether to emit an event for updated non-status fields
@@ -1046,7 +1046,7 @@ class WorkQueueHealthPolicy(PrefectBaseModel):
1046
1046
  Given empirical information about the state of the work queue, evaluate its health status.
1047
1047
 
1048
1048
  Args:
1049
- late_runs: the count of late runs for the work queue.
1049
+ late_runs_count: the count of late runs for the work queue.
1050
1050
  last_polled: the last time the work queue was polled, if available.
1051
1051
 
1052
1052
  Returns:
@@ -484,13 +484,18 @@ async def consumer(
484
484
  raise
485
485
 
486
486
  async def flush_periodically():
487
- try:
488
- while True:
487
+ while True:
488
+ try:
489
489
  await asyncio.sleep(flush_every)
490
490
  if queue.qsize():
491
491
  await flush()
492
- except asyncio.CancelledError:
493
- return
492
+ except asyncio.CancelledError:
493
+ return
494
+ except Exception:
495
+ # flush() re-raises when events are dropped; this task is never
496
+ # awaited, so letting that propagate would kill periodic
497
+ # flushing silently and strand queued events (issue #21057)
498
+ logger.exception("Error during periodic flush; continuing")
494
499
 
495
500
  async def message_handler(message: Message):
496
501
  event: ReceivedEvent = ReceivedEvent.model_validate_json(message.data)
@@ -1,2 +1,2 @@
1
- import{E as e,F as t,O as n}from"./vendor-tanstack-CghpeqA9.js";import{n as r}from"./service-DqISgcwD.js";var i={settings:()=>[`settings`],version:()=>[`version`],defaultResultStorage:()=>[`default-result-storage`]},a=()=>n({queryKey:i.version(),queryFn:async()=>{let e=await(await r()).GET(`/admin/version`);if(!e.data)throw Error(`'data' expected`);return e.data}}),o=()=>n({queryKey:i.settings(),queryFn:async()=>{let e=await(await r()).GET(`/admin/settings`);if(!e.data)throw Error(`'data' expected`);return e.data}}),s=()=>n({queryKey:i.defaultResultStorage(),queryFn:async()=>{let e=await(await r()).GET(`/admin/storage`);if(!e.data)throw Error(`'data' expected`);return e.data}}),c=()=>{let n=t(),{mutate:a,...o}=e({mutationFn:async e=>{let t=await(await r()).PUT(`/admin/storage`,{body:e});if(!t.data)throw Error(`'data' expected`);return t.data},onSuccess:e=>{n.setQueryData(i.defaultResultStorage(),e),n.invalidateQueries({queryKey:i.defaultResultStorage()})}});return{updateDefaultResultStorage:a,...o}},l=()=>{let n=t(),{mutate:a,...o}=e({mutationFn:async()=>(await r()).DELETE(`/admin/storage`),onSuccess:()=>{n.setQueryData(i.defaultResultStorage(),{default_result_storage_block_id:null}),n.invalidateQueries({queryKey:i.defaultResultStorage()})}});return{clearDefaultResultStorage:a,...o}};export{l as a,i,o as n,c as o,a as r,s as t};
2
- //# sourceMappingURL=admin-BAL15Uwl.js.map
1
+ import{E as e,F as t,O as n}from"./vendor-tanstack-Dx3GObhk.js";import{n as r}from"./service-DQBoCx1F.js";var i={settings:()=>[`settings`],version:()=>[`version`],defaultResultStorage:()=>[`default-result-storage`]},a=()=>n({queryKey:i.version(),queryFn:async()=>{let e=await(await r()).GET(`/admin/version`);if(!e.data)throw Error(`'data' expected`);return e.data}}),o=()=>n({queryKey:i.settings(),queryFn:async()=>{let e=await(await r()).GET(`/admin/settings`);if(!e.data)throw Error(`'data' expected`);return e.data}}),s=()=>n({queryKey:i.defaultResultStorage(),queryFn:async()=>{let e=await(await r()).GET(`/admin/storage`);if(!e.data)throw Error(`'data' expected`);return e.data}}),c=()=>{let n=t(),{mutate:a,...o}=e({mutationFn:async e=>{let t=await(await r()).PUT(`/admin/storage`,{body:e});if(!t.data)throw Error(`'data' expected`);return t.data},onSuccess:e=>{n.setQueryData(i.defaultResultStorage(),e),n.invalidateQueries({queryKey:i.defaultResultStorage()})}});return{updateDefaultResultStorage:a,...o}},l=()=>{let n=t(),{mutate:a,...o}=e({mutationFn:async()=>(await r()).DELETE(`/admin/storage`),onSuccess:()=>{n.setQueryData(i.defaultResultStorage(),{default_result_storage_block_id:null}),n.invalidateQueries({queryKey:i.defaultResultStorage()})}});return{clearDefaultResultStorage:a,...o}};export{l as a,i,o as n,c as o,a as r,s as t};
2
+ //# sourceMappingURL=admin-BwmAgV1B.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin-BAL15Uwl.js","names":[],"sources":["../../src/api/admin/admin.ts"],"sourcesContent":["import {\n\tqueryOptions,\n\tuseMutation,\n\tuseQueryClient,\n} from \"@tanstack/react-query\";\nimport type { components } from \"@/api/prefect\";\nimport { getQueryService } from \"@/api/service\";\n\n/**\n * ```\n * 🏗️ Admin queries construction 👷\n * settings => ['settings'] // key to match ['settings']\n * version => ['version'] // key to match ['version']\n * defaultResultStorage => ['default-result-storage'] // key to match ['default-result-storage']\n * ```\n * */\nexport const queryKeyFactory = {\n\tsettings: () => [\"settings\"] as const,\n\tversion: () => [\"version\"] as const,\n\tdefaultResultStorage: () => [\"default-result-storage\"] as const,\n};\n\nexport type ServerDefaultResultStorage =\n\tcomponents[\"schemas\"][\"ServerDefaultResultStorage\"];\nexport type ServerDefaultResultStorageUpdate =\n\tcomponents[\"schemas\"][\"ServerDefaultResultStorageUpdate\"];\n\n// ----- 🔑 Queries 🗄️\n// ----------------------------\n\n/**\n *\n * @returns react query options object for getting the Prefect's version number\n */\nexport const buildGetVersionQuery = () =>\n\tqueryOptions({\n\t\tqueryKey: queryKeyFactory.version(),\n\t\tqueryFn: async () => {\n\t\t\tconst res = await (await getQueryService()).GET(\"/admin/version\");\n\t\t\tif (!res.data) {\n\t\t\t\tthrow new Error(\"'data' expected\");\n\t\t\t}\n\t\t\treturn res.data;\n\t\t},\n\t});\n\n/**\n *\n * @returns react query options object for getting the Prefect server's settings information\n */\nexport const buildGetSettingsQuery = () =>\n\tqueryOptions({\n\t\tqueryKey: queryKeyFactory.settings(),\n\t\tqueryFn: async () => {\n\t\t\tconst res = await (await getQueryService()).GET(\"/admin/settings\");\n\t\t\tif (!res.data) {\n\t\t\t\tthrow new Error(\"'data' expected\");\n\t\t\t}\n\t\t\treturn res.data;\n\t\t},\n\t});\n\n/**\n *\n * @returns react query options object for getting the server default result storage block\n */\nexport const buildGetDefaultResultStorageQuery = () =>\n\tqueryOptions({\n\t\tqueryKey: queryKeyFactory.defaultResultStorage(),\n\t\tqueryFn: async () => {\n\t\t\tconst res = await (await getQueryService()).GET(\"/admin/storage\");\n\t\t\tif (!res.data) {\n\t\t\t\tthrow new Error(\"'data' expected\");\n\t\t\t}\n\t\t\treturn res.data;\n\t\t},\n\t});\n\nexport const useUpdateDefaultResultStorage = () => {\n\tconst queryClient = useQueryClient();\n\n\tconst { mutate: updateDefaultResultStorage, ...rest } = useMutation({\n\t\tmutationFn: async (body: ServerDefaultResultStorageUpdate) => {\n\t\t\tconst res = await (await getQueryService()).PUT(\"/admin/storage\", {\n\t\t\t\tbody,\n\t\t\t});\n\t\t\tif (!res.data) {\n\t\t\t\tthrow new Error(\"'data' expected\");\n\t\t\t}\n\t\t\treturn res.data;\n\t\t},\n\t\tonSuccess: (data) => {\n\t\t\tqueryClient.setQueryData(queryKeyFactory.defaultResultStorage(), data);\n\t\t\tvoid queryClient.invalidateQueries({\n\t\t\t\tqueryKey: queryKeyFactory.defaultResultStorage(),\n\t\t\t});\n\t\t},\n\t});\n\n\treturn { updateDefaultResultStorage, ...rest };\n};\n\nexport const useClearDefaultResultStorage = () => {\n\tconst queryClient = useQueryClient();\n\n\tconst { mutate: clearDefaultResultStorage, ...rest } = useMutation({\n\t\tmutationFn: async () => (await getQueryService()).DELETE(\"/admin/storage\"),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.setQueryData(queryKeyFactory.defaultResultStorage(), {\n\t\t\t\tdefault_result_storage_block_id: null,\n\t\t\t} satisfies ServerDefaultResultStorage);\n\t\t\tvoid queryClient.invalidateQueries({\n\t\t\t\tqueryKey: queryKeyFactory.defaultResultStorage(),\n\t\t\t});\n\t\t},\n\t});\n\n\treturn { clearDefaultResultStorage, ...rest };\n};\n"],"mappings":"0GAgBA,IAAa,EAAkB,CAC9B,aAAgB,CAAC,UAAU,EAC3B,YAAe,CAAC,SAAS,EACzB,yBAA4B,CAAC,wBAAwB,CACtD,EAca,MACZ,EAAa,CACZ,SAAU,EAAgB,QAAQ,EAClC,QAAS,SAAY,CACpB,IAAM,EAAM,MAAO,MAAM,EAAgB,EAAA,CAAG,IAAI,gBAAgB,EAChE,GAAI,CAAC,EAAI,KACR,MAAU,MAAM,iBAAiB,EAElC,OAAO,EAAI,IACZ,CACD,CAAC,EAMW,MACZ,EAAa,CACZ,SAAU,EAAgB,SAAS,EACnC,QAAS,SAAY,CACpB,IAAM,EAAM,MAAO,MAAM,EAAgB,EAAA,CAAG,IAAI,iBAAiB,EACjE,GAAI,CAAC,EAAI,KACR,MAAU,MAAM,iBAAiB,EAElC,OAAO,EAAI,IACZ,CACD,CAAC,EAMW,MACZ,EAAa,CACZ,SAAU,EAAgB,qBAAqB,EAC/C,QAAS,SAAY,CACpB,IAAM,EAAM,MAAO,MAAM,EAAgB,EAAA,CAAG,IAAI,gBAAgB,EAChE,GAAI,CAAC,EAAI,KACR,MAAU,MAAM,iBAAiB,EAElC,OAAO,EAAI,IACZ,CACD,CAAC,EAEW,MAAsC,CAClD,IAAM,EAAc,EAAe,EAE7B,CAAE,OAAQ,EAA4B,GAAG,GAAS,EAAY,CACnE,WAAY,KAAO,IAA2C,CAC7D,IAAM,EAAM,MAAO,MAAM,EAAgB,EAAA,CAAG,IAAI,iBAAkB,CACjE,MACD,CAAC,EACD,GAAI,CAAC,EAAI,KACR,MAAU,MAAM,iBAAiB,EAElC,OAAO,EAAI,IACZ,EACA,UAAY,GAAS,CACpB,EAAY,aAAa,EAAgB,qBAAqB,EAAG,CAAI,EACrE,EAAiB,kBAAkB,CAClC,SAAU,EAAgB,qBAAqB,CAChD,CAAC,CACF,CACD,CAAC,EAED,MAAO,CAAE,6BAA4B,GAAG,CAAK,CAC9C,EAEa,MAAqC,CACjD,IAAM,EAAc,EAAe,EAE7B,CAAE,OAAQ,EAA2B,GAAG,GAAS,EAAY,CAClE,WAAY,UAAa,MAAM,EAAgB,EAAA,CAAG,OAAO,gBAAgB,EACzE,cAAiB,CAChB,EAAY,aAAa,EAAgB,qBAAqB,EAAG,CAChE,gCAAiC,IAClC,CAAsC,EACtC,EAAiB,kBAAkB,CAClC,SAAU,EAAgB,qBAAqB,CAChD,CAAC,CACF,CACD,CAAC,EAED,MAAO,CAAE,4BAA2B,GAAG,CAAK,CAC7C"}
1
+ {"version":3,"file":"admin-BwmAgV1B.js","names":[],"sources":["../../src/api/admin/admin.ts"],"sourcesContent":["import {\n\tqueryOptions,\n\tuseMutation,\n\tuseQueryClient,\n} from \"@tanstack/react-query\";\nimport type { components } from \"@/api/prefect\";\nimport { getQueryService } from \"@/api/service\";\n\n/**\n * ```\n * 🏗️ Admin queries construction 👷\n * settings => ['settings'] // key to match ['settings']\n * version => ['version'] // key to match ['version']\n * defaultResultStorage => ['default-result-storage'] // key to match ['default-result-storage']\n * ```\n * */\nexport const queryKeyFactory = {\n\tsettings: () => [\"settings\"] as const,\n\tversion: () => [\"version\"] as const,\n\tdefaultResultStorage: () => [\"default-result-storage\"] as const,\n};\n\nexport type ServerDefaultResultStorage =\n\tcomponents[\"schemas\"][\"ServerDefaultResultStorage\"];\nexport type ServerDefaultResultStorageUpdate =\n\tcomponents[\"schemas\"][\"ServerDefaultResultStorageUpdate\"];\n\n// ----- 🔑 Queries 🗄️\n// ----------------------------\n\n/**\n *\n * @returns react query options object for getting the Prefect's version number\n */\nexport const buildGetVersionQuery = () =>\n\tqueryOptions({\n\t\tqueryKey: queryKeyFactory.version(),\n\t\tqueryFn: async () => {\n\t\t\tconst res = await (await getQueryService()).GET(\"/admin/version\");\n\t\t\tif (!res.data) {\n\t\t\t\tthrow new Error(\"'data' expected\");\n\t\t\t}\n\t\t\treturn res.data;\n\t\t},\n\t});\n\n/**\n *\n * @returns react query options object for getting the Prefect server's settings information\n */\nexport const buildGetSettingsQuery = () =>\n\tqueryOptions({\n\t\tqueryKey: queryKeyFactory.settings(),\n\t\tqueryFn: async () => {\n\t\t\tconst res = await (await getQueryService()).GET(\"/admin/settings\");\n\t\t\tif (!res.data) {\n\t\t\t\tthrow new Error(\"'data' expected\");\n\t\t\t}\n\t\t\treturn res.data;\n\t\t},\n\t});\n\n/**\n *\n * @returns react query options object for getting the server default result storage block\n */\nexport const buildGetDefaultResultStorageQuery = () =>\n\tqueryOptions({\n\t\tqueryKey: queryKeyFactory.defaultResultStorage(),\n\t\tqueryFn: async () => {\n\t\t\tconst res = await (await getQueryService()).GET(\"/admin/storage\");\n\t\t\tif (!res.data) {\n\t\t\t\tthrow new Error(\"'data' expected\");\n\t\t\t}\n\t\t\treturn res.data;\n\t\t},\n\t});\n\nexport const useUpdateDefaultResultStorage = () => {\n\tconst queryClient = useQueryClient();\n\n\tconst { mutate: updateDefaultResultStorage, ...rest } = useMutation({\n\t\tmutationFn: async (body: ServerDefaultResultStorageUpdate) => {\n\t\t\tconst res = await (await getQueryService()).PUT(\"/admin/storage\", {\n\t\t\t\tbody,\n\t\t\t});\n\t\t\tif (!res.data) {\n\t\t\t\tthrow new Error(\"'data' expected\");\n\t\t\t}\n\t\t\treturn res.data;\n\t\t},\n\t\tonSuccess: (data) => {\n\t\t\tqueryClient.setQueryData(queryKeyFactory.defaultResultStorage(), data);\n\t\t\tvoid queryClient.invalidateQueries({\n\t\t\t\tqueryKey: queryKeyFactory.defaultResultStorage(),\n\t\t\t});\n\t\t},\n\t});\n\n\treturn { updateDefaultResultStorage, ...rest };\n};\n\nexport const useClearDefaultResultStorage = () => {\n\tconst queryClient = useQueryClient();\n\n\tconst { mutate: clearDefaultResultStorage, ...rest } = useMutation({\n\t\tmutationFn: async () => (await getQueryService()).DELETE(\"/admin/storage\"),\n\t\tonSuccess: () => {\n\t\t\tqueryClient.setQueryData(queryKeyFactory.defaultResultStorage(), {\n\t\t\t\tdefault_result_storage_block_id: null,\n\t\t\t} satisfies ServerDefaultResultStorage);\n\t\t\tvoid queryClient.invalidateQueries({\n\t\t\t\tqueryKey: queryKeyFactory.defaultResultStorage(),\n\t\t\t});\n\t\t},\n\t});\n\n\treturn { clearDefaultResultStorage, ...rest };\n};\n"],"mappings":"0GAgBA,IAAa,EAAkB,CAC9B,aAAgB,CAAC,UAAU,EAC3B,YAAe,CAAC,SAAS,EACzB,yBAA4B,CAAC,wBAAwB,CACtD,EAca,MACZ,EAAa,CACZ,SAAU,EAAgB,QAAQ,EAClC,QAAS,SAAY,CACpB,IAAM,EAAM,MAAO,MAAM,EAAgB,EAAA,CAAG,IAAI,gBAAgB,EAChE,GAAI,CAAC,EAAI,KACR,MAAU,MAAM,iBAAiB,EAElC,OAAO,EAAI,IACZ,CACD,CAAC,EAMW,MACZ,EAAa,CACZ,SAAU,EAAgB,SAAS,EACnC,QAAS,SAAY,CACpB,IAAM,EAAM,MAAO,MAAM,EAAgB,EAAA,CAAG,IAAI,iBAAiB,EACjE,GAAI,CAAC,EAAI,KACR,MAAU,MAAM,iBAAiB,EAElC,OAAO,EAAI,IACZ,CACD,CAAC,EAMW,MACZ,EAAa,CACZ,SAAU,EAAgB,qBAAqB,EAC/C,QAAS,SAAY,CACpB,IAAM,EAAM,MAAO,MAAM,EAAgB,EAAA,CAAG,IAAI,gBAAgB,EAChE,GAAI,CAAC,EAAI,KACR,MAAU,MAAM,iBAAiB,EAElC,OAAO,EAAI,IACZ,CACD,CAAC,EAEW,MAAsC,CAClD,IAAM,EAAc,EAAe,EAE7B,CAAE,OAAQ,EAA4B,GAAG,GAAS,EAAY,CACnE,WAAY,KAAO,IAA2C,CAC7D,IAAM,EAAM,MAAO,MAAM,EAAgB,EAAA,CAAG,IAAI,iBAAkB,CACjE,MACD,CAAC,EACD,GAAI,CAAC,EAAI,KACR,MAAU,MAAM,iBAAiB,EAElC,OAAO,EAAI,IACZ,EACA,UAAY,GAAS,CACpB,EAAY,aAAa,EAAgB,qBAAqB,EAAG,CAAI,EACrE,EAAiB,kBAAkB,CAClC,SAAU,EAAgB,qBAAqB,CAChD,CAAC,CACF,CACD,CAAC,EAED,MAAO,CAAE,6BAA4B,GAAG,CAAK,CAC9C,EAEa,MAAqC,CACjD,IAAM,EAAc,EAAe,EAE7B,CAAE,OAAQ,EAA2B,GAAG,GAAS,EAAY,CAClE,WAAY,UAAa,MAAM,EAAgB,EAAA,CAAG,OAAO,gBAAgB,EACzE,cAAiB,CAChB,EAAY,aAAa,EAAgB,qBAAqB,EAAG,CAChE,gCAAiC,IAClC,CAAsC,EACtC,EAAiB,kBAAkB,CAClC,SAAU,EAAgB,qBAAqB,CAChD,CAAC,CACF,CACD,CAAC,EAED,MAAO,CAAE,4BAA2B,GAAG,CAAK,CAC7C"}
@@ -1,2 +1,2 @@
1
- import{o as e}from"./vendor-codemirror-Bs7Yv0L9.js";import{t}from"./error-utils-CRZTwdQh.js";import{t as n}from"./route-error-state-DChqMSir.js";var r=e(),i=function({error:e,reset:i}){let a=t(e,`Failed to load artifact`);if(a.type!==`server-error`&&a.type!==`client-error`)throw e;return(0,r.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,r.jsx)(`div`,{children:(0,r.jsx)(`h1`,{className:`text-2xl font-semibold`,children:`Artifact`})}),(0,r.jsx)(n,{error:a,onRetry:i})]})};export{i as errorComponent};
2
- //# sourceMappingURL=artifact._id-D_htSbFc.js.map
1
+ import{o as e}from"./vendor-codemirror-Bs7Yv0L9.js";import{t}from"./error-utils-CRZTwdQh.js";import{t as n}from"./route-error-state-D3zpyudZ.js";var r=e(),i=function({error:e,reset:i}){let a=t(e,`Failed to load artifact`);if(a.type!==`server-error`&&a.type!==`client-error`)throw e;return(0,r.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,r.jsx)(`div`,{children:(0,r.jsx)(`h1`,{className:`text-2xl font-semibold`,children:`Artifact`})}),(0,r.jsx)(n,{error:a,onRetry:i})]})};export{i as errorComponent};
2
+ //# sourceMappingURL=artifact._id-DClBSNAc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"artifact._id-D_htSbFc.js","names":["categorizeError","RouteErrorState","SplitErrorComponent","ArtifactDetailErrorComponent","error","reset","ErrorComponentProps","serverError","type","errorComponent"],"sources":["../../src/routes/artifacts/artifact.$id.tsx?tsr-split=errorComponent"],"sourcesContent":["import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport type { ErrorComponentProps } from \"@tanstack/react-router\";\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { z } from \"zod\";\nimport { buildGetArtifactQuery } from \"@/api/artifacts\";\nimport { useGetArtifactFlowTaskRuns } from \"@/api/artifacts/use-get-artifacts-flow-task-runs/use-get-artifacts-flow-task-runs\";\nimport { categorizeError } from \"@/api/error-utils\";\nimport { ArtifactDetailPage } from \"@/components/artifacts/artifact/artifact-detail-page\";\nimport { RouteErrorState } from \"@/components/ui/route-error-state\";\n\n/**\n * Schema for validating URL search parameters for the Artifact Detail page\n * @property {\"Artifact\" | \"Details\" | \"Raw\"} tab used to designate which tab view to display\n */\nconst searchParams = z.object({\n\ttab: z.enum([\"Artifact\", \"Details\", \"Raw\"]).default(\"Artifact\"),\n});\n\nexport type ArtifactDetailTabOptions = z.infer<typeof searchParams>[\"tab\"];\n\nexport const Route = createFileRoute(\"/artifacts/artifact/$id\")({\n\tvalidateSearch: zodValidator(searchParams),\n\tcomponent: function RouteComponent() {\n\t\tconst { id } = Route.useParams();\n\n\t\tconst { data: artifact } = useSuspenseQuery(buildGetArtifactQuery(id));\n\n\t\tconst artifactWithMetadata = useGetArtifactFlowTaskRuns(id);\n\n\t\treturn <ArtifactDetailPage artifact={artifactWithMetadata ?? artifact} />;\n\t},\n\tloader: async ({ context, params }) => {\n\t\tconst { id } = params;\n\n\t\tconst artifact = await context.queryClient.ensureQueryData(\n\t\t\tbuildGetArtifactQuery(id),\n\t\t);\n\n\t\treturn { artifact };\n\t},\n\terrorComponent: function ArtifactDetailErrorComponent({\n\t\terror,\n\t\treset,\n\t}: ErrorComponentProps) {\n\t\tconst serverError = categorizeError(error, \"Failed to load artifact\");\n\t\tif (\n\t\t\tserverError.type !== \"server-error\" &&\n\t\t\tserverError.type !== \"client-error\"\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t\treturn (\n\t\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t\t<div>\n\t\t\t\t\t<h1 className=\"text-2xl font-semibold\">Artifact</h1>\n\t\t\t\t</div>\n\t\t\t\t<RouteErrorState error={serverError} onRetry={reset} />\n\t\t\t</div>\n\t\t);\n\t},\n});\n"],"mappings":"2JAWAE,EA8BiB,SAAsC,CACrDE,QACAC,SACuB,CACvB,IAAME,EAAcP,EAAgBI,EAAO,yBAAyB,EACpE,GACCG,EAAYC,OAAS,gBACrBD,EAAYC,OAAS,eAErB,MAAMJ,EAEP,OACC,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,+BAAf,EACC,EAAA,EAAA,IAAA,CAAC,MAAD,CAAA,UACC,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,kCAAyB,UAAY,CAAA,CAC/C,CAAA,GACL,EAAA,EAAA,IAAA,CAAC,EAAD,CAAiB,MAAOG,EAAa,QAASF,CAAM,CAAA,CAChD,GAEP"}
1
+ {"version":3,"file":"artifact._id-DClBSNAc.js","names":["categorizeError","RouteErrorState","SplitErrorComponent","ArtifactDetailErrorComponent","error","reset","ErrorComponentProps","serverError","type","errorComponent"],"sources":["../../src/routes/artifacts/artifact.$id.tsx?tsr-split=errorComponent"],"sourcesContent":["import { useSuspenseQuery } from \"@tanstack/react-query\";\nimport type { ErrorComponentProps } from \"@tanstack/react-router\";\nimport { createFileRoute } from \"@tanstack/react-router\";\nimport { zodValidator } from \"@tanstack/zod-adapter\";\nimport { z } from \"zod\";\nimport { buildGetArtifactQuery } from \"@/api/artifacts\";\nimport { useGetArtifactFlowTaskRuns } from \"@/api/artifacts/use-get-artifacts-flow-task-runs/use-get-artifacts-flow-task-runs\";\nimport { categorizeError } from \"@/api/error-utils\";\nimport { ArtifactDetailPage } from \"@/components/artifacts/artifact/artifact-detail-page\";\nimport { RouteErrorState } from \"@/components/ui/route-error-state\";\n\n/**\n * Schema for validating URL search parameters for the Artifact Detail page\n * @property {\"Artifact\" | \"Details\" | \"Raw\"} tab used to designate which tab view to display\n */\nconst searchParams = z.object({\n\ttab: z.enum([\"Artifact\", \"Details\", \"Raw\"]).default(\"Artifact\"),\n});\n\nexport type ArtifactDetailTabOptions = z.infer<typeof searchParams>[\"tab\"];\n\nexport const Route = createFileRoute(\"/artifacts/artifact/$id\")({\n\tvalidateSearch: zodValidator(searchParams),\n\tcomponent: function RouteComponent() {\n\t\tconst { id } = Route.useParams();\n\n\t\tconst { data: artifact } = useSuspenseQuery(buildGetArtifactQuery(id));\n\n\t\tconst artifactWithMetadata = useGetArtifactFlowTaskRuns(id);\n\n\t\treturn <ArtifactDetailPage artifact={artifactWithMetadata ?? artifact} />;\n\t},\n\tloader: async ({ context, params }) => {\n\t\tconst { id } = params;\n\n\t\tconst artifact = await context.queryClient.ensureQueryData(\n\t\t\tbuildGetArtifactQuery(id),\n\t\t);\n\n\t\treturn { artifact };\n\t},\n\terrorComponent: function ArtifactDetailErrorComponent({\n\t\terror,\n\t\treset,\n\t}: ErrorComponentProps) {\n\t\tconst serverError = categorizeError(error, \"Failed to load artifact\");\n\t\tif (\n\t\t\tserverError.type !== \"server-error\" &&\n\t\t\tserverError.type !== \"client-error\"\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t\treturn (\n\t\t\t<div className=\"flex flex-col gap-4\">\n\t\t\t\t<div>\n\t\t\t\t\t<h1 className=\"text-2xl font-semibold\">Artifact</h1>\n\t\t\t\t</div>\n\t\t\t\t<RouteErrorState error={serverError} onRetry={reset} />\n\t\t\t</div>\n\t\t);\n\t},\n});\n"],"mappings":"2JAWAE,EA8BiB,SAAsC,CACrDE,QACAC,SACuB,CACvB,IAAME,EAAcP,EAAgBI,EAAO,yBAAyB,EACpE,GACCG,EAAYC,OAAS,gBACrBD,EAAYC,OAAS,eAErB,MAAMJ,EAEP,OACC,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,+BAAf,EACC,EAAA,EAAA,IAAA,CAAC,MAAD,CAAA,UACC,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,kCAAyB,UAAY,CAAA,CAC/C,CAAA,GACL,EAAA,EAAA,IAAA,CAAC,EAAD,CAAiB,MAAOG,EAAa,QAASF,CAAM,CAAA,CAChD,GAEP"}
@@ -1,2 +1,2 @@
1
- import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{a as t,o as n,r,s as i}from"./vendor-codemirror-Bs7Yv0L9.js";import{_ as a,a as o,g as s,i as c,j as l,o as u,r as d}from"./vendor-tanstack-CghpeqA9.js";import{g as f,h as p,t as m,u as h}from"./button-D1nS4G4b.js";import{n as g}from"./dist-BWGcVrLy.js";import{n as _}from"./input-BaSLpSlc.js";import{t as v}from"./tag-badge-DTVaiChx.js";import{Ar as y,Dr as b,Er as x,K as S,Kr as C,Ln as w,Or as T,Tr as E,cr as D,ir as O,jr as k,lr as A,m as j,or as M,sr as N}from"./index-DpPA2bX1.js";import{t as P}from"./key-value-C2vDi3xo.js";import{n as F}from"./use-get-artifacts-flow-task-runs-DhfQBVCF.js";import{t as I}from"./lazy-markdown-CCDNtAxT.js";import{t as L}from"./data-table-C_Co3B-8.js";var R=e(i(),1),z=n(),B=({artifact:e})=>(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[e.key?(0,z.jsx)(`div`,{className:`flex items-center gap-2 min-w-0`,children:(0,z.jsx)(E,{className:`min-w-0`,children:(0,z.jsxs)(T,{className:`flex-nowrap`,children:[(0,z.jsx)(x,{className:`min-w-0`,children:(0,z.jsx)(b,{to:`/artifacts/key/$key`,params:{key:e.key},className:`text-xl font-semibold truncate block`,title:e.key,children:e.key})}),(0,z.jsx)(y,{}),(0,z.jsx)(x,{className:`text-xl font-semibold min-w-0`,children:(0,z.jsx)(`span`,{className:`font-mono truncate block`,title:e.id,children:e.id})})]})})}):(0,z.jsx)(`div`,{className:`flex items-center gap-2 min-w-0`,children:(0,z.jsx)(E,{className:`min-w-0`,children:(0,z.jsxs)(T,{className:`flex-nowrap`,children:[e.flow_run&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(x,{className:`min-w-0`,children:(0,z.jsx)(b,{to:`/runs/flow-run/$id`,params:{id:e.flow_run_id??``},className:`text-xl font-semibold truncate block`,title:e.flow_run.name,children:e.flow_run.name})}),(0,z.jsx)(y,{})]}),e.task_run&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(x,{className:`min-w-0`,children:(0,z.jsx)(b,{to:`/runs/task-run/$id`,params:{id:e.task_run_id??``},className:`text-xl font-semibold truncate block`,title:e.task_run.name,children:e.task_run.name})}),(0,z.jsx)(y,{})]}),(0,z.jsx)(x,{className:`text-xl font-semibold min-w-0`,children:(0,z.jsx)(`span`,{className:`font-mono truncate block`,title:e.id,children:e.id})})]})})}),(0,z.jsx)(O,{id:`artifacts-guide`,label:`Documentation`})]}),e.description&&(0,z.jsx)(`div`,{className:`text-sm text-muted-foreground my-2`,children:(0,z.jsx)(I,{children:e.description})}),(0,z.jsx)(`hr`,{})]}),V=({artifact:e})=>{let[n,i]=(0,R.useState)(!1),a=()=>{i(e=>!e)},o=(0,R.useRef)(null),{resolvedTheme:s}=C(),{setContainer:c}=r({container:o.current,extensions:[t.lineWrapping],value:String(e.data),indentWithTab:!1,editable:!0,basicSetup:{highlightActiveLine:!1,foldGutter:!1,highlightActiveLineGutter:!1},theme:s===`dark`?`dark`:`light`});(0,R.useEffect)(()=>{o.current&&c(o.current)},[c]);let l=e=>{g.success(`Copied to clipboard`),navigator.clipboard.writeText(e)};return(0,z.jsxs)(`div`,{className:`flex flex-col justify-center items-center`,children:[(0,z.jsxs)(m,{"data-testid":`show-raw-data-button`,variant:`outline`,onClick:a,className:`my-4`,children:[n?`Hide`:`Show`,` Raw Data`]}),(0,z.jsx)(`div`,{className:`rounded-md border shadow-xs focus-within:outline-hidden focus-within:ring-1 focus-within:ring-ring relative`,style:{display:n?`block`:`none`},ref:e=>{o.current=e},"data-testid":`raw-data-display`,children:(0,z.jsx)(m,{onClick:()=>l(e.data),variant:`ghost`,size:`icon`,className:`absolute top-0 right-0 z-10`,"aria-label":`copy`,children:(0,z.jsx)(f,{id:`Copy`,className:`size-2`})})})]})},ee=s(`/artifacts/artifact/$id`),H=({artifact:e,artifactContent:t,detailsContent:n})=>{let{tab:r}=ee.useSearch(),i=U(e,t,n);return(0,z.jsxs)(M,{defaultValue:`Artifact`,value:r,children:[(0,z.jsx)(D,{children:i.map(({value:e,hiddenOnDesktop:t,LinkComponent:n})=>(0,z.jsx)(n,{className:p(t&&`lg:hidden`)},e))}),i.map(({value:e,ViewComponent:t})=>(0,z.jsx)(t,{},e))]})};function U(e,t,n){return(0,R.useMemo)(()=>{let r=[];return r.push({value:`Artifact`,LinkComponent:({className:e})=>(0,z.jsx)(a,{to:`.`,search:{tab:`Artifact`},children:(0,z.jsx)(A,{value:`Artifact`,className:e,children:`Artifact`})}),ViewComponent:()=>(0,z.jsxs)(N,{value:`Artifact`,children:[t,(0,z.jsx)(V,{artifact:e})]})}),r.push({value:`Details`,hiddenOnDesktop:!0,LinkComponent:({className:e})=>(0,z.jsx)(a,{to:`.`,search:{tab:`Details`},children:(0,z.jsx)(A,{value:`Details`,className:e,children:`Details`})}),ViewComponent:()=>(0,z.jsx)(N,{value:`Details`,children:n})}),r.push({value:`Raw`,LinkComponent:({className:e})=>(0,z.jsx)(a,{to:`.`,search:{tab:`Raw`},children:(0,z.jsx)(A,{value:`Raw`,className:e,children:`Raw`})}),ViewComponent:()=>(0,z.jsx)(N,{value:`Raw`,children:(0,z.jsx)(W,{artifact:e})})}),r},[e,t,n])}function W({artifact:e}){return(0,z.jsx)(`pre`,{className:`whitespace-pre-wrap break-words rounded-md border bg-muted p-4 text-sm`,children:typeof e.data==`string`?e.data:JSON.stringify(e.data,null,2)})}var G=({url:e})=>(0,z.jsxs)(`div`,{"data-testid":e,className:`prose dark:prose-invert mt-2`,children:[(0,z.jsx)(`img`,{"data-testid":`image-${e}`,src:e,alt:`artifact-image`,className:`w-full`}),(0,z.jsxs)(`p`,{className:`text-lg`,children:[`Image URL:`,` `,(0,z.jsx)(`a`,{className:`text-link hover:text-link-hover hover:underline`,target:`_blank`,href:e,rel:`noreferrer`,children:e})]})]}),K=({markdown:e})=>(0,z.jsx)(`div`,{"data-testid":`markdown-display`,className:`mt-4 prose dark:prose-invert`,children:(0,z.jsx)(I,{children:e})}),q=({progress:e})=>(0,z.jsxs)(`p`,{"data-testid":`progress-display`,className:`text-lg`,children:[`Progress: `,e,`%`]}),J=c(),Y=({tableData:e})=>{let t=(0,R.useMemo)(()=>JSON.parse(e),[e]),n=(0,R.useMemo)(()=>Object.keys(t[0]??{}),[t]),[r,i]=(0,R.useState)(``),a=(0,R.useMemo)(()=>n.map(e=>J.display({id:e,header:()=>e,cell:({row:t})=>{let n=String(t.original[e]??``);return(0,z.jsx)(`span`,{className:`truncate block`,title:n,children:n})}})),[n]),s=d({data:(0,R.useMemo)(()=>r?t.filter(e=>Object.values(e).some(e=>String(e).toLowerCase().includes(r.toLowerCase()))):t,[r,t]),columns:a,getCoreRowModel:o(),getPaginationRowModel:u(),initialState:{pagination:{pageIndex:0,pageSize:10}}});return(0,z.jsxs)(`div`,{"data-testid":`table-display`,className:`mt-4`,children:[(0,z.jsx)(`div`,{className:`flex flex-row justify-end items-center mb-2`,children:(0,z.jsx)(_,{placeholder:`Search`,value:r,onChange:e=>i(e.target.value)})}),(0,z.jsx)(L,{table:s})]})},X=({artifact:e})=>{let t=(0,R.useMemo)(()=>e.created?h(e.created,`dateTime`):null,[e.created]);return(0,z.jsxs)(`div`,{className:`mt-4`,children:[(0,z.jsx)(`p`,{className:`text-base font-semibold`,children:`Artifact`}),(0,z.jsxs)(`div`,{className:`mt-3 flex flex-col gap-3`,children:[(0,z.jsx)(P,{label:`Key`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:e.key??`None`})}),(0,z.jsx)(P,{label:`Type`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:e.type??`None`})}),(0,z.jsx)(P,{label:`Created`,value:(0,z.jsx)(`span`,{children:t??`None`})})]})]})},Z=e(k(),1),Q=({flowRun:e})=>{let t=(0,R.useMemo)(()=>e.start_time?h(e.start_time,`dateTime`):null,[e.start_time]),n=(0,R.useMemo)(()=>e.estimated_run_time?(0,Z.default)(Math.ceil(e.estimated_run_time)*1e3):null,[e.estimated_run_time]),r=(0,R.useMemo)(()=>e.created?h(e.created,`dateTime`):null,[e.created]),i=(0,R.useMemo)(()=>e.updated?h(e.updated,`dateTime`):null,[e.updated]);return(0,z.jsxs)(`div`,{className:`mt-4`,children:[(0,z.jsx)(`p`,{className:`text-lg font-bold`,children:`Flow Run`}),(0,z.jsxs)(`div`,{className:`mt-3 flex flex-col gap-3`,children:[(0,z.jsx)(P,{label:`Start time`,value:(0,z.jsxs)(`span`,{className:`font-mono flex items-center`,children:[(0,z.jsx)(f,{id:`Calendar`,className:`inline w-4 mr-2`}),t??`None`]})}),(0,z.jsx)(P,{label:`Duration`,value:(0,z.jsxs)(`span`,{className:`font-mono flex items-center`,children:[(0,z.jsx)(f,{id:`Clock`,className:`inline w-4 mr-2`}),n??`None`]})}),(0,z.jsx)(P,{label:`Created`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:r??`None`})}),(0,z.jsx)(P,{label:`Last Updated`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:i??`None`})}),(0,z.jsx)(P,{label:`Tags`,value:e.tags&&e.tags.length>0?(0,z.jsx)(`div`,{className:`flex flex-wrap`,children:e.tags.map(e=>(0,z.jsx)(v,{tag:e},e))}):(0,z.jsx)(`span`,{className:`font-mono`,children:`None`})}),(0,z.jsx)(P,{label:`State Message`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:e.state?.message??`None`})})]})]})},$=({artifact:e})=>{let{flow_run:t,task_run:n}=e;return e.key||t||n?(0,z.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[e.key&&(0,z.jsx)(P,{label:`Artifact`,value:(0,z.jsx)(a,{to:`/artifacts/key/$key`,params:{key:e.key},className:`text-link hover:text-link-hover hover:underline`,children:e.key})}),t&&(0,z.jsx)(P,{label:`Flow Run`,value:(0,z.jsx)(a,{to:`/runs/flow-run/$id`,params:{id:t.id},className:`text-link hover:text-link-hover hover:underline`,children:t.name})}),n&&(0,z.jsx)(P,{label:`Task Run`,value:(0,z.jsx)(a,{to:`/runs/task-run/$id`,params:{id:n.id},className:`text-link hover:text-link-hover hover:underline`,children:n.name})}),(0,z.jsx)(`hr`,{className:`mt-2 border-border`})]}):null},te=({taskRun:e})=>{let t=(0,R.useMemo)(()=>e.created?h(e.created,`dateTime`):null,[e.created]),n=(0,R.useMemo)(()=>e.updated?h(e.updated,`dateTime`):null,[e.updated]);return(0,z.jsxs)(`div`,{className:`mt-4`,children:[(0,z.jsx)(`p`,{className:`text-lg font-bold`,children:`Task Run`}),(0,z.jsxs)(`div`,{className:`mt-3 flex flex-col gap-3`,children:[(0,z.jsx)(P,{label:`Created`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:t??`None`})}),(0,z.jsx)(P,{label:`Last Updated`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:n??`None`})}),(0,z.jsx)(P,{label:`Tags`,value:e.tags&&e.tags.length>0?(0,z.jsx)(`div`,{className:`flex flex-wrap`,children:e.tags.map(e=>(0,z.jsx)(v,{tag:e},e))}):(0,z.jsx)(`span`,{className:`font-mono`,children:`None`})})]})]})},ne=({artifact:e})=>{let{flow_run:t,task_run:n}=e;return(0,z.jsxs)(`div`,{className:`flex flex-col gap-4 pt-4`,children:[(0,z.jsx)($,{artifact:e}),(0,z.jsx)(X,{artifact:e}),(t||n)&&(0,z.jsx)(`hr`,{className:`mt-4 border-border`}),t&&(0,z.jsx)(Q,{flowRun:t}),t&&n&&(0,z.jsx)(`hr`,{className:`mt-4 border-border`}),n&&(0,z.jsx)(te,{taskRun:n})]})},re=({artifact:e})=>{let t=(0,R.useMemo)(()=>{switch(e.type){case`markdown`:case`link`:return(0,z.jsx)(K,{markdown:e.data});case`image`:return(0,z.jsx)(G,{url:e.data});case`progress`:return(0,z.jsx)(q,{progress:e.data});case`table`:return(0,z.jsx)(Y,{tableData:e.data});default:return(0,z.jsx)(`pre`,{children:JSON.stringify(e.data,null,2)})}},[e]),n=(0,z.jsx)(ne,{artifact:e});return(0,z.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,z.jsx)(B,{artifact:e}),(0,z.jsxs)(`div`,{className:`flex flex-col lg:flex-row lg:gap-6`,children:[(0,z.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,z.jsx)(H,{artifact:e,artifactContent:t,detailsContent:n})}),(0,z.jsx)(w,{children:n})]})]})},ie=function(){let{id:e}=j.useParams(),{data:t}=l(S(e));return(0,z.jsx)(re,{artifact:F(e)??t})};export{ie as component};
2
- //# sourceMappingURL=artifact._id-C4vG8kN1.js.map
1
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{a as t,o as n,r,s as i}from"./vendor-codemirror-Bs7Yv0L9.js";import{_ as a,a as o,g as s,i as c,j as l,o as u,r as d}from"./vendor-tanstack-Dx3GObhk.js";import{g as f,h as p,t as m,u as h}from"./button-BmBv3lZP.js";import{n as g}from"./dist-D70cmkC4.js";import{n as _}from"./input-Dr0oypOO.js";import{t as v}from"./tag-badge-mp5HxqMT.js";import{Ar as y,Dr as b,Er as x,K as S,Kr as C,Ln as w,Or as T,Tr as E,cr as D,ir as O,jr as k,lr as A,m as j,or as M,sr as N}from"./index-SebwJ2h3.js";import{t as P}from"./key-value-C6T0AQJ-.js";import{n as F}from"./use-get-artifacts-flow-task-runs-3svJ-Wms.js";import{t as I}from"./lazy-markdown-uVUtgyxS.js";import{t as L}from"./data-table-BeZEMPPj.js";var R=e(i(),1),z=n(),B=({artifact:e})=>(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[e.key?(0,z.jsx)(`div`,{className:`flex items-center gap-2 min-w-0`,children:(0,z.jsx)(E,{className:`min-w-0`,children:(0,z.jsxs)(T,{className:`flex-nowrap`,children:[(0,z.jsx)(x,{className:`min-w-0`,children:(0,z.jsx)(b,{to:`/artifacts/key/$key`,params:{key:e.key},className:`text-xl font-semibold truncate block`,title:e.key,children:e.key})}),(0,z.jsx)(y,{}),(0,z.jsx)(x,{className:`text-xl font-semibold min-w-0`,children:(0,z.jsx)(`span`,{className:`font-mono truncate block`,title:e.id,children:e.id})})]})})}):(0,z.jsx)(`div`,{className:`flex items-center gap-2 min-w-0`,children:(0,z.jsx)(E,{className:`min-w-0`,children:(0,z.jsxs)(T,{className:`flex-nowrap`,children:[e.flow_run&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(x,{className:`min-w-0`,children:(0,z.jsx)(b,{to:`/runs/flow-run/$id`,params:{id:e.flow_run_id??``},className:`text-xl font-semibold truncate block`,title:e.flow_run.name,children:e.flow_run.name})}),(0,z.jsx)(y,{})]}),e.task_run&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(x,{className:`min-w-0`,children:(0,z.jsx)(b,{to:`/runs/task-run/$id`,params:{id:e.task_run_id??``},className:`text-xl font-semibold truncate block`,title:e.task_run.name,children:e.task_run.name})}),(0,z.jsx)(y,{})]}),(0,z.jsx)(x,{className:`text-xl font-semibold min-w-0`,children:(0,z.jsx)(`span`,{className:`font-mono truncate block`,title:e.id,children:e.id})})]})})}),(0,z.jsx)(O,{id:`artifacts-guide`,label:`Documentation`})]}),e.description&&(0,z.jsx)(`div`,{className:`text-sm text-muted-foreground my-2`,children:(0,z.jsx)(I,{children:e.description})}),(0,z.jsx)(`hr`,{})]}),V=({artifact:e})=>{let[n,i]=(0,R.useState)(!1),a=()=>{i(e=>!e)},o=(0,R.useRef)(null),{resolvedTheme:s}=C(),{setContainer:c}=r({container:o.current,extensions:[t.lineWrapping],value:String(e.data),indentWithTab:!1,editable:!0,basicSetup:{highlightActiveLine:!1,foldGutter:!1,highlightActiveLineGutter:!1},theme:s===`dark`?`dark`:`light`});(0,R.useEffect)(()=>{o.current&&c(o.current)},[c]);let l=e=>{g.success(`Copied to clipboard`),navigator.clipboard.writeText(e)};return(0,z.jsxs)(`div`,{className:`flex flex-col justify-center items-center`,children:[(0,z.jsxs)(m,{"data-testid":`show-raw-data-button`,variant:`outline`,onClick:a,className:`my-4`,children:[n?`Hide`:`Show`,` Raw Data`]}),(0,z.jsx)(`div`,{className:`rounded-md border shadow-xs focus-within:outline-hidden focus-within:ring-1 focus-within:ring-ring relative`,style:{display:n?`block`:`none`},ref:e=>{o.current=e},"data-testid":`raw-data-display`,children:(0,z.jsx)(m,{onClick:()=>l(e.data),variant:`ghost`,size:`icon`,className:`absolute top-0 right-0 z-10`,"aria-label":`copy`,children:(0,z.jsx)(f,{id:`Copy`,className:`size-2`})})})]})},ee=s(`/artifacts/artifact/$id`),H=({artifact:e,artifactContent:t,detailsContent:n})=>{let{tab:r}=ee.useSearch(),i=U(e,t,n);return(0,z.jsxs)(M,{defaultValue:`Artifact`,value:r,children:[(0,z.jsx)(D,{children:i.map(({value:e,hiddenOnDesktop:t,LinkComponent:n})=>(0,z.jsx)(n,{className:p(t&&`lg:hidden`)},e))}),i.map(({value:e,ViewComponent:t})=>(0,z.jsx)(t,{},e))]})};function U(e,t,n){return(0,R.useMemo)(()=>{let r=[];return r.push({value:`Artifact`,LinkComponent:({className:e})=>(0,z.jsx)(a,{to:`.`,search:{tab:`Artifact`},children:(0,z.jsx)(A,{value:`Artifact`,className:e,children:`Artifact`})}),ViewComponent:()=>(0,z.jsxs)(N,{value:`Artifact`,children:[t,(0,z.jsx)(V,{artifact:e})]})}),r.push({value:`Details`,hiddenOnDesktop:!0,LinkComponent:({className:e})=>(0,z.jsx)(a,{to:`.`,search:{tab:`Details`},children:(0,z.jsx)(A,{value:`Details`,className:e,children:`Details`})}),ViewComponent:()=>(0,z.jsx)(N,{value:`Details`,children:n})}),r.push({value:`Raw`,LinkComponent:({className:e})=>(0,z.jsx)(a,{to:`.`,search:{tab:`Raw`},children:(0,z.jsx)(A,{value:`Raw`,className:e,children:`Raw`})}),ViewComponent:()=>(0,z.jsx)(N,{value:`Raw`,children:(0,z.jsx)(W,{artifact:e})})}),r},[e,t,n])}function W({artifact:e}){return(0,z.jsx)(`pre`,{className:`whitespace-pre-wrap break-words rounded-md border bg-muted p-4 text-sm`,children:typeof e.data==`string`?e.data:JSON.stringify(e.data,null,2)})}var G=({url:e})=>(0,z.jsxs)(`div`,{"data-testid":e,className:`prose dark:prose-invert mt-2`,children:[(0,z.jsx)(`img`,{"data-testid":`image-${e}`,src:e,alt:`artifact-image`,className:`w-full`}),(0,z.jsxs)(`p`,{className:`text-lg`,children:[`Image URL:`,` `,(0,z.jsx)(`a`,{className:`text-link hover:text-link-hover hover:underline`,target:`_blank`,href:e,rel:`noreferrer`,children:e})]})]}),K=({markdown:e})=>(0,z.jsx)(`div`,{"data-testid":`markdown-display`,className:`mt-4 prose dark:prose-invert`,children:(0,z.jsx)(I,{children:e})}),q=({progress:e})=>(0,z.jsxs)(`p`,{"data-testid":`progress-display`,className:`text-lg`,children:[`Progress: `,e,`%`]}),J=c(),Y=({tableData:e})=>{let t=(0,R.useMemo)(()=>JSON.parse(e),[e]),n=(0,R.useMemo)(()=>Object.keys(t[0]??{}),[t]),[r,i]=(0,R.useState)(``),a=(0,R.useMemo)(()=>n.map(e=>J.display({id:e,header:()=>e,cell:({row:t})=>{let n=String(t.original[e]??``);return(0,z.jsx)(`span`,{className:`truncate block`,title:n,children:n})}})),[n]),s=d({data:(0,R.useMemo)(()=>r?t.filter(e=>Object.values(e).some(e=>String(e).toLowerCase().includes(r.toLowerCase()))):t,[r,t]),columns:a,getCoreRowModel:o(),getPaginationRowModel:u(),initialState:{pagination:{pageIndex:0,pageSize:10}}});return(0,z.jsxs)(`div`,{"data-testid":`table-display`,className:`mt-4`,children:[(0,z.jsx)(`div`,{className:`flex flex-row justify-end items-center mb-2`,children:(0,z.jsx)(_,{placeholder:`Search`,value:r,onChange:e=>i(e.target.value)})}),(0,z.jsx)(L,{table:s})]})},X=({artifact:e})=>{let t=(0,R.useMemo)(()=>e.created?h(e.created,`dateTime`):null,[e.created]);return(0,z.jsxs)(`div`,{className:`mt-4`,children:[(0,z.jsx)(`p`,{className:`text-base font-semibold`,children:`Artifact`}),(0,z.jsxs)(`div`,{className:`mt-3 flex flex-col gap-3`,children:[(0,z.jsx)(P,{label:`Key`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:e.key??`None`})}),(0,z.jsx)(P,{label:`Type`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:e.type??`None`})}),(0,z.jsx)(P,{label:`Created`,value:(0,z.jsx)(`span`,{children:t??`None`})})]})]})},Z=e(k(),1),Q=({flowRun:e})=>{let t=(0,R.useMemo)(()=>e.start_time?h(e.start_time,`dateTime`):null,[e.start_time]),n=(0,R.useMemo)(()=>e.estimated_run_time?(0,Z.default)(Math.ceil(e.estimated_run_time)*1e3):null,[e.estimated_run_time]),r=(0,R.useMemo)(()=>e.created?h(e.created,`dateTime`):null,[e.created]),i=(0,R.useMemo)(()=>e.updated?h(e.updated,`dateTime`):null,[e.updated]);return(0,z.jsxs)(`div`,{className:`mt-4`,children:[(0,z.jsx)(`p`,{className:`text-lg font-bold`,children:`Flow Run`}),(0,z.jsxs)(`div`,{className:`mt-3 flex flex-col gap-3`,children:[(0,z.jsx)(P,{label:`Start time`,value:(0,z.jsxs)(`span`,{className:`font-mono flex items-center`,children:[(0,z.jsx)(f,{id:`Calendar`,className:`inline w-4 mr-2`}),t??`None`]})}),(0,z.jsx)(P,{label:`Duration`,value:(0,z.jsxs)(`span`,{className:`font-mono flex items-center`,children:[(0,z.jsx)(f,{id:`Clock`,className:`inline w-4 mr-2`}),n??`None`]})}),(0,z.jsx)(P,{label:`Created`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:r??`None`})}),(0,z.jsx)(P,{label:`Last Updated`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:i??`None`})}),(0,z.jsx)(P,{label:`Tags`,value:e.tags&&e.tags.length>0?(0,z.jsx)(`div`,{className:`flex flex-wrap`,children:e.tags.map(e=>(0,z.jsx)(v,{tag:e},e))}):(0,z.jsx)(`span`,{className:`font-mono`,children:`None`})}),(0,z.jsx)(P,{label:`State Message`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:e.state?.message??`None`})})]})]})},$=({artifact:e})=>{let{flow_run:t,task_run:n}=e;return e.key||t||n?(0,z.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[e.key&&(0,z.jsx)(P,{label:`Artifact`,value:(0,z.jsx)(a,{to:`/artifacts/key/$key`,params:{key:e.key},className:`text-link hover:text-link-hover hover:underline`,children:e.key})}),t&&(0,z.jsx)(P,{label:`Flow Run`,value:(0,z.jsx)(a,{to:`/runs/flow-run/$id`,params:{id:t.id},className:`text-link hover:text-link-hover hover:underline`,children:t.name})}),n&&(0,z.jsx)(P,{label:`Task Run`,value:(0,z.jsx)(a,{to:`/runs/task-run/$id`,params:{id:n.id},className:`text-link hover:text-link-hover hover:underline`,children:n.name})}),(0,z.jsx)(`hr`,{className:`mt-2 border-border`})]}):null},te=({taskRun:e})=>{let t=(0,R.useMemo)(()=>e.created?h(e.created,`dateTime`):null,[e.created]),n=(0,R.useMemo)(()=>e.updated?h(e.updated,`dateTime`):null,[e.updated]);return(0,z.jsxs)(`div`,{className:`mt-4`,children:[(0,z.jsx)(`p`,{className:`text-lg font-bold`,children:`Task Run`}),(0,z.jsxs)(`div`,{className:`mt-3 flex flex-col gap-3`,children:[(0,z.jsx)(P,{label:`Created`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:t??`None`})}),(0,z.jsx)(P,{label:`Last Updated`,value:(0,z.jsx)(`span`,{className:`font-mono`,children:n??`None`})}),(0,z.jsx)(P,{label:`Tags`,value:e.tags&&e.tags.length>0?(0,z.jsx)(`div`,{className:`flex flex-wrap`,children:e.tags.map(e=>(0,z.jsx)(v,{tag:e},e))}):(0,z.jsx)(`span`,{className:`font-mono`,children:`None`})})]})]})},ne=({artifact:e})=>{let{flow_run:t,task_run:n}=e;return(0,z.jsxs)(`div`,{className:`flex flex-col gap-4 pt-4`,children:[(0,z.jsx)($,{artifact:e}),(0,z.jsx)(X,{artifact:e}),(t||n)&&(0,z.jsx)(`hr`,{className:`mt-4 border-border`}),t&&(0,z.jsx)(Q,{flowRun:t}),t&&n&&(0,z.jsx)(`hr`,{className:`mt-4 border-border`}),n&&(0,z.jsx)(te,{taskRun:n})]})},re=({artifact:e})=>{let t=(0,R.useMemo)(()=>{switch(e.type){case`markdown`:case`link`:return(0,z.jsx)(K,{markdown:e.data});case`image`:return(0,z.jsx)(G,{url:e.data});case`progress`:return(0,z.jsx)(q,{progress:e.data});case`table`:return(0,z.jsx)(Y,{tableData:e.data});default:return(0,z.jsx)(`pre`,{children:JSON.stringify(e.data,null,2)})}},[e]),n=(0,z.jsx)(ne,{artifact:e});return(0,z.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,z.jsx)(B,{artifact:e}),(0,z.jsxs)(`div`,{className:`flex flex-col lg:flex-row lg:gap-6`,children:[(0,z.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,z.jsx)(H,{artifact:e,artifactContent:t,detailsContent:n})}),(0,z.jsx)(w,{children:n})]})]})},ie=function(){let{id:e}=j.useParams(),{data:t}=l(S(e));return(0,z.jsx)(re,{artifact:F(e)??t})};export{ie as component};
2
+ //# sourceMappingURL=artifact._id-iTe860fK.js.map