@mastra/playground-ui 69.0.0-alpha.0 → 69.0.0-alpha.2

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 (842) hide show
  1. package/components.css +6 -0
  2. package/dist/{CodeEditor-ZoBu3Gjw.js → CodeEditor-BqAM9L7t.js} +5 -2
  3. package/dist/{CodeEditor-ZoBu3Gjw.js.map → CodeEditor-BqAM9L7t.js.map} +1 -1
  4. package/dist/{CodeEditor-DHIDfP5g.cjs → CodeEditor-zMSUzPdX.cjs} +5 -2
  5. package/dist/{CodeEditor-DHIDfP5g.cjs.map → CodeEditor-zMSUzPdX.cjs.map} +1 -1
  6. package/dist/{Comment-rQxuMDQv.cjs → Comment-A07IvOt2.cjs} +3 -3
  7. package/dist/{Comment-rQxuMDQv.cjs.map → Comment-A07IvOt2.cjs.map} +1 -1
  8. package/dist/{Comment-2q9SomE2.js → Comment-D_gSx7oM.js} +3 -3
  9. package/dist/{Comment-2q9SomE2.js.map → Comment-D_gSx7oM.js.map} +1 -1
  10. package/dist/{Composer-u1K6edoZ.cjs → Composer-D2BqRyb5.cjs} +2 -2
  11. package/dist/Composer-D2BqRyb5.cjs.map +1 -0
  12. package/dist/{Composer-bVE8qK52.js → Composer-kjwmlIgL.js} +2 -2
  13. package/dist/Composer-kjwmlIgL.js.map +1 -0
  14. package/dist/{DataCodeSection-CTodi9wg.js → DataCodeSection-CcX8Z68Y.js} +2 -2
  15. package/dist/{DataCodeSection-CTodi9wg.js.map → DataCodeSection-CcX8Z68Y.js.map} +1 -1
  16. package/dist/{DataCodeSection-7SvRJj6f.cjs → DataCodeSection-JPGTWLcL.cjs} +2 -2
  17. package/dist/{DataCodeSection-7SvRJj6f.cjs.map → DataCodeSection-JPGTWLcL.cjs.map} +1 -1
  18. package/dist/{DataDetailsPanel-BDoD6pxx.cjs → DataDetailsPanel-DCMlaG7j.cjs} +2 -2
  19. package/dist/{DataDetailsPanel-BDoD6pxx.cjs.map → DataDetailsPanel-DCMlaG7j.cjs.map} +1 -1
  20. package/dist/{DataDetailsPanel-BU05psHL.js → DataDetailsPanel-mTfbbQho.js} +2 -2
  21. package/dist/{DataDetailsPanel-BU05psHL.js.map → DataDetailsPanel-mTfbbQho.js.map} +1 -1
  22. package/dist/{DataPanel-BRRAvWYQ.cjs → DataPanel-LfExjFpP.cjs} +2 -2
  23. package/dist/{DataPanel-BRRAvWYQ.cjs.map → DataPanel-LfExjFpP.cjs.map} +1 -1
  24. package/dist/{DataPanel-pVr5LVaK.js → DataPanel-Rv5Mb_pf.js} +2 -2
  25. package/dist/{DataPanel-pVr5LVaK.js.map → DataPanel-Rv5Mb_pf.js.map} +1 -1
  26. package/dist/{FilterBar-Kmn6gMgO.js → FilterBar-DgHNtsDI.js} +5 -5
  27. package/dist/FilterBar-DgHNtsDI.js.map +1 -0
  28. package/dist/{FilterBar-jBz6yaNu.cjs → FilterBar-O8SYau_Q.cjs} +5 -5
  29. package/dist/FilterBar-O8SYau_Q.cjs.map +1 -0
  30. package/dist/KnowledgePageGraph.css +1 -3
  31. package/dist/{MarkdownRenderer-CY8LGt-l.js → MarkdownRenderer-BSGb65Ze.js} +2 -2
  32. package/dist/{MarkdownRenderer-CY8LGt-l.js.map → MarkdownRenderer-BSGb65Ze.js.map} +1 -1
  33. package/dist/{MarkdownRenderer-CUYpmuPh.cjs → MarkdownRenderer-CDwlvw0Y.cjs} +2 -2
  34. package/dist/{MarkdownRenderer-CUYpmuPh.cjs.map → MarkdownRenderer-CDwlvw0Y.cjs.map} +1 -1
  35. package/dist/{MetricsCard-DojbLiEx.cjs → MetricsCard-CSJ4TsNq.cjs} +3 -3
  36. package/dist/MetricsCard-CSJ4TsNq.cjs.map +1 -0
  37. package/dist/{MetricsCard-kAqSCPPe.js → MetricsCard-D6bQfynP.js} +3 -3
  38. package/dist/MetricsCard-D6bQfynP.js.map +1 -0
  39. package/dist/{Tree-Caz4FTCU.cjs → Tree-6pubDJLQ.cjs} +4 -3
  40. package/dist/Tree-6pubDJLQ.cjs.map +1 -0
  41. package/dist/{Tree-od43gLMO.js → Tree-DpRLmis3.js} +4 -3
  42. package/dist/Tree-DpRLmis3.js.map +1 -0
  43. package/dist/{Workflow-mIbUYdv0.js → Workflow-BVVYys0W.js} +3 -3
  44. package/dist/{Workflow-mIbUYdv0.js.map → Workflow-BVVYys0W.js.map} +1 -1
  45. package/dist/{Workflow-XR5L-3cJ.cjs → Workflow-CwIjxwC6.cjs} +3 -3
  46. package/dist/{Workflow-XR5L-3cJ.cjs.map → Workflow-CwIjxwC6.cjs.map} +1 -1
  47. package/dist/{activity-ClFChYfl.js → activity-BH_eegMA.js} +2 -2
  48. package/dist/{activity-ClFChYfl.js.map → activity-BH_eegMA.js.map} +1 -1
  49. package/dist/{activity-BprmG6yH.cjs → activity-Ciolopq8.cjs} +2 -2
  50. package/dist/{activity-BprmG6yH.cjs.map → activity-Ciolopq8.cjs.map} +1 -1
  51. package/dist/{ask-user-D4ezQ6pt.js → ask-user-CqzPUD9E.js} +2 -2
  52. package/dist/{ask-user-D4ezQ6pt.js.map → ask-user-CqzPUD9E.js.map} +1 -1
  53. package/dist/{ask-user-DcnUNMM5.cjs → ask-user-DIYcPkoX.cjs} +2 -2
  54. package/dist/{ask-user-DcnUNMM5.cjs.map → ask-user-DIYcPkoX.cjs.map} +1 -1
  55. package/dist/{combobox-lbSxWRMl.js → combobox-DLdInLYm.js} +2 -2
  56. package/dist/{combobox-lbSxWRMl.js.map → combobox-DLdInLYm.js.map} +1 -1
  57. package/dist/{combobox-i723LxeC.cjs → combobox-DU2jsrGa.cjs} +2 -2
  58. package/dist/{combobox-i723LxeC.cjs.map → combobox-DU2jsrGa.cjs.map} +1 -1
  59. package/dist/{combobox-parts-BeNqgCbj.cjs → combobox-parts-C236ZHtn.cjs} +2 -2
  60. package/dist/combobox-parts-C236ZHtn.cjs.map +1 -0
  61. package/dist/{combobox-parts-C9o4UfH_.js → combobox-parts-_m3Qgmci.js} +2 -2
  62. package/dist/combobox-parts-_m3Qgmci.js.map +1 -0
  63. package/dist/components/Breadcrumb.cjs.js.map +1 -1
  64. package/dist/components/Breadcrumb.es.js.map +1 -1
  65. package/dist/components/CodeBlock.cjs.js +1 -1
  66. package/dist/components/CodeBlock.es.js +1 -1
  67. package/dist/components/CodeEditor.cjs.js +1 -1
  68. package/dist/components/CodeEditor.es.js +1 -1
  69. package/dist/components/Combobox.cjs.js +2 -2
  70. package/dist/components/Combobox.es.js +2 -2
  71. package/dist/components/Command.cjs.js +1 -1
  72. package/dist/components/Command.cjs.js.map +1 -1
  73. package/dist/components/Command.es.js +1 -1
  74. package/dist/components/Command.es.js.map +1 -1
  75. package/dist/components/Comment.cjs.js +1 -1
  76. package/dist/components/Comment.es.js +1 -1
  77. package/dist/components/Composer.cjs.js +1 -1
  78. package/dist/components/Composer.es.js +1 -1
  79. package/dist/components/DataCodeSection.cjs.js +1 -1
  80. package/dist/components/DataCodeSection.es.js +1 -1
  81. package/dist/components/DataDetailsPanel.cjs.js +1 -1
  82. package/dist/components/DataDetailsPanel.es.js +1 -1
  83. package/dist/components/DataList.cjs.js +1 -1
  84. package/dist/components/DataList.es.js +1 -1
  85. package/dist/components/DataPanel.cjs.js +1 -1
  86. package/dist/components/DataPanel.es.js +1 -1
  87. package/dist/components/DateTimePicker.cjs.js +1 -1
  88. package/dist/components/DateTimePicker.es.js +1 -1
  89. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  90. package/dist/components/DateTimeRangePicker.es.js +1 -1
  91. package/dist/components/DropdownMenu.cjs.js +1 -1
  92. package/dist/components/DropdownMenu.es.js +1 -1
  93. package/dist/components/EnvironmentVariablesEditor.cjs.js +1 -1
  94. package/dist/components/EnvironmentVariablesEditor.es.js +1 -1
  95. package/dist/components/FilterBar.cjs.js +3 -3
  96. package/dist/components/FilterBar.es.js +3 -3
  97. package/dist/components/FormFieldBlocks.cjs.js +1 -1
  98. package/dist/components/FormFieldBlocks.es.js +1 -1
  99. package/dist/components/Input.cjs.js +1 -1
  100. package/dist/components/Input.es.js +1 -1
  101. package/dist/components/InputGroup.cjs.js +1 -1
  102. package/dist/components/InputGroup.es.js +1 -1
  103. package/dist/components/InputNumber.cjs.js +1 -1
  104. package/dist/components/InputNumber.es.js +1 -1
  105. package/dist/components/JSONSchemaForm.cjs.js +1 -1
  106. package/dist/components/JSONSchemaForm.es.js +1 -1
  107. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  108. package/dist/components/MarkdownRenderer.es.js +1 -1
  109. package/dist/components/MetricsCard.cjs.js +1 -1
  110. package/dist/components/MetricsCard.es.js +1 -1
  111. package/dist/components/PropertyFilter.cjs.js +2 -2
  112. package/dist/components/PropertyFilter.es.js +2 -2
  113. package/dist/components/RuleBuilder.cjs.js +1 -1
  114. package/dist/components/RuleBuilder.es.js +1 -1
  115. package/dist/components/SavedViews.cjs.js +3 -3
  116. package/dist/components/SavedViews.cjs.js.map +1 -1
  117. package/dist/components/SavedViews.es.js +3 -3
  118. package/dist/components/SavedViews.es.js.map +1 -1
  119. package/dist/components/SearchInput.cjs.js +1 -1
  120. package/dist/components/SearchInput.es.js +1 -1
  121. package/dist/components/SideDialog.cjs.js +1 -1
  122. package/dist/components/SideDialog.es.js +1 -1
  123. package/dist/components/Sidebar.cjs.js +1 -1
  124. package/dist/components/Sidebar.es.js +1 -1
  125. package/dist/components/Tabs.cjs.js +2 -2
  126. package/dist/components/Tabs.es.js +2 -2
  127. package/dist/components/Textarea.cjs.js +1 -1
  128. package/dist/components/Textarea.cjs.js.map +1 -1
  129. package/dist/components/Textarea.es.js +1 -1
  130. package/dist/components/Textarea.es.js.map +1 -1
  131. package/dist/components/ThreadRail.cjs.js +2 -0
  132. package/dist/components/ThreadRail.cjs.js.map +1 -1
  133. package/dist/components/ThreadRail.es.js +2 -0
  134. package/dist/components/ThreadRail.es.js.map +1 -1
  135. package/dist/components/Tree.cjs.js +1 -1
  136. package/dist/components/Tree.es.js +1 -1
  137. package/dist/components/Workflow.cjs.js +1 -1
  138. package/dist/components/Workflow.es.js +1 -1
  139. package/dist/components/ai/activity.cjs.js +1 -1
  140. package/dist/components/ai/activity.es.js +1 -1
  141. package/dist/components/ai/ask-user.cjs.js +1 -1
  142. package/dist/components/ai/ask-user.es.js +1 -1
  143. package/dist/components/ai/plan.cjs.js +1 -1
  144. package/dist/components/ai/plan.es.js +1 -1
  145. package/dist/components/ai/tool-approval.cjs.js +1 -1
  146. package/dist/components/ai/tool-approval.es.js +1 -1
  147. package/dist/components/ai/tool-call.cjs.js +1 -1
  148. package/dist/components/ai/tool-call.es.js +1 -1
  149. package/dist/{date-time-range-picker-DdNgKD87.js → date-time-range-picker-CJyhcug7.js} +3 -3
  150. package/dist/{date-time-range-picker-DdNgKD87.js.map → date-time-range-picker-CJyhcug7.js.map} +1 -1
  151. package/dist/{date-time-range-picker-Bq-8IPtS.cjs → date-time-range-picker-Dhnuwa-U.cjs} +3 -3
  152. package/dist/{date-time-range-picker-Bq-8IPtS.cjs.map → date-time-range-picker-Dhnuwa-U.cjs.map} +1 -1
  153. package/dist/domains/chat/activity/activity-stretch-line.cjs.js +1 -1
  154. package/dist/domains/chat/activity/activity-stretch-line.es.js +1 -1
  155. package/dist/domains/chat/activity/components/activity-fold.cjs.js +1 -1
  156. package/dist/domains/chat/activity/components/activity-fold.es.js +1 -1
  157. package/dist/domains/chat/activity/components/calls-panel.cjs.js +1 -1
  158. package/dist/domains/chat/activity/components/calls-panel.es.js +1 -1
  159. package/dist/domains/chat/activity/components/stretch-content.cjs.js +1 -1
  160. package/dist/domains/chat/activity/components/stretch-content.es.js +1 -1
  161. package/dist/domains/chat/activity/components/stretch-thought.cjs.js +1 -1
  162. package/dist/domains/chat/activity/components/stretch-thought.es.js +1 -1
  163. package/dist/domains/chat/activity/model/activity-segments.cjs.js +1 -1
  164. package/dist/domains/chat/activity/model/activity-segments.es.js +1 -1
  165. package/dist/domains/chat/activity/model/activity-words.cjs.js +1 -1
  166. package/dist/domains/chat/activity/model/activity-words.es.js +1 -1
  167. package/dist/domains/chat/attachments/composer-attachment-list.cjs.js +1 -1
  168. package/dist/domains/chat/attachments/composer-attachment-list.es.js +1 -1
  169. package/dist/domains/chat/attachments/split-message-attachments.cjs.js +4 -1
  170. package/dist/domains/chat/attachments/split-message-attachments.cjs.js.map +1 -1
  171. package/dist/domains/chat/attachments/split-message-attachments.es.js +4 -1
  172. package/dist/domains/chat/attachments/split-message-attachments.es.js.map +1 -1
  173. package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
  174. package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
  175. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
  176. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +1 -1
  177. package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js +1 -1
  178. package/dist/domains/chat/knowledge/pinned-knowledge.es.js +1 -1
  179. package/dist/domains/chat/messages/dataset-save-action.cjs.js +1 -1
  180. package/dist/domains/chat/messages/dataset-save-action.es.js +1 -1
  181. package/dist/domains/chat/messages/message-row.cjs.js +2 -2
  182. package/dist/domains/chat/messages/message-row.es.js +2 -2
  183. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  184. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  185. package/dist/domains/chat/messages/reasoning-content.cjs.js +1 -1
  186. package/dist/domains/chat/messages/reasoning-content.es.js +1 -1
  187. package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
  188. package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
  189. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  190. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  191. package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
  192. package/dist/domains/chat/messages/signal-badge.es.js +1 -1
  193. package/dist/domains/chat/messages/skill-message.cjs.js +2 -2
  194. package/dist/domains/chat/messages/skill-message.es.js +2 -2
  195. package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
  196. package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
  197. package/dist/domains/chat/messages/tripwire-notice.cjs.js +5 -10
  198. package/dist/domains/chat/messages/tripwire-notice.cjs.js.map +1 -1
  199. package/dist/domains/chat/messages/tripwire-notice.es.js +5 -10
  200. package/dist/domains/chat/messages/tripwire-notice.es.js.map +1 -1
  201. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  202. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  203. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
  204. package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
  205. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  206. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  207. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +1 -1
  208. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +1 -1
  209. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +1 -1
  210. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +1 -1
  211. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +1 -1
  212. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +1 -1
  213. package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js +2 -2
  214. package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js +2 -2
  215. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +2 -2
  216. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +2 -2
  217. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +2 -2
  218. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +2 -2
  219. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  220. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  221. package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +1 -1
  222. package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +1 -1
  223. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
  224. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  225. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +2 -2
  226. package/dist/domains/chat/tools/badges/tool-badge.es.js +2 -2
  227. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +2 -2
  228. package/dist/domains/chat/tools/badges/workflow-badge.es.js +2 -2
  229. package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js +2 -2
  230. package/dist/domains/chat/tools/mcp-input-request-tool.es.js +2 -2
  231. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  232. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  233. package/dist/domains/chat/tools/tool-groups.cjs.js +1 -1
  234. package/dist/domains/chat/tools/tool-groups.es.js +1 -1
  235. package/dist/domains/dashboards/components/connected-widget.cjs.js +55 -0
  236. package/dist/domains/dashboards/components/connected-widget.cjs.js.map +1 -0
  237. package/dist/domains/dashboards/components/connected-widget.d.ts +1 -0
  238. package/dist/domains/dashboards/components/connected-widget.es.js +54 -0
  239. package/dist/domains/dashboards/components/connected-widget.es.js.map +1 -0
  240. package/dist/domains/dashboards/components/dashboard-renderer.cjs.js +13 -8
  241. package/dist/domains/dashboards/components/dashboard-renderer.cjs.js.map +1 -1
  242. package/dist/domains/dashboards/components/dashboard-renderer.es.js +13 -8
  243. package/dist/domains/dashboards/components/dashboard-renderer.es.js.map +1 -1
  244. package/dist/domains/dashboards/components/stateless-widget.cjs.js +30 -0
  245. package/dist/domains/dashboards/components/stateless-widget.cjs.js.map +1 -0
  246. package/dist/domains/dashboards/components/stateless-widget.d.ts +1 -0
  247. package/dist/domains/dashboards/components/stateless-widget.es.js +29 -0
  248. package/dist/domains/dashboards/components/stateless-widget.es.js.map +1 -0
  249. package/dist/domains/dashboards/components/view-gate.cjs.js +18 -40
  250. package/dist/domains/dashboards/components/view-gate.cjs.js.map +1 -1
  251. package/dist/domains/dashboards/components/view-gate.es.js +18 -40
  252. package/dist/domains/dashboards/components/view-gate.es.js.map +1 -1
  253. package/dist/domains/dashboards/components/widget-chrome.cjs.js +1 -1
  254. package/dist/domains/dashboards/components/widget-chrome.es.js +1 -1
  255. package/dist/domains/dashboards/components/widget-controls.cjs.js +106 -0
  256. package/dist/domains/dashboards/components/widget-controls.cjs.js.map +1 -1
  257. package/dist/domains/dashboards/components/widget-controls.es.js +107 -3
  258. package/dist/domains/dashboards/components/widget-controls.es.js.map +1 -1
  259. package/dist/domains/dashboards/components/widget-error.cjs.js +1 -1
  260. package/dist/domains/dashboards/components/widget-error.es.js +1 -1
  261. package/dist/domains/dashboards/hooks/use-dashboard-environment.cjs.js +55 -0
  262. package/dist/domains/dashboards/hooks/use-dashboard-environment.cjs.js.map +1 -0
  263. package/dist/domains/dashboards/hooks/use-dashboard-environment.d.ts +1 -0
  264. package/dist/domains/dashboards/hooks/use-dashboard-environment.es.js +53 -0
  265. package/dist/domains/dashboards/hooks/use-dashboard-environment.es.js.map +1 -0
  266. package/dist/domains/dashboards/hooks/use-dashboard-requests.cjs.js +24 -0
  267. package/dist/domains/dashboards/hooks/use-dashboard-requests.cjs.js.map +1 -1
  268. package/dist/domains/dashboards/hooks/use-dashboard-requests.es.js +23 -1
  269. package/dist/domains/dashboards/hooks/use-dashboard-requests.es.js.map +1 -1
  270. package/dist/domains/dashboards/hooks/use-widget-views.cjs.js +10 -6
  271. package/dist/domains/dashboards/hooks/use-widget-views.cjs.js.map +1 -1
  272. package/dist/domains/dashboards/hooks/use-widget-views.es.js +10 -7
  273. package/dist/domains/dashboards/hooks/use-widget-views.es.js.map +1 -1
  274. package/dist/domains/dashboards/kinds/kpis/kpis-plan.cjs.js +11 -0
  275. package/dist/domains/dashboards/kinds/kpis/kpis-plan.cjs.js.map +1 -0
  276. package/dist/domains/dashboards/kinds/kpis/kpis-plan.d.ts +1 -0
  277. package/dist/domains/dashboards/kinds/kpis/kpis-plan.es.js +9 -0
  278. package/dist/domains/dashboards/kinds/kpis/kpis-plan.es.js.map +1 -0
  279. package/dist/domains/dashboards/kinds/kpis/kpis-widget.cjs.js +18 -19
  280. package/dist/domains/dashboards/kinds/kpis/kpis-widget.cjs.js.map +1 -1
  281. package/dist/domains/dashboards/kinds/kpis/kpis-widget.es.js +18 -19
  282. package/dist/domains/dashboards/kinds/kpis/kpis-widget.es.js.map +1 -1
  283. package/dist/domains/dashboards/kinds/kpis.cjs.js +3 -0
  284. package/dist/domains/dashboards/kinds/kpis.cjs.js.map +1 -1
  285. package/dist/domains/dashboards/kinds/kpis.es.js +3 -0
  286. package/dist/domains/dashboards/kinds/kpis.es.js.map +1 -1
  287. package/dist/domains/dashboards/kinds/scores/scores-plan.cjs.js +27 -0
  288. package/dist/domains/dashboards/kinds/scores/scores-plan.cjs.js.map +1 -0
  289. package/dist/domains/dashboards/kinds/scores/scores-plan.d.ts +1 -0
  290. package/dist/domains/dashboards/kinds/scores/scores-plan.es.js +24 -0
  291. package/dist/domains/dashboards/kinds/scores/scores-plan.es.js.map +1 -0
  292. package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js +25 -32
  293. package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js.map +1 -1
  294. package/dist/domains/dashboards/kinds/scores/scores-widget.es.js +26 -33
  295. package/dist/domains/dashboards/kinds/scores/scores-widget.es.js.map +1 -1
  296. package/dist/domains/dashboards/kinds/scores.cjs.js +4 -0
  297. package/dist/domains/dashboards/kinds/scores.cjs.js.map +1 -1
  298. package/dist/domains/dashboards/kinds/scores.es.js +4 -0
  299. package/dist/domains/dashboards/kinds/scores.es.js.map +1 -1
  300. package/dist/domains/dashboards/kinds/table/table-cells.cjs.js +2 -6
  301. package/dist/domains/dashboards/kinds/table/table-cells.cjs.js.map +1 -1
  302. package/dist/domains/dashboards/kinds/table/table-cells.es.js +2 -6
  303. package/dist/domains/dashboards/kinds/table/table-cells.es.js.map +1 -1
  304. package/dist/domains/dashboards/kinds/table/table-columns.cjs.js +5 -3
  305. package/dist/domains/dashboards/kinds/table/table-columns.cjs.js.map +1 -1
  306. package/dist/domains/dashboards/kinds/table/table-columns.es.js +5 -3
  307. package/dist/domains/dashboards/kinds/table/table-columns.es.js.map +1 -1
  308. package/dist/domains/dashboards/kinds/table/table-plan.cjs.js +47 -0
  309. package/dist/domains/dashboards/kinds/table/table-plan.cjs.js.map +1 -0
  310. package/dist/domains/dashboards/kinds/table/table-plan.d.ts +1 -0
  311. package/dist/domains/dashboards/kinds/table/table-plan.es.js +44 -0
  312. package/dist/domains/dashboards/kinds/table/table-plan.es.js.map +1 -0
  313. package/dist/domains/dashboards/kinds/table/table-tabs.cjs.js +20 -26
  314. package/dist/domains/dashboards/kinds/table/table-tabs.cjs.js.map +1 -1
  315. package/dist/domains/dashboards/kinds/table/table-tabs.es.js +22 -28
  316. package/dist/domains/dashboards/kinds/table/table-tabs.es.js.map +1 -1
  317. package/dist/domains/dashboards/kinds/table/table-view.cjs.js +13 -13
  318. package/dist/domains/dashboards/kinds/table/table-view.cjs.js.map +1 -1
  319. package/dist/domains/dashboards/kinds/table/table-view.es.js +14 -14
  320. package/dist/domains/dashboards/kinds/table/table-view.es.js.map +1 -1
  321. package/dist/domains/dashboards/kinds/table/table-widget.cjs.js +13 -17
  322. package/dist/domains/dashboards/kinds/table/table-widget.cjs.js.map +1 -1
  323. package/dist/domains/dashboards/kinds/table/table-widget.es.js +13 -17
  324. package/dist/domains/dashboards/kinds/table/table-widget.es.js.map +1 -1
  325. package/dist/domains/dashboards/kinds/table.cjs.js +4 -0
  326. package/dist/domains/dashboards/kinds/table.cjs.js.map +1 -1
  327. package/dist/domains/dashboards/kinds/table.es.js +4 -0
  328. package/dist/domains/dashboards/kinds/table.es.js.map +1 -1
  329. package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.cjs.js +18 -0
  330. package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.cjs.js.map +1 -0
  331. package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.d.ts +1 -0
  332. package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.es.js +16 -0
  333. package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.es.js.map +1 -0
  334. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js +22 -22
  335. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js.map +1 -1
  336. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js +25 -25
  337. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js.map +1 -1
  338. package/dist/domains/dashboards/kinds/timeseries.cjs.js +3 -0
  339. package/dist/domains/dashboards/kinds/timeseries.cjs.js.map +1 -1
  340. package/dist/domains/dashboards/kinds/timeseries.es.js +3 -0
  341. package/dist/domains/dashboards/kinds/timeseries.es.js.map +1 -1
  342. package/dist/domains/dashboards/lib/alert-actions.cjs.js +123 -0
  343. package/dist/domains/dashboards/lib/alert-actions.cjs.js.map +1 -0
  344. package/dist/domains/dashboards/lib/alert-actions.d.ts +1 -0
  345. package/dist/domains/dashboards/lib/alert-actions.es.js +118 -0
  346. package/dist/domains/dashboards/lib/alert-actions.es.js.map +1 -0
  347. package/dist/domains/dashboards/lib/gate.cjs.js +62 -0
  348. package/dist/domains/dashboards/lib/gate.cjs.js.map +1 -0
  349. package/dist/domains/dashboards/lib/gate.d.ts +1 -0
  350. package/dist/domains/dashboards/lib/gate.es.js +60 -0
  351. package/dist/domains/dashboards/lib/gate.es.js.map +1 -0
  352. package/dist/domains/dashboards/lib/plan-widget.cjs.js +41 -0
  353. package/dist/domains/dashboards/lib/plan-widget.cjs.js.map +1 -0
  354. package/dist/domains/dashboards/lib/plan-widget.d.ts +1 -0
  355. package/dist/domains/dashboards/lib/plan-widget.es.js +38 -0
  356. package/dist/domains/dashboards/lib/plan-widget.es.js.map +1 -0
  357. package/dist/domains/dashboards/lib/requests.cjs.js +47 -0
  358. package/dist/domains/dashboards/lib/requests.cjs.js.map +1 -1
  359. package/dist/domains/dashboards/lib/requests.es.js +46 -1
  360. package/dist/domains/dashboards/lib/requests.es.js.map +1 -1
  361. package/dist/domains/dashboards/lib/scores.cjs.js +32 -0
  362. package/dist/domains/dashboards/lib/scores.cjs.js.map +1 -1
  363. package/dist/domains/dashboards/lib/scores.es.js +31 -1
  364. package/dist/domains/dashboards/lib/scores.es.js.map +1 -1
  365. package/dist/domains/dashboards/lib/timeseries.cjs.js +17 -0
  366. package/dist/domains/dashboards/lib/timeseries.cjs.js.map +1 -1
  367. package/dist/domains/dashboards/lib/timeseries.es.js +17 -1
  368. package/dist/domains/dashboards/lib/timeseries.es.js.map +1 -1
  369. package/dist/domains/dashboards/lib/values.cjs.js.map +1 -1
  370. package/dist/domains/dashboards/lib/values.es.js.map +1 -1
  371. package/dist/domains/dashboards/widget-kind.cjs.js.map +1 -1
  372. package/dist/domains/dashboards/widget-kind.es.js.map +1 -1
  373. package/dist/domains/dashboards.cjs.js +19 -2
  374. package/dist/domains/dashboards.es.js +9 -5
  375. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.cjs.js +1 -1
  376. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.es.js +1 -1
  377. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.cjs.js +2 -2
  378. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.es.js +2 -2
  379. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +2 -2
  380. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +2 -2
  381. package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js +186 -212
  382. package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js.map +1 -1
  383. package/dist/domains/knowledge/components/KnowledgePageDetail.es.js +188 -215
  384. package/dist/domains/knowledge/components/KnowledgePageDetail.es.js.map +1 -1
  385. package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js +620 -268
  386. package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js.map +1 -1
  387. package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js +622 -270
  388. package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js.map +1 -1
  389. package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js +544 -454
  390. package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js.map +1 -1
  391. package/dist/domains/knowledge/components/KnowledgePageGraph.es.js +548 -458
  392. package/dist/domains/knowledge/components/KnowledgePageGraph.es.js.map +1 -1
  393. package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js +21 -12
  394. package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js.map +1 -1
  395. package/dist/domains/knowledge/components/KnowledgePageTree.es.js +22 -13
  396. package/dist/domains/knowledge/components/KnowledgePageTree.es.js.map +1 -1
  397. package/dist/domains/knowledge/components/KnowledgeSourceIcon.cjs.js +16 -0
  398. package/dist/domains/knowledge/components/KnowledgeSourceIcon.cjs.js.map +1 -0
  399. package/dist/domains/knowledge/components/KnowledgeSourceIcon.d.ts +1 -0
  400. package/dist/domains/knowledge/components/KnowledgeSourceIcon.es.js +15 -0
  401. package/dist/domains/knowledge/components/KnowledgeSourceIcon.es.js.map +1 -0
  402. package/dist/domains/knowledge/components/KnowledgeTooltip.cjs.js +10 -0
  403. package/dist/domains/knowledge/components/KnowledgeTooltip.cjs.js.map +1 -0
  404. package/dist/domains/knowledge/components/KnowledgeTooltip.d.ts +1 -0
  405. package/dist/domains/knowledge/components/KnowledgeTooltip.es.js +9 -0
  406. package/dist/domains/knowledge/components/KnowledgeTooltip.es.js.map +1 -0
  407. package/dist/domains/knowledge/lib/fitViewport.cjs.js +22 -8
  408. package/dist/domains/knowledge/lib/fitViewport.cjs.js.map +1 -1
  409. package/dist/domains/knowledge/lib/fitViewport.es.js +22 -9
  410. package/dist/domains/knowledge/lib/fitViewport.es.js.map +1 -1
  411. package/dist/domains/knowledge/lib/pageAddress.cjs.js +51 -0
  412. package/dist/domains/knowledge/lib/pageAddress.cjs.js.map +1 -1
  413. package/dist/domains/knowledge/lib/pageAddress.es.js +50 -1
  414. package/dist/domains/knowledge/lib/pageAddress.es.js.map +1 -1
  415. package/dist/domains/knowledge/lib/pageRefs.cjs.js +43 -2
  416. package/dist/domains/knowledge/lib/pageRefs.cjs.js.map +1 -1
  417. package/dist/domains/knowledge/lib/pageRefs.es.js +43 -3
  418. package/dist/domains/knowledge/lib/pageRefs.es.js.map +1 -1
  419. package/dist/domains/knowledge/lib/pagesByRefContext.cjs.js +10 -0
  420. package/dist/domains/knowledge/lib/pagesByRefContext.cjs.js.map +1 -0
  421. package/dist/domains/knowledge/lib/pagesByRefContext.d.ts +1 -0
  422. package/dist/domains/knowledge/lib/pagesByRefContext.es.js +10 -0
  423. package/dist/domains/knowledge/lib/pagesByRefContext.es.js.map +1 -0
  424. package/dist/domains/logs/components/log-data-panel.cjs.js +1 -1
  425. package/dist/domains/logs/components/log-data-panel.es.js +1 -1
  426. package/dist/domains/logs/components/logs-saved-views.cjs.js +1 -1
  427. package/dist/domains/logs/components/logs-saved-views.es.js +1 -1
  428. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  429. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  430. package/dist/domains/mcps/components/mcp-app-tool-result.cjs.js +28 -3
  431. package/dist/domains/mcps/components/mcp-app-tool-result.cjs.js.map +1 -1
  432. package/dist/domains/mcps/components/mcp-app-tool-result.es.js +27 -2
  433. package/dist/domains/mcps/components/mcp-app-tool-result.es.js.map +1 -1
  434. package/dist/domains/mcps/components/mcp-app-viewer.cjs.js +163 -2
  435. package/dist/domains/mcps/components/mcp-app-viewer.cjs.js.map +1 -0
  436. package/dist/domains/mcps/components/mcp-app-viewer.es.js +163 -1
  437. package/dist/domains/mcps/components/mcp-app-viewer.es.js.map +1 -0
  438. package/dist/domains/mcps/context/mcp-app-host-context-value.cjs.js +11 -0
  439. package/dist/domains/mcps/context/mcp-app-host-context-value.cjs.js.map +1 -0
  440. package/dist/domains/mcps/context/mcp-app-host-context-value.d.ts +1 -0
  441. package/dist/domains/mcps/context/mcp-app-host-context-value.es.js +9 -0
  442. package/dist/domains/mcps/context/mcp-app-host-context-value.es.js.map +1 -0
  443. package/dist/domains/mcps/context/mcp-app-host-context.cjs.js +14 -0
  444. package/dist/domains/mcps/context/mcp-app-host-context.cjs.js.map +1 -0
  445. package/dist/domains/mcps/context/mcp-app-host-context.d.ts +1 -0
  446. package/dist/domains/mcps/context/mcp-app-host-context.es.js +13 -0
  447. package/dist/domains/mcps/context/mcp-app-host-context.es.js.map +1 -0
  448. package/dist/domains/mcps/hooks/use-mcp-app-tool-call.cjs.js +2 -1
  449. package/dist/domains/mcps/hooks/use-mcp-app-tool-call.cjs.js.map +1 -1
  450. package/dist/domains/mcps/hooks/use-mcp-app-tool-call.es.js +2 -1
  451. package/dist/domains/mcps/hooks/use-mcp-app-tool-call.es.js.map +1 -1
  452. package/dist/domains/mcps.cjs.js +5 -0
  453. package/dist/domains/mcps.d.ts +1 -0
  454. package/dist/domains/mcps.es.js +3 -0
  455. package/dist/domains/metrics/components/agent-runs-card.cjs.js +1 -1
  456. package/dist/domains/metrics/components/agent-runs-card.es.js +1 -1
  457. package/dist/domains/metrics/components/breakdown/breakdown-tab-body.cjs.js +1 -1
  458. package/dist/domains/metrics/components/breakdown/breakdown-tab-body.es.js +1 -1
  459. package/dist/domains/metrics/components/breakdown-card.cjs.js +1 -1
  460. package/dist/domains/metrics/components/breakdown-card.es.js +1 -1
  461. package/dist/domains/metrics/components/chart-area.cjs.js +1 -1
  462. package/dist/domains/metrics/components/chart-area.es.js +1 -1
  463. package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
  464. package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
  465. package/dist/domains/metrics/components/chart-card.cjs.js +1 -1
  466. package/dist/domains/metrics/components/chart-card.es.js +1 -1
  467. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  468. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  469. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.cjs.js +1 -1
  470. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.es.js +1 -1
  471. package/dist/domains/metrics/components/failure-rate-card.cjs.js +1 -1
  472. package/dist/domains/metrics/components/failure-rate-card.es.js +1 -1
  473. package/dist/domains/metrics/components/latency-card.cjs.js +1 -1
  474. package/dist/domains/metrics/components/latency-card.es.js +1 -1
  475. package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +1 -1
  476. package/dist/domains/metrics/components/metrics-time-range-chip.es.js +1 -1
  477. package/dist/domains/metrics/components/token-usage-card.cjs.js +1 -1
  478. package/dist/domains/metrics/components/token-usage-card.es.js +1 -1
  479. package/dist/domains/metrics/components/trace-aggregate-card.cjs.js +1 -1
  480. package/dist/domains/metrics/components/trace-aggregate-card.es.js +1 -1
  481. package/dist/domains/metrics.cjs.js +3 -3
  482. package/dist/domains/metrics.es.js +3 -3
  483. package/dist/domains/observability/saved-views/observability-saved-views.cjs.js +1 -1
  484. package/dist/domains/observability/saved-views/observability-saved-views.es.js +1 -1
  485. package/dist/domains/observability/saved-views.cjs.js +1 -1
  486. package/dist/domains/observability/saved-views.es.js +1 -1
  487. package/dist/domains/observability.cjs.js +1 -1
  488. package/dist/domains/observability.es.js +1 -1
  489. package/dist/domains/scores/components/score-data-panel.cjs.js +1 -1
  490. package/dist/domains/scores/components/score-data-panel.es.js +1 -1
  491. package/dist/domains/scores/components/span-scoring.cjs.js +1 -1
  492. package/dist/domains/scores/components/span-scoring.es.js +1 -1
  493. package/dist/domains/scores/components/trace-scores-list.cjs.js +1 -1
  494. package/dist/domains/scores/components/trace-scores-list.es.js +1 -1
  495. package/dist/domains/skills/skill-simple-form.cjs.js +3 -3
  496. package/dist/domains/skills/skill-simple-form.es.js +3 -3
  497. package/dist/domains/spans/components/spans-explorer-body.cjs.js +1 -1
  498. package/dist/domains/spans/components/spans-explorer-body.es.js +1 -1
  499. package/dist/domains/spans/components/spans-filter-bar.cjs.js +2 -2
  500. package/dist/domains/spans/components/spans-filter-bar.es.js +2 -2
  501. package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js +1 -1
  502. package/dist/domains/spans/hooks/use-spans-filter-bar.es.js +1 -1
  503. package/dist/domains/threads/components/threads-explorer-body.cjs.js +1 -1
  504. package/dist/domains/threads/components/threads-explorer-body.es.js +1 -1
  505. package/dist/domains/threads/components/threads-filter-bar.cjs.js +2 -2
  506. package/dist/domains/threads/components/threads-filter-bar.es.js +2 -2
  507. package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js +1 -1
  508. package/dist/domains/threads/hooks/use-threads-filter-bar.es.js +1 -1
  509. package/dist/domains/traces/components/feedback-options.cjs.js +0 -0
  510. package/dist/domains/traces/components/feedback-options.d.ts +1 -0
  511. package/dist/domains/traces/components/feedback-options.es.js +0 -0
  512. package/dist/domains/traces/components/feedback-thread.cjs.js +10 -4
  513. package/dist/domains/traces/components/feedback-thread.cjs.js.map +1 -1
  514. package/dist/domains/traces/components/feedback-thread.es.js +10 -4
  515. package/dist/domains/traces/components/feedback-thread.es.js.map +1 -1
  516. package/dist/domains/traces/components/span-data-panel-view.cjs.js +2 -2
  517. package/dist/domains/traces/components/span-data-panel-view.es.js +2 -2
  518. package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
  519. package/dist/domains/traces/components/span-details-view.es.js +1 -1
  520. package/dist/domains/traces/components/span-feedback-tab.cjs.js +8 -5
  521. package/dist/domains/traces/components/span-feedback-tab.cjs.js.map +1 -1
  522. package/dist/domains/traces/components/span-feedback-tab.es.js +8 -5
  523. package/dist/domains/traces/components/span-feedback-tab.es.js.map +1 -1
  524. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
  525. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  526. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  527. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  528. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
  529. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
  530. package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +1 -1
  531. package/dist/domains/traces/components/span-payload/span-payload-json.es.js +1 -1
  532. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
  533. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
  534. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
  535. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
  536. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  537. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  538. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  539. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  540. package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js +1 -1
  541. package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js +1 -1
  542. package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js +1 -1
  543. package/dist/domains/traces/components/span-payload/span-tools-section.es.js +1 -1
  544. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  545. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  546. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  547. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  548. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +2 -2
  549. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +2 -2
  550. package/dist/domains/traces/components/thread-trace/thread-trace-row.cjs.js +1 -1
  551. package/dist/domains/traces/components/thread-trace/thread-trace-row.es.js +1 -1
  552. package/dist/domains/traces/components/thread-view-by-trace.cjs.js +5 -3
  553. package/dist/domains/traces/components/thread-view-by-trace.cjs.js.map +1 -1
  554. package/dist/domains/traces/components/thread-view-by-trace.es.js +5 -3
  555. package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
  556. package/dist/domains/traces/components/trace-columns-menu.cjs.js +2 -2
  557. package/dist/domains/traces/components/trace-columns-menu.es.js +2 -2
  558. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +2 -2
  559. package/dist/domains/traces/components/trace-data-panel-view.es.js +2 -2
  560. package/dist/domains/traces/components/trace-details-view.cjs.js +1 -1
  561. package/dist/domains/traces/components/trace-details-view.es.js +1 -1
  562. package/dist/domains/traces/components/trace-feedback-tab.cjs.js +9 -4
  563. package/dist/domains/traces/components/trace-feedback-tab.cjs.js.map +1 -1
  564. package/dist/domains/traces/components/trace-feedback-tab.es.js +9 -4
  565. package/dist/domains/traces/components/trace-feedback-tab.es.js.map +1 -1
  566. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  567. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  568. package/dist/domains/traces/components/trace-span-panel.cjs.js +2 -1
  569. package/dist/domains/traces/components/trace-span-panel.cjs.js.map +1 -1
  570. package/dist/domains/traces/components/trace-span-panel.es.js +2 -1
  571. package/dist/domains/traces/components/trace-span-panel.es.js.map +1 -1
  572. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  573. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  574. package/dist/domains/traces/components/trace-thread-panel.cjs.js +3 -2
  575. package/dist/domains/traces/components/trace-thread-panel.cjs.js.map +1 -1
  576. package/dist/domains/traces/components/trace-thread-panel.es.js +3 -2
  577. package/dist/domains/traces/components/trace-thread-panel.es.js.map +1 -1
  578. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.cjs.js.map +1 -1
  579. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.es.js.map +1 -1
  580. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +2 -2
  581. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +2 -2
  582. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js +8 -3
  583. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js.map +1 -1
  584. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js +8 -3
  585. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js.map +1 -1
  586. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js +14 -1
  587. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js.map +1 -1
  588. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js +14 -1
  589. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js.map +1 -1
  590. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.cjs.js +1 -1
  591. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.es.js +1 -1
  592. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js +1 -1
  593. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +1 -1
  594. package/dist/domains/traces/components/traces-explorer.cjs.js.map +1 -1
  595. package/dist/domains/traces/components/traces-explorer.es.js.map +1 -1
  596. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +1 -1
  597. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
  598. package/dist/domains/traces/components/traces-list-view.cjs.js +1 -1
  599. package/dist/domains/traces/components/traces-list-view.es.js +1 -1
  600. package/dist/domains/traces/components/traces-spans-switch.cjs.js +1 -1
  601. package/dist/domains/traces/components/traces-spans-switch.es.js +1 -1
  602. package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
  603. package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
  604. package/dist/domains/workflows/components/workflow-layout.cjs.js +1 -1
  605. package/dist/domains/workflows/components/workflow-layout.es.js +1 -1
  606. package/dist/domains/workflows/components/workflow-step-detail.cjs.js +2 -2
  607. package/dist/domains/workflows/components/workflow-step-detail.es.js +2 -2
  608. package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
  609. package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
  610. package/dist/domains/workflows/workflow/data/workflow-data-inspector.cjs.js +1 -1
  611. package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +1 -1
  612. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +1 -1
  613. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +1 -1
  614. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.cjs.js +1 -1
  615. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +1 -1
  616. package/dist/domains/workflows/workflow/utils.cjs.js +1 -1
  617. package/dist/domains/workflows/workflow/utils.es.js +1 -1
  618. package/dist/domains/workflows/workflow/workflow-body-graph.cjs.js +1 -1
  619. package/dist/domains/workflows/workflow/workflow-body-graph.es.js +1 -1
  620. package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
  621. package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
  622. package/dist/domains/workflows/workflow/workflow-debug-step-controls.cjs.js +1 -1
  623. package/dist/domains/workflows/workflow/workflow-debug-step-controls.es.js +1 -1
  624. package/dist/domains/workflows/workflow/workflow-graph-inner.cjs.js +2 -2
  625. package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +2 -2
  626. package/dist/domains/workflows/workflow/workflow-graph-layout.cjs.js +1 -1
  627. package/dist/domains/workflows/workflow/workflow-graph-layout.es.js +1 -1
  628. package/dist/domains/workflows/workflow/workflow-graph-node.cjs.js +1 -1
  629. package/dist/domains/workflows/workflow/workflow-graph-node.es.js +1 -1
  630. package/dist/domains/workflows/workflow/workflow-graph.cjs.js +1 -1
  631. package/dist/domains/workflows/workflow/workflow-graph.es.js +1 -1
  632. package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +1 -1
  633. package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +1 -1
  634. package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +1 -1
  635. package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +1 -1
  636. package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +3 -3
  637. package/dist/domains/workflows/workflow/workflow-run-data.es.js +3 -3
  638. package/dist/domains/workflows/workflow/workflow-status.cjs.js +1 -1
  639. package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
  640. package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +1 -1
  641. package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +1 -1
  642. package/dist/domains/workflows/workflow/workflow-step-node-utils.cjs.js +1 -1
  643. package/dist/domains/workflows/workflow/workflow-step-node-utils.es.js +1 -1
  644. package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +1 -1
  645. package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +1 -1
  646. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +1 -1
  647. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +1 -1
  648. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +1 -1
  649. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +1 -1
  650. package/dist/domains/workspace/components/workspace-create-directory.cjs.js +1 -1
  651. package/dist/domains/workspace/components/workspace-create-directory.es.js +1 -1
  652. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +1 -1
  653. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +1 -1
  654. package/dist/domains/workspace/components/workspace-search.cjs.js +1 -1
  655. package/dist/domains/workspace/components/workspace-search.es.js +1 -1
  656. package/dist/domains/workspace/components/workspace-tree.cjs.js +1 -1
  657. package/dist/domains/workspace/components/workspace-tree.es.js +1 -1
  658. package/dist/{dropdown-menu-Dx-jCOIv.cjs → dropdown-menu-D3D8USIY.cjs} +9 -1
  659. package/dist/dropdown-menu-D3D8USIY.cjs.map +1 -0
  660. package/dist/{dropdown-menu-DKoWI8kD.js → dropdown-menu-jsf9D-J_.js} +9 -1
  661. package/dist/dropdown-menu-jsf9D-J_.js.map +1 -0
  662. package/dist/ee/signals/sankey-signals.cjs.js +1 -1
  663. package/dist/ee/signals/sankey-signals.es.js +1 -1
  664. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +1 -1
  665. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +1 -1
  666. package/dist/ee/signals/settings/trace-signal-settings.cjs.js +1 -1
  667. package/dist/ee/signals/settings/trace-signal-settings.es.js +1 -1
  668. package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
  669. package/dist/ee/signals/view-mode-tab.es.js +1 -1
  670. package/dist/{filter-bar-chip-NBtfDca9.js → filter-bar-chip-Cz5GYBWP.js} +2 -2
  671. package/dist/{filter-bar-chip-NBtfDca9.js.map → filter-bar-chip-Cz5GYBWP.js.map} +1 -1
  672. package/dist/{filter-bar-chip-DFsbUZ-V.cjs → filter-bar-chip-q2Zr-cnY.cjs} +2 -2
  673. package/dist/{filter-bar-chip-DFsbUZ-V.cjs.map → filter-bar-chip-q2Zr-cnY.cjs.map} +1 -1
  674. package/dist/{filter-bar-time-range-DlVNjw43.cjs → filter-bar-time-range-D4C3kU0J.cjs} +3 -3
  675. package/dist/{filter-bar-time-range-DlVNjw43.cjs.map → filter-bar-time-range-D4C3kU0J.cjs.map} +1 -1
  676. package/dist/{filter-bar-time-range-D9SnzR2J.js → filter-bar-time-range-ao2YiYEJ.js} +3 -3
  677. package/dist/{filter-bar-time-range-D9SnzR2J.js.map → filter-bar-time-range-ao2YiYEJ.js.map} +1 -1
  678. package/dist/icons/ConfluenceIcon.cjs.js +18 -0
  679. package/dist/icons/ConfluenceIcon.cjs.js.map +1 -0
  680. package/dist/icons/ConfluenceIcon.d.ts +1 -0
  681. package/dist/icons/ConfluenceIcon.es.js +15 -0
  682. package/dist/icons/ConfluenceIcon.es.js.map +1 -0
  683. package/dist/icons/NotionIcon.cjs.js +18 -0
  684. package/dist/icons/NotionIcon.cjs.js.map +1 -0
  685. package/dist/icons/NotionIcon.d.ts +1 -0
  686. package/dist/icons/NotionIcon.es.js +15 -0
  687. package/dist/icons/NotionIcon.es.js.map +1 -0
  688. package/dist/icons/ZendeskIcon.cjs.js +18 -0
  689. package/dist/icons/ZendeskIcon.cjs.js.map +1 -0
  690. package/dist/icons/ZendeskIcon.d.ts +1 -0
  691. package/dist/icons/ZendeskIcon.es.js +15 -0
  692. package/dist/icons/ZendeskIcon.es.js.map +1 -0
  693. package/dist/{input-Cyit5ZSc.js → input-BNykbvOz.js} +2 -2
  694. package/dist/input-BNykbvOz.js.map +1 -0
  695. package/dist/{input-BpnUsQSt.cjs → input-D_V0m95F.cjs} +2 -2
  696. package/dist/input-D_V0m95F.cjs.map +1 -0
  697. package/dist/{input-group-NV4ZzKOk.js → input-group-CCSyY4J5.js} +3 -3
  698. package/dist/{input-group-NV4ZzKOk.js.map → input-group-CCSyY4J5.js.map} +1 -1
  699. package/dist/{input-group-DBCilXjT.cjs → input-group-Da8HBo30.cjs} +3 -3
  700. package/dist/{input-group-DBCilXjT.cjs.map → input-group-Da8HBo30.cjs.map} +1 -1
  701. package/dist/layout/tabbed-container.cjs.js +1 -1
  702. package/dist/layout/tabbed-container.es.js +1 -1
  703. package/dist/lib/form/components/number-field.cjs.js +1 -1
  704. package/dist/lib/form/components/number-field.es.js +1 -1
  705. package/dist/lib/form/components/record-field.cjs.js +1 -1
  706. package/dist/lib/form/components/record-field.es.js +1 -1
  707. package/dist/{observability-saved-views-DgABvgat.cjs → observability-saved-views-CzRPN_9m.cjs} +4 -4
  708. package/dist/{observability-saved-views-DgABvgat.cjs.map → observability-saved-views-CzRPN_9m.cjs.map} +1 -1
  709. package/dist/{observability-saved-views-Ch53fh5_.js → observability-saved-views-hu_hkXVY.js} +4 -4
  710. package/dist/{observability-saved-views-Ch53fh5_.js.map → observability-saved-views-hu_hkXVY.js.map} +1 -1
  711. package/dist/primitives/menu-item.cjs.js +1 -1
  712. package/dist/primitives/menu-item.cjs.js.map +1 -1
  713. package/dist/primitives/menu-item.es.js +1 -1
  714. package/dist/primitives/menu-item.es.js.map +1 -1
  715. package/dist/{property-filter-applied-DuyL4S_K.cjs → property-filter-applied-ML84st6J.cjs} +3 -3
  716. package/dist/{property-filter-applied-DuyL4S_K.cjs.map → property-filter-applied-ML84st6J.cjs.map} +1 -1
  717. package/dist/{property-filter-applied-DoxQHG09.js → property-filter-applied-PaJ7sLsM.js} +3 -3
  718. package/dist/{property-filter-applied-DoxQHG09.js.map → property-filter-applied-PaJ7sLsM.js.map} +1 -1
  719. package/dist/{span-payload-primitives-D2NWznGy.cjs → span-payload-primitives-CL3hlirm.cjs} +3 -3
  720. package/dist/{span-payload-primitives-D2NWznGy.cjs.map → span-payload-primitives-CL3hlirm.cjs.map} +1 -1
  721. package/dist/{span-payload-primitives-BKkRpVVO.js → span-payload-primitives-KxqoXspn.js} +3 -3
  722. package/dist/{span-payload-primitives-BKkRpVVO.js.map → span-payload-primitives-KxqoXspn.js.map} +1 -1
  723. package/dist/src/domains/dashboards/components/connected-widget.d.ts +9 -0
  724. package/dist/src/domains/dashboards/components/dashboard-renderer.d.ts +9 -2
  725. package/dist/src/domains/dashboards/components/stateless-widget.d.ts +40 -0
  726. package/dist/src/domains/dashboards/components/view-gate.d.ts +2 -10
  727. package/dist/src/domains/dashboards/components/widget-controls.d.ts +25 -1
  728. package/dist/src/domains/dashboards/hooks/use-dashboard-environment.d.ts +8 -0
  729. package/dist/src/domains/dashboards/hooks/use-dashboard-requests.d.ts +11 -1
  730. package/dist/src/domains/dashboards/hooks/use-widget-views.d.ts +8 -2
  731. package/dist/src/domains/dashboards/index.d.ts +14 -6
  732. package/dist/src/domains/dashboards/kinds/kpis/kpis-plan.d.ts +355 -0
  733. package/dist/src/domains/dashboards/kinds/kpis/kpis-widget.d.ts +1 -1
  734. package/dist/src/domains/dashboards/kinds/scores/scores-plan.d.ts +358 -0
  735. package/dist/src/domains/dashboards/kinds/scores/scores-widget.d.ts +1 -1
  736. package/dist/src/domains/dashboards/kinds/table/table-cells.d.ts +6 -2
  737. package/dist/src/domains/dashboards/kinds/table/table-columns.d.ts +2 -1
  738. package/dist/src/domains/dashboards/kinds/table/table-plan.d.ts +18 -0
  739. package/dist/src/domains/dashboards/kinds/table/table-tabs.d.ts +1 -1
  740. package/dist/src/domains/dashboards/kinds/table/table-view.d.ts +1 -0
  741. package/dist/src/domains/dashboards/kinds/timeseries/timeseries-plan.d.ts +355 -0
  742. package/dist/src/domains/dashboards/lib/alert-actions.d.ts +36 -0
  743. package/dist/src/domains/dashboards/lib/gate.d.ts +65 -0
  744. package/dist/src/domains/dashboards/lib/plan-widget.d.ts +390 -0
  745. package/dist/src/domains/dashboards/lib/requests.d.ts +22 -0
  746. package/dist/src/domains/dashboards/lib/scores.d.ts +11 -1
  747. package/dist/src/domains/dashboards/lib/timeseries.d.ts +6 -1
  748. package/dist/src/domains/dashboards/lib/values.d.ts +5 -0
  749. package/dist/src/domains/dashboards/widget-kind.d.ts +105 -2
  750. package/dist/src/domains/knowledge/components/KnowledgePageDetail.d.ts +7 -1
  751. package/dist/src/domains/knowledge/components/KnowledgePageExplorer.d.ts +4 -1
  752. package/dist/src/domains/knowledge/components/KnowledgePageGraph.d.ts +3 -0
  753. package/dist/src/domains/knowledge/components/KnowledgeSourceIcon.d.ts +5 -0
  754. package/dist/src/domains/knowledge/components/KnowledgeTooltip.d.ts +5 -0
  755. package/dist/src/domains/knowledge/lib/fitViewport.d.ts +9 -2
  756. package/dist/src/domains/knowledge/lib/pageAddress.d.ts +10 -0
  757. package/dist/src/domains/knowledge/lib/pageRefs.d.ts +12 -1
  758. package/dist/src/domains/knowledge/lib/pagesByRefContext.d.ts +6 -0
  759. package/dist/src/domains/mcps/components/mcp-app-tool-result.d.ts +3 -1
  760. package/dist/src/domains/mcps/components/mcp-app-viewer.d.ts +6 -1
  761. package/dist/src/domains/mcps/context/mcp-app-host-context-value.d.ts +23 -0
  762. package/dist/src/domains/mcps/context/mcp-app-host-context.d.ts +7 -0
  763. package/dist/src/domains/mcps/index.d.ts +3 -0
  764. package/dist/src/domains/traces/components/feedback-options.d.ts +8 -0
  765. package/dist/src/domains/traces/components/feedback-thread.d.ts +2 -1
  766. package/dist/src/domains/traces/components/span-feedback-tab.d.ts +4 -2
  767. package/dist/src/domains/traces/components/thread-view-by-trace.d.ts +4 -1
  768. package/dist/src/domains/traces/components/trace-feedback-tab.d.ts +4 -2
  769. package/dist/src/domains/traces/components/trace-span-panel.d.ts +3 -1
  770. package/dist/src/domains/traces/components/trace-thread-panel.d.ts +3 -1
  771. package/dist/src/domains/traces/components/traces-explorer/index.d.ts +1 -0
  772. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-context.d.ts +2 -0
  773. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-root.d.ts +4 -1
  774. package/dist/src/ds/components/Breadcrumb/Breadcrumb.d.ts +2 -0
  775. package/dist/src/ds/components/DropdownMenu/dropdown-menu.d.ts +3 -0
  776. package/dist/src/ds/components/Tree/tree-label.d.ts +1 -1
  777. package/dist/src/ds/icons/ConfluenceIcon.d.ts +2 -0
  778. package/dist/src/ds/icons/NotionIcon.d.ts +2 -0
  779. package/dist/src/ds/icons/ZendeskIcon.d.ts +2 -0
  780. package/dist/src/ds/icons/index.d.ts +3 -0
  781. package/dist/src/utils/mcp-app-context.d.ts +6 -0
  782. package/dist/style.css +85 -35
  783. package/dist/{tabbed-container-Bhfi-DWr.cjs → tabbed-container-BMLD6mvc.cjs} +4 -4
  784. package/dist/{tabbed-container-Bhfi-DWr.cjs.map → tabbed-container-BMLD6mvc.cjs.map} +1 -1
  785. package/dist/{tabbed-container-DOkHshha.js → tabbed-container-CaS8cZCS.js} +4 -4
  786. package/dist/{tabbed-container-DOkHshha.js.map → tabbed-container-CaS8cZCS.js.map} +1 -1
  787. package/dist/{tabs-content-DwU_eA-a.js → tabs-content-BGkPZ5EQ.js} +2 -2
  788. package/dist/{tabs-content-DwU_eA-a.js.map → tabs-content-BGkPZ5EQ.js.map} +1 -1
  789. package/dist/{tabs-content-BACwMrMG.cjs → tabs-content-D_ic2ZqI.cjs} +2 -2
  790. package/dist/{tabs-content-BACwMrMG.cjs.map → tabs-content-D_ic2ZqI.cjs.map} +1 -1
  791. package/dist/{tabs-tab-BHs639jL.js → tabs-tab-CJVS0WED.js} +2 -2
  792. package/dist/{tabs-tab-BHs639jL.js.map → tabs-tab-CJVS0WED.js.map} +1 -1
  793. package/dist/{tabs-tab-CANh2eAD.cjs → tabs-tab-Dj2huH5T.cjs} +2 -2
  794. package/dist/{tabs-tab-CANh2eAD.cjs.map → tabs-tab-Dj2huH5T.cjs.map} +1 -1
  795. package/dist/{tool-approval-CguPaikn.cjs → tool-approval-C4WNL8VD.cjs} +3 -3
  796. package/dist/{tool-approval-CguPaikn.cjs.map → tool-approval-C4WNL8VD.cjs.map} +1 -1
  797. package/dist/{tool-approval-Cjz0yAzw.js → tool-approval-ZfL3-Vvi.js} +3 -3
  798. package/dist/{tool-approval-Cjz0yAzw.js.map → tool-approval-ZfL3-Vvi.js.map} +1 -1
  799. package/dist/{tool-call-ChJKYCfu.js → tool-call-BLzYTI-x.js} +2 -2
  800. package/dist/{tool-call-ChJKYCfu.js.map → tool-call-BLzYTI-x.js.map} +1 -1
  801. package/dist/{tool-call-BqDI9mrY.cjs → tool-call-C4TBpJ6Y.cjs} +2 -2
  802. package/dist/{tool-call-BqDI9mrY.cjs.map → tool-call-C4TBpJ6Y.cjs.map} +1 -1
  803. package/dist/{tool-card-GSiCfxMz.js → tool-card-CM0aHG3p.js} +4 -3
  804. package/dist/{tool-card-GSiCfxMz.js.map → tool-card-CM0aHG3p.js.map} +1 -1
  805. package/dist/{tool-card-Dg4VOYV6.cjs → tool-card-xDlCD0m6.cjs} +4 -3
  806. package/dist/{tool-card-Dg4VOYV6.cjs.map → tool-card-xDlCD0m6.cjs.map} +1 -1
  807. package/dist/{mcp-app-viewer-BV7FI498.js → types-BwdKiX24.js} +2 -144
  808. package/dist/types-BwdKiX24.js.map +1 -0
  809. package/dist/{mcp-app-viewer-M3-pqAlo.cjs → types-KjLUPShK.cjs} +8 -144
  810. package/dist/types-KjLUPShK.cjs.map +1 -0
  811. package/dist/{use-workflow-graph-runtime-BfCL6nd4.cjs → use-workflow-graph-runtime-DEJA9rk4.cjs} +2 -2
  812. package/dist/{use-workflow-graph-runtime-BfCL6nd4.cjs.map → use-workflow-graph-runtime-DEJA9rk4.cjs.map} +1 -1
  813. package/dist/{use-workflow-graph-runtime-B3VUuhUE.js → use-workflow-graph-runtime-DHOsA1DM.js} +2 -2
  814. package/dist/{use-workflow-graph-runtime-B3VUuhUE.js.map → use-workflow-graph-runtime-DHOsA1DM.js.map} +1 -1
  815. package/dist/utils/mcp-app-context.cjs.js +17 -0
  816. package/dist/utils/mcp-app-context.cjs.js.map +1 -0
  817. package/dist/utils/mcp-app-context.d.ts +1 -0
  818. package/dist/utils/mcp-app-context.es.js +15 -0
  819. package/dist/utils/mcp-app-context.es.js.map +1 -0
  820. package/package.json +8 -8
  821. package/dist/Composer-bVE8qK52.js.map +0 -1
  822. package/dist/Composer-u1K6edoZ.cjs.map +0 -1
  823. package/dist/FilterBar-Kmn6gMgO.js.map +0 -1
  824. package/dist/FilterBar-jBz6yaNu.cjs.map +0 -1
  825. package/dist/MetricsCard-DojbLiEx.cjs.map +0 -1
  826. package/dist/MetricsCard-kAqSCPPe.js.map +0 -1
  827. package/dist/Tree-Caz4FTCU.cjs.map +0 -1
  828. package/dist/Tree-od43gLMO.js.map +0 -1
  829. package/dist/combobox-parts-BeNqgCbj.cjs.map +0 -1
  830. package/dist/combobox-parts-C9o4UfH_.js.map +0 -1
  831. package/dist/domains/dashboards/hooks/use-scorers.cjs.js +0 -41
  832. package/dist/domains/dashboards/hooks/use-scorers.cjs.js.map +0 -1
  833. package/dist/domains/dashboards/hooks/use-scorers.d.ts +0 -1
  834. package/dist/domains/dashboards/hooks/use-scorers.es.js +0 -40
  835. package/dist/domains/dashboards/hooks/use-scorers.es.js.map +0 -1
  836. package/dist/dropdown-menu-DKoWI8kD.js.map +0 -1
  837. package/dist/dropdown-menu-Dx-jCOIv.cjs.map +0 -1
  838. package/dist/input-BpnUsQSt.cjs.map +0 -1
  839. package/dist/input-Cyit5ZSc.js.map +0 -1
  840. package/dist/mcp-app-viewer-BV7FI498.js.map +0 -1
  841. package/dist/mcp-app-viewer-M3-pqAlo.cjs.map +0 -1
  842. package/dist/src/domains/dashboards/hooks/use-scorers.d.ts +0 -66
