prefect 3.7.2.dev3__py3-none-any.whl → 3.7.2.dev4__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 (178) hide show
  1. prefect/__init__.py +5 -0
  2. prefect/_build_info.py +3 -3
  3. prefect/cli/_app.py +8 -1
  4. prefect/runner/runner.py +12 -12
  5. prefect/server/api/work_queues.py +18 -1
  6. prefect/server/api/workers.py +68 -117
  7. prefect/server/ui-v2/assets/{artifact._id-D23OOK0A.js → artifact._id-Cy3gxEon.js} +2 -2
  8. prefect/server/ui-v2/assets/{artifact._id-D23OOK0A.js.map → artifact._id-Cy3gxEon.js.map} +1 -1
  9. prefect/server/ui-v2/assets/{artifacts-CvDEkgjn.js → artifacts-CGpjzJK6.js} +2 -2
  10. prefect/server/ui-v2/assets/{artifacts-CvDEkgjn.js.map → artifacts-CGpjzJK6.js.map} +1 -1
  11. prefect/server/ui-v2/assets/{automation-wizard-DlL0f2vg.js → automation-wizard-FMVO2jEO.js} +2 -2
  12. prefect/server/ui-v2/assets/{automation-wizard-DlL0f2vg.js.map → automation-wizard-FMVO2jEO.js.map} +1 -1
  13. prefect/server/ui-v2/assets/{automation._id-CjbxAkhm.js → automation._id-DbPjf3XE.js} +2 -2
  14. prefect/server/ui-v2/assets/{automation._id-CjbxAkhm.js.map → automation._id-DbPjf3XE.js.map} +1 -1
  15. prefect/server/ui-v2/assets/{automation_._id.edit-DRlNq_Xo.js → automation_._id.edit-B9au_aHe.js} +2 -2
  16. prefect/server/ui-v2/assets/{automation_._id.edit-DRlNq_Xo.js.map → automation_._id.edit-B9au_aHe.js.map} +1 -1
  17. prefect/server/ui-v2/assets/{automations-FJSll7oH.js → automations-BnMq0fGo.js} +2 -2
  18. prefect/server/ui-v2/assets/{automations-FJSll7oH.js.map → automations-BnMq0fGo.js.map} +1 -1
  19. prefect/server/ui-v2/assets/{automations-CzT09aEv.js → automations-DnZuuNqM.js} +2 -2
  20. prefect/server/ui-v2/assets/{automations-CzT09aEv.js.map → automations-DnZuuNqM.js.map} +1 -1
  21. prefect/server/ui-v2/assets/{automations-header-BN3NoIB2.js → automations-header-DL19PBKX.js} +2 -2
  22. prefect/server/ui-v2/assets/{automations-header-BN3NoIB2.js.map → automations-header-DL19PBKX.js.map} +1 -1
  23. prefect/server/ui-v2/assets/{automations-wizard-BnZEGQS-.js → automations-wizard-g9JT-fcT.js} +2 -2
  24. prefect/server/ui-v2/assets/{automations-wizard-BnZEGQS-.js.map → automations-wizard-g9JT-fcT.js.map} +1 -1
  25. prefect/server/ui-v2/assets/{base-job-template-form-section-nREgqsv4.js → base-job-template-form-section-D6Rocz7H.js} +2 -2
  26. prefect/server/ui-v2/assets/{base-job-template-form-section-nREgqsv4.js.map → base-job-template-form-section-D6Rocz7H.js.map} +1 -1
  27. prefect/server/ui-v2/assets/{block-type-details-1ju9eLqv.js → block-type-details-B8wr10f_.js} +2 -2
  28. prefect/server/ui-v2/assets/{block-type-details-1ju9eLqv.js.map → block-type-details-B8wr10f_.js.map} +1 -1
  29. prefect/server/ui-v2/assets/{block._id-DsFiU6aB.js → block._id-DR9F09i0.js} +2 -2
  30. prefect/server/ui-v2/assets/{block._id-DsFiU6aB.js.map → block._id-DR9F09i0.js.map} +1 -1
  31. prefect/server/ui-v2/assets/{block_._id.edit-BEo6xquI.js → block_._id.edit-ocD-wt_8.js} +2 -2
  32. prefect/server/ui-v2/assets/{block_._id.edit-BEo6xquI.js.map → block_._id.edit-ocD-wt_8.js.map} +1 -1
  33. prefect/server/ui-v2/assets/{blocks-DYS0gw-c.js → blocks-D1vkcTSk.js} +2 -2
  34. prefect/server/ui-v2/assets/{blocks-DYS0gw-c.js.map → blocks-D1vkcTSk.js.map} +1 -1
  35. prefect/server/ui-v2/assets/{catalog-B5r5YNsL.js → catalog-BYZdEi7B.js} +2 -2
  36. prefect/server/ui-v2/assets/{catalog-B5r5YNsL.js.map → catalog-BYZdEi7B.js.map} +1 -1
  37. prefect/server/ui-v2/assets/{catalog_._slug-DzanzERG.js → catalog_._slug-CaWuGNkI.js} +2 -2
  38. prefect/server/ui-v2/assets/{catalog_._slug-DzanzERG.js.map → catalog_._slug-CaWuGNkI.js.map} +1 -1
  39. prefect/server/ui-v2/assets/{catalog_._slug_.create-BZ9mrp-t.js → catalog_._slug_.create-BhSfGb6L.js} +2 -2
  40. prefect/server/ui-v2/assets/{catalog_._slug_.create-BZ9mrp-t.js.map → catalog_._slug_.create-BhSfGb6L.js.map} +1 -1
  41. prefect/server/ui-v2/assets/{concurrency-limit._id-DAteTOkx.js → concurrency-limit._id-BmJ1ilWZ.js} +2 -2
  42. prefect/server/ui-v2/assets/{concurrency-limit._id-DAteTOkx.js.map → concurrency-limit._id-BmJ1ilWZ.js.map} +1 -1
  43. prefect/server/ui-v2/assets/{concurrency-limits-6wrWT40K.js → concurrency-limits-r6uqKU4n.js} +2 -2
  44. prefect/server/ui-v2/assets/{concurrency-limits-6wrWT40K.js.map → concurrency-limits-r6uqKU4n.js.map} +1 -1
  45. prefect/server/ui-v2/assets/{create-DNHZMzSg.js → create-BraajOs6.js} +2 -2
  46. prefect/server/ui-v2/assets/{create-DNHZMzSg.js.map → create-BraajOs6.js.map} +1 -1
  47. prefect/server/ui-v2/assets/{create-rAm-skQJ.js → create-DzOteDgB.js} +2 -2
  48. prefect/server/ui-v2/assets/{create-rAm-skQJ.js.map → create-DzOteDgB.js.map} +1 -1
  49. prefect/server/ui-v2/assets/{data-table-C9cUZ4mJ.js → data-table-fAMnsEao.js} +2 -2
  50. prefect/server/ui-v2/assets/{data-table-C9cUZ4mJ.js.map → data-table-fAMnsEao.js.map} +1 -1
  51. prefect/server/ui-v2/assets/{data-table-DTqeGWDm.js → data-table-ylRuiwEf.js} +2 -2
  52. prefect/server/ui-v2/assets/{data-table-DTqeGWDm.js.map → data-table-ylRuiwEf.js.map} +1 -1
  53. prefect/server/ui-v2/assets/{deployment-form-BcCbt9ZS.js → deployment-form-qnUH-H_h.js} +2 -2
  54. prefect/server/ui-v2/assets/{deployment-form-BcCbt9ZS.js.map → deployment-form-qnUH-H_h.js.map} +1 -1
  55. prefect/server/ui-v2/assets/{deployment-links-BylnNedU.js → deployment-links-DZbgNxc0.js} +2 -2
  56. prefect/server/ui-v2/assets/{deployment-links-BylnNedU.js.map → deployment-links-DZbgNxc0.js.map} +1 -1
  57. prefect/server/ui-v2/assets/deployment._id-8vH-TMKk.js +2 -0
  58. prefect/server/ui-v2/assets/{deployment._id-Bit0Zg0o.js.map → deployment._id-8vH-TMKk.js.map} +1 -1
  59. prefect/server/ui-v2/assets/{deployment_._id.duplicate-Dt0cV3y8.js → deployment_._id.duplicate-cBXK4e7m.js} +2 -2
  60. prefect/server/ui-v2/assets/{deployment_._id.duplicate-Dt0cV3y8.js.map → deployment_._id.duplicate-cBXK4e7m.js.map} +1 -1
  61. prefect/server/ui-v2/assets/{deployment_._id.edit-BHDQGqwT.js → deployment_._id.edit-RokhParH.js} +2 -2
  62. prefect/server/ui-v2/assets/{deployment_._id.edit-BHDQGqwT.js.map → deployment_._id.edit-RokhParH.js.map} +1 -1
  63. prefect/server/ui-v2/assets/{deployment_._id.run-BVrGb_An.js → deployment_._id.run-D_A0f9ro.js} +2 -2
  64. prefect/server/ui-v2/assets/{deployment_._id.run-BVrGb_An.js.map → deployment_._id.run-D_A0f9ro.js.map} +1 -1
  65. prefect/server/ui-v2/assets/{deployments-D-JFwDxb.js → deployments-CL4UsB5L.js} +2 -2
  66. prefect/server/ui-v2/assets/{deployments-D-JFwDxb.js.map → deployments-CL4UsB5L.js.map} +1 -1
  67. prefect/server/ui-v2/assets/{deployments-CAM9osT1.js → deployments-DIvZzmmm.js} +2 -2
  68. prefect/server/ui-v2/assets/{deployments-CAM9osT1.js.map → deployments-DIvZzmmm.js.map} +1 -1
  69. prefect/server/ui-v2/assets/{event-resource-display-DiO3S7Ia.js → event-resource-display-BPgNIz3b.js} +2 -2
  70. prefect/server/ui-v2/assets/{event-resource-display-DiO3S7Ia.js.map → event-resource-display-BPgNIz3b.js.map} +1 -1
  71. prefect/server/ui-v2/assets/{event._eventDate._eventId-fivz-QA-.js → event._eventDate._eventId-C5T_C1ie.js} +2 -2
  72. prefect/server/ui-v2/assets/{event._eventDate._eventId-fivz-QA-.js.map → event._eventDate._eventId-C5T_C1ie.js.map} +1 -1
  73. prefect/server/ui-v2/assets/{events-BZqz8fGT.js → events-CjzDiMQY.js} +2 -2
  74. prefect/server/ui-v2/assets/{events-BZqz8fGT.js.map → events-CjzDiMQY.js.map} +1 -1
  75. prefect/server/ui-v2/assets/{events-timeline-C_Xm4tt5.js → events-timeline-DBf6Hv6P.js} +2 -2
  76. prefect/server/ui-v2/assets/{events-timeline-C_Xm4tt5.js.map → events-timeline-DBf6Hv6P.js.map} +1 -1
  77. prefect/server/ui-v2/assets/{flow-run-graph-pTdeDpdv.js → flow-run-graph-B-Rn3JP8.js} +2 -2
  78. prefect/server/ui-v2/assets/{flow-run-graph-pTdeDpdv.js.map → flow-run-graph-B-Rn3JP8.js.map} +1 -1
  79. prefect/server/ui-v2/assets/flow-run._id-CToRTFL-.js +4 -0
  80. prefect/server/ui-v2/assets/flow-run._id-CToRTFL-.js.map +1 -0
  81. prefect/server/ui-v2/assets/{flow-run._id-BVoaPGk2.js → flow-run._id-D8o5rDLy.js} +2 -2
  82. prefect/server/ui-v2/assets/{flow-run._id-BVoaPGk2.js.map → flow-run._id-D8o5rDLy.js.map} +1 -1
  83. prefect/server/ui-v2/assets/{flow._id-B_bM6teo.js → flow._id-B2_rJFUs.js} +2 -2
  84. prefect/server/ui-v2/assets/{flow._id-B_bM6teo.js.map → flow._id-B2_rJFUs.js.map} +1 -1
  85. prefect/server/ui-v2/assets/{flow._id-R2bbOegi.js → flow._id-CLyUkJ0y.js} +2 -2
  86. prefect/server/ui-v2/assets/{flow._id-R2bbOegi.js.map → flow._id-CLyUkJ0y.js.map} +1 -1
  87. prefect/server/ui-v2/assets/{flows-CfkNT6RY.js → flows-Be7fDUCY.js} +2 -2
  88. prefect/server/ui-v2/assets/{flows-CfkNT6RY.js.map → flows-Be7fDUCY.js.map} +1 -1
  89. prefect/server/ui-v2/assets/{header-YxYTenAS.js → header-CGI3ycxQ.js} +2 -2
  90. prefect/server/ui-v2/assets/{header-YxYTenAS.js.map → header-CGI3ycxQ.js.map} +1 -1
  91. prefect/server/ui-v2/assets/{header-BZRaOSZD.js → header-DNoe-API.js} +2 -2
  92. prefect/server/ui-v2/assets/{header-BZRaOSZD.js.map → header-DNoe-API.js.map} +1 -1
  93. prefect/server/ui-v2/assets/{header-BGEBYoZ-.js → header-KOK4VdzF.js} +2 -2
  94. prefect/server/ui-v2/assets/{header-BGEBYoZ-.js.map → header-KOK4VdzF.js.map} +1 -1
  95. prefect/server/ui-v2/assets/{index-CY3vSgYi.js → index-Dycuvz2J.js} +4 -4
  96. prefect/server/ui-v2/assets/{index-CY3vSgYi.js.map → index-Dycuvz2J.js.map} +1 -1
  97. prefect/server/ui-v2/assets/index-xyno1SY-.css +2 -0
  98. prefect/server/ui-v2/assets/{json-input-Do44mFlz.js → json-input-Bgo1Ygii.js} +2 -2
  99. prefect/server/ui-v2/assets/{json-input-Do44mFlz.js.map → json-input-Bgo1Ygii.js.map} +1 -1
  100. prefect/server/ui-v2/assets/{key._key-BLDfIhNp.js → key._key-CwysWbyi.js} +2 -2
  101. prefect/server/ui-v2/assets/{key._key-BLDfIhNp.js.map → key._key-CwysWbyi.js.map} +1 -1
  102. prefect/server/ui-v2/assets/{lazy-markdown-BjhaJhp1.js → lazy-markdown-Ai8LTUwb.js} +2 -2
  103. prefect/server/ui-v2/assets/{lazy-markdown-BjhaJhp1.js.map → lazy-markdown-Ai8LTUwb.js.map} +1 -1
  104. prefect/server/ui-v2/assets/{login-BE8b3bjj.js → login-BcJSfLAz.js} +2 -2
  105. prefect/server/ui-v2/assets/{login-BE8b3bjj.js.map → login-BcJSfLAz.js.map} +1 -1
  106. prefect/server/ui-v2/assets/{runs-DHK0p2Av.js → runs-DLlt4RrO.js} +2 -2
  107. prefect/server/ui-v2/assets/runs-DLlt4RrO.js.map +1 -0
  108. prefect/server/ui-v2/assets/{runs-Br4nP5uA.js → runs-DneBEhCC.js} +2 -2
  109. prefect/server/ui-v2/assets/{runs-Br4nP5uA.js.map → runs-DneBEhCC.js.map} +1 -1
  110. prefect/server/ui-v2/assets/schedule-badge-DJkmg_N6.js +2 -0
  111. prefect/server/ui-v2/assets/schedule-badge-DJkmg_N6.js.map +1 -0
  112. prefect/server/ui-v2/assets/{schema-form-XywN3FrH.js → schema-form-Dbum_VTi.js} +2 -2
  113. prefect/server/ui-v2/assets/{schema-form-XywN3FrH.js.map → schema-form-Dbum_VTi.js.map} +1 -1
  114. prefect/server/ui-v2/assets/{settings-oOggsziV.js → settings-B-4SW2Mu.js} +2 -2
  115. prefect/server/ui-v2/assets/{settings-oOggsziV.js.map → settings-B-4SW2Mu.js.map} +1 -1
  116. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-8cabbGHT.js → task-run-concurrency-limits-reset-dialog-D8z4zOxf.js} +2 -2
  117. prefect/server/ui-v2/assets/{task-run-concurrency-limits-reset-dialog-8cabbGHT.js.map → task-run-concurrency-limits-reset-dialog-D8z4zOxf.js.map} +1 -1
  118. prefect/server/ui-v2/assets/task-run._id-CoIn7jv8.js +3 -0
  119. prefect/server/ui-v2/assets/task-run._id-CoIn7jv8.js.map +1 -0
  120. prefect/server/ui-v2/assets/{timezone-select-DSV-9cEy.js → timezone-select-OdKUezlX.js} +2 -2
  121. prefect/server/ui-v2/assets/{timezone-select-DSV-9cEy.js.map → timezone-select-OdKUezlX.js.map} +1 -1
  122. prefect/server/ui-v2/assets/{toggle-group-Dwz58eC-.js → toggle-group-BnFyTwhJ.js} +2 -2
  123. prefect/server/ui-v2/assets/{toggle-group-Dwz58eC-.js.map → toggle-group-BnFyTwhJ.js.map} +1 -1
  124. prefect/server/ui-v2/assets/{trigger-details-C7nDNnJH.js → trigger-details-BAy-SDc-.js} +2 -2
  125. prefect/server/ui-v2/assets/{trigger-details-C7nDNnJH.js.map → trigger-details-BAy-SDc-.js.map} +1 -1
  126. prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-XbluRW9V.js → use-delete-automation-confirmation-dialog-D-ORZsfs.js} +2 -2
  127. prefect/server/ui-v2/assets/{use-delete-automation-confirmation-dialog-XbluRW9V.js.map → use-delete-automation-confirmation-dialog-D-ORZsfs.js.map} +1 -1
  128. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-CysIwpSk.js → use-delete-block-document-confirmation-dialog-BoaoY_pG.js} +2 -2
  129. prefect/server/ui-v2/assets/{use-delete-block-document-confirmation-dialog-CysIwpSk.js.map → use-delete-block-document-confirmation-dialog-BoaoY_pG.js.map} +1 -1
  130. prefect/server/ui-v2/assets/{use-delete-deployment-confirmation-dialog-DB1oJWcJ.js → use-delete-deployment-confirmation-dialog-BNNa18jE.js} +2 -2
  131. prefect/server/ui-v2/assets/{use-delete-deployment-confirmation-dialog-DB1oJWcJ.js.map → use-delete-deployment-confirmation-dialog-BNNa18jE.js.map} +1 -1
  132. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-DOlsD-Pl.js → use-get-artifacts-flow-task-runs-Bexw8m2K.js} +2 -2
  133. prefect/server/ui-v2/assets/{use-get-artifacts-flow-task-runs-DOlsD-Pl.js.map → use-get-artifacts-flow-task-runs-Bexw8m2K.js.map} +1 -1
  134. prefect/server/ui-v2/assets/{use-resource-options-C6pEfujv.js → use-resource-options-D0i2RjFP.js} +2 -2
  135. prefect/server/ui-v2/assets/{use-resource-options-C6pEfujv.js.map → use-resource-options-D0i2RjFP.js.map} +1 -1
  136. prefect/server/ui-v2/assets/{variables-DkUAhh1H.js → variables-AaYxzC89.js} +2 -2
  137. prefect/server/ui-v2/assets/{variables-DkUAhh1H.js.map → variables-AaYxzC89.js.map} +1 -1
  138. prefect/server/ui-v2/assets/{variables-sBYSE_mP.js → variables-DkIFxchZ.js} +2 -2
  139. prefect/server/ui-v2/assets/{variables-sBYSE_mP.js.map → variables-DkIFxchZ.js.map} +1 -1
  140. prefect/server/ui-v2/assets/{work-pool-queue-form-Bxeyezof.js → work-pool-queue-form-AHaHHvwS.js} +2 -2
  141. prefect/server/ui-v2/assets/{work-pool-queue-form-Bxeyezof.js.map → work-pool-queue-form-AHaHHvwS.js.map} +1 -1
  142. prefect/server/ui-v2/assets/{work-pool-queue-toggle-muLrGLwM.js → work-pool-queue-toggle-C603ySur.js} +2 -2
  143. prefect/server/ui-v2/assets/{work-pool-queue-toggle-muLrGLwM.js.map → work-pool-queue-toggle-C603ySur.js.map} +1 -1
  144. prefect/server/ui-v2/assets/{work-pool._workPoolName-MttgBNwZ.js → work-pool._workPoolName-BsXx6Dxq.js} +2 -2
  145. prefect/server/ui-v2/assets/{work-pool._workPoolName-MttgBNwZ.js.map → work-pool._workPoolName-BsXx6Dxq.js.map} +1 -1
  146. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-BYy4ldSB.js → work-pool_._workPoolName.edit-DZ1dHbJL.js} +2 -2
  147. prefect/server/ui-v2/assets/{work-pool_._workPoolName.edit-BYy4ldSB.js.map → work-pool_._workPoolName.edit-DZ1dHbJL.js.map} +1 -1
  148. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-BZafK2IY.js → work-pool_._workPoolName.queue._workQueueName-CMWqN4_F.js} +2 -2
  149. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue._workQueueName-BZafK2IY.js.map → work-pool_._workPoolName.queue._workQueueName-CMWqN4_F.js.map} +1 -1
  150. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue.create-BQfLUjar.js → work-pool_._workPoolName.queue.create-DE17hjpw.js} +2 -2
  151. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue.create-BQfLUjar.js.map → work-pool_._workPoolName.queue.create-DE17hjpw.js.map} +1 -1
  152. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue_._workQueueName.edit-DhDW_J7h.js → work-pool_._workPoolName.queue_._workQueueName.edit-B_N9M0mq.js} +2 -2
  153. prefect/server/ui-v2/assets/{work-pool_._workPoolName.queue_._workQueueName.edit-DhDW_J7h.js.map → work-pool_._workPoolName.queue_._workQueueName.edit-B_N9M0mq.js.map} +1 -1
  154. prefect/server/ui-v2/assets/{work-pools-BkEYDe8L.js → work-pools-DHZlm7_7.js} +2 -2
  155. prefect/server/ui-v2/assets/{work-pools-BkEYDe8L.js.map → work-pools-DHZlm7_7.js.map} +1 -1
  156. prefect/server/ui-v2/assets/{work-pools-B9HaoZod.js → work-pools-DUEdkdTT.js} +2 -2
  157. prefect/server/ui-v2/assets/{work-pools-B9HaoZod.js.map → work-pools-DUEdkdTT.js.map} +1 -1
  158. prefect/server/ui-v2/assets/{work-queue-icon-text-BjEy9we8.js → work-queue-icon-text-qwYXV0Ds.js} +2 -2
  159. prefect/server/ui-v2/assets/{work-queue-icon-text-BjEy9we8.js.map → work-queue-icon-text-qwYXV0Ds.js.map} +1 -1
  160. prefect/server/ui-v2/assets/{work-queue-select-C0CRDgEa.js → work-queue-select-DjFsJGAV.js} +2 -2
  161. prefect/server/ui-v2/assets/{work-queue-select-C0CRDgEa.js.map → work-queue-select-DjFsJGAV.js.map} +1 -1
  162. prefect/server/ui-v2/index.html +2 -2
  163. prefect/server/utilities/worker_channel.py +336 -0
  164. prefect/settings/sources.py +7 -1
  165. {prefect-3.7.2.dev3.dist-info → prefect-3.7.2.dev4.dist-info}/METADATA +1 -1
  166. {prefect-3.7.2.dev3.dist-info → prefect-3.7.2.dev4.dist-info}/RECORD +169 -168
  167. prefect/server/ui-v2/assets/deployment._id-Bit0Zg0o.js +0 -2
  168. prefect/server/ui-v2/assets/flow-run._id-Dmt9kWk3.js +0 -4
  169. prefect/server/ui-v2/assets/flow-run._id-Dmt9kWk3.js.map +0 -1
  170. prefect/server/ui-v2/assets/index-DX6fk7gn.css +0 -2
  171. prefect/server/ui-v2/assets/runs-DHK0p2Av.js.map +0 -1
  172. prefect/server/ui-v2/assets/schedule-badge-D3JRXiqi.js +0 -2
  173. prefect/server/ui-v2/assets/schedule-badge-D3JRXiqi.js.map +0 -1
  174. prefect/server/ui-v2/assets/task-run._id-DFALJgrE.js +0 -3
  175. prefect/server/ui-v2/assets/task-run._id-DFALJgrE.js.map +0 -1
  176. {prefect-3.7.2.dev3.dist-info → prefect-3.7.2.dev4.dist-info}/WHEEL +0 -0
  177. {prefect-3.7.2.dev3.dist-info → prefect-3.7.2.dev4.dist-info}/entry_points.txt +0 -0
  178. {prefect-3.7.2.dev3.dist-info → prefect-3.7.2.dev4.dist-info}/licenses/LICENSE +0 -0
