@mastra/playground-ui 63.0.0 → 63.1.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/dist/{alert-dialog-DVAC9zdj.js → alert-dialog-Cpx4g1sS.js} +2 -2
- package/dist/{alert-dialog-DVAC9zdj.js.map → alert-dialog-Cpx4g1sS.js.map} +1 -1
- package/dist/{alert-dialog-C-ODvRWT.cjs → alert-dialog-Djojjgjo.cjs} +2 -2
- package/dist/{alert-dialog-C-ODvRWT.cjs.map → alert-dialog-Djojjgjo.cjs.map} +1 -1
- package/dist/{code-block-vvYFcnqm.js → code-block-BzUcNWrb.js} +2 -2
- package/dist/{code-block-vvYFcnqm.js.map → code-block-BzUcNWrb.js.map} +1 -1
- package/dist/{code-block-BuGosknt.cjs → code-block-CKLCdWtP.cjs} +2 -2
- package/dist/{code-block-BuGosknt.cjs.map → code-block-CKLCdWtP.cjs.map} +1 -1
- package/dist/{combobox-fEMKH9nJ.cjs → combobox-CdTP_FZ0.cjs} +9 -2
- package/dist/combobox-CdTP_FZ0.cjs.map +1 -0
- package/dist/{combobox-so2V71F7.js → combobox-CeYDCkXk.js} +9 -2
- package/dist/combobox-CeYDCkXk.js.map +1 -0
- package/dist/{command-B_C36ppQ.cjs → command-CSl9Mfrp.cjs} +3 -3
- package/dist/{command-B_C36ppQ.cjs.map → command-CSl9Mfrp.cjs.map} +1 -1
- package/dist/{command-DMqzDhzs.js → command-DQAGSkdK.js} +3 -3
- package/dist/{command-DMqzDhzs.js.map → command-DQAGSkdK.js.map} +1 -1
- package/dist/components/AlertDialog.cjs.js +1 -1
- package/dist/components/AlertDialog.es.js +1 -1
- package/dist/components/CodeBlock.cjs.js +1 -1
- package/dist/components/CodeBlock.es.js +1 -1
- package/dist/components/Combobox.cjs.js +1 -1
- package/dist/components/Combobox.es.js +1 -1
- package/dist/components/Command.cjs.js +1 -1
- package/dist/components/Command.es.js +1 -1
- package/dist/components/CommandPalette.cjs.js +2 -2
- package/dist/components/CommandPalette.es.js +2 -2
- package/dist/components/Comment.cjs.js +1 -1
- package/dist/components/Comment.es.js +1 -1
- package/dist/components/Composer.cjs.js +2 -2
- package/dist/components/Composer.es.js +2 -2
- package/dist/components/DataCodeSection.cjs.js +1 -1
- package/dist/components/DataCodeSection.es.js +1 -1
- package/dist/components/DataList.cjs.js +17 -15
- package/dist/components/DataList.cjs.js.map +1 -1
- package/dist/components/DataList.es.js +5 -4
- 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/DateTimeRangePicker.cjs.js +1 -1
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/Dialog.cjs.js +2 -2
- package/dist/components/Dialog.es.js +2 -2
- package/dist/components/DropdownMenu.cjs.js +1 -1
- package/dist/components/DropdownMenu.es.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +2 -2
- package/dist/components/EnvironmentVariablesEditor.es.js +2 -2
- package/dist/components/InputGroup.cjs.js +1 -1
- package/dist/components/InputGroup.es.js +1 -1
- package/dist/components/InputNumber.cjs.js +1 -1
- package/dist/components/InputNumber.es.js +1 -1
- package/dist/components/ListSearch.cjs.js +1 -1
- package/dist/components/ListSearch.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +2 -5
- package/dist/components/LogsDataList.cjs.js.map +1 -1
- package/dist/components/LogsDataList.es.js +2 -5
- package/dist/components/LogsDataList.es.js.map +1 -1
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/MetricsCard.cjs.js +1 -1
- package/dist/components/MetricsCard.es.js +1 -1
- package/dist/components/PageLayout.cjs.js +11 -8
- package/dist/components/PageLayout.cjs.js.map +1 -1
- package/dist/components/PageLayout.es.js +11 -8
- package/dist/components/PageLayout.es.js.map +1 -1
- package/dist/components/PropertyFilter.cjs.js +2 -2
- package/dist/components/PropertyFilter.es.js +3 -3
- package/dist/components/SavedViews.cjs.js +1 -1
- package/dist/components/SavedViews.es.js +1 -1
- package/dist/components/ScrollArea.cjs.js +1 -1
- package/dist/components/ScrollArea.es.js +1 -1
- package/dist/components/SearchInput.cjs.js +1 -1
- package/dist/components/SearchInput.es.js +1 -1
- package/dist/components/Sidebar.cjs.js +3 -3
- package/dist/components/Sidebar.es.js +3 -3
- package/dist/components/Tabs.cjs.js +1 -1
- package/dist/components/Tabs.es.js +1 -1
- package/dist/components/ThreadRail.cjs.js +1 -1
- package/dist/components/ThreadRail.es.js +1 -1
- package/dist/components/Workflow.cjs.js +3 -3
- package/dist/components/Workflow.es.js +3 -3
- package/dist/components/ai/activity.cjs.js +1 -1
- package/dist/components/ai/activity.es.js +1 -1
- package/dist/components/ai/plan.cjs.js +1 -1
- package/dist/components/ai/plan.es.js +1 -1
- package/dist/components/ai/task-list.cjs.js +1 -1
- package/dist/components/ai/task-list.es.js +1 -1
- package/dist/components/ai/tool-approval.cjs.js +1 -1
- package/dist/components/ai/tool-approval.es.js +1 -1
- package/dist/components/ai/tool-call.cjs.js +2 -2
- package/dist/components/ai/tool-call.es.js +2 -2
- package/dist/{composer-CxmOOUX8.js → composer-B0i1WZgt.js} +2 -2
- package/dist/{composer-CxmOOUX8.js.map → composer-B0i1WZgt.js.map} +1 -1
- package/dist/{composer-Cg5bXN1r.cjs → composer-DJsfHivH.cjs} +2 -2
- package/dist/{composer-Cg5bXN1r.cjs.map → composer-DJsfHivH.cjs.map} +1 -1
- package/dist/{data-code-section-Bs8sHDux.cjs → data-code-section-BB2RWius.cjs} +3 -3
- package/dist/{data-code-section-Bs8sHDux.cjs.map → data-code-section-BB2RWius.cjs.map} +1 -1
- package/dist/{data-code-section-CqdjmClK.js → data-code-section-DsU-ubVW.js} +3 -3
- package/dist/{data-code-section-CqdjmClK.js.map → data-code-section-DsU-ubVW.js.map} +1 -1
- package/dist/data-list-CaifGmFh.cjs +142 -0
- package/dist/data-list-CaifGmFh.cjs.map +1 -0
- package/dist/data-list-kilUFo3I.js +138 -0
- package/dist/data-list-kilUFo3I.js.map +1 -0
- package/dist/{data-list-skeleton-BNsWWamC.js → data-list-skeleton-C_zFfUy5.js} +2 -2
- package/dist/{data-list-skeleton-BNsWWamC.js.map → data-list-skeleton-C_zFfUy5.js.map} +1 -1
- package/dist/{data-list-skeleton-BGJD4qMF.cjs → data-list-skeleton-Cgo1Urkr.cjs} +6 -6
- package/dist/{data-list-skeleton-BGJD4qMF.cjs.map → data-list-skeleton-Cgo1Urkr.cjs.map} +1 -1
- package/dist/data-list-spacer-D9J0nV_S.cjs +218 -0
- package/dist/data-list-spacer-D9J0nV_S.cjs.map +1 -0
- package/dist/data-list-spacer-DGUCD6oy.js +209 -0
- package/dist/data-list-spacer-DGUCD6oy.js.map +1 -0
- package/dist/{data-list-BLfHObw8.cjs → data-list-top-DYnH-IhJ.cjs} +14 -340
- package/dist/data-list-top-DYnH-IhJ.cjs.map +1 -0
- package/dist/{data-list-B2ArWwsJ.js → data-list-top-Dk9Wz_w5.js} +6 -333
- package/dist/data-list-top-Dk9Wz_w5.js.map +1 -0
- package/dist/{data-panel-Wjgbl6zx.cjs → data-panel-CtFwwsPs.cjs} +2 -2
- package/dist/{data-panel-Wjgbl6zx.cjs.map → data-panel-CtFwwsPs.cjs.map} +1 -1
- package/dist/{data-panel-BdCw3F_h.js → data-panel-CwIdwpov.js} +2 -2
- package/dist/{data-panel-BdCw3F_h.js.map → data-panel-CwIdwpov.js.map} +1 -1
- package/dist/{date-time-range-picker-SU1Q1h1h.js → date-time-range-picker-BT9qan60.js} +2 -2
- package/dist/{date-time-range-picker-SU1Q1h1h.js.map → date-time-range-picker-BT9qan60.js.map} +1 -1
- package/dist/{date-time-range-picker-ByNvjYuV.cjs → date-time-range-picker-DQa5XLST.cjs} +2 -2
- package/dist/{date-time-range-picker-ByNvjYuV.cjs.map → date-time-range-picker-DQa5XLST.cjs.map} +1 -1
- package/dist/{dialog-B5nLi0ER.cjs → dialog-BAlSUqcF.cjs} +2 -2
- package/dist/{dialog-B5nLi0ER.cjs.map → dialog-BAlSUqcF.cjs.map} +1 -1
- package/dist/{dialog-Jz2ZfO-z.js → dialog-CboDo8Pj.js} +2 -2
- package/dist/{dialog-Jz2ZfO-z.js.map → dialog-CboDo8Pj.js.map} +1 -1
- package/dist/{dialog-action-DdkbsKfP.cjs → dialog-action-DWE9XalB.cjs} +2 -2
- package/dist/{dialog-action-DdkbsKfP.cjs.map → dialog-action-DWE9XalB.cjs.map} +1 -1
- package/dist/{dialog-action-BxXhAz-P.js → dialog-action-DpctEQ9l.js} +2 -2
- package/dist/{dialog-action-BxXhAz-P.js.map → dialog-action-DpctEQ9l.js.map} +1 -1
- package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +1 -1
- package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +1 -1
- package/dist/domains/chat/attachments/composer-attachment-list.cjs.js +2 -2
- package/dist/domains/chat/attachments/composer-attachment-list.es.js +2 -2
- 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/messages/dataset-save-action.cjs.js +2 -2
- package/dist/domains/chat/messages/dataset-save-action.es.js +2 -2
- package/dist/domains/chat/messages/message-row.cjs.js +1 -1
- package/dist/domains/chat/messages/message-row.es.js +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 +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
- package/dist/domains/chat/messages/skill-message.cjs.js +2 -2
- package/dist/domains/chat/messages/skill-message.es.js +2 -2
- package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/file-tree-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-details.es.js +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/tool-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/tool-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +1 -2
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.es.js +1 -2
- package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/submit-plan-tool.cjs.js +1 -1
- package/dist/domains/chat/tools/submit-plan-tool.es.js +1 -1
- package/dist/domains/logs/components/log-data-panel.cjs.js +1 -1
- package/dist/domains/logs/components/log-data-panel.es.js +1 -1
- package/dist/domains/logs/components/logs-list-view.cjs.js +2 -3
- package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
- package/dist/domains/logs/components/logs-list-view.es.js +2 -3
- package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
- package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
- package/dist/domains/metrics/components/agent-runs-card.cjs.js +1 -1
- package/dist/domains/metrics/components/agent-runs-card.es.js +1 -1
- package/dist/domains/metrics/components/chart-area.cjs.js +1 -1
- package/dist/domains/metrics/components/chart-area.es.js +1 -1
- package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
- package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
- package/dist/domains/metrics/components/chart-card.cjs.js +1 -1
- package/dist/domains/metrics/components/chart-card.es.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.cjs.js +5 -44
- package/dist/domains/metrics/components/date-range-selector.cjs.js.map +1 -1
- package/dist/domains/metrics/components/date-range-selector.es.js +3 -42
- package/dist/domains/metrics/components/date-range-selector.es.js.map +1 -1
- package/dist/domains/metrics/components/failure-rate-card.cjs.js +1 -1
- package/dist/domains/metrics/components/failure-rate-card.es.js +1 -1
- package/dist/domains/metrics/components/latency-card.cjs.js +1 -1
- package/dist/domains/metrics/components/latency-card.es.js +1 -1
- package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +26 -0
- package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js.map +1 -0
- package/dist/domains/metrics/components/metrics-time-range-chip.d.ts +2 -0
- package/dist/domains/metrics/components/metrics-time-range-chip.es.js +22 -0
- package/dist/domains/metrics/components/metrics-time-range-chip.es.js.map +1 -0
- package/dist/domains/metrics/components/scores-card.cjs.js +1 -1
- package/dist/domains/metrics/components/scores-card.es.js +1 -1
- package/dist/domains/metrics/components/token-usage-card.cjs.js +1 -1
- package/dist/domains/metrics/components/token-usage-card.es.js +1 -1
- package/dist/domains/metrics/components/trace-volume-card.cjs.js +1 -1
- package/dist/domains/metrics/components/trace-volume-card.es.js +1 -1
- package/dist/domains/metrics/components/usage-card.cjs.js +1 -1
- package/dist/domains/metrics/components/usage-card.es.js +1 -1
- package/dist/domains/metrics/components.cjs.js +2 -0
- package/dist/domains/metrics/components.cjs.js.map +1 -1
- package/dist/domains/metrics/components.es.js +1 -0
- package/dist/domains/metrics/components.es.js.map +1 -1
- package/dist/domains/metrics/hooks.cjs.js +4 -0
- package/dist/domains/metrics/hooks.cjs.js.map +1 -1
- package/dist/domains/metrics/hooks.es.js +1 -1
- package/dist/domains/metrics/metrics-date-presets.cjs.js +49 -0
- package/dist/domains/metrics/metrics-date-presets.cjs.js.map +1 -0
- package/dist/domains/metrics/metrics-date-presets.d.ts +2 -0
- package/dist/domains/metrics/metrics-date-presets.es.js +43 -0
- package/dist/domains/metrics/metrics-date-presets.es.js.map +1 -0
- package/dist/domains/metrics/metrics-filters.cjs.js +94 -0
- package/dist/domains/metrics/metrics-filters.cjs.js.map +1 -1
- package/dist/domains/metrics/metrics-filters.es.js +91 -1
- package/dist/domains/metrics/metrics-filters.es.js.map +1 -1
- package/dist/domains/metrics.cjs.js +6 -0
- 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/scores/components/score-data-panel.cjs.js +1 -1
- package/dist/domains/scores/components/score-data-panel.es.js +1 -1
- package/dist/domains/scores/components/span-scoring.cjs.js +3 -3
- package/dist/domains/scores/components/span-scoring.es.js +3 -3
- package/dist/domains/scores/components/trace-scores-tab.cjs.js +1 -2
- package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
- package/dist/domains/scores/components/trace-scores-tab.es.js +1 -2
- package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
- package/dist/domains/traces/components/feedback-thread.cjs.js +3 -3
- package/dist/domains/traces/components/feedback-thread.es.js +3 -3
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +2 -2
- package/dist/domains/traces/components/span-data-panel-view.es.js +2 -2
- 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 +2 -2
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
- 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 +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +1 -1
- package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/span-summary-description.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/trace-columns-menu.cjs.js +4 -4
- package/dist/domains/traces/components/trace-columns-menu.es.js +4 -4
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +4 -4
- package/dist/domains/traces/components/trace-data-panel-view.es.js +4 -4
- package/dist/domains/traces/components/trace-data-panel.cjs.js +1 -3
- package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel.es.js +1 -3
- package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
- 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-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
- package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
- package/dist/domains/traces/components/trace-thread-panel.es.js +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-mode-toggle.cjs.js +1 -1
- package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
- package/dist/domains/traces/components/traces-list-view.cjs.js +6 -5
- package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-list-view.es.js +5 -4
- package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +1 -4
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js +1 -4
- package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
- package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
- package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
- package/dist/domains/workflows/components/workflow-information.cjs.js +1 -1
- package/dist/domains/workflows/components/workflow-information.es.js +1 -1
- package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
- package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
- package/dist/domains/workflows/runs/workflow-run-list.cjs.js +2 -2
- package/dist/domains/workflows/runs/workflow-run-list.es.js +2 -2
- package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
- package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +1 -0
- package/dist/domains/workflows/workflow/workflow-input-data.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-input-data.es.js +1 -0
- package/dist/domains/workflows/workflow/workflow-input-data.es.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-run-data.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-trigger.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger.es.js +1 -1
- package/dist/domains/workspace/components/workspace-active-file.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-active-file.es.js +1 -1
- package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +5 -5
- package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +5 -5
- package/dist/domains/workspace/components/workspace-create-directory.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-create-directory.es.js +1 -1
- package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +2 -2
- package/dist/domains/workspace/components/workspace-markdown-preview.es.js +2 -2
- package/dist/domains/workspace/components/workspace-parts.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-parts.es.js +1 -1
- package/dist/domains/workspace/components/workspace-tree.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-tree.es.js +1 -1
- package/dist/{dropdown-menu-D8GR_NhL.js → dropdown-menu-C6VtAiYJ.js} +43 -4
- package/dist/dropdown-menu-C6VtAiYJ.js.map +1 -0
- package/dist/{dropdown-menu-Bg96BCnK.cjs → dropdown-menu-dHvHFLji.cjs} +42 -3
- package/dist/dropdown-menu-dHvHFLji.cjs.map +1 -0
- 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 +1 -3
- package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
- package/dist/ee/signals/components/entity-index-list.es.js +1 -3
- package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +2 -4
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +2 -4
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
- package/dist/ee/signals/sankey-signals.cjs.js +1 -1
- package/dist/ee/signals/sankey-signals.es.js +1 -1
- 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/topics/components/topic-trace-summary-list.cjs.js +2 -2
- package/dist/ee/topics/components/topic-trace-summary-list.es.js +2 -2
- package/dist/{input-group-DQuyC9Pz.cjs → input-group-Bj2RbkNg.cjs} +20 -3
- package/dist/input-group-Bj2RbkNg.cjs.map +1 -0
- package/dist/{input-group-CIIwoggO.js → input-group-CrumkDCF.js} +20 -3
- package/dist/input-group-CrumkDCF.js.map +1 -0
- package/dist/layout/tabbed-container.cjs.js +4 -4
- package/dist/layout/tabbed-container.es.js +4 -4
- package/dist/{list-search-Cwp-OPvC.js → list-search-C7ro2_qL.js} +2 -2
- package/dist/{list-search-Cwp-OPvC.js.map → list-search-C7ro2_qL.js.map} +1 -1
- package/dist/{list-search-C5j3HYkb.cjs → list-search-Y3z6P6IO.cjs} +2 -2
- package/dist/{list-search-C5j3HYkb.cjs.map → list-search-Y3z6P6IO.cjs.map} +1 -1
- package/dist/{logs-data-list-B-gmgU74.js → logs-data-list-1KFnVsFz.js} +3 -2
- package/dist/{logs-data-list-B-gmgU74.js.map → logs-data-list-1KFnVsFz.js.map} +1 -1
- package/dist/{logs-data-list-CaXnNnC5.cjs → logs-data-list-BafttkM2.cjs} +22 -21
- package/dist/{logs-data-list-CaXnNnC5.cjs.map → logs-data-list-BafttkM2.cjs.map} +1 -1
- package/dist/{markdown-renderer-BXTNiZbz.cjs → markdown-renderer-BRu3RpQD.cjs} +3 -3
- package/dist/{markdown-renderer-BXTNiZbz.cjs.map → markdown-renderer-BRu3RpQD.cjs.map} +1 -1
- package/dist/{markdown-renderer-Ct-q_KTF.js → markdown-renderer-WesDzhMr.js} +3 -3
- package/dist/{markdown-renderer-Ct-q_KTF.js.map → markdown-renderer-WesDzhMr.js.map} +1 -1
- package/dist/{metrics-card-C33VsuXf.js → metrics-card-BI5okAsj.js} +2 -2
- package/dist/{metrics-card-C33VsuXf.js.map → metrics-card-BI5okAsj.js.map} +1 -1
- package/dist/{metrics-card-CxOVpP1t.cjs → metrics-card-CcesVPLN.cjs} +2 -2
- package/dist/{metrics-card-CxOVpP1t.cjs.map → metrics-card-CcesVPLN.cjs.map} +1 -1
- package/dist/{plan-TXWANP1R.js → plan-CBiLa54G.js} +2 -2
- package/dist/{plan-TXWANP1R.js.map → plan-CBiLa54G.js.map} +1 -1
- package/dist/{plan-CL-lbDuy.cjs → plan-ColU7p3H.cjs} +2 -2
- package/dist/{plan-CL-lbDuy.cjs.map → plan-ColU7p3H.cjs.map} +1 -1
- package/dist/primitives/menu-item.cjs.js +2 -0
- package/dist/primitives/menu-item.cjs.js.map +1 -1
- package/dist/primitives/menu-item.es.js +2 -1
- package/dist/primitives/menu-item.es.js.map +1 -1
- package/dist/{property-filter-applied-Ru3OQoGo.js → property-filter-applied-BCeGn2zQ.js} +2 -2
- package/dist/{property-filter-applied-Ru3OQoGo.js.map → property-filter-applied-BCeGn2zQ.js.map} +1 -1
- package/dist/{property-filter-applied-BBvaTC4B.cjs → property-filter-applied-CpelyBH9.cjs} +2 -2
- package/dist/{property-filter-applied-BBvaTC4B.cjs.map → property-filter-applied-CpelyBH9.cjs.map} +1 -1
- package/dist/{reasoning-activity-CFEaSv4J.cjs → reasoning-activity-B8bR8ib_.cjs} +2 -2
- package/dist/{reasoning-activity-CFEaSv4J.cjs.map → reasoning-activity-B8bR8ib_.cjs.map} +1 -1
- package/dist/{reasoning-activity-CHlEe011.js → reasoning-activity-DLrXgE9k.js} +2 -2
- package/dist/{reasoning-activity-CHlEe011.js.map → reasoning-activity-DLrXgE9k.js.map} +1 -1
- package/dist/{scroll-area-CVgjRzTS.cjs → scroll-area-BakRKj2k.cjs} +3 -3
- package/dist/scroll-area-BakRKj2k.cjs.map +1 -0
- package/dist/{scroll-area-BywIlj3F.js → scroll-area-D6gKFavi.js} +3 -3
- package/dist/scroll-area-D6gKFavi.js.map +1 -0
- package/dist/{search-input-RybUdqzg.js → search-input-BEAKPGH8.js} +2 -2
- package/dist/{search-input-RybUdqzg.js.map → search-input-BEAKPGH8.js.map} +1 -1
- package/dist/{search-input-2DhcUIvn.cjs → search-input-DdRhkYqy.cjs} +2 -2
- package/dist/{search-input-2DhcUIvn.cjs.map → search-input-DdRhkYqy.cjs.map} +1 -1
- package/dist/{span-payload-primitives-DIxmotnO.cjs → span-payload-primitives-BymKsUAo.cjs} +2 -2
- package/dist/{span-payload-primitives-DIxmotnO.cjs.map → span-payload-primitives-BymKsUAo.cjs.map} +1 -1
- package/dist/{span-payload-primitives-dTs5UrjA.js → span-payload-primitives-DBNNkmHo.js} +2 -2
- package/dist/{span-payload-primitives-dTs5UrjA.js.map → span-payload-primitives-DBNNkmHo.js.map} +1 -1
- package/dist/src/domains/metrics/components/date-range-selector.d.ts +1 -0
- package/dist/src/domains/metrics/components/index.d.ts +1 -0
- package/dist/src/domains/metrics/components/metrics-time-range-chip.d.ts +5 -0
- package/dist/src/domains/metrics/hooks/index.d.ts +1 -1
- package/dist/src/domains/metrics/metrics-date-presets.d.ts +6 -0
- package/dist/src/domains/metrics/metrics-filters.d.ts +23 -1
- package/dist/src/ds/components/Combobox/combobox.d.ts +2 -0
- package/dist/src/ds/components/DropdownMenu/dropdown-menu.d.ts +19 -6
- package/dist/src/ds/components/InputGroup/input-group.d.ts +6 -2
- package/dist/src/ds/components/PageLayout/page-layout.d.ts +8 -1
- package/dist/src/ds/components/ScrollArea/scroll-area.d.ts +2 -1
- package/dist/src/ds/primitives/menu-item.d.ts +1 -0
- package/dist/style.css +16 -4
- package/dist/{tabs-list-DY_hziv7.js → tabs-list-CDep3C2w.js} +2 -2
- package/dist/{tabs-list-DY_hziv7.js.map → tabs-list-CDep3C2w.js.map} +1 -1
- package/dist/{tabs-list-xikY_dug.cjs → tabs-list-DwQsMVKI.cjs} +2 -2
- package/dist/{tabs-list-xikY_dug.cjs.map → tabs-list-DwQsMVKI.cjs.map} +1 -1
- package/dist/{tool-approval-TB8r2U_c.js → tool-approval-BK2j7aj_.js} +2 -2
- package/dist/{tool-approval-TB8r2U_c.js.map → tool-approval-BK2j7aj_.js.map} +1 -1
- package/dist/{tool-approval-S6ml_xyU.cjs → tool-approval-Bza_sgxa.cjs} +2 -2
- package/dist/{tool-approval-S6ml_xyU.cjs.map → tool-approval-Bza_sgxa.cjs.map} +1 -1
- package/dist/{tool-call-arguments-CCkJ1btR.js → tool-call-arguments-BLCAiFYg.js} +2 -2
- package/dist/{tool-call-arguments-CCkJ1btR.js.map → tool-call-arguments-BLCAiFYg.js.map} +1 -1
- package/dist/{tool-call-arguments-DyukJmhY.cjs → tool-call-arguments-CK3kQ_FX.cjs} +2 -2
- package/dist/{tool-call-arguments-DyukJmhY.cjs.map → tool-call-arguments-CK3kQ_FX.cjs.map} +1 -1
- package/dist/{tool-call-group-CZBqGjMh.js → tool-call-group-C_zxf6OA.js} +2 -2
- package/dist/{tool-call-group-CZBqGjMh.js.map → tool-call-group-C_zxf6OA.js.map} +1 -1
- package/dist/{tool-call-group-CFpdexuw.cjs → tool-call-group-Cdgv7red.cjs} +2 -2
- package/dist/{tool-call-group-CFpdexuw.cjs.map → tool-call-group-Cdgv7red.cjs.map} +1 -1
- package/dist/{traces-data-list-1X6UBM6Y.js → traces-data-list-CDvg5G_2.js} +4 -2
- package/dist/{traces-data-list-1X6UBM6Y.js.map → traces-data-list-CDvg5G_2.js.map} +1 -1
- package/dist/{traces-data-list-BXSXW3E6.cjs → traces-data-list-Dy-9AIr2.cjs} +19 -17
- package/dist/{traces-data-list-BXSXW3E6.cjs.map → traces-data-list-Dy-9AIr2.cjs.map} +1 -1
- package/dist/{workflow-data-edge-view-De0xCrVu.js → workflow-data-edge-view-BWyUa9am.js} +2 -2
- package/dist/{workflow-data-edge-view-De0xCrVu.js.map → workflow-data-edge-view-BWyUa9am.js.map} +1 -1
- package/dist/{workflow-data-edge-view-kmB6j-ui.cjs → workflow-data-edge-view-BpnN4W_5.cjs} +2 -2
- package/dist/{workflow-data-edge-view-kmB6j-ui.cjs.map → workflow-data-edge-view-BpnN4W_5.cjs.map} +1 -1
- package/dist/{workflow-edge-data-button-av1zCMfP.cjs → workflow-edge-data-button-Du5ZDm72.cjs} +2 -2
- package/dist/{workflow-edge-data-button-av1zCMfP.cjs.map → workflow-edge-data-button-Du5ZDm72.cjs.map} +1 -1
- package/dist/{workflow-edge-data-button-CXbj67U9.js → workflow-edge-data-button-DvGFB2L6.js} +2 -2
- package/dist/{workflow-edge-data-button-CXbj67U9.js.map → workflow-edge-data-button-DvGFB2L6.js.map} +1 -1
- package/dist/{workflow-step-action-BsBZk7j6.cjs → workflow-step-action-DNrU8on1.cjs} +2 -2
- package/dist/{workflow-step-action-BsBZk7j6.cjs.map → workflow-step-action-DNrU8on1.cjs.map} +1 -1
- package/dist/{workflow-step-action-AG05Ly8P.js → workflow-step-action-ac1gNDdn.js} +2 -2
- package/dist/{workflow-step-action-AG05Ly8P.js.map → workflow-step-action-ac1gNDdn.js.map} +1 -1
- package/package.json +7 -7
- package/dist/combobox-fEMKH9nJ.cjs.map +0 -1
- package/dist/combobox-so2V71F7.js.map +0 -1
- package/dist/data-list-B2ArWwsJ.js.map +0 -1
- package/dist/data-list-BLfHObw8.cjs.map +0 -1
- package/dist/dropdown-menu-Bg96BCnK.cjs.map +0 -1
- package/dist/dropdown-menu-D8GR_NhL.js.map +0 -1
- package/dist/input-group-CIIwoggO.js.map +0 -1
- package/dist/input-group-DQuyC9Pz.cjs.map +0 -1
- package/dist/scroll-area-BywIlj3F.js.map +0 -1
- package/dist/scroll-area-CVgjRzTS.cjs.map +0 -1
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
|
|
5
|
+
const lucideReact = require('lucide-react');
|
|
6
|
+
const domains_traces_traceQueryFilters = require('../../trace-filters-Bh4dVNPX.cjs');
|
|
7
|
+
|
|
5
8
|
const METRICS_ROOT_ENTITY_TYPE_OPTIONS = [
|
|
6
9
|
{ label: "Agent", entityType: "agent" },
|
|
7
10
|
{ label: "Workflow", entityType: "workflow_run" },
|
|
@@ -132,6 +135,93 @@ function createMetricsPropertyFilterFields({
|
|
|
132
135
|
const text = fields.filter((f) => f.kind === "text").sort(byLabel);
|
|
133
136
|
return [...pickMulti, ...text];
|
|
134
137
|
}
|
|
138
|
+
const METRICS_TAGS_OPERATOR_ID = "hasAll";
|
|
139
|
+
const METRICS_FILTER_BAR_OPERATORS = [
|
|
140
|
+
{ id: "is", label: "is" },
|
|
141
|
+
{ id: METRICS_TAGS_OPERATOR_ID, label: "has all of", arity: "many" }
|
|
142
|
+
];
|
|
143
|
+
const METRICS_FILTER_BAR_LABELS = {
|
|
144
|
+
rootEntityType: "Primitive type",
|
|
145
|
+
entityName: "Primitive name",
|
|
146
|
+
tags: "Tags",
|
|
147
|
+
serviceName: "Service Name",
|
|
148
|
+
environment: "Environment",
|
|
149
|
+
threadId: "Thread ID",
|
|
150
|
+
resourceId: "Resource ID",
|
|
151
|
+
userId: "User ID",
|
|
152
|
+
organizationId: "Organization ID",
|
|
153
|
+
runId: "Run ID",
|
|
154
|
+
sessionId: "Session ID",
|
|
155
|
+
requestId: "Request ID",
|
|
156
|
+
experimentId: "Experiment ID",
|
|
157
|
+
provider: "Provider",
|
|
158
|
+
model: "Model"
|
|
159
|
+
};
|
|
160
|
+
const METRICS_FILTER_BAR_ICONS = {
|
|
161
|
+
provider: lucideReact.CloudIcon,
|
|
162
|
+
model: lucideReact.CpuIcon
|
|
163
|
+
};
|
|
164
|
+
const METRICS_FILTER_BAR_TEXT_FIELD_IDS = [
|
|
165
|
+
"threadId",
|
|
166
|
+
"resourceId",
|
|
167
|
+
"userId",
|
|
168
|
+
"organizationId",
|
|
169
|
+
"runId",
|
|
170
|
+
"sessionId",
|
|
171
|
+
"requestId",
|
|
172
|
+
"experimentId"
|
|
173
|
+
];
|
|
174
|
+
const metricsFieldBase = (id) => ({
|
|
175
|
+
id,
|
|
176
|
+
label: METRICS_FILTER_BAR_LABELS[id],
|
|
177
|
+
icon: METRICS_FILTER_BAR_ICONS[id] ?? domains_traces_traceQueryFilters.traceFilterFieldIcon(id),
|
|
178
|
+
color: domains_traces_traceQueryFilters.traceFilterFieldColor()
|
|
179
|
+
});
|
|
180
|
+
const byFieldLabel = (a, b) => a.label.localeCompare(b.label);
|
|
181
|
+
function createMetricsFilterBarFields({
|
|
182
|
+
availableTags,
|
|
183
|
+
availableEntityNames,
|
|
184
|
+
availableServiceNames,
|
|
185
|
+
availableEnvironments
|
|
186
|
+
}) {
|
|
187
|
+
const pick = (id, suggestions) => ({
|
|
188
|
+
...metricsFieldBase(id),
|
|
189
|
+
operators: ["is"],
|
|
190
|
+
strict: true,
|
|
191
|
+
suggestions
|
|
192
|
+
});
|
|
193
|
+
const text = (id) => ({ ...metricsFieldBase(id), operators: ["is"] });
|
|
194
|
+
const options = (values) => values.map((value) => ({ value }));
|
|
195
|
+
const pickFields = [
|
|
196
|
+
pick(
|
|
197
|
+
"rootEntityType",
|
|
198
|
+
METRICS_ROOT_ENTITY_TYPE_OPTIONS.map((o) => ({ value: o.entityType, label: o.label }))
|
|
199
|
+
),
|
|
200
|
+
pick("entityName", options(availableEntityNames)),
|
|
201
|
+
{ ...pick("tags", options(availableTags)), operators: [METRICS_TAGS_OPERATOR_ID] },
|
|
202
|
+
pick("serviceName", options(availableServiceNames)),
|
|
203
|
+
pick("environment", options(availableEnvironments))
|
|
204
|
+
];
|
|
205
|
+
const textFields = METRICS_FILTER_BAR_TEXT_FIELD_IDS.map(text);
|
|
206
|
+
const urlOnlyFields = ["provider", "model"].map((id) => ({ ...text(id), hidden: true }));
|
|
207
|
+
return [...pickFields.toSorted(byFieldLabel), ...textFields.toSorted(byFieldLabel), ...urlOnlyFields];
|
|
208
|
+
}
|
|
209
|
+
function metricsTokensToFilterBarItems(tokens) {
|
|
210
|
+
return tokens.map((token) => {
|
|
211
|
+
if (token.fieldId === "tags") {
|
|
212
|
+
const value2 = [token.value].flat().filter((tag) => tag !== "");
|
|
213
|
+
return { id: token.fieldId, fieldId: token.fieldId, operatorId: METRICS_TAGS_OPERATOR_ID, value: value2 };
|
|
214
|
+
}
|
|
215
|
+
const value = Array.isArray(token.value) ? token.value[0] ?? "" : token.value;
|
|
216
|
+
return { id: token.fieldId, fieldId: token.fieldId, operatorId: "is", value: isNeutralValue(value) ? "" : value };
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
function filterBarItemsToMetricsTokens(items) {
|
|
220
|
+
return items.map((item) => ({
|
|
221
|
+
fieldId: item.fieldId,
|
|
222
|
+
value: Array.isArray(item.value) ? item.value.map(String) : String(item.value)
|
|
223
|
+
}));
|
|
224
|
+
}
|
|
135
225
|
function getMetricsPropertyFilterTokens(searchParams) {
|
|
136
226
|
const tokens = [];
|
|
137
227
|
const paramToFieldId = /* @__PURE__ */ new Map([[METRICS_ROOT_ENTITY_TYPE_PARAM, "rootEntityType"]]);
|
|
@@ -234,6 +324,7 @@ function buildMetricsDimensionalFilter(tokens) {
|
|
|
234
324
|
return result;
|
|
235
325
|
}
|
|
236
326
|
|
|
327
|
+
exports.METRICS_FILTER_BAR_OPERATORS = METRICS_FILTER_BAR_OPERATORS;
|
|
237
328
|
exports.METRICS_PROPERTY_FILTER_FIELD_IDS = METRICS_PROPERTY_FILTER_FIELD_IDS;
|
|
238
329
|
exports.METRICS_PROPERTY_FILTER_PARAM_BY_FIELD = METRICS_PROPERTY_FILTER_PARAM_BY_FIELD;
|
|
239
330
|
exports.METRICS_ROOT_ENTITY_TYPE_OPTIONS = METRICS_ROOT_ENTITY_TYPE_OPTIONS;
|
|
@@ -242,10 +333,13 @@ exports.METRICS_SYNTHETIC_FILTER_FIELD_IDS = METRICS_SYNTHETIC_FILTER_FIELD_IDS;
|
|
|
242
333
|
exports.applyMetricsPropertyFilterTokens = applyMetricsPropertyFilterTokens;
|
|
243
334
|
exports.buildMetricsDimensionalFilter = buildMetricsDimensionalFilter;
|
|
244
335
|
exports.clearSavedMetricsFilters = clearSavedMetricsFilters;
|
|
336
|
+
exports.createMetricsFilterBarFields = createMetricsFilterBarFields;
|
|
245
337
|
exports.createMetricsPropertyFilterFields = createMetricsPropertyFilterFields;
|
|
338
|
+
exports.filterBarItemsToMetricsTokens = filterBarItemsToMetricsTokens;
|
|
246
339
|
exports.getMetricsPropertyFilterTokens = getMetricsPropertyFilterTokens;
|
|
247
340
|
exports.getPreservedMetricsFilterParams = getPreservedMetricsFilterParams;
|
|
248
341
|
exports.hasAnyMetricsFilterParams = hasAnyMetricsFilterParams;
|
|
249
342
|
exports.loadMetricsFiltersFromStorage = loadMetricsFiltersFromStorage;
|
|
343
|
+
exports.metricsTokensToFilterBarItems = metricsTokensToFilterBarItems;
|
|
250
344
|
exports.saveMetricsFiltersToStorage = saveMetricsFiltersToStorage;
|
|
251
345
|
//# sourceMappingURL=metrics-filters.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics-filters.cjs.js","sources":["../../../src/domains/metrics/metrics-filters.ts"],"sourcesContent":["import type { EntityType } from '@mastra/core/observability';\nimport type { MetricsDimensionalFilter } from '@mastra/react/hooks/metrics';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\ntype EntityTypeValue = `${EntityType}`;\n\n/** Primitive type options — matches the traces filter vocabulary. */\nexport const METRICS_ROOT_ENTITY_TYPE_OPTIONS = [\n { label: 'Agent', entityType: 'agent' },\n { label: 'Workflow', entityType: 'workflow_run' },\n { label: 'Scorer', entityType: 'scorer' },\n { label: 'Ingest', entityType: 'rag_ingestion' },\n] as const satisfies readonly { label: string; entityType: EntityTypeValue }[];\n\n/** Field IDs that live in dedicated URL params (not the generic `filterX` set). */\nexport const METRICS_SYNTHETIC_FILTER_FIELD_IDS = ['rootEntityType'] as const;\n\nexport const METRICS_ROOT_ENTITY_TYPE_PARAM = 'rootEntityType';\n\n/** URL param name for each generic property filter field. Mirrors traces for\n * cross-page URL consistency (user can copy a trace's filter URL and paste\n * equivalent dimensions into metrics). */\nexport const METRICS_PROPERTY_FILTER_PARAM_BY_FIELD = {\n tags: 'filterTags',\n entityName: 'filterEntityName',\n runId: 'filterRunId',\n threadId: 'filterThreadId',\n sessionId: 'filterSessionId',\n requestId: 'filterRequestId',\n resourceId: 'filterResourceId',\n userId: 'filterUserId',\n organizationId: 'filterOrganizationId',\n serviceName: 'filterServiceName',\n environment: 'filterEnvironment',\n experimentId: 'filterExperimentId',\n provider: 'filterProvider',\n model: 'filterModel',\n} as const;\n\nexport type MetricsPropertyFilterFieldId = keyof typeof METRICS_PROPERTY_FILTER_PARAM_BY_FIELD;\n\nexport const METRICS_PROPERTY_FILTER_FIELD_IDS = Object.keys(\n METRICS_PROPERTY_FILTER_PARAM_BY_FIELD,\n) as Array<MetricsPropertyFilterFieldId>;\n\nconst METRICS_FILTERS_STORAGE_KEY = 'mastra:metrics:saved-filters';\n\n/** Save the current metrics filter URL params so the metrics page can restore\n * them on next visit (same pattern as traces/logs). */\nexport function saveMetricsFiltersToStorage(params: URLSearchParams): void {\n const serialized = getPreservedMetricsFilterParams(params);\n try {\n localStorage.setItem(METRICS_FILTERS_STORAGE_KEY, serialized.toString());\n } catch {\n // localStorage may be unavailable — silently skip.\n }\n}\n\nexport function clearSavedMetricsFilters(): void {\n try {\n localStorage.removeItem(METRICS_FILTERS_STORAGE_KEY);\n } catch {\n // ignore\n }\n}\n\nexport function loadMetricsFiltersFromStorage(): URLSearchParams | null {\n try {\n const raw = localStorage.getItem(METRICS_FILTERS_STORAGE_KEY);\n if (!raw) return null;\n const parsed = new URLSearchParams(raw);\n return parsed.toString() ? parsed : null;\n } catch {\n return null;\n }\n}\n\nexport function hasAnyMetricsFilterParams(params: URLSearchParams): boolean {\n if (params.has(METRICS_ROOT_ENTITY_TYPE_PARAM)) return true;\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n if (params.has(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId])) return true;\n }\n return false;\n}\n\n/** Build the PropertyFilterField list shown in the metrics filter popover.\n *\n * The field order is curated for OLAP efficiency: columnar/LowCardinality\n * dimensions first, then bloom_filter-indexed high-cardinality IDs as\n * free-text. Fields that are expensive to filter without an index are\n * intentionally omitted from this dashboard surface. */\nexport function createMetricsPropertyFilterFields({\n availableTags,\n availableEntityNames,\n availableServiceNames,\n availableEnvironments,\n loading,\n}: {\n availableTags: string[];\n availableEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n loading?: {\n tags?: boolean;\n entityNames?: boolean;\n serviceNames?: boolean;\n environments?: boolean;\n };\n}): PropertyFilterField[] {\n const fields: PropertyFilterField[] = [\n {\n id: 'rootEntityType',\n label: 'Primitive type',\n kind: 'pick-multi',\n searchable: false,\n options: METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ label: o.label, value: o.entityType })),\n placeholder: 'Choose entity type',\n emptyText: 'No entity types.',\n },\n {\n id: 'entityName',\n label: 'Primitive name',\n kind: 'pick-multi',\n options: availableEntityNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose entity names',\n emptyText: 'No entity names found.',\n isLoading: loading?.entityNames,\n },\n {\n id: 'tags',\n label: 'Tags',\n kind: 'pick-multi',\n multi: true,\n options: availableTags.map(tag => ({ label: tag, value: tag })),\n placeholder: 'Choose tags',\n emptyText: 'No tags found.',\n isLoading: loading?.tags,\n },\n {\n id: 'serviceName',\n label: 'Service Name',\n kind: 'pick-multi',\n options: availableServiceNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose service names',\n emptyText: 'No service names found.',\n isLoading: loading?.serviceNames,\n },\n {\n id: 'environment',\n label: 'Environment',\n kind: 'pick-multi',\n options: availableEnvironments.map(env => ({ label: env, value: env })),\n placeholder: 'Choose environments',\n emptyText: 'No environments found.',\n isLoading: loading?.environments,\n },\n // Provider / model are filterable by URL (filterProvider / filterModel) but\n // are omitted from the popover until we expose a discovery endpoint.\n // High-cardinality IDs — free-text. Backed by bloom_filter skip indexes on\n // ClickHouse, narrow timestamp range pruning on DuckDB.\n { id: 'threadId', label: 'Thread ID', kind: 'text' },\n { id: 'resourceId', label: 'Resource ID', kind: 'text' },\n { id: 'userId', label: 'User ID', kind: 'text' },\n { id: 'organizationId', label: 'Organization ID', kind: 'text' },\n { id: 'runId', label: 'Run ID', kind: 'text' },\n { id: 'sessionId', label: 'Session ID', kind: 'text' },\n { id: 'requestId', label: 'Request ID', kind: 'text' },\n { id: 'experimentId', label: 'Experiment ID', kind: 'text' },\n ];\n const byLabel = (a: PropertyFilterField, b: PropertyFilterField) => a.label.localeCompare(b.label);\n const pickMulti = fields.filter(f => f.kind === 'pick-multi').sort(byLabel);\n const text = fields.filter(f => f.kind === 'text').sort(byLabel);\n return [...pickMulti, ...text];\n}\n\n/** Parse filter tokens from URL params, preserving insertion order. */\nexport function getMetricsPropertyFilterTokens(searchParams: URLSearchParams): PropertyFilterToken[] {\n const tokens: PropertyFilterToken[] = [];\n\n const paramToFieldId = new Map<string, string>([[METRICS_ROOT_ENTITY_TYPE_PARAM, 'rootEntityType']]);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n paramToFieldId.set(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId], fieldId);\n }\n\n const seen = new Set<string>();\n for (const [paramName] of searchParams.entries()) {\n const fieldId = paramToFieldId.get(paramName);\n if (!fieldId || seen.has(fieldId)) continue;\n seen.add(fieldId);\n\n if (fieldId === 'tags') {\n const raw = searchParams.getAll(paramName);\n if (raw.length === 0) continue;\n tokens.push({ fieldId, value: raw.filter(Boolean) });\n continue;\n }\n\n // Multi-value pick-multi fields: collect all occurrences.\n if (\n fieldId === 'rootEntityType' ||\n fieldId === 'entityName' ||\n fieldId === 'serviceName' ||\n fieldId === 'environment' ||\n fieldId === 'provider' ||\n fieldId === 'model'\n ) {\n const raw = searchParams.getAll(paramName);\n if (raw.length > 1) {\n tokens.push({ fieldId, value: raw });\n continue;\n }\n }\n\n const value = searchParams.get(paramName);\n if (value !== null) tokens.push({ fieldId, value });\n }\n\n return tokens;\n}\n\n/** Return a fresh URLSearchParams containing only metrics filter params. */\nexport function getPreservedMetricsFilterParams(searchParams: URLSearchParams): URLSearchParams {\n const next = new URLSearchParams();\n const rootEntityValues = searchParams.getAll(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const v of rootEntityValues) next.append(METRICS_ROOT_ENTITY_TYPE_PARAM, v);\n\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n const param = METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId];\n const values = searchParams.getAll(param);\n for (const v of values) next.append(param, v);\n }\n return next;\n}\n\n/** Mutate `params` in place: strip every metrics filter param, then re-write\n * them from `tokens` in order. Token insertion order drives URL order so\n * filter pill order is stable across reloads. */\nexport function applyMetricsPropertyFilterTokens(params: URLSearchParams, tokens: PropertyFilterToken[]): void {\n params.delete(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n params.delete(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n\n for (const token of tokens) {\n const paramName =\n token.fieldId === 'rootEntityType'\n ? METRICS_ROOT_ENTITY_TYPE_PARAM\n : METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[token.fieldId as MetricsPropertyFilterFieldId];\n if (!paramName) continue;\n\n if (Array.isArray(token.value)) {\n const values = token.value.filter(v => typeof v === 'string' && v !== '');\n if (values.length === 0) {\n // Keep an empty sentinel for `tags` so the pill survives a Reset.\n if (token.fieldId === 'tags') params.append(paramName, '');\n continue;\n }\n for (const v of values) params.append(paramName, v);\n } else if (typeof token.value === 'string') {\n // Persist even empty / 'Any' strings so newly-created pills (and\n // neutralized-but-still-visible pills after a Reset) survive URL\n // round-trips. `buildMetricsDimensionalFilter` drops these on the API\n // query side so neutrals never reach the backend.\n params.set(paramName, token.value.trim());\n }\n }\n}\n\n/** Shape of the dimensional filter object fed into `MetricsFilter` on client\n * calls. Kept compatible with `metricsFilterSchema` in @internal/core — every\n * scalar field maps to a single-string column filter, and `tags` is the only\n * array field (matched via `has()` / equivalent on backends). */\nexport type { MetricsDimensionalFilter } from '@mastra/react/hooks/metrics';\n\n/** Convert the active token list into a `MetricsFilter`-compatible object.\n *\n * Single-value text fields are assigned as strings; `pick-multi` fields are\n * assigned as string arrays. Empty/neutral values are dropped. */\n/** \"Neutral\" sentinel for single-select pick-multi fields. Emitted by the\n * toolbar's Clear action so pills stay visible after reset; must be stripped\n * before the filter object is sent to the backend (it is not a valid enum\n * option for fields like `rootEntityType`). */\nconst NEUTRAL_PICK_VALUE = 'Any';\n\nfunction isNeutralValue(v: string): boolean {\n const trimmed = v.trim();\n return trimmed === '' || trimmed === NEUTRAL_PICK_VALUE;\n}\n\n/** `rootEntityType` is enum-valued at the backend; URL-supplied or stale stored\n * values can be arbitrary strings, so we validate against the allowed set\n * before letting them reach the filter object. Returns `undefined` if the\n * value isn't a known enum option. */\nconst VALID_ROOT_ENTITY_TYPES: ReadonlySet<EntityTypeValue> = new Set(\n METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => o.entityType),\n);\nfunction toValidRootEntityType(v: string): EntityType | undefined {\n const trimmed = v.trim();\n return VALID_ROOT_ENTITY_TYPES.has(trimmed as EntityTypeValue) ? (trimmed as EntityType) : undefined;\n}\n\nexport function buildMetricsDimensionalFilter(tokens: PropertyFilterToken[]): MetricsDimensionalFilter {\n const result: MetricsDimensionalFilter = {};\n for (const token of tokens) {\n const fieldId = token.fieldId as keyof MetricsDimensionalFilter;\n if (Array.isArray(token.value)) {\n const values = token.value\n .filter((v): v is string => typeof v === 'string')\n .map(v => v.trim())\n .filter(v => !isNeutralValue(v));\n if (values.length === 0) continue;\n if (fieldId === 'tags') {\n result.tags = values;\n } else if (fieldId === 'rootEntityType') {\n const firstValue = values[0];\n const validated = firstValue !== undefined ? toValidRootEntityType(firstValue) : undefined;\n if (validated) result.rootEntityType = validated;\n } else {\n // Backend accepts a single string per dimension; take the first selection.\n (result as Record<string, unknown>)[fieldId] = values[0];\n }\n } else if (typeof token.value === 'string') {\n if (isNeutralValue(token.value)) continue;\n const trimmed = token.value.trim();\n if (fieldId === 'rootEntityType') {\n const validated = toValidRootEntityType(trimmed);\n if (validated) result.rootEntityType = validated;\n } else {\n (result as Record<string, unknown>)[fieldId] = trimmed;\n }\n }\n }\n return result;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"metrics-filters.cjs.js","sources":["../../../src/domains/metrics/metrics-filters.ts"],"sourcesContent":["import type { EntityType } from '@mastra/core/observability';\nimport type { MetricsDimensionalFilter } from '@mastra/react/hooks/metrics';\nimport { CloudIcon, CpuIcon } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\nimport { traceFilterFieldColor, traceFilterFieldIcon } from '../traces/trace-filters';\nimport type {\n FilterBarField,\n FilterBarItem,\n FilterBarOperator,\n FilterBarOption,\n} from '@/ds/components/FilterBar/types';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\ntype EntityTypeValue = `${EntityType}`;\n\n/** Primitive type options — matches the traces filter vocabulary. */\nexport const METRICS_ROOT_ENTITY_TYPE_OPTIONS = [\n { label: 'Agent', entityType: 'agent' },\n { label: 'Workflow', entityType: 'workflow_run' },\n { label: 'Scorer', entityType: 'scorer' },\n { label: 'Ingest', entityType: 'rag_ingestion' },\n] as const satisfies readonly { label: string; entityType: EntityTypeValue }[];\n\n/** Field IDs that live in dedicated URL params (not the generic `filterX` set). */\nexport const METRICS_SYNTHETIC_FILTER_FIELD_IDS = ['rootEntityType'] as const;\n\nexport const METRICS_ROOT_ENTITY_TYPE_PARAM = 'rootEntityType';\n\n/** URL param name for each generic property filter field. Mirrors traces for\n * cross-page URL consistency (user can copy a trace's filter URL and paste\n * equivalent dimensions into metrics). */\nexport const METRICS_PROPERTY_FILTER_PARAM_BY_FIELD = {\n tags: 'filterTags',\n entityName: 'filterEntityName',\n runId: 'filterRunId',\n threadId: 'filterThreadId',\n sessionId: 'filterSessionId',\n requestId: 'filterRequestId',\n resourceId: 'filterResourceId',\n userId: 'filterUserId',\n organizationId: 'filterOrganizationId',\n serviceName: 'filterServiceName',\n environment: 'filterEnvironment',\n experimentId: 'filterExperimentId',\n provider: 'filterProvider',\n model: 'filterModel',\n} as const;\n\nexport type MetricsPropertyFilterFieldId = keyof typeof METRICS_PROPERTY_FILTER_PARAM_BY_FIELD;\n\nexport const METRICS_PROPERTY_FILTER_FIELD_IDS = Object.keys(\n METRICS_PROPERTY_FILTER_PARAM_BY_FIELD,\n) as Array<MetricsPropertyFilterFieldId>;\n\nconst METRICS_FILTERS_STORAGE_KEY = 'mastra:metrics:saved-filters';\n\n/** Save the current metrics filter URL params so the metrics page can restore\n * them on next visit (same pattern as traces/logs). */\nexport function saveMetricsFiltersToStorage(params: URLSearchParams): void {\n const serialized = getPreservedMetricsFilterParams(params);\n try {\n localStorage.setItem(METRICS_FILTERS_STORAGE_KEY, serialized.toString());\n } catch {\n // localStorage may be unavailable — silently skip.\n }\n}\n\nexport function clearSavedMetricsFilters(): void {\n try {\n localStorage.removeItem(METRICS_FILTERS_STORAGE_KEY);\n } catch {\n // ignore\n }\n}\n\nexport function loadMetricsFiltersFromStorage(): URLSearchParams | null {\n try {\n const raw = localStorage.getItem(METRICS_FILTERS_STORAGE_KEY);\n if (!raw) return null;\n const parsed = new URLSearchParams(raw);\n return parsed.toString() ? parsed : null;\n } catch {\n return null;\n }\n}\n\nexport function hasAnyMetricsFilterParams(params: URLSearchParams): boolean {\n if (params.has(METRICS_ROOT_ENTITY_TYPE_PARAM)) return true;\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n if (params.has(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId])) return true;\n }\n return false;\n}\n\n/** Build the PropertyFilterField list shown in the metrics filter popover.\n *\n * The field order is curated for OLAP efficiency: columnar/LowCardinality\n * dimensions first, then bloom_filter-indexed high-cardinality IDs as\n * free-text. Fields that are expensive to filter without an index are\n * intentionally omitted from this dashboard surface.\n *\n * @deprecated The metrics dashboard filters through `FilterBar`. Use `createMetricsFilterBarFields`. */\nexport function createMetricsPropertyFilterFields({\n availableTags,\n availableEntityNames,\n availableServiceNames,\n availableEnvironments,\n loading,\n}: {\n availableTags: string[];\n availableEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n loading?: {\n tags?: boolean;\n entityNames?: boolean;\n serviceNames?: boolean;\n environments?: boolean;\n };\n}): PropertyFilterField[] {\n const fields: PropertyFilterField[] = [\n {\n id: 'rootEntityType',\n label: 'Primitive type',\n kind: 'pick-multi',\n searchable: false,\n options: METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ label: o.label, value: o.entityType })),\n placeholder: 'Choose entity type',\n emptyText: 'No entity types.',\n },\n {\n id: 'entityName',\n label: 'Primitive name',\n kind: 'pick-multi',\n options: availableEntityNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose entity names',\n emptyText: 'No entity names found.',\n isLoading: loading?.entityNames,\n },\n {\n id: 'tags',\n label: 'Tags',\n kind: 'pick-multi',\n multi: true,\n options: availableTags.map(tag => ({ label: tag, value: tag })),\n placeholder: 'Choose tags',\n emptyText: 'No tags found.',\n isLoading: loading?.tags,\n },\n {\n id: 'serviceName',\n label: 'Service Name',\n kind: 'pick-multi',\n options: availableServiceNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose service names',\n emptyText: 'No service names found.',\n isLoading: loading?.serviceNames,\n },\n {\n id: 'environment',\n label: 'Environment',\n kind: 'pick-multi',\n options: availableEnvironments.map(env => ({ label: env, value: env })),\n placeholder: 'Choose environments',\n emptyText: 'No environments found.',\n isLoading: loading?.environments,\n },\n // Provider / model are filterable by URL (filterProvider / filterModel) but\n // are omitted from the popover until we expose a discovery endpoint.\n // High-cardinality IDs — free-text. Backed by bloom_filter skip indexes on\n // ClickHouse, narrow timestamp range pruning on DuckDB.\n { id: 'threadId', label: 'Thread ID', kind: 'text' },\n { id: 'resourceId', label: 'Resource ID', kind: 'text' },\n { id: 'userId', label: 'User ID', kind: 'text' },\n { id: 'organizationId', label: 'Organization ID', kind: 'text' },\n { id: 'runId', label: 'Run ID', kind: 'text' },\n { id: 'sessionId', label: 'Session ID', kind: 'text' },\n { id: 'requestId', label: 'Request ID', kind: 'text' },\n { id: 'experimentId', label: 'Experiment ID', kind: 'text' },\n ];\n const byLabel = (a: PropertyFilterField, b: PropertyFilterField) => a.label.localeCompare(b.label);\n const pickMulti = fields.filter(f => f.kind === 'pick-multi').sort(byLabel);\n const text = fields.filter(f => f.kind === 'text').sort(byLabel);\n return [...pickMulti, ...text];\n}\n\ntype MetricsFilterBarFieldId = MetricsPropertyFilterFieldId | 'rootEntityType';\n\nconst METRICS_TAGS_OPERATOR_ID = 'hasAll';\n\n/** Operators of the metrics filter bar. The metrics API matches one value per dimension, so `is`\n * never widens to \"is any of\", and it requires every listed tag. */\nexport const METRICS_FILTER_BAR_OPERATORS: FilterBarOperator[] = [\n { id: 'is', label: 'is' },\n { id: METRICS_TAGS_OPERATOR_ID, label: 'has all of', arity: 'many' },\n];\n\n/** Same labels as the trace filters, so a dimension reads the same on Metrics and Traces. */\nconst METRICS_FILTER_BAR_LABELS: Record<MetricsFilterBarFieldId, string> = {\n rootEntityType: 'Primitive type',\n entityName: 'Primitive name',\n tags: 'Tags',\n serviceName: 'Service Name',\n environment: 'Environment',\n threadId: 'Thread ID',\n resourceId: 'Resource ID',\n userId: 'User ID',\n organizationId: 'Organization ID',\n runId: 'Run ID',\n sessionId: 'Session ID',\n requestId: 'Request ID',\n experimentId: 'Experiment ID',\n provider: 'Provider',\n model: 'Model',\n};\n\n/** Icons for the dimensions the trace filters key differently (`spans.provider`, `spans.model`). */\nconst METRICS_FILTER_BAR_ICONS: Partial<Record<MetricsFilterBarFieldId, LucideIcon>> = {\n provider: CloudIcon,\n model: CpuIcon,\n};\n\nconst METRICS_FILTER_BAR_TEXT_FIELD_IDS = [\n 'threadId',\n 'resourceId',\n 'userId',\n 'organizationId',\n 'runId',\n 'sessionId',\n 'requestId',\n 'experimentId',\n] as const satisfies readonly MetricsFilterBarFieldId[];\n\nconst metricsFieldBase = (id: MetricsFilterBarFieldId) => ({\n id,\n label: METRICS_FILTER_BAR_LABELS[id],\n icon: METRICS_FILTER_BAR_ICONS[id] ?? traceFilterFieldIcon(id),\n color: traceFilterFieldColor(id),\n});\n\nconst byFieldLabel = (a: FilterBarField, b: FilterBarField) => a.label.localeCompare(b.label);\n\n/** FilterBar fields for the metrics dashboard, in the same order as before: discovered\n * dimensions first, then the high-cardinality IDs as free text. Provider and model are\n * never offered (there is no discovery endpoint for them yet) but still label the chips\n * that links bring in through `filterProvider` / `filterModel`. */\nexport function createMetricsFilterBarFields({\n availableTags,\n availableEntityNames,\n availableServiceNames,\n availableEnvironments,\n}: {\n availableTags: string[];\n availableEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n}): FilterBarField[] {\n const pick = (id: MetricsFilterBarFieldId, suggestions: FilterBarOption[]): FilterBarField => ({\n ...metricsFieldBase(id),\n operators: ['is'],\n strict: true,\n suggestions,\n });\n const text = (id: MetricsFilterBarFieldId): FilterBarField => ({ ...metricsFieldBase(id), operators: ['is'] });\n const options = (values: string[]) => values.map(value => ({ value }));\n\n const pickFields: FilterBarField[] = [\n pick(\n 'rootEntityType',\n METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ value: o.entityType, label: o.label })),\n ),\n pick('entityName', options(availableEntityNames)),\n { ...pick('tags', options(availableTags)), operators: [METRICS_TAGS_OPERATOR_ID] },\n pick('serviceName', options(availableServiceNames)),\n pick('environment', options(availableEnvironments)),\n ];\n const textFields = METRICS_FILTER_BAR_TEXT_FIELD_IDS.map(text);\n const urlOnlyFields = (['provider', 'model'] as const).map(id => ({ ...text(id), hidden: true }));\n\n return [...pickFields.toSorted(byFieldLabel), ...textFields.toSorted(byFieldLabel), ...urlOnlyFields];\n}\n\n/** One FilterBar item per token, keyed by field id so chip order == URL order. Empty values\n * are kept: they are chips whose value hasn't been picked yet. The legacy 'Any' sentinel\n * reads as empty, and a repeated single-value param keeps its first value, which is the one\n * the metrics API applies. */\nexport function metricsTokensToFilterBarItems(tokens: PropertyFilterToken[]): FilterBarItem[] {\n return tokens.map(token => {\n if (token.fieldId === 'tags') {\n const value = [token.value].flat().filter(tag => tag !== '');\n return { id: token.fieldId, fieldId: token.fieldId, operatorId: METRICS_TAGS_OPERATOR_ID, value };\n }\n const value = Array.isArray(token.value) ? (token.value[0] ?? '') : token.value;\n return { id: token.fieldId, fieldId: token.fieldId, operatorId: 'is', value: isNeutralValue(value) ? '' : value };\n });\n}\n\nexport function filterBarItemsToMetricsTokens(items: FilterBarItem[]): PropertyFilterToken[] {\n return items.map(item => ({\n fieldId: item.fieldId,\n value: Array.isArray(item.value) ? item.value.map(String) : String(item.value),\n }));\n}\n\n/** Parse filter tokens from URL params, preserving insertion order. */\nexport function getMetricsPropertyFilterTokens(searchParams: URLSearchParams): PropertyFilterToken[] {\n const tokens: PropertyFilterToken[] = [];\n\n const paramToFieldId = new Map<string, string>([[METRICS_ROOT_ENTITY_TYPE_PARAM, 'rootEntityType']]);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n paramToFieldId.set(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId], fieldId);\n }\n\n const seen = new Set<string>();\n for (const [paramName] of searchParams.entries()) {\n const fieldId = paramToFieldId.get(paramName);\n if (!fieldId || seen.has(fieldId)) continue;\n seen.add(fieldId);\n\n if (fieldId === 'tags') {\n const raw = searchParams.getAll(paramName);\n if (raw.length === 0) continue;\n tokens.push({ fieldId, value: raw.filter(Boolean) });\n continue;\n }\n\n // Multi-value pick-multi fields: collect all occurrences.\n if (\n fieldId === 'rootEntityType' ||\n fieldId === 'entityName' ||\n fieldId === 'serviceName' ||\n fieldId === 'environment' ||\n fieldId === 'provider' ||\n fieldId === 'model'\n ) {\n const raw = searchParams.getAll(paramName);\n if (raw.length > 1) {\n tokens.push({ fieldId, value: raw });\n continue;\n }\n }\n\n const value = searchParams.get(paramName);\n if (value !== null) tokens.push({ fieldId, value });\n }\n\n return tokens;\n}\n\n/** Return a fresh URLSearchParams containing only metrics filter params. */\nexport function getPreservedMetricsFilterParams(searchParams: URLSearchParams): URLSearchParams {\n const next = new URLSearchParams();\n const rootEntityValues = searchParams.getAll(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const v of rootEntityValues) next.append(METRICS_ROOT_ENTITY_TYPE_PARAM, v);\n\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n const param = METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId];\n const values = searchParams.getAll(param);\n for (const v of values) next.append(param, v);\n }\n return next;\n}\n\n/** Mutate `params` in place: strip every metrics filter param, then re-write\n * them from `tokens` in order. Token insertion order drives URL order so\n * filter pill order is stable across reloads. */\nexport function applyMetricsPropertyFilterTokens(params: URLSearchParams, tokens: PropertyFilterToken[]): void {\n params.delete(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n params.delete(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n\n for (const token of tokens) {\n const paramName =\n token.fieldId === 'rootEntityType'\n ? METRICS_ROOT_ENTITY_TYPE_PARAM\n : METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[token.fieldId as MetricsPropertyFilterFieldId];\n if (!paramName) continue;\n\n if (Array.isArray(token.value)) {\n const values = token.value.filter(v => typeof v === 'string' && v !== '');\n if (values.length === 0) {\n // Keep an empty sentinel for `tags` so the pill survives a Reset.\n if (token.fieldId === 'tags') params.append(paramName, '');\n continue;\n }\n for (const v of values) params.append(paramName, v);\n } else if (typeof token.value === 'string') {\n // Persist even empty / 'Any' strings so newly-created pills (and\n // neutralized-but-still-visible pills after a Reset) survive URL\n // round-trips. `buildMetricsDimensionalFilter` drops these on the API\n // query side so neutrals never reach the backend.\n params.set(paramName, token.value.trim());\n }\n }\n}\n\n/** Shape of the dimensional filter object fed into `MetricsFilter` on client\n * calls. Kept compatible with `metricsFilterSchema` in @internal/core — every\n * scalar field maps to a single-string column filter, and `tags` is the only\n * array field (matched via `has()` / equivalent on backends). */\nexport type { MetricsDimensionalFilter } from '@mastra/react/hooks/metrics';\n\n/** Convert the active token list into a `MetricsFilter`-compatible object.\n *\n * Single-value text fields are assigned as strings; `pick-multi` fields are\n * assigned as string arrays. Empty/neutral values are dropped. */\n/** \"Neutral\" sentinel for single-select pick-multi fields. Emitted by the\n * toolbar's Clear action so pills stay visible after reset; must be stripped\n * before the filter object is sent to the backend (it is not a valid enum\n * option for fields like `rootEntityType`). */\nconst NEUTRAL_PICK_VALUE = 'Any';\n\nfunction isNeutralValue(v: string): boolean {\n const trimmed = v.trim();\n return trimmed === '' || trimmed === NEUTRAL_PICK_VALUE;\n}\n\n/** `rootEntityType` is enum-valued at the backend; URL-supplied or stale stored\n * values can be arbitrary strings, so we validate against the allowed set\n * before letting them reach the filter object. Returns `undefined` if the\n * value isn't a known enum option. */\nconst VALID_ROOT_ENTITY_TYPES: ReadonlySet<EntityTypeValue> = new Set(\n METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => o.entityType),\n);\nfunction toValidRootEntityType(v: string): EntityType | undefined {\n const trimmed = v.trim();\n return VALID_ROOT_ENTITY_TYPES.has(trimmed as EntityTypeValue) ? (trimmed as EntityType) : undefined;\n}\n\nexport function buildMetricsDimensionalFilter(tokens: PropertyFilterToken[]): MetricsDimensionalFilter {\n const result: MetricsDimensionalFilter = {};\n for (const token of tokens) {\n const fieldId = token.fieldId as keyof MetricsDimensionalFilter;\n if (Array.isArray(token.value)) {\n const values = token.value\n .filter((v): v is string => typeof v === 'string')\n .map(v => v.trim())\n .filter(v => !isNeutralValue(v));\n if (values.length === 0) continue;\n if (fieldId === 'tags') {\n result.tags = values;\n } else if (fieldId === 'rootEntityType') {\n const firstValue = values[0];\n const validated = firstValue !== undefined ? toValidRootEntityType(firstValue) : undefined;\n if (validated) result.rootEntityType = validated;\n } else {\n // Backend accepts a single string per dimension; take the first selection.\n (result as Record<string, unknown>)[fieldId] = values[0];\n }\n } else if (typeof token.value === 'string') {\n if (isNeutralValue(token.value)) continue;\n const trimmed = token.value.trim();\n if (fieldId === 'rootEntityType') {\n const validated = toValidRootEntityType(trimmed);\n if (validated) result.rootEntityType = validated;\n } else {\n (result as Record<string, unknown>)[fieldId] = trimmed;\n }\n }\n }\n return result;\n}\n"],"names":["CloudIcon","CpuIcon","traceFilterFieldIcon","traceFilterFieldColor","value"],"mappings":"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"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { CpuIcon, CloudIcon } from 'lucide-react';
|
|
2
|
+
import { X as traceFilterFieldColor, Y as traceFilterFieldIcon } from '../../trace-filters-C71gmCq4.js';
|
|
3
|
+
|
|
1
4
|
const METRICS_ROOT_ENTITY_TYPE_OPTIONS = [
|
|
2
5
|
{ label: "Agent", entityType: "agent" },
|
|
3
6
|
{ label: "Workflow", entityType: "workflow_run" },
|
|
@@ -128,6 +131,93 @@ function createMetricsPropertyFilterFields({
|
|
|
128
131
|
const text = fields.filter((f) => f.kind === "text").sort(byLabel);
|
|
129
132
|
return [...pickMulti, ...text];
|
|
130
133
|
}
|
|
134
|
+
const METRICS_TAGS_OPERATOR_ID = "hasAll";
|
|
135
|
+
const METRICS_FILTER_BAR_OPERATORS = [
|
|
136
|
+
{ id: "is", label: "is" },
|
|
137
|
+
{ id: METRICS_TAGS_OPERATOR_ID, label: "has all of", arity: "many" }
|
|
138
|
+
];
|
|
139
|
+
const METRICS_FILTER_BAR_LABELS = {
|
|
140
|
+
rootEntityType: "Primitive type",
|
|
141
|
+
entityName: "Primitive name",
|
|
142
|
+
tags: "Tags",
|
|
143
|
+
serviceName: "Service Name",
|
|
144
|
+
environment: "Environment",
|
|
145
|
+
threadId: "Thread ID",
|
|
146
|
+
resourceId: "Resource ID",
|
|
147
|
+
userId: "User ID",
|
|
148
|
+
organizationId: "Organization ID",
|
|
149
|
+
runId: "Run ID",
|
|
150
|
+
sessionId: "Session ID",
|
|
151
|
+
requestId: "Request ID",
|
|
152
|
+
experimentId: "Experiment ID",
|
|
153
|
+
provider: "Provider",
|
|
154
|
+
model: "Model"
|
|
155
|
+
};
|
|
156
|
+
const METRICS_FILTER_BAR_ICONS = {
|
|
157
|
+
provider: CloudIcon,
|
|
158
|
+
model: CpuIcon
|
|
159
|
+
};
|
|
160
|
+
const METRICS_FILTER_BAR_TEXT_FIELD_IDS = [
|
|
161
|
+
"threadId",
|
|
162
|
+
"resourceId",
|
|
163
|
+
"userId",
|
|
164
|
+
"organizationId",
|
|
165
|
+
"runId",
|
|
166
|
+
"sessionId",
|
|
167
|
+
"requestId",
|
|
168
|
+
"experimentId"
|
|
169
|
+
];
|
|
170
|
+
const metricsFieldBase = (id) => ({
|
|
171
|
+
id,
|
|
172
|
+
label: METRICS_FILTER_BAR_LABELS[id],
|
|
173
|
+
icon: METRICS_FILTER_BAR_ICONS[id] ?? traceFilterFieldIcon(id),
|
|
174
|
+
color: traceFilterFieldColor()
|
|
175
|
+
});
|
|
176
|
+
const byFieldLabel = (a, b) => a.label.localeCompare(b.label);
|
|
177
|
+
function createMetricsFilterBarFields({
|
|
178
|
+
availableTags,
|
|
179
|
+
availableEntityNames,
|
|
180
|
+
availableServiceNames,
|
|
181
|
+
availableEnvironments
|
|
182
|
+
}) {
|
|
183
|
+
const pick = (id, suggestions) => ({
|
|
184
|
+
...metricsFieldBase(id),
|
|
185
|
+
operators: ["is"],
|
|
186
|
+
strict: true,
|
|
187
|
+
suggestions
|
|
188
|
+
});
|
|
189
|
+
const text = (id) => ({ ...metricsFieldBase(id), operators: ["is"] });
|
|
190
|
+
const options = (values) => values.map((value) => ({ value }));
|
|
191
|
+
const pickFields = [
|
|
192
|
+
pick(
|
|
193
|
+
"rootEntityType",
|
|
194
|
+
METRICS_ROOT_ENTITY_TYPE_OPTIONS.map((o) => ({ value: o.entityType, label: o.label }))
|
|
195
|
+
),
|
|
196
|
+
pick("entityName", options(availableEntityNames)),
|
|
197
|
+
{ ...pick("tags", options(availableTags)), operators: [METRICS_TAGS_OPERATOR_ID] },
|
|
198
|
+
pick("serviceName", options(availableServiceNames)),
|
|
199
|
+
pick("environment", options(availableEnvironments))
|
|
200
|
+
];
|
|
201
|
+
const textFields = METRICS_FILTER_BAR_TEXT_FIELD_IDS.map(text);
|
|
202
|
+
const urlOnlyFields = ["provider", "model"].map((id) => ({ ...text(id), hidden: true }));
|
|
203
|
+
return [...pickFields.toSorted(byFieldLabel), ...textFields.toSorted(byFieldLabel), ...urlOnlyFields];
|
|
204
|
+
}
|
|
205
|
+
function metricsTokensToFilterBarItems(tokens) {
|
|
206
|
+
return tokens.map((token) => {
|
|
207
|
+
if (token.fieldId === "tags") {
|
|
208
|
+
const value2 = [token.value].flat().filter((tag) => tag !== "");
|
|
209
|
+
return { id: token.fieldId, fieldId: token.fieldId, operatorId: METRICS_TAGS_OPERATOR_ID, value: value2 };
|
|
210
|
+
}
|
|
211
|
+
const value = Array.isArray(token.value) ? token.value[0] ?? "" : token.value;
|
|
212
|
+
return { id: token.fieldId, fieldId: token.fieldId, operatorId: "is", value: isNeutralValue(value) ? "" : value };
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
function filterBarItemsToMetricsTokens(items) {
|
|
216
|
+
return items.map((item) => ({
|
|
217
|
+
fieldId: item.fieldId,
|
|
218
|
+
value: Array.isArray(item.value) ? item.value.map(String) : String(item.value)
|
|
219
|
+
}));
|
|
220
|
+
}
|
|
131
221
|
function getMetricsPropertyFilterTokens(searchParams) {
|
|
132
222
|
const tokens = [];
|
|
133
223
|
const paramToFieldId = /* @__PURE__ */ new Map([[METRICS_ROOT_ENTITY_TYPE_PARAM, "rootEntityType"]]);
|
|
@@ -230,5 +320,5 @@ function buildMetricsDimensionalFilter(tokens) {
|
|
|
230
320
|
return result;
|
|
231
321
|
}
|
|
232
322
|
|
|
233
|
-
export { METRICS_PROPERTY_FILTER_FIELD_IDS, METRICS_PROPERTY_FILTER_PARAM_BY_FIELD, METRICS_ROOT_ENTITY_TYPE_OPTIONS, METRICS_ROOT_ENTITY_TYPE_PARAM, METRICS_SYNTHETIC_FILTER_FIELD_IDS, applyMetricsPropertyFilterTokens, buildMetricsDimensionalFilter, clearSavedMetricsFilters, createMetricsPropertyFilterFields, getMetricsPropertyFilterTokens, getPreservedMetricsFilterParams, hasAnyMetricsFilterParams, loadMetricsFiltersFromStorage, saveMetricsFiltersToStorage };
|
|
323
|
+
export { METRICS_FILTER_BAR_OPERATORS, METRICS_PROPERTY_FILTER_FIELD_IDS, METRICS_PROPERTY_FILTER_PARAM_BY_FIELD, METRICS_ROOT_ENTITY_TYPE_OPTIONS, METRICS_ROOT_ENTITY_TYPE_PARAM, METRICS_SYNTHETIC_FILTER_FIELD_IDS, applyMetricsPropertyFilterTokens, buildMetricsDimensionalFilter, clearSavedMetricsFilters, createMetricsFilterBarFields, createMetricsPropertyFilterFields, filterBarItemsToMetricsTokens, getMetricsPropertyFilterTokens, getPreservedMetricsFilterParams, hasAnyMetricsFilterParams, loadMetricsFiltersFromStorage, metricsTokensToFilterBarItems, saveMetricsFiltersToStorage };
|
|
234
324
|
//# sourceMappingURL=metrics-filters.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics-filters.es.js","sources":["../../../src/domains/metrics/metrics-filters.ts"],"sourcesContent":["import type { EntityType } from '@mastra/core/observability';\nimport type { MetricsDimensionalFilter } from '@mastra/react/hooks/metrics';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\ntype EntityTypeValue = `${EntityType}`;\n\n/** Primitive type options — matches the traces filter vocabulary. */\nexport const METRICS_ROOT_ENTITY_TYPE_OPTIONS = [\n { label: 'Agent', entityType: 'agent' },\n { label: 'Workflow', entityType: 'workflow_run' },\n { label: 'Scorer', entityType: 'scorer' },\n { label: 'Ingest', entityType: 'rag_ingestion' },\n] as const satisfies readonly { label: string; entityType: EntityTypeValue }[];\n\n/** Field IDs that live in dedicated URL params (not the generic `filterX` set). */\nexport const METRICS_SYNTHETIC_FILTER_FIELD_IDS = ['rootEntityType'] as const;\n\nexport const METRICS_ROOT_ENTITY_TYPE_PARAM = 'rootEntityType';\n\n/** URL param name for each generic property filter field. Mirrors traces for\n * cross-page URL consistency (user can copy a trace's filter URL and paste\n * equivalent dimensions into metrics). */\nexport const METRICS_PROPERTY_FILTER_PARAM_BY_FIELD = {\n tags: 'filterTags',\n entityName: 'filterEntityName',\n runId: 'filterRunId',\n threadId: 'filterThreadId',\n sessionId: 'filterSessionId',\n requestId: 'filterRequestId',\n resourceId: 'filterResourceId',\n userId: 'filterUserId',\n organizationId: 'filterOrganizationId',\n serviceName: 'filterServiceName',\n environment: 'filterEnvironment',\n experimentId: 'filterExperimentId',\n provider: 'filterProvider',\n model: 'filterModel',\n} as const;\n\nexport type MetricsPropertyFilterFieldId = keyof typeof METRICS_PROPERTY_FILTER_PARAM_BY_FIELD;\n\nexport const METRICS_PROPERTY_FILTER_FIELD_IDS = Object.keys(\n METRICS_PROPERTY_FILTER_PARAM_BY_FIELD,\n) as Array<MetricsPropertyFilterFieldId>;\n\nconst METRICS_FILTERS_STORAGE_KEY = 'mastra:metrics:saved-filters';\n\n/** Save the current metrics filter URL params so the metrics page can restore\n * them on next visit (same pattern as traces/logs). */\nexport function saveMetricsFiltersToStorage(params: URLSearchParams): void {\n const serialized = getPreservedMetricsFilterParams(params);\n try {\n localStorage.setItem(METRICS_FILTERS_STORAGE_KEY, serialized.toString());\n } catch {\n // localStorage may be unavailable — silently skip.\n }\n}\n\nexport function clearSavedMetricsFilters(): void {\n try {\n localStorage.removeItem(METRICS_FILTERS_STORAGE_KEY);\n } catch {\n // ignore\n }\n}\n\nexport function loadMetricsFiltersFromStorage(): URLSearchParams | null {\n try {\n const raw = localStorage.getItem(METRICS_FILTERS_STORAGE_KEY);\n if (!raw) return null;\n const parsed = new URLSearchParams(raw);\n return parsed.toString() ? parsed : null;\n } catch {\n return null;\n }\n}\n\nexport function hasAnyMetricsFilterParams(params: URLSearchParams): boolean {\n if (params.has(METRICS_ROOT_ENTITY_TYPE_PARAM)) return true;\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n if (params.has(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId])) return true;\n }\n return false;\n}\n\n/** Build the PropertyFilterField list shown in the metrics filter popover.\n *\n * The field order is curated for OLAP efficiency: columnar/LowCardinality\n * dimensions first, then bloom_filter-indexed high-cardinality IDs as\n * free-text. Fields that are expensive to filter without an index are\n * intentionally omitted from this dashboard surface. */\nexport function createMetricsPropertyFilterFields({\n availableTags,\n availableEntityNames,\n availableServiceNames,\n availableEnvironments,\n loading,\n}: {\n availableTags: string[];\n availableEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n loading?: {\n tags?: boolean;\n entityNames?: boolean;\n serviceNames?: boolean;\n environments?: boolean;\n };\n}): PropertyFilterField[] {\n const fields: PropertyFilterField[] = [\n {\n id: 'rootEntityType',\n label: 'Primitive type',\n kind: 'pick-multi',\n searchable: false,\n options: METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ label: o.label, value: o.entityType })),\n placeholder: 'Choose entity type',\n emptyText: 'No entity types.',\n },\n {\n id: 'entityName',\n label: 'Primitive name',\n kind: 'pick-multi',\n options: availableEntityNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose entity names',\n emptyText: 'No entity names found.',\n isLoading: loading?.entityNames,\n },\n {\n id: 'tags',\n label: 'Tags',\n kind: 'pick-multi',\n multi: true,\n options: availableTags.map(tag => ({ label: tag, value: tag })),\n placeholder: 'Choose tags',\n emptyText: 'No tags found.',\n isLoading: loading?.tags,\n },\n {\n id: 'serviceName',\n label: 'Service Name',\n kind: 'pick-multi',\n options: availableServiceNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose service names',\n emptyText: 'No service names found.',\n isLoading: loading?.serviceNames,\n },\n {\n id: 'environment',\n label: 'Environment',\n kind: 'pick-multi',\n options: availableEnvironments.map(env => ({ label: env, value: env })),\n placeholder: 'Choose environments',\n emptyText: 'No environments found.',\n isLoading: loading?.environments,\n },\n // Provider / model are filterable by URL (filterProvider / filterModel) but\n // are omitted from the popover until we expose a discovery endpoint.\n // High-cardinality IDs — free-text. Backed by bloom_filter skip indexes on\n // ClickHouse, narrow timestamp range pruning on DuckDB.\n { id: 'threadId', label: 'Thread ID', kind: 'text' },\n { id: 'resourceId', label: 'Resource ID', kind: 'text' },\n { id: 'userId', label: 'User ID', kind: 'text' },\n { id: 'organizationId', label: 'Organization ID', kind: 'text' },\n { id: 'runId', label: 'Run ID', kind: 'text' },\n { id: 'sessionId', label: 'Session ID', kind: 'text' },\n { id: 'requestId', label: 'Request ID', kind: 'text' },\n { id: 'experimentId', label: 'Experiment ID', kind: 'text' },\n ];\n const byLabel = (a: PropertyFilterField, b: PropertyFilterField) => a.label.localeCompare(b.label);\n const pickMulti = fields.filter(f => f.kind === 'pick-multi').sort(byLabel);\n const text = fields.filter(f => f.kind === 'text').sort(byLabel);\n return [...pickMulti, ...text];\n}\n\n/** Parse filter tokens from URL params, preserving insertion order. */\nexport function getMetricsPropertyFilterTokens(searchParams: URLSearchParams): PropertyFilterToken[] {\n const tokens: PropertyFilterToken[] = [];\n\n const paramToFieldId = new Map<string, string>([[METRICS_ROOT_ENTITY_TYPE_PARAM, 'rootEntityType']]);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n paramToFieldId.set(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId], fieldId);\n }\n\n const seen = new Set<string>();\n for (const [paramName] of searchParams.entries()) {\n const fieldId = paramToFieldId.get(paramName);\n if (!fieldId || seen.has(fieldId)) continue;\n seen.add(fieldId);\n\n if (fieldId === 'tags') {\n const raw = searchParams.getAll(paramName);\n if (raw.length === 0) continue;\n tokens.push({ fieldId, value: raw.filter(Boolean) });\n continue;\n }\n\n // Multi-value pick-multi fields: collect all occurrences.\n if (\n fieldId === 'rootEntityType' ||\n fieldId === 'entityName' ||\n fieldId === 'serviceName' ||\n fieldId === 'environment' ||\n fieldId === 'provider' ||\n fieldId === 'model'\n ) {\n const raw = searchParams.getAll(paramName);\n if (raw.length > 1) {\n tokens.push({ fieldId, value: raw });\n continue;\n }\n }\n\n const value = searchParams.get(paramName);\n if (value !== null) tokens.push({ fieldId, value });\n }\n\n return tokens;\n}\n\n/** Return a fresh URLSearchParams containing only metrics filter params. */\nexport function getPreservedMetricsFilterParams(searchParams: URLSearchParams): URLSearchParams {\n const next = new URLSearchParams();\n const rootEntityValues = searchParams.getAll(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const v of rootEntityValues) next.append(METRICS_ROOT_ENTITY_TYPE_PARAM, v);\n\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n const param = METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId];\n const values = searchParams.getAll(param);\n for (const v of values) next.append(param, v);\n }\n return next;\n}\n\n/** Mutate `params` in place: strip every metrics filter param, then re-write\n * them from `tokens` in order. Token insertion order drives URL order so\n * filter pill order is stable across reloads. */\nexport function applyMetricsPropertyFilterTokens(params: URLSearchParams, tokens: PropertyFilterToken[]): void {\n params.delete(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n params.delete(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n\n for (const token of tokens) {\n const paramName =\n token.fieldId === 'rootEntityType'\n ? METRICS_ROOT_ENTITY_TYPE_PARAM\n : METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[token.fieldId as MetricsPropertyFilterFieldId];\n if (!paramName) continue;\n\n if (Array.isArray(token.value)) {\n const values = token.value.filter(v => typeof v === 'string' && v !== '');\n if (values.length === 0) {\n // Keep an empty sentinel for `tags` so the pill survives a Reset.\n if (token.fieldId === 'tags') params.append(paramName, '');\n continue;\n }\n for (const v of values) params.append(paramName, v);\n } else if (typeof token.value === 'string') {\n // Persist even empty / 'Any' strings so newly-created pills (and\n // neutralized-but-still-visible pills after a Reset) survive URL\n // round-trips. `buildMetricsDimensionalFilter` drops these on the API\n // query side so neutrals never reach the backend.\n params.set(paramName, token.value.trim());\n }\n }\n}\n\n/** Shape of the dimensional filter object fed into `MetricsFilter` on client\n * calls. Kept compatible with `metricsFilterSchema` in @internal/core — every\n * scalar field maps to a single-string column filter, and `tags` is the only\n * array field (matched via `has()` / equivalent on backends). */\nexport type { MetricsDimensionalFilter } from '@mastra/react/hooks/metrics';\n\n/** Convert the active token list into a `MetricsFilter`-compatible object.\n *\n * Single-value text fields are assigned as strings; `pick-multi` fields are\n * assigned as string arrays. Empty/neutral values are dropped. */\n/** \"Neutral\" sentinel for single-select pick-multi fields. Emitted by the\n * toolbar's Clear action so pills stay visible after reset; must be stripped\n * before the filter object is sent to the backend (it is not a valid enum\n * option for fields like `rootEntityType`). */\nconst NEUTRAL_PICK_VALUE = 'Any';\n\nfunction isNeutralValue(v: string): boolean {\n const trimmed = v.trim();\n return trimmed === '' || trimmed === NEUTRAL_PICK_VALUE;\n}\n\n/** `rootEntityType` is enum-valued at the backend; URL-supplied or stale stored\n * values can be arbitrary strings, so we validate against the allowed set\n * before letting them reach the filter object. Returns `undefined` if the\n * value isn't a known enum option. */\nconst VALID_ROOT_ENTITY_TYPES: ReadonlySet<EntityTypeValue> = new Set(\n METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => o.entityType),\n);\nfunction toValidRootEntityType(v: string): EntityType | undefined {\n const trimmed = v.trim();\n return VALID_ROOT_ENTITY_TYPES.has(trimmed as EntityTypeValue) ? (trimmed as EntityType) : undefined;\n}\n\nexport function buildMetricsDimensionalFilter(tokens: PropertyFilterToken[]): MetricsDimensionalFilter {\n const result: MetricsDimensionalFilter = {};\n for (const token of tokens) {\n const fieldId = token.fieldId as keyof MetricsDimensionalFilter;\n if (Array.isArray(token.value)) {\n const values = token.value\n .filter((v): v is string => typeof v === 'string')\n .map(v => v.trim())\n .filter(v => !isNeutralValue(v));\n if (values.length === 0) continue;\n if (fieldId === 'tags') {\n result.tags = values;\n } else if (fieldId === 'rootEntityType') {\n const firstValue = values[0];\n const validated = firstValue !== undefined ? toValidRootEntityType(firstValue) : undefined;\n if (validated) result.rootEntityType = validated;\n } else {\n // Backend accepts a single string per dimension; take the first selection.\n (result as Record<string, unknown>)[fieldId] = values[0];\n }\n } else if (typeof token.value === 'string') {\n if (isNeutralValue(token.value)) continue;\n const trimmed = token.value.trim();\n if (fieldId === 'rootEntityType') {\n const validated = toValidRootEntityType(trimmed);\n if (validated) result.rootEntityType = validated;\n } else {\n (result as Record<string, unknown>)[fieldId] = trimmed;\n }\n }\n }\n return result;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"metrics-filters.es.js","sources":["../../../src/domains/metrics/metrics-filters.ts"],"sourcesContent":["import type { EntityType } from '@mastra/core/observability';\nimport type { MetricsDimensionalFilter } from '@mastra/react/hooks/metrics';\nimport { CloudIcon, CpuIcon } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\nimport { traceFilterFieldColor, traceFilterFieldIcon } from '../traces/trace-filters';\nimport type {\n FilterBarField,\n FilterBarItem,\n FilterBarOperator,\n FilterBarOption,\n} from '@/ds/components/FilterBar/types';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\ntype EntityTypeValue = `${EntityType}`;\n\n/** Primitive type options — matches the traces filter vocabulary. */\nexport const METRICS_ROOT_ENTITY_TYPE_OPTIONS = [\n { label: 'Agent', entityType: 'agent' },\n { label: 'Workflow', entityType: 'workflow_run' },\n { label: 'Scorer', entityType: 'scorer' },\n { label: 'Ingest', entityType: 'rag_ingestion' },\n] as const satisfies readonly { label: string; entityType: EntityTypeValue }[];\n\n/** Field IDs that live in dedicated URL params (not the generic `filterX` set). */\nexport const METRICS_SYNTHETIC_FILTER_FIELD_IDS = ['rootEntityType'] as const;\n\nexport const METRICS_ROOT_ENTITY_TYPE_PARAM = 'rootEntityType';\n\n/** URL param name for each generic property filter field. Mirrors traces for\n * cross-page URL consistency (user can copy a trace's filter URL and paste\n * equivalent dimensions into metrics). */\nexport const METRICS_PROPERTY_FILTER_PARAM_BY_FIELD = {\n tags: 'filterTags',\n entityName: 'filterEntityName',\n runId: 'filterRunId',\n threadId: 'filterThreadId',\n sessionId: 'filterSessionId',\n requestId: 'filterRequestId',\n resourceId: 'filterResourceId',\n userId: 'filterUserId',\n organizationId: 'filterOrganizationId',\n serviceName: 'filterServiceName',\n environment: 'filterEnvironment',\n experimentId: 'filterExperimentId',\n provider: 'filterProvider',\n model: 'filterModel',\n} as const;\n\nexport type MetricsPropertyFilterFieldId = keyof typeof METRICS_PROPERTY_FILTER_PARAM_BY_FIELD;\n\nexport const METRICS_PROPERTY_FILTER_FIELD_IDS = Object.keys(\n METRICS_PROPERTY_FILTER_PARAM_BY_FIELD,\n) as Array<MetricsPropertyFilterFieldId>;\n\nconst METRICS_FILTERS_STORAGE_KEY = 'mastra:metrics:saved-filters';\n\n/** Save the current metrics filter URL params so the metrics page can restore\n * them on next visit (same pattern as traces/logs). */\nexport function saveMetricsFiltersToStorage(params: URLSearchParams): void {\n const serialized = getPreservedMetricsFilterParams(params);\n try {\n localStorage.setItem(METRICS_FILTERS_STORAGE_KEY, serialized.toString());\n } catch {\n // localStorage may be unavailable — silently skip.\n }\n}\n\nexport function clearSavedMetricsFilters(): void {\n try {\n localStorage.removeItem(METRICS_FILTERS_STORAGE_KEY);\n } catch {\n // ignore\n }\n}\n\nexport function loadMetricsFiltersFromStorage(): URLSearchParams | null {\n try {\n const raw = localStorage.getItem(METRICS_FILTERS_STORAGE_KEY);\n if (!raw) return null;\n const parsed = new URLSearchParams(raw);\n return parsed.toString() ? parsed : null;\n } catch {\n return null;\n }\n}\n\nexport function hasAnyMetricsFilterParams(params: URLSearchParams): boolean {\n if (params.has(METRICS_ROOT_ENTITY_TYPE_PARAM)) return true;\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n if (params.has(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId])) return true;\n }\n return false;\n}\n\n/** Build the PropertyFilterField list shown in the metrics filter popover.\n *\n * The field order is curated for OLAP efficiency: columnar/LowCardinality\n * dimensions first, then bloom_filter-indexed high-cardinality IDs as\n * free-text. Fields that are expensive to filter without an index are\n * intentionally omitted from this dashboard surface.\n *\n * @deprecated The metrics dashboard filters through `FilterBar`. Use `createMetricsFilterBarFields`. */\nexport function createMetricsPropertyFilterFields({\n availableTags,\n availableEntityNames,\n availableServiceNames,\n availableEnvironments,\n loading,\n}: {\n availableTags: string[];\n availableEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n loading?: {\n tags?: boolean;\n entityNames?: boolean;\n serviceNames?: boolean;\n environments?: boolean;\n };\n}): PropertyFilterField[] {\n const fields: PropertyFilterField[] = [\n {\n id: 'rootEntityType',\n label: 'Primitive type',\n kind: 'pick-multi',\n searchable: false,\n options: METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ label: o.label, value: o.entityType })),\n placeholder: 'Choose entity type',\n emptyText: 'No entity types.',\n },\n {\n id: 'entityName',\n label: 'Primitive name',\n kind: 'pick-multi',\n options: availableEntityNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose entity names',\n emptyText: 'No entity names found.',\n isLoading: loading?.entityNames,\n },\n {\n id: 'tags',\n label: 'Tags',\n kind: 'pick-multi',\n multi: true,\n options: availableTags.map(tag => ({ label: tag, value: tag })),\n placeholder: 'Choose tags',\n emptyText: 'No tags found.',\n isLoading: loading?.tags,\n },\n {\n id: 'serviceName',\n label: 'Service Name',\n kind: 'pick-multi',\n options: availableServiceNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose service names',\n emptyText: 'No service names found.',\n isLoading: loading?.serviceNames,\n },\n {\n id: 'environment',\n label: 'Environment',\n kind: 'pick-multi',\n options: availableEnvironments.map(env => ({ label: env, value: env })),\n placeholder: 'Choose environments',\n emptyText: 'No environments found.',\n isLoading: loading?.environments,\n },\n // Provider / model are filterable by URL (filterProvider / filterModel) but\n // are omitted from the popover until we expose a discovery endpoint.\n // High-cardinality IDs — free-text. Backed by bloom_filter skip indexes on\n // ClickHouse, narrow timestamp range pruning on DuckDB.\n { id: 'threadId', label: 'Thread ID', kind: 'text' },\n { id: 'resourceId', label: 'Resource ID', kind: 'text' },\n { id: 'userId', label: 'User ID', kind: 'text' },\n { id: 'organizationId', label: 'Organization ID', kind: 'text' },\n { id: 'runId', label: 'Run ID', kind: 'text' },\n { id: 'sessionId', label: 'Session ID', kind: 'text' },\n { id: 'requestId', label: 'Request ID', kind: 'text' },\n { id: 'experimentId', label: 'Experiment ID', kind: 'text' },\n ];\n const byLabel = (a: PropertyFilterField, b: PropertyFilterField) => a.label.localeCompare(b.label);\n const pickMulti = fields.filter(f => f.kind === 'pick-multi').sort(byLabel);\n const text = fields.filter(f => f.kind === 'text').sort(byLabel);\n return [...pickMulti, ...text];\n}\n\ntype MetricsFilterBarFieldId = MetricsPropertyFilterFieldId | 'rootEntityType';\n\nconst METRICS_TAGS_OPERATOR_ID = 'hasAll';\n\n/** Operators of the metrics filter bar. The metrics API matches one value per dimension, so `is`\n * never widens to \"is any of\", and it requires every listed tag. */\nexport const METRICS_FILTER_BAR_OPERATORS: FilterBarOperator[] = [\n { id: 'is', label: 'is' },\n { id: METRICS_TAGS_OPERATOR_ID, label: 'has all of', arity: 'many' },\n];\n\n/** Same labels as the trace filters, so a dimension reads the same on Metrics and Traces. */\nconst METRICS_FILTER_BAR_LABELS: Record<MetricsFilterBarFieldId, string> = {\n rootEntityType: 'Primitive type',\n entityName: 'Primitive name',\n tags: 'Tags',\n serviceName: 'Service Name',\n environment: 'Environment',\n threadId: 'Thread ID',\n resourceId: 'Resource ID',\n userId: 'User ID',\n organizationId: 'Organization ID',\n runId: 'Run ID',\n sessionId: 'Session ID',\n requestId: 'Request ID',\n experimentId: 'Experiment ID',\n provider: 'Provider',\n model: 'Model',\n};\n\n/** Icons for the dimensions the trace filters key differently (`spans.provider`, `spans.model`). */\nconst METRICS_FILTER_BAR_ICONS: Partial<Record<MetricsFilterBarFieldId, LucideIcon>> = {\n provider: CloudIcon,\n model: CpuIcon,\n};\n\nconst METRICS_FILTER_BAR_TEXT_FIELD_IDS = [\n 'threadId',\n 'resourceId',\n 'userId',\n 'organizationId',\n 'runId',\n 'sessionId',\n 'requestId',\n 'experimentId',\n] as const satisfies readonly MetricsFilterBarFieldId[];\n\nconst metricsFieldBase = (id: MetricsFilterBarFieldId) => ({\n id,\n label: METRICS_FILTER_BAR_LABELS[id],\n icon: METRICS_FILTER_BAR_ICONS[id] ?? traceFilterFieldIcon(id),\n color: traceFilterFieldColor(id),\n});\n\nconst byFieldLabel = (a: FilterBarField, b: FilterBarField) => a.label.localeCompare(b.label);\n\n/** FilterBar fields for the metrics dashboard, in the same order as before: discovered\n * dimensions first, then the high-cardinality IDs as free text. Provider and model are\n * never offered (there is no discovery endpoint for them yet) but still label the chips\n * that links bring in through `filterProvider` / `filterModel`. */\nexport function createMetricsFilterBarFields({\n availableTags,\n availableEntityNames,\n availableServiceNames,\n availableEnvironments,\n}: {\n availableTags: string[];\n availableEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n}): FilterBarField[] {\n const pick = (id: MetricsFilterBarFieldId, suggestions: FilterBarOption[]): FilterBarField => ({\n ...metricsFieldBase(id),\n operators: ['is'],\n strict: true,\n suggestions,\n });\n const text = (id: MetricsFilterBarFieldId): FilterBarField => ({ ...metricsFieldBase(id), operators: ['is'] });\n const options = (values: string[]) => values.map(value => ({ value }));\n\n const pickFields: FilterBarField[] = [\n pick(\n 'rootEntityType',\n METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ value: o.entityType, label: o.label })),\n ),\n pick('entityName', options(availableEntityNames)),\n { ...pick('tags', options(availableTags)), operators: [METRICS_TAGS_OPERATOR_ID] },\n pick('serviceName', options(availableServiceNames)),\n pick('environment', options(availableEnvironments)),\n ];\n const textFields = METRICS_FILTER_BAR_TEXT_FIELD_IDS.map(text);\n const urlOnlyFields = (['provider', 'model'] as const).map(id => ({ ...text(id), hidden: true }));\n\n return [...pickFields.toSorted(byFieldLabel), ...textFields.toSorted(byFieldLabel), ...urlOnlyFields];\n}\n\n/** One FilterBar item per token, keyed by field id so chip order == URL order. Empty values\n * are kept: they are chips whose value hasn't been picked yet. The legacy 'Any' sentinel\n * reads as empty, and a repeated single-value param keeps its first value, which is the one\n * the metrics API applies. */\nexport function metricsTokensToFilterBarItems(tokens: PropertyFilterToken[]): FilterBarItem[] {\n return tokens.map(token => {\n if (token.fieldId === 'tags') {\n const value = [token.value].flat().filter(tag => tag !== '');\n return { id: token.fieldId, fieldId: token.fieldId, operatorId: METRICS_TAGS_OPERATOR_ID, value };\n }\n const value = Array.isArray(token.value) ? (token.value[0] ?? '') : token.value;\n return { id: token.fieldId, fieldId: token.fieldId, operatorId: 'is', value: isNeutralValue(value) ? '' : value };\n });\n}\n\nexport function filterBarItemsToMetricsTokens(items: FilterBarItem[]): PropertyFilterToken[] {\n return items.map(item => ({\n fieldId: item.fieldId,\n value: Array.isArray(item.value) ? item.value.map(String) : String(item.value),\n }));\n}\n\n/** Parse filter tokens from URL params, preserving insertion order. */\nexport function getMetricsPropertyFilterTokens(searchParams: URLSearchParams): PropertyFilterToken[] {\n const tokens: PropertyFilterToken[] = [];\n\n const paramToFieldId = new Map<string, string>([[METRICS_ROOT_ENTITY_TYPE_PARAM, 'rootEntityType']]);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n paramToFieldId.set(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId], fieldId);\n }\n\n const seen = new Set<string>();\n for (const [paramName] of searchParams.entries()) {\n const fieldId = paramToFieldId.get(paramName);\n if (!fieldId || seen.has(fieldId)) continue;\n seen.add(fieldId);\n\n if (fieldId === 'tags') {\n const raw = searchParams.getAll(paramName);\n if (raw.length === 0) continue;\n tokens.push({ fieldId, value: raw.filter(Boolean) });\n continue;\n }\n\n // Multi-value pick-multi fields: collect all occurrences.\n if (\n fieldId === 'rootEntityType' ||\n fieldId === 'entityName' ||\n fieldId === 'serviceName' ||\n fieldId === 'environment' ||\n fieldId === 'provider' ||\n fieldId === 'model'\n ) {\n const raw = searchParams.getAll(paramName);\n if (raw.length > 1) {\n tokens.push({ fieldId, value: raw });\n continue;\n }\n }\n\n const value = searchParams.get(paramName);\n if (value !== null) tokens.push({ fieldId, value });\n }\n\n return tokens;\n}\n\n/** Return a fresh URLSearchParams containing only metrics filter params. */\nexport function getPreservedMetricsFilterParams(searchParams: URLSearchParams): URLSearchParams {\n const next = new URLSearchParams();\n const rootEntityValues = searchParams.getAll(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const v of rootEntityValues) next.append(METRICS_ROOT_ENTITY_TYPE_PARAM, v);\n\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n const param = METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId];\n const values = searchParams.getAll(param);\n for (const v of values) next.append(param, v);\n }\n return next;\n}\n\n/** Mutate `params` in place: strip every metrics filter param, then re-write\n * them from `tokens` in order. Token insertion order drives URL order so\n * filter pill order is stable across reloads. */\nexport function applyMetricsPropertyFilterTokens(params: URLSearchParams, tokens: PropertyFilterToken[]): void {\n params.delete(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n params.delete(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n\n for (const token of tokens) {\n const paramName =\n token.fieldId === 'rootEntityType'\n ? METRICS_ROOT_ENTITY_TYPE_PARAM\n : METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[token.fieldId as MetricsPropertyFilterFieldId];\n if (!paramName) continue;\n\n if (Array.isArray(token.value)) {\n const values = token.value.filter(v => typeof v === 'string' && v !== '');\n if (values.length === 0) {\n // Keep an empty sentinel for `tags` so the pill survives a Reset.\n if (token.fieldId === 'tags') params.append(paramName, '');\n continue;\n }\n for (const v of values) params.append(paramName, v);\n } else if (typeof token.value === 'string') {\n // Persist even empty / 'Any' strings so newly-created pills (and\n // neutralized-but-still-visible pills after a Reset) survive URL\n // round-trips. `buildMetricsDimensionalFilter` drops these on the API\n // query side so neutrals never reach the backend.\n params.set(paramName, token.value.trim());\n }\n }\n}\n\n/** Shape of the dimensional filter object fed into `MetricsFilter` on client\n * calls. Kept compatible with `metricsFilterSchema` in @internal/core — every\n * scalar field maps to a single-string column filter, and `tags` is the only\n * array field (matched via `has()` / equivalent on backends). */\nexport type { MetricsDimensionalFilter } from '@mastra/react/hooks/metrics';\n\n/** Convert the active token list into a `MetricsFilter`-compatible object.\n *\n * Single-value text fields are assigned as strings; `pick-multi` fields are\n * assigned as string arrays. Empty/neutral values are dropped. */\n/** \"Neutral\" sentinel for single-select pick-multi fields. Emitted by the\n * toolbar's Clear action so pills stay visible after reset; must be stripped\n * before the filter object is sent to the backend (it is not a valid enum\n * option for fields like `rootEntityType`). */\nconst NEUTRAL_PICK_VALUE = 'Any';\n\nfunction isNeutralValue(v: string): boolean {\n const trimmed = v.trim();\n return trimmed === '' || trimmed === NEUTRAL_PICK_VALUE;\n}\n\n/** `rootEntityType` is enum-valued at the backend; URL-supplied or stale stored\n * values can be arbitrary strings, so we validate against the allowed set\n * before letting them reach the filter object. Returns `undefined` if the\n * value isn't a known enum option. */\nconst VALID_ROOT_ENTITY_TYPES: ReadonlySet<EntityTypeValue> = new Set(\n METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => o.entityType),\n);\nfunction toValidRootEntityType(v: string): EntityType | undefined {\n const trimmed = v.trim();\n return VALID_ROOT_ENTITY_TYPES.has(trimmed as EntityTypeValue) ? (trimmed as EntityType) : undefined;\n}\n\nexport function buildMetricsDimensionalFilter(tokens: PropertyFilterToken[]): MetricsDimensionalFilter {\n const result: MetricsDimensionalFilter = {};\n for (const token of tokens) {\n const fieldId = token.fieldId as keyof MetricsDimensionalFilter;\n if (Array.isArray(token.value)) {\n const values = token.value\n .filter((v): v is string => typeof v === 'string')\n .map(v => v.trim())\n .filter(v => !isNeutralValue(v));\n if (values.length === 0) continue;\n if (fieldId === 'tags') {\n result.tags = values;\n } else if (fieldId === 'rootEntityType') {\n const firstValue = values[0];\n const validated = firstValue !== undefined ? toValidRootEntityType(firstValue) : undefined;\n if (validated) result.rootEntityType = validated;\n } else {\n // Backend accepts a single string per dimension; take the first selection.\n (result as Record<string, unknown>)[fieldId] = values[0];\n }\n } else if (typeof token.value === 'string') {\n if (isNeutralValue(token.value)) continue;\n const trimmed = token.value.trim();\n if (fieldId === 'rootEntityType') {\n const validated = toValidRootEntityType(trimmed);\n if (validated) result.rootEntityType = validated;\n } else {\n (result as Record<string, unknown>)[fieldId] = trimmed;\n }\n }\n }\n return result;\n}\n"],"names":["value"],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
|
|
5
5
|
const domains_metrics_components_dateRangeSelector = require('./metrics/components/date-range-selector.cjs.js');
|
|
6
|
+
const domains_metrics_components_metricsTimeRangeChip = require('./metrics/components/metrics-time-range-chip.cjs.js');
|
|
6
7
|
const domains_metrics_components_cardActionButtons = require('./metrics/components/card-action-buttons.cjs.js');
|
|
7
8
|
const domains_metrics_components_chartArea = require('./metrics/components/chart-area.cjs.js');
|
|
8
9
|
const domains_metrics_components_chartCard = require('./metrics/components/chart-card.cjs.js');
|
|
@@ -34,6 +35,7 @@ const domains_metrics_lib_bucketLabels = require('./metrics/lib/bucket-labels.cj
|
|
|
34
35
|
|
|
35
36
|
|
|
36
37
|
exports.DateRangeSelector = domains_metrics_components_dateRangeSelector.DateRangeSelector;
|
|
38
|
+
exports.MetricsTimeRangeChip = domains_metrics_components_metricsTimeRangeChip.MetricsTimeRangeChip;
|
|
37
39
|
exports.OpenErrorsInLogsButton = domains_metrics_components_cardActionButtons.OpenErrorsInLogsButton;
|
|
38
40
|
exports.OpenInTracesButton = domains_metrics_components_cardActionButtons.OpenInTracesButton;
|
|
39
41
|
exports.ChartArea = domains_metrics_components_chartArea.ChartArea;
|
|
@@ -116,13 +118,17 @@ Object.defineProperty(exports, "useTraceVolumeMetrics", {
|
|
|
116
118
|
});
|
|
117
119
|
exports.buildLogsDrilldownUrl = domains_metrics_drilldown.buildLogsDrilldownUrl;
|
|
118
120
|
exports.buildTracesDrilldownUrl = domains_metrics_drilldown.buildTracesDrilldownUrl;
|
|
121
|
+
exports.METRICS_FILTER_BAR_OPERATORS = domains_metrics_metricsFilters.METRICS_FILTER_BAR_OPERATORS;
|
|
119
122
|
exports.applyMetricsPropertyFilterTokens = domains_metrics_metricsFilters.applyMetricsPropertyFilterTokens;
|
|
120
123
|
exports.buildMetricsDimensionalFilter = domains_metrics_metricsFilters.buildMetricsDimensionalFilter;
|
|
121
124
|
exports.clearSavedMetricsFilters = domains_metrics_metricsFilters.clearSavedMetricsFilters;
|
|
125
|
+
exports.createMetricsFilterBarFields = domains_metrics_metricsFilters.createMetricsFilterBarFields;
|
|
122
126
|
exports.createMetricsPropertyFilterFields = domains_metrics_metricsFilters.createMetricsPropertyFilterFields;
|
|
127
|
+
exports.filterBarItemsToMetricsTokens = domains_metrics_metricsFilters.filterBarItemsToMetricsTokens;
|
|
123
128
|
exports.getMetricsPropertyFilterTokens = domains_metrics_metricsFilters.getMetricsPropertyFilterTokens;
|
|
124
129
|
exports.hasAnyMetricsFilterParams = domains_metrics_metricsFilters.hasAnyMetricsFilterParams;
|
|
125
130
|
exports.loadMetricsFiltersFromStorage = domains_metrics_metricsFilters.loadMetricsFiltersFromStorage;
|
|
131
|
+
exports.metricsTokensToFilterBarItems = domains_metrics_metricsFilters.metricsTokensToFilterBarItems;
|
|
126
132
|
exports.saveMetricsFiltersToStorage = domains_metrics_metricsFilters.saveMetricsFiltersToStorage;
|
|
127
133
|
exports.useMetricsActivity = domains_metrics_hooks_useMetricsActivity.useMetricsActivity;
|
|
128
134
|
exports.useMetricsLatency = domains_metrics_hooks_useMetricsLatency.useMetricsLatency;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metrics.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { DateRangeSelector } from './metrics/components/date-range-selector.es.js';
|
|
2
|
+
export { MetricsTimeRangeChip } from './metrics/components/metrics-time-range-chip.es.js';
|
|
2
3
|
export { OpenErrorsInLogsButton, OpenInTracesButton } from './metrics/components/card-action-buttons.es.js';
|
|
3
4
|
export { ChartArea } from './metrics/components/chart-area.es.js';
|
|
4
5
|
export { ChartCard } from './metrics/components/chart-card.es.js';
|
|
@@ -17,7 +18,7 @@ export { DATE_PRESETS, MetricsProvider, isValidPreset, useMetrics } from './metr
|
|
|
17
18
|
export { useMetricsFilters } from './metrics/hooks/use-metrics-filters.es.js';
|
|
18
19
|
export { chooseMetricsInterval, formatMetricsBucketLabel, useActiveResourcesKpiMetrics, useActiveThreadsKpiMetrics, useAgentRunsKpiMetrics, useLatencyMetrics, useModelCostKpiMetrics, useModelUsageCostMetrics, useScoresMetrics, useTokenUsageByAgentMetrics, useTokenUsageTimeSeries, useTopActiveThreadsMetrics, useTopResourcesByThreadsMetrics, useTotalTokensKpiMetrics, useTraceVolumeMetrics } from '@mastra/react/hooks/metrics';
|
|
19
20
|
export { buildLogsDrilldownUrl, buildTracesDrilldownUrl } from './metrics/drilldown.es.js';
|
|
20
|
-
export { applyMetricsPropertyFilterTokens, buildMetricsDimensionalFilter, clearSavedMetricsFilters, createMetricsPropertyFilterFields, getMetricsPropertyFilterTokens, hasAnyMetricsFilterParams, loadMetricsFiltersFromStorage, saveMetricsFiltersToStorage } from './metrics/metrics-filters.es.js';
|
|
21
|
+
export { METRICS_FILTER_BAR_OPERATORS, applyMetricsPropertyFilterTokens, buildMetricsDimensionalFilter, clearSavedMetricsFilters, createMetricsFilterBarFields, createMetricsPropertyFilterFields, filterBarItemsToMetricsTokens, getMetricsPropertyFilterTokens, hasAnyMetricsFilterParams, loadMetricsFiltersFromStorage, metricsTokensToFilterBarItems, saveMetricsFiltersToStorage } from './metrics/metrics-filters.es.js';
|
|
21
22
|
export { useMetricsActivity } from './metrics/hooks/use-metrics-activity.es.js';
|
|
22
23
|
export { useMetricsLatency } from './metrics/hooks/use-metrics-latency.es.js';
|
|
23
24
|
export { useMetricsScores } from './metrics/hooks/use-metrics-scores.es.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metrics.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -8,7 +8,7 @@ const React = require('react');
|
|
|
8
8
|
const domains_scores_components_scoreAsItemDialog = require('./score-as-item-dialog.cjs.js');
|
|
9
9
|
const Button = require('../../../Button-CAVPKK09.cjs');
|
|
10
10
|
const dataKeysAndValues = require('../../../data-keys-and-values-C1I--hWn.cjs');
|
|
11
|
-
const dataPanel = require('../../../data-panel-
|
|
11
|
+
const dataPanel = require('../../../data-panel-CtFwwsPs.cjs');
|
|
12
12
|
const Txt = require('../../../Txt-DXjXpX9r.cjs');
|
|
13
13
|
const lib_framework = require('../../../lib/framework.cjs.js');
|
|
14
14
|
const utils_cn = require('../../../cn-TqD01zH-.cjs');
|
|
@@ -4,7 +4,7 @@ import { useState } from 'react';
|
|
|
4
4
|
import { ScoreAsItemDialog } from './score-as-item-dialog.es.js';
|
|
5
5
|
import { B as Button } from '../../../Button-60jVnaHt.js';
|
|
6
6
|
import { D as DataKeysAndValues } from '../../../data-keys-and-values-B1u00ihh.js';
|
|
7
|
-
import { D as DataPanel } from '../../../data-panel-
|
|
7
|
+
import { D as DataPanel } from '../../../data-panel-CwIdwpov.js';
|
|
8
8
|
import { T as Txt } from '../../../Txt-BuzYj7Vy.js';
|
|
9
9
|
import { useLinkComponent } from '../../../lib/framework.es.js';
|
|
10
10
|
import { c as cn } from '../../../cn-coERSHz5.js';
|
|
@@ -6,13 +6,13 @@ const jsxRuntime = require('react/jsx-runtime');
|
|
|
6
6
|
const scores = require('@mastra/react/hooks/scores');
|
|
7
7
|
const lucideReact = require('lucide-react');
|
|
8
8
|
const React = require('react');
|
|
9
|
-
const combobox = require('../../../combobox-
|
|
9
|
+
const combobox = require('../../../combobox-CdTP_FZ0.cjs');
|
|
10
10
|
require('@base-ui/react/combobox');
|
|
11
|
-
const dialog = require('../../../dialog-
|
|
11
|
+
const dialog = require('../../../dialog-BAlSUqcF.cjs');
|
|
12
12
|
const Notice = require('../../../Notice-c8dMiAtZ.cjs');
|
|
13
13
|
const textAndIcon = require('../../../text-and-icon-BJ5wgYf5.cjs');
|
|
14
14
|
const toast = require('../../../toast-C8a7bWV8.cjs');
|
|
15
|
-
const dialogAction = require('../../../dialog-action-
|
|
15
|
+
const dialogAction = require('../../../dialog-action-DWE9XalB.cjs');
|
|
16
16
|
|
|
17
17
|
function SpanScoring({
|
|
18
18
|
traceId,
|
|
@@ -2,13 +2,13 @@ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { useTriggerScorer } from '@mastra/react/hooks/scores';
|
|
3
3
|
import { InfoIcon } from 'lucide-react';
|
|
4
4
|
import { useState } from 'react';
|
|
5
|
-
import { C as Combobox } from '../../../combobox-
|
|
5
|
+
import { C as Combobox } from '../../../combobox-CeYDCkXk.js';
|
|
6
6
|
import '@base-ui/react/combobox';
|
|
7
|
-
import { a as DialogBody, f as DialogFooter, b as DialogCancel, e as DialogDescription } from '../../../dialog-
|
|
7
|
+
import { a as DialogBody, f as DialogFooter, b as DialogCancel, e as DialogDescription } from '../../../dialog-CboDo8Pj.js';
|
|
8
8
|
import { N as Notice } from '../../../Notice-Wy1grdLu.js';
|
|
9
9
|
import { T as TextAndIcon } from '../../../text-and-icon-CGupOpWs.js';
|
|
10
10
|
import { t as toast } from '../../../toast-WCmYXnuT.js';
|
|
11
|
-
import { D as DialogAction } from '../../../dialog-action-
|
|
11
|
+
import { D as DialogAction } from '../../../dialog-action-DpctEQ9l.js';
|
|
12
12
|
|
|
13
13
|
function SpanScoring({
|
|
14
14
|
traceId,
|