@mastra/playground-ui 65.0.0-alpha.9 → 65.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/dist/{ask-user-card-DnvW7jXS.js → ask-user-card-B9q_GFTt.js} +2 -2
  2. package/dist/{ask-user-card-DnvW7jXS.js.map → ask-user-card-B9q_GFTt.js.map} +1 -1
  3. package/dist/{ask-user-card-DiFQcUzM.cjs → ask-user-card-C-N5rpYG.cjs} +2 -2
  4. package/dist/{ask-user-card-DiFQcUzM.cjs.map → ask-user-card-C-N5rpYG.cjs.map} +1 -1
  5. package/dist/components/Button.cjs.js +1 -1
  6. package/dist/components/Button.es.js +1 -1
  7. package/dist/components/CommandPalette.cjs.js +1 -1
  8. package/dist/components/CommandPalette.es.js +1 -1
  9. package/dist/components/Comment.cjs.js +1 -1
  10. package/dist/components/Comment.es.js +1 -1
  11. package/dist/components/DataCodeSection.cjs.js +1 -1
  12. package/dist/components/DataCodeSection.es.js +1 -1
  13. package/dist/components/DataList.cjs.js +15 -17
  14. package/dist/components/DataList.cjs.js.map +1 -1
  15. package/dist/components/DataList.es.js +4 -5
  16. package/dist/components/DataList.es.js.map +1 -1
  17. package/dist/components/DataPanel.cjs.js +1 -1
  18. package/dist/components/DataPanel.es.js +1 -1
  19. package/dist/components/DateTimePicker.cjs.js +1 -1
  20. package/dist/components/DateTimePicker.es.js +1 -1
  21. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  22. package/dist/components/DateTimeRangePicker.es.js +1 -1
  23. package/dist/components/EnvironmentVariablesEditor.cjs.js +2 -2
  24. package/dist/components/EnvironmentVariablesEditor.es.js +2 -2
  25. package/dist/components/Field.cjs.js +1 -1
  26. package/dist/components/Field.es.js +1 -1
  27. package/dist/components/FilterBar.cjs.js +2 -2
  28. package/dist/components/FilterBar.es.js +2 -2
  29. package/dist/components/JSONSchemaForm.cjs.js +1 -1
  30. package/dist/components/JSONSchemaForm.es.js +1 -1
  31. package/dist/components/Kbd.cjs.js +1 -1
  32. package/dist/components/Kbd.es.js +1 -1
  33. package/dist/components/ListSearch.cjs.js +1 -1
  34. package/dist/components/ListSearch.es.js +1 -1
  35. package/dist/components/LogsDataList.cjs.js +5 -2
  36. package/dist/components/LogsDataList.cjs.js.map +1 -1
  37. package/dist/components/LogsDataList.es.js +5 -2
  38. package/dist/components/LogsDataList.es.js.map +1 -1
  39. package/dist/components/PropertyFilter.cjs.js +1 -1
  40. package/dist/components/PropertyFilter.es.js +1 -1
  41. package/dist/components/SavedViews.cjs.js +1 -1
  42. package/dist/components/SavedViews.es.js +1 -1
  43. package/dist/components/SearchInput.cjs.js +1 -1
  44. package/dist/components/SearchInput.es.js +1 -1
  45. package/dist/components/Section.cjs.js +1 -1
  46. package/dist/components/Section.es.js +1 -1
  47. package/dist/components/SideDialog.cjs.js +225 -2
  48. package/dist/components/SideDialog.cjs.js.map +1 -1
  49. package/dist/components/SideDialog.es.js +210 -1
  50. package/dist/components/SideDialog.es.js.map +1 -1
  51. package/dist/components/Sidebar.cjs.js +63 -59
  52. package/dist/components/Sidebar.cjs.js.map +1 -1
  53. package/dist/components/Sidebar.es.js +64 -61
  54. package/dist/components/Sidebar.es.js.map +1 -1
  55. package/dist/components/ai/activity.cjs.js +1 -1
  56. package/dist/components/ai/activity.es.js +1 -1
  57. package/dist/components/ai/ask-user.cjs.js +1 -1
  58. package/dist/components/ai/ask-user.es.js +1 -1
  59. package/dist/{data-code-section-BjyHoHEB.cjs → data-code-section-BsvdKW08.cjs} +2 -2
  60. package/dist/{data-code-section-BjyHoHEB.cjs.map → data-code-section-BsvdKW08.cjs.map} +1 -1
  61. package/dist/{data-code-section-BWzfg-1n.js → data-code-section-y1BMLr3c.js} +2 -2
  62. package/dist/{data-code-section-BWzfg-1n.js.map → data-code-section-y1BMLr3c.js.map} +1 -1
  63. package/dist/{data-list-top-DJh08vFA.cjs → data-list-4t6Ueon8.cjs} +365 -16
  64. package/dist/data-list-4t6Ueon8.cjs.map +1 -0
  65. package/dist/{data-list-top-Cu4C2Z07.js → data-list-BQMBFAyK.js} +357 -7
  66. package/dist/data-list-BQMBFAyK.js.map +1 -0
  67. package/dist/{data-list-skeleton-sdcaabdX.cjs → data-list-skeleton-CVXZYY0k.cjs} +6 -6
  68. package/dist/{data-list-skeleton-sdcaabdX.cjs.map → data-list-skeleton-CVXZYY0k.cjs.map} +1 -1
  69. package/dist/{data-list-skeleton-CiilOVAl.js → data-list-skeleton-D54r1ycU.js} +2 -2
  70. package/dist/{data-list-skeleton-CiilOVAl.js.map → data-list-skeleton-D54r1ycU.js.map} +1 -1
  71. package/dist/{data-panel-CUqcB4Vn.js → data-panel-DSgidnnv.js} +2 -2
  72. package/dist/{data-panel-CUqcB4Vn.js.map → data-panel-DSgidnnv.js.map} +1 -1
  73. package/dist/{data-panel-CGRPVnEe.cjs → data-panel-xqrai98b.cjs} +2 -2
  74. package/dist/{data-panel-CGRPVnEe.cjs.map → data-panel-xqrai98b.cjs.map} +1 -1
  75. package/dist/{date-time-range-picker-BB6ivHR-.js → date-time-range-picker-BnYWCqei.js} +2 -2
  76. package/dist/{date-time-range-picker-BB6ivHR-.js.map → date-time-range-picker-BnYWCqei.js.map} +1 -1
  77. package/dist/{date-time-range-picker-ExPgeHV_.cjs → date-time-range-picker-_2RJBOUn.cjs} +2 -2
  78. package/dist/{date-time-range-picker-ExPgeHV_.cjs.map → date-time-range-picker-_2RJBOUn.cjs.map} +1 -1
  79. package/dist/domains/capabilities.cjs.js +4 -0
  80. package/dist/domains/capabilities.cjs.js.map +1 -1
  81. package/dist/domains/capabilities.es.js +1 -1
  82. package/dist/domains/chat/messages/dataset-save-action.cjs.js +1 -1
  83. package/dist/domains/chat/messages/dataset-save-action.es.js +1 -1
  84. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +23 -3
  85. package/dist/domains/chat/messages/notification-signal-notice.cjs.js.map +1 -1
  86. package/dist/domains/chat/messages/notification-signal-notice.es.js +24 -6
  87. package/dist/domains/chat/messages/notification-signal-notice.es.js.map +1 -1
  88. package/dist/domains/chat/messages/signal-data.cjs.js +12 -0
  89. package/dist/domains/chat/messages/signal-data.cjs.js.map +1 -1
  90. package/dist/domains/chat/messages/signal-data.es.js +12 -1
  91. package/dist/domains/chat/messages/signal-data.es.js.map +1 -1
  92. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  93. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  94. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +3 -0
  95. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
  96. package/dist/domains/chat/tools/badges/workflow-badge.es.js +3 -0
  97. package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
  98. package/dist/domains/chat.cjs.js +1 -0
  99. package/dist/domains/chat.cjs.js.map +1 -1
  100. package/dist/domains/chat.es.js +1 -1
  101. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.cjs.js +24 -16
  102. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.cjs.js.map +1 -1
  103. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.es.js +24 -16
  104. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.es.js.map +1 -1
  105. package/dist/domains/datasets/components/add-dataset-item-dialog/build-add-item-payload.cjs.js +7 -8
  106. package/dist/domains/datasets/components/add-dataset-item-dialog/build-add-item-payload.cjs.js.map +1 -1
  107. package/dist/domains/datasets/components/add-dataset-item-dialog/build-add-item-payload.es.js +7 -8
  108. package/dist/domains/datasets/components/add-dataset-item-dialog/build-add-item-payload.es.js.map +1 -1
  109. package/dist/domains/datasets/components/add-dataset-item-dialog/collapsible-settings-row.cjs.js +1 -1
  110. package/dist/domains/datasets/components/add-dataset-item-dialog/collapsible-settings-row.es.js +1 -1
  111. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-field-errors.cjs.js +1 -1
  112. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-field-errors.es.js +1 -1
  113. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.cjs.js +1 -1
  114. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.es.js +1 -1
  115. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +2 -2
  116. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +2 -2
  117. package/dist/domains/logs/components/log-data-panel.cjs.js +1 -1
  118. package/dist/domains/logs/components/log-data-panel.es.js +1 -1
  119. package/dist/domains/logs/components/logs-list-view.cjs.js +3 -2
  120. package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
  121. package/dist/domains/logs/components/logs-list-view.es.js +3 -2
  122. package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
  123. package/dist/domains/memory/components/observation-detail-view.cjs.js +1 -1
  124. package/dist/domains/memory/components/observation-detail-view.es.js +1 -1
  125. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  126. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  127. package/dist/domains/observability/components/trace-as-item-dialog.cjs.js +14 -2
  128. package/dist/domains/observability/components/trace-as-item-dialog.cjs.js.map +1 -1
  129. package/dist/domains/observability/components/trace-as-item-dialog.es.js +14 -2
  130. package/dist/domains/observability/components/trace-as-item-dialog.es.js.map +1 -1
  131. package/dist/domains/scores/components/score-data-panel.cjs.js +1 -1
  132. package/dist/domains/scores/components/score-data-panel.es.js +1 -1
  133. package/dist/domains/scores/components/trace-scores-tab.cjs.js +2 -1
  134. package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
  135. package/dist/domains/scores/components/trace-scores-tab.es.js +2 -1
  136. package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
  137. package/dist/domains/traces/components/span-data-panel-view.cjs.js +1 -1
  138. package/dist/domains/traces/components/span-data-panel-view.es.js +1 -1
  139. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  140. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  141. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  142. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  143. package/dist/domains/traces/components/trace-columns-menu.cjs.js +1 -1
  144. package/dist/domains/traces/components/trace-columns-menu.es.js +1 -1
  145. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +3 -8
  146. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  147. package/dist/domains/traces/components/trace-data-panel-view.es.js +4 -9
  148. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  149. package/dist/domains/traces/components/trace-data-panel.cjs.js +2 -0
  150. package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
  151. package/dist/domains/traces/components/trace-data-panel.es.js +2 -0
  152. package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
  153. package/dist/domains/traces/components/trace-error-cell.cjs.js +3 -1
  154. package/dist/domains/traces/components/trace-error-cell.cjs.js.map +1 -1
  155. package/dist/domains/traces/components/trace-error-cell.es.js +3 -1
  156. package/dist/domains/traces/components/trace-error-cell.es.js.map +1 -1
  157. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  158. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  159. package/dist/domains/traces/components/trace-span-panel.cjs.js +0 -2
  160. package/dist/domains/traces/components/trace-span-panel.cjs.js.map +1 -1
  161. package/dist/domains/traces/components/trace-span-panel.es.js +0 -2
  162. package/dist/domains/traces/components/trace-span-panel.es.js.map +1 -1
  163. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  164. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  165. package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
  166. package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
  167. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +2 -2
  168. package/dist/domains/traces/components/trace-time-range-chip.es.js +2 -2
  169. package/dist/domains/traces/components/traces-explorer/traces-explorer-auto-refresh.cjs.js +1 -1
  170. package/dist/domains/traces/components/traces-explorer/traces-explorer-auto-refresh.es.js +1 -1
  171. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.cjs.js.map +1 -1
  172. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.es.js.map +1 -1
  173. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +2 -2
  174. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +2 -2
  175. package/dist/domains/traces/components/traces-explorer/traces-explorer-list-provider.cjs.js +2 -1
  176. package/dist/domains/traces/components/traces-explorer/traces-explorer-list-provider.cjs.js.map +1 -1
  177. package/dist/domains/traces/components/traces-explorer/traces-explorer-list-provider.es.js +2 -1
  178. package/dist/domains/traces/components/traces-explorer/traces-explorer-list-provider.es.js.map +1 -1
  179. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js +4 -15
  180. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js.map +1 -1
  181. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js +4 -15
  182. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js.map +1 -1
  183. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js +3 -0
  184. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js.map +1 -1
  185. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js +4 -1
  186. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js.map +1 -1
  187. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js +1 -1
  188. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +1 -1
  189. package/dist/domains/traces/components/traces-list-view.cjs.js +4 -5
  190. package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
  191. package/dist/domains/traces/components/traces-list-view.es.js +3 -4
  192. package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
  193. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +4 -1
  194. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  195. package/dist/domains/traces/components/traces-page-skeleton.es.js +4 -1
  196. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  197. package/dist/domains/traces/hooks/use-traces-list-source.cjs.js +36 -9
  198. package/dist/domains/traces/hooks/use-traces-list-source.cjs.js.map +1 -1
  199. package/dist/domains/traces/hooks/use-traces-list-source.es.js +37 -12
  200. package/dist/domains/traces/hooks/use-traces-list-source.es.js.map +1 -1
  201. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
  202. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
  203. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +1 -1
  204. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +1 -1
  205. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +1 -1
  206. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +1 -1
  207. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.cjs.js +1 -1
  208. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.es.js +1 -1
  209. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +1 -1
  210. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +1 -1
  211. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +2 -2
  212. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +2 -2
  213. package/dist/ee/signals/components/entity-index-list.cjs.js +3 -1
  214. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  215. package/dist/ee/signals/components/entity-index-list.es.js +3 -1
  216. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  217. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +4 -2
  218. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  219. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +4 -2
  220. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  221. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +1 -1
  222. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +1 -1
  223. package/dist/ee/signals/trace-intelligence-explainer.cjs.js +1 -0
  224. package/dist/ee/signals/trace-intelligence-explainer.cjs.js.map +1 -1
  225. package/dist/ee/signals/trace-intelligence-explainer.es.js +1 -0
  226. package/dist/ee/signals/trace-intelligence-explainer.es.js.map +1 -1
  227. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +2 -2
  228. package/dist/ee/topics/components/topic-trace-summary-list.es.js +2 -2
  229. package/dist/{field-BCU5ZtWV.cjs → field-CZ5fldpM.cjs} +2 -1
  230. package/dist/{field-BCU5ZtWV.cjs.map → field-CZ5fldpM.cjs.map} +1 -1
  231. package/dist/{field-Dl1zeXTv.js → field-CfA5-ixH.js} +2 -1
  232. package/dist/{field-Dl1zeXTv.js.map → field-CfA5-ixH.js.map} +1 -1
  233. package/dist/{filter-bar-C6NdZctn.cjs → filter-bar-CjBb01b6.cjs} +3 -3
  234. package/dist/{filter-bar-C6NdZctn.cjs.map → filter-bar-CjBb01b6.cjs.map} +1 -1
  235. package/dist/{filter-bar-chip-DgvuQv6c.cjs → filter-bar-chip-C_64m7nX.cjs} +2 -2
  236. package/dist/{filter-bar-chip-DgvuQv6c.cjs.map → filter-bar-chip-C_64m7nX.cjs.map} +1 -1
  237. package/dist/{filter-bar-chip-DM73lTpx.js → filter-bar-chip-D2kKMSRA.js} +2 -2
  238. package/dist/{filter-bar-chip-DM73lTpx.js.map → filter-bar-chip-D2kKMSRA.js.map} +1 -1
  239. package/dist/{filter-bar-DW0fD4bu.js → filter-bar-pXSJt2ye.js} +3 -3
  240. package/dist/{filter-bar-DW0fD4bu.js.map → filter-bar-pXSJt2ye.js.map} +1 -1
  241. package/dist/{kbd-Xgv5HKEi.cjs → kbd-B2zbS_A6.cjs} +2 -2
  242. package/dist/{kbd-Xgv5HKEi.cjs.map → kbd-B2zbS_A6.cjs.map} +1 -1
  243. package/dist/{kbd-7Xx2pm9f.js → kbd-CYtMrOov.js} +2 -2
  244. package/dist/{kbd-7Xx2pm9f.js.map → kbd-CYtMrOov.js.map} +1 -1
  245. package/dist/layout/tabbed-container.cjs.js +2 -2
  246. package/dist/layout/tabbed-container.es.js +2 -2
  247. package/dist/lib/form/components/boolean-field.cjs.js +1 -1
  248. package/dist/lib/form/components/boolean-field.es.js +1 -1
  249. package/dist/lib/form/components/field-wrapper.cjs.js +1 -1
  250. package/dist/lib/form/components/field-wrapper.es.js +1 -1
  251. package/dist/{list-search-ByJdIxIh.js → list-search-8jVOq9LK.js} +2 -2
  252. package/dist/{list-search-ByJdIxIh.js.map → list-search-8jVOq9LK.js.map} +1 -1
  253. package/dist/{list-search-DNJVeHmK.cjs → list-search-C7ckmZHa.cjs} +2 -2
  254. package/dist/{list-search-DNJVeHmK.cjs.map → list-search-C7ckmZHa.cjs.map} +1 -1
  255. package/dist/{logs-data-list-DCj8Pj77.cjs → logs-data-list-C4Z4rw62.cjs} +21 -22
  256. package/dist/{logs-data-list-DCj8Pj77.cjs.map → logs-data-list-C4Z4rw62.cjs.map} +1 -1
  257. package/dist/{logs-data-list-VEEruqHO.js → logs-data-list-CL3iq_6r.js} +2 -3
  258. package/dist/{logs-data-list-VEEruqHO.js.map → logs-data-list-CL3iq_6r.js.map} +1 -1
  259. package/dist/new/settings.cjs.js +1 -1
  260. package/dist/new/settings.es.js +1 -1
  261. package/dist/{notification-activity-BWXHmlTn.js → notification-activity-BRW1Xlj1.js} +9 -5
  262. package/dist/notification-activity-BRW1Xlj1.js.map +1 -0
  263. package/dist/{notification-activity-BSNuqJDd.cjs → notification-activity-DAZOALWI.cjs} +9 -5
  264. package/dist/notification-activity-DAZOALWI.cjs.map +1 -0
  265. package/dist/resize/collapsible-panel.cjs.js +1 -1
  266. package/dist/resize/collapsible-panel.es.js +1 -1
  267. package/dist/{search-input-CMNy0JWd.cjs → search-input-CGNENJDh.cjs} +2 -2
  268. package/dist/{search-input-CMNy0JWd.cjs.map → search-input-CGNENJDh.cjs.map} +1 -1
  269. package/dist/{search-input-C9qFBzn6.js → search-input-cIYk0pl3.js} +2 -2
  270. package/dist/{search-input-C9qFBzn6.js.map → search-input-cIYk0pl3.js.map} +1 -1
  271. package/dist/{section-skBYREaR.cjs → section-BikCyHdf.cjs} +2 -2
  272. package/dist/{section-skBYREaR.cjs.map → section-BikCyHdf.cjs.map} +1 -1
  273. package/dist/{section-eRs4NnCC.js → section-C71zDLKM.js} +2 -2
  274. package/dist/{section-eRs4NnCC.js.map → section-C71zDLKM.js.map} +1 -1
  275. package/dist/{settings-row-Ds-PVocx.cjs → settings-row-C9lT2BJS.cjs} +2 -2
  276. package/dist/{settings-row-Ds-PVocx.cjs.map → settings-row-C9lT2BJS.cjs.map} +1 -1
  277. package/dist/{settings-row-BHtjEfPr.js → settings-row-CRpU1an-.js} +2 -2
  278. package/dist/{settings-row-BHtjEfPr.js.map → settings-row-CRpU1an-.js.map} +1 -1
  279. package/dist/src/domains/capabilities/index.d.ts +1 -1
  280. package/dist/src/domains/chat/messages/notification-signal-notice.d.ts +2 -0
  281. package/dist/src/domains/chat/messages/signal-data.d.ts +9 -0
  282. package/dist/src/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.d.ts +2 -2
  283. package/dist/src/domains/datasets/components/add-dataset-item-dialog/build-add-item-payload.d.ts +2 -0
  284. package/dist/src/domains/traces/components/trace-data-panel-view.d.ts +1 -5
  285. package/dist/src/domains/traces/components/trace-span-panel.d.ts +1 -2
  286. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-context.d.ts +2 -0
  287. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-panel.d.ts +3 -1
  288. package/dist/src/domains/traces/hooks/use-traces-list-source.d.ts +7 -1
  289. package/dist/src/ds/components/DataList/data-list-root.d.ts +2 -0
  290. package/dist/src/ds/components/Sidebar/header/sidebar-badge.d.ts +7 -0
  291. package/dist/src/ds/components/Sidebar/header/sidebar-button-hint.d.ts +7 -0
  292. package/dist/src/ds/components/Sidebar/header/sidebar-search-trigger.d.ts +14 -3
  293. package/dist/src/ds/components/Sidebar/index.d.ts +1 -0
  294. package/dist/src/ds/components/Sidebar/root/sidebar-trigger.d.ts +2 -2
  295. package/dist/src/ds/components/Sidebar/sidebar.d.ts +5 -1
  296. package/dist/src/ds/components/ai/activity/presets/notification-activity.d.ts +5 -1
  297. package/dist/style.css +29 -13
  298. package/dist/{traces-data-list-CF_LFvnf.cjs → traces-data-list-BOHhsgDI.cjs} +18 -20
  299. package/dist/{traces-data-list-CF_LFvnf.cjs.map → traces-data-list-BOHhsgDI.cjs.map} +1 -1
  300. package/dist/{traces-data-list-DgmSuEKb.js → traces-data-list-CP6knkOn.js} +2 -4
  301. package/dist/{traces-data-list-DgmSuEKb.js.map → traces-data-list-CP6knkOn.js.map} +1 -1
  302. package/package.json +11 -11
  303. package/dist/data-list-CD_lls8O.js +0 -138
  304. package/dist/data-list-CD_lls8O.js.map +0 -1
  305. package/dist/data-list-CGD9hzcp.cjs +0 -142
  306. package/dist/data-list-CGD9hzcp.cjs.map +0 -1
  307. package/dist/data-list-spacer-DpXJrZe1.js +0 -209
  308. package/dist/data-list-spacer-DpXJrZe1.js.map +0 -1
  309. package/dist/data-list-spacer-Dpoj55mv.cjs +0 -218
  310. package/dist/data-list-spacer-Dpoj55mv.cjs.map +0 -1
  311. package/dist/data-list-top-Cu4C2Z07.js.map +0 -1
  312. package/dist/data-list-top-DJh08vFA.cjs.map +0 -1
  313. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js +0 -205
  314. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js.map +0 -1
  315. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.d.ts +0 -2
  316. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js +0 -201
  317. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js.map +0 -1
  318. package/dist/notification-activity-BSNuqJDd.cjs.map +0 -1
  319. package/dist/notification-activity-BWXHmlTn.js.map +0 -1
  320. package/dist/side-dialog-B7a4dasE.cjs +0 -231
  321. package/dist/side-dialog-B7a4dasE.cjs.map +0 -1
  322. package/dist/side-dialog-DVea8YTO.js +0 -211
  323. package/dist/side-dialog-DVea8YTO.js.map +0 -1
  324. package/dist/src/domains/observability/components/add-trace-mocks-to-item-dialog.d.ts +0 -9
