@mastra/playground-ui 65.0.0-alpha.2 → 65.0.0-alpha.4

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 (883) hide show
  1. package/README.md +10 -0
  2. package/components.css +7 -0
  3. package/dist/{Avatar-98bsFrSV.js → Avatar-BjaG9NU_.js} +10 -8
  4. package/dist/Avatar-BjaG9NU_.js.map +1 -0
  5. package/dist/{Avatar-BCj8SvOb.cjs → Avatar-DM90rmwx.cjs} +10 -8
  6. package/dist/Avatar-DM90rmwx.cjs.map +1 -0
  7. package/dist/{Button-DH1aTzbs.cjs → Button-C4I05uT4.cjs} +17 -10
  8. package/dist/Button-C4I05uT4.cjs.map +1 -0
  9. package/dist/{Button-EGoajBQY.js → Button-D8a5EWJ5.js} +18 -11
  10. package/dist/Button-D8a5EWJ5.js.map +1 -0
  11. package/dist/{ErrorBoundary-DQPzT6am.js → ErrorBoundary-C6JifxpQ.js} +2 -2
  12. package/dist/{ErrorBoundary-DQPzT6am.js.map → ErrorBoundary-C6JifxpQ.js.map} +1 -1
  13. package/dist/{ErrorBoundary-CpUob9SO.cjs → ErrorBoundary-DP1JqmTo.cjs} +2 -2
  14. package/dist/{ErrorBoundary-CpUob9SO.cjs.map → ErrorBoundary-DP1JqmTo.cjs.map} +1 -1
  15. package/dist/Notice-BioYTS4b.js.map +1 -1
  16. package/dist/Notice-DYgIy4FO.cjs.map +1 -1
  17. package/dist/{activity-CsTUr5_l.js → activity-B7c_nQMn.js} +2 -2
  18. package/dist/activity-B7c_nQMn.js.map +1 -0
  19. package/dist/{activity-2tovEdIP.cjs → activity-D3iI9pYN.cjs} +2 -2
  20. package/dist/activity-D3iI9pYN.cjs.map +1 -0
  21. package/dist/{alert-dialog-B7JTnkF4.js → alert-dialog-B13NSeKN.js} +3 -3
  22. package/dist/{alert-dialog-B7JTnkF4.js.map → alert-dialog-B13NSeKN.js.map} +1 -1
  23. package/dist/{alert-dialog-B1gWLQm2.cjs → alert-dialog-DY2JJAnk.cjs} +3 -3
  24. package/dist/{alert-dialog-B1gWLQm2.cjs.map → alert-dialog-DY2JJAnk.cjs.map} +1 -1
  25. package/dist/arrival-C1hkyLHm.js.map +1 -1
  26. package/dist/arrival-Cvxloi0B.cjs.map +1 -1
  27. package/dist/{ask-user-card-DroerVbm.cjs → ask-user-card-DiFQcUzM.cjs} +2 -2
  28. package/dist/ask-user-card-DiFQcUzM.cjs.map +1 -0
  29. package/dist/{ask-user-card-BCjsjimu.js → ask-user-card-DnvW7jXS.js} +2 -2
  30. package/dist/{ask-user-card-BCjsjimu.js.map → ask-user-card-DnvW7jXS.js.map} +1 -1
  31. package/dist/{avatar-size-CNR0U-LW.js → avatar-size-BXzy28Bx.js} +4 -1
  32. package/dist/avatar-size-BXzy28Bx.js.map +1 -0
  33. package/dist/{avatar-size-DxStOo5A.cjs → avatar-size-DIFE4I8A.cjs} +4 -1
  34. package/dist/avatar-size-DIFE4I8A.cjs.map +1 -0
  35. package/dist/buttons-group.css +0 -4
  36. package/dist/code-DJReJPSX.cjs.map +1 -1
  37. package/dist/code-DLuATvYu.js.map +1 -1
  38. package/dist/{code-block-vpcX2sDQ.cjs → code-block-C79fiykv.cjs} +4 -4
  39. package/dist/{code-block-vpcX2sDQ.cjs.map → code-block-C79fiykv.cjs.map} +1 -1
  40. package/dist/{code-block-DIDa6lg6.js → code-block-D6A1DMv-.js} +4 -4
  41. package/dist/{code-block-DIDa6lg6.js.map → code-block-D6A1DMv-.js.map} +1 -1
  42. package/dist/{code-editor-BDxYMkGm.js → code-editor-8Fpinga4.js} +2 -2
  43. package/dist/{code-editor-BDxYMkGm.js.map → code-editor-8Fpinga4.js.map} +1 -1
  44. package/dist/{code-editor-DQuJ1XXd.cjs → code-editor-Bd-Cldem.cjs} +2 -2
  45. package/dist/{code-editor-DQuJ1XXd.cjs.map → code-editor-Bd-Cldem.cjs.map} +1 -1
  46. package/dist/{collapsible-box-B9ATVQzW.cjs → collapsible-box-CzU0OwJx.cjs} +2 -2
  47. package/dist/{collapsible-box-B9ATVQzW.cjs.map → collapsible-box-CzU0OwJx.cjs.map} +1 -1
  48. package/dist/{collapsible-box-CMBYunuM.js → collapsible-box-DotFa3hr.js} +2 -2
  49. package/dist/{collapsible-box-CMBYunuM.js.map → collapsible-box-DotFa3hr.js.map} +1 -1
  50. package/dist/{combobox-Bw13EcK0.js → combobox-BCoCVZHs.js} +7 -5
  51. package/dist/combobox-BCoCVZHs.js.map +1 -0
  52. package/dist/{combobox-BNlVCFgY.cjs → combobox-DbZAWh8q.cjs} +7 -5
  53. package/dist/combobox-DbZAWh8q.cjs.map +1 -0
  54. package/dist/{combobox-styles-Dr66ofEp.js → combobox-styles-Cens2tsx.js} +2 -2
  55. package/dist/{combobox-styles-Dr66ofEp.js.map → combobox-styles-Cens2tsx.js.map} +1 -1
  56. package/dist/{combobox-styles-BK2nGTNl.cjs → combobox-styles-Cy4rpw03.cjs} +2 -2
  57. package/dist/{combobox-styles-BK2nGTNl.cjs.map → combobox-styles-Cy4rpw03.cjs.map} +1 -1
  58. package/dist/{command-UEPxVJlE.cjs → command-Duh5C_Pm.cjs} +2 -2
  59. package/dist/command-Duh5C_Pm.cjs.map +1 -0
  60. package/dist/{command-V9rsKc7P.js → command-xIH7ZTdl.js} +2 -2
  61. package/dist/command-xIH7ZTdl.js.map +1 -0
  62. package/dist/components/AlertDialog.cjs.js +1 -1
  63. package/dist/components/AlertDialog.es.js +1 -1
  64. package/dist/components/Avatar.cjs.js +1 -1
  65. package/dist/components/Avatar.es.js +1 -1
  66. package/dist/components/Breadcrumb.cjs.js +7 -4
  67. package/dist/components/Breadcrumb.cjs.js.map +1 -1
  68. package/dist/components/Breadcrumb.es.js +7 -4
  69. package/dist/components/Breadcrumb.es.js.map +1 -1
  70. package/dist/components/Button.cjs.js +1 -1
  71. package/dist/components/Button.es.js +2 -2
  72. package/dist/components/ClampedText.cjs.js +2 -2
  73. package/dist/components/ClampedText.cjs.js.map +1 -1
  74. package/dist/components/ClampedText.es.js +2 -2
  75. package/dist/components/ClampedText.es.js.map +1 -1
  76. package/dist/components/CodeBlock.cjs.js +1 -1
  77. package/dist/components/CodeBlock.es.js +1 -1
  78. package/dist/components/CodeEditor.cjs.js +1 -1
  79. package/dist/components/CodeEditor.es.js +1 -1
  80. package/dist/components/CollapsibleBox.cjs.js +1 -1
  81. package/dist/components/CollapsibleBox.es.js +1 -1
  82. package/dist/components/Combobox.cjs.js +2 -2
  83. package/dist/components/Combobox.es.js +2 -2
  84. package/dist/components/Command.cjs.js +1 -1
  85. package/dist/components/Command.es.js +1 -1
  86. package/dist/components/CommandPalette.cjs.js +1 -1
  87. package/dist/components/CommandPalette.es.js +1 -1
  88. package/dist/components/Comment.cjs.js +2 -2
  89. package/dist/components/Comment.es.js +2 -2
  90. package/dist/components/CopyButton.cjs.js +1 -1
  91. package/dist/components/CopyButton.es.js +1 -1
  92. package/dist/components/DataCodeSection.cjs.js +1 -1
  93. package/dist/components/DataCodeSection.es.js +1 -1
  94. package/dist/components/DataDetailsPanel.cjs.js +2 -2
  95. package/dist/components/DataDetailsPanel.es.js +2 -2
  96. package/dist/components/DataKeysAndValues.cjs.js +1 -1
  97. package/dist/components/DataKeysAndValues.es.js +1 -1
  98. package/dist/components/DataList.cjs.js +15 -17
  99. package/dist/components/DataList.cjs.js.map +1 -1
  100. package/dist/components/DataList.es.js +4 -5
  101. package/dist/components/DataList.es.js.map +1 -1
  102. package/dist/components/DataPanel.cjs.js +1 -1
  103. package/dist/components/DataPanel.es.js +1 -1
  104. package/dist/components/DateRangeTimeline.cjs.js +1 -1
  105. package/dist/components/DateRangeTimeline.es.js +1 -1
  106. package/dist/components/DateTimePicker.cjs.js +2 -2
  107. package/dist/components/DateTimePicker.es.js +2 -2
  108. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  109. package/dist/components/DateTimeRangePicker.es.js +1 -1
  110. package/dist/components/Dialog.cjs.js +2 -2
  111. package/dist/components/Dialog.es.js +2 -2
  112. package/dist/components/DisabledFeatureButton.cjs.js +1 -1
  113. package/dist/components/DisabledFeatureButton.es.js +1 -1
  114. package/dist/components/Drawer.cjs.js +1 -1
  115. package/dist/components/Drawer.es.js +1 -1
  116. package/dist/components/EnvironmentVariablesEditor.cjs.js +3 -3
  117. package/dist/components/EnvironmentVariablesEditor.cjs.js.map +1 -1
  118. package/dist/components/EnvironmentVariablesEditor.es.js +3 -3
  119. package/dist/components/EnvironmentVariablesEditor.es.js.map +1 -1
  120. package/dist/components/ErrorBoundary.cjs.js +1 -1
  121. package/dist/components/ErrorBoundary.es.js +1 -1
  122. package/dist/components/FilterBar.cjs.js +8 -31
  123. package/dist/components/FilterBar.cjs.js.map +1 -1
  124. package/dist/components/FilterBar.es.js +10 -33
  125. package/dist/components/FilterBar.es.js.map +1 -1
  126. package/dist/components/FormFieldBlocks.cjs.js +3 -3
  127. package/dist/components/FormFieldBlocks.cjs.js.map +1 -1
  128. package/dist/components/FormFieldBlocks.es.js +3 -3
  129. package/dist/components/FormFieldBlocks.es.js.map +1 -1
  130. package/dist/components/InputGroup.cjs.js +1 -1
  131. package/dist/components/InputGroup.es.js +1 -1
  132. package/dist/components/InputNumber.cjs.js +2 -2
  133. package/dist/components/InputNumber.es.js +2 -2
  134. package/dist/components/JSONSchemaForm.cjs.js +2 -2
  135. package/dist/components/JSONSchemaForm.es.js +2 -2
  136. package/dist/components/ListSearch.cjs.js +1 -1
  137. package/dist/components/ListSearch.es.js +1 -1
  138. package/dist/components/LogsDataList.cjs.js +5 -2
  139. package/dist/components/LogsDataList.cjs.js.map +1 -1
  140. package/dist/components/LogsDataList.es.js +5 -2
  141. package/dist/components/LogsDataList.es.js.map +1 -1
  142. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  143. package/dist/components/MarkdownRenderer.es.js +1 -1
  144. package/dist/components/Message.cjs.js +1 -1
  145. package/dist/components/Message.es.js +1 -1
  146. package/dist/components/MetricsCard.cjs.js +1 -1
  147. package/dist/components/MetricsCard.es.js +1 -1
  148. package/dist/components/PrevNextNav.cjs.js +1 -1
  149. package/dist/components/PrevNextNav.es.js +1 -1
  150. package/dist/components/ProductAvatar.cjs.js +2 -1
  151. package/dist/components/ProductAvatar.cjs.js.map +1 -1
  152. package/dist/components/ProductAvatar.es.js +2 -1
  153. package/dist/components/ProductAvatar.es.js.map +1 -1
  154. package/dist/components/PropertyFilter.cjs.js +4 -4
  155. package/dist/components/PropertyFilter.cjs.js.map +1 -1
  156. package/dist/components/PropertyFilter.es.js +5 -5
  157. package/dist/components/PropertyFilter.es.js.map +1 -1
  158. package/dist/components/RuleBuilder.cjs.js +3 -2
  159. package/dist/components/RuleBuilder.cjs.js.map +1 -1
  160. package/dist/components/RuleBuilder.es.js +3 -2
  161. package/dist/components/RuleBuilder.es.js.map +1 -1
  162. package/dist/components/SavedViews.cjs.js +4 -8
  163. package/dist/components/SavedViews.cjs.js.map +1 -1
  164. package/dist/components/SavedViews.es.js +5 -9
  165. package/dist/components/SavedViews.es.js.map +1 -1
  166. package/dist/components/SearchInput.cjs.js +1 -1
  167. package/dist/components/SearchInput.es.js +1 -1
  168. package/dist/components/Select.cjs.js +1 -1
  169. package/dist/components/Select.es.js +1 -1
  170. package/dist/components/SideDialog.cjs.js +1 -1
  171. package/dist/components/SideDialog.es.js +1 -1
  172. package/dist/components/Sidebar.cjs.js +3 -3
  173. package/dist/components/Sidebar.cjs.js.map +1 -1
  174. package/dist/components/Sidebar.es.js +3 -3
  175. package/dist/components/Sidebar.es.js.map +1 -1
  176. package/dist/components/StatusIndicators.cjs.js.map +1 -1
  177. package/dist/components/StatusIndicators.es.js.map +1 -1
  178. package/dist/components/Table.cjs.js.map +1 -1
  179. package/dist/components/Table.es.js.map +1 -1
  180. package/dist/components/Tabs.cjs.js +1 -1
  181. package/dist/components/Tabs.es.js +1 -1
  182. package/dist/components/ThreadList.cjs.js +1 -1
  183. package/dist/components/ThreadList.es.js +1 -1
  184. package/dist/components/ThreadRail.cjs.js.map +1 -1
  185. package/dist/components/ThreadRail.es.js.map +1 -1
  186. package/dist/components/Truncate.cjs.js +1 -1
  187. package/dist/components/Truncate.es.js +1 -1
  188. package/dist/components/Workflow.cjs.js +6 -6
  189. package/dist/components/Workflow.es.js +6 -6
  190. package/dist/components/ai/activity.cjs.js +4 -4
  191. package/dist/components/ai/activity.es.js +4 -4
  192. package/dist/components/ai/ask-user.cjs.js +1 -1
  193. package/dist/components/ai/ask-user.es.js +1 -1
  194. package/dist/components/ai/plan.cjs.js +1 -1
  195. package/dist/components/ai/plan.es.js +1 -1
  196. package/dist/components/ai/tool-approval.cjs.js +1 -1
  197. package/dist/components/ai/tool-approval.es.js +1 -1
  198. package/dist/components/ai/tool-call.cjs.js +4 -4
  199. package/dist/components/ai/tool-call.es.js +4 -4
  200. package/dist/composer-Bs4iyUfe.js.map +1 -1
  201. package/dist/composer-CDQnP3og.cjs.map +1 -1
  202. package/dist/context-menu-C67xhcfa.js.map +1 -1
  203. package/dist/context-menu-jNuzE86D.cjs.map +1 -1
  204. package/dist/{copy-button-Cd0keCti.cjs → copy-button-BC02oZJo.cjs} +2 -2
  205. package/dist/{copy-button-Cd0keCti.cjs.map → copy-button-BC02oZJo.cjs.map} +1 -1
  206. package/dist/{copy-button-C_M3Tu_-.js → copy-button-B_i9lwFJ.js} +2 -2
  207. package/dist/{copy-button-C_M3Tu_-.js.map → copy-button-B_i9lwFJ.js.map} +1 -1
  208. package/dist/{data-code-section-lj3PaHjc.cjs → data-code-section-BJa6NDgN.cjs} +5 -5
  209. package/dist/{data-code-section-lj3PaHjc.cjs.map → data-code-section-BJa6NDgN.cjs.map} +1 -1
  210. package/dist/{data-code-section-mpRgtM8j.js → data-code-section-Cjs-piiY.js} +5 -5
  211. package/dist/{data-code-section-mpRgtM8j.js.map → data-code-section-Cjs-piiY.js.map} +1 -1
  212. package/dist/{data-keys-and-values-1lYi60YK.cjs → data-keys-and-values-DBXIqeXt.cjs} +2 -2
  213. package/dist/data-keys-and-values-DBXIqeXt.cjs.map +1 -0
  214. package/dist/{data-keys-and-values-CHpxKsfq.js → data-keys-and-values-DHp6cHJo.js} +2 -2
  215. package/dist/data-keys-and-values-DHp6cHJo.js.map +1 -0
  216. package/dist/{data-list-top-DJh08vFA.cjs → data-list-DlXU1PLQ.cjs} +339 -13
  217. package/dist/data-list-DlXU1PLQ.cjs.map +1 -0
  218. package/dist/{data-list-top-T-mtdIUp.js → data-list-Tor18oy5.js} +332 -5
  219. package/dist/data-list-Tor18oy5.js.map +1 -0
  220. package/dist/{data-list-skeleton-bNfITSHs.js → data-list-skeleton-CXUB-u3p.js} +2 -2
  221. package/dist/{data-list-skeleton-bNfITSHs.js.map → data-list-skeleton-CXUB-u3p.js.map} +1 -1
  222. package/dist/{data-list-skeleton-sdcaabdX.cjs → data-list-skeleton-DY0F40WQ.cjs} +6 -6
  223. package/dist/{data-list-skeleton-sdcaabdX.cjs.map → data-list-skeleton-DY0F40WQ.cjs.map} +1 -1
  224. package/dist/{data-panel-BkfjzriB.cjs → data-panel-DGNV14pm.cjs} +20 -9
  225. package/dist/data-panel-DGNV14pm.cjs.map +1 -0
  226. package/dist/{data-panel-CMkR6Avv.js → data-panel-DjtnX70w.js} +20 -9
  227. package/dist/data-panel-DjtnX70w.js.map +1 -0
  228. package/dist/{date-time-range-picker-BjQVCVUM.cjs → date-time-range-picker-CXGab8Nj.cjs} +3 -3
  229. package/dist/{date-time-range-picker-BjQVCVUM.cjs.map → date-time-range-picker-CXGab8Nj.cjs.map} +1 -1
  230. package/dist/{date-time-range-picker-D-EECKzz.js → date-time-range-picker-CcnDMZJu.js} +3 -3
  231. package/dist/{date-time-range-picker-D-EECKzz.js.map → date-time-range-picker-CcnDMZJu.js.map} +1 -1
  232. package/dist/{dialog-j2e95YNV.js → dialog-AzCRnEo3.js} +3 -3
  233. package/dist/{dialog-j2e95YNV.js.map → dialog-AzCRnEo3.js.map} +1 -1
  234. package/dist/{dialog-BMUfQ9XU.cjs → dialog-SSeOqRnH.cjs} +3 -3
  235. package/dist/{dialog-BMUfQ9XU.cjs.map → dialog-SSeOqRnH.cjs.map} +1 -1
  236. package/dist/{dialog-action-CmFDNyZX.cjs → dialog-action-Caa-pb85.cjs} +3 -3
  237. package/dist/{dialog-action-CmFDNyZX.cjs.map → dialog-action-Caa-pb85.cjs.map} +1 -1
  238. package/dist/{dialog-action-zKqvuroE.js → dialog-action-DykMOK2W.js} +3 -3
  239. package/dist/{dialog-action-zKqvuroE.js.map → dialog-action-DykMOK2W.js.map} +1 -1
  240. package/dist/domains/auth/components/session-expired.cjs.js +1 -1
  241. package/dist/domains/auth/components/session-expired.es.js +1 -1
  242. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +2 -2
  243. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +2 -2
  244. package/dist/domains/chat/attachments/composer-attachment.cjs.js +1 -1
  245. package/dist/domains/chat/attachments/composer-attachment.es.js +1 -1
  246. package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
  247. package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
  248. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +3 -3
  249. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +3 -3
  250. package/dist/domains/chat/messages/assistant-message-actions.cjs.js +2 -2
  251. package/dist/domains/chat/messages/assistant-message-actions.es.js +2 -2
  252. package/dist/domains/chat/messages/dataset-save-action.cjs.js +5 -5
  253. package/dist/domains/chat/messages/dataset-save-action.es.js +5 -5
  254. package/dist/domains/chat/messages/message-row.cjs.js +4 -4
  255. package/dist/domains/chat/messages/message-row.es.js +4 -4
  256. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  257. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  258. package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
  259. package/dist/domains/chat/messages/renderers/message-text.cjs.js.map +1 -1
  260. package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
  261. package/dist/domains/chat/messages/renderers/message-text.es.js.map +1 -1
  262. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  263. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  264. package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
  265. package/dist/domains/chat/messages/signal-badge.es.js +1 -1
  266. package/dist/domains/chat/messages/skill-message.cjs.js +3 -3
  267. package/dist/domains/chat/messages/skill-message.es.js +3 -3
  268. package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
  269. package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
  270. package/dist/domains/chat/om/om-parts-converter.cjs.js.map +1 -1
  271. package/dist/domains/chat/om/om-parts-converter.es.js.map +1 -1
  272. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  273. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  274. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +4 -4
  275. package/dist/domains/chat/tools/badges/agent-badge.es.js +4 -4
  276. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  277. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  278. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +3 -3
  279. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js.map +1 -1
  280. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +3 -3
  281. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js.map +1 -1
  282. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +2 -2
  283. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +2 -2
  284. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +2 -2
  285. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +2 -2
  286. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +2 -2
  287. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +2 -2
  288. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +2 -2
  289. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +2 -2
  290. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  291. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  292. package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +1 -1
  293. package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +1 -1
  294. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
  295. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  296. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +3 -3
  297. package/dist/domains/chat/tools/badges/tool-badge.es.js +3 -3
  298. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +6 -3
  299. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
  300. package/dist/domains/chat/tools/badges/workflow-badge.es.js +6 -3
  301. package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
  302. package/dist/domains/chat/tools/submit-plan-tool.cjs.js +2 -2
  303. package/dist/domains/chat/tools/submit-plan-tool.es.js +2 -2
  304. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  305. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  306. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +4 -4
  307. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +4 -4
  308. package/dist/domains/logs/components/log-data-panel.cjs.js +4 -4
  309. package/dist/domains/logs/components/log-data-panel.es.js +4 -4
  310. package/dist/domains/logs/components/logs-list-view.cjs.js +3 -2
  311. package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
  312. package/dist/domains/logs/components/logs-list-view.es.js +3 -2
  313. package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
  314. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  315. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  316. package/dist/domains/logs/components/no-logs-info.cjs.js +1 -1
  317. package/dist/domains/logs/components/no-logs-info.es.js +1 -1
  318. package/dist/domains/mcps/components/mcp-app-viewer.cjs.js.map +1 -1
  319. package/dist/domains/mcps/components/mcp-app-viewer.es.js.map +1 -1
  320. package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
  321. package/dist/domains/memory/components/flame-graph.es.js +1 -1
  322. package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
  323. package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
  324. package/dist/domains/metrics/components/agent-runs-card.cjs.js +1 -1
  325. package/dist/domains/metrics/components/agent-runs-card.es.js +1 -1
  326. package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
  327. package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
  328. package/dist/domains/metrics/components/chart-area.cjs.js +1 -1
  329. package/dist/domains/metrics/components/chart-area.es.js +1 -1
  330. package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
  331. package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
  332. package/dist/domains/metrics/components/chart-card.cjs.js +1 -1
  333. package/dist/domains/metrics/components/chart-card.es.js +1 -1
  334. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  335. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  336. package/dist/domains/metrics/components/failure-rate-card.cjs.js +1 -1
  337. package/dist/domains/metrics/components/failure-rate-card.es.js +1 -1
  338. package/dist/domains/metrics/components/latency-card.cjs.js +1 -1
  339. package/dist/domains/metrics/components/latency-card.es.js +1 -1
  340. package/dist/domains/metrics/components/scores-card.cjs.js +1 -1
  341. package/dist/domains/metrics/components/scores-card.es.js +1 -1
  342. package/dist/domains/metrics/components/token-usage-card.cjs.js +1 -1
  343. package/dist/domains/metrics/components/token-usage-card.es.js +1 -1
  344. package/dist/domains/metrics/components/trace-volume-card.cjs.js +1 -1
  345. package/dist/domains/metrics/components/trace-volume-card.es.js +1 -1
  346. package/dist/domains/metrics/components/usage-card.cjs.js +1 -1
  347. package/dist/domains/metrics/components/usage-card.es.js +1 -1
  348. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js +4 -4
  349. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js +4 -4
  350. package/dist/domains/scores/components/score-data-panel.cjs.js +3 -3
  351. package/dist/domains/scores/components/score-data-panel.es.js +3 -3
  352. package/dist/domains/scores/components/span-scoring.cjs.js +3 -3
  353. package/dist/domains/scores/components/span-scoring.es.js +3 -3
  354. package/dist/domains/scores/components/trace-scores-tab.cjs.js +2 -1
  355. package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
  356. package/dist/domains/scores/components/trace-scores-tab.es.js +2 -1
  357. package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
  358. package/dist/domains/traces/components/feedback-thread.cjs.js +4 -4
  359. package/dist/domains/traces/components/feedback-thread.cjs.js.map +1 -1
  360. package/dist/domains/traces/components/feedback-thread.es.js +4 -4
  361. package/dist/domains/traces/components/feedback-thread.es.js.map +1 -1
  362. package/dist/domains/traces/components/shared.cjs.js +4 -3
  363. package/dist/domains/traces/components/shared.cjs.js.map +1 -1
  364. package/dist/domains/traces/components/shared.es.js +5 -4
  365. package/dist/domains/traces/components/shared.es.js.map +1 -1
  366. package/dist/domains/traces/components/span-data-panel-view.cjs.js +4 -4
  367. package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
  368. package/dist/domains/traces/components/span-data-panel-view.es.js +4 -4
  369. package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
  370. package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
  371. package/dist/domains/traces/components/span-details-view.es.js +1 -1
  372. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +2 -2
  373. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +2 -2
  374. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +2 -2
  375. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +2 -2
  376. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +3 -3
  377. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +3 -3
  378. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
  379. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
  380. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +2 -2
  381. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
  382. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +2 -2
  383. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +2 -2
  384. package/dist/domains/traces/components/span-payload/span-payload-registry.cjs.js.map +1 -1
  385. package/dist/domains/traces/components/span-payload/span-payload-registry.es.js.map +1 -1
  386. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +3 -3
  387. package/dist/domains/traces/components/span-payload/span-payload-section.es.js +3 -3
  388. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +2 -2
  389. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
  390. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +2 -2
  391. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +2 -2
  392. package/dist/domains/traces/components/span-rows.cjs.js +5 -0
  393. package/dist/domains/traces/components/span-rows.cjs.js.map +1 -1
  394. package/dist/domains/traces/components/span-rows.es.js +5 -0
  395. package/dist/domains/traces/components/span-rows.es.js.map +1 -1
  396. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  397. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  398. package/dist/domains/traces/components/span-timeline-row.cjs.js +34 -28
  399. package/dist/domains/traces/components/span-timeline-row.cjs.js.map +1 -1
  400. package/dist/domains/traces/components/span-timeline-row.es.js +34 -28
  401. package/dist/domains/traces/components/span-timeline-row.es.js.map +1 -1
  402. package/dist/domains/traces/components/span-timing-hover-card.cjs.js +1 -1
  403. package/dist/domains/traces/components/span-timing-hover-card.es.js +1 -1
  404. package/dist/domains/traces/components/span-token-usage.cjs.js +1 -1
  405. package/dist/domains/traces/components/span-token-usage.es.js +1 -1
  406. package/dist/domains/traces/components/span-tree-rail.cjs.js +50 -0
  407. package/dist/domains/traces/components/span-tree-rail.cjs.js.map +1 -0
  408. package/dist/domains/traces/components/span-tree-rail.d.ts +2 -0
  409. package/dist/domains/traces/components/span-tree-rail.es.js +42 -0
  410. package/dist/domains/traces/components/span-tree-rail.es.js.map +1 -0
  411. package/dist/domains/traces/components/span-tree-row.cjs.js +2 -2
  412. package/dist/domains/traces/components/span-tree-row.cjs.js.map +1 -1
  413. package/dist/domains/traces/components/span-tree-row.es.js +2 -2
  414. package/dist/domains/traces/components/span-tree-row.es.js.map +1 -1
  415. package/dist/domains/traces/components/span-type-badge.cjs.js +29 -0
  416. package/dist/domains/traces/components/span-type-badge.cjs.js.map +1 -0
  417. package/dist/domains/traces/components/span-type-badge.d.ts +2 -0
  418. package/dist/domains/traces/components/span-type-badge.es.js +25 -0
  419. package/dist/domains/traces/components/span-type-badge.es.js.map +1 -0
  420. package/dist/domains/traces/components/span-type-legend.cjs.js +2 -2
  421. package/dist/domains/traces/components/span-type-legend.cjs.js.map +1 -1
  422. package/dist/domains/traces/components/span-type-legend.es.js +2 -2
  423. package/dist/domains/traces/components/span-type-legend.es.js.map +1 -1
  424. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  425. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  426. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +1 -1
  427. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +1 -1
  428. package/dist/domains/traces/components/thread-trace/thread-trace-row.cjs.js.map +1 -1
  429. package/dist/domains/traces/components/thread-trace/thread-trace-row.es.js.map +1 -1
  430. package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +2 -2
  431. package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +2 -2
  432. package/dist/domains/traces/components/thread-view-by-trace.cjs.js +2 -1
  433. package/dist/domains/traces/components/thread-view-by-trace.cjs.js.map +1 -1
  434. package/dist/domains/traces/components/thread-view-by-trace.es.js +2 -1
  435. package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
  436. package/dist/domains/traces/components/timeline-name-col.cjs.js +53 -27
  437. package/dist/domains/traces/components/timeline-name-col.cjs.js.map +1 -1
  438. package/dist/domains/traces/components/timeline-name-col.es.js +54 -28
  439. package/dist/domains/traces/components/timeline-name-col.es.js.map +1 -1
  440. package/dist/domains/traces/components/timeline-structure-sign.cjs.js +23 -14
  441. package/dist/domains/traces/components/timeline-structure-sign.cjs.js.map +1 -1
  442. package/dist/domains/traces/components/timeline-structure-sign.es.js +24 -15
  443. package/dist/domains/traces/components/timeline-structure-sign.es.js.map +1 -1
  444. package/dist/domains/traces/components/trace-columns-menu.cjs.js +4 -4
  445. package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
  446. package/dist/domains/traces/components/trace-columns-menu.es.js +4 -4
  447. package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
  448. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +32 -5
  449. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  450. package/dist/domains/traces/components/trace-data-panel-view.es.js +32 -5
  451. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  452. package/dist/domains/traces/components/trace-data-panel.cjs.js +5 -2
  453. package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
  454. package/dist/domains/traces/components/trace-data-panel.es.js +5 -2
  455. package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
  456. package/dist/domains/traces/components/trace-error-cell.cjs.js +35 -0
  457. package/dist/domains/traces/components/trace-error-cell.cjs.js.map +1 -0
  458. package/dist/domains/traces/components/trace-error-cell.d.ts +2 -0
  459. package/dist/domains/traces/components/trace-error-cell.es.js +31 -0
  460. package/dist/domains/traces/components/trace-error-cell.es.js.map +1 -0
  461. package/dist/domains/traces/components/trace-error-details.cjs.js +22 -0
  462. package/dist/domains/traces/components/trace-error-details.cjs.js.map +1 -0
  463. package/dist/domains/traces/components/trace-error-details.d.ts +2 -0
  464. package/dist/domains/traces/components/trace-error-details.es.js +18 -0
  465. package/dist/domains/traces/components/trace-error-details.es.js.map +1 -0
  466. package/dist/domains/traces/components/trace-error-summary.cjs.js +31 -0
  467. package/dist/domains/traces/components/trace-error-summary.cjs.js.map +1 -0
  468. package/dist/domains/traces/components/trace-error-summary.d.ts +2 -0
  469. package/dist/domains/traces/components/trace-error-summary.es.js +27 -0
  470. package/dist/domains/traces/components/trace-error-summary.es.js.map +1 -0
  471. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  472. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  473. package/dist/domains/traces/components/trace-span-panel.cjs.js +1 -1
  474. package/dist/domains/traces/components/trace-span-panel.es.js +1 -1
  475. package/dist/domains/traces/components/trace-span-tree-skeleton.cjs.js +7 -7
  476. package/dist/domains/traces/components/trace-span-tree-skeleton.cjs.js.map +1 -1
  477. package/dist/domains/traces/components/trace-span-tree-skeleton.es.js +7 -7
  478. package/dist/domains/traces/components/trace-span-tree-skeleton.es.js.map +1 -1
  479. package/dist/domains/traces/components/trace-span-tree.cjs.js +1 -2
  480. package/dist/domains/traces/components/trace-span-tree.cjs.js.map +1 -1
  481. package/dist/domains/traces/components/trace-span-tree.es.js +2 -3
  482. package/dist/domains/traces/components/trace-span-tree.es.js.map +1 -1
  483. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  484. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  485. package/dist/domains/traces/components/trace-thread-item-view.cjs.js +1 -1
  486. package/dist/domains/traces/components/trace-thread-item-view.es.js +1 -1
  487. package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
  488. package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
  489. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +2 -2
  490. package/dist/domains/traces/components/trace-time-range-chip.es.js +2 -2
  491. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +1 -1
  492. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
  493. package/dist/domains/traces/components/traces-list-view.cjs.js +10 -7
  494. package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
  495. package/dist/domains/traces/components/traces-list-view.es.js +9 -6
  496. package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
  497. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +4 -1
  498. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  499. package/dist/domains/traces/components/traces-page-skeleton.es.js +4 -1
  500. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  501. package/dist/domains/traces/hooks/use-trace-list-navigation.cjs.js.map +1 -1
  502. package/dist/domains/traces/hooks/use-trace-list-navigation.es.js.map +1 -1
  503. package/dist/domains/traces/utils/flatten-to-search-text.cjs.js.map +1 -1
  504. package/dist/domains/traces/utils/flatten-to-search-text.es.js.map +1 -1
  505. package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
  506. package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
  507. package/dist/domains/workflows/components/workflow-information.cjs.js +1 -1
  508. package/dist/domains/workflows/components/workflow-information.es.js +1 -1
  509. package/dist/domains/workflows/components/workflow-step-detail.cjs.js +3 -3
  510. package/dist/domains/workflows/components/workflow-step-detail.es.js +3 -3
  511. package/dist/domains/workflows/components/workflows-list/no-workflows-info.cjs.js +1 -1
  512. package/dist/domains/workflows/components/workflows-list/no-workflows-info.es.js +1 -1
  513. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
  514. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
  515. package/dist/domains/workflows/runs/workflow-run-list.cjs.js +2 -2
  516. package/dist/domains/workflows/runs/workflow-run-list.es.js +2 -2
  517. package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
  518. package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
  519. package/dist/domains/workflows/workflow/data/workflow-data-inspector.cjs.js +2 -2
  520. package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +2 -2
  521. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +1 -1
  522. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +1 -1
  523. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +1 -1
  524. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +1 -1
  525. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.cjs.js +2 -2
  526. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +2 -2
  527. package/dist/domains/workflows/workflow/workflow-body-graph.cjs.js +1 -1
  528. package/dist/domains/workflows/workflow/workflow-body-graph.es.js +1 -1
  529. package/dist/domains/workflows/workflow/workflow-cancel-button.cjs.js +1 -1
  530. package/dist/domains/workflows/workflow/workflow-cancel-button.es.js +1 -1
  531. package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
  532. package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
  533. package/dist/domains/workflows/workflow/workflow-debug-step-controls.cjs.js +1 -1
  534. package/dist/domains/workflows/workflow/workflow-debug-step-controls.es.js +1 -1
  535. package/dist/domains/workflows/workflow/workflow-graph-boundary.cjs.js +3 -3
  536. package/dist/domains/workflows/workflow/workflow-graph-boundary.es.js +3 -3
  537. package/dist/domains/workflows/workflow/workflow-graph-inner.cjs.js +2 -2
  538. package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +2 -2
  539. package/dist/domains/workflows/workflow/workflow-graph-node.cjs.js +2 -2
  540. package/dist/domains/workflows/workflow/workflow-graph-node.es.js +2 -2
  541. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +1 -1
  542. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js.map +1 -1
  543. package/dist/domains/workflows/workflow/workflow-input-data.es.js +1 -1
  544. package/dist/domains/workflows/workflow/workflow-input-data.es.js.map +1 -1
  545. package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +3 -3
  546. package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +3 -3
  547. package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +3 -3
  548. package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +3 -3
  549. package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +2 -2
  550. package/dist/domains/workflows/workflow/workflow-run-data.es.js +2 -2
  551. package/dist/domains/workflows/workflow/workflow-run-header.cjs.js +1 -1
  552. package/dist/domains/workflows/workflow/workflow-run-header.es.js +1 -1
  553. package/dist/domains/workflows/workflow/workflow-status.cjs.js +1 -1
  554. package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
  555. package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +3 -3
  556. package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +3 -3
  557. package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +1 -1
  558. package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +1 -1
  559. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +1 -1
  560. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +1 -1
  561. package/dist/domains/workflows/workflow/workflow-timeline-row.cjs.js +1 -1
  562. package/dist/domains/workflows/workflow/workflow-timeline-row.es.js +1 -1
  563. package/dist/domains/workflows/workflow/workflow-timeline.cjs.js +1 -1
  564. package/dist/domains/workflows/workflow/workflow-timeline.es.js +1 -1
  565. package/dist/domains/workflows/workflow/workflow-trigger-form.cjs.js +1 -1
  566. package/dist/domains/workflows/workflow/workflow-trigger-form.es.js +1 -1
  567. package/dist/domains/workflows/workflow/workflow-trigger-header.cjs.js +1 -1
  568. package/dist/domains/workflows/workflow/workflow-trigger-header.es.js +1 -1
  569. package/dist/domains/workspace/components/workspace-active-file.cjs.js +1 -1
  570. package/dist/domains/workspace/components/workspace-active-file.es.js +1 -1
  571. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +5 -5
  572. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +5 -5
  573. package/dist/domains/workspace/components/workspace-add-skill.cjs.js +1 -1
  574. package/dist/domains/workspace/components/workspace-add-skill.es.js +1 -1
  575. package/dist/domains/workspace/components/workspace-create-directory.cjs.js +2 -2
  576. package/dist/domains/workspace/components/workspace-create-directory.es.js +2 -2
  577. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +2 -2
  578. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +2 -2
  579. package/dist/domains/workspace/components/workspace-search.cjs.js +1 -1
  580. package/dist/domains/workspace/components/workspace-search.es.js +1 -1
  581. package/dist/domains/workspace/components/workspace-tree.cjs.js +2 -2
  582. package/dist/domains/workspace/components/workspace-tree.es.js +2 -2
  583. package/dist/{drawer-DROYPMUm.cjs → drawer-DdTU-nBR.cjs} +2 -2
  584. package/dist/{drawer-DROYPMUm.cjs.map → drawer-DdTU-nBR.cjs.map} +1 -1
  585. package/dist/{drawer-C-8E9yHN.js → drawer-mj-G7-Tu.js} +2 -2
  586. package/dist/{drawer-C-8E9yHN.js.map → drawer-mj-G7-Tu.js.map} +1 -1
  587. package/dist/dropdown-menu-CQ_48tVI.js.map +1 -1
  588. package/dist/dropdown-menu-CsynT1aD.cjs.map +1 -1
  589. package/dist/ee/signals/components/entity-index-list.cjs.js +3 -1
  590. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  591. package/dist/ee/signals/components/entity-index-list.es.js +3 -1
  592. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  593. package/dist/ee/signals/components/signals-empty-state.cjs.js +1 -1
  594. package/dist/ee/signals/components/signals-empty-state.es.js +1 -1
  595. package/dist/ee/signals/components/trace-intelligence-entity-detail.cjs.js.map +1 -1
  596. package/dist/ee/signals/components/trace-intelligence-entity-detail.es.js.map +1 -1
  597. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +6 -4
  598. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  599. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +6 -4
  600. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  601. package/dist/ee/signals/examples-pager.cjs.js +1 -1
  602. package/dist/ee/signals/examples-pager.es.js +1 -1
  603. package/dist/ee/signals/noise-detail-panel.cjs.js +1 -1
  604. package/dist/ee/signals/noise-detail-panel.es.js +1 -1
  605. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +2 -2
  606. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +2 -2
  607. package/dist/ee/signals/settings/trace-signal-settings.cjs.js +1 -1
  608. package/dist/ee/signals/settings/trace-signal-settings.es.js +1 -1
  609. package/dist/ee/signals/signals-error-state.cjs.js +1 -1
  610. package/dist/ee/signals/signals-error-state.es.js +1 -1
  611. package/dist/ee/signals/snapshot-timeline.cjs.js +1 -1
  612. package/dist/ee/signals/snapshot-timeline.es.js +1 -1
  613. package/dist/ee/signals/theme-detail-panel.cjs.js +1 -1
  614. package/dist/ee/signals/theme-detail-panel.es.js +1 -1
  615. package/dist/ee/signals/theme-filter-banner.cjs.js +1 -1
  616. package/dist/ee/signals/theme-filter-banner.es.js +1 -1
  617. package/dist/ee/signals/trace-insight-view.cjs.js +1 -1
  618. package/dist/ee/signals/trace-insight-view.es.js +1 -1
  619. package/dist/ee/signals/trace-intelligence-provider.cjs.js.map +1 -1
  620. package/dist/ee/signals/trace-intelligence-provider.es.js.map +1 -1
  621. package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
  622. package/dist/ee/signals/view-mode-tab.es.js +1 -1
  623. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +3 -3
  624. package/dist/ee/topics/components/topic-trace-summary-list.es.js +3 -3
  625. package/dist/{field-error-id-Dbe6IInA.cjs → field-error-id-0yYYU0ar.cjs} +2 -2
  626. package/dist/{field-error-id-Dbe6IInA.cjs.map → field-error-id-0yYYU0ar.cjs.map} +1 -1
  627. package/dist/{field-error-id-Sqhk00e4.js → field-error-id-CdzuQK5c.js} +2 -2
  628. package/dist/{field-error-id-Sqhk00e4.js.map → field-error-id-CdzuQK5c.js.map} +1 -1
  629. package/dist/{filter-bar-chip-BarAq1S2.js → filter-bar-chip-C9CXOudu.js} +3 -3
  630. package/dist/filter-bar-chip-C9CXOudu.js.map +1 -0
  631. package/dist/{filter-bar-chip-BJJ6ytJ4.cjs → filter-bar-chip-DgvuQv6c.cjs} +3 -3
  632. package/dist/filter-bar-chip-DgvuQv6c.cjs.map +1 -0
  633. package/dist/hooks/use-environment-variables-editor.cjs.js.map +1 -1
  634. package/dist/hooks/use-environment-variables-editor.es.js.map +1 -1
  635. package/dist/hooks/use-fluid-hover.cjs.js.map +1 -1
  636. package/dist/hooks/use-fluid-hover.es.js.map +1 -1
  637. package/dist/icons/Icon.cjs.js.map +1 -1
  638. package/dist/icons/Icon.es.js.map +1 -1
  639. package/dist/icons/SkillIcon.cjs.js.map +1 -1
  640. package/dist/icons/SkillIcon.es.js.map +1 -1
  641. package/dist/icons/icon-size-classes.cjs.js +4 -4
  642. package/dist/icons/icon-size-classes.cjs.js.map +1 -1
  643. package/dist/icons/icon-size-classes.es.js +4 -4
  644. package/dist/icons/icon-size-classes.es.js.map +1 -1
  645. package/dist/{input-group-CiBbTaPP.js → input-group-BAg6iSIe.js} +2 -2
  646. package/dist/{input-group-CiBbTaPP.js.map → input-group-BAg6iSIe.js.map} +1 -1
  647. package/dist/{input-group-DSW5WoSU.cjs → input-group-DRXUthxe.cjs} +2 -2
  648. package/dist/{input-group-DSW5WoSU.cjs.map → input-group-DRXUthxe.cjs.map} +1 -1
  649. package/dist/keyboard/keyboard-dispatcher.cjs.js +2 -4
  650. package/dist/keyboard/keyboard-dispatcher.cjs.js.map +1 -1
  651. package/dist/keyboard/keyboard-dispatcher.es.js +2 -4
  652. package/dist/keyboard/keyboard-dispatcher.es.js.map +1 -1
  653. package/dist/keyboard/keyboard-shortcuts-context.cjs.js.map +1 -1
  654. package/dist/keyboard/keyboard-shortcuts-context.es.js.map +1 -1
  655. package/dist/keyboard/use-keydown.cjs.js +2 -0
  656. package/dist/keyboard/use-keydown.cjs.js.map +1 -1
  657. package/dist/keyboard/use-keydown.es.js +2 -0
  658. package/dist/keyboard/use-keydown.es.js.map +1 -1
  659. package/dist/layout/tabbed-container.cjs.js +4 -4
  660. package/dist/layout/tabbed-container.es.js +4 -4
  661. package/dist/lib/form/components/array-element-wrapper.cjs.js +1 -1
  662. package/dist/lib/form/components/array-element-wrapper.es.js +1 -1
  663. package/dist/lib/form/components/array-wrapper.cjs.js +1 -1
  664. package/dist/lib/form/components/array-wrapper.es.js +1 -1
  665. package/dist/lib/form/components/date-field.cjs.js +1 -1
  666. package/dist/lib/form/components/date-field.es.js +1 -1
  667. package/dist/lib/form/components/form-submit-row.cjs.js +1 -1
  668. package/dist/lib/form/components/form-submit-row.es.js +1 -1
  669. package/dist/lib/form/components/record-field.cjs.js +1 -1
  670. package/dist/lib/form/components/record-field.es.js +1 -1
  671. package/dist/lib/form/components/select-field.cjs.js +1 -1
  672. package/dist/lib/form/components/select-field.es.js +1 -1
  673. package/dist/lib/form/components/submit-button.cjs.js +1 -1
  674. package/dist/lib/form/components/submit-button.es.js +1 -1
  675. package/dist/lib/form/zod-provider.cjs.js.map +1 -1
  676. package/dist/lib/form/zod-provider.es.js.map +1 -1
  677. package/dist/{list-search-D3I6xt0B.js → list-search-ByJdIxIh.js} +2 -2
  678. package/dist/{list-search-D3I6xt0B.js.map → list-search-ByJdIxIh.js.map} +1 -1
  679. package/dist/{list-search-DHiQ1-O6.cjs → list-search-DNJVeHmK.cjs} +2 -2
  680. package/dist/{list-search-DHiQ1-O6.cjs.map → list-search-DNJVeHmK.cjs.map} +1 -1
  681. package/dist/{logs-data-list-Cb85LPcT.js → logs-data-list-CGerYgSd.js} +2 -3
  682. package/dist/{logs-data-list-Cb85LPcT.js.map → logs-data-list-CGerYgSd.js.map} +1 -1
  683. package/dist/{logs-data-list-DlQxxrNw.cjs → logs-data-list-DEZuSjqt.cjs} +21 -22
  684. package/dist/{logs-data-list-DlQxxrNw.cjs.map → logs-data-list-DEZuSjqt.cjs.map} +1 -1
  685. package/dist/{markdown-renderer-HIfFphpI.cjs → markdown-renderer-BcpwvSl9.cjs} +3 -3
  686. package/dist/{markdown-renderer-HIfFphpI.cjs.map → markdown-renderer-BcpwvSl9.cjs.map} +1 -1
  687. package/dist/{markdown-renderer-BYxWiHRj.js → markdown-renderer-CHLpv5n5.js} +3 -3
  688. package/dist/{markdown-renderer-BYxWiHRj.js.map → markdown-renderer-CHLpv5n5.js.map} +1 -1
  689. package/dist/{message-copy-button-CnVgCy9y.cjs → message-copy-button-D3O4hWDV.cjs} +2 -2
  690. package/dist/{message-copy-button-CnVgCy9y.cjs.map → message-copy-button-D3O4hWDV.cjs.map} +1 -1
  691. package/dist/{message-copy-button-Ctew41Rr.js → message-copy-button-OI1mwAaS.js} +2 -2
  692. package/dist/{message-copy-button-Ctew41Rr.js.map → message-copy-button-OI1mwAaS.js.map} +1 -1
  693. package/dist/{metrics-card-DaFApxZY.cjs → metrics-card-CpjGYNBP.cjs} +2 -2
  694. package/dist/{metrics-card-DaFApxZY.cjs.map → metrics-card-CpjGYNBP.cjs.map} +1 -1
  695. package/dist/{metrics-card-Z_moDiV5.js → metrics-card-D6ty6a6Z.js} +2 -2
  696. package/dist/{metrics-card-Z_moDiV5.js.map → metrics-card-D6ty6a6Z.js.map} +1 -1
  697. package/dist/{notification-activity-MR63WqZm.cjs → notification-activity-BSNuqJDd.cjs} +2 -2
  698. package/dist/{notification-activity-MR63WqZm.cjs.map → notification-activity-BSNuqJDd.cjs.map} +1 -1
  699. package/dist/{notification-activity-FJcMFxIj.js → notification-activity-BWXHmlTn.js} +2 -2
  700. package/dist/{notification-activity-FJcMFxIj.js.map → notification-activity-BWXHmlTn.js.map} +1 -1
  701. package/dist/{plan-BoOK_LAB.cjs → plan-Cm3yHvs3.cjs} +4 -4
  702. package/dist/{plan-BoOK_LAB.cjs.map → plan-Cm3yHvs3.cjs.map} +1 -1
  703. package/dist/{plan-m0hj6Zgv.js → plan-TtrepVnQ.js} +4 -4
  704. package/dist/{plan-m0hj6Zgv.js.map → plan-TtrepVnQ.js.map} +1 -1
  705. package/dist/primitives/form-element.cjs.js.map +1 -1
  706. package/dist/primitives/form-element.es.js.map +1 -1
  707. package/dist/primitives/menu-item.cjs.js +4 -2
  708. package/dist/primitives/menu-item.cjs.js.map +1 -1
  709. package/dist/primitives/menu-item.es.js +4 -2
  710. package/dist/primitives/menu-item.es.js.map +1 -1
  711. package/dist/primitives/popup-anchor.cjs.js +34 -0
  712. package/dist/primitives/popup-anchor.cjs.js.map +1 -0
  713. package/dist/primitives/popup-anchor.d.ts +2 -0
  714. package/dist/primitives/popup-anchor.es.js +10 -0
  715. package/dist/primitives/popup-anchor.es.js.map +1 -0
  716. package/dist/primitives/trigger-button.cjs.js +1 -1
  717. package/dist/primitives/trigger-button.es.js +1 -1
  718. package/dist/{property-filter-applied-J9ob_Rss.js → property-filter-applied-BMmMf4DE.js} +2 -2
  719. package/dist/property-filter-applied-BMmMf4DE.js.map +1 -0
  720. package/dist/{property-filter-applied-CtSglSaH.cjs → property-filter-applied-Bj-bh9gv.cjs} +2 -2
  721. package/dist/property-filter-applied-Bj-bh9gv.cjs.map +1 -0
  722. package/dist/{reasoning-activity-5MFE3mzw.js → reasoning-activity-C-sJt2A9.js} +3 -3
  723. package/dist/{reasoning-activity-5MFE3mzw.js.map → reasoning-activity-C-sJt2A9.js.map} +1 -1
  724. package/dist/{reasoning-activity-DMvughvN.cjs → reasoning-activity-DpYFjxuL.cjs} +3 -3
  725. package/dist/{reasoning-activity-DMvughvN.cjs.map → reasoning-activity-DpYFjxuL.cjs.map} +1 -1
  726. package/dist/resize/panel-drawer.cjs.js +1 -1
  727. package/dist/resize/panel-drawer.es.js +1 -1
  728. package/dist/{search-input-BPqubJZC.js → search-input-C9qFBzn6.js} +2 -2
  729. package/dist/{search-input-BPqubJZC.js.map → search-input-C9qFBzn6.js.map} +1 -1
  730. package/dist/{search-input-BUMYRaUW.cjs → search-input-CMNy0JWd.cjs} +2 -2
  731. package/dist/{search-input-BUMYRaUW.cjs.map → search-input-CMNy0JWd.cjs.map} +1 -1
  732. package/dist/section-CctlZIXp.cjs.map +1 -1
  733. package/dist/section-D0hKTVXt.js.map +1 -1
  734. package/dist/{select-CQtsggxJ.js → select-7rYaECQf.js} +2 -2
  735. package/dist/select-7rYaECQf.js.map +1 -0
  736. package/dist/{select-CbNLtiAs.cjs → select-A3AFKLd9.cjs} +2 -2
  737. package/dist/select-A3AFKLd9.cjs.map +1 -0
  738. package/dist/shimmer-BCSr3Rqf.js.map +1 -1
  739. package/dist/shimmer-Co-XPvF9.cjs.map +1 -1
  740. package/dist/{side-dialog-bm8NPDXy.js → side-dialog-DSvj8H6x.js} +4 -4
  741. package/dist/{side-dialog-bm8NPDXy.js.map → side-dialog-DSvj8H6x.js.map} +1 -1
  742. package/dist/{side-dialog-BzULMBaH.cjs → side-dialog-SJCWBnbw.cjs} +4 -4
  743. package/dist/{side-dialog-BzULMBaH.cjs.map → side-dialog-SJCWBnbw.cjs.map} +1 -1
  744. package/dist/{signal-activity-D-_u7DFm.cjs → signal-activity-C_bihjcd.cjs} +2 -2
  745. package/dist/{signal-activity-D-_u7DFm.cjs.map → signal-activity-C_bihjcd.cjs.map} +1 -1
  746. package/dist/{signal-activity-BkFexFiJ.js → signal-activity-J9kpnwAF.js} +2 -2
  747. package/dist/{signal-activity-BkFexFiJ.js.map → signal-activity-J9kpnwAF.js.map} +1 -1
  748. package/dist/{span-payload-primitives-wujxDKfA.cjs → span-payload-primitives-C0KYtmtV.cjs} +3 -3
  749. package/dist/{span-payload-primitives-wujxDKfA.cjs.map → span-payload-primitives-C0KYtmtV.cjs.map} +1 -1
  750. package/dist/{span-payload-primitives-jQiJK0qI.js → span-payload-primitives-D_N9LeLk.js} +3 -3
  751. package/dist/{span-payload-primitives-jQiJK0qI.js.map → span-payload-primitives-D_N9LeLk.js.map} +1 -1
  752. package/dist/src/domains/traces/components/span-rows.d.ts +2 -0
  753. package/dist/src/domains/traces/components/span-tree-rail.d.ts +23 -0
  754. package/dist/src/domains/traces/components/span-type-badge.d.ts +9 -0
  755. package/dist/src/domains/traces/components/timeline-name-col.d.ts +2 -2
  756. package/dist/src/domains/traces/components/timeline-structure-sign.d.ts +14 -1
  757. package/dist/src/domains/traces/components/trace-error-cell.d.ts +8 -0
  758. package/dist/src/domains/traces/components/trace-error-details.d.ts +10 -0
  759. package/dist/src/domains/traces/components/trace-error-summary.d.ts +8 -0
  760. package/dist/src/domains/traces/components/trace-span-tree-skeleton.d.ts +1 -1
  761. package/dist/src/domains/traces/hooks/use-traces-list-source.d.ts +1 -0
  762. package/dist/src/ds/components/Avatar/avatar-size.d.ts +1 -1
  763. package/dist/src/ds/components/Breadcrumb/crumb-switcher.d.ts +0 -1
  764. package/dist/src/ds/components/Button/Button.d.ts +1 -1
  765. package/dist/src/ds/components/EnvironmentVariablesEditor/environment-variables-editor-context.d.ts +1 -2
  766. package/dist/src/ds/components/SavedViews/saved-view-editor.d.ts +1 -1
  767. package/dist/src/ds/components/Select/select.d.ts +1 -1
  768. package/dist/src/ds/primitives/popup-anchor.d.ts +4 -0
  769. package/dist/src/hooks/use-environment-variables-editor.d.ts +1 -1
  770. package/dist/src/lib/keyboard/keyboard-dispatcher.d.ts +2 -0
  771. package/dist/src/lib/keyboard/use-keydown.d.ts +8 -1
  772. package/dist/style.css +121 -143
  773. package/dist/{tabs-tab-DRaRUvQ3.cjs → tabs-tab-B0W25Dm2.cjs} +2 -2
  774. package/dist/{tabs-tab-DRaRUvQ3.cjs.map → tabs-tab-B0W25Dm2.cjs.map} +1 -1
  775. package/dist/{tabs-tab-CIVJEMoY.js → tabs-tab-CkLyKrL0.js} +2 -2
  776. package/dist/{tabs-tab-CIVJEMoY.js.map → tabs-tab-CkLyKrL0.js.map} +1 -1
  777. package/dist/{thread-list-BANpytn3.cjs → thread-list-BBPZYHh8.cjs} +2 -2
  778. package/dist/thread-list-BBPZYHh8.cjs.map +1 -0
  779. package/dist/{thread-list-lXnXsPul.js → thread-list-BGjKZfEH.js} +2 -2
  780. package/dist/thread-list-BGjKZfEH.js.map +1 -0
  781. package/dist/{time-picker-BpCfTfoe.js → time-picker-Bzdboi4W.js} +2 -2
  782. package/dist/{time-picker-BpCfTfoe.js.map → time-picker-Bzdboi4W.js.map} +1 -1
  783. package/dist/{time-picker-DhekkO5t.cjs → time-picker-CyvG-fwX.cjs} +2 -2
  784. package/dist/{time-picker-DhekkO5t.cjs.map → time-picker-CyvG-fwX.cjs.map} +1 -1
  785. package/dist/{tool-approval-BrqoN_mP.js → tool-approval-P8rUFAYp.js} +4 -4
  786. package/dist/{tool-approval-BrqoN_mP.js.map → tool-approval-P8rUFAYp.js.map} +1 -1
  787. package/dist/{tool-approval-zBfJ20iR.cjs → tool-approval-zhWdp8i6.cjs} +4 -4
  788. package/dist/{tool-approval-zBfJ20iR.cjs.map → tool-approval-zhWdp8i6.cjs.map} +1 -1
  789. package/dist/{tool-call-arguments-DwMeGQHD.cjs → tool-call-arguments-DzpFckIm.cjs} +3 -3
  790. package/dist/{tool-call-arguments-DwMeGQHD.cjs.map → tool-call-arguments-DzpFckIm.cjs.map} +1 -1
  791. package/dist/{tool-call-arguments-Dx4LW1Ni.js → tool-call-arguments-goEdIs4f.js} +3 -3
  792. package/dist/{tool-call-arguments-Dx4LW1Ni.js.map → tool-call-arguments-goEdIs4f.js.map} +1 -1
  793. package/dist/{tool-call-group-DJsiIb-B.cjs → tool-call-group-C56oARyx.cjs} +4 -4
  794. package/dist/tool-call-group-C56oARyx.cjs.map +1 -0
  795. package/dist/{tool-call-group-ZDNZog5K.js → tool-call-group-DU4T72Xn.js} +4 -4
  796. package/dist/tool-call-group-DU4T72Xn.js.map +1 -0
  797. package/dist/{tool-call-mono-Bs7y-1Cq.js → tool-call-mono-DPW6hN91.js} +2 -2
  798. package/dist/{tool-call-mono-Bs7y-1Cq.js.map → tool-call-mono-DPW6hN91.js.map} +1 -1
  799. package/dist/{tool-call-mono-I-vdqzCe.cjs → tool-call-mono-aheL8CkL.cjs} +2 -2
  800. package/dist/{tool-call-mono-I-vdqzCe.cjs.map → tool-call-mono-aheL8CkL.cjs.map} +1 -1
  801. package/dist/{tool-call-output-Dd8zlhLd.js → tool-call-output-BQYzMMMi.js} +2 -2
  802. package/dist/{tool-call-output-Dd8zlhLd.js.map → tool-call-output-BQYzMMMi.js.map} +1 -1
  803. package/dist/{tool-call-output-BrNg0Lkd.cjs → tool-call-output-CuwM5IHd.cjs} +2 -2
  804. package/dist/{tool-call-output-BrNg0Lkd.cjs.map → tool-call-output-CuwM5IHd.cjs.map} +1 -1
  805. package/dist/{tool-card-D4yrR2AE.js → tool-card-aclA3iVz.js} +4 -4
  806. package/dist/{tool-card-D4yrR2AE.js.map → tool-card-aclA3iVz.js.map} +1 -1
  807. package/dist/{tool-card-D6UdNzIX.cjs → tool-card-yii3vGHu.cjs} +4 -4
  808. package/dist/{tool-card-D6UdNzIX.cjs.map → tool-card-yii3vGHu.cjs.map} +1 -1
  809. package/dist/{traces-data-list-Bhhg9drs.cjs → traces-data-list-Co9k5J4f.cjs} +18 -20
  810. package/dist/{traces-data-list-Bhhg9drs.cjs.map → traces-data-list-Co9k5J4f.cjs.map} +1 -1
  811. package/dist/{traces-data-list-DMWPJFBc.js → traces-data-list-TCKjOldO.js} +2 -4
  812. package/dist/{traces-data-list-DMWPJFBc.js.map → traces-data-list-TCKjOldO.js.map} +1 -1
  813. package/dist/use-data-list-keyboard-DF3tLe10.cjs.map +1 -1
  814. package/dist/use-data-list-keyboard-DFQr4t38.js.map +1 -1
  815. package/dist/{use-workflow-graph-runtime-DF-56pIR.cjs → use-workflow-graph-runtime-DcQD5eA6.cjs} +3 -3
  816. package/dist/{use-workflow-graph-runtime-DF-56pIR.cjs.map → use-workflow-graph-runtime-DcQD5eA6.cjs.map} +1 -1
  817. package/dist/{use-workflow-graph-runtime-BrHXo49Q.js → use-workflow-graph-runtime-xq_aSXPh.js} +3 -3
  818. package/dist/{use-workflow-graph-runtime-BrHXo49Q.js.map → use-workflow-graph-runtime-xq_aSXPh.js.map} +1 -1
  819. package/dist/utils/workspace-compat.cjs.js.map +1 -1
  820. package/dist/utils/workspace-compat.es.js.map +1 -1
  821. package/dist/{workflow-code-dialog-content-CfVy6bGG.cjs → workflow-code-dialog-content-B_BQCuFW.cjs} +3 -3
  822. package/dist/{workflow-code-dialog-content-CfVy6bGG.cjs.map → workflow-code-dialog-content-B_BQCuFW.cjs.map} +1 -1
  823. package/dist/{workflow-code-dialog-content-DviJz1jB.js → workflow-code-dialog-content-CFEaeYUX.js} +3 -3
  824. package/dist/{workflow-code-dialog-content-DviJz1jB.js.map → workflow-code-dialog-content-CFEaeYUX.js.map} +1 -1
  825. package/dist/{workflow-condition-card-BRwhMmNO.cjs → workflow-condition-card-CMzoK307.cjs} +3 -3
  826. package/dist/{workflow-condition-card-BRwhMmNO.cjs.map → workflow-condition-card-CMzoK307.cjs.map} +1 -1
  827. package/dist/{workflow-condition-card-sFdOjlab.js → workflow-condition-card-CbQ4fCxY.js} +3 -3
  828. package/dist/{workflow-condition-card-sFdOjlab.js.map → workflow-condition-card-CbQ4fCxY.js.map} +1 -1
  829. package/dist/{workflow-data-edge-view-DpPhr9gZ.cjs → workflow-data-edge-view-0utEB4Yb.cjs} +2 -2
  830. package/dist/{workflow-data-edge-view-DpPhr9gZ.cjs.map → workflow-data-edge-view-0utEB4Yb.cjs.map} +1 -1
  831. package/dist/{workflow-data-edge-view-CuSzc6YI.js → workflow-data-edge-view-gwwJEvXz.js} +2 -2
  832. package/dist/{workflow-data-edge-view-CuSzc6YI.js.map → workflow-data-edge-view-gwwJEvXz.js.map} +1 -1
  833. package/dist/{workflow-debug-controls-CAn_6S8K.cjs → workflow-debug-controls-B5zqE_rm.cjs} +2 -2
  834. package/dist/{workflow-debug-controls-CAn_6S8K.cjs.map → workflow-debug-controls-B5zqE_rm.cjs.map} +1 -1
  835. package/dist/{workflow-debug-controls-CLzbxd5O.js → workflow-debug-controls-CPpdNzD9.js} +2 -2
  836. package/dist/{workflow-debug-controls-CLzbxd5O.js.map → workflow-debug-controls-CPpdNzD9.js.map} +1 -1
  837. package/dist/{workflow-edge-data-button-Dtt_OUz9.js → workflow-edge-data-button-YWjfx-W0.js} +4 -4
  838. package/dist/{workflow-edge-data-button-Dtt_OUz9.js.map → workflow-edge-data-button-YWjfx-W0.js.map} +1 -1
  839. package/dist/{workflow-edge-data-button-B8rQaAoK.cjs → workflow-edge-data-button-tDvziS5v.cjs} +4 -4
  840. package/dist/{workflow-edge-data-button-B8rQaAoK.cjs.map → workflow-edge-data-button-tDvziS5v.cjs.map} +1 -1
  841. package/dist/{workflow-step-action-DqFjktfs.js → workflow-step-action-D8MVfEIl.js} +2 -2
  842. package/dist/{workflow-step-action-DqFjktfs.js.map → workflow-step-action-D8MVfEIl.js.map} +1 -1
  843. package/dist/{workflow-step-action-Cu01omgz.cjs → workflow-step-action-DZgS0_fL.cjs} +2 -2
  844. package/dist/{workflow-step-action-Cu01omgz.cjs.map → workflow-step-action-DZgS0_fL.cjs.map} +1 -1
  845. package/package.json +11 -13
  846. package/theme/scale.css +7 -0
  847. package/dist/Avatar-98bsFrSV.js.map +0 -1
  848. package/dist/Avatar-BCj8SvOb.cjs.map +0 -1
  849. package/dist/Button-DH1aTzbs.cjs.map +0 -1
  850. package/dist/Button-EGoajBQY.js.map +0 -1
  851. package/dist/activity-2tovEdIP.cjs.map +0 -1
  852. package/dist/activity-CsTUr5_l.js.map +0 -1
  853. package/dist/ask-user-card-DroerVbm.cjs.map +0 -1
  854. package/dist/avatar-size-CNR0U-LW.js.map +0 -1
  855. package/dist/avatar-size-DxStOo5A.cjs.map +0 -1
  856. package/dist/combobox-BNlVCFgY.cjs.map +0 -1
  857. package/dist/combobox-Bw13EcK0.js.map +0 -1
  858. package/dist/command-UEPxVJlE.cjs.map +0 -1
  859. package/dist/command-V9rsKc7P.js.map +0 -1
  860. package/dist/data-keys-and-values-1lYi60YK.cjs.map +0 -1
  861. package/dist/data-keys-and-values-CHpxKsfq.js.map +0 -1
  862. package/dist/data-list-CmjTe8xE.cjs +0 -142
  863. package/dist/data-list-CmjTe8xE.cjs.map +0 -1
  864. package/dist/data-list-DT1LVR29.js +0 -138
  865. package/dist/data-list-DT1LVR29.js.map +0 -1
  866. package/dist/data-list-spacer-CdlT6bDd.cjs +0 -218
  867. package/dist/data-list-spacer-CdlT6bDd.cjs.map +0 -1
  868. package/dist/data-list-spacer-D--gDmOm.js +0 -209
  869. package/dist/data-list-spacer-D--gDmOm.js.map +0 -1
  870. package/dist/data-list-top-DJh08vFA.cjs.map +0 -1
  871. package/dist/data-list-top-T-mtdIUp.js.map +0 -1
  872. package/dist/data-panel-BkfjzriB.cjs.map +0 -1
  873. package/dist/data-panel-CMkR6Avv.js.map +0 -1
  874. package/dist/filter-bar-chip-BJJ6ytJ4.cjs.map +0 -1
  875. package/dist/filter-bar-chip-BarAq1S2.js.map +0 -1
  876. package/dist/property-filter-applied-CtSglSaH.cjs.map +0 -1
  877. package/dist/property-filter-applied-J9ob_Rss.js.map +0 -1
  878. package/dist/select-CQtsggxJ.js.map +0 -1
  879. package/dist/select-CbNLtiAs.cjs.map +0 -1
  880. package/dist/thread-list-BANpytn3.cjs.map +0 -1
  881. package/dist/thread-list-lXnXsPul.js.map +0 -1
  882. package/dist/tool-call-group-DJsiIb-B.cjs.map +0 -1
  883. package/dist/tool-call-group-ZDNZog5K.js.map +0 -1
