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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/dist/{ask-user-card-DnvW7jXS.js → ask-user-card-B9q_GFTt.js} +2 -2
  2. package/dist/{ask-user-card-DnvW7jXS.js.map → ask-user-card-B9q_GFTt.js.map} +1 -1
  3. package/dist/{ask-user-card-DiFQcUzM.cjs → ask-user-card-C-N5rpYG.cjs} +2 -2
  4. package/dist/{ask-user-card-DiFQcUzM.cjs.map → ask-user-card-C-N5rpYG.cjs.map} +1 -1
  5. package/dist/components/Button.cjs.js +1 -1
  6. package/dist/components/Button.es.js +1 -1
  7. package/dist/components/CommandPalette.cjs.js +1 -1
  8. package/dist/components/CommandPalette.es.js +1 -1
  9. package/dist/components/Comment.cjs.js +1 -1
  10. package/dist/components/Comment.es.js +1 -1
  11. package/dist/components/DataCodeSection.cjs.js +1 -1
  12. package/dist/components/DataCodeSection.es.js +1 -1
  13. package/dist/components/DataList.cjs.js +15 -17
  14. package/dist/components/DataList.cjs.js.map +1 -1
  15. package/dist/components/DataList.es.js +4 -5
  16. package/dist/components/DataList.es.js.map +1 -1
  17. package/dist/components/DataPanel.cjs.js +1 -1
  18. package/dist/components/DataPanel.es.js +1 -1
  19. package/dist/components/DateTimePicker.cjs.js +1 -1
  20. package/dist/components/DateTimePicker.es.js +1 -1
  21. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  22. package/dist/components/DateTimeRangePicker.es.js +1 -1
  23. package/dist/components/EnvironmentVariablesEditor.cjs.js +2 -2
  24. package/dist/components/EnvironmentVariablesEditor.es.js +2 -2
  25. package/dist/components/Field.cjs.js +1 -1
  26. package/dist/components/Field.es.js +1 -1
  27. package/dist/components/FilterBar.cjs.js +2 -2
  28. package/dist/components/FilterBar.es.js +2 -2
  29. package/dist/components/JSONSchemaForm.cjs.js +1 -1
  30. package/dist/components/JSONSchemaForm.es.js +1 -1
  31. package/dist/components/Kbd.cjs.js +1 -1
  32. package/dist/components/Kbd.es.js +1 -1
  33. package/dist/components/ListSearch.cjs.js +1 -1
  34. package/dist/components/ListSearch.es.js +1 -1
  35. package/dist/components/LogsDataList.cjs.js +5 -2
  36. package/dist/components/LogsDataList.cjs.js.map +1 -1
  37. package/dist/components/LogsDataList.es.js +5 -2
  38. package/dist/components/LogsDataList.es.js.map +1 -1
  39. package/dist/components/PropertyFilter.cjs.js +1 -1
  40. package/dist/components/PropertyFilter.es.js +1 -1
  41. package/dist/components/SavedViews.cjs.js +1 -1
  42. package/dist/components/SavedViews.es.js +1 -1
  43. package/dist/components/SearchInput.cjs.js +1 -1
  44. package/dist/components/SearchInput.es.js +1 -1
  45. package/dist/components/Section.cjs.js +1 -1
  46. package/dist/components/Section.es.js +1 -1
  47. package/dist/components/SideDialog.cjs.js +225 -2
  48. package/dist/components/SideDialog.cjs.js.map +1 -1
  49. package/dist/components/SideDialog.es.js +210 -1
  50. package/dist/components/SideDialog.es.js.map +1 -1
  51. package/dist/components/Sidebar.cjs.js +63 -59
  52. package/dist/components/Sidebar.cjs.js.map +1 -1
  53. package/dist/components/Sidebar.es.js +64 -61
  54. package/dist/components/Sidebar.es.js.map +1 -1
  55. package/dist/components/ai/activity.cjs.js +1 -1
  56. package/dist/components/ai/activity.es.js +1 -1
  57. package/dist/components/ai/ask-user.cjs.js +1 -1
  58. package/dist/components/ai/ask-user.es.js +1 -1
  59. package/dist/{data-code-section-BjyHoHEB.cjs → data-code-section-BsvdKW08.cjs} +2 -2
  60. package/dist/{data-code-section-BjyHoHEB.cjs.map → data-code-section-BsvdKW08.cjs.map} +1 -1
  61. package/dist/{data-code-section-BWzfg-1n.js → data-code-section-y1BMLr3c.js} +2 -2
  62. package/dist/{data-code-section-BWzfg-1n.js.map → data-code-section-y1BMLr3c.js.map} +1 -1
  63. package/dist/{data-list-top-DJh08vFA.cjs → data-list-4t6Ueon8.cjs} +365 -16
  64. package/dist/data-list-4t6Ueon8.cjs.map +1 -0
  65. package/dist/{data-list-top-Cu4C2Z07.js → data-list-BQMBFAyK.js} +357 -7
  66. package/dist/data-list-BQMBFAyK.js.map +1 -0
  67. package/dist/{data-list-skeleton-sdcaabdX.cjs → data-list-skeleton-CVXZYY0k.cjs} +6 -6
  68. package/dist/{data-list-skeleton-sdcaabdX.cjs.map → data-list-skeleton-CVXZYY0k.cjs.map} +1 -1
  69. package/dist/{data-list-skeleton-CiilOVAl.js → data-list-skeleton-D54r1ycU.js} +2 -2
  70. package/dist/{data-list-skeleton-CiilOVAl.js.map → data-list-skeleton-D54r1ycU.js.map} +1 -1
  71. package/dist/{data-panel-CUqcB4Vn.js → data-panel-DSgidnnv.js} +2 -2
  72. package/dist/{data-panel-CUqcB4Vn.js.map → data-panel-DSgidnnv.js.map} +1 -1
  73. package/dist/{data-panel-CGRPVnEe.cjs → data-panel-xqrai98b.cjs} +2 -2
  74. package/dist/{data-panel-CGRPVnEe.cjs.map → data-panel-xqrai98b.cjs.map} +1 -1
  75. package/dist/{date-time-range-picker-BB6ivHR-.js → date-time-range-picker-BnYWCqei.js} +2 -2
  76. package/dist/{date-time-range-picker-BB6ivHR-.js.map → date-time-range-picker-BnYWCqei.js.map} +1 -1
  77. package/dist/{date-time-range-picker-ExPgeHV_.cjs → date-time-range-picker-_2RJBOUn.cjs} +2 -2
  78. package/dist/{date-time-range-picker-ExPgeHV_.cjs.map → date-time-range-picker-_2RJBOUn.cjs.map} +1 -1
  79. package/dist/domains/capabilities.cjs.js +4 -0
  80. package/dist/domains/capabilities.cjs.js.map +1 -1
  81. package/dist/domains/capabilities.es.js +1 -1
  82. package/dist/domains/chat/messages/dataset-save-action.cjs.js +1 -1
  83. package/dist/domains/chat/messages/dataset-save-action.es.js +1 -1
  84. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +23 -3
  85. package/dist/domains/chat/messages/notification-signal-notice.cjs.js.map +1 -1
  86. package/dist/domains/chat/messages/notification-signal-notice.es.js +24 -6
  87. package/dist/domains/chat/messages/notification-signal-notice.es.js.map +1 -1
  88. package/dist/domains/chat/messages/signal-data.cjs.js +12 -0
  89. package/dist/domains/chat/messages/signal-data.cjs.js.map +1 -1
  90. package/dist/domains/chat/messages/signal-data.es.js +12 -1
  91. package/dist/domains/chat/messages/signal-data.es.js.map +1 -1
  92. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  93. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  94. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +3 -0
  95. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
  96. package/dist/domains/chat/tools/badges/workflow-badge.es.js +3 -0
  97. package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
  98. package/dist/domains/chat.cjs.js +1 -0
  99. package/dist/domains/chat.cjs.js.map +1 -1
  100. package/dist/domains/chat.es.js +1 -1
  101. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.cjs.js +24 -16
  102. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.cjs.js.map +1 -1
  103. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.es.js +24 -16
  104. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.es.js.map +1 -1
  105. package/dist/domains/datasets/components/add-dataset-item-dialog/build-add-item-payload.cjs.js +7 -8
  106. package/dist/domains/datasets/components/add-dataset-item-dialog/build-add-item-payload.cjs.js.map +1 -1
  107. package/dist/domains/datasets/components/add-dataset-item-dialog/build-add-item-payload.es.js +7 -8
  108. package/dist/domains/datasets/components/add-dataset-item-dialog/build-add-item-payload.es.js.map +1 -1
  109. package/dist/domains/datasets/components/add-dataset-item-dialog/collapsible-settings-row.cjs.js +1 -1
  110. package/dist/domains/datasets/components/add-dataset-item-dialog/collapsible-settings-row.es.js +1 -1
  111. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-field-errors.cjs.js +1 -1
  112. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-field-errors.es.js +1 -1
  113. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.cjs.js +1 -1
  114. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.es.js +1 -1
  115. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +2 -2
  116. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +2 -2
  117. package/dist/domains/logs/components/log-data-panel.cjs.js +1 -1
  118. package/dist/domains/logs/components/log-data-panel.es.js +1 -1
  119. package/dist/domains/logs/components/logs-list-view.cjs.js +3 -2
  120. package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
  121. package/dist/domains/logs/components/logs-list-view.es.js +3 -2
  122. package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
  123. package/dist/domains/memory/components/observation-detail-view.cjs.js +1 -1
  124. package/dist/domains/memory/components/observation-detail-view.es.js +1 -1
  125. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  126. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  127. package/dist/domains/observability/components/trace-as-item-dialog.cjs.js +14 -2
  128. package/dist/domains/observability/components/trace-as-item-dialog.cjs.js.map +1 -1
  129. package/dist/domains/observability/components/trace-as-item-dialog.es.js +14 -2
  130. package/dist/domains/observability/components/trace-as-item-dialog.es.js.map +1 -1
  131. package/dist/domains/scores/components/score-data-panel.cjs.js +1 -1
  132. package/dist/domains/scores/components/score-data-panel.es.js +1 -1
  133. package/dist/domains/scores/components/trace-scores-tab.cjs.js +2 -1
  134. package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
  135. package/dist/domains/scores/components/trace-scores-tab.es.js +2 -1
  136. package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
  137. package/dist/domains/traces/components/span-data-panel-view.cjs.js +1 -1
  138. package/dist/domains/traces/components/span-data-panel-view.es.js +1 -1
  139. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  140. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  141. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  142. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  143. package/dist/domains/traces/components/trace-columns-menu.cjs.js +1 -1
  144. package/dist/domains/traces/components/trace-columns-menu.es.js +1 -1
  145. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +3 -8
  146. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  147. package/dist/domains/traces/components/trace-data-panel-view.es.js +4 -9
  148. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  149. package/dist/domains/traces/components/trace-data-panel.cjs.js +2 -0
  150. package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
  151. package/dist/domains/traces/components/trace-data-panel.es.js +2 -0
  152. package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
  153. package/dist/domains/traces/components/trace-error-cell.cjs.js +3 -1
  154. package/dist/domains/traces/components/trace-error-cell.cjs.js.map +1 -1
  155. package/dist/domains/traces/components/trace-error-cell.es.js +3 -1
  156. package/dist/domains/traces/components/trace-error-cell.es.js.map +1 -1
  157. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  158. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  159. package/dist/domains/traces/components/trace-span-panel.cjs.js +0 -2
  160. package/dist/domains/traces/components/trace-span-panel.cjs.js.map +1 -1
  161. package/dist/domains/traces/components/trace-span-panel.es.js +0 -2
  162. package/dist/domains/traces/components/trace-span-panel.es.js.map +1 -1
  163. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  164. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  165. package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
  166. package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
  167. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +2 -2
  168. package/dist/domains/traces/components/trace-time-range-chip.es.js +2 -2
  169. package/dist/domains/traces/components/traces-explorer/traces-explorer-auto-refresh.cjs.js +1 -1
  170. package/dist/domains/traces/components/traces-explorer/traces-explorer-auto-refresh.es.js +1 -1
  171. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.cjs.js.map +1 -1
  172. package/dist/domains/traces/components/traces-explorer/traces-explorer-context.es.js.map +1 -1
  173. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +2 -2
  174. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +2 -2
  175. package/dist/domains/traces/components/traces-explorer/traces-explorer-list-provider.cjs.js +2 -1
  176. package/dist/domains/traces/components/traces-explorer/traces-explorer-list-provider.cjs.js.map +1 -1
  177. package/dist/domains/traces/components/traces-explorer/traces-explorer-list-provider.es.js +2 -1
  178. package/dist/domains/traces/components/traces-explorer/traces-explorer-list-provider.es.js.map +1 -1
  179. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js +4 -15
  180. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js.map +1 -1
  181. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js +4 -15
  182. package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js.map +1 -1
  183. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js +3 -0
  184. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js.map +1 -1
  185. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js +4 -1
  186. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js.map +1 -1
  187. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js +1 -1
  188. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +1 -1
  189. package/dist/domains/traces/components/traces-list-view.cjs.js +4 -5
  190. package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
  191. package/dist/domains/traces/components/traces-list-view.es.js +3 -4
  192. package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
  193. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +4 -1
  194. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  195. package/dist/domains/traces/components/traces-page-skeleton.es.js +4 -1
  196. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  197. package/dist/domains/traces/hooks/use-traces-list-source.cjs.js +36 -9
  198. package/dist/domains/traces/hooks/use-traces-list-source.cjs.js.map +1 -1
  199. package/dist/domains/traces/hooks/use-traces-list-source.es.js +37 -12
  200. package/dist/domains/traces/hooks/use-traces-list-source.es.js.map +1 -1
  201. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
  202. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
  203. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +1 -1
  204. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +1 -1
  205. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +1 -1
  206. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +1 -1
  207. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.cjs.js +1 -1
  208. package/dist/domains/workflows/workflow/workflow-debug-mode-switch.es.js +1 -1
  209. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +1 -1
  210. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +1 -1
  211. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +2 -2
  212. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +2 -2
  213. package/dist/ee/signals/components/entity-index-list.cjs.js +3 -1
  214. package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
  215. package/dist/ee/signals/components/entity-index-list.es.js +3 -1
  216. package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
  217. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +4 -2
  218. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  219. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +4 -2
  220. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
  221. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +1 -1
  222. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +1 -1
  223. package/dist/ee/signals/trace-intelligence-explainer.cjs.js +1 -0
  224. package/dist/ee/signals/trace-intelligence-explainer.cjs.js.map +1 -1
  225. package/dist/ee/signals/trace-intelligence-explainer.es.js +1 -0
  226. package/dist/ee/signals/trace-intelligence-explainer.es.js.map +1 -1
  227. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +2 -2
  228. package/dist/ee/topics/components/topic-trace-summary-list.es.js +2 -2
  229. package/dist/{field-BCU5ZtWV.cjs → field-CZ5fldpM.cjs} +2 -1
  230. package/dist/{field-BCU5ZtWV.cjs.map → field-CZ5fldpM.cjs.map} +1 -1
  231. package/dist/{field-Dl1zeXTv.js → field-CfA5-ixH.js} +2 -1
  232. package/dist/{field-Dl1zeXTv.js.map → field-CfA5-ixH.js.map} +1 -1
  233. package/dist/{filter-bar-C6NdZctn.cjs → filter-bar-CjBb01b6.cjs} +3 -3
  234. package/dist/{filter-bar-C6NdZctn.cjs.map → filter-bar-CjBb01b6.cjs.map} +1 -1
  235. package/dist/{filter-bar-chip-DgvuQv6c.cjs → filter-bar-chip-C_64m7nX.cjs} +2 -2
  236. package/dist/{filter-bar-chip-DgvuQv6c.cjs.map → filter-bar-chip-C_64m7nX.cjs.map} +1 -1
  237. package/dist/{filter-bar-chip-DM73lTpx.js → filter-bar-chip-D2kKMSRA.js} +2 -2
  238. package/dist/{filter-bar-chip-DM73lTpx.js.map → filter-bar-chip-D2kKMSRA.js.map} +1 -1
  239. package/dist/{filter-bar-DW0fD4bu.js → filter-bar-pXSJt2ye.js} +3 -3
  240. package/dist/{filter-bar-DW0fD4bu.js.map → filter-bar-pXSJt2ye.js.map} +1 -1
  241. package/dist/{kbd-Xgv5HKEi.cjs → kbd-B2zbS_A6.cjs} +2 -2
  242. package/dist/{kbd-Xgv5HKEi.cjs.map → kbd-B2zbS_A6.cjs.map} +1 -1
  243. package/dist/{kbd-7Xx2pm9f.js → kbd-CYtMrOov.js} +2 -2
  244. package/dist/{kbd-7Xx2pm9f.js.map → kbd-CYtMrOov.js.map} +1 -1
  245. package/dist/layout/tabbed-container.cjs.js +2 -2
  246. package/dist/layout/tabbed-container.es.js +2 -2
  247. package/dist/lib/form/components/boolean-field.cjs.js +1 -1
  248. package/dist/lib/form/components/boolean-field.es.js +1 -1
  249. package/dist/lib/form/components/field-wrapper.cjs.js +1 -1
  250. package/dist/lib/form/components/field-wrapper.es.js +1 -1
  251. package/dist/{list-search-ByJdIxIh.js → list-search-8jVOq9LK.js} +2 -2
  252. package/dist/{list-search-ByJdIxIh.js.map → list-search-8jVOq9LK.js.map} +1 -1
  253. package/dist/{list-search-DNJVeHmK.cjs → list-search-C7ckmZHa.cjs} +2 -2
  254. package/dist/{list-search-DNJVeHmK.cjs.map → list-search-C7ckmZHa.cjs.map} +1 -1
  255. package/dist/{logs-data-list-DCj8Pj77.cjs → logs-data-list-C4Z4rw62.cjs} +21 -22
  256. package/dist/{logs-data-list-DCj8Pj77.cjs.map → logs-data-list-C4Z4rw62.cjs.map} +1 -1
  257. package/dist/{logs-data-list-VEEruqHO.js → logs-data-list-CL3iq_6r.js} +2 -3
  258. package/dist/{logs-data-list-VEEruqHO.js.map → logs-data-list-CL3iq_6r.js.map} +1 -1
  259. package/dist/new/settings.cjs.js +1 -1
  260. package/dist/new/settings.es.js +1 -1
  261. package/dist/{notification-activity-BWXHmlTn.js → notification-activity-BRW1Xlj1.js} +9 -5
  262. package/dist/notification-activity-BRW1Xlj1.js.map +1 -0
  263. package/dist/{notification-activity-BSNuqJDd.cjs → notification-activity-DAZOALWI.cjs} +9 -5
  264. package/dist/notification-activity-DAZOALWI.cjs.map +1 -0
  265. package/dist/resize/collapsible-panel.cjs.js +1 -1
  266. package/dist/resize/collapsible-panel.es.js +1 -1
  267. package/dist/{search-input-CMNy0JWd.cjs → search-input-CGNENJDh.cjs} +2 -2
  268. package/dist/{search-input-CMNy0JWd.cjs.map → search-input-CGNENJDh.cjs.map} +1 -1
  269. package/dist/{search-input-C9qFBzn6.js → search-input-cIYk0pl3.js} +2 -2
  270. package/dist/{search-input-C9qFBzn6.js.map → search-input-cIYk0pl3.js.map} +1 -1
  271. package/dist/{section-skBYREaR.cjs → section-BikCyHdf.cjs} +2 -2
  272. package/dist/{section-skBYREaR.cjs.map → section-BikCyHdf.cjs.map} +1 -1
  273. package/dist/{section-eRs4NnCC.js → section-C71zDLKM.js} +2 -2
  274. package/dist/{section-eRs4NnCC.js.map → section-C71zDLKM.js.map} +1 -1
  275. package/dist/{settings-row-Ds-PVocx.cjs → settings-row-C9lT2BJS.cjs} +2 -2
  276. package/dist/{settings-row-Ds-PVocx.cjs.map → settings-row-C9lT2BJS.cjs.map} +1 -1
  277. package/dist/{settings-row-BHtjEfPr.js → settings-row-CRpU1an-.js} +2 -2
  278. package/dist/{settings-row-BHtjEfPr.js.map → settings-row-CRpU1an-.js.map} +1 -1
  279. package/dist/src/domains/capabilities/index.d.ts +1 -1
  280. package/dist/src/domains/chat/messages/notification-signal-notice.d.ts +2 -0
  281. package/dist/src/domains/chat/messages/signal-data.d.ts +9 -0
  282. package/dist/src/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.d.ts +2 -2
  283. package/dist/src/domains/datasets/components/add-dataset-item-dialog/build-add-item-payload.d.ts +2 -0
  284. package/dist/src/domains/traces/components/trace-data-panel-view.d.ts +1 -5
  285. package/dist/src/domains/traces/components/trace-span-panel.d.ts +1 -2
  286. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-context.d.ts +2 -0
  287. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-panel.d.ts +3 -1
  288. package/dist/src/domains/traces/hooks/use-traces-list-source.d.ts +7 -1
  289. package/dist/src/ds/components/DataList/data-list-root.d.ts +2 -0
  290. package/dist/src/ds/components/Sidebar/header/sidebar-badge.d.ts +7 -0
  291. package/dist/src/ds/components/Sidebar/header/sidebar-button-hint.d.ts +7 -0
  292. package/dist/src/ds/components/Sidebar/header/sidebar-search-trigger.d.ts +14 -3
  293. package/dist/src/ds/components/Sidebar/index.d.ts +1 -0
  294. package/dist/src/ds/components/Sidebar/root/sidebar-trigger.d.ts +2 -2
  295. package/dist/src/ds/components/Sidebar/sidebar.d.ts +5 -1
  296. package/dist/src/ds/components/ai/activity/presets/notification-activity.d.ts +5 -1
  297. package/dist/style.css +29 -13
  298. package/dist/{traces-data-list-CF_LFvnf.cjs → traces-data-list-BOHhsgDI.cjs} +18 -20
  299. package/dist/{traces-data-list-CF_LFvnf.cjs.map → traces-data-list-BOHhsgDI.cjs.map} +1 -1
  300. package/dist/{traces-data-list-DgmSuEKb.js → traces-data-list-CP6knkOn.js} +2 -4
  301. package/dist/{traces-data-list-DgmSuEKb.js.map → traces-data-list-CP6knkOn.js.map} +1 -1
  302. package/package.json +11 -11
  303. package/dist/data-list-CD_lls8O.js +0 -138
  304. package/dist/data-list-CD_lls8O.js.map +0 -1
  305. package/dist/data-list-CGD9hzcp.cjs +0 -142
  306. package/dist/data-list-CGD9hzcp.cjs.map +0 -1
  307. package/dist/data-list-spacer-DpXJrZe1.js +0 -209
  308. package/dist/data-list-spacer-DpXJrZe1.js.map +0 -1
  309. package/dist/data-list-spacer-Dpoj55mv.cjs +0 -218
  310. package/dist/data-list-spacer-Dpoj55mv.cjs.map +0 -1
  311. package/dist/data-list-top-Cu4C2Z07.js.map +0 -1
  312. package/dist/data-list-top-DJh08vFA.cjs.map +0 -1
  313. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js +0 -205
  314. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js.map +0 -1
  315. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.d.ts +0 -2
  316. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js +0 -201
  317. package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js.map +0 -1
  318. package/dist/notification-activity-BSNuqJDd.cjs.map +0 -1
  319. package/dist/notification-activity-BWXHmlTn.js.map +0 -1
  320. package/dist/side-dialog-B7a4dasE.cjs +0 -231
  321. package/dist/side-dialog-B7a4dasE.cjs.map +0 -1
  322. package/dist/side-dialog-DVea8YTO.js +0 -211
  323. package/dist/side-dialog-DVea8YTO.js.map +0 -1
  324. package/dist/src/domains/observability/components/add-trace-mocks-to-item-dialog.d.ts +0 -9