prefect/__init__.py CHANGED
@@ -113,6 +113,11 @@ def _initialize_plugins() -> None:
113
113
  # Re-raise SystemExit from strict mode
114
114
  raise
115
115
  except Exception as e:
116
+ from pydantic_settings.exceptions import SettingsError
117
+
118
+ if isinstance(e, SettingsError):
119
+ return
120
+
116
121
  # Log but don't crash on plugin errors
117
122
  try:
118
123
  from prefect.logging import get_logger
prefect/_build_info.py CHANGED
@@ -1,5 +1,5 @@
1
1
  # Generated by versioningit
2
- __version__ = "3.7.2.dev3"
3
- __build_date__ = "2026-05-20 09:17:31.387567+00:00"
4
- __git_commit__ = "30ca141845030af77328e2ebe495e200db2fc679"
2
+ __version__ = "3.7.2.dev4"
3
+ __build_date__ = "2026-05-21 09:17:34.991867+00:00"
4
+ __git_commit__ = "354623c1258b2e75de62230b8e3f0400f2722cf1"
5
5
  __dirty__ = False
prefect/cli/_app.py CHANGED
@@ -158,7 +158,14 @@ def app() -> None:
158
158
 
159
159
  print(prefect.__version__)
160
160
  raise SystemExit(0)
