@mastra/playground-ui 68.0.0-alpha.2 → 68.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. package/dist/{FilterBar-CQl04O6t.cjs → FilterBar-BSP2UTjc.cjs} +2 -2
  2. package/dist/{FilterBar-CQl04O6t.cjs.map → FilterBar-BSP2UTjc.cjs.map} +1 -1
  3. package/dist/{FilterBar-BgW2dqRQ.js → FilterBar-PSQ1OwqH.js} +2 -2
  4. package/dist/{FilterBar-BgW2dqRQ.js.map → FilterBar-PSQ1OwqH.js.map} +1 -1
  5. package/dist/KnowledgePageGraph.css +55 -0
  6. package/dist/{MarkdownRenderer-2GOXQJEv.js → MarkdownRenderer-CI30RqdB.js} +19 -6
  7. package/dist/MarkdownRenderer-CI30RqdB.js.map +1 -0
  8. package/dist/{MarkdownRenderer-CB8Z_CHc.cjs → MarkdownRenderer-y65WGBhC.cjs} +19 -6
  9. package/dist/MarkdownRenderer-y65WGBhC.cjs.map +1 -0
  10. package/dist/{MetricsCard-CEB-f2sv.cjs → MetricsCard-BEwiS7Pe.cjs} +8 -8
  11. package/dist/MetricsCard-BEwiS7Pe.cjs.map +1 -0
  12. package/dist/{MetricsCard-M8awJ2B_.js → MetricsCard-ua6C6b8a.js} +10 -10
  13. package/dist/MetricsCard-ua6C6b8a.js.map +1 -0
  14. package/dist/{MetricsLineChart-BhHoduO0.js → MetricsLineChart-4SwxBbQx.js} +14 -3
  15. package/dist/MetricsLineChart-4SwxBbQx.js.map +1 -0
  16. package/dist/{MetricsLineChart-CjBm4IXu.cjs → MetricsLineChart-tZxsauau.cjs} +13 -2
  17. package/dist/MetricsLineChart-tZxsauau.cjs.map +1 -0
  18. package/dist/{MetricsStackedBarChart-BdMlKv6G.cjs → MetricsStackedBarChart-CDLE76IB.cjs} +2 -2
  19. package/dist/{MetricsStackedBarChart-BdMlKv6G.cjs.map → MetricsStackedBarChart-CDLE76IB.cjs.map} +1 -1
  20. package/dist/{MetricsStackedBarChart-BRuA6MTE.js → MetricsStackedBarChart-D2QyS4-z.js} +2 -2
  21. package/dist/{MetricsStackedBarChart-BRuA6MTE.js.map → MetricsStackedBarChart-D2QyS4-z.js.map} +1 -1
  22. package/dist/{activity-rJ1NQl_2.js → activity-C8Ql81WM.js} +2 -2
  23. package/dist/{activity-rJ1NQl_2.js.map → activity-C8Ql81WM.js.map} +1 -1
  24. package/dist/{activity-DyB5H3gF.cjs → activity-CcQZeDYi.cjs} +2 -2
  25. package/dist/{activity-DyB5H3gF.cjs.map → activity-CcQZeDYi.cjs.map} +1 -1
  26. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  27. package/dist/components/DateTimeRangePicker.es.js +1 -1
  28. package/dist/components/FilterBar.cjs.js +2 -2
  29. package/dist/components/FilterBar.es.js +2 -2
  30. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  31. package/dist/components/MarkdownRenderer.es.js +1 -1
  32. package/dist/components/MetricsCard.cjs.js +1 -1
  33. package/dist/components/MetricsCard.es.js +1 -1
  34. package/dist/components/MetricsLineChart.cjs.js +1 -1
  35. package/dist/components/MetricsLineChart.es.js +1 -1
  36. package/dist/components/MetricsStackedBarChart.cjs.js +1 -1
  37. package/dist/components/MetricsStackedBarChart.es.js +1 -1
  38. package/dist/components/SavedViews.cjs.js +1 -1
  39. package/dist/components/SavedViews.es.js +1 -1
  40. package/dist/components/ai/activity.cjs.js +1 -1
  41. package/dist/components/ai/activity.es.js +1 -1
  42. package/dist/components/ai/plan.cjs.js +1 -1
  43. package/dist/components/ai/plan.es.js +1 -1
  44. package/dist/components/ai/tool-approval.cjs.js +1 -1
  45. package/dist/components/ai/tool-approval.es.js +1 -1
  46. package/dist/components/ai/tool-call.cjs.js +2 -2
  47. package/dist/components/ai/tool-call.es.js +2 -2
  48. package/dist/{date-time-range-picker-CTt7Od0P.cjs → date-time-range-picker-CWGjoR3j.cjs} +40 -13
  49. package/dist/date-time-range-picker-CWGjoR3j.cjs.map +1 -0
  50. package/dist/{date-time-range-picker-DKh1K9Iy.js → date-time-range-picker-CdSiXwB4.js} +40 -13
  51. package/dist/date-time-range-picker-CdSiXwB4.js.map +1 -0
  52. package/dist/domains/chat/activity/activity-stretch-line.cjs.js +1 -1
  53. package/dist/domains/chat/activity/activity-stretch-line.es.js +1 -1
  54. package/dist/domains/chat/activity/components/activity-fold.cjs.js +1 -1
  55. package/dist/domains/chat/activity/components/activity-fold.es.js +1 -1
  56. package/dist/domains/chat/activity/components/activity-timed-trigger.cjs.js +1 -1
  57. package/dist/domains/chat/activity/components/activity-timed-trigger.es.js +1 -1
  58. package/dist/domains/chat/activity/components/calls-panel.cjs.js +1 -1
  59. package/dist/domains/chat/activity/components/calls-panel.es.js +1 -1
  60. package/dist/domains/chat/activity/components/stretch-content.cjs.js +1 -1
  61. package/dist/domains/chat/activity/components/stretch-content.es.js +1 -1
  62. package/dist/domains/chat/activity/components/stretch-thought.cjs.js +1 -1
  63. package/dist/domains/chat/activity/components/stretch-thought.es.js +1 -1
  64. package/dist/domains/chat/activity/model/activity-segments.cjs.js +1 -1
  65. package/dist/domains/chat/activity/model/activity-segments.es.js +1 -1
  66. package/dist/domains/chat/activity/model/activity-words.cjs.js +2 -2
  67. package/dist/domains/chat/activity/model/activity-words.es.js +2 -2
  68. package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
  69. package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
  70. package/dist/domains/chat/knowledge/knowledge-links.cjs.js +52 -6
  71. package/dist/domains/chat/knowledge/knowledge-links.cjs.js.map +1 -1
  72. package/dist/domains/chat/knowledge/knowledge-links.es.js +53 -9
  73. package/dist/domains/chat/knowledge/knowledge-links.es.js.map +1 -1
  74. package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js +10 -3
  75. package/dist/domains/chat/knowledge/pinned-knowledge-data.cjs.js.map +1 -1
  76. package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js +10 -3
  77. package/dist/domains/chat/knowledge/pinned-knowledge-data.es.js.map +1 -1
  78. package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js +8 -3
  79. package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js.map +1 -1
  80. package/dist/domains/chat/knowledge/pinned-knowledge.es.js +8 -3
  81. package/dist/domains/chat/knowledge/pinned-knowledge.es.js.map +1 -1
  82. package/dist/domains/chat/knowledge.cjs.js +2 -0
  83. package/dist/domains/chat/knowledge.es.js +2 -2
  84. package/dist/domains/chat/messages/message-row.cjs.js +3 -3
  85. package/dist/domains/chat/messages/message-row.es.js +3 -3
  86. package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
  87. package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
  88. package/dist/domains/chat/messages/reasoning-content.cjs.js +1 -1
  89. package/dist/domains/chat/messages/reasoning-content.es.js +1 -1
  90. package/dist/domains/chat/messages/renderers/message-text.cjs.js +35 -1
  91. package/dist/domains/chat/messages/renderers/message-text.cjs.js.map +1 -1
  92. package/dist/domains/chat/messages/renderers/message-text.es.js +36 -2
  93. package/dist/domains/chat/messages/renderers/message-text.es.js.map +1 -1
  94. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
  95. package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
  96. package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
  97. package/dist/domains/chat/messages/signal-badge.es.js +1 -1
  98. package/dist/domains/chat/messages/skill-message.cjs.js +2 -2
  99. package/dist/domains/chat/messages/skill-message.es.js +2 -2
  100. package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
  101. package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
  102. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  103. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  104. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
  105. package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
  106. package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +2 -2
  107. package/dist/domains/chat/tools/badges/file-tree-badge.es.js +2 -2
  108. package/dist/domains/chat/tools/badges/knowledge-body-range.cjs.js +80 -0
  109. package/dist/domains/chat/tools/badges/knowledge-body-range.cjs.js.map +1 -0
  110. package/dist/domains/chat/tools/badges/knowledge-body-range.d.ts +1 -0
  111. package/dist/domains/chat/tools/badges/knowledge-body-range.es.js +78 -0
  112. package/dist/domains/chat/tools/badges/knowledge-body-range.es.js.map +1 -0
  113. package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js +163 -13
  114. package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js.map +1 -1
  115. package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js +165 -15
  116. package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js.map +1 -1
  117. package/dist/domains/chat/tools/badges/mcp-input-request-badge.cjs.js +51 -0
  118. package/dist/domains/chat/tools/badges/mcp-input-request-badge.cjs.js.map +1 -0
  119. package/dist/domains/chat/tools/badges/mcp-input-request-badge.d.ts +1 -0
  120. package/dist/domains/chat/tools/badges/mcp-input-request-badge.es.js +49 -0
  121. package/dist/domains/chat/tools/badges/mcp-input-request-badge.es.js.map +1 -0
  122. package/dist/domains/chat/tools/badges/mcp-task-chip.cjs.js +7 -2
  123. package/dist/domains/chat/tools/badges/mcp-task-chip.cjs.js.map +1 -1
  124. package/dist/domains/chat/tools/badges/mcp-task-chip.es.js +7 -2
  125. package/dist/domains/chat/tools/badges/mcp-task-chip.es.js.map +1 -1
  126. package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +2 -2
  127. package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +2 -2
  128. package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +2 -2
  129. package/dist/domains/chat/tools/badges/observation-marker-details.es.js +2 -2
  130. package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
  131. package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
  132. package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +2 -2
  133. package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +2 -2
  134. package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
  135. package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
  136. package/dist/domains/chat/tools/badges/tool-badge.cjs.js +9 -4
  137. package/dist/domains/chat/tools/badges/tool-badge.cjs.js.map +1 -1
  138. package/dist/domains/chat/tools/badges/tool-badge.es.js +9 -4
  139. package/dist/domains/chat/tools/badges/tool-badge.es.js.map +1 -1
  140. package/dist/domains/chat/tools/badges/use-deferred-input-request.cjs.js +81 -0
  141. package/dist/domains/chat/tools/badges/use-deferred-input-request.cjs.js.map +1 -0
  142. package/dist/domains/chat/tools/badges/use-deferred-input-request.d.ts +1 -0
  143. package/dist/domains/chat/tools/badges/use-deferred-input-request.es.js +77 -0
  144. package/dist/domains/chat/tools/badges/use-deferred-input-request.es.js.map +1 -0
  145. package/dist/domains/chat/tools/badges/use-mcp-task-progress.cjs.js +11 -2
  146. package/dist/domains/chat/tools/badges/use-mcp-task-progress.cjs.js.map +1 -1
  147. package/dist/domains/chat/tools/badges/use-mcp-task-progress.es.js +11 -2
  148. package/dist/domains/chat/tools/badges/use-mcp-task-progress.es.js.map +1 -1
  149. package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +1 -1
  150. package/dist/domains/chat/tools/badges/workflow-badge.es.js +1 -1
  151. package/dist/domains/chat/tools/connect-prompt-tool.cjs.js +79 -4
  152. package/dist/domains/chat/tools/connect-prompt-tool.cjs.js.map +1 -1
  153. package/dist/domains/chat/tools/connect-prompt-tool.es.js +79 -4
  154. package/dist/domains/chat/tools/connect-prompt-tool.es.js.map +1 -1
  155. package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js +238 -0
  156. package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js.map +1 -0
  157. package/dist/domains/chat/tools/mcp-input-request-tool.d.ts +1 -0
  158. package/dist/domains/chat/tools/mcp-input-request-tool.es.js +237 -0
  159. package/dist/domains/chat/tools/mcp-input-request-tool.es.js.map +1 -0
  160. package/dist/domains/chat/tools/mcp-input-request.cjs.js +40 -0
  161. package/dist/domains/chat/tools/mcp-input-request.cjs.js.map +1 -0
  162. package/dist/domains/chat/tools/mcp-input-request.d.ts +1 -0
  163. package/dist/domains/chat/tools/mcp-input-request.es.js +33 -0
  164. package/dist/domains/chat/tools/mcp-input-request.es.js.map +1 -0
  165. package/dist/domains/chat/tools/tool-card-kind.cjs.js +9 -4
  166. package/dist/domains/chat/tools/tool-card-kind.cjs.js.map +1 -1
  167. package/dist/domains/chat/tools/tool-card-kind.es.js +9 -5
  168. package/dist/domains/chat/tools/tool-card-kind.es.js.map +1 -1
  169. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  170. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  171. package/dist/domains/chat/tools/tool-groups.cjs.js +1 -1
  172. package/dist/domains/chat/tools/tool-groups.es.js +1 -1
  173. package/dist/domains/chat.cjs.js +5 -3
  174. package/dist/domains/chat.es.js +4 -4
  175. package/dist/domains/connect/types.cjs.js.map +1 -1
  176. package/dist/domains/connect/types.es.js.map +1 -1
  177. package/dist/domains/connect/use-user-connect.cjs.js +19 -2
  178. package/dist/domains/connect/use-user-connect.cjs.js.map +1 -1
  179. package/dist/domains/connect/use-user-connect.es.js +19 -2
  180. package/dist/domains/connect/use-user-connect.es.js.map +1 -1
  181. package/dist/domains/dashboards/components/dashboard-renderer.cjs.js +4 -3
  182. package/dist/domains/dashboards/components/dashboard-renderer.cjs.js.map +1 -1
  183. package/dist/domains/dashboards/components/dashboard-renderer.es.js +4 -3
  184. package/dist/domains/dashboards/components/dashboard-renderer.es.js.map +1 -1
  185. package/dist/domains/dashboards/components/widget-chrome.cjs.js +1 -1
  186. package/dist/domains/dashboards/components/widget-chrome.es.js +1 -1
  187. package/dist/domains/dashboards/components/widget-error.cjs.js +1 -1
  188. package/dist/domains/dashboards/components/widget-error.es.js +1 -1
  189. package/dist/domains/dashboards/hooks/use-widget-views.cjs.js +4 -3
  190. package/dist/domains/dashboards/hooks/use-widget-views.cjs.js.map +1 -1
  191. package/dist/domains/dashboards/hooks/use-widget-views.es.js +4 -3
  192. package/dist/domains/dashboards/hooks/use-widget-views.es.js.map +1 -1
  193. package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js +9 -6
  194. package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js.map +1 -1
  195. package/dist/domains/dashboards/kinds/scores/scores-widget.es.js +9 -6
  196. package/dist/domains/dashboards/kinds/scores/scores-widget.es.js.map +1 -1
  197. package/dist/domains/dashboards/kinds/table/table-tabs.cjs.js +2 -2
  198. package/dist/domains/dashboards/kinds/table/table-tabs.es.js +2 -2
  199. package/dist/domains/dashboards/kinds/table/table-widget.cjs.js +1 -1
  200. package/dist/domains/dashboards/kinds/table/table-widget.es.js +1 -1
  201. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js +6 -5
  202. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js.map +1 -1
  203. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js +6 -5
  204. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js.map +1 -1
  205. package/dist/domains/dashboards/lib/chrome.cjs.js +9 -2
  206. package/dist/domains/dashboards/lib/chrome.cjs.js.map +1 -1
  207. package/dist/domains/dashboards/lib/chrome.es.js +9 -2
  208. package/dist/domains/dashboards/lib/chrome.es.js.map +1 -1
  209. package/dist/domains/dashboards/widget-kind.cjs.js.map +1 -1
  210. package/dist/domains/dashboards/widget-kind.es.js.map +1 -1
  211. package/dist/domains/knowledge/components/KnowledgePageCard.cjs.js +48 -0
  212. package/dist/domains/knowledge/components/KnowledgePageCard.cjs.js.map +1 -0
  213. package/dist/domains/knowledge/components/KnowledgePageCard.d.ts +1 -0
  214. package/dist/domains/knowledge/components/KnowledgePageCard.es.js +47 -0
  215. package/dist/domains/knowledge/components/KnowledgePageCard.es.js.map +1 -0
  216. package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js +63 -5
  217. package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js.map +1 -1
  218. package/dist/domains/knowledge/components/KnowledgePageDetail.es.js +64 -6
  219. package/dist/domains/knowledge/components/KnowledgePageDetail.es.js.map +1 -1
  220. package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js +485 -47
  221. package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js.map +1 -1
  222. package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js +487 -50
  223. package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js.map +1 -1
  224. package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js +1051 -123
  225. package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js.map +1 -1
  226. package/dist/domains/knowledge/components/KnowledgePageGraph.es.js +1054 -126
  227. package/dist/domains/knowledge/components/KnowledgePageGraph.es.js.map +1 -1
  228. package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js +75 -3
  229. package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js.map +1 -1
  230. package/dist/domains/knowledge/components/KnowledgePageTree.es.js +76 -4
  231. package/dist/domains/knowledge/components/KnowledgePageTree.es.js.map +1 -1
  232. package/dist/domains/knowledge/lib/circleText.cjs.js +9 -0
  233. package/dist/domains/knowledge/lib/circleText.cjs.js.map +1 -0
  234. package/dist/domains/knowledge/lib/circleText.d.ts +1 -0
  235. package/dist/domains/knowledge/lib/circleText.es.js +8 -0
  236. package/dist/domains/knowledge/lib/circleText.es.js.map +1 -0
  237. package/dist/domains/knowledge/lib/fitViewport.cjs.js +82 -0
  238. package/dist/domains/knowledge/lib/fitViewport.cjs.js.map +1 -0
  239. package/dist/domains/knowledge/lib/fitViewport.d.ts +1 -0
  240. package/dist/domains/knowledge/lib/fitViewport.es.js +73 -0
  241. package/dist/domains/knowledge/lib/fitViewport.es.js.map +1 -0
  242. package/dist/domains/knowledge/lib/graphShape.cjs.js +524 -0
  243. package/dist/domains/knowledge/lib/graphShape.cjs.js.map +1 -0
  244. package/dist/domains/knowledge/lib/graphShape.d.ts +1 -0
  245. package/dist/domains/knowledge/lib/graphShape.es.js +499 -0
  246. package/dist/domains/knowledge/lib/graphShape.es.js.map +1 -0
  247. package/dist/domains/knowledge/lib/linkCountsText.cjs.js +11 -0
  248. package/dist/domains/knowledge/lib/linkCountsText.cjs.js.map +1 -0
  249. package/dist/domains/knowledge/lib/linkCountsText.d.ts +1 -0
  250. package/dist/domains/knowledge/lib/linkCountsText.es.js +10 -0
  251. package/dist/domains/knowledge/lib/linkCountsText.es.js.map +1 -0
  252. package/dist/domains/knowledge/lib/pageAddress.cjs.js +29 -0
  253. package/dist/domains/knowledge/lib/pageAddress.cjs.js.map +1 -0
  254. package/dist/domains/knowledge/lib/pageAddress.d.ts +1 -0
  255. package/dist/domains/knowledge/lib/pageAddress.es.js +27 -0
  256. package/dist/domains/knowledge/lib/pageAddress.es.js.map +1 -0
  257. package/dist/domains/knowledge/lib/pageGraph.cjs.js +11 -11
  258. package/dist/domains/knowledge/lib/pageGraph.cjs.js.map +1 -1
  259. package/dist/domains/knowledge/lib/pageGraph.es.js +11 -11
  260. package/dist/domains/knowledge/lib/pageGraph.es.js.map +1 -1
  261. package/dist/domains/knowledge/lib/pageRefs.cjs.js +69 -0
  262. package/dist/domains/knowledge/lib/pageRefs.cjs.js.map +1 -0
  263. package/dist/domains/knowledge/lib/pageRefs.d.ts +1 -0
  264. package/dist/domains/knowledge/lib/pageRefs.es.js +66 -0
  265. package/dist/domains/knowledge/lib/pageRefs.es.js.map +1 -0
  266. package/dist/domains/knowledge/lib/pageTree.cjs.js +5 -0
  267. package/dist/domains/knowledge/lib/pageTree.cjs.js.map +1 -1
  268. package/dist/domains/knowledge/lib/pageTree.es.js +5 -1
  269. package/dist/domains/knowledge/lib/pageTree.es.js.map +1 -1
  270. package/dist/domains/knowledge/lib/remarkKnowledgeLinks.cjs.js +82 -0
  271. package/dist/domains/knowledge/lib/remarkKnowledgeLinks.cjs.js.map +1 -0
  272. package/dist/domains/knowledge/lib/remarkKnowledgeLinks.d.ts +1 -0
  273. package/dist/domains/knowledge/lib/remarkKnowledgeLinks.es.js +78 -0
  274. package/dist/domains/knowledge/lib/remarkKnowledgeLinks.es.js.map +1 -0
  275. package/dist/domains/knowledge/lib/tooltipSide.cjs.js +77 -0
  276. package/dist/domains/knowledge/lib/tooltipSide.cjs.js.map +1 -0
  277. package/dist/domains/knowledge/lib/tooltipSide.d.ts +1 -0
  278. package/dist/domains/knowledge/lib/tooltipSide.es.js +75 -0
  279. package/dist/domains/knowledge/lib/tooltipSide.es.js.map +1 -0
  280. package/dist/domains/knowledge/lib/useLeavingNodes.cjs.js +65 -0
  281. package/dist/domains/knowledge/lib/useLeavingNodes.cjs.js.map +1 -0
  282. package/dist/domains/knowledge/lib/useLeavingNodes.d.ts +1 -0
  283. package/dist/domains/knowledge/lib/useLeavingNodes.es.js +62 -0
  284. package/dist/domains/knowledge/lib/useLeavingNodes.es.js.map +1 -0
  285. package/dist/domains/knowledge/lib/useStableWhile.cjs.js +15 -0
  286. package/dist/domains/knowledge/lib/useStableWhile.cjs.js.map +1 -0
  287. package/dist/domains/knowledge/lib/useStableWhile.d.ts +1 -0
  288. package/dist/domains/knowledge/lib/useStableWhile.es.js +14 -0
  289. package/dist/domains/knowledge/lib/useStableWhile.es.js.map +1 -0
  290. package/dist/domains/metrics/components/agent-runs-card.cjs.js +3 -3
  291. package/dist/domains/metrics/components/agent-runs-card.es.js +3 -3
  292. package/dist/domains/metrics/components/breakdown/breakdown-tab-body.cjs.js +1 -1
  293. package/dist/domains/metrics/components/breakdown/breakdown-tab-body.es.js +1 -1
  294. package/dist/domains/metrics/components/breakdown-card.cjs.js +1 -1
  295. package/dist/domains/metrics/components/breakdown-card.es.js +1 -1
  296. package/dist/domains/metrics/components/chart-area.cjs.js +1 -1
  297. package/dist/domains/metrics/components/chart-area.es.js +1 -1
  298. package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
  299. package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
  300. package/dist/domains/metrics/components/chart-card.cjs.js +1 -1
  301. package/dist/domains/metrics/components/chart-card.es.js +1 -1
  302. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  303. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  304. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.cjs.js +3 -2
  305. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.cjs.js.map +1 -1
  306. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.es.js +3 -2
  307. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.es.js.map +1 -1
  308. package/dist/domains/metrics/components/failure-rate-card.cjs.js +3 -2
  309. package/dist/domains/metrics/components/failure-rate-card.cjs.js.map +1 -1
  310. package/dist/domains/metrics/components/failure-rate-card.es.js +3 -2
  311. package/dist/domains/metrics/components/failure-rate-card.es.js.map +1 -1
  312. package/dist/domains/metrics/components/latency-card.cjs.js +3 -2
  313. package/dist/domains/metrics/components/latency-card.cjs.js.map +1 -1
  314. package/dist/domains/metrics/components/latency-card.es.js +3 -2
  315. package/dist/domains/metrics/components/latency-card.es.js.map +1 -1
  316. package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +1 -1
  317. package/dist/domains/metrics/components/metrics-time-range-chip.es.js +1 -1
  318. package/dist/domains/metrics/components/scores-card.cjs.js +2 -1
  319. package/dist/domains/metrics/components/scores-card.cjs.js.map +1 -1
  320. package/dist/domains/metrics/components/scores-card.es.js +2 -1
  321. package/dist/domains/metrics/components/scores-card.es.js.map +1 -1
  322. package/dist/domains/metrics/components/token-usage-card.cjs.js +3 -3
  323. package/dist/domains/metrics/components/token-usage-card.es.js +3 -3
  324. package/dist/domains/metrics/components/trace-aggregate-card.cjs.js +1 -1
  325. package/dist/domains/metrics/components/trace-aggregate-card.es.js +1 -1
  326. package/dist/domains/observability/components/observability-histogram.cjs.js +1 -1
  327. package/dist/domains/observability/components/observability-histogram.es.js +1 -1
  328. package/dist/domains/scores/components/trace-scores-list.cjs.js +2 -2
  329. package/dist/domains/scores/components/trace-scores-list.es.js +2 -2
  330. package/dist/domains/skills/skill-simple-form.cjs.js +1 -1
  331. package/dist/domains/skills/skill-simple-form.es.js +1 -1
  332. package/dist/domains/spans/components/spans-filter-bar.cjs.js +2 -2
  333. package/dist/domains/spans/components/spans-filter-bar.es.js +2 -2
  334. package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js +1 -1
  335. package/dist/domains/spans/hooks/use-spans-filter-bar.es.js +1 -1
  336. package/dist/domains/threads/components/threads-filter-bar.cjs.js +2 -2
  337. package/dist/domains/threads/components/threads-filter-bar.es.js +2 -2
  338. package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js +1 -1
  339. package/dist/domains/threads/hooks/use-threads-filter-bar.es.js +1 -1
  340. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
  341. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
  342. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
  343. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
  344. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
  345. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
  346. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
  347. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
  348. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
  349. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
  350. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
  351. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
  352. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  353. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  354. package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js +1 -1
  355. package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js +1 -1
  356. package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js +1 -1
  357. package/dist/domains/traces/components/span-payload/span-tools-section.es.js +1 -1
  358. package/dist/domains/traces/components/span-timeline-row.cjs.js +1 -1
  359. package/dist/domains/traces/components/span-timeline-row.es.js +1 -1
  360. package/dist/domains/traces/components/span-timing-hover-card.cjs.js +1 -1
  361. package/dist/domains/traces/components/span-timing-hover-card.es.js +1 -1
  362. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +8 -2
  363. package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
  364. package/dist/domains/traces/components/trace-data-panel-view.es.js +8 -2
  365. package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
  366. package/dist/domains/traces/components/trace-error-cell.cjs.js +1 -1
  367. package/dist/domains/traces/components/trace-error-cell.es.js +1 -1
  368. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +2 -2
  369. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +2 -2
  370. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js +1 -1
  371. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +1 -1
  372. package/dist/domains/workflows/runs/workflow-run-list.cjs.js +1 -1
  373. package/dist/domains/workflows/runs/workflow-run-list.es.js +1 -1
  374. package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +2 -2
  375. package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +2 -2
  376. package/dist/domains/workflows/workflow/use-workflow-trigger.cjs.js +3 -3
  377. package/dist/domains/workflows/workflow/use-workflow-trigger.es.js +3 -3
  378. package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +1 -1
  379. package/dist/domains/workflows/workflow/workflow-input-data.es.js +1 -1
  380. package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +2 -2
  381. package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +2 -2
  382. package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +2 -2
  383. package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +2 -2
  384. package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +1 -1
  385. package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +1 -1
  386. package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +1 -1
  387. package/dist/domains/workspace/components/workspace-markdown-preview.es.js +1 -1
  388. package/dist/{filter-bar-time-range-mg9JeYue.js → filter-bar-time-range-qlV8p7hp.js} +2 -2
  389. package/dist/{filter-bar-time-range-mg9JeYue.js.map → filter-bar-time-range-qlV8p7hp.js.map} +1 -1
  390. package/dist/{filter-bar-time-range-BA-pXMlo.cjs → filter-bar-time-range-zdM024JD.cjs} +2 -2
  391. package/dist/{filter-bar-time-range-BA-pXMlo.cjs.map → filter-bar-time-range-zdM024JD.cjs.map} +1 -1
  392. package/dist/lib/form/dynamic-form.cjs.js +2 -2
  393. package/dist/lib/form/dynamic-form.es.js +2 -2
  394. package/dist/lib/form/json-draft.cjs.js +1 -1
  395. package/dist/lib/form/json-draft.es.js +1 -1
  396. package/dist/lib/form/zod-provider.cjs.js +1 -1
  397. package/dist/lib/form/zod-provider.es.js +1 -1
  398. package/dist/{span-payload-primitives-B3RdahsC.js → span-payload-primitives-CKKIAVPJ.js} +4 -4
  399. package/dist/{span-payload-primitives-B3RdahsC.js.map → span-payload-primitives-CKKIAVPJ.js.map} +1 -1
  400. package/dist/{span-payload-primitives-_2d-pAOD.cjs → span-payload-primitives-D4tHWN2W.cjs} +4 -4
  401. package/dist/{span-payload-primitives-_2d-pAOD.cjs.map → span-payload-primitives-D4tHWN2W.cjs.map} +1 -1
  402. package/dist/src/domains/chat/knowledge/knowledge-links.d.ts +32 -4
  403. package/dist/src/domains/chat/knowledge/pinned-knowledge-data.d.ts +2 -0
  404. package/dist/src/domains/chat/tools/badges/knowledge-body-range.d.ts +12 -0
  405. package/dist/src/domains/chat/tools/badges/knowledge-tool-badge.d.ts +5 -2
  406. package/dist/src/domains/chat/tools/badges/mcp-input-request-badge.d.ts +18 -0
  407. package/dist/src/domains/chat/tools/badges/tool-badge.d.ts +4 -1
  408. package/dist/src/domains/chat/tools/badges/use-deferred-input-request.d.ts +44 -0
  409. package/dist/src/domains/chat/tools/badges/use-mcp-task-progress.d.ts +6 -1
  410. package/dist/src/domains/chat/tools/connect-prompt-tool.d.ts +10 -1
  411. package/dist/src/domains/chat/tools/mcp-input-request-tool.d.ts +18 -0
  412. package/dist/src/domains/chat/tools/mcp-input-request.d.ts +40 -0
  413. package/dist/src/domains/chat/tools/tool-card-kind.d.ts +4 -2
  414. package/dist/src/domains/chat/tools/tool-card.d.ts +1 -1
  415. package/dist/src/domains/connect/types.d.ts +16 -0
  416. package/dist/src/domains/dashboards/components/dashboard-renderer.d.ts +4 -2
  417. package/dist/src/domains/dashboards/hooks/use-widget-views.d.ts +4 -3
  418. package/dist/src/domains/dashboards/index.d.ts +1 -1
  419. package/dist/src/domains/dashboards/kinds/scores/scores-widget.d.ts +1 -1
  420. package/dist/src/domains/dashboards/lib/chrome.d.ts +6 -4
  421. package/dist/src/domains/dashboards/widget-kind.d.ts +12 -0
  422. package/dist/src/domains/knowledge/components/KnowledgePageCard.d.ts +23 -0
  423. package/dist/src/domains/knowledge/components/KnowledgePageExplorer.d.ts +29 -0
  424. package/dist/src/domains/knowledge/components/KnowledgePageGraph.d.ts +27 -1
  425. package/dist/src/domains/knowledge/components/KnowledgePageTree.d.ts +2 -1
  426. package/dist/src/domains/knowledge/lib/circleText.d.ts +2 -0
  427. package/dist/src/domains/knowledge/lib/fitViewport.d.ts +67 -0
  428. package/dist/src/domains/knowledge/lib/graphShape.d.ts +131 -0
  429. package/dist/src/domains/knowledge/lib/linkCountsText.d.ts +5 -0
  430. package/dist/src/domains/knowledge/lib/pageAddress.d.ts +5 -0
  431. package/dist/src/domains/knowledge/lib/pageGraph.d.ts +4 -4
  432. package/dist/src/domains/knowledge/lib/pageRefs.d.ts +15 -0
  433. package/dist/src/domains/knowledge/lib/pageTree.d.ts +2 -0
  434. package/dist/src/domains/knowledge/lib/remarkKnowledgeLinks.d.ts +13 -0
  435. package/dist/src/domains/knowledge/lib/tooltipSide.d.ts +40 -0
  436. package/dist/src/domains/knowledge/lib/useLeavingNodes.d.ts +14 -0
  437. package/dist/src/domains/knowledge/lib/useStableWhile.d.ts +5 -0
  438. package/dist/src/domains/knowledge/pageTypes.d.ts +6 -1
  439. package/dist/src/ds/components/DateTimeRangePicker/date-time-range-picker.d.ts +12 -1
  440. package/dist/src/ds/components/MarkdownRenderer/markdown-renderer.d.ts +8 -1
  441. package/dist/src/ds/components/MetricsCard/metrics-card-headline.d.ts +1 -1
  442. package/dist/src/ds/components/MetricsLineChart/metrics-line-chart.d.ts +8 -0
  443. package/dist/src/ds/components/ai/tool-call/tool-phrases.d.ts +6 -0
  444. package/dist/style.css +73 -2
  445. package/dist/{tool-approval-1qiB4hhG.cjs → tool-approval-CJvPDL7D.cjs} +4 -4
  446. package/dist/{tool-approval-1qiB4hhG.cjs.map → tool-approval-CJvPDL7D.cjs.map} +1 -1
  447. package/dist/{tool-approval-B6MFcaKV.js → tool-approval-DyN11vFA.js} +4 -4
  448. package/dist/{tool-approval-B6MFcaKV.js.map → tool-approval-DyN11vFA.js.map} +1 -1
  449. package/dist/{tool-call-Bu66PkD-.cjs → tool-call-DBn14X-3.cjs} +9 -3
  450. package/dist/{tool-call-Bu66PkD-.cjs.map → tool-call-DBn14X-3.cjs.map} +1 -1
  451. package/dist/{tool-call-Ch9-jjXU.js → tool-call-Dsj43lvJ.js} +9 -3
  452. package/dist/{tool-call-Ch9-jjXU.js.map → tool-call-Dsj43lvJ.js.map} +1 -1
  453. package/dist/{tool-card-DrqPZfPQ.cjs → tool-card-BOLXeKIp.cjs} +167 -126
  454. package/dist/tool-card-BOLXeKIp.cjs.map +1 -0
  455. package/dist/{tool-card-sO6P2Qj4.js → tool-card-HZ5bm7ue.js} +168 -127
  456. package/dist/tool-card-HZ5bm7ue.js.map +1 -0
  457. package/dist/{tool-presentation-DvCsb_kz.js → tool-presentation-CvibOP1J.js} +6 -1
  458. package/dist/tool-presentation-CvibOP1J.js.map +1 -0
  459. package/dist/{tool-presentation-CQlDEwgS.cjs → tool-presentation-D6nzVruN.cjs} +6 -1
  460. package/dist/tool-presentation-D6nzVruN.cjs.map +1 -0
  461. package/package.json +11 -11
  462. package/dist/MarkdownRenderer-2GOXQJEv.js.map +0 -1
  463. package/dist/MarkdownRenderer-CB8Z_CHc.cjs.map +0 -1
  464. package/dist/MetricsCard-CEB-f2sv.cjs.map +0 -1
  465. package/dist/MetricsCard-M8awJ2B_.js.map +0 -1
  466. package/dist/MetricsLineChart-BhHoduO0.js.map +0 -1
  467. package/dist/MetricsLineChart-CjBm4IXu.cjs.map +0 -1
  468. package/dist/date-time-range-picker-CTt7Od0P.cjs.map +0 -1
  469. package/dist/date-time-range-picker-DKh1K9Iy.js.map +0 -1
  470. package/dist/domains/knowledge/lib/pageLayout.cjs.js +0 -49
  471. package/dist/domains/knowledge/lib/pageLayout.cjs.js.map +0 -1
  472. package/dist/domains/knowledge/lib/pageLayout.d.ts +0 -1
  473. package/dist/domains/knowledge/lib/pageLayout.es.js +0 -48
  474. package/dist/domains/knowledge/lib/pageLayout.es.js.map +0 -1
  475. package/dist/src/domains/knowledge/lib/pageLayout.d.ts +0 -24
  476. package/dist/tool-card-DrqPZfPQ.cjs.map +0 -1
  477. package/dist/tool-card-sO6P2Qj4.js.map +0 -1
  478. package/dist/tool-presentation-CQlDEwgS.cjs.map +0 -1
  479. package/dist/tool-presentation-DvCsb_kz.js.map +0 -1
