@mastra/playground-ui 65.0.0-alpha.8 → 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 (702) 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/{code-block-CAV4Flrx.cjs → code-block-BSJzgBt1.cjs} +2 -2
  6. package/dist/{code-block-CAV4Flrx.cjs.map → code-block-BSJzgBt1.cjs.map} +1 -1
  7. package/dist/{code-block-BB-5HSl3.js → code-block-JWCkGm3Q.js} +2 -2
  8. package/dist/{code-block-BB-5HSl3.js.map → code-block-JWCkGm3Q.js.map} +1 -1
  9. package/dist/{code-editor-CbyCb7CW.cjs → code-editor-4ukTuvqG.cjs} +18 -2
  10. package/dist/code-editor-4ukTuvqG.cjs.map +1 -0
  11. package/dist/{code-editor-DOv4jc-0.js → code-editor-8qu58Npy.js} +18 -2
  12. package/dist/code-editor-8qu58Npy.js.map +1 -0
  13. package/dist/{combobox-BCoCVZHs.js → combobox-Cff50hgT.js} +37 -49
  14. package/dist/combobox-Cff50hgT.js.map +1 -0
  15. package/dist/{combobox-DbZAWh8q.cjs → combobox-RlGW9Erz.cjs} +37 -49
  16. package/dist/combobox-RlGW9Erz.cjs.map +1 -0
  17. package/dist/components/BillingIllustration.cjs.js +524 -1
  18. package/dist/components/BillingIllustration.cjs.js.map +1 -1
  19. package/dist/components/BillingIllustration.es.js +524 -1
  20. package/dist/components/BillingIllustration.es.js.map +1 -1
  21. package/dist/components/Button.cjs.js +1 -1
  22. package/dist/components/Button.es.js +1 -1
  23. package/dist/components/CodeBlock.cjs.js +1 -1
  24. package/dist/components/CodeBlock.es.js +1 -1
  25. package/dist/components/CodeEditor.cjs.js +1 -1
  26. package/dist/components/CodeEditor.es.js +1 -1
  27. package/dist/components/Combobox.cjs.js +1 -1
  28. package/dist/components/Combobox.es.js +1 -1
  29. package/dist/components/CommandPalette.cjs.js +1 -1
  30. package/dist/components/CommandPalette.es.js +1 -1
  31. package/dist/components/Comment.cjs.js +1 -1
  32. package/dist/components/Comment.es.js +1 -1
  33. package/dist/components/DataCodeSection.cjs.js +1 -1
  34. package/dist/components/DataCodeSection.es.js +1 -1
  35. package/dist/components/DataList.cjs.js +15 -17
  36. package/dist/components/DataList.cjs.js.map +1 -1
  37. package/dist/components/DataList.es.js +4 -5
  38. package/dist/components/DataList.es.js.map +1 -1
  39. package/dist/components/DataPanel.cjs.js +1 -1
  40. package/dist/components/DataPanel.es.js +1 -1
  41. package/dist/components/DateTimePicker.cjs.js +2 -2
  42. package/dist/components/DateTimePicker.es.js +2 -2
  43. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  44. package/dist/components/DateTimeRangePicker.es.js +1 -1
  45. package/dist/components/EnvironmentVariablesEditor.cjs.js +2 -2
  46. package/dist/components/EnvironmentVariablesEditor.es.js +2 -2
  47. package/dist/components/Field.cjs.js +1 -1
  48. package/dist/components/Field.es.js +1 -1
  49. package/dist/components/FilterBar.cjs.js +8 -844
  50. package/dist/components/FilterBar.cjs.js.map +1 -1
  51. package/dist/components/FilterBar.es.js +4 -841
  52. package/dist/components/FilterBar.es.js.map +1 -1
  53. package/dist/components/FormFieldBlocks.cjs.js +1 -1
  54. package/dist/components/FormFieldBlocks.es.js +1 -1
  55. package/dist/components/JSONSchemaForm.cjs.js +2 -2
  56. package/dist/components/JSONSchemaForm.es.js +2 -2
  57. package/dist/components/Kbd.cjs.js +1 -1
  58. package/dist/components/Kbd.es.js +1 -1
  59. package/dist/components/ListSearch.cjs.js +1 -1
  60. package/dist/components/ListSearch.es.js +1 -1
  61. package/dist/components/LogsDataList.cjs.js +5 -2
  62. package/dist/components/LogsDataList.cjs.js.map +1 -1
  63. package/dist/components/LogsDataList.es.js +5 -2
  64. package/dist/components/LogsDataList.es.js.map +1 -1
  65. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  66. package/dist/components/MarkdownRenderer.es.js +1 -1
  67. package/dist/components/PageLayout.cjs.js +3 -56
  68. package/dist/components/PageLayout.cjs.js.map +1 -1
  69. package/dist/components/PageLayout.es.js +1 -58
  70. package/dist/components/PageLayout.es.js.map +1 -1
  71. package/dist/components/PropertyFilter.cjs.js +2 -2
  72. package/dist/components/PropertyFilter.es.js +2 -2
  73. package/dist/components/RuleBuilder.cjs.js +1 -1
  74. package/dist/components/RuleBuilder.es.js +1 -1
  75. package/dist/components/SavedViews.cjs.js +1 -1
  76. package/dist/components/SavedViews.es.js +1 -1
  77. package/dist/components/SearchInput.cjs.js +1 -1
  78. package/dist/components/SearchInput.es.js +1 -1
  79. package/dist/components/Section.cjs.js +1 -1
  80. package/dist/components/Section.es.js +1 -1
  81. package/dist/components/Select.cjs.js +2 -1
  82. package/dist/components/Select.cjs.js.map +1 -1
  83. package/dist/components/Select.es.js +1 -1
  84. package/dist/components/SideDialog.cjs.js +225 -2
  85. package/dist/components/SideDialog.cjs.js.map +1 -1
  86. package/dist/components/SideDialog.es.js +210 -1
  87. package/dist/components/SideDialog.es.js.map +1 -1
  88. package/dist/components/Sidebar.cjs.js +64 -60
  89. package/dist/components/Sidebar.cjs.js.map +1 -1
  90. package/dist/components/Sidebar.es.js +65 -62
  91. package/dist/components/Sidebar.es.js.map +1 -1
  92. package/dist/components/Workflow.cjs.js +3 -3
  93. package/dist/components/Workflow.es.js +3 -3
  94. package/dist/components/ai/activity.cjs.js +2 -2
  95. package/dist/components/ai/activity.es.js +2 -2
  96. package/dist/components/ai/ask-user.cjs.js +1 -1
  97. package/dist/components/ai/ask-user.es.js +1 -1
  98. package/dist/components/ai/plan.cjs.js +1 -1
  99. package/dist/components/ai/plan.es.js +1 -1
  100. package/dist/components/ai/tool-approval.cjs.js +1 -1
  101. package/dist/components/ai/tool-approval.es.js +1 -1
  102. package/dist/components/ai/tool-call.cjs.js +1 -1
  103. package/dist/components/ai/tool-call.es.js +1 -1
  104. package/dist/{data-code-section-BjyHoHEB.cjs → data-code-section-BsvdKW08.cjs} +2 -2
  105. package/dist/{data-code-section-BjyHoHEB.cjs.map → data-code-section-BsvdKW08.cjs.map} +1 -1
  106. package/dist/{data-code-section-BWzfg-1n.js → data-code-section-y1BMLr3c.js} +2 -2
  107. package/dist/{data-code-section-BWzfg-1n.js.map → data-code-section-y1BMLr3c.js.map} +1 -1
  108. package/dist/{data-list-top-DJh08vFA.cjs → data-list-4t6Ueon8.cjs} +365 -16
  109. package/dist/data-list-4t6Ueon8.cjs.map +1 -0
  110. package/dist/{data-list-top-T-mtdIUp.js → data-list-BQMBFAyK.js} +357 -7
  111. package/dist/data-list-BQMBFAyK.js.map +1 -0
  112. package/dist/{data-list-skeleton-sdcaabdX.cjs → data-list-skeleton-CVXZYY0k.cjs} +6 -6
  113. package/dist/{data-list-skeleton-sdcaabdX.cjs.map → data-list-skeleton-CVXZYY0k.cjs.map} +1 -1
  114. package/dist/{data-list-skeleton-bNfITSHs.js → data-list-skeleton-D54r1ycU.js} +3 -3
  115. package/dist/{data-list-skeleton-bNfITSHs.js.map → data-list-skeleton-D54r1ycU.js.map} +1 -1
  116. package/dist/{data-panel-CUqcB4Vn.js → data-panel-DSgidnnv.js} +2 -2
  117. package/dist/{data-panel-CUqcB4Vn.js.map → data-panel-DSgidnnv.js.map} +1 -1
  118. package/dist/{data-panel-CGRPVnEe.cjs → data-panel-xqrai98b.cjs} +2 -2
  119. package/dist/{data-panel-CGRPVnEe.cjs.map → data-panel-xqrai98b.cjs.map} +1 -1
  120. package/dist/{date-time-range-picker-CcnDMZJu.js → date-time-range-picker-BnYWCqei.js} +3 -3
  121. package/dist/{date-time-range-picker-CcnDMZJu.js.map → date-time-range-picker-BnYWCqei.js.map} +1 -1
  122. package/dist/{date-time-range-picker-CXGab8Nj.cjs → date-time-range-picker-_2RJBOUn.cjs} +3 -3
  123. package/dist/{date-time-range-picker-CXGab8Nj.cjs.map → date-time-range-picker-_2RJBOUn.cjs.map} +1 -1
  124. package/dist/domains/capabilities.cjs.js +4 -0
  125. package/dist/domains/capabilities.cjs.js.map +1 -1
  126. package/dist/domains/capabilities.es.js +1 -1
  127. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
  128. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +1 -1
  129. package/dist/domains/chat/messages/dataset-save-action.cjs.js +4 -3
  130. package/dist/domains/chat/messages/dataset-save-action.cjs.js.map +1 -1
  131. package/dist/domains/chat/messages/dataset-save-action.es.js +4 -3
  132. package/dist/domains/chat/messages/dataset-save-action.es.js.map +1 -1
  133. package/dist/domains/chat/messages/message-row.cjs.js +1 -1
  134. package/dist/domains/chat/messages/message-row.es.js +1 -1
  135. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +23 -3
  136. package/dist/domains/chat/messages/notification-signal-notice.cjs.js.map +1 -1
  137. package/dist/domains/chat/messages/notification-signal-notice.es.js +24 -6
  138. package/dist/domains/chat/messages/notification-signal-notice.es.js.map +1 -1
  139. package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
  140. package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
  141. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  142. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  143. package/dist/domains/chat/messages/signal-data.cjs.js +12 -0
  144. package/dist/domains/chat/messages/signal-data.cjs.js.map +1 -1
  145. package/dist/domains/chat/messages/signal-data.es.js +12 -1
  146. package/dist/domains/chat/messages/signal-data.es.js.map +1 -1
  147. package/dist/domains/chat/messages/skill-message.cjs.js +1 -1
  148. package/dist/domains/chat/messages/skill-message.es.js +1 -1
  149. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  150. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  151. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +2 -2
  152. package/dist/domains/chat/tools/badges/agent-badge.es.js +2 -2
  153. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  154. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  155. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +1 -1
  156. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +1 -1
  157. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +2 -2
  158. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +2 -2
  159. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +1 -1
  160. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +1 -1
  161. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +1 -1
  162. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +1 -1
  163. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  164. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  165. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
  166. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  167. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +2 -2
  168. package/dist/domains/chat/tools/badges/tool-badge.es.js +2 -2
  169. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +5 -1
  170. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
  171. package/dist/domains/chat/tools/badges/workflow-badge.es.js +5 -1
  172. package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
  173. package/dist/domains/chat/tools/submit-plan-tool.cjs.js +1 -1
  174. package/dist/domains/chat/tools/submit-plan-tool.es.js +1 -1
  175. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  176. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  177. package/dist/domains/chat.cjs.js +1 -0
  178. package/dist/domains/chat.cjs.js.map +1 -1
  179. package/dist/domains/chat.es.js +1 -1
  180. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.cjs.js +334 -0
  181. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.cjs.js.map +1 -0
  182. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.d.ts +2 -0
  183. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.es.js +330 -0
  184. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.es.js.map +1 -0
  185. package/dist/domains/datasets/components/add-dataset-item-dialog/build-add-item-payload.cjs.js +78 -0
  186. package/dist/domains/datasets/components/add-dataset-item-dialog/build-add-item-payload.cjs.js.map +1 -0
  187. package/dist/domains/datasets/components/add-dataset-item-dialog/build-add-item-payload.d.ts +2 -0
  188. package/dist/domains/datasets/components/add-dataset-item-dialog/build-add-item-payload.es.js +74 -0
  189. package/dist/domains/datasets/components/add-dataset-item-dialog/build-add-item-payload.es.js.map +1 -0
  190. package/dist/domains/datasets/components/add-dataset-item-dialog/collapsible-settings-row.cjs.js +25 -0
  191. package/dist/domains/datasets/components/add-dataset-item-dialog/collapsible-settings-row.cjs.js.map +1 -0
  192. package/dist/domains/datasets/components/add-dataset-item-dialog/collapsible-settings-row.d.ts +2 -0
  193. package/dist/domains/datasets/components/add-dataset-item-dialog/collapsible-settings-row.es.js +21 -0
  194. package/dist/domains/datasets/components/add-dataset-item-dialog/collapsible-settings-row.es.js.map +1 -0
  195. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-field-errors.cjs.js +22 -0
  196. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-field-errors.cjs.js.map +1 -0
  197. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-field-errors.d.ts +2 -0
  198. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-field-errors.es.js +18 -0
  199. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-field-errors.es.js.map +1 -0
  200. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.cjs.js +54 -0
  201. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.cjs.js.map +1 -0
  202. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.d.ts +2 -0
  203. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.es.js +50 -0
  204. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.es.js.map +1 -0
  205. package/dist/domains/datasets/components/add-dataset-item-dialog/field-errors.cjs.js +21 -0
  206. package/dist/domains/datasets/components/add-dataset-item-dialog/field-errors.cjs.js.map +1 -0
  207. package/dist/domains/datasets/components/add-dataset-item-dialog/field-errors.d.ts +2 -0
  208. package/dist/domains/datasets/components/add-dataset-item-dialog/field-errors.es.js +17 -0
  209. package/dist/domains/datasets/components/add-dataset-item-dialog/field-errors.es.js.map +1 -0
  210. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.cjs.js +180 -0
  211. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.cjs.js.map +1 -0
  212. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.d.ts +2 -0
  213. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.es.js +176 -0
  214. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.es.js.map +1 -0
  215. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-types.cjs.js +57 -0
  216. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-types.cjs.js.map +1 -0
  217. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-types.d.ts +2 -0
  218. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-types.es.js +45 -0
  219. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-types.es.js.map +1 -0
  220. package/dist/domains/datasets/components/add-dataset-item-dialog/use-target-agent-tools.cjs.js +17 -0
  221. package/dist/domains/datasets/components/add-dataset-item-dialog/use-target-agent-tools.cjs.js.map +1 -0
  222. package/dist/domains/datasets/components/add-dataset-item-dialog/use-target-agent-tools.d.ts +2 -0
  223. package/dist/domains/datasets/components/add-dataset-item-dialog/use-target-agent-tools.es.js +13 -0
  224. package/dist/domains/datasets/components/add-dataset-item-dialog/use-target-agent-tools.es.js.map +1 -0
  225. package/dist/domains/datasets/components/add-dataset-item-dialog.cjs.js +10 -0
  226. package/dist/domains/datasets/components/add-dataset-item-dialog.cjs.js.map +1 -0
  227. package/dist/domains/datasets/components/add-dataset-item-dialog.d.ts +2 -0
  228. package/dist/domains/datasets/components/add-dataset-item-dialog.es.js +2 -0
  229. package/dist/domains/datasets/components/add-dataset-item-dialog.es.js.map +1 -0
  230. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +4 -4
  231. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +4 -4
  232. package/dist/domains/datasets/components.cjs.js +2 -0
  233. package/dist/domains/datasets/components.cjs.js.map +1 -1
  234. package/dist/domains/datasets/components.es.js +1 -0
  235. package/dist/domains/datasets/components.es.js.map +1 -1
  236. package/dist/domains/datasets.cjs.js +2 -0
  237. package/dist/domains/datasets.cjs.js.map +1 -1
  238. package/dist/domains/datasets.es.js +1 -0
  239. package/dist/domains/datasets.es.js.map +1 -1
  240. package/dist/domains/logs/components/log-data-panel.cjs.js +1 -1
  241. package/dist/domains/logs/components/log-data-panel.es.js +1 -1
  242. package/dist/domains/logs/components/logs-list-view.cjs.js +3 -2
  243. package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
  244. package/dist/domains/logs/components/logs-list-view.es.js +3 -2
  245. package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
  246. package/dist/domains/logs/hooks/use-logs-filter-persistence.cjs.js.map +1 -1
  247. package/dist/domains/logs/hooks/use-logs-filter-persistence.es.js.map +1 -1
  248. package/dist/domains/logs/hooks/use-logs-url-state.cjs.js.map +1 -1
  249. package/dist/domains/logs/hooks/use-logs-url-state.es.js.map +1 -1
  250. package/dist/domains/memory/components/observation-detail-view.cjs.js +1 -1
  251. package/dist/domains/memory/components/observation-detail-view.es.js +1 -1
  252. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  253. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  254. package/dist/domains/metrics/drilldown.cjs.js +1 -1
  255. package/dist/domains/metrics/drilldown.es.js +1 -1
  256. package/dist/domains/metrics/metrics-filters.cjs.js +1 -1
  257. package/dist/domains/metrics/metrics-filters.es.js +1 -1
  258. package/dist/domains/observability/components/trace-as-item-dialog.cjs.js +45 -38
  259. package/dist/domains/observability/components/trace-as-item-dialog.cjs.js.map +1 -1
  260. package/dist/domains/observability/components/trace-as-item-dialog.es.js +45 -38
  261. package/dist/domains/observability/components/trace-as-item-dialog.es.js.map +1 -1
  262. package/dist/domains/scores/components/score-as-item-dialog.cjs.js +1 -0
  263. package/dist/domains/scores/components/score-as-item-dialog.cjs.js.map +1 -1
  264. package/dist/domains/scores/components/score-as-item-dialog.es.js +1 -0
  265. package/dist/domains/scores/components/score-as-item-dialog.es.js.map +1 -1
  266. package/dist/domains/scores/components/score-data-panel.cjs.js +1 -1
  267. package/dist/domains/scores/components/score-data-panel.es.js +1 -1
  268. package/dist/domains/scores/components/span-scoring.cjs.js +1 -1
  269. package/dist/domains/scores/components/span-scoring.es.js +1 -1
  270. package/dist/domains/scores/components/trace-scores-tab.cjs.js +2 -1
  271. package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
  272. package/dist/domains/scores/components/trace-scores-tab.es.js +2 -1
  273. package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
  274. package/dist/domains/traces/components/span-data-panel-view.cjs.js +1 -1
  275. package/dist/domains/traces/components/span-data-panel-view.es.js +1 -1
  276. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
  277. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  278. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  279. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  280. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
  281. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
  282. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
  283. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
  284. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +2 -2
  285. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
  286. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  287. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  288. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  289. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  290. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +1 -1
  291. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +1 -1
  292. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  293. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  294. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  295. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  296. package/dist/domains/traces/components/thread-view-by-trace.cjs.js +2 -0
  297. package/dist/domains/traces/components/thread-view-by-trace.cjs.js.map +1 -1
  298. package/dist/domains/traces/components/thread-view-by-trace.es.js +2 -0
  299. package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
  300. package/dist/domains/traces/components/trace-columns-menu.cjs.js +2 -2
  301. package/dist/domains/traces/components/trace-columns-menu.es.js +2 -2
  302. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +3 -8
  303. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  304. package/dist/domains/traces/components/trace-data-panel-view.es.js +4 -9
  305. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  306. package/dist/domains/traces/components/trace-data-panel.cjs.js +4 -0
  307. package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
  308. package/dist/domains/traces/components/trace-data-panel.es.js +4 -0
  309. package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
  310. package/dist/domains/traces/components/trace-error-cell.cjs.js +3 -1
  311. package/dist/domains/traces/components/trace-error-cell.cjs.js.map +1 -1
  312. package/dist/domains/traces/components/trace-error-cell.es.js +3 -1
  313. package/dist/domains/traces/components/trace-error-cell.es.js.map +1 -1
  314. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  315. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  316. package/dist/domains/traces/components/trace-span-panel.cjs.js +0 -2
  317. package/dist/domains/traces/components/trace-span-panel.cjs.js.map +1 -1
  318. package/dist/domains/traces/components/trace-span-panel.es.js +0 -2
  319. package/dist/domains/traces/components/trace-span-panel.es.js.map +1 -1
  320. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  321. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  322. package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
  323. package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
  324. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +3 -3
  325. package/dist/domains/traces/components/trace-time-range-chip.es.js +3 -3
  326. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.cjs.js +117 -0
  327. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.cjs.js.map +1 -0
  328. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.d.ts +2 -0
  329. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.es.js +94 -0
  330. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.es.js.map +1 -0
  331. package/dist/domains/traces/components/traces-explorer/traces-explorer-auto-refresh.cjs.js +20 -0
  332. package/dist/domains/traces/components/traces-explorer/traces-explorer-auto-refresh.cjs.js.map +1 -0
  333. package/dist/domains/traces/components/traces-explorer/traces-explorer-auto-refresh.d.ts +2 -0
  334. package/dist/domains/traces/components/traces-explorer/traces-explorer-auto-refresh.es.js +16 -0
  335. package/dist/domains/traces/components/traces-explorer/traces-explorer-auto-refresh.es.js.map +1 -0
  336. package/dist/domains/traces/components/traces-explorer/traces-explorer-columns-menu.cjs.js +39 -0
  337. package/dist/domains/traces/components/traces-explorer/traces-explorer-columns-menu.cjs.js.map +1 -0
  338. package/dist/domains/traces/components/traces-explorer/traces-explorer-columns-menu.d.ts +2 -0
  339. package/dist/domains/traces/components/traces-explorer/traces-explorer-columns-menu.es.js +35 -0
  340. package/dist/domains/traces/components/traces-explorer/traces-explorer-columns-menu.es.js.map +1 -0
  341. package/dist/domains/traces/components/traces-explorer/traces-explorer-columns-provider.cjs.js +16 -0
  342. package/dist/domains/traces/components/traces-explorer/traces-explorer-columns-provider.cjs.js.map +1 -0
  343. package/dist/domains/traces/components/traces-explorer/traces-explorer-columns-provider.d.ts +2 -0
  344. package/dist/domains/traces/components/traces-explorer/traces-explorer-columns-provider.es.js +12 -0
  345. package/dist/domains/traces/components/traces-explorer/traces-explorer-columns-provider.es.js.map +1 -0
  346. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.cjs.js +56 -0
  347. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.cjs.js.map +1 -0
  348. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.d.ts +2 -0
  349. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.es.js +40 -0
  350. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.es.js.map +1 -0
  351. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +78 -0
  352. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js.map +1 -0
  353. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.d.ts +2 -0
  354. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +72 -0
  355. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js.map +1 -0
  356. package/dist/domains/traces/components/traces-explorer/traces-explorer-layout.cjs.js +52 -0
  357. package/dist/domains/traces/components/traces-explorer/traces-explorer-layout.cjs.js.map +1 -0
  358. package/dist/domains/traces/components/traces-explorer/traces-explorer-layout.d.ts +2 -0
  359. package/dist/domains/traces/components/traces-explorer/traces-explorer-layout.es.js +48 -0
  360. package/dist/domains/traces/components/traces-explorer/traces-explorer-layout.es.js.map +1 -0
  361. package/dist/domains/traces/components/traces-explorer/traces-explorer-list-provider.cjs.js +71 -0
  362. package/dist/domains/traces/components/traces-explorer/traces-explorer-list-provider.cjs.js.map +1 -0
  363. package/dist/domains/traces/components/traces-explorer/traces-explorer-list-provider.d.ts +2 -0
  364. package/dist/domains/traces/components/traces-explorer/traces-explorer-list-provider.es.js +67 -0
  365. package/dist/domains/traces/components/traces-explorer/traces-explorer-list-provider.es.js.map +1 -0
  366. package/dist/domains/traces/components/traces-explorer/traces-explorer-list.cjs.js +58 -0
  367. package/dist/domains/traces/components/traces-explorer/traces-explorer-list.cjs.js.map +1 -0
  368. package/dist/domains/traces/components/traces-explorer/traces-explorer-list.d.ts +2 -0
  369. package/dist/domains/traces/components/traces-explorer/traces-explorer-list.es.js +54 -0
  370. package/dist/domains/traces/components/traces-explorer/traces-explorer-list.es.js.map +1 -0
  371. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js +134 -0
  372. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js.map +1 -0
  373. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.d.ts +2 -0
  374. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js +130 -0
  375. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js.map +1 -0
  376. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js +154 -0
  377. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js.map +1 -0
  378. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.d.ts +2 -0
  379. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js +150 -0
  380. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js.map +1 -0
  381. package/dist/domains/traces/components/traces-explorer/use-traces-discovery.cjs.js +14 -0
  382. package/dist/domains/traces/components/traces-explorer/use-traces-discovery.cjs.js.map +1 -0
  383. package/dist/domains/traces/components/traces-explorer/use-traces-discovery.d.ts +2 -0
  384. package/dist/domains/traces/components/traces-explorer/use-traces-discovery.es.js +10 -0
  385. package/dist/domains/traces/components/traces-explorer/use-traces-discovery.es.js.map +1 -0
  386. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js +86 -0
  387. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js.map +1 -0
  388. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.d.ts +2 -0
  389. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +81 -0
  390. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js.map +1 -0
  391. package/dist/domains/traces/components/traces-explorer.cjs.js +42 -0
  392. package/dist/domains/traces/components/traces-explorer.cjs.js.map +1 -0
  393. package/dist/domains/traces/components/traces-explorer.d.ts +2 -0
  394. package/dist/domains/traces/components/traces-explorer.es.js +25 -0
  395. package/dist/domains/traces/components/traces-explorer.es.js.map +1 -0
  396. package/dist/domains/traces/components/traces-list-view.cjs.js +4 -5
  397. package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
  398. package/dist/domains/traces/components/traces-list-view.es.js +3 -4
  399. package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
  400. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +4 -1
  401. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  402. package/dist/domains/traces/components/traces-page-skeleton.es.js +4 -1
  403. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  404. package/dist/domains/traces/hooks/use-traces-list-source.cjs.js +38 -10
  405. package/dist/domains/traces/hooks/use-traces-list-source.cjs.js.map +1 -1
  406. package/dist/domains/traces/hooks/use-traces-list-source.es.js +39 -13
  407. package/dist/domains/traces/hooks/use-traces-list-source.es.js.map +1 -1
  408. package/dist/domains/traces/hooks.cjs.js +0 -4
  409. package/dist/domains/traces/hooks.cjs.js.map +1 -1
  410. package/dist/domains/traces/hooks.es.js +0 -2
  411. package/dist/domains/traces/hooks.es.js.map +1 -1
  412. package/dist/domains/traces/trace-filters.cjs.js +1 -1
  413. package/dist/domains/traces/trace-filters.es.js +1 -1
  414. package/dist/domains/traces/trace-query-filters.cjs.js +2 -1
  415. package/dist/domains/traces/trace-query-filters.cjs.js.map +1 -1
  416. package/dist/domains/traces/trace-query-filters.es.js +1 -1
  417. package/dist/domains/traces.cjs.js +2 -5
  418. package/dist/domains/traces.cjs.js.map +1 -1
  419. package/dist/domains/traces.es.js +1 -3
  420. package/dist/domains/traces.es.js.map +1 -1
  421. package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
  422. package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
  423. package/dist/domains/workflows/components/workflow-step-detail.cjs.js +2 -2
  424. package/dist/domains/workflows/components/workflow-step-detail.es.js +2 -2
  425. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
  426. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
  427. package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
  428. package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
  429. package/dist/domains/workflows/workflow/data/workflow-data-inspector.cjs.js +1 -1
  430. package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +1 -1
  431. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +2 -2
  432. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +2 -2
  433. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +2 -2
  434. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +2 -2
  435. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.cjs.js +1 -1
  436. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +1 -1
  437. package/dist/domains/workflows/workflow/workflow-body-graph.cjs.js +1 -1
  438. package/dist/domains/workflows/workflow/workflow-body-graph.es.js +1 -1
  439. package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
  440. package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
  441. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.cjs.js +1 -1
  442. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.es.js +1 -1
  443. package/dist/domains/workflows/workflow/workflow-graph-inner.cjs.js +1 -1
  444. package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +1 -1
  445. package/dist/domains/workflows/workflow/workflow-graph-node.cjs.js +1 -1
  446. package/dist/domains/workflows/workflow/workflow-graph-node.es.js +1 -1
  447. package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +1 -1
  448. package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +1 -1
  449. package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +2 -2
  450. package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +2 -2
  451. package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +1 -1
  452. package/dist/domains/workflows/workflow/workflow-run-data.es.js +1 -1
  453. package/dist/domains/workflows/workflow/workflow-status.cjs.js +1 -1
  454. package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
  455. package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +1 -1
  456. package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +1 -1
  457. package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +1 -1
  458. package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +1 -1
  459. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +2 -2
  460. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +2 -2
  461. package/dist/domains/workspace/components/workspace-active-file.cjs.js +1 -1
  462. package/dist/domains/workspace/components/workspace-active-file.es.js +1 -1
  463. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +4 -4
  464. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +4 -4
  465. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +2 -2
  466. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +2 -2
  467. package/dist/ee/signals/components/entity-index-list.cjs.js +3 -1
  468. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  469. package/dist/ee/signals/components/entity-index-list.es.js +3 -1
  470. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  471. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +5 -3
  472. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  473. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +5 -3
  474. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  475. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +1 -1
  476. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +1 -1
  477. package/dist/ee/signals/trace-intelligence-explainer.cjs.js +1 -0
  478. package/dist/ee/signals/trace-intelligence-explainer.cjs.js.map +1 -1
  479. package/dist/ee/signals/trace-intelligence-explainer.es.js +1 -0
  480. package/dist/ee/signals/trace-intelligence-explainer.es.js.map +1 -1
  481. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +2 -2
  482. package/dist/ee/topics/components/topic-trace-summary-list.es.js +2 -2
  483. package/dist/{field-BCU5ZtWV.cjs → field-CZ5fldpM.cjs} +2 -1
  484. package/dist/{field-BCU5ZtWV.cjs.map → field-CZ5fldpM.cjs.map} +1 -1
  485. package/dist/{field-Dl1zeXTv.js → field-CfA5-ixH.js} +2 -1
  486. package/dist/{field-Dl1zeXTv.js.map → field-CfA5-ixH.js.map} +1 -1
  487. package/dist/filter-bar-CjBb01b6.cjs +849 -0
  488. package/dist/filter-bar-CjBb01b6.cjs.map +1 -0
  489. package/dist/{filter-bar-chip-DgvuQv6c.cjs → filter-bar-chip-C_64m7nX.cjs} +2 -2
  490. package/dist/{filter-bar-chip-DgvuQv6c.cjs.map → filter-bar-chip-C_64m7nX.cjs.map} +1 -1
  491. package/dist/{filter-bar-chip-C9CXOudu.js → filter-bar-chip-D2kKMSRA.js} +3 -3
  492. package/dist/{filter-bar-chip-C9CXOudu.js.map → filter-bar-chip-D2kKMSRA.js.map} +1 -1
  493. package/dist/filter-bar-pXSJt2ye.js +842 -0
  494. package/dist/filter-bar-pXSJt2ye.js.map +1 -0
  495. package/dist/{kbd-Xgv5HKEi.cjs → kbd-B2zbS_A6.cjs} +2 -2
  496. package/dist/{kbd-Xgv5HKEi.cjs.map → kbd-B2zbS_A6.cjs.map} +1 -1
  497. package/dist/{kbd-7Xx2pm9f.js → kbd-CYtMrOov.js} +2 -2
  498. package/dist/{kbd-7Xx2pm9f.js.map → kbd-CYtMrOov.js.map} +1 -1
  499. package/dist/layout/tabbed-container.cjs.js +3 -3
  500. package/dist/layout/tabbed-container.es.js +3 -3
  501. package/dist/lib/form/components/boolean-field.cjs.js +1 -1
  502. package/dist/lib/form/components/boolean-field.es.js +1 -1
  503. package/dist/lib/form/components/field-wrapper.cjs.js +1 -1
  504. package/dist/lib/form/components/field-wrapper.es.js +1 -1
  505. package/dist/lib/form/components/select-field.cjs.js +1 -1
  506. package/dist/lib/form/components/select-field.es.js +1 -1
  507. package/dist/{list-search-ByJdIxIh.js → list-search-8jVOq9LK.js} +2 -2
  508. package/dist/{list-search-ByJdIxIh.js.map → list-search-8jVOq9LK.js.map} +1 -1
  509. package/dist/{list-search-DNJVeHmK.cjs → list-search-C7ckmZHa.cjs} +2 -2
  510. package/dist/{list-search-DNJVeHmK.cjs.map → list-search-C7ckmZHa.cjs.map} +1 -1
  511. package/dist/{logs-data-list-DCj8Pj77.cjs → logs-data-list-C4Z4rw62.cjs} +21 -22
  512. package/dist/{logs-data-list-DCj8Pj77.cjs.map → logs-data-list-C4Z4rw62.cjs.map} +1 -1
  513. package/dist/{logs-data-list-Db5dBRmc.js → logs-data-list-CL3iq_6r.js} +2 -3
  514. package/dist/{logs-data-list-Db5dBRmc.js.map → logs-data-list-CL3iq_6r.js.map} +1 -1
  515. package/dist/{markdown-renderer-CQ_pSSO7.cjs → markdown-renderer-73CdjgS4.cjs} +2 -2
  516. package/dist/{markdown-renderer-CQ_pSSO7.cjs.map → markdown-renderer-73CdjgS4.cjs.map} +1 -1
  517. package/dist/{markdown-renderer-DEoJ5aBR.js → markdown-renderer-Qv9-1YIp.js} +2 -2
  518. package/dist/{markdown-renderer-DEoJ5aBR.js.map → markdown-renderer-Qv9-1YIp.js.map} +1 -1
  519. package/dist/new/settings.cjs.js +3 -2
  520. package/dist/new/settings.cjs.js.map +1 -1
  521. package/dist/new/settings.es.js +2 -1
  522. package/dist/new/settings.es.js.map +1 -1
  523. package/dist/{notification-activity-BWXHmlTn.js → notification-activity-BRW1Xlj1.js} +9 -5
  524. package/dist/notification-activity-BRW1Xlj1.js.map +1 -0
  525. package/dist/{notification-activity-BSNuqJDd.cjs → notification-activity-DAZOALWI.cjs} +9 -5
  526. package/dist/notification-activity-DAZOALWI.cjs.map +1 -0
  527. package/dist/page-layout-D1AXJJrp.cjs +61 -0
  528. package/dist/page-layout-D1AXJJrp.cjs.map +1 -0
  529. package/dist/page-layout-DCMg_kJB.js +59 -0
  530. package/dist/page-layout-DCMg_kJB.js.map +1 -0
  531. package/dist/{plan-TYss51JK.cjs → plan-DBvoFFHO.cjs} +2 -2
  532. package/dist/{plan-TYss51JK.cjs.map → plan-DBvoFFHO.cjs.map} +1 -1
  533. package/dist/{plan-B6td0b8h.js → plan-TBs5kj_X.js} +2 -2
  534. package/dist/{plan-B6td0b8h.js.map → plan-TBs5kj_X.js.map} +1 -1
  535. package/dist/{reasoning-activity-I5-HcGou.cjs → reasoning-activity-BrZbS7pa.cjs} +2 -2
  536. package/dist/{reasoning-activity-I5-HcGou.cjs.map → reasoning-activity-BrZbS7pa.cjs.map} +1 -1
  537. package/dist/{reasoning-activity-Dz2hk9pU.js → reasoning-activity-CyMhxRL2.js} +2 -2
  538. package/dist/{reasoning-activity-Dz2hk9pU.js.map → reasoning-activity-CyMhxRL2.js.map} +1 -1
  539. package/dist/resize/collapsible-panel.cjs.js +1 -1
  540. package/dist/resize/collapsible-panel.es.js +1 -1
  541. package/dist/{search-input-CMNy0JWd.cjs → search-input-CGNENJDh.cjs} +2 -2
  542. package/dist/{search-input-CMNy0JWd.cjs.map → search-input-CGNENJDh.cjs.map} +1 -1
  543. package/dist/{search-input-C9qFBzn6.js → search-input-cIYk0pl3.js} +2 -2
  544. package/dist/{search-input-C9qFBzn6.js.map → search-input-cIYk0pl3.js.map} +1 -1
  545. package/dist/{section-CctlZIXp.cjs → section-BikCyHdf.cjs} +4 -3
  546. package/dist/{section-CctlZIXp.cjs.map → section-BikCyHdf.cjs.map} +1 -1
  547. package/dist/{section-D0hKTVXt.js → section-C71zDLKM.js} +3 -2
  548. package/dist/{section-D0hKTVXt.js.map → section-C71zDLKM.js.map} +1 -1
  549. package/dist/{select-A3AFKLd9.cjs → select-BqHt-fOI.cjs} +12 -1
  550. package/dist/select-BqHt-fOI.cjs.map +1 -0
  551. package/dist/{select-7rYaECQf.js → select-CCpQUIEg.js} +13 -3
  552. package/dist/select-CCpQUIEg.js.map +1 -0
  553. package/dist/settings-container-D6LsO77E.js +42 -0
  554. package/dist/settings-container-D6LsO77E.js.map +1 -0
  555. package/dist/settings-container-umHxLp1a.cjs +45 -0
  556. package/dist/settings-container-umHxLp1a.cjs.map +1 -0
  557. package/dist/{settings-row-m_4gDCwS.cjs → settings-row-C9lT2BJS.cjs} +3 -42
  558. package/dist/settings-row-C9lT2BJS.cjs.map +1 -0
  559. package/dist/{settings-row-yuQjwWTl.js → settings-row-CRpU1an-.js} +4 -41
  560. package/dist/settings-row-CRpU1an-.js.map +1 -0
  561. package/dist/{span-payload-primitives-n5uf4hOk.cjs → span-payload-primitives-CE124T1P.cjs} +2 -2
  562. package/dist/{span-payload-primitives-n5uf4hOk.cjs.map → span-payload-primitives-CE124T1P.cjs.map} +1 -1
  563. package/dist/{span-payload-primitives-CaT3DT8h.js → span-payload-primitives-v0iS2w26.js} +2 -2
  564. package/dist/{span-payload-primitives-CaT3DT8h.js.map → span-payload-primitives-v0iS2w26.js.map} +1 -1
  565. package/dist/src/domains/capabilities/index.d.ts +1 -1
  566. package/dist/src/domains/chat/messages/notification-signal-notice.d.ts +2 -0
  567. package/dist/src/domains/chat/messages/signal-data.d.ts +9 -0
  568. package/dist/src/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.d.ts +28 -0
  569. package/dist/src/domains/datasets/components/add-dataset-item-dialog/build-add-item-payload.d.ts +28 -0
  570. package/dist/src/domains/datasets/components/add-dataset-item-dialog/collapsible-settings-row.d.ts +14 -0
  571. package/dist/src/domains/datasets/components/add-dataset-item-dialog/dataset-field-errors.d.ts +8 -0
  572. package/dist/src/domains/datasets/components/add-dataset-item-dialog/dataset-picker.d.ts +11 -0
  573. package/dist/src/domains/datasets/components/add-dataset-item-dialog/field-errors.d.ts +10 -0
  574. package/dist/src/domains/datasets/components/add-dataset-item-dialog/index.d.ts +2 -0
  575. package/dist/src/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.d.ts +11 -0
  576. package/dist/src/domains/datasets/components/add-dataset-item-dialog/trajectory-types.d.ts +50 -0
  577. package/dist/src/domains/datasets/components/add-dataset-item-dialog/use-target-agent-tools.d.ts +7 -0
  578. package/dist/src/domains/datasets/components/index.d.ts +1 -0
  579. package/dist/src/domains/logs/hooks/use-logs-filter-persistence.d.ts +2 -3
  580. package/dist/src/domains/logs/hooks/use-logs-url-state.d.ts +1 -1
  581. package/dist/src/domains/memory/components/flame-graph-data.d.ts +1 -1
  582. package/dist/src/domains/observability/components/trace-as-item-dialog.d.ts +3 -5
  583. package/dist/src/domains/traces/components/trace-data-panel-view.d.ts +1 -5
  584. package/dist/src/domains/traces/components/trace-span-panel.d.ts +1 -2
  585. package/dist/src/domains/traces/components/traces-explorer/index.d.ts +27 -0
  586. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-actions.d.ts +113 -0
  587. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-auto-refresh.d.ts +1 -0
  588. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-columns-menu.d.ts +1 -0
  589. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-columns-provider.d.ts +9 -0
  590. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-context.d.ts +114 -0
  591. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-filter-bar.d.ts +24 -0
  592. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-layout.d.ts +14 -0
  593. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-list-provider.d.ts +13 -0
  594. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-list.d.ts +1 -0
  595. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-panel.d.ts +18 -0
  596. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-root.d.ts +21 -0
  597. package/dist/src/domains/traces/components/traces-explorer/use-traces-discovery.d.ts +15 -0
  598. package/dist/src/domains/traces/components/traces-explorer/use-traces-filter-bar.d.ts +15 -0
  599. package/dist/src/domains/traces/hooks/index.d.ts +1 -2
  600. package/dist/src/domains/traces/hooks/use-traces-list-source.d.ts +7 -1
  601. package/dist/src/domains/traces/trace-query-filters.d.ts +2 -0
  602. package/dist/src/domains/workflows/context/use-persisted-workflow-run.d.ts +5 -5
  603. package/dist/src/ds/components/BillingIllustration/art/credits-art.d.ts +2 -0
  604. package/dist/src/ds/components/BillingIllustration/art/plan-art.d.ts +5 -0
  605. package/dist/src/ds/components/BillingIllustration/billing-illustration.d.ts +1 -1
  606. package/dist/src/ds/components/CodeEditor/code-editor.d.ts +4 -0
  607. package/dist/src/ds/components/Combobox/combobox-parts.d.ts +1 -1
  608. package/dist/src/ds/components/DataList/data-list-root.d.ts +2 -0
  609. package/dist/src/ds/components/Select/select.d.ts +5 -1
  610. package/dist/src/ds/components/Sidebar/header/sidebar-badge.d.ts +7 -0
  611. package/dist/src/ds/components/Sidebar/header/sidebar-button-hint.d.ts +7 -0
  612. package/dist/src/ds/components/Sidebar/header/sidebar-search-trigger.d.ts +14 -3
  613. package/dist/src/ds/components/Sidebar/index.d.ts +1 -0
  614. package/dist/src/ds/components/Sidebar/root/sidebar-trigger.d.ts +2 -2
  615. package/dist/src/ds/components/Sidebar/sidebar.d.ts +5 -1
  616. package/dist/src/ds/components/ai/activity/presets/notification-activity.d.ts +5 -1
  617. package/dist/style.css +101 -13
  618. package/dist/{time-picker-CyvG-fwX.cjs → time-picker-BGtAkRRp.cjs} +2 -2
  619. package/dist/{time-picker-CyvG-fwX.cjs.map → time-picker-BGtAkRRp.cjs.map} +1 -1
  620. package/dist/{time-picker-Bzdboi4W.js → time-picker-D1VsACkg.js} +2 -2
  621. package/dist/{time-picker-Bzdboi4W.js.map → time-picker-D1VsACkg.js.map} +1 -1
  622. package/dist/{tool-approval-meJYp8az.js → tool-approval-CW6YjYlc.js} +2 -2
  623. package/dist/{tool-approval-meJYp8az.js.map → tool-approval-CW6YjYlc.js.map} +1 -1
  624. package/dist/{tool-approval-tRkskd9l.cjs → tool-approval-DNw_9w1C.cjs} +2 -2
  625. package/dist/{tool-approval-tRkskd9l.cjs.map → tool-approval-DNw_9w1C.cjs.map} +1 -1
  626. package/dist/{tool-call-arguments-D4D9tT7-.cjs → tool-call-arguments-BdHtc5O4.cjs} +2 -2
  627. package/dist/{tool-call-arguments-D4D9tT7-.cjs.map → tool-call-arguments-BdHtc5O4.cjs.map} +1 -1
  628. package/dist/{tool-call-arguments-CyKLhuQC.js → tool-call-arguments-CByjFWnk.js} +2 -2
  629. package/dist/{tool-call-arguments-CyKLhuQC.js.map → tool-call-arguments-CByjFWnk.js.map} +1 -1
  630. package/dist/{tool-card-D9jh-XXM.cjs → tool-card-DULALXIR.cjs} +2 -2
  631. package/dist/{tool-card-D9jh-XXM.cjs.map → tool-card-DULALXIR.cjs.map} +1 -1
  632. package/dist/{tool-card-B7s_wQuV.js → tool-card-DyZaGWgD.js} +2 -2
  633. package/dist/{tool-card-B7s_wQuV.js.map → tool-card-DyZaGWgD.js.map} +1 -1
  634. package/dist/{trace-filters-tC2TkI42.cjs → trace-filters-BtyiQq7Y.cjs} +9 -5
  635. package/dist/trace-filters-BtyiQq7Y.cjs.map +1 -0
  636. package/dist/{trace-filters-D1Cs5f24.js → trace-filters-DXW-RdDz.js} +10 -7
  637. package/dist/trace-filters-DXW-RdDz.js.map +1 -0
  638. package/dist/{traces-data-list-CF_LFvnf.cjs → traces-data-list-BOHhsgDI.cjs} +18 -20
  639. package/dist/{traces-data-list-CF_LFvnf.cjs.map → traces-data-list-BOHhsgDI.cjs.map} +1 -1
  640. package/dist/{traces-data-list-SpVFLEy8.js → traces-data-list-CP6knkOn.js} +2 -4
  641. package/dist/{traces-data-list-SpVFLEy8.js.map → traces-data-list-CP6knkOn.js.map} +1 -1
  642. package/dist/{use-workflow-graph-runtime-B0k2hrMc.cjs → use-workflow-graph-runtime-CWgTtW-I.cjs} +2 -2
  643. package/dist/{use-workflow-graph-runtime-B0k2hrMc.cjs.map → use-workflow-graph-runtime-CWgTtW-I.cjs.map} +1 -1
  644. package/dist/{use-workflow-graph-runtime-DiiAs2oN.js → use-workflow-graph-runtime-vYcO5MFZ.js} +2 -2
  645. package/dist/{use-workflow-graph-runtime-DiiAs2oN.js.map → use-workflow-graph-runtime-vYcO5MFZ.js.map} +1 -1
  646. package/dist/{workflow-code-dialog-content-yV6Lecry.cjs → workflow-code-dialog-content-BeB3jC3z.cjs} +2 -2
  647. package/dist/{workflow-code-dialog-content-yV6Lecry.cjs.map → workflow-code-dialog-content-BeB3jC3z.cjs.map} +1 -1
  648. package/dist/{workflow-code-dialog-content-lRHRkDdW.js → workflow-code-dialog-content-BpWrCzH0.js} +2 -2
  649. package/dist/{workflow-code-dialog-content-lRHRkDdW.js.map → workflow-code-dialog-content-BpWrCzH0.js.map} +1 -1
  650. package/dist/{workflow-data-edge-view-DadIXKjI.cjs → workflow-data-edge-view-CYsZxUHx.cjs} +2 -2
  651. package/dist/{workflow-data-edge-view-DadIXKjI.cjs.map → workflow-data-edge-view-CYsZxUHx.cjs.map} +1 -1
  652. package/dist/{workflow-data-edge-view-BcLEbr1i.js → workflow-data-edge-view-Cqbhavjw.js} +2 -2
  653. package/dist/{workflow-data-edge-view-BcLEbr1i.js.map → workflow-data-edge-view-Cqbhavjw.js.map} +1 -1
  654. package/dist/{workflow-edge-data-button-AwaLTE7H.js → workflow-edge-data-button-BPUmnY9J.js} +2 -2
  655. package/dist/{workflow-edge-data-button-AwaLTE7H.js.map → workflow-edge-data-button-BPUmnY9J.js.map} +1 -1
  656. package/dist/{workflow-edge-data-button-B4_tt1pL.cjs → workflow-edge-data-button-DinmgZoJ.cjs} +2 -2
  657. package/dist/{workflow-edge-data-button-B4_tt1pL.cjs.map → workflow-edge-data-button-DinmgZoJ.cjs.map} +1 -1
  658. package/package.json +11 -11
  659. package/dist/code-editor-CbyCb7CW.cjs.map +0 -1
  660. package/dist/code-editor-DOv4jc-0.js.map +0 -1
  661. package/dist/combobox-BCoCVZHs.js.map +0 -1
  662. package/dist/combobox-DbZAWh8q.cjs.map +0 -1
  663. package/dist/data-list-CGD9hzcp.cjs +0 -142
  664. package/dist/data-list-CGD9hzcp.cjs.map +0 -1
  665. package/dist/data-list-aFlt9Du-.js +0 -138
  666. package/dist/data-list-aFlt9Du-.js.map +0 -1
  667. package/dist/data-list-spacer-BFAQT_lQ.js +0 -209
  668. package/dist/data-list-spacer-BFAQT_lQ.js.map +0 -1
  669. package/dist/data-list-spacer-Dpoj55mv.cjs +0 -218
  670. package/dist/data-list-spacer-Dpoj55mv.cjs.map +0 -1
  671. package/dist/data-list-top-DJh08vFA.cjs.map +0 -1
  672. package/dist/data-list-top-T-mtdIUp.js.map +0 -1
  673. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js +0 -204
  674. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js.map +0 -1
  675. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.d.ts +0 -2
  676. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js +0 -200
  677. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js.map +0 -1
  678. package/dist/domains/traces/hooks/use-trace-filter-persistence.cjs.js +0 -52
  679. package/dist/domains/traces/hooks/use-trace-filter-persistence.cjs.js.map +0 -1
  680. package/dist/domains/traces/hooks/use-trace-filter-persistence.d.ts +0 -2
  681. package/dist/domains/traces/hooks/use-trace-filter-persistence.es.js +0 -48
  682. package/dist/domains/traces/hooks/use-trace-filter-persistence.es.js.map +0 -1
  683. package/dist/domains/traces/hooks/use-trace-url-state.cjs.js +0 -373
  684. package/dist/domains/traces/hooks/use-trace-url-state.cjs.js.map +0 -1
  685. package/dist/domains/traces/hooks/use-trace-url-state.d.ts +0 -2
  686. package/dist/domains/traces/hooks/use-trace-url-state.es.js +0 -369
  687. package/dist/domains/traces/hooks/use-trace-url-state.es.js.map +0 -1
  688. package/dist/notification-activity-BSNuqJDd.cjs.map +0 -1
  689. package/dist/notification-activity-BWXHmlTn.js.map +0 -1
  690. package/dist/select-7rYaECQf.js.map +0 -1
  691. package/dist/select-A3AFKLd9.cjs.map +0 -1
  692. package/dist/settings-row-m_4gDCwS.cjs.map +0 -1
  693. package/dist/settings-row-yuQjwWTl.js.map +0 -1
  694. package/dist/side-dialog-C-XvsAm_.cjs +0 -231
  695. package/dist/side-dialog-C-XvsAm_.cjs.map +0 -1
  696. package/dist/side-dialog-cUpWIkKq.js +0 -211
  697. package/dist/side-dialog-cUpWIkKq.js.map +0 -1
  698. package/dist/src/domains/observability/components/add-trace-mocks-to-item-dialog.d.ts +0 -9
  699. package/dist/src/domains/traces/hooks/use-trace-filter-persistence.d.ts +0 -22
  700. package/dist/src/domains/traces/hooks/use-trace-url-state.d.ts +0 -83
  701. package/dist/trace-filters-D1Cs5f24.js.map +0 -1
  702. package/dist/trace-filters-tC2TkI42.cjs.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { CalendarClockIcon, TimerIcon, HashIcon } from 'lucide-react';