@@ -1,5 +1,5 @@
1
1
  import { getSpanDurationMs } from "../utils/span-utils.es.js";
2
- import { t as DataPanel } from "../../../DataPanel-pVr5LVaK.js";
2
+ import { t as DataPanel } from "../../../DataPanel-Rv5Mb_pf.js";
3
3
  import { controlSizeClasses } from "../../../primitives/control-size.es.js";
4
4
  import { t as cn } from "../../../utils-DQx8TpNT.js";
5
5
  import { formatDate, formatTimestampPrecise } from "../../../utils/date-format.es.js";
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_domains_traces_components_thread_trace_thread_trace_row_context = require("./thread-trace-row-context.cjs.js");
3
3
  const require_Card = require("../../../../Card-C9oCXvxU.cjs");
4
- const require_DataPanel = require("../../../../DataPanel-BRRAvWYQ.cjs");
4
+ const require_DataPanel = require("../../../../DataPanel-LfExjFpP.cjs");
5
5
  const require_utils = require("../../../../utils-uDc1ofX1.cjs");
6
6
  let react_jsx_runtime = require("react/jsx-runtime");
7
7
  // src/domains/traces/components/thread-trace/thread-trace-details.tsx
@@ -1,6 +1,6 @@
1
1
  import { useThreadTraceRow } from "./thread-trace-row-context.es.js";