@@ -1 +1 @@
1
- {"version":3,"file":"notification-signal-notice.es.js","sources":["../../../../src/domains/chat/messages/notification-signal-notice.tsx"],"sourcesContent":["import { formatSignalValue, getNotificationMetadata, signalContentsToText } from './signal-data';\nimport type { SignalData } from './signal-data';\nimport { NotificationActivity } from '@/ds/components/ai/activity';\n\nexport type NotificationSignalNoticeProps = {\n signal: SignalData;\n};\n\nconst getNotificationTitle = (signal: SignalData) => {\n const notification = getNotificationMetadata(signal);\n if (notification?.signal === 'summary' || signal.tagName === 'notification-summary') return 'Notification summary';\n\n const source = notification?.source ?? formatSignalValue(signal.attributes?.source);\n const kind = notification?.kind ?? formatSignalValue(signal.attributes?.kind);\n if (source && kind) return `${source} / ${kind}`;\n return source ?? kind ?? 'Notification';\n};\n\nexport const NotificationSignalNotice = ({ signal }: NotificationSignalNoticeProps) => {\n const notification = getNotificationMetadata(signal);\n const priority = notification?.priority ?? formatSignalValue(signal.attributes?.priority);\n const pending = formatSignalValue(notification?.pending) ?? formatSignalValue(signal.attributes?.pending);\n const status = notification?.status ?? formatSignalValue(signal.attributes?.status);\n const text = signalContentsToText(signal.contents);\n return (\n <NotificationActivity\n label={getNotificationTitle(signal)}\n message={text}\n priority={priority}\n status={status}\n pending={pending}\n />\n );\n};\n"],"names":[],"mappings":";;;;AAQA,MAAM,oBAAA,GAAuB,CAAC,MAAA,KAAuB;AACnD,EAAA,MAAM,YAAA,GAAe,wBAAwB,MAAM,CAAA;AACnD,EAAA,IAAI,cAAc,MAAA,KAAW,SAAA,IAAa,MAAA,CAAO,OAAA,KAAY,wBAAwB,OAAO,sBAAA;AAE5F,EAAA,MAAM,SAAS,YAAA,EAAc,MAAA,IAAU,iBAAA,CAAkB,MAAA,CAAO,YAAY,MAAM,CAAA;AAClF,EAAA,MAAM,OAAO,YAAA,EAAc,IAAA,IAAQ,iBAAA,CAAkB,MAAA,CAAO,YAAY,IAAI,CAAA;AAC5E,EAAA,IAAI,UAAU,IAAA,EAAM,OAAO,CAAA,EAAG,MAAM,MAAM,IAAI,CAAA,CAAA;AAC9C,EAAA,OAAO,UAAU,IAAA,IAAQ,cAAA;AAC3B,CAAA;AAEO,MAAM,wBAAA,GAA2B,CAAC,EAAE,MAAA,EAAO,KAAqC;AACrF,EAAA,MAAM,YAAA,GAAe,wBAAwB,MAAM,CAAA;AACnD,EAAA,MAAM,WAAW,YAAA,EAAc,QAAA,IAAY,iBAAA,CAAkB,MAAA,CAAO,YAAY,QAAQ,CAAA;AACxF,EAAA,MAAM,OAAA,GAAU,kBAAkB,YAAA,EAAc,OAAO,KAAK,iBAAA,CAAkB,MAAA,CAAO,YAAY,OAAO,CAAA;AACxG,EAAA,MAAM,SAAS,YAAA,EAAc,MAAA,IAAU,iBAAA,CAAkB,MAAA,CAAO,YAAY,MAAM,CAAA;AAClF,EAAA,MAAM,IAAA,GAAO,oBAAA,CAAqB,MAAA,CAAO,QAAQ,CAAA;AACjD,EAAA,uBACE,GAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,qBAAqB,MAAM,CAAA;AAAA,MAClC,OAAA,EAAS,IAAA;AAAA,MACT,QAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"notification-signal-notice.es.js","sources":["../../../../src/domains/chat/messages/notification-signal-notice.tsx"],"sourcesContent":["import { formatSignalValue, getMcpEventSignalInfo, getNotificationMetadata, signalContentsToText } from './signal-data';\nimport type { McpEventSignalInfo, SignalData } from './signal-data';\nimport { NotificationActivity } from '@/ds/components/ai/activity';\nimport { Badge } from '@/ds/components/Badge';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip/tooltip';\n\nexport type NotificationSignalNoticeProps = {\n signal: SignalData;\n};\n\nexport const MCP_EVENT_GAP_MESSAGE = 'Gap: events may have been skipped';\nexport const MCP_EVENT_UNTRUSTED_LABEL = 'Untrusted event data from the MCP server';\n\nconst getNotificationTitle = (signal: SignalData) => {\n const notification = getNotificationMetadata(signal);\n if (notification?.signal === 'summary' || signal.tagName === 'notification-summary') return 'Notification summary';\n\n const source = notification?.source ?? formatSignalValue(signal.attributes?.source);\n const kind = notification?.kind ?? formatSignalValue(signal.attributes?.kind);\n if (source && kind) return `${source} / ${kind}`;\n return source ?? kind ?? 'Notification';\n};\n\nconst getMcpEventTitle = (info: McpEventSignalInfo) => {\n const title = [info.server, info.event].filter(Boolean).join(' · ') || 'MCP event';\n return info.kind === 'mcp-event-subscription-ended' ? `${title} · subscription ended` : title;\n};\n\nconst GapBadge = () => (\n <Tooltip>\n <TooltipTrigger render={<span />}>\n <Badge size=\"xs\" variant=\"amber\">\n gap\n </Badge>\n <span className=\"sr-only\">{MCP_EVENT_GAP_MESSAGE}</span>\n </TooltipTrigger>\n <TooltipContent>{MCP_EVENT_GAP_MESSAGE}</TooltipContent>\n </Tooltip>\n);\n\nexport const NotificationSignalNotice = ({ signal }: NotificationSignalNoticeProps) => {\n const notification = getNotificationMetadata(signal);\n const mcpEvent = getMcpEventSignalInfo(signal);\n const priority = notification?.priority ?? formatSignalValue(signal.attributes?.priority);\n const pending = formatSignalValue(notification?.pending) ?? formatSignalValue(signal.attributes?.pending);\n const status = notification?.status ?? formatSignalValue(signal.attributes?.status);\n const text = signalContentsToText(signal.contents);\n return (\n <NotificationActivity\n label={mcpEvent ? getMcpEventTitle(mcpEvent) : getNotificationTitle(signal)}\n message={text}\n priority={priority}\n status={status}\n pending={pending}\n extraBadges={mcpEvent?.truncated ? <GapBadge /> : undefined}\n messageLabel={mcpEvent?.kind === 'mcp-event' ? MCP_EVENT_UNTRUSTED_LABEL : undefined}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;AAUO,MAAM,qBAAA,GAAwB;AAC9B,MAAM,yBAAA,GAA4B;AAEzC,MAAM,oBAAA,GAAuB,CAAC,MAAA,KAAuB;AACnD,EAAA,MAAM,YAAA,GAAe,wBAAwB,MAAM,CAAA;AACnD,EAAA,IAAI,cAAc,MAAA,KAAW,SAAA,IAAa,MAAA,CAAO,OAAA,KAAY,wBAAwB,OAAO,sBAAA;AAE5F,EAAA,MAAM,SAAS,YAAA,EAAc,MAAA,IAAU,iBAAA,CAAkB,MAAA,CAAO,YAAY,MAAM,CAAA;AAClF,EAAA,MAAM,OAAO,YAAA,EAAc,IAAA,IAAQ,iBAAA,CAAkB,MAAA,CAAO,YAAY,IAAI,CAAA;AAC5E,EAAA,IAAI,UAAU,IAAA,EAAM,OAAO,CAAA,EAAG,MAAM,MAAM,IAAI,CAAA,CAAA;AAC9C,EAAA,OAAO,UAAU,IAAA,IAAQ,cAAA;AAC3B,CAAA;AAEA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAA6B;AACrD,EAAA,MAAM,KAAA,GAAQ,CAAC,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,KAAK,CAAA,IAAK,WAAA;AACvE,EAAA,OAAO,IAAA,CAAK,IAAA,KAAS,8BAAA,GAAiC,CAAA,EAAG,KAAK,CAAA,qBAAA,CAAA,GAA0B,KAAA;AAC1F,CAAA;AAEA,MAAM,QAAA,GAAW,sBACf,IAAA,CAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,kBAAA,IAAA,CAAC,cAAA,EAAA,EAAe,MAAA,kBAAQ,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAC5B,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,SAAQ,QAAA,EAAA,KAAA,EAEjC,CAAA;AAAA,oBACA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,qBAAA,EAAsB;AAAA,GAAA,EACnD,CAAA;AAAA,kBACA,GAAA,CAAC,kBAAgB,QAAA,EAAA,qBAAA,EAAsB;AAAA,CAAA,EACzC,CAAA;AAGK,MAAM,wBAAA,GAA2B,CAAC,EAAE,MAAA,EAAO,KAAqC;AACrF,EAAA,MAAM,YAAA,GAAe,wBAAwB,MAAM,CAAA;AACnD,EAAA,MAAM,QAAA,GAAW,sBAAsB,MAAM,CAAA;AAC7C,EAAA,MAAM,WAAW,YAAA,EAAc,QAAA,IAAY,iBAAA,CAAkB,MAAA,CAAO,YAAY,QAAQ,CAAA;AACxF,EAAA,MAAM,OAAA,GAAU,kBAAkB,YAAA,EAAc,OAAO,KAAK,iBAAA,CAAkB,MAAA,CAAO,YAAY,OAAO,CAAA;AACxG,EAAA,MAAM,SAAS,YAAA,EAAc,MAAA,IAAU,iBAAA,CAAkB,MAAA,CAAO,YAAY,MAAM,CAAA;AAClF,EAAA,MAAM,IAAA,GAAO,oBAAA,CAAqB,MAAA,CAAO,QAAQ,CAAA;AACjD,EAAA,uBACE,GAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MACC,OAAO,QAAA,GAAW,gBAAA,CAAiB,QAAQ,CAAA,GAAI,qBAAqB,MAAM,CAAA;AAAA,MAC1E,OAAA,EAAS,IAAA;AAAA,MACT,QAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA,EAAa,QAAA,EAAU,SAAA,mBAAY,GAAA,CAAC,YAAS,CAAA,GAAK,MAAA;AAAA,MAClD,YAAA,EAAc,QAAA,EAAU,IAAA,KAAS,WAAA,GAAc,yBAAA,GAA4B;AAAA;AAAA,GAC7E;AAEJ;;;;"}
@@ -55,6 +55,17 @@ const toReactiveSignalData = (message) => {
55
55
  ...isRecord(signal.metadata) ? { metadata: signal.metadata } : {}
56
56
  };
57
57
  };
