@mastra/playground-ui 67.0.0 → 68.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (929) hide show
  1. package/dist/{ActionRow-BfK77pCT.cjs → ActionRow-BlC9GAef.cjs} +4 -4
  2. package/dist/ActionRow-BlC9GAef.cjs.map +1 -0
  3. package/dist/{ActionRow-Cd6tOC2K.js → ActionRow-DCrRCvBq.js} +4 -4
  4. package/dist/ActionRow-DCrRCvBq.js.map +1 -0
  5. package/dist/{Button-Bw1e3ONi.js → Button-CLXTbAY8.js} +42 -13
  6. package/dist/Button-CLXTbAY8.js.map +1 -0
  7. package/dist/{Button-YQRflC47.cjs → Button-DLcMcuUL.cjs} +58 -11
  8. package/dist/Button-DLcMcuUL.cjs.map +1 -0
  9. package/dist/{CodeEditor-CJ9jC9lu.cjs → CodeEditor-CLzs0yVc.cjs} +4 -4
  10. package/dist/{CodeEditor-CJ9jC9lu.cjs.map → CodeEditor-CLzs0yVc.cjs.map} +1 -1
  11. package/dist/{CodeEditor-CPVxj7WS.js → CodeEditor-COnz9c6B.js} +4 -4
  12. package/dist/{CodeEditor-CPVxj7WS.js.map → CodeEditor-COnz9c6B.js.map} +1 -1
  13. package/dist/{Comment-VFJq2wRp.js → Comment-0n98b_f_.js} +3 -3
  14. package/dist/{Comment-VFJq2wRp.js.map → Comment-0n98b_f_.js.map} +1 -1
  15. package/dist/{Comment-KYUQzeSu.cjs → Comment-Cg0f7eLa.cjs} +3 -3
  16. package/dist/{Comment-KYUQzeSu.cjs.map → Comment-Cg0f7eLa.cjs.map} +1 -1
  17. package/dist/{DataCodeSection-CZRPsStI.cjs → DataCodeSection-CcPmJPTp.cjs} +8 -8
  18. package/dist/{DataCodeSection-CZRPsStI.cjs.map → DataCodeSection-CcPmJPTp.cjs.map} +1 -1
  19. package/dist/{DataCodeSection-Ckd47p_S.js → DataCodeSection-KJRyRD1Q.js} +6 -6
  20. package/dist/{DataCodeSection-Ckd47p_S.js.map → DataCodeSection-KJRyRD1Q.js.map} +1 -1
  21. package/dist/{DataDetailsPanel-_CK0Huk6.js → DataDetailsPanel-CohEKPm4.js} +5 -5
  22. package/dist/{DataDetailsPanel-_CK0Huk6.js.map → DataDetailsPanel-CohEKPm4.js.map} +1 -1
  23. package/dist/{DataDetailsPanel-DFhM9H5D.cjs → DataDetailsPanel-DiyjEXqK.cjs} +6 -6
  24. package/dist/{DataDetailsPanel-DFhM9H5D.cjs.map → DataDetailsPanel-DiyjEXqK.cjs.map} +1 -1
  25. package/dist/{DataList-2tIlQsLc.js → DataList-CUhRQAv6.js} +2 -2
  26. package/dist/{DataList-2tIlQsLc.js.map → DataList-CUhRQAv6.js.map} +1 -1
  27. package/dist/{DataList-Czwmwyvp.cjs → DataList-Cj0mfk19.cjs} +2 -2
  28. package/dist/{DataList-Czwmwyvp.cjs.map → DataList-Cj0mfk19.cjs.map} +1 -1
  29. package/dist/{DataPanel-CY1W5LHJ.js → DataPanel-Bv4M17xO.js} +3 -3
  30. package/dist/{DataPanel-CY1W5LHJ.js.map → DataPanel-Bv4M17xO.js.map} +1 -1
  31. package/dist/{DataPanel-C0Ll76Ne.cjs → DataPanel-BwB1Oifd.cjs} +3 -3
  32. package/dist/{DataPanel-C0Ll76Ne.cjs.map → DataPanel-BwB1Oifd.cjs.map} +1 -1
  33. package/dist/{Dialog-CjaiCrkv.cjs → Dialog-BvWF9HE-.cjs} +2 -2
  34. package/dist/{Dialog-CjaiCrkv.cjs.map → Dialog-BvWF9HE-.cjs.map} +1 -1
  35. package/dist/{Dialog-CKtTR8h3.js → Dialog-DaWtxwd9.js} +2 -2
  36. package/dist/{Dialog-CKtTR8h3.js.map → Dialog-DaWtxwd9.js.map} +1 -1
  37. package/dist/{ErrorBoundary-Bm0LL_b7.cjs → ErrorBoundary-B5GjmA6V.cjs} +2 -2
  38. package/dist/{ErrorBoundary-Bm0LL_b7.cjs.map → ErrorBoundary-B5GjmA6V.cjs.map} +1 -1
  39. package/dist/{ErrorBoundary-95_6A77S.js → ErrorBoundary-Cat3KU86.js} +2 -2
  40. package/dist/{ErrorBoundary-95_6A77S.js.map → ErrorBoundary-Cat3KU86.js.map} +1 -1
  41. package/dist/{FilterBar--4oguuVe.js → FilterBar-BO-vvvyq.js} +18 -22
  42. package/dist/FilterBar-BO-vvvyq.js.map +1 -0
  43. package/dist/{FilterBar-BUd4f7oi.cjs → FilterBar-Buw0tv51.cjs} +18 -22
  44. package/dist/FilterBar-Buw0tv51.cjs.map +1 -0
  45. package/dist/KnowledgePageGraph.css +11 -0
  46. package/dist/{LogsDataList-Cslabh8K.js → LogsDataList-BI2C5OJz.js} +2 -2
  47. package/dist/{LogsDataList-Cslabh8K.js.map → LogsDataList-BI2C5OJz.js.map} +1 -1
  48. package/dist/{LogsDataList-DMmxAt_t.cjs → LogsDataList-CCIfUPGo.cjs} +2 -2
  49. package/dist/{LogsDataList-DMmxAt_t.cjs.map → LogsDataList-CCIfUPGo.cjs.map} +1 -1
  50. package/dist/{MarkdownRenderer-DME2xKTk.js → MarkdownRenderer-2GOXQJEv.js} +3 -3
  51. package/dist/{MarkdownRenderer-DME2xKTk.js.map → MarkdownRenderer-2GOXQJEv.js.map} +1 -1
  52. package/dist/{MarkdownRenderer-CS6u5drO.cjs → MarkdownRenderer-CB8Z_CHc.cjs} +4 -4
  53. package/dist/{MarkdownRenderer-CS6u5drO.cjs.map → MarkdownRenderer-CB8Z_CHc.cjs.map} +1 -1
  54. package/dist/{Message-nVI6tMS3.js → Message-CWzi5F_Q.js} +2 -2
  55. package/dist/{Message-nVI6tMS3.js.map → Message-CWzi5F_Q.js.map} +1 -1
  56. package/dist/{Message-DsCNQpou.cjs → Message-jj56lxNL.cjs} +2 -2
  57. package/dist/{Message-DsCNQpou.cjs.map → Message-jj56lxNL.cjs.map} +1 -1
  58. package/dist/{Notice-CyKngbbv.js → Notice-C-8oOZZF.js} +2 -2
  59. package/dist/{Notice-CyKngbbv.js.map → Notice-C-8oOZZF.js.map} +1 -1
  60. package/dist/{Notice-DWNeCe-t.cjs → Notice-JZ7SW7q6.cjs} +2 -2
  61. package/dist/{Notice-DWNeCe-t.cjs.map → Notice-JZ7SW7q6.cjs.map} +1 -1
  62. package/dist/{Workflow-BVWvgDmI.js → Workflow-C3SlEdP-.js} +5 -5
  63. package/dist/{Workflow-BVWvgDmI.js.map → Workflow-C3SlEdP-.js.map} +1 -1
  64. package/dist/{Workflow-BeF6pIO9.cjs → Workflow-DSWQ-ROz.cjs} +5 -5
  65. package/dist/{Workflow-BeF6pIO9.cjs.map → Workflow-DSWQ-ROz.cjs.map} +1 -1
  66. package/dist/{activity-DAK8tj7r.cjs → activity-DyB5H3gF.cjs} +2 -2
  67. package/dist/{activity-DAK8tj7r.cjs.map → activity-DyB5H3gF.cjs.map} +1 -1
  68. package/dist/{activity-CM34JyW-.js → activity-rJ1NQl_2.js} +2 -2
  69. package/dist/{activity-CM34JyW-.js.map → activity-rJ1NQl_2.js.map} +1 -1
  70. package/dist/{ask-user-BdjH9F7G.js → ask-user-B225wzWc.js} +2 -2
  71. package/dist/{ask-user-BdjH9F7G.js.map → ask-user-B225wzWc.js.map} +1 -1
  72. package/dist/{ask-user-C82m_G9W.cjs → ask-user-DdYz56qH.cjs} +2 -2
  73. package/dist/{ask-user-C82m_G9W.cjs.map → ask-user-DdYz56qH.cjs.map} +1 -1
  74. package/dist/buttons-group-Dc6R7YSs.cjs +48 -0
  75. package/dist/buttons-group-Dc6R7YSs.cjs.map +1 -0
  76. package/dist/buttons-group-DkFlnMiL.js +35 -0
  77. package/dist/buttons-group-DkFlnMiL.js.map +1 -0
  78. package/dist/{ButtonsGroup.css → buttons-group.css} +2 -0
  79. package/dist/clear-filters-button-Buc973vw.cjs +27 -0
  80. package/dist/clear-filters-button-Buc973vw.cjs.map +1 -0
  81. package/dist/clear-filters-button-CNrRuHOY.js +22 -0
  82. package/dist/clear-filters-button-CNrRuHOY.js.map +1 -0
  83. package/dist/{combobox-8kNAJFlj.cjs → combobox-CMx2ayFN.cjs} +3 -3
  84. package/dist/{combobox-8kNAJFlj.cjs.map → combobox-CMx2ayFN.cjs.map} +1 -1
  85. package/dist/{combobox-wFudhN8F.js → combobox-CtCK0mNx.js} +3 -3
  86. package/dist/{combobox-wFudhN8F.js.map → combobox-CtCK0mNx.js.map} +1 -1
  87. package/dist/{combobox-parts-W7KRQUsV.js → combobox-parts-C1CugUAU.js} +11 -19
  88. package/dist/combobox-parts-C1CugUAU.js.map +1 -0
  89. package/dist/{combobox-parts-BZVXwbG7.cjs → combobox-parts-ScKcYjMR.cjs} +10 -18
  90. package/dist/combobox-parts-ScKcYjMR.cjs.map +1 -0
  91. package/dist/components/ActionRow.cjs.js +1 -1
  92. package/dist/components/ActionRow.es.js +1 -1
  93. package/dist/components/AlertDialog.cjs.js +2 -2
  94. package/dist/components/AlertDialog.es.js +2 -2
  95. package/dist/components/Button.cjs.js +4 -1
  96. package/dist/components/Button.es.js +2 -2
  97. package/dist/components/ButtonsGroup.cjs.js +3 -38
  98. package/dist/components/ButtonsGroup.es.js +1 -35
  99. package/dist/components/ClampedText.cjs.js +1 -1
  100. package/dist/components/ClampedText.es.js +1 -1
  101. package/dist/components/ClearFiltersButton.cjs.js +3 -0
  102. package/dist/components/ClearFiltersButton.d.ts +1 -0
  103. package/dist/components/ClearFiltersButton.es.js +1 -0
  104. package/dist/components/CodeBlock.cjs.js +3 -3
  105. package/dist/components/CodeBlock.es.js +3 -3
  106. package/dist/components/CodeEditor.cjs.js +1 -1
  107. package/dist/components/CodeEditor.es.js +1 -1
  108. package/dist/components/CollapsibleBox.cjs.js +1 -1
  109. package/dist/components/CollapsibleBox.es.js +1 -1
  110. package/dist/components/Combobox.cjs.js +2 -2
  111. package/dist/components/Combobox.es.js +2 -2
  112. package/dist/components/Command.cjs.js +3 -2
  113. package/dist/components/Command.cjs.js.map +1 -1
  114. package/dist/components/Command.es.js +3 -2
  115. package/dist/components/Command.es.js.map +1 -1
  116. package/dist/components/Comment.cjs.js +1 -1
  117. package/dist/components/Comment.es.js +1 -1
  118. package/dist/components/CopyButton.cjs.js +1 -1
  119. package/dist/components/CopyButton.es.js +1 -1
  120. package/dist/components/DataCodeSection.cjs.js +1 -1
  121. package/dist/components/DataCodeSection.es.js +1 -1
  122. package/dist/components/DataDetailsPanel.cjs.js +1 -1
  123. package/dist/components/DataDetailsPanel.es.js +1 -1
  124. package/dist/components/DataList.cjs.js +3 -3
  125. package/dist/components/DataList.es.js +3 -3
  126. package/dist/components/DataPanel.cjs.js +1 -1
  127. package/dist/components/DataPanel.es.js +1 -1
  128. package/dist/components/DateRangeTimeline.cjs.js +1 -1
  129. package/dist/components/DateRangeTimeline.es.js +1 -1
  130. package/dist/components/DateTimePicker.cjs.js +2 -2
  131. package/dist/components/DateTimePicker.es.js +2 -2
  132. package/dist/components/DateTimeRangePicker.cjs.js +2 -2
  133. package/dist/components/DateTimeRangePicker.es.js +1 -1
  134. package/dist/components/Dialog.cjs.js +1 -1
  135. package/dist/components/Dialog.es.js +1 -1
  136. package/dist/components/DisabledFeatureButton.cjs.js +1 -1
  137. package/dist/components/DisabledFeatureButton.es.js +1 -1
  138. package/dist/components/Drawer.cjs.js +1 -1
  139. package/dist/components/Drawer.es.js +1 -1
  140. package/dist/components/EnvironmentVariablesEditor.cjs.js +4 -4
  141. package/dist/components/EnvironmentVariablesEditor.es.js +4 -4
  142. package/dist/components/ErrorBoundary.cjs.js +1 -1
  143. package/dist/components/ErrorBoundary.es.js +1 -1
  144. package/dist/components/FilterBar.cjs.js +7 -2
  145. package/dist/components/FilterBar.es.js +4 -3
  146. package/dist/components/FormFieldBlocks.cjs.js +2 -2
  147. package/dist/components/FormFieldBlocks.es.js +2 -2
  148. package/dist/components/InputGroup.cjs.js +1 -1
  149. package/dist/components/InputGroup.es.js +1 -1
  150. package/dist/components/InputNumber.cjs.js +2 -2
  151. package/dist/components/InputNumber.es.js +2 -2
  152. package/dist/components/JSONSchemaForm.cjs.js +2 -2
  153. package/dist/components/JSONSchemaForm.es.js +2 -2
  154. package/dist/components/ListSearch.cjs.js +1 -1
  155. package/dist/components/ListSearch.es.js +1 -1
  156. package/dist/components/LogsDataList.cjs.js +2 -2
  157. package/dist/components/LogsDataList.es.js +2 -2
  158. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  159. package/dist/components/MarkdownRenderer.es.js +1 -1
  160. package/dist/components/Message.cjs.js +1 -1
  161. package/dist/components/Message.es.js +1 -1
  162. package/dist/components/Notice.cjs.js +1 -1
  163. package/dist/components/Notice.es.js +1 -1
  164. package/dist/components/PrevNextNav.cjs.js +1 -1
  165. package/dist/components/PrevNextNav.es.js +1 -1
  166. package/dist/components/PropertyFilter.cjs.js +3 -3
  167. package/dist/components/PropertyFilter.es.js +3 -3
  168. package/dist/components/RuleBuilder.cjs.js +2 -2
  169. package/dist/components/RuleBuilder.es.js +2 -2
  170. package/dist/components/SavedViews.cjs.js +4 -3
  171. package/dist/components/SavedViews.cjs.js.map +1 -1
  172. package/dist/components/SavedViews.es.js +4 -3
  173. package/dist/components/SavedViews.es.js.map +1 -1
  174. package/dist/components/SearchInput.cjs.js +5 -2
  175. package/dist/components/SearchInput.cjs.js.map +1 -1
  176. package/dist/components/SearchInput.es.js +5 -2
  177. package/dist/components/SearchInput.es.js.map +1 -1
  178. package/dist/components/Select.cjs.js +1 -1
  179. package/dist/components/Select.es.js +1 -1
  180. package/dist/components/SideDialog.cjs.js +5 -5
  181. package/dist/components/SideDialog.cjs.js.map +1 -1
  182. package/dist/components/SideDialog.es.js +4 -4
  183. package/dist/components/Sidebar.cjs.js +3 -3
  184. package/dist/components/Sidebar.es.js +3 -3
  185. package/dist/components/Tabs.cjs.js +2 -2
  186. package/dist/components/Tabs.es.js +2 -2
  187. package/dist/components/ThreadList.cjs.js +1 -1
  188. package/dist/components/ThreadList.es.js +1 -1
  189. package/dist/components/Toaster.cjs.js +2 -2
  190. package/dist/components/Toaster.es.js +2 -2
  191. package/dist/components/Truncate.cjs.js +1 -1
  192. package/dist/components/Truncate.es.js +1 -1
  193. package/dist/components/Workflow.cjs.js +1 -1
  194. package/dist/components/Workflow.es.js +1 -1
  195. package/dist/components/ai/activity.cjs.js +1 -1
  196. package/dist/components/ai/activity.es.js +1 -1
  197. package/dist/components/ai/ask-user.cjs.js +1 -1
  198. package/dist/components/ai/ask-user.es.js +1 -1
  199. package/dist/components/ai/plan.cjs.js +2 -2
  200. package/dist/components/ai/plan.es.js +2 -2
  201. package/dist/components/ai/tool-approval.cjs.js +1 -1
  202. package/dist/components/ai/tool-approval.es.js +1 -1
  203. package/dist/components/ai/tool-call.cjs.js +2 -2
  204. package/dist/components/ai/tool-call.es.js +2 -2
  205. package/dist/{copy-button-CF-X4iDj.js → copy-button-BXrbevLn.js} +2 -2
  206. package/dist/{copy-button-CF-X4iDj.js.map → copy-button-BXrbevLn.js.map} +1 -1
  207. package/dist/{copy-button-BYEFKNpo.cjs → copy-button-DJAQ6_3o.cjs} +2 -2
  208. package/dist/{copy-button-BYEFKNpo.cjs.map → copy-button-DJAQ6_3o.cjs.map} +1 -1
  209. package/dist/{data-list-BkimqE_P.cjs → data-list-C4Vmq5HA.cjs} +2 -2
  210. package/dist/{data-list-BkimqE_P.cjs.map → data-list-C4Vmq5HA.cjs.map} +1 -1
  211. package/dist/{data-list-evmf5xWI.js → data-list-DHCOoLmj.js} +2 -2
  212. package/dist/{data-list-evmf5xWI.js.map → data-list-DHCOoLmj.js.map} +1 -1
  213. package/dist/{DateTimeRangePicker-HmPOHwAQ.cjs → date-time-range-picker-CTt7Od0P.cjs} +71 -57
  214. package/dist/date-time-range-picker-CTt7Od0P.cjs.map +1 -0
  215. package/dist/{DateTimeRangePicker-C_Lie_2P.js → date-time-range-picker-DKh1K9Iy.js} +72 -58
  216. package/dist/date-time-range-picker-DKh1K9Iy.js.map +1 -0
  217. package/dist/domains/auth/components/session-expired.cjs.js +2 -2
  218. package/dist/domains/auth/components/session-expired.es.js +2 -2
  219. package/dist/domains/chat/activity/activity-stretch-line.cjs.js +1 -1
  220. package/dist/domains/chat/activity/activity-stretch-line.es.js +1 -1
  221. package/dist/domains/chat/activity/components/activity-fold.cjs.js +1 -1
  222. package/dist/domains/chat/activity/components/activity-fold.es.js +1 -1
  223. package/dist/domains/chat/activity/components/activity-timed-trigger.cjs.js +1 -1
  224. package/dist/domains/chat/activity/components/activity-timed-trigger.es.js +1 -1
  225. package/dist/domains/chat/activity/components/calls-panel.cjs.js +1 -1
  226. package/dist/domains/chat/activity/components/calls-panel.es.js +1 -1
  227. package/dist/domains/chat/activity/components/stretch-content.cjs.js +1 -1
  228. package/dist/domains/chat/activity/components/stretch-content.es.js +1 -1
  229. package/dist/domains/chat/activity/components/stretch-thought.cjs.js +1 -1
  230. package/dist/domains/chat/activity/components/stretch-thought.es.js +1 -1
  231. package/dist/domains/chat/activity/model/activity-segments.cjs.js +1 -1
  232. package/dist/domains/chat/activity/model/activity-segments.es.js +1 -1
  233. package/dist/domains/chat/activity/model/activity-words.cjs.js +2 -2
  234. package/dist/domains/chat/activity/model/activity-words.es.js +2 -2
  235. package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +2 -2
  236. package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +2 -2
  237. package/dist/domains/chat/attachments/composer-attachment.cjs.js +1 -1
  238. package/dist/domains/chat/attachments/composer-attachment.es.js +1 -1
  239. package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
  240. package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
  241. package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +3 -3
  242. package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +3 -3
  243. package/dist/domains/chat/knowledge/knowledge-links.cjs.js +40 -0
  244. package/dist/domains/chat/knowledge/knowledge-links.cjs.js.map +1 -0
  245. package/dist/domains/chat/knowledge/knowledge-links.d.ts +1 -0
  246. package/dist/domains/chat/knowledge/knowledge-links.es.js +38 -0
  247. package/dist/domains/chat/knowledge/knowledge-links.es.js.map +1 -0
  248. package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js +79 -0
  249. package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js.map +1 -0
  250. package/dist/domains/chat/knowledge/pinned-knowledge-data.d.ts +1 -0
  251. package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js +77 -0
  252. package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js.map +1 -0
  253. package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js +124 -0
  254. package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js.map +1 -0
  255. package/dist/domains/chat/knowledge/pinned-knowledge.d.ts +1 -0
  256. package/dist/domains/chat/knowledge/pinned-knowledge.es.js +123 -0
  257. package/dist/domains/chat/knowledge/pinned-knowledge.es.js.map +1 -0
  258. package/dist/domains/chat/knowledge.cjs.js +12 -0
  259. package/dist/domains/chat/knowledge.d.ts +1 -0
  260. package/dist/domains/chat/knowledge.es.js +5 -0
  261. package/dist/domains/chat/messages/assistant-message-actions.cjs.js +2 -2
  262. package/dist/domains/chat/messages/assistant-message-actions.es.js +2 -2
  263. package/dist/domains/chat/messages/dataset-save-action.cjs.js +5 -5
  264. package/dist/domains/chat/messages/dataset-save-action.es.js +5 -5
  265. package/dist/domains/chat/messages/message-row.cjs.js +4 -4
  266. package/dist/domains/chat/messages/message-row.es.js +4 -4
  267. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  268. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  269. package/dist/domains/chat/messages/reasoning-content.cjs.js +1 -1
  270. package/dist/domains/chat/messages/reasoning-content.es.js +1 -1
  271. package/dist/domains/chat/messages/renderers/message-text.cjs.js +2 -2
  272. package/dist/domains/chat/messages/renderers/message-text.es.js +2 -2
  273. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  274. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  275. package/dist/domains/chat/messages/renderers/status-renderers.cjs.js +1 -1
  276. package/dist/domains/chat/messages/renderers/status-renderers.es.js +1 -1
  277. package/dist/domains/chat/messages/signal-badge.cjs.js +8 -1
  278. package/dist/domains/chat/messages/signal-badge.cjs.js.map +1 -1
  279. package/dist/domains/chat/messages/signal-badge.es.js +8 -1
  280. package/dist/domains/chat/messages/signal-badge.es.js.map +1 -1
  281. package/dist/domains/chat/messages/skill-message.cjs.js +2 -2
  282. package/dist/domains/chat/messages/skill-message.es.js +2 -2
  283. package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
  284. package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
  285. package/dist/domains/chat/messages/tripwire-notice.cjs.js +2 -2
  286. package/dist/domains/chat/messages/tripwire-notice.es.js +2 -2
  287. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  288. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  289. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
  290. package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
  291. package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
  292. package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
  293. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +3 -3
  294. package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +3 -3
  295. package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +1 -1
  296. package/dist/domains/chat/tools/badges/code-mode-badge.es.js +1 -1
  297. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +2 -2
  298. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +2 -2
  299. package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js +273 -0
  300. package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js.map +1 -0
  301. package/dist/domains/chat/tools/badges/knowledge-tool-badge.d.ts +1 -0
  302. package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js +270 -0
  303. package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js.map +1 -0
  304. package/dist/domains/chat/tools/badges/mcp-task-chip.cjs.js +1 -1
  305. package/dist/domains/chat/tools/badges/mcp-task-chip.es.js +1 -1
  306. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +2 -2
  307. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +2 -2
  308. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +2 -2
  309. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +2 -2
  310. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  311. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  312. package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +2 -2
  313. package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +2 -2
  314. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
  315. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  316. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +4 -4
  317. package/dist/domains/chat/tools/badges/tool-badge.es.js +4 -4
  318. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +4 -4
  319. package/dist/domains/chat/tools/badges/workflow-badge.es.js +4 -4
  320. package/dist/domains/chat/tools/connect-prompt-tool.cjs.js +3 -3
  321. package/dist/domains/chat/tools/connect-prompt-tool.es.js +3 -3
  322. package/dist/domains/chat/tools/submit-plan-tool.cjs.js +1 -1
  323. package/dist/domains/chat/tools/submit-plan-tool.es.js +1 -1
  324. package/dist/domains/chat/tools/tool-card-kind.cjs.js +4 -2
  325. package/dist/domains/chat/tools/tool-card-kind.cjs.js.map +1 -1
  326. package/dist/domains/chat/tools/tool-card-kind.es.js +4 -2
  327. package/dist/domains/chat/tools/tool-card-kind.es.js.map +1 -1
  328. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  329. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  330. package/dist/domains/chat/tools/tool-groups.cjs.js +3 -2
  331. package/dist/domains/chat/tools/tool-groups.cjs.js.map +1 -1
  332. package/dist/domains/chat/tools/tool-groups.es.js +3 -2
  333. package/dist/domains/chat/tools/tool-groups.es.js.map +1 -1
  334. package/dist/domains/chat.cjs.js +11 -0
  335. package/dist/domains/chat.es.js +5 -1
  336. package/dist/domains/dashboards/components/dashboard-renderer.cjs.js +1 -1
  337. package/dist/domains/dashboards/components/dashboard-renderer.es.js +1 -1
  338. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.cjs.js +4 -4
  339. package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.es.js +4 -4
  340. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.cjs.js +1 -1
  341. package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.es.js +1 -1
  342. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.cjs.js +3 -3
  343. package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.es.js +3 -3
  344. package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +5 -5
  345. package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +5 -5
  346. package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js +438 -0
  347. package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js.map +1 -0
  348. package/dist/domains/knowledge/components/KnowledgePageDetail.d.ts +1 -0
  349. package/dist/domains/knowledge/components/KnowledgePageDetail.es.js +436 -0
  350. package/dist/domains/knowledge/components/KnowledgePageDetail.es.js.map +1 -0
  351. package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js +521 -0
  352. package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js.map +1 -0
  353. package/dist/domains/knowledge/components/KnowledgePageExplorer.d.ts +1 -0
  354. package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js +520 -0
  355. package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js.map +1 -0
  356. package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js +626 -0
  357. package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js.map +1 -0
  358. package/dist/domains/knowledge/components/KnowledgePageGraph.d.ts +1 -0
  359. package/dist/domains/knowledge/components/KnowledgePageGraph.es.js +625 -0
  360. package/dist/domains/knowledge/components/KnowledgePageGraph.es.js.map +1 -0
  361. package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js +170 -0
  362. package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js.map +1 -0
  363. package/dist/domains/knowledge/components/KnowledgePageTree.d.ts +1 -0
  364. package/dist/domains/knowledge/components/KnowledgePageTree.es.js +168 -0
  365. package/dist/domains/knowledge/components/KnowledgePageTree.es.js.map +1 -0
  366. package/dist/domains/knowledge/hooks/useInteractionIdle.cjs.js +37 -0
  367. package/dist/domains/knowledge/hooks/useInteractionIdle.cjs.js.map +1 -0
  368. package/dist/domains/knowledge/hooks/useInteractionIdle.d.ts +1 -0
  369. package/dist/domains/knowledge/hooks/useInteractionIdle.es.js +35 -0
  370. package/dist/domains/knowledge/hooks/useInteractionIdle.es.js.map +1 -0
  371. package/dist/domains/knowledge/lib/layout.cjs.js +93 -0
  372. package/dist/domains/knowledge/lib/layout.cjs.js.map +1 -0
  373. package/dist/domains/knowledge/lib/layout.d.ts +1 -0
  374. package/dist/domains/knowledge/lib/layout.es.js +92 -0
  375. package/dist/domains/knowledge/lib/layout.es.js.map +1 -0
  376. package/dist/domains/knowledge/lib/pageGraph.cjs.js +135 -0
  377. package/dist/domains/knowledge/lib/pageGraph.cjs.js.map +1 -0
  378. package/dist/domains/knowledge/lib/pageGraph.d.ts +1 -0
  379. package/dist/domains/knowledge/lib/pageGraph.es.js +128 -0
  380. package/dist/domains/knowledge/lib/pageGraph.es.js.map +1 -0
  381. package/dist/domains/knowledge/lib/pageLayout.cjs.js +49 -0
  382. package/dist/domains/knowledge/lib/pageLayout.cjs.js.map +1 -0
  383. package/dist/domains/knowledge/lib/pageLayout.d.ts +1 -0
  384. package/dist/domains/knowledge/lib/pageLayout.es.js +48 -0
  385. package/dist/domains/knowledge/lib/pageLayout.es.js.map +1 -0
  386. package/dist/domains/knowledge/lib/pageTree.cjs.js +98 -0
  387. package/dist/domains/knowledge/lib/pageTree.cjs.js.map +1 -0
  388. package/dist/domains/knowledge/lib/pageTree.d.ts +1 -0
  389. package/dist/domains/knowledge/lib/pageTree.es.js +94 -0
  390. package/dist/domains/knowledge/lib/pageTree.es.js.map +1 -0
  391. package/dist/domains/knowledge/lib/popupPlacement.cjs.js +22 -0
  392. package/dist/domains/knowledge/lib/popupPlacement.cjs.js.map +1 -0
  393. package/dist/domains/knowledge/lib/popupPlacement.d.ts +1 -0
  394. package/dist/domains/knowledge/lib/popupPlacement.es.js +21 -0
  395. package/dist/domains/knowledge/lib/popupPlacement.es.js.map +1 -0
  396. package/dist/domains/knowledge/lib/recordText.cjs.js +26 -0
  397. package/dist/domains/knowledge/lib/recordText.cjs.js.map +1 -0
  398. package/dist/domains/knowledge/lib/recordText.d.ts +1 -0
  399. package/dist/domains/knowledge/lib/recordText.es.js +25 -0
  400. package/dist/domains/knowledge/lib/recordText.es.js.map +1 -0
  401. package/dist/domains/knowledge/pageTypes.cjs.js +0 -0
  402. package/dist/domains/knowledge/pageTypes.d.ts +1 -0
  403. package/dist/domains/knowledge/pageTypes.es.js +0 -0
  404. package/dist/domains/logs/components/log-data-panel.cjs.js +6 -6
  405. package/dist/domains/logs/components/log-data-panel.cjs.js.map +1 -1
  406. package/dist/domains/logs/components/log-data-panel.es.js +4 -4
  407. package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
  408. package/dist/domains/logs/components/logs-list-view.es.js +2 -2
  409. package/dist/domains/logs/components/logs-saved-views.cjs.js +1 -1
  410. package/dist/domains/logs/components/logs-saved-views.es.js +1 -1
  411. package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
  412. package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
  413. package/dist/domains/logs/components/no-logs-info.cjs.js +1 -1
  414. package/dist/domains/logs/components/no-logs-info.es.js +1 -1
  415. package/dist/domains/logs/hooks/use-logs-filter-persistence.cjs.js +1 -1
  416. package/dist/domains/logs/hooks/use-logs-filter-persistence.es.js +1 -1
  417. package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
  418. package/dist/domains/memory/components/flame-graph.es.js +1 -1
  419. package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
  420. package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
  421. package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
  422. package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
  423. package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
  424. package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
  425. package/dist/domains/metrics/components/date-range-selector.cjs.js +2 -2
  426. package/dist/domains/metrics/components/date-range-selector.cjs.js.map +1 -1
  427. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  428. package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +4 -4
  429. package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js.map +1 -1
  430. package/dist/domains/metrics/components/metrics-time-range-chip.es.js +4 -4
  431. package/dist/domains/metrics/components/metrics-time-range-chip.es.js.map +1 -1
  432. package/dist/domains/metrics/drilldown.cjs.js +1 -1
  433. package/dist/domains/metrics/drilldown.es.js +1 -1
  434. package/dist/domains/metrics/metrics-filters.cjs.js +1 -1
  435. package/dist/domains/metrics/metrics-filters.es.js +1 -1
  436. package/dist/domains/observability/hooks/use-observability-list-filters.cjs.js +1 -1
  437. package/dist/domains/observability/hooks/use-observability-list-filters.es.js +1 -1
  438. package/dist/domains/observability/observability-list-url-state.cjs.js +1 -1
  439. package/dist/domains/observability/observability-list-url-state.es.js +1 -1
  440. package/dist/domains/observability/saved-view-state.cjs.js +1 -1
  441. package/dist/domains/observability/saved-view-state.es.js +1 -1
  442. package/dist/domains/observability/saved-views/observability-saved-views.cjs.js +1 -1
  443. package/dist/domains/observability/saved-views/observability-saved-views.es.js +1 -1
  444. package/dist/domains/observability/saved-views/saved-views-provider.cjs.js +3 -2
  445. package/dist/domains/observability/saved-views/saved-views-provider.cjs.js.map +1 -1
  446. package/dist/domains/observability/saved-views/saved-views-provider.es.js +3 -2
  447. package/dist/domains/observability/saved-views/saved-views-provider.es.js.map +1 -1
  448. package/dist/domains/observability/saved-views/saved-views-source.cjs.js.map +1 -1
  449. package/dist/domains/observability/saved-views/saved-views-source.es.js.map +1 -1
  450. package/dist/domains/observability/saved-views/use-hosted-saved-views.cjs.js +3 -2
  451. package/dist/domains/observability/saved-views/use-hosted-saved-views.cjs.js.map +1 -1
  452. package/dist/domains/observability/saved-views/use-hosted-saved-views.es.js +3 -2
  453. package/dist/domains/observability/saved-views/use-hosted-saved-views.es.js.map +1 -1
  454. package/dist/domains/observability/saved-views.cjs.js +1 -1
  455. package/dist/domains/observability/saved-views.es.js +1 -1
  456. package/dist/domains/observability.cjs.js +1 -1
  457. package/dist/domains/observability.es.js +1 -1
  458. package/dist/domains/scores/components/score-data-panel.cjs.js +2 -2
  459. package/dist/domains/scores/components/score-data-panel.es.js +2 -2
  460. package/dist/domains/scores/components/span-scoring.cjs.js +4 -4
  461. package/dist/domains/scores/components/span-scoring.es.js +4 -4
  462. package/dist/domains/scores/components/trace-scores-list.cjs.js +2 -2
  463. package/dist/domains/scores/components/trace-scores-list.es.js +2 -2
  464. package/dist/domains/scores/components/trace-scores-tab.cjs.js +1 -1
  465. package/dist/domains/scores/components/trace-scores-tab.es.js +1 -1
  466. package/dist/domains/skills/skill-simple-form.cjs.js +4 -4
  467. package/dist/domains/skills/skill-simple-form.cjs.js.map +1 -1
  468. package/dist/domains/skills/skill-simple-form.es.js +4 -4
  469. package/dist/domains/skills/skill-simple-form.es.js.map +1 -1
  470. package/dist/domains/spans/components/spans-explorer-body.cjs.js +8 -8
  471. package/dist/domains/spans/components/spans-explorer-body.cjs.js.map +1 -1
  472. package/dist/domains/spans/components/spans-explorer-body.es.js +8 -8
  473. package/dist/domains/spans/components/spans-explorer-body.es.js.map +1 -1
  474. package/dist/domains/spans/components/spans-filter-bar.cjs.js +5 -5
  475. package/dist/domains/spans/components/spans-filter-bar.cjs.js.map +1 -1
  476. package/dist/domains/spans/components/spans-filter-bar.es.js +5 -5
  477. package/dist/domains/spans/components/spans-filter-bar.es.js.map +1 -1
  478. package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js +5 -5
  479. package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js.map +1 -1
  480. package/dist/domains/spans/hooks/use-spans-filter-bar.es.js +5 -5
  481. package/dist/domains/spans/hooks/use-spans-filter-bar.es.js.map +1 -1
  482. package/dist/domains/spans/span-filters.cjs.js +2 -2
  483. package/dist/domains/spans/span-filters.cjs.js.map +1 -1
  484. package/dist/domains/spans/span-filters.es.js +2 -2
  485. package/dist/domains/spans/span-filters.es.js.map +1 -1
  486. package/dist/domains/threads/components/threads-explorer-body.cjs.js +8 -8
  487. package/dist/domains/threads/components/threads-explorer-body.cjs.js.map +1 -1
  488. package/dist/domains/threads/components/threads-explorer-body.es.js +8 -8
  489. package/dist/domains/threads/components/threads-explorer-body.es.js.map +1 -1
  490. package/dist/domains/threads/components/threads-filter-bar.cjs.js +5 -5
  491. package/dist/domains/threads/components/threads-filter-bar.cjs.js.map +1 -1
  492. package/dist/domains/threads/components/threads-filter-bar.es.js +5 -5
  493. package/dist/domains/threads/components/threads-filter-bar.es.js.map +1 -1
  494. package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js +5 -5
  495. package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js.map +1 -1
  496. package/dist/domains/threads/hooks/use-threads-filter-bar.es.js +5 -5
  497. package/dist/domains/threads/hooks/use-threads-filter-bar.es.js.map +1 -1
  498. package/dist/domains/threads/thread-filters.cjs.js +2 -2
  499. package/dist/domains/threads/thread-filters.cjs.js.map +1 -1
  500. package/dist/domains/threads/thread-filters.es.js +2 -2
  501. package/dist/domains/threads/thread-filters.es.js.map +1 -1
  502. package/dist/domains/traces/components/columns-menu/columns-menu.cjs.js +1 -1
  503. package/dist/domains/traces/components/columns-menu/columns-menu.es.js +1 -1
  504. package/dist/domains/traces/components/feedback-thread.cjs.js +3 -3
  505. package/dist/domains/traces/components/feedback-thread.es.js +3 -3
  506. package/dist/domains/traces/components/span-data-panel-view.cjs.js +5 -5
  507. package/dist/domains/traces/components/span-data-panel-view.es.js +5 -5
  508. package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
  509. package/dist/domains/traces/components/span-details-view.es.js +1 -1
  510. package/dist/domains/traces/components/span-outcome.cjs.js +1 -1
  511. package/dist/domains/traces/components/span-outcome.es.js +1 -1
  512. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +2 -2
  513. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +2 -2
  514. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  515. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  516. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +3 -3
  517. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +3 -3
  518. package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +1 -1
  519. package/dist/domains/traces/components/span-payload/span-payload-json.es.js +1 -1
  520. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +3 -3
  521. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +3 -3
  522. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
  523. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
  524. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  525. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  526. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +2 -2
  527. package/dist/domains/traces/components/span-payload/span-payload-section.es.js +2 -2
  528. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  529. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  530. package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js +1 -1
  531. package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js +1 -1
  532. package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js +1 -1
  533. package/dist/domains/traces/components/span-payload/span-tools-section.es.js +1 -1
  534. package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
  535. package/dist/domains/traces/components/span-summary-description.es.js +1 -1
  536. package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
  537. package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
  538. package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +2 -2
  539. package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +2 -2
  540. package/dist/domains/traces/components/thread-trace/thread-trace-row.cjs.js +1 -1
  541. package/dist/domains/traces/components/thread-trace/thread-trace-row.es.js +1 -1
  542. package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +1 -1
  543. package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +1 -1
  544. package/dist/domains/traces/components/thread-view-by-trace.cjs.js +1 -1
  545. package/dist/domains/traces/components/thread-view-by-trace.es.js +1 -1
  546. package/dist/domains/traces/components/trace-columns-menu.cjs.js +3 -4
  547. package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
  548. package/dist/domains/traces/components/trace-columns-menu.es.js +3 -4
  549. package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
  550. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +4 -4
  551. package/dist/domains/traces/components/trace-data-panel-view.es.js +4 -4
  552. package/dist/domains/traces/components/trace-data-panel.cjs.js +1 -1
  553. package/dist/domains/traces/components/trace-data-panel.es.js +1 -1
  554. package/dist/domains/traces/components/trace-details-view.cjs.js +1 -1
  555. package/dist/domains/traces/components/trace-details-view.es.js +1 -1
  556. package/dist/domains/traces/components/trace-error-cell.cjs.js +1 -1
  557. package/dist/domains/traces/components/trace-error-cell.es.js +1 -1
  558. package/dist/domains/traces/components/trace-error-summary.cjs.js +1 -1
  559. package/dist/domains/traces/components/trace-error-summary.es.js +1 -1
  560. package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
  561. package/dist/domains/traces/components/trace-id-button.es.js +1 -1
  562. package/dist/domains/traces/components/trace-span-panel.cjs.js +1 -1
  563. package/dist/domains/traces/components/trace-span-panel.es.js +1 -1
  564. package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
  565. package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
  566. package/dist/domains/traces/components/trace-thread-item-view.cjs.js +1 -1
  567. package/dist/domains/traces/components/trace-thread-item-view.es.js +1 -1
  568. package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
  569. package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
  570. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.cjs.js +1 -1
  571. package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.es.js +1 -1
  572. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +5 -5
  573. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js.map +1 -1
  574. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +5 -5
  575. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js.map +1 -1
  576. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js +1 -1
  577. package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js +1 -1
  578. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.cjs.js +1 -1
  579. package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.es.js +1 -1
  580. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js +5 -5
  581. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js.map +1 -1
  582. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +5 -5
  583. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js.map +1 -1
  584. package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +1 -1
  585. package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
  586. package/dist/domains/traces/components/traces-list-view.cjs.js +2 -2
  587. package/dist/domains/traces/components/traces-list-view.es.js +2 -2
  588. package/dist/domains/traces/components/traces-page-skeleton.cjs.js +2 -2
  589. package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
  590. package/dist/domains/traces/components/traces-page-skeleton.es.js +2 -2
  591. package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
  592. package/dist/domains/traces/components/traces-spans-switch.cjs.js +1 -1
  593. package/dist/domains/traces/components/traces-spans-switch.es.js +1 -1
  594. package/dist/domains/traces/hooks/use-download-trace-json.cjs.js +1 -1
  595. package/dist/domains/traces/hooks/use-download-trace-json.es.js +1 -1
  596. package/dist/domains/traces/trace-filters.cjs.js +1 -1
  597. package/dist/domains/traces/trace-filters.es.js +1 -1
  598. package/dist/domains/traces/trace-query-filters.cjs.js +1 -1
  599. package/dist/domains/traces/trace-query-filters.es.js +1 -1
  600. package/dist/domains/traces.cjs.js +1 -1
  601. package/dist/domains/traces.es.js +1 -1
  602. package/dist/domains/workflows/components/workflow-combobox.cjs.js +2 -2
  603. package/dist/domains/workflows/components/workflow-combobox.es.js +2 -2
  604. package/dist/domains/workflows/components/workflow-information.cjs.js +2 -2
  605. package/dist/domains/workflows/components/workflow-information.es.js +2 -2
  606. package/dist/domains/workflows/components/workflow-layout.cjs.js +1 -1
  607. package/dist/domains/workflows/components/workflow-layout.es.js +1 -1
  608. package/dist/domains/workflows/components/workflow-step-detail.cjs.js +2 -2
  609. package/dist/domains/workflows/components/workflow-step-detail.es.js +2 -2
  610. package/dist/domains/workflows/components/workflows-list/no-workflows-info.cjs.js +1 -1
  611. package/dist/domains/workflows/components/workflows-list/no-workflows-info.es.js +1 -1
  612. package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
  613. package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
  614. package/dist/domains/workflows/context/use-stream-for-run.cjs.js +1 -1
  615. package/dist/domains/workflows/context/use-stream-for-run.es.js +1 -1
  616. package/dist/domains/workflows/runs/workflow-run-list.cjs.js +1 -1
  617. package/dist/domains/workflows/runs/workflow-run-list.es.js +1 -1
  618. package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
  619. package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
  620. package/dist/domains/workflows/workflow/data/workflow-data-inspector.cjs.js +2 -2
  621. package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +2 -2
  622. package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +1 -1
  623. package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +1 -1
  624. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +1 -1
  625. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +1 -1
  626. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.cjs.js +1 -1
  627. package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +1 -1
  628. package/dist/domains/workflows/workflow/use-workflow-trigger.cjs.js +2 -1
  629. package/dist/domains/workflows/workflow/use-workflow-trigger.cjs.js.map +1 -1
  630. package/dist/domains/workflows/workflow/use-workflow-trigger.es.js +2 -1
  631. package/dist/domains/workflows/workflow/use-workflow-trigger.es.js.map +1 -1
  632. package/dist/domains/workflows/workflow/utils.cjs.js +1 -1
  633. package/dist/domains/workflows/workflow/utils.es.js +1 -1
  634. package/dist/domains/workflows/workflow/workflow-body-graph.cjs.js +1 -1
  635. package/dist/domains/workflows/workflow/workflow-body-graph.es.js +1 -1
  636. package/dist/domains/workflows/workflow/workflow-cancel-button.cjs.js +1 -1
  637. package/dist/domains/workflows/workflow/workflow-cancel-button.es.js +1 -1
  638. package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
  639. package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
  640. package/dist/domains/workflows/workflow/workflow-debug-step-controls.cjs.js +1 -1
  641. package/dist/domains/workflows/workflow/workflow-debug-step-controls.es.js +1 -1
  642. package/dist/domains/workflows/workflow/workflow-graph-boundary.cjs.js +3 -3
  643. package/dist/domains/workflows/workflow/workflow-graph-boundary.es.js +3 -3
  644. package/dist/domains/workflows/workflow/workflow-graph-inner.cjs.js +2 -2
  645. package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +2 -2
  646. package/dist/domains/workflows/workflow/workflow-graph-layout.cjs.js +1 -1
  647. package/dist/domains/workflows/workflow/workflow-graph-layout.es.js +1 -1
  648. package/dist/domains/workflows/workflow/workflow-graph-node.cjs.js +1 -1
  649. package/dist/domains/workflows/workflow/workflow-graph-node.es.js +1 -1
  650. package/dist/domains/workflows/workflow/workflow-graph.cjs.js +1 -1
  651. package/dist/domains/workflows/workflow/workflow-graph.es.js +1 -1
  652. package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +3 -3
  653. package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +3 -3
  654. package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +1 -1
  655. package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +1 -1
  656. package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +3 -3
  657. package/dist/domains/workflows/workflow/workflow-run-data.es.js +3 -3
  658. package/dist/domains/workflows/workflow/workflow-run-error.cjs.js +1 -1
  659. package/dist/domains/workflows/workflow/workflow-run-error.es.js +1 -1
  660. package/dist/domains/workflows/workflow/workflow-run-header.cjs.js +1 -1
  661. package/dist/domains/workflows/workflow/workflow-run-header.es.js +1 -1
  662. package/dist/domains/workflows/workflow/workflow-status.cjs.js +1 -1
  663. package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
  664. package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +2 -2
  665. package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +2 -2
  666. package/dist/domains/workflows/workflow/workflow-step-node-utils.cjs.js +1 -1
  667. package/dist/domains/workflows/workflow/workflow-step-node-utils.es.js +1 -1
  668. package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +2 -2
  669. package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +2 -2
  670. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +2 -2
  671. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +2 -2
  672. package/dist/domains/workflows/workflow/workflow-timeline-row.cjs.js +1 -1
  673. package/dist/domains/workflows/workflow/workflow-timeline-row.es.js +1 -1
  674. package/dist/domains/workflows/workflow/workflow-timeline.cjs.js +1 -1
  675. package/dist/domains/workflows/workflow/workflow-timeline.es.js +1 -1
  676. package/dist/domains/workflows/workflow/workflow-trigger-form.cjs.js +1 -1
  677. package/dist/domains/workflows/workflow/workflow-trigger-form.es.js +1 -1
  678. package/dist/domains/workflows/workflow/workflow-trigger-header.cjs.js +1 -1
  679. package/dist/domains/workflows/workflow/workflow-trigger-header.es.js +1 -1
  680. package/dist/domains/workflows/workflow/workflow-trigger.cjs.js +1 -1
  681. package/dist/domains/workflows/workflow/workflow-trigger.es.js +1 -1
  682. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +3 -3
  683. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +3 -3
  684. package/dist/domains/workspace/components/workspace-add-skill.cjs.js +1 -1
  685. package/dist/domains/workspace/components/workspace-add-skill.es.js +1 -1
  686. package/dist/domains/workspace/components/workspace-create-directory.cjs.js +2 -2
  687. package/dist/domains/workspace/components/workspace-create-directory.es.js +2 -2
  688. package/dist/domains/workspace/components/workspace-error.cjs.js +1 -1
  689. package/dist/domains/workspace/components/workspace-error.es.js +1 -1
  690. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +1 -1
  691. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +1 -1
  692. package/dist/domains/workspace/components/workspace-search.cjs.js +1 -1
  693. package/dist/domains/workspace/components/workspace-search.es.js +1 -1
  694. package/dist/domains/workspace/components/workspace-tree.cjs.js +1 -1
  695. package/dist/domains/workspace/components/workspace-tree.es.js +1 -1
  696. package/dist/ee/signals/components/entity-index-list.cjs.js +1 -1
  697. package/dist/ee/signals/components/entity-index-list.es.js +1 -1
  698. package/dist/ee/signals/components/signals-empty-state.cjs.js +1 -1
  699. package/dist/ee/signals/components/signals-empty-state.es.js +1 -1
  700. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +6 -6
  701. package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
  702. package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +5 -5
  703. package/dist/ee/signals/examples-pager.cjs.js +1 -1
  704. package/dist/ee/signals/examples-pager.es.js +1 -1
  705. package/dist/ee/signals/sankey-signals.cjs.js +1 -1
  706. package/dist/ee/signals/sankey-signals.es.js +1 -1
  707. package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +2 -2
  708. package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +2 -2
  709. package/dist/ee/signals/settings/trace-signal-settings.cjs.js +3 -3
  710. package/dist/ee/signals/settings/trace-signal-settings.es.js +3 -3
  711. package/dist/ee/signals/signals-error-state.cjs.js +1 -1
  712. package/dist/ee/signals/signals-error-state.es.js +1 -1
  713. package/dist/ee/signals/snapshot-timeline.cjs.js +1 -1
  714. package/dist/ee/signals/snapshot-timeline.es.js +1 -1
  715. package/dist/ee/signals/theme-filter-banner.cjs.js +1 -1
  716. package/dist/ee/signals/theme-filter-banner.es.js +1 -1
  717. package/dist/ee/signals/trace-insight-view.cjs.js +1 -1
  718. package/dist/ee/signals/trace-insight-view.es.js +1 -1
  719. package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
  720. package/dist/ee/signals/view-mode-tab.es.js +1 -1
  721. package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +2 -2
  722. package/dist/ee/topics/components/topic-trace-summary-list.es.js +2 -2
  723. package/dist/{filter-bar-chip-7O02P9Vk.js → filter-bar-chip-B4sV4gDm.js} +86 -71
  724. package/dist/filter-bar-chip-B4sV4gDm.js.map +1 -0
  725. package/dist/{filter-bar-chip-BUyMf8XQ.cjs → filter-bar-chip-CIEsWcEw.cjs} +88 -79
  726. package/dist/filter-bar-chip-CIEsWcEw.cjs.map +1 -0
  727. package/dist/filter-bar-chip.css +22 -0
  728. package/dist/filter-bar-time-range-CXQMBgpz.js +60 -0
  729. package/dist/filter-bar-time-range-CXQMBgpz.js.map +1 -0
  730. package/dist/filter-bar-time-range-DvuaFnkI.cjs +83 -0
  731. package/dist/filter-bar-time-range-DvuaFnkI.cjs.map +1 -0
  732. package/dist/hooks/use-copy-to-clipboard.cjs.js +1 -1
  733. package/dist/hooks/use-copy-to-clipboard.es.js +1 -1
  734. package/dist/{input-group-uDpFNnSW.cjs → input-group-DVJLZDBL.cjs} +6 -4
  735. package/dist/input-group-DVJLZDBL.cjs.map +1 -0
  736. package/dist/{input-group-g85FYfze.js → input-group-QKKV_ouF.js} +7 -5
  737. package/dist/input-group-QKKV_ouF.js.map +1 -0
  738. package/dist/layout/tabbed-container.cjs.js +1 -1
  739. package/dist/layout/tabbed-container.es.js +1 -1
  740. package/dist/lib/form/components/array-element-wrapper.cjs.js +1 -1
  741. package/dist/lib/form/components/array-element-wrapper.es.js +1 -1
  742. package/dist/lib/form/components/array-wrapper.cjs.js +1 -1
  743. package/dist/lib/form/components/array-wrapper.es.js +1 -1
  744. package/dist/lib/form/components/date-field.cjs.js +1 -1
  745. package/dist/lib/form/components/date-field.es.js +1 -1
  746. package/dist/lib/form/components/error-message.cjs.js +1 -1
  747. package/dist/lib/form/components/error-message.es.js +1 -1
  748. package/dist/lib/form/components/form-submit-row.cjs.js +1 -1
  749. package/dist/lib/form/components/form-submit-row.es.js +1 -1
  750. package/dist/lib/form/components/record-field.cjs.js +1 -1
  751. package/dist/lib/form/components/record-field.es.js +1 -1
  752. package/dist/lib/form/components/select-field.cjs.js +1 -1
  753. package/dist/lib/form/components/select-field.es.js +1 -1
  754. package/dist/lib/form/components/submit-button.cjs.js +1 -1
  755. package/dist/lib/form/components/submit-button.es.js +1 -1
  756. package/dist/lib/form/dynamic-form.cjs.js +2 -2
  757. package/dist/lib/form/dynamic-form.cjs.js.map +1 -1
  758. package/dist/lib/form/dynamic-form.es.js +2 -2
  759. package/dist/lib/form/dynamic-form.es.js.map +1 -1
  760. package/dist/lib/form/json-draft.cjs.js +1 -1
  761. package/dist/lib/form/json-draft.es.js +1 -1
  762. package/dist/lib/form/zod-provider/compat.cjs.js +8 -0
  763. package/dist/lib/form/zod-provider/compat.cjs.js.map +1 -1
  764. package/dist/lib/form/zod-provider/compat.es.js +8 -1
  765. package/dist/lib/form/zod-provider/compat.es.js.map +1 -1
  766. package/dist/lib/form/zod-provider.cjs.js +1 -1
  767. package/dist/lib/form/zod-provider.es.js +1 -1
  768. package/dist/{list-search-BEJmYa9a.cjs → list-search-BtRno5As.cjs} +2 -2
  769. package/dist/list-search-BtRno5As.cjs.map +1 -0
  770. package/dist/{list-search-bg7WzULj.js → list-search-CkhsTFdG.js} +2 -2
  771. package/dist/list-search-CkhsTFdG.js.map +1 -0
  772. package/dist/{observability-saved-views-CwCii7hh.cjs → observability-saved-views-BAzxxoAr.cjs} +10 -8
  773. package/dist/observability-saved-views-BAzxxoAr.cjs.map +1 -0
  774. package/dist/{observability-saved-views-Bo5kLN20.js → observability-saved-views-BBam8Fr5.js} +10 -8
  775. package/dist/observability-saved-views-BBam8Fr5.js.map +1 -0
  776. package/dist/primitives/control-icon.cjs.js +9 -0
  777. package/dist/primitives/control-icon.cjs.js.map +1 -0
  778. package/dist/primitives/control-icon.d.ts +1 -0
  779. package/dist/primitives/control-icon.es.js +8 -0
  780. package/dist/primitives/control-icon.es.js.map +1 -0
  781. package/dist/primitives/control-size.cjs.js +6 -0
  782. package/dist/primitives/control-size.cjs.js.map +1 -1
  783. package/dist/primitives/control-size.es.js +6 -1
  784. package/dist/primitives/control-size.es.js.map +1 -1
  785. package/dist/primitives/menu-item.cjs.js +3 -3
  786. package/dist/primitives/menu-item.cjs.js.map +1 -1
  787. package/dist/primitives/menu-item.es.js +3 -3
  788. package/dist/primitives/menu-item.es.js.map +1 -1
  789. package/dist/primitives/trigger-button.cjs.js +1 -1
  790. package/dist/primitives/trigger-button.es.js +1 -1
  791. package/dist/{property-filter-applied-DqsPFbYM.cjs → property-filter-applied-BCeRLcXb.cjs} +18 -18
  792. package/dist/{property-filter-applied-DqsPFbYM.cjs.map → property-filter-applied-BCeRLcXb.cjs.map} +1 -1
  793. package/dist/{property-filter-applied-DRglaEj-.js → property-filter-applied-p3dTTDdb.js} +3 -3
  794. package/dist/{property-filter-applied-DRglaEj-.js.map → property-filter-applied-p3dTTDdb.js.map} +1 -1
  795. package/dist/{select-BbFpEBAY.js → select-BdIZEdcy.js} +4 -8
  796. package/dist/select-BdIZEdcy.js.map +1 -0
  797. package/dist/{select-NySY9Men.cjs → select-Dg8L5ROX.cjs} +3 -7
  798. package/dist/select-Dg8L5ROX.cjs.map +1 -0
  799. package/dist/{span-payload-primitives-Dyhbqaa7.js → span-payload-primitives-B3RdahsC.js} +4 -4
  800. package/dist/{span-payload-primitives-Dyhbqaa7.js.map → span-payload-primitives-B3RdahsC.js.map} +1 -1
  801. package/dist/{span-payload-primitives-B10Xxmx7.cjs → span-payload-primitives-_2d-pAOD.cjs} +4 -4
  802. package/dist/{span-payload-primitives-B10Xxmx7.cjs.map → span-payload-primitives-_2d-pAOD.cjs.map} +1 -1
  803. package/dist/src/domains/chat/index.d.ts +1 -0
  804. package/dist/src/domains/chat/knowledge/index.d.ts +5 -0
  805. package/dist/src/domains/chat/knowledge/knowledge-links.d.ts +21 -0
  806. package/dist/src/domains/chat/knowledge/pinned-knowledge-data.d.ts +22 -0
  807. package/dist/src/domains/chat/knowledge/pinned-knowledge.d.ts +9 -0
  808. package/dist/src/domains/chat/tools/badges/knowledge-tool-badge.d.ts +19 -0
  809. package/dist/src/domains/chat/tools/tool-card-kind.d.ts +2 -2
  810. package/dist/src/domains/knowledge/components/KnowledgePageDetail.d.ts +42 -0
  811. package/dist/src/domains/knowledge/components/KnowledgePageExplorer.d.ts +80 -0
  812. package/dist/src/domains/knowledge/components/KnowledgePageGraph.d.ts +35 -0
  813. package/dist/src/domains/knowledge/components/KnowledgePageTree.d.ts +27 -0
  814. package/dist/src/domains/knowledge/hooks/useInteractionIdle.d.ts +12 -0
  815. package/dist/src/domains/knowledge/lib/layout.d.ts +35 -0
  816. package/dist/src/domains/knowledge/lib/pageGraph.d.ts +45 -0
  817. package/dist/src/domains/knowledge/lib/pageLayout.d.ts +24 -0
  818. package/dist/src/domains/knowledge/lib/pageTree.d.ts +28 -0
  819. package/dist/src/domains/knowledge/lib/popupPlacement.d.ts +12 -0
  820. package/dist/src/domains/knowledge/lib/recordText.d.ts +9 -0
  821. package/dist/src/domains/knowledge/pageTypes.d.ts +96 -0
  822. package/dist/src/domains/metrics/components/metrics-time-range-chip.d.ts +2 -2
  823. package/dist/src/domains/observability/saved-views/saved-views-provider.d.ts +6 -1
  824. package/dist/src/domains/observability/saved-views/saved-views-source.d.ts +1 -0
  825. package/dist/src/domains/observability/saved-views/use-hosted-saved-views.d.ts +1 -1
  826. package/dist/src/domains/skills/skill-simple-form.d.ts +3 -1
  827. package/dist/src/domains/spans/components/spans-filter-bar.d.ts +1 -1
  828. package/dist/src/domains/spans/hooks/use-spans-filter-bar.d.ts +1 -1
  829. package/dist/src/domains/spans/span-filters.d.ts +1 -1
  830. package/dist/src/domains/threads/components/threads-filter-bar.d.ts +1 -1
  831. package/dist/src/domains/threads/hooks/use-threads-filter-bar.d.ts +1 -1
  832. package/dist/src/domains/threads/thread-filters.d.ts +1 -1
  833. package/dist/src/domains/traces/components/traces-explorer/traces-explorer-filter-bar.d.ts +3 -3
  834. package/dist/src/domains/traces/components/traces-page-skeleton.d.ts +1 -1
  835. package/dist/src/ds/components/Button/Button.d.ts +15 -0
  836. package/dist/src/ds/components/ClearFiltersButton/clear-filters-button.d.ts +12 -0
  837. package/dist/src/ds/components/ClearFiltersButton/index.d.ts +1 -0
  838. package/dist/src/ds/components/Combobox/combobox-styles.d.ts +0 -1
  839. package/dist/src/ds/components/DateTimeRangePicker/date-time-range-picker.d.ts +12 -11
  840. package/dist/src/ds/components/FilterBar/filter-bar-chip.d.ts +10 -7
  841. package/dist/src/ds/components/FilterBar/filter-bar-time-range.d.ts +19 -0
  842. package/dist/src/ds/components/FilterBar/filter-bar.d.ts +2 -0
  843. package/dist/src/ds/components/FilterBar/index.d.ts +2 -0
  844. package/dist/src/ds/components/FilterBar/use-filter-bar-item-keys.d.ts +23 -0
  845. package/dist/src/ds/components/ListSearch/list-search.d.ts +1 -0
  846. package/dist/src/ds/components/SavedViews/saved-view-picker.d.ts +3 -1
  847. package/dist/src/ds/components/ai/tool-call/tool-phrases.d.ts +30 -0
  848. package/dist/src/ds/primitives/control-icon.d.ts +3 -0
  849. package/dist/src/ds/primitives/control-size.d.ts +1 -0
  850. package/dist/src/lib/form/zod-provider/compat.d.ts +5 -0
  851. package/dist/style.css +181 -66
  852. package/dist/{tabbed-container-BKUqfEKy.js → tabbed-container-5j6dhoRX.js} +6 -6
  853. package/dist/{tabbed-container-BKUqfEKy.js.map → tabbed-container-5j6dhoRX.js.map} +1 -1
  854. package/dist/{tabbed-container-CFEImJOK.cjs → tabbed-container-DQU7pVio.cjs} +6 -6
  855. package/dist/{tabbed-container-CFEImJOK.cjs.map → tabbed-container-DQU7pVio.cjs.map} +1 -1
  856. package/dist/{tabs-content-DgR3Hik1.cjs → tabs-content-CmXe5ML0.cjs} +2 -2
  857. package/dist/{tabs-content-DgR3Hik1.cjs.map → tabs-content-CmXe5ML0.cjs.map} +1 -1
  858. package/dist/{tabs-content-cpV6A9c3.js → tabs-content-D__B9hd-.js} +2 -2
  859. package/dist/{tabs-content-cpV6A9c3.js.map → tabs-content-D__B9hd-.js.map} +1 -1
  860. package/dist/{tabs-tab-UT1JliwK.js → tabs-tab-CYTZevdV.js} +2 -2
  861. package/dist/{tabs-tab-UT1JliwK.js.map → tabs-tab-CYTZevdV.js.map} +1 -1
  862. package/dist/{tabs-tab-Qp3RJ17z.cjs → tabs-tab-DGwfHVDr.cjs} +2 -2
  863. package/dist/{tabs-tab-Qp3RJ17z.cjs.map → tabs-tab-DGwfHVDr.cjs.map} +1 -1
  864. package/dist/{toast-api-WhxnAT9F.js → toast-api-D_rrRhNG.js} +2 -2
  865. package/dist/{toast-api-WhxnAT9F.js.map → toast-api-D_rrRhNG.js.map} +1 -1
  866. package/dist/{toast-api-Bv87KHu_.cjs → toast-api-qtkOucy2.cjs} +2 -2
  867. package/dist/{toast-api-Bv87KHu_.cjs.map → toast-api-qtkOucy2.cjs.map} +1 -1
  868. package/dist/{tool-approval-BfjoSNOC.cjs → tool-approval-1qiB4hhG.cjs} +5 -5
  869. package/dist/{tool-approval-BfjoSNOC.cjs.map → tool-approval-1qiB4hhG.cjs.map} +1 -1
  870. package/dist/{tool-approval-FeuyUUcL.js → tool-approval-B6MFcaKV.js} +5 -5
  871. package/dist/{tool-approval-FeuyUUcL.js.map → tool-approval-B6MFcaKV.js.map} +1 -1
  872. package/dist/{tool-call-CvilN9ti.cjs → tool-call-Bu66PkD-.cjs} +34 -4
  873. package/dist/{tool-call-CvilN9ti.cjs.map → tool-call-Bu66PkD-.cjs.map} +1 -1
  874. package/dist/{tool-call-BxYXs9w0.js → tool-call-Ch9-jjXU.js} +34 -4
  875. package/dist/{tool-call-BxYXs9w0.js.map → tool-call-Ch9-jjXU.js.map} +1 -1
  876. package/dist/{tool-card-B7O8AsRl.cjs → tool-card-DrqPZfPQ.cjs} +20 -6
  877. package/dist/tool-card-DrqPZfPQ.cjs.map +1 -0
  878. package/dist/{tool-card-ELW898uw.js → tool-card-sO6P2Qj4.js} +20 -6
  879. package/dist/tool-card-sO6P2Qj4.js.map +1 -0
  880. package/dist/{tool-presentation-BLErsb7c.cjs → tool-presentation-CQlDEwgS.cjs} +26 -1
  881. package/dist/tool-presentation-CQlDEwgS.cjs.map +1 -0
  882. package/dist/{tool-presentation-BSZYIWx2.js → tool-presentation-DvCsb_kz.js} +26 -1
  883. package/dist/tool-presentation-DvCsb_kz.js.map +1 -0
  884. package/dist/{trace-filters-BJaebsxJ.js → trace-filters-CaWkw779.js} +2 -3
  885. package/dist/trace-filters-CaWkw779.js.map +1 -0
  886. package/dist/{trace-filters-BNEZ31HX.cjs → trace-filters-a0N9bf52.cjs} +1 -2
  887. package/dist/trace-filters-a0N9bf52.cjs.map +1 -0
  888. package/dist/{use-workflow-graph-runtime-deTN_q_G.js → use-workflow-graph-runtime-BKNhOKsH.js} +3 -3
  889. package/dist/{use-workflow-graph-runtime-deTN_q_G.js.map → use-workflow-graph-runtime-BKNhOKsH.js.map} +1 -1
  890. package/dist/{use-workflow-graph-runtime-DkwQjMEV.cjs → use-workflow-graph-runtime-DYao-08R.cjs} +3 -3
  891. package/dist/{use-workflow-graph-runtime-DkwQjMEV.cjs.map → use-workflow-graph-runtime-DYao-08R.cjs.map} +1 -1
  892. package/dist/utils/toast.cjs.js +1 -1
  893. package/dist/utils/toast.es.js +1 -1
  894. package/package.json +12 -10
  895. package/theme.css +4 -0
  896. package/dist/ActionRow-BfK77pCT.cjs.map +0 -1
  897. package/dist/ActionRow-Cd6tOC2K.js.map +0 -1
  898. package/dist/Button-Bw1e3ONi.js.map +0 -1
  899. package/dist/Button-YQRflC47.cjs.map +0 -1
  900. package/dist/DateTimeRangePicker-C_Lie_2P.js.map +0 -1
  901. package/dist/DateTimeRangePicker-HmPOHwAQ.cjs.map +0 -1
  902. package/dist/FilterBar--4oguuVe.js.map +0 -1
  903. package/dist/FilterBar-BUd4f7oi.cjs.map +0 -1
  904. package/dist/combobox-parts-BZVXwbG7.cjs.map +0 -1
  905. package/dist/combobox-parts-W7KRQUsV.js.map +0 -1
  906. package/dist/components/ButtonsGroup.cjs.js.map +0 -1
  907. package/dist/components/ButtonsGroup.es.js.map +0 -1
  908. package/dist/domains/traces/components/trace-time-range-chip.cjs.js +0 -90
  909. package/dist/domains/traces/components/trace-time-range-chip.cjs.js.map +0 -1
  910. package/dist/domains/traces/components/trace-time-range-chip.d.ts +0 -1
  911. package/dist/domains/traces/components/trace-time-range-chip.es.js +0 -86
  912. package/dist/domains/traces/components/trace-time-range-chip.es.js.map +0 -1
  913. package/dist/filter-bar-chip-7O02P9Vk.js.map +0 -1
  914. package/dist/filter-bar-chip-BUyMf8XQ.cjs.map +0 -1
  915. package/dist/input-group-g85FYfze.js.map +0 -1
  916. package/dist/input-group-uDpFNnSW.cjs.map +0 -1
  917. package/dist/list-search-BEJmYa9a.cjs.map +0 -1
  918. package/dist/list-search-bg7WzULj.js.map +0 -1
  919. package/dist/observability-saved-views-Bo5kLN20.js.map +0 -1
  920. package/dist/observability-saved-views-CwCii7hh.cjs.map +0 -1
  921. package/dist/select-BbFpEBAY.js.map +0 -1
  922. package/dist/select-NySY9Men.cjs.map +0 -1
  923. package/dist/src/domains/traces/components/trace-time-range-chip.d.ts +0 -22
  924. package/dist/tool-card-B7O8AsRl.cjs.map +0 -1
  925. package/dist/tool-card-ELW898uw.js.map +0 -1
  926. package/dist/tool-presentation-BLErsb7c.cjs.map +0 -1
  927. package/dist/tool-presentation-BSZYIWx2.js.map +0 -1
  928. package/dist/trace-filters-BJaebsxJ.js.map +0 -1
  929. package/dist/trace-filters-BNEZ31HX.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"use-spans-filter-bar.cjs.js","names":["useMastraClient","useObservabilityCapabilities","useEntityNames","useEnvironments","useMemo","TRACE_TIME_RANGE_FIELD","createSpanFilterBarFields","createTraceQueryValuesResolver","traceTokensToFilterBarItems","traceFiltersToFilterBarExpression","TRACE_TIME_RANGE_ITEM","useCallback","filterBarExpressionToTraceFilters","isFilterBarGroup"],"sources":["../../../../src/domains/spans/hooks/use-spans-filter-bar.ts"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { useObservabilityCapabilities } from '@mastra/react/hooks/capabilities';\nimport { createTraceQueryValuesResolver, useEntityNames, useEnvironments } from '@mastra/react/hooks/traces';\nimport type { TraceQueryDiscoveryTimeRange } from '@mastra/react/hooks/traces';\nimport { useCallback, useMemo } from 'react';\nimport {\n TRACE_TIME_RANGE_FIELD,\n TRACE_TIME_RANGE_FIELD_ID,\n TRACE_TIME_RANGE_ITEM,\n} from '../../traces/components/trace-time-range-chip';\nimport {\n filterBarExpressionToTraceFilters,\n traceFiltersToFilterBarExpression,\n traceTokensToFilterBarItems,\n} from '../../traces/trace-filters';\nimport type { TraceFilterGroup, TraceFilterToken } from '../../traces/trace-query-filters';\nimport type { TraceDatePreset } from '../../traces/types';\nimport { createSpanFilterBarFields } from '../span-filters';\nimport { isFilterBarGroup } from '@/ds/components/FilterBar';\nimport type { FilterBarExpression, FilterBarField, FilterBarItem } from '@/ds/components/FilterBar';\n\n/** The time range presets the spans filter bar offers. */\nexport const SPAN_TIME_RANGE_PRESETS: readonly TraceDatePreset[] = [\n 'last-24h',\n 'last-3d',\n 'last-7d',\n 'last-14d',\n 'last-30d',\n 'custom',\n];\n\nconst NO_SUGGESTIONS: string[] = [];\n\nexport type UseSpansFilterBarFieldsOptions = {\n /** Window the value suggestions are looked up in. */\n timeRange: TraceQueryDiscoveryTimeRange;\n};\n\n/**\n * The fields the spans filter bar offers: the time range plus the fields `querySpans()` accepts.\n * Context, model and outcome fields and streaming timings are only included when the store declares them.\n */\nexport function useSpansFilterBarFields({ timeRange }: UseSpansFilterBarFieldsOptions): FilterBarField[] {\n const client = useMastraClient();\n const { data: capabilities } = useObservabilityCapabilities();\n const withContextFields = capabilities?.capabilities.spanQueryContextFields ?? false;\n const withTimeToFirstChunk = capabilities?.capabilities.traceQueryTimeToFirstChunk ?? false;\n const withTimeToFirstToken = capabilities?.capabilities.traceQueryTimeToFirstToken ?? false;\n const withOutcomeFields = capabilities?.capabilities.spanQueryOutcomeFields ?? false;\n const withModelFields = capabilities?.capabilities.spanQueryModelFields ?? false;\n const { data: entityNames = NO_SUGGESTIONS } = useEntityNames();\n const { data: environments = NO_SUGGESTIONS } = useEnvironments();\n\n // Memoized for correctness: static suggestion lists become the value editor's Combobox\n // `items`, which loops if handed a new array on every render.\n return useMemo(\n () => [\n TRACE_TIME_RANGE_FIELD,\n ...createSpanFilterBarFields({\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields,\n withModelFields,\n entityNames,\n environments,\n valueSuggestions: path => createTraceQueryValuesResolver(client, timeRange, 'spans', path),\n }),\n ],\n [\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields,\n withModelFields,\n entityNames,\n environments,\n client,\n timeRange,\n ],\n );\n}\n\nexport type UseSpansFilterBarOptions = {\n tokens: TraceFilterToken[];\n groups: TraceFilterGroup[];\n onFiltersChange: (tokens: TraceFilterToken[], groups: TraceFilterGroup[]) => void;\n};\n\n/**\n * The span filters as a filter bar value, and the handlers that write bar edits back.\n * The time-range chip is a synthetic, always-present item; it never round-trips to tokens.\n */\nexport function useSpansFilterBar({ tokens, groups, onFiltersChange }: UseSpansFilterBarOptions): {\n filterBarValue: FilterBarExpression;\n onFilterBarChange: (expression: FilterBarExpression) => void;\n /** Replaces any filter on `fieldId` with `is value`, e.g. from a list cell. */\n onFilterByField: (fieldId: string, value: string) => void;\n} {\n const items = useMemo(() => traceTokensToFilterBarItems(tokens), [tokens]);\n\n const filterBarValue = useMemo<FilterBarExpression>(() => {\n const groupsExpression = traceFiltersToFilterBarExpression([], groups);\n return { ...groupsExpression, nodes: [TRACE_TIME_RANGE_ITEM, ...items, ...groupsExpression.nodes] };\n }, [items, groups]);\n\n const onFilterBarChange = useCallback(\n (expression: FilterBarExpression) => {\n const next = filterBarExpressionToTraceFilters({\n ...expression,\n nodes: expression.nodes.filter(node => isFilterBarGroup(node) || node.fieldId !== TRACE_TIME_RANGE_FIELD_ID),\n });\n onFiltersChange(next.tokens, next.groups);\n },\n [onFiltersChange],\n );\n\n const onFilterByField = useCallback(\n (fieldId: string, value: string) => {\n const withoutField = items.filter(item => item.fieldId !== fieldId);\n const item: FilterBarItem = { id: `${fieldId}:${value}`, fieldId, operatorId: 'is', value };\n const groupNodes = filterBarValue.nodes.filter(isFilterBarGroup);\n onFilterBarChange({ ...filterBarValue, nodes: [...withoutField, item, ...groupNodes] });\n },\n [items, filterBarValue, onFilterBarChange],\n );\n\n return { filterBarValue, onFilterBarChange, onFilterByField };\n}\n"],"mappings":";;;;;;;;;;;AAsBA,IAAa,0BAAsD;CACjE;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,IAAM,iBAA2B,CAAC;;;;;AAWlC,SAAgB,wBAAwB,EAAE,aAA+D;CACvG,MAAM,UAAA,GAASA,cAAAA,gBAAAA,CAAgB;CAC/B,MAAM,EAAE,MAAM,kBAAA,GAAiBC,iCAAAA,6BAAAA,CAA6B;CAC5D,MAAM,oBAAoB,cAAc,aAAa,0BAA0B;CAC/E,MAAM,uBAAuB,cAAc,aAAa,8BAA8B;CACtF,MAAM,uBAAuB,cAAc,aAAa,8BAA8B;CACtF,MAAM,oBAAoB,cAAc,aAAa,0BAA0B;CAC/E,MAAM,kBAAkB,cAAc,aAAa,wBAAwB;CAC3E,MAAM,EAAE,MAAM,cAAc,oBAAA,GAAmBC,2BAAAA,eAAAA,CAAe;CAC9D,MAAM,EAAE,MAAM,eAAe,oBAAA,GAAmBC,2BAAAA,gBAAAA,CAAgB;CAIhE,QAAA,GAAOC,MAAAA,QAAAA,OACC,CACJC,wDAAAA,wBACA,GAAGC,mCAAAA,0BAA0B;EAC3B;EACA;EACA;EACA;EACA;EACA;EACA;EACA,mBAAkB,UAAA,GAAQC,2BAAAA,+BAAAA,CAA+B,QAAQ,WAAW,SAAS,IAAI;CAC3F,CAAC,CACH,GACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;AACF;;;;;AAYA,SAAgB,kBAAkB,EAAE,QAAQ,QAAQ,mBAKlD;CACA,MAAM,SAAA,GAAQH,MAAAA,QAAAA,OAAcI,sBAAAA,4BAA4B,MAAM,GAAG,CAAC,MAAM,CAAC;CAEzE,MAAM,kBAAA,GAAiBJ,MAAAA,QAAAA,OAAmC;EACxD,MAAM,mBAAmBK,sBAAAA,kCAAkC,CAAC,GAAG,MAAM;EACrE,OAAO;GAAE,GAAG;GAAkB,OAAO;IAACC,wDAAAA;IAAuB,GAAG;IAAO,GAAG,iBAAiB;GAAK;EAAE;CACpG,GAAG,CAAC,OAAO,MAAM,CAAC;CAElB,MAAM,qBAAA,GAAoBC,MAAAA,YAAAA,EACvB,eAAoC;EACnC,MAAM,OAAOC,sBAAAA,kCAAkC;GAC7C,GAAG;GACH,OAAO,WAAW,MAAM,QAAO,SAAQC,cAAAA,iBAAiB,IAAI,KAAK,KAAK,YAAA,WAAqC;EAC7G,CAAC;EACD,gBAAgB,KAAK,QAAQ,KAAK,MAAM;CAC1C,GACA,CAAC,eAAe,CAClB;CAYA,OAAO;EAAE;EAAgB;EAAmB,kBAAA,GAVpBF,MAAAA,YAAAA,EACrB,SAAiB,UAAkB;GAClC,MAAM,eAAe,MAAM,QAAO,SAAQ,KAAK,YAAY,OAAO;GAClE,MAAM,OAAsB;IAAE,IAAI,GAAG,QAAQ,GAAG;IAAS;IAAS,YAAY;IAAM;GAAM;GAC1F,MAAM,aAAa,eAAe,MAAM,OAAOE,cAAAA,gBAAgB;GAC/D,kBAAkB;IAAE,GAAG;IAAgB,OAAO;KAAC,GAAG;KAAc;KAAM,GAAG;IAAU;GAAE,CAAC;EACxF,GACA;GAAC;GAAO;GAAgB;EAAiB,CAGC;CAAgB;AAC9D"}
1
+ {"version":3,"file":"use-spans-filter-bar.cjs.js","names":["useMastraClient","useObservabilityCapabilities","useEntityNames","useEnvironments","useMemo","FILTER_BAR_TIME_RANGE_FIELD","createSpanFilterBarFields","createTraceQueryValuesResolver","traceTokensToFilterBarItems","traceFiltersToFilterBarExpression","FILTER_BAR_TIME_RANGE_ITEM","useCallback","filterBarExpressionToTraceFilters","isFilterBarGroup"],"sources":["../../../../src/domains/spans/hooks/use-spans-filter-bar.ts"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { useObservabilityCapabilities } from '@mastra/react/hooks/capabilities';\nimport { createTraceQueryValuesResolver, useEntityNames, useEnvironments } from '@mastra/react/hooks/traces';\nimport type { TraceQueryDiscoveryTimeRange } from '@mastra/react/hooks/traces';\nimport { useCallback, useMemo } from 'react';\nimport {\n filterBarExpressionToTraceFilters,\n traceFiltersToFilterBarExpression,\n traceTokensToFilterBarItems,\n} from '../../traces/trace-filters';\nimport type { TraceFilterGroup, TraceFilterToken } from '../../traces/trace-query-filters';\nimport type { TraceDatePreset } from '../../traces/types';\nimport { createSpanFilterBarFields } from '../span-filters';\nimport { isFilterBarGroup } from '@/ds/components/FilterBar';\nimport type { FilterBarExpression, FilterBarField, FilterBarItem } from '@/ds/components/FilterBar';\nimport {\n FILTER_BAR_TIME_RANGE_FIELD,\n FILTER_BAR_TIME_RANGE_FIELD_ID,\n FILTER_BAR_TIME_RANGE_ITEM,\n} from '@/ds/components/FilterBar/filter-bar-time-range';\n\n/** The time range presets the spans filter bar offers. */\nexport const SPAN_TIME_RANGE_PRESETS: readonly TraceDatePreset[] = [\n 'last-24h',\n 'last-3d',\n 'last-7d',\n 'last-14d',\n 'last-30d',\n 'custom',\n];\n\nconst NO_SUGGESTIONS: string[] = [];\n\nexport type UseSpansFilterBarFieldsOptions = {\n /** Window the value suggestions are looked up in. */\n timeRange: TraceQueryDiscoveryTimeRange;\n};\n\n/**\n * The fields the spans filter bar offers: the time range plus the fields `querySpans()` accepts.\n * Context, model and outcome fields and streaming timings are only included when the store declares them.\n */\nexport function useSpansFilterBarFields({ timeRange }: UseSpansFilterBarFieldsOptions): FilterBarField[] {\n const client = useMastraClient();\n const { data: capabilities } = useObservabilityCapabilities();\n const withContextFields = capabilities?.capabilities.spanQueryContextFields ?? false;\n const withTimeToFirstChunk = capabilities?.capabilities.traceQueryTimeToFirstChunk ?? false;\n const withTimeToFirstToken = capabilities?.capabilities.traceQueryTimeToFirstToken ?? false;\n const withOutcomeFields = capabilities?.capabilities.spanQueryOutcomeFields ?? false;\n const withModelFields = capabilities?.capabilities.spanQueryModelFields ?? false;\n const { data: entityNames = NO_SUGGESTIONS } = useEntityNames();\n const { data: environments = NO_SUGGESTIONS } = useEnvironments();\n\n // Memoized for correctness: static suggestion lists become the value editor's Combobox\n // `items`, which loops if handed a new array on every render.\n return useMemo(\n () => [\n FILTER_BAR_TIME_RANGE_FIELD,\n ...createSpanFilterBarFields({\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields,\n withModelFields,\n entityNames,\n environments,\n valueSuggestions: path => createTraceQueryValuesResolver(client, timeRange, 'spans', path),\n }),\n ],\n [\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields,\n withModelFields,\n entityNames,\n environments,\n client,\n timeRange,\n ],\n );\n}\n\nexport type UseSpansFilterBarOptions = {\n tokens: TraceFilterToken[];\n groups: TraceFilterGroup[];\n onFiltersChange: (tokens: TraceFilterToken[], groups: TraceFilterGroup[]) => void;\n};\n\n/**\n * The span filters as a filter bar value, and the handlers that write bar edits back.\n * The time range is a synthetic, always-present item; it never round-trips to tokens.\n */\nexport function useSpansFilterBar({ tokens, groups, onFiltersChange }: UseSpansFilterBarOptions): {\n filterBarValue: FilterBarExpression;\n onFilterBarChange: (expression: FilterBarExpression) => void;\n /** Replaces any filter on `fieldId` with `is value`, e.g. from a list cell. */\n onFilterByField: (fieldId: string, value: string) => void;\n} {\n const items = useMemo(() => traceTokensToFilterBarItems(tokens), [tokens]);\n\n const filterBarValue = useMemo<FilterBarExpression>(() => {\n const groupsExpression = traceFiltersToFilterBarExpression([], groups);\n return { ...groupsExpression, nodes: [FILTER_BAR_TIME_RANGE_ITEM, ...items, ...groupsExpression.nodes] };\n }, [items, groups]);\n\n const onFilterBarChange = useCallback(\n (expression: FilterBarExpression) => {\n const next = filterBarExpressionToTraceFilters({\n ...expression,\n nodes: expression.nodes.filter(\n node => isFilterBarGroup(node) || node.fieldId !== FILTER_BAR_TIME_RANGE_FIELD_ID,\n ),\n });\n onFiltersChange(next.tokens, next.groups);\n },\n [onFiltersChange],\n );\n\n const onFilterByField = useCallback(\n (fieldId: string, value: string) => {\n const withoutField = items.filter(item => item.fieldId !== fieldId);\n const item: FilterBarItem = { id: `${fieldId}:${value}`, fieldId, operatorId: 'is', value };\n const groupNodes = filterBarValue.nodes.filter(isFilterBarGroup);\n onFilterBarChange({ ...filterBarValue, nodes: [...withoutField, item, ...groupNodes] });\n },\n [items, filterBarValue, onFilterBarChange],\n );\n\n return { filterBarValue, onFilterBarChange, onFilterByField };\n}\n"],"mappings":";;;;;;;;;;;AAsBA,IAAa,0BAAsD;CACjE;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,IAAM,iBAA2B,CAAC;;;;;AAWlC,SAAgB,wBAAwB,EAAE,aAA+D;CACvG,MAAM,UAAA,GAASA,cAAAA,gBAAAA,CAAgB;CAC/B,MAAM,EAAE,MAAM,kBAAA,GAAiBC,iCAAAA,6BAAAA,CAA6B;CAC5D,MAAM,oBAAoB,cAAc,aAAa,0BAA0B;CAC/E,MAAM,uBAAuB,cAAc,aAAa,8BAA8B;CACtF,MAAM,uBAAuB,cAAc,aAAa,8BAA8B;CACtF,MAAM,oBAAoB,cAAc,aAAa,0BAA0B;CAC/E,MAAM,kBAAkB,cAAc,aAAa,wBAAwB;CAC3E,MAAM,EAAE,MAAM,cAAc,oBAAA,GAAmBC,2BAAAA,eAAAA,CAAe;CAC9D,MAAM,EAAE,MAAM,eAAe,oBAAA,GAAmBC,2BAAAA,gBAAAA,CAAgB;CAIhE,QAAA,GAAOC,MAAAA,QAAAA,OACC,CACJC,8BAAAA,6BACA,GAAGC,mCAAAA,0BAA0B;EAC3B;EACA;EACA;EACA;EACA;EACA;EACA;EACA,mBAAkB,UAAA,GAAQC,2BAAAA,+BAAAA,CAA+B,QAAQ,WAAW,SAAS,IAAI;CAC3F,CAAC,CACH,GACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;AACF;;;;;AAYA,SAAgB,kBAAkB,EAAE,QAAQ,QAAQ,mBAKlD;CACA,MAAM,SAAA,GAAQH,MAAAA,QAAAA,OAAcI,sBAAAA,4BAA4B,MAAM,GAAG,CAAC,MAAM,CAAC;CAEzE,MAAM,kBAAA,GAAiBJ,MAAAA,QAAAA,OAAmC;EACxD,MAAM,mBAAmBK,sBAAAA,kCAAkC,CAAC,GAAG,MAAM;EACrE,OAAO;GAAE,GAAG;GAAkB,OAAO;IAACC,8BAAAA;IAA4B,GAAG;IAAO,GAAG,iBAAiB;GAAK;EAAE;CACzG,GAAG,CAAC,OAAO,MAAM,CAAC;CAElB,MAAM,qBAAA,GAAoBC,MAAAA,YAAAA,EACvB,eAAoC;EACnC,MAAM,OAAOC,sBAAAA,kCAAkC;GAC7C,GAAG;GACH,OAAO,WAAW,MAAM,QACtB,SAAQC,cAAAA,iBAAiB,IAAI,KAAK,KAAK,YAAA,WACzC;EACF,CAAC;EACD,gBAAgB,KAAK,QAAQ,KAAK,MAAM;CAC1C,GACA,CAAC,eAAe,CAClB;CAYA,OAAO;EAAE;EAAgB;EAAmB,kBAAA,GAVpBF,MAAAA,YAAAA,EACrB,SAAiB,UAAkB;GAClC,MAAM,eAAe,MAAM,QAAO,SAAQ,KAAK,YAAY,OAAO;GAClE,MAAM,OAAsB;IAAE,IAAI,GAAG,QAAQ,GAAG;IAAS;IAAS,YAAY;IAAM;GAAM;GAC1F,MAAM,aAAa,eAAe,MAAM,OAAOE,cAAAA,gBAAgB;GAC/D,kBAAkB;IAAE,GAAG;IAAgB,OAAO;KAAC,GAAG;KAAc;KAAM,GAAG;IAAU;GAAE,CAAC;EACxF,GACA;GAAC;GAAO;GAAgB;EAAiB,CAGC;CAAgB;AAC9D"}
@@ -1,7 +1,7 @@
1
- import { L as filterBarExpressionToTraceFilters, rt as traceTokensToFilterBarItems, tt as traceFiltersToFilterBarExpression } from "../../../trace-filters-BJaebsxJ.js";
1
+ import { L as filterBarExpressionToTraceFilters, rt as traceTokensToFilterBarItems, tt as traceFiltersToFilterBarExpression } from "../../../trace-filters-CaWkw779.js";
2
2
  import { t as isFilterBarGroup } from "../../../types-DiiL5mTO.js";
3
3
  import { createSpanFilterBarFields } from "../span-filters.es.js";
4
- import { TRACE_TIME_RANGE_FIELD, TRACE_TIME_RANGE_ITEM } from "../../traces/components/trace-time-range-chip.es.js";
4
+ import { r as FILTER_BAR_TIME_RANGE_ITEM, t as FILTER_BAR_TIME_RANGE_FIELD } from "../../../filter-bar-time-range-CXQMBgpz.js";
5
5
  import { useCallback, useMemo } from "react";
6
6
  import { useMastraClient } from "@mastra/react";
7
7
  import { useObservabilityCapabilities } from "@mastra/react/hooks/capabilities";
@@ -31,7 +31,7 @@ function useSpansFilterBarFields({ timeRange }) {
31
31
  const withModelFields = capabilities?.capabilities.spanQueryModelFields ?? false;
32
32
  const { data: entityNames = NO_SUGGESTIONS } = useEntityNames();
33
33
  const { data: environments = NO_SUGGESTIONS } = useEnvironments();
34
- return useMemo(() => [TRACE_TIME_RANGE_FIELD, ...createSpanFilterBarFields({
34
+ return useMemo(() => [FILTER_BAR_TIME_RANGE_FIELD, ...createSpanFilterBarFields({
35
35
  withContextFields,
36
36
  withTimeToFirstChunk,
37
37
  withTimeToFirstToken,
@@ -54,7 +54,7 @@ function useSpansFilterBarFields({ timeRange }) {
54
54
  }
55
55
  /**
56
56
  * The span filters as a filter bar value, and the handlers that write bar edits back.
57
- * The time-range chip is a synthetic, always-present item; it never round-trips to tokens.
57
+ * The time range is a synthetic, always-present item; it never round-trips to tokens.
58
58
  */
59
59
  function useSpansFilterBar({ tokens, groups, onFiltersChange }) {
60
60
  const items = useMemo(() => traceTokensToFilterBarItems(tokens), [tokens]);
@@ -63,7 +63,7 @@ function useSpansFilterBar({ tokens, groups, onFiltersChange }) {
63
63
  return {
64
64
  ...groupsExpression,
65
65
  nodes: [
66
- TRACE_TIME_RANGE_ITEM,
66
+ FILTER_BAR_TIME_RANGE_ITEM,
67
67
  ...items,
68
68
  ...groupsExpression.nodes
69
69
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"use-spans-filter-bar.es.js","names":[],"sources":["../../../../src/domains/spans/hooks/use-spans-filter-bar.ts"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { useObservabilityCapabilities } from '@mastra/react/hooks/capabilities';\nimport { createTraceQueryValuesResolver, useEntityNames, useEnvironments } from '@mastra/react/hooks/traces';\nimport type { TraceQueryDiscoveryTimeRange } from '@mastra/react/hooks/traces';\nimport { useCallback, useMemo } from 'react';\nimport {\n TRACE_TIME_RANGE_FIELD,\n TRACE_TIME_RANGE_FIELD_ID,\n TRACE_TIME_RANGE_ITEM,\n} from '../../traces/components/trace-time-range-chip';\nimport {\n filterBarExpressionToTraceFilters,\n traceFiltersToFilterBarExpression,\n traceTokensToFilterBarItems,\n} from '../../traces/trace-filters';\nimport type { TraceFilterGroup, TraceFilterToken } from '../../traces/trace-query-filters';\nimport type { TraceDatePreset } from '../../traces/types';\nimport { createSpanFilterBarFields } from '../span-filters';\nimport { isFilterBarGroup } from '@/ds/components/FilterBar';\nimport type { FilterBarExpression, FilterBarField, FilterBarItem } from '@/ds/components/FilterBar';\n\n/** The time range presets the spans filter bar offers. */\nexport const SPAN_TIME_RANGE_PRESETS: readonly TraceDatePreset[] = [\n 'last-24h',\n 'last-3d',\n 'last-7d',\n 'last-14d',\n 'last-30d',\n 'custom',\n];\n\nconst NO_SUGGESTIONS: string[] = [];\n\nexport type UseSpansFilterBarFieldsOptions = {\n /** Window the value suggestions are looked up in. */\n timeRange: TraceQueryDiscoveryTimeRange;\n};\n\n/**\n * The fields the spans filter bar offers: the time range plus the fields `querySpans()` accepts.\n * Context, model and outcome fields and streaming timings are only included when the store declares them.\n */\nexport function useSpansFilterBarFields({ timeRange }: UseSpansFilterBarFieldsOptions): FilterBarField[] {\n const client = useMastraClient();\n const { data: capabilities } = useObservabilityCapabilities();\n const withContextFields = capabilities?.capabilities.spanQueryContextFields ?? false;\n const withTimeToFirstChunk = capabilities?.capabilities.traceQueryTimeToFirstChunk ?? false;\n const withTimeToFirstToken = capabilities?.capabilities.traceQueryTimeToFirstToken ?? false;\n const withOutcomeFields = capabilities?.capabilities.spanQueryOutcomeFields ?? false;\n const withModelFields = capabilities?.capabilities.spanQueryModelFields ?? false;\n const { data: entityNames = NO_SUGGESTIONS } = useEntityNames();\n const { data: environments = NO_SUGGESTIONS } = useEnvironments();\n\n // Memoized for correctness: static suggestion lists become the value editor's Combobox\n // `items`, which loops if handed a new array on every render.\n return useMemo(\n () => [\n TRACE_TIME_RANGE_FIELD,\n ...createSpanFilterBarFields({\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields,\n withModelFields,\n entityNames,\n environments,\n valueSuggestions: path => createTraceQueryValuesResolver(client, timeRange, 'spans', path),\n }),\n ],\n [\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields,\n withModelFields,\n entityNames,\n environments,\n client,\n timeRange,\n ],\n );\n}\n\nexport type UseSpansFilterBarOptions = {\n tokens: TraceFilterToken[];\n groups: TraceFilterGroup[];\n onFiltersChange: (tokens: TraceFilterToken[], groups: TraceFilterGroup[]) => void;\n};\n\n/**\n * The span filters as a filter bar value, and the handlers that write bar edits back.\n * The time-range chip is a synthetic, always-present item; it never round-trips to tokens.\n */\nexport function useSpansFilterBar({ tokens, groups, onFiltersChange }: UseSpansFilterBarOptions): {\n filterBarValue: FilterBarExpression;\n onFilterBarChange: (expression: FilterBarExpression) => void;\n /** Replaces any filter on `fieldId` with `is value`, e.g. from a list cell. */\n onFilterByField: (fieldId: string, value: string) => void;\n} {\n const items = useMemo(() => traceTokensToFilterBarItems(tokens), [tokens]);\n\n const filterBarValue = useMemo<FilterBarExpression>(() => {\n const groupsExpression = traceFiltersToFilterBarExpression([], groups);\n return { ...groupsExpression, nodes: [TRACE_TIME_RANGE_ITEM, ...items, ...groupsExpression.nodes] };\n }, [items, groups]);\n\n const onFilterBarChange = useCallback(\n (expression: FilterBarExpression) => {\n const next = filterBarExpressionToTraceFilters({\n ...expression,\n nodes: expression.nodes.filter(node => isFilterBarGroup(node) || node.fieldId !== TRACE_TIME_RANGE_FIELD_ID),\n });\n onFiltersChange(next.tokens, next.groups);\n },\n [onFiltersChange],\n );\n\n const onFilterByField = useCallback(\n (fieldId: string, value: string) => {\n const withoutField = items.filter(item => item.fieldId !== fieldId);\n const item: FilterBarItem = { id: `${fieldId}:${value}`, fieldId, operatorId: 'is', value };\n const groupNodes = filterBarValue.nodes.filter(isFilterBarGroup);\n onFilterBarChange({ ...filterBarValue, nodes: [...withoutField, item, ...groupNodes] });\n },\n [items, filterBarValue, onFilterBarChange],\n );\n\n return { filterBarValue, onFilterBarChange, onFilterByField };\n}\n"],"mappings":";;;;;;;;;;AAsBA,IAAa,0BAAsD;CACjE;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,IAAM,iBAA2B,CAAC;;;;;AAWlC,SAAgB,wBAAwB,EAAE,aAA+D;CACvG,MAAM,SAAS,gBAAgB;CAC/B,MAAM,EAAE,MAAM,iBAAiB,6BAA6B;CAC5D,MAAM,oBAAoB,cAAc,aAAa,0BAA0B;CAC/E,MAAM,uBAAuB,cAAc,aAAa,8BAA8B;CACtF,MAAM,uBAAuB,cAAc,aAAa,8BAA8B;CACtF,MAAM,oBAAoB,cAAc,aAAa,0BAA0B;CAC/E,MAAM,kBAAkB,cAAc,aAAa,wBAAwB;CAC3E,MAAM,EAAE,MAAM,cAAc,mBAAmB,eAAe;CAC9D,MAAM,EAAE,MAAM,eAAe,mBAAmB,gBAAgB;CAIhE,OAAO,cACC,CACJ,wBACA,GAAG,0BAA0B;EAC3B;EACA;EACA;EACA;EACA;EACA;EACA;EACA,mBAAkB,SAAQ,+BAA+B,QAAQ,WAAW,SAAS,IAAI;CAC3F,CAAC,CACH,GACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;AACF;;;;;AAYA,SAAgB,kBAAkB,EAAE,QAAQ,QAAQ,mBAKlD;CACA,MAAM,QAAQ,cAAc,4BAA4B,MAAM,GAAG,CAAC,MAAM,CAAC;CAEzE,MAAM,iBAAiB,cAAmC;EACxD,MAAM,mBAAmB,kCAAkC,CAAC,GAAG,MAAM;EACrE,OAAO;GAAE,GAAG;GAAkB,OAAO;IAAC;IAAuB,GAAG;IAAO,GAAG,iBAAiB;GAAK;EAAE;CACpG,GAAG,CAAC,OAAO,MAAM,CAAC;CAElB,MAAM,oBAAoB,aACvB,eAAoC;EACnC,MAAM,OAAO,kCAAkC;GAC7C,GAAG;GACH,OAAO,WAAW,MAAM,QAAO,SAAQ,iBAAiB,IAAI,KAAK,KAAK,YAAA,WAAqC;EAC7G,CAAC;EACD,gBAAgB,KAAK,QAAQ,KAAK,MAAM;CAC1C,GACA,CAAC,eAAe,CAClB;CAYA,OAAO;EAAE;EAAgB;EAAmB,iBAVpB,aACrB,SAAiB,UAAkB;GAClC,MAAM,eAAe,MAAM,QAAO,SAAQ,KAAK,YAAY,OAAO;GAClE,MAAM,OAAsB;IAAE,IAAI,GAAG,QAAQ,GAAG;IAAS;IAAS,YAAY;IAAM;GAAM;GAC1F,MAAM,aAAa,eAAe,MAAM,OAAO,gBAAgB;GAC/D,kBAAkB;IAAE,GAAG;IAAgB,OAAO;KAAC,GAAG;KAAc;KAAM,GAAG;IAAU;GAAE,CAAC;EACxF,GACA;GAAC;GAAO;GAAgB;EAAiB,CAGC;CAAgB;AAC9D"}
1
+ {"version":3,"file":"use-spans-filter-bar.es.js","names":[],"sources":["../../../../src/domains/spans/hooks/use-spans-filter-bar.ts"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { useObservabilityCapabilities } from '@mastra/react/hooks/capabilities';\nimport { createTraceQueryValuesResolver, useEntityNames, useEnvironments } from '@mastra/react/hooks/traces';\nimport type { TraceQueryDiscoveryTimeRange } from '@mastra/react/hooks/traces';\nimport { useCallback, useMemo } from 'react';\nimport {\n filterBarExpressionToTraceFilters,\n traceFiltersToFilterBarExpression,\n traceTokensToFilterBarItems,\n} from '../../traces/trace-filters';\nimport type { TraceFilterGroup, TraceFilterToken } from '../../traces/trace-query-filters';\nimport type { TraceDatePreset } from '../../traces/types';\nimport { createSpanFilterBarFields } from '../span-filters';\nimport { isFilterBarGroup } from '@/ds/components/FilterBar';\nimport type { FilterBarExpression, FilterBarField, FilterBarItem } from '@/ds/components/FilterBar';\nimport {\n FILTER_BAR_TIME_RANGE_FIELD,\n FILTER_BAR_TIME_RANGE_FIELD_ID,\n FILTER_BAR_TIME_RANGE_ITEM,\n} from '@/ds/components/FilterBar/filter-bar-time-range';\n\n/** The time range presets the spans filter bar offers. */\nexport const SPAN_TIME_RANGE_PRESETS: readonly TraceDatePreset[] = [\n 'last-24h',\n 'last-3d',\n 'last-7d',\n 'last-14d',\n 'last-30d',\n 'custom',\n];\n\nconst NO_SUGGESTIONS: string[] = [];\n\nexport type UseSpansFilterBarFieldsOptions = {\n /** Window the value suggestions are looked up in. */\n timeRange: TraceQueryDiscoveryTimeRange;\n};\n\n/**\n * The fields the spans filter bar offers: the time range plus the fields `querySpans()` accepts.\n * Context, model and outcome fields and streaming timings are only included when the store declares them.\n */\nexport function useSpansFilterBarFields({ timeRange }: UseSpansFilterBarFieldsOptions): FilterBarField[] {\n const client = useMastraClient();\n const { data: capabilities } = useObservabilityCapabilities();\n const withContextFields = capabilities?.capabilities.spanQueryContextFields ?? false;\n const withTimeToFirstChunk = capabilities?.capabilities.traceQueryTimeToFirstChunk ?? false;\n const withTimeToFirstToken = capabilities?.capabilities.traceQueryTimeToFirstToken ?? false;\n const withOutcomeFields = capabilities?.capabilities.spanQueryOutcomeFields ?? false;\n const withModelFields = capabilities?.capabilities.spanQueryModelFields ?? false;\n const { data: entityNames = NO_SUGGESTIONS } = useEntityNames();\n const { data: environments = NO_SUGGESTIONS } = useEnvironments();\n\n // Memoized for correctness: static suggestion lists become the value editor's Combobox\n // `items`, which loops if handed a new array on every render.\n return useMemo(\n () => [\n FILTER_BAR_TIME_RANGE_FIELD,\n ...createSpanFilterBarFields({\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields,\n withModelFields,\n entityNames,\n environments,\n valueSuggestions: path => createTraceQueryValuesResolver(client, timeRange, 'spans', path),\n }),\n ],\n [\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields,\n withModelFields,\n entityNames,\n environments,\n client,\n timeRange,\n ],\n );\n}\n\nexport type UseSpansFilterBarOptions = {\n tokens: TraceFilterToken[];\n groups: TraceFilterGroup[];\n onFiltersChange: (tokens: TraceFilterToken[], groups: TraceFilterGroup[]) => void;\n};\n\n/**\n * The span filters as a filter bar value, and the handlers that write bar edits back.\n * The time range is a synthetic, always-present item; it never round-trips to tokens.\n */\nexport function useSpansFilterBar({ tokens, groups, onFiltersChange }: UseSpansFilterBarOptions): {\n filterBarValue: FilterBarExpression;\n onFilterBarChange: (expression: FilterBarExpression) => void;\n /** Replaces any filter on `fieldId` with `is value`, e.g. from a list cell. */\n onFilterByField: (fieldId: string, value: string) => void;\n} {\n const items = useMemo(() => traceTokensToFilterBarItems(tokens), [tokens]);\n\n const filterBarValue = useMemo<FilterBarExpression>(() => {\n const groupsExpression = traceFiltersToFilterBarExpression([], groups);\n return { ...groupsExpression, nodes: [FILTER_BAR_TIME_RANGE_ITEM, ...items, ...groupsExpression.nodes] };\n }, [items, groups]);\n\n const onFilterBarChange = useCallback(\n (expression: FilterBarExpression) => {\n const next = filterBarExpressionToTraceFilters({\n ...expression,\n nodes: expression.nodes.filter(\n node => isFilterBarGroup(node) || node.fieldId !== FILTER_BAR_TIME_RANGE_FIELD_ID,\n ),\n });\n onFiltersChange(next.tokens, next.groups);\n },\n [onFiltersChange],\n );\n\n const onFilterByField = useCallback(\n (fieldId: string, value: string) => {\n const withoutField = items.filter(item => item.fieldId !== fieldId);\n const item: FilterBarItem = { id: `${fieldId}:${value}`, fieldId, operatorId: 'is', value };\n const groupNodes = filterBarValue.nodes.filter(isFilterBarGroup);\n onFilterBarChange({ ...filterBarValue, nodes: [...withoutField, item, ...groupNodes] });\n },\n [items, filterBarValue, onFilterBarChange],\n );\n\n return { filterBarValue, onFilterBarChange, onFilterByField };\n}\n"],"mappings":";;;;;;;;;;AAsBA,IAAa,0BAAsD;CACjE;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,IAAM,iBAA2B,CAAC;;;;;AAWlC,SAAgB,wBAAwB,EAAE,aAA+D;CACvG,MAAM,SAAS,gBAAgB;CAC/B,MAAM,EAAE,MAAM,iBAAiB,6BAA6B;CAC5D,MAAM,oBAAoB,cAAc,aAAa,0BAA0B;CAC/E,MAAM,uBAAuB,cAAc,aAAa,8BAA8B;CACtF,MAAM,uBAAuB,cAAc,aAAa,8BAA8B;CACtF,MAAM,oBAAoB,cAAc,aAAa,0BAA0B;CAC/E,MAAM,kBAAkB,cAAc,aAAa,wBAAwB;CAC3E,MAAM,EAAE,MAAM,cAAc,mBAAmB,eAAe;CAC9D,MAAM,EAAE,MAAM,eAAe,mBAAmB,gBAAgB;CAIhE,OAAO,cACC,CACJ,6BACA,GAAG,0BAA0B;EAC3B;EACA;EACA;EACA;EACA;EACA;EACA;EACA,mBAAkB,SAAQ,+BAA+B,QAAQ,WAAW,SAAS,IAAI;CAC3F,CAAC,CACH,GACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;AACF;;;;;AAYA,SAAgB,kBAAkB,EAAE,QAAQ,QAAQ,mBAKlD;CACA,MAAM,QAAQ,cAAc,4BAA4B,MAAM,GAAG,CAAC,MAAM,CAAC;CAEzE,MAAM,iBAAiB,cAAmC;EACxD,MAAM,mBAAmB,kCAAkC,CAAC,GAAG,MAAM;EACrE,OAAO;GAAE,GAAG;GAAkB,OAAO;IAAC;IAA4B,GAAG;IAAO,GAAG,iBAAiB;GAAK;EAAE;CACzG,GAAG,CAAC,OAAO,MAAM,CAAC;CAElB,MAAM,oBAAoB,aACvB,eAAoC;EACnC,MAAM,OAAO,kCAAkC;GAC7C,GAAG;GACH,OAAO,WAAW,MAAM,QACtB,SAAQ,iBAAiB,IAAI,KAAK,KAAK,YAAA,WACzC;EACF,CAAC;EACD,gBAAgB,KAAK,QAAQ,KAAK,MAAM;CAC1C,GACA,CAAC,eAAe,CAClB;CAYA,OAAO;EAAE;EAAgB;EAAmB,iBAVpB,aACrB,SAAiB,UAAkB;GAClC,MAAM,eAAe,MAAM,QAAO,SAAQ,KAAK,YAAY,OAAO;GAClE,MAAM,OAAsB;IAAE,IAAI,GAAG,QAAQ,GAAG;IAAS;IAAS,YAAY;IAAM;GAAM;GAC1F,MAAM,aAAa,eAAe,MAAM,OAAO,gBAAgB;GAC/D,kBAAkB;IAAE,GAAG;IAAgB,OAAO;KAAC,GAAG;KAAc;KAAM,GAAG;IAAU;GAAE,CAAC;EACxF,GACA;GAAC;GAAO;GAAgB;EAAiB,CAGC;CAAgB;AAC9D"}
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_trace_filters = require("../../trace-filters-BNEZ31HX.cjs");
2
+ const require_trace_filters = require("../../trace-filters-a0N9bf52.cjs");
3
3
  let _mastra_core_observability = require("@mastra/core/observability");
4
4
  // src/domains/spans/span-filters.ts
5
- /** Span query fields every store accepts. `startedAt`/`endedAt` are left to the time-range chip. */
5
+ /** Span query fields every store accepts. `startedAt`/`endedAt` are left to the time range. */
6
6
  var SPAN_CORE_FILTER_FIELD_IDS = [
7
7
  "name",
8
8
  "spanType",
@@ -1 +1 @@
1
- {"version":3,"file":"span-filters.cjs.js","names":["TRACE_FILTER_BAR_LABELS","traceFilterFieldIcon","traceFilterFieldColor","ROOT_ENTITY_TYPE_OPTIONS","SpanType","EntityType","TRACE_STATUS_OPTIONS","TRACE_STRING_OPERATORS","TRACE_SYNTHETIC_OPERATORS","TRACE_REQUIRED_STRING_OPERATORS","TRACE_TEXT_OPERATORS","TRACE_PRESENCE_OPERATORS","TRACE_NUMBER_OPERATORS","withoutUnrecordedStreamingTimings","createOutcomeFilterBarFields","isLegacyAnyValue","scalarPredicate","isTraceFilterGroup"],"sources":["../../../src/domains/spans/span-filters.ts"],"sourcesContent":["import { EntityType, SpanType } from '@mastra/core/observability';\nimport type { TraceQueryScalarPredicate } from '@mastra/core/storage';\nimport {\n isLegacyAnyValue,\n ROOT_ENTITY_TYPE_OPTIONS,\n TRACE_FILTER_BAR_LABELS,\n TRACE_NUMBER_OPERATORS,\n TRACE_PRESENCE_OPERATORS,\n TRACE_REQUIRED_STRING_OPERATORS,\n TRACE_STATUS_OPTIONS,\n TRACE_STRING_OPERATORS,\n TRACE_SYNTHETIC_OPERATORS,\n TRACE_TEXT_OPERATORS,\n createOutcomeFilterBarFields,\n traceFilterFieldColor,\n traceFilterFieldIcon,\n withoutUnrecordedStreamingTimings,\n} from '../traces/trace-filters';\nimport type { StreamingTimingSupport } from '../traces/trace-filters';\nimport { isTraceFilterGroup, scalarPredicate } from '../traces/trace-query-filters';\nimport type { TraceFilterGroup, TraceFilterOperatorId, TraceFilterToken } from '../traces/trace-query-filters';\nimport type { FilterBarField, FilterBarOption, FilterBarSuggestionsResolver } from '@/ds/components/FilterBar/types';\n\n/** Span query fields every store accepts. `startedAt`/`endedAt` are left to the time-range chip. */\nexport const SPAN_CORE_FILTER_FIELD_IDS = [\n 'name',\n 'spanType',\n 'status',\n 'error',\n 'durationMs',\n 'timeToFirstChunkMs',\n 'timeToFirstTokenMs',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityVersionId',\n 'rootEntityVersionId',\n 'runId',\n 'sessionId',\n 'userId',\n 'organizationId',\n] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryContextFields`. */\nexport const SPAN_CONTEXT_FILTER_FIELD_IDS = [\n 'traceId',\n 'spanId',\n 'parentSpanId',\n 'threadId',\n 'resourceId',\n 'requestId',\n 'serviceName',\n 'experimentId',\n 'environment',\n 'executionSource',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryOutcomeFields`. */\nexport const SPAN_OUTCOME_FILTER_FIELD_IDS = ['outcome', 'stopReason'] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryModelFields`. */\nexport const SPAN_MODEL_FILTER_FIELD_IDS = ['model', 'provider'] as const;\n\nconst NUMBER_FIELD_IDS: ReadonlySet<string> = new Set(['durationMs', 'timeToFirstChunkMs', 'timeToFirstTokenMs']);\n/** The query can only test `error` for presence; any other operator is rejected. */\nconst PRESENCE_ONLY_FIELD_IDS: ReadonlySet<string> = new Set(['error']);\n/** Fields every span carries. On any other field, \"is not X\" must also keep spans where it is missing. */\nconst REQUIRED_FIELD_IDS: ReadonlySet<string> = new Set([\n 'name',\n 'spanType',\n 'status',\n 'traceId',\n 'spanId',\n 'durationMs',\n]);\n\nconst SPAN_FILTER_BAR_LABELS: Record<string, string> = {\n ...TRACE_FILTER_BAR_LABELS,\n name: 'Span name',\n spanType: 'Span type',\n spanId: 'Span ID',\n parentSpanId: 'Parent span ID',\n error: 'Error',\n timeToFirstChunkMs: 'Time to first chunk (ms)',\n timeToFirstTokenMs: 'Time to first token (ms)',\n executionSource: 'Execution source',\n entityType: 'Primitive type',\n entityVersionId: 'Primitive version ID',\n parentEntityType: 'Parent primitive type',\n parentEntityId: 'Parent primitive ID',\n parentEntityName: 'Parent primitive name',\n parentEntityVersionId: 'Parent primitive version ID',\n rootEntityType: 'Root primitive type',\n rootEntityId: 'Root primitive ID',\n rootEntityName: 'Root primitive name',\n rootEntityVersionId: 'Root primitive version ID',\n model: 'Model',\n provider: 'Provider',\n};\n\n/** Span fields without their own trace icon borrow the icon of the closest trace field. */\nconst SPAN_ICON_FIELD_ALIASES: Record<string, string> = {\n name: 'spans.name',\n spanType: 'spans.spanType',\n error: 'spans.error',\n timeToFirstChunkMs: 'durationMs',\n timeToFirstTokenMs: 'durationMs',\n spanId: 'traceId',\n parentSpanId: 'traceId',\n executionSource: 'runId',\n entityType: 'rootEntityType',\n parentEntityType: 'rootEntityType',\n entityVersionId: 'entityId',\n parentEntityId: 'entityId',\n parentEntityVersionId: 'entityId',\n rootEntityId: 'entityId',\n rootEntityVersionId: 'entityId',\n parentEntityName: 'entityName',\n rootEntityName: 'entityName',\n model: 'spans.model',\n provider: 'spans.provider',\n};\n\nconst spanFieldBase = (id: string) => ({\n id,\n label: SPAN_FILTER_BAR_LABELS[id] ?? id,\n icon: traceFilterFieldIcon(SPAN_ICON_FIELD_ALIASES[id] ?? id),\n color: traceFilterFieldColor(id),\n});\n\nconst humanize = (value: string) => {\n const words = value.replace(/_/g, ' ');\n return words.charAt(0).toUpperCase() + words.slice(1);\n};\n\nconst byLabel = (a: { label?: string; value: string }, b: { label?: string; value: string }) =>\n (a.label ?? a.value).localeCompare(b.label ?? b.value);\n\nconst ENTITY_TYPE_LABELS: Record<string, string> = Object.fromEntries(\n ROOT_ENTITY_TYPE_OPTIONS.map(option => [option.entityType, option.label]),\n);\n\nconst SPAN_TYPE_OPTIONS: FilterBarOption[] = Object.values(SpanType)\n .map(value => ({ value, label: humanize(value) }))\n .sort(byLabel);\n\nconst ENTITY_TYPE_OPTIONS: FilterBarOption[] = Object.values(EntityType)\n .map(value => ({ value, label: ENTITY_TYPE_LABELS[value] ?? humanize(value) }))\n .sort(byLabel);\n\nconst STATUS_OPTIONS: FilterBarOption[] = TRACE_STATUS_OPTIONS.filter(option => option.value !== 'running').map(\n option => ({ value: option.value, label: option.label }),\n);\n\n/** FilterBar fields for the spans page: only paths and operators `querySpans()` accepts. */\nexport function createSpanFilterBarFields({\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields = false,\n withModelFields = false,\n entityNames,\n environments,\n valueSuggestions,\n}: StreamingTimingSupport & {\n /** Offer the context fields. Only when the server declares `spanQueryContextFields`. */\n withContextFields: boolean;\n /** Offer `outcome` and `stopReason`. Only when the server declares `spanQueryOutcomeFields`. */\n withOutcomeFields?: boolean;\n /** Offer `model` and `provider`. Only when the server declares `spanQueryModelFields`. */\n withModelFields?: boolean;\n entityNames: readonly string[];\n environments: readonly string[];\n /** Builds a lazy value resolver for a span field. Absent → free text. */\n valueSuggestions?: (path: string) => FilterBarSuggestionsResolver;\n}): FilterBarField[] {\n const pick = (\n id: string,\n suggestions: FilterBarOption[],\n operators: TraceFilterOperatorId[] = TRACE_STRING_OPERATORS,\n ): FilterBarField => ({ ...spanFieldBase(id), operators, strict: true, suggestions });\n const names = entityNames.map(value => ({ value }));\n\n const field = (id: string): FilterBarField => {\n switch (id) {\n case 'status':\n return pick(id, STATUS_OPTIONS, TRACE_SYNTHETIC_OPERATORS);\n case 'spanType':\n return pick(id, SPAN_TYPE_OPTIONS, TRACE_REQUIRED_STRING_OPERATORS);\n case 'entityType':\n case 'parentEntityType':\n case 'rootEntityType':\n return pick(id, ENTITY_TYPE_OPTIONS);\n case 'entityName':\n case 'rootEntityName':\n return pick(id, names);\n case 'environment':\n return pick(\n id,\n environments.map(value => ({ value })),\n );\n case 'name': {\n const resolver = valueSuggestions?.(id);\n return {\n ...spanFieldBase(id),\n operators: TRACE_TEXT_OPERATORS,\n ...(resolver ? { strict: true, suggestions: resolver } : {}),\n };\n }\n case 'error':\n return { ...spanFieldBase(id), operators: TRACE_PRESENCE_OPERATORS };\n case 'durationMs':\n case 'timeToFirstChunkMs':\n case 'timeToFirstTokenMs':\n return { ...spanFieldBase(id), type: 'number', operators: TRACE_NUMBER_OPERATORS };\n case 'traceId':\n case 'spanId':\n return { ...spanFieldBase(id), operators: TRACE_REQUIRED_STRING_OPERATORS };\n case 'model':\n case 'provider': {\n const resolver = valueSuggestions?.(id);\n return {\n ...spanFieldBase(id),\n operators: TRACE_STRING_OPERATORS,\n ...(resolver ? { suggestions: resolver } : {}),\n };\n }\n default:\n return { ...spanFieldBase(id), operators: TRACE_STRING_OPERATORS };\n }\n };\n\n const offered = withoutUnrecordedStreamingTimings(\n new Set([...SPAN_CORE_FILTER_FIELD_IDS, ...SPAN_CONTEXT_FILTER_FIELD_IDS]),\n {\n withTimeToFirstChunk,\n withTimeToFirstToken,\n },\n );\n const sortFields = (ids: readonly string[]) =>\n ids\n .filter(id => offered.has(id))\n .map(field)\n .sort((a, b) => a.label.localeCompare(b.label));\n return [\n ...sortFields(SPAN_CORE_FILTER_FIELD_IDS),\n ...(withContextFields ? sortFields(SPAN_CONTEXT_FILTER_FIELD_IDS) : []),\n ...(withModelFields ? SPAN_MODEL_FILTER_FIELD_IDS.map(field) : []),\n ...(withOutcomeFields ? createOutcomeFilterBarFields(spanFieldBase, valueSuggestions) : []),\n ];\n}\n\nfunction tokenToSpanQueryPredicate(\n token: TraceFilterToken,\n allowedFieldIds: ReadonlySet<string>,\n): TraceQueryScalarPredicate | undefined {\n const { fieldId } = token;\n if (!allowedFieldIds.has(fieldId)) return undefined;\n const operatorId = token.operatorId ?? 'is';\n const isPresence = operatorId === 'exists' || operatorId === 'notExists';\n if (PRESENCE_ONLY_FIELD_IDS.has(fieldId) && !isPresence) return undefined;\n\n const rawValues = (Array.isArray(token.value) ? token.value : [token.value]).filter(\n (value): value is string =>\n typeof value === 'string' && Boolean(value.trim()) && !isLegacyAnyValue(value, operatorId),\n );\n if (!rawValues.length && !isPresence) return undefined;\n\n let values: (string | number)[] = rawValues;\n if (NUMBER_FIELD_IDS.has(fieldId)) {\n values = rawValues.map(Number).filter(value => !Number.isNaN(value));\n if (!values.length && !isPresence) return undefined;\n }\n if (operatorId === 'matches' || operatorId === 'notMatches') {\n // The query rejects a text literal with no letters or digits.\n values = values.filter(value => /[\\p{L}\\p{M}\\p{N}]/u.test(String(value)));\n if (!values.length) return undefined;\n }\n\n const predicate = scalarPredicate(operatorId, fieldId, values);\n if (!predicate) return undefined;\n if ((operatorId === 'isNot' || operatorId === 'notIn') && !REQUIRED_FIELD_IDS.has(fieldId)) {\n return { op: 'or', args: [predicate, { op: 'notExists', path: fieldId }] };\n }\n return predicate;\n}\n\nfunction groupToSpanQueryPredicate(\n group: TraceFilterGroup,\n allowedFieldIds: ReadonlySet<string>,\n): TraceQueryScalarPredicate | undefined {\n const args = group.nodes\n .map(node =>\n isTraceFilterGroup(node)\n ? groupToSpanQueryPredicate(node, allowedFieldIds)\n : tokenToSpanQueryPredicate(node, allowedFieldIds),\n )\n .filter((predicate): predicate is TraceQueryScalarPredicate => Boolean(predicate));\n if (args.length === 0) return undefined;\n return args.length === 1 ? args[0] : { op: group.logic, args };\n}\n\n/**\n * The span query `where` for the filter bar's tokens and groups, or `undefined` when nothing applies.\n * Conditions the span query can't run (unknown fields, context, model or outcome fields or streaming timings without\n * the capability, unusable values) are left out instead of failing the request.\n */\nexport function buildSpanQueryWhere(\n tokens: TraceFilterToken[],\n groups: TraceFilterGroup[],\n {\n withContextFields,\n withOutcomeFields = false,\n withModelFields = false,\n ...support\n }: StreamingTimingSupport & { withContextFields: boolean; withOutcomeFields?: boolean; withModelFields?: boolean },\n): TraceQueryScalarPredicate | undefined {\n const allowedFieldIds = withoutUnrecordedStreamingTimings(\n new Set([\n ...SPAN_CORE_FILTER_FIELD_IDS,\n ...(withContextFields ? SPAN_CONTEXT_FILTER_FIELD_IDS : []),\n ...(withOutcomeFields ? SPAN_OUTCOME_FILTER_FIELD_IDS : []),\n ...(withModelFields ? SPAN_MODEL_FILTER_FIELD_IDS : []),\n ]),\n support,\n );\n const args = [\n ...tokens.map(token => tokenToSpanQueryPredicate(token, allowedFieldIds)),\n ...groups.map(group => groupToSpanQueryPredicate(group, allowedFieldIds)),\n ].filter((predicate): predicate is TraceQueryScalarPredicate => Boolean(predicate));\n return args.length ? { op: 'and', args } : undefined;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"span-filters.cjs.js","names":["TRACE_FILTER_BAR_LABELS","traceFilterFieldIcon","traceFilterFieldColor","ROOT_ENTITY_TYPE_OPTIONS","SpanType","EntityType","TRACE_STATUS_OPTIONS","TRACE_STRING_OPERATORS","TRACE_SYNTHETIC_OPERATORS","TRACE_REQUIRED_STRING_OPERATORS","TRACE_TEXT_OPERATORS","TRACE_PRESENCE_OPERATORS","TRACE_NUMBER_OPERATORS","withoutUnrecordedStreamingTimings","createOutcomeFilterBarFields","isLegacyAnyValue","scalarPredicate","isTraceFilterGroup"],"sources":["../../../src/domains/spans/span-filters.ts"],"sourcesContent":["import { EntityType, SpanType } from '@mastra/core/observability';\nimport type { TraceQueryScalarPredicate } from '@mastra/core/storage';\nimport {\n isLegacyAnyValue,\n ROOT_ENTITY_TYPE_OPTIONS,\n TRACE_FILTER_BAR_LABELS,\n TRACE_NUMBER_OPERATORS,\n TRACE_PRESENCE_OPERATORS,\n TRACE_REQUIRED_STRING_OPERATORS,\n TRACE_STATUS_OPTIONS,\n TRACE_STRING_OPERATORS,\n TRACE_SYNTHETIC_OPERATORS,\n TRACE_TEXT_OPERATORS,\n createOutcomeFilterBarFields,\n traceFilterFieldColor,\n traceFilterFieldIcon,\n withoutUnrecordedStreamingTimings,\n} from '../traces/trace-filters';\nimport type { StreamingTimingSupport } from '../traces/trace-filters';\nimport { isTraceFilterGroup, scalarPredicate } from '../traces/trace-query-filters';\nimport type { TraceFilterGroup, TraceFilterOperatorId, TraceFilterToken } from '../traces/trace-query-filters';\nimport type { FilterBarField, FilterBarOption, FilterBarSuggestionsResolver } from '@/ds/components/FilterBar/types';\n\n/** Span query fields every store accepts. `startedAt`/`endedAt` are left to the time range. */\nexport const SPAN_CORE_FILTER_FIELD_IDS = [\n 'name',\n 'spanType',\n 'status',\n 'error',\n 'durationMs',\n 'timeToFirstChunkMs',\n 'timeToFirstTokenMs',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityVersionId',\n 'rootEntityVersionId',\n 'runId',\n 'sessionId',\n 'userId',\n 'organizationId',\n] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryContextFields`. */\nexport const SPAN_CONTEXT_FILTER_FIELD_IDS = [\n 'traceId',\n 'spanId',\n 'parentSpanId',\n 'threadId',\n 'resourceId',\n 'requestId',\n 'serviceName',\n 'experimentId',\n 'environment',\n 'executionSource',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryOutcomeFields`. */\nexport const SPAN_OUTCOME_FILTER_FIELD_IDS = ['outcome', 'stopReason'] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryModelFields`. */\nexport const SPAN_MODEL_FILTER_FIELD_IDS = ['model', 'provider'] as const;\n\nconst NUMBER_FIELD_IDS: ReadonlySet<string> = new Set(['durationMs', 'timeToFirstChunkMs', 'timeToFirstTokenMs']);\n/** The query can only test `error` for presence; any other operator is rejected. */\nconst PRESENCE_ONLY_FIELD_IDS: ReadonlySet<string> = new Set(['error']);\n/** Fields every span carries. On any other field, \"is not X\" must also keep spans where it is missing. */\nconst REQUIRED_FIELD_IDS: ReadonlySet<string> = new Set([\n 'name',\n 'spanType',\n 'status',\n 'traceId',\n 'spanId',\n 'durationMs',\n]);\n\nconst SPAN_FILTER_BAR_LABELS: Record<string, string> = {\n ...TRACE_FILTER_BAR_LABELS,\n name: 'Span name',\n spanType: 'Span type',\n spanId: 'Span ID',\n parentSpanId: 'Parent span ID',\n error: 'Error',\n timeToFirstChunkMs: 'Time to first chunk (ms)',\n timeToFirstTokenMs: 'Time to first token (ms)',\n executionSource: 'Execution source',\n entityType: 'Primitive type',\n entityVersionId: 'Primitive version ID',\n parentEntityType: 'Parent primitive type',\n parentEntityId: 'Parent primitive ID',\n parentEntityName: 'Parent primitive name',\n parentEntityVersionId: 'Parent primitive version ID',\n rootEntityType: 'Root primitive type',\n rootEntityId: 'Root primitive ID',\n rootEntityName: 'Root primitive name',\n rootEntityVersionId: 'Root primitive version ID',\n model: 'Model',\n provider: 'Provider',\n};\n\n/** Span fields without their own trace icon borrow the icon of the closest trace field. */\nconst SPAN_ICON_FIELD_ALIASES: Record<string, string> = {\n name: 'spans.name',\n spanType: 'spans.spanType',\n error: 'spans.error',\n timeToFirstChunkMs: 'durationMs',\n timeToFirstTokenMs: 'durationMs',\n spanId: 'traceId',\n parentSpanId: 'traceId',\n executionSource: 'runId',\n entityType: 'rootEntityType',\n parentEntityType: 'rootEntityType',\n entityVersionId: 'entityId',\n parentEntityId: 'entityId',\n parentEntityVersionId: 'entityId',\n rootEntityId: 'entityId',\n rootEntityVersionId: 'entityId',\n parentEntityName: 'entityName',\n rootEntityName: 'entityName',\n model: 'spans.model',\n provider: 'spans.provider',\n};\n\nconst spanFieldBase = (id: string) => ({\n id,\n label: SPAN_FILTER_BAR_LABELS[id] ?? id,\n icon: traceFilterFieldIcon(SPAN_ICON_FIELD_ALIASES[id] ?? id),\n color: traceFilterFieldColor(id),\n});\n\nconst humanize = (value: string) => {\n const words = value.replace(/_/g, ' ');\n return words.charAt(0).toUpperCase() + words.slice(1);\n};\n\nconst byLabel = (a: { label?: string; value: string }, b: { label?: string; value: string }) =>\n (a.label ?? a.value).localeCompare(b.label ?? b.value);\n\nconst ENTITY_TYPE_LABELS: Record<string, string> = Object.fromEntries(\n ROOT_ENTITY_TYPE_OPTIONS.map(option => [option.entityType, option.label]),\n);\n\nconst SPAN_TYPE_OPTIONS: FilterBarOption[] = Object.values(SpanType)\n .map(value => ({ value, label: humanize(value) }))\n .sort(byLabel);\n\nconst ENTITY_TYPE_OPTIONS: FilterBarOption[] = Object.values(EntityType)\n .map(value => ({ value, label: ENTITY_TYPE_LABELS[value] ?? humanize(value) }))\n .sort(byLabel);\n\nconst STATUS_OPTIONS: FilterBarOption[] = TRACE_STATUS_OPTIONS.filter(option => option.value !== 'running').map(\n option => ({ value: option.value, label: option.label }),\n);\n\n/** FilterBar fields for the spans page: only paths and operators `querySpans()` accepts. */\nexport function createSpanFilterBarFields({\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields = false,\n withModelFields = false,\n entityNames,\n environments,\n valueSuggestions,\n}: StreamingTimingSupport & {\n /** Offer the context fields. Only when the server declares `spanQueryContextFields`. */\n withContextFields: boolean;\n /** Offer `outcome` and `stopReason`. Only when the server declares `spanQueryOutcomeFields`. */\n withOutcomeFields?: boolean;\n /** Offer `model` and `provider`. Only when the server declares `spanQueryModelFields`. */\n withModelFields?: boolean;\n entityNames: readonly string[];\n environments: readonly string[];\n /** Builds a lazy value resolver for a span field. Absent → free text. */\n valueSuggestions?: (path: string) => FilterBarSuggestionsResolver;\n}): FilterBarField[] {\n const pick = (\n id: string,\n suggestions: FilterBarOption[],\n operators: TraceFilterOperatorId[] = TRACE_STRING_OPERATORS,\n ): FilterBarField => ({ ...spanFieldBase(id), operators, strict: true, suggestions });\n const names = entityNames.map(value => ({ value }));\n\n const field = (id: string): FilterBarField => {\n switch (id) {\n case 'status':\n return pick(id, STATUS_OPTIONS, TRACE_SYNTHETIC_OPERATORS);\n case 'spanType':\n return pick(id, SPAN_TYPE_OPTIONS, TRACE_REQUIRED_STRING_OPERATORS);\n case 'entityType':\n case 'parentEntityType':\n case 'rootEntityType':\n return pick(id, ENTITY_TYPE_OPTIONS);\n case 'entityName':\n case 'rootEntityName':\n return pick(id, names);\n case 'environment':\n return pick(\n id,\n environments.map(value => ({ value })),\n );\n case 'name': {\n const resolver = valueSuggestions?.(id);\n return {\n ...spanFieldBase(id),\n operators: TRACE_TEXT_OPERATORS,\n ...(resolver ? { strict: true, suggestions: resolver } : {}),\n };\n }\n case 'error':\n return { ...spanFieldBase(id), operators: TRACE_PRESENCE_OPERATORS };\n case 'durationMs':\n case 'timeToFirstChunkMs':\n case 'timeToFirstTokenMs':\n return { ...spanFieldBase(id), type: 'number', operators: TRACE_NUMBER_OPERATORS };\n case 'traceId':\n case 'spanId':\n return { ...spanFieldBase(id), operators: TRACE_REQUIRED_STRING_OPERATORS };\n case 'model':\n case 'provider': {\n const resolver = valueSuggestions?.(id);\n return {\n ...spanFieldBase(id),\n operators: TRACE_STRING_OPERATORS,\n ...(resolver ? { suggestions: resolver } : {}),\n };\n }\n default:\n return { ...spanFieldBase(id), operators: TRACE_STRING_OPERATORS };\n }\n };\n\n const offered = withoutUnrecordedStreamingTimings(\n new Set([...SPAN_CORE_FILTER_FIELD_IDS, ...SPAN_CONTEXT_FILTER_FIELD_IDS]),\n {\n withTimeToFirstChunk,\n withTimeToFirstToken,\n },\n );\n const sortFields = (ids: readonly string[]) =>\n ids\n .filter(id => offered.has(id))\n .map(field)\n .sort((a, b) => a.label.localeCompare(b.label));\n return [\n ...sortFields(SPAN_CORE_FILTER_FIELD_IDS),\n ...(withContextFields ? sortFields(SPAN_CONTEXT_FILTER_FIELD_IDS) : []),\n ...(withModelFields ? SPAN_MODEL_FILTER_FIELD_IDS.map(field) : []),\n ...(withOutcomeFields ? createOutcomeFilterBarFields(spanFieldBase, valueSuggestions) : []),\n ];\n}\n\nfunction tokenToSpanQueryPredicate(\n token: TraceFilterToken,\n allowedFieldIds: ReadonlySet<string>,\n): TraceQueryScalarPredicate | undefined {\n const { fieldId } = token;\n if (!allowedFieldIds.has(fieldId)) return undefined;\n const operatorId = token.operatorId ?? 'is';\n const isPresence = operatorId === 'exists' || operatorId === 'notExists';\n if (PRESENCE_ONLY_FIELD_IDS.has(fieldId) && !isPresence) return undefined;\n\n const rawValues = (Array.isArray(token.value) ? token.value : [token.value]).filter(\n (value): value is string =>\n typeof value === 'string' && Boolean(value.trim()) && !isLegacyAnyValue(value, operatorId),\n );\n if (!rawValues.length && !isPresence) return undefined;\n\n let values: (string | number)[] = rawValues;\n if (NUMBER_FIELD_IDS.has(fieldId)) {\n values = rawValues.map(Number).filter(value => !Number.isNaN(value));\n if (!values.length && !isPresence) return undefined;\n }\n if (operatorId === 'matches' || operatorId === 'notMatches') {\n // The query rejects a text literal with no letters or digits.\n values = values.filter(value => /[\\p{L}\\p{M}\\p{N}]/u.test(String(value)));\n if (!values.length) return undefined;\n }\n\n const predicate = scalarPredicate(operatorId, fieldId, values);\n if (!predicate) return undefined;\n if ((operatorId === 'isNot' || operatorId === 'notIn') && !REQUIRED_FIELD_IDS.has(fieldId)) {\n return { op: 'or', args: [predicate, { op: 'notExists', path: fieldId }] };\n }\n return predicate;\n}\n\nfunction groupToSpanQueryPredicate(\n group: TraceFilterGroup,\n allowedFieldIds: ReadonlySet<string>,\n): TraceQueryScalarPredicate | undefined {\n const args = group.nodes\n .map(node =>\n isTraceFilterGroup(node)\n ? groupToSpanQueryPredicate(node, allowedFieldIds)\n : tokenToSpanQueryPredicate(node, allowedFieldIds),\n )\n .filter((predicate): predicate is TraceQueryScalarPredicate => Boolean(predicate));\n if (args.length === 0) return undefined;\n return args.length === 1 ? args[0] : { op: group.logic, args };\n}\n\n/**\n * The span query `where` for the filter bar's tokens and groups, or `undefined` when nothing applies.\n * Conditions the span query can't run (unknown fields, context, model or outcome fields or streaming timings without\n * the capability, unusable values) are left out instead of failing the request.\n */\nexport function buildSpanQueryWhere(\n tokens: TraceFilterToken[],\n groups: TraceFilterGroup[],\n {\n withContextFields,\n withOutcomeFields = false,\n withModelFields = false,\n ...support\n }: StreamingTimingSupport & { withContextFields: boolean; withOutcomeFields?: boolean; withModelFields?: boolean },\n): TraceQueryScalarPredicate | undefined {\n const allowedFieldIds = withoutUnrecordedStreamingTimings(\n new Set([\n ...SPAN_CORE_FILTER_FIELD_IDS,\n ...(withContextFields ? SPAN_CONTEXT_FILTER_FIELD_IDS : []),\n ...(withOutcomeFields ? SPAN_OUTCOME_FILTER_FIELD_IDS : []),\n ...(withModelFields ? SPAN_MODEL_FILTER_FIELD_IDS : []),\n ]),\n support,\n );\n const args = [\n ...tokens.map(token => tokenToSpanQueryPredicate(token, allowedFieldIds)),\n ...groups.map(group => groupToSpanQueryPredicate(group, allowedFieldIds)),\n ].filter((predicate): predicate is TraceQueryScalarPredicate => Boolean(predicate));\n return args.length ? { op: 'and', args } : undefined;\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { D as TRACE_STRING_OPERATORS, F as createOutcomeFilterBarFields, Q as traceFilterFieldIcon, S as TRACE_REQUIRED_STRING_OPERATORS, U as isLegacyAnyValue, Z as traceFilterFieldColor, it as withoutUnrecordedStreamingTimings, j as TRACE_TEXT_OPERATORS, k as TRACE_SYNTHETIC_OPERATORS, l as TRACE_FILTER_BAR_LABELS, pt as scalarPredicate, r as ROOT_ENTITY_TYPE_OPTIONS, ut as isTraceFilterGroup, v as TRACE_NUMBER_OPERATORS, w as TRACE_STATUS_OPTIONS, y as TRACE_PRESENCE_OPERATORS } from "../../trace-filters-BJaebsxJ.js";
1
+ import { D as TRACE_STRING_OPERATORS, F as createOutcomeFilterBarFields, Q as traceFilterFieldIcon, S as TRACE_REQUIRED_STRING_OPERATORS, U as isLegacyAnyValue, Z as traceFilterFieldColor, it as withoutUnrecordedStreamingTimings, j as TRACE_TEXT_OPERATORS, k as TRACE_SYNTHETIC_OPERATORS, l as TRACE_FILTER_BAR_LABELS, pt as scalarPredicate, r as ROOT_ENTITY_TYPE_OPTIONS, ut as isTraceFilterGroup, v as TRACE_NUMBER_OPERATORS, w as TRACE_STATUS_OPTIONS, y as TRACE_PRESENCE_OPERATORS } from "../../trace-filters-CaWkw779.js";
2
2
  import { EntityType, SpanType } from "@mastra/core/observability";
3
3
  // src/domains/spans/span-filters.ts
4
- /** Span query fields every store accepts. `startedAt`/`endedAt` are left to the time-range chip. */
4
+ /** Span query fields every store accepts. `startedAt`/`endedAt` are left to the time range. */
5
5
  var SPAN_CORE_FILTER_FIELD_IDS = [
6
6
  "name",
7
7
  "spanType",
@@ -1 +1 @@
1
- {"version":3,"file":"span-filters.es.js","names":[],"sources":["../../../src/domains/spans/span-filters.ts"],"sourcesContent":["import { EntityType, SpanType } from '@mastra/core/observability';\nimport type { TraceQueryScalarPredicate } from '@mastra/core/storage';\nimport {\n isLegacyAnyValue,\n ROOT_ENTITY_TYPE_OPTIONS,\n TRACE_FILTER_BAR_LABELS,\n TRACE_NUMBER_OPERATORS,\n TRACE_PRESENCE_OPERATORS,\n TRACE_REQUIRED_STRING_OPERATORS,\n TRACE_STATUS_OPTIONS,\n TRACE_STRING_OPERATORS,\n TRACE_SYNTHETIC_OPERATORS,\n TRACE_TEXT_OPERATORS,\n createOutcomeFilterBarFields,\n traceFilterFieldColor,\n traceFilterFieldIcon,\n withoutUnrecordedStreamingTimings,\n} from '../traces/trace-filters';\nimport type { StreamingTimingSupport } from '../traces/trace-filters';\nimport { isTraceFilterGroup, scalarPredicate } from '../traces/trace-query-filters';\nimport type { TraceFilterGroup, TraceFilterOperatorId, TraceFilterToken } from '../traces/trace-query-filters';\nimport type { FilterBarField, FilterBarOption, FilterBarSuggestionsResolver } from '@/ds/components/FilterBar/types';\n\n/** Span query fields every store accepts. `startedAt`/`endedAt` are left to the time-range chip. */\nexport const SPAN_CORE_FILTER_FIELD_IDS = [\n 'name',\n 'spanType',\n 'status',\n 'error',\n 'durationMs',\n 'timeToFirstChunkMs',\n 'timeToFirstTokenMs',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityVersionId',\n 'rootEntityVersionId',\n 'runId',\n 'sessionId',\n 'userId',\n 'organizationId',\n] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryContextFields`. */\nexport const SPAN_CONTEXT_FILTER_FIELD_IDS = [\n 'traceId',\n 'spanId',\n 'parentSpanId',\n 'threadId',\n 'resourceId',\n 'requestId',\n 'serviceName',\n 'experimentId',\n 'environment',\n 'executionSource',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryOutcomeFields`. */\nexport const SPAN_OUTCOME_FILTER_FIELD_IDS = ['outcome', 'stopReason'] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryModelFields`. */\nexport const SPAN_MODEL_FILTER_FIELD_IDS = ['model', 'provider'] as const;\n\nconst NUMBER_FIELD_IDS: ReadonlySet<string> = new Set(['durationMs', 'timeToFirstChunkMs', 'timeToFirstTokenMs']);\n/** The query can only test `error` for presence; any other operator is rejected. */\nconst PRESENCE_ONLY_FIELD_IDS: ReadonlySet<string> = new Set(['error']);\n/** Fields every span carries. On any other field, \"is not X\" must also keep spans where it is missing. */\nconst REQUIRED_FIELD_IDS: ReadonlySet<string> = new Set([\n 'name',\n 'spanType',\n 'status',\n 'traceId',\n 'spanId',\n 'durationMs',\n]);\n\nconst SPAN_FILTER_BAR_LABELS: Record<string, string> = {\n ...TRACE_FILTER_BAR_LABELS,\n name: 'Span name',\n spanType: 'Span type',\n spanId: 'Span ID',\n parentSpanId: 'Parent span ID',\n error: 'Error',\n timeToFirstChunkMs: 'Time to first chunk (ms)',\n timeToFirstTokenMs: 'Time to first token (ms)',\n executionSource: 'Execution source',\n entityType: 'Primitive type',\n entityVersionId: 'Primitive version ID',\n parentEntityType: 'Parent primitive type',\n parentEntityId: 'Parent primitive ID',\n parentEntityName: 'Parent primitive name',\n parentEntityVersionId: 'Parent primitive version ID',\n rootEntityType: 'Root primitive type',\n rootEntityId: 'Root primitive ID',\n rootEntityName: 'Root primitive name',\n rootEntityVersionId: 'Root primitive version ID',\n model: 'Model',\n provider: 'Provider',\n};\n\n/** Span fields without their own trace icon borrow the icon of the closest trace field. */\nconst SPAN_ICON_FIELD_ALIASES: Record<string, string> = {\n name: 'spans.name',\n spanType: 'spans.spanType',\n error: 'spans.error',\n timeToFirstChunkMs: 'durationMs',\n timeToFirstTokenMs: 'durationMs',\n spanId: 'traceId',\n parentSpanId: 'traceId',\n executionSource: 'runId',\n entityType: 'rootEntityType',\n parentEntityType: 'rootEntityType',\n entityVersionId: 'entityId',\n parentEntityId: 'entityId',\n parentEntityVersionId: 'entityId',\n rootEntityId: 'entityId',\n rootEntityVersionId: 'entityId',\n parentEntityName: 'entityName',\n rootEntityName: 'entityName',\n model: 'spans.model',\n provider: 'spans.provider',\n};\n\nconst spanFieldBase = (id: string) => ({\n id,\n label: SPAN_FILTER_BAR_LABELS[id] ?? id,\n icon: traceFilterFieldIcon(SPAN_ICON_FIELD_ALIASES[id] ?? id),\n color: traceFilterFieldColor(id),\n});\n\nconst humanize = (value: string) => {\n const words = value.replace(/_/g, ' ');\n return words.charAt(0).toUpperCase() + words.slice(1);\n};\n\nconst byLabel = (a: { label?: string; value: string }, b: { label?: string; value: string }) =>\n (a.label ?? a.value).localeCompare(b.label ?? b.value);\n\nconst ENTITY_TYPE_LABELS: Record<string, string> = Object.fromEntries(\n ROOT_ENTITY_TYPE_OPTIONS.map(option => [option.entityType, option.label]),\n);\n\nconst SPAN_TYPE_OPTIONS: FilterBarOption[] = Object.values(SpanType)\n .map(value => ({ value, label: humanize(value) }))\n .sort(byLabel);\n\nconst ENTITY_TYPE_OPTIONS: FilterBarOption[] = Object.values(EntityType)\n .map(value => ({ value, label: ENTITY_TYPE_LABELS[value] ?? humanize(value) }))\n .sort(byLabel);\n\nconst STATUS_OPTIONS: FilterBarOption[] = TRACE_STATUS_OPTIONS.filter(option => option.value !== 'running').map(\n option => ({ value: option.value, label: option.label }),\n);\n\n/** FilterBar fields for the spans page: only paths and operators `querySpans()` accepts. */\nexport function createSpanFilterBarFields({\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields = false,\n withModelFields = false,\n entityNames,\n environments,\n valueSuggestions,\n}: StreamingTimingSupport & {\n /** Offer the context fields. Only when the server declares `spanQueryContextFields`. */\n withContextFields: boolean;\n /** Offer `outcome` and `stopReason`. Only when the server declares `spanQueryOutcomeFields`. */\n withOutcomeFields?: boolean;\n /** Offer `model` and `provider`. Only when the server declares `spanQueryModelFields`. */\n withModelFields?: boolean;\n entityNames: readonly string[];\n environments: readonly string[];\n /** Builds a lazy value resolver for a span field. Absent → free text. */\n valueSuggestions?: (path: string) => FilterBarSuggestionsResolver;\n}): FilterBarField[] {\n const pick = (\n id: string,\n suggestions: FilterBarOption[],\n operators: TraceFilterOperatorId[] = TRACE_STRING_OPERATORS,\n ): FilterBarField => ({ ...spanFieldBase(id), operators, strict: true, suggestions });\n const names = entityNames.map(value => ({ value }));\n\n const field = (id: string): FilterBarField => {\n switch (id) {\n case 'status':\n return pick(id, STATUS_OPTIONS, TRACE_SYNTHETIC_OPERATORS);\n case 'spanType':\n return pick(id, SPAN_TYPE_OPTIONS, TRACE_REQUIRED_STRING_OPERATORS);\n case 'entityType':\n case 'parentEntityType':\n case 'rootEntityType':\n return pick(id, ENTITY_TYPE_OPTIONS);\n case 'entityName':\n case 'rootEntityName':\n return pick(id, names);\n case 'environment':\n return pick(\n id,\n environments.map(value => ({ value })),\n );\n case 'name': {\n const resolver = valueSuggestions?.(id);\n return {\n ...spanFieldBase(id),\n operators: TRACE_TEXT_OPERATORS,\n ...(resolver ? { strict: true, suggestions: resolver } : {}),\n };\n }\n case 'error':\n return { ...spanFieldBase(id), operators: TRACE_PRESENCE_OPERATORS };\n case 'durationMs':\n case 'timeToFirstChunkMs':\n case 'timeToFirstTokenMs':\n return { ...spanFieldBase(id), type: 'number', operators: TRACE_NUMBER_OPERATORS };\n case 'traceId':\n case 'spanId':\n return { ...spanFieldBase(id), operators: TRACE_REQUIRED_STRING_OPERATORS };\n case 'model':\n case 'provider': {\n const resolver = valueSuggestions?.(id);\n return {\n ...spanFieldBase(id),\n operators: TRACE_STRING_OPERATORS,\n ...(resolver ? { suggestions: resolver } : {}),\n };\n }\n default:\n return { ...spanFieldBase(id), operators: TRACE_STRING_OPERATORS };\n }\n };\n\n const offered = withoutUnrecordedStreamingTimings(\n new Set([...SPAN_CORE_FILTER_FIELD_IDS, ...SPAN_CONTEXT_FILTER_FIELD_IDS]),\n {\n withTimeToFirstChunk,\n withTimeToFirstToken,\n },\n );\n const sortFields = (ids: readonly string[]) =>\n ids\n .filter(id => offered.has(id))\n .map(field)\n .sort((a, b) => a.label.localeCompare(b.label));\n return [\n ...sortFields(SPAN_CORE_FILTER_FIELD_IDS),\n ...(withContextFields ? sortFields(SPAN_CONTEXT_FILTER_FIELD_IDS) : []),\n ...(withModelFields ? SPAN_MODEL_FILTER_FIELD_IDS.map(field) : []),\n ...(withOutcomeFields ? createOutcomeFilterBarFields(spanFieldBase, valueSuggestions) : []),\n ];\n}\n\nfunction tokenToSpanQueryPredicate(\n token: TraceFilterToken,\n allowedFieldIds: ReadonlySet<string>,\n): TraceQueryScalarPredicate | undefined {\n const { fieldId } = token;\n if (!allowedFieldIds.has(fieldId)) return undefined;\n const operatorId = token.operatorId ?? 'is';\n const isPresence = operatorId === 'exists' || operatorId === 'notExists';\n if (PRESENCE_ONLY_FIELD_IDS.has(fieldId) && !isPresence) return undefined;\n\n const rawValues = (Array.isArray(token.value) ? token.value : [token.value]).filter(\n (value): value is string =>\n typeof value === 'string' && Boolean(value.trim()) && !isLegacyAnyValue(value, operatorId),\n );\n if (!rawValues.length && !isPresence) return undefined;\n\n let values: (string | number)[] = rawValues;\n if (NUMBER_FIELD_IDS.has(fieldId)) {\n values = rawValues.map(Number).filter(value => !Number.isNaN(value));\n if (!values.length && !isPresence) return undefined;\n }\n if (operatorId === 'matches' || operatorId === 'notMatches') {\n // The query rejects a text literal with no letters or digits.\n values = values.filter(value => /[\\p{L}\\p{M}\\p{N}]/u.test(String(value)));\n if (!values.length) return undefined;\n }\n\n const predicate = scalarPredicate(operatorId, fieldId, values);\n if (!predicate) return undefined;\n if ((operatorId === 'isNot' || operatorId === 'notIn') && !REQUIRED_FIELD_IDS.has(fieldId)) {\n return { op: 'or', args: [predicate, { op: 'notExists', path: fieldId }] };\n }\n return predicate;\n}\n\nfunction groupToSpanQueryPredicate(\n group: TraceFilterGroup,\n allowedFieldIds: ReadonlySet<string>,\n): TraceQueryScalarPredicate | undefined {\n const args = group.nodes\n .map(node =>\n isTraceFilterGroup(node)\n ? groupToSpanQueryPredicate(node, allowedFieldIds)\n : tokenToSpanQueryPredicate(node, allowedFieldIds),\n )\n .filter((predicate): predicate is TraceQueryScalarPredicate => Boolean(predicate));\n if (args.length === 0) return undefined;\n return args.length === 1 ? args[0] : { op: group.logic, args };\n}\n\n/**\n * The span query `where` for the filter bar's tokens and groups, or `undefined` when nothing applies.\n * Conditions the span query can't run (unknown fields, context, model or outcome fields or streaming timings without\n * the capability, unusable values) are left out instead of failing the request.\n */\nexport function buildSpanQueryWhere(\n tokens: TraceFilterToken[],\n groups: TraceFilterGroup[],\n {\n withContextFields,\n withOutcomeFields = false,\n withModelFields = false,\n ...support\n }: StreamingTimingSupport & { withContextFields: boolean; withOutcomeFields?: boolean; withModelFields?: boolean },\n): TraceQueryScalarPredicate | undefined {\n const allowedFieldIds = withoutUnrecordedStreamingTimings(\n new Set([\n ...SPAN_CORE_FILTER_FIELD_IDS,\n ...(withContextFields ? SPAN_CONTEXT_FILTER_FIELD_IDS : []),\n ...(withOutcomeFields ? SPAN_OUTCOME_FILTER_FIELD_IDS : []),\n ...(withModelFields ? SPAN_MODEL_FILTER_FIELD_IDS : []),\n ]),\n support,\n );\n const args = [\n ...tokens.map(token => tokenToSpanQueryPredicate(token, allowedFieldIds)),\n ...groups.map(group => groupToSpanQueryPredicate(group, allowedFieldIds)),\n ].filter((predicate): predicate is TraceQueryScalarPredicate => Boolean(predicate));\n return args.length ? { op: 'and', args } : undefined;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"span-filters.es.js","names":[],"sources":["../../../src/domains/spans/span-filters.ts"],"sourcesContent":["import { EntityType, SpanType } from '@mastra/core/observability';\nimport type { TraceQueryScalarPredicate } from '@mastra/core/storage';\nimport {\n isLegacyAnyValue,\n ROOT_ENTITY_TYPE_OPTIONS,\n TRACE_FILTER_BAR_LABELS,\n TRACE_NUMBER_OPERATORS,\n TRACE_PRESENCE_OPERATORS,\n TRACE_REQUIRED_STRING_OPERATORS,\n TRACE_STATUS_OPTIONS,\n TRACE_STRING_OPERATORS,\n TRACE_SYNTHETIC_OPERATORS,\n TRACE_TEXT_OPERATORS,\n createOutcomeFilterBarFields,\n traceFilterFieldColor,\n traceFilterFieldIcon,\n withoutUnrecordedStreamingTimings,\n} from '../traces/trace-filters';\nimport type { StreamingTimingSupport } from '../traces/trace-filters';\nimport { isTraceFilterGroup, scalarPredicate } from '../traces/trace-query-filters';\nimport type { TraceFilterGroup, TraceFilterOperatorId, TraceFilterToken } from '../traces/trace-query-filters';\nimport type { FilterBarField, FilterBarOption, FilterBarSuggestionsResolver } from '@/ds/components/FilterBar/types';\n\n/** Span query fields every store accepts. `startedAt`/`endedAt` are left to the time range. */\nexport const SPAN_CORE_FILTER_FIELD_IDS = [\n 'name',\n 'spanType',\n 'status',\n 'error',\n 'durationMs',\n 'timeToFirstChunkMs',\n 'timeToFirstTokenMs',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityVersionId',\n 'rootEntityVersionId',\n 'runId',\n 'sessionId',\n 'userId',\n 'organizationId',\n] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryContextFields`. */\nexport const SPAN_CONTEXT_FILTER_FIELD_IDS = [\n 'traceId',\n 'spanId',\n 'parentSpanId',\n 'threadId',\n 'resourceId',\n 'requestId',\n 'serviceName',\n 'experimentId',\n 'environment',\n 'executionSource',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryOutcomeFields`. */\nexport const SPAN_OUTCOME_FILTER_FIELD_IDS = ['outcome', 'stopReason'] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryModelFields`. */\nexport const SPAN_MODEL_FILTER_FIELD_IDS = ['model', 'provider'] as const;\n\nconst NUMBER_FIELD_IDS: ReadonlySet<string> = new Set(['durationMs', 'timeToFirstChunkMs', 'timeToFirstTokenMs']);\n/** The query can only test `error` for presence; any other operator is rejected. */\nconst PRESENCE_ONLY_FIELD_IDS: ReadonlySet<string> = new Set(['error']);\n/** Fields every span carries. On any other field, \"is not X\" must also keep spans where it is missing. */\nconst REQUIRED_FIELD_IDS: ReadonlySet<string> = new Set([\n 'name',\n 'spanType',\n 'status',\n 'traceId',\n 'spanId',\n 'durationMs',\n]);\n\nconst SPAN_FILTER_BAR_LABELS: Record<string, string> = {\n ...TRACE_FILTER_BAR_LABELS,\n name: 'Span name',\n spanType: 'Span type',\n spanId: 'Span ID',\n parentSpanId: 'Parent span ID',\n error: 'Error',\n timeToFirstChunkMs: 'Time to first chunk (ms)',\n timeToFirstTokenMs: 'Time to first token (ms)',\n executionSource: 'Execution source',\n entityType: 'Primitive type',\n entityVersionId: 'Primitive version ID',\n parentEntityType: 'Parent primitive type',\n parentEntityId: 'Parent primitive ID',\n parentEntityName: 'Parent primitive name',\n parentEntityVersionId: 'Parent primitive version ID',\n rootEntityType: 'Root primitive type',\n rootEntityId: 'Root primitive ID',\n rootEntityName: 'Root primitive name',\n rootEntityVersionId: 'Root primitive version ID',\n model: 'Model',\n provider: 'Provider',\n};\n\n/** Span fields without their own trace icon borrow the icon of the closest trace field. */\nconst SPAN_ICON_FIELD_ALIASES: Record<string, string> = {\n name: 'spans.name',\n spanType: 'spans.spanType',\n error: 'spans.error',\n timeToFirstChunkMs: 'durationMs',\n timeToFirstTokenMs: 'durationMs',\n spanId: 'traceId',\n parentSpanId: 'traceId',\n executionSource: 'runId',\n entityType: 'rootEntityType',\n parentEntityType: 'rootEntityType',\n entityVersionId: 'entityId',\n parentEntityId: 'entityId',\n parentEntityVersionId: 'entityId',\n rootEntityId: 'entityId',\n rootEntityVersionId: 'entityId',\n parentEntityName: 'entityName',\n rootEntityName: 'entityName',\n model: 'spans.model',\n provider: 'spans.provider',\n};\n\nconst spanFieldBase = (id: string) => ({\n id,\n label: SPAN_FILTER_BAR_LABELS[id] ?? id,\n icon: traceFilterFieldIcon(SPAN_ICON_FIELD_ALIASES[id] ?? id),\n color: traceFilterFieldColor(id),\n});\n\nconst humanize = (value: string) => {\n const words = value.replace(/_/g, ' ');\n return words.charAt(0).toUpperCase() + words.slice(1);\n};\n\nconst byLabel = (a: { label?: string; value: string }, b: { label?: string; value: string }) =>\n (a.label ?? a.value).localeCompare(b.label ?? b.value);\n\nconst ENTITY_TYPE_LABELS: Record<string, string> = Object.fromEntries(\n ROOT_ENTITY_TYPE_OPTIONS.map(option => [option.entityType, option.label]),\n);\n\nconst SPAN_TYPE_OPTIONS: FilterBarOption[] = Object.values(SpanType)\n .map(value => ({ value, label: humanize(value) }))\n .sort(byLabel);\n\nconst ENTITY_TYPE_OPTIONS: FilterBarOption[] = Object.values(EntityType)\n .map(value => ({ value, label: ENTITY_TYPE_LABELS[value] ?? humanize(value) }))\n .sort(byLabel);\n\nconst STATUS_OPTIONS: FilterBarOption[] = TRACE_STATUS_OPTIONS.filter(option => option.value !== 'running').map(\n option => ({ value: option.value, label: option.label }),\n);\n\n/** FilterBar fields for the spans page: only paths and operators `querySpans()` accepts. */\nexport function createSpanFilterBarFields({\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields = false,\n withModelFields = false,\n entityNames,\n environments,\n valueSuggestions,\n}: StreamingTimingSupport & {\n /** Offer the context fields. Only when the server declares `spanQueryContextFields`. */\n withContextFields: boolean;\n /** Offer `outcome` and `stopReason`. Only when the server declares `spanQueryOutcomeFields`. */\n withOutcomeFields?: boolean;\n /** Offer `model` and `provider`. Only when the server declares `spanQueryModelFields`. */\n withModelFields?: boolean;\n entityNames: readonly string[];\n environments: readonly string[];\n /** Builds a lazy value resolver for a span field. Absent → free text. */\n valueSuggestions?: (path: string) => FilterBarSuggestionsResolver;\n}): FilterBarField[] {\n const pick = (\n id: string,\n suggestions: FilterBarOption[],\n operators: TraceFilterOperatorId[] = TRACE_STRING_OPERATORS,\n ): FilterBarField => ({ ...spanFieldBase(id), operators, strict: true, suggestions });\n const names = entityNames.map(value => ({ value }));\n\n const field = (id: string): FilterBarField => {\n switch (id) {\n case 'status':\n return pick(id, STATUS_OPTIONS, TRACE_SYNTHETIC_OPERATORS);\n case 'spanType':\n return pick(id, SPAN_TYPE_OPTIONS, TRACE_REQUIRED_STRING_OPERATORS);\n case 'entityType':\n case 'parentEntityType':\n case 'rootEntityType':\n return pick(id, ENTITY_TYPE_OPTIONS);\n case 'entityName':\n case 'rootEntityName':\n return pick(id, names);\n case 'environment':\n return pick(\n id,\n environments.map(value => ({ value })),\n );\n case 'name': {\n const resolver = valueSuggestions?.(id);\n return {\n ...spanFieldBase(id),\n operators: TRACE_TEXT_OPERATORS,\n ...(resolver ? { strict: true, suggestions: resolver } : {}),\n };\n }\n case 'error':\n return { ...spanFieldBase(id), operators: TRACE_PRESENCE_OPERATORS };\n case 'durationMs':\n case 'timeToFirstChunkMs':\n case 'timeToFirstTokenMs':\n return { ...spanFieldBase(id), type: 'number', operators: TRACE_NUMBER_OPERATORS };\n case 'traceId':\n case 'spanId':\n return { ...spanFieldBase(id), operators: TRACE_REQUIRED_STRING_OPERATORS };\n case 'model':\n case 'provider': {\n const resolver = valueSuggestions?.(id);\n return {\n ...spanFieldBase(id),\n operators: TRACE_STRING_OPERATORS,\n ...(resolver ? { suggestions: resolver } : {}),\n };\n }\n default:\n return { ...spanFieldBase(id), operators: TRACE_STRING_OPERATORS };\n }\n };\n\n const offered = withoutUnrecordedStreamingTimings(\n new Set([...SPAN_CORE_FILTER_FIELD_IDS, ...SPAN_CONTEXT_FILTER_FIELD_IDS]),\n {\n withTimeToFirstChunk,\n withTimeToFirstToken,\n },\n );\n const sortFields = (ids: readonly string[]) =>\n ids\n .filter(id => offered.has(id))\n .map(field)\n .sort((a, b) => a.label.localeCompare(b.label));\n return [\n ...sortFields(SPAN_CORE_FILTER_FIELD_IDS),\n ...(withContextFields ? sortFields(SPAN_CONTEXT_FILTER_FIELD_IDS) : []),\n ...(withModelFields ? SPAN_MODEL_FILTER_FIELD_IDS.map(field) : []),\n ...(withOutcomeFields ? createOutcomeFilterBarFields(spanFieldBase, valueSuggestions) : []),\n ];\n}\n\nfunction tokenToSpanQueryPredicate(\n token: TraceFilterToken,\n allowedFieldIds: ReadonlySet<string>,\n): TraceQueryScalarPredicate | undefined {\n const { fieldId } = token;\n if (!allowedFieldIds.has(fieldId)) return undefined;\n const operatorId = token.operatorId ?? 'is';\n const isPresence = operatorId === 'exists' || operatorId === 'notExists';\n if (PRESENCE_ONLY_FIELD_IDS.has(fieldId) && !isPresence) return undefined;\n\n const rawValues = (Array.isArray(token.value) ? token.value : [token.value]).filter(\n (value): value is string =>\n typeof value === 'string' && Boolean(value.trim()) && !isLegacyAnyValue(value, operatorId),\n );\n if (!rawValues.length && !isPresence) return undefined;\n\n let values: (string | number)[] = rawValues;\n if (NUMBER_FIELD_IDS.has(fieldId)) {\n values = rawValues.map(Number).filter(value => !Number.isNaN(value));\n if (!values.length && !isPresence) return undefined;\n }\n if (operatorId === 'matches' || operatorId === 'notMatches') {\n // The query rejects a text literal with no letters or digits.\n values = values.filter(value => /[\\p{L}\\p{M}\\p{N}]/u.test(String(value)));\n if (!values.length) return undefined;\n }\n\n const predicate = scalarPredicate(operatorId, fieldId, values);\n if (!predicate) return undefined;\n if ((operatorId === 'isNot' || operatorId === 'notIn') && !REQUIRED_FIELD_IDS.has(fieldId)) {\n return { op: 'or', args: [predicate, { op: 'notExists', path: fieldId }] };\n }\n return predicate;\n}\n\nfunction groupToSpanQueryPredicate(\n group: TraceFilterGroup,\n allowedFieldIds: ReadonlySet<string>,\n): TraceQueryScalarPredicate | undefined {\n const args = group.nodes\n .map(node =>\n isTraceFilterGroup(node)\n ? groupToSpanQueryPredicate(node, allowedFieldIds)\n : tokenToSpanQueryPredicate(node, allowedFieldIds),\n )\n .filter((predicate): predicate is TraceQueryScalarPredicate => Boolean(predicate));\n if (args.length === 0) return undefined;\n return args.length === 1 ? args[0] : { op: group.logic, args };\n}\n\n/**\n * The span query `where` for the filter bar's tokens and groups, or `undefined` when nothing applies.\n * Conditions the span query can't run (unknown fields, context, model or outcome fields or streaming timings without\n * the capability, unusable values) are left out instead of failing the request.\n */\nexport function buildSpanQueryWhere(\n tokens: TraceFilterToken[],\n groups: TraceFilterGroup[],\n {\n withContextFields,\n withOutcomeFields = false,\n withModelFields = false,\n ...support\n }: StreamingTimingSupport & { withContextFields: boolean; withOutcomeFields?: boolean; withModelFields?: boolean },\n): TraceQueryScalarPredicate | undefined {\n const allowedFieldIds = withoutUnrecordedStreamingTimings(\n new Set([\n ...SPAN_CORE_FILTER_FIELD_IDS,\n ...(withContextFields ? SPAN_CONTEXT_FILTER_FIELD_IDS : []),\n ...(withOutcomeFields ? SPAN_OUTCOME_FILTER_FIELD_IDS : []),\n ...(withModelFields ? SPAN_MODEL_FILTER_FIELD_IDS : []),\n ]),\n support,\n );\n const args = [\n ...tokens.map(token => tokenToSpanQueryPredicate(token, allowedFieldIds)),\n ...groups.map(group => groupToSpanQueryPredicate(group, allowedFieldIds)),\n ].filter((predicate): predicate is TraceQueryScalarPredicate => Boolean(predicate));\n return args.length ? { op: 'and', args } : undefined;\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_domains_threads_thread_filters = require("../thread-filters.cjs.js");
3
3
  const require_domains_traces_trace_list_columns = require("../../traces/trace-list-columns.cjs.js");
4
- const require_observability_saved_views = require("../../../observability-saved-views-CwCii7hh.cjs");
4
+ const require_observability_saved_views = require("../../../observability-saved-views-BAzxxoAr.cjs");
5
5
  const require_domains_observability_components_observability_list_body = require("../../observability/components/observability-list-body.cjs.js");
6
6
  const require_domains_observability_hooks_use_observability_list_filters = require("../../observability/hooks/use-observability-list-filters.cjs.js");
7
7
  const require_domains_traces_components_columns_menu_columns_menu = require("../../traces/components/columns-menu/columns-menu.cjs.js");
@@ -9,7 +9,7 @@ const require_domains_traces_components_no_traces_info = require("../../traces/c
9
9
  const require_domains_traces_components_traces_error_content = require("../../traces/components/traces-error-content.cjs.js");
10
10
  const require_domains_traces_components_traces_list_view = require("../../traces/components/traces-list-view.cjs.js");
11
11
  const require_domains_traces_hooks_use_trace_column_preferences = require("../../traces/hooks/use-trace-column-preferences.cjs.js");
12
- const require_ActionRow = require("../../../ActionRow-BfK77pCT.cjs");
12
+ const require_ActionRow = require("../../../ActionRow-BlC9GAef.cjs");
13
13
  const require_domains_threads_hooks_use_threads_list_source = require("../hooks/use-threads-list-source.cjs.js");
14
14
  const require_domains_threads_thread_list_row = require("../thread-list-row.cjs.js");
15
15
  const require_domains_threads_components_threads_filter_bar = require("./threads-filter-bar.cjs.js");
@@ -78,11 +78,7 @@ function ThreadsExplorerBody({ selectedThreadId, onSelectedThreadChange, onOpenS
78
78
  page: "threads",
79
79
  ...urlState,
80
80
  columns
81
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_ActionRow.ActionRow, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_ActionRow.ActionRow.Start, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_traces_components_columns_menu_columns_menu.ColumnsMenu, {
82
- scope: "threads",
83
- value: columns.preferences,
84
- onChange: columns.setPreferences
85
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_threads_components_threads_filter_bar.ThreadsFilterBar, {
81
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_ActionRow.ActionRow, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_ActionRow.ActionRow.Start, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_threads_components_threads_filter_bar.ThreadsFilterBar, {
86
82
  datePreset: filters.datePreset,
87
83
  dateFrom: filters.dateFrom,
88
84
  dateTo: filters.dateTo,
@@ -93,7 +89,11 @@ function ThreadsExplorerBody({ selectedThreadId, onSelectedThreadChange, onOpenS
93
89
  onDateRangeChange: filters.onDateRangeChange,
94
90
  onFiltersChange: filters.onFiltersChange,
95
91
  disabled: isLoading
96
- })] }) })] }),
92
+ }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_ActionRow.ActionRow.End, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_traces_components_columns_menu_columns_menu.ColumnsMenu, {
93
+ scope: "threads",
94
+ value: columns.preferences,
95
+ onChange: columns.setPreferences
96
+ }) })] })] }),
97
97
  error: isError ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_traces_components_traces_error_content.TracesErrorContent, {
98
98
  error,
99
99
  resource: "threads",
@@ -1 +1 @@
1
- {"version":3,"file":"threads-explorer-body.cjs.js","names":["useObservabilityListFilters","useTraceQueryAvailable","useFeedbackAvailable","useTraceColumnPreferences","useObservabilityCapabilities","useMemo","withoutUnrecordedStreamingColumns","buildThreadQueryWhere","useThreadsListSource","threadToListRow","_Fragment","ObservabilityListBody","ObservabilitySavedViews","ActionRow","ColumnsMenu","ThreadsFilterBar","TracesErrorContent","NoTracesInfo","TracesListView","TraceThreadPanel"],"sources":["../../../../src/domains/threads/components/threads-explorer-body.tsx"],"sourcesContent":["import { useObservabilityCapabilities } from '@mastra/react/hooks/capabilities';\nimport type { ThreadQueryArgs } from '@mastra/react/hooks/traces';\nimport { useMemo } from 'react';\nimport { useThreadsListSource } from '../hooks/use-threads-list-source';\nimport { buildThreadQueryWhere } from '../thread-filters';\nimport { threadToListRow } from '../thread-list-row';\nimport { ThreadsFilterBar } from './threads-filter-bar';\nimport { useFeedbackAvailable, useTraceQueryAvailable } from '@/domains/capabilities';\nimport { ObservabilityListBody } from '@/domains/observability/components/observability-list-body';\nimport { useObservabilityListFilters } from '@/domains/observability/hooks/use-observability-list-filters';\nimport type { ObservabilityListUrlState } from '@/domains/observability/hooks/use-observability-list-filters';\nimport { ObservabilitySavedViews } from '@/domains/observability/saved-views';\nimport { ColumnsMenu } from '@/domains/traces/components/columns-menu';\nimport { NoTracesInfo } from '@/domains/traces/components/no-traces-info';\nimport { TraceThreadPanel } from '@/domains/traces/components/trace-thread-panel';\nimport { TracesErrorContent } from '@/domains/traces/components/traces-error-content';\nimport { TracesListView } from '@/domains/traces/components/traces-list-view';\nimport type { TracesListViewTrace } from '@/domains/traces/components/traces-list-view';\nimport { useTraceColumnPreferences } from '@/domains/traces/hooks/use-trace-column-preferences';\nimport { withoutUnrecordedStreamingColumns } from '@/domains/traces/trace-list-columns';\nimport { ActionRow } from '@/ds/components/ActionRow';\n\nexport type ThreadsExplorerBodyProps = {\n /** The open thread. The host keeps it (e.g. in the URL) so it survives a reload. */\n selectedThreadId: string | undefined;\n onSelectedThreadChange: (threadId: string | undefined) => void;\n /** Opens a score from the thread drawer; scores live on host routes. */\n onOpenScore: (traceId: string, scoreId: string) => void;\n /** The host's search params, so the time range, filters and sort survive a reload. Omitted: kept in memory. */\n urlState?: ObservabilityListUrlState;\n};\n\n/** The threads page body: filter bar, thread list and the thread drawer. Router-agnostic. */\nexport function ThreadsExplorerBody({\n selectedThreadId,\n onSelectedThreadChange,\n onOpenScore,\n urlState,\n}: ThreadsExplorerBodyProps) {\n const filters = useObservabilityListFilters(urlState);\n const { timeRange, tokens, groups, sort } = filters;\n const withQueryTrace = useTraceQueryAvailable().enabled;\n const withFeedback = useFeedbackAvailable().enabled;\n const columns = useTraceColumnPreferences({ scope: 'threads' });\n const { data: capabilities, isLoading: isCapabilitiesLoading } = useObservabilityCapabilities();\n const withTimeToFirstChunk = capabilities?.capabilities.traceQueryTimeToFirstChunk ?? false;\n const withTimeToFirstToken = capabilities?.capabilities.traceQueryTimeToFirstToken ?? false;\n\n // Stored columns the store can't fill stay saved but aren't drawn, so they come back on a store that can.\n const displayedColumns = useMemo(\n () =>\n isCapabilitiesLoading\n ? columns.preferences\n : withoutUnrecordedStreamingColumns(columns.preferences, { withTimeToFirstChunk, withTimeToFirstToken }),\n [columns.preferences, isCapabilitiesLoading, withTimeToFirstChunk, withTimeToFirstToken],\n );\n\n // Threads with trace activity in the window, like the traces list for the same chip.\n const query = useMemo<ThreadQueryArgs>(() => {\n const where = buildThreadQueryWhere(tokens, groups, { withTimeToFirstChunk, withTimeToFirstToken });\n return {\n timeRange: { traces: timeRange },\n orderBy: [{ field: 'startedAt', direction: sort.direction }],\n ...(where ? { where } : {}),\n };\n }, [timeRange, sort, tokens, groups, withTimeToFirstChunk, withTimeToFirstToken]);\n\n const { threads, hasNextPage, isFetchingNextPage, setEndOfListElement, isLoading, isError, error } =\n useThreadsListSource({ query, rolling: filters.rolling });\n\n const rows = useMemo(() => (threads ?? []).map(threadToListRow), [threads]);\n const selectedRow = rows.find(row => row.threadId === selectedThreadId);\n\n // The drawer is modal, so the list behind it cannot be clicked while a thread is open.\n const handleThreadClick = (row: TracesListViewTrace) => {\n if (row.threadId) onSelectedThreadChange(row.threadId);\n };\n\n // Same rule as /traces: an empty window without filters gets the full-page empty state.\n const showEmptyState =\n !isLoading && !isError && rows.length === 0 && !filters.contentFiltersApplied && !selectedThreadId;\n\n return (\n <>\n <h1 className=\"sr-only\">Threads</h1>\n <ObservabilityListBody\n toolbar={\n <>\n {urlState && <ObservabilitySavedViews page=\"threads\" {...urlState} columns={columns} />}\n <ActionRow>\n <ActionRow.Start>\n <ColumnsMenu scope=\"threads\" value={columns.preferences} onChange={columns.setPreferences} />\n <ThreadsFilterBar\n datePreset={filters.datePreset}\n dateFrom={filters.dateFrom}\n dateTo={filters.dateTo}\n tokens={tokens}\n groups={groups}\n onDatePresetChange={filters.onDatePresetChange}\n onDateChange={filters.onDateChange}\n onDateRangeChange={filters.onDateRangeChange}\n onFiltersChange={filters.onFiltersChange}\n disabled={isLoading}\n />\n </ActionRow.Start>\n </ActionRow>\n </>\n }\n error={\n isError ? (\n <TracesErrorContent error={error} resource=\"threads\" errorTitle=\"Failed to load threads\" />\n ) : undefined\n }\n empty={\n showEmptyState ? (\n <NoTracesInfo\n resource=\"threads\"\n datePreset={filters.datePreset}\n dateFrom={filters.dateFrom}\n dateTo={filters.dateTo}\n />\n ) : undefined\n }\n >\n <TracesListView\n listId=\"all-threads\"\n columnPreferences={displayedColumns}\n outcomeColumn={false}\n traces={rows}\n isLoading={isLoading}\n isFetchingNextPage={isFetchingNextPage}\n hasNextPage={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n filtersApplied={filters.filtersApplied}\n resource=\"threads\"\n sort={sort}\n onSortChange={next => filters.setSort({ field: 'startedAt', direction: next.direction })}\n featuredTraceId={selectedRow?.traceId}\n onTraceClick={handleThreadClick}\n />\n </ObservabilityListBody>\n <TraceThreadPanel\n open={!!selectedThreadId}\n threadId={selectedThreadId ?? ''}\n depth={1}\n closeLabel=\"Close\"\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n onOpenScore={onOpenScore}\n onClose={() => onSelectedThreadChange(undefined)}\n />\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"threads-explorer-body.cjs.js","names":["useObservabilityListFilters","useTraceQueryAvailable","useFeedbackAvailable","useTraceColumnPreferences","useObservabilityCapabilities","useMemo","withoutUnrecordedStreamingColumns","buildThreadQueryWhere","useThreadsListSource","threadToListRow","_Fragment","ObservabilityListBody","ObservabilitySavedViews","ActionRow","ThreadsFilterBar","ColumnsMenu","TracesErrorContent","NoTracesInfo","TracesListView","TraceThreadPanel"],"sources":["../../../../src/domains/threads/components/threads-explorer-body.tsx"],"sourcesContent":["import { useObservabilityCapabilities } from '@mastra/react/hooks/capabilities';\nimport type { ThreadQueryArgs } from '@mastra/react/hooks/traces';\nimport { useMemo } from 'react';\nimport { useThreadsListSource } from '../hooks/use-threads-list-source';\nimport { buildThreadQueryWhere } from '../thread-filters';\nimport { threadToListRow } from '../thread-list-row';\nimport { ThreadsFilterBar } from './threads-filter-bar';\nimport { useFeedbackAvailable, useTraceQueryAvailable } from '@/domains/capabilities';\nimport { ObservabilityListBody } from '@/domains/observability/components/observability-list-body';\nimport { useObservabilityListFilters } from '@/domains/observability/hooks/use-observability-list-filters';\nimport type { ObservabilityListUrlState } from '@/domains/observability/hooks/use-observability-list-filters';\nimport { ObservabilitySavedViews } from '@/domains/observability/saved-views';\nimport { ColumnsMenu } from '@/domains/traces/components/columns-menu';\nimport { NoTracesInfo } from '@/domains/traces/components/no-traces-info';\nimport { TraceThreadPanel } from '@/domains/traces/components/trace-thread-panel';\nimport { TracesErrorContent } from '@/domains/traces/components/traces-error-content';\nimport { TracesListView } from '@/domains/traces/components/traces-list-view';\nimport type { TracesListViewTrace } from '@/domains/traces/components/traces-list-view';\nimport { useTraceColumnPreferences } from '@/domains/traces/hooks/use-trace-column-preferences';\nimport { withoutUnrecordedStreamingColumns } from '@/domains/traces/trace-list-columns';\nimport { ActionRow } from '@/ds/components/ActionRow';\n\nexport type ThreadsExplorerBodyProps = {\n /** The open thread. The host keeps it (e.g. in the URL) so it survives a reload. */\n selectedThreadId: string | undefined;\n onSelectedThreadChange: (threadId: string | undefined) => void;\n /** Opens a score from the thread drawer; scores live on host routes. */\n onOpenScore: (traceId: string, scoreId: string) => void;\n /** The host's search params, so the time range, filters and sort survive a reload. Omitted: kept in memory. */\n urlState?: ObservabilityListUrlState;\n};\n\n/** The threads page body: filter bar, thread list and the thread drawer. Router-agnostic. */\nexport function ThreadsExplorerBody({\n selectedThreadId,\n onSelectedThreadChange,\n onOpenScore,\n urlState,\n}: ThreadsExplorerBodyProps) {\n const filters = useObservabilityListFilters(urlState);\n const { timeRange, tokens, groups, sort } = filters;\n const withQueryTrace = useTraceQueryAvailable().enabled;\n const withFeedback = useFeedbackAvailable().enabled;\n const columns = useTraceColumnPreferences({ scope: 'threads' });\n const { data: capabilities, isLoading: isCapabilitiesLoading } = useObservabilityCapabilities();\n const withTimeToFirstChunk = capabilities?.capabilities.traceQueryTimeToFirstChunk ?? false;\n const withTimeToFirstToken = capabilities?.capabilities.traceQueryTimeToFirstToken ?? false;\n\n // Stored columns the store can't fill stay saved but aren't drawn, so they come back on a store that can.\n const displayedColumns = useMemo(\n () =>\n isCapabilitiesLoading\n ? columns.preferences\n : withoutUnrecordedStreamingColumns(columns.preferences, { withTimeToFirstChunk, withTimeToFirstToken }),\n [columns.preferences, isCapabilitiesLoading, withTimeToFirstChunk, withTimeToFirstToken],\n );\n\n // Threads with trace activity in the window, like the traces list for the same chip.\n const query = useMemo<ThreadQueryArgs>(() => {\n const where = buildThreadQueryWhere(tokens, groups, { withTimeToFirstChunk, withTimeToFirstToken });\n return {\n timeRange: { traces: timeRange },\n orderBy: [{ field: 'startedAt', direction: sort.direction }],\n ...(where ? { where } : {}),\n };\n }, [timeRange, sort, tokens, groups, withTimeToFirstChunk, withTimeToFirstToken]);\n\n const { threads, hasNextPage, isFetchingNextPage, setEndOfListElement, isLoading, isError, error } =\n useThreadsListSource({ query, rolling: filters.rolling });\n\n const rows = useMemo(() => (threads ?? []).map(threadToListRow), [threads]);\n const selectedRow = rows.find(row => row.threadId === selectedThreadId);\n\n // The drawer is modal, so the list behind it cannot be clicked while a thread is open.\n const handleThreadClick = (row: TracesListViewTrace) => {\n if (row.threadId) onSelectedThreadChange(row.threadId);\n };\n\n // Same rule as /traces: an empty window without filters gets the full-page empty state.\n const showEmptyState =\n !isLoading && !isError && rows.length === 0 && !filters.contentFiltersApplied && !selectedThreadId;\n\n return (\n <>\n <h1 className=\"sr-only\">Threads</h1>\n <ObservabilityListBody\n toolbar={\n <>\n {urlState && <ObservabilitySavedViews page=\"threads\" {...urlState} columns={columns} />}\n <ActionRow>\n <ActionRow.Start>\n <ThreadsFilterBar\n datePreset={filters.datePreset}\n dateFrom={filters.dateFrom}\n dateTo={filters.dateTo}\n tokens={tokens}\n groups={groups}\n onDatePresetChange={filters.onDatePresetChange}\n onDateChange={filters.onDateChange}\n onDateRangeChange={filters.onDateRangeChange}\n onFiltersChange={filters.onFiltersChange}\n disabled={isLoading}\n />\n </ActionRow.Start>\n <ActionRow.End>\n <ColumnsMenu scope=\"threads\" value={columns.preferences} onChange={columns.setPreferences} />\n </ActionRow.End>\n </ActionRow>\n </>\n }\n error={\n isError ? (\n <TracesErrorContent error={error} resource=\"threads\" errorTitle=\"Failed to load threads\" />\n ) : undefined\n }\n empty={\n showEmptyState ? (\n <NoTracesInfo\n resource=\"threads\"\n datePreset={filters.datePreset}\n dateFrom={filters.dateFrom}\n dateTo={filters.dateTo}\n />\n ) : undefined\n }\n >\n <TracesListView\n listId=\"all-threads\"\n columnPreferences={displayedColumns}\n outcomeColumn={false}\n traces={rows}\n isLoading={isLoading}\n isFetchingNextPage={isFetchingNextPage}\n hasNextPage={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n filtersApplied={filters.filtersApplied}\n resource=\"threads\"\n sort={sort}\n onSortChange={next => filters.setSort({ field: 'startedAt', direction: next.direction })}\n featuredTraceId={selectedRow?.traceId}\n onTraceClick={handleThreadClick}\n />\n </ObservabilityListBody>\n <TraceThreadPanel\n open={!!selectedThreadId}\n threadId={selectedThreadId ?? ''}\n depth={1}\n closeLabel=\"Close\"\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n onOpenScore={onOpenScore}\n onClose={() => onSelectedThreadChange(undefined)}\n />\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAiCA,SAAgB,oBAAoB,EAClC,kBACA,wBACA,aACA,YAC2B;CAC3B,MAAM,UAAUA,mEAAAA,4BAA4B,QAAQ;CACpD,MAAM,EAAE,WAAW,QAAQ,QAAQ,SAAS;CAC5C,MAAM,kBAAA,GAAiBC,iCAAAA,uBAAAA,CAAuB,CAAC,CAAC;CAChD,MAAM,gBAAA,GAAeC,iCAAAA,qBAAAA,CAAqB,CAAC,CAAC;CAC5C,MAAM,UAAUC,0DAAAA,0BAA0B,EAAE,OAAO,UAAU,CAAC;CAC9D,MAAM,EAAE,MAAM,cAAc,WAAW,2BAAA,GAA0BC,iCAAAA,6BAAAA,CAA6B;CAC9F,MAAM,uBAAuB,cAAc,aAAa,8BAA8B;CACtF,MAAM,uBAAuB,cAAc,aAAa,8BAA8B;CAGtF,MAAM,oBAAA,GAAmBC,MAAAA,QAAAA,OAErB,wBACI,QAAQ,cACRC,0CAAAA,kCAAkC,QAAQ,aAAa;EAAE;EAAsB;CAAqB,CAAC,GAC3G;EAAC,QAAQ;EAAa;EAAuB;EAAsB;CAAoB,CACzF;CAGA,MAAM,SAAA,GAAQD,MAAAA,QAAAA,OAA+B;EAC3C,MAAM,QAAQE,uCAAAA,sBAAsB,QAAQ,QAAQ;GAAE;GAAsB;EAAqB,CAAC;EAClG,OAAO;GACL,WAAW,EAAE,QAAQ,UAAU;GAC/B,SAAS,CAAC;IAAE,OAAO;IAAa,WAAW,KAAK;GAAU,CAAC;GAC3D,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;EAC3B;CACF,GAAG;EAAC;EAAW;EAAM;EAAQ;EAAQ;EAAsB;CAAoB,CAAC;CAEhF,MAAM,EAAE,SAAS,aAAa,oBAAoB,qBAAqB,WAAW,SAAS,UACzFC,sDAAAA,qBAAqB;EAAE;EAAO,SAAS,QAAQ;CAAQ,CAAC;CAE1D,MAAM,QAAA,GAAOH,MAAAA,QAAAA,QAAe,WAAW,CAAC,EAAA,CAAG,IAAII,wCAAAA,eAAe,GAAG,CAAC,OAAO,CAAC;CAC1E,MAAM,cAAc,KAAK,MAAK,QAAO,IAAI,aAAa,gBAAgB;CAGtE,MAAM,qBAAqB,QAA6B;EACtD,IAAI,IAAI,UAAU,uBAAuB,IAAI,QAAQ;CACvD;CAGA,MAAM,iBACJ,CAAC,aAAa,CAAC,WAAW,KAAK,WAAW,KAAK,CAAC,QAAQ,yBAAyB,CAAC;CAEpF,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA;EACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;GAAI,WAAU;GAAU,UAAA;EAAW,CAAA;EACnC,iBAAA,GAAA,kBAAA,IAAA,CAACC,iEAAAA,uBAAD;GACE,SACE,iBAAA,GAAA,kBAAA,KAAA,CAAAD,kBAAAA,UAAA,EAAA,UAAA,CACG,YAAY,iBAAA,GAAA,kBAAA,IAAA,CAACE,kCAAAA,yBAAD;IAAyB,MAAK;IAAU,GAAI;IAAmB;GAAU,CAAA,GACtF,iBAAA,GAAA,kBAAA,KAAA,CAACC,kBAAAA,WAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,kBAAAA,UAAU,OAAX,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sDAAAA,kBAAD;IACE,YAAY,QAAQ;IACpB,UAAU,QAAQ;IAClB,QAAQ,QAAQ;IACR;IACA;IACR,oBAAoB,QAAQ;IAC5B,cAAc,QAAQ;IACtB,mBAAmB,QAAQ;IAC3B,iBAAiB,QAAQ;IACzB,UAAU;GACX,CAAA,EACc,CAAA,GACjB,iBAAA,GAAA,kBAAA,IAAA,CAACD,kBAAAA,UAAU,KAAX,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,4DAAAA,aAAD;IAAa,OAAM;IAAU,OAAO,QAAQ;IAAa,UAAU,QAAQ;GAAiB,CAAA,EAC/E,CAAA,CACN,EAAA,CAAA,CACX,EAAA,CAAA;GAEJ,OACE,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,uDAAAA,oBAAD;IAA2B;IAAO,UAAS;IAAU,YAAW;GAA0B,CAAA,IACxF,KAAA;GAEN,OACE,iBACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,iDAAAA,cAAD;IACE,UAAS;IACT,YAAY,QAAQ;IACpB,UAAU,QAAQ;IAClB,QAAQ,QAAQ;GACjB,CAAA,IACC,KAAA;GAGN,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,mDAAAA,gBAAD;IACE,QAAO;IACP,mBAAmB;IACnB,eAAe;IACf,QAAQ;IACG;IACS;IACP;IACQ;IACrB,gBAAgB,QAAQ;IACxB,UAAS;IACH;IACN,eAAc,SAAQ,QAAQ,QAAQ;KAAE,OAAO;KAAa,WAAW,KAAK;IAAU,CAAC;IACvF,iBAAiB,aAAa;IAC9B,cAAc;GACf,CAAA;EACoB,CAAA;EACvB,iBAAA,GAAA,kBAAA,IAAA,CAACC,qDAAAA,kBAAD;GACE,MAAM,CAAC,CAAC;GACR,UAAU,oBAAoB;GAC9B,OAAO;GACP,YAAW;GACK;GACF;GACD;GACb,eAAe,uBAAuB,KAAA,CAAS;EAChD,CAAA;CACD,EAAA,CAAA;AAEN"}
@@ -1,7 +1,7 @@
1
1
  import { useFeedbackAvailable, useTraceQueryAvailable } from "../../capabilities.es.js";
2
2
  import { buildThreadQueryWhere } from "../thread-filters.es.js";
3
3
  import { withoutUnrecordedStreamingColumns } from "../../traces/trace-list-columns.es.js";
4
- import { t as ObservabilitySavedViews } from "../../../observability-saved-views-Bo5kLN20.js";
4
+ import { t as ObservabilitySavedViews } from "../../../observability-saved-views-BBam8Fr5.js";
5
5
  import { ObservabilityListBody } from "../../observability/components/observability-list-body.es.js";
6
6
  import { useObservabilityListFilters } from "../../observability/hooks/use-observability-list-filters.es.js";
7
7
  import { ColumnsMenu } from "../../traces/components/columns-menu/columns-menu.es.js";
@@ -9,7 +9,7 @@ import { NoTracesInfo } from "../../traces/components/no-traces-info.es.js";
9
9
  import { TracesErrorContent } from "../../traces/components/traces-error-content.es.js";
10
10
  import { TracesListView } from "../../traces/components/traces-list-view.es.js";
11
11
  import { useTraceColumnPreferences } from "../../traces/hooks/use-trace-column-preferences.es.js";
12
- import { t as ActionRow } from "../../../ActionRow-Cd6tOC2K.js";
12
+ import { t as ActionRow } from "../../../ActionRow-DCrRCvBq.js";
13
13
  import { useThreadsListSource } from "../hooks/use-threads-list-source.es.js";
14
14
  import { threadToListRow } from "../thread-list-row.es.js";
15
15
  import { ThreadsFilterBar } from "./threads-filter-bar.es.js";
@@ -78,11 +78,7 @@ function ThreadsExplorerBody({ selectedThreadId, onSelectedThreadChange, onOpenS
78
78
  page: "threads",
79
79
  ...urlState,
80
80
  columns
81
- }), /* @__PURE__ */ jsx(ActionRow, { children: /* @__PURE__ */ jsxs(ActionRow.Start, { children: [/* @__PURE__ */ jsx(ColumnsMenu, {
82
- scope: "threads",
83
- value: columns.preferences,
84
- onChange: columns.setPreferences
85
- }), /* @__PURE__ */ jsx(ThreadsFilterBar, {
81
+ }), /* @__PURE__ */ jsxs(ActionRow, { children: [/* @__PURE__ */ jsx(ActionRow.Start, { children: /* @__PURE__ */ jsx(ThreadsFilterBar, {
86
82
  datePreset: filters.datePreset,
87
83
  dateFrom: filters.dateFrom,
88
84
  dateTo: filters.dateTo,
@@ -93,7 +89,11 @@ function ThreadsExplorerBody({ selectedThreadId, onSelectedThreadChange, onOpenS
93
89
  onDateRangeChange: filters.onDateRangeChange,
94
90
  onFiltersChange: filters.onFiltersChange,
95
91
  disabled: isLoading
96
- })] }) })] }),
92
+ }) }), /* @__PURE__ */ jsx(ActionRow.End, { children: /* @__PURE__ */ jsx(ColumnsMenu, {
93
+ scope: "threads",
94
+ value: columns.preferences,
95
+ onChange: columns.setPreferences
96
+ }) })] })] }),
97
97
  error: isError ? /* @__PURE__ */ jsx(TracesErrorContent, {
98
98
  error,
99
99
  resource: "threads",
@@ -1 +1 @@
1
- {"version":3,"file":"threads-explorer-body.es.js","names":["_Fragment"],"sources":["../../../../src/domains/threads/components/threads-explorer-body.tsx"],"sourcesContent":["import { useObservabilityCapabilities } from '@mastra/react/hooks/capabilities';\nimport type { ThreadQueryArgs } from '@mastra/react/hooks/traces';\nimport { useMemo } from 'react';\nimport { useThreadsListSource } from '../hooks/use-threads-list-source';\nimport { buildThreadQueryWhere } from '../thread-filters';\nimport { threadToListRow } from '../thread-list-row';\nimport { ThreadsFilterBar } from './threads-filter-bar';\nimport { useFeedbackAvailable, useTraceQueryAvailable } from '@/domains/capabilities';\nimport { ObservabilityListBody } from '@/domains/observability/components/observability-list-body';\nimport { useObservabilityListFilters } from '@/domains/observability/hooks/use-observability-list-filters';\nimport type { ObservabilityListUrlState } from '@/domains/observability/hooks/use-observability-list-filters';\nimport { ObservabilitySavedViews } from '@/domains/observability/saved-views';\nimport { ColumnsMenu } from '@/domains/traces/components/columns-menu';\nimport { NoTracesInfo } from '@/domains/traces/components/no-traces-info';\nimport { TraceThreadPanel } from '@/domains/traces/components/trace-thread-panel';\nimport { TracesErrorContent } from '@/domains/traces/components/traces-error-content';\nimport { TracesListView } from '@/domains/traces/components/traces-list-view';\nimport type { TracesListViewTrace } from '@/domains/traces/components/traces-list-view';\nimport { useTraceColumnPreferences } from '@/domains/traces/hooks/use-trace-column-preferences';\nimport { withoutUnrecordedStreamingColumns } from '@/domains/traces/trace-list-columns';\nimport { ActionRow } from '@/ds/components/ActionRow';\n\nexport type ThreadsExplorerBodyProps = {\n /** The open thread. The host keeps it (e.g. in the URL) so it survives a reload. */\n selectedThreadId: string | undefined;\n onSelectedThreadChange: (threadId: string | undefined) => void;\n /** Opens a score from the thread drawer; scores live on host routes. */\n onOpenScore: (traceId: string, scoreId: string) => void;\n /** The host's search params, so the time range, filters and sort survive a reload. Omitted: kept in memory. */\n urlState?: ObservabilityListUrlState;\n};\n\n/** The threads page body: filter bar, thread list and the thread drawer. Router-agnostic. */\nexport function ThreadsExplorerBody({\n selectedThreadId,\n onSelectedThreadChange,\n onOpenScore,\n urlState,\n}: ThreadsExplorerBodyProps) {\n const filters = useObservabilityListFilters(urlState);\n const { timeRange, tokens, groups, sort } = filters;\n const withQueryTrace = useTraceQueryAvailable().enabled;\n const withFeedback = useFeedbackAvailable().enabled;\n const columns = useTraceColumnPreferences({ scope: 'threads' });\n const { data: capabilities, isLoading: isCapabilitiesLoading } = useObservabilityCapabilities();\n const withTimeToFirstChunk = capabilities?.capabilities.traceQueryTimeToFirstChunk ?? false;\n const withTimeToFirstToken = capabilities?.capabilities.traceQueryTimeToFirstToken ?? false;\n\n // Stored columns the store can't fill stay saved but aren't drawn, so they come back on a store that can.\n const displayedColumns = useMemo(\n () =>\n isCapabilitiesLoading\n ? columns.preferences\n : withoutUnrecordedStreamingColumns(columns.preferences, { withTimeToFirstChunk, withTimeToFirstToken }),\n [columns.preferences, isCapabilitiesLoading, withTimeToFirstChunk, withTimeToFirstToken],\n );\n\n // Threads with trace activity in the window, like the traces list for the same chip.\n const query = useMemo<ThreadQueryArgs>(() => {\n const where = buildThreadQueryWhere(tokens, groups, { withTimeToFirstChunk, withTimeToFirstToken });\n return {\n timeRange: { traces: timeRange },\n orderBy: [{ field: 'startedAt', direction: sort.direction }],\n ...(where ? { where } : {}),\n };\n }, [timeRange, sort, tokens, groups, withTimeToFirstChunk, withTimeToFirstToken]);\n\n const { threads, hasNextPage, isFetchingNextPage, setEndOfListElement, isLoading, isError, error } =\n useThreadsListSource({ query, rolling: filters.rolling });\n\n const rows = useMemo(() => (threads ?? []).map(threadToListRow), [threads]);\n const selectedRow = rows.find(row => row.threadId === selectedThreadId);\n\n // The drawer is modal, so the list behind it cannot be clicked while a thread is open.\n const handleThreadClick = (row: TracesListViewTrace) => {\n if (row.threadId) onSelectedThreadChange(row.threadId);\n };\n\n // Same rule as /traces: an empty window without filters gets the full-page empty state.\n const showEmptyState =\n !isLoading && !isError && rows.length === 0 && !filters.contentFiltersApplied && !selectedThreadId;\n\n return (\n <>\n <h1 className=\"sr-only\">Threads</h1>\n <ObservabilityListBody\n toolbar={\n <>\n {urlState && <ObservabilitySavedViews page=\"threads\" {...urlState} columns={columns} />}\n <ActionRow>\n <ActionRow.Start>\n <ColumnsMenu scope=\"threads\" value={columns.preferences} onChange={columns.setPreferences} />\n <ThreadsFilterBar\n datePreset={filters.datePreset}\n dateFrom={filters.dateFrom}\n dateTo={filters.dateTo}\n tokens={tokens}\n groups={groups}\n onDatePresetChange={filters.onDatePresetChange}\n onDateChange={filters.onDateChange}\n onDateRangeChange={filters.onDateRangeChange}\n onFiltersChange={filters.onFiltersChange}\n disabled={isLoading}\n />\n </ActionRow.Start>\n </ActionRow>\n </>\n }\n error={\n isError ? (\n <TracesErrorContent error={error} resource=\"threads\" errorTitle=\"Failed to load threads\" />\n ) : undefined\n }\n empty={\n showEmptyState ? (\n <NoTracesInfo\n resource=\"threads\"\n datePreset={filters.datePreset}\n dateFrom={filters.dateFrom}\n dateTo={filters.dateTo}\n />\n ) : undefined\n }\n >\n <TracesListView\n listId=\"all-threads\"\n columnPreferences={displayedColumns}\n outcomeColumn={false}\n traces={rows}\n isLoading={isLoading}\n isFetchingNextPage={isFetchingNextPage}\n hasNextPage={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n filtersApplied={filters.filtersApplied}\n resource=\"threads\"\n sort={sort}\n onSortChange={next => filters.setSort({ field: 'startedAt', direction: next.direction })}\n featuredTraceId={selectedRow?.traceId}\n onTraceClick={handleThreadClick}\n />\n </ObservabilityListBody>\n <TraceThreadPanel\n open={!!selectedThreadId}\n threadId={selectedThreadId ?? ''}\n depth={1}\n closeLabel=\"Close\"\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n onOpenScore={onOpenScore}\n onClose={() => onSelectedThreadChange(undefined)}\n />\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"threads-explorer-body.es.js","names":["_Fragment"],"sources":["../../../../src/domains/threads/components/threads-explorer-body.tsx"],"sourcesContent":["import { useObservabilityCapabilities } from '@mastra/react/hooks/capabilities';\nimport type { ThreadQueryArgs } from '@mastra/react/hooks/traces';\nimport { useMemo } from 'react';\nimport { useThreadsListSource } from '../hooks/use-threads-list-source';\nimport { buildThreadQueryWhere } from '../thread-filters';\nimport { threadToListRow } from '../thread-list-row';\nimport { ThreadsFilterBar } from './threads-filter-bar';\nimport { useFeedbackAvailable, useTraceQueryAvailable } from '@/domains/capabilities';\nimport { ObservabilityListBody } from '@/domains/observability/components/observability-list-body';\nimport { useObservabilityListFilters } from '@/domains/observability/hooks/use-observability-list-filters';\nimport type { ObservabilityListUrlState } from '@/domains/observability/hooks/use-observability-list-filters';\nimport { ObservabilitySavedViews } from '@/domains/observability/saved-views';\nimport { ColumnsMenu } from '@/domains/traces/components/columns-menu';\nimport { NoTracesInfo } from '@/domains/traces/components/no-traces-info';\nimport { TraceThreadPanel } from '@/domains/traces/components/trace-thread-panel';\nimport { TracesErrorContent } from '@/domains/traces/components/traces-error-content';\nimport { TracesListView } from '@/domains/traces/components/traces-list-view';\nimport type { TracesListViewTrace } from '@/domains/traces/components/traces-list-view';\nimport { useTraceColumnPreferences } from '@/domains/traces/hooks/use-trace-column-preferences';\nimport { withoutUnrecordedStreamingColumns } from '@/domains/traces/trace-list-columns';\nimport { ActionRow } from '@/ds/components/ActionRow';\n\nexport type ThreadsExplorerBodyProps = {\n /** The open thread. The host keeps it (e.g. in the URL) so it survives a reload. */\n selectedThreadId: string | undefined;\n onSelectedThreadChange: (threadId: string | undefined) => void;\n /** Opens a score from the thread drawer; scores live on host routes. */\n onOpenScore: (traceId: string, scoreId: string) => void;\n /** The host's search params, so the time range, filters and sort survive a reload. Omitted: kept in memory. */\n urlState?: ObservabilityListUrlState;\n};\n\n/** The threads page body: filter bar, thread list and the thread drawer. Router-agnostic. */\nexport function ThreadsExplorerBody({\n selectedThreadId,\n onSelectedThreadChange,\n onOpenScore,\n urlState,\n}: ThreadsExplorerBodyProps) {\n const filters = useObservabilityListFilters(urlState);\n const { timeRange, tokens, groups, sort } = filters;\n const withQueryTrace = useTraceQueryAvailable().enabled;\n const withFeedback = useFeedbackAvailable().enabled;\n const columns = useTraceColumnPreferences({ scope: 'threads' });\n const { data: capabilities, isLoading: isCapabilitiesLoading } = useObservabilityCapabilities();\n const withTimeToFirstChunk = capabilities?.capabilities.traceQueryTimeToFirstChunk ?? false;\n const withTimeToFirstToken = capabilities?.capabilities.traceQueryTimeToFirstToken ?? false;\n\n // Stored columns the store can't fill stay saved but aren't drawn, so they come back on a store that can.\n const displayedColumns = useMemo(\n () =>\n isCapabilitiesLoading\n ? columns.preferences\n : withoutUnrecordedStreamingColumns(columns.preferences, { withTimeToFirstChunk, withTimeToFirstToken }),\n [columns.preferences, isCapabilitiesLoading, withTimeToFirstChunk, withTimeToFirstToken],\n );\n\n // Threads with trace activity in the window, like the traces list for the same chip.\n const query = useMemo<ThreadQueryArgs>(() => {\n const where = buildThreadQueryWhere(tokens, groups, { withTimeToFirstChunk, withTimeToFirstToken });\n return {\n timeRange: { traces: timeRange },\n orderBy: [{ field: 'startedAt', direction: sort.direction }],\n ...(where ? { where } : {}),\n };\n }, [timeRange, sort, tokens, groups, withTimeToFirstChunk, withTimeToFirstToken]);\n\n const { threads, hasNextPage, isFetchingNextPage, setEndOfListElement, isLoading, isError, error } =\n useThreadsListSource({ query, rolling: filters.rolling });\n\n const rows = useMemo(() => (threads ?? []).map(threadToListRow), [threads]);\n const selectedRow = rows.find(row => row.threadId === selectedThreadId);\n\n // The drawer is modal, so the list behind it cannot be clicked while a thread is open.\n const handleThreadClick = (row: TracesListViewTrace) => {\n if (row.threadId) onSelectedThreadChange(row.threadId);\n };\n\n // Same rule as /traces: an empty window without filters gets the full-page empty state.\n const showEmptyState =\n !isLoading && !isError && rows.length === 0 && !filters.contentFiltersApplied && !selectedThreadId;\n\n return (\n <>\n <h1 className=\"sr-only\">Threads</h1>\n <ObservabilityListBody\n toolbar={\n <>\n {urlState && <ObservabilitySavedViews page=\"threads\" {...urlState} columns={columns} />}\n <ActionRow>\n <ActionRow.Start>\n <ThreadsFilterBar\n datePreset={filters.datePreset}\n dateFrom={filters.dateFrom}\n dateTo={filters.dateTo}\n tokens={tokens}\n groups={groups}\n onDatePresetChange={filters.onDatePresetChange}\n onDateChange={filters.onDateChange}\n onDateRangeChange={filters.onDateRangeChange}\n onFiltersChange={filters.onFiltersChange}\n disabled={isLoading}\n />\n </ActionRow.Start>\n <ActionRow.End>\n <ColumnsMenu scope=\"threads\" value={columns.preferences} onChange={columns.setPreferences} />\n </ActionRow.End>\n </ActionRow>\n </>\n }\n error={\n isError ? (\n <TracesErrorContent error={error} resource=\"threads\" errorTitle=\"Failed to load threads\" />\n ) : undefined\n }\n empty={\n showEmptyState ? (\n <NoTracesInfo\n resource=\"threads\"\n datePreset={filters.datePreset}\n dateFrom={filters.dateFrom}\n dateTo={filters.dateTo}\n />\n ) : undefined\n }\n >\n <TracesListView\n listId=\"all-threads\"\n columnPreferences={displayedColumns}\n outcomeColumn={false}\n traces={rows}\n isLoading={isLoading}\n isFetchingNextPage={isFetchingNextPage}\n hasNextPage={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n filtersApplied={filters.filtersApplied}\n resource=\"threads\"\n sort={sort}\n onSortChange={next => filters.setSort({ field: 'startedAt', direction: next.direction })}\n featuredTraceId={selectedRow?.traceId}\n onTraceClick={handleThreadClick}\n />\n </ObservabilityListBody>\n <TraceThreadPanel\n open={!!selectedThreadId}\n threadId={selectedThreadId ?? ''}\n depth={1}\n closeLabel=\"Close\"\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n onOpenScore={onOpenScore}\n onClose={() => onSelectedThreadChange(undefined)}\n />\n </>\n );\n}\n"],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_trace_filters = require("../../../trace-filters-BNEZ31HX.cjs");
2
+ const require_trace_filters = require("../../../trace-filters-a0N9bf52.cjs");
3
3
  const require_domains_traces_components_traces_explorer_traces_explorer_actions = require("../../traces/components/traces-explorer/traces-explorer-actions.cjs.js");
4
- const require_domains_traces_components_trace_time_range_chip = require("../../traces/components/trace-time-range-chip.cjs.js");
5
- const require_FilterBar = require("../../../FilterBar-BUd4f7oi.cjs");
4
+ require("../../../filter-bar-time-range-DvuaFnkI.cjs");
5
+ const require_FilterBar = require("../../../FilterBar-Buw0tv51.cjs");
6
6
  const require_domains_threads_hooks_use_threads_filter_bar = require("../hooks/use-threads-filter-bar.cjs.js");
7
7
  let react_jsx_runtime = require("react/jsx-runtime");
8
8
  // src/domains/threads/components/threads-filter-bar.tsx
9
9
  var createItemId = (fieldId) => fieldId;
10
- /** The threads filter bar: a time range chip plus the fields `queryTraceThreads()` accepts. */
10
+ /** The threads filter bar: the time range plus the fields `queryTraceThreads()` accepts. */
11
11
  function ThreadsFilterBar({ datePreset, dateFrom, dateTo, minDate, tokens, groups, onDatePresetChange, onDateChange, onDateRangeChange, onFiltersChange, disabled }) {
12
12
  const fields = require_domains_threads_hooks_use_threads_filter_bar.useThreadsFilterBarFields();
13
13
  const { filterBarValue, onFilterBarChange } = require_domains_threads_hooks_use_threads_filter_bar.useThreadsFilterBar({
@@ -24,7 +24,7 @@ function ThreadsFilterBar({ datePreset, dateFrom, dateTo, minDate, tokens, group
24
24
  maxDepth: 3,
25
25
  "aria-label": "Thread filters",
26
26
  className: "min-w-64 flex-1",
27
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_FilterBar.FilterBar.Chips, { renderChip: (item) => item.fieldId === "timeRange" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_traces_components_trace_time_range_chip.TraceTimeRangeChip, {
27
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_FilterBar.FilterBar.Chips, { renderChip: (item) => item.fieldId === "timeRange" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_FilterBar.FilterBar.TimeRange, {
28
28
  preset: datePreset,
29
29
  onPresetChange: onDatePresetChange,
30
30
  dateFrom,
@@ -1 +1 @@
1
- {"version":3,"file":"threads-filter-bar.cjs.js","names":["useThreadsFilterBarFields","useThreadsFilterBar","FilterBar","TRACE_FILTER_BAR_OPERATORS","TraceTimeRangeChip","THREAD_TIME_RANGE_PRESETS","DEFAULT_TRACES_FILTERS"],"sources":["../../../../src/domains/threads/components/threads-filter-bar.tsx"],"sourcesContent":["import { TraceTimeRangeChip, TRACE_TIME_RANGE_FIELD_ID } from '../../traces/components/trace-time-range-chip';\nimport { DEFAULT_TRACES_FILTERS } from '../../traces/components/traces-explorer/traces-explorer-actions';\nimport { TRACE_FILTER_BAR_OPERATORS } from '../../traces/trace-filters';\nimport type { TraceFilterGroup, TraceFilterToken } from '../../traces/trace-query-filters';\nimport type { TraceDatePreset } from '../../traces/types';\nimport {\n THREAD_TIME_RANGE_PRESETS,\n useThreadsFilterBar,\n useThreadsFilterBarFields,\n} from '../hooks/use-threads-filter-bar';\nimport { FilterBar } from '@/ds/components/FilterBar';\n\n// Items are rebuilt from tokens with `id: fieldId` (traceTokensToFilterBarItems); give the\n// draft that id so the chip survives the round trip without remounting.\nconst createItemId = (fieldId: string) => fieldId;\n\nexport type ThreadsFilterBarProps = {\n datePreset: TraceDatePreset;\n dateFrom?: Date;\n dateTo?: Date;\n /** Earliest date the custom range picker allows. */\n minDate?: Date;\n tokens: TraceFilterToken[];\n groups: TraceFilterGroup[];\n onDatePresetChange: (preset: TraceDatePreset) => void;\n onDateChange: (value: Date | undefined, type: 'from' | 'to') => void;\n onDateRangeChange: (from: Date | undefined, to: Date | undefined) => void;\n onFiltersChange: (tokens: TraceFilterToken[], groups: TraceFilterGroup[]) => void;\n disabled?: boolean;\n};\n\n/** The threads filter bar: a time range chip plus the fields `queryTraceThreads()` accepts. */\nexport function ThreadsFilterBar({\n datePreset,\n dateFrom,\n dateTo,\n minDate,\n tokens,\n groups,\n onDatePresetChange,\n onDateChange,\n onDateRangeChange,\n onFiltersChange,\n disabled,\n}: ThreadsFilterBarProps) {\n const fields = useThreadsFilterBarFields();\n const { filterBarValue, onFilterBarChange } = useThreadsFilterBar({ tokens, groups, onFiltersChange });\n\n return (\n <FilterBar\n fields={fields}\n operators={TRACE_FILTER_BAR_OPERATORS}\n value={filterBarValue}\n onValueChange={onFilterBarChange}\n createItemId={createItemId}\n maxDepth={3}\n aria-label=\"Thread filters\"\n className=\"min-w-64 flex-1\"\n >\n <FilterBar.Chips\n renderChip={item =>\n item.fieldId === TRACE_TIME_RANGE_FIELD_ID ? (\n <TraceTimeRangeChip\n preset={datePreset}\n onPresetChange={onDatePresetChange}\n dateFrom={dateFrom}\n dateTo={dateTo}\n minDate={minDate}\n onDateChange={onDateChange}\n onDateRangeChange={onDateRangeChange}\n disabled={disabled}\n presets={THREAD_TIME_RANGE_PRESETS}\n defaultPreset={DEFAULT_TRACES_FILTERS.datePreset}\n />\n ) : (\n <FilterBar.Chip item={item} />\n )\n }\n />\n <FilterBar.Input placeholder=\"Filter threads…\" />\n </FilterBar>\n );\n}\n"],"mappings":";;;;;;;;AAcA,IAAM,gBAAgB,YAAoB;;AAkB1C,SAAgB,iBAAiB,EAC/B,YACA,UACA,QACA,SACA,QACA,QACA,oBACA,cACA,mBACA,iBACA,YACwB;CACxB,MAAM,SAASA,qDAAAA,0BAA0B;CACzC,MAAM,EAAE,gBAAgB,sBAAsBC,qDAAAA,oBAAoB;EAAE;EAAQ;EAAQ;CAAgB,CAAC;CAErG,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,kBAAAA,WAAD;EACU;EACR,WAAWC,sBAAAA;EACX,OAAO;EACP,eAAe;EACD;EACd,UAAU;EACV,cAAW;EACX,WAAU;EARZ,UAAA,CAUE,iBAAA,GAAA,kBAAA,IAAA,CAACD,kBAAAA,UAAU,OAAX,EACE,aAAY,SACV,KAAK,YAAA,cACH,iBAAA,GAAA,kBAAA,IAAA,CAACE,wDAAAA,oBAAD;GACE,QAAQ;GACR,gBAAgB;GACN;GACF;GACC;GACK;GACK;GACT;GACV,SAASC,qDAAAA;GACT,eAAeC,0EAAAA,uBAAuB;EACvC,CAAA,IAED,iBAAA,GAAA,kBAAA,IAAA,CAACJ,kBAAAA,UAAU,MAAX,EAAsB,KAAO,CAAA,EAGlC,CAAA,GACD,iBAAA,GAAA,kBAAA,IAAA,CAACA,kBAAAA,UAAU,OAAX,EAAiB,aAAY,kBAAmB,CAAA,CACvC;;AAEf"}
1
+ {"version":3,"file":"threads-filter-bar.cjs.js","names":["useThreadsFilterBarFields","useThreadsFilterBar","FilterBar","TRACE_FILTER_BAR_OPERATORS","THREAD_TIME_RANGE_PRESETS","DEFAULT_TRACES_FILTERS"],"sources":["../../../../src/domains/threads/components/threads-filter-bar.tsx"],"sourcesContent":["import { DEFAULT_TRACES_FILTERS } from '../../traces/components/traces-explorer/traces-explorer-actions';\nimport { TRACE_FILTER_BAR_OPERATORS } from '../../traces/trace-filters';\nimport type { TraceFilterGroup, TraceFilterToken } from '../../traces/trace-query-filters';\nimport type { TraceDatePreset } from '../../traces/types';\nimport {\n THREAD_TIME_RANGE_PRESETS,\n useThreadsFilterBar,\n useThreadsFilterBarFields,\n} from '../hooks/use-threads-filter-bar';\nimport { FilterBar } from '@/ds/components/FilterBar';\nimport { FILTER_BAR_TIME_RANGE_FIELD_ID } from '@/ds/components/FilterBar/filter-bar-time-range';\n\n// Items are rebuilt from tokens with `id: fieldId` (traceTokensToFilterBarItems); give the\n// draft that id so the chip survives the round trip without remounting.\nconst createItemId = (fieldId: string) => fieldId;\n\nexport type ThreadsFilterBarProps = {\n datePreset: TraceDatePreset;\n dateFrom?: Date;\n dateTo?: Date;\n /** Earliest date the custom range picker allows. */\n minDate?: Date;\n tokens: TraceFilterToken[];\n groups: TraceFilterGroup[];\n onDatePresetChange: (preset: TraceDatePreset) => void;\n onDateChange: (value: Date | undefined, type: 'from' | 'to') => void;\n onDateRangeChange: (from: Date | undefined, to: Date | undefined) => void;\n onFiltersChange: (tokens: TraceFilterToken[], groups: TraceFilterGroup[]) => void;\n disabled?: boolean;\n};\n\n/** The threads filter bar: the time range plus the fields `queryTraceThreads()` accepts. */\nexport function ThreadsFilterBar({\n datePreset,\n dateFrom,\n dateTo,\n minDate,\n tokens,\n groups,\n onDatePresetChange,\n onDateChange,\n onDateRangeChange,\n onFiltersChange,\n disabled,\n}: ThreadsFilterBarProps) {\n const fields = useThreadsFilterBarFields();\n const { filterBarValue, onFilterBarChange } = useThreadsFilterBar({ tokens, groups, onFiltersChange });\n\n return (\n <FilterBar\n fields={fields}\n operators={TRACE_FILTER_BAR_OPERATORS}\n value={filterBarValue}\n onValueChange={onFilterBarChange}\n createItemId={createItemId}\n maxDepth={3}\n aria-label=\"Thread filters\"\n className=\"min-w-64 flex-1\"\n >\n <FilterBar.Chips\n renderChip={item =>\n item.fieldId === FILTER_BAR_TIME_RANGE_FIELD_ID ? (\n <FilterBar.TimeRange\n preset={datePreset}\n onPresetChange={onDatePresetChange}\n dateFrom={dateFrom}\n dateTo={dateTo}\n minDate={minDate}\n onDateChange={onDateChange}\n onDateRangeChange={onDateRangeChange}\n disabled={disabled}\n presets={THREAD_TIME_RANGE_PRESETS}\n defaultPreset={DEFAULT_TRACES_FILTERS.datePreset}\n />\n ) : (\n <FilterBar.Chip item={item} />\n )\n }\n />\n <FilterBar.Input placeholder=\"Filter threads…\" />\n </FilterBar>\n );\n}\n"],"mappings":";;;;;;;;AAcA,IAAM,gBAAgB,YAAoB;;AAkB1C,SAAgB,iBAAiB,EAC/B,YACA,UACA,QACA,SACA,QACA,QACA,oBACA,cACA,mBACA,iBACA,YACwB;CACxB,MAAM,SAASA,qDAAAA,0BAA0B;CACzC,MAAM,EAAE,gBAAgB,sBAAsBC,qDAAAA,oBAAoB;EAAE;EAAQ;EAAQ;CAAgB,CAAC;CAErG,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,kBAAAA,WAAD;EACU;EACR,WAAWC,sBAAAA;EACX,OAAO;EACP,eAAe;EACD;EACd,UAAU;EACV,cAAW;EACX,WAAU;EARZ,UAAA,CAUE,iBAAA,GAAA,kBAAA,IAAA,CAACD,kBAAAA,UAAU,OAAX,EACE,aAAY,SACV,KAAK,YAAA,cACH,iBAAA,GAAA,kBAAA,IAAA,CAACA,kBAAAA,UAAU,WAAX;GACE,QAAQ;GACR,gBAAgB;GACN;GACF;GACC;GACK;GACK;GACT;GACV,SAASE,qDAAAA;GACT,eAAeC,0EAAAA,uBAAuB;EACvC,CAAA,IAED,iBAAA,GAAA,kBAAA,IAAA,CAACH,kBAAAA,UAAU,MAAX,EAAsB,KAAO,CAAA,EAGlC,CAAA,GACD,iBAAA,GAAA,kBAAA,IAAA,CAACA,kBAAAA,UAAU,OAAX,EAAiB,aAAY,kBAAmB,CAAA,CACvC;;AAEf"}