161
- _app.meta(_normalize_top_level_flags(args))
161
+
162
+ from pydantic_settings.exceptions import SettingsError
163
+
164
+ try:
165
+ _app.meta(_normalize_top_level_flags(args))
166
+ except SettingsError as exc:
167
+ console.print(f"[red]{exc}[/red]")
168
+ raise SystemExit(1)
162
169
 
163
170
 
164
171
  # =============================================================================
prefect/runner/runner.py CHANGED
@@ -215,7 +215,7 @@ class Runner:
215
215
  def goodbye_flow(name):
216
216
  print(f"goodbye {name}")
217
217
 
218
- if __name__ == "__main__"
218
+ if __name__ == "__main__":
219
219
  runner = Runner(name="my-runner")
220
220
 
221
221
  # Will be runnable via the API
@@ -614,17 +614,17 @@ class Runner:
614
614
  def goodbye_flow(name):
615
615
  print(f"goodbye {name}")
616
616
 
617
- if __name__ == "__main__"
618
- runner = Runner(name="my-runner")
617
+ if __name__ == "__main__":
618
+ runner = Runner(name="my-runner")
619
619
 
620
- # Will be runnable via the API
621
- runner.add_flow(hello_flow)
620
+ # Will be runnable via the API
621
+ runner.add_flow(hello_flow)
622
622
 
