@mastra/playground-ui 62.0.0 → 63.0.0-alpha.1

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 (473) hide show
  1. package/dist/alert-dialog-R9z2SJLl.js +40 -0
  2. package/dist/alert-dialog-R9z2SJLl.js.map +1 -0
  3. package/dist/alert-dialog-j626w-Qb.cjs +42 -0
  4. package/dist/alert-dialog-j626w-Qb.cjs.map +1 -0
  5. package/dist/{ask-user-card-xR8YiiQa.js → ask-user-card-CwKfl6M2.js} +5 -6
  6. package/dist/{ask-user-card-xR8YiiQa.js.map → ask-user-card-CwKfl6M2.js.map} +1 -1
  7. package/dist/{ask-user-card-40a18Qea.cjs → ask-user-card-g8cqh8KI.cjs} +1 -2
  8. package/dist/{ask-user-card-40a18Qea.cjs.map → ask-user-card-g8cqh8KI.cjs.map} +1 -1
  9. package/dist/{checkbox-mmR3rD2j.js → checkbox-B3tvJLCl.js} +2 -2
  10. package/dist/{checkbox-mmR3rD2j.js.map → checkbox-B3tvJLCl.js.map} +1 -1
  11. package/dist/{code-block-BQZUoOfS.js → code-block-9sT-CaoF.js} +2 -2
  12. package/dist/{code-block-BQZUoOfS.js.map → code-block-9sT-CaoF.js.map} +1 -1
  13. package/dist/{code-editor-D69saH4C.js → code-editor-DgfDaPAD.js} +2 -2
  14. package/dist/{code-editor-D69saH4C.js.map → code-editor-DgfDaPAD.js.map} +1 -1
  15. package/dist/{combobox-DDUIREaG.js → combobox-DJu0ggNa.js} +2 -2
  16. package/dist/{combobox-DDUIREaG.js.map → combobox-DJu0ggNa.js.map} +1 -1
  17. package/dist/{command-Cx5QAS4E.cjs → command-DbZ6CSAy.cjs} +3 -3
  18. package/dist/command-DbZ6CSAy.cjs.map +1 -0
  19. package/dist/{command-B141Sxts.js → command-DtIlcv-t.js} +3 -3
  20. package/dist/command-DtIlcv-t.js.map +1 -0
  21. package/dist/components/AlertDialog.cjs.js +1 -1
  22. package/dist/components/AlertDialog.es.js +1 -1
  23. package/dist/components/Checkbox.es.js +1 -1
  24. package/dist/components/CodeBlock.es.js +1 -1
  25. package/dist/components/CodeEditor.es.js +1 -1
  26. package/dist/components/Combobox.es.js +1 -1
  27. package/dist/components/Command.cjs.js +1 -1
  28. package/dist/components/Command.es.js +1 -1
  29. package/dist/components/CommandPalette.cjs.js +1 -1
  30. package/dist/components/CommandPalette.es.js +1 -1
  31. package/dist/components/Comment.cjs.js +0 -1
  32. package/dist/components/Comment.cjs.js.map +1 -1
  33. package/dist/components/Comment.es.js +2 -3
  34. package/dist/components/Comment.es.js.map +1 -1
  35. package/dist/components/DataCodeSection.cjs.js +1 -1
  36. package/dist/components/DataCodeSection.es.js +1 -1
  37. package/dist/components/DataList.cjs.js +15 -17
  38. package/dist/components/DataList.cjs.js.map +1 -1
  39. package/dist/components/DataList.es.js +4 -5
  40. package/dist/components/DataList.es.js.map +1 -1
  41. package/dist/components/DataPanel.cjs.js +1 -1
  42. package/dist/components/DataPanel.es.js +1 -1
  43. package/dist/components/DateTimePicker.cjs.js +0 -1
  44. package/dist/components/DateTimePicker.cjs.js.map +1 -1
  45. package/dist/components/DateTimePicker.es.js +3 -4
  46. package/dist/components/DateTimePicker.es.js.map +1 -1
  47. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  48. package/dist/components/DateTimeRangePicker.es.js +1 -1
  49. package/dist/components/Dialog.cjs.js +2 -2
  50. package/dist/components/Dialog.es.js +2 -2
  51. package/dist/components/Drawer.cjs.js +1 -1
  52. package/dist/components/Drawer.es.js +1 -1
  53. package/dist/components/EnvironmentVariablesEditor.cjs.js +1 -2
  54. package/dist/components/EnvironmentVariablesEditor.cjs.js.map +1 -1
  55. package/dist/components/EnvironmentVariablesEditor.es.js +3 -4
  56. package/dist/components/EnvironmentVariablesEditor.es.js.map +1 -1
  57. package/dist/components/Field.es.js +2 -2
  58. package/dist/components/FilterBar.cjs.js +2 -2
  59. package/dist/components/FilterBar.cjs.js.map +1 -1
  60. package/dist/components/FilterBar.es.js +3 -3
  61. package/dist/components/FilterBar.es.js.map +1 -1
  62. package/dist/components/FormFieldBlocks.es.js +2 -2
  63. package/dist/components/Input.es.js +1 -1
  64. package/dist/components/InputGroup.es.js +1 -1
  65. package/dist/components/InputNumber.es.js +1 -1
  66. package/dist/components/JSONSchemaForm.cjs.js +0 -1
  67. package/dist/components/JSONSchemaForm.cjs.js.map +1 -1
  68. package/dist/components/JSONSchemaForm.es.js +4 -5
  69. package/dist/components/JSONSchemaForm.es.js.map +1 -1
  70. package/dist/components/ListSearch.cjs.js +1 -1
  71. package/dist/components/ListSearch.es.js +1 -1
  72. package/dist/components/LogsDataList.cjs.js +5 -2
  73. package/dist/components/LogsDataList.cjs.js.map +1 -1
  74. package/dist/components/LogsDataList.es.js +5 -2
  75. package/dist/components/LogsDataList.es.js.map +1 -1
  76. package/dist/components/MarkdownRenderer.es.js +1 -1
  77. package/dist/components/PropertyFilter.cjs.js +0 -1
  78. package/dist/components/PropertyFilter.cjs.js.map +1 -1
  79. package/dist/components/PropertyFilter.es.js +4 -5
  80. package/dist/components/PropertyFilter.es.js.map +1 -1
  81. package/dist/components/RadioGroup.es.js +1 -1
  82. package/dist/components/RuleBuilder.es.js +2 -2
  83. package/dist/components/SavedViews.cjs.js +1 -1
  84. package/dist/components/SavedViews.es.js +1 -1
  85. package/dist/components/SearchInput.cjs.js +1 -1
  86. package/dist/components/SearchInput.es.js +1 -1
  87. package/dist/components/Section.cjs.js +1 -1
  88. package/dist/components/Section.es.js +1 -1
  89. package/dist/components/SegmentedControl.es.js +1 -1
  90. package/dist/components/Select.es.js +1 -1
  91. package/dist/components/SideDialog.cjs.js +1 -1
  92. package/dist/components/SideDialog.es.js +1 -1
  93. package/dist/components/Sidebar.cjs.js +2 -2
  94. package/dist/components/Sidebar.es.js +3 -3
  95. package/dist/components/Switch.es.js +1 -1
  96. package/dist/components/ThemeToggle.es.js +1 -1
  97. package/dist/components/Workflow.cjs.js +2 -2
  98. package/dist/components/Workflow.es.js +3 -3
  99. package/dist/components/ai/activity.es.js +1 -1
  100. package/dist/components/ai/ask-user.cjs.js +1 -1
  101. package/dist/components/ai/ask-user.es.js +1 -1
  102. package/dist/components/ai/plan.es.js +1 -1
  103. package/dist/components/ai/tool-approval.es.js +1 -1
  104. package/dist/components/ai/tool-call.es.js +1 -1
  105. package/dist/{data-code-section-zG2S1MPX.js → data-code-section-BGLC-hxm.js} +3 -3
  106. package/dist/{data-code-section-zG2S1MPX.js.map → data-code-section-BGLC-hxm.js.map} +1 -1
  107. package/dist/{data-code-section-hVbIXLNC.cjs → data-code-section-BTRNa1SD.cjs} +3 -3
  108. package/dist/{data-code-section-hVbIXLNC.cjs.map → data-code-section-BTRNa1SD.cjs.map} +1 -1
  109. package/dist/{data-list-top-BJCC62oy.js → data-list-DDGpWucH.js} +333 -6
  110. package/dist/data-list-DDGpWucH.js.map +1 -0
  111. package/dist/{data-list-top-Ds-NWyPO.cjs → data-list-_yDPF5wR.cjs} +339 -13
  112. package/dist/data-list-_yDPF5wR.cjs.map +1 -0
  113. package/dist/{data-list-skeleton-BmsDYJrA.js → data-list-skeleton-CJFwZBlW.js} +2 -2
  114. package/dist/{data-list-skeleton-BmsDYJrA.js.map → data-list-skeleton-CJFwZBlW.js.map} +1 -1
  115. package/dist/{data-list-skeleton-CfVsXhx1.cjs → data-list-skeleton-maUWF7Ri.cjs} +6 -6
  116. package/dist/{data-list-skeleton-CfVsXhx1.cjs.map → data-list-skeleton-maUWF7Ri.cjs.map} +1 -1
  117. package/dist/{data-panel-BLqydW68.js → data-panel-DfVGx0Ea.js} +3 -3
  118. package/dist/{data-panel-BLqydW68.js.map → data-panel-DfVGx0Ea.js.map} +1 -1
  119. package/dist/{data-panel-BdeebdMA.cjs → data-panel-Dhg7s3fD.cjs} +4 -4
  120. package/dist/{data-panel-BdeebdMA.cjs.map → data-panel-Dhg7s3fD.cjs.map} +1 -1
  121. package/dist/{date-time-range-picker-BvRPfy1i.cjs → date-time-range-picker-BNaXCa7r.cjs} +1 -2
  122. package/dist/{date-time-range-picker-BvRPfy1i.cjs.map → date-time-range-picker-BNaXCa7r.cjs.map} +1 -1
  123. package/dist/{date-time-range-picker-CIfaXUuy.js → date-time-range-picker-C5x_33hB.js} +3 -4
  124. package/dist/{date-time-range-picker-CIfaXUuy.js.map → date-time-range-picker-C5x_33hB.js.map} +1 -1
  125. package/dist/{dialog-wL-fuFON.cjs → dialog-DQI9ChYf.cjs} +74 -37
  126. package/dist/dialog-DQI9ChYf.cjs.map +1 -0
  127. package/dist/{dialog-BYsQZGIj.js → dialog-DlZmNahd.js} +75 -35
  128. package/dist/dialog-DlZmNahd.js.map +1 -0
  129. package/dist/{dialog-action-B-pF99m0.js → dialog-action-c4nfPomF.js} +2 -2
  130. package/dist/{dialog-action-B-pF99m0.js.map → dialog-action-c4nfPomF.js.map} +1 -1
  131. package/dist/{dialog-action-CcMhvjM-.cjs → dialog-action-gdo9CwUv.cjs} +2 -2
  132. package/dist/{dialog-action-CcMhvjM-.cjs.map → dialog-action-gdo9CwUv.cjs.map} +1 -1
  133. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +1 -1
  134. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +1 -1
  135. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
  136. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +2 -2
  137. package/dist/domains/chat/messages/dataset-save-action.cjs.js +2 -3
  138. package/dist/domains/chat/messages/dataset-save-action.cjs.js.map +1 -1
  139. package/dist/domains/chat/messages/dataset-save-action.es.js +5 -6
  140. package/dist/domains/chat/messages/dataset-save-action.es.js.map +1 -1
  141. package/dist/domains/chat/messages/message-row.cjs.js +0 -1
  142. package/dist/domains/chat/messages/message-row.cjs.js.map +1 -1
  143. package/dist/domains/chat/messages/message-row.es.js +1 -2
  144. package/dist/domains/chat/messages/message-row.es.js.map +1 -1
  145. package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
  146. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  147. package/dist/domains/chat/messages/skill-message.es.js +1 -1
  148. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  149. package/dist/domains/chat/tools/badges/agent-badge.es.js +2 -2
  150. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  151. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  152. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +1 -1
  153. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +2 -2
  154. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +2 -2
  155. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +1 -1
  156. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +1 -1
  157. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  158. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  159. package/dist/domains/chat/tools/badges/tool-badge.es.js +2 -2
  160. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +2 -2
  161. package/dist/domains/chat/tools/badges/workflow-badge.es.js +3 -3
  162. package/dist/domains/chat/tools/submit-plan-tool.es.js +1 -1
  163. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  164. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +1 -2
  165. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js.map +1 -1
  166. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +4 -5
  167. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js.map +1 -1
  168. package/dist/domains/logs/components/log-data-panel.cjs.js +1 -1
  169. package/dist/domains/logs/components/log-data-panel.es.js +1 -1
  170. package/dist/domains/logs/components/logs-list-view.cjs.js +3 -2
  171. package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
  172. package/dist/domains/logs/components/logs-list-view.es.js +3 -2
  173. package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
  174. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  175. package/dist/domains/memory/components/observation-detail-view.cjs.js +0 -1
  176. package/dist/domains/memory/components/observation-detail-view.cjs.js.map +1 -1
  177. package/dist/domains/memory/components/observation-detail-view.es.js +2 -3
  178. package/dist/domains/memory/components/observation-detail-view.es.js.map +1 -1
  179. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  180. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  181. package/dist/domains/metrics/drilldown.cjs.js +1 -1
  182. package/dist/domains/metrics/drilldown.es.js +1 -1
  183. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js +1 -2
  184. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js.map +1 -1
  185. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js +4 -5
  186. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js.map +1 -1
  187. package/dist/domains/request-context/components/request-context-label.cjs.js +0 -1
  188. package/dist/domains/request-context/components/request-context-label.cjs.js.map +1 -1
  189. package/dist/domains/request-context/components/request-context-label.es.js +1 -2
  190. package/dist/domains/request-context/components/request-context-label.es.js.map +1 -1
  191. package/dist/domains/scores/components/score-data-panel.cjs.js +1 -1
  192. package/dist/domains/scores/components/score-data-panel.es.js +1 -1
  193. package/dist/domains/scores/components/span-scoring.cjs.js +2 -2
  194. package/dist/domains/scores/components/span-scoring.es.js +3 -3
  195. package/dist/domains/scores/components/trace-scores-tab.cjs.js +2 -1
  196. package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
  197. package/dist/domains/scores/components/trace-scores-tab.es.js +2 -1
  198. package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
  199. package/dist/domains/traces/components/feedback-thread.cjs.js +1 -1
  200. package/dist/domains/traces/components/feedback-thread.es.js +2 -2
  201. package/dist/domains/traces/components/span-data-panel-view.cjs.js +1 -2
  202. package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
  203. package/dist/domains/traces/components/span-data-panel-view.es.js +1 -2
  204. package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
  205. package/dist/domains/traces/components/span-details-view.cjs.js +0 -1
  206. package/dist/domains/traces/components/span-details-view.cjs.js.map +1 -1
  207. package/dist/domains/traces/components/span-details-view.es.js +0 -1
  208. package/dist/domains/traces/components/span-details-view.es.js.map +1 -1
  209. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  210. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  211. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
  212. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
  213. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
  214. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  215. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  216. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +1 -1
  217. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  218. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  219. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  220. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  221. package/dist/domains/traces/components/thread-view-by-trace.cjs.js +0 -2
  222. package/dist/domains/traces/components/thread-view-by-trace.cjs.js.map +1 -1
  223. package/dist/domains/traces/components/thread-view-by-trace.es.js +0 -2
  224. package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
  225. package/dist/domains/traces/components/trace-columns-menu.cjs.js +2 -3
  226. package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
  227. package/dist/domains/traces/components/trace-columns-menu.es.js +4 -5
  228. package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
  229. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +2 -2
  230. package/dist/domains/traces/components/trace-data-panel-view.es.js +2 -2
  231. package/dist/domains/traces/components/trace-data-panel.cjs.js +3 -4
  232. package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
  233. package/dist/domains/traces/components/trace-data-panel.es.js +3 -4
  234. package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
  235. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  236. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  237. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  238. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  239. package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
  240. package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
  241. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +3 -3
  242. package/dist/domains/traces/components/trace-time-range-chip.es.js +3 -3
  243. package/dist/domains/traces/components/traces-list-view.cjs.js +4 -5
  244. package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
  245. package/dist/domains/traces/components/traces-list-view.es.js +3 -4
  246. package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
  247. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +4 -1
  248. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  249. package/dist/domains/traces/components/traces-page-skeleton.es.js +4 -1
  250. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  251. package/dist/domains/traces/hooks/use-trace-filter-persistence.cjs.js +1 -1
  252. package/dist/domains/traces/hooks/use-trace-filter-persistence.es.js +1 -1
  253. package/dist/domains/traces/hooks/use-trace-url-state.cjs.js +1 -1
  254. package/dist/domains/traces/hooks/use-trace-url-state.es.js +1 -1
  255. package/dist/domains/traces/trace-filters.cjs.js +1 -1
  256. package/dist/domains/traces/trace-filters.es.js +1 -1
  257. package/dist/domains/traces/trace-query-filters.cjs.js +1 -1
  258. package/dist/domains/traces/trace-query-filters.es.js +1 -1
  259. package/dist/domains/traces.cjs.js +1 -1
  260. package/dist/domains/traces.es.js +1 -1
  261. package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
  262. package/dist/domains/workflows/components/workflow-step-detail.es.js +2 -2
  263. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
  264. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
  265. package/dist/domains/workflows/runs/workflow-run-list.cjs.js +1 -1
  266. package/dist/domains/workflows/runs/workflow-run-list.es.js +1 -1
  267. package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
  268. package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
  269. package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +1 -1
  270. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +0 -1
  271. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js.map +1 -1
  272. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +2 -3
  273. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js.map +1 -1
  274. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +0 -1
  275. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js.map +1 -1
  276. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +2 -3
  277. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js.map +1 -1
  278. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +1 -1
  279. package/dist/domains/workflows/workflow/workflow-body-graph.es.js +1 -1
  280. package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
  281. package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
  282. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.cjs.js +0 -1
  283. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.cjs.js.map +1 -1
  284. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.es.js +2 -3
  285. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.es.js.map +1 -1
  286. package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +1 -1
  287. package/dist/domains/workflows/workflow/workflow-graph-node.es.js +1 -1
  288. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +0 -2
  289. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js.map +1 -1
  290. package/dist/domains/workflows/workflow/workflow-input-data.es.js +0 -2
  291. package/dist/domains/workflows/workflow/workflow-input-data.es.js.map +1 -1
  292. package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +1 -1
  293. package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +2 -2
  294. package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +2 -2
  295. package/dist/domains/workflows/workflow/workflow-run-data.es.js +1 -1
  296. package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
  297. package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +1 -1
  298. package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +2 -2
  299. package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +1 -1
  300. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +0 -1
  301. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js.map +1 -1
  302. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +2 -3
  303. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js.map +1 -1
  304. package/dist/domains/workspace/components/workspace-active-file.es.js +1 -1
  305. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +3 -4
  306. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js.map +1 -1
  307. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +6 -7
  308. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js.map +1 -1
  309. package/dist/domains/workspace/components/workspace-create-directory.cjs.js +1 -1
  310. package/dist/domains/workspace/components/workspace-create-directory.es.js +2 -2
  311. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +2 -2
  312. package/dist/domains/workspace/components/workspace-search.es.js +1 -1
  313. package/dist/domains/workspace/components/workspace-tree.cjs.js +1 -1
  314. package/dist/domains/workspace/components/workspace-tree.es.js +1 -1
  315. package/dist/{drawer-B-t4ydEh.js → drawer-CZlqOjd2.js} +17 -7
  316. package/dist/{drawer-B-t4ydEh.js.map → drawer-CZlqOjd2.js.map} +1 -1
  317. package/dist/{drawer-DE2b3eld.cjs → drawer-CeUYCG-S.cjs} +16 -6
  318. package/dist/{drawer-DE2b3eld.cjs.map → drawer-CeUYCG-S.cjs.map} +1 -1
  319. package/dist/ee/signals/components/entity-index-list.cjs.js +3 -1
  320. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  321. package/dist/ee/signals/components/entity-index-list.es.js +3 -1
  322. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  323. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +4 -2
  324. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  325. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +5 -3
  326. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  327. package/dist/ee/signals/noise-detail-panel.cjs.js +1 -1
  328. package/dist/ee/signals/noise-detail-panel.es.js +1 -1
  329. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +2 -3
  330. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js.map +1 -1
  331. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +4 -5
  332. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js.map +1 -1
  333. package/dist/ee/signals/settings/trace-signal-settings.es.js +1 -1
  334. package/dist/ee/signals/theme-detail-panel.cjs.js +1 -1
  335. package/dist/ee/signals/theme-detail-panel.es.js +1 -1
  336. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +2 -2
  337. package/dist/ee/topics/components/topic-trace-summary-list.es.js +2 -2
  338. package/dist/{field-B89BEZg4.js → field-Bc8Ewf_M.js} +2 -2
  339. package/dist/{field-B89BEZg4.js.map → field-Bc8Ewf_M.js.map} +1 -1
  340. package/dist/{field-control-aria-DB6y41tQ.js → field-control-aria-CCJ4-mUe.js} +2 -2
  341. package/dist/{field-control-aria-DB6y41tQ.js.map → field-control-aria-CCJ4-mUe.js.map} +1 -1
  342. package/dist/{filter-bar-chip-uPmGVzPR.cjs → filter-bar-chip-C_371aon.cjs} +35 -6
  343. package/dist/filter-bar-chip-C_371aon.cjs.map +1 -0
  344. package/dist/{filter-bar-chip-Bu27EjSO.js → filter-bar-chip-Dc6phYqZ.js} +35 -6
  345. package/dist/filter-bar-chip-Dc6phYqZ.js.map +1 -0
  346. package/dist/hooks/use-is-mobile.cjs.js +14 -10
  347. package/dist/hooks/use-is-mobile.cjs.js.map +1 -1
  348. package/dist/hooks/use-is-mobile.es.js +15 -11
  349. package/dist/hooks/use-is-mobile.es.js.map +1 -1
  350. package/dist/{input-DQFUjtnh.js → input-Ds171RJ5.js} +2 -2
  351. package/dist/{input-DQFUjtnh.js.map → input-Ds171RJ5.js.map} +1 -1
  352. package/dist/{input-group-BWsGYnES.js → input-group-Cxv64rPB.js} +2 -2
  353. package/dist/{input-group-BWsGYnES.js.map → input-group-Cxv64rPB.js.map} +1 -1
  354. package/dist/layout/tabbed-container.cjs.js +2 -2
  355. package/dist/layout/tabbed-container.es.js +3 -3
  356. package/dist/lib/form/components/boolean-field.cjs.js +0 -1
  357. package/dist/lib/form/components/boolean-field.cjs.js.map +1 -1
  358. package/dist/lib/form/components/boolean-field.es.js +2 -3
  359. package/dist/lib/form/components/boolean-field.es.js.map +1 -1
  360. package/dist/lib/form/components/date-field.es.js +1 -1
  361. package/dist/lib/form/components/field-wrapper.cjs.js +0 -1
  362. package/dist/lib/form/components/field-wrapper.cjs.js.map +1 -1
  363. package/dist/lib/form/components/field-wrapper.es.js +1 -2
  364. package/dist/lib/form/components/field-wrapper.es.js.map +1 -1
  365. package/dist/lib/form/components/number-field.es.js +1 -1
  366. package/dist/lib/form/components/record-field.es.js +1 -1
  367. package/dist/lib/form/components/select-field.es.js +1 -1
  368. package/dist/{list-search-xHadeMHl.cjs → list-search-C3yXcTRO.cjs} +2 -2
  369. package/dist/{list-search-xHadeMHl.cjs.map → list-search-C3yXcTRO.cjs.map} +1 -1
  370. package/dist/{list-search-BNnMwbpv.js → list-search-CmPRFDsn.js} +2 -2
  371. package/dist/{list-search-BNnMwbpv.js.map → list-search-CmPRFDsn.js.map} +1 -1
  372. package/dist/{logs-data-list-DfuVMd6f.cjs → logs-data-list-Bf_vIsFb.cjs} +21 -22
  373. package/dist/{logs-data-list-DfuVMd6f.cjs.map → logs-data-list-Bf_vIsFb.cjs.map} +1 -1
  374. package/dist/{logs-data-list-C262Be3o.js → logs-data-list-Cudh6b-c.js} +2 -3
  375. package/dist/{logs-data-list-C262Be3o.js.map → logs-data-list-Cudh6b-c.js.map} +1 -1
  376. package/dist/{markdown-renderer-D5Wjk1Cs.js → markdown-renderer-Cly6VMDr.js} +2 -2
  377. package/dist/{markdown-renderer-D5Wjk1Cs.js.map → markdown-renderer-Cly6VMDr.js.map} +1 -1
  378. package/dist/new/settings.cjs.js +1 -1
  379. package/dist/new/settings.es.js +1 -1
  380. package/dist/{plan-Cl3-JgbI.js → plan-DIbhFPRL.js} +2 -2
  381. package/dist/{plan-Cl3-JgbI.js.map → plan-DIbhFPRL.js.map} +1 -1
  382. package/dist/primitives/textarea-control.es.js +1 -1
  383. package/dist/{property-filter-applied-CZLzY0OH.js → property-filter-applied-DXH81ffT.js} +2 -2
  384. package/dist/{property-filter-applied-CZLzY0OH.js.map → property-filter-applied-DXH81ffT.js.map} +1 -1
  385. package/dist/{radio-group-Bk52hNNb.js → radio-group-C2zsCipq.js} +2 -2
  386. package/dist/{radio-group-Bk52hNNb.js.map → radio-group-C2zsCipq.js.map} +1 -1
  387. package/dist/{reasoning-activity-CIuVSAGA.js → reasoning-activity-B1r4JQxm.js} +2 -2
  388. package/dist/{reasoning-activity-CIuVSAGA.js.map → reasoning-activity-B1r4JQxm.js.map} +1 -1
  389. package/dist/resize/panel-drawer.cjs.js +1 -1
  390. package/dist/resize/panel-drawer.es.js +1 -1
  391. package/dist/{search-input-fqSrRTLU.js → search-input-D23h16CB.js} +3 -4
  392. package/dist/{search-input-fqSrRTLU.js.map → search-input-D23h16CB.js.map} +1 -1
  393. package/dist/{search-input-UtTJMjJu.cjs → search-input-DbEE2zEz.cjs} +1 -2
  394. package/dist/{search-input-UtTJMjJu.cjs.map → search-input-DbEE2zEz.cjs.map} +1 -1
  395. package/dist/{section-DhZbtWhu.cjs → section-CdaSS9M7.cjs} +2 -2
  396. package/dist/{section-DhZbtWhu.cjs.map → section-CdaSS9M7.cjs.map} +1 -1
  397. package/dist/{section-Dq6aFxlH.js → section-DcjTdrqz.js} +2 -2
  398. package/dist/{section-Dq6aFxlH.js.map → section-DcjTdrqz.js.map} +1 -1
  399. package/dist/{segmented-control-CUnvFStD.js → segmented-control-BfY7F0NZ.js} +2 -2
  400. package/dist/{segmented-control-CUnvFStD.js.map → segmented-control-BfY7F0NZ.js.map} +1 -1
  401. package/dist/{select-N2lgBRsg.js → select-BGAiIHnS.js} +2 -2
  402. package/dist/{select-N2lgBRsg.js.map → select-BGAiIHnS.js.map} +1 -1
  403. package/dist/{settings-row-CwZ3JffC.cjs → settings-row-rOI4yGvi.cjs} +1 -2
  404. package/dist/{settings-row-CwZ3JffC.cjs.map → settings-row-rOI4yGvi.cjs.map} +1 -1
  405. package/dist/{settings-row-gpwIVAMN.js → settings-row-ylIw4rfC.js} +2 -3
  406. package/dist/{settings-row-gpwIVAMN.js.map → settings-row-ylIw4rfC.js.map} +1 -1
  407. package/dist/{side-dialog-BIyr498B.js → side-dialog-CB_wrLtE.js} +3 -3
  408. package/dist/{side-dialog-BIyr498B.js.map → side-dialog-CB_wrLtE.js.map} +1 -1
  409. package/dist/{side-dialog-BT2xywA8.cjs → side-dialog-OPXvmRDA.cjs} +3 -3
  410. package/dist/{side-dialog-BT2xywA8.cjs.map → side-dialog-OPXvmRDA.cjs.map} +1 -1
  411. package/dist/{span-payload-primitives-WqYTBiGx.js → span-payload-primitives-Cixom2Py.js} +2 -2
  412. package/dist/{span-payload-primitives-WqYTBiGx.js.map → span-payload-primitives-Cixom2Py.js.map} +1 -1
  413. package/dist/src/ds/components/AlertDialog/alert-dialog.d.ts +8 -11
  414. package/dist/src/ds/components/Dialog/dialog-shell.d.ts +1 -0
  415. package/dist/src/ds/components/Dialog/dialog.d.ts +9 -3
  416. package/dist/src/ds/components/FilterBar/filter-bar-tree.d.ts +9 -1
  417. package/dist/src/ds/components/FilterBar/types.d.ts +6 -0
  418. package/dist/style.css +17 -4
  419. package/dist/{switch-DiSlsWUt.js → switch-BBeMfeQ2.js} +2 -2
  420. package/dist/{switch-DiSlsWUt.js.map → switch-BBeMfeQ2.js.map} +1 -1
  421. package/dist/{time-picker-J7GaNaEd.js → time-picker-Bo6GJcmz.js} +2 -2
  422. package/dist/{time-picker-J7GaNaEd.js.map → time-picker-Bo6GJcmz.js.map} +1 -1
  423. package/dist/{tool-approval-nsbG8-qI.js → tool-approval-BQ6sDvyS.js} +2 -2
  424. package/dist/{tool-approval-nsbG8-qI.js.map → tool-approval-BQ6sDvyS.js.map} +1 -1
  425. package/dist/{tool-call-arguments-RKyYP3xh.js → tool-call-arguments-B86JP3Dy.js} +2 -2
  426. package/dist/{tool-call-arguments-RKyYP3xh.js.map → tool-call-arguments-B86JP3Dy.js.map} +1 -1
  427. package/dist/{tool-card-BtPh44u6.js → tool-card-C8IrtMuQ.js} +2 -2
  428. package/dist/{tool-card-BtPh44u6.js.map → tool-card-C8IrtMuQ.js.map} +1 -1
  429. package/dist/{trace-filters-B9myZP-l.cjs → trace-filters-Bh4dVNPX.cjs} +16 -20
  430. package/dist/trace-filters-Bh4dVNPX.cjs.map +1 -0
  431. package/dist/{trace-filters-Cvra0Aum.js → trace-filters-C71gmCq4.js} +16 -20
  432. package/dist/trace-filters-C71gmCq4.js.map +1 -0
  433. package/dist/{traces-data-list-Cf_PpmSN.cjs → traces-data-list-DaFA1Ccg.cjs} +17 -19
  434. package/dist/{traces-data-list-Cf_PpmSN.cjs.map → traces-data-list-DaFA1Ccg.cjs.map} +1 -1
  435. package/dist/{traces-data-list-_mFOMw0U.js → traces-data-list-L_r2GAtr.js} +2 -4
  436. package/dist/{traces-data-list-_mFOMw0U.js.map → traces-data-list-L_r2GAtr.js.map} +1 -1
  437. package/dist/types-CIPrYAzY.js.map +1 -1
  438. package/dist/types-Ns4ZNp-g.cjs.map +1 -1
  439. package/dist/{use-workflow-graph-runtime-CAyNWN_Z.js → use-workflow-graph-runtime-DS7eWso7.js} +2 -2
  440. package/dist/{use-workflow-graph-runtime-CAyNWN_Z.js.map → use-workflow-graph-runtime-DS7eWso7.js.map} +1 -1
  441. package/dist/{workflow-code-dialog-content-CNDoMFAV.js → workflow-code-dialog-content-BUCZZoKf.js} +2 -2
  442. package/dist/{workflow-code-dialog-content-CNDoMFAV.js.map → workflow-code-dialog-content-BUCZZoKf.js.map} +1 -1
  443. package/dist/{workflow-data-edge-view-CMdPlcQj.cjs → workflow-data-edge-view-BHvpuvmp.cjs} +2 -2
  444. package/dist/{workflow-data-edge-view-CMdPlcQj.cjs.map → workflow-data-edge-view-BHvpuvmp.cjs.map} +1 -1
  445. package/dist/{workflow-data-edge-view-DeX0gykV.js → workflow-data-edge-view-BIiMA9zg.js} +2 -2
  446. package/dist/{workflow-data-edge-view-DeX0gykV.js.map → workflow-data-edge-view-BIiMA9zg.js.map} +1 -1
  447. package/dist/{workflow-edge-data-button-CSeMH2Ky.cjs → workflow-edge-data-button-Cz2rcoDr.cjs} +2 -2
  448. package/dist/{workflow-edge-data-button-CSeMH2Ky.cjs.map → workflow-edge-data-button-Cz2rcoDr.cjs.map} +1 -1
  449. package/dist/{workflow-edge-data-button-DfyJCI6R.js → workflow-edge-data-button-D5oK4NS5.js} +3 -3
  450. package/dist/{workflow-edge-data-button-DfyJCI6R.js.map → workflow-edge-data-button-D5oK4NS5.js.map} +1 -1
  451. package/package.json +9 -9
  452. package/dist/alert-dialog-BJlS-v3z.cjs +0 -55
  453. package/dist/alert-dialog-BJlS-v3z.cjs.map +0 -1
  454. package/dist/alert-dialog-BvzVYar8.js +0 -53
  455. package/dist/alert-dialog-BvzVYar8.js.map +0 -1
  456. package/dist/command-B141Sxts.js.map +0 -1
  457. package/dist/command-Cx5QAS4E.cjs.map +0 -1
  458. package/dist/data-list-DkVOwk8l.cjs +0 -142
  459. package/dist/data-list-DkVOwk8l.cjs.map +0 -1
  460. package/dist/data-list-Dv2lP-dU.js +0 -138
  461. package/dist/data-list-Dv2lP-dU.js.map +0 -1
  462. package/dist/data-list-spacer-DEMquKp9.js +0 -209
  463. package/dist/data-list-spacer-DEMquKp9.js.map +0 -1
  464. package/dist/data-list-spacer-pXP8xDlg.cjs +0 -218
  465. package/dist/data-list-spacer-pXP8xDlg.cjs.map +0 -1
  466. package/dist/data-list-top-BJCC62oy.js.map +0 -1
  467. package/dist/data-list-top-Ds-NWyPO.cjs.map +0 -1
  468. package/dist/dialog-BYsQZGIj.js.map +0 -1
  469. package/dist/dialog-wL-fuFON.cjs.map +0 -1
  470. package/dist/filter-bar-chip-Bu27EjSO.js.map +0 -1
  471. package/dist/filter-bar-chip-uPmGVzPR.cjs.map +0 -1
  472. package/dist/trace-filters-B9myZP-l.cjs.map +0 -1
  473. package/dist/trace-filters-Cvra0Aum.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"dataset-save-action.es.js","sources":["../../../../src/domains/chat/messages/dataset-save-action.tsx"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { DatabaseIcon } from 'lucide-react';\nimport { useState, useCallback, useEffect, useMemo } from 'react';\nimport { useDatasetSaveContext } from '../context/dataset-save-context-value';\nimport type { DatasetSaveContextValue } from '../context/dataset-save-context-value';\nimport { useDatasetMutations, useDatasets } from '@/domains/datasets';\nimport { Button } from '@/ds/components/Button';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport {\n Dialog,\n DialogAction,\n DialogCancel,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogBody,\n DialogFooter,\n} from '@/ds/components/Dialog';\nimport { Field, FieldLabel } from '@/ds/components/Field';\nimport { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/ds/components/Select';\nimport { Spinner } from '@/ds/components/Spinner';\nimport { Txt } from '@/ds/components/Txt';\nimport { controlStateColorTransition } from '@/ds/primitives/transitions';\nimport { quietTextHover } from '@/ds/primitives/typography';\nimport { cn } from '@/utils/cn';\nimport { toast } from '@/utils/toast';\n\nfunction DatasetSaveDialog({\n open,\n onOpenChange,\n input,\n onInputChange,\n requestContext,\n initialGroundTruth = '',\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n input: string;\n onInputChange: (value: string) => void;\n requestContext?: Record<string, unknown>;\n initialGroundTruth?: string;\n}) {\n const [groundTruth, setGroundTruth] = useState(initialGroundTruth);\n const [selectedDatasetId, setSelectedDatasetId] = useState('');\n\n useEffect(() => {\n if (open) {\n setGroundTruth(initialGroundTruth);\n }\n }, [open, initialGroundTruth]);\n\n const { data, isLoading: isDatasetsLoading } = useDatasets();\n const { addItem } = useDatasetMutations();\n const datasets = useMemo(() => data?.datasets ?? [], [data?.datasets]);\n\n const handleSubmit = useCallback(async () => {\n if (!selectedDatasetId) {\n toast.error('Please select a dataset');\n return;\n }\n\n let parsedInput: unknown;\n try {\n parsedInput = JSON.parse(input);\n } catch {\n toast.error('Input must be valid JSON');\n return;\n }\n\n let parsedGroundTruth: unknown | undefined;\n if (groundTruth.trim()) {\n try {\n parsedGroundTruth = JSON.parse(groundTruth);\n } catch {\n toast.error('Ground Truth must be valid JSON');\n return;\n }\n }\n\n try {\n const hasRequestContext = requestContext && Object.keys(requestContext).length > 0;\n await addItem.mutateAsync({\n datasetId: selectedDatasetId,\n input: parsedInput,\n groundTruth: parsedGroundTruth,\n ...(hasRequestContext ? { requestContext } : {}),\n });\n const targetDataset = datasets.find(d => d.id === selectedDatasetId);\n toast.success(`Item saved to \"${targetDataset?.name}\"`);\n onOpenChange(false);\n setSelectedDatasetId('');\n onInputChange('');\n setGroundTruth('');\n } catch (error) {\n toast.error(`Failed to save item: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }, [input, groundTruth, selectedDatasetId, requestContext, addItem, datasets, onOpenChange, onInputChange]);\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange} pending={addItem.isPending}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Save to Dataset</DialogTitle>\n <DialogDescription>Save as a dataset item for evaluation.</DialogDescription>\n </DialogHeader>\n <DialogBody>\n <Field>\n <FieldLabel>Dataset</FieldLabel>\n <Select\n value={selectedDatasetId}\n onValueChange={setSelectedDatasetId}\n disabled={addItem.isPending || isDatasetsLoading}\n >\n <SelectTrigger>\n <SelectValue placeholder={isDatasetsLoading ? 'Loading...' : 'Select a dataset'} />\n </SelectTrigger>\n <SelectContent>\n {datasets.length === 0 ? (\n <Txt as=\"p\" variant=\"body\" tone=\"muted\" className=\"px-2 py-4 text-center\">\n No datasets available\n </Txt>\n ) : (\n datasets.map(dataset => (\n <SelectItem key={dataset.id} value={dataset.id}>\n {dataset.name}\n </SelectItem>\n ))\n )}\n </SelectContent>\n </Select>\n </Field>\n\n <Field>\n <FieldLabel>Input (JSON)</FieldLabel>\n <CodeEditor value={input} onChange={onInputChange} showCopyButton={false} className=\"max-h-60 min-h-30\" />\n </Field>\n\n <Field>\n <FieldLabel>Ground Truth (JSON, optional)</FieldLabel>\n <CodeEditor\n value={groundTruth}\n onChange={setGroundTruth}\n showCopyButton={false}\n className=\"max-h-40 min-h-20\"\n />\n </Field>\n </DialogBody>\n <DialogFooter>\n <DialogCancel>Cancel</DialogCancel>\n <DialogAction onConfirm={handleSubmit} disabled={!selectedDatasetId || datasets.length === 0}>\n {addItem.isPending ? 'Saving...' : 'Save Item'}\n </DialogAction>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\n/**\n * Dataset save action button shown on user messages in test chat mode.\n * Saves the individual message text as a dataset item.\n */\nexport interface DatasetSaveActionProps {\n /** Text of the message this action saves to a dataset. */\n messageText: string;\n}\n\nexport function DatasetSaveAction({ messageText }: DatasetSaveActionProps) {\n const ctx = useDatasetSaveContext();\n if (!ctx?.enabled) return null;\n return <DatasetSaveActionInner messageText={messageText} />;\n}\n\nfunction DatasetSaveActionInner({ messageText }: DatasetSaveActionProps) {\n const ctx = useDatasetSaveContext();\n const [dialogOpen, setDialogOpen] = useState(false);\n const [input, setInput] = useState('');\n\n const handleClick = useCallback(() => {\n setInput(JSON.stringify(messageText, null, 2));\n setDialogOpen(true);\n }, [messageText]);\n\n return (\n <>\n <Button\n variant=\"default\"\n size=\"icon-md\"\n tooltip=\"Save to dataset\"\n className={cn(quietTextHover, 'bg-transparent')}\n onClick={handleClick}\n >\n <DatabaseIcon className=\"size-4\" />\n </Button>\n <DatasetSaveDialog\n open={dialogOpen}\n onOpenChange={setDialogOpen}\n input={input}\n onInputChange={setInput}\n requestContext={ctx?.requestContext}\n />\n </>\n );\n}\n\n/**\n * Button shown at the bottom of the thread to save the full conversation history.\n * Only renders when dataset save context is enabled (test chat mode).\n */\nexport function SaveFullConversationAction() {\n const ctx = useDatasetSaveContext();\n if (!ctx?.enabled) return null;\n return <SaveFullConversationInner ctx={ctx} />;\n}\n\nfunction SaveFullConversationInner({ ctx }: { ctx: DatasetSaveContextValue }) {\n const client = useMastraClient();\n const [dialogOpen, setDialogOpen] = useState(false);\n const [input, setInput] = useState('');\n const [groundTruth, setGroundTruth] = useState('');\n const [isFetching, setIsFetching] = useState(false);\n\n const handleClick = useCallback(async () => {\n setIsFetching(true);\n try {\n const result = await client.listThreadMessages(ctx.threadId, {\n agentId: ctx.agentId,\n });\n const messages = result?.messages ?? [];\n\n const lastAssistantIdx = messages.length - 1;\n const lastMessage = messages[lastAssistantIdx];\n if (lastMessage && lastMessage.role === 'assistant') {\n const inputMessages = messages.slice(0, lastAssistantIdx);\n setInput(JSON.stringify(inputMessages, null, 2));\n setGroundTruth(JSON.stringify(lastMessage, null, 2));\n } else {\n setInput(JSON.stringify(messages, null, 2));\n setGroundTruth('');\n }\n\n setDialogOpen(true);\n } catch (error) {\n toast.error(`Failed to fetch thread messages: ${error instanceof Error ? error.message : 'Unknown error'}`);\n } finally {\n setIsFetching(false);\n }\n }, [client, ctx.threadId, ctx.agentId]);\n\n return (\n <>\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={isFetching}\n className={cn(\n quietTextHover,\n controlStateColorTransition,\n 'mx-auto flex cursor-pointer items-center gap-1.5 py-3 disabled:opacity-50',\n )}\n >\n {isFetching ? <Spinner className=\"size-3.5\" /> : <DatabaseIcon className=\"size-3.5\" />}\n <Txt as=\"span\" variant=\"meta\" className=\"block\">\n Save full conversation to dataset\n </Txt>\n </button>\n <DatasetSaveDialog\n open={dialogOpen}\n onOpenChange={setDialogOpen}\n input={input}\n onInputChange={setInput}\n requestContext={ctx.requestContext}\n initialGroundTruth={groundTruth}\n />\n </>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dataset-save-action.es.js","sources":["../../../../src/domains/chat/messages/dataset-save-action.tsx"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { DatabaseIcon } from 'lucide-react';\nimport { useState, useCallback, useEffect, useMemo } from 'react';\nimport { useDatasetSaveContext } from '../context/dataset-save-context-value';\nimport type { DatasetSaveContextValue } from '../context/dataset-save-context-value';\nimport { useDatasetMutations, useDatasets } from '@/domains/datasets';\nimport { Button } from '@/ds/components/Button';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport {\n Dialog,\n DialogAction,\n DialogCancel,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogBody,\n DialogFooter,\n} from '@/ds/components/Dialog';\nimport { Field, FieldLabel } from '@/ds/components/Field';\nimport { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/ds/components/Select';\nimport { Spinner } from '@/ds/components/Spinner';\nimport { Txt } from '@/ds/components/Txt';\nimport { controlStateColorTransition } from '@/ds/primitives/transitions';\nimport { quietTextHover } from '@/ds/primitives/typography';\nimport { cn } from '@/utils/cn';\nimport { toast } from '@/utils/toast';\n\nfunction DatasetSaveDialog({\n open,\n onOpenChange,\n input,\n onInputChange,\n requestContext,\n initialGroundTruth = '',\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n input: string;\n onInputChange: (value: string) => void;\n requestContext?: Record<string, unknown>;\n initialGroundTruth?: string;\n}) {\n const [groundTruth, setGroundTruth] = useState(initialGroundTruth);\n const [selectedDatasetId, setSelectedDatasetId] = useState('');\n\n useEffect(() => {\n if (open) {\n setGroundTruth(initialGroundTruth);\n }\n }, [open, initialGroundTruth]);\n\n const { data, isLoading: isDatasetsLoading } = useDatasets();\n const { addItem } = useDatasetMutations();\n const datasets = useMemo(() => data?.datasets ?? [], [data?.datasets]);\n\n const handleSubmit = useCallback(async () => {\n if (!selectedDatasetId) {\n toast.error('Please select a dataset');\n return;\n }\n\n let parsedInput: unknown;\n try {\n parsedInput = JSON.parse(input);\n } catch {\n toast.error('Input must be valid JSON');\n return;\n }\n\n let parsedGroundTruth: unknown | undefined;\n if (groundTruth.trim()) {\n try {\n parsedGroundTruth = JSON.parse(groundTruth);\n } catch {\n toast.error('Ground Truth must be valid JSON');\n return;\n }\n }\n\n try {\n const hasRequestContext = requestContext && Object.keys(requestContext).length > 0;\n await addItem.mutateAsync({\n datasetId: selectedDatasetId,\n input: parsedInput,\n groundTruth: parsedGroundTruth,\n ...(hasRequestContext ? { requestContext } : {}),\n });\n const targetDataset = datasets.find(d => d.id === selectedDatasetId);\n toast.success(`Item saved to \"${targetDataset?.name}\"`);\n onOpenChange(false);\n setSelectedDatasetId('');\n onInputChange('');\n setGroundTruth('');\n } catch (error) {\n toast.error(`Failed to save item: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }, [input, groundTruth, selectedDatasetId, requestContext, addItem, datasets, onOpenChange, onInputChange]);\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange} pending={addItem.isPending}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Save to Dataset</DialogTitle>\n <DialogDescription>Save as a dataset item for evaluation.</DialogDescription>\n </DialogHeader>\n <DialogBody>\n <Field>\n <FieldLabel>Dataset</FieldLabel>\n <Select\n value={selectedDatasetId}\n onValueChange={setSelectedDatasetId}\n disabled={addItem.isPending || isDatasetsLoading}\n >\n <SelectTrigger>\n <SelectValue placeholder={isDatasetsLoading ? 'Loading...' : 'Select a dataset'} />\n </SelectTrigger>\n <SelectContent>\n {datasets.length === 0 ? (\n <Txt as=\"p\" variant=\"body\" tone=\"muted\" className=\"px-2 py-4 text-center\">\n No datasets available\n </Txt>\n ) : (\n datasets.map(dataset => (\n <SelectItem key={dataset.id} value={dataset.id}>\n {dataset.name}\n </SelectItem>\n ))\n )}\n </SelectContent>\n </Select>\n </Field>\n\n <Field>\n <FieldLabel>Input (JSON)</FieldLabel>\n <CodeEditor value={input} onChange={onInputChange} showCopyButton={false} className=\"max-h-60 min-h-30\" />\n </Field>\n\n <Field>\n <FieldLabel>Ground Truth (JSON, optional)</FieldLabel>\n <CodeEditor\n value={groundTruth}\n onChange={setGroundTruth}\n showCopyButton={false}\n className=\"max-h-40 min-h-20\"\n />\n </Field>\n </DialogBody>\n <DialogFooter>\n <DialogCancel>Cancel</DialogCancel>\n <DialogAction onConfirm={handleSubmit} disabled={!selectedDatasetId || datasets.length === 0}>\n {addItem.isPending ? 'Saving...' : 'Save Item'}\n </DialogAction>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\n/**\n * Dataset save action button shown on user messages in test chat mode.\n * Saves the individual message text as a dataset item.\n */\nexport interface DatasetSaveActionProps {\n /** Text of the message this action saves to a dataset. */\n messageText: string;\n}\n\nexport function DatasetSaveAction({ messageText }: DatasetSaveActionProps) {\n const ctx = useDatasetSaveContext();\n if (!ctx?.enabled) return null;\n return <DatasetSaveActionInner messageText={messageText} />;\n}\n\nfunction DatasetSaveActionInner({ messageText }: DatasetSaveActionProps) {\n const ctx = useDatasetSaveContext();\n const [dialogOpen, setDialogOpen] = useState(false);\n const [input, setInput] = useState('');\n\n const handleClick = useCallback(() => {\n setInput(JSON.stringify(messageText, null, 2));\n setDialogOpen(true);\n }, [messageText]);\n\n return (\n <>\n <Button\n variant=\"default\"\n size=\"icon-md\"\n tooltip=\"Save to dataset\"\n className={cn(quietTextHover, 'bg-transparent')}\n onClick={handleClick}\n >\n <DatabaseIcon className=\"size-4\" />\n </Button>\n <DatasetSaveDialog\n open={dialogOpen}\n onOpenChange={setDialogOpen}\n input={input}\n onInputChange={setInput}\n requestContext={ctx?.requestContext}\n />\n </>\n );\n}\n\n/**\n * Button shown at the bottom of the thread to save the full conversation history.\n * Only renders when dataset save context is enabled (test chat mode).\n */\nexport function SaveFullConversationAction() {\n const ctx = useDatasetSaveContext();\n if (!ctx?.enabled) return null;\n return <SaveFullConversationInner ctx={ctx} />;\n}\n\nfunction SaveFullConversationInner({ ctx }: { ctx: DatasetSaveContextValue }) {\n const client = useMastraClient();\n const [dialogOpen, setDialogOpen] = useState(false);\n const [input, setInput] = useState('');\n const [groundTruth, setGroundTruth] = useState('');\n const [isFetching, setIsFetching] = useState(false);\n\n const handleClick = useCallback(async () => {\n setIsFetching(true);\n try {\n const result = await client.listThreadMessages(ctx.threadId, {\n agentId: ctx.agentId,\n });\n const messages = result?.messages ?? [];\n\n const lastAssistantIdx = messages.length - 1;\n const lastMessage = messages[lastAssistantIdx];\n if (lastMessage && lastMessage.role === 'assistant') {\n const inputMessages = messages.slice(0, lastAssistantIdx);\n setInput(JSON.stringify(inputMessages, null, 2));\n setGroundTruth(JSON.stringify(lastMessage, null, 2));\n } else {\n setInput(JSON.stringify(messages, null, 2));\n setGroundTruth('');\n }\n\n setDialogOpen(true);\n } catch (error) {\n toast.error(`Failed to fetch thread messages: ${error instanceof Error ? error.message : 'Unknown error'}`);\n } finally {\n setIsFetching(false);\n }\n }, [client, ctx.threadId, ctx.agentId]);\n\n return (\n <>\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={isFetching}\n className={cn(\n quietTextHover,\n controlStateColorTransition,\n 'mx-auto flex cursor-pointer items-center gap-1.5 py-3 disabled:opacity-50',\n )}\n >\n {isFetching ? <Spinner className=\"size-3.5\" /> : <DatabaseIcon className=\"size-3.5\" />}\n <Txt as=\"span\" variant=\"meta\" className=\"block\">\n Save full conversation to dataset\n </Txt>\n </button>\n <DatasetSaveDialog\n open={dialogOpen}\n onOpenChange={setDialogOpen}\n input={input}\n onInputChange={setInput}\n requestContext={ctx.requestContext}\n initialGroundTruth={groundTruth}\n />\n </>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -10,7 +10,6 @@ const domains_chat_attachments_messageAttachments = require('../attachments/mess
10
10
  const domains_chat_attachments_splitMessageAttachments = require('../attachments/split-message-attachments.cjs.js');
11
11
  const domains_chat_context_chatContext = require('../context/chat-context.cjs.js');
12
12
  require('lucide-react');
13
- require('../../../Button-BfZzgZrA.cjs');
14
13
  const Txt = require('../../../Txt-DXjXpX9r.cjs');
15
14
  require('../context/tool-call-context.cjs.js');
16
15
  const domains_chat_messages_signalData = require('./signal-data.cjs.js');
@@ -1 +1 @@
1
- {"version":3,"file":"message-row.cjs.js","sources":["../../../../src/domains/chat/messages/message-row.tsx"],"sourcesContent":["import type { MastraDBMessage, MastraErrorPart } from '@mastra/core/agent/message-list';\nimport { useMcpAppTools } from '@mastra/react/hooks/mcps';\nimport { MessageFactory } from '@mastra/react/ui';\nimport type { MessageRenderers } from '@mastra/react/ui';\nimport { memo, useMemo } from 'react';\nimport type { ReactNode } from 'react';\nimport { MessageAttachments } from '../attachments/message-attachments';\nimport { splitMessageAttachments } from '../attachments/split-message-attachments';\nimport { AssistantMessageActions, DatasetSaveAction } from '@/domains/chat';\nimport { ChatRunningContext, useChatRunning } from '@/domains/chat/context/chat-context';\nimport { AssistantTextPartRenderer } from '@/domains/chat/messages/renderers/assistant-text-part-renderer';\nimport { DataPartRenderer } from '@/domains/chat/messages/renderers/data-part-renderer';\nimport { messageTextKind } from '@/domains/chat/messages/renderers/message-text-kind';\nimport { ReasoningPartRenderer } from '@/domains/chat/messages/renderers/reasoning-part-renderer';\nimport { messageStatusRenderers } from '@/domains/chat/messages/renderers/status-renderers';\nimport { readToolPart } from '@/domains/chat/messages/renderers/tool-part';\nimport type { ToolPart } from '@/domains/chat/messages/renderers/tool-part';\nimport { UserFilePartRenderer } from '@/domains/chat/messages/renderers/user-file-part-renderer';\nimport { UserTextPartRenderer } from '@/domains/chat/messages/renderers/user-text-part-renderer';\nimport {\n getSignalType,\n isRecord,\n isSignalData,\n isUserSignalType,\n toReactiveSignalData,\n} from '@/domains/chat/messages/signal-data';\nimport { parseSkillActivation } from '@/domains/chat/messages/skill-activation';\nimport { SkillMessage } from '@/domains/chat/messages/skill-message';\nimport { ToolCallEffects } from '@/domains/chat/tools/tool-call-effects';\nimport { ToolCard } from '@/domains/chat/tools/tool-card';\nimport type { DataMessagePart } from '@/domains/chat/tools/tool-card';\nimport { badgeStatus, isSettledState } from '@/domains/chat/tools/tool-card-kind';\nimport type { ToolCardContext } from '@/domains/chat/tools/tool-card-kind';\nimport { collectToolGroups } from '@/domains/chat/tools/tool-groups';\nimport { useRevealedParts } from '@/ds/components/ai/message-reveal';\nimport { ToolCallGroup } from '@/ds/components/ai/tool-call';\nimport { Arriving } from '@/ds/components/Arrival';\nimport { Message, MessageActions, MessageCopyButton } from '@/ds/components/Message';\nimport { Notice } from '@/ds/components/Notice';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface MessageRowProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n message: MastraDBMessage;\n hasModelList?: boolean;\n isSpeaking?: boolean;\n onReadAloud?: (text: string) => void;\n onStopSpeaking?: () => void;\n readOnly?: boolean;\n footer?: ReactNode;\n}\n\ntype MessagePart = MastraDBMessage['content']['parts'][number];\n\nconst readField = (value: unknown, key: string): unknown => (isRecord(value) ? value[key] : undefined);\n\nconst getMessageDisplayRole = (message: MastraDBMessage): MastraDBMessage['role'] | null => {\n if (message.role === 'assistant' || message.role === 'user' || message.role === 'system') return message.role;\n if (message.role === 'signal') return isUserSignalType(getSignalType(message)) ? 'user' : 'assistant';\n return null;\n};\n\nconst toReactiveSignalMessage = (message: MastraDBMessage): MastraDBMessage | null => {\n const data = toReactiveSignalData(message);\n if (!isSignalData(data)) return null;\n const parts: MastraDBMessage['content']['parts'] = [{ type: 'data-signal', data }];\n return {\n ...message,\n role: 'assistant',\n content: { ...message.content, parts },\n };\n};\n\nconst toDisplayMessage = (message: MastraDBMessage): MastraDBMessage | null => {\n const displayRole = getMessageDisplayRole(message);\n if (displayRole === null) return null;\n if (message.role === 'signal' && displayRole === 'assistant') return toReactiveSignalMessage(message);\n if (displayRole === message.role) return message;\n return { ...message, role: displayRole };\n};\n\nconst NO_PARTS: MessagePart[] = [];\n\nconst isStreaming = (parts: MessagePart[]): boolean => parts.some(part => readField(part, 'state') === 'streaming');\n\nconst isProse = (parts: MessagePart[], metadata: Record<string, unknown> | undefined): boolean =>\n parts.every(part => {\n if (part.type !== 'text') return true;\n const text = readField(part, 'text');\n return typeof text !== 'string' || messageTextKind(text, metadata) === 'prose';\n });\n\nconst getMessageMetadata = (message: MastraDBMessage): Record<string, unknown> | undefined =>\n isRecord(message.content.metadata) ? message.content.metadata : undefined;\n\nconst getDataParts = (message: MastraDBMessage): DataMessagePart[] =>\n message.content.parts\n .filter(\n (part): part is Extract<MessagePart, { type: string }> =>\n typeof part.type === 'string' && part.type.startsWith('data-'),\n )\n .map(part => ({\n type: part.type,\n name: 'name' in part && typeof part.name === 'string' ? part.name : undefined,\n data: readField(part, 'data'),\n }));\n\nconst getTextFromParts = (message: MastraDBMessage): string =>\n message.content.parts\n .filter(\n (part): part is Extract<MessagePart, { type: 'text'; text: string }> =>\n part.type === 'text' && typeof readField(part, 'text') === 'string',\n )\n .map(part => part.text)\n .join('\\n');\n\nconst hasVisibleAssistantText = (message: MastraDBMessage, metadata: Record<string, unknown> | undefined): boolean =>\n message.content.parts.some(part => {\n if (part.type !== 'text') return false;\n const text = readField(part, 'text');\n if (typeof text !== 'string' || text.trim().length === 0) return false;\n if (readField(metadata, 'completionResult') || readField(metadata, 'isTaskCompleteResult')) return false;\n return true;\n });\n\nconst getModelMetadata = (metadata: Record<string, unknown> | undefined) => {\n const custom = readField(metadata, 'custom');\n const modelMetadata = readField(custom, 'modelMetadata');\n const modelId = readField(modelMetadata, 'modelId');\n const modelProvider = readField(modelMetadata, 'modelProvider');\n if (typeof modelId !== 'string' || typeof modelProvider !== 'string') return undefined;\n return { modelId, modelProvider };\n};\n\nconst isPendingMessage = (message: MastraDBMessage): boolean => {\n if (message.content.metadata?.status === 'pending') return true;\n return message.content.parts.some(part => readField(readField(part, 'metadata'), 'status') === 'pending');\n};\nexport const MessageRow = memo(function MessageRow({\n message,\n hasModelList,\n isSpeaking,\n onReadAloud,\n onStopSpeaking,\n readOnly,\n footer,\n className,\n ...rootProps\n}: MessageRowProps) {\n const dbMessage = toDisplayMessage(message);\n const metadata = getMessageMetadata(message);\n const modelMetadata = hasModelList ? getModelMetadata(metadata) : undefined;\n const dataParts = useMemo(() => getDataParts(message), [message]);\n const running = useChatRunning();\n const isRunning = running.isRunning && running.activeRunId !== undefined && metadata?.runId === running.activeRunId;\n const { data: mcpAppTools } = useMcpAppTools();\n const parts = dbMessage?.content.parts ?? NO_PARTS;\n const revealed = useRevealedParts(parts, isStreaming(parts));\n const shownParts = isProse(parts, metadata) ? revealed : parts;\n const revealing = shownParts !== parts;\n\n const toolContext = useMemo<ToolCardContext>(() => ({ metadata, mcpAppTools }), [metadata, mcpAppTools]);\n const toolGroups = useMemo(() => collectToolGroups(shownParts, toolContext), [shownParts, toolContext]);\n\n const sharedRenderers = useMemo<MessageRenderers>(() => {\n const renderTool = (part: ToolPart) => {\n const fields = readToolPart(part);\n const group = toolGroups.byFirstKey.get(fields.toolCallId);\n if (group) {\n const members = group.map(readToolPart);\n return (\n <>\n {members.map(member => (\n <ToolCallEffects key={member.toolCallId} {...member} readOnly={readOnly} />\n ))}\n <Arriving>\n <ToolCallGroup\n steps={members.map(member => ({\n toolName: member.toolName,\n args: member.input,\n status: badgeStatus(member.state, isRunning),\n hasResult: isSettledState(member.state),\n }))}\n >\n {members.map(member => {\n const incomplete = !isRunning && !isSettledState(member.state) && member.state !== 'output-error';\n return (\n <div\n key={member.toolCallId}\n role=\"group\"\n aria-label={member.toolName}\n className=\"flex items-start gap-2\"\n >\n <div className=\"min-w-0 flex-1\">\n <ToolCard {...member} metadata={metadata} dataParts={dataParts} readOnly={readOnly} />\n </div>\n {incomplete && (\n <Txt as=\"span\" variant=\"meta\" className=\"mt-1 shrink-0\">\n Incomplete\n </Txt>\n )}\n </div>\n );\n })}\n </ToolCallGroup>\n </Arriving>\n </>\n );\n }\n if (toolGroups.memberKeys.has(fields.toolCallId)) return null;\n return (\n <>\n <ToolCallEffects {...fields} readOnly={readOnly} />\n <Arriving>\n <ToolCard {...fields} metadata={metadata} dataParts={dataParts} readOnly={readOnly} />\n </Arriving>\n </>\n );\n };\n return {\n Reasoning: part => <ReasoningPartRenderer part={part} />,\n Data: part => (\n <Arriving>\n <DataPartRenderer part={part} />\n </Arriving>\n ),\n ToolInvocation: renderTool,\n DynamicTool: renderTool,\n Error: (part: MastraErrorPart) => (\n <Notice variant=\"destructive\" title={part.error.name ?? 'Error'}>\n <Notice.Message>{part.error.message}</Notice.Message>\n </Notice>\n ),\n };\n }, [metadata, dataParts, readOnly, toolGroups, isRunning]);\n\n const userRenderers = useMemo<MessageRenderers>(\n () => ({\n ...sharedRenderers,\n Text: part => <UserTextPartRenderer part={part} metadata={metadata} />,\n File: part => <UserFilePartRenderer part={part} />,\n }),\n [sharedRenderers, metadata],\n );\n\n const assistantRenderers = useMemo<MessageRenderers>(\n () => ({\n ...sharedRenderers,\n Text: part => <AssistantTextPartRenderer part={part} metadata={metadata} revealing={revealing} />,\n }),\n [sharedRenderers, metadata, revealing],\n );\n\n if (dbMessage === null) return null;\n const shownMessage = revealing ? { ...dbMessage, content: { ...dbMessage.content, parts: shownParts } } : dbMessage;\n const displayRole = dbMessage.role;\n\n if (displayRole === 'user') {\n const soleText = parts.length === 1 && parts[0]?.type === 'text' ? readField(parts[0], 'text') : undefined;\n const skillActivation = typeof soleText === 'string' ? parseSkillActivation(soleText) : undefined;\n if (skillActivation) {\n return (\n <Message\n {...rootProps}\n from=\"assistant\"\n className={className}\n data-message-id={message.id}\n footer={footer && <MessageActions visibility={readOnly ? 'hover' : 'always'}>{footer}</MessageActions>}\n >\n <SkillMessage activation={skillActivation} />\n </Message>\n );\n }\n\n const { attachments, content } = splitMessageAttachments(shownMessage.content.parts ?? []);\n const contentMessage = { ...shownMessage, content: { ...shownMessage.content, parts: content } };\n const isPending = isPendingMessage(message);\n const text = getTextFromParts(contentMessage);\n const canCopy = text.trim().length > 0;\n\n return (\n <Message\n {...rootProps}\n from=\"user\"\n className={className}\n data-message-id={message.id}\n pending={isPending}\n attachments={attachments.length > 0 && <MessageAttachments parts={attachments} />}\n footer={\n <MessageActions>\n {canCopy && <MessageCopyButton text={text} />}\n <DatasetSaveAction messageText={text} />\n {footer}\n </MessageActions>\n }\n >\n {(attachments.length === 0 || content.length > 0) && (\n <MessageFactory message={contentMessage} {...userRenderers} status={messageStatusRenderers} />\n )}\n </Message>\n );\n }\n\n const showActionBar = hasVisibleAssistantText(message, metadata);\n\n return (\n <Message\n {...rootProps}\n from=\"assistant\"\n className={className}\n data-message-id={message.id}\n footer={\n (showActionBar || footer) && (\n <MessageActions visibility={readOnly ? 'hover' : 'always'}>\n {showActionBar && (\n <AssistantMessageActions\n text={getTextFromParts(message)}\n modelMetadata={modelMetadata}\n isSpeaking={isSpeaking}\n onReadAloud={onReadAloud}\n onStopSpeaking={onStopSpeaking}\n />\n )}\n {footer && <MessageActions>{footer}</MessageActions>}\n </MessageActions>\n )\n }\n >\n <ChatRunningContext.Provider value={{ ...running, isRunning }}>\n <MessageFactory message={shownMessage} {...assistantRenderers} status={messageStatusRenderers} />\n </ChatRunningContext.Provider>\n </Message>\n );\n});\n"],"names":["isRecord","isUserSignalType","getSignalType","toReactiveSignalData","isSignalData","messageTextKind","memo","MessageRow","message","useMemo","useChatRunning","useMcpAppTools","useRevealedParts","collectToolGroups","readToolPart","jsxs","Fragment","jsx","ToolCallEffects","Arriving","ToolCallGroup","badgeStatus","isSettledState","ToolCard","Txt","ReasoningPartRenderer","DataPartRenderer","Notice","UserTextPartRenderer","UserFilePartRenderer","AssistantTextPartRenderer","parseSkillActivation","Message","MessageActions","SkillMessage","splitMessageAttachments","MessageAttachments","MessageCopyButton","DatasetSaveAction","MessageFactory","messageStatusRenderers","AssistantMessageActions","ChatRunningContext"],"mappings":"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"}
1
+ {"version":3,"file":"message-row.cjs.js","sources":["../../../../src/domains/chat/messages/message-row.tsx"],"sourcesContent":["import type { MastraDBMessage, MastraErrorPart } from '@mastra/core/agent/message-list';\nimport { useMcpAppTools } from '@mastra/react/hooks/mcps';\nimport { MessageFactory } from '@mastra/react/ui';\nimport type { MessageRenderers } from '@mastra/react/ui';\nimport { memo, useMemo } from 'react';\nimport type { ReactNode } from 'react';\nimport { MessageAttachments } from '../attachments/message-attachments';\nimport { splitMessageAttachments } from '../attachments/split-message-attachments';\nimport { AssistantMessageActions, DatasetSaveAction } from '@/domains/chat';\nimport { ChatRunningContext, useChatRunning } from '@/domains/chat/context/chat-context';\nimport { AssistantTextPartRenderer } from '@/domains/chat/messages/renderers/assistant-text-part-renderer';\nimport { DataPartRenderer } from '@/domains/chat/messages/renderers/data-part-renderer';\nimport { messageTextKind } from '@/domains/chat/messages/renderers/message-text-kind';\nimport { ReasoningPartRenderer } from '@/domains/chat/messages/renderers/reasoning-part-renderer';\nimport { messageStatusRenderers } from '@/domains/chat/messages/renderers/status-renderers';\nimport { readToolPart } from '@/domains/chat/messages/renderers/tool-part';\nimport type { ToolPart } from '@/domains/chat/messages/renderers/tool-part';\nimport { UserFilePartRenderer } from '@/domains/chat/messages/renderers/user-file-part-renderer';\nimport { UserTextPartRenderer } from '@/domains/chat/messages/renderers/user-text-part-renderer';\nimport {\n getSignalType,\n isRecord,\n isSignalData,\n isUserSignalType,\n toReactiveSignalData,\n} from '@/domains/chat/messages/signal-data';\nimport { parseSkillActivation } from '@/domains/chat/messages/skill-activation';\nimport { SkillMessage } from '@/domains/chat/messages/skill-message';\nimport { ToolCallEffects } from '@/domains/chat/tools/tool-call-effects';\nimport { ToolCard } from '@/domains/chat/tools/tool-card';\nimport type { DataMessagePart } from '@/domains/chat/tools/tool-card';\nimport { badgeStatus, isSettledState } from '@/domains/chat/tools/tool-card-kind';\nimport type { ToolCardContext } from '@/domains/chat/tools/tool-card-kind';\nimport { collectToolGroups } from '@/domains/chat/tools/tool-groups';\nimport { useRevealedParts } from '@/ds/components/ai/message-reveal';\nimport { ToolCallGroup } from '@/ds/components/ai/tool-call';\nimport { Arriving } from '@/ds/components/Arrival';\nimport { Message, MessageActions, MessageCopyButton } from '@/ds/components/Message';\nimport { Notice } from '@/ds/components/Notice';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface MessageRowProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n message: MastraDBMessage;\n hasModelList?: boolean;\n isSpeaking?: boolean;\n onReadAloud?: (text: string) => void;\n onStopSpeaking?: () => void;\n readOnly?: boolean;\n footer?: ReactNode;\n}\n\ntype MessagePart = MastraDBMessage['content']['parts'][number];\n\nconst readField = (value: unknown, key: string): unknown => (isRecord(value) ? value[key] : undefined);\n\nconst getMessageDisplayRole = (message: MastraDBMessage): MastraDBMessage['role'] | null => {\n if (message.role === 'assistant' || message.role === 'user' || message.role === 'system') return message.role;\n if (message.role === 'signal') return isUserSignalType(getSignalType(message)) ? 'user' : 'assistant';\n return null;\n};\n\nconst toReactiveSignalMessage = (message: MastraDBMessage): MastraDBMessage | null => {\n const data = toReactiveSignalData(message);\n if (!isSignalData(data)) return null;\n const parts: MastraDBMessage['content']['parts'] = [{ type: 'data-signal', data }];\n return {\n ...message,\n role: 'assistant',\n content: { ...message.content, parts },\n };\n};\n\nconst toDisplayMessage = (message: MastraDBMessage): MastraDBMessage | null => {\n const displayRole = getMessageDisplayRole(message);\n if (displayRole === null) return null;\n if (message.role === 'signal' && displayRole === 'assistant') return toReactiveSignalMessage(message);\n if (displayRole === message.role) return message;\n return { ...message, role: displayRole };\n};\n\nconst NO_PARTS: MessagePart[] = [];\n\nconst isStreaming = (parts: MessagePart[]): boolean => parts.some(part => readField(part, 'state') === 'streaming');\n\nconst isProse = (parts: MessagePart[], metadata: Record<string, unknown> | undefined): boolean =>\n parts.every(part => {\n if (part.type !== 'text') return true;\n const text = readField(part, 'text');\n return typeof text !== 'string' || messageTextKind(text, metadata) === 'prose';\n });\n\nconst getMessageMetadata = (message: MastraDBMessage): Record<string, unknown> | undefined =>\n isRecord(message.content.metadata) ? message.content.metadata : undefined;\n\nconst getDataParts = (message: MastraDBMessage): DataMessagePart[] =>\n message.content.parts\n .filter(\n (part): part is Extract<MessagePart, { type: string }> =>\n typeof part.type === 'string' && part.type.startsWith('data-'),\n )\n .map(part => ({\n type: part.type,\n name: 'name' in part && typeof part.name === 'string' ? part.name : undefined,\n data: readField(part, 'data'),\n }));\n\nconst getTextFromParts = (message: MastraDBMessage): string =>\n message.content.parts\n .filter(\n (part): part is Extract<MessagePart, { type: 'text'; text: string }> =>\n part.type === 'text' && typeof readField(part, 'text') === 'string',\n )\n .map(part => part.text)\n .join('\\n');\n\nconst hasVisibleAssistantText = (message: MastraDBMessage, metadata: Record<string, unknown> | undefined): boolean =>\n message.content.parts.some(part => {\n if (part.type !== 'text') return false;\n const text = readField(part, 'text');\n if (typeof text !== 'string' || text.trim().length === 0) return false;\n if (readField(metadata, 'completionResult') || readField(metadata, 'isTaskCompleteResult')) return false;\n return true;\n });\n\nconst getModelMetadata = (metadata: Record<string, unknown> | undefined) => {\n const custom = readField(metadata, 'custom');\n const modelMetadata = readField(custom, 'modelMetadata');\n const modelId = readField(modelMetadata, 'modelId');\n const modelProvider = readField(modelMetadata, 'modelProvider');\n if (typeof modelId !== 'string' || typeof modelProvider !== 'string') return undefined;\n return { modelId, modelProvider };\n};\n\nconst isPendingMessage = (message: MastraDBMessage): boolean => {\n if (message.content.metadata?.status === 'pending') return true;\n return message.content.parts.some(part => readField(readField(part, 'metadata'), 'status') === 'pending');\n};\nexport const MessageRow = memo(function MessageRow({\n message,\n hasModelList,\n isSpeaking,\n onReadAloud,\n onStopSpeaking,\n readOnly,\n footer,\n className,\n ...rootProps\n}: MessageRowProps) {\n const dbMessage = toDisplayMessage(message);\n const metadata = getMessageMetadata(message);\n const modelMetadata = hasModelList ? getModelMetadata(metadata) : undefined;\n const dataParts = useMemo(() => getDataParts(message), [message]);\n const running = useChatRunning();\n const isRunning = running.isRunning && running.activeRunId !== undefined && metadata?.runId === running.activeRunId;\n const { data: mcpAppTools } = useMcpAppTools();\n const parts = dbMessage?.content.parts ?? NO_PARTS;\n const revealed = useRevealedParts(parts, isStreaming(parts));\n const shownParts = isProse(parts, metadata) ? revealed : parts;\n const revealing = shownParts !== parts;\n\n const toolContext = useMemo<ToolCardContext>(() => ({ metadata, mcpAppTools }), [metadata, mcpAppTools]);\n const toolGroups = useMemo(() => collectToolGroups(shownParts, toolContext), [shownParts, toolContext]);\n\n const sharedRenderers = useMemo<MessageRenderers>(() => {\n const renderTool = (part: ToolPart) => {\n const fields = readToolPart(part);\n const group = toolGroups.byFirstKey.get(fields.toolCallId);\n if (group) {\n const members = group.map(readToolPart);\n return (\n <>\n {members.map(member => (\n <ToolCallEffects key={member.toolCallId} {...member} readOnly={readOnly} />\n ))}\n <Arriving>\n <ToolCallGroup\n steps={members.map(member => ({\n toolName: member.toolName,\n args: member.input,\n status: badgeStatus(member.state, isRunning),\n hasResult: isSettledState(member.state),\n }))}\n >\n {members.map(member => {\n const incomplete = !isRunning && !isSettledState(member.state) && member.state !== 'output-error';\n return (\n <div\n key={member.toolCallId}\n role=\"group\"\n aria-label={member.toolName}\n className=\"flex items-start gap-2\"\n >\n <div className=\"min-w-0 flex-1\">\n <ToolCard {...member} metadata={metadata} dataParts={dataParts} readOnly={readOnly} />\n </div>\n {incomplete && (\n <Txt as=\"span\" variant=\"meta\" className=\"mt-1 shrink-0\">\n Incomplete\n </Txt>\n )}\n </div>\n );\n })}\n </ToolCallGroup>\n </Arriving>\n </>\n );\n }\n if (toolGroups.memberKeys.has(fields.toolCallId)) return null;\n return (\n <>\n <ToolCallEffects {...fields} readOnly={readOnly} />\n <Arriving>\n <ToolCard {...fields} metadata={metadata} dataParts={dataParts} readOnly={readOnly} />\n </Arriving>\n </>\n );\n };\n return {\n Reasoning: part => <ReasoningPartRenderer part={part} />,\n Data: part => (\n <Arriving>\n <DataPartRenderer part={part} />\n </Arriving>\n ),\n ToolInvocation: renderTool,\n DynamicTool: renderTool,\n Error: (part: MastraErrorPart) => (\n <Notice variant=\"destructive\" title={part.error.name ?? 'Error'}>\n <Notice.Message>{part.error.message}</Notice.Message>\n </Notice>\n ),\n };\n }, [metadata, dataParts, readOnly, toolGroups, isRunning]);\n\n const userRenderers = useMemo<MessageRenderers>(\n () => ({\n ...sharedRenderers,\n Text: part => <UserTextPartRenderer part={part} metadata={metadata} />,\n File: part => <UserFilePartRenderer part={part} />,\n }),\n [sharedRenderers, metadata],\n );\n\n const assistantRenderers = useMemo<MessageRenderers>(\n () => ({\n ...sharedRenderers,\n Text: part => <AssistantTextPartRenderer part={part} metadata={metadata} revealing={revealing} />,\n }),\n [sharedRenderers, metadata, revealing],\n );\n\n if (dbMessage === null) return null;\n const shownMessage = revealing ? { ...dbMessage, content: { ...dbMessage.content, parts: shownParts } } : dbMessage;\n const displayRole = dbMessage.role;\n\n if (displayRole === 'user') {\n const soleText = parts.length === 1 && parts[0]?.type === 'text' ? readField(parts[0], 'text') : undefined;\n const skillActivation = typeof soleText === 'string' ? parseSkillActivation(soleText) : undefined;\n if (skillActivation) {\n return (\n <Message\n {...rootProps}\n from=\"assistant\"\n className={className}\n data-message-id={message.id}\n footer={footer && <MessageActions visibility={readOnly ? 'hover' : 'always'}>{footer}</MessageActions>}\n >\n <SkillMessage activation={skillActivation} />\n </Message>\n );\n }\n\n const { attachments, content } = splitMessageAttachments(shownMessage.content.parts ?? []);\n const contentMessage = { ...shownMessage, content: { ...shownMessage.content, parts: content } };\n const isPending = isPendingMessage(message);\n const text = getTextFromParts(contentMessage);\n const canCopy = text.trim().length > 0;\n\n return (\n <Message\n {...rootProps}\n from=\"user\"\n className={className}\n data-message-id={message.id}\n pending={isPending}\n attachments={attachments.length > 0 && <MessageAttachments parts={attachments} />}\n footer={\n <MessageActions>\n {canCopy && <MessageCopyButton text={text} />}\n <DatasetSaveAction messageText={text} />\n {footer}\n </MessageActions>\n }\n >\n {(attachments.length === 0 || content.length > 0) && (\n <MessageFactory message={contentMessage} {...userRenderers} status={messageStatusRenderers} />\n )}\n </Message>\n );\n }\n\n const showActionBar = hasVisibleAssistantText(message, metadata);\n\n return (\n <Message\n {...rootProps}\n from=\"assistant\"\n className={className}\n data-message-id={message.id}\n footer={\n (showActionBar || footer) && (\n <MessageActions visibility={readOnly ? 'hover' : 'always'}>\n {showActionBar && (\n <AssistantMessageActions\n text={getTextFromParts(message)}\n modelMetadata={modelMetadata}\n isSpeaking={isSpeaking}\n onReadAloud={onReadAloud}\n onStopSpeaking={onStopSpeaking}\n />\n )}\n {footer && <MessageActions>{footer}</MessageActions>}\n </MessageActions>\n )\n }\n >\n <ChatRunningContext.Provider value={{ ...running, isRunning }}>\n <MessageFactory message={shownMessage} {...assistantRenderers} status={messageStatusRenderers} />\n </ChatRunningContext.Provider>\n </Message>\n );\n});\n"],"names":["isRecord","isUserSignalType","getSignalType","toReactiveSignalData","isSignalData","messageTextKind","memo","MessageRow","message","useMemo","useChatRunning","useMcpAppTools","useRevealedParts","collectToolGroups","readToolPart","jsxs","Fragment","jsx","ToolCallEffects","Arriving","ToolCallGroup","badgeStatus","isSettledState","ToolCard","Txt","ReasoningPartRenderer","DataPartRenderer","Notice","UserTextPartRenderer","UserFilePartRenderer","AssistantTextPartRenderer","parseSkillActivation","Message","MessageActions","SkillMessage","splitMessageAttachments","MessageAttachments","MessageCopyButton","DatasetSaveAction","MessageFactory","messageStatusRenderers","AssistantMessageActions","ChatRunningContext"],"mappings":"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"}
@@ -6,7 +6,6 @@ import { MessageAttachments } from '../attachments/message-attachments.es.js';
6
6
  import { splitMessageAttachments } from '../attachments/split-message-attachments.es.js';
7
7
  import { useChatRunning, ChatRunningContext } from '../context/chat-context.es.js';
8
8
  import 'lucide-react';
9
- import '../../../Button-C8QDEN9j.js';
10
9
  import { T as Txt } from '../../../Txt-BuzYj7Vy.js';
11
10
  import '../context/tool-call-context.es.js';
12
11
  import { isRecord, isUserSignalType, getSignalType, toReactiveSignalData, isSignalData } from './signal-data.es.js';
@@ -24,7 +23,7 @@ import { UserTextPartRenderer } from './renderers/user-text-part-renderer.es.js'
24
23
  import { parseSkillActivation } from './skill-activation.es.js';
25
24
  import { SkillMessage } from './skill-message.es.js';
26
25
  import { ToolCallEffects } from '../tools/tool-call-effects.es.js';
27
- import { T as ToolCard } from '../../../tool-card-BtPh44u6.js';
26
+ import { T as ToolCard } from '../../../tool-card-C8IrtMuQ.js';
28
27
  import { isSettledState, badgeStatus } from '../tools/tool-card-kind.es.js';
29
28
  import { collectToolGroups } from '../tools/tool-groups.es.js';
30
29
  import { u as useRevealedParts } from '../../../message-reveal-B3LLhUvk.js';
@@ -1 +1 @@
1
- {"version":3,"file":"message-row.es.js","sources":["../../../../src/domains/chat/messages/message-row.tsx"],"sourcesContent":["import type { MastraDBMessage, MastraErrorPart } from '@mastra/core/agent/message-list';\nimport { useMcpAppTools } from '@mastra/react/hooks/mcps';\nimport { MessageFactory } from '@mastra/react/ui';\nimport type { MessageRenderers } from '@mastra/react/ui';\nimport { memo, useMemo } from 'react';\nimport type { ReactNode } from 'react';\nimport { MessageAttachments } from '../attachments/message-attachments';\nimport { splitMessageAttachments } from '../attachments/split-message-attachments';\nimport { AssistantMessageActions, DatasetSaveAction } from '@/domains/chat';\nimport { ChatRunningContext, useChatRunning } from '@/domains/chat/context/chat-context';\nimport { AssistantTextPartRenderer } from '@/domains/chat/messages/renderers/assistant-text-part-renderer';\nimport { DataPartRenderer } from '@/domains/chat/messages/renderers/data-part-renderer';\nimport { messageTextKind } from '@/domains/chat/messages/renderers/message-text-kind';\nimport { ReasoningPartRenderer } from '@/domains/chat/messages/renderers/reasoning-part-renderer';\nimport { messageStatusRenderers } from '@/domains/chat/messages/renderers/status-renderers';\nimport { readToolPart } from '@/domains/chat/messages/renderers/tool-part';\nimport type { ToolPart } from '@/domains/chat/messages/renderers/tool-part';\nimport { UserFilePartRenderer } from '@/domains/chat/messages/renderers/user-file-part-renderer';\nimport { UserTextPartRenderer } from '@/domains/chat/messages/renderers/user-text-part-renderer';\nimport {\n getSignalType,\n isRecord,\n isSignalData,\n isUserSignalType,\n toReactiveSignalData,\n} from '@/domains/chat/messages/signal-data';\nimport { parseSkillActivation } from '@/domains/chat/messages/skill-activation';\nimport { SkillMessage } from '@/domains/chat/messages/skill-message';\nimport { ToolCallEffects } from '@/domains/chat/tools/tool-call-effects';\nimport { ToolCard } from '@/domains/chat/tools/tool-card';\nimport type { DataMessagePart } from '@/domains/chat/tools/tool-card';\nimport { badgeStatus, isSettledState } from '@/domains/chat/tools/tool-card-kind';\nimport type { ToolCardContext } from '@/domains/chat/tools/tool-card-kind';\nimport { collectToolGroups } from '@/domains/chat/tools/tool-groups';\nimport { useRevealedParts } from '@/ds/components/ai/message-reveal';\nimport { ToolCallGroup } from '@/ds/components/ai/tool-call';\nimport { Arriving } from '@/ds/components/Arrival';\nimport { Message, MessageActions, MessageCopyButton } from '@/ds/components/Message';\nimport { Notice } from '@/ds/components/Notice';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface MessageRowProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n message: MastraDBMessage;\n hasModelList?: boolean;\n isSpeaking?: boolean;\n onReadAloud?: (text: string) => void;\n onStopSpeaking?: () => void;\n readOnly?: boolean;\n footer?: ReactNode;\n}\n\ntype MessagePart = MastraDBMessage['content']['parts'][number];\n\nconst readField = (value: unknown, key: string): unknown => (isRecord(value) ? value[key] : undefined);\n\nconst getMessageDisplayRole = (message: MastraDBMessage): MastraDBMessage['role'] | null => {\n if (message.role === 'assistant' || message.role === 'user' || message.role === 'system') return message.role;\n if (message.role === 'signal') return isUserSignalType(getSignalType(message)) ? 'user' : 'assistant';\n return null;\n};\n\nconst toReactiveSignalMessage = (message: MastraDBMessage): MastraDBMessage | null => {\n const data = toReactiveSignalData(message);\n if (!isSignalData(data)) return null;\n const parts: MastraDBMessage['content']['parts'] = [{ type: 'data-signal', data }];\n return {\n ...message,\n role: 'assistant',\n content: { ...message.content, parts },\n };\n};\n\nconst toDisplayMessage = (message: MastraDBMessage): MastraDBMessage | null => {\n const displayRole = getMessageDisplayRole(message);\n if (displayRole === null) return null;\n if (message.role === 'signal' && displayRole === 'assistant') return toReactiveSignalMessage(message);\n if (displayRole === message.role) return message;\n return { ...message, role: displayRole };\n};\n\nconst NO_PARTS: MessagePart[] = [];\n\nconst isStreaming = (parts: MessagePart[]): boolean => parts.some(part => readField(part, 'state') === 'streaming');\n\nconst isProse = (parts: MessagePart[], metadata: Record<string, unknown> | undefined): boolean =>\n parts.every(part => {\n if (part.type !== 'text') return true;\n const text = readField(part, 'text');\n return typeof text !== 'string' || messageTextKind(text, metadata) === 'prose';\n });\n\nconst getMessageMetadata = (message: MastraDBMessage): Record<string, unknown> | undefined =>\n isRecord(message.content.metadata) ? message.content.metadata : undefined;\n\nconst getDataParts = (message: MastraDBMessage): DataMessagePart[] =>\n message.content.parts\n .filter(\n (part): part is Extract<MessagePart, { type: string }> =>\n typeof part.type === 'string' && part.type.startsWith('data-'),\n )\n .map(part => ({\n type: part.type,\n name: 'name' in part && typeof part.name === 'string' ? part.name : undefined,\n data: readField(part, 'data'),\n }));\n\nconst getTextFromParts = (message: MastraDBMessage): string =>\n message.content.parts\n .filter(\n (part): part is Extract<MessagePart, { type: 'text'; text: string }> =>\n part.type === 'text' && typeof readField(part, 'text') === 'string',\n )\n .map(part => part.text)\n .join('\\n');\n\nconst hasVisibleAssistantText = (message: MastraDBMessage, metadata: Record<string, unknown> | undefined): boolean =>\n message.content.parts.some(part => {\n if (part.type !== 'text') return false;\n const text = readField(part, 'text');\n if (typeof text !== 'string' || text.trim().length === 0) return false;\n if (readField(metadata, 'completionResult') || readField(metadata, 'isTaskCompleteResult')) return false;\n return true;\n });\n\nconst getModelMetadata = (metadata: Record<string, unknown> | undefined) => {\n const custom = readField(metadata, 'custom');\n const modelMetadata = readField(custom, 'modelMetadata');\n const modelId = readField(modelMetadata, 'modelId');\n const modelProvider = readField(modelMetadata, 'modelProvider');\n if (typeof modelId !== 'string' || typeof modelProvider !== 'string') return undefined;\n return { modelId, modelProvider };\n};\n\nconst isPendingMessage = (message: MastraDBMessage): boolean => {\n if (message.content.metadata?.status === 'pending') return true;\n return message.content.parts.some(part => readField(readField(part, 'metadata'), 'status') === 'pending');\n};\nexport const MessageRow = memo(function MessageRow({\n message,\n hasModelList,\n isSpeaking,\n onReadAloud,\n onStopSpeaking,\n readOnly,\n footer,\n className,\n ...rootProps\n}: MessageRowProps) {\n const dbMessage = toDisplayMessage(message);\n const metadata = getMessageMetadata(message);\n const modelMetadata = hasModelList ? getModelMetadata(metadata) : undefined;\n const dataParts = useMemo(() => getDataParts(message), [message]);\n const running = useChatRunning();\n const isRunning = running.isRunning && running.activeRunId !== undefined && metadata?.runId === running.activeRunId;\n const { data: mcpAppTools } = useMcpAppTools();\n const parts = dbMessage?.content.parts ?? NO_PARTS;\n const revealed = useRevealedParts(parts, isStreaming(parts));\n const shownParts = isProse(parts, metadata) ? revealed : parts;\n const revealing = shownParts !== parts;\n\n const toolContext = useMemo<ToolCardContext>(() => ({ metadata, mcpAppTools }), [metadata, mcpAppTools]);\n const toolGroups = useMemo(() => collectToolGroups(shownParts, toolContext), [shownParts, toolContext]);\n\n const sharedRenderers = useMemo<MessageRenderers>(() => {\n const renderTool = (part: ToolPart) => {\n const fields = readToolPart(part);\n const group = toolGroups.byFirstKey.get(fields.toolCallId);\n if (group) {\n const members = group.map(readToolPart);\n return (\n <>\n {members.map(member => (\n <ToolCallEffects key={member.toolCallId} {...member} readOnly={readOnly} />\n ))}\n <Arriving>\n <ToolCallGroup\n steps={members.map(member => ({\n toolName: member.toolName,\n args: member.input,\n status: badgeStatus(member.state, isRunning),\n hasResult: isSettledState(member.state),\n }))}\n >\n {members.map(member => {\n const incomplete = !isRunning && !isSettledState(member.state) && member.state !== 'output-error';\n return (\n <div\n key={member.toolCallId}\n role=\"group\"\n aria-label={member.toolName}\n className=\"flex items-start gap-2\"\n >\n <div className=\"min-w-0 flex-1\">\n <ToolCard {...member} metadata={metadata} dataParts={dataParts} readOnly={readOnly} />\n </div>\n {incomplete && (\n <Txt as=\"span\" variant=\"meta\" className=\"mt-1 shrink-0\">\n Incomplete\n </Txt>\n )}\n </div>\n );\n })}\n </ToolCallGroup>\n </Arriving>\n </>\n );\n }\n if (toolGroups.memberKeys.has(fields.toolCallId)) return null;\n return (\n <>\n <ToolCallEffects {...fields} readOnly={readOnly} />\n <Arriving>\n <ToolCard {...fields} metadata={metadata} dataParts={dataParts} readOnly={readOnly} />\n </Arriving>\n </>\n );\n };\n return {\n Reasoning: part => <ReasoningPartRenderer part={part} />,\n Data: part => (\n <Arriving>\n <DataPartRenderer part={part} />\n </Arriving>\n ),\n ToolInvocation: renderTool,\n DynamicTool: renderTool,\n Error: (part: MastraErrorPart) => (\n <Notice variant=\"destructive\" title={part.error.name ?? 'Error'}>\n <Notice.Message>{part.error.message}</Notice.Message>\n </Notice>\n ),\n };\n }, [metadata, dataParts, readOnly, toolGroups, isRunning]);\n\n const userRenderers = useMemo<MessageRenderers>(\n () => ({\n ...sharedRenderers,\n Text: part => <UserTextPartRenderer part={part} metadata={metadata} />,\n File: part => <UserFilePartRenderer part={part} />,\n }),\n [sharedRenderers, metadata],\n );\n\n const assistantRenderers = useMemo<MessageRenderers>(\n () => ({\n ...sharedRenderers,\n Text: part => <AssistantTextPartRenderer part={part} metadata={metadata} revealing={revealing} />,\n }),\n [sharedRenderers, metadata, revealing],\n );\n\n if (dbMessage === null) return null;\n const shownMessage = revealing ? { ...dbMessage, content: { ...dbMessage.content, parts: shownParts } } : dbMessage;\n const displayRole = dbMessage.role;\n\n if (displayRole === 'user') {\n const soleText = parts.length === 1 && parts[0]?.type === 'text' ? readField(parts[0], 'text') : undefined;\n const skillActivation = typeof soleText === 'string' ? parseSkillActivation(soleText) : undefined;\n if (skillActivation) {\n return (\n <Message\n {...rootProps}\n from=\"assistant\"\n className={className}\n data-message-id={message.id}\n footer={footer && <MessageActions visibility={readOnly ? 'hover' : 'always'}>{footer}</MessageActions>}\n >\n <SkillMessage activation={skillActivation} />\n </Message>\n );\n }\n\n const { attachments, content } = splitMessageAttachments(shownMessage.content.parts ?? []);\n const contentMessage = { ...shownMessage, content: { ...shownMessage.content, parts: content } };\n const isPending = isPendingMessage(message);\n const text = getTextFromParts(contentMessage);\n const canCopy = text.trim().length > 0;\n\n return (\n <Message\n {...rootProps}\n from=\"user\"\n className={className}\n data-message-id={message.id}\n pending={isPending}\n attachments={attachments.length > 0 && <MessageAttachments parts={attachments} />}\n footer={\n <MessageActions>\n {canCopy && <MessageCopyButton text={text} />}\n <DatasetSaveAction messageText={text} />\n {footer}\n </MessageActions>\n }\n >\n {(attachments.length === 0 || content.length > 0) && (\n <MessageFactory message={contentMessage} {...userRenderers} status={messageStatusRenderers} />\n )}\n </Message>\n );\n }\n\n const showActionBar = hasVisibleAssistantText(message, metadata);\n\n return (\n <Message\n {...rootProps}\n from=\"assistant\"\n className={className}\n data-message-id={message.id}\n footer={\n (showActionBar || footer) && (\n <MessageActions visibility={readOnly ? 'hover' : 'always'}>\n {showActionBar && (\n <AssistantMessageActions\n text={getTextFromParts(message)}\n modelMetadata={modelMetadata}\n isSpeaking={isSpeaking}\n onReadAloud={onReadAloud}\n onStopSpeaking={onStopSpeaking}\n />\n )}\n {footer && <MessageActions>{footer}</MessageActions>}\n </MessageActions>\n )\n }\n >\n <ChatRunningContext.Provider value={{ ...running, isRunning }}>\n <MessageFactory message={shownMessage} {...assistantRenderers} status={messageStatusRenderers} />\n </ChatRunningContext.Provider>\n </Message>\n );\n});\n"],"names":["MessageRow"],"mappings":"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"}
1
+ {"version":3,"file":"message-row.es.js","sources":["../../../../src/domains/chat/messages/message-row.tsx"],"sourcesContent":["import type { MastraDBMessage, MastraErrorPart } from '@mastra/core/agent/message-list';\nimport { useMcpAppTools } from '@mastra/react/hooks/mcps';\nimport { MessageFactory } from '@mastra/react/ui';\nimport type { MessageRenderers } from '@mastra/react/ui';\nimport { memo, useMemo } from 'react';\nimport type { ReactNode } from 'react';\nimport { MessageAttachments } from '../attachments/message-attachments';\nimport { splitMessageAttachments } from '../attachments/split-message-attachments';\nimport { AssistantMessageActions, DatasetSaveAction } from '@/domains/chat';\nimport { ChatRunningContext, useChatRunning } from '@/domains/chat/context/chat-context';\nimport { AssistantTextPartRenderer } from '@/domains/chat/messages/renderers/assistant-text-part-renderer';\nimport { DataPartRenderer } from '@/domains/chat/messages/renderers/data-part-renderer';\nimport { messageTextKind } from '@/domains/chat/messages/renderers/message-text-kind';\nimport { ReasoningPartRenderer } from '@/domains/chat/messages/renderers/reasoning-part-renderer';\nimport { messageStatusRenderers } from '@/domains/chat/messages/renderers/status-renderers';\nimport { readToolPart } from '@/domains/chat/messages/renderers/tool-part';\nimport type { ToolPart } from '@/domains/chat/messages/renderers/tool-part';\nimport { UserFilePartRenderer } from '@/domains/chat/messages/renderers/user-file-part-renderer';\nimport { UserTextPartRenderer } from '@/domains/chat/messages/renderers/user-text-part-renderer';\nimport {\n getSignalType,\n isRecord,\n isSignalData,\n isUserSignalType,\n toReactiveSignalData,\n} from '@/domains/chat/messages/signal-data';\nimport { parseSkillActivation } from '@/domains/chat/messages/skill-activation';\nimport { SkillMessage } from '@/domains/chat/messages/skill-message';\nimport { ToolCallEffects } from '@/domains/chat/tools/tool-call-effects';\nimport { ToolCard } from '@/domains/chat/tools/tool-card';\nimport type { DataMessagePart } from '@/domains/chat/tools/tool-card';\nimport { badgeStatus, isSettledState } from '@/domains/chat/tools/tool-card-kind';\nimport type { ToolCardContext } from '@/domains/chat/tools/tool-card-kind';\nimport { collectToolGroups } from '@/domains/chat/tools/tool-groups';\nimport { useRevealedParts } from '@/ds/components/ai/message-reveal';\nimport { ToolCallGroup } from '@/ds/components/ai/tool-call';\nimport { Arriving } from '@/ds/components/Arrival';\nimport { Message, MessageActions, MessageCopyButton } from '@/ds/components/Message';\nimport { Notice } from '@/ds/components/Notice';\nimport { Txt } from '@/ds/components/Txt';\n\nexport interface MessageRowProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n message: MastraDBMessage;\n hasModelList?: boolean;\n isSpeaking?: boolean;\n onReadAloud?: (text: string) => void;\n onStopSpeaking?: () => void;\n readOnly?: boolean;\n footer?: ReactNode;\n}\n\ntype MessagePart = MastraDBMessage['content']['parts'][number];\n\nconst readField = (value: unknown, key: string): unknown => (isRecord(value) ? value[key] : undefined);\n\nconst getMessageDisplayRole = (message: MastraDBMessage): MastraDBMessage['role'] | null => {\n if (message.role === 'assistant' || message.role === 'user' || message.role === 'system') return message.role;\n if (message.role === 'signal') return isUserSignalType(getSignalType(message)) ? 'user' : 'assistant';\n return null;\n};\n\nconst toReactiveSignalMessage = (message: MastraDBMessage): MastraDBMessage | null => {\n const data = toReactiveSignalData(message);\n if (!isSignalData(data)) return null;\n const parts: MastraDBMessage['content']['parts'] = [{ type: 'data-signal', data }];\n return {\n ...message,\n role: 'assistant',\n content: { ...message.content, parts },\n };\n};\n\nconst toDisplayMessage = (message: MastraDBMessage): MastraDBMessage | null => {\n const displayRole = getMessageDisplayRole(message);\n if (displayRole === null) return null;\n if (message.role === 'signal' && displayRole === 'assistant') return toReactiveSignalMessage(message);\n if (displayRole === message.role) return message;\n return { ...message, role: displayRole };\n};\n\nconst NO_PARTS: MessagePart[] = [];\n\nconst isStreaming = (parts: MessagePart[]): boolean => parts.some(part => readField(part, 'state') === 'streaming');\n\nconst isProse = (parts: MessagePart[], metadata: Record<string, unknown> | undefined): boolean =>\n parts.every(part => {\n if (part.type !== 'text') return true;\n const text = readField(part, 'text');\n return typeof text !== 'string' || messageTextKind(text, metadata) === 'prose';\n });\n\nconst getMessageMetadata = (message: MastraDBMessage): Record<string, unknown> | undefined =>\n isRecord(message.content.metadata) ? message.content.metadata : undefined;\n\nconst getDataParts = (message: MastraDBMessage): DataMessagePart[] =>\n message.content.parts\n .filter(\n (part): part is Extract<MessagePart, { type: string }> =>\n typeof part.type === 'string' && part.type.startsWith('data-'),\n )\n .map(part => ({\n type: part.type,\n name: 'name' in part && typeof part.name === 'string' ? part.name : undefined,\n data: readField(part, 'data'),\n }));\n\nconst getTextFromParts = (message: MastraDBMessage): string =>\n message.content.parts\n .filter(\n (part): part is Extract<MessagePart, { type: 'text'; text: string }> =>\n part.type === 'text' && typeof readField(part, 'text') === 'string',\n )\n .map(part => part.text)\n .join('\\n');\n\nconst hasVisibleAssistantText = (message: MastraDBMessage, metadata: Record<string, unknown> | undefined): boolean =>\n message.content.parts.some(part => {\n if (part.type !== 'text') return false;\n const text = readField(part, 'text');\n if (typeof text !== 'string' || text.trim().length === 0) return false;\n if (readField(metadata, 'completionResult') || readField(metadata, 'isTaskCompleteResult')) return false;\n return true;\n });\n\nconst getModelMetadata = (metadata: Record<string, unknown> | undefined) => {\n const custom = readField(metadata, 'custom');\n const modelMetadata = readField(custom, 'modelMetadata');\n const modelId = readField(modelMetadata, 'modelId');\n const modelProvider = readField(modelMetadata, 'modelProvider');\n if (typeof modelId !== 'string' || typeof modelProvider !== 'string') return undefined;\n return { modelId, modelProvider };\n};\n\nconst isPendingMessage = (message: MastraDBMessage): boolean => {\n if (message.content.metadata?.status === 'pending') return true;\n return message.content.parts.some(part => readField(readField(part, 'metadata'), 'status') === 'pending');\n};\nexport const MessageRow = memo(function MessageRow({\n message,\n hasModelList,\n isSpeaking,\n onReadAloud,\n onStopSpeaking,\n readOnly,\n footer,\n className,\n ...rootProps\n}: MessageRowProps) {\n const dbMessage = toDisplayMessage(message);\n const metadata = getMessageMetadata(message);\n const modelMetadata = hasModelList ? getModelMetadata(metadata) : undefined;\n const dataParts = useMemo(() => getDataParts(message), [message]);\n const running = useChatRunning();\n const isRunning = running.isRunning && running.activeRunId !== undefined && metadata?.runId === running.activeRunId;\n const { data: mcpAppTools } = useMcpAppTools();\n const parts = dbMessage?.content.parts ?? NO_PARTS;\n const revealed = useRevealedParts(parts, isStreaming(parts));\n const shownParts = isProse(parts, metadata) ? revealed : parts;\n const revealing = shownParts !== parts;\n\n const toolContext = useMemo<ToolCardContext>(() => ({ metadata, mcpAppTools }), [metadata, mcpAppTools]);\n const toolGroups = useMemo(() => collectToolGroups(shownParts, toolContext), [shownParts, toolContext]);\n\n const sharedRenderers = useMemo<MessageRenderers>(() => {\n const renderTool = (part: ToolPart) => {\n const fields = readToolPart(part);\n const group = toolGroups.byFirstKey.get(fields.toolCallId);\n if (group) {\n const members = group.map(readToolPart);\n return (\n <>\n {members.map(member => (\n <ToolCallEffects key={member.toolCallId} {...member} readOnly={readOnly} />\n ))}\n <Arriving>\n <ToolCallGroup\n steps={members.map(member => ({\n toolName: member.toolName,\n args: member.input,\n status: badgeStatus(member.state, isRunning),\n hasResult: isSettledState(member.state),\n }))}\n >\n {members.map(member => {\n const incomplete = !isRunning && !isSettledState(member.state) && member.state !== 'output-error';\n return (\n <div\n key={member.toolCallId}\n role=\"group\"\n aria-label={member.toolName}\n className=\"flex items-start gap-2\"\n >\n <div className=\"min-w-0 flex-1\">\n <ToolCard {...member} metadata={metadata} dataParts={dataParts} readOnly={readOnly} />\n </div>\n {incomplete && (\n <Txt as=\"span\" variant=\"meta\" className=\"mt-1 shrink-0\">\n Incomplete\n </Txt>\n )}\n </div>\n );\n })}\n </ToolCallGroup>\n </Arriving>\n </>\n );\n }\n if (toolGroups.memberKeys.has(fields.toolCallId)) return null;\n return (\n <>\n <ToolCallEffects {...fields} readOnly={readOnly} />\n <Arriving>\n <ToolCard {...fields} metadata={metadata} dataParts={dataParts} readOnly={readOnly} />\n </Arriving>\n </>\n );\n };\n return {\n Reasoning: part => <ReasoningPartRenderer part={part} />,\n Data: part => (\n <Arriving>\n <DataPartRenderer part={part} />\n </Arriving>\n ),\n ToolInvocation: renderTool,\n DynamicTool: renderTool,\n Error: (part: MastraErrorPart) => (\n <Notice variant=\"destructive\" title={part.error.name ?? 'Error'}>\n <Notice.Message>{part.error.message}</Notice.Message>\n </Notice>\n ),\n };\n }, [metadata, dataParts, readOnly, toolGroups, isRunning]);\n\n const userRenderers = useMemo<MessageRenderers>(\n () => ({\n ...sharedRenderers,\n Text: part => <UserTextPartRenderer part={part} metadata={metadata} />,\n File: part => <UserFilePartRenderer part={part} />,\n }),\n [sharedRenderers, metadata],\n );\n\n const assistantRenderers = useMemo<MessageRenderers>(\n () => ({\n ...sharedRenderers,\n Text: part => <AssistantTextPartRenderer part={part} metadata={metadata} revealing={revealing} />,\n }),\n [sharedRenderers, metadata, revealing],\n );\n\n if (dbMessage === null) return null;\n const shownMessage = revealing ? { ...dbMessage, content: { ...dbMessage.content, parts: shownParts } } : dbMessage;\n const displayRole = dbMessage.role;\n\n if (displayRole === 'user') {\n const soleText = parts.length === 1 && parts[0]?.type === 'text' ? readField(parts[0], 'text') : undefined;\n const skillActivation = typeof soleText === 'string' ? parseSkillActivation(soleText) : undefined;\n if (skillActivation) {\n return (\n <Message\n {...rootProps}\n from=\"assistant\"\n className={className}\n data-message-id={message.id}\n footer={footer && <MessageActions visibility={readOnly ? 'hover' : 'always'}>{footer}</MessageActions>}\n >\n <SkillMessage activation={skillActivation} />\n </Message>\n );\n }\n\n const { attachments, content } = splitMessageAttachments(shownMessage.content.parts ?? []);\n const contentMessage = { ...shownMessage, content: { ...shownMessage.content, parts: content } };\n const isPending = isPendingMessage(message);\n const text = getTextFromParts(contentMessage);\n const canCopy = text.trim().length > 0;\n\n return (\n <Message\n {...rootProps}\n from=\"user\"\n className={className}\n data-message-id={message.id}\n pending={isPending}\n attachments={attachments.length > 0 && <MessageAttachments parts={attachments} />}\n footer={\n <MessageActions>\n {canCopy && <MessageCopyButton text={text} />}\n <DatasetSaveAction messageText={text} />\n {footer}\n </MessageActions>\n }\n >\n {(attachments.length === 0 || content.length > 0) && (\n <MessageFactory message={contentMessage} {...userRenderers} status={messageStatusRenderers} />\n )}\n </Message>\n );\n }\n\n const showActionBar = hasVisibleAssistantText(message, metadata);\n\n return (\n <Message\n {...rootProps}\n from=\"assistant\"\n className={className}\n data-message-id={message.id}\n footer={\n (showActionBar || footer) && (\n <MessageActions visibility={readOnly ? 'hover' : 'always'}>\n {showActionBar && (\n <AssistantMessageActions\n text={getTextFromParts(message)}\n modelMetadata={modelMetadata}\n isSpeaking={isSpeaking}\n onReadAloud={onReadAloud}\n onStopSpeaking={onStopSpeaking}\n />\n )}\n {footer && <MessageActions>{footer}</MessageActions>}\n </MessageActions>\n )\n }\n >\n <ChatRunningContext.Provider value={{ ...running, isRunning }}>\n <MessageFactory message={shownMessage} {...assistantRenderers} status={messageStatusRenderers} />\n </ChatRunningContext.Provider>\n </Message>\n );\n});\n"],"names":["MessageRow"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { TripwireNotice } from '../tripwire-notice.es.js';
5
5
  import { messageTextKind, errorMessage } from './message-text-kind.es.js';
6
6
  import { B as Badge } from '../../../../Badge-3-G2I_cx.js';
7
7
  import { D as DisclosureChevron } from '../../../../disclosure-chevron-BWZ8Alz1.js';
8
- import { M as MarkdownRenderer } from '../../../../markdown-renderer-D5Wjk1Cs.js';
8
+ import { M as MarkdownRenderer } from '../../../../markdown-renderer-Cly6VMDr.js';
9
9
  import { N as Notice } from '../../../../Notice-Wy1grdLu.js';
10
10
  import { Icon } from '../../../../icons/Icon.es.js';
11
11
 
@@ -1,6 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { getReasoningContent } from '../reasoning-content.es.js';
3
- import { R as ReasoningActivity } from '../../../../reasoning-activity-CIuVSAGA.js';
3
+ import { R as ReasoningActivity } from '../../../../reasoning-activity-B1r4JQxm.js';
4
4
 
5
5
  const ReasoningPartRenderer = ({ part, defaultOpen }) => {
6
6
  const content = getReasoningContent(part);
@@ -2,7 +2,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { BookOpen } from 'lucide-react';
3
3
  import { g as ActivityItem } from '../../../activity-BsrB5ADa.js';
4
4
  import { S as SignalActivity } from '../../../signal-activity-BiWlOFhu.js';
5
- import { M as MarkdownRenderer } from '../../../markdown-renderer-D5Wjk1Cs.js';
5
+ import { M as MarkdownRenderer } from '../../../markdown-renderer-Cly6VMDr.js';
6
6
  import { S as ScrollArea } from '../../../scroll-area-BywIlj3F.js';
7
7
 
8
8
  function SkillMessage({ activation }) {
@@ -1,7 +1,7 @@
1
1
  import 'react/jsx-runtime';
2
2
  import '@mastra/ai-sdk/ui';
3
3
  import '@mastra/react/hooks/agents';
4
- export { a as AgentBadgeWrapper } from '../../../../tool-card-BtPh44u6.js';
4
+ export { a as AgentBadgeWrapper } from '../../../../tool-card-C8IrtMuQ.js';
5
5
  import './resolve-child-messages.es.js';
6
6
  import '../../components/loading-badge.es.js';
7
7
  //# sourceMappingURL=agent-badge-wrapper.es.js.map
@@ -1,7 +1,7 @@
1
1
  import 'react/jsx-runtime';
2
2
  import 'react';
3
3
  import 'react-markdown';
4
- export { A as AgentBadge } from '../../../../tool-card-BtPh44u6.js';
4
+ export { A as AgentBadge } from '../../../../tool-card-C8IrtMuQ.js';
5
5
  import './background-task-metadata-dialog.es.js';
6
6
  import '../../components/network-choice-metadata-dialog.es.js';
7
7
  import '../../components/section-label.es.js';
@@ -10,6 +10,6 @@ import './tool-approval-badge.es.js';
10
10
  import '../../../../tool-call-mono-BAYC7OZl.js';
11
11
  import 'lucide-react';
12
12
  import '../../../../Button-C8QDEN9j.js';
13
- import '../../../../code-editor-D69saH4C.js';
13
+ import '../../../../code-editor-DgfDaPAD.js';
14
14
  import '../../../../icons/AgentIcon.es.js';
15
15
  //# sourceMappingURL=agent-badge.es.js.map
@@ -4,7 +4,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
5
  const jsxRuntime = require('react/jsx-runtime');
6
6
  const domains_chat_context_toolCallContext = require('../../context/tool-call-context.cjs.js');
7
- const askUserCard = require('../../../../ask-user-card-40a18Qea.cjs');
7
+ const askUserCard = require('../../../../ask-user-card-g8cqh8KI.cjs');
8
8
 
9
9
  const AskUserBadge = ({ toolCallId, suspendPayload, result }) => {
10
10
  const { approveToolcall, isRunning, toolCallApprovals } = domains_chat_context_toolCallContext.useToolCall();
@@ -1,6 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { useToolCall } from '../../context/tool-call-context.es.js';
3
- import { A as AskUser } from '../../../../ask-user-card-xR8YiiQa.js';
3
+ import { A as AskUser } from '../../../../ask-user-card-CwKfl6M2.js';
4
4
 
5
5
  const AskUserBadge = ({ toolCallId, suspendPayload, result }) => {
6
6
  const { approveToolcall, isRunning, toolCallApprovals } = useToolCall();
@@ -8,7 +8,7 @@ const lucideReact = require('lucide-react');
8
8
  const React = require('react');
9
9
  const Button = require('../../../../Button-BfZzgZrA.cjs');
10
10
  const codeEditor = require('../../../../code-editor-Dg6Y6Q8z.cjs');
11
- const dialog = require('../../../../dialog-wL-fuFON.cjs');
11
+ const dialog = require('../../../../dialog-DQI9ChYf.cjs');
12
12
  const Txt = require('../../../../Txt-DXjXpX9r.cjs');
13
13
  const hooks_useTimeDiff = require('../../../../hooks/use-time-diff.cjs.js');
14
14
  const utils_number = require('../../../../utils/number.cjs.js');
@@ -3,8 +3,8 @@ import { useGetBackgroundTaskById, useBackgroundTaskStream } from '@mastra/react
3
3
  import { Share2, Loader2Icon } from 'lucide-react';
4
4
  import { useState } from 'react';
5
5
  import { B as Button } from '../../../../Button-C8QDEN9j.js';
6
- import { C as CodeEditor } from '../../../../code-editor-D69saH4C.js';
7
- import { D as Dialog, d as DialogContent, g as DialogHeader, j as DialogTitle, e as DialogDescription, a as DialogBody } from '../../../../dialog-BYsQZGIj.js';
6
+ import { C as CodeEditor } from '../../../../code-editor-DgfDaPAD.js';
7
+ import { D as Dialog, d as DialogContent, g as DialogHeader, j as DialogTitle, e as DialogDescription, a as DialogBody } from '../../../../dialog-DlZmNahd.js';
8
8
  import { T as Txt } from '../../../../Txt-BuzYj7Vy.js';
9
9
  import { useTimeDiff } from '../../../../hooks/use-time-diff.es.js';
10
10
  import { toSigFigs } from '../../../../utils/number.es.js';
@@ -3,8 +3,8 @@ import { useState, useEffect } from 'react';
3
3
  import { SectionLabel } from '../../components/section-label.es.js';
4
4
  import { ToolApprovalBadge } from './tool-approval-badge.es.js';
5
5
  import { C as Code } from '../../../../code-DAXWNzvf.js';
6
- import { C as CodeBlock } from '../../../../code-block-BQZUoOfS.js';
7
- import { C as CodeEditor } from '../../../../code-editor-D69saH4C.js';
6
+ import { C as CodeBlock } from '../../../../code-block-9sT-CaoF.js';
7
+ import { C as CodeEditor } from '../../../../code-editor-DgfDaPAD.js';
8
8
  import { ToolCoinIcon } from '../../../../icons/ToolCoinIcon.es.js';
9
9
  import { formatTypeScript } from '../../../../utils/formatting.es.js';
10
10
 
@@ -4,7 +4,7 @@ import { parseToolArgs, workspaceMetadata } from './workspace-data-parts.es.js';
4
4
  import { WorkspaceLink } from './workspace-link.es.js';
5
5
  import { awaitsToolApproval } from './awaits-tool-approval.es.js';
6
6
  import { ToolApprovalBadge } from './tool-approval-badge.es.js';
7
- import { T as ToolCallArguments } from '../../../../tool-call-arguments-RKyYP3xh.js';
7
+ import { T as ToolCallArguments } from '../../../../tool-call-arguments-B86JP3Dy.js';
8
8
  import { T as ToolCallOutput } from '../../../../tool-call-output-CO6lqtGh.js';
9
9
  import { p as presentTool } from '../../../../tool-presentation-BXAo24Ir.js';
10
10
  import { T as Txt } from '../../../../Txt-BuzYj7Vy.js';
@@ -4,7 +4,7 @@ import { formatTokens, extractedValueEntries, formatExtractedValue, compressionR
4
4
  import { ObservationRenderer } from './observation-renderer.es.js';
5
5
  import { g as ActivityItem } from '../../../../activity-BsrB5ADa.js';
6
6
  import { C as Code } from '../../../../code-DAXWNzvf.js';
7
- import { M as MarkdownRenderer } from '../../../../markdown-renderer-D5Wjk1Cs.js';
7
+ import { M as MarkdownRenderer } from '../../../../markdown-renderer-Cly6VMDr.js';
8
8
  import { T as Txt } from '../../../../Txt-BuzYj7Vy.js';
9
9
  import { formatDuration } from '../../../../utils/duration.es.js';
10
10
 
@@ -1,7 +1,7 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { useMemo } from 'react';
3
3
  import { observationPriorityTone, observationPriorityByEmoji } from '../../../memory/lib/observation-priority.es.js';
4
- import { M as MarkdownRenderer } from '../../../../markdown-renderer-D5Wjk1Cs.js';
4
+ import { M as MarkdownRenderer } from '../../../../markdown-renderer-Cly6VMDr.js';
5
5
  import { T as Txt } from '../../../../Txt-BuzYj7Vy.js';
6
6
  import { c as cn } from '../../../../cn-coERSHz5.js';
7
7
 
@@ -2,7 +2,7 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { BadgeWrapper } from '../../components/badge-wrapper.es.js';
3
3
  import { useOptionalToolCall } from '../../context/tool-call-context.es.js';
4
4
  import { awaitsToolApproval } from './awaits-tool-approval.es.js';
5
- import { a as ToolApprovalActions, b as ToolApprovalStatus } from '../../../../tool-approval-nsbG8-qI.js';
5
+ import { a as ToolApprovalActions, b as ToolApprovalStatus } from '../../../../tool-approval-BQ6sDvyS.js';
6
6
 
7
7
  function useToolApproval(request) {
8
8
  const { toolCallId, toolApprovalMetadata, toolName, isNetwork, isGenerateMode } = request;
@@ -5,10 +5,10 @@ import { SectionLabel } from '../../components/section-label.es.js';
5
5
  import { awaitsToolApproval } from './awaits-tool-approval.es.js';
6
6
  import { ToolApprovalBadge } from './tool-approval-badge.es.js';
7
7
  import { s as stripSerializedAnsi } from '../../../../ansi-Cq_bKF5J.js';
8
- import { T as ToolCallArguments } from '../../../../tool-call-arguments-RKyYP3xh.js';
8
+ import { T as ToolCallArguments } from '../../../../tool-call-arguments-B86JP3Dy.js';
9
9
  import { T as ToolCallOutput } from '../../../../tool-call-output-CO6lqtGh.js';
10
10
  import { p as presentTool, s as stringifyToolValue, h as hasToolArguments } from '../../../../tool-presentation-BXAo24Ir.js';
11
- import { C as CodeEditor } from '../../../../code-editor-D69saH4C.js';
11
+ import { C as CodeEditor } from '../../../../code-editor-DgfDaPAD.js';
12
12
 
13
13
  function formatArgs(args) {
14
14
  try {
@@ -15,7 +15,6 @@ const domains_chat_tools_badges_toolApprovalBadge = require('./tool-approval-bad
15
15
  const domains_requestContext_hooks_useEntityRequestContext = require('../../../request-context/hooks/use-entity-request-context.cjs.js');
16
16
  const domains_workflows_context_workflowRunContext = require('../../../workflows/context/workflow-run-context.cjs.js');
17
17
  require('@tanstack/react-query');
18
- require('../../../../toast-C8a7bWV8.cjs');
19
18
  const domains_workflows_context_workflowStepDetailContext = require('../../../workflows/context/workflow-step-detail-context.cjs.js');
20
19
  const domains_workflows_context_workflowStepDetailProvider = require('../../../workflows/context/workflow-step-detail-provider.cjs.js');
21
20
  const domains_workflows_context_workflowSelectedStepContext = require('../../../workflows/context/workflow-selected-step-context.cjs.js');
@@ -25,7 +24,6 @@ require('superjson');
25
24
  require('zod');
26
25
  require('../../../workflows/workflow/utils.cjs.js');
27
26
  const Button = require('../../../../Button-BfZzgZrA.cjs');
28
- require('../../../../field-control-aria-WzMGs0A4.cjs');
29
27
  require('@mastra/core/utils/safe-stringify');
30
28
  const codeEditor = require('../../../../code-editor-Dg6Y6Q8z.cjs');
31
29
  require('@base-ui/react/use-render');
@@ -39,6 +37,8 @@ require('@autoform/react');
39
37
  require('@lukeed/uuid');
40
38
  require('../../../../lib/form/dynamic-form.cjs.js');
41
39
  const icons_WorkflowIcon = require('../../../../icons/WorkflowIcon.cjs.js');
40
+ require('../../../../data-list-_yDPF5wR.cjs');
41
+ require('../../../../keyboard/keyboard-shortcuts-context.cjs.js');
42
42
  const lib_framework = require('../../../../lib/framework.cjs.js');
43
43
  require('../../../workflows/components/workflow-information.cjs.js');
44
44
  require('@base-ui/react/combobox');
@@ -11,7 +11,6 @@ import { ToolApprovalBadge } from './tool-approval-badge.es.js';
11
11
  import { useEntityRequestContext } from '../../../request-context/hooks/use-entity-request-context.es.js';
12
12
  import { WorkflowRunContext } from '../../../workflows/context/workflow-run-context.es.js';
13
13
  import '@tanstack/react-query';
14
- import '../../../../toast-WCmYXnuT.js';
15
14
  import { useWorkflowStepDetail } from '../../../workflows/context/workflow-step-detail-context.es.js';
16
15
  import { WorkflowStepDetailProvider } from '../../../workflows/context/workflow-step-detail-provider.es.js';
17
16
  import { WorkflowSelectedStepProvider } from '../../../workflows/context/workflow-selected-step-context.es.js';
@@ -21,9 +20,8 @@ import 'superjson';
21
20
  import 'zod';
22
21
  import '../../../workflows/workflow/utils.es.js';
23
22
  import { B as Button } from '../../../../Button-C8QDEN9j.js';
24
- import '../../../../field-control-aria-DB6y41tQ.js';
25
23
  import '@mastra/core/utils/safe-stringify';
26
- import { C as CodeEditor } from '../../../../code-editor-D69saH4C.js';
24
+ import { C as CodeEditor } from '../../../../code-editor-DgfDaPAD.js';
27
25
  import '@base-ui/react/use-render';
28
26
  import '../../../workflows/workflow/input/processor-input.es.js';
29
27
  import 'react-hook-form';
@@ -35,6 +33,8 @@ import '@autoform/react';
35
33
  import '@lukeed/uuid';
36
34
  import '../../../../lib/form/dynamic-form.es.js';
37
35
  import { WorkflowIcon } from '../../../../icons/WorkflowIcon.es.js';
36
+ import '../../../../data-list-DDGpWucH.js';
37
+ import '../../../../keyboard/keyboard-shortcuts-context.es.js';
38
38
  import { useLinkComponent } from '../../../../lib/framework.es.js';
39
39
  import '../../../workflows/components/workflow-information.es.js';
40
40
  import '@base-ui/react/combobox';