@@ -11,7 +11,6 @@ const domains_traces_components_spanFeedbackTab = require('../span-feedback-tab.
11
11
  const domains_traces_components_traceFeedbackTab = require('../trace-feedback-tab.cjs.js');
12
12
  const domains_traces_components_traceSpanPanel = require('../trace-span-panel.cjs.js');
13
13
  const domains_traces_components_tracesExplorer_tracesExplorerContext = require('./traces-explorer-context.cjs.js');
14
- const domains_observability_components_addTraceMocksToItemDialog = require('../../../observability/components/add-trace-mocks-to-item-dialog.cjs.js');
15
14
  const domains_observability_components_traceAsItemDialog = require('../../../observability/components/trace-as-item-dialog.cjs.js');
16
15
  require('lucide-react');
17
16
  require('@base-ui/react/combobox');
@@ -31,7 +30,8 @@ function TracesExplorerPanel({
31
30
  onOpenScore,
32
31
  renderCreateDatasetDialog,
33
32
  headerActionsSlot,
34
- traceHref
33
+ traceHref,
34
+ withAddTraceToDataset = true
35
35
  }) {
36
36
  const { withQueryTrace, withFeedback } = domains_traces_components_tracesExplorer_tracesExplorerContext.useTracesConfig();
37
37
  const { rows, autoRefetch, isLoading: isListLoading } = domains_traces_components_tracesExplorer_tracesExplorerContext.useTracesList();
@@ -40,7 +40,6 @@ function TracesExplorerPanel({
40
40
  const traceId = selection.traceId;
41
41
  const spanId = selection.spanId;
42
42
  const [datasetDialogTarget, setDatasetDialogTarget] = React.useState(null);
43
- const [addMocksTarget, setAddMocksTarget] = React.useState(null);
44
43
  const [fullThreadTraceId, setFullThreadTraceId] = React.useState(null);
45
44
  const { data: traceFeedbackData } = traces.useTraceFeedback({
46
45
  traceId,
@@ -72,7 +71,6 @@ function TracesExplorerPanel({
72
71
  });
73
72
  const usage = traceId ? usageByTraceId?.get(traceId) : void 0;
74
73
  const { handlePreviousTrace, handleNextTrace } = domains_traces_hooks_useTraceListNavigation.useTraceListNavigation(rows, traceId, null, selectTrace);
75
- const isAgentTrace = anchorSpan?.entityType === "agent";
76
74
  const isFullThreadOpen = !!traceId && fullThreadTraceId === traceId;
77
75
  const depth = isFullThreadOpen ? 3 : 2;
78
76
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -97,8 +95,7 @@ function TracesExplorerPanel({
97
95
  onOpenScore,
98
96
  onFullThreadOpenChange: (open) => setFullThreadTraceId(open ? traceId ?? null : null),
99
97
  onSpanSelect: (id) => selectSpan(id ?? null),
100
- onSaveAsDatasetItem: setDatasetDialogTarget,
101
- onAddTraceMocksToItem: isAgentTrace ? setAddMocksTarget : void 0,
98
+ onSaveAsDatasetItem: withAddTraceToDataset ? setDatasetDialogTarget : void 0,
102
99
  initialSpanId: spanId,
103
100
  onPrevious: handlePreviousTrace,
104
101
  onNext: handleNextTrace,
@@ -120,7 +117,7 @@ function TracesExplorerPanel({
120
117
  }
121
118
  ),
122
119
  /* @__PURE__ */ jsxRuntime.jsx(domains_scores_components_scoreDataPanel.ScoreDataPanel, { depth, score: featuredScore, onClose: () => selectScore(null) }),
123
- /* @__PURE__ */ jsxRuntime.jsx(
120
+ withAddTraceToDataset && /* @__PURE__ */ jsxRuntime.jsx(
124
121
  domains_observability_components_traceAsItemDialog.TraceAsItemDialog,
125
122
  {
126
123
  rootSpanId: datasetDialogTarget?.rootSpanId,
@@ -129,14 +126,6 @@ function TracesExplorerPanel({
129
126
  onClose: () => setDatasetDialogTarget(null),
130
127
  renderCreateDatasetDialog
131
128
  }
132
- ),
133
- /* @__PURE__ */ jsxRuntime.jsx(
134
- domains_observability_components_addTraceMocksToItemDialog.AddTraceMocksToItemDialog,
135
- {
136
- traceId: addMocksTarget?.traceId,
137
- isOpen: !!addMocksTarget,
138
- onClose: () => setAddMocksTarget(null)
139
- }
140
129
  )
141
130
  ] });
142
131
  }
@@ -1 +1 @@
1
- {"version":3,"file":"traces-explorer-panel.cjs.js","sources":["../../../../../src/domains/traces/components/traces-explorer/traces-explorer-panel.tsx"],"sourcesContent":["import { useTraceSpanScores } from '@mastra/react/hooks/scores';\nimport { useSpanFeedback, useTraceFeedback, useTraceOrBranchSpans, useTraceUsage } from '@mastra/react/hooks/traces';\nimport { useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useTraceListNavigation } from '../../hooks/use-trace-list-navigation';\nimport type { SpanTab } from '../../types';\nimport { SpanFeedbackTab } from '../span-feedback-tab';\nimport { TraceFeedbackTab } from '../trace-feedback-tab';\nimport { TraceSpanPanel } from '../trace-span-panel';\nimport type { TraceSpanPanelProps } from '../trace-span-panel';\nimport { useTraceUsageColumns, useTracesConfig, useTracesList, useTracesSelection } from './traces-explorer-context';\nimport { AddTraceMocksToItemDialog } from '@/domains/observability/components/add-trace-mocks-to-item-dialog';\nimport { TraceAsItemDialog } from '@/domains/observability/components/trace-as-item-dialog';\nimport { ScoreDataPanel, TraceScoresTab } from '@/domains/scores';\n\nexport type TracesExplorerPanelProps = {\n /** Opens a score of one of the full thread's traces (the host owns routing). */\n onOpenScore: (traceId: string, scoreId: string) => void;\n renderCreateDatasetDialog?: ComponentProps<typeof TraceAsItemDialog>['renderCreateDatasetDialog'];\n /** Host integration actions rendered alongside the trace controls. */\n headerActionsSlot?: (args: { traceId: string; spans: TraceSpanPanelProps['spans'] }) => ReactNode;\n /** Builds the href of the dedicated trace page; without it the drawer offers no \"Open trace page\" link. */\n traceHref?: (traceId: string) => string;\n};\n\ntype DatasetDialogTarget = { traceId: string; rootSpanId: string | undefined };\n\nexport function TracesExplorerPanel({\n onOpenScore,\n renderCreateDatasetDialog,\n headerActionsSlot,\n traceHref,\n}: TracesExplorerPanelProps) {\n const { withQueryTrace, withFeedback } = useTracesConfig();\n const { rows, autoRefetch, isLoading: isListLoading } = useTracesList();\n const { selection, selectTrace, closeTrace, selectSpan, setSpanTab, setSpanView, selectScore, highlightSpans } =\n useTracesSelection();\n const { usageEnabled } = useTraceUsageColumns();\n const traceId = selection.traceId;\n const spanId = selection.spanId;\n\n const [datasetDialogTarget, setDatasetDialogTarget] = useState<DatasetDialogTarget | null>(null);\n const [addMocksTarget, setAddMocksTarget] = useState<{ traceId: string } | null>(null);\n // Keyed by trace id so selecting another trace (row click, prev/next) falls back to the trace panel.\n const [fullThreadTraceId, setFullThreadTraceId] = useState<string | null>(null);\n\n // Tab badge counts; the tab bodies re-use these first-page queries through React Query's cache.\n const { data: traceFeedbackData } = useTraceFeedback({\n traceId,\n queryOptions: { enabled: withFeedback && !!traceId },\n });\n const { data: spanFeedbackData } = useSpanFeedback({\n traceId,\n spanId,\n queryOptions: { enabled: withFeedback && !!traceId && !!spanId },\n });\n\n const {\n spans,\n anchorSpanId,\n isLoading: isLoadingSpans,\n } = useTraceOrBranchSpans({ traceId: traceId ?? null, listMode: 'traces', anchorSpanId: null });\n const anchorSpan = anchorSpanId\n ? spans?.find(s => s.spanId === anchorSpanId)\n : spans?.find(s => s.parentSpanId == null);\n\n const { data: spanScoresData } = useTraceSpanScores({\n traceId,\n spanId: anchorSpan?.spanId,\n queryOptions: { enabled: !!traceId && !!anchorSpan?.spanId },\n });\n const featuredScore = selection.scoreId\n ? spanScoresData?.scores?.find(score => score.id === selection.scoreId)\n : undefined;\n\n // Same key as the list's usage query when the trace is listed, so React Query serves it from cache.\n // Waits for the list so a deep-linked trace doesn't fetch its own usage before the rows arrive.\n const rowIds = rows.map(row => row.traceId);\n const isListed = !!traceId && rowIds.includes(traceId);\n const { data: usageByTraceId } = useTraceUsage({\n traceIds: isListed ? rowIds : traceId ? [traceId] : [],\n enabled: usageEnabled && !isListLoading,\n autoRefetch,\n });\n const usage = traceId ? usageByTraceId?.get(traceId) : undefined;\n\n const { handlePreviousTrace, handleNextTrace } = useTraceListNavigation(rows, traceId, null, selectTrace);\n\n // Tool mocks only make sense for agent runs.\n const isAgentTrace = anchorSpan?.entityType === 'agent';\n const isFullThreadOpen = !!traceId && fullThreadTraceId === traceId;\n const depth = isFullThreadOpen ? 3 : 2;\n\n return (\n <>\n <TraceSpanPanel\n title=\"Trace details\"\n size={spanId ? 'full' : 'wide'}\n traceId={traceId}\n spans={spans}\n anchorSpanId={anchorSpanId}\n usage={usage}\n isLoadingSpans={isLoadingSpans}\n selectedSpanId={spanId ?? null}\n onClose={() => {\n setFullThreadTraceId(null);\n closeTrace();\n }}\n isFullThreadOpen={isFullThreadOpen}\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n onOpenScore={onOpenScore}\n onFullThreadOpenChange={open => setFullThreadTraceId(open ? (traceId ?? null) : null)}\n onSpanSelect={id => selectSpan(id ?? null)}\n onSaveAsDatasetItem={setDatasetDialogTarget}\n onAddTraceMocksToItem={isAgentTrace ? setAddMocksTarget : undefined}\n initialSpanId={spanId}\n onPrevious={handlePreviousTrace}\n onNext={handleNextTrace}\n showPartialThread\n featuredSpanIds={selection.highlightSpanIds}\n onHighlightSpans={highlightSpans}\n feedbackTabBadge={withFeedback ? (traceFeedbackData?.pagination?.total ?? undefined) : undefined}\n feedbackTabSlot={withFeedback ? ({ traceId: tid }) => <TraceFeedbackTab traceId={tid} /> : undefined}\n scoresTabBadge={spanScoresData?.pagination?.total ?? undefined}\n scoresTabSlot={({ traceId: tid, rootSpanId }) =>\n rootSpanId ? <TraceScoresTab traceId={tid} spanId={rootSpanId} onScoreSelect={selectScore} /> : null\n }\n spanView={selection.spanView}\n onSpanViewChange={setSpanView}\n spanActiveTab={selection.spanTab ?? 'details'}\n onSpanTabChange={tab => setSpanTab(tab as SpanTab)}\n spanFeedbackTabBadge={withFeedback ? (spanFeedbackData?.pagination?.total ?? undefined) : undefined}\n spanFeedbackTabSlot={\n withFeedback\n ? ({ traceId: tid, spanId: sid }) =>\n tid && sid ? <SpanFeedbackTab key={`${tid}:${sid}`} traceId={tid} spanId={sid} /> : null\n : undefined\n }\n headerActionsSlot={traceId && headerActionsSlot ? headerActionsSlot({ traceId, spans }) : undefined}\n traceHref={traceId && traceHref ? traceHref(traceId) : undefined}\n />\n <ScoreDataPanel depth={depth} score={featuredScore} onClose={() => selectScore(null)} />\n <TraceAsItemDialog\n rootSpanId={datasetDialogTarget?.rootSpanId}\n traceId={datasetDialogTarget?.traceId}\n isOpen={!!datasetDialogTarget}\n onClose={() => setDatasetDialogTarget(null)}\n renderCreateDatasetDialog={renderCreateDatasetDialog}\n />\n <AddTraceMocksToItemDialog\n traceId={addMocksTarget?.traceId}\n isOpen={!!addMocksTarget}\n onClose={() => setAddMocksTarget(null)}\n />\n </>\n );\n}\n"],"names":["useTracesConfig","useTracesList","useTracesSelection","useTraceUsageColumns","useState","useTraceFeedback","useSpanFeedback","useTraceOrBranchSpans","useTraceSpanScores","useTraceUsage","useTraceListNavigation","jsxs","Fragment","jsx","TraceSpanPanel","TraceFeedbackTab","TraceScoresTab","SpanFeedbackTab","ScoreDataPanel","TraceAsItemDialog","AddTraceMocksToItemDialog"],"mappings":"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"}
1
+ {"version":3,"file":"traces-explorer-panel.cjs.js","sources":["../../../../../src/domains/traces/components/traces-explorer/traces-explorer-panel.tsx"],"sourcesContent":["import { useTraceSpanScores } from '@mastra/react/hooks/scores';\nimport { useSpanFeedback, useTraceFeedback, useTraceOrBranchSpans, useTraceUsage } from '@mastra/react/hooks/traces';\nimport { useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useTraceListNavigation } from '../../hooks/use-trace-list-navigation';\nimport type { SpanTab } from '../../types';\nimport { SpanFeedbackTab } from '../span-feedback-tab';\nimport { TraceFeedbackTab } from '../trace-feedback-tab';\nimport { TraceSpanPanel } from '../trace-span-panel';\nimport type { TraceSpanPanelProps } from '../trace-span-panel';\nimport { useTraceUsageColumns, useTracesConfig, useTracesList, useTracesSelection } from './traces-explorer-context';\nimport { TraceAsItemDialog } from '@/domains/observability/components/trace-as-item-dialog';\nimport { ScoreDataPanel, TraceScoresTab } from '@/domains/scores';\n\nexport type TracesExplorerPanelProps = {\n /** Opens a score of one of the full thread's traces (the host owns routing). */\n onOpenScore: (traceId: string, scoreId: string) => void;\n renderCreateDatasetDialog?: ComponentProps<typeof TraceAsItemDialog>['renderCreateDatasetDialog'];\n /** Host integration actions rendered alongside the trace controls. */\n headerActionsSlot?: (args: { traceId: string; spans: TraceSpanPanelProps['spans'] }) => ReactNode;\n /** Builds the href of the dedicated trace page; without it the drawer offers no \"Open trace page\" link. */\n traceHref?: (traceId: string) => string;\n /** Shows \"Add full trace to dataset\" in the trace actions menu. Defaults to `true`. */\n withAddTraceToDataset?: boolean;\n};\n\ntype DatasetDialogTarget = { traceId: string; rootSpanId: string | undefined };\n\nexport function TracesExplorerPanel({\n onOpenScore,\n renderCreateDatasetDialog,\n headerActionsSlot,\n traceHref,\n withAddTraceToDataset = true,\n}: TracesExplorerPanelProps) {\n const { withQueryTrace, withFeedback } = useTracesConfig();\n const { rows, autoRefetch, isLoading: isListLoading } = useTracesList();\n const { selection, selectTrace, closeTrace, selectSpan, setSpanTab, setSpanView, selectScore, highlightSpans } =\n useTracesSelection();\n const { usageEnabled } = useTraceUsageColumns();\n const traceId = selection.traceId;\n const spanId = selection.spanId;\n\n const [datasetDialogTarget, setDatasetDialogTarget] = useState<DatasetDialogTarget | null>(null);\n // Keyed by trace id so selecting another trace (row click, prev/next) falls back to the trace panel.\n const [fullThreadTraceId, setFullThreadTraceId] = useState<string | null>(null);\n\n // Tab badge counts; the tab bodies re-use these first-page queries through React Query's cache.\n const { data: traceFeedbackData } = useTraceFeedback({\n traceId,\n queryOptions: { enabled: withFeedback && !!traceId },\n });\n const { data: spanFeedbackData } = useSpanFeedback({\n traceId,\n spanId,\n queryOptions: { enabled: withFeedback && !!traceId && !!spanId },\n });\n\n const {\n spans,\n anchorSpanId,\n isLoading: isLoadingSpans,\n } = useTraceOrBranchSpans({ traceId: traceId ?? null, listMode: 'traces', anchorSpanId: null });\n const anchorSpan = anchorSpanId\n ? spans?.find(s => s.spanId === anchorSpanId)\n : spans?.find(s => s.parentSpanId == null);\n\n const { data: spanScoresData } = useTraceSpanScores({\n traceId,\n spanId: anchorSpan?.spanId,\n queryOptions: { enabled: !!traceId && !!anchorSpan?.spanId },\n });\n const featuredScore = selection.scoreId\n ? spanScoresData?.scores?.find(score => score.id === selection.scoreId)\n : undefined;\n\n // Same key as the list's usage query when the trace is listed, so React Query serves it from cache.\n // Waits for the list so a deep-linked trace doesn't fetch its own usage before the rows arrive.\n const rowIds = rows.map(row => row.traceId);\n const isListed = !!traceId && rowIds.includes(traceId);\n const { data: usageByTraceId } = useTraceUsage({\n traceIds: isListed ? rowIds : traceId ? [traceId] : [],\n enabled: usageEnabled && !isListLoading,\n autoRefetch,\n });\n const usage = traceId ? usageByTraceId?.get(traceId) : undefined;\n\n const { handlePreviousTrace, handleNextTrace } = useTraceListNavigation(rows, traceId, null, selectTrace);\n\n const isFullThreadOpen = !!traceId && fullThreadTraceId === traceId;\n const depth = isFullThreadOpen ? 3 : 2;\n\n return (\n <>\n <TraceSpanPanel\n title=\"Trace details\"\n size={spanId ? 'full' : 'wide'}\n traceId={traceId}\n spans={spans}\n anchorSpanId={anchorSpanId}\n usage={usage}\n isLoadingSpans={isLoadingSpans}\n selectedSpanId={spanId ?? null}\n onClose={() => {\n setFullThreadTraceId(null);\n closeTrace();\n }}\n isFullThreadOpen={isFullThreadOpen}\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n onOpenScore={onOpenScore}\n onFullThreadOpenChange={open => setFullThreadTraceId(open ? (traceId ?? null) : null)}\n onSpanSelect={id => selectSpan(id ?? null)}\n onSaveAsDatasetItem={withAddTraceToDataset ? setDatasetDialogTarget : undefined}\n initialSpanId={spanId}\n onPrevious={handlePreviousTrace}\n onNext={handleNextTrace}\n showPartialThread\n featuredSpanIds={selection.highlightSpanIds}\n onHighlightSpans={highlightSpans}\n feedbackTabBadge={withFeedback ? (traceFeedbackData?.pagination?.total ?? undefined) : undefined}\n feedbackTabSlot={withFeedback ? ({ traceId: tid }) => <TraceFeedbackTab traceId={tid} /> : undefined}\n scoresTabBadge={spanScoresData?.pagination?.total ?? undefined}\n scoresTabSlot={({ traceId: tid, rootSpanId }) =>\n rootSpanId ? <TraceScoresTab traceId={tid} spanId={rootSpanId} onScoreSelect={selectScore} /> : null\n }\n spanView={selection.spanView}\n onSpanViewChange={setSpanView}\n spanActiveTab={selection.spanTab ?? 'details'}\n onSpanTabChange={tab => setSpanTab(tab as SpanTab)}\n spanFeedbackTabBadge={withFeedback ? (spanFeedbackData?.pagination?.total ?? undefined) : undefined}\n spanFeedbackTabSlot={\n withFeedback\n ? ({ traceId: tid, spanId: sid }) =>\n tid && sid ? <SpanFeedbackTab key={`${tid}:${sid}`} traceId={tid} spanId={sid} /> : null\n : undefined\n }\n headerActionsSlot={traceId && headerActionsSlot ? headerActionsSlot({ traceId, spans }) : undefined}\n traceHref={traceId && traceHref ? traceHref(traceId) : undefined}\n />\n <ScoreDataPanel depth={depth} score={featuredScore} onClose={() => selectScore(null)} />\n {withAddTraceToDataset && (\n <TraceAsItemDialog\n rootSpanId={datasetDialogTarget?.rootSpanId}\n traceId={datasetDialogTarget?.traceId}\n isOpen={!!datasetDialogTarget}\n onClose={() => setDatasetDialogTarget(null)}\n renderCreateDatasetDialog={renderCreateDatasetDialog}\n />\n )}\n </>\n );\n}\n"],"names":["useTracesConfig","useTracesList","useTracesSelection","useTraceUsageColumns","useState","useTraceFeedback","useSpanFeedback","useTraceOrBranchSpans","useTraceSpanScores","useTraceUsage","useTraceListNavigation","jsxs","Fragment","jsx","TraceSpanPanel","TraceFeedbackTab","TraceScoresTab","SpanFeedbackTab","ScoreDataPanel","TraceAsItemDialog"],"mappings":"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"}
@@ -7,7 +7,6 @@ import { SpanFeedbackTab } from '../span-feedback-tab.es.js';
7
7
  import { TraceFeedbackTab } from '../trace-feedback-tab.es.js';
8
8
  import { TraceSpanPanel } from '../trace-span-panel.es.js';
9
9
  import { useTracesConfig, useTracesList, useTracesSelection, useTraceUsageColumns } from './traces-explorer-context.es.js';
10
- import { AddTraceMocksToItemDialog } from '../../../observability/components/add-trace-mocks-to-item-dialog.es.js';
11
10
  import { TraceAsItemDialog } from '../../../observability/components/trace-as-item-dialog.es.js';
12
11
  import 'lucide-react';
13
12
  import '@base-ui/react/combobox';
@@ -27,7 +26,8 @@ function TracesExplorerPanel({
27
26
  onOpenScore,
28
27
  renderCreateDatasetDialog,
29
28
  headerActionsSlot,
30
- traceHref
29
+ traceHref,
30
+ withAddTraceToDataset = true
31
31
  }) {
32
32
  const { withQueryTrace, withFeedback } = useTracesConfig();
33
33
  const { rows, autoRefetch, isLoading: isListLoading } = useTracesList();
@@ -36,7 +36,6 @@ function TracesExplorerPanel({
36
36
  const traceId = selection.traceId;
37
37
  const spanId = selection.spanId;
38
38
  const [datasetDialogTarget, setDatasetDialogTarget] = useState(null);
39
- const [addMocksTarget, setAddMocksTarget] = useState(null);
40
39
  const [fullThreadTraceId, setFullThreadTraceId] = useState(null);
41
40
  const { data: traceFeedbackData } = useTraceFeedback({
42
41
  traceId,
@@ -68,7 +67,6 @@ function TracesExplorerPanel({
68
67
  });
69
68
  const usage = traceId ? usageByTraceId?.get(traceId) : void 0;
70
69
  const { handlePreviousTrace, handleNextTrace } = useTraceListNavigation(rows, traceId, null, selectTrace);
71
- const isAgentTrace = anchorSpan?.entityType === "agent";
72
70
  const isFullThreadOpen = !!traceId && fullThreadTraceId === traceId;
73
71
  const depth = isFullThreadOpen ? 3 : 2;
74
72
  return /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -93,8 +91,7 @@ function TracesExplorerPanel({
93
91
  onOpenScore,
94
92
  onFullThreadOpenChange: (open) => setFullThreadTraceId(open ? traceId ?? null : null),
95
93
  onSpanSelect: (id) => selectSpan(id ?? null),
96
- onSaveAsDatasetItem: setDatasetDialogTarget,
97
- onAddTraceMocksToItem: isAgentTrace ? setAddMocksTarget : void 0,
94
+ onSaveAsDatasetItem: withAddTraceToDataset ? setDatasetDialogTarget : void 0,
98
95
  initialSpanId: spanId,
99
96
  onPrevious: handlePreviousTrace,
100
97
  onNext: handleNextTrace,
@@ -116,7 +113,7 @@ function TracesExplorerPanel({
116
113
  }
117
114
  ),
118
115
  /* @__PURE__ */ jsx(ScoreDataPanel, { depth, score: featuredScore, onClose: () => selectScore(null) }),
119
- /* @__PURE__ */ jsx(
116
+ withAddTraceToDataset && /* @__PURE__ */ jsx(
120
117
  TraceAsItemDialog,
121
118
  {
122
119
  rootSpanId: datasetDialogTarget?.rootSpanId,
@@ -125,14 +122,6 @@ function TracesExplorerPanel({
125
122
  onClose: () => setDatasetDialogTarget(null),
126
123
  renderCreateDatasetDialog
127
124
  }
128
- ),
129
- /* @__PURE__ */ jsx(
130
- AddTraceMocksToItemDialog,
131
- {
132
- traceId: addMocksTarget?.traceId,
133
- isOpen: !!addMocksTarget,
134
- onClose: () => setAddMocksTarget(null)
135
- }
136
125
  )
137
126
  ] });
138
127
  }
@@ -1 +1 @@
1
- {"version":3,"file":"traces-explorer-panel.es.js","sources":["../../../../../src/domains/traces/components/traces-explorer/traces-explorer-panel.tsx"],"sourcesContent":["import { useTraceSpanScores } from '@mastra/react/hooks/scores';\nimport { useSpanFeedback, useTraceFeedback, useTraceOrBranchSpans, useTraceUsage } from '@mastra/react/hooks/traces';\nimport { useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useTraceListNavigation } from '../../hooks/use-trace-list-navigation';\nimport type { SpanTab } from '../../types';\nimport { SpanFeedbackTab } from '../span-feedback-tab';\nimport { TraceFeedbackTab } from '../trace-feedback-tab';\nimport { TraceSpanPanel } from '../trace-span-panel';\nimport type { TraceSpanPanelProps } from '../trace-span-panel';\nimport { useTraceUsageColumns, useTracesConfig, useTracesList, useTracesSelection } from './traces-explorer-context';\nimport { AddTraceMocksToItemDialog } from '@/domains/observability/components/add-trace-mocks-to-item-dialog';\nimport { TraceAsItemDialog } from '@/domains/observability/components/trace-as-item-dialog';\nimport { ScoreDataPanel, TraceScoresTab } from '@/domains/scores';\n\nexport type TracesExplorerPanelProps = {\n /** Opens a score of one of the full thread's traces (the host owns routing). */\n onOpenScore: (traceId: string, scoreId: string) => void;\n renderCreateDatasetDialog?: ComponentProps<typeof TraceAsItemDialog>['renderCreateDatasetDialog'];\n /** Host integration actions rendered alongside the trace controls. */\n headerActionsSlot?: (args: { traceId: string; spans: TraceSpanPanelProps['spans'] }) => ReactNode;\n /** Builds the href of the dedicated trace page; without it the drawer offers no \"Open trace page\" link. */\n traceHref?: (traceId: string) => string;\n};\n\ntype DatasetDialogTarget = { traceId: string; rootSpanId: string | undefined };\n\nexport function TracesExplorerPanel({\n onOpenScore,\n renderCreateDatasetDialog,\n headerActionsSlot,\n traceHref,\n}: TracesExplorerPanelProps) {\n const { withQueryTrace, withFeedback } = useTracesConfig();\n const { rows, autoRefetch, isLoading: isListLoading } = useTracesList();\n const { selection, selectTrace, closeTrace, selectSpan, setSpanTab, setSpanView, selectScore, highlightSpans } =\n useTracesSelection();\n const { usageEnabled } = useTraceUsageColumns();\n const traceId = selection.traceId;\n const spanId = selection.spanId;\n\n const [datasetDialogTarget, setDatasetDialogTarget] = useState<DatasetDialogTarget | null>(null);\n const [addMocksTarget, setAddMocksTarget] = useState<{ traceId: string } | null>(null);\n // Keyed by trace id so selecting another trace (row click, prev/next) falls back to the trace panel.\n const [fullThreadTraceId, setFullThreadTraceId] = useState<string | null>(null);\n\n // Tab badge counts; the tab bodies re-use these first-page queries through React Query's cache.\n const { data: traceFeedbackData } = useTraceFeedback({\n traceId,\n queryOptions: { enabled: withFeedback && !!traceId },\n });\n const { data: spanFeedbackData } = useSpanFeedback({\n traceId,\n spanId,\n queryOptions: { enabled: withFeedback && !!traceId && !!spanId },\n });\n\n const {\n spans,\n anchorSpanId,\n isLoading: isLoadingSpans,\n } = useTraceOrBranchSpans({ traceId: traceId ?? null, listMode: 'traces', anchorSpanId: null });\n const anchorSpan = anchorSpanId\n ? spans?.find(s => s.spanId === anchorSpanId)\n : spans?.find(s => s.parentSpanId == null);\n\n const { data: spanScoresData } = useTraceSpanScores({\n traceId,\n spanId: anchorSpan?.spanId,\n queryOptions: { enabled: !!traceId && !!anchorSpan?.spanId },\n });\n const featuredScore = selection.scoreId\n ? spanScoresData?.scores?.find(score => score.id === selection.scoreId)\n : undefined;\n\n // Same key as the list's usage query when the trace is listed, so React Query serves it from cache.\n // Waits for the list so a deep-linked trace doesn't fetch its own usage before the rows arrive.\n const rowIds = rows.map(row => row.traceId);\n const isListed = !!traceId && rowIds.includes(traceId);\n const { data: usageByTraceId } = useTraceUsage({\n traceIds: isListed ? rowIds : traceId ? [traceId] : [],\n enabled: usageEnabled && !isListLoading,\n autoRefetch,\n });\n const usage = traceId ? usageByTraceId?.get(traceId) : undefined;\n\n const { handlePreviousTrace, handleNextTrace } = useTraceListNavigation(rows, traceId, null, selectTrace);\n\n // Tool mocks only make sense for agent runs.\n const isAgentTrace = anchorSpan?.entityType === 'agent';\n const isFullThreadOpen = !!traceId && fullThreadTraceId === traceId;\n const depth = isFullThreadOpen ? 3 : 2;\n\n return (\n <>\n <TraceSpanPanel\n title=\"Trace details\"\n size={spanId ? 'full' : 'wide'}\n traceId={traceId}\n spans={spans}\n anchorSpanId={anchorSpanId}\n usage={usage}\n isLoadingSpans={isLoadingSpans}\n selectedSpanId={spanId ?? null}\n onClose={() => {\n setFullThreadTraceId(null);\n closeTrace();\n }}\n isFullThreadOpen={isFullThreadOpen}\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n onOpenScore={onOpenScore}\n onFullThreadOpenChange={open => setFullThreadTraceId(open ? (traceId ?? null) : null)}\n onSpanSelect={id => selectSpan(id ?? null)}\n onSaveAsDatasetItem={setDatasetDialogTarget}\n onAddTraceMocksToItem={isAgentTrace ? setAddMocksTarget : undefined}\n initialSpanId={spanId}\n onPrevious={handlePreviousTrace}\n onNext={handleNextTrace}\n showPartialThread\n featuredSpanIds={selection.highlightSpanIds}\n onHighlightSpans={highlightSpans}\n feedbackTabBadge={withFeedback ? (traceFeedbackData?.pagination?.total ?? undefined) : undefined}\n feedbackTabSlot={withFeedback ? ({ traceId: tid }) => <TraceFeedbackTab traceId={tid} /> : undefined}\n scoresTabBadge={spanScoresData?.pagination?.total ?? undefined}\n scoresTabSlot={({ traceId: tid, rootSpanId }) =>\n rootSpanId ? <TraceScoresTab traceId={tid} spanId={rootSpanId} onScoreSelect={selectScore} /> : null\n }\n spanView={selection.spanView}\n onSpanViewChange={setSpanView}\n spanActiveTab={selection.spanTab ?? 'details'}\n onSpanTabChange={tab => setSpanTab(tab as SpanTab)}\n spanFeedbackTabBadge={withFeedback ? (spanFeedbackData?.pagination?.total ?? undefined) : undefined}\n spanFeedbackTabSlot={\n withFeedback\n ? ({ traceId: tid, spanId: sid }) =>\n tid && sid ? <SpanFeedbackTab key={`${tid}:${sid}`} traceId={tid} spanId={sid} /> : null\n : undefined\n }\n headerActionsSlot={traceId && headerActionsSlot ? headerActionsSlot({ traceId, spans }) : undefined}\n traceHref={traceId && traceHref ? traceHref(traceId) : undefined}\n />\n <ScoreDataPanel depth={depth} score={featuredScore} onClose={() => selectScore(null)} />\n <TraceAsItemDialog\n rootSpanId={datasetDialogTarget?.rootSpanId}\n traceId={datasetDialogTarget?.traceId}\n isOpen={!!datasetDialogTarget}\n onClose={() => setDatasetDialogTarget(null)}\n renderCreateDatasetDialog={renderCreateDatasetDialog}\n />\n <AddTraceMocksToItemDialog\n traceId={addMocksTarget?.traceId}\n isOpen={!!addMocksTarget}\n onClose={() => setAddMocksTarget(null)}\n />\n </>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"traces-explorer-panel.es.js","sources":["../../../../../src/domains/traces/components/traces-explorer/traces-explorer-panel.tsx"],"sourcesContent":["import { useTraceSpanScores } from '@mastra/react/hooks/scores';\nimport { useSpanFeedback, useTraceFeedback, useTraceOrBranchSpans, useTraceUsage } from '@mastra/react/hooks/traces';\nimport { useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useTraceListNavigation } from '../../hooks/use-trace-list-navigation';\nimport type { SpanTab } from '../../types';\nimport { SpanFeedbackTab } from '../span-feedback-tab';\nimport { TraceFeedbackTab } from '../trace-feedback-tab';\nimport { TraceSpanPanel } from '../trace-span-panel';\nimport type { TraceSpanPanelProps } from '../trace-span-panel';\nimport { useTraceUsageColumns, useTracesConfig, useTracesList, useTracesSelection } from './traces-explorer-context';\nimport { TraceAsItemDialog } from '@/domains/observability/components/trace-as-item-dialog';\nimport { ScoreDataPanel, TraceScoresTab } from '@/domains/scores';\n\nexport type TracesExplorerPanelProps = {\n /** Opens a score of one of the full thread's traces (the host owns routing). */\n onOpenScore: (traceId: string, scoreId: string) => void;\n renderCreateDatasetDialog?: ComponentProps<typeof TraceAsItemDialog>['renderCreateDatasetDialog'];\n /** Host integration actions rendered alongside the trace controls. */\n headerActionsSlot?: (args: { traceId: string; spans: TraceSpanPanelProps['spans'] }) => ReactNode;\n /** Builds the href of the dedicated trace page; without it the drawer offers no \"Open trace page\" link. */\n traceHref?: (traceId: string) => string;\n /** Shows \"Add full trace to dataset\" in the trace actions menu. Defaults to `true`. */\n withAddTraceToDataset?: boolean;\n};\n\ntype DatasetDialogTarget = { traceId: string; rootSpanId: string | undefined };\n\nexport function TracesExplorerPanel({\n onOpenScore,\n renderCreateDatasetDialog,\n headerActionsSlot,\n traceHref,\n withAddTraceToDataset = true,\n}: TracesExplorerPanelProps) {\n const { withQueryTrace, withFeedback } = useTracesConfig();\n const { rows, autoRefetch, isLoading: isListLoading } = useTracesList();\n const { selection, selectTrace, closeTrace, selectSpan, setSpanTab, setSpanView, selectScore, highlightSpans } =\n useTracesSelection();\n const { usageEnabled } = useTraceUsageColumns();\n const traceId = selection.traceId;\n const spanId = selection.spanId;\n\n const [datasetDialogTarget, setDatasetDialogTarget] = useState<DatasetDialogTarget | null>(null);\n // Keyed by trace id so selecting another trace (row click, prev/next) falls back to the trace panel.\n const [fullThreadTraceId, setFullThreadTraceId] = useState<string | null>(null);\n\n // Tab badge counts; the tab bodies re-use these first-page queries through React Query's cache.\n const { data: traceFeedbackData } = useTraceFeedback({\n traceId,\n queryOptions: { enabled: withFeedback && !!traceId },\n });\n const { data: spanFeedbackData } = useSpanFeedback({\n traceId,\n spanId,\n queryOptions: { enabled: withFeedback && !!traceId && !!spanId },\n });\n\n const {\n spans,\n anchorSpanId,\n isLoading: isLoadingSpans,\n } = useTraceOrBranchSpans({ traceId: traceId ?? null, listMode: 'traces', anchorSpanId: null });\n const anchorSpan = anchorSpanId\n ? spans?.find(s => s.spanId === anchorSpanId)\n : spans?.find(s => s.parentSpanId == null);\n\n const { data: spanScoresData } = useTraceSpanScores({\n traceId,\n spanId: anchorSpan?.spanId,\n queryOptions: { enabled: !!traceId && !!anchorSpan?.spanId },\n });\n const featuredScore = selection.scoreId\n ? spanScoresData?.scores?.find(score => score.id === selection.scoreId)\n : undefined;\n\n // Same key as the list's usage query when the trace is listed, so React Query serves it from cache.\n // Waits for the list so a deep-linked trace doesn't fetch its own usage before the rows arrive.\n const rowIds = rows.map(row => row.traceId);\n const isListed = !!traceId && rowIds.includes(traceId);\n const { data: usageByTraceId } = useTraceUsage({\n traceIds: isListed ? rowIds : traceId ? [traceId] : [],\n enabled: usageEnabled && !isListLoading,\n autoRefetch,\n });\n const usage = traceId ? usageByTraceId?.get(traceId) : undefined;\n\n const { handlePreviousTrace, handleNextTrace } = useTraceListNavigation(rows, traceId, null, selectTrace);\n\n const isFullThreadOpen = !!traceId && fullThreadTraceId === traceId;\n const depth = isFullThreadOpen ? 3 : 2;\n\n return (\n <>\n <TraceSpanPanel\n title=\"Trace details\"\n size={spanId ? 'full' : 'wide'}\n traceId={traceId}\n spans={spans}\n anchorSpanId={anchorSpanId}\n usage={usage}\n isLoadingSpans={isLoadingSpans}\n selectedSpanId={spanId ?? null}\n onClose={() => {\n setFullThreadTraceId(null);\n closeTrace();\n }}\n isFullThreadOpen={isFullThreadOpen}\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n onOpenScore={onOpenScore}\n onFullThreadOpenChange={open => setFullThreadTraceId(open ? (traceId ?? null) : null)}\n onSpanSelect={id => selectSpan(id ?? null)}\n onSaveAsDatasetItem={withAddTraceToDataset ? setDatasetDialogTarget : undefined}\n initialSpanId={spanId}\n onPrevious={handlePreviousTrace}\n onNext={handleNextTrace}\n showPartialThread\n featuredSpanIds={selection.highlightSpanIds}\n onHighlightSpans={highlightSpans}\n feedbackTabBadge={withFeedback ? (traceFeedbackData?.pagination?.total ?? undefined) : undefined}\n feedbackTabSlot={withFeedback ? ({ traceId: tid }) => <TraceFeedbackTab traceId={tid} /> : undefined}\n scoresTabBadge={spanScoresData?.pagination?.total ?? undefined}\n scoresTabSlot={({ traceId: tid, rootSpanId }) =>\n rootSpanId ? <TraceScoresTab traceId={tid} spanId={rootSpanId} onScoreSelect={selectScore} /> : null\n }\n spanView={selection.spanView}\n onSpanViewChange={setSpanView}\n spanActiveTab={selection.spanTab ?? 'details'}\n onSpanTabChange={tab => setSpanTab(tab as SpanTab)}\n spanFeedbackTabBadge={withFeedback ? (spanFeedbackData?.pagination?.total ?? undefined) : undefined}\n spanFeedbackTabSlot={\n withFeedback\n ? ({ traceId: tid, spanId: sid }) =>\n tid && sid ? <SpanFeedbackTab key={`${tid}:${sid}`} traceId={tid} spanId={sid} /> : null\n : undefined\n }\n headerActionsSlot={traceId && headerActionsSlot ? headerActionsSlot({ traceId, spans }) : undefined}\n traceHref={traceId && traceHref ? traceHref(traceId) : undefined}\n />\n <ScoreDataPanel depth={depth} score={featuredScore} onClose={() => selectScore(null)} />\n {withAddTraceToDataset && (\n <TraceAsItemDialog\n rootSpanId={datasetDialogTarget?.rootSpanId}\n traceId={datasetDialogTarget?.traceId}\n isOpen={!!datasetDialogTarget}\n onClose={() => setDatasetDialogTarget(null)}\n renderCreateDatasetDialog={renderCreateDatasetDialog}\n />\n )}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -33,6 +33,7 @@ function TracesExplorerRoot({
33
33
  const withQueryTrace = traceQuery.enabled && features?.traceQuery !== false;
34
34
  const withFeedback = capabilities.useFeedbackAvailable().enabled && features?.feedback !== false;
35
35
  const { enabled: withRootDuration } = capabilities.useTraceQueryRootDurationAvailable();
36
+ const { enabled: withDeltaPolling } = capabilities.useTraceQueryDeltaPollingAvailable();
36
37
  const withDiscovery = capabilities.useTraceQueryDiscoveryAvailable().enabled && withQueryTrace;
37
38
  const filters = React.useMemo(() => domains_traces_components_tracesExplorer_tracesExplorerActions.sanitizeTracesFilters(rawFilters, withRootDuration), [rawFilters, withRootDuration]);
38
39
  const isScoped = !!scope;
@@ -108,6 +109,7 @@ function TracesExplorerRoot({
108
109
  withQueryTrace,
109
110
  withFeedback,
110
111
  withRootDuration,
112
+ withDeltaPolling,
111
113
  withDiscovery,
112
114
  isCapabilitiesLoading: traceQuery.isLoading,
113
115
  metricsSupport,
@@ -120,6 +122,7 @@ function TracesExplorerRoot({
120
122
  withQueryTrace,
121
123
  withFeedback,
122
124
  withRootDuration,
125
+ withDeltaPolling,
123
126
  withDiscovery,
124
127
  traceQuery.isLoading,
125
128
  metricsSupport,
@@ -1 +1 @@
1
- {"version":3,"file":"traces-explorer-root.cjs.js","sources":["../../../../../src/domains/traces/components/traces-explorer/traces-explorer-root.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport { useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { resolveTraceQueryTimeRange } from '../../trace-query-filters';\nimport {\n applyDate,\n applyDatePreset,\n applyDateRange,\n applyFilterTokens,\n clearSelection,\n DEFAULT_TRACES_FILTERS,\n highlightSpans,\n isSelectionEmpty,\n resolveTracesDateWindow,\n sanitizeTracesFilters,\n selectScore,\n selectSpan,\n selectTrace,\n setSpanTab,\n setSpanView,\n} from './traces-explorer-actions';\nimport type {\n TracesExplorerState,\n TracesFilters,\n TracesSelection,\n TracesSortDirection,\n} from './traces-explorer-actions';\nimport { TracesColumnsProvider } from './traces-explorer-columns-provider';\nimport { TracesConfigContext, TracesFiltersContext, TracesSelectionContext } from './traces-explorer-context';\nimport type {\n TracesConfigContextValue,\n TracesExplorerFeatures,\n TracesExplorerScope,\n TracesFiltersActions,\n TracesFiltersContextValue,\n TracesMetricsSupport,\n TracesSelectionActions,\n TracesSelectionContextValue,\n} from './traces-explorer-context';\nimport { TracesListProvider } from './traces-explorer-list-provider';\nimport {\n useFeedbackAvailable,\n useTraceQueryAvailable,\n useTraceQueryDiscoveryAvailable,\n useTraceQueryRootDurationAvailable,\n} from '@/domains/capabilities';\n\nexport type TracesExplorerRootProps = {\n selection: TracesSelection;\n filters: TracesFilters;\n /** Receives the full next state once per user action, so a filter edit and the selection it clears land together. */\n onChange: (next: TracesExplorerState) => void;\n sortDirection: TracesSortDirection;\n onSortDirectionChange: (next: TracesSortDirection) => void;\n /** Pins the explorer to one entity: its fields stay in the filters but never surface as chips. */\n scope?: TracesExplorerScope;\n /** Resolved by the host, which may know better than the storage capabilities (e.g. hosted deployments). */\n metricsSupport: TracesMetricsSupport;\n /** Host switches combined with the server capabilities; a feature runs only when both allow it. */\n features?: TracesExplorerFeatures;\n /** The host's default filters. Filters matching them don't count as applied (e.g. in empty states). */\n initialFilters?: TracesFilters;\n children: ReactNode;\n};\n\nconst SCOPED_FIELD_IDS: ReadonlySet<string> = new Set(['rootEntityType', 'entityId']);\nconst HIDDEN_SCOPED_FIELD_IDS: readonly string[] = ['rootEntityType', 'entityId', 'entityName'];\nconst NO_FIELD_IDS: ReadonlySet<string> = new Set();\nconst NO_HIDDEN_FIELD_IDS: readonly string[] = [];\n\nconst listIdForScope = (scope?: TracesExplorerScope) =>\n scope?.entityType === EntityType.AGENT\n ? 'agent-traces'\n : scope?.entityType === EntityType.WORKFLOW_RUN\n ? 'workflows-traces'\n : 'all-traces';\n\ntype Latest = Pick<TracesExplorerRootProps, 'selection' | 'filters' | 'onChange' | 'onSortDirectionChange'> & {\n scopedFieldIds: ReadonlySet<string>;\n};\n\nexport function TracesExplorerRoot({\n selection,\n filters: rawFilters,\n onChange,\n sortDirection,\n onSortDirectionChange,\n scope,\n metricsSupport,\n features,\n initialFilters = DEFAULT_TRACES_FILTERS,\n children,\n}: TracesExplorerRootProps) {\n // Servers without the trace-query API list through `listTracesLight` and don't expose feedback.\n const traceQuery = useTraceQueryAvailable();\n const withQueryTrace = traceQuery.enabled && features?.traceQuery !== false;\n const withFeedback = useFeedbackAvailable().enabled && features?.feedback !== false;\n const { enabled: withRootDuration } = useTraceQueryRootDurationAvailable();\n const withDiscovery = useTraceQueryDiscoveryAvailable().enabled && withQueryTrace;\n\n // Entries the server can't query are ignored, never written back: the host keeps its raw value.\n const filters = useMemo(() => sanitizeTracesFilters(rawFilters, withRootDuration), [rawFilters, withRootDuration]);\n\n const isScoped = !!scope;\n const scopedFieldIds = isScoped ? SCOPED_FIELD_IDS : NO_FIELD_IDS;\n const hiddenFieldIds = isScoped ? HIDDEN_SCOPED_FIELD_IDS : NO_HIDDEN_FIELD_IDS;\n\n // Rolling presets pin their start when the preset (or custom bound) changes, not on every render.\n const fromMs = rawFilters.dateFrom?.getTime();\n const toMs = rawFilters.dateTo?.getTime();\n const { dateFrom, dateTo } = useMemo(\n () =>\n resolveTracesDateWindow(\n rawFilters.datePreset,\n fromMs === undefined ? undefined : new Date(fromMs),\n toMs === undefined ? undefined : new Date(toMs),\n ),\n [rawFilters.datePreset, fromMs, toMs],\n );\n\n // Actions read the latest props when they run, so the host doesn't need stable callbacks.\n // `latest` is written as soon as a change is emitted, so a second action in the same tick\n // (the date picker fires a preset then its dates) builds on the first instead of the stale props.\n const current: Latest = { selection, filters: rawFilters, onChange, onSortDirectionChange, scopedFieldIds };\n const latest = useRef(current);\n latest.current = current;\n\n const actions = useMemo(() => {\n const emit = (next: TracesExplorerState) => {\n latest.current.selection = next.selection;\n latest.current.filters = next.filters;\n latest.current.onChange(next);\n };\n const updateSelection = (next: TracesSelection) => {\n if (next === latest.current.selection) return;\n emit({ selection: next, filters: latest.current.filters });\n };\n // A filter change invalidates whatever is selected: the selected row may no longer be listed.\n const updateFilters = (next: TracesFilters) => {\n const { selection: currentSelection, filters: currentFilters } = latest.current;\n if (next === currentFilters) return;\n emit({\n filters: next,\n selection: isSelectionEmpty(currentSelection) ? currentSelection : clearSelection(currentSelection),\n });\n };\n\n const selectionActions: TracesSelectionActions = {\n selectTrace: traceId => updateSelection(selectTrace(latest.current.selection, traceId)),\n closeTrace: () => updateSelection(selectTrace(latest.current.selection, null)),\n selectSpan: spanId => updateSelection(selectSpan(latest.current.selection, spanId)),\n setSpanTab: tab => updateSelection(setSpanTab(latest.current.selection, tab)),\n setSpanView: view => updateSelection(setSpanView(latest.current.selection, view)),\n selectScore: scoreId => updateSelection(selectScore(latest.current.selection, scoreId)),\n highlightSpans: spanIds => updateSelection(highlightSpans(latest.current.selection, spanIds)),\n };\n const filtersActions: TracesFiltersActions = {\n // Re-inject the scope tokens so \"Clear filters\" (which drops every removable item) and any\n // other edit can never drop the scope.\n setFilterTokens: (tokens, groups) => {\n const { filters: base, scopedFieldIds: scoped } = latest.current;\n const scopeTokens = base.tokens.filter(token => scoped.has(token.fieldId));\n updateFilters(applyFilterTokens(base, [...scopeTokens, ...tokens], groups));\n },\n setDatePreset: preset => updateFilters(applyDatePreset(latest.current.filters, preset)),\n setDate: (value, end) => updateFilters(applyDate(latest.current.filters, value, end)),\n setDateRange: (from, to) => updateFilters(applyDateRange(latest.current.filters, from, to)),\n };\n const onSortChange = (direction: TracesSortDirection) => latest.current.onSortDirectionChange(direction);\n return { selectionActions, filtersActions, onSortChange };\n }, []);\n const { selectionActions, filtersActions, onSortChange } = actions;\n\n // Discovery is keyed off the date window with a mount-time `now`, not the list's rolling one,\n // so its query key (and the skeleton) doesn't churn on every auto-refresh tick.\n const [discoveryNow] = useState(() => new Date());\n const discoveryTimeRange = useMemo(\n () => resolveTraceQueryTimeRange(dateFrom, dateTo, discoveryNow),\n [dateFrom, dateTo, discoveryNow],\n );\n\n const listId = listIdForScope(scope);\n const configValue = useMemo<TracesConfigContextValue>(\n () => ({\n listId,\n scopedFieldIds,\n hiddenFieldIds,\n withQueryTrace,\n withFeedback,\n withRootDuration,\n withDiscovery,\n isCapabilitiesLoading: traceQuery.isLoading,\n metricsSupport,\n discoveryTimeRange,\n }),\n [\n listId,\n scopedFieldIds,\n hiddenFieldIds,\n withQueryTrace,\n withFeedback,\n withRootDuration,\n withDiscovery,\n traceQuery.isLoading,\n metricsSupport,\n discoveryTimeRange,\n ],\n );\n\n const contentFiltersApplied = filters.tokens.length > 0 || filters.groups.length > 0;\n const filtersApplied = contentFiltersApplied || filters.datePreset !== initialFilters.datePreset || !!dateTo;\n const filtersValue = useMemo<TracesFiltersContextValue>(\n () => ({\n ...filtersActions,\n filters,\n dateFrom,\n dateTo,\n filtersApplied,\n contentFiltersApplied,\n }),\n [filtersActions, filters, dateFrom, dateTo, filtersApplied, contentFiltersApplied],\n );\n\n // Not memoized: the selection consumers (Layout, List, Panel) also re-render on filter and list\n // changes, which are what re-render Root while the selection stays the same.\n const selectionValue: TracesSelectionContextValue = {\n ...selectionActions,\n selection,\n selectedTraceId: selection.traceId,\n };\n\n return (\n <TracesConfigContext.Provider value={configValue}>\n <TracesFiltersContext.Provider value={filtersValue}>\n <TracesSelectionContext.Provider value={selectionValue}>\n <TracesListProvider sortDirection={sortDirection} onSortChange={onSortChange}>\n <TracesColumnsProvider>{children}</TracesColumnsProvider>\n </TracesListProvider>\n </TracesSelectionContext.Provider>\n </TracesFiltersContext.Provider>\n </TracesConfigContext.Provider>\n );\n}\n"],"names":["EntityType","DEFAULT_TRACES_FILTERS","useTraceQueryAvailable","useFeedbackAvailable","useTraceQueryRootDurationAvailable","useTraceQueryDiscoveryAvailable","useMemo","sanitizeTracesFilters","resolveTracesDateWindow","useRef","isSelectionEmpty","clearSelection","selectionActions","selectTrace","selectSpan","setSpanTab","setSpanView","selectScore","highlightSpans","filtersActions","applyFilterTokens","applyDatePreset","applyDate","applyDateRange","onSortChange","useState","resolveTraceQueryTimeRange","jsx","TracesConfigContext","TracesFiltersContext","TracesSelectionContext","TracesListProvider","TracesColumnsProvider"],"mappings":"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"}
1
+ {"version":3,"file":"traces-explorer-root.cjs.js","sources":["../../../../../src/domains/traces/components/traces-explorer/traces-explorer-root.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport { useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { resolveTraceQueryTimeRange } from '../../trace-query-filters';\nimport {\n applyDate,\n applyDatePreset,\n applyDateRange,\n applyFilterTokens,\n clearSelection,\n DEFAULT_TRACES_FILTERS,\n highlightSpans,\n isSelectionEmpty,\n resolveTracesDateWindow,\n sanitizeTracesFilters,\n selectScore,\n selectSpan,\n selectTrace,\n setSpanTab,\n setSpanView,\n} from './traces-explorer-actions';\nimport type {\n TracesExplorerState,\n TracesFilters,\n TracesSelection,\n TracesSortDirection,\n} from './traces-explorer-actions';\nimport { TracesColumnsProvider } from './traces-explorer-columns-provider';\nimport { TracesConfigContext, TracesFiltersContext, TracesSelectionContext } from './traces-explorer-context';\nimport type {\n TracesConfigContextValue,\n TracesExplorerFeatures,\n TracesExplorerScope,\n TracesFiltersActions,\n TracesFiltersContextValue,\n TracesMetricsSupport,\n TracesSelectionActions,\n TracesSelectionContextValue,\n} from './traces-explorer-context';\nimport { TracesListProvider } from './traces-explorer-list-provider';\nimport {\n useFeedbackAvailable,\n useTraceQueryAvailable,\n useTraceQueryDeltaPollingAvailable,\n useTraceQueryDiscoveryAvailable,\n useTraceQueryRootDurationAvailable,\n} from '@/domains/capabilities';\n\nexport type TracesExplorerRootProps = {\n selection: TracesSelection;\n filters: TracesFilters;\n /** Receives the full next state once per user action, so a filter edit and the selection it clears land together. */\n onChange: (next: TracesExplorerState) => void;\n sortDirection: TracesSortDirection;\n onSortDirectionChange: (next: TracesSortDirection) => void;\n /** Pins the explorer to one entity: its fields stay in the filters but never surface as chips. */\n scope?: TracesExplorerScope;\n /** Resolved by the host, which may know better than the storage capabilities (e.g. hosted deployments). */\n metricsSupport: TracesMetricsSupport;\n /** Host switches combined with the server capabilities; a feature runs only when both allow it. */\n features?: TracesExplorerFeatures;\n /** The host's default filters. Filters matching them don't count as applied (e.g. in empty states). */\n initialFilters?: TracesFilters;\n children: ReactNode;\n};\n\nconst SCOPED_FIELD_IDS: ReadonlySet<string> = new Set(['rootEntityType', 'entityId']);\nconst HIDDEN_SCOPED_FIELD_IDS: readonly string[] = ['rootEntityType', 'entityId', 'entityName'];\nconst NO_FIELD_IDS: ReadonlySet<string> = new Set();\nconst NO_HIDDEN_FIELD_IDS: readonly string[] = [];\n\nconst listIdForScope = (scope?: TracesExplorerScope) =>\n scope?.entityType === EntityType.AGENT\n ? 'agent-traces'\n : scope?.entityType === EntityType.WORKFLOW_RUN\n ? 'workflows-traces'\n : 'all-traces';\n\ntype Latest = Pick<TracesExplorerRootProps, 'selection' | 'filters' | 'onChange' | 'onSortDirectionChange'> & {\n scopedFieldIds: ReadonlySet<string>;\n};\n\nexport function TracesExplorerRoot({\n selection,\n filters: rawFilters,\n onChange,\n sortDirection,\n onSortDirectionChange,\n scope,\n metricsSupport,\n features,\n initialFilters = DEFAULT_TRACES_FILTERS,\n children,\n}: TracesExplorerRootProps) {\n // Servers without the trace-query API list through `listTracesLight` and don't expose feedback.\n const traceQuery = useTraceQueryAvailable();\n const withQueryTrace = traceQuery.enabled && features?.traceQuery !== false;\n const withFeedback = useFeedbackAvailable().enabled && features?.feedback !== false;\n const { enabled: withRootDuration } = useTraceQueryRootDurationAvailable();\n const { enabled: withDeltaPolling } = useTraceQueryDeltaPollingAvailable();\n const withDiscovery = useTraceQueryDiscoveryAvailable().enabled && withQueryTrace;\n\n // Entries the server can't query are ignored, never written back: the host keeps its raw value.\n const filters = useMemo(() => sanitizeTracesFilters(rawFilters, withRootDuration), [rawFilters, withRootDuration]);\n\n const isScoped = !!scope;\n const scopedFieldIds = isScoped ? SCOPED_FIELD_IDS : NO_FIELD_IDS;\n const hiddenFieldIds = isScoped ? HIDDEN_SCOPED_FIELD_IDS : NO_HIDDEN_FIELD_IDS;\n\n // Rolling presets pin their start when the preset (or custom bound) changes, not on every render.\n const fromMs = rawFilters.dateFrom?.getTime();\n const toMs = rawFilters.dateTo?.getTime();\n const { dateFrom, dateTo } = useMemo(\n () =>\n resolveTracesDateWindow(\n rawFilters.datePreset,\n fromMs === undefined ? undefined : new Date(fromMs),\n toMs === undefined ? undefined : new Date(toMs),\n ),\n [rawFilters.datePreset, fromMs, toMs],\n );\n\n // Actions read the latest props when they run, so the host doesn't need stable callbacks.\n // `latest` is written as soon as a change is emitted, so a second action in the same tick\n // (the date picker fires a preset then its dates) builds on the first instead of the stale props.\n const current: Latest = { selection, filters: rawFilters, onChange, onSortDirectionChange, scopedFieldIds };\n const latest = useRef(current);\n latest.current = current;\n\n const actions = useMemo(() => {\n const emit = (next: TracesExplorerState) => {\n latest.current.selection = next.selection;\n latest.current.filters = next.filters;\n latest.current.onChange(next);\n };\n const updateSelection = (next: TracesSelection) => {\n if (next === latest.current.selection) return;\n emit({ selection: next, filters: latest.current.filters });\n };\n // A filter change invalidates whatever is selected: the selected row may no longer be listed.\n const updateFilters = (next: TracesFilters) => {\n const { selection: currentSelection, filters: currentFilters } = latest.current;\n if (next === currentFilters) return;\n emit({\n filters: next,\n selection: isSelectionEmpty(currentSelection) ? currentSelection : clearSelection(currentSelection),\n });\n };\n\n const selectionActions: TracesSelectionActions = {\n selectTrace: traceId => updateSelection(selectTrace(latest.current.selection, traceId)),\n closeTrace: () => updateSelection(selectTrace(latest.current.selection, null)),\n selectSpan: spanId => updateSelection(selectSpan(latest.current.selection, spanId)),\n setSpanTab: tab => updateSelection(setSpanTab(latest.current.selection, tab)),\n setSpanView: view => updateSelection(setSpanView(latest.current.selection, view)),\n selectScore: scoreId => updateSelection(selectScore(latest.current.selection, scoreId)),\n highlightSpans: spanIds => updateSelection(highlightSpans(latest.current.selection, spanIds)),\n };\n const filtersActions: TracesFiltersActions = {\n // Re-inject the scope tokens so \"Clear filters\" (which drops every removable item) and any\n // other edit can never drop the scope.\n setFilterTokens: (tokens, groups) => {\n const { filters: base, scopedFieldIds: scoped } = latest.current;\n const scopeTokens = base.tokens.filter(token => scoped.has(token.fieldId));\n updateFilters(applyFilterTokens(base, [...scopeTokens, ...tokens], groups));\n },\n setDatePreset: preset => updateFilters(applyDatePreset(latest.current.filters, preset)),\n setDate: (value, end) => updateFilters(applyDate(latest.current.filters, value, end)),\n setDateRange: (from, to) => updateFilters(applyDateRange(latest.current.filters, from, to)),\n };\n const onSortChange = (direction: TracesSortDirection) => latest.current.onSortDirectionChange(direction);\n return { selectionActions, filtersActions, onSortChange };\n }, []);\n const { selectionActions, filtersActions, onSortChange } = actions;\n\n // Discovery is keyed off the date window with a mount-time `now`, not the list's rolling one,\n // so its query key (and the skeleton) doesn't churn on every auto-refresh tick.\n const [discoveryNow] = useState(() => new Date());\n const discoveryTimeRange = useMemo(\n () => resolveTraceQueryTimeRange(dateFrom, dateTo, discoveryNow),\n [dateFrom, dateTo, discoveryNow],\n );\n\n const listId = listIdForScope(scope);\n const configValue = useMemo<TracesConfigContextValue>(\n () => ({\n listId,\n scopedFieldIds,\n hiddenFieldIds,\n withQueryTrace,\n withFeedback,\n withRootDuration,\n withDeltaPolling,\n withDiscovery,\n isCapabilitiesLoading: traceQuery.isLoading,\n metricsSupport,\n discoveryTimeRange,\n }),\n [\n listId,\n scopedFieldIds,\n hiddenFieldIds,\n withQueryTrace,\n withFeedback,\n withRootDuration,\n withDeltaPolling,\n withDiscovery,\n traceQuery.isLoading,\n metricsSupport,\n discoveryTimeRange,\n ],\n );\n\n const contentFiltersApplied = filters.tokens.length > 0 || filters.groups.length > 0;\n const filtersApplied = contentFiltersApplied || filters.datePreset !== initialFilters.datePreset || !!dateTo;\n const filtersValue = useMemo<TracesFiltersContextValue>(\n () => ({\n ...filtersActions,\n filters,\n dateFrom,\n dateTo,\n filtersApplied,\n contentFiltersApplied,\n }),\n [filtersActions, filters, dateFrom, dateTo, filtersApplied, contentFiltersApplied],\n );\n\n // Not memoized: the selection consumers (Layout, List, Panel) also re-render on filter and list\n // changes, which are what re-render Root while the selection stays the same.\n const selectionValue: TracesSelectionContextValue = {\n ...selectionActions,\n selection,\n selectedTraceId: selection.traceId,\n };\n\n return (\n <TracesConfigContext.Provider value={configValue}>\n <TracesFiltersContext.Provider value={filtersValue}>\n <TracesSelectionContext.Provider value={selectionValue}>\n <TracesListProvider sortDirection={sortDirection} onSortChange={onSortChange}>\n <TracesColumnsProvider>{children}</TracesColumnsProvider>\n </TracesListProvider>\n </TracesSelectionContext.Provider>\n </TracesFiltersContext.Provider>\n </TracesConfigContext.Provider>\n );\n}\n"],"names":["EntityType","DEFAULT_TRACES_FILTERS","useTraceQueryAvailable","useFeedbackAvailable","useTraceQueryRootDurationAvailable","useTraceQueryDeltaPollingAvailable","useTraceQueryDiscoveryAvailable","useMemo","sanitizeTracesFilters","resolveTracesDateWindow","useRef","isSelectionEmpty","clearSelection","selectionActions","selectTrace","selectSpan","setSpanTab","setSpanView","selectScore","highlightSpans","filtersActions","applyFilterTokens","applyDatePreset","applyDate","applyDateRange","onSortChange","useState","resolveTraceQueryTimeRange","jsx","TracesConfigContext","TracesFiltersContext","TracesSelectionContext","TracesListProvider","TracesColumnsProvider"],"mappings":"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"}
@@ -6,7 +6,7 @@ import { sanitizeTracesFilters, resolveTracesDateWindow, DEFAULT_TRACES_FILTERS,
6
6
  import { TracesColumnsProvider } from './traces-explorer-columns-provider.es.js';
7
7
  import { TracesConfigContext, TracesFiltersContext, TracesSelectionContext } from './traces-explorer-context.es.js';
8
8
  import { TracesListProvider } from './traces-explorer-list-provider.es.js';
9
- import { useTraceQueryAvailable, useFeedbackAvailable, useTraceQueryRootDurationAvailable, useTraceQueryDiscoveryAvailable } from '@mastra/react/hooks/capabilities';
9
+ import { useTraceQueryAvailable, useFeedbackAvailable, useTraceQueryRootDurationAvailable, useTraceQueryDeltaPollingAvailable, useTraceQueryDiscoveryAvailable } from '@mastra/react/hooks/capabilities';
10
10
 
11
11
  const SCOPED_FIELD_IDS = /* @__PURE__ */ new Set(["rootEntityType", "entityId"]);
12
12
  const HIDDEN_SCOPED_FIELD_IDS = ["rootEntityType", "entityId", "entityName"];
@@ -29,6 +29,7 @@ function TracesExplorerRoot({
29
29
  const withQueryTrace = traceQuery.enabled && features?.traceQuery !== false;
30
30
  const withFeedback = useFeedbackAvailable().enabled && features?.feedback !== false;
31
31
  const { enabled: withRootDuration } = useTraceQueryRootDurationAvailable();
32
+ const { enabled: withDeltaPolling } = useTraceQueryDeltaPollingAvailable();
32
33
  const withDiscovery = useTraceQueryDiscoveryAvailable().enabled && withQueryTrace;
33
34
  const filters = useMemo(() => sanitizeTracesFilters(rawFilters, withRootDuration), [rawFilters, withRootDuration]);
34
35
  const isScoped = !!scope;
@@ -104,6 +105,7 @@ function TracesExplorerRoot({
104
105
  withQueryTrace,
105
106
  withFeedback,
106
107
  withRootDuration,
108
+ withDeltaPolling,
107
109
  withDiscovery,
108
110
  isCapabilitiesLoading: traceQuery.isLoading,
109
111
  metricsSupport,
@@ -116,6 +118,7 @@ function TracesExplorerRoot({
116
118
  withQueryTrace,
117
119
  withFeedback,
118
120
  withRootDuration,
121
+ withDeltaPolling,
119
122
  withDiscovery,
120
123
  traceQuery.isLoading,
121
124
  metricsSupport,
@@ -1 +1 @@
1
- {"version":3,"file":"traces-explorer-root.es.js","sources":["../../../../../src/domains/traces/components/traces-explorer/traces-explorer-root.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport { useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { resolveTraceQueryTimeRange } from '../../trace-query-filters';\nimport {\n applyDate,\n applyDatePreset,\n applyDateRange,\n applyFilterTokens,\n clearSelection,\n DEFAULT_TRACES_FILTERS,\n highlightSpans,\n isSelectionEmpty,\n resolveTracesDateWindow,\n sanitizeTracesFilters,\n selectScore,\n selectSpan,\n selectTrace,\n setSpanTab,\n setSpanView,\n} from './traces-explorer-actions';\nimport type {\n TracesExplorerState,\n TracesFilters,\n TracesSelection,\n TracesSortDirection,\n} from './traces-explorer-actions';\nimport { TracesColumnsProvider } from './traces-explorer-columns-provider';\nimport { TracesConfigContext, TracesFiltersContext, TracesSelectionContext } from './traces-explorer-context';\nimport type {\n TracesConfigContextValue,\n TracesExplorerFeatures,\n TracesExplorerScope,\n TracesFiltersActions,\n TracesFiltersContextValue,\n TracesMetricsSupport,\n TracesSelectionActions,\n TracesSelectionContextValue,\n} from './traces-explorer-context';\nimport { TracesListProvider } from './traces-explorer-list-provider';\nimport {\n useFeedbackAvailable,\n useTraceQueryAvailable,\n useTraceQueryDiscoveryAvailable,\n useTraceQueryRootDurationAvailable,\n} from '@/domains/capabilities';\n\nexport type TracesExplorerRootProps = {\n selection: TracesSelection;\n filters: TracesFilters;\n /** Receives the full next state once per user action, so a filter edit and the selection it clears land together. */\n onChange: (next: TracesExplorerState) => void;\n sortDirection: TracesSortDirection;\n onSortDirectionChange: (next: TracesSortDirection) => void;\n /** Pins the explorer to one entity: its fields stay in the filters but never surface as chips. */\n scope?: TracesExplorerScope;\n /** Resolved by the host, which may know better than the storage capabilities (e.g. hosted deployments). */\n metricsSupport: TracesMetricsSupport;\n /** Host switches combined with the server capabilities; a feature runs only when both allow it. */\n features?: TracesExplorerFeatures;\n /** The host's default filters. Filters matching them don't count as applied (e.g. in empty states). */\n initialFilters?: TracesFilters;\n children: ReactNode;\n};\n\nconst SCOPED_FIELD_IDS: ReadonlySet<string> = new Set(['rootEntityType', 'entityId']);\nconst HIDDEN_SCOPED_FIELD_IDS: readonly string[] = ['rootEntityType', 'entityId', 'entityName'];\nconst NO_FIELD_IDS: ReadonlySet<string> = new Set();\nconst NO_HIDDEN_FIELD_IDS: readonly string[] = [];\n\nconst listIdForScope = (scope?: TracesExplorerScope) =>\n scope?.entityType === EntityType.AGENT\n ? 'agent-traces'\n : scope?.entityType === EntityType.WORKFLOW_RUN\n ? 'workflows-traces'\n : 'all-traces';\n\ntype Latest = Pick<TracesExplorerRootProps, 'selection' | 'filters' | 'onChange' | 'onSortDirectionChange'> & {\n scopedFieldIds: ReadonlySet<string>;\n};\n\nexport function TracesExplorerRoot({\n selection,\n filters: rawFilters,\n onChange,\n sortDirection,\n onSortDirectionChange,\n scope,\n metricsSupport,\n features,\n initialFilters = DEFAULT_TRACES_FILTERS,\n children,\n}: TracesExplorerRootProps) {\n // Servers without the trace-query API list through `listTracesLight` and don't expose feedback.\n const traceQuery = useTraceQueryAvailable();\n const withQueryTrace = traceQuery.enabled && features?.traceQuery !== false;\n const withFeedback = useFeedbackAvailable().enabled && features?.feedback !== false;\n const { enabled: withRootDuration } = useTraceQueryRootDurationAvailable();\n const withDiscovery = useTraceQueryDiscoveryAvailable().enabled && withQueryTrace;\n\n // Entries the server can't query are ignored, never written back: the host keeps its raw value.\n const filters = useMemo(() => sanitizeTracesFilters(rawFilters, withRootDuration), [rawFilters, withRootDuration]);\n\n const isScoped = !!scope;\n const scopedFieldIds = isScoped ? SCOPED_FIELD_IDS : NO_FIELD_IDS;\n const hiddenFieldIds = isScoped ? HIDDEN_SCOPED_FIELD_IDS : NO_HIDDEN_FIELD_IDS;\n\n // Rolling presets pin their start when the preset (or custom bound) changes, not on every render.\n const fromMs = rawFilters.dateFrom?.getTime();\n const toMs = rawFilters.dateTo?.getTime();\n const { dateFrom, dateTo } = useMemo(\n () =>\n resolveTracesDateWindow(\n rawFilters.datePreset,\n fromMs === undefined ? undefined : new Date(fromMs),\n toMs === undefined ? undefined : new Date(toMs),\n ),\n [rawFilters.datePreset, fromMs, toMs],\n );\n\n // Actions read the latest props when they run, so the host doesn't need stable callbacks.\n // `latest` is written as soon as a change is emitted, so a second action in the same tick\n // (the date picker fires a preset then its dates) builds on the first instead of the stale props.\n const current: Latest = { selection, filters: rawFilters, onChange, onSortDirectionChange, scopedFieldIds };\n const latest = useRef(current);\n latest.current = current;\n\n const actions = useMemo(() => {\n const emit = (next: TracesExplorerState) => {\n latest.current.selection = next.selection;\n latest.current.filters = next.filters;\n latest.current.onChange(next);\n };\n const updateSelection = (next: TracesSelection) => {\n if (next === latest.current.selection) return;\n emit({ selection: next, filters: latest.current.filters });\n };\n // A filter change invalidates whatever is selected: the selected row may no longer be listed.\n const updateFilters = (next: TracesFilters) => {\n const { selection: currentSelection, filters: currentFilters } = latest.current;\n if (next === currentFilters) return;\n emit({\n filters: next,\n selection: isSelectionEmpty(currentSelection) ? currentSelection : clearSelection(currentSelection),\n });\n };\n\n const selectionActions: TracesSelectionActions = {\n selectTrace: traceId => updateSelection(selectTrace(latest.current.selection, traceId)),\n closeTrace: () => updateSelection(selectTrace(latest.current.selection, null)),\n selectSpan: spanId => updateSelection(selectSpan(latest.current.selection, spanId)),\n setSpanTab: tab => updateSelection(setSpanTab(latest.current.selection, tab)),\n setSpanView: view => updateSelection(setSpanView(latest.current.selection, view)),\n selectScore: scoreId => updateSelection(selectScore(latest.current.selection, scoreId)),\n highlightSpans: spanIds => updateSelection(highlightSpans(latest.current.selection, spanIds)),\n };\n const filtersActions: TracesFiltersActions = {\n // Re-inject the scope tokens so \"Clear filters\" (which drops every removable item) and any\n // other edit can never drop the scope.\n setFilterTokens: (tokens, groups) => {\n const { filters: base, scopedFieldIds: scoped } = latest.current;\n const scopeTokens = base.tokens.filter(token => scoped.has(token.fieldId));\n updateFilters(applyFilterTokens(base, [...scopeTokens, ...tokens], groups));\n },\n setDatePreset: preset => updateFilters(applyDatePreset(latest.current.filters, preset)),\n setDate: (value, end) => updateFilters(applyDate(latest.current.filters, value, end)),\n setDateRange: (from, to) => updateFilters(applyDateRange(latest.current.filters, from, to)),\n };\n const onSortChange = (direction: TracesSortDirection) => latest.current.onSortDirectionChange(direction);\n return { selectionActions, filtersActions, onSortChange };\n }, []);\n const { selectionActions, filtersActions, onSortChange } = actions;\n\n // Discovery is keyed off the date window with a mount-time `now`, not the list's rolling one,\n // so its query key (and the skeleton) doesn't churn on every auto-refresh tick.\n const [discoveryNow] = useState(() => new Date());\n const discoveryTimeRange = useMemo(\n () => resolveTraceQueryTimeRange(dateFrom, dateTo, discoveryNow),\n [dateFrom, dateTo, discoveryNow],\n );\n\n const listId = listIdForScope(scope);\n const configValue = useMemo<TracesConfigContextValue>(\n () => ({\n listId,\n scopedFieldIds,\n hiddenFieldIds,\n withQueryTrace,\n withFeedback,\n withRootDuration,\n withDiscovery,\n isCapabilitiesLoading: traceQuery.isLoading,\n metricsSupport,\n discoveryTimeRange,\n }),\n [\n listId,\n scopedFieldIds,\n hiddenFieldIds,\n withQueryTrace,\n withFeedback,\n withRootDuration,\n withDiscovery,\n traceQuery.isLoading,\n metricsSupport,\n discoveryTimeRange,\n ],\n );\n\n const contentFiltersApplied = filters.tokens.length > 0 || filters.groups.length > 0;\n const filtersApplied = contentFiltersApplied || filters.datePreset !== initialFilters.datePreset || !!dateTo;\n const filtersValue = useMemo<TracesFiltersContextValue>(\n () => ({\n ...filtersActions,\n filters,\n dateFrom,\n dateTo,\n filtersApplied,\n contentFiltersApplied,\n }),\n [filtersActions, filters, dateFrom, dateTo, filtersApplied, contentFiltersApplied],\n );\n\n // Not memoized: the selection consumers (Layout, List, Panel) also re-render on filter and list\n // changes, which are what re-render Root while the selection stays the same.\n const selectionValue: TracesSelectionContextValue = {\n ...selectionActions,\n selection,\n selectedTraceId: selection.traceId,\n };\n\n return (\n <TracesConfigContext.Provider value={configValue}>\n <TracesFiltersContext.Provider value={filtersValue}>\n <TracesSelectionContext.Provider value={selectionValue}>\n <TracesListProvider sortDirection={sortDirection} onSortChange={onSortChange}>\n <TracesColumnsProvider>{children}</TracesColumnsProvider>\n </TracesListProvider>\n </TracesSelectionContext.Provider>\n </TracesFiltersContext.Provider>\n </TracesConfigContext.Provider>\n );\n}\n"],"names":["selectionActions","filtersActions","onSortChange"],"mappings":"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"}
1
+ {"version":3,"file":"traces-explorer-root.es.js","sources":["../../../../../src/domains/traces/components/traces-explorer/traces-explorer-root.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport { useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { resolveTraceQueryTimeRange } from '../../trace-query-filters';\nimport {\n applyDate,\n applyDatePreset,\n applyDateRange,\n applyFilterTokens,\n clearSelection,\n DEFAULT_TRACES_FILTERS,\n highlightSpans,\n isSelectionEmpty,\n resolveTracesDateWindow,\n sanitizeTracesFilters,\n selectScore,\n selectSpan,\n selectTrace,\n setSpanTab,\n setSpanView,\n} from './traces-explorer-actions';\nimport type {\n TracesExplorerState,\n TracesFilters,\n TracesSelection,\n TracesSortDirection,\n} from './traces-explorer-actions';\nimport { TracesColumnsProvider } from './traces-explorer-columns-provider';\nimport { TracesConfigContext, TracesFiltersContext, TracesSelectionContext } from './traces-explorer-context';\nimport type {\n TracesConfigContextValue,\n TracesExplorerFeatures,\n TracesExplorerScope,\n TracesFiltersActions,\n TracesFiltersContextValue,\n TracesMetricsSupport,\n TracesSelectionActions,\n TracesSelectionContextValue,\n} from './traces-explorer-context';\nimport { TracesListProvider } from './traces-explorer-list-provider';\nimport {\n useFeedbackAvailable,\n useTraceQueryAvailable,\n useTraceQueryDeltaPollingAvailable,\n useTraceQueryDiscoveryAvailable,\n useTraceQueryRootDurationAvailable,\n} from '@/domains/capabilities';\n\nexport type TracesExplorerRootProps = {\n selection: TracesSelection;\n filters: TracesFilters;\n /** Receives the full next state once per user action, so a filter edit and the selection it clears land together. */\n onChange: (next: TracesExplorerState) => void;\n sortDirection: TracesSortDirection;\n onSortDirectionChange: (next: TracesSortDirection) => void;\n /** Pins the explorer to one entity: its fields stay in the filters but never surface as chips. */\n scope?: TracesExplorerScope;\n /** Resolved by the host, which may know better than the storage capabilities (e.g. hosted deployments). */\n metricsSupport: TracesMetricsSupport;\n /** Host switches combined with the server capabilities; a feature runs only when both allow it. */\n features?: TracesExplorerFeatures;\n /** The host's default filters. Filters matching them don't count as applied (e.g. in empty states). */\n initialFilters?: TracesFilters;\n children: ReactNode;\n};\n\nconst SCOPED_FIELD_IDS: ReadonlySet<string> = new Set(['rootEntityType', 'entityId']);\nconst HIDDEN_SCOPED_FIELD_IDS: readonly string[] = ['rootEntityType', 'entityId', 'entityName'];\nconst NO_FIELD_IDS: ReadonlySet<string> = new Set();\nconst NO_HIDDEN_FIELD_IDS: readonly string[] = [];\n\nconst listIdForScope = (scope?: TracesExplorerScope) =>\n scope?.entityType === EntityType.AGENT\n ? 'agent-traces'\n : scope?.entityType === EntityType.WORKFLOW_RUN\n ? 'workflows-traces'\n : 'all-traces';\n\ntype Latest = Pick<TracesExplorerRootProps, 'selection' | 'filters' | 'onChange' | 'onSortDirectionChange'> & {\n scopedFieldIds: ReadonlySet<string>;\n};\n\nexport function TracesExplorerRoot({\n selection,\n filters: rawFilters,\n onChange,\n sortDirection,\n onSortDirectionChange,\n scope,\n metricsSupport,\n features,\n initialFilters = DEFAULT_TRACES_FILTERS,\n children,\n}: TracesExplorerRootProps) {\n // Servers without the trace-query API list through `listTracesLight` and don't expose feedback.\n const traceQuery = useTraceQueryAvailable();\n const withQueryTrace = traceQuery.enabled && features?.traceQuery !== false;\n const withFeedback = useFeedbackAvailable().enabled && features?.feedback !== false;\n const { enabled: withRootDuration } = useTraceQueryRootDurationAvailable();\n const { enabled: withDeltaPolling } = useTraceQueryDeltaPollingAvailable();\n const withDiscovery = useTraceQueryDiscoveryAvailable().enabled && withQueryTrace;\n\n // Entries the server can't query are ignored, never written back: the host keeps its raw value.\n const filters = useMemo(() => sanitizeTracesFilters(rawFilters, withRootDuration), [rawFilters, withRootDuration]);\n\n const isScoped = !!scope;\n const scopedFieldIds = isScoped ? SCOPED_FIELD_IDS : NO_FIELD_IDS;\n const hiddenFieldIds = isScoped ? HIDDEN_SCOPED_FIELD_IDS : NO_HIDDEN_FIELD_IDS;\n\n // Rolling presets pin their start when the preset (or custom bound) changes, not on every render.\n const fromMs = rawFilters.dateFrom?.getTime();\n const toMs = rawFilters.dateTo?.getTime();\n const { dateFrom, dateTo } = useMemo(\n () =>\n resolveTracesDateWindow(\n rawFilters.datePreset,\n fromMs === undefined ? undefined : new Date(fromMs),\n toMs === undefined ? undefined : new Date(toMs),\n ),\n [rawFilters.datePreset, fromMs, toMs],\n );\n\n // Actions read the latest props when they run, so the host doesn't need stable callbacks.\n // `latest` is written as soon as a change is emitted, so a second action in the same tick\n // (the date picker fires a preset then its dates) builds on the first instead of the stale props.\n const current: Latest = { selection, filters: rawFilters, onChange, onSortDirectionChange, scopedFieldIds };\n const latest = useRef(current);\n latest.current = current;\n\n const actions = useMemo(() => {\n const emit = (next: TracesExplorerState) => {\n latest.current.selection = next.selection;\n latest.current.filters = next.filters;\n latest.current.onChange(next);\n };\n const updateSelection = (next: TracesSelection) => {\n if (next === latest.current.selection) return;\n emit({ selection: next, filters: latest.current.filters });\n };\n // A filter change invalidates whatever is selected: the selected row may no longer be listed.\n const updateFilters = (next: TracesFilters) => {\n const { selection: currentSelection, filters: currentFilters } = latest.current;\n if (next === currentFilters) return;\n emit({\n filters: next,\n selection: isSelectionEmpty(currentSelection) ? currentSelection : clearSelection(currentSelection),\n });\n };\n\n const selectionActions: TracesSelectionActions = {\n selectTrace: traceId => updateSelection(selectTrace(latest.current.selection, traceId)),\n closeTrace: () => updateSelection(selectTrace(latest.current.selection, null)),\n selectSpan: spanId => updateSelection(selectSpan(latest.current.selection, spanId)),\n setSpanTab: tab => updateSelection(setSpanTab(latest.current.selection, tab)),\n setSpanView: view => updateSelection(setSpanView(latest.current.selection, view)),\n selectScore: scoreId => updateSelection(selectScore(latest.current.selection, scoreId)),\n highlightSpans: spanIds => updateSelection(highlightSpans(latest.current.selection, spanIds)),\n };\n const filtersActions: TracesFiltersActions = {\n // Re-inject the scope tokens so \"Clear filters\" (which drops every removable item) and any\n // other edit can never drop the scope.\n setFilterTokens: (tokens, groups) => {\n const { filters: base, scopedFieldIds: scoped } = latest.current;\n const scopeTokens = base.tokens.filter(token => scoped.has(token.fieldId));\n updateFilters(applyFilterTokens(base, [...scopeTokens, ...tokens], groups));\n },\n setDatePreset: preset => updateFilters(applyDatePreset(latest.current.filters, preset)),\n setDate: (value, end) => updateFilters(applyDate(latest.current.filters, value, end)),\n setDateRange: (from, to) => updateFilters(applyDateRange(latest.current.filters, from, to)),\n };\n const onSortChange = (direction: TracesSortDirection) => latest.current.onSortDirectionChange(direction);\n return { selectionActions, filtersActions, onSortChange };\n }, []);\n const { selectionActions, filtersActions, onSortChange } = actions;\n\n // Discovery is keyed off the date window with a mount-time `now`, not the list's rolling one,\n // so its query key (and the skeleton) doesn't churn on every auto-refresh tick.\n const [discoveryNow] = useState(() => new Date());\n const discoveryTimeRange = useMemo(\n () => resolveTraceQueryTimeRange(dateFrom, dateTo, discoveryNow),\n [dateFrom, dateTo, discoveryNow],\n );\n\n const listId = listIdForScope(scope);\n const configValue = useMemo<TracesConfigContextValue>(\n () => ({\n listId,\n scopedFieldIds,\n hiddenFieldIds,\n withQueryTrace,\n withFeedback,\n withRootDuration,\n withDeltaPolling,\n withDiscovery,\n isCapabilitiesLoading: traceQuery.isLoading,\n metricsSupport,\n discoveryTimeRange,\n }),\n [\n listId,\n scopedFieldIds,\n hiddenFieldIds,\n withQueryTrace,\n withFeedback,\n withRootDuration,\n withDeltaPolling,\n withDiscovery,\n traceQuery.isLoading,\n metricsSupport,\n discoveryTimeRange,\n ],\n );\n\n const contentFiltersApplied = filters.tokens.length > 0 || filters.groups.length > 0;\n const filtersApplied = contentFiltersApplied || filters.datePreset !== initialFilters.datePreset || !!dateTo;\n const filtersValue = useMemo<TracesFiltersContextValue>(\n () => ({\n ...filtersActions,\n filters,\n dateFrom,\n dateTo,\n filtersApplied,\n contentFiltersApplied,\n }),\n [filtersActions, filters, dateFrom, dateTo, filtersApplied, contentFiltersApplied],\n );\n\n // Not memoized: the selection consumers (Layout, List, Panel) also re-render on filter and list\n // changes, which are what re-render Root while the selection stays the same.\n const selectionValue: TracesSelectionContextValue = {\n ...selectionActions,\n selection,\n selectedTraceId: selection.traceId,\n };\n\n return (\n <TracesConfigContext.Provider value={configValue}>\n <TracesFiltersContext.Provider value={filtersValue}>\n <TracesSelectionContext.Provider value={selectionValue}>\n <TracesListProvider sortDirection={sortDirection} onSortChange={onSortChange}>\n <TracesColumnsProvider>{children}</TracesColumnsProvider>\n </TracesListProvider>\n </TracesSelectionContext.Provider>\n </TracesFiltersContext.Provider>\n </TracesConfigContext.Provider>\n );\n}\n"],"names":["selectionActions","filtersActions","onSortChange"],"mappings":"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"}
@@ -10,7 +10,7 @@ const domains_traces_components_traceTimeRangeChip = require('../trace-time-rang
10
10
  const domains_traces_components_tracesExplorer_tracesExplorerActions = require('./traces-explorer-actions.cjs.js');
11
11
  const domains_traces_components_tracesExplorer_tracesExplorerContext = require('./traces-explorer-context.cjs.js');
12
12
  const domains_traces_components_tracesExplorer_useTracesDiscovery = require('./use-traces-discovery.cjs.js');
13
- require('../../../../filter-bar-chip-DgvuQv6c.cjs');
13
+ require('../../../../filter-bar-chip-C_64m7nX.cjs');
14
14
  const types = require('../../../../types-Ns4ZNp-g.cjs');
15
15
 
16
16
  const NO_SUGGESTIONS = [];
@@ -6,7 +6,7 @@ import { TRACE_TIME_RANGE_ITEM, TRACE_TIME_RANGE_FIELD, TRACE_TIME_RANGE_FIELD_I
6
6
  import { getSelectedEntityOption } from './traces-explorer-actions.es.js';
7
7
  import { useTracesConfig, useTracesFilters } from './traces-explorer-context.es.js';
8
8
  import { useTracesDiscovery } from './use-traces-discovery.es.js';
9
- import '../../../../filter-bar-chip-DM73lTpx.js';
9
+ import '../../../../filter-bar-chip-D2kKMSRA.js';
10
10
  import { i as isFilterBarGroup } from '../../../../types-CIPrYAzY.js';
11
11
 
12
12
  const NO_SUGGESTIONS = [];
@@ -9,11 +9,10 @@ const React = require('react');
9
9
  const domains_traces_traceListColumns = require('../trace-list-columns.cjs.js');
10
10
  const domains_traces_utils_spanUtils = require('../utils/span-utils.cjs.js');
11
11
  const domains_traces_components_traceErrorCell = require('./trace-error-cell.cjs.js');
12
- const dataList = require('../../../data-list-CGD9hzcp.cjs');
13
- const dataListSkeleton = require('../../../data-list-skeleton-sdcaabdX.cjs');
14
- const tracesDataList = require('../../../traces-data-list-CF_LFvnf.cjs');
12
+ const dataList = require('../../../data-list-4t6Ueon8.cjs');
13
+ const dataListSkeleton = require('../../../data-list-skeleton-CVXZYY0k.cjs');
14
+ const tracesDataList = require('../../../traces-data-list-BOHhsgDI.cjs');
15
15
  const useDataListKeyboard = require('../../../use-data-list-keyboard-DF3tLe10.cjs');
16
- const dataListTop = require('../../../data-list-top-DJh08vFA.cjs');
17
16
  const dropdownMenu = require('../../../dropdown-menu-CsynT1aD.cjs');
18
17
  const Txt = require('../../../Txt-CIS2G5Jx.cjs');
19
18
  const primitives_transitions = require('../../../primitives/transitions.cjs.js');
@@ -137,7 +136,7 @@ function TracesListView({
137
136
  }),
138
137
  columnPreferences.metadataKeys.map((key) => /* @__PURE__ */ jsxRuntime.jsx(tracesDataList.TracesDataList.TopCellWithTooltip, { tooltip: key, children: key }, key))
139
138
  ] }),
140
- isLoading ? /* @__PURE__ */ jsxRuntime.jsx(dataListSkeleton.DataListSkeletonRows, { columnCount: dataListTop.splitColumns(columns).length }) : traces.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(
139
+ isLoading ? /* @__PURE__ */ jsxRuntime.jsx(dataListSkeleton.DataListSkeletonRows, { columnCount: dataList.splitColumns(columns).length }) : traces.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(
141
140
  tracesDataList.TracesDataList.NoMatch,
142
141
  {
143
142
  message: filtersApplied ? "No traces found for applied filters" : "No traces found yet"