@mastra/playground-ui 58.0.0 → 59.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -0
- package/dist/{Badge-TD55_qZJ.js → Badge-Bzn8Z-_I.js} +2 -2
- package/dist/Badge-Bzn8Z-_I.js.map +1 -0
- package/dist/{Badge-BEeYtjmv.cjs → Badge-DFNxcz-r.cjs} +2 -2
- package/dist/Badge-DFNxcz-r.cjs.map +1 -0
- package/dist/{Header-BVnFQlzE.js → Header-hTHhO02b.js} +2 -2
- package/dist/{Header-BVnFQlzE.js.map → Header-hTHhO02b.js.map} +1 -1
- package/dist/{Header-CGjhJ0nQ.cjs → Header-y51Sfo3G.cjs} +2 -2
- package/dist/{Header-CGjhJ0nQ.cjs.map → Header-y51Sfo3G.cjs.map} +1 -1
- package/dist/{Txt-DTh3Pa_a.js → Txt-BP1SRHmL.js} +4 -10
- package/dist/Txt-BP1SRHmL.js.map +1 -0
- package/dist/{Txt-B4-2nLaI.cjs → Txt-DPmEpNbp.cjs} +4 -10
- package/dist/Txt-DPmEpNbp.cjs.map +1 -0
- package/dist/{ask-user-BPpgiE7k.cjs → ask-user-4pnmHbuC.cjs} +3 -3
- package/dist/{ask-user-BPpgiE7k.cjs.map → ask-user-4pnmHbuC.cjs.map} +1 -1
- package/dist/{ask-user-jDUt7hgT.js → ask-user-CFcQN_7m.js} +3 -3
- package/dist/{ask-user-jDUt7hgT.js.map → ask-user-CFcQN_7m.js.map} +1 -1
- package/dist/{chat-notification-CmdRGO_D.js → chat-notification-BI_WRUvG.js} +3 -3
- package/dist/{chat-notification-CmdRGO_D.js.map → chat-notification-BI_WRUvG.js.map} +1 -1
- package/dist/{chat-notification-DJykWtoj.cjs → chat-notification-Dc7jwULm.cjs} +3 -3
- package/dist/{chat-notification-DJykWtoj.cjs.map → chat-notification-Dc7jwULm.cjs.map} +1 -1
- package/dist/{chat-signal-xs3FkPts.cjs → chat-signal-BodewV33.cjs} +3 -3
- package/dist/{chat-signal-xs3FkPts.cjs.map → chat-signal-BodewV33.cjs.map} +1 -1
- package/dist/{chat-signal-Vg8pGXwH.js → chat-signal-D0zw80bU.js} +3 -3
- package/dist/{chat-signal-Vg8pGXwH.js.map → chat-signal-D0zw80bU.js.map} +1 -1
- package/dist/{combobox-BoSB-muq.cjs → combobox-B19HJqE-.cjs} +2 -2
- package/dist/{combobox-BoSB-muq.cjs.map → combobox-B19HJqE-.cjs.map} +1 -1
- package/dist/{combobox-Cd0JPUQW.js → combobox-D_kmwSKS.js} +2 -2
- package/dist/{combobox-Cd0JPUQW.js.map → combobox-D_kmwSKS.js.map} +1 -1
- package/dist/components/Avatar.cjs.js +1 -1
- package/dist/components/Avatar.es.js +1 -1
- package/dist/components/Badge.cjs.js +1 -1
- package/dist/components/Badge.es.js +1 -1
- package/dist/components/ClampedText.cjs.js +1 -1
- package/dist/components/ClampedText.es.js +1 -1
- package/dist/components/Combobox.cjs.js +1 -1
- package/dist/components/Combobox.es.js +1 -1
- package/dist/components/Comment.cjs.js +2 -2
- package/dist/components/Comment.es.js +2 -2
- package/dist/components/CompactNumber.cjs.js +24 -0
- package/dist/components/CompactNumber.cjs.js.map +1 -0
- package/dist/components/CompactNumber.d.ts +2 -0
- package/dist/components/CompactNumber.es.js +20 -0
- package/dist/components/CompactNumber.es.js.map +1 -0
- package/dist/components/DataCodeSection.cjs.js +1 -1
- package/dist/components/DataCodeSection.es.js +1 -1
- package/dist/components/DataList.cjs.js +8 -14
- package/dist/components/DataList.cjs.js.map +1 -1
- package/dist/components/DataList.es.js +8 -14
- package/dist/components/DataList.es.js.map +1 -1
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.es.js +1 -1
- package/dist/components/DateRangeTimeline.cjs.js +1 -1
- package/dist/components/DateRangeTimeline.es.js +1 -1
- package/dist/components/DateTimePicker.cjs.js +1 -1
- package/dist/components/DateTimePicker.es.js +1 -1
- package/dist/components/DateTimeRangePicker.cjs.js +1 -1
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/Entity.cjs.js +1 -1
- package/dist/components/Entity.es.js +1 -1
- package/dist/components/EntityHeader.cjs.js +1 -1
- package/dist/components/EntityHeader.es.js +1 -1
- package/dist/components/Entry.cjs.js +1 -1
- package/dist/components/Entry.es.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +3 -3
- package/dist/components/EnvironmentVariablesEditor.es.js +3 -3
- package/dist/components/FilterBar.cjs.js +1 -1
- package/dist/components/FilterBar.es.js +1 -1
- package/dist/components/FormFieldBlocks.cjs.js +4 -4
- package/dist/components/FormFieldBlocks.es.js +4 -4
- package/dist/components/Header.cjs.js +1 -1
- package/dist/components/Header.es.js +1 -1
- package/dist/components/InlineCode.cjs.js +10 -0
- package/dist/components/InlineCode.cjs.js.map +1 -0
- package/dist/components/InlineCode.d.ts +2 -0
- package/dist/components/InlineCode.es.js +2 -0
- package/dist/components/InlineCode.es.js.map +1 -0
- package/dist/components/ItemList.cjs.js +5 -17
- package/dist/components/ItemList.cjs.js.map +1 -1
- package/dist/components/ItemList.es.js +5 -17
- package/dist/components/ItemList.es.js.map +1 -1
- package/dist/components/JSONSchemaForm.cjs.js +2 -2
- package/dist/components/JSONSchemaForm.es.js +2 -2
- package/dist/components/ListSearch.cjs.js +1 -1
- package/dist/components/ListSearch.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +2 -2
- package/dist/components/LogsDataList.es.js +2 -2
- package/dist/components/Message.cjs.js +4 -5
- package/dist/components/Message.cjs.js.map +1 -1
- package/dist/components/Message.es.js +4 -5
- package/dist/components/Message.es.js.map +1 -1
- package/dist/components/MetricsCard.cjs.js +1 -1
- package/dist/components/MetricsCard.es.js +1 -1
- package/dist/components/MetricsCardGroup.cjs.js +2 -11
- package/dist/components/MetricsCardGroup.cjs.js.map +1 -1
- package/dist/components/MetricsCardGroup.es.js +2 -11
- package/dist/components/MetricsCardGroup.es.js.map +1 -1
- package/dist/components/MetricsKpiCard.cjs.js +1 -1
- package/dist/components/MetricsKpiCard.es.js +1 -1
- package/dist/components/MetricsLineChart.cjs.js +2 -1
- package/dist/components/MetricsLineChart.cjs.js.map +1 -1
- package/dist/components/MetricsLineChart.es.js +1 -1
- package/dist/components/PageHeader.cjs.js +1 -1
- package/dist/components/PageHeader.es.js +1 -1
- package/dist/components/PageLayout.cjs.js +1 -1
- package/dist/components/PageLayout.es.js +1 -1
- package/dist/components/PropertyFilter.cjs.js +1 -1
- package/dist/components/PropertyFilter.es.js +1 -1
- package/dist/components/RelativeTimestamp.cjs.js +119 -0
- package/dist/components/RelativeTimestamp.cjs.js.map +1 -0
- package/dist/components/RelativeTimestamp.d.ts +2 -0
- package/dist/components/RelativeTimestamp.es.js +115 -0
- package/dist/components/RelativeTimestamp.es.js.map +1 -0
- package/dist/components/Section.cjs.js +1 -1
- package/dist/components/Section.es.js +1 -1
- package/dist/components/SettingsRow.cjs.js +1 -1
- package/dist/components/SettingsRow.es.js +1 -1
- package/dist/components/SideDialog.cjs.js +1 -1
- package/dist/components/SideDialog.es.js +1 -1
- package/dist/components/StatusIndicators.cjs.js +21 -14
- package/dist/components/StatusIndicators.cjs.js.map +1 -1
- package/dist/components/StatusIndicators.es.js +21 -15
- package/dist/components/StatusIndicators.es.js.map +1 -1
- package/dist/components/Table.cjs.js +3 -21
- package/dist/components/Table.cjs.js.map +1 -1
- package/dist/components/Table.es.js +3 -21
- package/dist/components/Table.es.js.map +1 -1
- package/dist/components/ThreadList.cjs.js +1 -1
- package/dist/components/ThreadList.es.js +1 -1
- package/dist/components/Truncate.cjs.js +1 -1
- package/dist/components/Truncate.es.js +1 -1
- package/dist/components/Txt.cjs.js +1 -1
- package/dist/components/Txt.es.js +1 -1
- package/dist/components/Workflow.cjs.js +9 -13
- package/dist/components/Workflow.cjs.js.map +1 -1
- package/dist/components/Workflow.es.js +9 -13
- package/dist/components/Workflow.es.js.map +1 -1
- package/dist/components/ai/ask-user.cjs.js +1 -1
- package/dist/components/ai/ask-user.es.js +1 -1
- package/dist/components/ai/chat-event.cjs.js +3 -3
- package/dist/components/ai/chat-event.es.js +4 -4
- package/dist/components/ai/plan.cjs.js +3 -3
- package/dist/components/ai/plan.cjs.js.map +1 -1
- package/dist/components/ai/plan.es.js +3 -3
- package/dist/components/ai/plan.es.js.map +1 -1
- package/dist/components/ai/task-list.cjs.js +370 -55
- package/dist/components/ai/task-list.cjs.js.map +1 -1
- package/dist/components/ai/task-list.es.js +374 -58
- package/dist/components/ai/task-list.es.js.map +1 -1
- package/dist/components/ai/tool-call.cjs.js +7 -9
- package/dist/components/ai/tool-call.cjs.js.map +1 -1
- package/dist/components/ai/tool-call.es.js +8 -10
- package/dist/components/ai/tool-call.es.js.map +1 -1
- package/dist/{data-code-section-Cth9zVkj.js → data-code-section-BKrCkj90.js} +2 -2
- package/dist/{data-code-section-Cth9zVkj.js.map → data-code-section-BKrCkj90.js.map} +1 -1
- package/dist/{data-code-section-DE4AgaTU.cjs → data-code-section-C9z94ytx.cjs} +2 -2
- package/dist/{data-code-section-DE4AgaTU.cjs.map → data-code-section-C9z94ytx.cjs.map} +1 -1
- package/dist/{data-list-DisTjDHP.js → data-list-5-nRJbEO.js} +3 -3
- package/dist/{data-list-DisTjDHP.js.map → data-list-5-nRJbEO.js.map} +1 -1
- package/dist/{data-list-PwFpP_mo.cjs → data-list-RI8c32dk.cjs} +3 -3
- package/dist/{data-list-PwFpP_mo.cjs.map → data-list-RI8c32dk.cjs.map} +1 -1
- package/dist/{data-list-skeleton-DAfM8AjW.js → data-list-skeleton-BrSh9Y_3.js} +2 -2
- package/dist/{data-list-skeleton-DAfM8AjW.js.map → data-list-skeleton-BrSh9Y_3.js.map} +1 -1
- package/dist/{data-list-skeleton-CjwR0o3w.cjs → data-list-skeleton-CgbWqYky.cjs} +2 -2
- package/dist/{data-list-skeleton-CjwR0o3w.cjs.map → data-list-skeleton-CgbWqYky.cjs.map} +1 -1
- package/dist/{data-list-spacer-DEcgVGFM.cjs → data-list-spacer-1OqlC7WX.cjs} +2 -2
- package/dist/{data-list-spacer-DEcgVGFM.cjs.map → data-list-spacer-1OqlC7WX.cjs.map} +1 -1
- package/dist/{data-list-spacer-BmorAN0V.js → data-list-spacer-D3Rn1evn.js} +2 -2
- package/dist/{data-list-spacer-BmorAN0V.js.map → data-list-spacer-D3Rn1evn.js.map} +1 -1
- package/dist/{data-list-top-DpbOA3uw.js → data-list-top-B-AopfvE.js} +13 -21
- package/dist/data-list-top-B-AopfvE.js.map +1 -0
- package/dist/{data-list-top-WGUY167p.cjs → data-list-top-DFnudSA_.cjs} +13 -21
- package/dist/data-list-top-DFnudSA_.cjs.map +1 -0
- package/dist/{data-panel-BQVTKo86.js → data-panel-BWgExbHs.js} +2 -2
- package/dist/{data-panel-BQVTKo86.js.map → data-panel-BWgExbHs.js.map} +1 -1
- package/dist/{data-panel-XPXrhYJI.cjs → data-panel-C_BqhzeL.cjs} +2 -2
- package/dist/{data-panel-XPXrhYJI.cjs.map → data-panel-C_BqhzeL.cjs.map} +1 -1
- package/dist/{date-time-range-picker-C-t3Kdpk.js → date-time-range-picker-Bnviv7s-.js} +2 -2
- package/dist/{date-time-range-picker-C-t3Kdpk.js.map → date-time-range-picker-Bnviv7s-.js.map} +1 -1
- package/dist/{date-time-range-picker-BCzvSYx3.cjs → date-time-range-picker-sT5qAW-_.cjs} +2 -2
- package/dist/{date-time-range-picker-BCzvSYx3.cjs.map → date-time-range-picker-sT5qAW-_.cjs.map} +1 -1
- package/dist/domains/capabilities/hooks/use-feedback-available.cjs.js +16 -0
- package/dist/domains/capabilities/hooks/use-feedback-available.cjs.js.map +1 -0
- package/dist/domains/capabilities/hooks/use-feedback-available.d.ts +2 -0
- package/dist/domains/capabilities/hooks/use-feedback-available.es.js +12 -0
- package/dist/domains/capabilities/hooks/use-feedback-available.es.js.map +1 -0
- package/dist/domains/capabilities/hooks/use-observability-capabilities.cjs.js +20 -0
- package/dist/domains/capabilities/hooks/use-observability-capabilities.cjs.js.map +1 -0
- package/dist/domains/capabilities/hooks/use-observability-capabilities.d.ts +2 -0
- package/dist/domains/capabilities/hooks/use-observability-capabilities.es.js +16 -0
- package/dist/domains/capabilities/hooks/use-observability-capabilities.es.js.map +1 -0
- package/dist/domains/capabilities/hooks/use-trace-query-available.cjs.js +16 -0
- package/dist/domains/capabilities/hooks/use-trace-query-available.cjs.js.map +1 -0
- package/dist/domains/capabilities/hooks/use-trace-query-available.d.ts +2 -0
- package/dist/domains/capabilities/hooks/use-trace-query-available.es.js +12 -0
- package/dist/domains/capabilities/hooks/use-trace-query-available.es.js.map +1 -0
- package/dist/domains/capabilities/hooks.cjs.js +14 -0
- package/dist/domains/capabilities/hooks.cjs.js.map +1 -0
- package/dist/domains/capabilities/hooks.d.ts +2 -0
- package/dist/domains/capabilities/hooks.es.js +4 -0
- package/dist/domains/capabilities/hooks.es.js.map +1 -0
- package/dist/domains/capabilities.cjs.js +14 -0
- package/dist/domains/capabilities.cjs.js.map +1 -0
- package/dist/domains/capabilities.d.ts +2 -0
- package/dist/domains/capabilities.es.js +4 -0
- package/dist/domains/capabilities.es.js.map +1 -0
- package/dist/domains/chat/attachments/attachment-kind.es.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +1 -1
- package/dist/domains/chat/components/section-label.cjs.js +1 -1
- package/dist/domains/chat/components/section-label.es.js +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
- package/dist/domains/chat/messages/reasoning-streaming-line.cjs.js +1 -1
- package/dist/domains/chat/messages/reasoning-streaming-line.es.js +1 -1
- package/dist/domains/chat/messages/reasoning.cjs.js +4 -3
- package/dist/domains/chat/messages/reasoning.cjs.js.map +1 -1
- package/dist/domains/chat/messages/reasoning.es.js +4 -3
- package/dist/domains/chat/messages/reasoning.es.js.map +1 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +2 -2
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js.map +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +2 -2
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js.map +1 -1
- package/dist/domains/chat/messages/renderers/user-file-part-renderer.es.js +1 -1
- package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/signal-badge.es.js +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.cjs.js.map +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.es.js.map +1 -1
- package/dist/domains/chat/messages/tripwire-notice.cjs.js +2 -2
- package/dist/domains/chat/messages/tripwire-notice.cjs.js.map +1 -1
- package/dist/domains/chat/messages/tripwire-notice.es.js +2 -2
- package/dist/domains/chat/messages/tripwire-notice.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +3 -3
- package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js +3 -3
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +6 -4
- package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +6 -4
- package/dist/domains/chat/tools/badges/observation-marker-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +11 -8
- package/dist/domains/chat/tools/badges/observation-renderer.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.es.js +11 -8
- package/dist/domains/chat/tools/badges/observation-renderer.es.js.map +1 -1
- package/dist/domains/logs/components/log-data-panel.cjs.js +3 -6
- package/dist/domains/logs/components/log-data-panel.cjs.js.map +1 -1
- package/dist/domains/logs/components/log-data-panel.es.js +3 -6
- package/dist/domains/logs/components/log-data-panel.es.js.map +1 -1
- package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
- package/dist/domains/logs/components/logs-list-view.es.js +2 -2
- package/dist/domains/logs/components/no-logs-info.cjs.js +3 -4
- package/dist/domains/logs/components/no-logs-info.cjs.js.map +1 -1
- package/dist/domains/logs/components/no-logs-info.es.js +3 -4
- package/dist/domains/logs/components/no-logs-info.es.js.map +1 -1
- package/dist/domains/memory/components/flame-graph.cjs.js +7 -5
- package/dist/domains/memory/components/flame-graph.cjs.js.map +1 -1
- package/dist/domains/memory/components/flame-graph.es.js +8 -6
- package/dist/domains/memory/components/flame-graph.es.js.map +1 -1
- package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
- package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
- package/dist/domains/memory/components/observation-detail-view.cjs.js +4 -5
- package/dist/domains/memory/components/observation-detail-view.cjs.js.map +1 -1
- package/dist/domains/memory/components/observation-detail-view.es.js +4 -5
- package/dist/domains/memory/components/observation-detail-view.es.js.map +1 -1
- package/dist/domains/memory/components/thread-context-progress.cjs.js +1 -1
- package/dist/domains/memory/components/thread-context-progress.cjs.js.map +1 -1
- package/dist/domains/memory/components/thread-context-progress.es.js +1 -1
- package/dist/domains/memory/components/thread-context-progress.es.js.map +1 -1
- package/dist/domains/memory/lib/timeline.cjs.js +0 -9
- package/dist/domains/memory/lib/timeline.cjs.js.map +1 -1
- package/dist/domains/memory/lib/timeline.es.js +1 -9
- package/dist/domains/memory/lib/timeline.es.js.map +1 -1
- package/dist/domains/metrics/components/bar-list.cjs.js +4 -4
- package/dist/domains/metrics/components/bar-list.cjs.js.map +1 -1
- package/dist/domains/metrics/components/bar-list.es.js +4 -4
- package/dist/domains/metrics/components/bar-list.es.js.map +1 -1
- package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
- package/dist/domains/metrics/components/kpi-card-view.cjs.js +1 -1
- package/dist/domains/metrics/components/kpi-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/kpi-card-view.es.js +1 -1
- package/dist/domains/metrics/components/kpi-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/latency-card-view.cjs.js +33 -24
- package/dist/domains/metrics/components/latency-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/latency-card-view.es.js +34 -25
- package/dist/domains/metrics/components/latency-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/memory-card-view.cjs.js +9 -8
- package/dist/domains/metrics/components/memory-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/memory-card-view.es.js +8 -7
- package/dist/domains/metrics/components/memory-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/metrics-utils.cjs.js +0 -15
- package/dist/domains/metrics/components/metrics-utils.cjs.js.map +1 -1
- package/dist/domains/metrics/components/metrics-utils.es.js +1 -14
- package/dist/domains/metrics/components/metrics-utils.es.js.map +1 -1
- package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +6 -5
- package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +4 -3
- package/dist/domains/metrics/components/model-usage-cost-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/scores-card-view.cjs.js +5 -5
- package/dist/domains/metrics/components/scores-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/scores-card-view.es.js +5 -5
- package/dist/domains/metrics/components/scores-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +7 -6
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +7 -6
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +13 -11
- package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +13 -11
- package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +7 -6
- package/dist/domains/metrics/components/traces-volume-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/traces-volume-card-view.es.js +8 -7
- package/dist/domains/metrics/components/traces-volume-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components.cjs.js +0 -2
- package/dist/domains/metrics/components.cjs.js.map +1 -1
- package/dist/domains/metrics/components.es.js +1 -1
- package/dist/domains/metrics/hooks/use-latency-metrics.cjs.js +11 -11
- package/dist/domains/metrics/hooks/use-latency-metrics.cjs.js.map +1 -1
- package/dist/domains/metrics/hooks/use-latency-metrics.es.js +12 -11
- package/dist/domains/metrics/hooks/use-latency-metrics.es.js.map +1 -1
- package/dist/domains/metrics/hooks/use-metrics.cjs.js +3 -3
- package/dist/domains/metrics/hooks/use-metrics.cjs.js.map +1 -1
- package/dist/domains/metrics/hooks/use-metrics.es.js +3 -3
- package/dist/domains/metrics/hooks/use-metrics.es.js.map +1 -1
- package/dist/domains/metrics/hooks/use-model-usage-cost-metrics.cjs.js +5 -5
- package/dist/domains/metrics/hooks/use-model-usage-cost-metrics.cjs.js.map +1 -1
- package/dist/domains/metrics/hooks/use-model-usage-cost-metrics.es.js +5 -5
- package/dist/domains/metrics/hooks/use-model-usage-cost-metrics.es.js.map +1 -1
- package/dist/domains/metrics/hooks/use-scores-metrics.cjs.js +6 -7
- package/dist/domains/metrics/hooks/use-scores-metrics.cjs.js.map +1 -1
- package/dist/domains/metrics/hooks/use-scores-metrics.es.js +6 -7
- package/dist/domains/metrics/hooks/use-scores-metrics.es.js.map +1 -1
- package/dist/domains/metrics/hooks/use-token-usage-timeseries.cjs.js +4 -12
- package/dist/domains/metrics/hooks/use-token-usage-timeseries.cjs.js.map +1 -1
- package/dist/domains/metrics/hooks/use-token-usage-timeseries.es.js +4 -12
- package/dist/domains/metrics/hooks/use-token-usage-timeseries.es.js.map +1 -1
- package/dist/domains/metrics/hooks.cjs.js +3 -0
- package/dist/domains/metrics/hooks.cjs.js.map +1 -1
- package/dist/domains/metrics/hooks.es.js +1 -0
- package/dist/domains/metrics/hooks.es.js.map +1 -1
- package/dist/domains/metrics/metrics-interval.cjs.js +20 -0
- package/dist/domains/metrics/metrics-interval.cjs.js.map +1 -0
- package/dist/domains/metrics/metrics-interval.d.ts +2 -0
- package/dist/domains/metrics/metrics-interval.es.js +15 -0
- package/dist/domains/metrics/metrics-interval.es.js.map +1 -0
- package/dist/domains/metrics.cjs.js +3 -2
- package/dist/domains/metrics.cjs.js.map +1 -1
- package/dist/domains/metrics.es.js +2 -1
- package/dist/domains/metrics.es.js.map +1 -1
- package/dist/domains/traces/components/no-traces-info.cjs.js +3 -4
- package/dist/domains/traces/components/no-traces-info.cjs.js.map +1 -1
- package/dist/domains/traces/components/no-traces-info.es.js +3 -4
- package/dist/domains/traces/components/no-traces-info.es.js.map +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +1 -1
- package/dist/domains/traces/components/span-data-panel-view.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +3 -2
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +3 -2
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +3 -2
- package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +3 -2
- package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js.map +1 -1
- package/dist/domains/traces/components/span-summary-description.cjs.js +6 -4
- package/dist/domains/traces/components/span-summary-description.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-summary-description.es.js +7 -5
- package/dist/domains/traces/components/span-summary-description.es.js.map +1 -1
- package/dist/domains/traces/components/span-timeline-row.cjs.js +3 -4
- package/dist/domains/traces/components/span-timeline-row.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-timeline-row.es.js +3 -4
- package/dist/domains/traces/components/span-timeline-row.es.js.map +1 -1
- package/dist/domains/traces/components/span-timing-hover-card.cjs.js +6 -11
- package/dist/domains/traces/components/span-timing-hover-card.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-timing-hover-card.es.js +6 -11
- package/dist/domains/traces/components/span-timing-hover-card.es.js.map +1 -1
- package/dist/domains/traces/components/span-type-legend.cjs.js +1 -1
- package/dist/domains/traces/components/span-type-legend.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +1 -1
- package/dist/domains/traces/components/timeline-timing-col.cjs.js +3 -4
- package/dist/domains/traces/components/timeline-timing-col.cjs.js.map +1 -1
- package/dist/domains/traces/components/timeline-timing-col.es.js +3 -4
- package/dist/domains/traces/components/timeline-timing-col.es.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +21 -18
- package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.es.js +21 -18
- package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +2 -2
- package/dist/domains/traces/components/trace-data-panel-view.es.js +2 -2
- package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
- package/dist/domains/traces/components/trace-id-button.es.js +1 -1
- package/dist/domains/traces/components/trace-span-timeline.cjs.js +10 -4
- package/dist/domains/traces/components/trace-span-timeline.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-span-timeline.es.js +10 -4
- package/dist/domains/traces/components/trace-span-timeline.es.js.map +1 -1
- package/dist/domains/traces/components/trace-span-tree.cjs.js +3 -4
- package/dist/domains/traces/components/trace-span-tree.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-span-tree.es.js +3 -4
- package/dist/domains/traces/components/trace-span-tree.es.js.map +1 -1
- package/dist/domains/traces/components/trace-summary-description.cjs.js +13 -10
- package/dist/domains/traces/components/trace-summary-description.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-summary-description.es.js +13 -10
- package/dist/domains/traces/components/trace-summary-description.es.js.map +1 -1
- package/dist/domains/traces/components/trace-time-range-chip.cjs.js +1 -1
- package/dist/domains/traces/components/trace-time-range-chip.es.js +1 -1
- package/dist/domains/traces/components/traces-list-view.cjs.js +12 -10
- package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-list-view.es.js +12 -10
- package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js +1 -1
- package/dist/domains/traces/hooks/use-branch.cjs.js +0 -1
- package/dist/domains/traces/hooks/use-branch.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-branch.es.js +0 -1
- package/dist/domains/traces/hooks/use-branch.es.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-light-spans.cjs.js +0 -1
- package/dist/domains/traces/hooks/use-trace-light-spans.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-light-spans.es.js +0 -1
- package/dist/domains/traces/hooks/use-trace-light-spans.es.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-query.cjs.js +63 -3
- package/dist/domains/traces/hooks/use-trace-query.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-query.es.js +61 -4
- package/dist/domains/traces/hooks/use-trace-query.es.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-search.cjs.js +0 -1
- package/dist/domains/traces/hooks/use-trace-search.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-search.es.js +0 -1
- package/dist/domains/traces/hooks/use-trace-search.es.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-spans.cjs.js +0 -1
- package/dist/domains/traces/hooks/use-trace-spans.cjs.js.map +1 -1
- package/dist/domains/traces/hooks/use-trace-spans.es.js +0 -1
- package/dist/domains/traces/hooks/use-trace-spans.es.js.map +1 -1
- package/dist/domains/traces/hooks/use-traces-list-source.cjs.js +42 -0
- package/dist/domains/traces/hooks/use-traces-list-source.cjs.js.map +1 -0
- package/dist/domains/traces/hooks/use-traces-list-source.d.ts +2 -0
- package/dist/domains/traces/hooks/use-traces-list-source.es.js +38 -0
- package/dist/domains/traces/hooks/use-traces-list-source.es.js.map +1 -0
- package/dist/domains/traces/hooks.cjs.js +2 -0
- package/dist/domains/traces/hooks.cjs.js.map +1 -1
- package/dist/domains/traces/hooks.es.js +1 -0
- package/dist/domains/traces/hooks.es.js.map +1 -1
- package/dist/domains/traces/trace-filters.cjs.js +10 -1
- package/dist/domains/traces/trace-filters.cjs.js.map +1 -1
- package/dist/domains/traces/trace-filters.es.js +10 -1
- package/dist/domains/traces/trace-filters.es.js.map +1 -1
- package/dist/domains/traces/utils/span-utils.cjs.js +4 -36
- package/dist/domains/traces/utils/span-utils.cjs.js.map +1 -1
- package/dist/domains/traces/utils/span-utils.es.js +4 -32
- package/dist/domains/traces/utils/span-utils.es.js.map +1 -1
- package/dist/domains/traces/utils.cjs.js +1 -1
- package/dist/domains/traces/utils.es.js +1 -1
- package/dist/domains/traces.cjs.js +3 -1
- package/dist/domains/traces.cjs.js.map +1 -1
- package/dist/domains/traces.es.js +2 -1
- package/dist/domains/traces.es.js.map +1 -1
- package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +1 -1
- package/dist/ee/signals/components/entity-index-compact-grid.es.js +1 -1
- package/dist/ee/signals/components/entity-index-list.cjs.js +2 -2
- package/dist/ee/signals/components/entity-index-list.es.js +2 -2
- package/dist/ee/signals/components/entity-index-model.cjs.js +3 -2
- package/dist/ee/signals/components/entity-index-model.cjs.js.map +1 -1
- package/dist/ee/signals/components/entity-index-model.es.js +3 -2
- package/dist/ee/signals/components/entity-index-model.es.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +2 -2
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +2 -2
- package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +2 -2
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +2 -2
- package/dist/ee/signals/settings/trace-signal-settings.cjs.js +1 -1
- package/dist/ee/signals/settings/trace-signal-settings.es.js +1 -1
- package/dist/ee/signals/signal-formatting.cjs.js +6 -34
- package/dist/ee/signals/signal-formatting.cjs.js.map +1 -1
- package/dist/ee/signals/signal-formatting.es.js +6 -34
- package/dist/ee/signals/signal-formatting.es.js.map +1 -1
- package/dist/ee/signals/snapshot-timeline-data.cjs.js +1 -1
- package/dist/ee/signals/snapshot-timeline-data.cjs.js.map +1 -1
- package/dist/ee/signals/snapshot-timeline-data.es.js +1 -1
- package/dist/ee/signals/snapshot-timeline-data.es.js.map +1 -1
- package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
- package/dist/ee/signals/view-mode-tab.es.js +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.es.js +1 -1
- package/dist/field-block-error-msg-Y0fi0HUC.js +22 -0
- package/dist/field-block-error-msg-Y0fi0HUC.js.map +1 -0
- package/dist/field-block-error-msg-oudJz2Hx.cjs +24 -0
- package/dist/field-block-error-msg-oudJz2Hx.cjs.map +1 -0
- package/dist/{field-error-id-DyWx33Fu.js → field-error-id-DD7OARLU.js} +2 -13
- package/dist/field-error-id-DD7OARLU.js.map +1 -0
- package/dist/{field-error-id-6EfqmQ4C.cjs → field-error-id-V_WejsRL.cjs} +4 -15
- package/dist/field-error-id-V_WejsRL.cjs.map +1 -0
- package/dist/hooks/use-elapsed-time.cjs.js +25 -0
- package/dist/hooks/use-elapsed-time.cjs.js.map +1 -0
- package/dist/hooks/use-elapsed-time.d.ts +2 -0
- package/dist/hooks/use-elapsed-time.es.js +21 -0
- package/dist/hooks/use-elapsed-time.es.js.map +1 -0
- package/dist/inline-code-BW6W121s.js +13 -0
- package/dist/inline-code-BW6W121s.js.map +1 -0
- package/dist/inline-code-CSwG-x8D.cjs +15 -0
- package/dist/inline-code-CSwG-x8D.cjs.map +1 -0
- package/dist/layout/tabbed-container.cjs.js +3 -3
- package/dist/layout/tabbed-container.es.js +3 -3
- package/dist/{list-search-S1mco9Bl.cjs → list-search-CsYQX8qR.cjs} +2 -2
- package/dist/{list-search-S1mco9Bl.cjs.map → list-search-CsYQX8qR.cjs.map} +1 -1
- package/dist/{list-search-FJ1O5F3S.js → list-search-D1FD8FCL.js} +2 -2
- package/dist/{list-search-FJ1O5F3S.js.map → list-search-D1FD8FCL.js.map} +1 -1
- package/dist/{logs-data-list-5BAeLU57.js → logs-data-list-BKE5vYZR.js} +4 -4
- package/dist/{logs-data-list-5BAeLU57.js.map → logs-data-list-BKE5vYZR.js.map} +1 -1
- package/dist/{logs-data-list-YL9yLKF3.cjs → logs-data-list-lJK0yGYj.cjs} +4 -4
- package/dist/{logs-data-list-YL9yLKF3.cjs.map → logs-data-list-lJK0yGYj.cjs.map} +1 -1
- package/dist/{metrics-card-Bzm6m1dy.js → metrics-card-C2RTi5Ew.js} +7 -7
- package/dist/metrics-card-C2RTi5Ew.js.map +1 -0
- package/dist/{metrics-card-DCCHIG-z.cjs → metrics-card-DzcVJTAN.cjs} +7 -7
- package/dist/metrics-card-DzcVJTAN.cjs.map +1 -0
- package/dist/{metrics-kpi-card-BrnFhFQm.js → metrics-kpi-card-BVCuXeDa.js} +21 -10
- package/dist/metrics-kpi-card-BVCuXeDa.js.map +1 -0
- package/dist/{metrics-kpi-card-Bhb4R4z0.cjs → metrics-kpi-card-DoIeHfv6.cjs} +21 -10
- package/dist/metrics-kpi-card-DoIeHfv6.cjs.map +1 -0
- package/dist/{metrics-line-chart-0FR3SYSt.cjs → metrics-line-chart-BNNRRxM8.cjs} +61 -25
- package/dist/metrics-line-chart-BNNRRxM8.cjs.map +1 -0
- package/dist/{metrics-line-chart-knlgw8bV.js → metrics-line-chart-CT_pqJtC.js} +62 -27
- package/dist/metrics-line-chart-CT_pqJtC.js.map +1 -0
- package/dist/new/layout/page-header.cjs.js +1 -1
- package/dist/new/layout/page-header.es.js +1 -1
- package/dist/new/settings.cjs.js +2 -2
- package/dist/new/settings.es.js +2 -2
- package/dist/{page-header-CyXAezlZ.js → page-header-BGyZw13s.js} +2 -2
- package/dist/page-header-BGyZw13s.js.map +1 -0
- package/dist/{page-header-Dk3s3XtC.cjs → page-header-CqvBk1wE.cjs} +2 -2
- package/dist/page-header-CqvBk1wE.cjs.map +1 -0
- package/dist/{schemes-C9EhSOkB.js → schemes-CGK3gQJ6.js} +2 -2
- package/dist/{schemes-C9EhSOkB.js.map → schemes-CGK3gQJ6.js.map} +1 -1
- package/dist/{search-field-block-fU3tStmB.js → search-field-block-Dj2KJyjQ.js} +2 -2
- package/dist/{search-field-block-fU3tStmB.js.map → search-field-block-Dj2KJyjQ.js.map} +1 -1
- package/dist/{search-field-block-7-ufp4uG.cjs → search-field-block-K_e_S9WY.cjs} +2 -2
- package/dist/{search-field-block-7-ufp4uG.cjs.map → search-field-block-K_e_S9WY.cjs.map} +1 -1
- package/dist/{section-B9OLuEq3.js → section-Bi0g7cn6.js} +2 -2
- package/dist/{section-B9OLuEq3.js.map → section-Bi0g7cn6.js.map} +1 -1
- package/dist/{section-CTihfzmc.cjs → section-p9vCSmPq.cjs} +2 -2
- package/dist/{section-CTihfzmc.cjs.map → section-p9vCSmPq.cjs.map} +1 -1
- package/dist/{select-field-block-BfiHq9t6.js → select-field-block-BF8v698d.js} +2 -2
- package/dist/{select-field-block-BfiHq9t6.js.map → select-field-block-BF8v698d.js.map} +1 -1
- package/dist/{select-field-block-DJo2cX9Y.cjs → select-field-block-CaGjpIKM.cjs} +2 -2
- package/dist/{select-field-block-DJo2cX9Y.cjs.map → select-field-block-CaGjpIKM.cjs.map} +1 -1
- package/dist/{settings-row-BoAuUUuH.cjs → settings-row-Cr8gaO5a.cjs} +14 -4
- package/dist/settings-row-Cr8gaO5a.cjs.map +1 -0
- package/dist/{settings-row-B2IekRyH.js → settings-row-Cr9DsBSX.js} +14 -4
- package/dist/settings-row-Cr9DsBSX.js.map +1 -0
- package/dist/{span-payload-primitives-Buq9V8nK.js → span-payload-primitives-Dmzm3mb2.js} +2 -2
- package/dist/{span-payload-primitives-Buq9V8nK.js.map → span-payload-primitives-Dmzm3mb2.js.map} +1 -1
- package/dist/{span-payload-primitives-CjlNH9C-.cjs → span-payload-primitives-Dq8WqqNm.cjs} +2 -2
- package/dist/{span-payload-primitives-CjlNH9C-.cjs.map → span-payload-primitives-Dq8WqqNm.cjs.map} +1 -1
- package/dist/src/domains/capabilities/hooks/index.d.ts +3 -0
- package/dist/src/domains/capabilities/hooks/use-feedback-available.d.ts +8 -0
- package/dist/src/domains/capabilities/hooks/use-observability-capabilities.d.ts +22 -0
- package/dist/src/domains/capabilities/hooks/use-trace-query-available.d.ts +8 -0
- package/dist/src/domains/capabilities/index.d.ts +1 -0
- package/dist/src/domains/chat/messages/reasoning.d.ts +3 -1
- package/dist/src/domains/chat/messages/renderers/reasoning-part-renderer.d.ts +3 -1
- package/dist/src/domains/chat/stories/reasoning.stories.d.ts +1 -1
- package/dist/src/domains/memory/lib/timeline.d.ts +0 -1
- package/dist/src/domains/metrics/components/index.d.ts +1 -1
- package/dist/src/domains/metrics/components/kpi-card-view.d.ts +2 -1
- package/dist/src/domains/metrics/components/latency-card-view.d.ts +4 -1
- package/dist/src/domains/metrics/components/metrics-utils.d.ts +0 -2
- package/dist/src/domains/metrics/hooks/index.d.ts +1 -0
- package/dist/src/domains/metrics/hooks/use-latency-metrics.d.ts +2 -2
- package/dist/src/domains/metrics/hooks/use-token-usage-timeseries.d.ts +2 -1
- package/dist/src/domains/metrics/metrics-interval.d.ts +7 -0
- package/dist/src/domains/traces/components/trace-columns-menu.d.ts +3 -1
- package/dist/src/domains/traces/components/trace-data-panel-view.stories.d.ts +1 -1
- package/dist/src/domains/traces/hooks/index.d.ts +1 -0
- package/dist/src/domains/traces/hooks/use-trace-query.d.ts +19 -2
- package/dist/src/domains/traces/hooks/use-traces-list-source.d.ts +46 -0
- package/dist/src/domains/traces/trace-filters.d.ts +6 -1
- package/dist/src/domains/traces/utils/index.d.ts +1 -1
- package/dist/src/domains/traces/utils/span-utils.d.ts +1 -6
- package/dist/src/ds/components/Card/Card.d.ts +2 -2
- package/dist/src/ds/components/CompactNumber/compact-number.d.ts +6 -0
- package/dist/src/ds/components/CompactNumber/compact-number.stories.d.ts +7 -0
- package/dist/src/ds/components/CompactNumber/index.d.ts +1 -0
- package/dist/src/ds/components/DataList/data-list-cells.d.ts +4 -3
- package/dist/src/ds/components/InlineCode/index.d.ts +1 -0
- package/dist/src/ds/components/InlineCode/inline-code.d.ts +3 -0
- package/dist/src/ds/components/InlineCode/inline-code.stories.d.ts +13 -0
- package/dist/src/ds/components/ItemList/item-list-date-cell.d.ts +3 -2
- package/dist/src/ds/components/MetricsCardGroup/metrics-card-group.d.ts +3 -8
- package/dist/src/ds/components/MetricsLineChart/index.d.ts +1 -0
- package/dist/src/ds/components/MetricsLineChart/metrics-line-chart-legend.d.ts +6 -0
- package/dist/src/ds/components/MetricsLineChart/metrics-line-chart.d.ts +6 -4
- package/dist/src/ds/components/MetricsLineChart/metrics-line-chart.stories.d.ts +1 -0
- package/dist/src/ds/components/RelativeTimestamp/index.d.ts +1 -0
- package/dist/src/ds/components/RelativeTimestamp/relative-timestamp.d.ts +6 -0
- package/dist/src/ds/components/RelativeTimestamp/relative-timestamp.stories.d.ts +7 -0
- package/dist/src/ds/components/StatusIndicators/status-dot-styles.d.ts +31 -2
- package/dist/src/ds/components/StatusIndicators/status-dot.stories.d.ts +3 -4
- package/dist/src/ds/components/StatusIndicators/status.d.ts +2 -3
- package/dist/src/ds/components/StatusIndicators/status.stories.d.ts +2 -1
- package/dist/src/ds/components/Txt/Txt.d.ts +5 -1
- package/dist/src/ds/components/ai/task-list/task-graph-node.d.ts +8 -0
- package/dist/src/ds/components/ai/task-list/task-graph.d.ts +8 -0
- package/dist/src/ds/components/ai/task-list/task-list.d.ts +4 -8
- package/dist/src/ds/components/ai/task-list/task-list.stories.d.ts +1 -1
- package/dist/src/ds/components/ai/task-list/use-focused-row-scroll.d.ts +12 -0
- package/dist/src/ds/new/layout/page-header/page-header.stories.d.ts +1 -0
- package/dist/src/ds/new/settings/settings-row.d.ts +3 -1
- package/dist/src/ds/new/settings/settings.stories.d.ts +1 -0
- package/dist/src/hooks/stories/state/use-elapsed-time.stories.d.ts +17 -0
- package/dist/src/hooks/use-elapsed-time.d.ts +2 -0
- package/dist/src/lib/cost.d.ts +6 -0
- package/dist/src/utils/cost.d.ts +1 -0
- package/dist/src/utils/date-format.d.ts +28 -0
- package/dist/src/utils/duration.d.ts +7 -1
- package/dist/src/utils/relative-time.d.ts +7 -0
- package/dist/style.css +329 -18
- package/dist/{text-field-block-DGIM1i3Z.js → text-field-block-BYPiO9h4.js} +2 -2
- package/dist/{text-field-block-DGIM1i3Z.js.map → text-field-block-BYPiO9h4.js.map} +1 -1
- package/dist/{text-field-block-DePCgDOh.cjs → text-field-block-CRh8sRXP.cjs} +2 -2
- package/dist/{text-field-block-DePCgDOh.cjs.map → text-field-block-CRh8sRXP.cjs.map} +1 -1
- package/dist/{tool-call-Bs-9Cah5.js → tool-call-CIeNEYpK.js} +2 -2
- package/dist/{tool-call-Bs-9Cah5.js.map → tool-call-CIeNEYpK.js.map} +1 -1
- package/dist/{tool-call-C0JeHe8Z.cjs → tool-call-CnEm3eE0.cjs} +2 -2
- package/dist/{tool-call-C0JeHe8Z.cjs.map → tool-call-CnEm3eE0.cjs.map} +1 -1
- package/dist/{traces-data-list-Dam8-XW-.cjs → traces-data-list-C5KZesk6.cjs} +5 -5
- package/dist/{traces-data-list-Dam8-XW-.cjs.map → traces-data-list-C5KZesk6.cjs.map} +1 -1
- package/dist/{traces-data-list-Dvi0s56v.js → traces-data-list-CdWW9J6z.js} +5 -5
- package/dist/{traces-data-list-Dvi0s56v.js.map → traces-data-list-CdWW9J6z.js.map} +1 -1
- package/dist/utils/cost.cjs.js +40 -0
- package/dist/utils/cost.cjs.js.map +1 -0
- package/dist/utils/cost.d.ts +2 -0
- package/dist/utils/cost.es.js +34 -0
- package/dist/utils/cost.es.js.map +1 -0
- package/dist/utils/date-format.cjs.js +99 -0
- package/dist/utils/date-format.cjs.js.map +1 -0
- package/dist/utils/date-format.d.ts +2 -0
- package/dist/utils/date-format.es.js +91 -0
- package/dist/utils/date-format.es.js.map +1 -0
- package/dist/utils/duration.cjs.js +19 -2
- package/dist/utils/duration.cjs.js.map +1 -1
- package/dist/utils/duration.es.js +18 -3
- package/dist/utils/duration.es.js.map +1 -1
- package/dist/utils/file.es.js +2 -2
- package/dist/utils/relative-time.cjs.js +12 -0
- package/dist/utils/relative-time.cjs.js.map +1 -0
- package/dist/utils/relative-time.d.ts +2 -0
- package/dist/utils/relative-time.es.js +8 -0
- package/dist/utils/relative-time.es.js.map +1 -0
- package/package.json +7 -7
- package/dist/Badge-BEeYtjmv.cjs.map +0 -1
- package/dist/Badge-TD55_qZJ.js.map +0 -1
- package/dist/Txt-B4-2nLaI.cjs.map +0 -1
- package/dist/Txt-DTh3Pa_a.js.map +0 -1
- package/dist/data-list-top-DpbOA3uw.js.map +0 -1
- package/dist/data-list-top-WGUY167p.cjs.map +0 -1
- package/dist/field-error-id-6EfqmQ4C.cjs.map +0 -1
- package/dist/field-error-id-DyWx33Fu.js.map +0 -1
- package/dist/metrics-card-Bzm6m1dy.js.map +0 -1
- package/dist/metrics-card-DCCHIG-z.cjs.map +0 -1
- package/dist/metrics-kpi-card-Bhb4R4z0.cjs.map +0 -1
- package/dist/metrics-kpi-card-BrnFhFQm.js.map +0 -1
- package/dist/metrics-line-chart-0FR3SYSt.cjs.map +0 -1
- package/dist/metrics-line-chart-knlgw8bV.js.map +0 -1
- package/dist/page-header-CyXAezlZ.js.map +0 -1
- package/dist/page-header-Dk3s3XtC.cjs.map +0 -1
- package/dist/settings-row-B2IekRyH.js.map +0 -1
- package/dist/settings-row-BoAuUUuH.cjs.map +0 -1
- package/dist/src/ds/components/Table/utils.d.ts +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-summary-description.cjs.js","sources":["../../../../src/domains/traces/components/trace-summary-description.tsx"],"sourcesContent":["import {\n ArrowDownToLineIcon,\n ArrowUpFromLineIcon,\n CalendarClockIcon,\n CircleDollarSignIcon,\n TimerIcon,\n} from 'lucide-react';\nimport type { TraceUsageSummary } from '../trace-list-columns';\nimport {
|
|
1
|
+
{"version":3,"file":"trace-summary-description.cjs.js","sources":["../../../../src/domains/traces/components/trace-summary-description.tsx"],"sourcesContent":["import {\n ArrowDownToLineIcon,\n ArrowUpFromLineIcon,\n CalendarClockIcon,\n CircleDollarSignIcon,\n TimerIcon,\n} from 'lucide-react';\nimport type { TraceUsageSummary } from '../trace-list-columns';\nimport { getSpanDurationMs } from '../utils/span-utils';\nimport { TraceStatusValue } from './trace-status-value';\nimport type { TraceStatusValueStatus } from './trace-status-value';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport { Txt } from '@/ds/components/Txt/Txt';\nimport { AgentIcon, WorkflowIcon } from '@/ds/icons';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { formatCompactNumber, formatCost } from '@/lib/cost';\nimport { formatDate, formatTimestampPrecise } from '@/utils/date-format';\nimport { formatDuration, formatDurationPrecise } from '@/utils/duration';\n\nfunction formatEntityType(entityType: string): string {\n return entityType\n .split('_')\n .map(word => `${word.charAt(0).toUpperCase()}${word.slice(1)}`)\n .join(' ');\n}\n\nfunction computeTraceStatus(span: { error?: unknown; endedAt?: Date | string | null }): TraceStatusValueStatus {\n if (span.error != null) return 'error';\n if (span.endedAt == null) return 'running';\n return 'success';\n}\n\n/** Lightweight root-span fields available from `useTraceLightSpans`. */\ntype RootSpanSummary = {\n entityId?: string | null;\n entityName?: string | null;\n entityType?: string | null;\n startedAt: Date | string;\n endedAt?: Date | string | null;\n error?: unknown;\n};\n\nexport interface TraceSummaryDescriptionProps {\n rootSpan: RootSpanSummary;\n usage?: TraceUsageSummary;\n /** When provided (with `LinkComponent`), the entity name links to the entity's page. */\n entityHref?: string;\n LinkComponent?: LinkComponent;\n}\n\n/** Compact trace metadata shown under the trace side-panel heading. */\nexport function TraceSummaryDescription({ rootSpan, usage, entityHref, LinkComponent }: TraceSummaryDescriptionProps) {\n const startedAt = rootSpan.startedAt ? new Date(rootSpan.startedAt) : null;\n const endedAt = rootSpan.endedAt ? new Date(rootSpan.endedAt) : null;\n const duration = formatDuration(getSpanDurationMs(startedAt, endedAt));\n const exactDuration = formatDurationPrecise(getSpanDurationMs(startedAt, endedAt));\n const startedAtTimestamp = formatDate(startedAt, 'time');\n const exactStartedAtTimestamp = formatTimestampPrecise(startedAt);\n\n const entityName = rootSpan.entityName || rootSpan.entityId;\n const entityType = rootSpan.entityType;\n const formattedEntityType = entityType ? formatEntityType(entityType) : 'Entity';\n const EntityIcon = entityType?.includes('workflow') ? WorkflowIcon : AgentIcon;\n\n return (\n <DataPanel.Metadata>\n {entityName &&\n (entityHref ? (\n <DataPanel.Meta\n as={LinkComponent ?? 'a'}\n href={entityHref}\n icon={<EntityIcon />}\n tooltip={`See ${formattedEntityType.toLowerCase()}`}\n >\n {entityName}\n </DataPanel.Meta>\n ) : (\n <DataPanel.Meta icon={<EntityIcon />} tooltip={formattedEntityType}>\n {entityName}\n </DataPanel.Meta>\n ))}\n <DataPanel.Meta tooltip=\"Trace status\">\n <TraceStatusValue status={computeTraceStatus(rootSpan)} />\n </DataPanel.Meta>\n {startedAtTimestamp && exactStartedAtTimestamp && (\n <DataPanel.Meta icon={<CalendarClockIcon />} tooltip={`Started at ${exactStartedAtTimestamp}`}>\n {startedAtTimestamp}\n </DataPanel.Meta>\n )}\n {duration && exactDuration && (\n <DataPanel.Meta icon={<TimerIcon />} tooltip={`Duration ${exactDuration}`}>\n <Txt as=\"span\" variant=\"label\" font=\"mono\">\n {duration}\n </Txt>\n </DataPanel.Meta>\n )}\n {usage && (\n <>\n <DataPanel.Meta icon={<ArrowDownToLineIcon />} tooltip=\"Input tokens\">\n {usage.inputTokens === undefined ? '—' : formatCompactNumber(usage.inputTokens)}\n </DataPanel.Meta>\n <DataPanel.Meta icon={<ArrowUpFromLineIcon />} tooltip=\"Output tokens\">\n {usage.outputTokens === undefined ? '—' : formatCompactNumber(usage.outputTokens)}\n </DataPanel.Meta>\n <DataPanel.Meta icon={<CircleDollarSignIcon />} tooltip=\"Estimated cost\">\n {usage.estimatedCost === undefined ? '—' : formatCost(usage.estimatedCost, usage.costUnit)}\n </DataPanel.Meta>\n </>\n )}\n </DataPanel.Metadata>\n );\n}\n"],"names":["formatDuration","getSpanDurationMs","formatDurationPrecise","formatDate","formatTimestampPrecise","WorkflowIcon","AgentIcon","jsxs","DataPanel","jsx","TraceStatusValue","CalendarClockIcon","TimerIcon","Txt","Fragment","ArrowDownToLineIcon","formatCompactNumber","ArrowUpFromLineIcon","CircleDollarSignIcon","formatCost"],"mappings":";;;;;;;;;;;;;;;;AAmBA,SAAS,iBAAiB,UAAA,EAA4B;AACpD,EAAA,OAAO,UAAA,CACJ,MAAM,GAAG,CAAA,CACT,IAAI,CAAA,IAAA,KAAQ,CAAA,EAAG,KAAK,MAAA,CAAO,CAAC,EAAE,WAAA,EAAa,GAAG,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,CAAA,CAC7D,IAAA,CAAK,GAAG,CAAA;AACb;AAEA,SAAS,mBAAmB,IAAA,EAAmF;AAC7G,EAAA,IAAI,IAAA,CAAK,KAAA,IAAS,IAAA,EAAM,OAAO,OAAA;AAC/B,EAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,EAAM,OAAO,SAAA;AACjC,EAAA,OAAO,SAAA;AACT;AAqBO,SAAS,wBAAwB,EAAE,QAAA,EAAU,KAAA,EAAO,UAAA,EAAY,eAAc,EAAiC;AACpH,EAAA,MAAM,YAAY,QAAA,CAAS,SAAA,GAAY,IAAI,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,GAAI,IAAA;AACtE,EAAA,MAAM,UAAU,QAAA,CAAS,OAAA,GAAU,IAAI,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,GAAI,IAAA;AAChE,EAAA,MAAM,QAAA,GAAWA,6BAAA,CAAeC,gDAAA,CAAkB,SAAA,EAAW,OAAO,CAAC,CAAA;AACrE,EAAA,MAAM,aAAA,GAAgBC,oCAAA,CAAsBD,gDAAA,CAAkB,SAAA,EAAW,OAAO,CAAC,CAAA;AACjF,EAAA,MAAM,kBAAA,GAAqBE,2BAAA,CAAW,SAAA,EAAW,MAAM,CAAA;AACvD,EAAA,MAAM,uBAAA,GAA0BC,wCAAuB,SAAS,CAAA;AAEhE,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,UAAA,IAAc,QAAA,CAAS,QAAA;AACnD,EAAA,MAAM,aAAa,QAAA,CAAS,UAAA;AAC5B,EAAA,MAAM,mBAAA,GAAsB,UAAA,GAAa,gBAAA,CAAiB,UAAU,CAAA,GAAI,QAAA;AACxE,EAAA,MAAM,UAAA,GAAa,UAAA,EAAY,QAAA,CAAS,UAAU,IAAIC,+BAAA,GAAeC,yBAAA;AAErE,EAAA,uBACEC,eAAA,CAACC,mBAAA,CAAU,QAAA,EAAV,EACE,QAAA,EAAA;AAAA,IAAA,UAAA,KACE,UAAA,mBACCC,cAAA;AAAA,MAACD,mBAAA,CAAU,IAAA;AAAA,MAAV;AAAA,QACC,IAAI,aAAA,IAAiB,GAAA;AAAA,QACrB,IAAA,EAAM,UAAA;AAAA,QACN,IAAA,iCAAO,UAAA,EAAA,EAAW,CAAA;AAAA,QAClB,OAAA,EAAS,CAAA,IAAA,EAAO,mBAAA,CAAoB,WAAA,EAAa,CAAA,CAAA;AAAA,QAEhD,QAAA,EAAA;AAAA;AAAA,KACH,mBAEAC,cAAA,CAACD,mBAAA,CAAU,IAAA,EAAV,EAAe,IAAA,kBAAMC,cAAA,CAAC,UAAA,EAAA,EAAW,CAAA,EAAI,OAAA,EAAS,mBAAA,EAC5C,QAAA,EAAA,UAAA,EACH,CAAA,CAAA;AAAA,oBAEJA,cAAA,CAACD,mBAAA,CAAU,IAAA,EAAV,EAAe,OAAA,EAAQ,cAAA,EACtB,QAAA,kBAAAC,cAAA,CAACC,2DAAA,EAAA,EAAiB,MAAA,EAAQ,kBAAA,CAAmB,QAAQ,CAAA,EAAG,CAAA,EAC1D,CAAA;AAAA,IACC,kBAAA,IAAsB,uBAAA,oBACrBD,cAAA,CAACD,mBAAA,CAAU,MAAV,EAAe,IAAA,kBAAMC,cAAA,CAACE,6BAAA,EAAA,EAAkB,CAAA,EAAI,OAAA,EAAS,CAAA,WAAA,EAAc,uBAAuB,IACxF,QAAA,EAAA,kBAAA,EACH,CAAA;AAAA,IAED,QAAA,IAAY,iCACXF,cAAA,CAACD,mBAAA,CAAU,MAAV,EAAe,IAAA,kBAAMC,cAAA,CAACG,qBAAA,EAAA,EAAU,CAAA,EAAI,OAAA,EAAS,YAAY,aAAa,CAAA,CAAA,EACrE,QAAA,kBAAAH,cAAA,CAACI,OAAA,EAAA,EAAI,EAAA,EAAG,MAAA,EAAO,SAAQ,OAAA,EAAQ,IAAA,EAAK,MAAA,EACjC,QAAA,EAAA,QAAA,EACH,CAAA,EACF,CAAA;AAAA,IAED,yBACCN,eAAA,CAAAO,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAL,cAAA,CAACD,oBAAU,IAAA,EAAV,EAAe,IAAA,kBAAMC,cAAA,CAACM,mCAAoB,CAAA,EAAI,OAAA,EAAQ,cAAA,EACpD,QAAA,EAAA,KAAA,CAAM,gBAAgB,MAAA,GAAY,GAAA,GAAMC,8BAAA,CAAoB,KAAA,CAAM,WAAW,CAAA,EAChF,CAAA;AAAA,qCACCR,mBAAA,CAAU,IAAA,EAAV,EAAe,IAAA,iCAAOS,+BAAA,EAAA,EAAoB,CAAA,EAAI,OAAA,EAAQ,eAAA,EACpD,gBAAM,YAAA,KAAiB,MAAA,GAAY,MAAMD,8BAAA,CAAoB,KAAA,CAAM,YAAY,CAAA,EAClF,CAAA;AAAA,qCACCR,mBAAA,CAAU,IAAA,EAAV,EAAe,IAAA,kBAAMC,cAAA,CAACS,oCAAqB,CAAA,EAAI,OAAA,EAAQ,kBACrD,QAAA,EAAA,KAAA,CAAM,aAAA,KAAkB,SAAY,GAAA,GAAMC,qBAAA,CAAW,MAAM,aAAA,EAAe,KAAA,CAAM,QAAQ,CAAA,EAC3F;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;;;;"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { CalendarClockIcon, TimerIcon, ArrowDownToLineIcon, ArrowUpFromLineIcon, CircleDollarSignIcon } from 'lucide-react';
|
|
3
|
-
import {
|
|
3
|
+
import { getSpanDurationMs } from '../utils/span-utils.es.js';
|
|
4
4
|
import { TraceStatusValue } from './trace-status-value.es.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { D as DataPanel } from '../../../data-panel-BWgExbHs.js';
|
|
6
|
+
import { T as Txt } from '../../../Txt-BP1SRHmL.js';
|
|
7
7
|
import { AgentIcon } from '../../../icons/AgentIcon.es.js';
|
|
8
8
|
import { WorkflowIcon } from '../../../icons/WorkflowIcon.es.js';
|
|
9
|
+
import { formatCompactNumber, formatCost } from '../../../utils/cost.es.js';
|
|
10
|
+
import { formatDate, formatTimestampPrecise } from '../../../utils/date-format.es.js';
|
|
11
|
+
import { formatDuration, formatDurationPrecise } from '../../../utils/duration.es.js';
|
|
9
12
|
|
|
10
13
|
function formatEntityType(entityType) {
|
|
11
14
|
return entityType.split("_").map((word) => `${word.charAt(0).toUpperCase()}${word.slice(1)}`).join(" ");
|
|
@@ -18,10 +21,10 @@ function computeTraceStatus(span) {
|
|
|
18
21
|
function TraceSummaryDescription({ rootSpan, usage, entityHref, LinkComponent }) {
|
|
19
22
|
const startedAt = rootSpan.startedAt ? new Date(rootSpan.startedAt) : null;
|
|
20
23
|
const endedAt = rootSpan.endedAt ? new Date(rootSpan.endedAt) : null;
|
|
21
|
-
const duration =
|
|
22
|
-
const exactDuration =
|
|
23
|
-
const startedAtTimestamp =
|
|
24
|
-
const exactStartedAtTimestamp =
|
|
24
|
+
const duration = formatDuration(getSpanDurationMs(startedAt, endedAt));
|
|
25
|
+
const exactDuration = formatDurationPrecise(getSpanDurationMs(startedAt, endedAt));
|
|
26
|
+
const startedAtTimestamp = formatDate(startedAt, "time");
|
|
27
|
+
const exactStartedAtTimestamp = formatTimestampPrecise(startedAt);
|
|
25
28
|
const entityName = rootSpan.entityName || rootSpan.entityId;
|
|
26
29
|
const entityType = rootSpan.entityType;
|
|
27
30
|
const formattedEntityType = entityType ? formatEntityType(entityType) : "Entity";
|
|
@@ -39,10 +42,10 @@ function TraceSummaryDescription({ rootSpan, usage, entityHref, LinkComponent })
|
|
|
39
42
|
) : /* @__PURE__ */ jsx(DataPanel.Meta, { icon: /* @__PURE__ */ jsx(EntityIcon, {}), tooltip: formattedEntityType, children: entityName })),
|
|
40
43
|
/* @__PURE__ */ jsx(DataPanel.Meta, { tooltip: "Trace status", children: /* @__PURE__ */ jsx(TraceStatusValue, { status: computeTraceStatus(rootSpan) }) }),
|
|
41
44
|
startedAtTimestamp && exactStartedAtTimestamp && /* @__PURE__ */ jsx(DataPanel.Meta, { icon: /* @__PURE__ */ jsx(CalendarClockIcon, {}), tooltip: `Started at ${exactStartedAtTimestamp}`, children: startedAtTimestamp }),
|
|
42
|
-
duration && exactDuration && /* @__PURE__ */ jsx(DataPanel.Meta, { icon: /* @__PURE__ */ jsx(TimerIcon, {}), tooltip: `Duration ${exactDuration}`, children: duration }),
|
|
45
|
+
duration && exactDuration && /* @__PURE__ */ jsx(DataPanel.Meta, { icon: /* @__PURE__ */ jsx(TimerIcon, {}), tooltip: `Duration ${exactDuration}`, children: /* @__PURE__ */ jsx(Txt, { as: "span", variant: "label", font: "mono", children: duration }) }),
|
|
43
46
|
usage && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
44
|
-
/* @__PURE__ */ jsx(DataPanel.Meta, { icon: /* @__PURE__ */ jsx(ArrowDownToLineIcon, {}), tooltip: "Input tokens", children: usage.inputTokens === void 0 ? "—" :
|
|
45
|
-
/* @__PURE__ */ jsx(DataPanel.Meta, { icon: /* @__PURE__ */ jsx(ArrowUpFromLineIcon, {}), tooltip: "Output tokens", children: usage.outputTokens === void 0 ? "—" :
|
|
47
|
+
/* @__PURE__ */ jsx(DataPanel.Meta, { icon: /* @__PURE__ */ jsx(ArrowDownToLineIcon, {}), tooltip: "Input tokens", children: usage.inputTokens === void 0 ? "—" : formatCompactNumber(usage.inputTokens) }),
|
|
48
|
+
/* @__PURE__ */ jsx(DataPanel.Meta, { icon: /* @__PURE__ */ jsx(ArrowUpFromLineIcon, {}), tooltip: "Output tokens", children: usage.outputTokens === void 0 ? "—" : formatCompactNumber(usage.outputTokens) }),
|
|
46
49
|
/* @__PURE__ */ jsx(DataPanel.Meta, { icon: /* @__PURE__ */ jsx(CircleDollarSignIcon, {}), tooltip: "Estimated cost", children: usage.estimatedCost === void 0 ? "—" : formatCost(usage.estimatedCost, usage.costUnit) })
|
|
47
50
|
] })
|
|
48
51
|
] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-summary-description.es.js","sources":["../../../../src/domains/traces/components/trace-summary-description.tsx"],"sourcesContent":["import {\n ArrowDownToLineIcon,\n ArrowUpFromLineIcon,\n CalendarClockIcon,\n CircleDollarSignIcon,\n TimerIcon,\n} from 'lucide-react';\nimport type { TraceUsageSummary } from '../trace-list-columns';\nimport {
|
|
1
|
+
{"version":3,"file":"trace-summary-description.es.js","sources":["../../../../src/domains/traces/components/trace-summary-description.tsx"],"sourcesContent":["import {\n ArrowDownToLineIcon,\n ArrowUpFromLineIcon,\n CalendarClockIcon,\n CircleDollarSignIcon,\n TimerIcon,\n} from 'lucide-react';\nimport type { TraceUsageSummary } from '../trace-list-columns';\nimport { getSpanDurationMs } from '../utils/span-utils';\nimport { TraceStatusValue } from './trace-status-value';\nimport type { TraceStatusValueStatus } from './trace-status-value';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport { Txt } from '@/ds/components/Txt/Txt';\nimport { AgentIcon, WorkflowIcon } from '@/ds/icons';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { formatCompactNumber, formatCost } from '@/lib/cost';\nimport { formatDate, formatTimestampPrecise } from '@/utils/date-format';\nimport { formatDuration, formatDurationPrecise } from '@/utils/duration';\n\nfunction formatEntityType(entityType: string): string {\n return entityType\n .split('_')\n .map(word => `${word.charAt(0).toUpperCase()}${word.slice(1)}`)\n .join(' ');\n}\n\nfunction computeTraceStatus(span: { error?: unknown; endedAt?: Date | string | null }): TraceStatusValueStatus {\n if (span.error != null) return 'error';\n if (span.endedAt == null) return 'running';\n return 'success';\n}\n\n/** Lightweight root-span fields available from `useTraceLightSpans`. */\ntype RootSpanSummary = {\n entityId?: string | null;\n entityName?: string | null;\n entityType?: string | null;\n startedAt: Date | string;\n endedAt?: Date | string | null;\n error?: unknown;\n};\n\nexport interface TraceSummaryDescriptionProps {\n rootSpan: RootSpanSummary;\n usage?: TraceUsageSummary;\n /** When provided (with `LinkComponent`), the entity name links to the entity's page. */\n entityHref?: string;\n LinkComponent?: LinkComponent;\n}\n\n/** Compact trace metadata shown under the trace side-panel heading. */\nexport function TraceSummaryDescription({ rootSpan, usage, entityHref, LinkComponent }: TraceSummaryDescriptionProps) {\n const startedAt = rootSpan.startedAt ? new Date(rootSpan.startedAt) : null;\n const endedAt = rootSpan.endedAt ? new Date(rootSpan.endedAt) : null;\n const duration = formatDuration(getSpanDurationMs(startedAt, endedAt));\n const exactDuration = formatDurationPrecise(getSpanDurationMs(startedAt, endedAt));\n const startedAtTimestamp = formatDate(startedAt, 'time');\n const exactStartedAtTimestamp = formatTimestampPrecise(startedAt);\n\n const entityName = rootSpan.entityName || rootSpan.entityId;\n const entityType = rootSpan.entityType;\n const formattedEntityType = entityType ? formatEntityType(entityType) : 'Entity';\n const EntityIcon = entityType?.includes('workflow') ? WorkflowIcon : AgentIcon;\n\n return (\n <DataPanel.Metadata>\n {entityName &&\n (entityHref ? (\n <DataPanel.Meta\n as={LinkComponent ?? 'a'}\n href={entityHref}\n icon={<EntityIcon />}\n tooltip={`See ${formattedEntityType.toLowerCase()}`}\n >\n {entityName}\n </DataPanel.Meta>\n ) : (\n <DataPanel.Meta icon={<EntityIcon />} tooltip={formattedEntityType}>\n {entityName}\n </DataPanel.Meta>\n ))}\n <DataPanel.Meta tooltip=\"Trace status\">\n <TraceStatusValue status={computeTraceStatus(rootSpan)} />\n </DataPanel.Meta>\n {startedAtTimestamp && exactStartedAtTimestamp && (\n <DataPanel.Meta icon={<CalendarClockIcon />} tooltip={`Started at ${exactStartedAtTimestamp}`}>\n {startedAtTimestamp}\n </DataPanel.Meta>\n )}\n {duration && exactDuration && (\n <DataPanel.Meta icon={<TimerIcon />} tooltip={`Duration ${exactDuration}`}>\n <Txt as=\"span\" variant=\"label\" font=\"mono\">\n {duration}\n </Txt>\n </DataPanel.Meta>\n )}\n {usage && (\n <>\n <DataPanel.Meta icon={<ArrowDownToLineIcon />} tooltip=\"Input tokens\">\n {usage.inputTokens === undefined ? '—' : formatCompactNumber(usage.inputTokens)}\n </DataPanel.Meta>\n <DataPanel.Meta icon={<ArrowUpFromLineIcon />} tooltip=\"Output tokens\">\n {usage.outputTokens === undefined ? '—' : formatCompactNumber(usage.outputTokens)}\n </DataPanel.Meta>\n <DataPanel.Meta icon={<CircleDollarSignIcon />} tooltip=\"Estimated cost\">\n {usage.estimatedCost === undefined ? '—' : formatCost(usage.estimatedCost, usage.costUnit)}\n </DataPanel.Meta>\n </>\n )}\n </DataPanel.Metadata>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
4
4
|
|
|
5
5
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
const domains_traces_traceFilters = require('../trace-filters.cjs.js');
|
|
7
|
-
const dateTimeRangePicker = require('../../../date-time-range-picker-
|
|
7
|
+
const dateTimeRangePicker = require('../../../date-time-range-picker-sT5qAW-_.cjs');
|
|
8
8
|
const filterBarChip = require('../../../filter-bar-chip-BdZHI76J.cjs');
|
|
9
9
|
const utils_cn = require('../../../cn-DG0X1KEP.cjs');
|
|
10
10
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { traceFilterFieldColor, traceFilterFieldIcon } from '../trace-filters.es.js';
|
|
3
|
-
import { D as DateTimeRangePicker } from '../../../date-time-range-picker-
|
|
3
|
+
import { D as DateTimeRangePicker } from '../../../date-time-range-picker-Bnviv7s-.js';
|
|
4
4
|
import { u as useFilterBarContext, F as FilterBarChip, a as FilterBarFieldLabel, f as fieldSegmentAccentStyle, s as segmentClass, e as editableSegmentClass } from '../../../filter-bar-chip-7X4Aw_WH.js';
|
|
5
5
|
import { c as cn } from '../../../cn-65Adrsfj.js';
|
|
6
6
|
|
|
@@ -8,13 +8,15 @@ const lucideReact = require('lucide-react');
|
|
|
8
8
|
const React = require('react');
|
|
9
9
|
const domains_traces_traceListColumns = require('../trace-list-columns.cjs.js');
|
|
10
10
|
const domains_traces_utils_spanUtils = require('../utils/span-utils.cjs.js');
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const tracesDataList = require('../../../traces-data-list-Dam8-XW-.cjs');
|
|
11
|
+
const dataList = require('../../../data-list-RI8c32dk.cjs');
|
|
12
|
+
const dataListSkeleton = require('../../../data-list-skeleton-CgbWqYky.cjs');
|
|
13
|
+
const tracesDataList = require('../../../traces-data-list-C5KZesk6.cjs');
|
|
15
14
|
const useDataListKeyboard = require('../../../use-data-list-keyboard-DF3tLe10.cjs');
|
|
16
15
|
const dropdownMenu = require('../../../dropdown-menu-j2y37TL5.cjs');
|
|
16
|
+
const Txt = require('../../../Txt-DPmEpNbp.cjs');
|
|
17
|
+
const utils_cost = require('../../../utils/cost.cjs.js');
|
|
17
18
|
const utils_cn = require('../../../cn-DG0X1KEP.cjs');
|
|
19
|
+
const utils_duration = require('../../../utils/duration.cjs.js');
|
|
18
20
|
|
|
19
21
|
const ROW_HEIGHT = 36;
|
|
20
22
|
const OVERSCAN = 8;
|
|
@@ -120,7 +122,7 @@ function TracesListView({
|
|
|
120
122
|
),
|
|
121
123
|
/* @__PURE__ */ jsxRuntime.jsxs(dropdownMenu.DropdownMenu.Content, { align: "start", children: [
|
|
122
124
|
/* @__PURE__ */ jsxRuntime.jsx(dropdownMenu.DropdownMenu.Label, { children: "Filter by value" }),
|
|
123
|
-
filterValues.map((value) => /* @__PURE__ */ jsxRuntime.jsx(dropdownMenu.DropdownMenu.Item, { onSelect: () => onFilterByField(field, value), children: /* @__PURE__ */ jsxRuntime.jsx("span",
|
|
125
|
+
filterValues.map((value) => /* @__PURE__ */ jsxRuntime.jsx(dropdownMenu.DropdownMenu.Item, { onSelect: () => onFilterByField(field, value), children: /* @__PURE__ */ jsxRuntime.jsx(Txt.Txt, { as: "span", variant: "body-sm", font: "mono", className: "min-w-0 truncate", children: value }) }, value))
|
|
124
126
|
] })
|
|
125
127
|
] }) }, field);
|
|
126
128
|
}),
|
|
@@ -163,16 +165,16 @@ function TracesListView({
|
|
|
163
165
|
),
|
|
164
166
|
domains_traces_traceListColumns.hasTraceColumn(columnPreferences, "input") && /* @__PURE__ */ jsxRuntime.jsx(tracesDataList.TracesDataList.InputCell, { input: trace.inputPreview ?? domains_traces_utils_spanUtils.getInputPreview(trace.input) }),
|
|
165
167
|
/* @__PURE__ */ jsxRuntime.jsx(tracesDataList.TracesDataList.StatusCell, { status: trace.status }),
|
|
166
|
-
domains_traces_traceListColumns.hasTraceColumn(columnPreferences, "duration") && /* @__PURE__ */ jsxRuntime.jsx(dataList.DataList.NumberCell, { children: domains_traces_utils_spanUtils.
|
|
168
|
+
domains_traces_traceListColumns.hasTraceColumn(columnPreferences, "duration") && /* @__PURE__ */ jsxRuntime.jsx(dataList.DataList.NumberCell, { font: "mono", children: utils_duration.formatDuration(domains_traces_utils_spanUtils.getSpanDurationMs(trace.startedAt, trace.endedAt)) }),
|
|
167
169
|
domains_traces_traceListColumns.hasTraceColumn(columnPreferences, "endTime") && /* @__PURE__ */ jsxRuntime.jsx(tracesDataList.TracesDataList.CreatedCell, { timestamp: trace.endedAt ?? "" }),
|
|
168
170
|
domains_traces_traceListColumns.hasTraceColumn(columnPreferences, "environment") && /* @__PURE__ */ jsxRuntime.jsx(dataList.DataList.TextCell, { children: trace.environment || "—" }),
|
|
169
|
-
domains_traces_traceListColumns.hasTraceColumn(columnPreferences, "inputTokens") && /* @__PURE__ */ jsxRuntime.jsx(dataList.DataList.NumberCell, { children: usage?.inputTokens === void 0 ? void 0 :
|
|
170
|
-
domains_traces_traceListColumns.hasTraceColumn(columnPreferences, "outputTokens") && /* @__PURE__ */ jsxRuntime.jsx(dataList.DataList.NumberCell, { children: usage?.outputTokens === void 0 ? void 0 :
|
|
171
|
+
domains_traces_traceListColumns.hasTraceColumn(columnPreferences, "inputTokens") && /* @__PURE__ */ jsxRuntime.jsx(dataList.DataList.NumberCell, { children: usage?.inputTokens === void 0 ? void 0 : utils_cost.formatCompactNumber(usage.inputTokens) }),
|
|
172
|
+
domains_traces_traceListColumns.hasTraceColumn(columnPreferences, "outputTokens") && /* @__PURE__ */ jsxRuntime.jsx(dataList.DataList.NumberCell, { children: usage?.outputTokens === void 0 ? void 0 : utils_cost.formatCompactNumber(usage.outputTokens) }),
|
|
171
173
|
domains_traces_traceListColumns.hasTraceColumn(columnPreferences, "totalTokens") && /* @__PURE__ */ jsxRuntime.jsx(dataList.DataList.NumberCell, { children: (() => {
|
|
172
174
|
const total = sumTokens(usage);
|
|
173
|
-
return total === void 0 ? void 0 :
|
|
175
|
+
return total === void 0 ? void 0 : utils_cost.formatCompactNumber(total);
|
|
174
176
|
})() }),
|
|
175
|
-
domains_traces_traceListColumns.hasTraceColumn(columnPreferences, "estimatedCost") && /* @__PURE__ */ jsxRuntime.jsx(dataList.DataList.NumberCell, { children: usage?.estimatedCost === void 0 ? void 0 :
|
|
177
|
+
domains_traces_traceListColumns.hasTraceColumn(columnPreferences, "estimatedCost") && /* @__PURE__ */ jsxRuntime.jsx(dataList.DataList.NumberCell, { children: usage?.estimatedCost === void 0 ? void 0 : utils_cost.formatCost(usage.estimatedCost, usage.costUnit) }),
|
|
176
178
|
columnPreferences.customColumns.map((field) => /* @__PURE__ */ jsxRuntime.jsx(dataList.DataList.TextCell, { font: "mono", children: customColumnValue(trace, field) ?? void 0 }, field)),
|
|
177
179
|
columnPreferences.metadataKeys.map((key) => {
|
|
178
180
|
const value = domains_traces_traceListColumns.formatTraceMetadataValue(trace.metadata, key);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traces-list-view.cjs.js","sources":["../../../../src/domains/traces/components/traces-list-view.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { ListFilterIcon } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport {\n DEFAULT_TRACE_COLUMN_PREFERENCES,\n TRACE_CUSTOM_COLUMN_LABELS,\n buildTraceListColumns,\n formatTraceMetadataValue,\n hasTraceColumn,\n} from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceUsageSummary } from '../trace-list-columns';\nimport { formatSpanDuration, getInputPreview } from '../utils/span-utils';\nimport { formatCompact, formatCost } from '@/domains/metrics/components/metrics-utils';\nimport { DataList, DataListSkeleton, TracesDataList, useDataListKeyboard } from '@/ds/components/DataList';\nimport type { DataListSort } from '@/ds/components/DataList';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { cn } from '@/lib/utils';\n\nexport type TracesListViewTrace = {\n traceId: string;\n /** Required for branch rows; absent on plain trace rows (which are root-rooted). */\n spanId?: string | null;\n /** `null`/missing → root span. Drives the Kind column's icon (top-level trace vs nested branch). */\n parentSpanId?: string | null;\n name: string;\n entityType?: string | null;\n entityId?: string | null;\n entityName?: string | null;\n threadId?: string | null;\n resourceId?: string | null;\n environment?: string | null;\n status?: string | null;\n /** Server-rendered preview of `input`. Present on lightweight rows, which omit `input` itself. */\n inputPreview?: string | null;\n input?: unknown;\n metadata?: Record<string, unknown> | null;\n startedAt?: Date | string | null;\n endedAt?: Date | string | null;\n createdAt: Date | string;\n};\n\nconst ROW_HEIGHT = 36;\nconst OVERSCAN = 8;\n/** Distinct values offered in a custom column's \"filter by value\" header menu. */\nconst MAX_FILTER_VALUES = 20;\n\nfunction customColumnValue(trace: TracesListViewTrace, field: TraceCustomColumn): string | null | undefined {\n return trace[field];\n}\n\nfunction distinctCustomColumnValues(traces: TracesListViewTrace[], field: TraceCustomColumn): string[] {\n const values = new Set<string>();\n for (const trace of traces) {\n const value = trace[field];\n if (typeof value === 'string' && value) values.add(value);\n if (values.size >= MAX_FILTER_VALUES) break;\n }\n return [...values];\n}\n\nfunction sumTokens(usage: TraceUsageSummary | undefined): number | undefined {\n if (usage?.inputTokens === undefined && usage?.outputTokens === undefined) return undefined;\n return (usage?.inputTokens ?? 0) + (usage?.outputTokens ?? 0);\n}\n\nexport type TracesListViewProps = {\n traces: TracesListViewTrace[];\n isLoading?: boolean;\n isFetchingNextPage?: boolean;\n hasNextPage?: boolean;\n setEndOfListElement?: (element: HTMLDivElement | null) => void;\n filtersApplied?: boolean;\n /** Currently featured/selected trace — its row gets the highlighted background. */\n featuredTraceId?: string | null;\n /**\n * Required in branches mode to disambiguate rows sharing a `traceId`. When set,\n * a row is featured only when both `traceId` and `spanId` match.\n */\n featuredSpanId?: string | null;\n /** Branches mode mixes root traces with subtraces — enables the Trace/Subtrace tooltip on the\n * level icon in the Name column, which is meaningless when every row is a root. */\n isBranchesMode?: boolean;\n /** Keys (`traceId:spanId`) of rows that just arrived via delta polling. Rows whose key is in\n * this set get a temporary tint to distinguish them from rows present since the last page-mode\n * fetch. Auto-expires upstream (in useTraces) after a short window. */\n recentlyAddedKeys?: Set<string>;\n /** Optional and metadata columns selected for this project. */\n columnPreferences?: TraceColumnPreferences;\n /** Token and estimated-cost totals, aggregated across model spans by trace ID. */\n usageByTraceId?: ReadonlyMap<string, TraceUsageSummary>;\n /** Called when a row is clicked. The current selection logic (toggle on same id) is the consumer's call. */\n onTraceClick: (trace: TracesListViewTrace) => void;\n /** Current sort of the Created column. When `onSortChange` is provided the header becomes sortable. */\n createdSort?: DataListSort;\n onSortChange?: (direction: DataListSort, key: 'startedAt') => void;\n /** When provided, custom column headers offer an `is <value>` filter for every value currently listed. */\n onFilterByField?: (field: TraceCustomColumn, value: string) => void;\n};\n\n/**\n * Virtualized presentational list. Renders only the visible window via TanStack Virtual, and\n * uses DataList primitives for layout (CSS Grid with subgrid rows).\n */\nexport function TracesListView({\n traces,\n isLoading,\n isFetchingNextPage,\n hasNextPage,\n setEndOfListElement,\n filtersApplied,\n featuredTraceId,\n featuredSpanId,\n isBranchesMode,\n recentlyAddedKeys,\n columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES,\n usageByTraceId,\n onTraceClick,\n createdSort,\n onSortChange,\n onFilterByField,\n}: TracesListViewProps) {\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const columns = buildTraceListColumns(columnPreferences);\n\n const virtualizer = useVirtualizer({\n count: traces.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => ROW_HEIGHT,\n overscan: OVERSCAN,\n });\n\n const { getRowProps } = useDataListKeyboard({\n count: traces.length,\n containerRef: scrollRef,\n onNavigate: index => virtualizer.scrollToIndex(index),\n global: true,\n });\n\n // Reset scroll to top whenever a fresh query resolves (filter / date range change).\n // `isLoading` only flips on initial fetches — `fetchNextPage` keeps it `false`, so this\n // effect doesn't fire during pagination.\n //\n // Why the manual scroll event: when the skeleton-vs-list branch swaps in the new scroll\n // container, it mounts at `scrollTop = 0`. The virtualizer rebinds its listener but\n // doesn't re-read `scrollTop`, so it keeps the stale `scrollOffset` from the previous\n // element. `scrollToOffset(0)` no-ops because the new element is already at 0 (no scroll\n // event fires). Dispatching a synthetic `scroll` forces the virtualizer's handler to\n // read the fresh `scrollTop` and recompute `virtualItems` with `paddingTop = 0`.\n const wasLoadingRef = useRef(isLoading);\n useEffect(() => {\n if (wasLoadingRef.current && !isLoading) {\n scrollRef.current?.dispatchEvent(new Event('scroll'));\n }\n wasLoadingRef.current = isLoading;\n }, [isLoading]);\n\n if (isLoading) {\n return <DataListSkeleton columns={columns} fit=\"container\" />;\n }\n\n const virtualItems = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n const paddingTop = virtualItems[0]?.start ?? 0;\n const paddingBottom =\n virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;\n\n return (\n <TracesDataList columns={columns} fit=\"container\" scrollRef={scrollRef} className=\"min-w-0\">\n <TracesDataList.Top>\n {onSortChange ? (\n <TracesDataList.SortableTopCell sortKey=\"startedAt\" sort={createdSort} onSortChange={onSortChange}>\n Start\n </TracesDataList.SortableTopCell>\n ) : (\n <TracesDataList.TopCell>Start</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'type') && <TracesDataList.TopCell>Type</TracesDataList.TopCell>}\n <TracesDataList.TopCell>Name</TracesDataList.TopCell>\n {hasTraceColumn(columnPreferences, 'input') && <TracesDataList.TopCell>Input</TracesDataList.TopCell>}\n <TracesDataList.TopCell>Status</TracesDataList.TopCell>\n {hasTraceColumn(columnPreferences, 'duration') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Duration</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'endTime') && <TracesDataList.TopCell>End</TracesDataList.TopCell>}\n {hasTraceColumn(columnPreferences, 'environment') && (\n <TracesDataList.TopCell>Environment</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'inputTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Input tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'outputTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Output tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'totalTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Total tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'estimatedCost') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Est. cost</TracesDataList.TopCell>\n )}\n {columnPreferences.customColumns.map(field => {\n const label = TRACE_CUSTOM_COLUMN_LABELS[field];\n const filterValues = onFilterByField ? distinctCustomColumnValues(traces, field) : [];\n if (!onFilterByField || filterValues.length === 0) {\n return <TracesDataList.TopCell key={field}>{label}</TracesDataList.TopCell>;\n }\n return (\n <TracesDataList.TopCell key={field} className=\"overflow-visible\">\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <button\n type=\"button\"\n className=\"focus-visible:outline-accent flex min-w-0 items-center gap-1 rounded-sm hover:text-foreground focus-visible:outline-2\"\n >\n <span className=\"min-w-0 truncate\">{label}</span>\n <ListFilterIcon aria-hidden className=\"size-[1.2em] shrink-0\" />\n </button>\n }\n />\n <DropdownMenu.Content align=\"start\">\n <DropdownMenu.Label>Filter by value</DropdownMenu.Label>\n {filterValues.map(value => (\n <DropdownMenu.Item key={value} onSelect={() => onFilterByField(field, value)}>\n <span className=\"min-w-0 truncate font-mono\">{value}</span>\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n </TracesDataList.TopCell>\n );\n })}\n {columnPreferences.metadataKeys.map(key => (\n <TracesDataList.TopCellWithTooltip key={key} tooltip={key}>\n {key}\n </TracesDataList.TopCellWithTooltip>\n ))}\n </TracesDataList.Top>\n\n {traces.length === 0 ? (\n <TracesDataList.NoMatch\n message={filtersApplied ? 'No traces found for applied filters' : 'No traces found yet'}\n />\n ) : (\n <>\n <TracesDataList.Spacer height={paddingTop} />\n {virtualItems.map(vi => {\n const trace = traces[vi.index];\n if (!trace) return null;\n\n const isFeatured =\n trace.traceId === featuredTraceId && (featuredSpanId == null || trace.spanId === featuredSpanId);\n const rowKey = `${trace.traceId}:${trace.spanId ?? ''}`;\n const isRecentlyAdded = recentlyAddedKeys?.has(rowKey) ?? false;\n const displayDate = trace.startedAt ?? trace.createdAt;\n const usage = usageByTraceId?.get(trace.traceId);\n\n return (\n <TracesDataList.RowButton\n key={rowKey}\n ref={virtualizer.measureElement}\n data-index={vi.index}\n {...getRowProps(vi.index)}\n onClick={() => onTraceClick(trace)}\n featured={isFeatured}\n className={cn(isRecentlyAdded && 'animate-row-highlight')}\n >\n <TracesDataList.CreatedCell timestamp={displayDate} />\n {hasTraceColumn(columnPreferences, 'type') && <TracesDataList.TypeCell entityType={trace.entityType} />}\n <TracesDataList.NameCell\n name={trace.name}\n parentSpanId={trace.parentSpanId}\n showLevelTooltip={isBranchesMode}\n />\n {hasTraceColumn(columnPreferences, 'input') && (\n <TracesDataList.InputCell input={trace.inputPreview ?? getInputPreview(trace.input)} />\n )}\n <TracesDataList.StatusCell status={trace.status} />\n {hasTraceColumn(columnPreferences, 'duration') && (\n <DataList.NumberCell>{formatSpanDuration(trace.startedAt, trace.endedAt)}</DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'endTime') && (\n <TracesDataList.CreatedCell timestamp={trace.endedAt ?? ''} />\n )}\n {hasTraceColumn(columnPreferences, 'environment') && (\n <DataList.TextCell>{trace.environment || '—'}</DataList.TextCell>\n )}\n {hasTraceColumn(columnPreferences, 'inputTokens') && (\n <DataList.NumberCell>\n {usage?.inputTokens === undefined ? undefined : formatCompact(usage.inputTokens)}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'outputTokens') && (\n <DataList.NumberCell>\n {usage?.outputTokens === undefined ? undefined : formatCompact(usage.outputTokens)}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'totalTokens') && (\n <DataList.NumberCell>\n {(() => {\n const total = sumTokens(usage);\n return total === undefined ? undefined : formatCompact(total);\n })()}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'estimatedCost') && (\n <DataList.NumberCell>\n {usage?.estimatedCost === undefined ? undefined : formatCost(usage.estimatedCost, usage.costUnit)}\n </DataList.NumberCell>\n )}\n {columnPreferences.customColumns.map(field => (\n <DataList.TextCell font=\"mono\" key={field}>\n {customColumnValue(trace, field) ?? undefined}\n </DataList.TextCell>\n ))}\n {columnPreferences.metadataKeys.map(key => {\n const value = formatTraceMetadataValue(trace.metadata, key);\n return (\n <DataList.TextCell font=\"mono\" key={key}>\n {value}\n </DataList.TextCell>\n );\n })}\n </TracesDataList.RowButton>\n );\n })}\n <TracesDataList.Spacer height={paddingBottom} />\n <TracesDataList.NextPageLoading\n isLoading={isFetchingNextPage}\n hasMore={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n />\n </>\n )}\n </TracesDataList>\n );\n}\n"],"names":["DEFAULT_TRACE_COLUMN_PREFERENCES","useRef","buildTraceListColumns","useVirtualizer","useDataListKeyboard","useEffect","jsx","DataListSkeleton","TracesDataList","jsxs","hasTraceColumn","TRACE_CUSTOM_COLUMN_LABELS","DropdownMenu","ListFilterIcon","Fragment","cn","getInputPreview","DataList","formatSpanDuration","formatCompact","formatCost","formatTraceMetadataValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"traces-list-view.cjs.js","sources":["../../../../src/domains/traces/components/traces-list-view.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { ListFilterIcon } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport {\n DEFAULT_TRACE_COLUMN_PREFERENCES,\n TRACE_CUSTOM_COLUMN_LABELS,\n buildTraceListColumns,\n formatTraceMetadataValue,\n hasTraceColumn,\n} from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceUsageSummary } from '../trace-list-columns';\nimport { getInputPreview, getSpanDurationMs } from '../utils/span-utils';\nimport { DataList, DataListSkeleton, TracesDataList, useDataListKeyboard } from '@/ds/components/DataList';\nimport type { DataListSort } from '@/ds/components/DataList';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Txt } from '@/ds/components/Txt/Txt';\nimport { formatCompactNumber, formatCost } from '@/lib/cost';\nimport { cn } from '@/lib/utils';\nimport { formatDuration } from '@/utils/duration';\n\nexport type TracesListViewTrace = {\n traceId: string;\n /** Required for branch rows; absent on plain trace rows (which are root-rooted). */\n spanId?: string | null;\n /** `null`/missing → root span. Drives the Kind column's icon (top-level trace vs nested branch). */\n parentSpanId?: string | null;\n name: string;\n entityType?: string | null;\n entityId?: string | null;\n entityName?: string | null;\n threadId?: string | null;\n resourceId?: string | null;\n environment?: string | null;\n status?: string | null;\n /** Server-rendered preview of `input`. Present on lightweight rows, which omit `input` itself. */\n inputPreview?: string | null;\n input?: unknown;\n metadata?: Record<string, unknown> | null;\n startedAt?: Date | string | null;\n endedAt?: Date | string | null;\n createdAt: Date | string;\n};\n\nconst ROW_HEIGHT = 36;\nconst OVERSCAN = 8;\n/** Distinct values offered in a custom column's \"filter by value\" header menu. */\nconst MAX_FILTER_VALUES = 20;\n\nfunction customColumnValue(trace: TracesListViewTrace, field: TraceCustomColumn): string | null | undefined {\n return trace[field];\n}\n\nfunction distinctCustomColumnValues(traces: TracesListViewTrace[], field: TraceCustomColumn): string[] {\n const values = new Set<string>();\n for (const trace of traces) {\n const value = trace[field];\n if (typeof value === 'string' && value) values.add(value);\n if (values.size >= MAX_FILTER_VALUES) break;\n }\n return [...values];\n}\n\nfunction sumTokens(usage: TraceUsageSummary | undefined): number | undefined {\n if (usage?.inputTokens === undefined && usage?.outputTokens === undefined) return undefined;\n return (usage?.inputTokens ?? 0) + (usage?.outputTokens ?? 0);\n}\n\nexport type TracesListViewProps = {\n traces: TracesListViewTrace[];\n isLoading?: boolean;\n isFetchingNextPage?: boolean;\n hasNextPage?: boolean;\n setEndOfListElement?: (element: HTMLDivElement | null) => void;\n filtersApplied?: boolean;\n /** Currently featured/selected trace — its row gets the highlighted background. */\n featuredTraceId?: string | null;\n /**\n * Required in branches mode to disambiguate rows sharing a `traceId`. When set,\n * a row is featured only when both `traceId` and `spanId` match.\n */\n featuredSpanId?: string | null;\n /** Branches mode mixes root traces with subtraces — enables the Trace/Subtrace tooltip on the\n * level icon in the Name column, which is meaningless when every row is a root. */\n isBranchesMode?: boolean;\n /** Keys (`traceId:spanId`) of rows that just arrived via delta polling. Rows whose key is in\n * this set get a temporary tint to distinguish them from rows present since the last page-mode\n * fetch. Auto-expires upstream (in useTraces) after a short window. */\n recentlyAddedKeys?: Set<string>;\n /** Optional and metadata columns selected for this project. */\n columnPreferences?: TraceColumnPreferences;\n /** Token and estimated-cost totals, aggregated across model spans by trace ID. */\n usageByTraceId?: ReadonlyMap<string, TraceUsageSummary>;\n /** Called when a row is clicked. The current selection logic (toggle on same id) is the consumer's call. */\n onTraceClick: (trace: TracesListViewTrace) => void;\n /** Current sort of the Created column. When `onSortChange` is provided the header becomes sortable. */\n createdSort?: DataListSort;\n onSortChange?: (direction: DataListSort, key: 'startedAt') => void;\n /** When provided, custom column headers offer an `is <value>` filter for every value currently listed. */\n onFilterByField?: (field: TraceCustomColumn, value: string) => void;\n};\n\n/**\n * Virtualized presentational list. Renders only the visible window via TanStack Virtual, and\n * uses DataList primitives for layout (CSS Grid with subgrid rows).\n */\nexport function TracesListView({\n traces,\n isLoading,\n isFetchingNextPage,\n hasNextPage,\n setEndOfListElement,\n filtersApplied,\n featuredTraceId,\n featuredSpanId,\n isBranchesMode,\n recentlyAddedKeys,\n columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES,\n usageByTraceId,\n onTraceClick,\n createdSort,\n onSortChange,\n onFilterByField,\n}: TracesListViewProps) {\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const columns = buildTraceListColumns(columnPreferences);\n\n const virtualizer = useVirtualizer({\n count: traces.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => ROW_HEIGHT,\n overscan: OVERSCAN,\n });\n\n const { getRowProps } = useDataListKeyboard({\n count: traces.length,\n containerRef: scrollRef,\n onNavigate: index => virtualizer.scrollToIndex(index),\n global: true,\n });\n\n // Reset scroll to top whenever a fresh query resolves (filter / date range change).\n // `isLoading` only flips on initial fetches — `fetchNextPage` keeps it `false`, so this\n // effect doesn't fire during pagination.\n //\n // Why the manual scroll event: when the skeleton-vs-list branch swaps in the new scroll\n // container, it mounts at `scrollTop = 0`. The virtualizer rebinds its listener but\n // doesn't re-read `scrollTop`, so it keeps the stale `scrollOffset` from the previous\n // element. `scrollToOffset(0)` no-ops because the new element is already at 0 (no scroll\n // event fires). Dispatching a synthetic `scroll` forces the virtualizer's handler to\n // read the fresh `scrollTop` and recompute `virtualItems` with `paddingTop = 0`.\n const wasLoadingRef = useRef(isLoading);\n useEffect(() => {\n if (wasLoadingRef.current && !isLoading) {\n scrollRef.current?.dispatchEvent(new Event('scroll'));\n }\n wasLoadingRef.current = isLoading;\n }, [isLoading]);\n\n if (isLoading) {\n return <DataListSkeleton columns={columns} fit=\"container\" />;\n }\n\n const virtualItems = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n const paddingTop = virtualItems[0]?.start ?? 0;\n const paddingBottom =\n virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;\n\n return (\n <TracesDataList columns={columns} fit=\"container\" scrollRef={scrollRef} className=\"min-w-0\">\n <TracesDataList.Top>\n {onSortChange ? (\n <TracesDataList.SortableTopCell sortKey=\"startedAt\" sort={createdSort} onSortChange={onSortChange}>\n Start\n </TracesDataList.SortableTopCell>\n ) : (\n <TracesDataList.TopCell>Start</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'type') && <TracesDataList.TopCell>Type</TracesDataList.TopCell>}\n <TracesDataList.TopCell>Name</TracesDataList.TopCell>\n {hasTraceColumn(columnPreferences, 'input') && <TracesDataList.TopCell>Input</TracesDataList.TopCell>}\n <TracesDataList.TopCell>Status</TracesDataList.TopCell>\n {hasTraceColumn(columnPreferences, 'duration') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Duration</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'endTime') && <TracesDataList.TopCell>End</TracesDataList.TopCell>}\n {hasTraceColumn(columnPreferences, 'environment') && (\n <TracesDataList.TopCell>Environment</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'inputTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Input tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'outputTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Output tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'totalTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Total tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'estimatedCost') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Est. cost</TracesDataList.TopCell>\n )}\n {columnPreferences.customColumns.map(field => {\n const label = TRACE_CUSTOM_COLUMN_LABELS[field];\n const filterValues = onFilterByField ? distinctCustomColumnValues(traces, field) : [];\n if (!onFilterByField || filterValues.length === 0) {\n return <TracesDataList.TopCell key={field}>{label}</TracesDataList.TopCell>;\n }\n return (\n <TracesDataList.TopCell key={field} className=\"overflow-visible\">\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <button\n type=\"button\"\n className=\"focus-visible:outline-accent flex min-w-0 items-center gap-1 rounded-sm hover:text-foreground focus-visible:outline-2\"\n >\n <span className=\"min-w-0 truncate\">{label}</span>\n <ListFilterIcon aria-hidden className=\"size-[1.2em] shrink-0\" />\n </button>\n }\n />\n <DropdownMenu.Content align=\"start\">\n <DropdownMenu.Label>Filter by value</DropdownMenu.Label>\n {filterValues.map(value => (\n <DropdownMenu.Item key={value} onSelect={() => onFilterByField(field, value)}>\n <Txt as=\"span\" variant=\"body-sm\" font=\"mono\" className=\"min-w-0 truncate\">\n {value}\n </Txt>\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n </TracesDataList.TopCell>\n );\n })}\n {columnPreferences.metadataKeys.map(key => (\n <TracesDataList.TopCellWithTooltip key={key} tooltip={key}>\n {key}\n </TracesDataList.TopCellWithTooltip>\n ))}\n </TracesDataList.Top>\n\n {traces.length === 0 ? (\n <TracesDataList.NoMatch\n message={filtersApplied ? 'No traces found for applied filters' : 'No traces found yet'}\n />\n ) : (\n <>\n <TracesDataList.Spacer height={paddingTop} />\n {virtualItems.map(vi => {\n const trace = traces[vi.index];\n if (!trace) return null;\n\n const isFeatured =\n trace.traceId === featuredTraceId && (featuredSpanId == null || trace.spanId === featuredSpanId);\n const rowKey = `${trace.traceId}:${trace.spanId ?? ''}`;\n const isRecentlyAdded = recentlyAddedKeys?.has(rowKey) ?? false;\n const displayDate = trace.startedAt ?? trace.createdAt;\n const usage = usageByTraceId?.get(trace.traceId);\n\n return (\n <TracesDataList.RowButton\n key={rowKey}\n ref={virtualizer.measureElement}\n data-index={vi.index}\n {...getRowProps(vi.index)}\n onClick={() => onTraceClick(trace)}\n featured={isFeatured}\n className={cn(isRecentlyAdded && 'animate-row-highlight')}\n >\n <TracesDataList.CreatedCell timestamp={displayDate} />\n {hasTraceColumn(columnPreferences, 'type') && <TracesDataList.TypeCell entityType={trace.entityType} />}\n <TracesDataList.NameCell\n name={trace.name}\n parentSpanId={trace.parentSpanId}\n showLevelTooltip={isBranchesMode}\n />\n {hasTraceColumn(columnPreferences, 'input') && (\n <TracesDataList.InputCell input={trace.inputPreview ?? getInputPreview(trace.input)} />\n )}\n <TracesDataList.StatusCell status={trace.status} />\n {hasTraceColumn(columnPreferences, 'duration') && (\n <DataList.NumberCell font=\"mono\">\n {formatDuration(getSpanDurationMs(trace.startedAt, trace.endedAt))}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'endTime') && (\n <TracesDataList.CreatedCell timestamp={trace.endedAt ?? ''} />\n )}\n {hasTraceColumn(columnPreferences, 'environment') && (\n <DataList.TextCell>{trace.environment || '—'}</DataList.TextCell>\n )}\n {hasTraceColumn(columnPreferences, 'inputTokens') && (\n <DataList.NumberCell>\n {usage?.inputTokens === undefined ? undefined : formatCompactNumber(usage.inputTokens)}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'outputTokens') && (\n <DataList.NumberCell>\n {usage?.outputTokens === undefined ? undefined : formatCompactNumber(usage.outputTokens)}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'totalTokens') && (\n <DataList.NumberCell>\n {(() => {\n const total = sumTokens(usage);\n return total === undefined ? undefined : formatCompactNumber(total);\n })()}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'estimatedCost') && (\n <DataList.NumberCell>\n {usage?.estimatedCost === undefined ? undefined : formatCost(usage.estimatedCost, usage.costUnit)}\n </DataList.NumberCell>\n )}\n {columnPreferences.customColumns.map(field => (\n <DataList.TextCell font=\"mono\" key={field}>\n {customColumnValue(trace, field) ?? undefined}\n </DataList.TextCell>\n ))}\n {columnPreferences.metadataKeys.map(key => {\n const value = formatTraceMetadataValue(trace.metadata, key);\n return (\n <DataList.TextCell font=\"mono\" key={key}>\n {value}\n </DataList.TextCell>\n );\n })}\n </TracesDataList.RowButton>\n );\n })}\n <TracesDataList.Spacer height={paddingBottom} />\n <TracesDataList.NextPageLoading\n isLoading={isFetchingNextPage}\n hasMore={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n />\n </>\n )}\n </TracesDataList>\n );\n}\n"],"names":["DEFAULT_TRACE_COLUMN_PREFERENCES","useRef","buildTraceListColumns","useVirtualizer","useDataListKeyboard","useEffect","jsx","DataListSkeleton","TracesDataList","jsxs","hasTraceColumn","TRACE_CUSTOM_COLUMN_LABELS","DropdownMenu","ListFilterIcon","Txt","Fragment","cn","getInputPreview","DataList","getSpanDurationMs","formatCompactNumber","formatCost","formatTraceMetadataValue"],"mappings":"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"}
|
|
@@ -3,14 +3,16 @@ import { useVirtualizer } from '@tanstack/react-virtual';
|
|
|
3
3
|
import { ListFilterIcon } from 'lucide-react';
|
|
4
4
|
import { useRef, useEffect } from 'react';
|
|
5
5
|
import { buildTraceListColumns, hasTraceColumn, DEFAULT_TRACE_COLUMN_PREFERENCES, TRACE_CUSTOM_COLUMN_LABELS, formatTraceMetadataValue } from '../trace-list-columns.es.js';
|
|
6
|
-
import { getInputPreview,
|
|
7
|
-
import {
|
|
8
|
-
import { D as
|
|
9
|
-
import {
|
|
10
|
-
import { T as TracesDataList } from '../../../traces-data-list-Dvi0s56v.js';
|
|
6
|
+
import { getInputPreview, getSpanDurationMs } from '../utils/span-utils.es.js';
|
|
7
|
+
import { D as DataList } from '../../../data-list-5-nRJbEO.js';
|
|
8
|
+
import { D as DataListSkeleton } from '../../../data-list-skeleton-BrSh9Y_3.js';
|
|
9
|
+
import { T as TracesDataList } from '../../../traces-data-list-CdWW9J6z.js';
|
|
11
10
|
import { u as useDataListKeyboard } from '../../../use-data-list-keyboard-DFQr4t38.js';
|
|
12
11
|
import { D as DropdownMenu } from '../../../dropdown-menu-DpEn6HwK.js';
|
|
12
|
+
import { T as Txt } from '../../../Txt-BP1SRHmL.js';
|
|
13
|
+
import { formatCompactNumber, formatCost } from '../../../utils/cost.es.js';
|
|
13
14
|
import { c as cn } from '../../../cn-65Adrsfj.js';
|
|
15
|
+
import { formatDuration } from '../../../utils/duration.es.js';
|
|
14
16
|
|
|
15
17
|
const ROW_HEIGHT = 36;
|
|
16
18
|
const OVERSCAN = 8;
|
|
@@ -116,7 +118,7 @@ function TracesListView({
|
|
|
116
118
|
),
|
|
117
119
|
/* @__PURE__ */ jsxs(DropdownMenu.Content, { align: "start", children: [
|
|
118
120
|
/* @__PURE__ */ jsx(DropdownMenu.Label, { children: "Filter by value" }),
|
|
119
|
-
filterValues.map((value) => /* @__PURE__ */ jsx(DropdownMenu.Item, { onSelect: () => onFilterByField(field, value), children: /* @__PURE__ */ jsx("span",
|
|
121
|
+
filterValues.map((value) => /* @__PURE__ */ jsx(DropdownMenu.Item, { onSelect: () => onFilterByField(field, value), children: /* @__PURE__ */ jsx(Txt, { as: "span", variant: "body-sm", font: "mono", className: "min-w-0 truncate", children: value }) }, value))
|
|
120
122
|
] })
|
|
121
123
|
] }) }, field);
|
|
122
124
|
}),
|
|
@@ -159,14 +161,14 @@ function TracesListView({
|
|
|
159
161
|
),
|
|
160
162
|
hasTraceColumn(columnPreferences, "input") && /* @__PURE__ */ jsx(TracesDataList.InputCell, { input: trace.inputPreview ?? getInputPreview(trace.input) }),
|
|
161
163
|
/* @__PURE__ */ jsx(TracesDataList.StatusCell, { status: trace.status }),
|
|
162
|
-
hasTraceColumn(columnPreferences, "duration") && /* @__PURE__ */ jsx(DataList.NumberCell, { children:
|
|
164
|
+
hasTraceColumn(columnPreferences, "duration") && /* @__PURE__ */ jsx(DataList.NumberCell, { font: "mono", children: formatDuration(getSpanDurationMs(trace.startedAt, trace.endedAt)) }),
|
|
163
165
|
hasTraceColumn(columnPreferences, "endTime") && /* @__PURE__ */ jsx(TracesDataList.CreatedCell, { timestamp: trace.endedAt ?? "" }),
|
|
164
166
|
hasTraceColumn(columnPreferences, "environment") && /* @__PURE__ */ jsx(DataList.TextCell, { children: trace.environment || "—" }),
|
|
165
|
-
hasTraceColumn(columnPreferences, "inputTokens") && /* @__PURE__ */ jsx(DataList.NumberCell, { children: usage?.inputTokens === void 0 ? void 0 :
|
|
166
|
-
hasTraceColumn(columnPreferences, "outputTokens") && /* @__PURE__ */ jsx(DataList.NumberCell, { children: usage?.outputTokens === void 0 ? void 0 :
|
|
167
|
+
hasTraceColumn(columnPreferences, "inputTokens") && /* @__PURE__ */ jsx(DataList.NumberCell, { children: usage?.inputTokens === void 0 ? void 0 : formatCompactNumber(usage.inputTokens) }),
|
|
168
|
+
hasTraceColumn(columnPreferences, "outputTokens") && /* @__PURE__ */ jsx(DataList.NumberCell, { children: usage?.outputTokens === void 0 ? void 0 : formatCompactNumber(usage.outputTokens) }),
|
|
167
169
|
hasTraceColumn(columnPreferences, "totalTokens") && /* @__PURE__ */ jsx(DataList.NumberCell, { children: (() => {
|
|
168
170
|
const total = sumTokens(usage);
|
|
169
|
-
return total === void 0 ? void 0 :
|
|
171
|
+
return total === void 0 ? void 0 : formatCompactNumber(total);
|
|
170
172
|
})() }),
|
|
171
173
|
hasTraceColumn(columnPreferences, "estimatedCost") && /* @__PURE__ */ jsx(DataList.NumberCell, { children: usage?.estimatedCost === void 0 ? void 0 : formatCost(usage.estimatedCost, usage.costUnit) }),
|
|
172
174
|
columnPreferences.customColumns.map((field) => /* @__PURE__ */ jsx(DataList.TextCell, { font: "mono", children: customColumnValue(trace, field) ?? void 0 }, field)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traces-list-view.es.js","sources":["../../../../src/domains/traces/components/traces-list-view.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { ListFilterIcon } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport {\n DEFAULT_TRACE_COLUMN_PREFERENCES,\n TRACE_CUSTOM_COLUMN_LABELS,\n buildTraceListColumns,\n formatTraceMetadataValue,\n hasTraceColumn,\n} from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceUsageSummary } from '../trace-list-columns';\nimport { formatSpanDuration, getInputPreview } from '../utils/span-utils';\nimport { formatCompact, formatCost } from '@/domains/metrics/components/metrics-utils';\nimport { DataList, DataListSkeleton, TracesDataList, useDataListKeyboard } from '@/ds/components/DataList';\nimport type { DataListSort } from '@/ds/components/DataList';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { cn } from '@/lib/utils';\n\nexport type TracesListViewTrace = {\n traceId: string;\n /** Required for branch rows; absent on plain trace rows (which are root-rooted). */\n spanId?: string | null;\n /** `null`/missing → root span. Drives the Kind column's icon (top-level trace vs nested branch). */\n parentSpanId?: string | null;\n name: string;\n entityType?: string | null;\n entityId?: string | null;\n entityName?: string | null;\n threadId?: string | null;\n resourceId?: string | null;\n environment?: string | null;\n status?: string | null;\n /** Server-rendered preview of `input`. Present on lightweight rows, which omit `input` itself. */\n inputPreview?: string | null;\n input?: unknown;\n metadata?: Record<string, unknown> | null;\n startedAt?: Date | string | null;\n endedAt?: Date | string | null;\n createdAt: Date | string;\n};\n\nconst ROW_HEIGHT = 36;\nconst OVERSCAN = 8;\n/** Distinct values offered in a custom column's \"filter by value\" header menu. */\nconst MAX_FILTER_VALUES = 20;\n\nfunction customColumnValue(trace: TracesListViewTrace, field: TraceCustomColumn): string | null | undefined {\n return trace[field];\n}\n\nfunction distinctCustomColumnValues(traces: TracesListViewTrace[], field: TraceCustomColumn): string[] {\n const values = new Set<string>();\n for (const trace of traces) {\n const value = trace[field];\n if (typeof value === 'string' && value) values.add(value);\n if (values.size >= MAX_FILTER_VALUES) break;\n }\n return [...values];\n}\n\nfunction sumTokens(usage: TraceUsageSummary | undefined): number | undefined {\n if (usage?.inputTokens === undefined && usage?.outputTokens === undefined) return undefined;\n return (usage?.inputTokens ?? 0) + (usage?.outputTokens ?? 0);\n}\n\nexport type TracesListViewProps = {\n traces: TracesListViewTrace[];\n isLoading?: boolean;\n isFetchingNextPage?: boolean;\n hasNextPage?: boolean;\n setEndOfListElement?: (element: HTMLDivElement | null) => void;\n filtersApplied?: boolean;\n /** Currently featured/selected trace — its row gets the highlighted background. */\n featuredTraceId?: string | null;\n /**\n * Required in branches mode to disambiguate rows sharing a `traceId`. When set,\n * a row is featured only when both `traceId` and `spanId` match.\n */\n featuredSpanId?: string | null;\n /** Branches mode mixes root traces with subtraces — enables the Trace/Subtrace tooltip on the\n * level icon in the Name column, which is meaningless when every row is a root. */\n isBranchesMode?: boolean;\n /** Keys (`traceId:spanId`) of rows that just arrived via delta polling. Rows whose key is in\n * this set get a temporary tint to distinguish them from rows present since the last page-mode\n * fetch. Auto-expires upstream (in useTraces) after a short window. */\n recentlyAddedKeys?: Set<string>;\n /** Optional and metadata columns selected for this project. */\n columnPreferences?: TraceColumnPreferences;\n /** Token and estimated-cost totals, aggregated across model spans by trace ID. */\n usageByTraceId?: ReadonlyMap<string, TraceUsageSummary>;\n /** Called when a row is clicked. The current selection logic (toggle on same id) is the consumer's call. */\n onTraceClick: (trace: TracesListViewTrace) => void;\n /** Current sort of the Created column. When `onSortChange` is provided the header becomes sortable. */\n createdSort?: DataListSort;\n onSortChange?: (direction: DataListSort, key: 'startedAt') => void;\n /** When provided, custom column headers offer an `is <value>` filter for every value currently listed. */\n onFilterByField?: (field: TraceCustomColumn, value: string) => void;\n};\n\n/**\n * Virtualized presentational list. Renders only the visible window via TanStack Virtual, and\n * uses DataList primitives for layout (CSS Grid with subgrid rows).\n */\nexport function TracesListView({\n traces,\n isLoading,\n isFetchingNextPage,\n hasNextPage,\n setEndOfListElement,\n filtersApplied,\n featuredTraceId,\n featuredSpanId,\n isBranchesMode,\n recentlyAddedKeys,\n columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES,\n usageByTraceId,\n onTraceClick,\n createdSort,\n onSortChange,\n onFilterByField,\n}: TracesListViewProps) {\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const columns = buildTraceListColumns(columnPreferences);\n\n const virtualizer = useVirtualizer({\n count: traces.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => ROW_HEIGHT,\n overscan: OVERSCAN,\n });\n\n const { getRowProps } = useDataListKeyboard({\n count: traces.length,\n containerRef: scrollRef,\n onNavigate: index => virtualizer.scrollToIndex(index),\n global: true,\n });\n\n // Reset scroll to top whenever a fresh query resolves (filter / date range change).\n // `isLoading` only flips on initial fetches — `fetchNextPage` keeps it `false`, so this\n // effect doesn't fire during pagination.\n //\n // Why the manual scroll event: when the skeleton-vs-list branch swaps in the new scroll\n // container, it mounts at `scrollTop = 0`. The virtualizer rebinds its listener but\n // doesn't re-read `scrollTop`, so it keeps the stale `scrollOffset` from the previous\n // element. `scrollToOffset(0)` no-ops because the new element is already at 0 (no scroll\n // event fires). Dispatching a synthetic `scroll` forces the virtualizer's handler to\n // read the fresh `scrollTop` and recompute `virtualItems` with `paddingTop = 0`.\n const wasLoadingRef = useRef(isLoading);\n useEffect(() => {\n if (wasLoadingRef.current && !isLoading) {\n scrollRef.current?.dispatchEvent(new Event('scroll'));\n }\n wasLoadingRef.current = isLoading;\n }, [isLoading]);\n\n if (isLoading) {\n return <DataListSkeleton columns={columns} fit=\"container\" />;\n }\n\n const virtualItems = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n const paddingTop = virtualItems[0]?.start ?? 0;\n const paddingBottom =\n virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;\n\n return (\n <TracesDataList columns={columns} fit=\"container\" scrollRef={scrollRef} className=\"min-w-0\">\n <TracesDataList.Top>\n {onSortChange ? (\n <TracesDataList.SortableTopCell sortKey=\"startedAt\" sort={createdSort} onSortChange={onSortChange}>\n Start\n </TracesDataList.SortableTopCell>\n ) : (\n <TracesDataList.TopCell>Start</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'type') && <TracesDataList.TopCell>Type</TracesDataList.TopCell>}\n <TracesDataList.TopCell>Name</TracesDataList.TopCell>\n {hasTraceColumn(columnPreferences, 'input') && <TracesDataList.TopCell>Input</TracesDataList.TopCell>}\n <TracesDataList.TopCell>Status</TracesDataList.TopCell>\n {hasTraceColumn(columnPreferences, 'duration') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Duration</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'endTime') && <TracesDataList.TopCell>End</TracesDataList.TopCell>}\n {hasTraceColumn(columnPreferences, 'environment') && (\n <TracesDataList.TopCell>Environment</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'inputTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Input tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'outputTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Output tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'totalTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Total tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'estimatedCost') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Est. cost</TracesDataList.TopCell>\n )}\n {columnPreferences.customColumns.map(field => {\n const label = TRACE_CUSTOM_COLUMN_LABELS[field];\n const filterValues = onFilterByField ? distinctCustomColumnValues(traces, field) : [];\n if (!onFilterByField || filterValues.length === 0) {\n return <TracesDataList.TopCell key={field}>{label}</TracesDataList.TopCell>;\n }\n return (\n <TracesDataList.TopCell key={field} className=\"overflow-visible\">\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <button\n type=\"button\"\n className=\"focus-visible:outline-accent flex min-w-0 items-center gap-1 rounded-sm hover:text-foreground focus-visible:outline-2\"\n >\n <span className=\"min-w-0 truncate\">{label}</span>\n <ListFilterIcon aria-hidden className=\"size-[1.2em] shrink-0\" />\n </button>\n }\n />\n <DropdownMenu.Content align=\"start\">\n <DropdownMenu.Label>Filter by value</DropdownMenu.Label>\n {filterValues.map(value => (\n <DropdownMenu.Item key={value} onSelect={() => onFilterByField(field, value)}>\n <span className=\"min-w-0 truncate font-mono\">{value}</span>\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n </TracesDataList.TopCell>\n );\n })}\n {columnPreferences.metadataKeys.map(key => (\n <TracesDataList.TopCellWithTooltip key={key} tooltip={key}>\n {key}\n </TracesDataList.TopCellWithTooltip>\n ))}\n </TracesDataList.Top>\n\n {traces.length === 0 ? (\n <TracesDataList.NoMatch\n message={filtersApplied ? 'No traces found for applied filters' : 'No traces found yet'}\n />\n ) : (\n <>\n <TracesDataList.Spacer height={paddingTop} />\n {virtualItems.map(vi => {\n const trace = traces[vi.index];\n if (!trace) return null;\n\n const isFeatured =\n trace.traceId === featuredTraceId && (featuredSpanId == null || trace.spanId === featuredSpanId);\n const rowKey = `${trace.traceId}:${trace.spanId ?? ''}`;\n const isRecentlyAdded = recentlyAddedKeys?.has(rowKey) ?? false;\n const displayDate = trace.startedAt ?? trace.createdAt;\n const usage = usageByTraceId?.get(trace.traceId);\n\n return (\n <TracesDataList.RowButton\n key={rowKey}\n ref={virtualizer.measureElement}\n data-index={vi.index}\n {...getRowProps(vi.index)}\n onClick={() => onTraceClick(trace)}\n featured={isFeatured}\n className={cn(isRecentlyAdded && 'animate-row-highlight')}\n >\n <TracesDataList.CreatedCell timestamp={displayDate} />\n {hasTraceColumn(columnPreferences, 'type') && <TracesDataList.TypeCell entityType={trace.entityType} />}\n <TracesDataList.NameCell\n name={trace.name}\n parentSpanId={trace.parentSpanId}\n showLevelTooltip={isBranchesMode}\n />\n {hasTraceColumn(columnPreferences, 'input') && (\n <TracesDataList.InputCell input={trace.inputPreview ?? getInputPreview(trace.input)} />\n )}\n <TracesDataList.StatusCell status={trace.status} />\n {hasTraceColumn(columnPreferences, 'duration') && (\n <DataList.NumberCell>{formatSpanDuration(trace.startedAt, trace.endedAt)}</DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'endTime') && (\n <TracesDataList.CreatedCell timestamp={trace.endedAt ?? ''} />\n )}\n {hasTraceColumn(columnPreferences, 'environment') && (\n <DataList.TextCell>{trace.environment || '—'}</DataList.TextCell>\n )}\n {hasTraceColumn(columnPreferences, 'inputTokens') && (\n <DataList.NumberCell>\n {usage?.inputTokens === undefined ? undefined : formatCompact(usage.inputTokens)}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'outputTokens') && (\n <DataList.NumberCell>\n {usage?.outputTokens === undefined ? undefined : formatCompact(usage.outputTokens)}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'totalTokens') && (\n <DataList.NumberCell>\n {(() => {\n const total = sumTokens(usage);\n return total === undefined ? undefined : formatCompact(total);\n })()}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'estimatedCost') && (\n <DataList.NumberCell>\n {usage?.estimatedCost === undefined ? undefined : formatCost(usage.estimatedCost, usage.costUnit)}\n </DataList.NumberCell>\n )}\n {columnPreferences.customColumns.map(field => (\n <DataList.TextCell font=\"mono\" key={field}>\n {customColumnValue(trace, field) ?? undefined}\n </DataList.TextCell>\n ))}\n {columnPreferences.metadataKeys.map(key => {\n const value = formatTraceMetadataValue(trace.metadata, key);\n return (\n <DataList.TextCell font=\"mono\" key={key}>\n {value}\n </DataList.TextCell>\n );\n })}\n </TracesDataList.RowButton>\n );\n })}\n <TracesDataList.Spacer height={paddingBottom} />\n <TracesDataList.NextPageLoading\n isLoading={isFetchingNextPage}\n hasMore={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n />\n </>\n )}\n </TracesDataList>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"traces-list-view.es.js","sources":["../../../../src/domains/traces/components/traces-list-view.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { ListFilterIcon } from 'lucide-react';\nimport { useEffect, useRef } from 'react';\nimport {\n DEFAULT_TRACE_COLUMN_PREFERENCES,\n TRACE_CUSTOM_COLUMN_LABELS,\n buildTraceListColumns,\n formatTraceMetadataValue,\n hasTraceColumn,\n} from '../trace-list-columns';\nimport type { TraceColumnPreferences, TraceCustomColumn, TraceUsageSummary } from '../trace-list-columns';\nimport { getInputPreview, getSpanDurationMs } from '../utils/span-utils';\nimport { DataList, DataListSkeleton, TracesDataList, useDataListKeyboard } from '@/ds/components/DataList';\nimport type { DataListSort } from '@/ds/components/DataList';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\nimport { Txt } from '@/ds/components/Txt/Txt';\nimport { formatCompactNumber, formatCost } from '@/lib/cost';\nimport { cn } from '@/lib/utils';\nimport { formatDuration } from '@/utils/duration';\n\nexport type TracesListViewTrace = {\n traceId: string;\n /** Required for branch rows; absent on plain trace rows (which are root-rooted). */\n spanId?: string | null;\n /** `null`/missing → root span. Drives the Kind column's icon (top-level trace vs nested branch). */\n parentSpanId?: string | null;\n name: string;\n entityType?: string | null;\n entityId?: string | null;\n entityName?: string | null;\n threadId?: string | null;\n resourceId?: string | null;\n environment?: string | null;\n status?: string | null;\n /** Server-rendered preview of `input`. Present on lightweight rows, which omit `input` itself. */\n inputPreview?: string | null;\n input?: unknown;\n metadata?: Record<string, unknown> | null;\n startedAt?: Date | string | null;\n endedAt?: Date | string | null;\n createdAt: Date | string;\n};\n\nconst ROW_HEIGHT = 36;\nconst OVERSCAN = 8;\n/** Distinct values offered in a custom column's \"filter by value\" header menu. */\nconst MAX_FILTER_VALUES = 20;\n\nfunction customColumnValue(trace: TracesListViewTrace, field: TraceCustomColumn): string | null | undefined {\n return trace[field];\n}\n\nfunction distinctCustomColumnValues(traces: TracesListViewTrace[], field: TraceCustomColumn): string[] {\n const values = new Set<string>();\n for (const trace of traces) {\n const value = trace[field];\n if (typeof value === 'string' && value) values.add(value);\n if (values.size >= MAX_FILTER_VALUES) break;\n }\n return [...values];\n}\n\nfunction sumTokens(usage: TraceUsageSummary | undefined): number | undefined {\n if (usage?.inputTokens === undefined && usage?.outputTokens === undefined) return undefined;\n return (usage?.inputTokens ?? 0) + (usage?.outputTokens ?? 0);\n}\n\nexport type TracesListViewProps = {\n traces: TracesListViewTrace[];\n isLoading?: boolean;\n isFetchingNextPage?: boolean;\n hasNextPage?: boolean;\n setEndOfListElement?: (element: HTMLDivElement | null) => void;\n filtersApplied?: boolean;\n /** Currently featured/selected trace — its row gets the highlighted background. */\n featuredTraceId?: string | null;\n /**\n * Required in branches mode to disambiguate rows sharing a `traceId`. When set,\n * a row is featured only when both `traceId` and `spanId` match.\n */\n featuredSpanId?: string | null;\n /** Branches mode mixes root traces with subtraces — enables the Trace/Subtrace tooltip on the\n * level icon in the Name column, which is meaningless when every row is a root. */\n isBranchesMode?: boolean;\n /** Keys (`traceId:spanId`) of rows that just arrived via delta polling. Rows whose key is in\n * this set get a temporary tint to distinguish them from rows present since the last page-mode\n * fetch. Auto-expires upstream (in useTraces) after a short window. */\n recentlyAddedKeys?: Set<string>;\n /** Optional and metadata columns selected for this project. */\n columnPreferences?: TraceColumnPreferences;\n /** Token and estimated-cost totals, aggregated across model spans by trace ID. */\n usageByTraceId?: ReadonlyMap<string, TraceUsageSummary>;\n /** Called when a row is clicked. The current selection logic (toggle on same id) is the consumer's call. */\n onTraceClick: (trace: TracesListViewTrace) => void;\n /** Current sort of the Created column. When `onSortChange` is provided the header becomes sortable. */\n createdSort?: DataListSort;\n onSortChange?: (direction: DataListSort, key: 'startedAt') => void;\n /** When provided, custom column headers offer an `is <value>` filter for every value currently listed. */\n onFilterByField?: (field: TraceCustomColumn, value: string) => void;\n};\n\n/**\n * Virtualized presentational list. Renders only the visible window via TanStack Virtual, and\n * uses DataList primitives for layout (CSS Grid with subgrid rows).\n */\nexport function TracesListView({\n traces,\n isLoading,\n isFetchingNextPage,\n hasNextPage,\n setEndOfListElement,\n filtersApplied,\n featuredTraceId,\n featuredSpanId,\n isBranchesMode,\n recentlyAddedKeys,\n columnPreferences = DEFAULT_TRACE_COLUMN_PREFERENCES,\n usageByTraceId,\n onTraceClick,\n createdSort,\n onSortChange,\n onFilterByField,\n}: TracesListViewProps) {\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const columns = buildTraceListColumns(columnPreferences);\n\n const virtualizer = useVirtualizer({\n count: traces.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => ROW_HEIGHT,\n overscan: OVERSCAN,\n });\n\n const { getRowProps } = useDataListKeyboard({\n count: traces.length,\n containerRef: scrollRef,\n onNavigate: index => virtualizer.scrollToIndex(index),\n global: true,\n });\n\n // Reset scroll to top whenever a fresh query resolves (filter / date range change).\n // `isLoading` only flips on initial fetches — `fetchNextPage` keeps it `false`, so this\n // effect doesn't fire during pagination.\n //\n // Why the manual scroll event: when the skeleton-vs-list branch swaps in the new scroll\n // container, it mounts at `scrollTop = 0`. The virtualizer rebinds its listener but\n // doesn't re-read `scrollTop`, so it keeps the stale `scrollOffset` from the previous\n // element. `scrollToOffset(0)` no-ops because the new element is already at 0 (no scroll\n // event fires). Dispatching a synthetic `scroll` forces the virtualizer's handler to\n // read the fresh `scrollTop` and recompute `virtualItems` with `paddingTop = 0`.\n const wasLoadingRef = useRef(isLoading);\n useEffect(() => {\n if (wasLoadingRef.current && !isLoading) {\n scrollRef.current?.dispatchEvent(new Event('scroll'));\n }\n wasLoadingRef.current = isLoading;\n }, [isLoading]);\n\n if (isLoading) {\n return <DataListSkeleton columns={columns} fit=\"container\" />;\n }\n\n const virtualItems = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n const paddingTop = virtualItems[0]?.start ?? 0;\n const paddingBottom =\n virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;\n\n return (\n <TracesDataList columns={columns} fit=\"container\" scrollRef={scrollRef} className=\"min-w-0\">\n <TracesDataList.Top>\n {onSortChange ? (\n <TracesDataList.SortableTopCell sortKey=\"startedAt\" sort={createdSort} onSortChange={onSortChange}>\n Start\n </TracesDataList.SortableTopCell>\n ) : (\n <TracesDataList.TopCell>Start</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'type') && <TracesDataList.TopCell>Type</TracesDataList.TopCell>}\n <TracesDataList.TopCell>Name</TracesDataList.TopCell>\n {hasTraceColumn(columnPreferences, 'input') && <TracesDataList.TopCell>Input</TracesDataList.TopCell>}\n <TracesDataList.TopCell>Status</TracesDataList.TopCell>\n {hasTraceColumn(columnPreferences, 'duration') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Duration</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'endTime') && <TracesDataList.TopCell>End</TracesDataList.TopCell>}\n {hasTraceColumn(columnPreferences, 'environment') && (\n <TracesDataList.TopCell>Environment</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'inputTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Input tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'outputTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Output tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'totalTokens') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Total tokens</TracesDataList.TopCell>\n )}\n {hasTraceColumn(columnPreferences, 'estimatedCost') && (\n <TracesDataList.TopCell className=\"justify-end text-right\">Est. cost</TracesDataList.TopCell>\n )}\n {columnPreferences.customColumns.map(field => {\n const label = TRACE_CUSTOM_COLUMN_LABELS[field];\n const filterValues = onFilterByField ? distinctCustomColumnValues(traces, field) : [];\n if (!onFilterByField || filterValues.length === 0) {\n return <TracesDataList.TopCell key={field}>{label}</TracesDataList.TopCell>;\n }\n return (\n <TracesDataList.TopCell key={field} className=\"overflow-visible\">\n <DropdownMenu>\n <DropdownMenu.Trigger\n render={\n <button\n type=\"button\"\n className=\"focus-visible:outline-accent flex min-w-0 items-center gap-1 rounded-sm hover:text-foreground focus-visible:outline-2\"\n >\n <span className=\"min-w-0 truncate\">{label}</span>\n <ListFilterIcon aria-hidden className=\"size-[1.2em] shrink-0\" />\n </button>\n }\n />\n <DropdownMenu.Content align=\"start\">\n <DropdownMenu.Label>Filter by value</DropdownMenu.Label>\n {filterValues.map(value => (\n <DropdownMenu.Item key={value} onSelect={() => onFilterByField(field, value)}>\n <Txt as=\"span\" variant=\"body-sm\" font=\"mono\" className=\"min-w-0 truncate\">\n {value}\n </Txt>\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu>\n </TracesDataList.TopCell>\n );\n })}\n {columnPreferences.metadataKeys.map(key => (\n <TracesDataList.TopCellWithTooltip key={key} tooltip={key}>\n {key}\n </TracesDataList.TopCellWithTooltip>\n ))}\n </TracesDataList.Top>\n\n {traces.length === 0 ? (\n <TracesDataList.NoMatch\n message={filtersApplied ? 'No traces found for applied filters' : 'No traces found yet'}\n />\n ) : (\n <>\n <TracesDataList.Spacer height={paddingTop} />\n {virtualItems.map(vi => {\n const trace = traces[vi.index];\n if (!trace) return null;\n\n const isFeatured =\n trace.traceId === featuredTraceId && (featuredSpanId == null || trace.spanId === featuredSpanId);\n const rowKey = `${trace.traceId}:${trace.spanId ?? ''}`;\n const isRecentlyAdded = recentlyAddedKeys?.has(rowKey) ?? false;\n const displayDate = trace.startedAt ?? trace.createdAt;\n const usage = usageByTraceId?.get(trace.traceId);\n\n return (\n <TracesDataList.RowButton\n key={rowKey}\n ref={virtualizer.measureElement}\n data-index={vi.index}\n {...getRowProps(vi.index)}\n onClick={() => onTraceClick(trace)}\n featured={isFeatured}\n className={cn(isRecentlyAdded && 'animate-row-highlight')}\n >\n <TracesDataList.CreatedCell timestamp={displayDate} />\n {hasTraceColumn(columnPreferences, 'type') && <TracesDataList.TypeCell entityType={trace.entityType} />}\n <TracesDataList.NameCell\n name={trace.name}\n parentSpanId={trace.parentSpanId}\n showLevelTooltip={isBranchesMode}\n />\n {hasTraceColumn(columnPreferences, 'input') && (\n <TracesDataList.InputCell input={trace.inputPreview ?? getInputPreview(trace.input)} />\n )}\n <TracesDataList.StatusCell status={trace.status} />\n {hasTraceColumn(columnPreferences, 'duration') && (\n <DataList.NumberCell font=\"mono\">\n {formatDuration(getSpanDurationMs(trace.startedAt, trace.endedAt))}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'endTime') && (\n <TracesDataList.CreatedCell timestamp={trace.endedAt ?? ''} />\n )}\n {hasTraceColumn(columnPreferences, 'environment') && (\n <DataList.TextCell>{trace.environment || '—'}</DataList.TextCell>\n )}\n {hasTraceColumn(columnPreferences, 'inputTokens') && (\n <DataList.NumberCell>\n {usage?.inputTokens === undefined ? undefined : formatCompactNumber(usage.inputTokens)}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'outputTokens') && (\n <DataList.NumberCell>\n {usage?.outputTokens === undefined ? undefined : formatCompactNumber(usage.outputTokens)}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'totalTokens') && (\n <DataList.NumberCell>\n {(() => {\n const total = sumTokens(usage);\n return total === undefined ? undefined : formatCompactNumber(total);\n })()}\n </DataList.NumberCell>\n )}\n {hasTraceColumn(columnPreferences, 'estimatedCost') && (\n <DataList.NumberCell>\n {usage?.estimatedCost === undefined ? undefined : formatCost(usage.estimatedCost, usage.costUnit)}\n </DataList.NumberCell>\n )}\n {columnPreferences.customColumns.map(field => (\n <DataList.TextCell font=\"mono\" key={field}>\n {customColumnValue(trace, field) ?? undefined}\n </DataList.TextCell>\n ))}\n {columnPreferences.metadataKeys.map(key => {\n const value = formatTraceMetadataValue(trace.metadata, key);\n return (\n <DataList.TextCell font=\"mono\" key={key}>\n {value}\n </DataList.TextCell>\n );\n })}\n </TracesDataList.RowButton>\n );\n })}\n <TracesDataList.Spacer height={paddingBottom} />\n <TracesDataList.NextPageLoading\n isLoading={isFetchingNextPage}\n hasMore={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n />\n </>\n )}\n </TracesDataList>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
4
4
|
|
|
5
5
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
const domains_traces_traceListColumns = require('../trace-list-columns.cjs.js');
|
|
7
|
-
const dataListSkeleton = require('../../../data-list-skeleton-
|
|
7
|
+
const dataListSkeleton = require('../../../data-list-skeleton-CgbWqYky.cjs');
|
|
8
8
|
require('react');
|
|
9
9
|
require('../../../keyboard/keyboard-shortcuts-context.cjs.js');
|
|
10
10
|
const skeleton = require('../../../skeleton-cXUjPrq9.cjs');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { buildTraceListColumns, DEFAULT_TRACE_COLUMN_PREFERENCES } from '../trace-list-columns.es.js';
|
|
3
|
-
import { D as DataListSkeleton } from '../../../data-list-skeleton-
|
|
3
|
+
import { D as DataListSkeleton } from '../../../data-list-skeleton-BrSh9Y_3.js';
|
|
4
4
|
import 'react';
|
|
5
5
|
import '../../../keyboard/keyboard-shortcuts-context.es.js';
|
|
6
6
|
import { S as Skeleton } from '../../../skeleton-BsRAXyh5.js';
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
5
5
|
const react = require('@mastra/react');
|
|
6
6
|
const reactQuery = require('@tanstack/react-query');
|
|
7
7
|
const domains_traces_utils_toSearchableSpans = require('../utils/to-searchable-spans.cjs.js');
|
|
8
|
-
require('date-fns');
|
|
9
8
|
|
|
10
9
|
function useBranch({
|
|
11
10
|
traceId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-branch.cjs.js","sources":["../../../../src/domains/traces/hooks/use-branch.ts"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport type { SearchableSpan } from '../types';\nimport { selectSearchableSpans } from '../utils';\n\nexport interface UseBranchArgs {\n traceId: string | null | undefined;\n spanId: string | null | undefined;\n depth?: number;\n}\n\nexport function useBranch({\n traceId,\n spanId,\n depth,\n}: UseBranchArgs): UseQueryResult<{ traceId: string; spans: SearchableSpan[] } | null> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['branch', traceId, spanId, depth],\n queryFn: async () => {\n if (!traceId || !spanId) {\n throw new Error('traceId and spanId are required');\n }\n return client.getBranch({ traceId, spanId, depth });\n },\n // Builds each span's search haystack once per fetch, cached with the query.\n select: selectSearchableSpans,\n enabled: !!traceId && !!spanId,\n // A finished subtree can still gain spans from a resumed run or delayed export.\n staleTime: 0,\n });\n}\n"],"names":["useMastraClient","useQuery","selectSearchableSpans"],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-branch.cjs.js","sources":["../../../../src/domains/traces/hooks/use-branch.ts"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport type { SearchableSpan } from '../types';\nimport { selectSearchableSpans } from '../utils';\n\nexport interface UseBranchArgs {\n traceId: string | null | undefined;\n spanId: string | null | undefined;\n depth?: number;\n}\n\nexport function useBranch({\n traceId,\n spanId,\n depth,\n}: UseBranchArgs): UseQueryResult<{ traceId: string; spans: SearchableSpan[] } | null> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['branch', traceId, spanId, depth],\n queryFn: async () => {\n if (!traceId || !spanId) {\n throw new Error('traceId and spanId are required');\n }\n return client.getBranch({ traceId, spanId, depth });\n },\n // Builds each span's search haystack once per fetch, cached with the query.\n select: selectSearchableSpans,\n enabled: !!traceId && !!spanId,\n // A finished subtree can still gain spans from a resumed run or delayed export.\n staleTime: 0,\n });\n}\n"],"names":["useMastraClient","useQuery","selectSearchableSpans"],"mappings":";;;;;;;;AAYO,SAAS,SAAA,CAAU;AAAA,EACxB,OAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAuF;AACrF,EAAA,MAAM,SAASA,qBAAA,EAAgB;AAE/B,EAAA,OAAOC,mBAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,QAAA,EAAU,OAAA,EAAS,QAAQ,KAAK,CAAA;AAAA,IAC3C,SAAS,YAAY;AACnB,MAAA,IAAI,CAAC,OAAA,IAAW,CAAC,MAAA,EAAQ;AACvB,QAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,MACnD;AACA,MAAA,OAAO,OAAO,SAAA,CAAU,EAAE,OAAA,EAAS,MAAA,EAAQ,OAAO,CAAA;AAAA,IACpD,CAAA;AAAA;AAAA,IAEA,MAAA,EAAQC,4DAAA;AAAA,IACR,OAAA,EAAS,CAAC,CAAC,OAAA,IAAW,CAAC,CAAC,MAAA;AAAA;AAAA,IAExB,SAAA,EAAW;AAAA,GACZ,CAAA;AACH;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-branch.es.js","sources":["../../../../src/domains/traces/hooks/use-branch.ts"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport type { SearchableSpan } from '../types';\nimport { selectSearchableSpans } from '../utils';\n\nexport interface UseBranchArgs {\n traceId: string | null | undefined;\n spanId: string | null | undefined;\n depth?: number;\n}\n\nexport function useBranch({\n traceId,\n spanId,\n depth,\n}: UseBranchArgs): UseQueryResult<{ traceId: string; spans: SearchableSpan[] } | null> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['branch', traceId, spanId, depth],\n queryFn: async () => {\n if (!traceId || !spanId) {\n throw new Error('traceId and spanId are required');\n }\n return client.getBranch({ traceId, spanId, depth });\n },\n // Builds each span's search haystack once per fetch, cached with the query.\n select: selectSearchableSpans,\n enabled: !!traceId && !!spanId,\n // A finished subtree can still gain spans from a resumed run or delayed export.\n staleTime: 0,\n });\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-branch.es.js","sources":["../../../../src/domains/traces/hooks/use-branch.ts"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport type { SearchableSpan } from '../types';\nimport { selectSearchableSpans } from '../utils';\n\nexport interface UseBranchArgs {\n traceId: string | null | undefined;\n spanId: string | null | undefined;\n depth?: number;\n}\n\nexport function useBranch({\n traceId,\n spanId,\n depth,\n}: UseBranchArgs): UseQueryResult<{ traceId: string; spans: SearchableSpan[] } | null> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['branch', traceId, spanId, depth],\n queryFn: async () => {\n if (!traceId || !spanId) {\n throw new Error('traceId and spanId are required');\n }\n return client.getBranch({ traceId, spanId, depth });\n },\n // Builds each span's search haystack once per fetch, cached with the query.\n select: selectSearchableSpans,\n enabled: !!traceId && !!spanId,\n // A finished subtree can still gain spans from a resumed run or delayed export.\n staleTime: 0,\n });\n}\n"],"names":[],"mappings":";;;;AAYO,SAAS,SAAA,CAAU;AAAA,EACxB,OAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAuF;AACrF,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,OAAO,QAAA,CAAS;AAAA,IACd,QAAA,EAAU,CAAC,QAAA,EAAU,OAAA,EAAS,QAAQ,KAAK,CAAA;AAAA,IAC3C,SAAS,YAAY;AACnB,MAAA,IAAI,CAAC,OAAA,IAAW,CAAC,MAAA,EAAQ;AACvB,QAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,MACnD;AACA,MAAA,OAAO,OAAO,SAAA,CAAU,EAAE,OAAA,EAAS,MAAA,EAAQ,OAAO,CAAA;AAAA,IACpD,CAAA;AAAA;AAAA,IAEA,MAAA,EAAQ,qBAAA;AAAA,IACR,OAAA,EAAS,CAAC,CAAC,OAAA,IAAW,CAAC,CAAC,MAAA;AAAA;AAAA,IAExB,SAAA,EAAW;AAAA,GACZ,CAAA;AACH;;;;"}
|