2
2
  import { t as Card } from "../../../../Card-ClDoUQNb.js";
3
- import { t as DataPanel } from "../../../../DataPanel-pVr5LVaK.js";
3
+ import { t as DataPanel } from "../../../../DataPanel-Rv5Mb_pf.js";
4
4
  import { t as cn } from "../../../../utils-DQx8TpNT.js";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  // src/domains/traces/components/thread-trace/thread-trace-details.tsx
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("./thread-trace-row.cjs.js");
3
3
  const require_domains_traces_components_thread_trace_thread_trace_row_context = require("./thread-trace-row-context.cjs.js");
4
- const require_tabs_tab = require("../../../../tabs-tab-CANh2eAD.cjs");
5
- const require_tabs_content = require("../../../../tabs-content-BACwMrMG.cjs");
4
+ const require_tabs_tab = require("../../../../tabs-tab-Dj2huH5T.cjs");
5
+ const require_tabs_content = require("../../../../tabs-content-D_ic2ZqI.cjs");
6
6
  const require_utils = require("../../../../utils-uDc1ofX1.cjs");
7
7
  let react_jsx_runtime = require("react/jsx-runtime");
8
8
  // src/domains/traces/components/thread-trace/thread-trace-messages.tsx
@@ -1,7 +1,7 @@
1
1
  import "./thread-trace-row.es.js";