@@ -2,16 +2,16 @@ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  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
- import { B as Button } from '../../../Button-EGoajBQY.js';
6
- import { C as Combobox } from '../../../combobox-Bw13EcK0.js';
5
+ import { B as Button } from '../../../Button-D8a5EWJ5.js';
6
+ import { C as Combobox } from '../../../combobox-BCoCVZHs.js';
7
7
  import '@base-ui/react/combobox';
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-j2e95YNV.js';
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
10
  import { F as Field, e as FieldLabel, c as FieldError } from '../../../field-Dl1zeXTv.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';
14
- import { D as DialogAction } from '../../../dialog-action-zKqvuroE.js';
14
+ import { D as DialogAction } from '../../../dialog-action-DykMOK2W.js';
15
15
 
16
16
  const EMPTY_KEYS = [];
17
17
  const STANDARD_COLUMNS = [
@@ -1 +1 @@
1
- {"version":3,"file":"trace-columns-menu.es.js","sources":["../../../../src/domains/traces/components/trace-columns-menu.tsx"],"sourcesContent":["import { Columns3Icon, PlusIcon } from 'lucide-react';\nimport { useMemo, useState, type FormEvent } from 'react';\nimport { TRACE_CUSTOM_COLUMN_FIELDS, TRACE_CUSTOM_COLUMN_LABELS, TRACE_USAGE_COLUMNS } from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceOptionalColumn } from '../trace-list-columns';\nimport { Button } from '@/ds/components/Button';\nimport { Combobox } from '@/ds/components/Combobox';\nimport {\n Dialog,\n DialogAction,\n DialogBody,\n DialogCancel,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/ds/components/Dialog';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Field, FieldError, FieldLabel } from '@/ds/components/Field';\nimport { Form } from '@/ds/components/Form';\nimport { Txt } from '@/ds/components/Txt';\n\nconst EMPTY_KEYS: readonly string[] = [];\n\nconst STANDARD_COLUMNS: readonly TraceOptionalColumn[] = [\n 'type',\n 'input',\n 'output',\n 'duration',\n 'endTime',\n 'environment',\n];\n\nconst COLUMN_LABELS: Record<TraceOptionalColumn, string> = {\n type: 'Primitive type',\n input: 'Input',\n output: 'Output',\n duration: 'Duration',\n endTime: 'End',\n environment: 'Environment',\n inputTokens: 'Input tokens',\n outputTokens: 'Output tokens',\n totalTokens: 'Total tokens',\n estimatedCost: 'Estimated cost',\n};\n\ntype TraceColumnsMenuProps = {\n preferences: TraceColumnPreferences;\n /** Top-level metadata keys observed on traces in the current time range, offered in the picker. */\n availableMetadataKeys?: readonly string[];\n usageDisabledReason?: string;\n /** When false (server without the trace-query API), metadata columns can't be added. Defaults to true. */\n withQueryTrace?: boolean;\n onToggleColumn: (column: TraceOptionalColumn) => void;\n onAddCustomColumn: (field: TraceCustomColumn) => void;\n onRemoveCustomColumn: (field: TraceCustomColumn) => void;\n onAddMetadataColumn: (key: string) => void;\n onRemoveMetadataColumn: (key: string) => void;\n onReset: () => void;\n};\n\nexport function TraceColumnsMenu({\n preferences,\n availableMetadataKeys = EMPTY_KEYS,\n usageDisabledReason,\n withQueryTrace = true,\n onToggleColumn,\n onAddCustomColumn,\n onRemoveCustomColumn,\n onAddMetadataColumn,\n onRemoveMetadataColumn,\n onReset,\n}: TraceColumnsMenuProps) {\n const [isMetadataDialogOpen, setIsMetadataDialogOpen] = useState(false);\n const [metadataKey, setMetadataKey] = useState('');\n const [metadataError, setMetadataError] = useState<string | undefined>();\n\n const metadataKeyOptions = useMemo(() => {\n const keys = availableMetadataKeys.filter(key => !preferences.metadataKeys.includes(key));\n if (metadataKey && !keys.includes(metadataKey)) keys.push(metadataKey);\n return keys.map(key => ({ label: key, value: key }));\n }, [availableMetadataKeys, preferences.metadataKeys, metadataKey]);\n\n const handleDialogOpenChange = (open: boolean) => {\n setIsMetadataDialogOpen(open);\n if (!open) {\n setMetadataKey('');\n setMetadataError(undefined);\n }\n };\n\n const handleAddMetadata = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const normalizedKey = metadataKey.trim();\n if (!normalizedKey) {\n setMetadataError('Enter a metadata key.');\n return;\n }\n if (preferences.metadataKeys.includes(normalizedKey)) {\n setMetadataError('That metadata column is already visible.');\n return;\n }\n\n onAddMetadataColumn(normalizedKey);\n handleDialogOpenChange(false);\n };\n\n return (\n <>\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button variant=\"ghost\" size=\"md\" icon={<Columns3Icon aria-hidden />}>\n Columns\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\" className=\"min-w-56\">\n <DropdownMenu.Label>Standard columns</DropdownMenu.Label>\n {STANDARD_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Usage columns</DropdownMenu.Label>\n {TRACE_USAGE_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n disabled={Boolean(usageDisabledReason)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n {usageDisabledReason && (\n <Txt variant=\"meta\" tone=\"faint\" className=\"px-2 py-1\" role=\"note\">\n {usageDisabledReason}\n </Txt>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Custom columns</DropdownMenu.Label>\n {TRACE_CUSTOM_COLUMN_FIELDS.map(field => {\n const isVisible = preferences.customColumns.includes(field);\n return (\n <DropdownMenu.CheckboxItem\n key={field}\n checked={isVisible}\n onCheckedChange={() => (isVisible ? onRemoveCustomColumn(field) : onAddCustomColumn(field))}\n >\n {TRACE_CUSTOM_COLUMN_LABELS[field]}\n </DropdownMenu.CheckboxItem>\n );\n })}\n\n {(withQueryTrace || preferences.metadataKeys.length > 0) && (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Metadata columns</DropdownMenu.Label>\n {preferences.metadataKeys.map(key => (\n <DropdownMenu.CheckboxItem\n key={key}\n checked\n title={key}\n onCheckedChange={() => onRemoveMetadataColumn(key)}\n >\n {key}\n </DropdownMenu.CheckboxItem>\n ))}\n {withQueryTrace && (\n <DropdownMenu.Item onSelect={() => setIsMetadataDialogOpen(true)}>\n <PlusIcon aria-hidden />\n Add metadata column\n </DropdownMenu.Item>\n )}\n </>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Item onSelect={onReset}>Reset to defaults</DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n\n {withQueryTrace && (\n <Dialog open={isMetadataDialogOpen} onOpenChange={handleDialogOpenChange}>\n <DialogContent>\n <Form onSubmit={handleAddMetadata} className=\"gap-0\">\n <DialogHeader>\n <DialogTitle>Add metadata column</DialogTitle>\n <DialogDescription>\n Pick a top-level trace metadata key observed in the current time range, or type one. Only the key is\n saved, never its values.\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n <Field invalid={Boolean(metadataError)}>\n <FieldLabel>Metadata key</FieldLabel>\n <Combobox\n options={metadataKeyOptions}\n value={metadataKey}\n onValueChange={key => {\n setMetadataKey(key);\n setMetadataError(undefined);\n }}\n allowCustomValue\n placeholder=\"Select a metadata key…\"\n searchPlaceholder=\"Search metadata keys…\"\n emptyText=\"No metadata keys observed. Type one to add it.\"\n />\n <FieldError>{metadataError}</FieldError>\n </Field>\n </DialogBody>\n <DialogFooter>\n <DialogCancel>Cancel</DialogCancel>\n <DialogAction type=\"submit\">Add column</DialogAction>\n </DialogFooter>\n </Form>\n </DialogContent>\n </Dialog>\n )}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trace-columns-menu.es.js","sources":["../../../../src/domains/traces/components/trace-columns-menu.tsx"],"sourcesContent":["import { Columns3Icon, PlusIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport type { FormEvent } from 'react';\nimport { TRACE_CUSTOM_COLUMN_FIELDS, TRACE_CUSTOM_COLUMN_LABELS, TRACE_USAGE_COLUMNS } from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceOptionalColumn } from '../trace-list-columns';\nimport { Button } from '@/ds/components/Button';\nimport { Combobox } from '@/ds/components/Combobox';\nimport {\n Dialog,\n DialogAction,\n DialogBody,\n DialogCancel,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/ds/components/Dialog';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Field, FieldError, FieldLabel } from '@/ds/components/Field';\nimport { Form } from '@/ds/components/Form';\nimport { Txt } from '@/ds/components/Txt';\n\nconst EMPTY_KEYS: readonly string[] = [];\n\nconst STANDARD_COLUMNS: readonly TraceOptionalColumn[] = [\n 'type',\n 'input',\n 'output',\n 'duration',\n 'endTime',\n 'environment',\n];\n\nconst COLUMN_LABELS: Record<TraceOptionalColumn, string> = {\n type: 'Primitive type',\n input: 'Input',\n output: 'Output',\n duration: 'Duration',\n endTime: 'End',\n environment: 'Environment',\n inputTokens: 'Input tokens',\n outputTokens: 'Output tokens',\n totalTokens: 'Total tokens',\n estimatedCost: 'Estimated cost',\n};\n\ntype TraceColumnsMenuProps = {\n preferences: TraceColumnPreferences;\n /** Top-level metadata keys observed on traces in the current time range, offered in the picker. */\n availableMetadataKeys?: readonly string[];\n usageDisabledReason?: string;\n /** When false (server without the trace-query API), metadata columns can't be added. Defaults to true. */\n withQueryTrace?: boolean;\n onToggleColumn: (column: TraceOptionalColumn) => void;\n onAddCustomColumn: (field: TraceCustomColumn) => void;\n onRemoveCustomColumn: (field: TraceCustomColumn) => void;\n onAddMetadataColumn: (key: string) => void;\n onRemoveMetadataColumn: (key: string) => void;\n onReset: () => void;\n};\n\nexport function TraceColumnsMenu({\n preferences,\n availableMetadataKeys = EMPTY_KEYS,\n usageDisabledReason,\n withQueryTrace = true,\n onToggleColumn,\n onAddCustomColumn,\n onRemoveCustomColumn,\n onAddMetadataColumn,\n onRemoveMetadataColumn,\n onReset,\n}: TraceColumnsMenuProps) {\n const [isMetadataDialogOpen, setIsMetadataDialogOpen] = useState(false);\n const [metadataKey, setMetadataKey] = useState('');\n const [metadataError, setMetadataError] = useState<string | undefined>();\n\n const metadataKeyOptions = useMemo(() => {\n const keys = availableMetadataKeys.filter(key => !preferences.metadataKeys.includes(key));\n if (metadataKey && !keys.includes(metadataKey)) keys.push(metadataKey);\n return keys.map(key => ({ label: key, value: key }));\n }, [availableMetadataKeys, preferences.metadataKeys, metadataKey]);\n\n const handleDialogOpenChange = (open: boolean) => {\n setIsMetadataDialogOpen(open);\n if (!open) {\n setMetadataKey('');\n setMetadataError(undefined);\n }\n };\n\n const handleAddMetadata = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const normalizedKey = metadataKey.trim();\n if (!normalizedKey) {\n setMetadataError('Enter a metadata key.');\n return;\n }\n if (preferences.metadataKeys.includes(normalizedKey)) {\n setMetadataError('That metadata column is already visible.');\n return;\n }\n\n onAddMetadataColumn(normalizedKey);\n handleDialogOpenChange(false);\n };\n\n return (\n <>\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <Button variant=\"ghost\" size=\"md\" icon={<Columns3Icon aria-hidden />}>\n Columns\n </Button>\n }\n />\n <DropdownMenu.Content align=\"end\" className=\"min-w-56\">\n <DropdownMenu.Label>Standard columns</DropdownMenu.Label>\n {STANDARD_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Usage columns</DropdownMenu.Label>\n {TRACE_USAGE_COLUMNS.map(column => (\n <DropdownMenu.CheckboxItem\n key={column}\n checked={preferences.visibleColumns.includes(column)}\n disabled={Boolean(usageDisabledReason)}\n onCheckedChange={() => onToggleColumn(column)}\n >\n {COLUMN_LABELS[column]}\n </DropdownMenu.CheckboxItem>\n ))}\n {usageDisabledReason && (\n <Txt variant=\"meta\" tone=\"faint\" className=\"px-2 py-1\" role=\"note\">\n {usageDisabledReason}\n </Txt>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Custom columns</DropdownMenu.Label>\n {TRACE_CUSTOM_COLUMN_FIELDS.map(field => {\n const isVisible = preferences.customColumns.includes(field);\n return (\n <DropdownMenu.CheckboxItem\n key={field}\n checked={isVisible}\n onCheckedChange={() => (isVisible ? onRemoveCustomColumn(field) : onAddCustomColumn(field))}\n >\n {TRACE_CUSTOM_COLUMN_LABELS[field]}\n </DropdownMenu.CheckboxItem>\n );\n })}\n\n {(withQueryTrace || preferences.metadataKeys.length > 0) && (\n <>\n <DropdownMenu.Separator />\n <DropdownMenu.Label>Metadata columns</DropdownMenu.Label>\n {preferences.metadataKeys.map(key => (\n <DropdownMenu.CheckboxItem\n key={key}\n checked\n title={key}\n onCheckedChange={() => onRemoveMetadataColumn(key)}\n >\n {key}\n </DropdownMenu.CheckboxItem>\n ))}\n {withQueryTrace && (\n <DropdownMenu.Item onSelect={() => setIsMetadataDialogOpen(true)}>\n <PlusIcon aria-hidden />\n Add metadata column\n </DropdownMenu.Item>\n )}\n </>\n )}\n\n <DropdownMenu.Separator />\n <DropdownMenu.Item onSelect={onReset}>Reset to defaults</DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n\n {withQueryTrace && (\n <Dialog open={isMetadataDialogOpen} onOpenChange={handleDialogOpenChange}>\n <DialogContent>\n <Form onSubmit={handleAddMetadata} className=\"gap-0\">\n <DialogHeader>\n <DialogTitle>Add metadata column</DialogTitle>\n <DialogDescription>\n Pick a top-level trace metadata key observed in the current time range, or type one. Only the key is\n saved, never its values.\n </DialogDescription>\n </DialogHeader>\n <DialogBody>\n <Field invalid={Boolean(metadataError)}>\n <FieldLabel>Metadata key</FieldLabel>\n <Combobox\n options={metadataKeyOptions}\n value={metadataKey}\n onValueChange={key => {\n setMetadataKey(key);\n setMetadataError(undefined);\n }}\n allowCustomValue\n placeholder=\"Select a metadata key…\"\n searchPlaceholder=\"Search metadata keys…\"\n emptyText=\"No metadata keys observed. Type one to add it.\"\n />\n <FieldError>{metadataError}</FieldError>\n </Field>\n </DialogBody>\n <DialogFooter>\n <DialogCancel>Cancel</DialogCancel>\n <DialogAction type=\"submit\">Add column</DialogAction>\n </DialogFooter>\n </Form>\n </DialogContent>\n </Dialog>\n )}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -14,15 +14,15 @@ const domains_traces_components_traceIdButton = require('./trace-id-button.cjs.j
14
14
  const domains_traces_components_traceSpanTimeline = require('./trace-span-timeline.cjs.js');
15
15
  const domains_traces_components_traceSpanTree = require('./trace-span-tree.cjs.js');
16
16
  const domains_traces_components_traceSummaryDescription = require('./trace-summary-description.cjs.js');
17
- const Button = require('../../../Button-DH1aTzbs.cjs');
17
+ const Button = require('../../../Button-C4I05uT4.cjs');
18
18
  const buttonsGroup = require('../../../buttons-group-Bg9Unm6G.cjs');
19
- const dataPanel = require('../../../data-panel-BkfjzriB.cjs');
19
+ const dataPanel = require('../../../data-panel-DGNV14pm.cjs');
20
20
  const dropdownMenu = require('../../../dropdown-menu-CsynT1aD.cjs');
21
21
  const Notice = require('../../../Notice-DYgIy4FO.cjs');
22
- const searchInput = require('../../../search-input-BUMYRaUW.cjs');
22
+ const searchInput = require('../../../search-input-CMNy0JWd.cjs');
23
23
  const tabsRoot = require('../../../tabs-root-sOhEgFZ-.cjs');
24
24
  const tabsList = require('../../../tabs-list-BTRYiT_o.cjs');
25
- const tabsTab = require('../../../tabs-tab-DRaRUvQ3.cjs');
25
+ const tabsTab = require('../../../tabs-tab-B0W25Dm2.cjs');
26
26
  const icons_Icon = require('../../../icons/Icon.cjs.js');
27
27
  const icons_ScorersIcon = require('../../../icons/ScorersIcon.cjs.js');
28
28
  const hooks_useScrollToFirstHighlight = require('../../../hooks/use-scroll-to-first-highlight.cjs.js');
@@ -175,6 +175,7 @@ function TraceDataPanelView({
175
175
  () => anchorSpanId ? spans?.find((s) => s.spanId === anchorSpanId) : spans?.find((s) => s.parentSpanId == null),
176
176
  [spans, anchorSpanId]
177
177
  );
178
+ const rootError = getSpanError(rootSpan?.error);
178
179
  const handleSpanClick = (id) => {
179
180
  const newId = selectedSpanId === id ? void 0 : id;
180
181
  setSelectedSpanId(newId);
@@ -289,7 +290,7 @@ function TraceDataPanelView({
289
290
  size: "sm",
290
291
  value: query,
291
292
  onValueChange: setQuery,
292
- className: "w-full"
293
+ className: "min-w-0 flex-1"
293
294
  }
294
295
  ),
295
296
  /* @__PURE__ */ jsxRuntime.jsxs(buttonsGroup.ButtonsGroup, { size: "sm", className: "shrink-0", children: [
@@ -332,6 +333,25 @@ function TraceDataPanelView({
332
333
  searchHeader,
333
334
  /* @__PURE__ */ jsxRuntime.jsxs(dataPanel.DataPanel.Content, { children: [
334
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)." }) }),
336
+ rootSpan && rootError && /* @__PURE__ */ jsxRuntime.jsx(
337
+ Notice.Notice,
338
+ {
339
+ variant: "destructive",
340
+ title: rootError.name ?? "Error",
341
+ action: /* @__PURE__ */ jsxRuntime.jsx(
342
+ Notice.Notice.Button,
343
+ {
344
+ onClick: () => {
345
+ setSelectedSpanId(rootSpan.spanId);
346
+ onSpanSelect?.(rootSpan.spanId);
347
+ },
348
+ children: "View details"
349
+ }
350
+ ),
351
+ className: "mb-4",
352
+ children: /* @__PURE__ */ jsxRuntime.jsx(Notice.Notice.Message, { className: "line-clamp-3", children: rootError.message })
353
+ }
354
+ ),
335
355
  isTimeline ? /* @__PURE__ */ jsxRuntime.jsx(domains_traces_components_traceSpanTimeline.TraceSpanTimeline, { ...viewProps }) : /* @__PURE__ */ jsxRuntime.jsx(domains_traces_components_traceSpanTree.TraceSpanTree, { ...viewProps }),
336
356
  noSearchResults
337
357
  ] })
@@ -343,6 +363,13 @@ function TraceDataPanelView({
343
363
  }
344
364
  );
345
365
  }
366
+ function getSpanError(error) {
367
+ if (typeof error !== "object" || error === null || !("message" in error) || typeof error.message !== "string") {
368
+ return void 0;
369
+ }
370
+ const name = "name" in error && typeof error.name === "string" ? error.name : void 0;
371
+ return { name, message: error.message };
372
+ }
346
373
  const safeLayoutStorage = {
347
374
  getItem: (key) => {
348
375
  try {
@@ -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 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 <DataPanel.Header className=\"border-b border-border\">\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 {sideHeaderActions && (\n <div className=\"ml-auto 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=\"w-full\"\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 {/* 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/**\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 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 <DataPanel.Header className=\"border-b border-border\">\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 {sideHeaderActions && (\n <div className=\"ml-auto 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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"}
@@ -10,15 +10,15 @@ import { TraceIdButton } from './trace-id-button.es.js';
10
10
  import { TraceSpanTimeline } from './trace-span-timeline.es.js';
11
11
  import { TraceSpanTree } from './trace-span-tree.es.js';
12
12
  import { TraceSummaryDescription } from './trace-summary-description.es.js';
13
- import { B as Button } from '../../../Button-EGoajBQY.js';
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-CMkR6Avv.js';
15
+ import { D as DataPanel } from '../../../data-panel-DjtnX70w.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-BPqubJZC.js';
18
+ import { S as SearchInput } from '../../../search-input-C9qFBzn6.js';
19
19
  import { T as Tabs } from '../../../tabs-root-CI7WQrJF.js';
20
20
  import { T as TabList } from '../../../tabs-list-BCnrYcX1.js';
21
- import { T as Tab } from '../../../tabs-tab-CIVJEMoY.js';
21
+ import { T as Tab } from '../../../tabs-tab-CkLyKrL0.js';
22
22
  import { Icon } from '../../../icons/Icon.es.js';
23
23
  import { ScorersIcon } from '../../../icons/ScorersIcon.es.js';
24
24
  import { useScrollToFirstHighlight } from '../../../hooks/use-scroll-to-first-highlight.es.js';
@@ -171,6 +171,7 @@ function TraceDataPanelView({
171
171
  () => anchorSpanId ? spans?.find((s) => s.spanId === anchorSpanId) : spans?.find((s) => s.parentSpanId == null),
172
172
  [spans, anchorSpanId]
173
173
  );
174
+ const rootError = getSpanError(rootSpan?.error);
174
175
  const handleSpanClick = (id) => {
175
176
  const newId = selectedSpanId === id ? void 0 : id;
176
177
  setSelectedSpanId(newId);
@@ -285,7 +286,7 @@ function TraceDataPanelView({
285
286
  size: "sm",
286
287
  value: query,
287
288
  onValueChange: setQuery,
288
- className: "w-full"
289
+ className: "min-w-0 flex-1"
289
290
  }
290
291
  ),
291
292
  /* @__PURE__ */ jsxs(ButtonsGroup, { size: "sm", className: "shrink-0", children: [
@@ -328,6 +329,25 @@ function TraceDataPanelView({
328
329
  searchHeader,
329
330
  /* @__PURE__ */ jsxs(DataPanel.Content, { children: [
330
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)." }) }),
332
+ rootSpan && rootError && /* @__PURE__ */ jsx(
333
+ Notice,
334
+ {
335
+ variant: "destructive",
336
+ title: rootError.name ?? "Error",
337
+ action: /* @__PURE__ */ jsx(
338
+ Notice.Button,
339
+ {
340
+ onClick: () => {
341
+ setSelectedSpanId(rootSpan.spanId);
342
+ onSpanSelect?.(rootSpan.spanId);
343
+ },
344
+ children: "View details"
345
+ }
346
+ ),
347
+ className: "mb-4",
348
+ children: /* @__PURE__ */ jsx(Notice.Message, { className: "line-clamp-3", children: rootError.message })
349
+ }
350
+ ),
331
351
  isTimeline ? /* @__PURE__ */ jsx(TraceSpanTimeline, { ...viewProps }) : /* @__PURE__ */ jsx(TraceSpanTree, { ...viewProps }),
332
352
  noSearchResults
333
353
  ] })
@@ -339,6 +359,13 @@ function TraceDataPanelView({
339
359
  }
340
360
  );
341
361
  }
362
+ function getSpanError(error) {
363
+ if (typeof error !== "object" || error === null || !("message" in error) || typeof error.message !== "string") {
364
+ return void 0;
365
+ }
366
+ const name = "name" in error && typeof error.name === "string" ? error.name : void 0;
367
+ return { name, message: error.message };
368
+ }
342
369
  const safeLayoutStorage = {
343
370
  getItem: (key) => {
344
371
  try {