3
3
  import { getSpanDurationMs } from '../utils/span-utils.es.js';
4
- import { D as DataPanel } from '../../../data-panel-CUqcB4Vn.js';
4
+ import { D as DataPanel } from '../../../data-panel-DSgidnnv.js';
5
5
  import { truncateString } from '../../../utils/truncate-string.es.js';
6
6
  import { formatDate, formatTimestampPrecise } from '../../../utils/date-format.es.js';
7
7
  import { formatDurationPrecise } from '../../../utils/duration.es.js';
@@ -5,7 +5,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
  const jsxRuntime = require('react/jsx-runtime');
6
6
  const domains_traces_components_threadTrace_threadTraceRowContext = require('./thread-trace-row-context.cjs.js');
7
7
  const Card = require('../../../../Card-BIXkMUyT.cjs');
8
- const dataPanel = require('../../../../data-panel-CGRPVnEe.cjs');
8
+ const dataPanel = require('../../../../data-panel-xqrai98b.cjs');
9
9
  const utils_cn = require('../../../../cn-DlOJCxrS.cjs');
10
10
 
11
11
  function ThreadTraceDetails({ className, children, ...props }) {
@@ -1,7 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { useThreadTraceRow } from './thread-trace-row-context.es.js';
3
3
  import { C as Card } from '../../../../Card-DXYPCPLh.js';
4
- import { D as DataPanel } from '../../../../data-panel-CUqcB4Vn.js';
4
+ import { D as DataPanel } from '../../../../data-panel-DSgidnnv.js';
5
5
  import { c as cn } from '../../../../cn-CQUhN5Jx.js';
6
6
 
7
7
  function ThreadTraceDetails({ className, children, ...props }) {
@@ -10,6 +10,7 @@ const lucideReact = require('lucide-react');
10
10
  const React = require('react');
11
11
  require('@mastra/react/hooks/scores');
12
12
  require('@base-ui/react/combobox');
13
+ require('../../../toast-DxKdVSyw.cjs');
13
14
  const domains_scores_components_traceScoresTab = require('../../scores/components/trace-scores-tab.cjs.js');
14
15
  require('@mastra/core/utils/safe-stringify');
15
16
  require('@mastra/react/hooks/datasets');
@@ -18,6 +19,7 @@ require('../../../highlight-DfnRU-Am.cjs');
18
19
  require('../../../field-control-aria-WzMGs0A4.cjs');
19
20
  const Txt = require('../../../Txt-CIS2G5Jx.cjs');
20
21
  const lib_framework = require('../../../lib/framework.cjs.js');
22
+ require('../../datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.cjs.js');
21
23
  const domains_traces_components_threadTrace = require('./thread-trace.cjs.js');
22
24
  const domains_traces_components_threadViewSkeleton = require('./thread-view-skeleton.cjs.js');
23
25
  const domains_traces_components_traceFeedbackTab = require('./trace-feedback-tab.cjs.js');
@@ -1 +1 @@
1
- {"version":3,"file":"thread-view-by-trace.cjs.js","sources":["../../../../src/domains/traces/components/thread-view-by-trace.tsx"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { traceSpansQueryOptions, useTraceSpans } from '@mastra/react/hooks/traces';\nimport { useQueries } from '@tanstack/react-query';\nimport { ExternalLinkIcon, MessageSquareReplyIcon, MessageSquareTextIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport { TraceScoresTab } from '@/domains/scores';\nimport { ThreadTrace, useThreadTraceRow } from '@/domains/traces/components/thread-trace';\nimport type { ThreadTraceSelectedSpan } from '@/domains/traces/components/thread-trace';\n\nimport { ThreadViewSkeleton } from '@/domains/traces/components/thread-view-skeleton';\nimport { TraceFeedbackTab } from '@/domains/traces/components/trace-feedback-tab';\nimport { TraceThreadItemView } from '@/domains/traces/components/trace-thread-item-view';\nimport { TracesErrorContent } from '@/domains/traces/components/traces-error-content';\nimport { useTracesListSource } from '@/domains/traces/hooks/use-traces-list-source';\nimport type { UseTracesListSourceArgs } from '@/domains/traces/hooks/use-traces-list-source';\nimport { Button } from '@/ds/components/Button';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport { useLinkComponent } from '@/lib/framework';\n\n// `queryTraces` requires a time range; start at the epoch so it covers the whole thread, like the legacy endpoint.\nconst THREAD_WINDOW_FROM = new Date(0).toISOString();\n\nexport interface ThreadViewByTraceProps {\n threadId: string;\n /** Lists the thread through the trace-query API; `false` falls back to `listTracesLight`. */\n withQueryTrace: boolean;\n /** Shows the per-trace Feedback tab and fetches its feedback. */\n withFeedback: boolean;\n /** Fires when a span detail opens or closes (`null`). */\n onSelectedSpanChange?: (selected: ThreadTraceSelectedSpan | null) => void;\n /** Opens a score from a trace's Scores tab; the app owns routing. */\n onOpenScore: (traceId: string, scoreId: string) => void;\n /** Turns loaded per page: the latest ones on open, then older ones as the reader scrolls up. */\n pageSize?: number;\n}\n\n/**\n * A memory thread rendered as its traces, like a chat: one row per agent turn (oldest at the top),\n * opened on the latest turns, with older turns loaded as the reader scrolls up. Each row shows the\n * reconstructed messages on the left and the span tree on the right. Clicking a span opens its\n * detail panel on the side so the conversation stays readable.\n */\nexport function ThreadViewByTrace({\n threadId,\n withQueryTrace,\n withFeedback,\n onSelectedSpanChange,\n onOpenScore,\n pageSize = 10,\n}: ThreadViewByTraceProps) {\n const legacyFilters = useMemo<UseTracesListSourceArgs['legacyFilters']>(() => ({ threadId }), [threadId]);\n const { rows, isLoading, isPlaceholderData, error, hasNextPage, isFetchingNextPage, fetchNextPage } =\n useTracesListSource({\n initialAutoRefetch: false,\n withQueryTrace,\n legacyFilters,\n limit: pageSize,\n query: now => ({\n timeRange: {\n from: THREAD_WINDOW_FROM,\n to: now.toISOString(),\n },\n where: { op: 'eq', left: { path: 'threadId' }, right: { literal: threadId } },\n orderBy: [{ field: 'startedAt', direction: 'desc' }],\n }),\n });\n // Pages come newest first; the conversation reads oldest first.\n const traceIds = rows.map(trace => trace.traceId).reverse();\n const listSettled = !isLoading && !isPlaceholderData;\n\n // The first page is shown only once its turns' spans have settled too, so the rows mount complete\n // instead of each one loading on its own. Older pages keep their per-row loading.\n const client = useMastraClient();\n const [readyThreadId, setReadyThreadId] = useState<string | null>(null);\n const isReady = readyThreadId === threadId;\n const firstPageSpansSettled = useQueries({\n queries: (isReady || !listSettled ? [] : traceIds).map(traceId => ({\n ...traceSpansQueryOptions(client, traceId),\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n })),\n combine: results => results.every(result => !result.isPending),\n });\n if (!isReady && listSettled && firstPageSpansSettled) setReadyThreadId(threadId);\n\n if (error) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <TracesErrorContent error={error} resource=\"traces\" errorTitle=\"Failed to load traces\" />\n </div>\n );\n }\n\n if (!isReady) return <ThreadViewSkeleton withFeedback={withFeedback} />;\n\n if (traceIds.length === 0) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <Txt variant=\"body\" tone=\"muted\">\n No traces found for this thread.\n </Txt>\n </div>\n );\n }\n\n return (\n <ThreadTrace\n key={threadId}\n traceIds={traceIds}\n onSelectedSpanChange={onSelectedSpanChange}\n onLoadOlder={() => {\n if (hasNextPage && !isFetchingNextPage) fetchNextPage();\n }}\n >\n <ThreadTrace.List data-testid=\"thread-view-by-trace\">\n {traceIds.map((traceId, index) => (\n <ThreadTrace.Row key={traceId} traceId={traceId}>\n <ThreadTraceRowContent turn={index + 1} withFeedback={withFeedback} onOpenScore={onOpenScore} />\n </ThreadTrace.Row>\n ))}\n </ThreadTrace.List>\n <ThreadTrace.SpanPanel />\n </ThreadTrace>\n );\n}\n\nfunction ThreadTraceRowContent({\n turn,\n withFeedback,\n onOpenScore,\n}: {\n /** 1-based position among the loaded turns. */\n turn: number;\n withFeedback: boolean;\n onOpenScore: (traceId: string, scoreId: string) => void;\n}) {\n const { traceId, highlightSpans } = useThreadTraceRow();\n const { Link, paths } = useLinkComponent();\n const traceHref = paths.traceLink(traceId);\n // Same query the span tree observes (passive: the tree drives refetches).\n const { data: traceData } = useTraceSpans({ traceId: traceId, passive: true, queryOptions: { enabled: !!traceId } });\n const rootSpanId = traceData?.spans.find(span => span.parentSpanId == null)?.spanId;\n\n return (\n <>\n <ThreadTrace.Divider label={`Turn ${turn}`}>\n {traceHref && (\n <>\n <Button render={<Link href={traceHref} />} variant=\"ghost\" size=\"sm\" icon={<ExternalLinkIcon />}>\n Go to trace\n </Button>\n <span aria-hidden className=\"h-4 w-px bg-border\" />\n </>\n )}\n <ThreadTrace.TabList>\n <ThreadTrace.Tab value=\"messages\">\n <Icon size=\"xs\">\n <MessageSquareTextIcon />\n </Icon>\n Messages\n </ThreadTrace.Tab>\n {withFeedback && (\n <ThreadTrace.Tab value=\"feedback\">\n <Icon size=\"xs\">\n <MessageSquareReplyIcon />\n </Icon>\n Feedback\n </ThreadTrace.Tab>\n )}\n <ThreadTrace.Tab value=\"scores\">\n <Icon size=\"xs\">\n <ScorersIcon />\n </Icon>\n Scores\n </ThreadTrace.Tab>\n </ThreadTrace.TabList>\n </ThreadTrace.Divider>\n <ThreadTrace.RowBody>\n <ThreadTrace.Messages>\n <ThreadTrace.TabContent value=\"messages\" flush>\n <TraceThreadItemView traceId={traceId} onHighlightSpans={highlightSpans} />\n </ThreadTrace.TabContent>\n {withFeedback && (\n <ThreadTrace.TabContent value=\"feedback\" className=\"min-h-0 py-3\">\n <TraceFeedbackTab key={traceId} traceId={traceId} variant=\"thread\" />\n </ThreadTrace.TabContent>\n )}\n <ThreadTrace.TabContent value=\"scores\" className=\"min-h-0 py-3\">\n {rootSpanId ? (\n <TraceScoresTab\n key={traceId}\n traceId={traceId}\n spanId={rootSpanId}\n onScoreSelect={scoreId => onOpenScore(traceId, scoreId)}\n />\n ) : null}\n </ThreadTrace.TabContent>\n </ThreadTrace.Messages>\n <ThreadTrace.Details>\n <ThreadTrace.Spans />\n </ThreadTrace.Details>\n </ThreadTrace.RowBody>\n </>\n );\n}\n"],"names":["useMemo","useTracesListSource","useMastraClient","useState","useQueries","traceSpansQueryOptions","jsx","TracesErrorContent","ThreadViewSkeleton","Txt","jsxs","ThreadTrace","useThreadTraceRow","useLinkComponent","useTraceSpans","Fragment","Button","ExternalLinkIcon","Icon","MessageSquareTextIcon","MessageSquareReplyIcon","ScorersIcon","TraceThreadItemView","TraceFeedbackTab","TraceScoresTab"],"mappings":"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"}
1
+ {"version":3,"file":"thread-view-by-trace.cjs.js","sources":["../../../../src/domains/traces/components/thread-view-by-trace.tsx"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { traceSpansQueryOptions, useTraceSpans } from '@mastra/react/hooks/traces';\nimport { useQueries } from '@tanstack/react-query';\nimport { ExternalLinkIcon, MessageSquareReplyIcon, MessageSquareTextIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport { TraceScoresTab } from '@/domains/scores';\nimport { ThreadTrace, useThreadTraceRow } from '@/domains/traces/components/thread-trace';\nimport type { ThreadTraceSelectedSpan } from '@/domains/traces/components/thread-trace';\n\nimport { ThreadViewSkeleton } from '@/domains/traces/components/thread-view-skeleton';\nimport { TraceFeedbackTab } from '@/domains/traces/components/trace-feedback-tab';\nimport { TraceThreadItemView } from '@/domains/traces/components/trace-thread-item-view';\nimport { TracesErrorContent } from '@/domains/traces/components/traces-error-content';\nimport { useTracesListSource } from '@/domains/traces/hooks/use-traces-list-source';\nimport type { UseTracesListSourceArgs } from '@/domains/traces/hooks/use-traces-list-source';\nimport { Button } from '@/ds/components/Button';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport { useLinkComponent } from '@/lib/framework';\n\n// `queryTraces` requires a time range; start at the epoch so it covers the whole thread, like the legacy endpoint.\nconst THREAD_WINDOW_FROM = new Date(0).toISOString();\n\nexport interface ThreadViewByTraceProps {\n threadId: string;\n /** Lists the thread through the trace-query API; `false` falls back to `listTracesLight`. */\n withQueryTrace: boolean;\n /** Shows the per-trace Feedback tab and fetches its feedback. */\n withFeedback: boolean;\n /** Fires when a span detail opens or closes (`null`). */\n onSelectedSpanChange?: (selected: ThreadTraceSelectedSpan | null) => void;\n /** Opens a score from a trace's Scores tab; the app owns routing. */\n onOpenScore: (traceId: string, scoreId: string) => void;\n /** Turns loaded per page: the latest ones on open, then older ones as the reader scrolls up. */\n pageSize?: number;\n}\n\n/**\n * A memory thread rendered as its traces, like a chat: one row per agent turn (oldest at the top),\n * opened on the latest turns, with older turns loaded as the reader scrolls up. Each row shows the\n * reconstructed messages on the left and the span tree on the right. Clicking a span opens its\n * detail panel on the side so the conversation stays readable.\n */\nexport function ThreadViewByTrace({\n threadId,\n withQueryTrace,\n withFeedback,\n onSelectedSpanChange,\n onOpenScore,\n pageSize = 10,\n}: ThreadViewByTraceProps) {\n const legacyFilters = useMemo<UseTracesListSourceArgs['legacyFilters']>(() => ({ threadId }), [threadId]);\n const { rows, isLoading, isPlaceholderData, error, hasNextPage, isFetchingNextPage, fetchNextPage } =\n useTracesListSource({\n initialAutoRefetch: false,\n withQueryTrace,\n legacyFilters,\n limit: pageSize,\n query: now => ({\n timeRange: {\n from: THREAD_WINDOW_FROM,\n to: now.toISOString(),\n },\n where: { op: 'eq', left: { path: 'threadId' }, right: { literal: threadId } },\n orderBy: [{ field: 'startedAt', direction: 'desc' }],\n }),\n });\n // Pages come newest first; the conversation reads oldest first.\n const traceIds = rows.map(trace => trace.traceId).reverse();\n const listSettled = !isLoading && !isPlaceholderData;\n\n // The first page is shown only once its turns' spans have settled too, so the rows mount complete\n // instead of each one loading on its own. Older pages keep their per-row loading.\n const client = useMastraClient();\n const [readyThreadId, setReadyThreadId] = useState<string | null>(null);\n const isReady = readyThreadId === threadId;\n const firstPageSpansSettled = useQueries({\n queries: (isReady || !listSettled ? [] : traceIds).map(traceId => ({\n ...traceSpansQueryOptions(client, traceId),\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n })),\n combine: results => results.every(result => !result.isPending),\n });\n if (!isReady && listSettled && firstPageSpansSettled) setReadyThreadId(threadId);\n\n if (error) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <TracesErrorContent error={error} resource=\"traces\" errorTitle=\"Failed to load traces\" />\n </div>\n );\n }\n\n if (!isReady) return <ThreadViewSkeleton withFeedback={withFeedback} />;\n\n if (traceIds.length === 0) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <Txt variant=\"body\" tone=\"muted\">\n No traces found for this thread.\n </Txt>\n </div>\n );\n }\n\n return (\n <ThreadTrace\n key={threadId}\n traceIds={traceIds}\n onSelectedSpanChange={onSelectedSpanChange}\n onLoadOlder={() => {\n if (hasNextPage && !isFetchingNextPage) fetchNextPage();\n }}\n >\n <ThreadTrace.List data-testid=\"thread-view-by-trace\">\n {traceIds.map((traceId, index) => (\n <ThreadTrace.Row key={traceId} traceId={traceId}>\n <ThreadTraceRowContent turn={index + 1} withFeedback={withFeedback} onOpenScore={onOpenScore} />\n </ThreadTrace.Row>\n ))}\n </ThreadTrace.List>\n <ThreadTrace.SpanPanel />\n </ThreadTrace>\n );\n}\n\nfunction ThreadTraceRowContent({\n turn,\n withFeedback,\n onOpenScore,\n}: {\n /** 1-based position among the loaded turns. */\n turn: number;\n withFeedback: boolean;\n onOpenScore: (traceId: string, scoreId: string) => void;\n}) {\n const { traceId, highlightSpans } = useThreadTraceRow();\n const { Link, paths } = useLinkComponent();\n const traceHref = paths.traceLink(traceId);\n // Same query the span tree observes (passive: the tree drives refetches).\n const { data: traceData } = useTraceSpans({ traceId: traceId, passive: true, queryOptions: { enabled: !!traceId } });\n const rootSpanId = traceData?.spans.find(span => span.parentSpanId == null)?.spanId;\n\n return (\n <>\n <ThreadTrace.Divider label={`Turn ${turn}`}>\n {traceHref && (\n <>\n <Button render={<Link href={traceHref} />} variant=\"ghost\" size=\"sm\" icon={<ExternalLinkIcon />}>\n Go to trace\n </Button>\n <span aria-hidden className=\"h-4 w-px bg-border\" />\n </>\n )}\n <ThreadTrace.TabList>\n <ThreadTrace.Tab value=\"messages\">\n <Icon size=\"xs\">\n <MessageSquareTextIcon />\n </Icon>\n Messages\n </ThreadTrace.Tab>\n {withFeedback && (\n <ThreadTrace.Tab value=\"feedback\">\n <Icon size=\"xs\">\n <MessageSquareReplyIcon />\n </Icon>\n Feedback\n </ThreadTrace.Tab>\n )}\n <ThreadTrace.Tab value=\"scores\">\n <Icon size=\"xs\">\n <ScorersIcon />\n </Icon>\n Scores\n </ThreadTrace.Tab>\n </ThreadTrace.TabList>\n </ThreadTrace.Divider>\n <ThreadTrace.RowBody>\n <ThreadTrace.Messages>\n <ThreadTrace.TabContent value=\"messages\" flush>\n <TraceThreadItemView traceId={traceId} onHighlightSpans={highlightSpans} />\n </ThreadTrace.TabContent>\n {withFeedback && (\n <ThreadTrace.TabContent value=\"feedback\" className=\"min-h-0 py-3\">\n <TraceFeedbackTab key={traceId} traceId={traceId} variant=\"thread\" />\n </ThreadTrace.TabContent>\n )}\n <ThreadTrace.TabContent value=\"scores\" className=\"min-h-0 py-3\">\n {rootSpanId ? (\n <TraceScoresTab\n key={traceId}\n traceId={traceId}\n spanId={rootSpanId}\n onScoreSelect={scoreId => onOpenScore(traceId, scoreId)}\n />\n ) : null}\n </ThreadTrace.TabContent>\n </ThreadTrace.Messages>\n <ThreadTrace.Details>\n <ThreadTrace.Spans />\n </ThreadTrace.Details>\n </ThreadTrace.RowBody>\n </>\n );\n}\n"],"names":["useMemo","useTracesListSource","useMastraClient","useState","useQueries","traceSpansQueryOptions","jsx","TracesErrorContent","ThreadViewSkeleton","Txt","jsxs","ThreadTrace","useThreadTraceRow","useLinkComponent","useTraceSpans","Fragment","Button","ExternalLinkIcon","Icon","MessageSquareTextIcon","MessageSquareReplyIcon","ScorersIcon","TraceThreadItemView","TraceFeedbackTab","TraceScoresTab"],"mappings":"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"}
@@ -6,6 +6,7 @@ import { ExternalLinkIcon, MessageSquareTextIcon, MessageSquareReplyIcon } from
6
6
  import { useMemo, useState } from 'react';
7
7
  import '@mastra/react/hooks/scores';
8
8
  import '@base-ui/react/combobox';
9
+ import '../../../toast-5aQbZBbY.js';
9
10
  import { TraceScoresTab } from '../../scores/components/trace-scores-tab.es.js';
10
11
  import '@mastra/core/utils/safe-stringify';
11
12
  import '@mastra/react/hooks/datasets';
@@ -14,6 +15,7 @@ import '../../../highlight-CXDme3FZ.js';
14
15
  import '../../../field-control-aria-DB6y41tQ.js';
15
16
  import { T as Txt } from '../../../Txt-BtIGLRk1.js';
16
17
  import { useLinkComponent } from '../../../lib/framework.es.js';
18
+ import '../../datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.es.js';
17
19
  import { ThreadTrace } from './thread-trace.es.js';
18
20
  import { ThreadViewSkeleton } from './thread-view-skeleton.es.js';
19
21
  import { TraceFeedbackTab } from './trace-feedback-tab.es.js';
@@ -1 +1 @@
1
- {"version":3,"file":"thread-view-by-trace.es.js","sources":["../../../../src/domains/traces/components/thread-view-by-trace.tsx"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { traceSpansQueryOptions, useTraceSpans } from '@mastra/react/hooks/traces';\nimport { useQueries } from '@tanstack/react-query';\nimport { ExternalLinkIcon, MessageSquareReplyIcon, MessageSquareTextIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport { TraceScoresTab } from '@/domains/scores';\nimport { ThreadTrace, useThreadTraceRow } from '@/domains/traces/components/thread-trace';\nimport type { ThreadTraceSelectedSpan } from '@/domains/traces/components/thread-trace';\n\nimport { ThreadViewSkeleton } from '@/domains/traces/components/thread-view-skeleton';\nimport { TraceFeedbackTab } from '@/domains/traces/components/trace-feedback-tab';\nimport { TraceThreadItemView } from '@/domains/traces/components/trace-thread-item-view';\nimport { TracesErrorContent } from '@/domains/traces/components/traces-error-content';\nimport { useTracesListSource } from '@/domains/traces/hooks/use-traces-list-source';\nimport type { UseTracesListSourceArgs } from '@/domains/traces/hooks/use-traces-list-source';\nimport { Button } from '@/ds/components/Button';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport { useLinkComponent } from '@/lib/framework';\n\n// `queryTraces` requires a time range; start at the epoch so it covers the whole thread, like the legacy endpoint.\nconst THREAD_WINDOW_FROM = new Date(0).toISOString();\n\nexport interface ThreadViewByTraceProps {\n threadId: string;\n /** Lists the thread through the trace-query API; `false` falls back to `listTracesLight`. */\n withQueryTrace: boolean;\n /** Shows the per-trace Feedback tab and fetches its feedback. */\n withFeedback: boolean;\n /** Fires when a span detail opens or closes (`null`). */\n onSelectedSpanChange?: (selected: ThreadTraceSelectedSpan | null) => void;\n /** Opens a score from a trace's Scores tab; the app owns routing. */\n onOpenScore: (traceId: string, scoreId: string) => void;\n /** Turns loaded per page: the latest ones on open, then older ones as the reader scrolls up. */\n pageSize?: number;\n}\n\n/**\n * A memory thread rendered as its traces, like a chat: one row per agent turn (oldest at the top),\n * opened on the latest turns, with older turns loaded as the reader scrolls up. Each row shows the\n * reconstructed messages on the left and the span tree on the right. Clicking a span opens its\n * detail panel on the side so the conversation stays readable.\n */\nexport function ThreadViewByTrace({\n threadId,\n withQueryTrace,\n withFeedback,\n onSelectedSpanChange,\n onOpenScore,\n pageSize = 10,\n}: ThreadViewByTraceProps) {\n const legacyFilters = useMemo<UseTracesListSourceArgs['legacyFilters']>(() => ({ threadId }), [threadId]);\n const { rows, isLoading, isPlaceholderData, error, hasNextPage, isFetchingNextPage, fetchNextPage } =\n useTracesListSource({\n initialAutoRefetch: false,\n withQueryTrace,\n legacyFilters,\n limit: pageSize,\n query: now => ({\n timeRange: {\n from: THREAD_WINDOW_FROM,\n to: now.toISOString(),\n },\n where: { op: 'eq', left: { path: 'threadId' }, right: { literal: threadId } },\n orderBy: [{ field: 'startedAt', direction: 'desc' }],\n }),\n });\n // Pages come newest first; the conversation reads oldest first.\n const traceIds = rows.map(trace => trace.traceId).reverse();\n const listSettled = !isLoading && !isPlaceholderData;\n\n // The first page is shown only once its turns' spans have settled too, so the rows mount complete\n // instead of each one loading on its own. Older pages keep their per-row loading.\n const client = useMastraClient();\n const [readyThreadId, setReadyThreadId] = useState<string | null>(null);\n const isReady = readyThreadId === threadId;\n const firstPageSpansSettled = useQueries({\n queries: (isReady || !listSettled ? [] : traceIds).map(traceId => ({\n ...traceSpansQueryOptions(client, traceId),\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n })),\n combine: results => results.every(result => !result.isPending),\n });\n if (!isReady && listSettled && firstPageSpansSettled) setReadyThreadId(threadId);\n\n if (error) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <TracesErrorContent error={error} resource=\"traces\" errorTitle=\"Failed to load traces\" />\n </div>\n );\n }\n\n if (!isReady) return <ThreadViewSkeleton withFeedback={withFeedback} />;\n\n if (traceIds.length === 0) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <Txt variant=\"body\" tone=\"muted\">\n No traces found for this thread.\n </Txt>\n </div>\n );\n }\n\n return (\n <ThreadTrace\n key={threadId}\n traceIds={traceIds}\n onSelectedSpanChange={onSelectedSpanChange}\n onLoadOlder={() => {\n if (hasNextPage && !isFetchingNextPage) fetchNextPage();\n }}\n >\n <ThreadTrace.List data-testid=\"thread-view-by-trace\">\n {traceIds.map((traceId, index) => (\n <ThreadTrace.Row key={traceId} traceId={traceId}>\n <ThreadTraceRowContent turn={index + 1} withFeedback={withFeedback} onOpenScore={onOpenScore} />\n </ThreadTrace.Row>\n ))}\n </ThreadTrace.List>\n <ThreadTrace.SpanPanel />\n </ThreadTrace>\n );\n}\n\nfunction ThreadTraceRowContent({\n turn,\n withFeedback,\n onOpenScore,\n}: {\n /** 1-based position among the loaded turns. */\n turn: number;\n withFeedback: boolean;\n onOpenScore: (traceId: string, scoreId: string) => void;\n}) {\n const { traceId, highlightSpans } = useThreadTraceRow();\n const { Link, paths } = useLinkComponent();\n const traceHref = paths.traceLink(traceId);\n // Same query the span tree observes (passive: the tree drives refetches).\n const { data: traceData } = useTraceSpans({ traceId: traceId, passive: true, queryOptions: { enabled: !!traceId } });\n const rootSpanId = traceData?.spans.find(span => span.parentSpanId == null)?.spanId;\n\n return (\n <>\n <ThreadTrace.Divider label={`Turn ${turn}`}>\n {traceHref && (\n <>\n <Button render={<Link href={traceHref} />} variant=\"ghost\" size=\"sm\" icon={<ExternalLinkIcon />}>\n Go to trace\n </Button>\n <span aria-hidden className=\"h-4 w-px bg-border\" />\n </>\n )}\n <ThreadTrace.TabList>\n <ThreadTrace.Tab value=\"messages\">\n <Icon size=\"xs\">\n <MessageSquareTextIcon />\n </Icon>\n Messages\n </ThreadTrace.Tab>\n {withFeedback && (\n <ThreadTrace.Tab value=\"feedback\">\n <Icon size=\"xs\">\n <MessageSquareReplyIcon />\n </Icon>\n Feedback\n </ThreadTrace.Tab>\n )}\n <ThreadTrace.Tab value=\"scores\">\n <Icon size=\"xs\">\n <ScorersIcon />\n </Icon>\n Scores\n </ThreadTrace.Tab>\n </ThreadTrace.TabList>\n </ThreadTrace.Divider>\n <ThreadTrace.RowBody>\n <ThreadTrace.Messages>\n <ThreadTrace.TabContent value=\"messages\" flush>\n <TraceThreadItemView traceId={traceId} onHighlightSpans={highlightSpans} />\n </ThreadTrace.TabContent>\n {withFeedback && (\n <ThreadTrace.TabContent value=\"feedback\" className=\"min-h-0 py-3\">\n <TraceFeedbackTab key={traceId} traceId={traceId} variant=\"thread\" />\n </ThreadTrace.TabContent>\n )}\n <ThreadTrace.TabContent value=\"scores\" className=\"min-h-0 py-3\">\n {rootSpanId ? (\n <TraceScoresTab\n key={traceId}\n traceId={traceId}\n spanId={rootSpanId}\n onScoreSelect={scoreId => onOpenScore(traceId, scoreId)}\n />\n ) : null}\n </ThreadTrace.TabContent>\n </ThreadTrace.Messages>\n <ThreadTrace.Details>\n <ThreadTrace.Spans />\n </ThreadTrace.Details>\n </ThreadTrace.RowBody>\n </>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thread-view-by-trace.es.js","sources":["../../../../src/domains/traces/components/thread-view-by-trace.tsx"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { traceSpansQueryOptions, useTraceSpans } from '@mastra/react/hooks/traces';\nimport { useQueries } from '@tanstack/react-query';\nimport { ExternalLinkIcon, MessageSquareReplyIcon, MessageSquareTextIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport { TraceScoresTab } from '@/domains/scores';\nimport { ThreadTrace, useThreadTraceRow } from '@/domains/traces/components/thread-trace';\nimport type { ThreadTraceSelectedSpan } from '@/domains/traces/components/thread-trace';\n\nimport { ThreadViewSkeleton } from '@/domains/traces/components/thread-view-skeleton';\nimport { TraceFeedbackTab } from '@/domains/traces/components/trace-feedback-tab';\nimport { TraceThreadItemView } from '@/domains/traces/components/trace-thread-item-view';\nimport { TracesErrorContent } from '@/domains/traces/components/traces-error-content';\nimport { useTracesListSource } from '@/domains/traces/hooks/use-traces-list-source';\nimport type { UseTracesListSourceArgs } from '@/domains/traces/hooks/use-traces-list-source';\nimport { Button } from '@/ds/components/Button';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport { useLinkComponent } from '@/lib/framework';\n\n// `queryTraces` requires a time range; start at the epoch so it covers the whole thread, like the legacy endpoint.\nconst THREAD_WINDOW_FROM = new Date(0).toISOString();\n\nexport interface ThreadViewByTraceProps {\n threadId: string;\n /** Lists the thread through the trace-query API; `false` falls back to `listTracesLight`. */\n withQueryTrace: boolean;\n /** Shows the per-trace Feedback tab and fetches its feedback. */\n withFeedback: boolean;\n /** Fires when a span detail opens or closes (`null`). */\n onSelectedSpanChange?: (selected: ThreadTraceSelectedSpan | null) => void;\n /** Opens a score from a trace's Scores tab; the app owns routing. */\n onOpenScore: (traceId: string, scoreId: string) => void;\n /** Turns loaded per page: the latest ones on open, then older ones as the reader scrolls up. */\n pageSize?: number;\n}\n\n/**\n * A memory thread rendered as its traces, like a chat: one row per agent turn (oldest at the top),\n * opened on the latest turns, with older turns loaded as the reader scrolls up. Each row shows the\n * reconstructed messages on the left and the span tree on the right. Clicking a span opens its\n * detail panel on the side so the conversation stays readable.\n */\nexport function ThreadViewByTrace({\n threadId,\n withQueryTrace,\n withFeedback,\n onSelectedSpanChange,\n onOpenScore,\n pageSize = 10,\n}: ThreadViewByTraceProps) {\n const legacyFilters = useMemo<UseTracesListSourceArgs['legacyFilters']>(() => ({ threadId }), [threadId]);\n const { rows, isLoading, isPlaceholderData, error, hasNextPage, isFetchingNextPage, fetchNextPage } =\n useTracesListSource({\n initialAutoRefetch: false,\n withQueryTrace,\n legacyFilters,\n limit: pageSize,\n query: now => ({\n timeRange: {\n from: THREAD_WINDOW_FROM,\n to: now.toISOString(),\n },\n where: { op: 'eq', left: { path: 'threadId' }, right: { literal: threadId } },\n orderBy: [{ field: 'startedAt', direction: 'desc' }],\n }),\n });\n // Pages come newest first; the conversation reads oldest first.\n const traceIds = rows.map(trace => trace.traceId).reverse();\n const listSettled = !isLoading && !isPlaceholderData;\n\n // The first page is shown only once its turns' spans have settled too, so the rows mount complete\n // instead of each one loading on its own. Older pages keep their per-row loading.\n const client = useMastraClient();\n const [readyThreadId, setReadyThreadId] = useState<string | null>(null);\n const isReady = readyThreadId === threadId;\n const firstPageSpansSettled = useQueries({\n queries: (isReady || !listSettled ? [] : traceIds).map(traceId => ({\n ...traceSpansQueryOptions(client, traceId),\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n })),\n combine: results => results.every(result => !result.isPending),\n });\n if (!isReady && listSettled && firstPageSpansSettled) setReadyThreadId(threadId);\n\n if (error) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <TracesErrorContent error={error} resource=\"traces\" errorTitle=\"Failed to load traces\" />\n </div>\n );\n }\n\n if (!isReady) return <ThreadViewSkeleton withFeedback={withFeedback} />;\n\n if (traceIds.length === 0) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <Txt variant=\"body\" tone=\"muted\">\n No traces found for this thread.\n </Txt>\n </div>\n );\n }\n\n return (\n <ThreadTrace\n key={threadId}\n traceIds={traceIds}\n onSelectedSpanChange={onSelectedSpanChange}\n onLoadOlder={() => {\n if (hasNextPage && !isFetchingNextPage) fetchNextPage();\n }}\n >\n <ThreadTrace.List data-testid=\"thread-view-by-trace\">\n {traceIds.map((traceId, index) => (\n <ThreadTrace.Row key={traceId} traceId={traceId}>\n <ThreadTraceRowContent turn={index + 1} withFeedback={withFeedback} onOpenScore={onOpenScore} />\n </ThreadTrace.Row>\n ))}\n </ThreadTrace.List>\n <ThreadTrace.SpanPanel />\n </ThreadTrace>\n );\n}\n\nfunction ThreadTraceRowContent({\n turn,\n withFeedback,\n onOpenScore,\n}: {\n /** 1-based position among the loaded turns. */\n turn: number;\n withFeedback: boolean;\n onOpenScore: (traceId: string, scoreId: string) => void;\n}) {\n const { traceId, highlightSpans } = useThreadTraceRow();\n const { Link, paths } = useLinkComponent();\n const traceHref = paths.traceLink(traceId);\n // Same query the span tree observes (passive: the tree drives refetches).\n const { data: traceData } = useTraceSpans({ traceId: traceId, passive: true, queryOptions: { enabled: !!traceId } });\n const rootSpanId = traceData?.spans.find(span => span.parentSpanId == null)?.spanId;\n\n return (\n <>\n <ThreadTrace.Divider label={`Turn ${turn}`}>\n {traceHref && (\n <>\n <Button render={<Link href={traceHref} />} variant=\"ghost\" size=\"sm\" icon={<ExternalLinkIcon />}>\n Go to trace\n </Button>\n <span aria-hidden className=\"h-4 w-px bg-border\" />\n </>\n )}\n <ThreadTrace.TabList>\n <ThreadTrace.Tab value=\"messages\">\n <Icon size=\"xs\">\n <MessageSquareTextIcon />\n </Icon>\n Messages\n </ThreadTrace.Tab>\n {withFeedback && (\n <ThreadTrace.Tab value=\"feedback\">\n <Icon size=\"xs\">\n <MessageSquareReplyIcon />\n </Icon>\n Feedback\n </ThreadTrace.Tab>\n )}\n <ThreadTrace.Tab value=\"scores\">\n <Icon size=\"xs\">\n <ScorersIcon />\n </Icon>\n Scores\n </ThreadTrace.Tab>\n </ThreadTrace.TabList>\n </ThreadTrace.Divider>\n <ThreadTrace.RowBody>\n <ThreadTrace.Messages>\n <ThreadTrace.TabContent value=\"messages\" flush>\n <TraceThreadItemView traceId={traceId} onHighlightSpans={highlightSpans} />\n </ThreadTrace.TabContent>\n {withFeedback && (\n <ThreadTrace.TabContent value=\"feedback\" className=\"min-h-0 py-3\">\n <TraceFeedbackTab key={traceId} traceId={traceId} variant=\"thread\" />\n </ThreadTrace.TabContent>\n )}\n <ThreadTrace.TabContent value=\"scores\" className=\"min-h-0 py-3\">\n {rootSpanId ? (\n <TraceScoresTab\n key={traceId}\n traceId={traceId}\n spanId={rootSpanId}\n onScoreSelect={scoreId => onOpenScore(traceId, scoreId)}\n />\n ) : null}\n </ThreadTrace.TabContent>\n </ThreadTrace.Messages>\n <ThreadTrace.Details>\n <ThreadTrace.Spans />\n </ThreadTrace.Details>\n </ThreadTrace.RowBody>\n </>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -7,11 +7,11 @@ const lucideReact = require('lucide-react');
7
7
  const React = require('react');
8
8
  const domains_traces_traceListColumns = require('../trace-list-columns.cjs.js');
9
9
  const Button = require('../../../Button-C4I05uT4.cjs');
10
- const combobox = require('../../../combobox-DbZAWh8q.cjs');
10
+ const combobox = require('../../../combobox-RlGW9Erz.cjs');
11
11
  require('@base-ui/react/combobox');
12
12
  const dialog = require('../../../dialog-SSeOqRnH.cjs');
13
13
  const dropdownMenu = require('../../../dropdown-menu-CsynT1aD.cjs');
14
- const field = require('../../../field-BCU5ZtWV.cjs');
14
+ const field = require('../../../field-CZ5fldpM.cjs');
15
15
  require('../../../field-control-aria-WzMGs0A4.cjs');
16
16
  const form = require('../../../form-Cw-n1rd9.cjs');
17
17
  const Txt = require('../../../Txt-CIS2G5Jx.cjs');
@@ -3,11 +3,11 @@ import { Columns3Icon, PlusIcon } from 'lucide-react';
3
3
  import { useState, useMemo } from 'react';
4
4
  import { TRACE_USAGE_COLUMNS, TRACE_CUSTOM_COLUMN_FIELDS, TRACE_CUSTOM_COLUMN_LABELS } from '../trace-list-columns.es.js';
5
5
  import { B as Button } from '../../../Button-D8a5EWJ5.js';
6
- import { C as Combobox } from '../../../combobox-BCoCVZHs.js';
6
+ import { C as Combobox } from '../../../combobox-Cff50hgT.js';
7
7
  import '@base-ui/react/combobox';
8
8
  import { D as Dialog, d as DialogContent, g as DialogHeader, j as DialogTitle, e as DialogDescription, a as DialogBody, f as DialogFooter, b as DialogCancel } from '../../../dialog-AzCRnEo3.js';
9
9
  import { D as DropdownMenu } from '../../../dropdown-menu-CQ_48tVI.js';
10
- import { F as Field, e as FieldLabel, c as FieldError } from '../../../field-Dl1zeXTv.js';
10
+ import { F as Field, e as FieldLabel, c as FieldError } from '../../../field-CfA5-ixH.js';
11
11
  import '../../../field-control-aria-DB6y41tQ.js';
12
12
  import { F as Form } from '../../../form-CMfC7JKB.js';
13
13
  import { T as Txt } from '../../../Txt-BtIGLRk1.js';
@@ -16,10 +16,10 @@ const domains_traces_components_traceSpanTree = require('./trace-span-tree.cjs.j
16
16
  const domains_traces_components_traceSummaryDescription = require('./trace-summary-description.cjs.js');
17
17
  const Button = require('../../../Button-C4I05uT4.cjs');
18
18
  const buttonsGroup = require('../../../buttons-group-Bg9Unm6G.cjs');
19
- const dataPanel = require('../../../data-panel-CGRPVnEe.cjs');
19
+ const dataPanel = require('../../../data-panel-xqrai98b.cjs');
20
20
  const dropdownMenu = require('../../../dropdown-menu-CsynT1aD.cjs');
21
21
  const Notice = require('../../../Notice-DYgIy4FO.cjs');
22
- const searchInput = require('../../../search-input-CMNy0JWd.cjs');
22
+ const searchInput = require('../../../search-input-CGNENJDh.cjs');
23
23
  const tabsRoot = require('../../../tabs-root-sOhEgFZ-.cjs');
24
24
  const tabsList = require('../../../tabs-list-BTRYiT_o.cjs');
25
25
  const tabsTab = require('../../../tabs-tab-B0W25Dm2.cjs');
@@ -38,7 +38,6 @@ function TraceDataPanelView({
38
38
  onSpanSelect,
39
39
  onEvaluateTrace,
40
40
  onSaveAsDatasetItem,
41
- onAddTraceMocksToItem,
42
41
  initialSpanId,
43
42
  onPrevious,
44
43
  onNext,
@@ -194,10 +193,6 @@ function TraceDataPanelView({
194
193
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SaveIcon, {}),
195
194
  "Add full trace to dataset"
196
195
  ] }),
197
- !isOnTracePage && onAddTraceMocksToItem && /* @__PURE__ */ jsxRuntime.jsxs(dropdownMenu.DropdownMenu.Item, { onSelect: () => onAddTraceMocksToItem({ traceId }), children: [
198
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.WrenchIcon, {}),
199
- "Add tool mocks to item"
200
- ] }),
201
196
  !isOnTracePage && LinkComponent && traceHref && /* @__PURE__ */ jsxRuntime.jsxs(dropdownMenu.DropdownMenu.Item, { render: /* @__PURE__ */ jsxRuntime.jsx(LinkComponent, { href: traceHref }), children: [
202
197
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Link2Icon, {}),
203
198
  "Open trace page"
@@ -332,7 +327,7 @@ function TraceDataPanelView({
332
327
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
333
328
  searchHeader,
334
329
  /* @__PURE__ */ jsxRuntime.jsxs(dataPanel.DataPanel.Content, { children: [
335
- !isOnTracePage && !onEvaluateTrace && !onSaveAsDatasetItem && !onAddTraceMocksToItem && showUnavailableFeaturesMsg && /* @__PURE__ */ jsxRuntime.jsx(Notice.Notice, { variant: "info", className: "mb-6", children: /* @__PURE__ */ jsxRuntime.jsx(Notice.Notice.Message, { children: "Evaluating traces and saving them as dataset items is available in Mastra Studio (local or deployed)." }) }),
330
+ !isOnTracePage && !onEvaluateTrace && !onSaveAsDatasetItem && showUnavailableFeaturesMsg && /* @__PURE__ */ jsxRuntime.jsx(Notice.Notice, { variant: "info", className: "mb-6", children: /* @__PURE__ */ jsxRuntime.jsx(Notice.Notice.Message, { children: "Evaluating traces and saving them as dataset items is available in Mastra Studio (local or deployed)." }) }),
336
331
  rootSpan && rootError && /* @__PURE__ */ jsxRuntime.jsx(
337
332
  Notice.Notice,
338
333
  {
@@ -1 +1 @@
1
- {"version":3,"file":"trace-data-panel-view.cjs.js","sources":["../../../../src/domains/traces/components/trace-data-panel-view.tsx"],"sourcesContent":["import {\n ChartGanttIcon,\n CircleGaugeIcon,\n DownloadIcon,\n Link2Icon,\n ListTreeIcon,\n Loader2Icon,\n MessageSquareReplyIcon,\n MessageSquareTextIcon,\n MoreHorizontalIcon,\n SaveIcon,\n WrenchIcon,\n} from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { Panel, useDefaultLayout } from 'react-resizable-panels';\nimport { getAllSpanIds } from '../hooks/get-all-span-ids';\nimport { useDownloadTraceJson } from '../hooks/use-download-trace-json';\nimport { useTraceSearch } from '../hooks/use-trace-search';\nimport type { TraceUsageSummary } from '../trace-list-columns';\nimport type { LightSpanRecord } from '../types';\nimport { formatHierarchicalSpans } from './format-hierarchical-spans';\nimport { TraceIdButton } from './trace-id-button';\nimport { TraceSpanTimeline } from './trace-span-timeline';\nimport { TraceSpanTree } from './trace-span-tree';\nimport { TraceSummaryDescription } from './trace-summary-description';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport type { DataPanelProps } from '@/ds/components/DataPanel';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Notice } from '@/ds/components/Notice';\nimport { SearchInput } from '@/ds/components/SearchInput';\nimport { Tab, TabList, Tabs } from '@/ds/components/Tabs';\nimport { Icon } from '@/ds/icons/Icon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { useScrollToFirstHighlight } from '@/hooks/use-scroll-to-first-highlight';\nimport { useTextHighlight } from '@/hooks/use-text-highlight';\nimport { PanelGroup } from '@/lib/resize/panel-group';\nimport { PanelSeparator } from '@/lib/resize/separator';\nimport { cn } from '@/lib/utils';\n\nexport type TraceDataPanelPlacement = 'traces-list' | 'trace-page';\n\nexport type TraceSpanView = 'tree' | 'timeline';\n\n/** What the side column next to the span tree shows. */\nexport type TraceSideView = 'messages' | 'feedback' | 'scores';\n\nexport interface TraceDataPanelViewProps {\n /** Keep the panel mounted and pass `undefined` to close it, so the drawer animates out. */\n traceId?: string;\n /** Lightweight spans for the trace. Caller fetches via useTraceLightSpans. */\n spans: LightSpanRecord[] | undefined;\n isLoading?: boolean;\n onClose: () => void;\n onSpanSelect?: (spanId: string | undefined) => void;\n onEvaluateTrace?: () => void;\n /** When set, an \"Add full trace to dataset\" button appears; the consumer owns the dialog. */\n onSaveAsDatasetItem?: (args: { traceId: string; rootSpanId: string | undefined }) => void;\n /** When set, an \"Add tool mocks to item\" button appears; the consumer owns the dialog. */\n onAddTraceMocksToItem?: (args: { traceId: string }) => void;\n initialSpanId?: string | null;\n onPrevious?: () => void;\n onNext?: () => void;\n /** Drawer width; defaults to `wide` since the panel lays out several columns. */\n size?: DataPanelProps['size'];\n /** Elevation when opened next to other sibling panels. */\n depth?: DataPanelProps['depth'];\n /** Rendered inside the drawer above the trace header (e.g. inbox feedback context). */\n headerSlot?: ReactNode;\n /** Integration-specific actions shown alongside the standard trace controls. */\n headerActionsSlot?: ReactNode;\n /** Accessible drawer name; defaults to the trace id. */\n title?: string;\n placement: TraceDataPanelPlacement;\n /** @deprecated No longer used: the panel renders the span tree with the duration as text. */\n timelineChartWidth?: 'wide' | 'default';\n /** When both are provided, renders an \"Open trace page\" button. */\n LinkComponent?: LinkComponent;\n traceHref?: string;\n /** When provided, the entity name in the trace summary links to the entity's page. */\n entityHref?: string;\n /** Token and estimated-cost totals shown in the compact trace summary. */\n usage?: TraceUsageSummary;\n /**\n * Span treated as the displayed root of the timeline. Required for branch\n * subtrees from `getBranch` where the anchor has a real parent that's outside\n * `spans`. When omitted, the span with no parent is used (trace case).\n */\n anchorSpanId?: string;\n /**\n * Whether to render the \"Evaluating traces and saving them as dataset items is\n * available in Mastra Studio\" info notice when neither `onEvaluateTrace` nor\n * `onSaveAsDatasetItem` is provided. Defaults to `true`. Pass `false` when this\n * panel is rendered inside Studio in a context that intentionally omits those\n * handlers (e.g. inline below an experiment result).\n */\n showUnavailableFeaturesMsg?: boolean;\n /**\n * When provided, a \"Scores\" tab appears; the slot renders whatever trace-level\n * scoring UI the consumer wants.\n */\n scoresTabSlot?: (args: { traceId: string; rootSpanId: string | undefined }) => ReactNode;\n /** Optional count shown in the \"Scores\" tab label. */\n scoresTabBadge?: ReactNode;\n /**\n * When provided, a \"Feedback\" tab appears; the slot renders the trace-level\n * feedback UI. Trace feedback is not scoped to a span — the span panel owns that.\n */\n feedbackTabSlot?: (args: { traceId: string }) => ReactNode;\n /** Optional count rendered after the \"Feedback\" tab label, e.g. `Feedback (3)`. */\n feedbackTabBadge?: ReactNode;\n /** Span ids to feature in the timeline; every other span is faded. */\n featuredSpanIds?: string[];\n /**\n * The \"Messages\" view of the side column next to the span tree (typically the\n * trace as one reconstructed agent turn). Rendered without content padding.\n */\n messagesPanelSlot?: ReactNode;\n /**\n * Actions rendered at the end of the side column's tab row (e.g. \"Open full thread\").\n * `compact` is true when the side column is narrow and controls collapse to icons.\n */\n sideHeaderActions?: (options: { compact: boolean }) => ReactNode;\n /** Controlled span view (tree or timeline); falls back to local state starting on the tree. */\n spanView?: TraceSpanView;\n onSpanViewChange?: (view: TraceSpanView) => void;\n /** Controlled side column view; falls back to the first available view. */\n sideView?: TraceSideView;\n onSideViewChange?: (view: TraceSideView) => void;\n /**\n * Rendered as a column to the right of the timeline inside the same card;\n * typically the span detail.\n */\n spanPanelSlot?: ReactNode;\n}\n\nexport function TraceDataPanelView({\n traceId,\n spans,\n isLoading,\n onClose,\n onSpanSelect,\n onEvaluateTrace,\n onSaveAsDatasetItem,\n onAddTraceMocksToItem,\n initialSpanId,\n onPrevious,\n onNext,\n size = 'wide',\n depth,\n headerSlot,\n headerActionsSlot,\n title,\n placement,\n LinkComponent,\n traceHref,\n entityHref,\n usage,\n anchorSpanId,\n showUnavailableFeaturesMsg = true,\n scoresTabSlot,\n scoresTabBadge,\n feedbackTabSlot,\n feedbackTabBadge,\n featuredSpanIds,\n messagesPanelSlot,\n sideHeaderActions,\n sideView: controlledSideView,\n onSideViewChange,\n spanView: controlledSpanView,\n onSpanViewChange,\n spanPanelSlot,\n}: TraceDataPanelViewProps) {\n const isOnTracePage = placement === 'trace-page';\n\n // The side column next to the span tree hosts Messages / Feedback / Scores;\n // which one is shown is purely a local viewing choice.\n const sideViews = useMemo(() => {\n const views: Array<{ value: TraceSideView; name: string; label: ReactNode }> = [];\n if (messagesPanelSlot) {\n views.push({\n value: 'messages',\n name: 'Messages',\n label: (\n <>\n <Icon size=\"xs\">\n <MessageSquareTextIcon />\n </Icon>\n <span className=\"@max-[501px]:sr-only\">Messages</span>\n </>\n ),\n });\n }\n if (feedbackTabSlot) {\n views.push({\n value: 'feedback',\n name: 'Feedback',\n label: (\n <>\n <Icon size=\"xs\">\n <MessageSquareReplyIcon />\n </Icon>\n <span className=\"@max-[501px]:sr-only\">\n Feedback{feedbackTabBadge != null && <> ({feedbackTabBadge})</>}\n </span>\n </>\n ),\n });\n }\n if (scoresTabSlot) {\n views.push({\n value: 'scores',\n name: 'Scores',\n label: (\n <>\n <Icon size=\"xs\">\n <ScorersIcon />\n </Icon>\n <span className=\"@max-[501px]:sr-only\">Scores{scoresTabBadge != null && <> ({scoresTabBadge})</>}</span>\n </>\n ),\n });\n }\n return views;\n }, [messagesPanelSlot, feedbackTabSlot, feedbackTabBadge, scoresTabSlot, scoresTabBadge]);\n const [uncontrolledSideView, setUncontrolledSideView] = useState<TraceSideView>();\n // Mirrors the side column's `@max-[501px]` container query: the layout collapses in CSS, but\n // tooltips render in a portal outside the container, so they need the width in JS.\n const [sideColumnElement, setSideColumnElement] = useState<HTMLDivElement | null>(null);\n const [compactSide, setCompactSide] = useState(false);\n useEffect(() => {\n if (!sideColumnElement || !('ResizeObserver' in globalThis)) return;\n const observer = new ResizeObserver(() => setCompactSide(sideColumnElement.clientWidth <= 500));\n observer.observe(sideColumnElement);\n return () => observer.disconnect();\n }, [sideColumnElement]);\n const chosenSideView = controlledSideView ?? uncontrolledSideView;\n const sideView = (sideViews.find(view => view.value === chosenSideView) ?? sideViews[0])?.value;\n const handleSideViewChange = (view: TraceSideView) => {\n setUncontrolledSideView(view);\n onSideViewChange?.(view);\n };\n\n const [uncontrolledSpanView, setUncontrolledSpanView] = useState<TraceSpanView>('tree');\n const spanView = controlledSpanView ?? uncontrolledSpanView;\n const setSpanView = (view: TraceSpanView) => {\n setUncontrolledSpanView(view);\n onSpanViewChange?.(view);\n };\n\n const { download: downloadTraceJson, isPending: isDownloadingTrace } = useDownloadTraceJson();\n\n const [selectedSpanId, setSelectedSpanId] = useState<string | undefined>(initialSpanId ?? undefined);\n\n // Sync selected span when initialSpanId or trace data changes\n useEffect(() => {\n // No span requested: clear immediately.\n if (!initialSpanId) {\n setSelectedSpanId(undefined);\n onSpanSelect?.(undefined);\n return;\n }\n // Span requested: wait for trace data before deciding so an in-flight\n // fetch doesn't wipe a URL-provided selection. Callers that default their\n // spans to `[]` while loading only say so through `isLoading`.\n if (isLoading || !spans) return;\n\n const found = spans.find(s => s.spanId === initialSpanId);\n if (found) {\n setSelectedSpanId(initialSpanId);\n onSpanSelect?.(initialSpanId);\n } else {\n setSelectedSpanId(undefined);\n onSpanSelect?.(undefined);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialSpanId, spans, isLoading]);\n\n const { query, setQuery, results, payloadOnlyMatchIds } = useTraceSearch(spans ?? []);\n\n const hierarchicalSpans = useMemo(\n () =>\n formatHierarchicalSpans(\n // Carried on the span rather than drilled as a prop: the tree is rebuilt here and\n // rendered several components deeper.\n results.map(span => ({ ...span, matchedInPayloadOnly: payloadOnlyMatchIds.has(span.spanId) })),\n anchorSpanId,\n ),\n [results, payloadOnlyMatchIds, anchorSpanId],\n );\n\n const [expandedSpanIds, setExpandedSpanIds] = useState<string[]>([]);\n\n useEffect(() => {\n if (hierarchicalSpans.length > 0) {\n setExpandedSpanIds(getAllSpanIds(hierarchicalSpans));\n }\n }, [hierarchicalSpans]);\n\n const rootSpan = useMemo(\n () => (anchorSpanId ? spans?.find(s => s.spanId === anchorSpanId) : spans?.find(s => s.parentSpanId == null)),\n [spans, anchorSpanId],\n );\n const rootError = getSpanError(rootSpan?.error);\n const handleSpanClick = (id: string) => {\n const newId = selectedSpanId === id ? undefined : id;\n setSelectedSpanId(newId);\n onSpanSelect?.(newId);\n };\n\n const traceSummary = rootSpan && (\n <TraceSummaryDescription rootSpan={rootSpan} usage={usage} entityHref={entityHref} LinkComponent={LinkComponent} />\n );\n\n const traceActionsMenu = traceId && (\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button size=\"sm\" variant=\"ghost\" tooltip=\"Open trace actions\" aria-label=\"Open trace actions\">\n <MoreHorizontalIcon />\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\">\n {!isOnTracePage && onSaveAsDatasetItem && (\n <DropdownMenu.Item onSelect={() => onSaveAsDatasetItem({ traceId, rootSpanId: rootSpan?.spanId })}>\n <SaveIcon />\n Add full trace to dataset\n </DropdownMenu.Item>\n )}\n {!isOnTracePage && onAddTraceMocksToItem && (\n <DropdownMenu.Item onSelect={() => onAddTraceMocksToItem({ traceId })}>\n <WrenchIcon />\n Add tool mocks to item\n </DropdownMenu.Item>\n )}\n {!isOnTracePage && LinkComponent && traceHref && (\n <DropdownMenu.Item render={<LinkComponent href={traceHref} />}>\n <Link2Icon />\n Open trace page\n </DropdownMenu.Item>\n )}\n <DropdownMenu.Item disabled={isDownloadingTrace} onSelect={() => downloadTraceJson(traceId)}>\n {isDownloadingTrace ? <Loader2Icon className=\"animate-spin\" /> : <DownloadIcon />}\n Download trace JSON\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n );\n\n const sideColumn =\n traceId && sideView ? (\n <div\n ref={setSideColumnElement}\n data-trace-side-column\n className=\"@container flex h-full min-h-0 min-w-0 flex-col overflow-hidden\"\n >\n {/* Whether the Messages tab exists depends on the spans, so the tabs wait for them;\n otherwise the column flickers Feedback → Messages as the first tab changes. */}\n {isLoading ? (\n <DataPanel.Header className=\"border-b border-border\">\n <div aria-hidden className=\"h-control-sm\" />\n </DataPanel.Header>\n ) : (\n <Tabs<TraceSideView> defaultTab={sideView} value={sideView} onValueChange={handleSideViewChange}>\n {/* `flex-nowrap` + a shrinkable tab column: the tab list's scroll wrapper is full-width,\n so in a wrapping row it would push the actions onto a second line. */}\n <DataPanel.Header className=\"flex-nowrap border-b border-border\">\n <div className=\"min-w-0 flex-1\">\n <TabList variant=\"pill-ghost\" size=\"sm\">\n {sideViews.map(view => (\n <Tab key={view.value} value={view.value} tooltip={compactSide ? view.name : undefined}>\n {view.label}\n </Tab>\n ))}\n </TabList>\n </div>\n {sideHeaderActions && (\n <div className=\"flex shrink-0 items-center whitespace-nowrap\">\n {sideHeaderActions({ compact: compactSide })}\n </div>\n )}\n </DataPanel.Header>\n </Tabs>\n )}\n {!isLoading && sideView === 'messages' && (\n <DataPanel.Content className=\"p-0\">{messagesPanelSlot}</DataPanel.Content>\n )}\n {!isLoading && sideView === 'feedback' && (\n <DataPanel.Content>{feedbackTabSlot?.({ traceId })}</DataPanel.Content>\n )}\n {!isLoading && sideView === 'scores' && (\n <DataPanel.Content>{scoresTabSlot?.({ traceId, rootSpanId: rootSpan?.spanId })}</DataPanel.Content>\n )}\n </div>\n ) : null;\n\n return (\n <DataPanel\n open={!!traceId}\n onClose={onClose}\n title={title ?? (isOnTracePage ? 'Trace Timeline' : `Trace ${traceId ?? ''}`)}\n size={size}\n depth={depth}\n >\n {traceId && (\n <>\n {headerSlot}\n <DataPanel.Header>\n {isOnTracePage ? (\n <>\n <DataPanel.HeaderContent>\n <DataPanel.Heading>Trace Timeline</DataPanel.Heading>\n {traceSummary}\n </DataPanel.HeaderContent>\n <DataPanel.HeaderActions>\n {headerActionsSlot}\n {traceActionsMenu}\n </DataPanel.HeaderActions>\n </>\n ) : (\n <>\n <DataPanel.HeaderContent>\n <DataPanel.Heading>\n Trace\n <TraceIdButton id={traceId} />\n </DataPanel.Heading>\n {traceSummary}\n </DataPanel.HeaderContent>\n <DataPanel.HeaderActions>\n {headerActionsSlot}\n {onEvaluateTrace && (\n <Button variant=\"primary\" size=\"sm\" onClick={onEvaluateTrace} disabled={!rootSpan}>\n <CircleGaugeIcon />\n Score trace\n </Button>\n )}\n {traceActionsMenu}\n {(onPrevious || onNext) && (\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Go to previous trace\"\n nextLabel=\"Go to next trace\"\n />\n )}\n <DataPanel.CloseButton icon=\"x\" onClick={onClose} label=\"Close trace\" tooltip=\"Close trace\" />\n </DataPanel.HeaderActions>\n </>\n )}\n </DataPanel.Header>\n\n <TracePanelColumns\n layoutKey={rootSpan ? (rootSpan.entityType ?? 'unknown') : undefined}\n sideColumnSlot={sideColumn}\n spanPanelSlot={spanPanelSlot}\n highlightQuery={query}\n spanPanelKey={selectedSpanId}\n >\n {!isLoading && !spans?.length ? (\n <DataPanel.NoData>No spans found for this trace.</DataPanel.NoData>\n ) : (\n (() => {\n // Shared by the Spans and Timeline tabs: both views render the same\n // filtered `hierarchicalSpans`, so one query drives both.\n const isTimeline = spanView === 'timeline';\n const searchHeader = (\n <DataPanel.Header className=\"gap-2 border-b border-border\">\n <SearchInput\n label=\"Search spans\"\n placeholder=\"Search spans...\"\n size=\"sm\"\n value={query}\n onValueChange={setQuery}\n className=\"min-w-0 flex-1\"\n />\n <ButtonsGroup size=\"sm\" className=\"shrink-0\">\n <Button\n variant={isTimeline ? 'default' : 'primary'}\n aria-pressed={!isTimeline}\n tooltip=\"Span tree\"\n tooltipPosition=\"bottom\"\n onClick={() => setSpanView('tree')}\n >\n <ListTreeIcon />\n </Button>\n <Button\n variant={isTimeline ? 'primary' : 'default'}\n aria-pressed={isTimeline}\n tooltip=\"Timeline\"\n tooltipPosition=\"bottom\"\n onClick={() => setSpanView('timeline')}\n >\n <ChartGanttIcon />\n </Button>\n </ButtonsGroup>\n </DataPanel.Header>\n );\n const noSearchResults = !isLoading && hierarchicalSpans.length === 0 && (\n <DataPanel.NoData>No spans match your search.</DataPanel.NoData>\n );\n const viewProps = {\n hierarchicalSpans,\n onSpanClick: handleSpanClick,\n selectedSpanId,\n expandedSpanIds,\n setExpandedSpanIds,\n featuredSpanIds,\n revealSpanId: featuredSpanIds?.at(-1),\n isLoading,\n };\n\n return (\n <>\n {searchHeader}\n <DataPanel.Content>\n {!isOnTracePage &&\n !onEvaluateTrace &&\n !onSaveAsDatasetItem &&\n !onAddTraceMocksToItem &&\n showUnavailableFeaturesMsg && (\n <Notice variant=\"info\" className=\"mb-6\">\n <Notice.Message>\n Evaluating traces and saving them as dataset items is available in Mastra Studio (local or\n deployed).\n </Notice.Message>\n </Notice>\n )}\n\n {rootSpan && rootError && (\n <Notice\n variant=\"destructive\"\n title={rootError.name ?? 'Error'}\n action={\n <Notice.Button\n onClick={() => {\n setSelectedSpanId(rootSpan.spanId);\n onSpanSelect?.(rootSpan.spanId);\n }}\n >\n View details\n </Notice.Button>\n }\n className=\"mb-4\"\n >\n <Notice.Message className=\"line-clamp-3\">{rootError.message}</Notice.Message>\n </Notice>\n )}\n\n {/* Both views share selection + expansion state, and stay mounted with no\n results because they host the search field: unmounting would strand the\n user with a query they can no longer clear. */}\n {isTimeline ? <TraceSpanTimeline {...viewProps} /> : <TraceSpanTree {...viewProps} />}\n {noSearchResults}\n </DataPanel.Content>\n </>\n );\n })()\n )}\n </TracePanelColumns>\n </>\n )}\n </DataPanel>\n );\n}\n\n/** The error a span recorded, when it has the `{ name?, message }` shape spans store. */\nfunction getSpanError(error: unknown): { name?: string; message: string } | undefined {\n if (typeof error !== 'object' || error === null || !('message' in error) || typeof error.message !== 'string') {\n return undefined;\n }\n const name = 'name' in error && typeof error.name === 'string' ? error.name : undefined;\n return { name, message: error.message };\n}\n\n/**\n * Lays out the card body as three columns — `[side] [trace] [span]` — inside the\n * same card. The side column (messages / feedback / scores) is independent of the\n * Spans/Timeline tabs, so it sits beside them rather than inside a tab. The side\n * and span columns are resizable (down to a minimum width); the trace column takes the rest.\n * Search matches — span names in the timeline tree as well as values in the span\n * detail — are highlighted while a query is active.\n */\n// localStorage access throws when storage is blocked (privacy modes, sandboxed iframes), and the\n// library parses stored values without a guard; fall back to defaults instead of crashing the panel.\nconst safeLayoutStorage = {\n getItem: (key: string): string | null => {\n try {\n const value = localStorage.getItem(key);\n if (value !== null) JSON.parse(value);\n return value;\n } catch {\n return null;\n }\n },\n setItem: (key: string, value: string) => {\n try {\n localStorage.setItem(key, value);\n } catch {\n // Persisting is best-effort.\n }\n },\n};\n\nfunction TracePanelColumns({\n layoutKey,\n sideColumnSlot,\n spanPanelSlot,\n highlightQuery,\n spanPanelKey,\n children,\n}: {\n /**\n * Root entity type of the trace; column sizes are persisted per value in localStorage.\n * Undefined while the root span is unknown, in which case nothing is persisted.\n */\n layoutKey?: string;\n /** Resizable column on the left (messages / feedback / scores). */\n sideColumnSlot?: ReactNode;\n spanPanelSlot?: ReactNode;\n highlightQuery: string;\n /** Identity of the span shown in the panel; changing it re-triggers the match scroll. */\n spanPanelKey?: string;\n children: ReactNode;\n}) {\n // A single hook call on the common ancestor covers both the timeline tree and\n // the span detail, so span names and payload values highlight together.\n const { ref: highlightRef } = useTextHighlight<HTMLDivElement>(highlightQuery);\n\n // Scoped to the span-panel column only: a match deep in a large payload sits below\n // the fold, so the first painted match is brought into view when the panel opens.\n // The timeline column must never be scrolled by this.\n const { ref: scrollToMatchRef } = useScrollToFirstHighlight<HTMLDivElement>(highlightQuery, spanPanelKey);\n\n // One stored layout per panel combination, so opening/closing the span panel doesn't clobber the other.\n const panelIds = [...(sideColumnSlot ? ['trace-side'] : []), 'trace-main', ...(spanPanelSlot ? ['trace-span'] : [])];\n const { defaultLayout, onLayoutChanged } = useDefaultLayout({\n id: `mastra:trace-panel-layout:${layoutKey ?? 'unknown'}`,\n panelIds,\n storage: safeLayoutStorage,\n });\n\n return (\n <div ref={highlightRef} data-trace-columns className=\"flex min-h-0 flex-1\">\n <PanelGroup\n // defaultLayout is only read on mount: remount once the entity type is known.\n key={layoutKey ?? 'unknown'}\n orientation=\"horizontal\"\n className=\"min-h-0 flex-1\"\n defaultLayout={layoutKey ? defaultLayout : undefined}\n onLayoutChanged={layoutKey ? onLayoutChanged : undefined}\n >\n {sideColumnSlot && (\n <>\n <Panel id=\"trace-side\" minSize={280} defaultSize=\"40%\">\n <div className=\"flex h-full min-h-0 flex-col border-r border-border\">{sideColumnSlot}</div>\n </Panel>\n <PanelSeparator variant=\"pill\" />\n </>\n )}\n <Panel id=\"trace-main\" minSize={320} className=\"flex min-h-0 min-w-0 flex-col\">\n {children}\n </Panel>\n {spanPanelSlot && (\n <>\n <PanelSeparator variant=\"pill\" />\n <Panel id=\"trace-span\" minSize={320} defaultSize=\"35%\">\n <div\n ref={scrollToMatchRef}\n data-highlight\n className=\"flex h-full min-h-0 animate-in flex-col border-l border-border duration-300 fade-in-0\"\n >\n {spanPanelSlot}\n </div>\n </Panel>\n </>\n )}\n </PanelGroup>\n </div>\n );\n}\n"],"names":["useMemo","jsxs","Fragment","jsx","Icon","MessageSquareTextIcon","MessageSquareReplyIcon","ScorersIcon","useState","useEffect","useDownloadTraceJson","useTraceSearch","formatHierarchicalSpans","getAllSpanIds","TraceSummaryDescription","DropdownMenu","Button","MoreHorizontalIcon","SaveIcon","WrenchIcon","Link2Icon","Loader2Icon","DownloadIcon","DataPanel","Tabs","TabList","Tab","TraceIdButton","CircleGaugeIcon","SearchInput","ButtonsGroup","ListTreeIcon","ChartGanttIcon","Notice","TraceSpanTimeline","TraceSpanTree","useTextHighlight","useScrollToFirstHighlight","useDefaultLayout","PanelGroup","Panel","PanelSeparator"],"mappings":"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"}
1
+ {"version":3,"file":"trace-data-panel-view.cjs.js","sources":["../../../../src/domains/traces/components/trace-data-panel-view.tsx"],"sourcesContent":["import {\n ChartGanttIcon,\n CircleGaugeIcon,\n DownloadIcon,\n Link2Icon,\n ListTreeIcon,\n Loader2Icon,\n MessageSquareReplyIcon,\n MessageSquareTextIcon,\n MoreHorizontalIcon,\n SaveIcon,\n} from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { Panel, useDefaultLayout } from 'react-resizable-panels';\nimport { getAllSpanIds } from '../hooks/get-all-span-ids';\nimport { useDownloadTraceJson } from '../hooks/use-download-trace-json';\nimport { useTraceSearch } from '../hooks/use-trace-search';\nimport type { TraceUsageSummary } from '../trace-list-columns';\nimport type { LightSpanRecord } from '../types';\nimport { formatHierarchicalSpans } from './format-hierarchical-spans';\nimport { TraceIdButton } from './trace-id-button';\nimport { TraceSpanTimeline } from './trace-span-timeline';\nimport { TraceSpanTree } from './trace-span-tree';\nimport { TraceSummaryDescription } from './trace-summary-description';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport type { DataPanelProps } from '@/ds/components/DataPanel';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Notice } from '@/ds/components/Notice';\nimport { SearchInput } from '@/ds/components/SearchInput';\nimport { Tab, TabList, Tabs } from '@/ds/components/Tabs';\nimport { Icon } from '@/ds/icons/Icon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { useScrollToFirstHighlight } from '@/hooks/use-scroll-to-first-highlight';\nimport { useTextHighlight } from '@/hooks/use-text-highlight';\nimport { PanelGroup } from '@/lib/resize/panel-group';\nimport { PanelSeparator } from '@/lib/resize/separator';\nimport { cn } from '@/lib/utils';\n\nexport type TraceDataPanelPlacement = 'traces-list' | 'trace-page';\n\nexport type TraceSpanView = 'tree' | 'timeline';\n\n/** What the side column next to the span tree shows. */\nexport type TraceSideView = 'messages' | 'feedback' | 'scores';\n\nexport interface TraceDataPanelViewProps {\n /** Keep the panel mounted and pass `undefined` to close it, so the drawer animates out. */\n traceId?: string;\n /** Lightweight spans for the trace. Caller fetches via useTraceLightSpans. */\n spans: LightSpanRecord[] | undefined;\n isLoading?: boolean;\n onClose: () => void;\n onSpanSelect?: (spanId: string | undefined) => void;\n onEvaluateTrace?: () => void;\n /** When set, an \"Add full trace to dataset\" button appears; the consumer owns the dialog. */\n onSaveAsDatasetItem?: (args: { traceId: string; rootSpanId: string | undefined }) => void;\n initialSpanId?: string | null;\n onPrevious?: () => void;\n onNext?: () => void;\n /** Drawer width; defaults to `wide` since the panel lays out several columns. */\n size?: DataPanelProps['size'];\n /** Elevation when opened next to other sibling panels. */\n depth?: DataPanelProps['depth'];\n /** Rendered inside the drawer above the trace header (e.g. inbox feedback context). */\n headerSlot?: ReactNode;\n /** Integration-specific actions shown alongside the standard trace controls. */\n headerActionsSlot?: ReactNode;\n /** Accessible drawer name; defaults to the trace id. */\n title?: string;\n placement: TraceDataPanelPlacement;\n /** @deprecated No longer used: the panel renders the span tree with the duration as text. */\n timelineChartWidth?: 'wide' | 'default';\n /** When both are provided, renders an \"Open trace page\" button. */\n LinkComponent?: LinkComponent;\n traceHref?: string;\n /** When provided, the entity name in the trace summary links to the entity's page. */\n entityHref?: string;\n /** Token and estimated-cost totals shown in the compact trace summary. */\n usage?: TraceUsageSummary;\n /**\n * Span treated as the displayed root of the timeline. Required for branch\n * subtrees from `getBranch` where the anchor has a real parent that's outside\n * `spans`. When omitted, the span with no parent is used (trace case).\n */\n anchorSpanId?: string;\n /**\n * Whether to render the \"Evaluating traces and saving them as dataset items is\n * available in Mastra Studio\" info notice when neither `onEvaluateTrace` nor\n * `onSaveAsDatasetItem` is provided. Defaults to `true`. Pass `false` when this\n * panel is rendered inside Studio in a context that intentionally omits those\n * handlers (e.g. inline below an experiment result).\n */\n showUnavailableFeaturesMsg?: boolean;\n /**\n * When provided, a \"Scores\" tab appears; the slot renders whatever trace-level\n * scoring UI the consumer wants.\n */\n scoresTabSlot?: (args: { traceId: string; rootSpanId: string | undefined }) => ReactNode;\n /** Optional count shown in the \"Scores\" tab label. */\n scoresTabBadge?: ReactNode;\n /**\n * When provided, a \"Feedback\" tab appears; the slot renders the trace-level\n * feedback UI. Trace feedback is not scoped to a span — the span panel owns that.\n */\n feedbackTabSlot?: (args: { traceId: string }) => ReactNode;\n /** Optional count rendered after the \"Feedback\" tab label, e.g. `Feedback (3)`. */\n feedbackTabBadge?: ReactNode;\n /** Span ids to feature in the timeline; every other span is faded. */\n featuredSpanIds?: string[];\n /**\n * The \"Messages\" view of the side column next to the span tree (typically the\n * trace as one reconstructed agent turn). Rendered without content padding.\n */\n messagesPanelSlot?: ReactNode;\n /**\n * Actions rendered at the end of the side column's tab row (e.g. \"Open full thread\").\n * `compact` is true when the side column is narrow and controls collapse to icons.\n */\n sideHeaderActions?: (options: { compact: boolean }) => ReactNode;\n /** Controlled span view (tree or timeline); falls back to local state starting on the tree. */\n spanView?: TraceSpanView;\n onSpanViewChange?: (view: TraceSpanView) => void;\n /** Controlled side column view; falls back to the first available view. */\n sideView?: TraceSideView;\n onSideViewChange?: (view: TraceSideView) => void;\n /**\n * Rendered as a column to the right of the timeline inside the same card;\n * typically the span detail.\n */\n spanPanelSlot?: ReactNode;\n}\n\nexport function TraceDataPanelView({\n traceId,\n spans,\n isLoading,\n onClose,\n onSpanSelect,\n onEvaluateTrace,\n onSaveAsDatasetItem,\n initialSpanId,\n onPrevious,\n onNext,\n size = 'wide',\n depth,\n headerSlot,\n headerActionsSlot,\n title,\n placement,\n LinkComponent,\n traceHref,\n entityHref,\n usage,\n anchorSpanId,\n showUnavailableFeaturesMsg = true,\n scoresTabSlot,\n scoresTabBadge,\n feedbackTabSlot,\n feedbackTabBadge,\n featuredSpanIds,\n messagesPanelSlot,\n sideHeaderActions,\n sideView: controlledSideView,\n onSideViewChange,\n spanView: controlledSpanView,\n onSpanViewChange,\n spanPanelSlot,\n}: TraceDataPanelViewProps) {\n const isOnTracePage = placement === 'trace-page';\n\n // The side column next to the span tree hosts Messages / Feedback / Scores;\n // which one is shown is purely a local viewing choice.\n const sideViews = useMemo(() => {\n const views: Array<{ value: TraceSideView; name: string; label: ReactNode }> = [];\n if (messagesPanelSlot) {\n views.push({\n value: 'messages',\n name: 'Messages',\n label: (\n <>\n <Icon size=\"xs\">\n <MessageSquareTextIcon />\n </Icon>\n <span className=\"@max-[501px]:sr-only\">Messages</span>\n </>\n ),\n });\n }\n if (feedbackTabSlot) {\n views.push({\n value: 'feedback',\n name: 'Feedback',\n label: (\n <>\n <Icon size=\"xs\">\n <MessageSquareReplyIcon />\n </Icon>\n <span className=\"@max-[501px]:sr-only\">\n Feedback{feedbackTabBadge != null && <> ({feedbackTabBadge})</>}\n </span>\n </>\n ),\n });\n }\n if (scoresTabSlot) {\n views.push({\n value: 'scores',\n name: 'Scores',\n label: (\n <>\n <Icon size=\"xs\">\n <ScorersIcon />\n </Icon>\n <span className=\"@max-[501px]:sr-only\">Scores{scoresTabBadge != null && <> ({scoresTabBadge})</>}</span>\n </>\n ),\n });\n }\n return views;\n }, [messagesPanelSlot, feedbackTabSlot, feedbackTabBadge, scoresTabSlot, scoresTabBadge]);\n const [uncontrolledSideView, setUncontrolledSideView] = useState<TraceSideView>();\n // Mirrors the side column's `@max-[501px]` container query: the layout collapses in CSS, but\n // tooltips render in a portal outside the container, so they need the width in JS.\n const [sideColumnElement, setSideColumnElement] = useState<HTMLDivElement | null>(null);\n const [compactSide, setCompactSide] = useState(false);\n useEffect(() => {\n if (!sideColumnElement || !('ResizeObserver' in globalThis)) return;\n const observer = new ResizeObserver(() => setCompactSide(sideColumnElement.clientWidth <= 500));\n observer.observe(sideColumnElement);\n return () => observer.disconnect();\n }, [sideColumnElement]);\n const chosenSideView = controlledSideView ?? uncontrolledSideView;\n const sideView = (sideViews.find(view => view.value === chosenSideView) ?? sideViews[0])?.value;\n const handleSideViewChange = (view: TraceSideView) => {\n setUncontrolledSideView(view);\n onSideViewChange?.(view);\n };\n\n const [uncontrolledSpanView, setUncontrolledSpanView] = useState<TraceSpanView>('tree');\n const spanView = controlledSpanView ?? uncontrolledSpanView;\n const setSpanView = (view: TraceSpanView) => {\n setUncontrolledSpanView(view);\n onSpanViewChange?.(view);\n };\n\n const { download: downloadTraceJson, isPending: isDownloadingTrace } = useDownloadTraceJson();\n\n const [selectedSpanId, setSelectedSpanId] = useState<string | undefined>(initialSpanId ?? undefined);\n\n // Sync selected span when initialSpanId or trace data changes\n useEffect(() => {\n // No span requested: clear immediately.\n if (!initialSpanId) {\n setSelectedSpanId(undefined);\n onSpanSelect?.(undefined);\n return;\n }\n // Span requested: wait for trace data before deciding so an in-flight\n // fetch doesn't wipe a URL-provided selection. Callers that default their\n // spans to `[]` while loading only say so through `isLoading`.\n if (isLoading || !spans) return;\n\n const found = spans.find(s => s.spanId === initialSpanId);\n if (found) {\n setSelectedSpanId(initialSpanId);\n onSpanSelect?.(initialSpanId);\n } else {\n setSelectedSpanId(undefined);\n onSpanSelect?.(undefined);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialSpanId, spans, isLoading]);\n\n const { query, setQuery, results, payloadOnlyMatchIds } = useTraceSearch(spans ?? []);\n\n const hierarchicalSpans = useMemo(\n () =>\n formatHierarchicalSpans(\n // Carried on the span rather than drilled as a prop: the tree is rebuilt here and\n // rendered several components deeper.\n results.map(span => ({ ...span, matchedInPayloadOnly: payloadOnlyMatchIds.has(span.spanId) })),\n anchorSpanId,\n ),\n [results, payloadOnlyMatchIds, anchorSpanId],\n );\n\n const [expandedSpanIds, setExpandedSpanIds] = useState<string[]>([]);\n\n useEffect(() => {\n if (hierarchicalSpans.length > 0) {\n setExpandedSpanIds(getAllSpanIds(hierarchicalSpans));\n }\n }, [hierarchicalSpans]);\n\n const rootSpan = useMemo(\n () => (anchorSpanId ? spans?.find(s => s.spanId === anchorSpanId) : spans?.find(s => s.parentSpanId == null)),\n [spans, anchorSpanId],\n );\n const rootError = getSpanError(rootSpan?.error);\n const handleSpanClick = (id: string) => {\n const newId = selectedSpanId === id ? undefined : id;\n setSelectedSpanId(newId);\n onSpanSelect?.(newId);\n };\n\n const traceSummary = rootSpan && (\n <TraceSummaryDescription rootSpan={rootSpan} usage={usage} entityHref={entityHref} LinkComponent={LinkComponent} />\n );\n\n const traceActionsMenu = traceId && (\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button size=\"sm\" variant=\"ghost\" tooltip=\"Open trace actions\" aria-label=\"Open trace actions\">\n <MoreHorizontalIcon />\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\">\n {!isOnTracePage && onSaveAsDatasetItem && (\n <DropdownMenu.Item onSelect={() => onSaveAsDatasetItem({ traceId, rootSpanId: rootSpan?.spanId })}>\n <SaveIcon />\n Add full trace to dataset\n </DropdownMenu.Item>\n )}\n {!isOnTracePage && LinkComponent && traceHref && (\n <DropdownMenu.Item render={<LinkComponent href={traceHref} />}>\n <Link2Icon />\n Open trace page\n </DropdownMenu.Item>\n )}\n <DropdownMenu.Item disabled={isDownloadingTrace} onSelect={() => downloadTraceJson(traceId)}>\n {isDownloadingTrace ? <Loader2Icon className=\"animate-spin\" /> : <DownloadIcon />}\n Download trace JSON\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n );\n\n const sideColumn =\n traceId && sideView ? (\n <div\n ref={setSideColumnElement}\n data-trace-side-column\n className=\"@container flex h-full min-h-0 min-w-0 flex-col overflow-hidden\"\n >\n {/* Whether the Messages tab exists depends on the spans, so the tabs wait for them;\n otherwise the column flickers Feedback → Messages as the first tab changes. */}\n {isLoading ? (\n <DataPanel.Header className=\"border-b border-border\">\n <div aria-hidden className=\"h-control-sm\" />\n </DataPanel.Header>\n ) : (\n <Tabs<TraceSideView> defaultTab={sideView} value={sideView} onValueChange={handleSideViewChange}>\n {/* `flex-nowrap` + a shrinkable tab column: the tab list's scroll wrapper is full-width,\n so in a wrapping row it would push the actions onto a second line. */}\n <DataPanel.Header className=\"flex-nowrap border-b border-border\">\n <div className=\"min-w-0 flex-1\">\n <TabList variant=\"pill-ghost\" size=\"sm\">\n {sideViews.map(view => (\n <Tab key={view.value} value={view.value} tooltip={compactSide ? view.name : undefined}>\n {view.label}\n </Tab>\n ))}\n </TabList>\n </div>\n {sideHeaderActions && (\n <div className=\"flex shrink-0 items-center whitespace-nowrap\">\n {sideHeaderActions({ compact: compactSide })}\n </div>\n )}\n </DataPanel.Header>\n </Tabs>\n )}\n {!isLoading && sideView === 'messages' && (\n <DataPanel.Content className=\"p-0\">{messagesPanelSlot}</DataPanel.Content>\n )}\n {!isLoading && sideView === 'feedback' && (\n <DataPanel.Content>{feedbackTabSlot?.({ traceId })}</DataPanel.Content>\n )}\n {!isLoading && sideView === 'scores' && (\n <DataPanel.Content>{scoresTabSlot?.({ traceId, rootSpanId: rootSpan?.spanId })}</DataPanel.Content>\n )}\n </div>\n ) : null;\n\n return (\n <DataPanel\n open={!!traceId}\n onClose={onClose}\n title={title ?? (isOnTracePage ? 'Trace Timeline' : `Trace ${traceId ?? ''}`)}\n size={size}\n depth={depth}\n >\n {traceId && (\n <>\n {headerSlot}\n <DataPanel.Header>\n {isOnTracePage ? (\n <>\n <DataPanel.HeaderContent>\n <DataPanel.Heading>Trace Timeline</DataPanel.Heading>\n {traceSummary}\n </DataPanel.HeaderContent>\n <DataPanel.HeaderActions>\n {headerActionsSlot}\n {traceActionsMenu}\n </DataPanel.HeaderActions>\n </>\n ) : (\n <>\n <DataPanel.HeaderContent>\n <DataPanel.Heading>\n Trace\n <TraceIdButton id={traceId} />\n </DataPanel.Heading>\n {traceSummary}\n </DataPanel.HeaderContent>\n <DataPanel.HeaderActions>\n {headerActionsSlot}\n {onEvaluateTrace && (\n <Button variant=\"primary\" size=\"sm\" onClick={onEvaluateTrace} disabled={!rootSpan}>\n <CircleGaugeIcon />\n Score trace\n </Button>\n )}\n {traceActionsMenu}\n {(onPrevious || onNext) && (\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Go to previous trace\"\n nextLabel=\"Go to next trace\"\n />\n )}\n <DataPanel.CloseButton icon=\"x\" onClick={onClose} label=\"Close trace\" tooltip=\"Close trace\" />\n </DataPanel.HeaderActions>\n </>\n )}\n </DataPanel.Header>\n\n <TracePanelColumns\n layoutKey={rootSpan ? (rootSpan.entityType ?? 'unknown') : undefined}\n sideColumnSlot={sideColumn}\n spanPanelSlot={spanPanelSlot}\n highlightQuery={query}\n spanPanelKey={selectedSpanId}\n >\n {!isLoading && !spans?.length ? (\n <DataPanel.NoData>No spans found for this trace.</DataPanel.NoData>\n ) : (\n (() => {\n // Shared by the Spans and Timeline tabs: both views render the same\n // filtered `hierarchicalSpans`, so one query drives both.\n const isTimeline = spanView === 'timeline';\n const searchHeader = (\n <DataPanel.Header className=\"gap-2 border-b border-border\">\n <SearchInput\n label=\"Search spans\"\n placeholder=\"Search spans...\"\n size=\"sm\"\n value={query}\n onValueChange={setQuery}\n className=\"min-w-0 flex-1\"\n />\n <ButtonsGroup size=\"sm\" className=\"shrink-0\">\n <Button\n variant={isTimeline ? 'default' : 'primary'}\n aria-pressed={!isTimeline}\n tooltip=\"Span tree\"\n tooltipPosition=\"bottom\"\n onClick={() => setSpanView('tree')}\n >\n <ListTreeIcon />\n </Button>\n <Button\n variant={isTimeline ? 'primary' : 'default'}\n aria-pressed={isTimeline}\n tooltip=\"Timeline\"\n tooltipPosition=\"bottom\"\n onClick={() => setSpanView('timeline')}\n >\n <ChartGanttIcon />\n </Button>\n </ButtonsGroup>\n </DataPanel.Header>\n );\n const noSearchResults = !isLoading && hierarchicalSpans.length === 0 && (\n <DataPanel.NoData>No spans match your search.</DataPanel.NoData>\n );\n const viewProps = {\n hierarchicalSpans,\n onSpanClick: handleSpanClick,\n selectedSpanId,\n expandedSpanIds,\n setExpandedSpanIds,\n featuredSpanIds,\n revealSpanId: featuredSpanIds?.at(-1),\n isLoading,\n };\n\n return (\n <>\n {searchHeader}\n <DataPanel.Content>\n {!isOnTracePage && !onEvaluateTrace && !onSaveAsDatasetItem && showUnavailableFeaturesMsg && (\n <Notice variant=\"info\" className=\"mb-6\">\n <Notice.Message>\n Evaluating traces and saving them as dataset items is available in Mastra Studio (local or\n deployed).\n </Notice.Message>\n </Notice>\n )}\n\n {rootSpan && rootError && (\n <Notice\n variant=\"destructive\"\n title={rootError.name ?? 'Error'}\n action={\n <Notice.Button\n onClick={() => {\n setSelectedSpanId(rootSpan.spanId);\n onSpanSelect?.(rootSpan.spanId);\n }}\n >\n View details\n </Notice.Button>\n }\n className=\"mb-4\"\n >\n <Notice.Message className=\"line-clamp-3\">{rootError.message}</Notice.Message>\n </Notice>\n )}\n\n {/* Both views share selection + expansion state, and stay mounted with no\n results because they host the search field: unmounting would strand the\n user with a query they can no longer clear. */}\n {isTimeline ? <TraceSpanTimeline {...viewProps} /> : <TraceSpanTree {...viewProps} />}\n {noSearchResults}\n </DataPanel.Content>\n </>\n );\n })()\n )}\n </TracePanelColumns>\n </>\n )}\n </DataPanel>\n );\n}\n\n/** The error a span recorded, when it has the `{ name?, message }` shape spans store. */\nfunction getSpanError(error: unknown): { name?: string; message: string } | undefined {\n if (typeof error !== 'object' || error === null || !('message' in error) || typeof error.message !== 'string') {\n return undefined;\n }\n const name = 'name' in error && typeof error.name === 'string' ? error.name : undefined;\n return { name, message: error.message };\n}\n\n/**\n * Lays out the card body as three columns — `[side] [trace] [span]` — inside the\n * same card. The side column (messages / feedback / scores) is independent of the\n * Spans/Timeline tabs, so it sits beside them rather than inside a tab. The side\n * and span columns are resizable (down to a minimum width); the trace column takes the rest.\n * Search matches — span names in the timeline tree as well as values in the span\n * detail — are highlighted while a query is active.\n */\n// localStorage access throws when storage is blocked (privacy modes, sandboxed iframes), and the\n// library parses stored values without a guard; fall back to defaults instead of crashing the panel.\nconst safeLayoutStorage = {\n getItem: (key: string): string | null => {\n try {\n const value = localStorage.getItem(key);\n if (value !== null) JSON.parse(value);\n return value;\n } catch {\n return null;\n }\n },\n setItem: (key: string, value: string) => {\n try {\n localStorage.setItem(key, value);\n } catch {\n // Persisting is best-effort.\n }\n },\n};\n\nfunction TracePanelColumns({\n layoutKey,\n sideColumnSlot,\n spanPanelSlot,\n highlightQuery,\n spanPanelKey,\n children,\n}: {\n /**\n * Root entity type of the trace; column sizes are persisted per value in localStorage.\n * Undefined while the root span is unknown, in which case nothing is persisted.\n */\n layoutKey?: string;\n /** Resizable column on the left (messages / feedback / scores). */\n sideColumnSlot?: ReactNode;\n spanPanelSlot?: ReactNode;\n highlightQuery: string;\n /** Identity of the span shown in the panel; changing it re-triggers the match scroll. */\n spanPanelKey?: string;\n children: ReactNode;\n}) {\n // A single hook call on the common ancestor covers both the timeline tree and\n // the span detail, so span names and payload values highlight together.\n const { ref: highlightRef } = useTextHighlight<HTMLDivElement>(highlightQuery);\n\n // Scoped to the span-panel column only: a match deep in a large payload sits below\n // the fold, so the first painted match is brought into view when the panel opens.\n // The timeline column must never be scrolled by this.\n const { ref: scrollToMatchRef } = useScrollToFirstHighlight<HTMLDivElement>(highlightQuery, spanPanelKey);\n\n // One stored layout per panel combination, so opening/closing the span panel doesn't clobber the other.\n const panelIds = [...(sideColumnSlot ? ['trace-side'] : []), 'trace-main', ...(spanPanelSlot ? ['trace-span'] : [])];\n const { defaultLayout, onLayoutChanged } = useDefaultLayout({\n id: `mastra:trace-panel-layout:${layoutKey ?? 'unknown'}`,\n panelIds,\n storage: safeLayoutStorage,\n });\n\n return (\n <div ref={highlightRef} data-trace-columns className=\"flex min-h-0 flex-1\">\n <PanelGroup\n // defaultLayout is only read on mount: remount once the entity type is known.\n key={layoutKey ?? 'unknown'}\n orientation=\"horizontal\"\n className=\"min-h-0 flex-1\"\n defaultLayout={layoutKey ? defaultLayout : undefined}\n onLayoutChanged={layoutKey ? onLayoutChanged : undefined}\n >\n {sideColumnSlot && (\n <>\n <Panel id=\"trace-side\" minSize={280} defaultSize=\"40%\">\n <div className=\"flex h-full min-h-0 flex-col border-r border-border\">{sideColumnSlot}</div>\n </Panel>\n <PanelSeparator variant=\"pill\" />\n </>\n )}\n <Panel id=\"trace-main\" minSize={320} className=\"flex min-h-0 min-w-0 flex-col\">\n {children}\n </Panel>\n {spanPanelSlot && (\n <>\n <PanelSeparator variant=\"pill\" />\n <Panel id=\"trace-span\" minSize={320} defaultSize=\"35%\">\n <div\n ref={scrollToMatchRef}\n data-highlight\n className=\"flex h-full min-h-0 animate-in flex-col border-l border-border duration-300 fade-in-0\"\n >\n {spanPanelSlot}\n </div>\n </Panel>\n </>\n )}\n </PanelGroup>\n </div>\n );\n}\n"],"names":["useMemo","jsxs","Fragment","jsx","Icon","MessageSquareTextIcon","MessageSquareReplyIcon","ScorersIcon","useState","useEffect","useDownloadTraceJson","useTraceSearch","formatHierarchicalSpans","getAllSpanIds","TraceSummaryDescription","DropdownMenu","Button","MoreHorizontalIcon","SaveIcon","Link2Icon","Loader2Icon","DownloadIcon","DataPanel","Tabs","TabList","Tab","TraceIdButton","CircleGaugeIcon","SearchInput","ButtonsGroup","ListTreeIcon","ChartGanttIcon","Notice","TraceSpanTimeline","TraceSpanTree","useTextHighlight","useScrollToFirstHighlight","useDefaultLayout","PanelGroup","Panel","PanelSeparator"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
- import { MessageSquareTextIcon, MessageSquareReplyIcon, MoreHorizontalIcon, SaveIcon, WrenchIcon, Link2Icon, Loader2Icon, DownloadIcon, CircleGaugeIcon, ListTreeIcon, ChartGanttIcon } from 'lucide-react';
2
+ import { MessageSquareTextIcon, MessageSquareReplyIcon, MoreHorizontalIcon, SaveIcon, Link2Icon, Loader2Icon, DownloadIcon, CircleGaugeIcon, ListTreeIcon, ChartGanttIcon } from 'lucide-react';
3
3
  import { useMemo, useState, useEffect } from 'react';
4
4
  import { useDefaultLayout, Panel } from 'react-resizable-panels';
5
5
  import { getAllSpanIds } from '../hooks/get-all-span-ids.es.js';
@@ -12,10 +12,10 @@ import { TraceSpanTree } from './trace-span-tree.es.js';
12
12
  import { TraceSummaryDescription } from './trace-summary-description.es.js';
13
13
  import { B as Button } from '../../../Button-D8a5EWJ5.js';
14
14
  import { B as ButtonsGroup } from '../../../buttons-group-DGWioDP3.js';
15
- import { D as DataPanel } from '../../../data-panel-CUqcB4Vn.js';
15
+ import { D as DataPanel } from '../../../data-panel-DSgidnnv.js';
16
16
  import { D as DropdownMenu } from '../../../dropdown-menu-CQ_48tVI.js';
17
17
  import { N as Notice } from '../../../Notice-BioYTS4b.js';
18
- import { S as SearchInput } from '../../../search-input-C9qFBzn6.js';
18
+ import { S as SearchInput } from '../../../search-input-cIYk0pl3.js';
19
19
  import { T as Tabs } from '../../../tabs-root-CI7WQrJF.js';
20
20
  import { T as TabList } from '../../../tabs-list-BCnrYcX1.js';
21
21
  import { T as Tab } from '../../../tabs-tab-CkLyKrL0.js';
@@ -34,7 +34,6 @@ function TraceDataPanelView({
34
34
  onSpanSelect,
35
35
  onEvaluateTrace,
36
36
  onSaveAsDatasetItem,
37
- onAddTraceMocksToItem,
38
37
  initialSpanId,
39
38
  onPrevious,
40
39
  onNext,
@@ -190,10 +189,6 @@ function TraceDataPanelView({
190
189
  /* @__PURE__ */ jsx(SaveIcon, {}),
191
190
  "Add full trace to dataset"
192
191
  ] }),
193
- !isOnTracePage && onAddTraceMocksToItem && /* @__PURE__ */ jsxs(DropdownMenu.Item, { onSelect: () => onAddTraceMocksToItem({ traceId }), children: [
194
- /* @__PURE__ */ jsx(WrenchIcon, {}),
195
- "Add tool mocks to item"
196
- ] }),
197
192
  !isOnTracePage && LinkComponent && traceHref && /* @__PURE__ */ jsxs(DropdownMenu.Item, { render: /* @__PURE__ */ jsx(LinkComponent, { href: traceHref }), children: [
198
193
  /* @__PURE__ */ jsx(Link2Icon, {}),
199
194
  "Open trace page"
@@ -328,7 +323,7 @@ function TraceDataPanelView({
328
323
  return /* @__PURE__ */ jsxs(Fragment, { children: [
329
324
  searchHeader,
330
325
  /* @__PURE__ */ jsxs(DataPanel.Content, { children: [
331
- !isOnTracePage && !onEvaluateTrace && !onSaveAsDatasetItem && !onAddTraceMocksToItem && showUnavailableFeaturesMsg && /* @__PURE__ */ jsx(Notice, { variant: "info", className: "mb-6", children: /* @__PURE__ */ jsx(Notice.Message, { children: "Evaluating traces and saving them as dataset items is available in Mastra Studio (local or deployed)." }) }),
326
+ !isOnTracePage && !onEvaluateTrace && !onSaveAsDatasetItem && showUnavailableFeaturesMsg && /* @__PURE__ */ jsx(Notice, { variant: "info", className: "mb-6", children: /* @__PURE__ */ jsx(Notice.Message, { children: "Evaluating traces and saving them as dataset items is available in Mastra Studio (local or deployed)." }) }),
332
327
  rootSpan && rootError && /* @__PURE__ */ jsx(
333
328
  Notice,
334
329
  {