2
2
  import { useThreadTraceRow } from "./thread-trace-row-context.es.js";
3
- import { r as TabList, t as Tab } from "../../../../tabs-tab-BHs639jL.js";
4
- import { t as TabContent } from "../../../../tabs-content-DwU_eA-a.js";
3
+ import { r as TabList, t as Tab } from "../../../../tabs-tab-CJVS0WED.js";
4
+ import { t as TabContent } from "../../../../tabs-content-BGkPZ5EQ.js";
5
5
  import { t as cn } from "../../../../utils-DQx8TpNT.js";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  // src/domains/traces/components/thread-trace/thread-trace-messages.tsx
@@ -3,7 +3,7 @@ const require_domains_traces_components_thread_trace_thread_trace_context = requ
3
3
  const require_domains_traces_components_thread_trace_thread_trace_row_context = require("./thread-trace-row-context.cjs.js");
4
4
  const require_transcript_divider = require("../../../../transcript-divider-DroC3feH.cjs");
5
5
  const require_MessageScroller = require("../../../../MessageScroller-D-mK1uuu.cjs");
6
- const require_tabs_tab = require("../../../../tabs-tab-CANh2eAD.cjs");
6
+ const require_tabs_tab = require("../../../../tabs-tab-Dj2huH5T.cjs");
7
7
  const require_hooks_use_measured_auto_height = require("../../../../hooks/use-measured-auto-height.cjs.js");
8
8
  const require_utils = require("../../../../utils-uDc1ofX1.cjs");
9
9
  let react = require("react");
@@ -2,7 +2,7 @@ import { useThreadTrace } from "./thread-trace-context.es.js";
2
2
  import { ThreadTraceRowContext } from "./thread-trace-row-context.es.js";
3
3
  import { t as TranscriptDivider } from "../../../../transcript-divider-DM2HkdeO.js";
4
4
  import { u as MessageScrollerItem } from "../../../../MessageScroller-nV_zBF3H.js";
5
- import { n as Tabs } from "../../../../tabs-tab-BHs639jL.js";
5
+ import { n as Tabs } from "../../../../tabs-tab-CJVS0WED.js";
6
6
  import { useMeasuredAutoHeight } from "../../../../hooks/use-measured-auto-height.es.js";
7
7
  import { t as cn } from "../../../../utils-DQx8TpNT.js";
8
8
  import { useCallback, useMemo, useState } from "react";
@@ -26,7 +26,7 @@ var THREAD_WINDOW_FROM = (/* @__PURE__ */ new Date(0)).toISOString();
26
26
  * reconstructed messages on the left and the span tree on the right. Clicking a span opens its
27
27
  * detail panel on the side so the conversation stays readable.
28
28
  */
29
- function ThreadViewByTrace({ threadId, withQueryTrace, withFeedback, onSelectedSpanChange, onOpenScore, pageSize = 3 }) {
29
+ function ThreadViewByTrace({ threadId, withQueryTrace, withFeedback, feedbackOptions, onSelectedSpanChange, onOpenScore, pageSize = 3 }) {
30
30
  const legacyFilters = (0, react.useMemo)(() => ({ threadId }), [threadId]);
31
31
  const { rows, isLoading, isPlaceholderData, error, hasNextPage, isFetchingNextPage, fetchNextPage } = require_domains_traces_hooks_use_traces_list_source.useTracesListSource({
32
32
  autoRefetch: false,
@@ -94,13 +94,14 @@ function ThreadViewByTrace({ threadId, withQueryTrace, withFeedback, onSelectedS
94
94
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ThreadTraceRowContent, {
95
95
  turn: index + 1,
96
96
  withFeedback,
97
+ feedbackOptions,
97
98
  onOpenScore
98
99
  })
99
100
  }, traceId))
100
101
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_traces_components_thread_trace.ThreadTrace.SpanPanel, {})]
101
102
  }, threadId);
102
103
  }
103
- function ThreadTraceRowContent({ turn, withFeedback, onOpenScore }) {
104
+ function ThreadTraceRowContent({ turn, withFeedback, feedbackOptions, onOpenScore }) {
104
105
  const { traceId, highlightSpans } = require_domains_traces_components_thread_trace_thread_trace_row_context.useThreadTraceRow();
105
106
  const { Link, paths } = require_lib_framework.useLinkComponent();
106
107
  const traceHref = paths.traceLink(traceId);
@@ -158,7 +159,8 @@ function ThreadTraceRowContent({ turn, withFeedback, onOpenScore }) {
158
159
  className: "min-h-0 py-3",
159
160
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_traces_components_trace_feedback_tab.TraceFeedbackTab, {
160
161
  traceId,
161
- variant: "thread"
162
+ variant: "thread",
163
+ feedbackOptions
162
164
  }, traceId)
163
165
  }),