@@ -3,13 +3,13 @@ const require_domains_metrics_lib_chart_format = require("../../lib/chart-format
3
3
  const require_domains_metrics_lib_metrics_buckets = require("../../lib/metrics-buckets.cjs.js");
4
4
  const require_domains_metrics_lib_trace_aggregate = require("../../lib/trace-aggregate.cjs.js");
5
5
  const require_domains_metrics_hooks_use_metrics_trace_aggregate = require("../../hooks/use-metrics-trace-aggregate.cjs.js");
6
- const require_MetricsCard = require("../../../../MetricsCard-CEB-f2sv.cjs");
6
+ const require_MetricsCard = require("../../../../MetricsCard-BEwiS7Pe.cjs");
7
7
  const require_domains_metrics_components_chart_area = require("../chart-area.cjs.js");
8
8
  const require_domains_metrics_components_chart_card = require("../chart-card.cjs.js");
9
9
  const require_domains_metrics_components_chart_card_error = require("../chart-card-error.cjs.js");
10
10
  const require_domains_metrics_lib_chart_axis = require("../../lib/chart-axis.cjs.js");
11
11
  const require_domains_metrics_lib_chart_colors = require("../../lib/chart-colors.cjs.js");
12
- const require_MetricsLineChart = require("../../../../MetricsLineChart-CjBm4IXu.cjs");
12
+ const require_MetricsLineChart = require("../../../../MetricsLineChart-tZxsauau.cjs");
13
13
  let react_jsx_runtime = require("react/jsx-runtime");
14
14
  // src/domains/metrics/components/distinct-ids/distinct-ids-chart.tsx
15
15
  /** Most apps set resource and thread ids (through memory); few set user and session ids. */
@@ -100,6 +100,7 @@ function DistinctIdsChart({ scope, onTimeRangeClick }) {
100
100
  isEmpty: !isLoading && shown.length === 0,
101
101
  emptyMessage: "No traces in this range set a resource, thread, user or session id.",
102
102
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_MetricsLineChart.MetricsLineChart, {
103
+ lineStyle: "thin",
103
104
  data: chart,
104
105
  series: lines,
105
106
  height: "fill",
@@ -1 +1 @@
1
- {"version":3,"file":"distinct-ids-chart.cjs.js","names":["CHART_COLORS","useMetricsTraceAggregate","bucketTraceAggregateRows","intervalHours","formatCount","MetricsCard","MetricsLineChartLegend","ChartCard","ChartCardError","ChartArea","MetricsLineChart","formatAxisCount","bucketWindow","EDGE_BUCKET_AXIS"],"sources":["../../../../../src/domains/metrics/components/distinct-ids/distinct-ids-chart.tsx"],"sourcesContent":["import type { AggregateTracesArgs } from '@mastra/client-js';\nimport type { DrilldownScope } from '../../drilldown';\nimport { useMetricsTraceAggregate } from '../../hooks/use-metrics-trace-aggregate';\nimport type { TraceAggregateScope } from '../../hooks/use-metrics-trace-aggregate';\nimport { EDGE_BUCKET_AXIS } from '../../lib/chart-axis';\nimport { CHART_COLORS } from '../../lib/chart-colors';\nimport { formatAxisCount, formatCount } from '../../lib/chart-format';\nimport { bucketWindow, intervalHours } from '../../lib/metrics-buckets';\nimport { bucketTraceAggregateRows, TRACE_AGGREGATE_SERIES_LIMIT } from '../../lib/trace-aggregate';\nimport type { TraceAggregateRow } from '../../lib/trace-aggregate';\nimport { ChartArea } from '../chart-area';\nimport { ChartCard } from '../chart-card';\nimport { ChartCardError } from '../chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport { MetricsLineChart, MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\n\n/** Most apps set resource and thread ids (through memory); few set user and session ids. */\nconst IDS = [\n { measure: 'countDistinct.resourceId', dataKey: 'resources', label: 'Resources', color: CHART_COLORS.sky },\n { measure: 'countDistinct.threadId', dataKey: 'threads', label: 'Threads', color: CHART_COLORS.green },\n { measure: 'countDistinct.userId', dataKey: 'users', label: 'Users', color: CHART_COLORS.violet },\n { measure: 'countDistinct.sessionId', dataKey: 'sessions', label: 'Sessions', color: CHART_COLORS.teal },\n] as const;\n\ntype Id = (typeof IDS)[number];\n\nconst MEASURES: AggregateTracesArgs['measures'] = IDS.map(id => id.measure);\n\nexport const DISTINCT_IDS_TITLE = 'Resources and threads';\n\nexport type DistinctIdsChartProps = {\n scope: TraceAggregateScope;\n /** Called with the time range of the clicked bucket. */\n onTimeRangeClick?: (scope: DrilldownScope) => void;\n};\n\nfunction count(row: TraceAggregateRow | undefined, id: Id) {\n return row?.measures[id.measure] ?? 0;\n}\n\n/** Distinct ids per bucket, with range totals from a second request. */\nexport function DistinctIdsChart({ scope, onTimeRangeClick }: DistinctIdsChartProps) {\n const series = useMetricsTraceAggregate({\n timeRange: scope.timeRange,\n where: scope.where,\n interval: scope.interval,\n measures: MEASURES,\n limit: TRACE_AGGREGATE_SERIES_LIMIT,\n });\n // Bucket counts can't be added up: an id active in two buckets would count twice.\n const totals = useMetricsTraceAggregate({ timeRange: scope.timeRange, where: scope.where, measures: MEASURES });\n\n const total = totals.data?.rows[0];\n // Only the ids this project sets get a line; the rest would sit flat at zero.\n const shown = IDS.filter(id => count(total, id) > 0);\n const lines: MetricsLineChartSeries[] = shown.map((id, i) => ({\n dataKey: id.dataKey,\n label: id.label,\n color: id.color,\n emphasis: i === 0,\n }));\n const chart = bucketTraceAggregateRows(series.data?.rows ?? [], scope.window).map(({ rows, ...labels }) => ({\n ...labels,\n ...Object.fromEntries(shown.map(id => [id.dataKey, count(rows[0], id)])),\n }));\n const step = intervalHours(scope.interval === '1d' ? '1d' : '1h');\n const error = series.error ?? totals.error;\n const isLoading = series.isLoading || totals.isLoading;\n\n const layout = {\n title: DISTINCT_IDS_TITLE,\n // Each id's range total, marked like its line: they count different things, so no one sum.\n total: shown.map(id => ({ label: id.label, value: formatCount(count(total, id)), color: id.color })),\n isLoading: totals.isLoading,\n toolbar: lines.length > 0 && (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={lines} />\n </MetricsCard.Toolbar>\n ),\n };\n\n if (error) {\n return (\n <ChartCard {...layout}>\n <ChartCardError\n error={error}\n onRetry={() => {\n if (series.error) void series.refetch();\n if (totals.error) void totals.refetch();\n }}\n />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard {...layout} isUpdating={series.isPlaceholderData || totals.isPlaceholderData}>\n <ChartArea\n isEmpty={!isLoading && shown.length === 0}\n emptyMessage=\"No traces in this range set a resource, thread, user or session id.\"\n >\n <MetricsLineChart\n data={chart}\n series={lines}\n height=\"fill\"\n xLabels=\"edges\"\n showLegend={false}\n valueFormatter={formatCount}\n axisFormatter={formatAxisCount}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick({ window: bucketWindow(Number(row.ts), step) }))}\n isLoading={isLoading}\n {...EDGE_BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,IAAM,MAAM;CACV;EAAE,SAAS;EAA4B,SAAS;EAAa,OAAO;EAAa,OAAOA,yCAAAA,aAAa;CAAI;CACzG;EAAE,SAAS;EAA0B,SAAS;EAAW,OAAO;EAAW,OAAOA,yCAAAA,aAAa;CAAM;CACrG;EAAE,SAAS;EAAwB,SAAS;EAAS,OAAO;EAAS,OAAOA,yCAAAA,aAAa;CAAO;CAChG;EAAE,SAAS;EAA2B,SAAS;EAAY,OAAO;EAAY,OAAOA,yCAAAA,aAAa;CAAK;AACzG;AAIA,IAAM,WAA4C,IAAI,KAAI,OAAM,GAAG,OAAO;AAE1E,IAAa,qBAAqB;AAQlC,SAAS,MAAM,KAAoC,IAAQ;CACzD,OAAO,KAAK,SAAS,GAAG,YAAY;AACtC;;AAGA,SAAgB,iBAAiB,EAAE,OAAO,oBAA2C;CACnF,MAAM,SAASC,0DAAAA,yBAAyB;EACtC,WAAW,MAAM;EACjB,OAAO,MAAM;EACb,UAAU,MAAM;EAChB,UAAU;EACV,OAAA;CACF,CAAC;CAED,MAAM,SAASA,0DAAAA,yBAAyB;EAAE,WAAW,MAAM;EAAW,OAAO,MAAM;EAAO,UAAU;CAAS,CAAC;CAE9G,MAAM,QAAQ,OAAO,MAAM,KAAK;CAEhC,MAAM,QAAQ,IAAI,QAAO,OAAM,MAAM,OAAO,EAAE,IAAI,CAAC;CACnD,MAAM,QAAkC,MAAM,KAAK,IAAI,OAAO;EAC5D,SAAS,GAAG;EACZ,OAAO,GAAG;EACV,OAAO,GAAG;EACV,UAAU,MAAM;CAClB,EAAE;CACF,MAAM,QAAQC,4CAAAA,yBAAyB,OAAO,MAAM,QAAQ,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc;EAC1G,GAAG;EACH,GAAG,OAAO,YAAY,MAAM,KAAI,OAAM,CAAC,GAAG,SAAS,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;CACzE,EAAE;CACF,MAAM,OAAOC,4CAAAA,cAAc,MAAM,aAAa,OAAO,OAAO,IAAI;CAChE,MAAM,QAAQ,OAAO,SAAS,OAAO;CACrC,MAAM,YAAY,OAAO,aAAa,OAAO;CAE7C,MAAM,SAAS;EACb,OAAO;EAEP,OAAO,MAAM,KAAI,QAAO;GAAE,OAAO,GAAG;GAAO,OAAOC,yCAAAA,YAAY,MAAM,OAAO,EAAE,CAAC;GAAG,OAAO,GAAG;EAAM,EAAE;EACnG,WAAW,OAAO;EAClB,SAAS,MAAM,SAAS,KACtB,iBAAA,GAAA,kBAAA,IAAA,CAACC,oBAAAA,YAAY,SAAb,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,wBAAD,EAAwB,QAAQ,MAAQ,CAAA,EACrB,CAAA;CAEzB;CAEA,IAAI,OACF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,8CAAAA,WAAD;EAAW,GAAI;EACb,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,oDAAAA,gBAAD;GACS;GACP,eAAe;IACb,IAAI,OAAO,OAAO,OAAY,QAAQ;IACtC,IAAI,OAAO,OAAO,OAAY,QAAQ;GACxC;EACD,CAAA;CACQ,CAAA;CAIf,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,8CAAAA,WAAD;EAAW,GAAI;EAAQ,YAAY,OAAO,qBAAqB,OAAO;EACpE,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACE,8CAAAA,WAAD;GACE,SAAS,CAAC,aAAa,MAAM,WAAW;GACxC,cAAa;GAEb,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,kBAAD;IACE,MAAM;IACN,QAAQ;IACR,QAAO;IACP,SAAQ;IACR,YAAY;IACZ,gBAAgBN,yCAAAA;IAChB,eAAeO,yCAAAA;IACf,eAAe,sBAAqB,QAAO,iBAAiB,EAAE,QAAQC,4CAAAA,aAAa,OAAO,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;IAC/F;IACX,GAAIC,uCAAAA;GACL,CAAA;EACQ,CAAA;CACF,CAAA;AAEf"}
1
+ {"version":3,"file":"distinct-ids-chart.cjs.js","names":["CHART_COLORS","useMetricsTraceAggregate","bucketTraceAggregateRows","intervalHours","formatCount","MetricsCard","MetricsLineChartLegend","ChartCard","ChartCardError","ChartArea","MetricsLineChart","formatAxisCount","bucketWindow","EDGE_BUCKET_AXIS"],"sources":["../../../../../src/domains/metrics/components/distinct-ids/distinct-ids-chart.tsx"],"sourcesContent":["import type { AggregateTracesArgs } from '@mastra/client-js';\nimport type { DrilldownScope } from '../../drilldown';\nimport { useMetricsTraceAggregate } from '../../hooks/use-metrics-trace-aggregate';\nimport type { TraceAggregateScope } from '../../hooks/use-metrics-trace-aggregate';\nimport { EDGE_BUCKET_AXIS } from '../../lib/chart-axis';\nimport { CHART_COLORS } from '../../lib/chart-colors';\nimport { formatAxisCount, formatCount } from '../../lib/chart-format';\nimport { bucketWindow, intervalHours } from '../../lib/metrics-buckets';\nimport { bucketTraceAggregateRows, TRACE_AGGREGATE_SERIES_LIMIT } from '../../lib/trace-aggregate';\nimport type { TraceAggregateRow } from '../../lib/trace-aggregate';\nimport { ChartArea } from '../chart-area';\nimport { ChartCard } from '../chart-card';\nimport { ChartCardError } from '../chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport { MetricsLineChart, MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\n\n/** Most apps set resource and thread ids (through memory); few set user and session ids. */\nconst IDS = [\n { measure: 'countDistinct.resourceId', dataKey: 'resources', label: 'Resources', color: CHART_COLORS.sky },\n { measure: 'countDistinct.threadId', dataKey: 'threads', label: 'Threads', color: CHART_COLORS.green },\n { measure: 'countDistinct.userId', dataKey: 'users', label: 'Users', color: CHART_COLORS.violet },\n { measure: 'countDistinct.sessionId', dataKey: 'sessions', label: 'Sessions', color: CHART_COLORS.teal },\n] as const;\n\ntype Id = (typeof IDS)[number];\n\nconst MEASURES: AggregateTracesArgs['measures'] = IDS.map(id => id.measure);\n\nexport const DISTINCT_IDS_TITLE = 'Resources and threads';\n\nexport type DistinctIdsChartProps = {\n scope: TraceAggregateScope;\n /** Called with the time range of the clicked bucket. */\n onTimeRangeClick?: (scope: DrilldownScope) => void;\n};\n\nfunction count(row: TraceAggregateRow | undefined, id: Id) {\n return row?.measures[id.measure] ?? 0;\n}\n\n/** Distinct ids per bucket, with range totals from a second request. */\nexport function DistinctIdsChart({ scope, onTimeRangeClick }: DistinctIdsChartProps) {\n const series = useMetricsTraceAggregate({\n timeRange: scope.timeRange,\n where: scope.where,\n interval: scope.interval,\n measures: MEASURES,\n limit: TRACE_AGGREGATE_SERIES_LIMIT,\n });\n // Bucket counts can't be added up: an id active in two buckets would count twice.\n const totals = useMetricsTraceAggregate({ timeRange: scope.timeRange, where: scope.where, measures: MEASURES });\n\n const total = totals.data?.rows[0];\n // Only the ids this project sets get a line; the rest would sit flat at zero.\n const shown = IDS.filter(id => count(total, id) > 0);\n const lines: MetricsLineChartSeries[] = shown.map((id, i) => ({\n dataKey: id.dataKey,\n label: id.label,\n color: id.color,\n emphasis: i === 0,\n }));\n const chart = bucketTraceAggregateRows(series.data?.rows ?? [], scope.window).map(({ rows, ...labels }) => ({\n ...labels,\n ...Object.fromEntries(shown.map(id => [id.dataKey, count(rows[0], id)])),\n }));\n const step = intervalHours(scope.interval === '1d' ? '1d' : '1h');\n const error = series.error ?? totals.error;\n const isLoading = series.isLoading || totals.isLoading;\n\n const layout = {\n title: DISTINCT_IDS_TITLE,\n // Each id's range total, marked like its line: they count different things, so no one sum.\n total: shown.map(id => ({ label: id.label, value: formatCount(count(total, id)), color: id.color })),\n isLoading: totals.isLoading,\n toolbar: lines.length > 0 && (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={lines} />\n </MetricsCard.Toolbar>\n ),\n };\n\n if (error) {\n return (\n <ChartCard {...layout}>\n <ChartCardError\n error={error}\n onRetry={() => {\n if (series.error) void series.refetch();\n if (totals.error) void totals.refetch();\n }}\n />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard {...layout} isUpdating={series.isPlaceholderData || totals.isPlaceholderData}>\n <ChartArea\n isEmpty={!isLoading && shown.length === 0}\n emptyMessage=\"No traces in this range set a resource, thread, user or session id.\"\n >\n <MetricsLineChart\n lineStyle=\"thin\"\n data={chart}\n series={lines}\n height=\"fill\"\n xLabels=\"edges\"\n showLegend={false}\n valueFormatter={formatCount}\n axisFormatter={formatAxisCount}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick({ window: bucketWindow(Number(row.ts), step) }))}\n isLoading={isLoading}\n {...EDGE_BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,IAAM,MAAM;CACV;EAAE,SAAS;EAA4B,SAAS;EAAa,OAAO;EAAa,OAAOA,yCAAAA,aAAa;CAAI;CACzG;EAAE,SAAS;EAA0B,SAAS;EAAW,OAAO;EAAW,OAAOA,yCAAAA,aAAa;CAAM;CACrG;EAAE,SAAS;EAAwB,SAAS;EAAS,OAAO;EAAS,OAAOA,yCAAAA,aAAa;CAAO;CAChG;EAAE,SAAS;EAA2B,SAAS;EAAY,OAAO;EAAY,OAAOA,yCAAAA,aAAa;CAAK;AACzG;AAIA,IAAM,WAA4C,IAAI,KAAI,OAAM,GAAG,OAAO;AAE1E,IAAa,qBAAqB;AAQlC,SAAS,MAAM,KAAoC,IAAQ;CACzD,OAAO,KAAK,SAAS,GAAG,YAAY;AACtC;;AAGA,SAAgB,iBAAiB,EAAE,OAAO,oBAA2C;CACnF,MAAM,SAASC,0DAAAA,yBAAyB;EACtC,WAAW,MAAM;EACjB,OAAO,MAAM;EACb,UAAU,MAAM;EAChB,UAAU;EACV,OAAA;CACF,CAAC;CAED,MAAM,SAASA,0DAAAA,yBAAyB;EAAE,WAAW,MAAM;EAAW,OAAO,MAAM;EAAO,UAAU;CAAS,CAAC;CAE9G,MAAM,QAAQ,OAAO,MAAM,KAAK;CAEhC,MAAM,QAAQ,IAAI,QAAO,OAAM,MAAM,OAAO,EAAE,IAAI,CAAC;CACnD,MAAM,QAAkC,MAAM,KAAK,IAAI,OAAO;EAC5D,SAAS,GAAG;EACZ,OAAO,GAAG;EACV,OAAO,GAAG;EACV,UAAU,MAAM;CAClB,EAAE;CACF,MAAM,QAAQC,4CAAAA,yBAAyB,OAAO,MAAM,QAAQ,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc;EAC1G,GAAG;EACH,GAAG,OAAO,YAAY,MAAM,KAAI,OAAM,CAAC,GAAG,SAAS,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;CACzE,EAAE;CACF,MAAM,OAAOC,4CAAAA,cAAc,MAAM,aAAa,OAAO,OAAO,IAAI;CAChE,MAAM,QAAQ,OAAO,SAAS,OAAO;CACrC,MAAM,YAAY,OAAO,aAAa,OAAO;CAE7C,MAAM,SAAS;EACb,OAAO;EAEP,OAAO,MAAM,KAAI,QAAO;GAAE,OAAO,GAAG;GAAO,OAAOC,yCAAAA,YAAY,MAAM,OAAO,EAAE,CAAC;GAAG,OAAO,GAAG;EAAM,EAAE;EACnG,WAAW,OAAO;EAClB,SAAS,MAAM,SAAS,KACtB,iBAAA,GAAA,kBAAA,IAAA,CAACC,oBAAAA,YAAY,SAAb,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,wBAAD,EAAwB,QAAQ,MAAQ,CAAA,EACrB,CAAA;CAEzB;CAEA,IAAI,OACF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,8CAAAA,WAAD;EAAW,GAAI;EACb,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,oDAAAA,gBAAD;GACS;GACP,eAAe;IACb,IAAI,OAAO,OAAO,OAAY,QAAQ;IACtC,IAAI,OAAO,OAAO,OAAY,QAAQ;GACxC;EACD,CAAA;CACQ,CAAA;CAIf,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,8CAAAA,WAAD;EAAW,GAAI;EAAQ,YAAY,OAAO,qBAAqB,OAAO;EACpE,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACE,8CAAAA,WAAD;GACE,SAAS,CAAC,aAAa,MAAM,WAAW;GACxC,cAAa;GAEb,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,kBAAD;IACE,WAAU;IACV,MAAM;IACN,QAAQ;IACR,QAAO;IACP,SAAQ;IACR,YAAY;IACZ,gBAAgBN,yCAAAA;IAChB,eAAeO,yCAAAA;IACf,eAAe,sBAAqB,QAAO,iBAAiB,EAAE,QAAQC,4CAAAA,aAAa,OAAO,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;IAC/F;IACX,GAAIC,uCAAAA;GACL,CAAA;EACQ,CAAA;CACF,CAAA;AAEf"}
@@ -2,13 +2,13 @@ import { formatAxisCount, formatCount } from "../../lib/chart-format.es.js";
2
2
  import { bucketWindow, intervalHours } from "../../lib/metrics-buckets.es.js";
3
3
  import { bucketTraceAggregateRows } from "../../lib/trace-aggregate.es.js";
4
4
  import { useMetricsTraceAggregate } from "../../hooks/use-metrics-trace-aggregate.es.js";
5
- import { t as MetricsCard } from "../../../../MetricsCard-M8awJ2B_.js";
5
+ import { t as MetricsCard } from "../../../../MetricsCard-ua6C6b8a.js";
6
6
  import { ChartArea } from "../chart-area.es.js";
7
7
  import { ChartCard } from "../chart-card.es.js";
8
8
  import { ChartCardError } from "../chart-card-error.es.js";
9
9
  import { EDGE_BUCKET_AXIS } from "../../lib/chart-axis.es.js";
10
10
  import { CHART_COLORS } from "../../lib/chart-colors.es.js";
11
- import { r as MetricsLineChartLegend, t as MetricsLineChart } from "../../../../MetricsLineChart-BhHoduO0.js";
11
+ import { r as MetricsLineChartLegend, t as MetricsLineChart } from "../../../../MetricsLineChart-4SwxBbQx.js";
12
12
  import { jsx } from "react/jsx-runtime";
13
13
  // src/domains/metrics/components/distinct-ids/distinct-ids-chart.tsx
14
14
  /** Most apps set resource and thread ids (through memory); few set user and session ids. */
@@ -99,6 +99,7 @@ function DistinctIdsChart({ scope, onTimeRangeClick }) {
99
99
  isEmpty: !isLoading && shown.length === 0,
100
100
  emptyMessage: "No traces in this range set a resource, thread, user or session id.",
101
101
  children: /* @__PURE__ */ jsx(MetricsLineChart, {
102
+ lineStyle: "thin",
102
103
  data: chart,
103
104
  series: lines,
104
105
  height: "fill",
@@ -1 +1 @@
1
- {"version":3,"file":"distinct-ids-chart.es.js","names":[],"sources":["../../../../../src/domains/metrics/components/distinct-ids/distinct-ids-chart.tsx"],"sourcesContent":["import type { AggregateTracesArgs } from '@mastra/client-js';\nimport type { DrilldownScope } from '../../drilldown';\nimport { useMetricsTraceAggregate } from '../../hooks/use-metrics-trace-aggregate';\nimport type { TraceAggregateScope } from '../../hooks/use-metrics-trace-aggregate';\nimport { EDGE_BUCKET_AXIS } from '../../lib/chart-axis';\nimport { CHART_COLORS } from '../../lib/chart-colors';\nimport { formatAxisCount, formatCount } from '../../lib/chart-format';\nimport { bucketWindow, intervalHours } from '../../lib/metrics-buckets';\nimport { bucketTraceAggregateRows, TRACE_AGGREGATE_SERIES_LIMIT } from '../../lib/trace-aggregate';\nimport type { TraceAggregateRow } from '../../lib/trace-aggregate';\nimport { ChartArea } from '../chart-area';\nimport { ChartCard } from '../chart-card';\nimport { ChartCardError } from '../chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport { MetricsLineChart, MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\n\n/** Most apps set resource and thread ids (through memory); few set user and session ids. */\nconst IDS = [\n { measure: 'countDistinct.resourceId', dataKey: 'resources', label: 'Resources', color: CHART_COLORS.sky },\n { measure: 'countDistinct.threadId', dataKey: 'threads', label: 'Threads', color: CHART_COLORS.green },\n { measure: 'countDistinct.userId', dataKey: 'users', label: 'Users', color: CHART_COLORS.violet },\n { measure: 'countDistinct.sessionId', dataKey: 'sessions', label: 'Sessions', color: CHART_COLORS.teal },\n] as const;\n\ntype Id = (typeof IDS)[number];\n\nconst MEASURES: AggregateTracesArgs['measures'] = IDS.map(id => id.measure);\n\nexport const DISTINCT_IDS_TITLE = 'Resources and threads';\n\nexport type DistinctIdsChartProps = {\n scope: TraceAggregateScope;\n /** Called with the time range of the clicked bucket. */\n onTimeRangeClick?: (scope: DrilldownScope) => void;\n};\n\nfunction count(row: TraceAggregateRow | undefined, id: Id) {\n return row?.measures[id.measure] ?? 0;\n}\n\n/** Distinct ids per bucket, with range totals from a second request. */\nexport function DistinctIdsChart({ scope, onTimeRangeClick }: DistinctIdsChartProps) {\n const series = useMetricsTraceAggregate({\n timeRange: scope.timeRange,\n where: scope.where,\n interval: scope.interval,\n measures: MEASURES,\n limit: TRACE_AGGREGATE_SERIES_LIMIT,\n });\n // Bucket counts can't be added up: an id active in two buckets would count twice.\n const totals = useMetricsTraceAggregate({ timeRange: scope.timeRange, where: scope.where, measures: MEASURES });\n\n const total = totals.data?.rows[0];\n // Only the ids this project sets get a line; the rest would sit flat at zero.\n const shown = IDS.filter(id => count(total, id) > 0);\n const lines: MetricsLineChartSeries[] = shown.map((id, i) => ({\n dataKey: id.dataKey,\n label: id.label,\n color: id.color,\n emphasis: i === 0,\n }));\n const chart = bucketTraceAggregateRows(series.data?.rows ?? [], scope.window).map(({ rows, ...labels }) => ({\n ...labels,\n ...Object.fromEntries(shown.map(id => [id.dataKey, count(rows[0], id)])),\n }));\n const step = intervalHours(scope.interval === '1d' ? '1d' : '1h');\n const error = series.error ?? totals.error;\n const isLoading = series.isLoading || totals.isLoading;\n\n const layout = {\n title: DISTINCT_IDS_TITLE,\n // Each id's range total, marked like its line: they count different things, so no one sum.\n total: shown.map(id => ({ label: id.label, value: formatCount(count(total, id)), color: id.color })),\n isLoading: totals.isLoading,\n toolbar: lines.length > 0 && (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={lines} />\n </MetricsCard.Toolbar>\n ),\n };\n\n if (error) {\n return (\n <ChartCard {...layout}>\n <ChartCardError\n error={error}\n onRetry={() => {\n if (series.error) void series.refetch();\n if (totals.error) void totals.refetch();\n }}\n />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard {...layout} isUpdating={series.isPlaceholderData || totals.isPlaceholderData}>\n <ChartArea\n isEmpty={!isLoading && shown.length === 0}\n emptyMessage=\"No traces in this range set a resource, thread, user or session id.\"\n >\n <MetricsLineChart\n data={chart}\n series={lines}\n height=\"fill\"\n xLabels=\"edges\"\n showLegend={false}\n valueFormatter={formatCount}\n axisFormatter={formatAxisCount}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick({ window: bucketWindow(Number(row.ts), step) }))}\n isLoading={isLoading}\n {...EDGE_BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAkBA,IAAM,MAAM;CACV;EAAE,SAAS;EAA4B,SAAS;EAAa,OAAO;EAAa,OAAO,aAAa;CAAI;CACzG;EAAE,SAAS;EAA0B,SAAS;EAAW,OAAO;EAAW,OAAO,aAAa;CAAM;CACrG;EAAE,SAAS;EAAwB,SAAS;EAAS,OAAO;EAAS,OAAO,aAAa;CAAO;CAChG;EAAE,SAAS;EAA2B,SAAS;EAAY,OAAO;EAAY,OAAO,aAAa;CAAK;AACzG;AAIA,IAAM,WAA4C,IAAI,KAAI,OAAM,GAAG,OAAO;AAE1E,IAAa,qBAAqB;AAQlC,SAAS,MAAM,KAAoC,IAAQ;CACzD,OAAO,KAAK,SAAS,GAAG,YAAY;AACtC;;AAGA,SAAgB,iBAAiB,EAAE,OAAO,oBAA2C;CACnF,MAAM,SAAS,yBAAyB;EACtC,WAAW,MAAM;EACjB,OAAO,MAAM;EACb,UAAU,MAAM;EAChB,UAAU;EACV,OAAA;CACF,CAAC;CAED,MAAM,SAAS,yBAAyB;EAAE,WAAW,MAAM;EAAW,OAAO,MAAM;EAAO,UAAU;CAAS,CAAC;CAE9G,MAAM,QAAQ,OAAO,MAAM,KAAK;CAEhC,MAAM,QAAQ,IAAI,QAAO,OAAM,MAAM,OAAO,EAAE,IAAI,CAAC;CACnD,MAAM,QAAkC,MAAM,KAAK,IAAI,OAAO;EAC5D,SAAS,GAAG;EACZ,OAAO,GAAG;EACV,OAAO,GAAG;EACV,UAAU,MAAM;CAClB,EAAE;CACF,MAAM,QAAQ,yBAAyB,OAAO,MAAM,QAAQ,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc;EAC1G,GAAG;EACH,GAAG,OAAO,YAAY,MAAM,KAAI,OAAM,CAAC,GAAG,SAAS,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;CACzE,EAAE;CACF,MAAM,OAAO,cAAc,MAAM,aAAa,OAAO,OAAO,IAAI;CAChE,MAAM,QAAQ,OAAO,SAAS,OAAO;CACrC,MAAM,YAAY,OAAO,aAAa,OAAO;CAE7C,MAAM,SAAS;EACb,OAAO;EAEP,OAAO,MAAM,KAAI,QAAO;GAAE,OAAO,GAAG;GAAO,OAAO,YAAY,MAAM,OAAO,EAAE,CAAC;GAAG,OAAO,GAAG;EAAM,EAAE;EACnG,WAAW,OAAO;EAClB,SAAS,MAAM,SAAS,KACtB,oBAAC,YAAY,SAAb,EAAA,UACE,oBAAC,wBAAD,EAAwB,QAAQ,MAAQ,CAAA,EACrB,CAAA;CAEzB;CAEA,IAAI,OACF,OACE,oBAAC,WAAD;EAAW,GAAI;EACb,UAAA,oBAAC,gBAAD;GACS;GACP,eAAe;IACb,IAAI,OAAO,OAAO,OAAY,QAAQ;IACtC,IAAI,OAAO,OAAO,OAAY,QAAQ;GACxC;EACD,CAAA;CACQ,CAAA;CAIf,OACE,oBAAC,WAAD;EAAW,GAAI;EAAQ,YAAY,OAAO,qBAAqB,OAAO;EACpE,UAAA,oBAAC,WAAD;GACE,SAAS,CAAC,aAAa,MAAM,WAAW;GACxC,cAAa;GAEb,UAAA,oBAAC,kBAAD;IACE,MAAM;IACN,QAAQ;IACR,QAAO;IACP,SAAQ;IACR,YAAY;IACZ,gBAAgB;IAChB,eAAe;IACf,eAAe,sBAAqB,QAAO,iBAAiB,EAAE,QAAQ,aAAa,OAAO,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;IAC/F;IACX,GAAI;GACL,CAAA;EACQ,CAAA;CACF,CAAA;AAEf"}
1
+ {"version":3,"file":"distinct-ids-chart.es.js","names":[],"sources":["../../../../../src/domains/metrics/components/distinct-ids/distinct-ids-chart.tsx"],"sourcesContent":["import type { AggregateTracesArgs } from '@mastra/client-js';\nimport type { DrilldownScope } from '../../drilldown';\nimport { useMetricsTraceAggregate } from '../../hooks/use-metrics-trace-aggregate';\nimport type { TraceAggregateScope } from '../../hooks/use-metrics-trace-aggregate';\nimport { EDGE_BUCKET_AXIS } from '../../lib/chart-axis';\nimport { CHART_COLORS } from '../../lib/chart-colors';\nimport { formatAxisCount, formatCount } from '../../lib/chart-format';\nimport { bucketWindow, intervalHours } from '../../lib/metrics-buckets';\nimport { bucketTraceAggregateRows, TRACE_AGGREGATE_SERIES_LIMIT } from '../../lib/trace-aggregate';\nimport type { TraceAggregateRow } from '../../lib/trace-aggregate';\nimport { ChartArea } from '../chart-area';\nimport { ChartCard } from '../chart-card';\nimport { ChartCardError } from '../chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport { MetricsLineChart, MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\n\n/** Most apps set resource and thread ids (through memory); few set user and session ids. */\nconst IDS = [\n { measure: 'countDistinct.resourceId', dataKey: 'resources', label: 'Resources', color: CHART_COLORS.sky },\n { measure: 'countDistinct.threadId', dataKey: 'threads', label: 'Threads', color: CHART_COLORS.green },\n { measure: 'countDistinct.userId', dataKey: 'users', label: 'Users', color: CHART_COLORS.violet },\n { measure: 'countDistinct.sessionId', dataKey: 'sessions', label: 'Sessions', color: CHART_COLORS.teal },\n] as const;\n\ntype Id = (typeof IDS)[number];\n\nconst MEASURES: AggregateTracesArgs['measures'] = IDS.map(id => id.measure);\n\nexport const DISTINCT_IDS_TITLE = 'Resources and threads';\n\nexport type DistinctIdsChartProps = {\n scope: TraceAggregateScope;\n /** Called with the time range of the clicked bucket. */\n onTimeRangeClick?: (scope: DrilldownScope) => void;\n};\n\nfunction count(row: TraceAggregateRow | undefined, id: Id) {\n return row?.measures[id.measure] ?? 0;\n}\n\n/** Distinct ids per bucket, with range totals from a second request. */\nexport function DistinctIdsChart({ scope, onTimeRangeClick }: DistinctIdsChartProps) {\n const series = useMetricsTraceAggregate({\n timeRange: scope.timeRange,\n where: scope.where,\n interval: scope.interval,\n measures: MEASURES,\n limit: TRACE_AGGREGATE_SERIES_LIMIT,\n });\n // Bucket counts can't be added up: an id active in two buckets would count twice.\n const totals = useMetricsTraceAggregate({ timeRange: scope.timeRange, where: scope.where, measures: MEASURES });\n\n const total = totals.data?.rows[0];\n // Only the ids this project sets get a line; the rest would sit flat at zero.\n const shown = IDS.filter(id => count(total, id) > 0);\n const lines: MetricsLineChartSeries[] = shown.map((id, i) => ({\n dataKey: id.dataKey,\n label: id.label,\n color: id.color,\n emphasis: i === 0,\n }));\n const chart = bucketTraceAggregateRows(series.data?.rows ?? [], scope.window).map(({ rows, ...labels }) => ({\n ...labels,\n ...Object.fromEntries(shown.map(id => [id.dataKey, count(rows[0], id)])),\n }));\n const step = intervalHours(scope.interval === '1d' ? '1d' : '1h');\n const error = series.error ?? totals.error;\n const isLoading = series.isLoading || totals.isLoading;\n\n const layout = {\n title: DISTINCT_IDS_TITLE,\n // Each id's range total, marked like its line: they count different things, so no one sum.\n total: shown.map(id => ({ label: id.label, value: formatCount(count(total, id)), color: id.color })),\n isLoading: totals.isLoading,\n toolbar: lines.length > 0 && (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={lines} />\n </MetricsCard.Toolbar>\n ),\n };\n\n if (error) {\n return (\n <ChartCard {...layout}>\n <ChartCardError\n error={error}\n onRetry={() => {\n if (series.error) void series.refetch();\n if (totals.error) void totals.refetch();\n }}\n />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard {...layout} isUpdating={series.isPlaceholderData || totals.isPlaceholderData}>\n <ChartArea\n isEmpty={!isLoading && shown.length === 0}\n emptyMessage=\"No traces in this range set a resource, thread, user or session id.\"\n >\n <MetricsLineChart\n lineStyle=\"thin\"\n data={chart}\n series={lines}\n height=\"fill\"\n xLabels=\"edges\"\n showLegend={false}\n valueFormatter={formatCount}\n axisFormatter={formatAxisCount}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick({ window: bucketWindow(Number(row.ts), step) }))}\n isLoading={isLoading}\n {...EDGE_BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAkBA,IAAM,MAAM;CACV;EAAE,SAAS;EAA4B,SAAS;EAAa,OAAO;EAAa,OAAO,aAAa;CAAI;CACzG;EAAE,SAAS;EAA0B,SAAS;EAAW,OAAO;EAAW,OAAO,aAAa;CAAM;CACrG;EAAE,SAAS;EAAwB,SAAS;EAAS,OAAO;EAAS,OAAO,aAAa;CAAO;CAChG;EAAE,SAAS;EAA2B,SAAS;EAAY,OAAO;EAAY,OAAO,aAAa;CAAK;AACzG;AAIA,IAAM,WAA4C,IAAI,KAAI,OAAM,GAAG,OAAO;AAE1E,IAAa,qBAAqB;AAQlC,SAAS,MAAM,KAAoC,IAAQ;CACzD,OAAO,KAAK,SAAS,GAAG,YAAY;AACtC;;AAGA,SAAgB,iBAAiB,EAAE,OAAO,oBAA2C;CACnF,MAAM,SAAS,yBAAyB;EACtC,WAAW,MAAM;EACjB,OAAO,MAAM;EACb,UAAU,MAAM;EAChB,UAAU;EACV,OAAA;CACF,CAAC;CAED,MAAM,SAAS,yBAAyB;EAAE,WAAW,MAAM;EAAW,OAAO,MAAM;EAAO,UAAU;CAAS,CAAC;CAE9G,MAAM,QAAQ,OAAO,MAAM,KAAK;CAEhC,MAAM,QAAQ,IAAI,QAAO,OAAM,MAAM,OAAO,EAAE,IAAI,CAAC;CACnD,MAAM,QAAkC,MAAM,KAAK,IAAI,OAAO;EAC5D,SAAS,GAAG;EACZ,OAAO,GAAG;EACV,OAAO,GAAG;EACV,UAAU,MAAM;CAClB,EAAE;CACF,MAAM,QAAQ,yBAAyB,OAAO,MAAM,QAAQ,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc;EAC1G,GAAG;EACH,GAAG,OAAO,YAAY,MAAM,KAAI,OAAM,CAAC,GAAG,SAAS,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;CACzE,EAAE;CACF,MAAM,OAAO,cAAc,MAAM,aAAa,OAAO,OAAO,IAAI;CAChE,MAAM,QAAQ,OAAO,SAAS,OAAO;CACrC,MAAM,YAAY,OAAO,aAAa,OAAO;CAE7C,MAAM,SAAS;EACb,OAAO;EAEP,OAAO,MAAM,KAAI,QAAO;GAAE,OAAO,GAAG;GAAO,OAAO,YAAY,MAAM,OAAO,EAAE,CAAC;GAAG,OAAO,GAAG;EAAM,EAAE;EACnG,WAAW,OAAO;EAClB,SAAS,MAAM,SAAS,KACtB,oBAAC,YAAY,SAAb,EAAA,UACE,oBAAC,wBAAD,EAAwB,QAAQ,MAAQ,CAAA,EACrB,CAAA;CAEzB;CAEA,IAAI,OACF,OACE,oBAAC,WAAD;EAAW,GAAI;EACb,UAAA,oBAAC,gBAAD;GACS;GACP,eAAe;IACb,IAAI,OAAO,OAAO,OAAY,QAAQ;IACtC,IAAI,OAAO,OAAO,OAAY,QAAQ;GACxC;EACD,CAAA;CACQ,CAAA;CAIf,OACE,oBAAC,WAAD;EAAW,GAAI;EAAQ,YAAY,OAAO,qBAAqB,OAAO;EACpE,UAAA,oBAAC,WAAD;GACE,SAAS,CAAC,aAAa,MAAM,WAAW;GACxC,cAAa;GAEb,UAAA,oBAAC,kBAAD;IACE,WAAU;IACV,MAAM;IACN,QAAQ;IACR,QAAO;IACP,SAAQ;IACR,YAAY;IACZ,gBAAgB;IAChB,eAAe;IACf,eAAe,sBAAqB,QAAO,iBAAiB,EAAE,QAAQ,aAAa,OAAO,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;IAC/F;IACX,GAAI;GACL,CAAA;EACQ,CAAA;CACF,CAAA;AAEf"}
@@ -2,13 +2,13 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_domains_metrics_lib_chart_format = require("../lib/chart-format.cjs.js");
3
3
  const require_domains_metrics_hooks_use_metrics_filters = require("../hooks/use-metrics-filters.cjs.js");
4
4
  const require_domains_metrics_lib_metrics_buckets = require("../lib/metrics-buckets.cjs.js");
5
- const require_MetricsCard = require("../../../MetricsCard-CEB-f2sv.cjs");
5
+ const require_MetricsCard = require("../../../MetricsCard-BEwiS7Pe.cjs");
6
6
  const require_domains_metrics_components_chart_area = require("./chart-area.cjs.js");
7
7
  const require_domains_metrics_components_chart_card = require("./chart-card.cjs.js");
8
8
  const require_domains_metrics_components_chart_card_error = require("./chart-card-error.cjs.js");
9
9
  const require_domains_metrics_lib_chart_axis = require("../lib/chart-axis.cjs.js");
10
10
  const require_domains_metrics_lib_chart_colors = require("../lib/chart-colors.cjs.js");
11
- const require_MetricsLineChart = require("../../../MetricsLineChart-CjBm4IXu.cjs");
11
+ const require_MetricsLineChart = require("../../../MetricsLineChart-tZxsauau.cjs");
12
12
  const require_domains_metrics_components_card_action_buttons = require("./card-action-buttons.cjs.js");
13
13
  const require_domains_metrics_hooks_use_metrics_activity = require("../hooks/use-metrics-activity.cjs.js");
14
14
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -45,6 +45,7 @@ function FailureRateCard({ onViewErrors, onTimeRangeClick, titleMenu }) {
45
45
  isEmpty: !isLoading && runs === 0,
46
46
  emptyMessage: "No agent runs in this range.",
47
47
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_MetricsLineChart.MetricsLineChart, {
48
+ lineStyle: "thin",
48
49
  data,
49
50
  series: SERIES,
50
51
  height: "fill",
@@ -1 +1 @@
1
- {"version":3,"file":"failure-rate-card.cjs.js","names":["CHART_COLORS","useMetricsActivity","useMetricsFilters","bucketPlan","OpenErrorsInLogsButton","MetricsCard","MetricsLineChartLegend","ChartCard","ChartCardError","formatPercent","ChartArea","MetricsLineChart","bucketWindow","EDGE_BUCKET_AXIS"],"sources":["../../../../src/domains/metrics/components/failure-rate-card.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsActivity } from '../hooks/use-metrics-activity';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport { EDGE_BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatPercent } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow } from '../lib/metrics-buckets';\nimport { OpenErrorsInLogsButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport type { ChartCardProps } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport { MetricsLineChart, MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\n\nconst SERIES = [{ dataKey: 'failureRate', label: 'Failed runs', color: CHART_COLORS.error }];\n\nconst axisPercent = (ratio: number) => `${Math.round(ratio * 100)}%`;\n\n/** Share of agent runs that failed, per bucket; a point opens the failed runs' traces. */\nexport type FailureRateCardProps<V extends string = string> = {\n /** Called from the \"View errors in Logs\" button. */\n onViewErrors?: () => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n /** Switches to a sibling view from the title (Agent runs uses it). */\n titleMenu?: ChartCardProps<V>['titleMenu'];\n};\n\nexport function FailureRateCard<V extends string = string>({\n onViewErrors,\n onTimeRangeClick,\n titleMenu,\n}: FailureRateCardProps<V>) {\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsActivity();\n const { timestamp } = useMetricsFilters();\n const { stepHours } = bucketPlan(timestamp.start, timestamp.end);\n const runs = data.reduce((sum, b) => sum + b.completed + b.failed, 0);\n const failed = data.reduce((sum, b) => sum + b.failed, 0);\n // With nothing failed, the axis would fall back to 0-4 (400%); a share tops out at 100%.\n const yDomain: [number, number] | undefined = failed === 0 ? [0, 1] : undefined;\n\n const layout = {\n title: 'Failure rate',\n titleMenu,\n actions: onViewErrors && <OpenErrorsInLogsButton onClick={onViewErrors} />,\n toolbar: (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={SERIES} />\n </MetricsCard.Toolbar>\n ),\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n total={formatPercent(runs > 0 ? failed / runs : 0)}\n isLoading={isLoading}\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && runs === 0} emptyMessage=\"No agent runs in this range.\">\n <MetricsLineChart\n data={data}\n series={SERIES}\n height=\"fill\"\n xLabels=\"edges\"\n showLegend={false}\n valueFormatter={formatPercent}\n axisFormatter={axisPercent}\n yDomain={yDomain}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick(bucketWindow(Number(row.ts), stepHours)))}\n isLoading={isLoading}\n {...EDGE_BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAgBA,IAAM,SAAS,CAAC;CAAE,SAAS;CAAe,OAAO;CAAe,OAAOA,yCAAAA,aAAa;AAAM,CAAC;AAE3F,IAAM,eAAe,UAAkB,GAAG,KAAK,MAAM,QAAQ,GAAG,EAAE;AAYlE,SAAgB,gBAA2C,EACzD,cACA,kBACA,aAC0B;CAC1B,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,SAAS,sBAAsBC,mDAAAA,mBAAmB;CAChF,MAAM,EAAE,cAAcC,kDAAAA,kBAAkB;CACxC,MAAM,EAAE,cAAcC,4CAAAA,WAAW,UAAU,OAAO,UAAU,GAAG;CAC/D,MAAM,OAAO,KAAK,QAAQ,KAAK,MAAM,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC;CACpE,MAAM,SAAS,KAAK,QAAQ,KAAK,MAAM,MAAM,EAAE,QAAQ,CAAC;CAExD,MAAM,UAAwC,WAAW,IAAI,CAAC,GAAG,CAAC,IAAI,KAAA;CAEtE,MAAM,SAAS;EACb,OAAO;EACP;EACA,SAAS,gBAAgB,iBAAA,GAAA,kBAAA,IAAA,CAACC,uDAAAA,wBAAD,EAAwB,SAAS,aAAe,CAAA;EACzE,SACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,oBAAAA,YAAY,SAAb,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,wBAAD,EAAwB,QAAQ,OAAS,CAAA,EACtB,CAAA;CAEzB;CAEA,IAAI,SACF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,8CAAAA,WAAD;EAAW,GAAI;EACb,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,oDAAAA,gBAAD,CAAiB,CAAA;CACR,CAAA;CAIf,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,8CAAAA,WAAD;EACE,GAAI;EACJ,OAAOE,yCAAAA,cAAc,OAAO,IAAI,SAAS,OAAO,CAAC;EACtC;EACX,YAAY;EAEZ,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,8CAAAA,WAAD;GAAW,SAAS,CAAC,aAAa,SAAS;GAAG,cAAa;GACzD,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,kBAAD;IACQ;IACN,QAAQ;IACR,QAAO;IACP,SAAQ;IACR,YAAY;IACZ,gBAAgBF,yCAAAA;IAChB,eAAe;IACN;IACT,eAAe,sBAAqB,QAAO,iBAAiBG,4CAAAA,aAAa,OAAO,IAAI,EAAE,GAAG,SAAS,CAAC;IACxF;IACX,GAAIC,uCAAAA;GACL,CAAA;EACQ,CAAA;CACF,CAAA;AAEf"}
1
+ {"version":3,"file":"failure-rate-card.cjs.js","names":["CHART_COLORS","useMetricsActivity","useMetricsFilters","bucketPlan","OpenErrorsInLogsButton","MetricsCard","MetricsLineChartLegend","ChartCard","ChartCardError","formatPercent","ChartArea","MetricsLineChart","bucketWindow","EDGE_BUCKET_AXIS"],"sources":["../../../../src/domains/metrics/components/failure-rate-card.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsActivity } from '../hooks/use-metrics-activity';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport { EDGE_BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatPercent } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow } from '../lib/metrics-buckets';\nimport { OpenErrorsInLogsButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport type { ChartCardProps } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport { MetricsLineChart, MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\n\nconst SERIES = [{ dataKey: 'failureRate', label: 'Failed runs', color: CHART_COLORS.error }];\n\nconst axisPercent = (ratio: number) => `${Math.round(ratio * 100)}%`;\n\n/** Share of agent runs that failed, per bucket; a point opens the failed runs' traces. */\nexport type FailureRateCardProps<V extends string = string> = {\n /** Called from the \"View errors in Logs\" button. */\n onViewErrors?: () => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n /** Switches to a sibling view from the title (Agent runs uses it). */\n titleMenu?: ChartCardProps<V>['titleMenu'];\n};\n\nexport function FailureRateCard<V extends string = string>({\n onViewErrors,\n onTimeRangeClick,\n titleMenu,\n}: FailureRateCardProps<V>) {\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsActivity();\n const { timestamp } = useMetricsFilters();\n const { stepHours } = bucketPlan(timestamp.start, timestamp.end);\n const runs = data.reduce((sum, b) => sum + b.completed + b.failed, 0);\n const failed = data.reduce((sum, b) => sum + b.failed, 0);\n // With nothing failed, the axis would fall back to 0-4 (400%); a share tops out at 100%.\n const yDomain: [number, number] | undefined = failed === 0 ? [0, 1] : undefined;\n\n const layout = {\n title: 'Failure rate',\n titleMenu,\n actions: onViewErrors && <OpenErrorsInLogsButton onClick={onViewErrors} />,\n toolbar: (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={SERIES} />\n </MetricsCard.Toolbar>\n ),\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n total={formatPercent(runs > 0 ? failed / runs : 0)}\n isLoading={isLoading}\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && runs === 0} emptyMessage=\"No agent runs in this range.\">\n <MetricsLineChart\n lineStyle=\"thin\"\n data={data}\n series={SERIES}\n height=\"fill\"\n xLabels=\"edges\"\n showLegend={false}\n valueFormatter={formatPercent}\n axisFormatter={axisPercent}\n yDomain={yDomain}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick(bucketWindow(Number(row.ts), stepHours)))}\n isLoading={isLoading}\n {...EDGE_BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAgBA,IAAM,SAAS,CAAC;CAAE,SAAS;CAAe,OAAO;CAAe,OAAOA,yCAAAA,aAAa;AAAM,CAAC;AAE3F,IAAM,eAAe,UAAkB,GAAG,KAAK,MAAM,QAAQ,GAAG,EAAE;AAYlE,SAAgB,gBAA2C,EACzD,cACA,kBACA,aAC0B;CAC1B,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,SAAS,sBAAsBC,mDAAAA,mBAAmB;CAChF,MAAM,EAAE,cAAcC,kDAAAA,kBAAkB;CACxC,MAAM,EAAE,cAAcC,4CAAAA,WAAW,UAAU,OAAO,UAAU,GAAG;CAC/D,MAAM,OAAO,KAAK,QAAQ,KAAK,MAAM,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC;CACpE,MAAM,SAAS,KAAK,QAAQ,KAAK,MAAM,MAAM,EAAE,QAAQ,CAAC;CAExD,MAAM,UAAwC,WAAW,IAAI,CAAC,GAAG,CAAC,IAAI,KAAA;CAEtE,MAAM,SAAS;EACb,OAAO;EACP;EACA,SAAS,gBAAgB,iBAAA,GAAA,kBAAA,IAAA,CAACC,uDAAAA,wBAAD,EAAwB,SAAS,aAAe,CAAA;EACzE,SACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,oBAAAA,YAAY,SAAb,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,wBAAD,EAAwB,QAAQ,OAAS,CAAA,EACtB,CAAA;CAEzB;CAEA,IAAI,SACF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,8CAAAA,WAAD;EAAW,GAAI;EACb,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,oDAAAA,gBAAD,CAAiB,CAAA;CACR,CAAA;CAIf,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,8CAAAA,WAAD;EACE,GAAI;EACJ,OAAOE,yCAAAA,cAAc,OAAO,IAAI,SAAS,OAAO,CAAC;EACtC;EACX,YAAY;EAEZ,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,8CAAAA,WAAD;GAAW,SAAS,CAAC,aAAa,SAAS;GAAG,cAAa;GACzD,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,kBAAD;IACE,WAAU;IACJ;IACN,QAAQ;IACR,QAAO;IACP,SAAQ;IACR,YAAY;IACZ,gBAAgBF,yCAAAA;IAChB,eAAe;IACN;IACT,eAAe,sBAAqB,QAAO,iBAAiBG,4CAAAA,aAAa,OAAO,IAAI,EAAE,GAAG,SAAS,CAAC;IACxF;IACX,GAAIC,uCAAAA;GACL,CAAA;EACQ,CAAA;CACF,CAAA;AAEf"}
@@ -1,13 +1,13 @@
1
1
  import { formatPercent } from "../lib/chart-format.es.js";
2
2
  import { useMetricsFilters } from "../hooks/use-metrics-filters.es.js";
3
3
  import { bucketPlan, bucketWindow } from "../lib/metrics-buckets.es.js";
4
- import { t as MetricsCard } from "../../../MetricsCard-M8awJ2B_.js";
4
+ import { t as MetricsCard } from "../../../MetricsCard-ua6C6b8a.js";
5
5
  import { ChartArea } from "./chart-area.es.js";
6
6
  import { ChartCard } from "./chart-card.es.js";
7
7
  import { ChartCardError } from "./chart-card-error.es.js";
8
8
  import { EDGE_BUCKET_AXIS } from "../lib/chart-axis.es.js";
9
9
  import { CHART_COLORS } from "../lib/chart-colors.es.js";
10
- import { r as MetricsLineChartLegend, t as MetricsLineChart } from "../../../MetricsLineChart-BhHoduO0.js";
10
+ import { r as MetricsLineChartLegend, t as MetricsLineChart } from "../../../MetricsLineChart-4SwxBbQx.js";
11
11
  import { OpenErrorsInLogsButton } from "./card-action-buttons.es.js";
12
12
  import { useMetricsActivity } from "../hooks/use-metrics-activity.es.js";
13
13
  import { jsx } from "react/jsx-runtime";
@@ -44,6 +44,7 @@ function FailureRateCard({ onViewErrors, onTimeRangeClick, titleMenu }) {
44
44
  isEmpty: !isLoading && runs === 0,
45
45
  emptyMessage: "No agent runs in this range.",
46
46
  children: /* @__PURE__ */ jsx(MetricsLineChart, {
47
+ lineStyle: "thin",
47
48
  data,
48
49
  series: SERIES,
49
50
  height: "fill",
@@ -1 +1 @@
1
- {"version":3,"file":"failure-rate-card.es.js","names":[],"sources":["../../../../src/domains/metrics/components/failure-rate-card.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsActivity } from '../hooks/use-metrics-activity';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport { EDGE_BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatPercent } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow } from '../lib/metrics-buckets';\nimport { OpenErrorsInLogsButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport type { ChartCardProps } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport { MetricsLineChart, MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\n\nconst SERIES = [{ dataKey: 'failureRate', label: 'Failed runs', color: CHART_COLORS.error }];\n\nconst axisPercent = (ratio: number) => `${Math.round(ratio * 100)}%`;\n\n/** Share of agent runs that failed, per bucket; a point opens the failed runs' traces. */\nexport type FailureRateCardProps<V extends string = string> = {\n /** Called from the \"View errors in Logs\" button. */\n onViewErrors?: () => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n /** Switches to a sibling view from the title (Agent runs uses it). */\n titleMenu?: ChartCardProps<V>['titleMenu'];\n};\n\nexport function FailureRateCard<V extends string = string>({\n onViewErrors,\n onTimeRangeClick,\n titleMenu,\n}: FailureRateCardProps<V>) {\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsActivity();\n const { timestamp } = useMetricsFilters();\n const { stepHours } = bucketPlan(timestamp.start, timestamp.end);\n const runs = data.reduce((sum, b) => sum + b.completed + b.failed, 0);\n const failed = data.reduce((sum, b) => sum + b.failed, 0);\n // With nothing failed, the axis would fall back to 0-4 (400%); a share tops out at 100%.\n const yDomain: [number, number] | undefined = failed === 0 ? [0, 1] : undefined;\n\n const layout = {\n title: 'Failure rate',\n titleMenu,\n actions: onViewErrors && <OpenErrorsInLogsButton onClick={onViewErrors} />,\n toolbar: (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={SERIES} />\n </MetricsCard.Toolbar>\n ),\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n total={formatPercent(runs > 0 ? failed / runs : 0)}\n isLoading={isLoading}\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && runs === 0} emptyMessage=\"No agent runs in this range.\">\n <MetricsLineChart\n data={data}\n series={SERIES}\n height=\"fill\"\n xLabels=\"edges\"\n showLegend={false}\n valueFormatter={formatPercent}\n axisFormatter={axisPercent}\n yDomain={yDomain}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick(bucketWindow(Number(row.ts), stepHours)))}\n isLoading={isLoading}\n {...EDGE_BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAgBA,IAAM,SAAS,CAAC;CAAE,SAAS;CAAe,OAAO;CAAe,OAAO,aAAa;AAAM,CAAC;AAE3F,IAAM,eAAe,UAAkB,GAAG,KAAK,MAAM,QAAQ,GAAG,EAAE;AAYlE,SAAgB,gBAA2C,EACzD,cACA,kBACA,aAC0B;CAC1B,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,SAAS,sBAAsB,mBAAmB;CAChF,MAAM,EAAE,cAAc,kBAAkB;CACxC,MAAM,EAAE,cAAc,WAAW,UAAU,OAAO,UAAU,GAAG;CAC/D,MAAM,OAAO,KAAK,QAAQ,KAAK,MAAM,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC;CACpE,MAAM,SAAS,KAAK,QAAQ,KAAK,MAAM,MAAM,EAAE,QAAQ,CAAC;CAExD,MAAM,UAAwC,WAAW,IAAI,CAAC,GAAG,CAAC,IAAI,KAAA;CAEtE,MAAM,SAAS;EACb,OAAO;EACP;EACA,SAAS,gBAAgB,oBAAC,wBAAD,EAAwB,SAAS,aAAe,CAAA;EACzE,SACE,oBAAC,YAAY,SAAb,EAAA,UACE,oBAAC,wBAAD,EAAwB,QAAQ,OAAS,CAAA,EACtB,CAAA;CAEzB;CAEA,IAAI,SACF,OACE,oBAAC,WAAD;EAAW,GAAI;EACb,UAAA,oBAAC,gBAAD,CAAiB,CAAA;CACR,CAAA;CAIf,OACE,oBAAC,WAAD;EACE,GAAI;EACJ,OAAO,cAAc,OAAO,IAAI,SAAS,OAAO,CAAC;EACtC;EACX,YAAY;EAEZ,UAAA,oBAAC,WAAD;GAAW,SAAS,CAAC,aAAa,SAAS;GAAG,cAAa;GACzD,UAAA,oBAAC,kBAAD;IACQ;IACN,QAAQ;IACR,QAAO;IACP,SAAQ;IACR,YAAY;IACZ,gBAAgB;IAChB,eAAe;IACN;IACT,eAAe,sBAAqB,QAAO,iBAAiB,aAAa,OAAO,IAAI,EAAE,GAAG,SAAS,CAAC;IACxF;IACX,GAAI;GACL,CAAA;EACQ,CAAA;CACF,CAAA;AAEf"}
1
+ {"version":3,"file":"failure-rate-card.es.js","names":[],"sources":["../../../../src/domains/metrics/components/failure-rate-card.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsActivity } from '../hooks/use-metrics-activity';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport { EDGE_BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatPercent } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow } from '../lib/metrics-buckets';\nimport { OpenErrorsInLogsButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport type { ChartCardProps } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport { MetricsLineChart, MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\n\nconst SERIES = [{ dataKey: 'failureRate', label: 'Failed runs', color: CHART_COLORS.error }];\n\nconst axisPercent = (ratio: number) => `${Math.round(ratio * 100)}%`;\n\n/** Share of agent runs that failed, per bucket; a point opens the failed runs' traces. */\nexport type FailureRateCardProps<V extends string = string> = {\n /** Called from the \"View errors in Logs\" button. */\n onViewErrors?: () => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n /** Switches to a sibling view from the title (Agent runs uses it). */\n titleMenu?: ChartCardProps<V>['titleMenu'];\n};\n\nexport function FailureRateCard<V extends string = string>({\n onViewErrors,\n onTimeRangeClick,\n titleMenu,\n}: FailureRateCardProps<V>) {\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsActivity();\n const { timestamp } = useMetricsFilters();\n const { stepHours } = bucketPlan(timestamp.start, timestamp.end);\n const runs = data.reduce((sum, b) => sum + b.completed + b.failed, 0);\n const failed = data.reduce((sum, b) => sum + b.failed, 0);\n // With nothing failed, the axis would fall back to 0-4 (400%); a share tops out at 100%.\n const yDomain: [number, number] | undefined = failed === 0 ? [0, 1] : undefined;\n\n const layout = {\n title: 'Failure rate',\n titleMenu,\n actions: onViewErrors && <OpenErrorsInLogsButton onClick={onViewErrors} />,\n toolbar: (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={SERIES} />\n </MetricsCard.Toolbar>\n ),\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n total={formatPercent(runs > 0 ? failed / runs : 0)}\n isLoading={isLoading}\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && runs === 0} emptyMessage=\"No agent runs in this range.\">\n <MetricsLineChart\n lineStyle=\"thin\"\n data={data}\n series={SERIES}\n height=\"fill\"\n xLabels=\"edges\"\n showLegend={false}\n valueFormatter={formatPercent}\n axisFormatter={axisPercent}\n yDomain={yDomain}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick(bucketWindow(Number(row.ts), stepHours)))}\n isLoading={isLoading}\n {...EDGE_BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAgBA,IAAM,SAAS,CAAC;CAAE,SAAS;CAAe,OAAO;CAAe,OAAO,aAAa;AAAM,CAAC;AAE3F,IAAM,eAAe,UAAkB,GAAG,KAAK,MAAM,QAAQ,GAAG,EAAE;AAYlE,SAAgB,gBAA2C,EACzD,cACA,kBACA,aAC0B;CAC1B,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,SAAS,sBAAsB,mBAAmB;CAChF,MAAM,EAAE,cAAc,kBAAkB;CACxC,MAAM,EAAE,cAAc,WAAW,UAAU,OAAO,UAAU,GAAG;CAC/D,MAAM,OAAO,KAAK,QAAQ,KAAK,MAAM,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC;CACpE,MAAM,SAAS,KAAK,QAAQ,KAAK,MAAM,MAAM,EAAE,QAAQ,CAAC;CAExD,MAAM,UAAwC,WAAW,IAAI,CAAC,GAAG,CAAC,IAAI,KAAA;CAEtE,MAAM,SAAS;EACb,OAAO;EACP;EACA,SAAS,gBAAgB,oBAAC,wBAAD,EAAwB,SAAS,aAAe,CAAA;EACzE,SACE,oBAAC,YAAY,SAAb,EAAA,UACE,oBAAC,wBAAD,EAAwB,QAAQ,OAAS,CAAA,EACtB,CAAA;CAEzB;CAEA,IAAI,SACF,OACE,oBAAC,WAAD;EAAW,GAAI;EACb,UAAA,oBAAC,gBAAD,CAAiB,CAAA;CACR,CAAA;CAIf,OACE,oBAAC,WAAD;EACE,GAAI;EACJ,OAAO,cAAc,OAAO,IAAI,SAAS,OAAO,CAAC;EACtC;EACX,YAAY;EAEZ,UAAA,oBAAC,WAAD;GAAW,SAAS,CAAC,aAAa,SAAS;GAAG,cAAa;GACzD,UAAA,oBAAC,kBAAD;IACE,WAAU;IACJ;IACN,QAAQ;IACR,QAAO;IACP,SAAQ;IACR,YAAY;IACZ,gBAAgB;IAChB,eAAe;IACN;IACT,eAAe,sBAAqB,QAAO,iBAAiB,aAAa,OAAO,IAAI,EAAE,GAAG,SAAS,CAAC;IACxF;IACX,GAAI;GACL,CAAA;EACQ,CAAA;CACF,CAAA;AAEf"}
@@ -2,13 +2,13 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_domains_metrics_lib_chart_format = require("../lib/chart-format.cjs.js");
3
3
  const require_domains_metrics_hooks_use_metrics_filters = require("../hooks/use-metrics-filters.cjs.js");
4
4
  const require_domains_metrics_lib_metrics_buckets = require("../lib/metrics-buckets.cjs.js");
5
- const require_MetricsCard = require("../../../MetricsCard-CEB-f2sv.cjs");
5
+ const require_MetricsCard = require("../../../MetricsCard-BEwiS7Pe.cjs");
6
6
  const require_domains_metrics_components_chart_area = require("./chart-area.cjs.js");
7
7
  const require_domains_metrics_components_chart_card = require("./chart-card.cjs.js");
8
8
  const require_domains_metrics_components_chart_card_error = require("./chart-card-error.cjs.js");
9
9
  const require_domains_metrics_lib_chart_axis = require("../lib/chart-axis.cjs.js");
10
10
  const require_domains_metrics_lib_chart_colors = require("../lib/chart-colors.cjs.js");
11
- const require_MetricsLineChart = require("../../../MetricsLineChart-CjBm4IXu.cjs");
11
+ const require_MetricsLineChart = require("../../../MetricsLineChart-tZxsauau.cjs");
12
12
  const require_domains_metrics_components_card_action_buttons = require("./card-action-buttons.cjs.js");
13
13
  const require_domains_metrics_hooks_use_metrics_latency = require("../hooks/use-metrics-latency.cjs.js");
14
14
  let react = require("react");
@@ -91,6 +91,7 @@ function LatencyCard({ onViewTraces, onTimeRangeClick }) {
91
91
  isEmpty: !isLoading && peak === 0,
92
92
  emptyMessage: `No ${EMPTY_NOUN[entity]} in this range.`,
93
93
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_MetricsLineChart.MetricsLineChart, {
94
+ lineStyle: "thin",
94
95
  data,
95
96
  series: SERIES,
96
97
  height: "fill",
@@ -1 +1 @@
1
- {"version":3,"file":"latency-card.cjs.js","names":["EntityType","CHART_COLORS","useState","useMetricsLatency","useMetricsFilters","intervalHours","bucketPlan","OpenInTracesButton","MetricsCard","MetricsLineChartLegend","ChartCard","ChartCardError","formatDuration","ChartArea","MetricsLineChart","formatAxisDuration","bucketWindow","EDGE_BUCKET_AXIS"],"sources":["../../../../src/domains/metrics/components/latency-card.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport { useState } from 'react';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport type { LatencyEntity } from '../hooks/use-metrics-latency';\nimport { useMetricsLatency } from '../hooks/use-metrics-latency';\nimport { EDGE_BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatAxisDuration, formatDuration } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow, intervalHours } from '../lib/metrics-buckets';\nimport { OpenInTracesButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChart, MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\n\nconst ROOT_ENTITY: Record<LatencyEntity, EntityType> = {\n agents: EntityType.AGENT,\n workflows: EntityType.WORKFLOW_RUN,\n tools: EntityType.TOOL,\n};\n\nconst SERIES: MetricsLineChartSeries[] = [\n { dataKey: 'p50', label: 'P50', color: CHART_COLORS.sky },\n { dataKey: 'p95', label: 'P95', color: CHART_COLORS.green, emphasis: true },\n { dataKey: 'p99', label: 'P99', color: CHART_COLORS.violet },\n];\n\nconst TITLE: Record<LatencyEntity, string> = {\n agents: 'Agent latency',\n workflows: 'Workflow latency',\n tools: 'Tool latency',\n};\n\nconst VIEWS = [\n { value: 'agents', label: TITLE.agents },\n { value: 'workflows', label: TITLE.workflows },\n { value: 'tools', label: TITLE.tools },\n] as const;\n\nconst EMPTY_NOUN: Record<LatencyEntity, string> = {\n agents: 'agent runs',\n workflows: 'workflow runs',\n tools: 'tool calls',\n};\n\n/** P50, P95 and P99 durations of agent runs, workflow runs or tool calls; a point opens its traces. */\nexport type LatencyCardProps = {\n /** Called from the \"View in Traces\" button with the entity type of the open tab. */\n onViewTraces?: (entityType: EntityType) => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n};\n\nexport function LatencyCard({ onViewTraces, onTimeRangeClick }: LatencyCardProps) {\n const [entity, setEntity] = useState<LatencyEntity>('agents');\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsLatency(entity);\n const { timestamp } = useMetricsFilters();\n // The latency chart keeps the API's 1h or 1d buckets, so a point opens that window.\n const step = intervalHours(bucketPlan(timestamp.start, timestamp.end).interval);\n const peak = Math.max(0, ...data.map(b => b.p95 ?? 0));\n\n const layout = {\n title: TITLE[entity],\n titleMenu: { value: entity, onValueChange: setEntity, options: VIEWS },\n actions: onViewTraces && <OpenInTracesButton onClick={() => onViewTraces(ROOT_ENTITY[entity])} />,\n toolbar: (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={SERIES} />\n </MetricsCard.Toolbar>\n ),\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n total={peak > 0 ? formatDuration(peak) : '—'}\n isLoading={isLoading}\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && peak === 0} emptyMessage={`No ${EMPTY_NOUN[entity]} in this range.`}>\n <MetricsLineChart\n data={data}\n series={SERIES}\n height=\"fill\"\n xLabels=\"edges\"\n showLegend={false}\n valueFormatter={formatDuration}\n axisFormatter={formatAxisDuration}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick(bucketWindow(Number(row.ts), step)))}\n isLoading={isLoading}\n {...EDGE_BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAkBA,IAAM,cAAiD;CACrD,QAAQA,2BAAAA,WAAW;CACnB,WAAWA,2BAAAA,WAAW;CACtB,OAAOA,2BAAAA,WAAW;AACpB;AAEA,IAAM,SAAmC;CACvC;EAAE,SAAS;EAAO,OAAO;EAAO,OAAOC,yCAAAA,aAAa;CAAI;CACxD;EAAE,SAAS;EAAO,OAAO;EAAO,OAAOA,yCAAAA,aAAa;EAAO,UAAU;CAAK;CAC1E;EAAE,SAAS;EAAO,OAAO;EAAO,OAAOA,yCAAAA,aAAa;CAAO;AAC7D;AAEA,IAAM,QAAuC;CAC3C,QAAQ;CACR,WAAW;CACX,OAAO;AACT;AAEA,IAAM,QAAQ;CACZ;EAAE,OAAO;EAAU,OAAO,MAAM;CAAO;CACvC;EAAE,OAAO;EAAa,OAAO,MAAM;CAAU;CAC7C;EAAE,OAAO;EAAS,OAAO,MAAM;CAAM;AACvC;AAEA,IAAM,aAA4C;CAChD,QAAQ;CACR,WAAW;CACX,OAAO;AACT;AAUA,SAAgB,YAAY,EAAE,cAAc,oBAAsC;CAChF,MAAM,CAAC,QAAQ,cAAA,GAAaC,MAAAA,SAAAA,CAAwB,QAAQ;CAC5D,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,SAAS,sBAAsBC,kDAAAA,kBAAkB,MAAM;CACrF,MAAM,EAAE,cAAcC,kDAAAA,kBAAkB;CAExC,MAAM,OAAOC,4CAAAA,cAAcC,4CAAAA,WAAW,UAAU,OAAO,UAAU,GAAG,CAAC,CAAC,QAAQ;CAC9E,MAAM,OAAO,KAAK,IAAI,GAAG,GAAG,KAAK,KAAI,MAAK,EAAE,OAAO,CAAC,CAAC;CAErD,MAAM,SAAS;EACb,OAAO,MAAM;EACb,WAAW;GAAE,OAAO;GAAQ,eAAe;GAAW,SAAS;EAAM;EACrE,SAAS,gBAAgB,iBAAA,GAAA,kBAAA,IAAA,CAACC,uDAAAA,oBAAD,EAAoB,eAAe,aAAa,YAAY,OAAO,EAAI,CAAA;EAChG,SACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,oBAAAA,YAAY,SAAb,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,wBAAD,EAAwB,QAAQ,OAAS,CAAA,EACtB,CAAA;CAEzB;CAEA,IAAI,SACF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,8CAAAA,WAAD;EAAW,GAAI;EACb,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,oDAAAA,gBAAD,CAAiB,CAAA;CACR,CAAA;CAIf,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,8CAAAA,WAAD;EACE,GAAI;EACJ,OAAO,OAAO,IAAIE,yCAAAA,eAAe,IAAI,IAAI;EAC9B;EACX,YAAY;EAEZ,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,8CAAAA,WAAD;GAAW,SAAS,CAAC,aAAa,SAAS;GAAG,cAAc,MAAM,WAAW,QAAQ;GACnF,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,kBAAD;IACQ;IACN,QAAQ;IACR,QAAO;IACP,SAAQ;IACR,YAAY;IACZ,gBAAgBF,yCAAAA;IAChB,eAAeG,yCAAAA;IACf,eAAe,sBAAqB,QAAO,iBAAiBC,4CAAAA,aAAa,OAAO,IAAI,EAAE,GAAG,IAAI,CAAC;IACnF;IACX,GAAIC,uCAAAA;GACL,CAAA;EACQ,CAAA;CACF,CAAA;AAEf"}
1
+ {"version":3,"file":"latency-card.cjs.js","names":["EntityType","CHART_COLORS","useState","useMetricsLatency","useMetricsFilters","intervalHours","bucketPlan","OpenInTracesButton","MetricsCard","MetricsLineChartLegend","ChartCard","ChartCardError","formatDuration","ChartArea","MetricsLineChart","formatAxisDuration","bucketWindow","EDGE_BUCKET_AXIS"],"sources":["../../../../src/domains/metrics/components/latency-card.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport { useState } from 'react';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport type { LatencyEntity } from '../hooks/use-metrics-latency';\nimport { useMetricsLatency } from '../hooks/use-metrics-latency';\nimport { EDGE_BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatAxisDuration, formatDuration } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow, intervalHours } from '../lib/metrics-buckets';\nimport { OpenInTracesButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChart, MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\n\nconst ROOT_ENTITY: Record<LatencyEntity, EntityType> = {\n agents: EntityType.AGENT,\n workflows: EntityType.WORKFLOW_RUN,\n tools: EntityType.TOOL,\n};\n\nconst SERIES: MetricsLineChartSeries[] = [\n { dataKey: 'p50', label: 'P50', color: CHART_COLORS.sky },\n { dataKey: 'p95', label: 'P95', color: CHART_COLORS.green, emphasis: true },\n { dataKey: 'p99', label: 'P99', color: CHART_COLORS.violet },\n];\n\nconst TITLE: Record<LatencyEntity, string> = {\n agents: 'Agent latency',\n workflows: 'Workflow latency',\n tools: 'Tool latency',\n};\n\nconst VIEWS = [\n { value: 'agents', label: TITLE.agents },\n { value: 'workflows', label: TITLE.workflows },\n { value: 'tools', label: TITLE.tools },\n] as const;\n\nconst EMPTY_NOUN: Record<LatencyEntity, string> = {\n agents: 'agent runs',\n workflows: 'workflow runs',\n tools: 'tool calls',\n};\n\n/** P50, P95 and P99 durations of agent runs, workflow runs or tool calls; a point opens its traces. */\nexport type LatencyCardProps = {\n /** Called from the \"View in Traces\" button with the entity type of the open tab. */\n onViewTraces?: (entityType: EntityType) => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n};\n\nexport function LatencyCard({ onViewTraces, onTimeRangeClick }: LatencyCardProps) {\n const [entity, setEntity] = useState<LatencyEntity>('agents');\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsLatency(entity);\n const { timestamp } = useMetricsFilters();\n // The latency chart keeps the API's 1h or 1d buckets, so a point opens that window.\n const step = intervalHours(bucketPlan(timestamp.start, timestamp.end).interval);\n const peak = Math.max(0, ...data.map(b => b.p95 ?? 0));\n\n const layout = {\n title: TITLE[entity],\n titleMenu: { value: entity, onValueChange: setEntity, options: VIEWS },\n actions: onViewTraces && <OpenInTracesButton onClick={() => onViewTraces(ROOT_ENTITY[entity])} />,\n toolbar: (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={SERIES} />\n </MetricsCard.Toolbar>\n ),\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n total={peak > 0 ? formatDuration(peak) : '—'}\n isLoading={isLoading}\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && peak === 0} emptyMessage={`No ${EMPTY_NOUN[entity]} in this range.`}>\n <MetricsLineChart\n lineStyle=\"thin\"\n data={data}\n series={SERIES}\n height=\"fill\"\n xLabels=\"edges\"\n showLegend={false}\n valueFormatter={formatDuration}\n axisFormatter={formatAxisDuration}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick(bucketWindow(Number(row.ts), step)))}\n isLoading={isLoading}\n {...EDGE_BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAkBA,IAAM,cAAiD;CACrD,QAAQA,2BAAAA,WAAW;CACnB,WAAWA,2BAAAA,WAAW;CACtB,OAAOA,2BAAAA,WAAW;AACpB;AAEA,IAAM,SAAmC;CACvC;EAAE,SAAS;EAAO,OAAO;EAAO,OAAOC,yCAAAA,aAAa;CAAI;CACxD;EAAE,SAAS;EAAO,OAAO;EAAO,OAAOA,yCAAAA,aAAa;EAAO,UAAU;CAAK;CAC1E;EAAE,SAAS;EAAO,OAAO;EAAO,OAAOA,yCAAAA,aAAa;CAAO;AAC7D;AAEA,IAAM,QAAuC;CAC3C,QAAQ;CACR,WAAW;CACX,OAAO;AACT;AAEA,IAAM,QAAQ;CACZ;EAAE,OAAO;EAAU,OAAO,MAAM;CAAO;CACvC;EAAE,OAAO;EAAa,OAAO,MAAM;CAAU;CAC7C;EAAE,OAAO;EAAS,OAAO,MAAM;CAAM;AACvC;AAEA,IAAM,aAA4C;CAChD,QAAQ;CACR,WAAW;CACX,OAAO;AACT;AAUA,SAAgB,YAAY,EAAE,cAAc,oBAAsC;CAChF,MAAM,CAAC,QAAQ,cAAA,GAAaC,MAAAA,SAAAA,CAAwB,QAAQ;CAC5D,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,SAAS,sBAAsBC,kDAAAA,kBAAkB,MAAM;CACrF,MAAM,EAAE,cAAcC,kDAAAA,kBAAkB;CAExC,MAAM,OAAOC,4CAAAA,cAAcC,4CAAAA,WAAW,UAAU,OAAO,UAAU,GAAG,CAAC,CAAC,QAAQ;CAC9E,MAAM,OAAO,KAAK,IAAI,GAAG,GAAG,KAAK,KAAI,MAAK,EAAE,OAAO,CAAC,CAAC;CAErD,MAAM,SAAS;EACb,OAAO,MAAM;EACb,WAAW;GAAE,OAAO;GAAQ,eAAe;GAAW,SAAS;EAAM;EACrE,SAAS,gBAAgB,iBAAA,GAAA,kBAAA,IAAA,CAACC,uDAAAA,oBAAD,EAAoB,eAAe,aAAa,YAAY,OAAO,EAAI,CAAA;EAChG,SACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,oBAAAA,YAAY,SAAb,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,wBAAD,EAAwB,QAAQ,OAAS,CAAA,EACtB,CAAA;CAEzB;CAEA,IAAI,SACF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,8CAAAA,WAAD;EAAW,GAAI;EACb,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,oDAAAA,gBAAD,CAAiB,CAAA;CACR,CAAA;CAIf,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,8CAAAA,WAAD;EACE,GAAI;EACJ,OAAO,OAAO,IAAIE,yCAAAA,eAAe,IAAI,IAAI;EAC9B;EACX,YAAY;EAEZ,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,8CAAAA,WAAD;GAAW,SAAS,CAAC,aAAa,SAAS;GAAG,cAAc,MAAM,WAAW,QAAQ;GACnF,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,kBAAD;IACE,WAAU;IACJ;IACN,QAAQ;IACR,QAAO;IACP,SAAQ;IACR,YAAY;IACZ,gBAAgBF,yCAAAA;IAChB,eAAeG,yCAAAA;IACf,eAAe,sBAAqB,QAAO,iBAAiBC,4CAAAA,aAAa,OAAO,IAAI,EAAE,GAAG,IAAI,CAAC;IACnF;IACX,GAAIC,uCAAAA;GACL,CAAA;EACQ,CAAA;CACF,CAAA;AAEf"}
@@ -1,13 +1,13 @@
1
1
  import { formatAxisDuration, formatDuration } from "../lib/chart-format.es.js";
2
2
  import { useMetricsFilters } from "../hooks/use-metrics-filters.es.js";
3
3
  import { bucketPlan, bucketWindow, intervalHours } from "../lib/metrics-buckets.es.js";
4
- import { t as MetricsCard } from "../../../MetricsCard-M8awJ2B_.js";
4
+ import { t as MetricsCard } from "../../../MetricsCard-ua6C6b8a.js";
5
5
  import { ChartArea } from "./chart-area.es.js";
6
6
  import { ChartCard } from "./chart-card.es.js";
7
7
  import { ChartCardError } from "./chart-card-error.es.js";
8
8
  import { EDGE_BUCKET_AXIS } from "../lib/chart-axis.es.js";
9
9
  import { CHART_COLORS } from "../lib/chart-colors.es.js";
10
- import { r as MetricsLineChartLegend, t as MetricsLineChart } from "../../../MetricsLineChart-BhHoduO0.js";
10
+ import { r as MetricsLineChartLegend, t as MetricsLineChart } from "../../../MetricsLineChart-4SwxBbQx.js";
11
11
  import { OpenInTracesButton } from "./card-action-buttons.es.js";
12
12
  import { useMetricsLatency } from "../hooks/use-metrics-latency.es.js";
13
13
  import { useState } from "react";
@@ -90,6 +90,7 @@ function LatencyCard({ onViewTraces, onTimeRangeClick }) {
90
90
  isEmpty: !isLoading && peak === 0,
91
91
  emptyMessage: `No ${EMPTY_NOUN[entity]} in this range.`,
92
92
  children: /* @__PURE__ */ jsx(MetricsLineChart, {
93
+ lineStyle: "thin",
93
94
  data,
94
95
  series: SERIES,
95
96
  height: "fill",
@@ -1 +1 @@
1
- {"version":3,"file":"latency-card.es.js","names":[],"sources":["../../../../src/domains/metrics/components/latency-card.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport { useState } from 'react';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport type { LatencyEntity } from '../hooks/use-metrics-latency';\nimport { useMetricsLatency } from '../hooks/use-metrics-latency';\nimport { EDGE_BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatAxisDuration, formatDuration } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow, intervalHours } from '../lib/metrics-buckets';\nimport { OpenInTracesButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChart, MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\n\nconst ROOT_ENTITY: Record<LatencyEntity, EntityType> = {\n agents: EntityType.AGENT,\n workflows: EntityType.WORKFLOW_RUN,\n tools: EntityType.TOOL,\n};\n\nconst SERIES: MetricsLineChartSeries[] = [\n { dataKey: 'p50', label: 'P50', color: CHART_COLORS.sky },\n { dataKey: 'p95', label: 'P95', color: CHART_COLORS.green, emphasis: true },\n { dataKey: 'p99', label: 'P99', color: CHART_COLORS.violet },\n];\n\nconst TITLE: Record<LatencyEntity, string> = {\n agents: 'Agent latency',\n workflows: 'Workflow latency',\n tools: 'Tool latency',\n};\n\nconst VIEWS = [\n { value: 'agents', label: TITLE.agents },\n { value: 'workflows', label: TITLE.workflows },\n { value: 'tools', label: TITLE.tools },\n] as const;\n\nconst EMPTY_NOUN: Record<LatencyEntity, string> = {\n agents: 'agent runs',\n workflows: 'workflow runs',\n tools: 'tool calls',\n};\n\n/** P50, P95 and P99 durations of agent runs, workflow runs or tool calls; a point opens its traces. */\nexport type LatencyCardProps = {\n /** Called from the \"View in Traces\" button with the entity type of the open tab. */\n onViewTraces?: (entityType: EntityType) => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n};\n\nexport function LatencyCard({ onViewTraces, onTimeRangeClick }: LatencyCardProps) {\n const [entity, setEntity] = useState<LatencyEntity>('agents');\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsLatency(entity);\n const { timestamp } = useMetricsFilters();\n // The latency chart keeps the API's 1h or 1d buckets, so a point opens that window.\n const step = intervalHours(bucketPlan(timestamp.start, timestamp.end).interval);\n const peak = Math.max(0, ...data.map(b => b.p95 ?? 0));\n\n const layout = {\n title: TITLE[entity],\n titleMenu: { value: entity, onValueChange: setEntity, options: VIEWS },\n actions: onViewTraces && <OpenInTracesButton onClick={() => onViewTraces(ROOT_ENTITY[entity])} />,\n toolbar: (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={SERIES} />\n </MetricsCard.Toolbar>\n ),\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n total={peak > 0 ? formatDuration(peak) : '—'}\n isLoading={isLoading}\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && peak === 0} emptyMessage={`No ${EMPTY_NOUN[entity]} in this range.`}>\n <MetricsLineChart\n data={data}\n series={SERIES}\n height=\"fill\"\n xLabels=\"edges\"\n showLegend={false}\n valueFormatter={formatDuration}\n axisFormatter={formatAxisDuration}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick(bucketWindow(Number(row.ts), step)))}\n isLoading={isLoading}\n {...EDGE_BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAkBA,IAAM,cAAiD;CACrD,QAAQ,WAAW;CACnB,WAAW,WAAW;CACtB,OAAO,WAAW;AACpB;AAEA,IAAM,SAAmC;CACvC;EAAE,SAAS;EAAO,OAAO;EAAO,OAAO,aAAa;CAAI;CACxD;EAAE,SAAS;EAAO,OAAO;EAAO,OAAO,aAAa;EAAO,UAAU;CAAK;CAC1E;EAAE,SAAS;EAAO,OAAO;EAAO,OAAO,aAAa;CAAO;AAC7D;AAEA,IAAM,QAAuC;CAC3C,QAAQ;CACR,WAAW;CACX,OAAO;AACT;AAEA,IAAM,QAAQ;CACZ;EAAE,OAAO;EAAU,OAAO,MAAM;CAAO;CACvC;EAAE,OAAO;EAAa,OAAO,MAAM;CAAU;CAC7C;EAAE,OAAO;EAAS,OAAO,MAAM;CAAM;AACvC;AAEA,IAAM,aAA4C;CAChD,QAAQ;CACR,WAAW;CACX,OAAO;AACT;AAUA,SAAgB,YAAY,EAAE,cAAc,oBAAsC;CAChF,MAAM,CAAC,QAAQ,aAAa,SAAwB,QAAQ;CAC5D,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,SAAS,sBAAsB,kBAAkB,MAAM;CACrF,MAAM,EAAE,cAAc,kBAAkB;CAExC,MAAM,OAAO,cAAc,WAAW,UAAU,OAAO,UAAU,GAAG,CAAC,CAAC,QAAQ;CAC9E,MAAM,OAAO,KAAK,IAAI,GAAG,GAAG,KAAK,KAAI,MAAK,EAAE,OAAO,CAAC,CAAC;CAErD,MAAM,SAAS;EACb,OAAO,MAAM;EACb,WAAW;GAAE,OAAO;GAAQ,eAAe;GAAW,SAAS;EAAM;EACrE,SAAS,gBAAgB,oBAAC,oBAAD,EAAoB,eAAe,aAAa,YAAY,OAAO,EAAI,CAAA;EAChG,SACE,oBAAC,YAAY,SAAb,EAAA,UACE,oBAAC,wBAAD,EAAwB,QAAQ,OAAS,CAAA,EACtB,CAAA;CAEzB;CAEA,IAAI,SACF,OACE,oBAAC,WAAD;EAAW,GAAI;EACb,UAAA,oBAAC,gBAAD,CAAiB,CAAA;CACR,CAAA;CAIf,OACE,oBAAC,WAAD;EACE,GAAI;EACJ,OAAO,OAAO,IAAI,eAAe,IAAI,IAAI;EAC9B;EACX,YAAY;EAEZ,UAAA,oBAAC,WAAD;GAAW,SAAS,CAAC,aAAa,SAAS;GAAG,cAAc,MAAM,WAAW,QAAQ;GACnF,UAAA,oBAAC,kBAAD;IACQ;IACN,QAAQ;IACR,QAAO;IACP,SAAQ;IACR,YAAY;IACZ,gBAAgB;IAChB,eAAe;IACf,eAAe,sBAAqB,QAAO,iBAAiB,aAAa,OAAO,IAAI,EAAE,GAAG,IAAI,CAAC;IACnF;IACX,GAAI;GACL,CAAA;EACQ,CAAA;CACF,CAAA;AAEf"}
1
+ {"version":3,"file":"latency-card.es.js","names":[],"sources":["../../../../src/domains/metrics/components/latency-card.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport { useState } from 'react';\nimport type { TimeRange } from '../drilldown';\nimport { useMetricsFilters } from '../hooks/use-metrics-filters';\nimport type { LatencyEntity } from '../hooks/use-metrics-latency';\nimport { useMetricsLatency } from '../hooks/use-metrics-latency';\nimport { EDGE_BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { formatAxisDuration, formatDuration } from '../lib/chart-format';\nimport { bucketPlan, bucketWindow, intervalHours } from '../lib/metrics-buckets';\nimport { OpenInTracesButton } from './card-action-buttons';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport { MetricsCard } from '@/ds/components/MetricsCard';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChart, MetricsLineChartLegend } from '@/ds/components/MetricsLineChart';\n\nconst ROOT_ENTITY: Record<LatencyEntity, EntityType> = {\n agents: EntityType.AGENT,\n workflows: EntityType.WORKFLOW_RUN,\n tools: EntityType.TOOL,\n};\n\nconst SERIES: MetricsLineChartSeries[] = [\n { dataKey: 'p50', label: 'P50', color: CHART_COLORS.sky },\n { dataKey: 'p95', label: 'P95', color: CHART_COLORS.green, emphasis: true },\n { dataKey: 'p99', label: 'P99', color: CHART_COLORS.violet },\n];\n\nconst TITLE: Record<LatencyEntity, string> = {\n agents: 'Agent latency',\n workflows: 'Workflow latency',\n tools: 'Tool latency',\n};\n\nconst VIEWS = [\n { value: 'agents', label: TITLE.agents },\n { value: 'workflows', label: TITLE.workflows },\n { value: 'tools', label: TITLE.tools },\n] as const;\n\nconst EMPTY_NOUN: Record<LatencyEntity, string> = {\n agents: 'agent runs',\n workflows: 'workflow runs',\n tools: 'tool calls',\n};\n\n/** P50, P95 and P99 durations of agent runs, workflow runs or tool calls; a point opens its traces. */\nexport type LatencyCardProps = {\n /** Called from the \"View in Traces\" button with the entity type of the open tab. */\n onViewTraces?: (entityType: EntityType) => void;\n /** Called with the time range of the clicked bar or point. */\n onTimeRangeClick?: (range: TimeRange) => void;\n};\n\nexport function LatencyCard({ onViewTraces, onTimeRangeClick }: LatencyCardProps) {\n const [entity, setEntity] = useState<LatencyEntity>('agents');\n const { data = [], isLoading, isError, isPlaceholderData } = useMetricsLatency(entity);\n const { timestamp } = useMetricsFilters();\n // The latency chart keeps the API's 1h or 1d buckets, so a point opens that window.\n const step = intervalHours(bucketPlan(timestamp.start, timestamp.end).interval);\n const peak = Math.max(0, ...data.map(b => b.p95 ?? 0));\n\n const layout = {\n title: TITLE[entity],\n titleMenu: { value: entity, onValueChange: setEntity, options: VIEWS },\n actions: onViewTraces && <OpenInTracesButton onClick={() => onViewTraces(ROOT_ENTITY[entity])} />,\n toolbar: (\n <MetricsCard.Toolbar>\n <MetricsLineChartLegend series={SERIES} />\n </MetricsCard.Toolbar>\n ),\n };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard\n {...layout}\n total={peak > 0 ? formatDuration(peak) : '—'}\n isLoading={isLoading}\n isUpdating={isPlaceholderData}\n >\n <ChartArea isEmpty={!isLoading && peak === 0} emptyMessage={`No ${EMPTY_NOUN[entity]} in this range.`}>\n <MetricsLineChart\n lineStyle=\"thin\"\n data={data}\n series={SERIES}\n height=\"fill\"\n xLabels=\"edges\"\n showLegend={false}\n valueFormatter={formatDuration}\n axisFormatter={formatAxisDuration}\n onBucketClick={onTimeRangeClick && (row => onTimeRangeClick(bucketWindow(Number(row.ts), step)))}\n isLoading={isLoading}\n {...EDGE_BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAkBA,IAAM,cAAiD;CACrD,QAAQ,WAAW;CACnB,WAAW,WAAW;CACtB,OAAO,WAAW;AACpB;AAEA,IAAM,SAAmC;CACvC;EAAE,SAAS;EAAO,OAAO;EAAO,OAAO,aAAa;CAAI;CACxD;EAAE,SAAS;EAAO,OAAO;EAAO,OAAO,aAAa;EAAO,UAAU;CAAK;CAC1E;EAAE,SAAS;EAAO,OAAO;EAAO,OAAO,aAAa;CAAO;AAC7D;AAEA,IAAM,QAAuC;CAC3C,QAAQ;CACR,WAAW;CACX,OAAO;AACT;AAEA,IAAM,QAAQ;CACZ;EAAE,OAAO;EAAU,OAAO,MAAM;CAAO;CACvC;EAAE,OAAO;EAAa,OAAO,MAAM;CAAU;CAC7C;EAAE,OAAO;EAAS,OAAO,MAAM;CAAM;AACvC;AAEA,IAAM,aAA4C;CAChD,QAAQ;CACR,WAAW;CACX,OAAO;AACT;AAUA,SAAgB,YAAY,EAAE,cAAc,oBAAsC;CAChF,MAAM,CAAC,QAAQ,aAAa,SAAwB,QAAQ;CAC5D,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,SAAS,sBAAsB,kBAAkB,MAAM;CACrF,MAAM,EAAE,cAAc,kBAAkB;CAExC,MAAM,OAAO,cAAc,WAAW,UAAU,OAAO,UAAU,GAAG,CAAC,CAAC,QAAQ;CAC9E,MAAM,OAAO,KAAK,IAAI,GAAG,GAAG,KAAK,KAAI,MAAK,EAAE,OAAO,CAAC,CAAC;CAErD,MAAM,SAAS;EACb,OAAO,MAAM;EACb,WAAW;GAAE,OAAO;GAAQ,eAAe;GAAW,SAAS;EAAM;EACrE,SAAS,gBAAgB,oBAAC,oBAAD,EAAoB,eAAe,aAAa,YAAY,OAAO,EAAI,CAAA;EAChG,SACE,oBAAC,YAAY,SAAb,EAAA,UACE,oBAAC,wBAAD,EAAwB,QAAQ,OAAS,CAAA,EACtB,CAAA;CAEzB;CAEA,IAAI,SACF,OACE,oBAAC,WAAD;EAAW,GAAI;EACb,UAAA,oBAAC,gBAAD,CAAiB,CAAA;CACR,CAAA;CAIf,OACE,oBAAC,WAAD;EACE,GAAI;EACJ,OAAO,OAAO,IAAI,eAAe,IAAI,IAAI;EAC9B;EACX,YAAY;EAEZ,UAAA,oBAAC,WAAD;GAAW,SAAS,CAAC,aAAa,SAAS;GAAG,cAAc,MAAM,WAAW,QAAQ;GACnF,UAAA,oBAAC,kBAAD;IACE,WAAU;IACJ;IACN,QAAQ;IACR,QAAO;IACP,SAAQ;IACR,YAAY;IACZ,gBAAgB;IAChB,eAAe;IACf,eAAe,sBAAqB,QAAO,iBAAiB,aAAa,OAAO,IAAI,EAAE,GAAG,IAAI,CAAC;IACnF;IACX,GAAI;GACL,CAAA;EACQ,CAAA;CACF,CAAA;AAEf"}
@@ -2,7 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_domains_metrics_hooks_use_metrics = require("../hooks/use-metrics.cjs.js");
3
3
  const require_domains_metrics_metrics_date_presets = require("../metrics-date-presets.cjs.js");
4
4
  const require_domains_metrics_hooks_use_trace_retention_min_date = require("../hooks/use-trace-retention-min-date.cjs.js");
5
- const require_filter_bar_time_range = require("../../../filter-bar-time-range-BA-pXMlo.cjs");
5
+ const require_filter_bar_time_range = require("../../../filter-bar-time-range-zdM024JD.cjs");
6
6
  let react_jsx_runtime = require("react/jsx-runtime");
7
7
  // src/domains/metrics/components/metrics-time-range-chip.tsx
8
8
  /**
@@ -1,7 +1,7 @@
1
1
  import { useMetrics } from "../hooks/use-metrics.es.js";
2
2
  import { METRICS_PICKER_PRESETS, fromPickerPreset, toPickerPreset } from "../metrics-date-presets.es.js";
3
3
  import { useTraceRetentionMinDate } from "../hooks/use-trace-retention-min-date.es.js";
4
- import { i as FilterBarTimeRange } from "../../../filter-bar-time-range-mg9JeYue.js";
4
+ import { i as FilterBarTimeRange } from "../../../filter-bar-time-range-qlV8p7hp.js";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  // src/domains/metrics/components/metrics-time-range-chip.tsx
7
7
  /**
@@ -4,7 +4,7 @@ const require_domains_metrics_components_chart_card = require("./chart-card.cjs.
4
4
  const require_domains_metrics_components_chart_card_error = require("./chart-card-error.cjs.js");
5
5
  const require_domains_metrics_lib_chart_axis = require("../lib/chart-axis.cjs.js");
6
6
  const require_domains_metrics_lib_chart_colors = require("../lib/chart-colors.cjs.js");
7
- const require_MetricsLineChart = require("../../../MetricsLineChart-CjBm4IXu.cjs");
7
+ const require_MetricsLineChart = require("../../../MetricsLineChart-tZxsauau.cjs");
8
8
  const require_domains_metrics_hooks_use_metrics_scores = require("../hooks/use-metrics-scores.cjs.js");
9
9
  let react_jsx_runtime = require("react/jsx-runtime");
10
10
  // src/domains/metrics/components/scores-card.tsx
@@ -42,6 +42,7 @@ function ScoresCard() {
42
42
  isEmpty: !isLoading && scorers.length === 0,
43
43
  emptyMessage: "No scores in this range.",
44
44
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_MetricsLineChart.MetricsLineChart, {
45
+ lineStyle: "thin",
45
46
  data: data?.buckets ?? [],
46
47
  series: scorerSeries(scorers),
47
48
  height: "fill",
@@ -1 +1 @@
1
- {"version":3,"file":"scores-card.cjs.js","names":["CHART_COLORS","useMetricsScores","ChartCard","ChartCardError","ChartArea","MetricsLineChart","BUCKET_AXIS"],"sources":["../../../../src/domains/metrics/components/scores-card.tsx"],"sourcesContent":["import { useMetricsScores } from '../hooks/use-metrics-scores';\nimport type { ScorerAverage } from '../hooks/use-metrics-scores';\nimport { BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChart } from '@/ds/components/MetricsLineChart';\n\n/** Scores aren't problems, so no warm hues; past five scorers the colors repeat. */\nconst SCORER_COLORS = [\n CHART_COLORS.green,\n CHART_COLORS.sky,\n CHART_COLORS.violet,\n CHART_COLORS.teal,\n CHART_COLORS.indigo,\n];\n\nconst formatScore = (score: number) => score.toFixed(2);\nconst axisScore = (score: number) => String(+score.toFixed(2));\n\n/** One line per scorer. */\nfunction scorerSeries(scorers: ScorerAverage[]): MetricsLineChartSeries[] {\n return scorers.map(({ scorerId, name }, i) => ({\n dataKey: scorerId,\n label: name,\n color: SCORER_COLORS[i % SCORER_COLORS.length] ?? CHART_COLORS.neutral,\n }));\n}\n\n/** Average result of each scorer over time, 0 to 1. */\nexport function ScoresCard() {\n const { data, isLoading, isError, isPlaceholderData } = useMetricsScores();\n const scorers = data?.scorers ?? [];\n\n const layout = { title: 'Scores' };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard {...layout} isUpdating={isPlaceholderData}>\n <ChartArea isEmpty={!isLoading && scorers.length === 0} emptyMessage=\"No scores in this range.\">\n <MetricsLineChart\n data={data?.buckets ?? []}\n series={scorerSeries(scorers)}\n height=\"fill\"\n yDomain={[0, 1]}\n valueFormatter={formatScore}\n axisFormatter={axisScore}\n isLoading={isLoading}\n {...BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"mappings":";;;;;;;;;;;AAWA,IAAM,gBAAgB;CACpBA,yCAAAA,aAAa;CACbA,yCAAAA,aAAa;CACbA,yCAAAA,aAAa;CACbA,yCAAAA,aAAa;CACbA,yCAAAA,aAAa;AACf;AAEA,IAAM,eAAe,UAAkB,MAAM,QAAQ,CAAC;AACtD,IAAM,aAAa,UAAkB,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC;;AAG7D,SAAS,aAAa,SAAoD;CACxE,OAAO,QAAQ,KAAK,EAAE,UAAU,QAAQ,OAAO;EAC7C,SAAS;EACT,OAAO;EACP,OAAO,cAAc,IAAI,cAAc,WAAWA,yCAAAA,aAAa;CACjE,EAAE;AACJ;;AAGA,SAAgB,aAAa;CAC3B,MAAM,EAAE,MAAM,WAAW,SAAS,sBAAsBC,iDAAAA,iBAAiB;CACzE,MAAM,UAAU,MAAM,WAAW,CAAC;CAElC,MAAM,SAAS,EAAE,OAAO,SAAS;CAEjC,IAAI,SACF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,8CAAAA,WAAD;EAAW,GAAI;EACb,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,oDAAAA,gBAAD,CAAiB,CAAA;CACR,CAAA;CAIf,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,8CAAAA,WAAD;EAAW,GAAI;EAAQ,YAAY;EACjC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACE,8CAAAA,WAAD;GAAW,SAAS,CAAC,aAAa,QAAQ,WAAW;GAAG,cAAa;GACnE,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,kBAAD;IACE,MAAM,MAAM,WAAW,CAAC;IACxB,QAAQ,aAAa,OAAO;IAC5B,QAAO;IACP,SAAS,CAAC,GAAG,CAAC;IACd,gBAAgB;IAChB,eAAe;IACJ;IACX,GAAIC,uCAAAA;GACL,CAAA;EACQ,CAAA;CACF,CAAA;AAEf"}
1
+ {"version":3,"file":"scores-card.cjs.js","names":["CHART_COLORS","useMetricsScores","ChartCard","ChartCardError","ChartArea","MetricsLineChart","BUCKET_AXIS"],"sources":["../../../../src/domains/metrics/components/scores-card.tsx"],"sourcesContent":["import { useMetricsScores } from '../hooks/use-metrics-scores';\nimport type { ScorerAverage } from '../hooks/use-metrics-scores';\nimport { BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChart } from '@/ds/components/MetricsLineChart';\n\n/** Scores aren't problems, so no warm hues; past five scorers the colors repeat. */\nconst SCORER_COLORS = [\n CHART_COLORS.green,\n CHART_COLORS.sky,\n CHART_COLORS.violet,\n CHART_COLORS.teal,\n CHART_COLORS.indigo,\n];\n\nconst formatScore = (score: number) => score.toFixed(2);\nconst axisScore = (score: number) => String(+score.toFixed(2));\n\n/** One line per scorer. */\nfunction scorerSeries(scorers: ScorerAverage[]): MetricsLineChartSeries[] {\n return scorers.map(({ scorerId, name }, i) => ({\n dataKey: scorerId,\n label: name,\n color: SCORER_COLORS[i % SCORER_COLORS.length] ?? CHART_COLORS.neutral,\n }));\n}\n\n/** Average result of each scorer over time, 0 to 1. */\nexport function ScoresCard() {\n const { data, isLoading, isError, isPlaceholderData } = useMetricsScores();\n const scorers = data?.scorers ?? [];\n\n const layout = { title: 'Scores' };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard {...layout} isUpdating={isPlaceholderData}>\n <ChartArea isEmpty={!isLoading && scorers.length === 0} emptyMessage=\"No scores in this range.\">\n <MetricsLineChart\n lineStyle=\"thin\"\n data={data?.buckets ?? []}\n series={scorerSeries(scorers)}\n height=\"fill\"\n yDomain={[0, 1]}\n valueFormatter={formatScore}\n axisFormatter={axisScore}\n isLoading={isLoading}\n {...BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"mappings":";;;;;;;;;;;AAWA,IAAM,gBAAgB;CACpBA,yCAAAA,aAAa;CACbA,yCAAAA,aAAa;CACbA,yCAAAA,aAAa;CACbA,yCAAAA,aAAa;CACbA,yCAAAA,aAAa;AACf;AAEA,IAAM,eAAe,UAAkB,MAAM,QAAQ,CAAC;AACtD,IAAM,aAAa,UAAkB,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC;;AAG7D,SAAS,aAAa,SAAoD;CACxE,OAAO,QAAQ,KAAK,EAAE,UAAU,QAAQ,OAAO;EAC7C,SAAS;EACT,OAAO;EACP,OAAO,cAAc,IAAI,cAAc,WAAWA,yCAAAA,aAAa;CACjE,EAAE;AACJ;;AAGA,SAAgB,aAAa;CAC3B,MAAM,EAAE,MAAM,WAAW,SAAS,sBAAsBC,iDAAAA,iBAAiB;CACzE,MAAM,UAAU,MAAM,WAAW,CAAC;CAElC,MAAM,SAAS,EAAE,OAAO,SAAS;CAEjC,IAAI,SACF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,8CAAAA,WAAD;EAAW,GAAI;EACb,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,oDAAAA,gBAAD,CAAiB,CAAA;CACR,CAAA;CAIf,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,8CAAAA,WAAD;EAAW,GAAI;EAAQ,YAAY;EACjC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACE,8CAAAA,WAAD;GAAW,SAAS,CAAC,aAAa,QAAQ,WAAW;GAAG,cAAa;GACnE,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,yBAAAA,kBAAD;IACE,WAAU;IACV,MAAM,MAAM,WAAW,CAAC;IACxB,QAAQ,aAAa,OAAO;IAC5B,QAAO;IACP,SAAS,CAAC,GAAG,CAAC;IACd,gBAAgB;IAChB,eAAe;IACJ;IACX,GAAIC,uCAAAA;GACL,CAAA;EACQ,CAAA;CACF,CAAA;AAEf"}
@@ -3,7 +3,7 @@ import { ChartCard } from "./chart-card.es.js";
3
3
  import { ChartCardError } from "./chart-card-error.es.js";
4
4
  import { BUCKET_AXIS } from "../lib/chart-axis.es.js";
5
5
  import { CHART_COLORS } from "../lib/chart-colors.es.js";
6
- import { t as MetricsLineChart } from "../../../MetricsLineChart-BhHoduO0.js";
6
+ import { t as MetricsLineChart } from "../../../MetricsLineChart-4SwxBbQx.js";
7
7
  import { useMetricsScores } from "../hooks/use-metrics-scores.es.js";
8
8
  import { jsx } from "react/jsx-runtime";
9
9
  // src/domains/metrics/components/scores-card.tsx
@@ -41,6 +41,7 @@ function ScoresCard() {
41
41
  isEmpty: !isLoading && scorers.length === 0,
42
42
  emptyMessage: "No scores in this range.",
43
43
  children: /* @__PURE__ */ jsx(MetricsLineChart, {
44
+ lineStyle: "thin",
44
45
  data: data?.buckets ?? [],
45
46
  series: scorerSeries(scorers),
46
47
  height: "fill",
@@ -1 +1 @@
1
- {"version":3,"file":"scores-card.es.js","names":[],"sources":["../../../../src/domains/metrics/components/scores-card.tsx"],"sourcesContent":["import { useMetricsScores } from '../hooks/use-metrics-scores';\nimport type { ScorerAverage } from '../hooks/use-metrics-scores';\nimport { BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChart } from '@/ds/components/MetricsLineChart';\n\n/** Scores aren't problems, so no warm hues; past five scorers the colors repeat. */\nconst SCORER_COLORS = [\n CHART_COLORS.green,\n CHART_COLORS.sky,\n CHART_COLORS.violet,\n CHART_COLORS.teal,\n CHART_COLORS.indigo,\n];\n\nconst formatScore = (score: number) => score.toFixed(2);\nconst axisScore = (score: number) => String(+score.toFixed(2));\n\n/** One line per scorer. */\nfunction scorerSeries(scorers: ScorerAverage[]): MetricsLineChartSeries[] {\n return scorers.map(({ scorerId, name }, i) => ({\n dataKey: scorerId,\n label: name,\n color: SCORER_COLORS[i % SCORER_COLORS.length] ?? CHART_COLORS.neutral,\n }));\n}\n\n/** Average result of each scorer over time, 0 to 1. */\nexport function ScoresCard() {\n const { data, isLoading, isError, isPlaceholderData } = useMetricsScores();\n const scorers = data?.scorers ?? [];\n\n const layout = { title: 'Scores' };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard {...layout} isUpdating={isPlaceholderData}>\n <ChartArea isEmpty={!isLoading && scorers.length === 0} emptyMessage=\"No scores in this range.\">\n <MetricsLineChart\n data={data?.buckets ?? []}\n series={scorerSeries(scorers)}\n height=\"fill\"\n yDomain={[0, 1]}\n valueFormatter={formatScore}\n axisFormatter={axisScore}\n isLoading={isLoading}\n {...BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"mappings":";;;;;;;;;;AAWA,IAAM,gBAAgB;CACpB,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;AACf;AAEA,IAAM,eAAe,UAAkB,MAAM,QAAQ,CAAC;AACtD,IAAM,aAAa,UAAkB,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC;;AAG7D,SAAS,aAAa,SAAoD;CACxE,OAAO,QAAQ,KAAK,EAAE,UAAU,QAAQ,OAAO;EAC7C,SAAS;EACT,OAAO;EACP,OAAO,cAAc,IAAI,cAAc,WAAW,aAAa;CACjE,EAAE;AACJ;;AAGA,SAAgB,aAAa;CAC3B,MAAM,EAAE,MAAM,WAAW,SAAS,sBAAsB,iBAAiB;CACzE,MAAM,UAAU,MAAM,WAAW,CAAC;CAElC,MAAM,SAAS,EAAE,OAAO,SAAS;CAEjC,IAAI,SACF,OACE,oBAAC,WAAD;EAAW,GAAI;EACb,UAAA,oBAAC,gBAAD,CAAiB,CAAA;CACR,CAAA;CAIf,OACE,oBAAC,WAAD;EAAW,GAAI;EAAQ,YAAY;EACjC,UAAA,oBAAC,WAAD;GAAW,SAAS,CAAC,aAAa,QAAQ,WAAW;GAAG,cAAa;GACnE,UAAA,oBAAC,kBAAD;IACE,MAAM,MAAM,WAAW,CAAC;IACxB,QAAQ,aAAa,OAAO;IAC5B,QAAO;IACP,SAAS,CAAC,GAAG,CAAC;IACd,gBAAgB;IAChB,eAAe;IACJ;IACX,GAAI;GACL,CAAA;EACQ,CAAA;CACF,CAAA;AAEf"}
1
+ {"version":3,"file":"scores-card.es.js","names":[],"sources":["../../../../src/domains/metrics/components/scores-card.tsx"],"sourcesContent":["import { useMetricsScores } from '../hooks/use-metrics-scores';\nimport type { ScorerAverage } from '../hooks/use-metrics-scores';\nimport { BUCKET_AXIS } from '../lib/chart-axis';\nimport { CHART_COLORS } from '../lib/chart-colors';\nimport { ChartArea } from './chart-area';\nimport { ChartCard } from './chart-card';\nimport { ChartCardError } from './chart-card-error';\nimport type { MetricsLineChartSeries } from '@/ds/components/MetricsLineChart';\nimport { MetricsLineChart } from '@/ds/components/MetricsLineChart';\n\n/** Scores aren't problems, so no warm hues; past five scorers the colors repeat. */\nconst SCORER_COLORS = [\n CHART_COLORS.green,\n CHART_COLORS.sky,\n CHART_COLORS.violet,\n CHART_COLORS.teal,\n CHART_COLORS.indigo,\n];\n\nconst formatScore = (score: number) => score.toFixed(2);\nconst axisScore = (score: number) => String(+score.toFixed(2));\n\n/** One line per scorer. */\nfunction scorerSeries(scorers: ScorerAverage[]): MetricsLineChartSeries[] {\n return scorers.map(({ scorerId, name }, i) => ({\n dataKey: scorerId,\n label: name,\n color: SCORER_COLORS[i % SCORER_COLORS.length] ?? CHART_COLORS.neutral,\n }));\n}\n\n/** Average result of each scorer over time, 0 to 1. */\nexport function ScoresCard() {\n const { data, isLoading, isError, isPlaceholderData } = useMetricsScores();\n const scorers = data?.scorers ?? [];\n\n const layout = { title: 'Scores' };\n\n if (isError) {\n return (\n <ChartCard {...layout}>\n <ChartCardError />\n </ChartCard>\n );\n }\n\n return (\n <ChartCard {...layout} isUpdating={isPlaceholderData}>\n <ChartArea isEmpty={!isLoading && scorers.length === 0} emptyMessage=\"No scores in this range.\">\n <MetricsLineChart\n lineStyle=\"thin\"\n data={data?.buckets ?? []}\n series={scorerSeries(scorers)}\n height=\"fill\"\n yDomain={[0, 1]}\n valueFormatter={formatScore}\n axisFormatter={axisScore}\n isLoading={isLoading}\n {...BUCKET_AXIS}\n />\n </ChartArea>\n </ChartCard>\n );\n}\n"],"mappings":";;;;;;;;;;AAWA,IAAM,gBAAgB;CACpB,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;AACf;AAEA,IAAM,eAAe,UAAkB,MAAM,QAAQ,CAAC;AACtD,IAAM,aAAa,UAAkB,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC;;AAG7D,SAAS,aAAa,SAAoD;CACxE,OAAO,QAAQ,KAAK,EAAE,UAAU,QAAQ,OAAO;EAC7C,SAAS;EACT,OAAO;EACP,OAAO,cAAc,IAAI,cAAc,WAAW,aAAa;CACjE,EAAE;AACJ;;AAGA,SAAgB,aAAa;CAC3B,MAAM,EAAE,MAAM,WAAW,SAAS,sBAAsB,iBAAiB;CACzE,MAAM,UAAU,MAAM,WAAW,CAAC;CAElC,MAAM,SAAS,EAAE,OAAO,SAAS;CAEjC,IAAI,SACF,OACE,oBAAC,WAAD;EAAW,GAAI;EACb,UAAA,oBAAC,gBAAD,CAAiB,CAAA;CACR,CAAA;CAIf,OACE,oBAAC,WAAD;EAAW,GAAI;EAAQ,YAAY;EACjC,UAAA,oBAAC,WAAD;GAAW,SAAS,CAAC,aAAa,QAAQ,WAAW;GAAG,cAAa;GACnE,UAAA,oBAAC,kBAAD;IACE,WAAU;IACV,MAAM,MAAM,WAAW,CAAC;IACxB,QAAQ,aAAa,OAAO;IAC5B,QAAO;IACP,SAAS,CAAC,GAAG,CAAC;IACd,gBAAgB;IAChB,eAAe;IACJ;IACX,GAAI;GACL,CAAA;EACQ,CAAA;CACF,CAAA;AAEf"}
@@ -2,15 +2,15 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_domains_metrics_lib_chart_format = require("../lib/chart-format.cjs.js");
3
3
  const require_domains_metrics_hooks_use_metrics_filters = require("../hooks/use-metrics-filters.cjs.js");
4
4
  const require_domains_metrics_lib_metrics_buckets = require("../lib/metrics-buckets.cjs.js");
5
- const require_MetricsCard = require("../../../MetricsCard-CEB-f2sv.cjs");
5
+ const require_MetricsCard = require("../../../MetricsCard-BEwiS7Pe.cjs");
6
6
  const require_domains_metrics_components_chart_area = require("./chart-area.cjs.js");
7
7
  const require_domains_metrics_components_chart_card = require("./chart-card.cjs.js");
8
8
  const require_domains_metrics_components_chart_card_error = require("./chart-card-error.cjs.js");
9
9
  const require_domains_metrics_lib_chart_axis = require("../lib/chart-axis.cjs.js");
10
10
  const require_domains_metrics_lib_chart_colors = require("../lib/chart-colors.cjs.js");
11
- const require_MetricsLineChart = require("../../../MetricsLineChart-CjBm4IXu.cjs");
11
+ const require_MetricsLineChart = require("../../../MetricsLineChart-tZxsauau.cjs");
12
12
  const require_domains_metrics_components_card_action_buttons = require("./card-action-buttons.cjs.js");
13
- const require_MetricsStackedBarChart = require("../../../MetricsStackedBarChart-BdMlKv6G.cjs");
13
+ const require_MetricsStackedBarChart = require("../../../MetricsStackedBarChart-CDLE76IB.cjs");
14
14
  const require_domains_metrics_hooks_use_metrics_activity = require("../hooks/use-metrics-activity.cjs.js");
15
15
  let react = require("react");
16
16
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -1,15 +1,15 @@
1
1
  import { formatAxisCount, formatAxisUsd, formatCount, formatUsd } from "../lib/chart-format.es.js";
2
2
  import { useMetricsFilters } from "../hooks/use-metrics-filters.es.js";
3
3
  import { bucketPlan, bucketWindow } from "../lib/metrics-buckets.es.js";
4
- import { t as MetricsCard } from "../../../MetricsCard-M8awJ2B_.js";
4
+ import { t as MetricsCard } from "../../../MetricsCard-ua6C6b8a.js";
5
5
  import { ChartArea } from "./chart-area.es.js";
6
6
  import { ChartCard } from "./chart-card.es.js";
7
7
  import { ChartCardError } from "./chart-card-error.es.js";
8
8
  import { EDGE_BUCKET_AXIS } from "../lib/chart-axis.es.js";
9
9
  import { CHART_COLORS } from "../lib/chart-colors.es.js";
10
- import { r as MetricsLineChartLegend } from "../../../MetricsLineChart-BhHoduO0.js";
10
+ import { r as MetricsLineChartLegend } from "../../../MetricsLineChart-4SwxBbQx.js";
11
11
  import { OpenInTracesButton } from "./card-action-buttons.es.js";
12
- import { t as MetricsStackedBarChart } from "../../../MetricsStackedBarChart-BRuA6MTE.js";
12
+ import { t as MetricsStackedBarChart } from "../../../MetricsStackedBarChart-D2QyS4-z.js";
13
13
  import { useMetricsActivity } from "../hooks/use-metrics-activity.es.js";
14
14
  import { useState } from "react";
15
15
  import { jsx } from "react/jsx-runtime";
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_domains_metrics_hooks_use_metrics_trace_aggregate = require("../hooks/use-metrics-trace-aggregate.cjs.js");
3
- const require_MetricsCard = require("../../../MetricsCard-CEB-f2sv.cjs");
3
+ const require_MetricsCard = require("../../../MetricsCard-BEwiS7Pe.cjs");
4
4
  const require_domains_metrics_components_chart_card = require("./chart-card.cjs.js");
5
5
  let react_jsx_runtime = require("react/jsx-runtime");
6
6
  // src/domains/metrics/components/trace-aggregate-card.tsx
@@ -1,5 +1,5 @@
1
1
  import { useTraceAggregateGate } from "../hooks/use-metrics-trace-aggregate.es.js";
2
- import { t as MetricsCard } from "../../../MetricsCard-M8awJ2B_.js";
2
+ import { t as MetricsCard } from "../../../MetricsCard-ua6C6b8a.js";
3
3
  import { ChartCard } from "./chart-card.es.js";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  // src/domains/metrics/components/trace-aggregate-card.tsx
@@ -4,7 +4,7 @@ const require_Txt = require("../../../Txt-BnoSqxKE.cjs");
4
4
  const require_domains_metrics_lib_chart_format = require("../../metrics/lib/chart-format.cjs.js");
5
5
  const require_domains_metrics_lib_chart_axis = require("../../metrics/lib/chart-axis.cjs.js");
6
6
  const require_domains_metrics_lib_chart_colors = require("../../metrics/lib/chart-colors.cjs.js");
7
- const require_MetricsStackedBarChart = require("../../../MetricsStackedBarChart-BdMlKv6G.cjs");
7
+ const require_MetricsStackedBarChart = require("../../../MetricsStackedBarChart-CDLE76IB.cjs");
8
8
  let react = require("react");
9
9
  let react_jsx_runtime = require("react/jsx-runtime");
10
10
  // src/domains/observability/components/observability-histogram.tsx
@@ -3,7 +3,7 @@ import { t as Txt } from "../../../Txt-BM6TVV_c.js";
3
3
  import { formatCount } from "../../metrics/lib/chart-format.es.js";
4
4
  import { BUCKET_AXIS } from "../../metrics/lib/chart-axis.es.js";
5
5
  import { CHART_COLORS } from "../../metrics/lib/chart-colors.es.js";
6
- import { t as MetricsStackedBarChart } from "../../../MetricsStackedBarChart-BRuA6MTE.js";
6
+ import { t as MetricsStackedBarChart } from "../../../MetricsStackedBarChart-D2QyS4-z.js";
7
7
  import { useMemo } from "react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  // src/domains/observability/components/observability-histogram.tsx
@@ -1,10 +1,10 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_Txt = require("../../../Txt-BnoSqxKE.cjs");
3
3
  const require_icons_ScorersIcon = require("../../../icons/ScorersIcon.cjs.js");
4
- const require_MarkdownRenderer = require("../../../MarkdownRenderer-CB8Z_CHc.cjs");
4
+ const require_MarkdownRenderer = require("../../../MarkdownRenderer-y65WGBhC.cjs");
5
+ const require_components_HoverCard = require("../../../components/HoverCard.cjs.js");
5
6
  const require_spinner = require("../../../spinner-C8ZxiA5C.cjs");
6
7
  const require_data_list = require("../../../data-list-C4Vmq5HA.cjs");
7
- const require_components_HoverCard = require("../../../components/HoverCard.cjs.js");
8
8
  let react = require("react");
9
9
  let react_jsx_runtime = require("react/jsx-runtime");
10
10
  let lucide_react = require("lucide-react");
@@ -1,9 +1,9 @@
1
1
  import { t as Txt } from "../../../Txt-BM6TVV_c.js";
2
2
  import { ScorersIcon } from "../../../icons/ScorersIcon.es.js";
3
- import { t as MarkdownRenderer } from "../../../MarkdownRenderer-2GOXQJEv.js";
3
+ import { t as MarkdownRenderer } from "../../../MarkdownRenderer-CI30RqdB.js";
4
+ import { HoverCard, HoverCardContent, HoverCardTrigger } from "../../../components/HoverCard.es.js";
4
5
  import { t as Spinner } from "../../../spinner-CnLgLj9R.js";
5
6
  import { t as DataList } from "../../../data-list-DHCOoLmj.js";
6
- import { HoverCard, HoverCardContent, HoverCardTrigger } from "../../../components/HoverCard.es.js";
7
7
  import { Fragment, useState } from "react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  import { InfoIcon } from "lucide-react";
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_Txt = require("../../Txt-BnoSqxKE.cjs");
3
3
  const require_input = require("../../input-2hRXcZIu.cjs");
4
- const require_MarkdownRenderer = require("../../MarkdownRenderer-CB8Z_CHc.cjs");
4
+ const require_MarkdownRenderer = require("../../MarkdownRenderer-y65WGBhC.cjs");
5
5
  const require_CodeEditor = require("../../CodeEditor-CLzs0yVc.cjs");
6
6
  const require_components_Field = require("../../components/Field.cjs.js");
7
7
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -1,6 +1,6 @@
1
1
  import { t as Txt } from "../../Txt-BM6TVV_c.js";
2
2
  import { t as Input } from "../../input-0l1uzOBZ.js";
3
- import { t as MarkdownRenderer } from "../../MarkdownRenderer-2GOXQJEv.js";
3
+ import { t as MarkdownRenderer } from "../../MarkdownRenderer-CI30RqdB.js";
4
4
  import { t as CodeEditor } from "../../CodeEditor-COnz9c6B.js";
5
5
  import { Field, FieldLabel } from "../../components/Field.es.js";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";