58
+ const getMcpEventSignalInfo = (signal) => {
59
+ const kind = getNotificationMetadata(signal)?.kind ?? formatSignalValue(signal.attributes?.kind);
60
+ if (kind !== "mcp-event" && kind !== "mcp-event-subscription-ended") return void 0;
61
+ const attributes = signal.attributes ?? {};
62
+ return {
63
+ kind,
64
+ server: formatSignalValue(attributes.server) || void 0,
65
+ event: formatSignalValue(attributes.event) || void 0,
66
+ truncated: attributes.truncated === true || attributes.truncated === "true"
67
+ };
68
+ };
58
69
  const getNotificationMetadata = (signal) => {
59
70
  const notification = isRecord(signal.metadata?.notification) ? signal.metadata.notification : void 0;
60
71
  if (!notification) return void 0;
@@ -70,6 +81,7 @@ const getNotificationMetadata = (signal) => {
70
81
  };
71
82
 
72
83
  exports.formatSignalValue = formatSignalValue;
84
+ exports.getMcpEventSignalInfo = getMcpEventSignalInfo;
73
85
  exports.getNotificationMetadata = getNotificationMetadata;
74
86
  exports.getSignalType = getSignalType;
75
87
  exports.isRecord = isRecord;
@@ -1 +1 @@
1
- {"version":3,"file":"signal-data.cjs.js","sources":["../../../../src/domains/chat/messages/signal-data.ts"],"sourcesContent":["import type { MastraDBMessage } from '@mastra/core/agent/message-list';\n\nexport type SignalData = {\n id?: string;\n type?: string;\n tagName?: string;\n contents?: unknown;\n attributes?: Record<string, string | number | boolean | null | undefined>;\n metadata?: Record<string, unknown>;\n};\n\nexport type NotificationSignalMetadata = {\n signal?: 'notification' | 'summary';\n recordId?: string;\n source?: string;\n kind?: string;\n priority?: string;\n status?: string;\n pending?: number;\n};\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const signalContentsToText = (contents: unknown): string => {\n if (typeof contents === 'string') return contents;\n if (!Array.isArray(contents)) return '';\n\n return contents\n .flatMap(part => {\n if (!isRecord(part)) return [];\n return part.type === 'text' && typeof part.text === 'string' && part.text.length > 0 ? [part.text] : [];\n })\n .join('\\n');\n};\n\nexport const formatSignalValue = (value: unknown): string | undefined => {\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n return undefined;\n};\n\nexport const isSignalData = (value: unknown): value is SignalData => {\n if (!isRecord(value)) return false;\n return value.type === 'notification' || value.type === 'state' || value.type === 'reactive';\n};\n\nconst getSignalMetadata = (message: MastraDBMessage): Record<string, unknown> | undefined => {\n const signal = message.content.metadata?.signal;\n return isRecord(signal) ? signal : undefined;\n};\n\n/**\n * Resolve the signal type for a persisted `role: 'signal'` message, mirroring\n * core's `getSignalType`. The type is stored under `content.metadata.signal.type`,\n * falling back to the top-level `message.type`.\n */\nexport const getSignalType = (message: MastraDBMessage): string | undefined => {\n const type = getSignalMetadata(message)?.type;\n return typeof type === 'string' ? type : message.type;\n};\n\n/**\n * User-message signals (the persisted echo of a user turn sent via `sendSignal`)\n * use `type: 'user'` or `'user-message'`. They render as a user message on\n * reload. Every other signal is a reactive/non-user signal that mirrors the\n * streaming accumulator's `data-signal` behavior: a signal badge folded onto an\n * assistant message.\n */\nexport const isUserSignalType = (type: string | undefined): boolean => type === 'user' || type === 'user-message';\n\nconst signalPartsToContents = (parts: MastraDBMessage['content']['parts']): unknown => {\n const contents: Array<{ type: 'text'; text: string } | { type: 'file'; data: string; mediaType: string }> = [];\n for (const rawPart of parts) {\n const part = rawPart as Record<string, unknown>;\n if (part.type === 'text' && typeof part.text === 'string') {\n contents.push({ type: 'text', text: part.text });\n continue;\n }\n if (part.type === 'file' && typeof part.data === 'string') {\n const mediaType =\n (typeof part.mediaType === 'string' ? part.mediaType : undefined) ??\n (typeof part.mimeType === 'string' ? part.mimeType : undefined) ??\n 'application/octet-stream';\n contents.push({ type: 'file', data: part.data, mediaType });\n }\n }\n return contents.length === 1 && contents[0]?.type === 'text' ? contents[0].text : contents;\n};\n\n/**\n * Build the `data-signal` payload for a persisted reactive signal row so the\n * existing `SignalBadge` can render it on read-back. Mirrors the 1.41.0\n * `to-assistant-ui-message` conversion that was lost when the chat renderer was\n * rewritten (PR #17774).\n */\nexport const toReactiveSignalData = (message: MastraDBMessage): SignalData => {\n const signal = getSignalMetadata(message) ?? {};\n return {\n id: typeof signal.id === 'string' ? signal.id : message.id,\n type: getSignalType(message),\n tagName: typeof signal.tagName === 'string' ? signal.tagName : message.type,\n contents: signalPartsToContents(message.content.parts),\n ...(isRecord(signal.attributes) ? { attributes: signal.attributes as SignalData['attributes'] } : {}),\n ...(isRecord(signal.metadata) ? { metadata: signal.metadata } : {}),\n };\n};\n\nexport const getNotificationMetadata = (signal: SignalData): NotificationSignalMetadata | undefined => {\n const notification = isRecord(signal.metadata?.notification) ? signal.metadata.notification : undefined;\n if (!notification) return undefined;\n\n return {\n signal:\n notification.signal === 'notification' || notification.signal === 'summary' ? notification.signal : undefined,\n recordId: typeof notification.recordId === 'string' ? notification.recordId : undefined,\n source: typeof notification.source === 'string' ? notification.source : undefined,\n kind: typeof notification.kind === 'string' ? notification.kind : undefined,\n priority: typeof notification.priority === 'string' ? notification.priority : undefined,\n status: typeof notification.status === 'string' ? notification.status : undefined,\n pending: typeof notification.pending === 'number' ? notification.pending : undefined,\n };\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signal-data.cjs.js","sources":["../../../../src/domains/chat/messages/signal-data.ts"],"sourcesContent":["import type { MastraDBMessage } from '@mastra/core/agent/message-list';\n\nexport type SignalData = {\n id?: string;\n type?: string;\n tagName?: string;\n contents?: unknown;\n attributes?: Record<string, string | number | boolean | null | undefined>;\n metadata?: Record<string, unknown>;\n};\n\nexport type NotificationSignalMetadata = {\n signal?: 'notification' | 'summary';\n recordId?: string;\n source?: string;\n kind?: string;\n priority?: string;\n status?: string;\n pending?: number;\n};\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const signalContentsToText = (contents: unknown): string => {\n if (typeof contents === 'string') return contents;\n if (!Array.isArray(contents)) return '';\n\n return contents\n .flatMap(part => {\n if (!isRecord(part)) return [];\n return part.type === 'text' && typeof part.text === 'string' && part.text.length > 0 ? [part.text] : [];\n })\n .join('\\n');\n};\n\nexport const formatSignalValue = (value: unknown): string | undefined => {\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n return undefined;\n};\n\nexport const isSignalData = (value: unknown): value is SignalData => {\n if (!isRecord(value)) return false;\n return value.type === 'notification' || value.type === 'state' || value.type === 'reactive';\n};\n\nconst getSignalMetadata = (message: MastraDBMessage): Record<string, unknown> | undefined => {\n const signal = message.content.metadata?.signal;\n return isRecord(signal) ? signal : undefined;\n};\n\n/**\n * Resolve the signal type for a persisted `role: 'signal'` message, mirroring\n * core's `getSignalType`. The type is stored under `content.metadata.signal.type`,\n * falling back to the top-level `message.type`.\n */\nexport const getSignalType = (message: MastraDBMessage): string | undefined => {\n const type = getSignalMetadata(message)?.type;\n return typeof type === 'string' ? type : message.type;\n};\n\n/**\n * User-message signals (the persisted echo of a user turn sent via `sendSignal`)\n * use `type: 'user'` or `'user-message'`. They render as a user message on\n * reload. Every other signal is a reactive/non-user signal that mirrors the\n * streaming accumulator's `data-signal` behavior: a signal badge folded onto an\n * assistant message.\n */\nexport const isUserSignalType = (type: string | undefined): boolean => type === 'user' || type === 'user-message';\n\nconst signalPartsToContents = (parts: MastraDBMessage['content']['parts']): unknown => {\n const contents: Array<{ type: 'text'; text: string } | { type: 'file'; data: string; mediaType: string }> = [];\n for (const rawPart of parts) {\n const part = rawPart as Record<string, unknown>;\n if (part.type === 'text' && typeof part.text === 'string') {\n contents.push({ type: 'text', text: part.text });\n continue;\n }\n if (part.type === 'file' && typeof part.data === 'string') {\n const mediaType =\n (typeof part.mediaType === 'string' ? part.mediaType : undefined) ??\n (typeof part.mimeType === 'string' ? part.mimeType : undefined) ??\n 'application/octet-stream';\n contents.push({ type: 'file', data: part.data, mediaType });\n }\n }\n return contents.length === 1 && contents[0]?.type === 'text' ? contents[0].text : contents;\n};\n\n/**\n * Build the `data-signal` payload for a persisted reactive signal row so the\n * existing `SignalBadge` can render it on read-back. Mirrors the 1.41.0\n * `to-assistant-ui-message` conversion that was lost when the chat renderer was\n * rewritten (PR #17774).\n */\nexport const toReactiveSignalData = (message: MastraDBMessage): SignalData => {\n const signal = getSignalMetadata(message) ?? {};\n return {\n id: typeof signal.id === 'string' ? signal.id : message.id,\n type: getSignalType(message),\n tagName: typeof signal.tagName === 'string' ? signal.tagName : message.type,\n contents: signalPartsToContents(message.content.parts),\n ...(isRecord(signal.attributes) ? { attributes: signal.attributes as SignalData['attributes'] } : {}),\n ...(isRecord(signal.metadata) ? { metadata: signal.metadata } : {}),\n };\n};\n\nexport type McpEventSignalInfo = {\n kind: 'mcp-event' | 'mcp-event-subscription-ended';\n server?: string;\n event?: string;\n /** The occurrence followed a gap: events may have been skipped. */\n truncated: boolean;\n};\n\n/** Server, event and gap flag of an MCP event notification (`@mastra/mcp` event signals); undefined for any other signal. */\nexport const getMcpEventSignalInfo = (signal: SignalData): McpEventSignalInfo | undefined => {\n const kind = getNotificationMetadata(signal)?.kind ?? formatSignalValue(signal.attributes?.kind);\n if (kind !== 'mcp-event' && kind !== 'mcp-event-subscription-ended') return undefined;\n const attributes = signal.attributes ?? {};\n return {\n kind,\n server: formatSignalValue(attributes.server) || undefined,\n event: formatSignalValue(attributes.event) || undefined,\n truncated: attributes.truncated === true || attributes.truncated === 'true',\n };\n};\n\nexport const getNotificationMetadata = (signal: SignalData): NotificationSignalMetadata | undefined => {\n const notification = isRecord(signal.metadata?.notification) ? signal.metadata.notification : undefined;\n if (!notification) return undefined;\n\n return {\n signal:\n notification.signal === 'notification' || notification.signal === 'summary' ? notification.signal : undefined,\n recordId: typeof notification.recordId === 'string' ? notification.recordId : undefined,\n source: typeof notification.source === 'string' ? notification.source : undefined,\n kind: typeof notification.kind === 'string' ? notification.kind : undefined,\n priority: typeof notification.priority === 'string' ? notification.priority : undefined,\n status: typeof notification.status === 'string' ? notification.status : undefined,\n pending: typeof notification.pending === 'number' ? notification.pending : undefined,\n };\n};\n"],"names":[],"mappings":"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"}
@@ -51,6 +51,17 @@ const toReactiveSignalData = (message) => {
51
51
  ...isRecord(signal.metadata) ? { metadata: signal.metadata } : {}
52
52
  };
53
53
  };
54
+ const getMcpEventSignalInfo = (signal) => {
55
+ const kind = getNotificationMetadata(signal)?.kind ?? formatSignalValue(signal.attributes?.kind);
56
+ if (kind !== "mcp-event" && kind !== "mcp-event-subscription-ended") return void 0;
57
+ const attributes = signal.attributes ?? {};
58
+ return {
59
+ kind,
60
+ server: formatSignalValue(attributes.server) || void 0,
61
+ event: formatSignalValue(attributes.event) || void 0,
62
+ truncated: attributes.truncated === true || attributes.truncated === "true"
63
+ };
64
+ };
54
65
  const getNotificationMetadata = (signal) => {
55
66
  const notification = isRecord(signal.metadata?.notification) ? signal.metadata.notification : void 0;
56
67
  if (!notification) return void 0;
@@ -65,5 +76,5 @@ const getNotificationMetadata = (signal) => {
65
76
  };
66
77
  };
67
78
 
68
- export { formatSignalValue, getNotificationMetadata, getSignalType, isRecord, isSignalData, isUserSignalType, signalContentsToText, toReactiveSignalData };
79
+ export { formatSignalValue, getMcpEventSignalInfo, getNotificationMetadata, getSignalType, isRecord, isSignalData, isUserSignalType, signalContentsToText, toReactiveSignalData };
69
80
  //# sourceMappingURL=signal-data.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signal-data.es.js","sources":["../../../../src/domains/chat/messages/signal-data.ts"],"sourcesContent":["import type { MastraDBMessage } from '@mastra/core/agent/message-list';\n\nexport type SignalData = {\n id?: string;\n type?: string;\n tagName?: string;\n contents?: unknown;\n attributes?: Record<string, string | number | boolean | null | undefined>;\n metadata?: Record<string, unknown>;\n};\n\nexport type NotificationSignalMetadata = {\n signal?: 'notification' | 'summary';\n recordId?: string;\n source?: string;\n kind?: string;\n priority?: string;\n status?: string;\n pending?: number;\n};\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const signalContentsToText = (contents: unknown): string => {\n if (typeof contents === 'string') return contents;\n if (!Array.isArray(contents)) return '';\n\n return contents\n .flatMap(part => {\n if (!isRecord(part)) return [];\n return part.type === 'text' && typeof part.text === 'string' && part.text.length > 0 ? [part.text] : [];\n })\n .join('\\n');\n};\n\nexport const formatSignalValue = (value: unknown): string | undefined => {\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n return undefined;\n};\n\nexport const isSignalData = (value: unknown): value is SignalData => {\n if (!isRecord(value)) return false;\n return value.type === 'notification' || value.type === 'state' || value.type === 'reactive';\n};\n\nconst getSignalMetadata = (message: MastraDBMessage): Record<string, unknown> | undefined => {\n const signal = message.content.metadata?.signal;\n return isRecord(signal) ? signal : undefined;\n};\n\n/**\n * Resolve the signal type for a persisted `role: 'signal'` message, mirroring\n * core's `getSignalType`. The type is stored under `content.metadata.signal.type`,\n * falling back to the top-level `message.type`.\n */\nexport const getSignalType = (message: MastraDBMessage): string | undefined => {\n const type = getSignalMetadata(message)?.type;\n return typeof type === 'string' ? type : message.type;\n};\n\n/**\n * User-message signals (the persisted echo of a user turn sent via `sendSignal`)\n * use `type: 'user'` or `'user-message'`. They render as a user message on\n * reload. Every other signal is a reactive/non-user signal that mirrors the\n * streaming accumulator's `data-signal` behavior: a signal badge folded onto an\n * assistant message.\n */\nexport const isUserSignalType = (type: string | undefined): boolean => type === 'user' || type === 'user-message';\n\nconst signalPartsToContents = (parts: MastraDBMessage['content']['parts']): unknown => {\n const contents: Array<{ type: 'text'; text: string } | { type: 'file'; data: string; mediaType: string }> = [];\n for (const rawPart of parts) {\n const part = rawPart as Record<string, unknown>;\n if (part.type === 'text' && typeof part.text === 'string') {\n contents.push({ type: 'text', text: part.text });\n continue;\n }\n if (part.type === 'file' && typeof part.data === 'string') {\n const mediaType =\n (typeof part.mediaType === 'string' ? part.mediaType : undefined) ??\n (typeof part.mimeType === 'string' ? part.mimeType : undefined) ??\n 'application/octet-stream';\n contents.push({ type: 'file', data: part.data, mediaType });\n }\n }\n return contents.length === 1 && contents[0]?.type === 'text' ? contents[0].text : contents;\n};\n\n/**\n * Build the `data-signal` payload for a persisted reactive signal row so the\n * existing `SignalBadge` can render it on read-back. Mirrors the 1.41.0\n * `to-assistant-ui-message` conversion that was lost when the chat renderer was\n * rewritten (PR #17774).\n */\nexport const toReactiveSignalData = (message: MastraDBMessage): SignalData => {\n const signal = getSignalMetadata(message) ?? {};\n return {\n id: typeof signal.id === 'string' ? signal.id : message.id,\n type: getSignalType(message),\n tagName: typeof signal.tagName === 'string' ? signal.tagName : message.type,\n contents: signalPartsToContents(message.content.parts),\n ...(isRecord(signal.attributes) ? { attributes: signal.attributes as SignalData['attributes'] } : {}),\n ...(isRecord(signal.metadata) ? { metadata: signal.metadata } : {}),\n };\n};\n\nexport const getNotificationMetadata = (signal: SignalData): NotificationSignalMetadata | undefined => {\n const notification = isRecord(signal.metadata?.notification) ? signal.metadata.notification : undefined;\n if (!notification) return undefined;\n\n return {\n signal:\n notification.signal === 'notification' || notification.signal === 'summary' ? notification.signal : undefined,\n recordId: typeof notification.recordId === 'string' ? notification.recordId : undefined,\n source: typeof notification.source === 'string' ? notification.source : undefined,\n kind: typeof notification.kind === 'string' ? notification.kind : undefined,\n priority: typeof notification.priority === 'string' ? notification.priority : undefined,\n status: typeof notification.status === 'string' ? notification.status : undefined,\n pending: typeof notification.pending === 'number' ? notification.pending : undefined,\n };\n};\n"],"names":[],"mappings":"AAqBO,MAAM,QAAA,GAAW,CAAC,KAAA,KACvB,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK;AAE9D,MAAM,oBAAA,GAAuB,CAAC,QAAA,KAA8B;AACjE,EAAA,IAAI,OAAO,QAAA,KAAa,QAAA,EAAU,OAAO,QAAA;AACzC,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,GAAG,OAAO,EAAA;AAErC,EAAA,OAAO,QAAA,CACJ,QAAQ,CAAA,IAAA,KAAQ;AACf,IAAA,IAAI,CAAC,QAAA,CAAS,IAAI,CAAA,SAAU,EAAC;AAC7B,IAAA,OAAO,IAAA,CAAK,IAAA,KAAS,MAAA,IAAU,OAAO,KAAK,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,GAAI,CAAC,IAAA,CAAK,IAAI,IAAI,EAAC;AAAA,EACxG,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AACd;AAEO,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAuC;AACvE,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,OAAO,UAAU,SAAA,EAAW,OAAO,OAAO,KAAK,CAAA;AAChF,EAAA,OAAO,MAAA;AACT;AAEO,MAAM,YAAA,GAAe,CAAC,KAAA,KAAwC;AACnE,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AAC7B,EAAA,OAAO,MAAM,IAAA,KAAS,cAAA,IAAkB,MAAM,IAAA,KAAS,OAAA,IAAW,MAAM,IAAA,KAAS,UAAA;AACnF;AAEA,MAAM,iBAAA,GAAoB,CAAC,OAAA,KAAkE;AAC3F,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAU,MAAA;AACzC,EAAA,OAAO,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,GAAS,MAAA;AACrC,CAAA;AAOO,MAAM,aAAA,GAAgB,CAAC,OAAA,KAAiD;AAC7E,EAAA,MAAM,IAAA,GAAO,iBAAA,CAAkB,OAAO,CAAA,EAAG,IAAA;AACzC,EAAA,OAAO,OAAO,IAAA,KAAS,QAAA,GAAW,IAAA,GAAO,OAAA,CAAQ,IAAA;AACnD;AASO,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAAsC,IAAA,KAAS,UAAU,IAAA,KAAS;AAEnG,MAAM,qBAAA,GAAwB,CAAC,KAAA,KAAwD;AACrF,EAAA,MAAM,WAAsG,EAAC;AAC7G,EAAA,KAAA,MAAW,WAAW,KAAA,EAAO;AAC3B,IAAA,MAAM,IAAA,GAAO,OAAA;AACb,IAAA,IAAI,KAAK,IAAA,KAAS,MAAA,IAAU,OAAO,IAAA,CAAK,SAAS,QAAA,EAAU;AACzD,MAAA,QAAA,CAAS,KAAK,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA;AAC/C,MAAA;AAAA,IACF;AACA,IAAA,IAAI,KAAK,IAAA,KAAS,MAAA,IAAU,OAAO,IAAA,CAAK,SAAS,QAAA,EAAU;AACzD,MAAA,MAAM,SAAA,GAAA,CACH,OAAO,IAAA,CAAK,SAAA,KAAc,WAAW,IAAA,CAAK,SAAA,GAAY,MAAA,MACtD,OAAO,IAAA,CAAK,QAAA,KAAa,QAAA,GAAW,IAAA,CAAK,WAAW,MAAA,CAAA,IACrD,0BAAA;AACF,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,IAAA,CAAK,IAAA,EAAM,WAAW,CAAA;AAAA,IAC5D;AAAA,EACF;AACA,EAAA,OAAO,QAAA,CAAS,MAAA,KAAW,CAAA,IAAK,QAAA,CAAS,CAAC,CAAA,EAAG,IAAA,KAAS,MAAA,GAAS,QAAA,CAAS,CAAC,CAAA,CAAE,IAAA,GAAO,QAAA;AACpF,CAAA;AAQO,MAAM,oBAAA,GAAuB,CAAC,OAAA,KAAyC;AAC5E,EAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,OAAO,CAAA,IAAK,EAAC;AAC9C,EAAA,OAAO;AAAA,IACL,IAAI,OAAO,MAAA,CAAO,OAAO,QAAA,GAAW,MAAA,CAAO,KAAK,OAAA,CAAQ,EAAA;AAAA,IACxD,IAAA,EAAM,cAAc,OAAO,CAAA;AAAA,IAC3B,SAAS,OAAO,MAAA,CAAO,YAAY,QAAA,GAAW,MAAA,CAAO,UAAU,OAAA,CAAQ,IAAA;AAAA,IACvE,QAAA,EAAU,qBAAA,CAAsB,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA;AAAA,IACrD,GAAI,QAAA,CAAS,MAAA,CAAO,UAAU,CAAA,GAAI,EAAE,UAAA,EAAY,MAAA,CAAO,UAAA,EAAuC,GAAI,EAAC;AAAA,IACnG,GAAI,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAA,GAAI,EAAE,QAAA,EAAU,MAAA,CAAO,QAAA,EAAS,GAAI;AAAC,GACnE;AACF;AAEO,MAAM,uBAAA,GAA0B,CAAC,MAAA,KAA+D;AACrG,EAAA,MAAM,YAAA,GAAe,SAAS,MAAA,CAAO,QAAA,EAAU,YAAY,CAAA,GAAI,MAAA,CAAO,SAAS,YAAA,GAAe,MAAA;AAC9F,EAAA,IAAI,CAAC,cAAc,OAAO,MAAA;AAE1B,EAAA,OAAO;AAAA,IACL,MAAA,EACE,aAAa,MAAA,KAAW,cAAA,IAAkB,aAAa,MAAA,KAAW,SAAA,GAAY,aAAa,MAAA,GAAS,MAAA;AAAA,IACtG,UAAU,OAAO,YAAA,CAAa,QAAA,KAAa,QAAA,GAAW,aAAa,QAAA,GAAW,MAAA;AAAA,IAC9E,QAAQ,OAAO,YAAA,CAAa,MAAA,KAAW,QAAA,GAAW,aAAa,MAAA,GAAS,MAAA;AAAA,IACxE,MAAM,OAAO,YAAA,CAAa,IAAA,KAAS,QAAA,GAAW,aAAa,IAAA,GAAO,MAAA;AAAA,IAClE,UAAU,OAAO,YAAA,CAAa,QAAA,KAAa,QAAA,GAAW,aAAa,QAAA,GAAW,MAAA;AAAA,IAC9E,QAAQ,OAAO,YAAA,CAAa,MAAA,KAAW,QAAA,GAAW,aAAa,MAAA,GAAS,MAAA;AAAA,IACxE,SAAS,OAAO,YAAA,CAAa,OAAA,KAAY,QAAA,GAAW,aAAa,OAAA,GAAU;AAAA,GAC7E;AACF;;;;"}
1
+ {"version":3,"file":"signal-data.es.js","sources":["../../../../src/domains/chat/messages/signal-data.ts"],"sourcesContent":["import type { MastraDBMessage } from '@mastra/core/agent/message-list';\n\nexport type SignalData = {\n id?: string;\n type?: string;\n tagName?: string;\n contents?: unknown;\n attributes?: Record<string, string | number | boolean | null | undefined>;\n metadata?: Record<string, unknown>;\n};\n\nexport type NotificationSignalMetadata = {\n signal?: 'notification' | 'summary';\n recordId?: string;\n source?: string;\n kind?: string;\n priority?: string;\n status?: string;\n pending?: number;\n};\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const signalContentsToText = (contents: unknown): string => {\n if (typeof contents === 'string') return contents;\n if (!Array.isArray(contents)) return '';\n\n return contents\n .flatMap(part => {\n if (!isRecord(part)) return [];\n return part.type === 'text' && typeof part.text === 'string' && part.text.length > 0 ? [part.text] : [];\n })\n .join('\\n');\n};\n\nexport const formatSignalValue = (value: unknown): string | undefined => {\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n return undefined;\n};\n\nexport const isSignalData = (value: unknown): value is SignalData => {\n if (!isRecord(value)) return false;\n return value.type === 'notification' || value.type === 'state' || value.type === 'reactive';\n};\n\nconst getSignalMetadata = (message: MastraDBMessage): Record<string, unknown> | undefined => {\n const signal = message.content.metadata?.signal;\n return isRecord(signal) ? signal : undefined;\n};\n\n/**\n * Resolve the signal type for a persisted `role: 'signal'` message, mirroring\n * core's `getSignalType`. The type is stored under `content.metadata.signal.type`,\n * falling back to the top-level `message.type`.\n */\nexport const getSignalType = (message: MastraDBMessage): string | undefined => {\n const type = getSignalMetadata(message)?.type;\n return typeof type === 'string' ? type : message.type;\n};\n\n/**\n * User-message signals (the persisted echo of a user turn sent via `sendSignal`)\n * use `type: 'user'` or `'user-message'`. They render as a user message on\n * reload. Every other signal is a reactive/non-user signal that mirrors the\n * streaming accumulator's `data-signal` behavior: a signal badge folded onto an\n * assistant message.\n */\nexport const isUserSignalType = (type: string | undefined): boolean => type === 'user' || type === 'user-message';\n\nconst signalPartsToContents = (parts: MastraDBMessage['content']['parts']): unknown => {\n const contents: Array<{ type: 'text'; text: string } | { type: 'file'; data: string; mediaType: string }> = [];\n for (const rawPart of parts) {\n const part = rawPart as Record<string, unknown>;\n if (part.type === 'text' && typeof part.text === 'string') {\n contents.push({ type: 'text', text: part.text });\n continue;\n }\n if (part.type === 'file' && typeof part.data === 'string') {\n const mediaType =\n (typeof part.mediaType === 'string' ? part.mediaType : undefined) ??\n (typeof part.mimeType === 'string' ? part.mimeType : undefined) ??\n 'application/octet-stream';\n contents.push({ type: 'file', data: part.data, mediaType });\n }\n }\n return contents.length === 1 && contents[0]?.type === 'text' ? contents[0].text : contents;\n};\n\n/**\n * Build the `data-signal` payload for a persisted reactive signal row so the\n * existing `SignalBadge` can render it on read-back. Mirrors the 1.41.0\n * `to-assistant-ui-message` conversion that was lost when the chat renderer was\n * rewritten (PR #17774).\n */\nexport const toReactiveSignalData = (message: MastraDBMessage): SignalData => {\n const signal = getSignalMetadata(message) ?? {};\n return {\n id: typeof signal.id === 'string' ? signal.id : message.id,\n type: getSignalType(message),\n tagName: typeof signal.tagName === 'string' ? signal.tagName : message.type,\n contents: signalPartsToContents(message.content.parts),\n ...(isRecord(signal.attributes) ? { attributes: signal.attributes as SignalData['attributes'] } : {}),\n ...(isRecord(signal.metadata) ? { metadata: signal.metadata } : {}),\n };\n};\n\nexport type McpEventSignalInfo = {\n kind: 'mcp-event' | 'mcp-event-subscription-ended';\n server?: string;\n event?: string;\n /** The occurrence followed a gap: events may have been skipped. */\n truncated: boolean;\n};\n\n/** Server, event and gap flag of an MCP event notification (`@mastra/mcp` event signals); undefined for any other signal. */\nexport const getMcpEventSignalInfo = (signal: SignalData): McpEventSignalInfo | undefined => {\n const kind = getNotificationMetadata(signal)?.kind ?? formatSignalValue(signal.attributes?.kind);\n if (kind !== 'mcp-event' && kind !== 'mcp-event-subscription-ended') return undefined;\n const attributes = signal.attributes ?? {};\n return {\n kind,\n server: formatSignalValue(attributes.server) || undefined,\n event: formatSignalValue(attributes.event) || undefined,\n truncated: attributes.truncated === true || attributes.truncated === 'true',\n };\n};\n\nexport const getNotificationMetadata = (signal: SignalData): NotificationSignalMetadata | undefined => {\n const notification = isRecord(signal.metadata?.notification) ? signal.metadata.notification : undefined;\n if (!notification) return undefined;\n\n return {\n signal:\n notification.signal === 'notification' || notification.signal === 'summary' ? notification.signal : undefined,\n recordId: typeof notification.recordId === 'string' ? notification.recordId : undefined,\n source: typeof notification.source === 'string' ? notification.source : undefined,\n kind: typeof notification.kind === 'string' ? notification.kind : undefined,\n priority: typeof notification.priority === 'string' ? notification.priority : undefined,\n status: typeof notification.status === 'string' ? notification.status : undefined,\n pending: typeof notification.pending === 'number' ? notification.pending : undefined,\n };\n};\n"],"names":[],"mappings":"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"}
@@ -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-DiFQcUzM.cjs');
7
+ const askUserCard = require('../../../../ask-user-card-C-N5rpYG.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-DnvW7jXS.js';
3
+ import { A as AskUser } from '../../../../ask-user-card-B9q_GFTt.js';
4
4
 
5
5
  const AskUserBadge = ({ toolCallId, suspendPayload, result }) => {
6
6
  const { approveToolcall, isRunning, toolCallApprovals } = useToolCall();
@@ -30,6 +30,7 @@ require('@mastra/core/utils/safe-stringify');
30
30
  const codeEditor = require('../../../../code-editor-4ukTuvqG.cjs');
31
31
  require('../../../../highlight-DfnRU-Am.cjs');
32
32
  require('@base-ui/react/use-render');
33
+ require('../../../../tooltip-BppwIf6Y.cjs');
33
34
  require('../../../workflows/workflow/input/processor-input.cjs.js');
34
35
  require('react-hook-form');
35
36
  require('../../../../lib/form/field-context.cjs.js');
@@ -40,6 +41,8 @@ require('@autoform/react');
40
41
  require('@lukeed/uuid');
41
42
  require('../../../../lib/form/dynamic-form.cjs.js');
42
43
  const icons_WorkflowIcon = require('../../../../icons/WorkflowIcon.cjs.js');
44
+ require('../../../../data-list-4t6Ueon8.cjs');
45
+ require('../../../../keyboard/keyboard-shortcuts-context.cjs.js');
43
46
  const lib_framework = require('../../../../lib/framework.cjs.js');
44
47
  require('../../../workflows/components/workflow-information.cjs.js');
45
48
  require('@base-ui/react/combobox');
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-badge.cjs.js","sources":["../../../../../src/domains/chat/tools/badges/workflow-badge.tsx"],"sourcesContent":["import type { GetWorkflowResponse } from '@mastra/client-js';\nimport { useWorkflow } from '@mastra/react/hooks/workflows';\nimport { Eye } from 'lucide-react';\nimport { useContext, useEffect } from 'react';\nimport { BackgroundTaskMetadataDialogTrigger } from './background-task-metadata-dialog';\nimport type { MessageMetadata } from '@/domains/chat';\n\nimport { LoadingBadge } from '@/domains/chat/components/loading-badge';\nimport { NetworkChoiceMetadataDialogTrigger } from '@/domains/chat/components/network-choice-metadata-dialog';\nimport { SectionLabel } from '@/domains/chat/components/section-label';\nimport { awaitsToolApproval } from '@/domains/chat/tools/badges/awaits-tool-approval';\nimport type { ToolApprovalRequest } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport { ToolApprovalBadge } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport { useEntityRequestContext } from '@/domains/request-context/hooks/use-entity-request-context';\nimport {\n WorkflowGraph,\n WorkflowRunContext,\n WorkflowSelectedStepProvider,\n WorkflowStepDetailProvider,\n useWorkflowStepDetail,\n} from '@/domains/workflows';\nimport { WorkflowStepDetailContent } from '@/domains/workflows/components/workflow-step-detail';\nimport { PlaygroundWorkflowRunProvider } from '@/domains/workflows/context/playground-workflow-run-provider';\nimport type { WorkflowRunStreamResult } from '@/domains/workflows/context/workflow-run-context';\nimport { ToolCallMono } from '@/ds/components/ai/tool-call';\nimport { Button } from '@/ds/components/Button';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { useLinkComponent } from '@/lib/framework';\n\nexport interface WorkflowBadgeProps extends Omit<ToolApprovalRequest, 'toolCalled'> {\n workflowId: string;\n result?: any;\n isStreaming?: boolean;\n metadata?: MessageMetadata;\n suspendPayload?: any;\n toolCalled?: boolean;\n}\n\nexport const WorkflowBadge = ({\n result,\n workflowId,\n isStreaming,\n metadata,\n toolCallId,\n toolApprovalMetadata,\n suspendPayload,\n toolName,\n isNetwork,\n toolCalled,\n}: WorkflowBadgeProps) => {\n const { runId, status } = result || {};\n const { data: workflow, isLoading: isWorkflowLoading } = useWorkflow({\n workflowId,\n requestContext: useEntityRequestContext('workflow', workflowId)[0],\n queryOptions: { enabled: Boolean(workflowId) },\n });\n const routingDecision = metadata?.mode === 'network' ? metadata.routingDecision : undefined;\n const selectionReason =\n metadata?.mode === 'network' ? (routingDecision?.selectionReason ?? metadata.selectionReason) : undefined;\n const agentNetworkInput = metadata?.mode === 'network' ? (routingDecision ?? metadata.agentInput) : undefined;\n\n const bgEntry =\n (metadata?.mode === 'stream' || metadata?.mode === 'generate') && metadata?.backgroundTasks\n ? metadata.backgroundTasks[toolCallId]\n : undefined;\n\n let suspendPayloadSlot =\n typeof suspendPayload === 'string' ? (\n <ToolCallMono copyText={suspendPayload} className=\"text-muted-foreground\">\n {suspendPayload}\n </ToolCallMono>\n ) : (\n <CodeEditor data={suspendPayload} data-testid=\"tool-suspend-payload\" />\n );\n\n if (isWorkflowLoading || !workflow) return <LoadingBadge />;\n\n const toolCalledOrFinished = toolCalled ?? !!status;\n const showsRun = isStreaming || Boolean(runId);\n const hasBody =\n showsRun ||\n Boolean(suspendPayload) ||\n awaitsToolApproval({ toolApprovalMetadata, toolCalled: toolCalledOrFinished });\n\n return (\n <ToolApprovalBadge\n approval={{\n toolCalled: toolCalledOrFinished,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n isGenerateMode: metadata?.mode === 'generate',\n }}\n data-testid=\"workflow-badge\"\n icon={<WorkflowIcon className=\"text-span-workflow\" />}\n title={workflow.name}\n initialCollapsed={false}\n extraInfo={\n metadata?.mode === 'network' ? (\n <NetworkChoiceMetadataDialogTrigger\n selectionReason={selectionReason ?? ''}\n input={agentNetworkInput as string | Record<string, unknown> | undefined}\n />\n ) : bgEntry?.taskId && bgEntry?.startedAt ? (\n <BackgroundTaskMetadataDialogTrigger backgroundTask={bgEntry} />\n ) : null\n }\n >\n {hasBody && (\n <>\n {!isStreaming && runId && (\n <PlaygroundWorkflowRunProvider workflowId={workflowId} initialRunId={runId} withoutTimeTravel>\n <WorkflowBadgeExtended workflowId={workflowId} workflow={workflow} runId={runId} />\n </PlaygroundWorkflowRunProvider>\n )}\n\n {isStreaming && <WorkflowBadgeExtended workflowId={workflowId} workflow={workflow} runId={runId} />}\n\n {suspendPayloadSlot !== undefined && suspendPayload && (\n <div>\n <SectionLabel>Workflow suspend payload</SectionLabel>\n {suspendPayloadSlot}\n </div>\n )}\n </>\n )}\n </ToolApprovalBadge>\n );\n};\n\ninterface WorkflowBadgeExtendedProps {\n workflowId: string;\n runId?: string;\n workflow: GetWorkflowResponse;\n}\n\nconst WorkflowBadgeExtended = ({ workflowId, workflow, runId }: WorkflowBadgeExtendedProps) => {\n const requestContext = useEntityRequestContext('workflow', workflowId)[0];\n const { Link } = useLinkComponent();\n const { isLoadingRunExecutionResult } = useContext(WorkflowRunContext);\n\n return (\n <>\n <div className=\"flex items-center gap-2 pb-2\">\n <Button icon={<WorkflowIcon />} render={<Link href={`/workflows/${workflowId}/graph`} />}>\n Go to workflow\n </Button>\n {runId && (\n <Button icon={<Eye />} render={<Link href={`/workflows/${workflowId}/graph/${runId}`} />}>\n See run\n </Button>\n )}\n </div>\n\n <WorkflowSelectedStepProvider>\n <WorkflowStepDetailProvider>\n <div className=\"h-[60vh] w-full overflow-hidden rounded-md\">\n <WorkflowGraph\n workflowId={workflowId}\n workflow={workflow}\n isLoading={isLoadingRunExecutionResult}\n requestContext={requestContext}\n />\n </div>\n <WorkflowBadgeStepDetail requestContext={requestContext} />\n </WorkflowStepDetailProvider>\n </WorkflowSelectedStepProvider>\n </>\n );\n};\n\nconst WorkflowBadgeStepDetail = ({ requestContext }: { requestContext: Record<string, any> }) => {\n const { stepDetail } = useWorkflowStepDetail();\n if (!stepDetail) return null;\n return (\n <div className=\"mt-2 flex max-h-[60vh] flex-col overflow-hidden rounded-md border border-border bg-background\">\n <WorkflowStepDetailContent requestContext={requestContext} />\n </div>\n );\n};\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const useWorkflowStream = (workflowFullState?: WorkflowRunStreamResult) => {\n const { setResult } = useContext(WorkflowRunContext);\n\n useEffect(() => {\n if (!workflowFullState) return;\n setResult(workflowFullState);\n }, [workflowFullState, setResult]);\n};\n"],"names":["useWorkflow","useEntityRequestContext","jsx","ToolCallMono","CodeEditor","LoadingBadge","awaitsToolApproval","ToolApprovalBadge","WorkflowIcon","NetworkChoiceMetadataDialogTrigger","BackgroundTaskMetadataDialogTrigger","jsxs","Fragment","PlaygroundWorkflowRunProvider","SectionLabel","useLinkComponent","useContext","WorkflowRunContext","Button","Eye","WorkflowSelectedStepProvider","WorkflowStepDetailProvider","WorkflowGraph","useWorkflowStepDetail","WorkflowStepDetailContent","useEffect"],"mappings":"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"}
1
+ {"version":3,"file":"workflow-badge.cjs.js","sources":["../../../../../src/domains/chat/tools/badges/workflow-badge.tsx"],"sourcesContent":["import type { GetWorkflowResponse } from '@mastra/client-js';\nimport { useWorkflow } from '@mastra/react/hooks/workflows';\nimport { Eye } from 'lucide-react';\nimport { useContext, useEffect } from 'react';\nimport { BackgroundTaskMetadataDialogTrigger } from './background-task-metadata-dialog';\nimport type { MessageMetadata } from '@/domains/chat';\n\nimport { LoadingBadge } from '@/domains/chat/components/loading-badge';\nimport { NetworkChoiceMetadataDialogTrigger } from '@/domains/chat/components/network-choice-metadata-dialog';\nimport { SectionLabel } from '@/domains/chat/components/section-label';\nimport { awaitsToolApproval } from '@/domains/chat/tools/badges/awaits-tool-approval';\nimport type { ToolApprovalRequest } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport { ToolApprovalBadge } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport { useEntityRequestContext } from '@/domains/request-context/hooks/use-entity-request-context';\nimport {\n WorkflowGraph,\n WorkflowRunContext,\n WorkflowSelectedStepProvider,\n WorkflowStepDetailProvider,\n useWorkflowStepDetail,\n} from '@/domains/workflows';\nimport { WorkflowStepDetailContent } from '@/domains/workflows/components/workflow-step-detail';\nimport { PlaygroundWorkflowRunProvider } from '@/domains/workflows/context/playground-workflow-run-provider';\nimport type { WorkflowRunStreamResult } from '@/domains/workflows/context/workflow-run-context';\nimport { ToolCallMono } from '@/ds/components/ai/tool-call';\nimport { Button } from '@/ds/components/Button';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { useLinkComponent } from '@/lib/framework';\n\nexport interface WorkflowBadgeProps extends Omit<ToolApprovalRequest, 'toolCalled'> {\n workflowId: string;\n result?: any;\n isStreaming?: boolean;\n metadata?: MessageMetadata;\n suspendPayload?: any;\n toolCalled?: boolean;\n}\n\nexport const WorkflowBadge = ({\n result,\n workflowId,\n isStreaming,\n metadata,\n toolCallId,\n toolApprovalMetadata,\n suspendPayload,\n toolName,\n isNetwork,\n toolCalled,\n}: WorkflowBadgeProps) => {\n const { runId, status } = result || {};\n const { data: workflow, isLoading: isWorkflowLoading } = useWorkflow({\n workflowId,\n requestContext: useEntityRequestContext('workflow', workflowId)[0],\n queryOptions: { enabled: Boolean(workflowId) },\n });\n const routingDecision = metadata?.mode === 'network' ? metadata.routingDecision : undefined;\n const selectionReason =\n metadata?.mode === 'network' ? (routingDecision?.selectionReason ?? metadata.selectionReason) : undefined;\n const agentNetworkInput = metadata?.mode === 'network' ? (routingDecision ?? metadata.agentInput) : undefined;\n\n const bgEntry =\n (metadata?.mode === 'stream' || metadata?.mode === 'generate') && metadata?.backgroundTasks\n ? metadata.backgroundTasks[toolCallId]\n : undefined;\n\n let suspendPayloadSlot =\n typeof suspendPayload === 'string' ? (\n <ToolCallMono copyText={suspendPayload} className=\"text-muted-foreground\">\n {suspendPayload}\n </ToolCallMono>\n ) : (\n <CodeEditor data={suspendPayload} data-testid=\"tool-suspend-payload\" />\n );\n\n if (isWorkflowLoading || !workflow) return <LoadingBadge />;\n\n const toolCalledOrFinished = toolCalled ?? !!status;\n const showsRun = isStreaming || Boolean(runId);\n const hasBody =\n showsRun ||\n Boolean(suspendPayload) ||\n awaitsToolApproval({ toolApprovalMetadata, toolCalled: toolCalledOrFinished });\n\n return (\n <ToolApprovalBadge\n approval={{\n toolCalled: toolCalledOrFinished,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n isGenerateMode: metadata?.mode === 'generate',\n }}\n data-testid=\"workflow-badge\"\n icon={<WorkflowIcon className=\"text-span-workflow\" />}\n title={workflow.name}\n initialCollapsed={false}\n extraInfo={\n metadata?.mode === 'network' ? (\n <NetworkChoiceMetadataDialogTrigger\n selectionReason={selectionReason ?? ''}\n input={agentNetworkInput as string | Record<string, unknown> | undefined}\n />\n ) : bgEntry?.taskId && bgEntry?.startedAt ? (\n <BackgroundTaskMetadataDialogTrigger backgroundTask={bgEntry} />\n ) : null\n }\n >\n {hasBody && (\n <>\n {!isStreaming && runId && (\n <PlaygroundWorkflowRunProvider workflowId={workflowId} initialRunId={runId} withoutTimeTravel>\n <WorkflowBadgeExtended workflowId={workflowId} workflow={workflow} runId={runId} />\n </PlaygroundWorkflowRunProvider>\n )}\n\n {isStreaming && <WorkflowBadgeExtended workflowId={workflowId} workflow={workflow} runId={runId} />}\n\n {suspendPayloadSlot !== undefined && suspendPayload && (\n <div>\n <SectionLabel>Workflow suspend payload</SectionLabel>\n {suspendPayloadSlot}\n </div>\n )}\n </>\n )}\n </ToolApprovalBadge>\n );\n};\n\ninterface WorkflowBadgeExtendedProps {\n workflowId: string;\n runId?: string;\n workflow: GetWorkflowResponse;\n}\n\nconst WorkflowBadgeExtended = ({ workflowId, workflow, runId }: WorkflowBadgeExtendedProps) => {\n const requestContext = useEntityRequestContext('workflow', workflowId)[0];\n const { Link } = useLinkComponent();\n const { isLoadingRunExecutionResult } = useContext(WorkflowRunContext);\n\n return (\n <>\n <div className=\"flex items-center gap-2 pb-2\">\n <Button icon={<WorkflowIcon />} render={<Link href={`/workflows/${workflowId}/graph`} />}>\n Go to workflow\n </Button>\n {runId && (\n <Button icon={<Eye />} render={<Link href={`/workflows/${workflowId}/graph/${runId}`} />}>\n See run\n </Button>\n )}\n </div>\n\n <WorkflowSelectedStepProvider>\n <WorkflowStepDetailProvider>\n <div className=\"h-[60vh] w-full overflow-hidden rounded-md\">\n <WorkflowGraph\n workflowId={workflowId}\n workflow={workflow}\n isLoading={isLoadingRunExecutionResult}\n requestContext={requestContext}\n />\n </div>\n <WorkflowBadgeStepDetail requestContext={requestContext} />\n </WorkflowStepDetailProvider>\n </WorkflowSelectedStepProvider>\n </>\n );\n};\n\nconst WorkflowBadgeStepDetail = ({ requestContext }: { requestContext: Record<string, any> }) => {\n const { stepDetail } = useWorkflowStepDetail();\n if (!stepDetail) return null;\n return (\n <div className=\"mt-2 flex max-h-[60vh] flex-col overflow-hidden rounded-md border border-border bg-background\">\n <WorkflowStepDetailContent requestContext={requestContext} />\n </div>\n );\n};\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const useWorkflowStream = (workflowFullState?: WorkflowRunStreamResult) => {\n const { setResult } = useContext(WorkflowRunContext);\n\n useEffect(() => {\n if (!workflowFullState) return;\n setResult(workflowFullState);\n }, [workflowFullState, setResult]);\n};\n"],"names":["useWorkflow","useEntityRequestContext","jsx","ToolCallMono","CodeEditor","LoadingBadge","awaitsToolApproval","ToolApprovalBadge","WorkflowIcon","NetworkChoiceMetadataDialogTrigger","BackgroundTaskMetadataDialogTrigger","jsxs","Fragment","PlaygroundWorkflowRunProvider","SectionLabel","useLinkComponent","useContext","WorkflowRunContext","Button","Eye","WorkflowSelectedStepProvider","WorkflowStepDetailProvider","WorkflowGraph","useWorkflowStepDetail","WorkflowStepDetailContent","useEffect"],"mappings":"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"}
@@ -26,6 +26,7 @@ import '@mastra/core/utils/safe-stringify';
26
26
  import { C as CodeEditor } from '../../../../code-editor-8qu58Npy.js';
27
27
  import '../../../../highlight-CXDme3FZ.js';
28
28
  import '@base-ui/react/use-render';
29
+ import '../../../../tooltip-DrsXZDAj.js';
29
30
  import '../../../workflows/workflow/input/processor-input.es.js';
30
31
  import 'react-hook-form';
31
32
  import '../../../../lib/form/field-context.es.js';
@@ -36,6 +37,8 @@ import '@autoform/react';
36
37
  import '@lukeed/uuid';
37
38
  import '../../../../lib/form/dynamic-form.es.js';
38
39
  import { WorkflowIcon } from '../../../../icons/WorkflowIcon.es.js';
40
+ import '../../../../data-list-BQMBFAyK.js';
41
+ import '../../../../keyboard/keyboard-shortcuts-context.es.js';
39
42
  import { useLinkComponent } from '../../../../lib/framework.es.js';
40
43
  import '../../../workflows/components/workflow-information.es.js';
41
44
  import '@base-ui/react/combobox';
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-badge.es.js","sources":["../../../../../src/domains/chat/tools/badges/workflow-badge.tsx"],"sourcesContent":["import type { GetWorkflowResponse } from '@mastra/client-js';\nimport { useWorkflow } from '@mastra/react/hooks/workflows';\nimport { Eye } from 'lucide-react';\nimport { useContext, useEffect } from 'react';\nimport { BackgroundTaskMetadataDialogTrigger } from './background-task-metadata-dialog';\nimport type { MessageMetadata } from '@/domains/chat';\n\nimport { LoadingBadge } from '@/domains/chat/components/loading-badge';\nimport { NetworkChoiceMetadataDialogTrigger } from '@/domains/chat/components/network-choice-metadata-dialog';\nimport { SectionLabel } from '@/domains/chat/components/section-label';\nimport { awaitsToolApproval } from '@/domains/chat/tools/badges/awaits-tool-approval';\nimport type { ToolApprovalRequest } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport { ToolApprovalBadge } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport { useEntityRequestContext } from '@/domains/request-context/hooks/use-entity-request-context';\nimport {\n WorkflowGraph,\n WorkflowRunContext,\n WorkflowSelectedStepProvider,\n WorkflowStepDetailProvider,\n useWorkflowStepDetail,\n} from '@/domains/workflows';\nimport { WorkflowStepDetailContent } from '@/domains/workflows/components/workflow-step-detail';\nimport { PlaygroundWorkflowRunProvider } from '@/domains/workflows/context/playground-workflow-run-provider';\nimport type { WorkflowRunStreamResult } from '@/domains/workflows/context/workflow-run-context';\nimport { ToolCallMono } from '@/ds/components/ai/tool-call';\nimport { Button } from '@/ds/components/Button';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { useLinkComponent } from '@/lib/framework';\n\nexport interface WorkflowBadgeProps extends Omit<ToolApprovalRequest, 'toolCalled'> {\n workflowId: string;\n result?: any;\n isStreaming?: boolean;\n metadata?: MessageMetadata;\n suspendPayload?: any;\n toolCalled?: boolean;\n}\n\nexport const WorkflowBadge = ({\n result,\n workflowId,\n isStreaming,\n metadata,\n toolCallId,\n toolApprovalMetadata,\n suspendPayload,\n toolName,\n isNetwork,\n toolCalled,\n}: WorkflowBadgeProps) => {\n const { runId, status } = result || {};\n const { data: workflow, isLoading: isWorkflowLoading } = useWorkflow({\n workflowId,\n requestContext: useEntityRequestContext('workflow', workflowId)[0],\n queryOptions: { enabled: Boolean(workflowId) },\n });\n const routingDecision = metadata?.mode === 'network' ? metadata.routingDecision : undefined;\n const selectionReason =\n metadata?.mode === 'network' ? (routingDecision?.selectionReason ?? metadata.selectionReason) : undefined;\n const agentNetworkInput = metadata?.mode === 'network' ? (routingDecision ?? metadata.agentInput) : undefined;\n\n const bgEntry =\n (metadata?.mode === 'stream' || metadata?.mode === 'generate') && metadata?.backgroundTasks\n ? metadata.backgroundTasks[toolCallId]\n : undefined;\n\n let suspendPayloadSlot =\n typeof suspendPayload === 'string' ? (\n <ToolCallMono copyText={suspendPayload} className=\"text-muted-foreground\">\n {suspendPayload}\n </ToolCallMono>\n ) : (\n <CodeEditor data={suspendPayload} data-testid=\"tool-suspend-payload\" />\n );\n\n if (isWorkflowLoading || !workflow) return <LoadingBadge />;\n\n const toolCalledOrFinished = toolCalled ?? !!status;\n const showsRun = isStreaming || Boolean(runId);\n const hasBody =\n showsRun ||\n Boolean(suspendPayload) ||\n awaitsToolApproval({ toolApprovalMetadata, toolCalled: toolCalledOrFinished });\n\n return (\n <ToolApprovalBadge\n approval={{\n toolCalled: toolCalledOrFinished,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n isGenerateMode: metadata?.mode === 'generate',\n }}\n data-testid=\"workflow-badge\"\n icon={<WorkflowIcon className=\"text-span-workflow\" />}\n title={workflow.name}\n initialCollapsed={false}\n extraInfo={\n metadata?.mode === 'network' ? (\n <NetworkChoiceMetadataDialogTrigger\n selectionReason={selectionReason ?? ''}\n input={agentNetworkInput as string | Record<string, unknown> | undefined}\n />\n ) : bgEntry?.taskId && bgEntry?.startedAt ? (\n <BackgroundTaskMetadataDialogTrigger backgroundTask={bgEntry} />\n ) : null\n }\n >\n {hasBody && (\n <>\n {!isStreaming && runId && (\n <PlaygroundWorkflowRunProvider workflowId={workflowId} initialRunId={runId} withoutTimeTravel>\n <WorkflowBadgeExtended workflowId={workflowId} workflow={workflow} runId={runId} />\n </PlaygroundWorkflowRunProvider>\n )}\n\n {isStreaming && <WorkflowBadgeExtended workflowId={workflowId} workflow={workflow} runId={runId} />}\n\n {suspendPayloadSlot !== undefined && suspendPayload && (\n <div>\n <SectionLabel>Workflow suspend payload</SectionLabel>\n {suspendPayloadSlot}\n </div>\n )}\n </>\n )}\n </ToolApprovalBadge>\n );\n};\n\ninterface WorkflowBadgeExtendedProps {\n workflowId: string;\n runId?: string;\n workflow: GetWorkflowResponse;\n}\n\nconst WorkflowBadgeExtended = ({ workflowId, workflow, runId }: WorkflowBadgeExtendedProps) => {\n const requestContext = useEntityRequestContext('workflow', workflowId)[0];\n const { Link } = useLinkComponent();\n const { isLoadingRunExecutionResult } = useContext(WorkflowRunContext);\n\n return (\n <>\n <div className=\"flex items-center gap-2 pb-2\">\n <Button icon={<WorkflowIcon />} render={<Link href={`/workflows/${workflowId}/graph`} />}>\n Go to workflow\n </Button>\n {runId && (\n <Button icon={<Eye />} render={<Link href={`/workflows/${workflowId}/graph/${runId}`} />}>\n See run\n </Button>\n )}\n </div>\n\n <WorkflowSelectedStepProvider>\n <WorkflowStepDetailProvider>\n <div className=\"h-[60vh] w-full overflow-hidden rounded-md\">\n <WorkflowGraph\n workflowId={workflowId}\n workflow={workflow}\n isLoading={isLoadingRunExecutionResult}\n requestContext={requestContext}\n />\n </div>\n <WorkflowBadgeStepDetail requestContext={requestContext} />\n </WorkflowStepDetailProvider>\n </WorkflowSelectedStepProvider>\n </>\n );\n};\n\nconst WorkflowBadgeStepDetail = ({ requestContext }: { requestContext: Record<string, any> }) => {\n const { stepDetail } = useWorkflowStepDetail();\n if (!stepDetail) return null;\n return (\n <div className=\"mt-2 flex max-h-[60vh] flex-col overflow-hidden rounded-md border border-border bg-background\">\n <WorkflowStepDetailContent requestContext={requestContext} />\n </div>\n );\n};\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const useWorkflowStream = (workflowFullState?: WorkflowRunStreamResult) => {\n const { setResult } = useContext(WorkflowRunContext);\n\n useEffect(() => {\n if (!workflowFullState) return;\n setResult(workflowFullState);\n }, [workflowFullState, setResult]);\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-badge.es.js","sources":["../../../../../src/domains/chat/tools/badges/workflow-badge.tsx"],"sourcesContent":["import type { GetWorkflowResponse } from '@mastra/client-js';\nimport { useWorkflow } from '@mastra/react/hooks/workflows';\nimport { Eye } from 'lucide-react';\nimport { useContext, useEffect } from 'react';\nimport { BackgroundTaskMetadataDialogTrigger } from './background-task-metadata-dialog';\nimport type { MessageMetadata } from '@/domains/chat';\n\nimport { LoadingBadge } from '@/domains/chat/components/loading-badge';\nimport { NetworkChoiceMetadataDialogTrigger } from '@/domains/chat/components/network-choice-metadata-dialog';\nimport { SectionLabel } from '@/domains/chat/components/section-label';\nimport { awaitsToolApproval } from '@/domains/chat/tools/badges/awaits-tool-approval';\nimport type { ToolApprovalRequest } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport { ToolApprovalBadge } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport { useEntityRequestContext } from '@/domains/request-context/hooks/use-entity-request-context';\nimport {\n WorkflowGraph,\n WorkflowRunContext,\n WorkflowSelectedStepProvider,\n WorkflowStepDetailProvider,\n useWorkflowStepDetail,\n} from '@/domains/workflows';\nimport { WorkflowStepDetailContent } from '@/domains/workflows/components/workflow-step-detail';\nimport { PlaygroundWorkflowRunProvider } from '@/domains/workflows/context/playground-workflow-run-provider';\nimport type { WorkflowRunStreamResult } from '@/domains/workflows/context/workflow-run-context';\nimport { ToolCallMono } from '@/ds/components/ai/tool-call';\nimport { Button } from '@/ds/components/Button';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { useLinkComponent } from '@/lib/framework';\n\nexport interface WorkflowBadgeProps extends Omit<ToolApprovalRequest, 'toolCalled'> {\n workflowId: string;\n result?: any;\n isStreaming?: boolean;\n metadata?: MessageMetadata;\n suspendPayload?: any;\n toolCalled?: boolean;\n}\n\nexport const WorkflowBadge = ({\n result,\n workflowId,\n isStreaming,\n metadata,\n toolCallId,\n toolApprovalMetadata,\n suspendPayload,\n toolName,\n isNetwork,\n toolCalled,\n}: WorkflowBadgeProps) => {\n const { runId, status } = result || {};\n const { data: workflow, isLoading: isWorkflowLoading } = useWorkflow({\n workflowId,\n requestContext: useEntityRequestContext('workflow', workflowId)[0],\n queryOptions: { enabled: Boolean(workflowId) },\n });\n const routingDecision = metadata?.mode === 'network' ? metadata.routingDecision : undefined;\n const selectionReason =\n metadata?.mode === 'network' ? (routingDecision?.selectionReason ?? metadata.selectionReason) : undefined;\n const agentNetworkInput = metadata?.mode === 'network' ? (routingDecision ?? metadata.agentInput) : undefined;\n\n const bgEntry =\n (metadata?.mode === 'stream' || metadata?.mode === 'generate') && metadata?.backgroundTasks\n ? metadata.backgroundTasks[toolCallId]\n : undefined;\n\n let suspendPayloadSlot =\n typeof suspendPayload === 'string' ? (\n <ToolCallMono copyText={suspendPayload} className=\"text-muted-foreground\">\n {suspendPayload}\n </ToolCallMono>\n ) : (\n <CodeEditor data={suspendPayload} data-testid=\"tool-suspend-payload\" />\n );\n\n if (isWorkflowLoading || !workflow) return <LoadingBadge />;\n\n const toolCalledOrFinished = toolCalled ?? !!status;\n const showsRun = isStreaming || Boolean(runId);\n const hasBody =\n showsRun ||\n Boolean(suspendPayload) ||\n awaitsToolApproval({ toolApprovalMetadata, toolCalled: toolCalledOrFinished });\n\n return (\n <ToolApprovalBadge\n approval={{\n toolCalled: toolCalledOrFinished,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n isGenerateMode: metadata?.mode === 'generate',\n }}\n data-testid=\"workflow-badge\"\n icon={<WorkflowIcon className=\"text-span-workflow\" />}\n title={workflow.name}\n initialCollapsed={false}\n extraInfo={\n metadata?.mode === 'network' ? (\n <NetworkChoiceMetadataDialogTrigger\n selectionReason={selectionReason ?? ''}\n input={agentNetworkInput as string | Record<string, unknown> | undefined}\n />\n ) : bgEntry?.taskId && bgEntry?.startedAt ? (\n <BackgroundTaskMetadataDialogTrigger backgroundTask={bgEntry} />\n ) : null\n }\n >\n {hasBody && (\n <>\n {!isStreaming && runId && (\n <PlaygroundWorkflowRunProvider workflowId={workflowId} initialRunId={runId} withoutTimeTravel>\n <WorkflowBadgeExtended workflowId={workflowId} workflow={workflow} runId={runId} />\n </PlaygroundWorkflowRunProvider>\n )}\n\n {isStreaming && <WorkflowBadgeExtended workflowId={workflowId} workflow={workflow} runId={runId} />}\n\n {suspendPayloadSlot !== undefined && suspendPayload && (\n <div>\n <SectionLabel>Workflow suspend payload</SectionLabel>\n {suspendPayloadSlot}\n </div>\n )}\n </>\n )}\n </ToolApprovalBadge>\n );\n};\n\ninterface WorkflowBadgeExtendedProps {\n workflowId: string;\n runId?: string;\n workflow: GetWorkflowResponse;\n}\n\nconst WorkflowBadgeExtended = ({ workflowId, workflow, runId }: WorkflowBadgeExtendedProps) => {\n const requestContext = useEntityRequestContext('workflow', workflowId)[0];\n const { Link } = useLinkComponent();\n const { isLoadingRunExecutionResult } = useContext(WorkflowRunContext);\n\n return (\n <>\n <div className=\"flex items-center gap-2 pb-2\">\n <Button icon={<WorkflowIcon />} render={<Link href={`/workflows/${workflowId}/graph`} />}>\n Go to workflow\n </Button>\n {runId && (\n <Button icon={<Eye />} render={<Link href={`/workflows/${workflowId}/graph/${runId}`} />}>\n See run\n </Button>\n )}\n </div>\n\n <WorkflowSelectedStepProvider>\n <WorkflowStepDetailProvider>\n <div className=\"h-[60vh] w-full overflow-hidden rounded-md\">\n <WorkflowGraph\n workflowId={workflowId}\n workflow={workflow}\n isLoading={isLoadingRunExecutionResult}\n requestContext={requestContext}\n />\n </div>\n <WorkflowBadgeStepDetail requestContext={requestContext} />\n </WorkflowStepDetailProvider>\n </WorkflowSelectedStepProvider>\n </>\n );\n};\n\nconst WorkflowBadgeStepDetail = ({ requestContext }: { requestContext: Record<string, any> }) => {\n const { stepDetail } = useWorkflowStepDetail();\n if (!stepDetail) return null;\n return (\n <div className=\"mt-2 flex max-h-[60vh] flex-col overflow-hidden rounded-md border border-border bg-background\">\n <WorkflowStepDetailContent requestContext={requestContext} />\n </div>\n );\n};\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport const useWorkflowStream = (workflowFullState?: WorkflowRunStreamResult) => {\n const { setResult } = useContext(WorkflowRunContext);\n\n useEffect(() => {\n if (!workflowFullState) return;\n setResult(workflowFullState);\n }, [workflowFullState, setResult]);\n};\n"],"names":[],"mappings":"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"}
@@ -34,6 +34,7 @@ exports.ToolCallProvider = domains_chat_context_toolCallContext.ToolCallProvider
34
34
  exports.useOptionalToolCall = domains_chat_context_toolCallContext.useOptionalToolCall;
35
35
  exports.useToolCall = domains_chat_context_toolCallContext.useToolCall;
36
36
  exports.formatSignalValue = domains_chat_messages_signalData.formatSignalValue;
37
+ exports.getMcpEventSignalInfo = domains_chat_messages_signalData.getMcpEventSignalInfo;
37
38
  exports.getNotificationMetadata = domains_chat_messages_signalData.getNotificationMetadata;
38
39
  exports.getSignalType = domains_chat_messages_signalData.getSignalType;
39
40
  exports.isRecord = domains_chat_messages_signalData.isRecord;
@@ -1 +1 @@
1
- {"version":3,"file":"chat.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"chat.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -4,7 +4,7 @@ export { NetworkChoiceMetadataDialogTrigger } from './chat/components/network-ch
4
4
  export { SectionLabel } from './chat/components/section-label.es.js';
5
5
  export { ChatAgentContext, ChatMessagesContext, ChatRunningContext, ChatSendContext, ChatTasksContext, useChatMessages, useChatRunning, useChatSend, useChatTasks } from './chat/context/chat-context.es.js';
6
6
  export { ToolCallProvider, useOptionalToolCall, useToolCall } from './chat/context/tool-call-context.es.js';
7
- export { formatSignalValue, getNotificationMetadata, getSignalType, isRecord, isSignalData, isUserSignalType, signalContentsToText, toReactiveSignalData } from './chat/messages/signal-data.es.js';
7
+ export { formatSignalValue, getMcpEventSignalInfo, getNotificationMetadata, getSignalType, isRecord, isSignalData, isUserSignalType, signalContentsToText, toReactiveSignalData } from './chat/messages/signal-data.es.js';
8
8
  export { isToolPart, readToolPart } from './chat/messages/renderers/tool-part.es.js';
9
9
  export { DatasetSaveProvider } from './chat/context/dataset-save-context.es.js';
10
10
  export { useDatasetSaveContext } from './chat/context/dataset-save-context-value.es.js';
@@ -18,7 +18,7 @@ const Button = require('../../../../Button-C4I05uT4.cjs');
18
18
  const codeEditor = require('../../../../code-editor-4ukTuvqG.cjs');
19
19
  require('../../../../highlight-DfnRU-Am.cjs');
20
20
  const dialog = require('../../../../dialog-SSeOqRnH.cjs');
21
- const field = require('../../../../field-BCU5ZtWV.cjs');
21
+ const field = require('../../../../field-CZ5fldpM.cjs');
22
22
  require('../../../../field-control-aria-WzMGs0A4.cjs');
23
23
  const Txt = require('../../../../Txt-CIS2G5Jx.cjs');
24
24
  const settingsContainer = require('../../../../settings-container-umHxLp1a.cjs');
@@ -70,6 +70,14 @@ const STEPS = {
70
70
  };
71
71
  const GROUND_TRUTH_PLACEHOLDER = '{ "text": "The answer you expect" }';
72
72
  const hasContent = (value) => !["", "{}"].includes(value.trim());
73
+ const isJson = (value) => {
74
+ try {
75
+ JSON.parse(value);
76
+ return true;
77
+ } catch {
78
+ return false;
79
+ }
80
+ };
73
81
  const STEP_COUNT = Object.keys(STEPS).length;
74
82
  const STEP_OF_FIELD = {
75
83
  input: 1,
@@ -183,7 +191,7 @@ function AddDatasetItemForm({
183
191
  const errorOf = (field) => formError?.field === field ? formError.message : void 0;
184
192
  const apiErrorsOf = (field) => apiErrors?.field === field ? apiErrors.errors : [];
185
193
  const isInvalid = (field) => Boolean(errorOf(field)) || apiErrorsOf(field).length > 0;
186
- const editJson = (field) => (value) => {
194
+ const editField = (field) => (value) => {
187
195
  update(() => ({ [field]: value }));
188
196
  setApiErrors(void 0);
189
197
  };
@@ -202,19 +210,19 @@ function AddDatasetItemForm({
202
210
  onCreateDataset: renderCreateDatasetDialog ? () => setIsCreateDatasetOpen(true) : void 0
203
211
  }
204
212
  ),
205
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-5 sm:grid-cols-2", children: [
213
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid items-start gap-5 sm:grid-cols-2", children: [
206
214
  /* @__PURE__ */ jsxRuntime.jsxs(field.Field, { invalid: isInvalid("input"), children: [
207
215
  /* @__PURE__ */ jsxRuntime.jsx(field.FieldLabel, { required: true, children: "Input" }),
208
- /* @__PURE__ */ jsxRuntime.jsx(field.FieldDescription, { children: "What the target receives when this item runs." }),
216
+ /* @__PURE__ */ jsxRuntime.jsx(field.FieldDescription, { children: "What the target receives when this item runs. JSON or plain text." }),
209
217
  /* @__PURE__ */ jsxRuntime.jsx(
210
218
  codeEditor.CodeEditor,
211
219
  {
212
220
  value: draft.input,
213
- onChange: editJson("input"),
214
- "aria-label": "Input JSON",
221
+ onChange: editField("input"),
222
+ "aria-label": "Input",
215
223
  showCopyButton: hasContent(draft.input),
216
- showFormatButton: hasContent(draft.input),
217
- className: "min-h-[220px]"
224
+ showFormatButton: hasContent(draft.input) && isJson(draft.input),
225
+ className: "h-[220px]"
218
226
  }
219
227
  ),
220
228
  /* @__PURE__ */ jsxRuntime.jsx(field.FieldError, { children: errorOf("input") }),
@@ -222,17 +230,17 @@ function AddDatasetItemForm({
222
230
  ] }),
223
231
  /* @__PURE__ */ jsxRuntime.jsxs(field.Field, { invalid: isInvalid("groundTruth"), children: [
224
232
  /* @__PURE__ */ jsxRuntime.jsx(field.FieldLabel, { children: "Ground truth" }),
225
- /* @__PURE__ */ jsxRuntime.jsx(field.FieldDescription, { children: "The expected answer scorers compare against." }),
233
+ /* @__PURE__ */ jsxRuntime.jsx(field.FieldDescription, { children: "The expected answer scorers compare against. JSON or plain text." }),
226
234
  /* @__PURE__ */ jsxRuntime.jsx(
227
235
  codeEditor.CodeEditor,
228
236
  {
229
237
  value: draft.groundTruth,
230
- onChange: editJson("groundTruth"),
231
- "aria-label": "Ground truth JSON",
238
+ onChange: editField("groundTruth"),
239
+ "aria-label": "Ground truth",
232
240
  placeholder: GROUND_TRUTH_PLACEHOLDER,
233
241
  showCopyButton: hasContent(draft.groundTruth),
234
- showFormatButton: hasContent(draft.groundTruth),
235
- className: "min-h-[220px]"
242
+ showFormatButton: hasContent(draft.groundTruth) && isJson(draft.groundTruth),
243
+ className: "h-[220px]"
236
244
  }
237
245
  ),
238
246
  /* @__PURE__ */ jsxRuntime.jsx(field.FieldError, { children: errorOf("groundTruth") }),
@@ -245,12 +253,12 @@ function AddDatasetItemForm({
245
253
  codeEditor.CodeEditor,
246
254
  {
247
255
  value: draft.toolMocks,
248
- onChange: editJson("toolMocks"),
256
+ onChange: editField("toolMocks"),
249
257
  "aria-label": "Tool mocks JSON",
250
258
  placeholder: TOOL_MOCKS_PLACEHOLDER,
251
259
  showCopyButton: hasContent(draft.toolMocks),
252
260
  showFormatButton: hasContent(draft.toolMocks),
253
- className: "min-h-[220px]"
261
+ className: "h-80"
254
262
  }
255
263
  ),
256
264
  /* @__PURE__ */ jsxRuntime.jsx(field.FieldError, { children: errorOf("toolMocks") }),
@@ -269,7 +277,7 @@ function AddDatasetItemForm({
269
277
  codeEditor.CodeEditor,
270
278
  {
271
279
  value: draft.requestContext,
272
- onChange: editJson("requestContext"),
280
+ onChange: editField("requestContext"),
273
281
  "aria-label": "Request context JSON",
274
282
  placeholder: requestContextPlaceholder(targetDataset?.requestContextSchema),
275
283
  showCopyButton: hasContent(draft.requestContext),