164
166
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_traces_components_thread_trace.ThreadTrace.TabContent, {
@@ -1 +1 @@
1
- {"version":3,"file":"thread-view-by-trace.cjs.js","names":["useMemo","useTracesListSource","useMastraClient","useState","useQueries","traceSpansQueryOptions","TracesErrorContent","ThreadViewSkeleton","Txt","ThreadTrace","useThreadTraceRow","useLinkComponent","useTraceSpans","_Fragment","Button","ExternalLinkIcon","Icon","MessageSquareTextIcon","MessageSquareReplyIcon","ScorersIcon","TraceThreadItemView","TraceFeedbackTab","TraceScoresTab"],"sources":["../../../../src/domains/traces/components/thread-view-by-trace.tsx"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { traceSpansQueryOptions, useTraceSpans } from '@mastra/react/hooks/traces';\nimport { useQueries } from '@tanstack/react-query';\nimport { ExternalLinkIcon, MessageSquareReplyIcon, MessageSquareTextIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport { TraceScoresTab } from '@/domains/scores';\nimport { ThreadTrace, useThreadTraceRow } from '@/domains/traces/components/thread-trace';\nimport type { ThreadTraceSelectedSpan } from '@/domains/traces/components/thread-trace';\n\nimport { ThreadViewSkeleton } from '@/domains/traces/components/thread-view-skeleton';\nimport { TraceFeedbackTab } from '@/domains/traces/components/trace-feedback-tab';\nimport { TraceThreadItemView } from '@/domains/traces/components/trace-thread-item-view';\nimport { TracesErrorContent } from '@/domains/traces/components/traces-error-content';\nimport { useTracesListSource } from '@/domains/traces/hooks/use-traces-list-source';\nimport type { UseTracesListSourceArgs } from '@/domains/traces/hooks/use-traces-list-source';\nimport { Button } from '@/ds/components/Button';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport { useLinkComponent } from '@/lib/framework';\n\n// `queryTraces` requires a time range; start at the epoch so it covers the whole thread, like the legacy endpoint.\nconst THREAD_WINDOW_FROM = new Date(0).toISOString();\n\nexport interface ThreadViewByTraceProps {\n threadId: string;\n /** Lists the thread through the trace-query API; `false` falls back to `listTracesLight`. */\n withQueryTrace: boolean;\n /** Shows the per-trace Feedback tab and fetches its feedback. */\n withFeedback: boolean;\n /** Fires when a span detail opens or closes (`null`). */\n onSelectedSpanChange?: (selected: ThreadTraceSelectedSpan | null) => void;\n /** Opens a score from a trace's Scores tab; the app owns routing. */\n onOpenScore: (traceId: string, scoreId: string) => void;\n /** Turns loaded per page: the latest ones on open, then older ones as the reader scrolls up. */\n pageSize?: number;\n}\n\n/**\n * A memory thread rendered as its traces, like a chat: one row per agent turn (oldest at the top),\n * opened on the latest turns, with older turns loaded as the reader scrolls up. Each row shows the\n * reconstructed messages on the left and the span tree on the right. Clicking a span opens its\n * detail panel on the side so the conversation stays readable.\n */\nexport function ThreadViewByTrace({\n threadId,\n withQueryTrace,\n withFeedback,\n onSelectedSpanChange,\n onOpenScore,\n pageSize = 3,\n}: ThreadViewByTraceProps) {\n const legacyFilters = useMemo<UseTracesListSourceArgs['legacyFilters']>(() => ({ threadId }), [threadId]);\n const { rows, isLoading, isPlaceholderData, error, hasNextPage, isFetchingNextPage, fetchNextPage } =\n useTracesListSource({\n autoRefetch: false,\n withQueryTrace,\n legacyFilters,\n limit: pageSize,\n query: now => ({\n timeRange: {\n from: THREAD_WINDOW_FROM,\n to: now.toISOString(),\n },\n where: { op: 'eq', left: { path: 'threadId' }, right: { literal: threadId } },\n orderBy: [{ field: 'startedAt', direction: 'desc' }],\n }),\n });\n // Pages come newest first; the conversation reads oldest first.\n const traceIds = rows.map(trace => trace.traceId).reverse();\n const listSettled = !isLoading && !isPlaceholderData;\n\n // The first page is shown only once its turns' spans have settled too, so the rows mount complete\n // instead of each one loading on its own. Older pages keep their per-row loading.\n const client = useMastraClient();\n const [readyThreadId, setReadyThreadId] = useState<string | null>(null);\n const isReady = readyThreadId === threadId;\n const firstPageSpansSettled = useQueries({\n queries: (isReady || !listSettled ? [] : traceIds).map(traceId => ({\n ...traceSpansQueryOptions(client, traceId),\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n })),\n combine: results => results.every(result => !result.isPending),\n });\n if (!isReady && listSettled && firstPageSpansSettled) setReadyThreadId(threadId);\n\n if (error) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <TracesErrorContent error={error} resource=\"traces\" errorTitle=\"Failed to load traces\" />\n </div>\n );\n }\n\n if (!isReady) return <ThreadViewSkeleton withFeedback={withFeedback} />;\n\n if (traceIds.length === 0) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <Txt variant=\"body\" tone=\"muted\">\n No traces found for this thread.\n </Txt>\n </div>\n );\n }\n\n return (\n <ThreadTrace\n key={threadId}\n traceIds={traceIds}\n onSelectedSpanChange={onSelectedSpanChange}\n onLoadOlder={() => {\n if (hasNextPage && !isFetchingNextPage) fetchNextPage();\n }}\n >\n <ThreadTrace.List data-testid=\"thread-view-by-trace\">\n {traceIds.map((traceId, index) => (\n <ThreadTrace.Row key={traceId} traceId={traceId}>\n <ThreadTraceRowContent turn={index + 1} withFeedback={withFeedback} onOpenScore={onOpenScore} />\n </ThreadTrace.Row>\n ))}\n </ThreadTrace.List>\n <ThreadTrace.SpanPanel />\n </ThreadTrace>\n );\n}\n\nfunction ThreadTraceRowContent({\n turn,\n withFeedback,\n onOpenScore,\n}: {\n /** 1-based position among the loaded turns. */\n turn: number;\n withFeedback: boolean;\n onOpenScore: (traceId: string, scoreId: string) => void;\n}) {\n const { traceId, highlightSpans } = useThreadTraceRow();\n const { Link, paths } = useLinkComponent();\n const traceHref = paths.traceLink(traceId);\n // Same query the span tree observes (passive: the tree drives refetches).\n const { data: traceData } = useTraceSpans({ traceId: traceId, passive: true, queryOptions: { enabled: !!traceId } });\n const rootSpanId = traceData?.spans.find(span => span.parentSpanId == null)?.spanId;\n\n return (\n <>\n <ThreadTrace.Divider label={`Turn ${turn}`}>\n {traceHref && (\n <>\n <Button render={<Link href={traceHref} />} variant=\"ghost\" size=\"sm\" icon={<ExternalLinkIcon />}>\n Go to trace\n </Button>\n <span aria-hidden className=\"h-4 w-px bg-border\" />\n </>\n )}\n <ThreadTrace.TabList>\n <ThreadTrace.Tab value=\"messages\">\n <Icon size=\"xs\">\n <MessageSquareTextIcon />\n </Icon>\n Messages\n </ThreadTrace.Tab>\n {withFeedback && (\n <ThreadTrace.Tab value=\"feedback\">\n <Icon size=\"xs\">\n <MessageSquareReplyIcon />\n </Icon>\n Feedback\n </ThreadTrace.Tab>\n )}\n <ThreadTrace.Tab value=\"scores\">\n <Icon size=\"xs\">\n <ScorersIcon />\n </Icon>\n Scores\n </ThreadTrace.Tab>\n </ThreadTrace.TabList>\n </ThreadTrace.Divider>\n <ThreadTrace.RowBody>\n <ThreadTrace.Messages>\n <ThreadTrace.TabContent value=\"messages\" flush>\n <TraceThreadItemView traceId={traceId} onHighlightSpans={highlightSpans} />\n </ThreadTrace.TabContent>\n {withFeedback && (\n <ThreadTrace.TabContent value=\"feedback\" className=\"min-h-0 py-3\">\n <TraceFeedbackTab key={traceId} traceId={traceId} variant=\"thread\" />\n </ThreadTrace.TabContent>\n )}\n <ThreadTrace.TabContent value=\"scores\" className=\"min-h-0 py-3\">\n {rootSpanId ? (\n <TraceScoresTab\n key={traceId}\n traceId={traceId}\n spanId={rootSpanId}\n onScoreSelect={scoreId => onOpenScore(traceId, scoreId)}\n />\n ) : null}\n </ThreadTrace.TabContent>\n </ThreadTrace.Messages>\n <ThreadTrace.Details>\n <ThreadTrace.Spans />\n </ThreadTrace.Details>\n </ThreadTrace.RowBody>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"thread-view-by-trace.cjs.js","names":["useMemo","useTracesListSource","useMastraClient","useState","useQueries","traceSpansQueryOptions","TracesErrorContent","ThreadViewSkeleton","Txt","ThreadTrace","useThreadTraceRow","useLinkComponent","useTraceSpans","_Fragment","Button","ExternalLinkIcon","Icon","MessageSquareTextIcon","MessageSquareReplyIcon","ScorersIcon","TraceThreadItemView","TraceFeedbackTab","TraceScoresTab"],"sources":["../../../../src/domains/traces/components/thread-view-by-trace.tsx"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { traceSpansQueryOptions, useTraceSpans } from '@mastra/react/hooks/traces';\nimport { useQueries } from '@tanstack/react-query';\nimport { ExternalLinkIcon, MessageSquareReplyIcon, MessageSquareTextIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport type { FeedbackOptions } from './feedback-options';\nimport { TraceScoresTab } from '@/domains/scores';\nimport { ThreadTrace, useThreadTraceRow } from '@/domains/traces/components/thread-trace';\nimport type { ThreadTraceSelectedSpan } from '@/domains/traces/components/thread-trace';\n\nimport { ThreadViewSkeleton } from '@/domains/traces/components/thread-view-skeleton';\nimport { TraceFeedbackTab } from '@/domains/traces/components/trace-feedback-tab';\nimport { TraceThreadItemView } from '@/domains/traces/components/trace-thread-item-view';\nimport { TracesErrorContent } from '@/domains/traces/components/traces-error-content';\nimport { useTracesListSource } from '@/domains/traces/hooks/use-traces-list-source';\nimport type { UseTracesListSourceArgs } from '@/domains/traces/hooks/use-traces-list-source';\nimport { Button } from '@/ds/components/Button';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport { useLinkComponent } from '@/lib/framework';\n\n// `queryTraces` requires a time range; start at the epoch so it covers the whole thread, like the legacy endpoint.\nconst THREAD_WINDOW_FROM = new Date(0).toISOString();\n\nexport interface ThreadViewByTraceProps {\n threadId: string;\n /** Lists the thread through the trace-query API; `false` falls back to `listTracesLight`. */\n withQueryTrace: boolean;\n /** Shows the per-trace Feedback tab and fetches its feedback. */\n withFeedback: boolean;\n feedbackOptions?: FeedbackOptions;\n /** Fires when a span detail opens or closes (`null`). */\n onSelectedSpanChange?: (selected: ThreadTraceSelectedSpan | null) => void;\n /** Opens a score from a trace's Scores tab; the app owns routing. */\n onOpenScore: (traceId: string, scoreId: string) => void;\n /** Turns loaded per page: the latest ones on open, then older ones as the reader scrolls up. */\n pageSize?: number;\n}\n\n/**\n * A memory thread rendered as its traces, like a chat: one row per agent turn (oldest at the top),\n * opened on the latest turns, with older turns loaded as the reader scrolls up. Each row shows the\n * reconstructed messages on the left and the span tree on the right. Clicking a span opens its\n * detail panel on the side so the conversation stays readable.\n */\nexport function ThreadViewByTrace({\n threadId,\n withQueryTrace,\n withFeedback,\n feedbackOptions,\n onSelectedSpanChange,\n onOpenScore,\n pageSize = 3,\n}: ThreadViewByTraceProps) {\n const legacyFilters = useMemo<UseTracesListSourceArgs['legacyFilters']>(() => ({ threadId }), [threadId]);\n const { rows, isLoading, isPlaceholderData, error, hasNextPage, isFetchingNextPage, fetchNextPage } =\n useTracesListSource({\n autoRefetch: false,\n withQueryTrace,\n legacyFilters,\n limit: pageSize,\n query: now => ({\n timeRange: {\n from: THREAD_WINDOW_FROM,\n to: now.toISOString(),\n },\n where: { op: 'eq', left: { path: 'threadId' }, right: { literal: threadId } },\n orderBy: [{ field: 'startedAt', direction: 'desc' }],\n }),\n });\n // Pages come newest first; the conversation reads oldest first.\n const traceIds = rows.map(trace => trace.traceId).reverse();\n const listSettled = !isLoading && !isPlaceholderData;\n\n // The first page is shown only once its turns' spans have settled too, so the rows mount complete\n // instead of each one loading on its own. Older pages keep their per-row loading.\n const client = useMastraClient();\n const [readyThreadId, setReadyThreadId] = useState<string | null>(null);\n const isReady = readyThreadId === threadId;\n const firstPageSpansSettled = useQueries({\n queries: (isReady || !listSettled ? [] : traceIds).map(traceId => ({\n ...traceSpansQueryOptions(client, traceId),\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n })),\n combine: results => results.every(result => !result.isPending),\n });\n if (!isReady && listSettled && firstPageSpansSettled) setReadyThreadId(threadId);\n\n if (error) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <TracesErrorContent error={error} resource=\"traces\" errorTitle=\"Failed to load traces\" />\n </div>\n );\n }\n\n if (!isReady) return <ThreadViewSkeleton withFeedback={withFeedback} />;\n\n if (traceIds.length === 0) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <Txt variant=\"body\" tone=\"muted\">\n No traces found for this thread.\n </Txt>\n </div>\n );\n }\n\n return (\n <ThreadTrace\n key={threadId}\n traceIds={traceIds}\n onSelectedSpanChange={onSelectedSpanChange}\n onLoadOlder={() => {\n if (hasNextPage && !isFetchingNextPage) fetchNextPage();\n }}\n >\n <ThreadTrace.List data-testid=\"thread-view-by-trace\">\n {traceIds.map((traceId, index) => (\n <ThreadTrace.Row key={traceId} traceId={traceId}>\n <ThreadTraceRowContent\n turn={index + 1}\n withFeedback={withFeedback}\n feedbackOptions={feedbackOptions}\n onOpenScore={onOpenScore}\n />\n </ThreadTrace.Row>\n ))}\n </ThreadTrace.List>\n <ThreadTrace.SpanPanel />\n </ThreadTrace>\n );\n}\n\nfunction ThreadTraceRowContent({\n turn,\n withFeedback,\n feedbackOptions,\n onOpenScore,\n}: {\n /** 1-based position among the loaded turns. */\n turn: number;\n withFeedback: boolean;\n feedbackOptions?: FeedbackOptions;\n onOpenScore: (traceId: string, scoreId: string) => void;\n}) {\n const { traceId, highlightSpans } = useThreadTraceRow();\n const { Link, paths } = useLinkComponent();\n const traceHref = paths.traceLink(traceId);\n // Same query the span tree observes (passive: the tree drives refetches).\n const { data: traceData } = useTraceSpans({ traceId: traceId, passive: true, queryOptions: { enabled: !!traceId } });\n const rootSpanId = traceData?.spans.find(span => span.parentSpanId == null)?.spanId;\n\n return (\n <>\n <ThreadTrace.Divider label={`Turn ${turn}`}>\n {traceHref && (\n <>\n <Button render={<Link href={traceHref} />} variant=\"ghost\" size=\"sm\" icon={<ExternalLinkIcon />}>\n Go to trace\n </Button>\n <span aria-hidden className=\"h-4 w-px bg-border\" />\n </>\n )}\n <ThreadTrace.TabList>\n <ThreadTrace.Tab value=\"messages\">\n <Icon size=\"xs\">\n <MessageSquareTextIcon />\n </Icon>\n Messages\n </ThreadTrace.Tab>\n {withFeedback && (\n <ThreadTrace.Tab value=\"feedback\">\n <Icon size=\"xs\">\n <MessageSquareReplyIcon />\n </Icon>\n Feedback\n </ThreadTrace.Tab>\n )}\n <ThreadTrace.Tab value=\"scores\">\n <Icon size=\"xs\">\n <ScorersIcon />\n </Icon>\n Scores\n </ThreadTrace.Tab>\n </ThreadTrace.TabList>\n </ThreadTrace.Divider>\n <ThreadTrace.RowBody>\n <ThreadTrace.Messages>\n <ThreadTrace.TabContent value=\"messages\" flush>\n <TraceThreadItemView traceId={traceId} onHighlightSpans={highlightSpans} />\n </ThreadTrace.TabContent>\n {withFeedback && (\n <ThreadTrace.TabContent value=\"feedback\" className=\"min-h-0 py-3\">\n <TraceFeedbackTab key={traceId} traceId={traceId} variant=\"thread\" feedbackOptions={feedbackOptions} />\n </ThreadTrace.TabContent>\n )}\n <ThreadTrace.TabContent value=\"scores\" className=\"min-h-0 py-3\">\n {rootSpanId ? (\n <TraceScoresTab\n key={traceId}\n traceId={traceId}\n spanId={rootSpanId}\n onScoreSelect={scoreId => onOpenScore(traceId, scoreId)}\n />\n ) : null}\n </ThreadTrace.TabContent>\n </ThreadTrace.Messages>\n <ThreadTrace.Details>\n <ThreadTrace.Spans />\n </ThreadTrace.Details>\n </ThreadTrace.RowBody>\n </>\n );\n}\n\nexport type { FeedbackOptions } from './feedback-options';\n"],"mappings":"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"}
@@ -25,7 +25,7 @@ var THREAD_WINDOW_FROM = (/* @__PURE__ */ new Date(0)).toISOString();
25
25
  * reconstructed messages on the left and the span tree on the right. Clicking a span opens its
26
26
  * detail panel on the side so the conversation stays readable.
27
27
  */
28
- function ThreadViewByTrace({ threadId, withQueryTrace, withFeedback, onSelectedSpanChange, onOpenScore, pageSize = 3 }) {
28
+ function ThreadViewByTrace({ threadId, withQueryTrace, withFeedback, feedbackOptions, onSelectedSpanChange, onOpenScore, pageSize = 3 }) {
29
29
  const legacyFilters = useMemo(() => ({ threadId }), [threadId]);
30
30
  const { rows, isLoading, isPlaceholderData, error, hasNextPage, isFetchingNextPage, fetchNextPage } = useTracesListSource({
31
31
  autoRefetch: false,
@@ -93,13 +93,14 @@ function ThreadViewByTrace({ threadId, withQueryTrace, withFeedback, onSelectedS
93
93
  children: /* @__PURE__ */ jsx(ThreadTraceRowContent, {
94
94
  turn: index + 1,
95
95
  withFeedback,
96
+ feedbackOptions,
96
97
  onOpenScore
97
98
  })
98
99
  }, traceId))
99
100
  }), /* @__PURE__ */ jsx(ThreadTrace.SpanPanel, {})]
100
101
  }, threadId);
101
102
  }
102
- function ThreadTraceRowContent({ turn, withFeedback, onOpenScore }) {
103
+ function ThreadTraceRowContent({ turn, withFeedback, feedbackOptions, onOpenScore }) {
103
104
  const { traceId, highlightSpans } = useThreadTraceRow();
104
105
  const { Link, paths } = useLinkComponent();
105
106
  const traceHref = paths.traceLink(traceId);
@@ -157,7 +158,8 @@ function ThreadTraceRowContent({ turn, withFeedback, onOpenScore }) {
157
158
  className: "min-h-0 py-3",
158
159
  children: /* @__PURE__ */ jsx(TraceFeedbackTab, {
159
160
  traceId,
160
- variant: "thread"
161
+ variant: "thread",
162
+ feedbackOptions
161
163
  }, traceId)
162
164
  }),
163
165
  /* @__PURE__ */ jsx(ThreadTrace.TabContent, {
@@ -1 +1 @@
1
- {"version":3,"file":"thread-view-by-trace.es.js","names":["_Fragment"],"sources":["../../../../src/domains/traces/components/thread-view-by-trace.tsx"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { traceSpansQueryOptions, useTraceSpans } from '@mastra/react/hooks/traces';\nimport { useQueries } from '@tanstack/react-query';\nimport { ExternalLinkIcon, MessageSquareReplyIcon, MessageSquareTextIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport { TraceScoresTab } from '@/domains/scores';\nimport { ThreadTrace, useThreadTraceRow } from '@/domains/traces/components/thread-trace';\nimport type { ThreadTraceSelectedSpan } from '@/domains/traces/components/thread-trace';\n\nimport { ThreadViewSkeleton } from '@/domains/traces/components/thread-view-skeleton';\nimport { TraceFeedbackTab } from '@/domains/traces/components/trace-feedback-tab';\nimport { TraceThreadItemView } from '@/domains/traces/components/trace-thread-item-view';\nimport { TracesErrorContent } from '@/domains/traces/components/traces-error-content';\nimport { useTracesListSource } from '@/domains/traces/hooks/use-traces-list-source';\nimport type { UseTracesListSourceArgs } from '@/domains/traces/hooks/use-traces-list-source';\nimport { Button } from '@/ds/components/Button';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport { useLinkComponent } from '@/lib/framework';\n\n// `queryTraces` requires a time range; start at the epoch so it covers the whole thread, like the legacy endpoint.\nconst THREAD_WINDOW_FROM = new Date(0).toISOString();\n\nexport interface ThreadViewByTraceProps {\n threadId: string;\n /** Lists the thread through the trace-query API; `false` falls back to `listTracesLight`. */\n withQueryTrace: boolean;\n /** Shows the per-trace Feedback tab and fetches its feedback. */\n withFeedback: boolean;\n /** Fires when a span detail opens or closes (`null`). */\n onSelectedSpanChange?: (selected: ThreadTraceSelectedSpan | null) => void;\n /** Opens a score from a trace's Scores tab; the app owns routing. */\n onOpenScore: (traceId: string, scoreId: string) => void;\n /** Turns loaded per page: the latest ones on open, then older ones as the reader scrolls up. */\n pageSize?: number;\n}\n\n/**\n * A memory thread rendered as its traces, like a chat: one row per agent turn (oldest at the top),\n * opened on the latest turns, with older turns loaded as the reader scrolls up. Each row shows the\n * reconstructed messages on the left and the span tree on the right. Clicking a span opens its\n * detail panel on the side so the conversation stays readable.\n */\nexport function ThreadViewByTrace({\n threadId,\n withQueryTrace,\n withFeedback,\n onSelectedSpanChange,\n onOpenScore,\n pageSize = 3,\n}: ThreadViewByTraceProps) {\n const legacyFilters = useMemo<UseTracesListSourceArgs['legacyFilters']>(() => ({ threadId }), [threadId]);\n const { rows, isLoading, isPlaceholderData, error, hasNextPage, isFetchingNextPage, fetchNextPage } =\n useTracesListSource({\n autoRefetch: false,\n withQueryTrace,\n legacyFilters,\n limit: pageSize,\n query: now => ({\n timeRange: {\n from: THREAD_WINDOW_FROM,\n to: now.toISOString(),\n },\n where: { op: 'eq', left: { path: 'threadId' }, right: { literal: threadId } },\n orderBy: [{ field: 'startedAt', direction: 'desc' }],\n }),\n });\n // Pages come newest first; the conversation reads oldest first.\n const traceIds = rows.map(trace => trace.traceId).reverse();\n const listSettled = !isLoading && !isPlaceholderData;\n\n // The first page is shown only once its turns' spans have settled too, so the rows mount complete\n // instead of each one loading on its own. Older pages keep their per-row loading.\n const client = useMastraClient();\n const [readyThreadId, setReadyThreadId] = useState<string | null>(null);\n const isReady = readyThreadId === threadId;\n const firstPageSpansSettled = useQueries({\n queries: (isReady || !listSettled ? [] : traceIds).map(traceId => ({\n ...traceSpansQueryOptions(client, traceId),\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n })),\n combine: results => results.every(result => !result.isPending),\n });\n if (!isReady && listSettled && firstPageSpansSettled) setReadyThreadId(threadId);\n\n if (error) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <TracesErrorContent error={error} resource=\"traces\" errorTitle=\"Failed to load traces\" />\n </div>\n );\n }\n\n if (!isReady) return <ThreadViewSkeleton withFeedback={withFeedback} />;\n\n if (traceIds.length === 0) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <Txt variant=\"body\" tone=\"muted\">\n No traces found for this thread.\n </Txt>\n </div>\n );\n }\n\n return (\n <ThreadTrace\n key={threadId}\n traceIds={traceIds}\n onSelectedSpanChange={onSelectedSpanChange}\n onLoadOlder={() => {\n if (hasNextPage && !isFetchingNextPage) fetchNextPage();\n }}\n >\n <ThreadTrace.List data-testid=\"thread-view-by-trace\">\n {traceIds.map((traceId, index) => (\n <ThreadTrace.Row key={traceId} traceId={traceId}>\n <ThreadTraceRowContent turn={index + 1} withFeedback={withFeedback} onOpenScore={onOpenScore} />\n </ThreadTrace.Row>\n ))}\n </ThreadTrace.List>\n <ThreadTrace.SpanPanel />\n </ThreadTrace>\n );\n}\n\nfunction ThreadTraceRowContent({\n turn,\n withFeedback,\n onOpenScore,\n}: {\n /** 1-based position among the loaded turns. */\n turn: number;\n withFeedback: boolean;\n onOpenScore: (traceId: string, scoreId: string) => void;\n}) {\n const { traceId, highlightSpans } = useThreadTraceRow();\n const { Link, paths } = useLinkComponent();\n const traceHref = paths.traceLink(traceId);\n // Same query the span tree observes (passive: the tree drives refetches).\n const { data: traceData } = useTraceSpans({ traceId: traceId, passive: true, queryOptions: { enabled: !!traceId } });\n const rootSpanId = traceData?.spans.find(span => span.parentSpanId == null)?.spanId;\n\n return (\n <>\n <ThreadTrace.Divider label={`Turn ${turn}`}>\n {traceHref && (\n <>\n <Button render={<Link href={traceHref} />} variant=\"ghost\" size=\"sm\" icon={<ExternalLinkIcon />}>\n Go to trace\n </Button>\n <span aria-hidden className=\"h-4 w-px bg-border\" />\n </>\n )}\n <ThreadTrace.TabList>\n <ThreadTrace.Tab value=\"messages\">\n <Icon size=\"xs\">\n <MessageSquareTextIcon />\n </Icon>\n Messages\n </ThreadTrace.Tab>\n {withFeedback && (\n <ThreadTrace.Tab value=\"feedback\">\n <Icon size=\"xs\">\n <MessageSquareReplyIcon />\n </Icon>\n Feedback\n </ThreadTrace.Tab>\n )}\n <ThreadTrace.Tab value=\"scores\">\n <Icon size=\"xs\">\n <ScorersIcon />\n </Icon>\n Scores\n </ThreadTrace.Tab>\n </ThreadTrace.TabList>\n </ThreadTrace.Divider>\n <ThreadTrace.RowBody>\n <ThreadTrace.Messages>\n <ThreadTrace.TabContent value=\"messages\" flush>\n <TraceThreadItemView traceId={traceId} onHighlightSpans={highlightSpans} />\n </ThreadTrace.TabContent>\n {withFeedback && (\n <ThreadTrace.TabContent value=\"feedback\" className=\"min-h-0 py-3\">\n <TraceFeedbackTab key={traceId} traceId={traceId} variant=\"thread\" />\n </ThreadTrace.TabContent>\n )}\n <ThreadTrace.TabContent value=\"scores\" className=\"min-h-0 py-3\">\n {rootSpanId ? (\n <TraceScoresTab\n key={traceId}\n traceId={traceId}\n spanId={rootSpanId}\n onScoreSelect={scoreId => onOpenScore(traceId, scoreId)}\n />\n ) : null}\n </ThreadTrace.TabContent>\n </ThreadTrace.Messages>\n <ThreadTrace.Details>\n <ThreadTrace.Spans />\n </ThreadTrace.Details>\n </ThreadTrace.RowBody>\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"thread-view-by-trace.es.js","names":["_Fragment"],"sources":["../../../../src/domains/traces/components/thread-view-by-trace.tsx"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { traceSpansQueryOptions, useTraceSpans } from '@mastra/react/hooks/traces';\nimport { useQueries } from '@tanstack/react-query';\nimport { ExternalLinkIcon, MessageSquareReplyIcon, MessageSquareTextIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport type { FeedbackOptions } from './feedback-options';\nimport { TraceScoresTab } from '@/domains/scores';\nimport { ThreadTrace, useThreadTraceRow } from '@/domains/traces/components/thread-trace';\nimport type { ThreadTraceSelectedSpan } from '@/domains/traces/components/thread-trace';\n\nimport { ThreadViewSkeleton } from '@/domains/traces/components/thread-view-skeleton';\nimport { TraceFeedbackTab } from '@/domains/traces/components/trace-feedback-tab';\nimport { TraceThreadItemView } from '@/domains/traces/components/trace-thread-item-view';\nimport { TracesErrorContent } from '@/domains/traces/components/traces-error-content';\nimport { useTracesListSource } from '@/domains/traces/hooks/use-traces-list-source';\nimport type { UseTracesListSourceArgs } from '@/domains/traces/hooks/use-traces-list-source';\nimport { Button } from '@/ds/components/Button';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { ScorersIcon } from '@/ds/icons/ScorersIcon';\nimport { useLinkComponent } from '@/lib/framework';\n\n// `queryTraces` requires a time range; start at the epoch so it covers the whole thread, like the legacy endpoint.\nconst THREAD_WINDOW_FROM = new Date(0).toISOString();\n\nexport interface ThreadViewByTraceProps {\n threadId: string;\n /** Lists the thread through the trace-query API; `false` falls back to `listTracesLight`. */\n withQueryTrace: boolean;\n /** Shows the per-trace Feedback tab and fetches its feedback. */\n withFeedback: boolean;\n feedbackOptions?: FeedbackOptions;\n /** Fires when a span detail opens or closes (`null`). */\n onSelectedSpanChange?: (selected: ThreadTraceSelectedSpan | null) => void;\n /** Opens a score from a trace's Scores tab; the app owns routing. */\n onOpenScore: (traceId: string, scoreId: string) => void;\n /** Turns loaded per page: the latest ones on open, then older ones as the reader scrolls up. */\n pageSize?: number;\n}\n\n/**\n * A memory thread rendered as its traces, like a chat: one row per agent turn (oldest at the top),\n * opened on the latest turns, with older turns loaded as the reader scrolls up. Each row shows the\n * reconstructed messages on the left and the span tree on the right. Clicking a span opens its\n * detail panel on the side so the conversation stays readable.\n */\nexport function ThreadViewByTrace({\n threadId,\n withQueryTrace,\n withFeedback,\n feedbackOptions,\n onSelectedSpanChange,\n onOpenScore,\n pageSize = 3,\n}: ThreadViewByTraceProps) {\n const legacyFilters = useMemo<UseTracesListSourceArgs['legacyFilters']>(() => ({ threadId }), [threadId]);\n const { rows, isLoading, isPlaceholderData, error, hasNextPage, isFetchingNextPage, fetchNextPage } =\n useTracesListSource({\n autoRefetch: false,\n withQueryTrace,\n legacyFilters,\n limit: pageSize,\n query: now => ({\n timeRange: {\n from: THREAD_WINDOW_FROM,\n to: now.toISOString(),\n },\n where: { op: 'eq', left: { path: 'threadId' }, right: { literal: threadId } },\n orderBy: [{ field: 'startedAt', direction: 'desc' }],\n }),\n });\n // Pages come newest first; the conversation reads oldest first.\n const traceIds = rows.map(trace => trace.traceId).reverse();\n const listSettled = !isLoading && !isPlaceholderData;\n\n // The first page is shown only once its turns' spans have settled too, so the rows mount complete\n // instead of each one loading on its own. Older pages keep their per-row loading.\n const client = useMastraClient();\n const [readyThreadId, setReadyThreadId] = useState<string | null>(null);\n const isReady = readyThreadId === threadId;\n const firstPageSpansSettled = useQueries({\n queries: (isReady || !listSettled ? [] : traceIds).map(traceId => ({\n ...traceSpansQueryOptions(client, traceId),\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n })),\n combine: results => results.every(result => !result.isPending),\n });\n if (!isReady && listSettled && firstPageSpansSettled) setReadyThreadId(threadId);\n\n if (error) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <TracesErrorContent error={error} resource=\"traces\" errorTitle=\"Failed to load traces\" />\n </div>\n );\n }\n\n if (!isReady) return <ThreadViewSkeleton withFeedback={withFeedback} />;\n\n if (traceIds.length === 0) {\n return (\n <div className=\"flex h-full items-center justify-center p-4\">\n <Txt variant=\"body\" tone=\"muted\">\n No traces found for this thread.\n </Txt>\n </div>\n );\n }\n\n return (\n <ThreadTrace\n key={threadId}\n traceIds={traceIds}\n onSelectedSpanChange={onSelectedSpanChange}\n onLoadOlder={() => {\n if (hasNextPage && !isFetchingNextPage) fetchNextPage();\n }}\n >\n <ThreadTrace.List data-testid=\"thread-view-by-trace\">\n {traceIds.map((traceId, index) => (\n <ThreadTrace.Row key={traceId} traceId={traceId}>\n <ThreadTraceRowContent\n turn={index + 1}\n withFeedback={withFeedback}\n feedbackOptions={feedbackOptions}\n onOpenScore={onOpenScore}\n />\n </ThreadTrace.Row>\n ))}\n </ThreadTrace.List>\n <ThreadTrace.SpanPanel />\n </ThreadTrace>\n );\n}\n\nfunction ThreadTraceRowContent({\n turn,\n withFeedback,\n feedbackOptions,\n onOpenScore,\n}: {\n /** 1-based position among the loaded turns. */\n turn: number;\n withFeedback: boolean;\n feedbackOptions?: FeedbackOptions;\n onOpenScore: (traceId: string, scoreId: string) => void;\n}) {\n const { traceId, highlightSpans } = useThreadTraceRow();\n const { Link, paths } = useLinkComponent();\n const traceHref = paths.traceLink(traceId);\n // Same query the span tree observes (passive: the tree drives refetches).\n const { data: traceData } = useTraceSpans({ traceId: traceId, passive: true, queryOptions: { enabled: !!traceId } });\n const rootSpanId = traceData?.spans.find(span => span.parentSpanId == null)?.spanId;\n\n return (\n <>\n <ThreadTrace.Divider label={`Turn ${turn}`}>\n {traceHref && (\n <>\n <Button render={<Link href={traceHref} />} variant=\"ghost\" size=\"sm\" icon={<ExternalLinkIcon />}>\n Go to trace\n </Button>\n <span aria-hidden className=\"h-4 w-px bg-border\" />\n </>\n )}\n <ThreadTrace.TabList>\n <ThreadTrace.Tab value=\"messages\">\n <Icon size=\"xs\">\n <MessageSquareTextIcon />\n </Icon>\n Messages\n </ThreadTrace.Tab>\n {withFeedback && (\n <ThreadTrace.Tab value=\"feedback\">\n <Icon size=\"xs\">\n <MessageSquareReplyIcon />\n </Icon>\n Feedback\n </ThreadTrace.Tab>\n )}\n <ThreadTrace.Tab value=\"scores\">\n <Icon size=\"xs\">\n <ScorersIcon />\n </Icon>\n Scores\n </ThreadTrace.Tab>\n </ThreadTrace.TabList>\n </ThreadTrace.Divider>\n <ThreadTrace.RowBody>\n <ThreadTrace.Messages>\n <ThreadTrace.TabContent value=\"messages\" flush>\n <TraceThreadItemView traceId={traceId} onHighlightSpans={highlightSpans} />\n </ThreadTrace.TabContent>\n {withFeedback && (\n <ThreadTrace.TabContent value=\"feedback\" className=\"min-h-0 py-3\">\n <TraceFeedbackTab key={traceId} traceId={traceId} variant=\"thread\" feedbackOptions={feedbackOptions} />\n </ThreadTrace.TabContent>\n )}\n <ThreadTrace.TabContent value=\"scores\" className=\"min-h-0 py-3\">\n {rootSpanId ? (\n <TraceScoresTab\n key={traceId}\n traceId={traceId}\n spanId={rootSpanId}\n onScoreSelect={scoreId => onOpenScore(traceId, scoreId)}\n />\n ) : null}\n </ThreadTrace.TabContent>\n </ThreadTrace.Messages>\n <ThreadTrace.Details>\n <ThreadTrace.Spans />\n </ThreadTrace.Details>\n </ThreadTrace.RowBody>\n </>\n );\n}\n\nexport type { FeedbackOptions } from './feedback-options';\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_domains_traces_trace_list_columns = require("../trace-list-columns.cjs.js");
3
- const require_combobox = require("../../../combobox-i723LxeC.cjs");
3
+ const require_combobox = require("../../../combobox-DU2jsrGa.cjs");
4
4
  const require_Dialog = require("../../../Dialog-Duy3M1ny.cjs");
5
- const require_dropdown_menu = require("../../../dropdown-menu-Dx-jCOIv.cjs");
5
+ const require_dropdown_menu = require("../../../dropdown-menu-D3D8USIY.cjs");
6
6
  const require_components_Field = require("../../../components/Field.cjs.js");
7
7
  const require_components_Form = require("../../../components/Form.cjs.js");
8
8
  const require_Txt = require("../../../Txt-_00wWxTd.cjs");
@@ -1,7 +1,7 @@
1
1
  import { TRACE_COLUMN_CATALOGS, TRACE_CUSTOM_COLUMN_FIELDS, TRACE_CUSTOM_COLUMN_LABELS, TRACE_USAGE_COLUMNS } from "../trace-list-columns.es.js";
2
- import { t as Combobox } from "../../../combobox-lbSxWRMl.js";
2
+ import { t as Combobox } from "../../../combobox-DLdInLYm.js";
3
3
  import { a as DialogContent, c as DialogHeader, d as DialogTitle, n as DialogBody, o as DialogDescription, p as DialogAction, r as DialogCancel, s as DialogFooter, t as Dialog } from "../../../Dialog-OBPu3rl2.js";
4
- import { t as DropdownMenu } from "../../../dropdown-menu-DKoWI8kD.js";
4
+ import { t as DropdownMenu } from "../../../dropdown-menu-jsf9D-J_.js";
5
5
  import { Field, FieldError, FieldLabel } from "../../../components/Field.es.js";
6
6
  import { Form } from "../../../components/Form.es.js";
7
7
  import { t as Txt } from "../../../Txt-5efBsb2p.js";
@@ -7,10 +7,10 @@ const require_domains_traces_components_trace_span_timeline = require("./trace-s
7
7
  const require_domains_traces_components_trace_span_tree = require("./trace-span-tree.cjs.js");
8
8
  const require_domains_traces_components_trace_summary_description = require("./trace-summary-description.cjs.js");
9
9
  const require_Button = require("../../../Button-BfICfyxD.cjs");
10
- const require_DataPanel = require("../../../DataPanel-BRRAvWYQ.cjs");
10
+ const require_DataPanel = require("../../../DataPanel-LfExjFpP.cjs");
11
11
  const require_Notice = require("../../../Notice-B_KjMmA6.cjs");
12
12
  const require_components_Skeleton = require("../../../components/Skeleton.cjs.js");
13
- const require_tabs_tab = require("../../../tabs-tab-CANh2eAD.cjs");
13
+ const require_tabs_tab = require("../../../tabs-tab-Dj2huH5T.cjs");
14
14
  const require_icons_Icon = require("../../../icons/Icon.cjs.js");
15
15
  const require_icons_ScorersIcon = require("../../../icons/ScorersIcon.cjs.js");
16
16
  const require_icons_TraceIcon = require("../../../icons/TraceIcon.cjs.js");
@@ -6,10 +6,10 @@ import { TraceSpanTimeline } from "./trace-span-timeline.es.js";
6
6
  import { TraceSpanTree } from "./trace-span-tree.es.js";
7
7
  import { TraceEntityMeta, TraceStatusMeta, TraceSummaryDescription } from "./trace-summary-description.es.js";
8
8
  import { t as Button } from "../../../Button-Bi7aXd_G.js";
9
- import { t as DataPanel } from "../../../DataPanel-pVr5LVaK.js";
9
+ import { t as DataPanel } from "../../../DataPanel-Rv5Mb_pf.js";
10
10
  import { t as Notice } from "../../../Notice-OSlG42lD.js";
11
11
  import { Skeleton } from "../../../components/Skeleton.es.js";
12
- import { n as Tabs, r as TabList, t as Tab } from "../../../tabs-tab-BHs639jL.js";
12
+ import { n as Tabs, r as TabList, t as Tab } from "../../../tabs-tab-CJVS0WED.js";
13
13
  import { Icon } from "../../../icons/Icon.es.js";
14
14
  import { ScorersIcon } from "../../../icons/ScorersIcon.es.js";
15
15
  import { TraceIcon } from "../../../icons/TraceIcon.es.js";
@@ -3,7 +3,7 @@ const require_domains_traces_hooks_get_all_span_ids = require("../hooks/get-all-
3
3
  const require_domains_traces_components_format_hierarchical_spans = require("./format-hierarchical-spans.cjs.js");
4
4
  const require_domains_traces_components_trace_id_button = require("./trace-id-button.cjs.js");
5
5
  const require_domains_traces_components_trace_span_tree = require("./trace-span-tree.cjs.js");
6
- const require_DataDetailsPanel = require("../../../DataDetailsPanel-BDoD6pxx.cjs");
6
+ const require_DataDetailsPanel = require("../../../DataDetailsPanel-DCMlaG7j.cjs");
7
7
  let react = require("react");
8
8
  let react_jsx_runtime = require("react/jsx-runtime");
9
9
  // src/domains/traces/components/trace-details-view.tsx
@@ -2,7 +2,7 @@ import { getAllSpanIds } from "../hooks/get-all-span-ids.es.js";
2
2
  import { formatHierarchicalSpans } from "./format-hierarchical-spans.es.js";
3
3
  import { TraceIdButton } from "./trace-id-button.es.js";
4
4
  import { TraceSpanTree } from "./trace-span-tree.es.js";
5
- import { t as DataDetailsPanel } from "../../../DataDetailsPanel-BU05psHL.js";
5
+ import { t as DataDetailsPanel } from "../../../DataDetailsPanel-mTfbbQho.js";
6
6
  import { useEffect, useMemo, useState } from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
  // src/domains/traces/components/trace-details-view.tsx
@@ -9,14 +9,18 @@ let _mastra_react_hooks_feedback = require("@mastra/react/hooks/feedback");
9
9
  * Trace-level feedback (no span). Owns its own pagination: mount it with a `key`
10
10
  * on the trace id so a page index never leaks across traces.
11
11
  */
12
- function TraceFeedbackTab({ traceId, variant }) {
12
+ function TraceFeedbackTab({ traceId, variant, feedbackOptions }) {
13
13
  const [page, setPage] = (0, react.useState)(0);
14
14
  const { data, isLoading } = (0, _mastra_react_hooks_traces.useTraceFeedback)({
15
15
  traceId,
16
16
  page,
17
17
  queryOptions: { enabled: !!traceId }
18
18
  });
19
- const { mutateAsync, isPending } = (0, _mastra_react_hooks_traces.useCreateFeedback)({ traceId });
19
+ const { mutateAsync, isPending, error } = (0, _mastra_react_hooks_traces.useCreateFeedback)({
20
+ traceId,
21
+ contextMode: feedbackOptions?.contextMode,
22
+ feedbackUserId: feedbackOptions?.feedbackUserId
23
+ });
20
24
  const { mutateAsync: deleteFeedback, isPending: isDeleting } = (0, _mastra_react_hooks_traces.useDeleteFeedback)({ traceId });
21
25
  const updateReviewStatus = (0, _mastra_react_hooks_feedback.useUpdateFeedbackReviewStatus)();
22
26
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_traces_components_feedback_thread.FeedbackThread, {
@@ -25,10 +29,11 @@ function TraceFeedbackTab({ traceId, variant }) {
25
29
  onPageChange: setPage,
26
30
  onSubmit: (text) => mutateAsync({ text }),
27
31
  isSubmitting: isPending,
28
- onDelete: (feedbackId) => deleteFeedback({ feedbackId }),
32
+ submitError: error ? "Could not save feedback. Please try again." : void 0,
33
+ onDelete: feedbackOptions?.allowDelete === false ? void 0 : (feedbackId) => deleteFeedback({ feedbackId }),
29
34
  isDeleting,
30
35
  variant,
31
- onMarkReviewed: (feedbackId) => updateReviewStatus.mutate({
36
+ onMarkReviewed: feedbackOptions?.allowReview === false ? void 0 : (feedbackId) => updateReviewStatus.mutate({
32
37
  feedbackId,
33
38
  reviewStatus: "reviewed"
34
39
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"trace-feedback-tab.cjs.js","names":["useState","useTraceFeedback","useCreateFeedback","useDeleteFeedback","useUpdateFeedbackReviewStatus","FeedbackThread"],"sources":["../../../../src/domains/traces/components/trace-feedback-tab.tsx"],"sourcesContent":["import { useUpdateFeedbackReviewStatus } from '@mastra/react/hooks/feedback';\nimport { useCreateFeedback, useDeleteFeedback, useTraceFeedback } from '@mastra/react/hooks/traces';\nimport { useState } from 'react';\n\nimport { FeedbackThread } from './feedback-thread';\nimport type { CommentVariant } from '@/ds/components/Comment';\n\ntype TraceFeedbackTabProps = {\n traceId: string;\n /** Comment layout variant — forwarded to `FeedbackThread`. */\n variant?: CommentVariant;\n};\n\n/**\n * Trace-level feedback (no span). Owns its own pagination: mount it with a `key`\n * on the trace id so a page index never leaks across traces.\n */\nexport function TraceFeedbackTab({ traceId, variant }: TraceFeedbackTabProps) {\n const [page, setPage] = useState(0);\n const { data, isLoading } = useTraceFeedback({ traceId, page, queryOptions: { enabled: !!traceId } });\n const { mutateAsync, isPending } = useCreateFeedback({ traceId });\n const { mutateAsync: deleteFeedback, isPending: isDeleting } = useDeleteFeedback({ traceId });\n const updateReviewStatus = useUpdateFeedbackReviewStatus();\n\n return (\n <FeedbackThread\n feedbackData={data}\n isLoadingFeedbackData={isLoading}\n onPageChange={setPage}\n onSubmit={text => mutateAsync({ text })}\n isSubmitting={isPending}\n onDelete={feedbackId => deleteFeedback({ feedbackId })}\n isDeleting={isDeleting}\n variant={variant}\n onMarkReviewed={feedbackId => updateReviewStatus.mutate({ feedbackId, reviewStatus: 'reviewed' })}\n pendingFeedbackId={updateReviewStatus.isPending ? updateReviewStatus.variables.feedbackId : undefined}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;AAiBA,SAAgB,iBAAiB,EAAE,SAAS,WAAkC;CAC5E,MAAM,CAAC,MAAM,YAAA,GAAWA,MAAAA,SAAAA,CAAS,CAAC;CAClC,MAAM,EAAE,MAAM,eAAA,GAAcC,2BAAAA,iBAAAA,CAAiB;EAAE;EAAS;EAAM,cAAc,EAAE,SAAS,CAAC,CAAC,QAAQ;CAAE,CAAC;CACpG,MAAM,EAAE,aAAa,eAAA,GAAcC,2BAAAA,kBAAAA,CAAkB,EAAE,QAAQ,CAAC;CAChE,MAAM,EAAE,aAAa,gBAAgB,WAAW,gBAAA,GAAeC,2BAAAA,kBAAAA,CAAkB,EAAE,QAAQ,CAAC;CAC5F,MAAM,sBAAA,GAAqBC,6BAAAA,8BAAAA,CAA8B;CAEzD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,kDAAAA,gBAAD;EACE,cAAc;EACd,uBAAuB;EACvB,cAAc;EACd,WAAU,SAAQ,YAAY,EAAE,KAAK,CAAC;EACtC,cAAc;EACd,WAAU,eAAc,eAAe,EAAE,WAAW,CAAC;EACzC;EACH;EACT,iBAAgB,eAAc,mBAAmB,OAAO;GAAE;GAAY,cAAc;EAAW,CAAC;EAChG,mBAAmB,mBAAmB,YAAY,mBAAmB,UAAU,aAAa,KAAA;CAC7F,CAAA;AAEL"}
1
+ {"version":3,"file":"trace-feedback-tab.cjs.js","names":["useState","useTraceFeedback","useCreateFeedback","useDeleteFeedback","useUpdateFeedbackReviewStatus","FeedbackThread"],"sources":["../../../../src/domains/traces/components/trace-feedback-tab.tsx"],"sourcesContent":["import { useUpdateFeedbackReviewStatus } from '@mastra/react/hooks/feedback';\nimport { useCreateFeedback, useDeleteFeedback, useTraceFeedback } from '@mastra/react/hooks/traces';\nimport { useState } from 'react';\n\nimport type { FeedbackOptions } from './feedback-options';\nimport { FeedbackThread } from './feedback-thread';\nimport type { CommentVariant } from '@/ds/components/Comment';\n\ntype TraceFeedbackTabProps = {\n traceId: string;\n feedbackOptions?: FeedbackOptions;\n /** Comment layout variant — forwarded to `FeedbackThread`. */\n variant?: CommentVariant;\n};\n\n/**\n * Trace-level feedback (no span). Owns its own pagination: mount it with a `key`\n * on the trace id so a page index never leaks across traces.\n */\nexport function TraceFeedbackTab({ traceId, variant, feedbackOptions }: TraceFeedbackTabProps) {\n const [page, setPage] = useState(0);\n const { data, isLoading } = useTraceFeedback({ traceId, page, queryOptions: { enabled: !!traceId } });\n const { mutateAsync, isPending, error } = useCreateFeedback({\n traceId,\n contextMode: feedbackOptions?.contextMode,\n feedbackUserId: feedbackOptions?.feedbackUserId,\n });\n const { mutateAsync: deleteFeedback, isPending: isDeleting } = useDeleteFeedback({ traceId });\n const updateReviewStatus = useUpdateFeedbackReviewStatus();\n\n return (\n <FeedbackThread\n feedbackData={data}\n isLoadingFeedbackData={isLoading}\n onPageChange={setPage}\n onSubmit={text => mutateAsync({ text })}\n isSubmitting={isPending}\n submitError={error ? 'Could not save feedback. Please try again.' : undefined}\n onDelete={feedbackOptions?.allowDelete === false ? undefined : feedbackId => deleteFeedback({ feedbackId })}\n isDeleting={isDeleting}\n variant={variant}\n onMarkReviewed={\n feedbackOptions?.allowReview === false\n ? undefined\n : feedbackId => updateReviewStatus.mutate({ feedbackId, reviewStatus: 'reviewed' })\n }\n pendingFeedbackId={updateReviewStatus.isPending ? updateReviewStatus.variables.feedbackId : undefined}\n />\n );\n}\n\nexport type { FeedbackOptions } from './feedback-options';\n"],"mappings":";;;;;;;;;;;AAmBA,SAAgB,iBAAiB,EAAE,SAAS,SAAS,mBAA0C;CAC7F,MAAM,CAAC,MAAM,YAAA,GAAWA,MAAAA,SAAAA,CAAS,CAAC;CAClC,MAAM,EAAE,MAAM,eAAA,GAAcC,2BAAAA,iBAAAA,CAAiB;EAAE;EAAS;EAAM,cAAc,EAAE,SAAS,CAAC,CAAC,QAAQ;CAAE,CAAC;CACpG,MAAM,EAAE,aAAa,WAAW,WAAA,GAAUC,2BAAAA,kBAAAA,CAAkB;EAC1D;EACA,aAAa,iBAAiB;EAC9B,gBAAgB,iBAAiB;CACnC,CAAC;CACD,MAAM,EAAE,aAAa,gBAAgB,WAAW,gBAAA,GAAeC,2BAAAA,kBAAAA,CAAkB,EAAE,QAAQ,CAAC;CAC5F,MAAM,sBAAA,GAAqBC,6BAAAA,8BAAAA,CAA8B;CAEzD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,kDAAAA,gBAAD;EACE,cAAc;EACd,uBAAuB;EACvB,cAAc;EACd,WAAU,SAAQ,YAAY,EAAE,KAAK,CAAC;EACtC,cAAc;EACd,aAAa,QAAQ,+CAA+C,KAAA;EACpE,UAAU,iBAAiB,gBAAgB,QAAQ,KAAA,KAAY,eAAc,eAAe,EAAE,WAAW,CAAC;EAC9F;EACH;EACT,gBACE,iBAAiB,gBAAgB,QAC7B,KAAA,KACA,eAAc,mBAAmB,OAAO;GAAE;GAAY,cAAc;EAAW,CAAC;EAEtF,mBAAmB,mBAAmB,YAAY,mBAAmB,UAAU,aAAa,KAAA;CAC7F,CAAA;AAEL"}
@@ -8,14 +8,18 @@ import { useUpdateFeedbackReviewStatus } from "@mastra/react/hooks/feedback";
8
8
  * Trace-level feedback (no span). Owns its own pagination: mount it with a `key`
9
9
  * on the trace id so a page index never leaks across traces.
10
10
  */
11
- function TraceFeedbackTab({ traceId, variant }) {
11
+ function TraceFeedbackTab({ traceId, variant, feedbackOptions }) {
12
12
  const [page, setPage] = useState(0);
13
13
  const { data, isLoading } = useTraceFeedback({
14
14
  traceId,
15
15
  page,
16
16
  queryOptions: { enabled: !!traceId }
17
17
  });
18
- const { mutateAsync, isPending } = useCreateFeedback({ traceId });
18
+ const { mutateAsync, isPending, error } = useCreateFeedback({
19
+ traceId,
20
+ contextMode: feedbackOptions?.contextMode,
21
+ feedbackUserId: feedbackOptions?.feedbackUserId
22
+ });
19
23
  const { mutateAsync: deleteFeedback, isPending: isDeleting } = useDeleteFeedback({ traceId });
20
24
  const updateReviewStatus = useUpdateFeedbackReviewStatus();
21
25
  return /* @__PURE__ */ jsx(FeedbackThread, {
@@ -24,10 +28,11 @@ function TraceFeedbackTab({ traceId, variant }) {
24
28
  onPageChange: setPage,
25
29
  onSubmit: (text) => mutateAsync({ text }),
26
30
  isSubmitting: isPending,
27
- onDelete: (feedbackId) => deleteFeedback({ feedbackId }),
31
+ submitError: error ? "Could not save feedback. Please try again." : void 0,
32
+ onDelete: feedbackOptions?.allowDelete === false ? void 0 : (feedbackId) => deleteFeedback({ feedbackId }),
28
33
  isDeleting,
29
34
  variant,
30
- onMarkReviewed: (feedbackId) => updateReviewStatus.mutate({
35
+ onMarkReviewed: feedbackOptions?.allowReview === false ? void 0 : (feedbackId) => updateReviewStatus.mutate({
31
36
  feedbackId,
32
37
  reviewStatus: "reviewed"
33
38
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"trace-feedback-tab.es.js","names":[],"sources":["../../../../src/domains/traces/components/trace-feedback-tab.tsx"],"sourcesContent":["import { useUpdateFeedbackReviewStatus } from '@mastra/react/hooks/feedback';\nimport { useCreateFeedback, useDeleteFeedback, useTraceFeedback } from '@mastra/react/hooks/traces';\nimport { useState } from 'react';\n\nimport { FeedbackThread } from './feedback-thread';\nimport type { CommentVariant } from '@/ds/components/Comment';\n\ntype TraceFeedbackTabProps = {\n traceId: string;\n /** Comment layout variant — forwarded to `FeedbackThread`. */\n variant?: CommentVariant;\n};\n\n/**\n * Trace-level feedback (no span). Owns its own pagination: mount it with a `key`\n * on the trace id so a page index never leaks across traces.\n */\nexport function TraceFeedbackTab({ traceId, variant }: TraceFeedbackTabProps) {\n const [page, setPage] = useState(0);\n const { data, isLoading } = useTraceFeedback({ traceId, page, queryOptions: { enabled: !!traceId } });\n const { mutateAsync, isPending } = useCreateFeedback({ traceId });\n const { mutateAsync: deleteFeedback, isPending: isDeleting } = useDeleteFeedback({ traceId });\n const updateReviewStatus = useUpdateFeedbackReviewStatus();\n\n return (\n <FeedbackThread\n feedbackData={data}\n isLoadingFeedbackData={isLoading}\n onPageChange={setPage}\n onSubmit={text => mutateAsync({ text })}\n isSubmitting={isPending}\n onDelete={feedbackId => deleteFeedback({ feedbackId })}\n isDeleting={isDeleting}\n variant={variant}\n onMarkReviewed={feedbackId => updateReviewStatus.mutate({ feedbackId, reviewStatus: 'reviewed' })}\n pendingFeedbackId={updateReviewStatus.isPending ? updateReviewStatus.variables.feedbackId : undefined}\n />\n );\n}\n"],"mappings":";;;;;;;;;;AAiBA,SAAgB,iBAAiB,EAAE,SAAS,WAAkC;CAC5E,MAAM,CAAC,MAAM,WAAW,SAAS,CAAC;CAClC,MAAM,EAAE,MAAM,cAAc,iBAAiB;EAAE;EAAS;EAAM,cAAc,EAAE,SAAS,CAAC,CAAC,QAAQ;CAAE,CAAC;CACpG,MAAM,EAAE,aAAa,cAAc,kBAAkB,EAAE,QAAQ,CAAC;CAChE,MAAM,EAAE,aAAa,gBAAgB,WAAW,eAAe,kBAAkB,EAAE,QAAQ,CAAC;CAC5F,MAAM,qBAAqB,8BAA8B;CAEzD,OACE,oBAAC,gBAAD;EACE,cAAc;EACd,uBAAuB;EACvB,cAAc;EACd,WAAU,SAAQ,YAAY,EAAE,KAAK,CAAC;EACtC,cAAc;EACd,WAAU,eAAc,eAAe,EAAE,WAAW,CAAC;EACzC;EACH;EACT,iBAAgB,eAAc,mBAAmB,OAAO;GAAE;GAAY,cAAc;EAAW,CAAC;EAChG,mBAAmB,mBAAmB,YAAY,mBAAmB,UAAU,aAAa,KAAA;CAC7F,CAAA;AAEL"}
1
+ {"version":3,"file":"trace-feedback-tab.es.js","names":[],"sources":["../../../../src/domains/traces/components/trace-feedback-tab.tsx"],"sourcesContent":["import { useUpdateFeedbackReviewStatus } from '@mastra/react/hooks/feedback';\nimport { useCreateFeedback, useDeleteFeedback, useTraceFeedback } from '@mastra/react/hooks/traces';\nimport { useState } from 'react';\n\nimport type { FeedbackOptions } from './feedback-options';\nimport { FeedbackThread } from './feedback-thread';\nimport type { CommentVariant } from '@/ds/components/Comment';\n\ntype TraceFeedbackTabProps = {\n traceId: string;\n feedbackOptions?: FeedbackOptions;\n /** Comment layout variant — forwarded to `FeedbackThread`. */\n variant?: CommentVariant;\n};\n\n/**\n * Trace-level feedback (no span). Owns its own pagination: mount it with a `key`\n * on the trace id so a page index never leaks across traces.\n */\nexport function TraceFeedbackTab({ traceId, variant, feedbackOptions }: TraceFeedbackTabProps) {\n const [page, setPage] = useState(0);\n const { data, isLoading } = useTraceFeedback({ traceId, page, queryOptions: { enabled: !!traceId } });\n const { mutateAsync, isPending, error } = useCreateFeedback({\n traceId,\n contextMode: feedbackOptions?.contextMode,\n feedbackUserId: feedbackOptions?.feedbackUserId,\n });\n const { mutateAsync: deleteFeedback, isPending: isDeleting } = useDeleteFeedback({ traceId });\n const updateReviewStatus = useUpdateFeedbackReviewStatus();\n\n return (\n <FeedbackThread\n feedbackData={data}\n isLoadingFeedbackData={isLoading}\n onPageChange={setPage}\n onSubmit={text => mutateAsync({ text })}\n isSubmitting={isPending}\n submitError={error ? 'Could not save feedback. Please try again.' : undefined}\n onDelete={feedbackOptions?.allowDelete === false ? undefined : feedbackId => deleteFeedback({ feedbackId })}\n isDeleting={isDeleting}\n variant={variant}\n onMarkReviewed={\n feedbackOptions?.allowReview === false\n ? undefined\n : feedbackId => updateReviewStatus.mutate({ feedbackId, reviewStatus: 'reviewed' })\n }\n pendingFeedbackId={updateReviewStatus.isPending ? updateReviewStatus.variables.feedbackId : undefined}\n />\n );\n}\n\nexport type { FeedbackOptions } from './feedback-options';\n"],"mappings":";;;;;;;;;;AAmBA,SAAgB,iBAAiB,EAAE,SAAS,SAAS,mBAA0C;CAC7F,MAAM,CAAC,MAAM,WAAW,SAAS,CAAC;CAClC,MAAM,EAAE,MAAM,cAAc,iBAAiB;EAAE;EAAS;EAAM,cAAc,EAAE,SAAS,CAAC,CAAC,QAAQ;CAAE,CAAC;CACpG,MAAM,EAAE,aAAa,WAAW,UAAU,kBAAkB;EAC1D;EACA,aAAa,iBAAiB;EAC9B,gBAAgB,iBAAiB;CACnC,CAAC;CACD,MAAM,EAAE,aAAa,gBAAgB,WAAW,eAAe,kBAAkB,EAAE,QAAQ,CAAC;CAC5F,MAAM,qBAAqB,8BAA8B;CAEzD,OACE,oBAAC,gBAAD;EACE,cAAc;EACd,uBAAuB;EACvB,cAAc;EACd,WAAU,SAAQ,YAAY,EAAE,KAAK,CAAC;EACtC,cAAc;EACd,aAAa,QAAQ,+CAA+C,KAAA;EACpE,UAAU,iBAAiB,gBAAgB,QAAQ,KAAA,KAAY,eAAc,eAAe,EAAE,WAAW,CAAC;EAC9F;EACH;EACT,gBACE,iBAAiB,gBAAgB,QAC7B,KAAA,KACA,eAAc,mBAAmB,OAAO;GAAE;GAAY,cAAc;EAAW,CAAC;EAEtF,mBAAmB,mBAAmB,YAAY,mBAAmB,UAAU,aAAa,KAAA;CAC7F,CAAA;AAEL"}
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_DataPanel = require("../../../DataPanel-BRRAvWYQ.cjs");
2
+ const require_DataPanel = require("../../../DataPanel-LfExjFpP.cjs");
3
3
  let react_jsx_runtime = require("react/jsx-runtime");
4
4
  // src/domains/traces/components/trace-id-button.tsx
5
5
  function TraceIdButton({ id, maxLength, ellipsis }) {
@@ -1,4 +1,4 @@
1
- import { t as DataPanel } from "../../../DataPanel-pVr5LVaK.js";
1
+ import { t as DataPanel } from "../../../DataPanel-Rv5Mb_pf.js";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  // src/domains/traces/components/trace-id-button.tsx
4
4
  function TraceIdButton({ id, maxLength, ellipsis }) {
@@ -21,7 +21,7 @@ function getEntityHref(paths, entityType, entityId) {
21
21
  * Encapsulates the span-detail fetch and prev/next span navigation that the traces page
22
22
  * and the agent chat traces aside used to duplicate.
23
23
  */
24
- function TraceSpanPanel({ traceId, spans, isLoadingSpans, selectedSpanId, onSpanSelect, onClose, anchorSpanId, entityType, initialSpanId, onPrevious, onNext, onSaveAsDatasetItem, feedbackTabBadge, feedbackTabSlot, showPartialThread, featuredSpanIds, onHighlightSpans, isFullThreadOpen, onFullThreadOpenChange, withQueryTrace, withFeedback, onOpenScore, scoresTabBadge, scoresTabSlot, usage, rootStreamingTimings, traceHref, size, depth, headerSlot, headerActionsSlot, title, showUnavailableFeaturesMsg, spanView, onSpanViewChange, spanActiveTab, onSpanTabChange, spanFeedbackTabBadge, spanFeedbackTabSlot }) {
24
+ function TraceSpanPanel({ traceId, spans, isLoadingSpans, selectedSpanId, onSpanSelect, onClose, anchorSpanId, entityType, initialSpanId, onPrevious, onNext, onSaveAsDatasetItem, feedbackTabBadge, feedbackTabSlot, showPartialThread, featuredSpanIds, onHighlightSpans, isFullThreadOpen, onFullThreadOpenChange, withQueryTrace, withFeedback, feedbackOptions, onOpenScore, scoresTabBadge, scoresTabSlot, usage, rootStreamingTimings, traceHref, size, depth, headerSlot, headerActionsSlot, title, showUnavailableFeaturesMsg, spanView, onSpanViewChange, spanActiveTab, onSpanTabChange, spanFeedbackTabBadge, spanFeedbackTabSlot }) {
25
25
  const { data: spanDetailData, isLoading: isLoadingSpanDetail } = (0, _mastra_react_hooks_traces.useSpanDetail)({
26
26
  traceId,
27
27
  spanId: selectedSpanId ?? "",
@@ -101,6 +101,7 @@ function TraceSpanPanel({ traceId, spans, isLoadingSpans, selectedSpanId, onSpan
101
101
  onOpenScore,
102
102
  withQueryTrace,
103
103
  withFeedback,
104
+ feedbackOptions,
104
105
  onClose: () => onFullThreadOpenChange?.(false)
105
106
  })] });
106
107
  }
@@ -1 +1 @@
1
- {"version":3,"file":"trace-span-panel.cjs.js","names":["useSpanDetail","useLinkComponent","getTraceThreadId","useThreadHasOtherTraces","_Fragment","TraceDataPanel","TraceMessagesPanel","Button","MessagesSquareIcon","SpanDataPanelView","TraceThreadPanel"],"sources":["../../../../src/domains/traces/components/trace-span-panel.tsx"],"sourcesContent":["import { useSpanDetail, useThreadHasOtherTraces } from '@mastra/react/hooks/traces';\nimport { MessagesSquareIcon } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { SpanDataPanelView } from '@/domains/traces/components/span-data-panel-view';\nimport { TraceDataPanel } from '@/domains/traces/components/trace-data-panel';\nimport type { TraceDataPanelView } from '@/domains/traces/components/trace-data-panel-view';\nimport { TraceMessagesPanel } from '@/domains/traces/components/trace-messages-panel';\nimport { getTraceThreadId } from '@/domains/traces/components/trace-thread-context';\nimport { TraceThreadPanel } from '@/domains/traces/components/trace-thread-panel';\nimport { Button } from '@/ds/components/Button';\nimport { useLinkComponent } from '@/lib/framework';\nimport type { LinkComponentPaths } from '@/lib/framework';\n\ntype TraceDataPanelViewProps = ComponentProps<typeof TraceDataPanelView>;\n\nfunction getEntityHref(\n paths: LinkComponentPaths,\n entityType: string | null | undefined,\n entityId: string | null | undefined,\n) {\n if (!entityId || !entityType) return undefined;\n const normalizedEntityType = entityType.toLowerCase();\n if (normalizedEntityType.includes('workflow')) return paths.workflowLink(entityId) || undefined;\n if (normalizedEntityType.includes('agent')) return paths.agentLink(entityId) || undefined;\n return undefined;\n}\ntype SpanDataPanelViewProps = ComponentProps<typeof SpanDataPanelView>;\n\nexport interface TraceSpanPanelProps {\n /** Keep the panel mounted and pass `undefined` to close it, so the drawer animates out. */\n traceId?: string;\n /** Spans returned by `useTraceOrBranchSpans` — the page owns the fetch, the panel renders it. */\n spans: TraceDataPanelViewProps['spans'];\n isLoadingSpans: boolean;\n /** Controlled span selection (URL state on the traces page, local state in the chat aside). */\n selectedSpanId: string | null;\n onSpanSelect: (spanId: string | undefined) => void;\n onClose: () => void;\n\n // Trace-panel pass-through.\n anchorSpanId?: string;\n entityType?: TraceDataPanelViewProps['entityType'];\n initialSpanId?: string | null;\n onPrevious?: () => void;\n onNext?: () => void;\n onSaveAsDatasetItem?: TraceDataPanelViewProps['onSaveAsDatasetItem'];\n feedbackTabBadge?: ReactNode;\n feedbackTabSlot?: TraceDataPanelViewProps['feedbackTabSlot'];\n /** Enables the \"Messages\" column (reconstructed turn) when the displayed root is a complete agent trace with a thread id. */\n showPartialThread?: boolean;\n /** Span ids featured in the timeline (non-featured spans are faded). */\n featuredSpanIds?: string[];\n /** Called with the span ids behind a reconstructed message when the user asks to highlight them. */\n onHighlightSpans?: (spanIds: string[]) => void;\n /** When true, opens the trace's thread (every turn) in a stacked drawer above the trace panel. */\n isFullThreadOpen?: boolean;\n /** Enables the in-place \"Open full thread\" swap; without it the action falls back to a link. */\n onFullThreadOpenChange?: (open: boolean) => void;\n /** Full-thread view: lists through the trace-query API; `false` falls back to `listTracesLight`. */\n withQueryTrace: boolean;\n /** Full-thread view: shows the per-trace Feedback tab. */\n withFeedback: boolean;\n /** Full-thread view: opens a score of one of the thread's traces (the app owns routing). */\n onOpenScore: (traceId: string, scoreId: string) => void;\n scoresTabBadge?: ReactNode;\n scoresTabSlot?: TraceDataPanelViewProps['scoresTabSlot'];\n usage?: TraceDataPanelViewProps['usage'];\n rootStreamingTimings?: TraceDataPanelViewProps['rootStreamingTimings'];\n traceHref?: string;\n /** Drawer width; defaults to `wide`. */\n size?: TraceDataPanelViewProps['size'];\n /** Sibling-drawer elevation (see `DataPanel`). */\n depth?: TraceDataPanelViewProps['depth'];\n /** Rendered inside the drawer above the trace header (e.g. feedback context). */\n headerSlot?: ReactNode;\n /** Integration actions displayed alongside the trace controls. */\n headerActionsSlot?: ReactNode;\n /** Accessible drawer name; defaults to the trace id. */\n title?: string;\n showUnavailableFeaturesMsg?: TraceDataPanelViewProps['showUnavailableFeaturesMsg'];\n spanView?: TraceDataPanelViewProps['spanView'];\n onSpanViewChange?: TraceDataPanelViewProps['onSpanViewChange'];\n\n // Span-panel pass-through.\n spanActiveTab?: SpanDataPanelViewProps['activeTab'];\n onSpanTabChange?: SpanDataPanelViewProps['onTabChange'];\n spanFeedbackTabBadge?: ReactNode;\n spanFeedbackTabSlot?: SpanDataPanelViewProps['feedbackTabSlot'];\n}\n\n/**\n * Shared trace → span drilldown drawer: `TraceDataPanel` with a nested `SpanDataPanelView`.\n * Encapsulates the span-detail fetch and prev/next span navigation that the traces page\n * and the agent chat traces aside used to duplicate.\n */\nexport function TraceSpanPanel({\n traceId,\n spans,\n isLoadingSpans,\n selectedSpanId,\n onSpanSelect,\n onClose,\n anchorSpanId,\n entityType,\n initialSpanId,\n onPrevious,\n onNext,\n onSaveAsDatasetItem,\n feedbackTabBadge,\n feedbackTabSlot,\n showPartialThread,\n featuredSpanIds,\n onHighlightSpans,\n isFullThreadOpen,\n onFullThreadOpenChange,\n withQueryTrace,\n withFeedback,\n onOpenScore,\n scoresTabBadge,\n scoresTabSlot,\n usage,\n rootStreamingTimings,\n traceHref,\n size,\n depth,\n headerSlot,\n headerActionsSlot,\n title,\n showUnavailableFeaturesMsg,\n spanView,\n onSpanViewChange,\n spanActiveTab,\n onSpanTabChange,\n spanFeedbackTabBadge,\n spanFeedbackTabSlot,\n}: TraceSpanPanelProps) {\n const { data: spanDetailData, isLoading: isLoadingSpanDetail } = useSpanDetail({\n traceId: traceId,\n spanId: selectedSpanId ?? '',\n queryOptions: { enabled: !!traceId && !!selectedSpanId },\n });\n const { Link, paths } = useLinkComponent();\n\n // The trace summary links the entity to its page; the app's link provider owns the routes.\n const rootSpan = anchorSpanId\n ? spans?.find(s => s.spanId === anchorSpanId)\n : spans?.find(s => s.parentSpanId == null);\n const entityHref = getEntityHref(paths, rootSpan?.entityType, rootSpan?.entityId);\n const threadId = getTraceThreadId(rootSpan, anchorSpanId);\n const hasMessagesPanel = !!(traceId && showPartialThread && threadId);\n // A single-trace thread would show exactly what the Messages column already shows.\n const hasOtherTraces = useThreadHasOtherTraces({\n threadId: hasMessagesPanel ? threadId : undefined,\n queryOptions: { enabled: !!(hasMessagesPanel ? threadId : undefined) },\n });\n const showFullThreadAction = hasMessagesPanel && hasOtherTraces && !!onFullThreadOpenChange;\n\n return (\n <>\n <TraceDataPanel\n traceId={traceId}\n spans={spans}\n anchorSpanId={anchorSpanId}\n entityType={entityType}\n entityHref={entityHref}\n usage={usage}\n rootStreamingTimings={rootStreamingTimings}\n isLoading={isLoadingSpans}\n onClose={onClose}\n onSpanSelect={onSpanSelect}\n onSaveAsDatasetItem={onSaveAsDatasetItem}\n initialSpanId={initialSpanId ?? selectedSpanId}\n onPrevious={onPrevious}\n onNext={onNext}\n placement=\"traces-list\"\n LinkComponent={Link}\n traceHref={traceHref}\n size={size}\n depth={depth}\n headerSlot={headerSlot}\n headerActionsSlot={headerActionsSlot}\n title={title}\n showUnavailableFeaturesMsg={showUnavailableFeaturesMsg}\n spanView={spanView}\n onSpanViewChange={onSpanViewChange}\n feedbackTabBadge={feedbackTabBadge}\n feedbackTabSlot={feedbackTabSlot}\n featuredSpanIds={featuredSpanIds}\n messagesPanelSlot={\n hasMessagesPanel ? <TraceMessagesPanel traceId={traceId} onHighlightSpans={onHighlightSpans} /> : undefined\n }\n sideHeaderActions={\n showFullThreadAction\n ? ({ compact }) => (\n <Button\n tooltip={compact ? 'Open full thread' : undefined}\n icon={<MessagesSquareIcon />}\n variant=\"ghost\"\n size=\"sm\"\n // At a side column of 500px or less, collapse to a round icon button; the label stays for screen readers.\n className=\"@max-[501px]:w-control-sm @max-[501px]:rounded-full @max-[501px]:px-0 @max-[501px]:[&>[data-slot=button-icon]]:ml-0\"\n onClick={() => onFullThreadOpenChange(true)}\n >\n <span className=\"@max-[501px]:sr-only\">Open full thread</span>\n </Button>\n )\n : undefined\n }\n scoresTabBadge={scoresTabBadge}\n scoresTabSlot={scoresTabSlot}\n spanPanelSlot={\n traceId && selectedSpanId ? (\n <SpanDataPanelView\n traceId={traceId}\n spanId={selectedSpanId}\n span={spanDetailData?.span}\n isLoading={isLoadingSpanDetail}\n onClose={() => onSpanSelect(undefined)}\n activeTab={spanActiveTab}\n onTabChange={onSpanTabChange}\n feedbackTabBadge={spanFeedbackTabBadge}\n feedbackTabSlot={spanFeedbackTabSlot}\n />\n ) : null\n }\n />\n {/* Rendered after the trace panel: DataPanel stacking follows DOM order. */}\n <TraceThreadPanel\n open={!!(traceId && isFullThreadOpen && threadId)}\n depth={depth && depth > 1 ? 3 : 2}\n threadId={threadId ?? ''}\n onOpenScore={onOpenScore}\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n onClose={() => onFullThreadOpenChange?.(false)}\n />\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"trace-span-panel.cjs.js","names":["useSpanDetail","useLinkComponent","getTraceThreadId","useThreadHasOtherTraces","_Fragment","TraceDataPanel","TraceMessagesPanel","Button","MessagesSquareIcon","SpanDataPanelView","TraceThreadPanel"],"sources":["../../../../src/domains/traces/components/trace-span-panel.tsx"],"sourcesContent":["import { useSpanDetail, useThreadHasOtherTraces } from '@mastra/react/hooks/traces';\nimport { MessagesSquareIcon } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport type { FeedbackOptions } from './feedback-options';\nimport { SpanDataPanelView } from '@/domains/traces/components/span-data-panel-view';\nimport { TraceDataPanel } from '@/domains/traces/components/trace-data-panel';\nimport type { TraceDataPanelView } from '@/domains/traces/components/trace-data-panel-view';\nimport { TraceMessagesPanel } from '@/domains/traces/components/trace-messages-panel';\nimport { getTraceThreadId } from '@/domains/traces/components/trace-thread-context';\nimport { TraceThreadPanel } from '@/domains/traces/components/trace-thread-panel';\nimport { Button } from '@/ds/components/Button';\nimport { useLinkComponent } from '@/lib/framework';\nimport type { LinkComponentPaths } from '@/lib/framework';\n\ntype TraceDataPanelViewProps = ComponentProps<typeof TraceDataPanelView>;\n\nfunction getEntityHref(\n paths: LinkComponentPaths,\n entityType: string | null | undefined,\n entityId: string | null | undefined,\n) {\n if (!entityId || !entityType) return undefined;\n const normalizedEntityType = entityType.toLowerCase();\n if (normalizedEntityType.includes('workflow')) return paths.workflowLink(entityId) || undefined;\n if (normalizedEntityType.includes('agent')) return paths.agentLink(entityId) || undefined;\n return undefined;\n}\ntype SpanDataPanelViewProps = ComponentProps<typeof SpanDataPanelView>;\n\nexport interface TraceSpanPanelProps {\n /** Keep the panel mounted and pass `undefined` to close it, so the drawer animates out. */\n traceId?: string;\n /** Spans returned by `useTraceOrBranchSpans` — the page owns the fetch, the panel renders it. */\n spans: TraceDataPanelViewProps['spans'];\n isLoadingSpans: boolean;\n /** Controlled span selection (URL state on the traces page, local state in the chat aside). */\n selectedSpanId: string | null;\n onSpanSelect: (spanId: string | undefined) => void;\n onClose: () => void;\n\n // Trace-panel pass-through.\n anchorSpanId?: string;\n entityType?: TraceDataPanelViewProps['entityType'];\n initialSpanId?: string | null;\n onPrevious?: () => void;\n onNext?: () => void;\n onSaveAsDatasetItem?: TraceDataPanelViewProps['onSaveAsDatasetItem'];\n feedbackTabBadge?: ReactNode;\n feedbackTabSlot?: TraceDataPanelViewProps['feedbackTabSlot'];\n /** Enables the \"Messages\" column (reconstructed turn) when the displayed root is a complete agent trace with a thread id. */\n showPartialThread?: boolean;\n /** Span ids featured in the timeline (non-featured spans are faded). */\n featuredSpanIds?: string[];\n /** Called with the span ids behind a reconstructed message when the user asks to highlight them. */\n onHighlightSpans?: (spanIds: string[]) => void;\n /** When true, opens the trace's thread (every turn) in a stacked drawer above the trace panel. */\n isFullThreadOpen?: boolean;\n /** Enables the in-place \"Open full thread\" swap; without it the action falls back to a link. */\n onFullThreadOpenChange?: (open: boolean) => void;\n /** Full-thread view: lists through the trace-query API; `false` falls back to `listTracesLight`. */\n withQueryTrace: boolean;\n /** Full-thread view: shows the per-trace Feedback tab. */\n withFeedback: boolean;\n feedbackOptions?: FeedbackOptions;\n /** Full-thread view: opens a score of one of the thread's traces (the app owns routing). */\n onOpenScore: (traceId: string, scoreId: string) => void;\n scoresTabBadge?: ReactNode;\n scoresTabSlot?: TraceDataPanelViewProps['scoresTabSlot'];\n usage?: TraceDataPanelViewProps['usage'];\n rootStreamingTimings?: TraceDataPanelViewProps['rootStreamingTimings'];\n traceHref?: string;\n /** Drawer width; defaults to `wide`. */\n size?: TraceDataPanelViewProps['size'];\n /** Sibling-drawer elevation (see `DataPanel`). */\n depth?: TraceDataPanelViewProps['depth'];\n /** Rendered inside the drawer above the trace header (e.g. feedback context). */\n headerSlot?: ReactNode;\n /** Integration actions displayed alongside the trace controls. */\n headerActionsSlot?: ReactNode;\n /** Accessible drawer name; defaults to the trace id. */\n title?: string;\n showUnavailableFeaturesMsg?: TraceDataPanelViewProps['showUnavailableFeaturesMsg'];\n spanView?: TraceDataPanelViewProps['spanView'];\n onSpanViewChange?: TraceDataPanelViewProps['onSpanViewChange'];\n\n // Span-panel pass-through.\n spanActiveTab?: SpanDataPanelViewProps['activeTab'];\n onSpanTabChange?: SpanDataPanelViewProps['onTabChange'];\n spanFeedbackTabBadge?: ReactNode;\n spanFeedbackTabSlot?: SpanDataPanelViewProps['feedbackTabSlot'];\n}\n\n/**\n * Shared trace → span drilldown drawer: `TraceDataPanel` with a nested `SpanDataPanelView`.\n * Encapsulates the span-detail fetch and prev/next span navigation that the traces page\n * and the agent chat traces aside used to duplicate.\n */\nexport function TraceSpanPanel({\n traceId,\n spans,\n isLoadingSpans,\n selectedSpanId,\n onSpanSelect,\n onClose,\n anchorSpanId,\n entityType,\n initialSpanId,\n onPrevious,\n onNext,\n onSaveAsDatasetItem,\n feedbackTabBadge,\n feedbackTabSlot,\n showPartialThread,\n featuredSpanIds,\n onHighlightSpans,\n isFullThreadOpen,\n onFullThreadOpenChange,\n withQueryTrace,\n withFeedback,\n feedbackOptions,\n onOpenScore,\n scoresTabBadge,\n scoresTabSlot,\n usage,\n rootStreamingTimings,\n traceHref,\n size,\n depth,\n headerSlot,\n headerActionsSlot,\n title,\n showUnavailableFeaturesMsg,\n spanView,\n onSpanViewChange,\n spanActiveTab,\n onSpanTabChange,\n spanFeedbackTabBadge,\n spanFeedbackTabSlot,\n}: TraceSpanPanelProps) {\n const { data: spanDetailData, isLoading: isLoadingSpanDetail } = useSpanDetail({\n traceId: traceId,\n spanId: selectedSpanId ?? '',\n queryOptions: { enabled: !!traceId && !!selectedSpanId },\n });\n const { Link, paths } = useLinkComponent();\n\n // The trace summary links the entity to its page; the app's link provider owns the routes.\n const rootSpan = anchorSpanId\n ? spans?.find(s => s.spanId === anchorSpanId)\n : spans?.find(s => s.parentSpanId == null);\n const entityHref = getEntityHref(paths, rootSpan?.entityType, rootSpan?.entityId);\n const threadId = getTraceThreadId(rootSpan, anchorSpanId);\n const hasMessagesPanel = !!(traceId && showPartialThread && threadId);\n // A single-trace thread would show exactly what the Messages column already shows.\n const hasOtherTraces = useThreadHasOtherTraces({\n threadId: hasMessagesPanel ? threadId : undefined,\n queryOptions: { enabled: !!(hasMessagesPanel ? threadId : undefined) },\n });\n const showFullThreadAction = hasMessagesPanel && hasOtherTraces && !!onFullThreadOpenChange;\n\n return (\n <>\n <TraceDataPanel\n traceId={traceId}\n spans={spans}\n anchorSpanId={anchorSpanId}\n entityType={entityType}\n entityHref={entityHref}\n usage={usage}\n rootStreamingTimings={rootStreamingTimings}\n isLoading={isLoadingSpans}\n onClose={onClose}\n onSpanSelect={onSpanSelect}\n onSaveAsDatasetItem={onSaveAsDatasetItem}\n initialSpanId={initialSpanId ?? selectedSpanId}\n onPrevious={onPrevious}\n onNext={onNext}\n placement=\"traces-list\"\n LinkComponent={Link}\n traceHref={traceHref}\n size={size}\n depth={depth}\n headerSlot={headerSlot}\n headerActionsSlot={headerActionsSlot}\n title={title}\n showUnavailableFeaturesMsg={showUnavailableFeaturesMsg}\n spanView={spanView}\n onSpanViewChange={onSpanViewChange}\n feedbackTabBadge={feedbackTabBadge}\n feedbackTabSlot={feedbackTabSlot}\n featuredSpanIds={featuredSpanIds}\n messagesPanelSlot={\n hasMessagesPanel ? <TraceMessagesPanel traceId={traceId} onHighlightSpans={onHighlightSpans} /> : undefined\n }\n sideHeaderActions={\n showFullThreadAction\n ? ({ compact }) => (\n <Button\n tooltip={compact ? 'Open full thread' : undefined}\n icon={<MessagesSquareIcon />}\n variant=\"ghost\"\n size=\"sm\"\n // At a side column of 500px or less, collapse to a round icon button; the label stays for screen readers.\n className=\"@max-[501px]:w-control-sm @max-[501px]:rounded-full @max-[501px]:px-0 @max-[501px]:[&>[data-slot=button-icon]]:ml-0\"\n onClick={() => onFullThreadOpenChange(true)}\n >\n <span className=\"@max-[501px]:sr-only\">Open full thread</span>\n </Button>\n )\n : undefined\n }\n scoresTabBadge={scoresTabBadge}\n scoresTabSlot={scoresTabSlot}\n spanPanelSlot={\n traceId && selectedSpanId ? (\n <SpanDataPanelView\n traceId={traceId}\n spanId={selectedSpanId}\n span={spanDetailData?.span}\n isLoading={isLoadingSpanDetail}\n onClose={() => onSpanSelect(undefined)}\n activeTab={spanActiveTab}\n onTabChange={onSpanTabChange}\n feedbackTabBadge={spanFeedbackTabBadge}\n feedbackTabSlot={spanFeedbackTabSlot}\n />\n ) : null\n }\n />\n {/* Rendered after the trace panel: DataPanel stacking follows DOM order. */}\n <TraceThreadPanel\n open={!!(traceId && isFullThreadOpen && threadId)}\n depth={depth && depth > 1 ? 3 : 2}\n threadId={threadId ?? ''}\n onOpenScore={onOpenScore}\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n feedbackOptions={feedbackOptions}\n onClose={() => onFullThreadOpenChange?.(false)}\n />\n </>\n );\n}\n"],"mappings":"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"}
@@ -20,7 +20,7 @@ function getEntityHref(paths, entityType, entityId) {
20
20
  * Encapsulates the span-detail fetch and prev/next span navigation that the traces page
21
21
  * and the agent chat traces aside used to duplicate.
22
22
  */
23
- function TraceSpanPanel({ traceId, spans, isLoadingSpans, selectedSpanId, onSpanSelect, onClose, anchorSpanId, entityType, initialSpanId, onPrevious, onNext, onSaveAsDatasetItem, feedbackTabBadge, feedbackTabSlot, showPartialThread, featuredSpanIds, onHighlightSpans, isFullThreadOpen, onFullThreadOpenChange, withQueryTrace, withFeedback, onOpenScore, scoresTabBadge, scoresTabSlot, usage, rootStreamingTimings, traceHref, size, depth, headerSlot, headerActionsSlot, title, showUnavailableFeaturesMsg, spanView, onSpanViewChange, spanActiveTab, onSpanTabChange, spanFeedbackTabBadge, spanFeedbackTabSlot }) {
23
+ function TraceSpanPanel({ traceId, spans, isLoadingSpans, selectedSpanId, onSpanSelect, onClose, anchorSpanId, entityType, initialSpanId, onPrevious, onNext, onSaveAsDatasetItem, feedbackTabBadge, feedbackTabSlot, showPartialThread, featuredSpanIds, onHighlightSpans, isFullThreadOpen, onFullThreadOpenChange, withQueryTrace, withFeedback, feedbackOptions, onOpenScore, scoresTabBadge, scoresTabSlot, usage, rootStreamingTimings, traceHref, size, depth, headerSlot, headerActionsSlot, title, showUnavailableFeaturesMsg, spanView, onSpanViewChange, spanActiveTab, onSpanTabChange, spanFeedbackTabBadge, spanFeedbackTabSlot }) {
24
24
  const { data: spanDetailData, isLoading: isLoadingSpanDetail } = useSpanDetail({
25
25
  traceId,
26
26
  spanId: selectedSpanId ?? "",
@@ -100,6 +100,7 @@ function TraceSpanPanel({ traceId, spans, isLoadingSpans, selectedSpanId, onSpan
100
100
  onOpenScore,
101
101
  withQueryTrace,
102
102
  withFeedback,
103
+ feedbackOptions,
103
104
  onClose: () => onFullThreadOpenChange?.(false)
104
105
  })] });
105
106
  }