623
- # Run on a cron schedule
624
- runner.add_flow(goodbye_flow, schedule={"cron": "0 * * * *"})
623
+ # Run on a cron schedule
624
+ runner.add_flow(goodbye_flow, schedule={"cron": "0 * * * *"})
625
625
 
626
- asyncio.run(runner.start())
627
- ```
626
+ asyncio.run(runner.start())
627
+ ```
628
628
  """
629
629
  from prefect.runner.server import start_webserver
630
630
 
@@ -781,9 +781,9 @@ class Runner:
781
781
  # The process may be a multiprocessing.context.SpawnProcess, in which case it will have an `exitcode` attribute
782
782
  # but no `returncode` attribute
783
783
  if (
784
- getattr(process, "returncode", None)
785
- or getattr(process, "exitcode", None)
786
- ) is None:
784
+ getattr(process, "returncode", None) is None
785
+ and getattr(process, "exitcode", None) is None
786
+ ):
787
787
  await self._add_flow_run_process_map_entry(
788
788
  flow_run.id, ProcessMapEntry(pid=process.pid, flow_run=flow_run)
789
789
  )
@@ -78,6 +78,15 @@ async def update_work_queue(
78
78
  Updates an existing work queue.
79
79
  """
80
80
  async with db.session_context(begin_transaction=True) as session:
81
+ existing_work_queue = await models.work_queues.read_work_queue(
82
+ session=session, work_queue_id=work_queue_id
83
+ )
84
+ if existing_work_queue is None:
85
+ raise HTTPException(
86
+ status_code=status.HTTP_404_NOT_FOUND,
87
+ detail=f"Work Queue {work_queue_id} not found",
88
+ )
89
+
81
90
  result = await models.work_queues.update_work_queue(
82
91
  session=session,
83
92
  work_queue_id=work_queue_id,
@@ -86,7 +95,8 @@ async def update_work_queue(
86
95
  )
87
96
  if not result:
88
97
  raise HTTPException(
89
- status_code=status.HTTP_404_NOT_FOUND, detail=f"Work Queue {id} not found"
98
+ status_code=status.HTTP_404_NOT_FOUND,
99
+ detail=f"Work Queue {work_queue_id} not found",
90
100
  )
91
101
 
92
102
 
@@ -239,6 +249,13 @@ async def delete_work_queue(
239
249
  Delete a work queue by id.
240
250
  """
241
251
  async with db.session_context(begin_transaction=True) as session:
252
+ existing_work_queue = await models.work_queues.read_work_queue(
253
+ session=session, work_queue_id=work_queue_id
254
+ )
255
+ if existing_work_queue is None:
256
+ raise HTTPException(
257
+ status_code=status.HTTP_404_NOT_FOUND, detail="work queue not found"
258
+ )
242
259
  result = await models.work_queues.delete_work_queue(
243
260
  session=session, work_queue_id=work_queue_id
244
261
  )
@@ -26,14 +26,11 @@ import prefect.server.schemas as schemas
26
26
  from prefect._internal.uuid7 import uuid7
27
27
  from prefect.client.schemas.worker_channel import (
28
28
  WORK_POOL_SNAPSHOT_CAPABILITY,
29
- WORKER_CHANNEL_CLOSE_POLICIES,
30
29
  WORKER_HEARTBEAT_CAPABILITY,
31
30
  WorkerChannelCloseReason,
32
31
  WorkerChannelProtocolError,
33
- WorkerHeartbeatFrame,
34
32
  WorkerHelloFrame,
35
33
  WorkerReadyFrame,
36
- WorkPoolSnapshot,
37
34
  WorkPoolSnapshotPayload,
38
35
  select_worker_channel_version,
39
36
  validate_worker_channel_frame,
@@ -49,6 +46,7 @@ from prefect.server.models.work_queues import (
49
46
  from prefect.server.models.workers import emit_work_pool_status_event
50
47
  from prefect.server.schemas.statuses import WorkQueueStatus
51
48
  from prefect.server.utilities import subscriptions
49
+ from prefect.server.utilities import worker_channel as worker_channel_utils
52
50
  from prefect.server.utilities.server import PrefectRouter
53
51
  from prefect.types import DateTime
54
52
  from prefect.types._datetime import now
@@ -185,13 +183,6 @@ class WorkerChannelWorkPoolUpdateEvent:
185
183
  changed_fields: dict[str, dict[str, Any]]
186
184
 
187
185
 
188
- async def _close_worker_channel(
189
- websocket: WebSocket, close_reason: WorkerChannelCloseReason
190
- ) -> None:
191
- policy = WORKER_CHANNEL_CLOSE_POLICIES[close_reason]
192
- await websocket.close(code=policy.websocket_code, reason=close_reason.value)
193
-
194
-
195
186
  async def _receive_worker_hello(websocket: WebSocket) -> WorkerHelloFrame:
196
187
  try:
197
188
  message = await websocket.receive_json()
@@ -295,25 +286,6 @@ async def _resolve_worker_channel_work_queues(
295
286
  return work_queues
296
287
 
297
288
 
298
- async def _build_worker_channel_work_pool_snapshot(
299
- session: AsyncSession,
300
- work_pool: "ORMWorkPool",
301
- ) -> WorkPoolSnapshot:
302
- work_pool_response = schemas.responses.WorkPoolResponse.model_validate(
303
- work_pool, from_attributes=True
304
- )
305
-
306
- if work_pool_response.concurrency_limit is not None:
307
- work_pool_response.active_slots = (
308
- await models.workers.count_work_pool_active_slots(
309
- session=session,
310
- work_pool_id=work_pool.id,
311
- )
312
- )
313
-
314
- return WorkPoolSnapshot.model_validate(work_pool_response.model_dump(mode="json"))
315
-
316
-
317
289
  async def _build_worker_ready_frame(
318
290
  session: AsyncSession,
319
291
  work_pool_name: str,
@@ -392,7 +364,7 @@ async def _build_worker_ready_frame(
392
364
  initial_snapshot = WorkPoolSnapshotPayload(
393
365
  snapshot_sequence=1,
394
366
  reason="initial",
395
- work_pool=await _build_worker_channel_work_pool_snapshot(
367
+ work_pool=await worker_channel_utils.build_worker_channel_work_pool_snapshot(
396
368
  session=session,
397
369
  work_pool=refreshed_work_pool,
398
370
  ),
@@ -433,27 +405,6 @@ async def _build_worker_ready_frame(
433
405
  )
434
406
 
435
407
 
436
- async def _persist_worker_channel_heartbeat(
437
- session: AsyncSession,
438
- work_pool_name: str,
439
- frame: WorkerHeartbeatFrame,
440
- ) -> None:
441
- work_pool = await models.workers.read_work_pool_by_name(
442
- session=session,
443
- work_pool_name=work_pool_name,
444
- )
445
- if work_pool is None:
446
- raise RuntimeError("Worker channel work pool no longer exists")
447
-
448
- await models.workers.record_worker_heartbeat(
449
- session=session,
450
- work_pool=work_pool,
451
- worker_name=frame.payload.worker_name,
452
- heartbeat_interval_seconds=frame.payload.heartbeat_interval_seconds,
453
- emit_status_change=emit_work_pool_status_event,
454
- )
455
-
456
-
457
408
  # -----------------------------------------------------
458
409
  # --
459
410
  # --
@@ -642,13 +593,23 @@ async def update_work_pool(
642
593
  work_pool_id = await worker_lookups._get_work_pool_id_from_name(
643
594
  session=session, work_pool_name=work_pool_name
644
595
  )
645
- await models.workers.update_work_pool(
596
+ updated = await models.workers.update_work_pool(
646
597
  session=session,
647
598
  work_pool_id=work_pool_id,
648
599
  work_pool=work_pool,
649
600
  emit_status_change=emit_work_pool_status_event,
650
601
  )
651
602
 
603
+ if updated and worker_channel_utils.work_pool_update_triggers_snapshot(
604
+ update_values
605
+ ):
606
+ await worker_channel_utils.publish_snapshot_invalidation(
607
+ worker_channel_utils.WorkerChannelSnapshotInvalidation(
608
+ work_pool_id=work_pool_id,
609
+ reason="work_pool_updated",
610
+ )
611
+ )
612
+
652
613
 
653
614
  @router.delete("/{name}", status_code=status.HTTP_204_NO_CONTENT)
654
615
  async def delete_work_pool(
@@ -674,10 +635,19 @@ async def delete_work_pool(
674
635
  session=session, work_pool_name=work_pool_name
675
636
  )
676
637
 
677
- await models.workers.delete_work_pool(
638
+ deleted = await models.workers.delete_work_pool(
678
639
  session=session, work_pool_id=work_pool_id
679
640
  )
680
641
 
642
+ if deleted:
643
+ await worker_channel_utils.publish_snapshot_invalidation(
644
+ worker_channel_utils.WorkerChannelSnapshotInvalidation(
645
+ work_pool_id=work_pool_id,
646
+ reason="work_pool_deleted",
647
+ work_pool_deleted=True,
648
+ )
649
+ )
650
+
681
651
 
682
652
  @router.post("/{name}/concurrency_status")
683
653
  async def read_work_pool_concurrency_status(
@@ -1013,8 +983,11 @@ async def update_work_queue(
1013
983
  """
1014
984
  Update a work pool queue
1015
985
  """
1016
-
1017
986
  async with db.session_context(begin_transaction=True) as session:
987
+ await worker_lookups._get_work_pool_id_from_name(
988
+ session=session,
989
+ work_pool_name=work_pool_name,
990
+ )
1018
991
  work_queue_id = await worker_lookups._get_work_queue_id_from_name(
1019
992
  work_pool_name=work_pool_name,
1020
993
  work_queue_name=work_queue_name,
@@ -1045,6 +1018,10 @@ async def delete_work_queue(
1045
1018
  """
1046
1019
 
1047
1020
  async with db.session_context(begin_transaction=True) as session:
1021
+ await worker_lookups._get_work_pool_id_from_name(
1022
+ session=session,
1023
+ work_pool_name=work_pool_name,
1024
+ )
1048
1025
  work_queue_id = await worker_lookups._get_work_queue_id_from_name(
1049
1026
  session=session,
1050
1027
  work_pool_name=work_pool_name,
@@ -1081,84 +1058,58 @@ async def worker_channel_connect(
1081
1058
 
1082
1059
  try:
1083
1060
  hello = await _receive_worker_hello(websocket)
1084
- async with db.session_context(begin_transaction=True) as session:
1085
- ready, work_pool_update_event = await _build_worker_ready_frame(
1086
- session=session,
1087
- work_pool_name=work_pool_name,
1088
- hello=hello,
1089
- )
1090
-
1091
- if work_pool_update_event is not None:
1092
- async with db.session_context() as session:
1093
- work_pool = await models.workers.read_work_pool(
1094
- session=session,
1095
- work_pool_id=work_pool_update_event.work_pool_id,
1096
- )
1097
- assert work_pool is not None
1098
- await models.workers.emit_work_pool_updated_event(
1061
+ async with worker_channel_utils.messaging.ephemeral_subscription(
1062
+ worker_channel_utils.WORKER_CHANNEL_SNAPSHOT_TOPIC,
1063
+ ) as consumer_kwargs:
1064
+ async with db.session_context(begin_transaction=True) as session:
1065
+ ready, work_pool_update_event = await _build_worker_ready_frame(
1099
1066
  session=session,
1100
- work_pool=work_pool,
1101
- changed_fields=work_pool_update_event.changed_fields,
1102
- )
1103
-
1104
- await websocket.send_json(ready.model_dump(mode="json"))
1105
-
1106
- while True:
1107
- try:
1108
- message = await websocket.receive_json()
1109
- frame = validate_worker_channel_frame(message)
1110
- except ValidationError:
1111
- await _close_worker_channel(
1112
- websocket, WorkerChannelCloseReason.PROTOCOL_ERROR
1113
- )
1114
- return
1115
- except ValueError:
1116
- await _close_worker_channel(
1117
- websocket, WorkerChannelCloseReason.PROTOCOL_ERROR
1118
- )
1119
- return
1120
-
1121
- if not isinstance(frame, WorkerHeartbeatFrame):
1122
- await _close_worker_channel(
1123
- websocket, WorkerChannelCloseReason.PROTOCOL_ERROR
1124
- )
1125
- return
1126
-
1127
- if (
1128
- frame.payload.consumer_id != hello.payload.consumer_id
1129
- or frame.payload.worker_name != hello.payload.worker_name
1130
- ):
1131
- await _close_worker_channel(
1132
- websocket, WorkerChannelCloseReason.PROTOCOL_ERROR
1067
+ work_pool_name=work_pool_name,
1068
+ hello=hello,
1133
1069
  )
1134
- return
1135
1070
 
1136
- try:
1137
- async with db.session_context(begin_transaction=True) as session:
1138
- await _persist_worker_channel_heartbeat(
1071
+ if work_pool_update_event is not None:
1072
+ async with db.session_context() as session:
1073
+ work_pool = await models.workers.read_work_pool(
1074
+ session=session,
1075
+ work_pool_id=work_pool_update_event.work_pool_id,
1076
+ )
1077
+ assert work_pool is not None
1078
+ await models.workers.emit_work_pool_updated_event(
1139
1079
  session=session,
1140
- work_pool_name=work_pool_name,
1141
- frame=frame,
1080
+ work_pool=work_pool,
1081
+ changed_fields=work_pool_update_event.changed_fields,
1082
+ )
1083
+ await worker_channel_utils.publish_snapshot_invalidation(
1084
+ worker_channel_utils.WorkerChannelSnapshotInvalidation(
1085
+ work_pool_id=work_pool_update_event.work_pool_id,
1086
+ reason="work_pool_updated",
1142
1087
  )
1143
- except Exception:
1144
- logger.exception("Worker channel heartbeat persistence failed")
1145
- await _close_worker_channel(
1146
- websocket,
1147
- WorkerChannelCloseReason.HEARTBEAT_PERSISTENCE_FAILED,
1148
1088
  )
1149
- return
1089
+
1090
+ connection = worker_channel_utils.WorkerChannelConnection(
1091
+ websocket=websocket,
1092
+ db=db,
1093
+ work_pool_name=work_pool_name,
1094
+ work_pool_id=ready.payload.initial_snapshot.work_pool.id,
1095
+ consumer_id=hello.payload.consumer_id,
1096
+ worker_name=hello.payload.worker_name,
1097
+ )
1098
+ await connection.run(ready, consumer_kwargs)
1150
1099
 
1151
1100
  except WorkerChannelSetupError as exc:
1152
1101
  logger.info("Worker channel setup failed: %s", exc.detail)
1153
- await _close_worker_channel(websocket, exc.close_reason)
1102
+ await worker_channel_utils.close_worker_channel(websocket, exc.close_reason)
1154
1103
  except HTTPException as exc:
1155
1104
  logger.info("Worker channel setup failed HTTP validation: %s", exc.detail)
1156
- await _close_worker_channel(websocket, WorkerChannelCloseReason.PROTOCOL_ERROR)
1105
+ await worker_channel_utils.close_worker_channel(
1106
+ websocket, WorkerChannelCloseReason.PROTOCOL_ERROR
1107
+ )
1157
1108
  except subscriptions.NORMAL_DISCONNECT_EXCEPTIONS:
1158
1109
  return
1159
1110
  except Exception:
1160
1111
  logger.exception("Worker channel setup failed due to a transient server error")
1161
- await _close_worker_channel(
1112
+ await worker_channel_utils.close_worker_channel(
1162
1113
  websocket, WorkerChannelCloseReason.TRANSIENT_SERVER_ERROR
1163
1114
  )
1164
1115
 
@@ -1,2 +1,2 @@
1
- import{r as e}from"./rolldown-runtime-S-ySWqyJ.js";import{a as t,o as n,r,s as i}from"./vendor-codemirror-bBfSEHi1.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-QgMid0cA.js";import{g as f,h as p,t as m,u as h}from"./button-D8P8WefN.js";import{n as g}from"./dist-B1M6i_WJ.js";import{n as _}from"./input-D-Xs4C8i.js";import{t as v}from"./tag-badge-DcOR5Kjz.js";import{Dr as y,Er as b,K as x,Mr as S,Or as C,Rn as w,ar as T,cr as E,jr as D,kr as O,lr as k,m as A,sr as j,ur as M}from"./index-CY3vSgYi.js";import{t as N}from"./key-value-D9773LpZ.js";import{n as P}from"./use-get-artifacts-flow-task-runs-DOlsD-Pl.js";import{t as F}from"./lazy-markdown-BjhaJhp1.js";import{t as I}from"./data-table-DTqeGWDm.js";var L=e(i(),1),R=n(),z=({artifact:e})=>(0,R.jsxs)(R.Fragment,{children:[(0,R.jsxs)(`div`,{className:`flex items-center justify-between`,children:[e.key?(0,R.jsx)(`div`,{className:`flex items-center gap-2 min-w-0`,children:(0,R.jsx)(b,{className:`min-w-0`,children:(0,R.jsxs)(O,{className:`flex-nowrap`,children:[(0,R.jsx)(y,{className:`min-w-0`,children:(0,R.jsx)(C,{to:`/artifacts/key/$key`,params:{key:e.key},className:`text-xl font-semibold truncate block`,title:e.key,children:e.key})}),(0,R.jsx)(D,{}),(0,R.jsx)(y,{className:`text-xl font-semibold min-w-0`,children:(0,R.jsx)(`span`,{className:`font-mono truncate block`,title:e.id,children:e.id})})]})})}):(0,R.jsx)(`div`,{className:`flex items-center gap-2 min-w-0`,children:(0,R.jsx)(b,{className:`min-w-0`,children:(0,R.jsxs)(O,{className:`flex-nowrap`,children:[e.flow_run&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(y,{className:`min-w-0`,children:(0,R.jsx)(C,{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,R.jsx)(D,{})]}),e.task_run&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(y,{className:`min-w-0`,children:(0,R.jsx)(C,{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,R.jsx)(D,{})]}),(0,R.jsx)(y,{className:`text-xl font-semibold min-w-0`,children:(0,R.jsx)(`span`,{className:`font-mono truncate block`,title:e.id,children:e.id})})]})})}),(0,R.jsx)(T,{id:`artifacts-guide`,label:`Documentation`})]}),e.description&&(0,R.jsx)(`div`,{className:`text-sm text-muted-foreground my-2`,children:(0,R.jsx)(F,{children:e.description})}),(0,R.jsx)(`hr`,{})]}),B=({artifact:e})=>{let[n,i]=(0,L.useState)(!1),a=()=>{i(e=>!e)},o=(0,L.useRef)(null),{setContainer:s}=r({container:o.current,extensions:[t.lineWrapping],value:String(e.data),indentWithTab:!1,editable:!0,basicSetup:{highlightActiveLine:!1,foldGutter:!1,highlightActiveLineGutter:!1}});(0,L.useEffect)(()=>{o.current&&s(o.current)},[s]);let c=e=>{g.success(`Copied to clipboard`),navigator.clipboard.writeText(e)};return(0,R.jsxs)(`div`,{className:`flex flex-col justify-center items-center`,children:[(0,R.jsxs)(m,{"data-testid":`show-raw-data-button`,variant:`outline`,onClick:a,className:`my-4`,children:[n?`Hide`:`Show`,` Raw Data`]}),(0,R.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,R.jsx)(m,{onClick:()=>c(e.data),variant:`ghost`,size:`icon`,className:`absolute top-0 right-0 z-10`,"aria-label":`copy`,children:(0,R.jsx)(f,{id:`Copy`,className:`size-2`})})})]})},ee=s(`/artifacts/artifact/$id`),V=({artifact:e,artifactContent:t,detailsContent:n})=>{let{tab:r}=ee.useSearch(),i=H(e,t,n);return(0,R.jsxs)(j,{defaultValue:`Artifact`,value:r,children:[(0,R.jsx)(k,{children:i.map(({value:e,hiddenOnDesktop:t,LinkComponent:n})=>(0,R.jsx)(n,{className:p(t&&`lg:hidden`)},e))}),i.map(({value:e,ViewComponent:t})=>(0,R.jsx)(t,{},e))]})};function H(e,t,n){return(0,L.useMemo)(()=>{let r=[];return r.push({value:`Artifact`,LinkComponent:({className:e})=>(0,R.jsx)(a,{to:`.`,search:{tab:`Artifact`},children:(0,R.jsx)(M,{value:`Artifact`,className:e,children:`Artifact`})}),ViewComponent:()=>(0,R.jsxs)(E,{value:`Artifact`,children:[t,(0,R.jsx)(B,{artifact:e})]})}),r.push({value:`Details`,hiddenOnDesktop:!0,LinkComponent:({className:e})=>(0,R.jsx)(a,{to:`.`,search:{tab:`Details`},children:(0,R.jsx)(M,{value:`Details`,className:e,children:`Details`})}),ViewComponent:()=>(0,R.jsx)(E,{value:`Details`,children:n})}),r.push({value:`Raw`,LinkComponent:({className:e})=>(0,R.jsx)(a,{to:`.`,search:{tab:`Raw`},children:(0,R.jsx)(M,{value:`Raw`,className:e,children:`Raw`})}),ViewComponent:()=>(0,R.jsx)(E,{value:`Raw`,children:(0,R.jsx)(U,{artifact:e})})}),r},[e,t,n])}function U({artifact:e}){return(0,R.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 W=({url:e})=>(0,R.jsxs)(`div`,{"data-testid":e,className:`prose mt-2`,children:[(0,R.jsx)(`img`,{"data-testid":`image-${e}`,src:e,alt:`artifact-image`,className:`w-full`}),(0,R.jsxs)(`p`,{className:`text-lg`,children:[`Image URL:`,` `,(0,R.jsx)(`a`,{className:`text-link hover:text-link-hover hover:underline`,target:`_blank`,href:e,rel:`noreferrer`,children:e})]})]}),G=({markdown:e})=>(0,R.jsx)(`div`,{"data-testid":`markdown-display`,className:`mt-4 prose`,children:(0,R.jsx)(F,{children:e})}),K=({progress:e})=>(0,R.jsxs)(`p`,{"data-testid":`progress-display`,className:`text-lg`,children:[`Progress: `,e,`%`]}),q=c(),J=({tableData:e})=>{let t=(0,L.useMemo)(()=>JSON.parse(e),[e]),n=(0,L.useMemo)(()=>Object.keys(t[0]??{}),[t]),[r,i]=(0,L.useState)(``),a=(0,L.useMemo)(()=>n.map(e=>q.display({id:e,header:()=>e,cell:({row:t})=>{let n=String(t.original[e]??``);return(0,R.jsx)(`span`,{className:`truncate block`,title:n,children:n})}})),[n]),s=d({data:(0,L.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,R.jsxs)(`div`,{"data-testid":`table-display`,className:`mt-4`,children:[(0,R.jsx)(`div`,{className:`flex flex-row justify-end items-center mb-2`,children:(0,R.jsx)(_,{placeholder:`Search`,value:r,onChange:e=>i(e.target.value)})}),(0,R.jsx)(I,{table:s})]})},Y=({artifact:e})=>{let t=(0,L.useMemo)(()=>e.created?h(e.created,`dateTime`):null,[e.created]);return(0,R.jsxs)(`div`,{className:`mt-4`,children:[(0,R.jsx)(`p`,{className:`text-base font-semibold`,children:`Artifact`}),(0,R.jsxs)(`div`,{className:`mt-3 flex flex-col gap-3`,children:[(0,R.jsx)(N,{label:`Key`,value:(0,R.jsx)(`span`,{className:`font-mono`,children:e.key??`None`})}),(0,R.jsx)(N,{label:`Type`,value:(0,R.jsx)(`span`,{className:`font-mono`,children:e.type??`None`})}),(0,R.jsx)(N,{label:`Created`,value:(0,R.jsx)(`span`,{children:t??`None`})})]})]})},X=e(S(),1),Z=({flowRun:e})=>{let t=(0,L.useMemo)(()=>e.start_time?h(e.start_time,`dateTime`):null,[e.start_time]),n=(0,L.useMemo)(()=>e.estimated_run_time?(0,X.default)(Math.ceil(e.estimated_run_time)*1e3):null,[e.estimated_run_time]),r=(0,L.useMemo)(()=>e.created?h(e.created,`dateTime`):null,[e.created]),i=(0,L.useMemo)(()=>e.updated?h(e.updated,`dateTime`):null,[e.updated]);return(0,R.jsxs)(`div`,{className:`mt-4`,children:[(0,R.jsx)(`p`,{className:`text-lg font-bold`,children:`Flow Run`}),(0,R.jsxs)(`div`,{className:`mt-3 flex flex-col gap-3`,children:[(0,R.jsx)(N,{label:`Start time`,value:(0,R.jsxs)(`span`,{className:`font-mono flex items-center`,children:[(0,R.jsx)(f,{id:`Calendar`,className:`inline w-4 mr-2`}),t??`None`]})}),(0,R.jsx)(N,{label:`Duration`,value:(0,R.jsxs)(`span`,{className:`font-mono flex items-center`,children:[(0,R.jsx)(f,{id:`Clock`,className:`inline w-4 mr-2`}),n??`None`]})}),(0,R.jsx)(N,{label:`Created`,value:(0,R.jsx)(`span`,{className:`font-mono`,children:r??`None`})}),(0,R.jsx)(N,{label:`Last Updated`,value:(0,R.jsx)(`span`,{className:`font-mono`,children:i??`None`})}),(0,R.jsx)(N,{label:`Tags`,value:e.tags&&e.tags.length>0?(0,R.jsx)(`div`,{className:`flex flex-wrap`,children:e.tags.map(e=>(0,R.jsx)(v,{tag:e},e))}):(0,R.jsx)(`span`,{className:`font-mono`,children:`None`})}),(0,R.jsx)(N,{label:`State Message`,value:(0,R.jsx)(`span`,{className:`font-mono`,children:e.state?.message??`None`})})]})]})},Q=({artifact:e})=>{let{flow_run:t,task_run:n}=e;return e.key||t||n?(0,R.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[e.key&&(0,R.jsx)(N,{label:`Artifact`,value:(0,R.jsx)(a,{to:`/artifacts/key/$key`,params:{key:e.key},className:`text-link hover:text-link-hover hover:underline`,children:e.key})}),t&&(0,R.jsx)(N,{label:`Flow Run`,value:(0,R.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,R.jsx)(N,{label:`Task Run`,value:(0,R.jsx)(a,{to:`/runs/task-run/$id`,params:{id:n.id},className:`text-link hover:text-link-hover hover:underline`,children:n.name})}),(0,R.jsx)(`hr`,{className:`mt-2 border-border`})]}):null},$=({taskRun:e})=>{let t=(0,L.useMemo)(()=>e.created?h(e.created,`dateTime`):null,[e.created]),n=(0,L.useMemo)(()=>e.updated?h(e.updated,`dateTime`):null,[e.updated]);return(0,R.jsxs)(`div`,{className:`mt-4`,children:[(0,R.jsx)(`p`,{className:`text-lg font-bold`,children:`Task Run`}),(0,R.jsxs)(`div`,{className:`mt-3 flex flex-col gap-3`,children:[(0,R.jsx)(N,{label:`Created`,value:(0,R.jsx)(`span`,{className:`font-mono`,children:t??`None`})}),(0,R.jsx)(N,{label:`Last Updated`,value:(0,R.jsx)(`span`,{className:`font-mono`,children:n??`None`})}),(0,R.jsx)(N,{label:`Tags`,value:e.tags&&e.tags.length>0?(0,R.jsx)(`div`,{className:`flex flex-wrap`,children:e.tags.map(e=>(0,R.jsx)(v,{tag:e},e))}):(0,R.jsx)(`span`,{className:`font-mono`,children:`None`})})]})]})},te=({artifact:e})=>{let{flow_run:t,task_run:n}=e;return(0,R.jsxs)(`div`,{className:`flex flex-col gap-4 pt-4`,children:[(0,R.jsx)(Q,{artifact:e}),(0,R.jsx)(Y,{artifact:e}),(t||n)&&(0,R.jsx)(`hr`,{className:`mt-4 border-border`}),t&&(0,R.jsx)(Z,{flowRun:t}),t&&n&&(0,R.jsx)(`hr`,{className:`mt-4 border-border`}),n&&(0,R.jsx)($,{taskRun:n})]})},ne=({artifact:e})=>{let t=(0,L.useMemo)(()=>{switch(e.type){case`markdown`:case`link`:return(0,R.jsx)(G,{markdown:e.data});case`image`:return(0,R.jsx)(W,{url:e.data});case`progress`:return(0,R.jsx)(K,{progress:e.data});case`table`:return(0,R.jsx)(J,{tableData:e.data});default:return(0,R.jsx)(`pre`,{children:JSON.stringify(e.data,null,2)})}},[e]),n=(0,R.jsx)(te,{artifact:e});return(0,R.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,R.jsx)(z,{artifact:e}),(0,R.jsxs)(`div`,{className:`flex flex-col lg:flex-row lg:gap-6`,children:[(0,R.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,R.jsx)(V,{artifact:e,artifactContent:t,detailsContent:n})}),(0,R.jsx)(w,{children:n})]})]})},re=function(){let{id:e}=A.useParams(),{data:t}=l(x(e));return(0,R.jsx)(ne,{artifact:P(e)??t})};export{re as component};
2
- //# sourceMappingURL=artifact._id-D23OOK0A.js.map
1
+ import{r as e}from"./rolldown-runtime-S-ySWqyJ.js";import{a as t,o as n,r,s as i}from"./vendor-codemirror-bBfSEHi1.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-QgMid0cA.js";import{g as f,h as p,t as m,u as h}from"./button-D8P8WefN.js";import{n as g}from"./dist-B1M6i_WJ.js";import{n as _}from"./input-D-Xs4C8i.js";import{t as v}from"./tag-badge-DcOR5Kjz.js";import{Dr as y,Er as b,K as x,Mr as S,Or as C,Rn as w,ar as T,cr as E,jr as D,kr as O,lr as k,m as A,sr as j,ur as M}from"./index-Dycuvz2J.js";import{t as N}from"./key-value-D9773LpZ.js";import{n as P}from"./use-get-artifacts-flow-task-runs-Bexw8m2K.js";import{t as F}from"./lazy-markdown-Ai8LTUwb.js";import{t as I}from"./data-table-ylRuiwEf.js";var L=e(i(),1),R=n(),z=({artifact:e})=>(0,R.jsxs)(R.Fragment,{children:[(0,R.jsxs)(`div`,{className:`flex items-center justify-between`,children:[e.key?(0,R.jsx)(`div`,{className:`flex items-center gap-2 min-w-0`,children:(0,R.jsx)(b,{className:`min-w-0`,children:(0,R.jsxs)(O,{className:`flex-nowrap`,children:[(0,R.jsx)(y,{className:`min-w-0`,children:(0,R.jsx)(C,{to:`/artifacts/key/$key`,params:{key:e.key},className:`text-xl font-semibold truncate block`,title:e.key,children:e.key})}),(0,R.jsx)(D,{}),(0,R.jsx)(y,{className:`text-xl font-semibold min-w-0`,children:(0,R.jsx)(`span`,{className:`font-mono truncate block`,title:e.id,children:e.id})})]})})}):(0,R.jsx)(`div`,{className:`flex items-center gap-2 min-w-0`,children:(0,R.jsx)(b,{className:`min-w-0`,children:(0,R.jsxs)(O,{className:`flex-nowrap`,children:[e.flow_run&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(y,{className:`min-w-0`,children:(0,R.jsx)(C,{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,R.jsx)(D,{})]}),e.task_run&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(y,{className:`min-w-0`,children:(0,R.jsx)(C,{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,R.jsx)(D,{})]}),(0,R.jsx)(y,{className:`text-xl font-semibold min-w-0`,children:(0,R.jsx)(`span`,{className:`font-mono truncate block`,title:e.id,children:e.id})})]})})}),(0,R.jsx)(T,{id:`artifacts-guide`,label:`Documentation`})]}),e.description&&(0,R.jsx)(`div`,{className:`text-sm text-muted-foreground my-2`,children:(0,R.jsx)(F,{children:e.description})}),(0,R.jsx)(`hr`,{})]}),B=({artifact:e})=>{let[n,i]=(0,L.useState)(!1),a=()=>{i(e=>!e)},o=(0,L.useRef)(null),{setContainer:s}=r({container:o.current,extensions:[t.lineWrapping],value:String(e.data),indentWithTab:!1,editable:!0,basicSetup:{highlightActiveLine:!1,foldGutter:!1,highlightActiveLineGutter:!1}});(0,L.useEffect)(()=>{o.current&&s(o.current)},[s]);let c=e=>{g.success(`Copied to clipboard`),navigator.clipboard.writeText(e)};return(0,R.jsxs)(`div`,{className:`flex flex-col justify-center items-center`,children:[(0,R.jsxs)(m,{"data-testid":`show-raw-data-button`,variant:`outline`,onClick:a,className:`my-4`,children:[n?`Hide`:`Show`,` Raw Data`]}),(0,R.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,R.jsx)(m,{onClick:()=>c(e.data),variant:`ghost`,size:`icon`,className:`absolute top-0 right-0 z-10`,"aria-label":`copy`,children:(0,R.jsx)(f,{id:`Copy`,className:`size-2`})})})]})},ee=s(`/artifacts/artifact/$id`),V=({artifact:e,artifactContent:t,detailsContent:n})=>{let{tab:r}=ee.useSearch(),i=H(e,t,n);return(0,R.jsxs)(j,{defaultValue:`Artifact`,value:r,children:[(0,R.jsx)(k,{children:i.map(({value:e,hiddenOnDesktop:t,LinkComponent:n})=>(0,R.jsx)(n,{className:p(t&&`lg:hidden`)},e))}),i.map(({value:e,ViewComponent:t})=>(0,R.jsx)(t,{},e))]})};function H(e,t,n){return(0,L.useMemo)(()=>{let r=[];return r.push({value:`Artifact`,LinkComponent:({className:e})=>(0,R.jsx)(a,{to:`.`,search:{tab:`Artifact`},children:(0,R.jsx)(M,{value:`Artifact`,className:e,children:`Artifact`})}),ViewComponent:()=>(0,R.jsxs)(E,{value:`Artifact`,children:[t,(0,R.jsx)(B,{artifact:e})]})}),r.push({value:`Details`,hiddenOnDesktop:!0,LinkComponent:({className:e})=>(0,R.jsx)(a,{to:`.`,search:{tab:`Details`},children:(0,R.jsx)(M,{value:`Details`,className:e,children:`Details`})}),ViewComponent:()=>(0,R.jsx)(E,{value:`Details`,children:n})}),r.push({value:`Raw`,LinkComponent:({className:e})=>(0,R.jsx)(a,{to:`.`,search:{tab:`Raw`},children:(0,R.jsx)(M,{value:`Raw`,className:e,children:`Raw`})}),ViewComponent:()=>(0,R.jsx)(E,{value:`Raw`,children:(0,R.jsx)(U,{artifact:e})})}),r},[e,t,n])}function U({artifact:e}){return(0,R.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 W=({url:e})=>(0,R.jsxs)(`div`,{"data-testid":e,className:`prose mt-2`,children:[(0,R.jsx)(`img`,{"data-testid":`image-${e}`,src:e,alt:`artifact-image`,className:`w-full`}),(0,R.jsxs)(`p`,{className:`text-lg`,children:[`Image URL:`,` `,(0,R.jsx)(`a`,{className:`text-link hover:text-link-hover hover:underline`,target:`_blank`,href:e,rel:`noreferrer`,children:e})]})]}),G=({markdown:e})=>(0,R.jsx)(`div`,{"data-testid":`markdown-display`,className:`mt-4 prose`,children:(0,R.jsx)(F,{children:e})}),K=({progress:e})=>(0,R.jsxs)(`p`,{"data-testid":`progress-display`,className:`text-lg`,children:[`Progress: `,e,`%`]}),q=c(),J=({tableData:e})=>{let t=(0,L.useMemo)(()=>JSON.parse(e),[e]),n=(0,L.useMemo)(()=>Object.keys(t[0]??{}),[t]),[r,i]=(0,L.useState)(``),a=(0,L.useMemo)(()=>n.map(e=>q.display({id:e,header:()=>e,cell:({row:t})=>{let n=String(t.original[e]??``);return(0,R.jsx)(`span`,{className:`truncate block`,title:n,children:n})}})),[n]),s=d({data:(0,L.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,R.jsxs)(`div`,{"data-testid":`table-display`,className:`mt-4`,children:[(0,R.jsx)(`div`,{className:`flex flex-row justify-end items-center mb-2`,children:(0,R.jsx)(_,{placeholder:`Search`,value:r,onChange:e=>i(e.target.value)})}),(0,R.jsx)(I,{table:s})]})},Y=({artifact:e})=>{let t=(0,L.useMemo)(()=>e.created?h(e.created,`dateTime`):null,[e.created]);return(0,R.jsxs)(`div`,{className:`mt-4`,children:[(0,R.jsx)(`p`,{className:`text-base font-semibold`,children:`Artifact`}),(0,R.jsxs)(`div`,{className:`mt-3 flex flex-col gap-3`,children:[(0,R.jsx)(N,{label:`Key`,value:(0,R.jsx)(`span`,{className:`font-mono`,children:e.key??`None`})}),(0,R.jsx)(N,{label:`Type`,value:(0,R.jsx)(`span`,{className:`font-mono`,children:e.type??`None`})}),(0,R.jsx)(N,{label:`Created`,value:(0,R.jsx)(`span`,{children:t??`None`})})]})]})},X=e(S(),1),Z=({flowRun:e})=>{let t=(0,L.useMemo)(()=>e.start_time?h(e.start_time,`dateTime`):null,[e.start_time]),n=(0,L.useMemo)(()=>e.estimated_run_time?(0,X.default)(Math.ceil(e.estimated_run_time)*1e3):null,[e.estimated_run_time]),r=(0,L.useMemo)(()=>e.created?h(e.created,`dateTime`):null,[e.created]),i=(0,L.useMemo)(()=>e.updated?h(e.updated,`dateTime`):null,[e.updated]);return(0,R.jsxs)(`div`,{className:`mt-4`,children:[(0,R.jsx)(`p`,{className:`text-lg font-bold`,children:`Flow Run`}),(0,R.jsxs)(`div`,{className:`mt-3 flex flex-col gap-3`,children:[(0,R.jsx)(N,{label:`Start time`,value:(0,R.jsxs)(`span`,{className:`font-mono flex items-center`,children:[(0,R.jsx)(f,{id:`Calendar`,className:`inline w-4 mr-2`}),t??`None`]})}),(0,R.jsx)(N,{label:`Duration`,value:(0,R.jsxs)(`span`,{className:`font-mono flex items-center`,children:[(0,R.jsx)(f,{id:`Clock`,className:`inline w-4 mr-2`}),n??`None`]})}),(0,R.jsx)(N,{label:`Created`,value:(0,R.jsx)(`span`,{className:`font-mono`,children:r??`None`})}),(0,R.jsx)(N,{label:`Last Updated`,value:(0,R.jsx)(`span`,{className:`font-mono`,children:i??`None`})}),(0,R.jsx)(N,{label:`Tags`,value:e.tags&&e.tags.length>0?(0,R.jsx)(`div`,{className:`flex flex-wrap`,children:e.tags.map(e=>(0,R.jsx)(v,{tag:e},e))}):(0,R.jsx)(`span`,{className:`font-mono`,children:`None`})}),(0,R.jsx)(N,{label:`State Message`,value:(0,R.jsx)(`span`,{className:`font-mono`,children:e.state?.message??`None`})})]})]})},Q=({artifact:e})=>{let{flow_run:t,task_run:n}=e;return e.key||t||n?(0,R.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[e.key&&(0,R.jsx)(N,{label:`Artifact`,value:(0,R.jsx)(a,{to:`/artifacts/key/$key`,params:{key:e.key},className:`text-link hover:text-link-hover hover:underline`,children:e.key})}),t&&(0,R.jsx)(N,{label:`Flow Run`,value:(0,R.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,R.jsx)(N,{label:`Task Run`,value:(0,R.jsx)(a,{to:`/runs/task-run/$id`,params:{id:n.id},className:`text-link hover:text-link-hover hover:underline`,children:n.name})}),(0,R.jsx)(`hr`,{className:`mt-2 border-border`})]}):null},$=({taskRun:e})=>{let t=(0,L.useMemo)(()=>e.created?h(e.created,`dateTime`):null,[e.created]),n=(0,L.useMemo)(()=>e.updated?h(e.updated,`dateTime`):null,[e.updated]);return(0,R.jsxs)(`div`,{className:`mt-4`,children:[(0,R.jsx)(`p`,{className:`text-lg font-bold`,children:`Task Run`}),(0,R.jsxs)(`div`,{className:`mt-3 flex flex-col gap-3`,children:[(0,R.jsx)(N,{label:`Created`,value:(0,R.jsx)(`span`,{className:`font-mono`,children:t??`None`})}),(0,R.jsx)(N,{label:`Last Updated`,value:(0,R.jsx)(`span`,{className:`font-mono`,children:n??`None`})}),(0,R.jsx)(N,{label:`Tags`,value:e.tags&&e.tags.length>0?(0,R.jsx)(`div`,{className:`flex flex-wrap`,children:e.tags.map(e=>(0,R.jsx)(v,{tag:e},e))}):(0,R.jsx)(`span`,{className:`font-mono`,children:`None`})})]})]})},te=({artifact:e})=>{let{flow_run:t,task_run:n}=e;return(0,R.jsxs)(`div`,{className:`flex flex-col gap-4 pt-4`,children:[(0,R.jsx)(Q,{artifact:e}),(0,R.jsx)(Y,{artifact:e}),(t||n)&&(0,R.jsx)(`hr`,{className:`mt-4 border-border`}),t&&(0,R.jsx)(Z,{flowRun:t}),t&&n&&(0,R.jsx)(`hr`,{className:`mt-4 border-border`}),n&&(0,R.jsx)($,{taskRun:n})]})},ne=({artifact:e})=>{let t=(0,L.useMemo)(()=>{switch(e.type){case`markdown`:case`link`:return(0,R.jsx)(G,{markdown:e.data});case`image`:return(0,R.jsx)(W,{url:e.data});case`progress`:return(0,R.jsx)(K,{progress:e.data});case`table`:return(0,R.jsx)(J,{tableData:e.data});default:return(0,R.jsx)(`pre`,{children:JSON.stringify(e.data,null,2)})}},[e]),n=(0,R.jsx)(te,{artifact:e});return(0,R.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,R.jsx)(z,{artifact:e}),(0,R.jsxs)(`div`,{className:`flex flex-col lg:flex-row lg:gap-6`,children:[(0,R.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,R.jsx)(V,{artifact:e,artifactContent:t,detailsContent:n})}),(0,R.jsx)(w,{children:n})]})]})},re=function(){let{id:e}=A.useParams(),{data:t}=l(x(e));return(0,R.jsx)(ne,{artifact:P(e)??t})};export{re as component};
2
+ //# sourceMappingURL=artifact._id-Cy3gxEon.js.map