@mastra/playground-ui 68.0.0-alpha.0 → 68.0.0-alpha.2
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/{ActionRow-BfK77pCT.cjs → ActionRow-BlC9GAef.cjs} +4 -4
- package/dist/ActionRow-BlC9GAef.cjs.map +1 -0
- package/dist/{ActionRow-Cd6tOC2K.js → ActionRow-DCrRCvBq.js} +4 -4
- package/dist/ActionRow-DCrRCvBq.js.map +1 -0
- package/dist/{Button-Bw1e3ONi.js → Button-CLXTbAY8.js} +42 -13
- package/dist/Button-CLXTbAY8.js.map +1 -0
- package/dist/{Button-YQRflC47.cjs → Button-DLcMcuUL.cjs} +58 -11
- package/dist/Button-DLcMcuUL.cjs.map +1 -0
- package/dist/{CodeEditor-CJ9jC9lu.cjs → CodeEditor-CLzs0yVc.cjs} +4 -4
- package/dist/{CodeEditor-CJ9jC9lu.cjs.map → CodeEditor-CLzs0yVc.cjs.map} +1 -1
- package/dist/{CodeEditor-CPVxj7WS.js → CodeEditor-COnz9c6B.js} +4 -4
- package/dist/{CodeEditor-CPVxj7WS.js.map → CodeEditor-COnz9c6B.js.map} +1 -1
- package/dist/{Comment-VFJq2wRp.js → Comment-0n98b_f_.js} +3 -3
- package/dist/{Comment-VFJq2wRp.js.map → Comment-0n98b_f_.js.map} +1 -1
- package/dist/{Comment-KYUQzeSu.cjs → Comment-Cg0f7eLa.cjs} +3 -3
- package/dist/{Comment-KYUQzeSu.cjs.map → Comment-Cg0f7eLa.cjs.map} +1 -1
- package/dist/{DataCodeSection-CZRPsStI.cjs → DataCodeSection-CFxXsQWH.cjs} +10 -10
- package/dist/DataCodeSection-CFxXsQWH.cjs.map +1 -0
- package/dist/{DataCodeSection-Ckd47p_S.js → DataCodeSection-PY9XEg2C.js} +8 -8
- package/dist/DataCodeSection-PY9XEg2C.js.map +1 -0
- package/dist/{DataDetailsPanel-_CK0Huk6.js → DataDetailsPanel-CohEKPm4.js} +5 -5
- package/dist/{DataDetailsPanel-_CK0Huk6.js.map → DataDetailsPanel-CohEKPm4.js.map} +1 -1
- package/dist/{DataDetailsPanel-DFhM9H5D.cjs → DataDetailsPanel-DiyjEXqK.cjs} +6 -6
- package/dist/{DataDetailsPanel-DFhM9H5D.cjs.map → DataDetailsPanel-DiyjEXqK.cjs.map} +1 -1
- package/dist/{DataList-2tIlQsLc.js → DataList-CUhRQAv6.js} +2 -2
- package/dist/{DataList-2tIlQsLc.js.map → DataList-CUhRQAv6.js.map} +1 -1
- package/dist/{DataList-Czwmwyvp.cjs → DataList-Cj0mfk19.cjs} +2 -2
- package/dist/{DataList-Czwmwyvp.cjs.map → DataList-Cj0mfk19.cjs.map} +1 -1
- package/dist/{DataPanel-C0Ll76Ne.cjs → DataPanel-Coc9h35I.cjs} +3 -3
- package/dist/{DataPanel-C0Ll76Ne.cjs.map → DataPanel-Coc9h35I.cjs.map} +1 -1
- package/dist/{DataPanel-CY1W5LHJ.js → DataPanel-IgB9D5PO.js} +3 -3
- package/dist/{DataPanel-CY1W5LHJ.js.map → DataPanel-IgB9D5PO.js.map} +1 -1
- package/dist/{Dialog-CjaiCrkv.cjs → Dialog-BvWF9HE-.cjs} +2 -2
- package/dist/{Dialog-CjaiCrkv.cjs.map → Dialog-BvWF9HE-.cjs.map} +1 -1
- package/dist/{Dialog-CKtTR8h3.js → Dialog-DaWtxwd9.js} +2 -2
- package/dist/{Dialog-CKtTR8h3.js.map → Dialog-DaWtxwd9.js.map} +1 -1
- package/dist/{ErrorBoundary-Bm0LL_b7.cjs → ErrorBoundary-B5GjmA6V.cjs} +2 -2
- package/dist/{ErrorBoundary-Bm0LL_b7.cjs.map → ErrorBoundary-B5GjmA6V.cjs.map} +1 -1
- package/dist/{ErrorBoundary-95_6A77S.js → ErrorBoundary-Cat3KU86.js} +2 -2
- package/dist/{ErrorBoundary-95_6A77S.js.map → ErrorBoundary-Cat3KU86.js.map} +1 -1
- package/dist/{FilterBar--4oguuVe.js → FilterBar-BgW2dqRQ.js} +21 -25
- package/dist/FilterBar-BgW2dqRQ.js.map +1 -0
- package/dist/{FilterBar-BUd4f7oi.cjs → FilterBar-CQl04O6t.cjs} +21 -25
- package/dist/FilterBar-CQl04O6t.cjs.map +1 -0
- package/dist/{LogsDataList-Cslabh8K.js → LogsDataList-BI2C5OJz.js} +2 -2
- package/dist/{LogsDataList-Cslabh8K.js.map → LogsDataList-BI2C5OJz.js.map} +1 -1
- package/dist/{LogsDataList-DMmxAt_t.cjs → LogsDataList-CCIfUPGo.cjs} +2 -2
- package/dist/{LogsDataList-DMmxAt_t.cjs.map → LogsDataList-CCIfUPGo.cjs.map} +1 -1
- package/dist/{MarkdownRenderer-DME2xKTk.js → MarkdownRenderer-2GOXQJEv.js} +3 -3
- package/dist/{MarkdownRenderer-DME2xKTk.js.map → MarkdownRenderer-2GOXQJEv.js.map} +1 -1
- package/dist/{MarkdownRenderer-CS6u5drO.cjs → MarkdownRenderer-CB8Z_CHc.cjs} +4 -4
- package/dist/{MarkdownRenderer-CS6u5drO.cjs.map → MarkdownRenderer-CB8Z_CHc.cjs.map} +1 -1
- package/dist/{Message-nVI6tMS3.js → Message-CWzi5F_Q.js} +2 -2
- package/dist/{Message-nVI6tMS3.js.map → Message-CWzi5F_Q.js.map} +1 -1
- package/dist/{Message-DsCNQpou.cjs → Message-jj56lxNL.cjs} +2 -2
- package/dist/{Message-DsCNQpou.cjs.map → Message-jj56lxNL.cjs.map} +1 -1
- package/dist/{MetricsTable-D-aZf3dk.cjs → MetricsTable-BSl81oNe.cjs} +44 -9
- package/dist/MetricsTable-BSl81oNe.cjs.map +1 -0
- package/dist/{MetricsTable-CRPeLHe1.js → MetricsTable-DID6LRoP.js} +44 -9
- package/dist/MetricsTable-DID6LRoP.js.map +1 -0
- package/dist/{Notice-CyKngbbv.js → Notice-C-8oOZZF.js} +2 -2
- package/dist/{Notice-CyKngbbv.js.map → Notice-C-8oOZZF.js.map} +1 -1
- package/dist/{Notice-DWNeCe-t.cjs → Notice-JZ7SW7q6.cjs} +2 -2
- package/dist/{Notice-DWNeCe-t.cjs.map → Notice-JZ7SW7q6.cjs.map} +1 -1
- package/dist/{Workflow-BVWvgDmI.js → Workflow-C3SlEdP-.js} +5 -5
- package/dist/{Workflow-BVWvgDmI.js.map → Workflow-C3SlEdP-.js.map} +1 -1
- package/dist/{Workflow-BeF6pIO9.cjs → Workflow-DSWQ-ROz.cjs} +5 -5
- package/dist/{Workflow-BeF6pIO9.cjs.map → Workflow-DSWQ-ROz.cjs.map} +1 -1
- package/dist/{activity-DAK8tj7r.cjs → activity-DyB5H3gF.cjs} +2 -2
- package/dist/{activity-DAK8tj7r.cjs.map → activity-DyB5H3gF.cjs.map} +1 -1
- package/dist/{activity-CM34JyW-.js → activity-rJ1NQl_2.js} +2 -2
- package/dist/{activity-CM34JyW-.js.map → activity-rJ1NQl_2.js.map} +1 -1
- package/dist/{ask-user-C82m_G9W.cjs → ask-user-C1p2PEYe.cjs} +3 -3
- package/dist/ask-user-C1p2PEYe.cjs.map +1 -0
- package/dist/{ask-user-BdjH9F7G.js → ask-user-DPznrqGO.js} +3 -3
- package/dist/ask-user-DPznrqGO.js.map +1 -0
- package/dist/buttons-group-Dc6R7YSs.cjs +48 -0
- package/dist/buttons-group-Dc6R7YSs.cjs.map +1 -0
- package/dist/buttons-group-DkFlnMiL.js +35 -0
- package/dist/buttons-group-DkFlnMiL.js.map +1 -0
- package/dist/{ButtonsGroup.css → buttons-group.css} +2 -0
- package/dist/chart-plot.css +5 -4
- package/dist/clear-filters-button-Buc973vw.cjs +27 -0
- package/dist/clear-filters-button-Buc973vw.cjs.map +1 -0
- package/dist/clear-filters-button-CNrRuHOY.js +22 -0
- package/dist/clear-filters-button-CNrRuHOY.js.map +1 -0
- package/dist/{combobox-wFudhN8F.js → combobox-D21no8t5.js} +5 -5
- package/dist/{combobox-wFudhN8F.js.map → combobox-D21no8t5.js.map} +1 -1
- package/dist/{combobox-8kNAJFlj.cjs → combobox-DIT_6xiG.cjs} +5 -5
- package/dist/combobox-DIT_6xiG.cjs.map +1 -0
- package/dist/{combobox-parts-BZVXwbG7.cjs → combobox-parts-C4phOq4t.cjs} +10 -18
- package/dist/combobox-parts-C4phOq4t.cjs.map +1 -0
- package/dist/{combobox-parts-W7KRQUsV.js → combobox-parts-D90ir0Py.js} +11 -19
- package/dist/combobox-parts-D90ir0Py.js.map +1 -0
- package/dist/components/ActionRow.cjs.js +1 -1
- package/dist/components/ActionRow.es.js +1 -1
- package/dist/components/AlertDialog.cjs.js +2 -2
- package/dist/components/AlertDialog.es.js +2 -2
- package/dist/components/Button.cjs.js +4 -1
- package/dist/components/Button.es.js +2 -2
- package/dist/components/ButtonsGroup.cjs.js +3 -38
- package/dist/components/ButtonsGroup.es.js +1 -35
- package/dist/components/ClampedText.cjs.js +1 -1
- package/dist/components/ClampedText.es.js +1 -1
- package/dist/components/ClearFiltersButton.cjs.js +3 -0
- package/dist/components/ClearFiltersButton.d.ts +1 -0
- package/dist/components/ClearFiltersButton.es.js +1 -0
- package/dist/components/CodeBlock.cjs.js +3 -3
- package/dist/components/CodeBlock.es.js +3 -3
- package/dist/components/CodeEditor.cjs.js +1 -1
- package/dist/components/CodeEditor.es.js +1 -1
- package/dist/components/CollapsibleBox.cjs.js +1 -1
- package/dist/components/CollapsibleBox.es.js +1 -1
- package/dist/components/Combobox.cjs.js +2 -2
- package/dist/components/Combobox.es.js +2 -2
- package/dist/components/Command.cjs.js +3 -2
- package/dist/components/Command.cjs.js.map +1 -1
- package/dist/components/Command.es.js +3 -2
- package/dist/components/Command.es.js.map +1 -1
- package/dist/components/Comment.cjs.js +1 -1
- package/dist/components/Comment.es.js +1 -1
- package/dist/components/CopyButton.cjs.js +1 -1
- package/dist/components/CopyButton.es.js +1 -1
- package/dist/components/DataCodeSection.cjs.js +1 -1
- package/dist/components/DataCodeSection.es.js +1 -1
- package/dist/components/DataDetailsPanel.cjs.js +1 -1
- package/dist/components/DataDetailsPanel.es.js +1 -1
- package/dist/components/DataList.cjs.js +3 -3
- package/dist/components/DataList.es.js +3 -3
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.es.js +1 -1
- package/dist/components/DateRangeTimeline.cjs.js +1 -1
- package/dist/components/DateRangeTimeline.es.js +1 -1
- package/dist/components/DateTimePicker.cjs.js +3 -3
- package/dist/components/DateTimePicker.cjs.js.map +1 -1
- package/dist/components/DateTimePicker.es.js +3 -3
- package/dist/components/DateTimePicker.es.js.map +1 -1
- package/dist/components/DateTimeRangePicker.cjs.js +2 -2
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/Dialog.cjs.js +1 -1
- package/dist/components/Dialog.es.js +1 -1
- package/dist/components/DisabledFeatureButton.cjs.js +1 -1
- package/dist/components/DisabledFeatureButton.es.js +1 -1
- package/dist/components/Drawer.cjs.js +1 -1
- package/dist/components/Drawer.es.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +4 -4
- package/dist/components/EnvironmentVariablesEditor.es.js +4 -4
- package/dist/components/ErrorBoundary.cjs.js +1 -1
- package/dist/components/ErrorBoundary.es.js +1 -1
- package/dist/components/FilterBar.cjs.js +7 -2
- package/dist/components/FilterBar.es.js +4 -3
- package/dist/components/FormFieldBlocks.cjs.js +3 -3
- package/dist/components/FormFieldBlocks.cjs.js.map +1 -1
- package/dist/components/FormFieldBlocks.es.js +3 -3
- package/dist/components/FormFieldBlocks.es.js.map +1 -1
- package/dist/components/InputGroup.cjs.js +1 -1
- package/dist/components/InputGroup.es.js +1 -1
- package/dist/components/InputNumber.cjs.js +2 -2
- package/dist/components/InputNumber.es.js +2 -2
- package/dist/components/JSONSchemaForm.cjs.js +2 -2
- package/dist/components/JSONSchemaForm.es.js +2 -2
- package/dist/components/ListSearch.cjs.js +1 -1
- package/dist/components/ListSearch.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +2 -2
- package/dist/components/LogsDataList.es.js +2 -2
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/Message.cjs.js +1 -1
- package/dist/components/Message.es.js +1 -1
- package/dist/components/MetricsTable.cjs.js +1 -1
- package/dist/components/MetricsTable.es.js +1 -1
- package/dist/components/Notice.cjs.js +1 -1
- package/dist/components/Notice.es.js +1 -1
- package/dist/components/PrevNextNav.cjs.js +1 -1
- package/dist/components/PrevNextNav.es.js +1 -1
- package/dist/components/PropertyFilter.cjs.js +4 -4
- package/dist/components/PropertyFilter.cjs.js.map +1 -1
- package/dist/components/PropertyFilter.es.js +4 -4
- package/dist/components/PropertyFilter.es.js.map +1 -1
- package/dist/components/RuleBuilder.cjs.js +2 -2
- package/dist/components/RuleBuilder.es.js +2 -2
- package/dist/components/SavedViews.cjs.js +4 -3
- package/dist/components/SavedViews.cjs.js.map +1 -1
- package/dist/components/SavedViews.es.js +4 -3
- package/dist/components/SavedViews.es.js.map +1 -1
- package/dist/components/SearchInput.cjs.js +5 -2
- package/dist/components/SearchInput.cjs.js.map +1 -1
- package/dist/components/SearchInput.es.js +5 -2
- package/dist/components/SearchInput.es.js.map +1 -1
- package/dist/components/Select.cjs.js +1 -1
- package/dist/components/Select.es.js +1 -1
- package/dist/components/SideDialog.cjs.js +5 -5
- package/dist/components/SideDialog.cjs.js.map +1 -1
- package/dist/components/SideDialog.es.js +4 -4
- package/dist/components/Sidebar.cjs.js +11 -11
- package/dist/components/Sidebar.cjs.js.map +1 -1
- package/dist/components/Sidebar.es.js +12 -12
- package/dist/components/Sidebar.es.js.map +1 -1
- package/dist/components/Tabs.cjs.js +2 -2
- package/dist/components/Tabs.es.js +2 -2
- package/dist/components/ThreadList.cjs.js +1 -1
- package/dist/components/ThreadList.es.js +1 -1
- package/dist/components/Toaster.cjs.js +2 -2
- package/dist/components/Toaster.es.js +2 -2
- package/dist/components/Truncate.cjs.js +1 -1
- package/dist/components/Truncate.es.js +1 -1
- package/dist/components/Workflow.cjs.js +1 -1
- package/dist/components/Workflow.es.js +1 -1
- package/dist/components/ai/activity.cjs.js +1 -1
- package/dist/components/ai/activity.es.js +1 -1
- package/dist/components/ai/ask-user.cjs.js +1 -1
- package/dist/components/ai/ask-user.es.js +1 -1
- package/dist/components/ai/plan.cjs.js +2 -2
- package/dist/components/ai/plan.es.js +2 -2
- 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 +1 -1
- package/dist/components/ai/tool-call.es.js +1 -1
- package/dist/{copy-button-CF-X4iDj.js → copy-button-BXrbevLn.js} +2 -2
- package/dist/{copy-button-CF-X4iDj.js.map → copy-button-BXrbevLn.js.map} +1 -1
- package/dist/{copy-button-BYEFKNpo.cjs → copy-button-DJAQ6_3o.cjs} +2 -2
- package/dist/{copy-button-BYEFKNpo.cjs.map → copy-button-DJAQ6_3o.cjs.map} +1 -1
- package/dist/{data-list-BkimqE_P.cjs → data-list-C4Vmq5HA.cjs} +2 -2
- package/dist/{data-list-BkimqE_P.cjs.map → data-list-C4Vmq5HA.cjs.map} +1 -1
- package/dist/{data-list-evmf5xWI.js → data-list-DHCOoLmj.js} +2 -2
- package/dist/{data-list-evmf5xWI.js.map → data-list-DHCOoLmj.js.map} +1 -1
- package/dist/{DateTimeRangePicker-HmPOHwAQ.cjs → date-time-range-picker-CTt7Od0P.cjs} +71 -57
- package/dist/date-time-range-picker-CTt7Od0P.cjs.map +1 -0
- package/dist/{DateTimeRangePicker-C_Lie_2P.js → date-time-range-picker-DKh1K9Iy.js} +72 -58
- package/dist/date-time-range-picker-DKh1K9Iy.js.map +1 -0
- package/dist/domains/auth/components/session-expired.cjs.js +2 -2
- package/dist/domains/auth/components/session-expired.es.js +2 -2
- package/dist/domains/chat/activity/activity-stretch-line.cjs.js +1 -1
- package/dist/domains/chat/activity/activity-stretch-line.es.js +1 -1
- package/dist/domains/chat/activity/components/activity-fold.cjs.js +1 -1
- package/dist/domains/chat/activity/components/activity-fold.es.js +1 -1
- package/dist/domains/chat/activity/components/activity-timed-trigger.cjs.js +1 -1
- package/dist/domains/chat/activity/components/activity-timed-trigger.es.js +1 -1
- package/dist/domains/chat/activity/components/calls-panel.cjs.js +1 -1
- package/dist/domains/chat/activity/components/calls-panel.es.js +1 -1
- package/dist/domains/chat/activity/components/stretch-content.cjs.js +1 -1
- package/dist/domains/chat/activity/components/stretch-content.es.js +1 -1
- package/dist/domains/chat/activity/components/stretch-thought.cjs.js +1 -1
- package/dist/domains/chat/activity/components/stretch-thought.es.js +1 -1
- package/dist/domains/chat/activity/model/activity-segments.cjs.js +1 -1
- package/dist/domains/chat/activity/model/activity-segments.es.js +1 -1
- package/dist/domains/chat/activity/model/activity-words.cjs.js +1 -1
- package/dist/domains/chat/activity/model/activity-words.es.js +1 -1
- package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +2 -2
- package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +2 -2
- package/dist/domains/chat/attachments/composer-attachment.cjs.js +1 -1
- package/dist/domains/chat/attachments/composer-attachment.es.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +3 -3
- package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +3 -3
- package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js +1 -1
- package/dist/domains/chat/knowledge/pinned-knowledge.es.js +1 -1
- package/dist/domains/chat/messages/assistant-message-actions.cjs.js +2 -2
- package/dist/domains/chat/messages/assistant-message-actions.es.js +2 -2
- package/dist/domains/chat/messages/dataset-save-action.cjs.js +5 -5
- package/dist/domains/chat/messages/dataset-save-action.es.js +5 -5
- package/dist/domains/chat/messages/message-row.cjs.js +4 -4
- package/dist/domains/chat/messages/message-row.es.js +4 -4
- package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
- package/dist/domains/chat/messages/reasoning-content.cjs.js +1 -1
- package/dist/domains/chat/messages/reasoning-content.es.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js +2 -2
- package/dist/domains/chat/messages/renderers/message-text.es.js +2 -2
- 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/renderers/status-renderers.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/status-renderers.es.js +1 -1
- package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/signal-badge.es.js +1 -1
- package/dist/domains/chat/messages/skill-message.cjs.js +2 -2
- package/dist/domains/chat/messages/skill-message.es.js +2 -2
- package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.es.js +1 -1
- package/dist/domains/chat/messages/tripwire-notice.cjs.js +2 -2
- package/dist/domains/chat/messages/tripwire-notice.es.js +2 -2
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +3 -3
- package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +3 -3
- 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/knowledge-tool-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/mcp-task-chip.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/mcp-task-chip.es.js +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/observation-marker-details.es.js +2 -2
- 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/sandbox-execution-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/sandbox-execution-badge.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 +2 -2
- package/dist/domains/chat/tools/badges/tool-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +3 -3
- package/dist/domains/chat/tools/badges/workflow-badge.es.js +3 -3
- package/dist/domains/chat/tools/connect-prompt-tool.cjs.js +3 -3
- package/dist/domains/chat/tools/connect-prompt-tool.es.js +3 -3
- 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/chat/tools/tool-card.cjs.js +1 -1
- package/dist/domains/chat/tools/tool-card.es.js +1 -1
- package/dist/domains/chat/tools/tool-groups.cjs.js +1 -1
- package/dist/domains/chat/tools/tool-groups.es.js +1 -1
- package/dist/domains/dashboards/components/dashboard-renderer.cjs.js +1 -1
- package/dist/domains/dashboards/components/dashboard-renderer.es.js +1 -1
- package/dist/domains/dashboards/kinds/table/table-view.cjs.js +1 -1
- package/dist/domains/dashboards/kinds/table/table-view.es.js +1 -1
- package/dist/domains/dashboards/metrics-dashboard.cjs.js +1 -1
- package/dist/domains/dashboards/metrics-dashboard.cjs.js.map +1 -1
- package/dist/domains/dashboards/metrics-dashboard.es.js +1 -1
- package/dist/domains/dashboards/metrics-dashboard.es.js.map +1 -1
- package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.cjs.js +4 -4
- package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.es.js +4 -4
- package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.cjs.js +1 -1
- package/dist/domains/datasets/components/add-dataset-item-dialog/dataset-picker.es.js +1 -1
- package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.cjs.js +3 -3
- package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.es.js +3 -3
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +5 -5
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +5 -5
- package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js +1 -1
- package/dist/domains/knowledge/components/KnowledgePageDetail.es.js +1 -1
- package/dist/domains/logs/components/log-data-panel.cjs.js +6 -6
- package/dist/domains/logs/components/log-data-panel.cjs.js.map +1 -1
- package/dist/domains/logs/components/log-data-panel.es.js +4 -4
- package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
- package/dist/domains/logs/components/logs-list-view.es.js +2 -2
- package/dist/domains/logs/components/logs-saved-views.cjs.js +1 -1
- package/dist/domains/logs/components/logs-saved-views.es.js +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/logs/components/no-logs-info.cjs.js +1 -1
- package/dist/domains/logs/components/no-logs-info.es.js +1 -1
- package/dist/domains/logs/hooks/use-logs-filter-persistence.cjs.js +1 -1
- package/dist/domains/logs/hooks/use-logs-filter-persistence.es.js +1 -1
- package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
- package/dist/domains/memory/components/flame-graph.es.js +1 -1
- package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
- package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
- package/dist/domains/metrics/components/breakdown/breakdown-table.cjs.js +2 -2
- package/dist/domains/metrics/components/breakdown/breakdown-table.cjs.js.map +1 -1
- package/dist/domains/metrics/components/breakdown/breakdown-table.es.js +2 -2
- package/dist/domains/metrics/components/breakdown/breakdown-table.es.js.map +1 -1
- package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
- package/dist/domains/metrics/components/card-action-buttons.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/date-range-selector.cjs.js +2 -2
- package/dist/domains/metrics/components/date-range-selector.cjs.js.map +1 -1
- package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
- package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +4 -4
- package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js.map +1 -1
- package/dist/domains/metrics/components/metrics-time-range-chip.es.js +4 -4
- package/dist/domains/metrics/components/metrics-time-range-chip.es.js.map +1 -1
- package/dist/domains/metrics/drilldown.cjs.js +1 -1
- package/dist/domains/metrics/drilldown.es.js +1 -1
- package/dist/domains/metrics/metrics-filters.cjs.js +1 -1
- package/dist/domains/metrics/metrics-filters.es.js +1 -1
- package/dist/domains/observability/hooks/use-observability-list-filters.cjs.js +1 -1
- package/dist/domains/observability/hooks/use-observability-list-filters.es.js +1 -1
- package/dist/domains/observability/observability-list-url-state.cjs.js +1 -1
- package/dist/domains/observability/observability-list-url-state.es.js +1 -1
- package/dist/domains/observability/saved-view-state.cjs.js +1 -1
- package/dist/domains/observability/saved-view-state.es.js +1 -1
- package/dist/domains/observability/saved-views/observability-saved-views.cjs.js +1 -1
- package/dist/domains/observability/saved-views/observability-saved-views.es.js +1 -1
- package/dist/domains/observability/saved-views.cjs.js +1 -1
- package/dist/domains/observability/saved-views.es.js +1 -1
- package/dist/domains/observability.cjs.js +1 -1
- package/dist/domains/observability.es.js +1 -1
- package/dist/domains/scores/components/score-data-panel.cjs.js +2 -2
- package/dist/domains/scores/components/score-data-panel.es.js +2 -2
- package/dist/domains/scores/components/span-scoring.cjs.js +6 -6
- package/dist/domains/scores/components/span-scoring.cjs.js.map +1 -1
- package/dist/domains/scores/components/span-scoring.es.js +6 -6
- package/dist/domains/scores/components/span-scoring.es.js.map +1 -1
- package/dist/domains/scores/components/trace-scores-list.cjs.js +2 -2
- package/dist/domains/scores/components/trace-scores-list.es.js +2 -2
- package/dist/domains/scores/components/trace-scores-tab.cjs.js +1 -1
- package/dist/domains/scores/components/trace-scores-tab.es.js +1 -1
- package/dist/domains/skills/skill-simple-form.cjs.js +3 -3
- package/dist/domains/skills/skill-simple-form.cjs.js.map +1 -1
- package/dist/domains/skills/skill-simple-form.es.js +3 -3
- package/dist/domains/skills/skill-simple-form.es.js.map +1 -1
- package/dist/domains/spans/components/spans-explorer-body.cjs.js +8 -8
- package/dist/domains/spans/components/spans-explorer-body.cjs.js.map +1 -1
- package/dist/domains/spans/components/spans-explorer-body.es.js +8 -8
- package/dist/domains/spans/components/spans-explorer-body.es.js.map +1 -1
- package/dist/domains/spans/components/spans-filter-bar.cjs.js +6 -6
- package/dist/domains/spans/components/spans-filter-bar.cjs.js.map +1 -1
- package/dist/domains/spans/components/spans-filter-bar.es.js +6 -6
- package/dist/domains/spans/components/spans-filter-bar.es.js.map +1 -1
- package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js +5 -5
- package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js.map +1 -1
- package/dist/domains/spans/hooks/use-spans-filter-bar.es.js +5 -5
- package/dist/domains/spans/hooks/use-spans-filter-bar.es.js.map +1 -1
- package/dist/domains/spans/span-filters.cjs.js +2 -2
- package/dist/domains/spans/span-filters.cjs.js.map +1 -1
- package/dist/domains/spans/span-filters.es.js +2 -2
- package/dist/domains/spans/span-filters.es.js.map +1 -1
- package/dist/domains/threads/components/threads-explorer-body.cjs.js +8 -8
- package/dist/domains/threads/components/threads-explorer-body.cjs.js.map +1 -1
- package/dist/domains/threads/components/threads-explorer-body.es.js +8 -8
- package/dist/domains/threads/components/threads-explorer-body.es.js.map +1 -1
- package/dist/domains/threads/components/threads-filter-bar.cjs.js +6 -6
- package/dist/domains/threads/components/threads-filter-bar.cjs.js.map +1 -1
- package/dist/domains/threads/components/threads-filter-bar.es.js +6 -6
- package/dist/domains/threads/components/threads-filter-bar.es.js.map +1 -1
- package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js +5 -5
- package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js.map +1 -1
- package/dist/domains/threads/hooks/use-threads-filter-bar.es.js +5 -5
- package/dist/domains/threads/hooks/use-threads-filter-bar.es.js.map +1 -1
- package/dist/domains/threads/thread-filters.cjs.js +2 -2
- package/dist/domains/threads/thread-filters.cjs.js.map +1 -1
- package/dist/domains/threads/thread-filters.es.js +2 -2
- package/dist/domains/threads/thread-filters.es.js.map +1 -1
- package/dist/domains/traces/components/columns-menu/columns-menu.cjs.js +1 -1
- package/dist/domains/traces/components/columns-menu/columns-menu.es.js +1 -1
- package/dist/domains/traces/components/feedback-thread.cjs.js +4 -4
- package/dist/domains/traces/components/feedback-thread.cjs.js.map +1 -1
- package/dist/domains/traces/components/feedback-thread.es.js +4 -4
- package/dist/domains/traces/components/feedback-thread.es.js.map +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +5 -5
- package/dist/domains/traces/components/span-data-panel-view.es.js +5 -5
- package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
- package/dist/domains/traces/components/span-details-view.es.js +1 -1
- package/dist/domains/traces/components/span-outcome.cjs.js +1 -1
- package/dist/domains/traces/components/span-outcome.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +3 -3
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-section.es.js +2 -2
- 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-mutations.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-tools-section.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 +2 -2
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +2 -2
- package/dist/domains/traces/components/thread-trace/thread-trace-row.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-row.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +1 -1
- package/dist/domains/traces/components/thread-view-by-trace.cjs.js +1 -1
- package/dist/domains/traces/components/thread-view-by-trace.es.js +1 -1
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +5 -6
- package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.es.js +5 -6
- package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +5 -5
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.es.js +5 -5
- package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel.cjs.js +1 -1
- package/dist/domains/traces/components/trace-data-panel.es.js +1 -1
- package/dist/domains/traces/components/trace-details-view.cjs.js +1 -1
- package/dist/domains/traces/components/trace-details-view.es.js +1 -1
- package/dist/domains/traces/components/trace-error-cell.cjs.js +1 -1
- package/dist/domains/traces/components/trace-error-cell.es.js +1 -1
- package/dist/domains/traces/components/trace-error-summary.cjs.js +1 -1
- package/dist/domains/traces/components/trace-error-summary.es.js +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-span-panel.cjs.js +1 -1
- package/dist/domains/traces/components/trace-span-panel.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-item-view.cjs.js +1 -1
- package/dist/domains/traces/components/trace-thread-item-view.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/traces-explorer/traces-explorer-actions.cjs.js +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-actions.es.js +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +6 -6
- package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +6 -6
- package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.cjs.js +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-saved-views.es.js +1 -1
- package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js +5 -5
- package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +5 -5
- package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js.map +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 +2 -2
- package/dist/domains/traces/components/traces-list-view.es.js +2 -2
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +2 -2
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js +2 -2
- package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
- package/dist/domains/traces/components/traces-spans-switch.cjs.js +1 -1
- package/dist/domains/traces/components/traces-spans-switch.es.js +1 -1
- package/dist/domains/traces/hooks/use-download-trace-json.cjs.js +1 -1
- package/dist/domains/traces/hooks/use-download-trace-json.es.js +1 -1
- package/dist/domains/traces/trace-filters.cjs.js +1 -1
- package/dist/domains/traces/trace-filters.es.js +1 -1
- package/dist/domains/traces/trace-query-filters.cjs.js +1 -1
- package/dist/domains/traces/trace-query-filters.es.js +1 -1
- package/dist/domains/traces.cjs.js +1 -1
- package/dist/domains/traces.es.js +1 -1
- package/dist/domains/workflows/components/workflow-combobox.cjs.js +3 -3
- package/dist/domains/workflows/components/workflow-combobox.cjs.js.map +1 -1
- package/dist/domains/workflows/components/workflow-combobox.es.js +3 -3
- package/dist/domains/workflows/components/workflow-combobox.es.js.map +1 -1
- package/dist/domains/workflows/components/workflow-information.cjs.js +2 -2
- package/dist/domains/workflows/components/workflow-information.es.js +2 -2
- package/dist/domains/workflows/components/workflow-layout.cjs.js +1 -1
- package/dist/domains/workflows/components/workflow-layout.es.js +1 -1
- package/dist/domains/workflows/components/workflow-step-detail.cjs.js +2 -2
- package/dist/domains/workflows/components/workflow-step-detail.es.js +2 -2
- package/dist/domains/workflows/components/workflows-list/no-workflows-info.cjs.js +1 -1
- package/dist/domains/workflows/components/workflows-list/no-workflows-info.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/context/use-stream-for-run.cjs.js +1 -1
- package/dist/domains/workflows/context/use-stream-for-run.es.js +1 -1
- package/dist/domains/workflows/runs/workflow-run-list.cjs.js +1 -1
- package/dist/domains/workflows/runs/workflow-run-list.es.js +1 -1
- 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/data/workflow-data-inspector.cjs.js +2 -2
- package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +2 -2
- package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +1 -1
- package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +1 -1
- package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +2 -2
- package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +2 -2
- package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js.map +1 -1
- package/dist/domains/workflows/workflow/use-workflow-graph-runtime.cjs.js +1 -1
- package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +1 -1
- package/dist/domains/workflows/workflow/utils.cjs.js +1 -1
- package/dist/domains/workflows/workflow/utils.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-body-graph.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-body-graph.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-cancel-button.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-cancel-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-debug-step-controls.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-debug-step-controls.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph-boundary.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-graph-boundary.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-graph-inner.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-graph-layout.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph-layout.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph-node.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph-node.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-run-data.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-run-error.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-run-error.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-run-header.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-run-header.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-status.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-status.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-step-node-utils.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-step-node-utils.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-timeline-row.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline-row.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-form.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-form.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-header.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-header.es.js +1 -1
- 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-add-skill-dialog.cjs.js +4 -4
- package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js.map +1 -1
- package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +4 -4
- package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js.map +1 -1
- package/dist/domains/workspace/components/workspace-add-skill.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-add-skill.es.js +1 -1
- package/dist/domains/workspace/components/workspace-create-directory.cjs.js +2 -2
- package/dist/domains/workspace/components/workspace-create-directory.es.js +2 -2
- package/dist/domains/workspace/components/workspace-error.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-error.es.js +1 -1
- package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-markdown-preview.es.js +1 -1
- package/dist/domains/workspace/components/workspace-search.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-search.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/ee/signals/components/entity-index-list.cjs.js +1 -1
- package/dist/ee/signals/components/entity-index-list.es.js +1 -1
- package/dist/ee/signals/components/signals-empty-state.cjs.js +1 -1
- package/dist/ee/signals/components/signals-empty-state.es.js +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +6 -6
- 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 +5 -5
- package/dist/ee/signals/examples-pager.cjs.js +1 -1
- package/dist/ee/signals/examples-pager.es.js +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/signals/settings/trace-signal-settings.cjs.js +3 -3
- package/dist/ee/signals/settings/trace-signal-settings.es.js +3 -3
- package/dist/ee/signals/signals-error-state.cjs.js +1 -1
- package/dist/ee/signals/signals-error-state.es.js +1 -1
- package/dist/ee/signals/snapshot-timeline.cjs.js +1 -1
- package/dist/ee/signals/snapshot-timeline.es.js +1 -1
- package/dist/ee/signals/theme-filter-banner.cjs.js +1 -1
- package/dist/ee/signals/theme-filter-banner.es.js +1 -1
- package/dist/ee/signals/trace-insight-view.cjs.js +1 -1
- package/dist/ee/signals/trace-insight-view.es.js +1 -1
- package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
- package/dist/ee/signals/view-mode-tab.es.js +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +2 -2
- package/dist/ee/topics/components/topic-trace-summary-list.es.js +2 -2
- package/dist/{filter-bar-chip-7O02P9Vk.js → filter-bar-chip-CABeKrtf.js} +88 -73
- package/dist/filter-bar-chip-CABeKrtf.js.map +1 -0
- package/dist/{filter-bar-chip-BUyMf8XQ.cjs → filter-bar-chip-Cg-UbIwP.cjs} +90 -81
- package/dist/filter-bar-chip-Cg-UbIwP.cjs.map +1 -0
- package/dist/filter-bar-chip.css +22 -0
- package/dist/filter-bar-time-range-BA-pXMlo.cjs +83 -0
- package/dist/filter-bar-time-range-BA-pXMlo.cjs.map +1 -0
- package/dist/filter-bar-time-range-mg9JeYue.js +60 -0
- package/dist/filter-bar-time-range-mg9JeYue.js.map +1 -0
- package/dist/hooks/use-copy-to-clipboard.cjs.js +1 -1
- package/dist/hooks/use-copy-to-clipboard.es.js +1 -1
- package/dist/{input-group-uDpFNnSW.cjs → input-group-DVJLZDBL.cjs} +6 -4
- package/dist/input-group-DVJLZDBL.cjs.map +1 -0
- package/dist/{input-group-g85FYfze.js → input-group-QKKV_ouF.js} +7 -5
- package/dist/input-group-QKKV_ouF.js.map +1 -0
- package/dist/layout/tabbed-container.cjs.js +1 -1
- package/dist/layout/tabbed-container.es.js +1 -1
- package/dist/lib/form/components/array-element-wrapper.cjs.js +1 -1
- package/dist/lib/form/components/array-element-wrapper.es.js +1 -1
- package/dist/lib/form/components/array-wrapper.cjs.js +1 -1
- package/dist/lib/form/components/array-wrapper.es.js +1 -1
- package/dist/lib/form/components/date-field.cjs.js +1 -1
- package/dist/lib/form/components/date-field.es.js +1 -1
- package/dist/lib/form/components/error-message.cjs.js +1 -1
- package/dist/lib/form/components/error-message.es.js +1 -1
- package/dist/lib/form/components/form-submit-row.cjs.js +1 -1
- package/dist/lib/form/components/form-submit-row.es.js +1 -1
- package/dist/lib/form/components/record-field.cjs.js +1 -1
- package/dist/lib/form/components/record-field.es.js +1 -1
- package/dist/lib/form/components/select-field.cjs.js +1 -1
- package/dist/lib/form/components/select-field.es.js +1 -1
- package/dist/lib/form/components/submit-button.cjs.js +1 -1
- package/dist/lib/form/components/submit-button.es.js +1 -1
- package/dist/{list-search-BEJmYa9a.cjs → list-search-BtRno5As.cjs} +2 -2
- package/dist/list-search-BtRno5As.cjs.map +1 -0
- package/dist/{list-search-bg7WzULj.js → list-search-CkhsTFdG.js} +2 -2
- package/dist/list-search-CkhsTFdG.js.map +1 -0
- package/dist/{observability-saved-views-Zlz74syw.js → observability-saved-views-CjKTEp1V.js} +4 -4
- package/dist/observability-saved-views-CjKTEp1V.js.map +1 -0
- package/dist/{observability-saved-views-BNU3GkK6.cjs → observability-saved-views-Daizz4tU.cjs} +4 -4
- package/dist/observability-saved-views-Daizz4tU.cjs.map +1 -0
- package/dist/primitives/chart-plot.cjs.js +8 -6
- package/dist/primitives/chart-plot.cjs.js.map +1 -1
- package/dist/primitives/chart-plot.es.js +8 -6
- package/dist/primitives/chart-plot.es.js.map +1 -1
- package/dist/primitives/control-icon.cjs.js +9 -0
- package/dist/primitives/control-icon.cjs.js.map +1 -0
- package/dist/primitives/control-icon.d.ts +1 -0
- package/dist/primitives/control-icon.es.js +8 -0
- package/dist/primitives/control-icon.es.js.map +1 -0
- package/dist/primitives/control-size.cjs.js +6 -0
- package/dist/primitives/control-size.cjs.js.map +1 -1
- package/dist/primitives/control-size.es.js +6 -1
- package/dist/primitives/control-size.es.js.map +1 -1
- package/dist/primitives/menu-item.cjs.js +3 -3
- package/dist/primitives/menu-item.cjs.js.map +1 -1
- package/dist/primitives/menu-item.es.js +3 -3
- package/dist/primitives/menu-item.es.js.map +1 -1
- package/dist/primitives/trigger-button.cjs.js +1 -1
- package/dist/primitives/trigger-button.es.js +1 -1
- package/dist/{property-filter-applied-DRglaEj-.js → property-filter-applied--U5EZdaA.js} +4 -4
- package/dist/property-filter-applied--U5EZdaA.js.map +1 -0
- package/dist/{property-filter-applied-DqsPFbYM.cjs → property-filter-applied-BkkIObRq.cjs} +19 -19
- package/dist/property-filter-applied-BkkIObRq.cjs.map +1 -0
- package/dist/{select-BbFpEBAY.js → select-BdIZEdcy.js} +4 -8
- package/dist/select-BdIZEdcy.js.map +1 -0
- package/dist/{select-NySY9Men.cjs → select-Dg8L5ROX.cjs} +3 -7
- package/dist/select-Dg8L5ROX.cjs.map +1 -0
- package/dist/{span-payload-primitives-ChvD2RrN.js → span-payload-primitives-B3RdahsC.js} +3 -3
- package/dist/{span-payload-primitives-ChvD2RrN.js.map → span-payload-primitives-B3RdahsC.js.map} +1 -1
- package/dist/{span-payload-primitives-w1vtAXAw.cjs → span-payload-primitives-_2d-pAOD.cjs} +3 -3
- package/dist/{span-payload-primitives-w1vtAXAw.cjs.map → span-payload-primitives-_2d-pAOD.cjs.map} +1 -1
- package/dist/src/domains/metrics/components/metrics-time-range-chip.d.ts +2 -2
- package/dist/src/domains/spans/components/spans-filter-bar.d.ts +1 -1
- package/dist/src/domains/spans/hooks/use-spans-filter-bar.d.ts +1 -1
- package/dist/src/domains/spans/span-filters.d.ts +1 -1
- package/dist/src/domains/threads/components/threads-filter-bar.d.ts +1 -1
- package/dist/src/domains/threads/hooks/use-threads-filter-bar.d.ts +1 -1
- package/dist/src/domains/threads/thread-filters.d.ts +1 -1
- package/dist/src/domains/traces/components/traces-explorer/traces-explorer-filter-bar.d.ts +3 -3
- package/dist/src/domains/traces/components/traces-page-skeleton.d.ts +1 -1
- package/dist/src/ds/components/Button/Button.d.ts +15 -0
- package/dist/src/ds/components/ClearFiltersButton/clear-filters-button.d.ts +12 -0
- package/dist/src/ds/components/ClearFiltersButton/index.d.ts +1 -0
- package/dist/src/ds/components/Combobox/combobox-styles.d.ts +0 -1
- package/dist/src/ds/components/DateTimeRangePicker/date-time-range-picker.d.ts +12 -11
- package/dist/src/ds/components/FilterBar/filter-bar-chip.d.ts +10 -7
- package/dist/src/ds/components/FilterBar/filter-bar-time-range.d.ts +19 -0
- package/dist/src/ds/components/FilterBar/filter-bar.d.ts +2 -0
- package/dist/src/ds/components/FilterBar/index.d.ts +2 -0
- package/dist/src/ds/components/FilterBar/use-filter-bar-item-keys.d.ts +23 -0
- package/dist/src/ds/components/ListSearch/list-search.d.ts +1 -0
- package/dist/src/ds/components/MetricsTable/metrics-table-rows.d.ts +10 -3
- package/dist/src/ds/components/MetricsTable/metrics-table.d.ts +1 -1
- package/dist/src/ds/primitives/control-icon.d.ts +3 -0
- package/dist/src/ds/primitives/control-size.d.ts +1 -0
- package/dist/style.css +131 -65
- package/dist/{tabbed-container-CFEImJOK.cjs → tabbed-container-B4lCBgRP.cjs} +6 -6
- package/dist/{tabbed-container-CFEImJOK.cjs.map → tabbed-container-B4lCBgRP.cjs.map} +1 -1
- package/dist/{tabbed-container-BKUqfEKy.js → tabbed-container-DI1GI1Qv.js} +6 -6
- package/dist/{tabbed-container-BKUqfEKy.js.map → tabbed-container-DI1GI1Qv.js.map} +1 -1
- package/dist/{tabs-content-DgR3Hik1.cjs → tabs-content-CmXe5ML0.cjs} +2 -2
- package/dist/{tabs-content-DgR3Hik1.cjs.map → tabs-content-CmXe5ML0.cjs.map} +1 -1
- package/dist/{tabs-content-cpV6A9c3.js → tabs-content-D__B9hd-.js} +2 -2
- package/dist/{tabs-content-cpV6A9c3.js.map → tabs-content-D__B9hd-.js.map} +1 -1
- package/dist/{tabs-tab-UT1JliwK.js → tabs-tab-CYTZevdV.js} +2 -2
- package/dist/{tabs-tab-UT1JliwK.js.map → tabs-tab-CYTZevdV.js.map} +1 -1
- package/dist/{tabs-tab-Qp3RJ17z.cjs → tabs-tab-DGwfHVDr.cjs} +2 -2
- package/dist/{tabs-tab-Qp3RJ17z.cjs.map → tabs-tab-DGwfHVDr.cjs.map} +1 -1
- package/dist/{toast-api-WhxnAT9F.js → toast-api-D_rrRhNG.js} +2 -2
- package/dist/{toast-api-WhxnAT9F.js.map → toast-api-D_rrRhNG.js.map} +1 -1
- package/dist/{toast-api-Bv87KHu_.cjs → toast-api-qtkOucy2.cjs} +2 -2
- package/dist/{toast-api-Bv87KHu_.cjs.map → toast-api-qtkOucy2.cjs.map} +1 -1
- package/dist/{tool-approval-Dfi0uAKU.cjs → tool-approval-1qiB4hhG.cjs} +4 -4
- package/dist/{tool-approval-Dfi0uAKU.cjs.map → tool-approval-1qiB4hhG.cjs.map} +1 -1
- package/dist/{tool-approval-DHeCkWHT.js → tool-approval-B6MFcaKV.js} +4 -4
- package/dist/{tool-approval-DHeCkWHT.js.map → tool-approval-B6MFcaKV.js.map} +1 -1
- package/dist/{tool-call-BCsDhIhs.cjs → tool-call-Bu66PkD-.cjs} +3 -3
- package/dist/{tool-call-BCsDhIhs.cjs.map → tool-call-Bu66PkD-.cjs.map} +1 -1
- package/dist/{tool-call-CILZa3tn.js → tool-call-Ch9-jjXU.js} +3 -3
- package/dist/{tool-call-CILZa3tn.js.map → tool-call-Ch9-jjXU.js.map} +1 -1
- package/dist/{tool-card-CJ7Kxi-U.cjs → tool-card-DrqPZfPQ.cjs} +4 -4
- package/dist/{tool-card-CJ7Kxi-U.cjs.map → tool-card-DrqPZfPQ.cjs.map} +1 -1
- package/dist/{tool-card-C3sDFUWc.js → tool-card-sO6P2Qj4.js} +4 -4
- package/dist/{tool-card-C3sDFUWc.js.map → tool-card-sO6P2Qj4.js.map} +1 -1
- package/dist/{trace-filters-BJaebsxJ.js → trace-filters-CaWkw779.js} +2 -3
- package/dist/trace-filters-CaWkw779.js.map +1 -0
- package/dist/{trace-filters-BNEZ31HX.cjs → trace-filters-a0N9bf52.cjs} +1 -2
- package/dist/trace-filters-a0N9bf52.cjs.map +1 -0
- package/dist/{use-workflow-graph-runtime-deTN_q_G.js → use-workflow-graph-runtime-BKNhOKsH.js} +3 -3
- package/dist/{use-workflow-graph-runtime-deTN_q_G.js.map → use-workflow-graph-runtime-BKNhOKsH.js.map} +1 -1
- package/dist/{use-workflow-graph-runtime-DkwQjMEV.cjs → use-workflow-graph-runtime-DYao-08R.cjs} +3 -3
- package/dist/{use-workflow-graph-runtime-DkwQjMEV.cjs.map → use-workflow-graph-runtime-DYao-08R.cjs.map} +1 -1
- package/dist/utils/toast.cjs.js +1 -1
- package/dist/utils/toast.es.js +1 -1
- package/oxlint/index.js +90 -0
- package/package.json +9 -9
- package/theme.css +5 -0
- package/dist/ActionRow-BfK77pCT.cjs.map +0 -1
- package/dist/ActionRow-Cd6tOC2K.js.map +0 -1
- package/dist/Button-Bw1e3ONi.js.map +0 -1
- package/dist/Button-YQRflC47.cjs.map +0 -1
- package/dist/DataCodeSection-CZRPsStI.cjs.map +0 -1
- package/dist/DataCodeSection-Ckd47p_S.js.map +0 -1
- package/dist/DateTimeRangePicker-C_Lie_2P.js.map +0 -1
- package/dist/DateTimeRangePicker-HmPOHwAQ.cjs.map +0 -1
- package/dist/FilterBar--4oguuVe.js.map +0 -1
- package/dist/FilterBar-BUd4f7oi.cjs.map +0 -1
- package/dist/MetricsTable-CRPeLHe1.js.map +0 -1
- package/dist/MetricsTable-D-aZf3dk.cjs.map +0 -1
- package/dist/ask-user-BdjH9F7G.js.map +0 -1
- package/dist/ask-user-C82m_G9W.cjs.map +0 -1
- package/dist/combobox-8kNAJFlj.cjs.map +0 -1
- package/dist/combobox-parts-BZVXwbG7.cjs.map +0 -1
- package/dist/combobox-parts-W7KRQUsV.js.map +0 -1
- package/dist/components/ButtonsGroup.cjs.js.map +0 -1
- package/dist/components/ButtonsGroup.es.js.map +0 -1
- package/dist/domains/traces/components/trace-time-range-chip.cjs.js +0 -90
- package/dist/domains/traces/components/trace-time-range-chip.cjs.js.map +0 -1
- package/dist/domains/traces/components/trace-time-range-chip.d.ts +0 -1
- package/dist/domains/traces/components/trace-time-range-chip.es.js +0 -86
- package/dist/domains/traces/components/trace-time-range-chip.es.js.map +0 -1
- package/dist/filter-bar-chip-7O02P9Vk.js.map +0 -1
- package/dist/filter-bar-chip-BUyMf8XQ.cjs.map +0 -1
- package/dist/input-group-g85FYfze.js.map +0 -1
- package/dist/input-group-uDpFNnSW.cjs.map +0 -1
- package/dist/list-search-BEJmYa9a.cjs.map +0 -1
- package/dist/list-search-bg7WzULj.js.map +0 -1
- package/dist/observability-saved-views-BNU3GkK6.cjs.map +0 -1
- package/dist/observability-saved-views-Zlz74syw.js.map +0 -1
- package/dist/property-filter-applied-DRglaEj-.js.map +0 -1
- package/dist/property-filter-applied-DqsPFbYM.cjs.map +0 -1
- package/dist/select-BbFpEBAY.js.map +0 -1
- package/dist/select-NySY9Men.cjs.map +0 -1
- package/dist/src/domains/traces/components/trace-time-range-chip.d.ts +0 -22
- package/dist/trace-filters-BJaebsxJ.js.map +0 -1
- package/dist/trace-filters-BNEZ31HX.cjs.map +0 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_trace_filters = require("../../../trace-filters-
|
|
2
|
+
const require_trace_filters = require("../../../trace-filters-a0N9bf52.cjs");
|
|
3
3
|
const require_domains_traces_components_traces_explorer_traces_explorer_actions = require("../../traces/components/traces-explorer/traces-explorer-actions.cjs.js");
|
|
4
|
-
|
|
5
|
-
const require_FilterBar = require("../../../FilterBar-
|
|
4
|
+
require("../../../filter-bar-time-range-BA-pXMlo.cjs");
|
|
5
|
+
const require_FilterBar = require("../../../FilterBar-CQl04O6t.cjs");
|
|
6
6
|
const require_domains_spans_hooks_use_spans_filter_bar = require("../hooks/use-spans-filter-bar.cjs.js");
|
|
7
7
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
8
|
// src/domains/spans/components/spans-filter-bar.tsx
|
|
9
9
|
var createItemId = (fieldId) => fieldId;
|
|
10
|
-
/** The spans filter bar:
|
|
10
|
+
/** The spans filter bar: the time range plus the fields `querySpans()` accepts. */
|
|
11
11
|
function SpansFilterBar({ datePreset, dateFrom, dateTo, minDate, timeRange, tokens, groups, onDatePresetChange, onDateChange, onDateRangeChange, onDateReset, onFiltersChange, describeSuggestionsError, disabled }) {
|
|
12
12
|
const fields = require_domains_spans_hooks_use_spans_filter_bar.useSpansFilterBarFields({ timeRange });
|
|
13
13
|
const { filterBarValue, onFilterBarChange } = require_domains_spans_hooks_use_spans_filter_bar.useSpansFilterBar({
|
|
@@ -25,7 +25,7 @@ function SpansFilterBar({ datePreset, dateFrom, dateTo, minDate, timeRange, toke
|
|
|
25
25
|
maxDepth: 3,
|
|
26
26
|
"aria-label": "Span filters",
|
|
27
27
|
className: "min-w-64 flex-1",
|
|
28
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_FilterBar.FilterBar.Chips, { renderChip: (item) => item.fieldId === "timeRange" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
28
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_FilterBar.FilterBar.Chips, { renderChip: (item) => item.fieldId === "timeRange" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_FilterBar.FilterBar.TimeRange, {
|
|
29
29
|
preset: datePreset,
|
|
30
30
|
onPresetChange: onDatePresetChange,
|
|
31
31
|
dateFrom,
|
|
@@ -37,7 +37,7 @@ function SpansFilterBar({ datePreset, dateFrom, dateTo, minDate, timeRange, toke
|
|
|
37
37
|
presets: require_domains_spans_hooks_use_spans_filter_bar.SPAN_TIME_RANGE_PRESETS,
|
|
38
38
|
defaultPreset: require_domains_traces_components_traces_explorer_traces_explorer_actions.DEFAULT_TRACES_FILTERS.datePreset,
|
|
39
39
|
onReset: onDateReset && (() => onDateReset(require_domains_traces_components_traces_explorer_traces_explorer_actions.DEFAULT_TRACES_FILTERS.datePreset))
|
|
40
|
-
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_FilterBar.FilterBar.Chip, { item }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_FilterBar.FilterBar.Input, { placeholder: "Filter spans
|
|
40
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_FilterBar.FilterBar.Chip, { item }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_FilterBar.FilterBar.Input, { placeholder: "Filter spans" })]
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
43
|
exports.SpansFilterBar = SpansFilterBar;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spans-filter-bar.cjs.js","names":["useSpansFilterBarFields","useSpansFilterBar","FilterBar","TRACE_FILTER_BAR_OPERATORS","
|
|
1
|
+
{"version":3,"file":"spans-filter-bar.cjs.js","names":["useSpansFilterBarFields","useSpansFilterBar","FilterBar","TRACE_FILTER_BAR_OPERATORS","SPAN_TIME_RANGE_PRESETS","DEFAULT_TRACES_FILTERS"],"sources":["../../../../src/domains/spans/components/spans-filter-bar.tsx"],"sourcesContent":["import type { TraceQueryDiscoveryTimeRange } from '@mastra/react/hooks/traces';\nimport { DEFAULT_TRACES_FILTERS } from '../../traces/components/traces-explorer/traces-explorer-actions';\nimport { TRACE_FILTER_BAR_OPERATORS } from '../../traces/trace-filters';\nimport type { TraceFilterGroup, TraceFilterToken } from '../../traces/trace-query-filters';\nimport type { TraceDatePreset } from '../../traces/types';\nimport { SPAN_TIME_RANGE_PRESETS, useSpansFilterBar, useSpansFilterBarFields } from '../hooks/use-spans-filter-bar';\nimport { FilterBar } from '@/ds/components/FilterBar';\nimport { FILTER_BAR_TIME_RANGE_FIELD_ID } from '@/ds/components/FilterBar/filter-bar-time-range';\n\n// Items are rebuilt from tokens with `id: fieldId` (traceTokensToFilterBarItems); give the\n// draft that id so the chip survives the round trip without remounting.\nconst createItemId = (fieldId: string) => fieldId;\n\nexport type SpansFilterBarProps = {\n datePreset: TraceDatePreset;\n dateFrom?: Date;\n dateTo?: Date;\n /** Earliest date the custom range picker allows. */\n minDate?: Date;\n /** Window the value suggestions are looked up in. */\n timeRange: TraceQueryDiscoveryTimeRange;\n tokens: TraceFilterToken[];\n groups: TraceFilterGroup[];\n onDatePresetChange: (preset: TraceDatePreset) => void;\n onDateChange: (value: Date | undefined, type: 'from' | 'to') => void;\n onDateRangeChange: (from: Date | undefined, to: Date | undefined) => void;\n /** Called by the time range chip's × with the default preset, e.g. to undo a histogram zoom first. */\n onDateReset?: (defaultPreset: TraceDatePreset) => void;\n onFiltersChange: (tokens: TraceFilterToken[], groups: TraceFilterGroup[]) => void;\n /** Turns a failed value suggestions lookup into the message shown in the option list. */\n describeSuggestionsError?: (error: unknown) => string | undefined;\n disabled?: boolean;\n};\n\n/** The spans filter bar: the time range plus the fields `querySpans()` accepts. */\nexport function SpansFilterBar({\n datePreset,\n dateFrom,\n dateTo,\n minDate,\n timeRange,\n tokens,\n groups,\n onDatePresetChange,\n onDateChange,\n onDateRangeChange,\n onDateReset,\n onFiltersChange,\n describeSuggestionsError,\n disabled,\n}: SpansFilterBarProps) {\n const fields = useSpansFilterBarFields({ timeRange });\n const { filterBarValue, onFilterBarChange } = useSpansFilterBar({ tokens, groups, onFiltersChange });\n\n return (\n <FilterBar\n fields={fields}\n operators={TRACE_FILTER_BAR_OPERATORS}\n value={filterBarValue}\n onValueChange={onFilterBarChange}\n createItemId={createItemId}\n describeSuggestionsError={describeSuggestionsError}\n maxDepth={3}\n aria-label=\"Span filters\"\n className=\"min-w-64 flex-1\"\n >\n <FilterBar.Chips\n renderChip={item =>\n item.fieldId === FILTER_BAR_TIME_RANGE_FIELD_ID ? (\n <FilterBar.TimeRange\n preset={datePreset}\n onPresetChange={onDatePresetChange}\n dateFrom={dateFrom}\n dateTo={dateTo}\n minDate={minDate}\n onDateChange={onDateChange}\n onDateRangeChange={onDateRangeChange}\n disabled={disabled}\n presets={SPAN_TIME_RANGE_PRESETS}\n defaultPreset={DEFAULT_TRACES_FILTERS.datePreset}\n onReset={onDateReset && (() => onDateReset(DEFAULT_TRACES_FILTERS.datePreset))}\n />\n ) : (\n <FilterBar.Chip item={item} />\n )\n }\n />\n <FilterBar.Input placeholder=\"Filter spans\" />\n </FilterBar>\n );\n}\n"],"mappings":";;;;;;;;AAWA,IAAM,gBAAgB,YAAoB;;AAwB1C,SAAgB,eAAe,EAC7B,YACA,UACA,QACA,SACA,WACA,QACA,QACA,oBACA,cACA,mBACA,aACA,iBACA,0BACA,YACsB;CACtB,MAAM,SAASA,iDAAAA,wBAAwB,EAAE,UAAU,CAAC;CACpD,MAAM,EAAE,gBAAgB,sBAAsBC,iDAAAA,kBAAkB;EAAE;EAAQ;EAAQ;CAAgB,CAAC;CAEnG,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,kBAAAA,WAAD;EACU;EACR,WAAWC,sBAAAA;EACX,OAAO;EACP,eAAe;EACD;EACY;EAC1B,UAAU;EACV,cAAW;EACX,WAAU;EATZ,UAAA,CAWE,iBAAA,GAAA,kBAAA,IAAA,CAACD,kBAAAA,UAAU,OAAX,EACE,aAAY,SACV,KAAK,YAAA,cACH,iBAAA,GAAA,kBAAA,IAAA,CAACA,kBAAAA,UAAU,WAAX;GACE,QAAQ;GACR,gBAAgB;GACN;GACF;GACC;GACK;GACK;GACT;GACV,SAASE,iDAAAA;GACT,eAAeC,0EAAAA,uBAAuB;GACtC,SAAS,sBAAsB,YAAYA,0EAAAA,uBAAuB,UAAU;EAC7E,CAAA,IAED,iBAAA,GAAA,kBAAA,IAAA,CAACH,kBAAAA,UAAU,MAAX,EAAsB,KAAO,CAAA,EAGlC,CAAA,GACD,iBAAA,GAAA,kBAAA,IAAA,CAACA,kBAAAA,UAAU,OAAX,EAAiB,aAAY,eAAgB,CAAA,CACpC;;AAEf"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { u as TRACE_FILTER_BAR_OPERATORS } from "../../../trace-filters-
|
|
1
|
+
import { u as TRACE_FILTER_BAR_OPERATORS } from "../../../trace-filters-CaWkw779.js";
|
|
2
2
|
import { DEFAULT_TRACES_FILTERS } from "../../traces/components/traces-explorer/traces-explorer-actions.es.js";
|
|
3
|
-
import
|
|
4
|
-
import { n as FilterBar } from "../../../FilterBar
|
|
3
|
+
import "../../../filter-bar-time-range-mg9JeYue.js";
|
|
4
|
+
import { n as FilterBar } from "../../../FilterBar-BgW2dqRQ.js";
|
|
5
5
|
import { SPAN_TIME_RANGE_PRESETS, useSpansFilterBar, useSpansFilterBarFields } from "../hooks/use-spans-filter-bar.es.js";
|
|
6
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
7
|
// src/domains/spans/components/spans-filter-bar.tsx
|
|
8
8
|
var createItemId = (fieldId) => fieldId;
|
|
9
|
-
/** The spans filter bar:
|
|
9
|
+
/** The spans filter bar: the time range plus the fields `querySpans()` accepts. */
|
|
10
10
|
function SpansFilterBar({ datePreset, dateFrom, dateTo, minDate, timeRange, tokens, groups, onDatePresetChange, onDateChange, onDateRangeChange, onDateReset, onFiltersChange, describeSuggestionsError, disabled }) {
|
|
11
11
|
const fields = useSpansFilterBarFields({ timeRange });
|
|
12
12
|
const { filterBarValue, onFilterBarChange } = useSpansFilterBar({
|
|
@@ -24,7 +24,7 @@ function SpansFilterBar({ datePreset, dateFrom, dateTo, minDate, timeRange, toke
|
|
|
24
24
|
maxDepth: 3,
|
|
25
25
|
"aria-label": "Span filters",
|
|
26
26
|
className: "min-w-64 flex-1",
|
|
27
|
-
children: [/* @__PURE__ */ jsx(FilterBar.Chips, { renderChip: (item) => item.fieldId === "timeRange" ? /* @__PURE__ */ jsx(
|
|
27
|
+
children: [/* @__PURE__ */ jsx(FilterBar.Chips, { renderChip: (item) => item.fieldId === "timeRange" ? /* @__PURE__ */ jsx(FilterBar.TimeRange, {
|
|
28
28
|
preset: datePreset,
|
|
29
29
|
onPresetChange: onDatePresetChange,
|
|
30
30
|
dateFrom,
|
|
@@ -36,7 +36,7 @@ function SpansFilterBar({ datePreset, dateFrom, dateTo, minDate, timeRange, toke
|
|
|
36
36
|
presets: SPAN_TIME_RANGE_PRESETS,
|
|
37
37
|
defaultPreset: DEFAULT_TRACES_FILTERS.datePreset,
|
|
38
38
|
onReset: onDateReset && (() => onDateReset(DEFAULT_TRACES_FILTERS.datePreset))
|
|
39
|
-
}) : /* @__PURE__ */ jsx(FilterBar.Chip, { item }) }), /* @__PURE__ */ jsx(FilterBar.Input, { placeholder: "Filter spans
|
|
39
|
+
}) : /* @__PURE__ */ jsx(FilterBar.Chip, { item }) }), /* @__PURE__ */ jsx(FilterBar.Input, { placeholder: "Filter spans" })]
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
42
|
export { SpansFilterBar };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spans-filter-bar.es.js","names":[],"sources":["../../../../src/domains/spans/components/spans-filter-bar.tsx"],"sourcesContent":["import type { TraceQueryDiscoveryTimeRange } from '@mastra/react/hooks/traces';\nimport {
|
|
1
|
+
{"version":3,"file":"spans-filter-bar.es.js","names":[],"sources":["../../../../src/domains/spans/components/spans-filter-bar.tsx"],"sourcesContent":["import type { TraceQueryDiscoveryTimeRange } from '@mastra/react/hooks/traces';\nimport { DEFAULT_TRACES_FILTERS } from '../../traces/components/traces-explorer/traces-explorer-actions';\nimport { TRACE_FILTER_BAR_OPERATORS } from '../../traces/trace-filters';\nimport type { TraceFilterGroup, TraceFilterToken } from '../../traces/trace-query-filters';\nimport type { TraceDatePreset } from '../../traces/types';\nimport { SPAN_TIME_RANGE_PRESETS, useSpansFilterBar, useSpansFilterBarFields } from '../hooks/use-spans-filter-bar';\nimport { FilterBar } from '@/ds/components/FilterBar';\nimport { FILTER_BAR_TIME_RANGE_FIELD_ID } from '@/ds/components/FilterBar/filter-bar-time-range';\n\n// Items are rebuilt from tokens with `id: fieldId` (traceTokensToFilterBarItems); give the\n// draft that id so the chip survives the round trip without remounting.\nconst createItemId = (fieldId: string) => fieldId;\n\nexport type SpansFilterBarProps = {\n datePreset: TraceDatePreset;\n dateFrom?: Date;\n dateTo?: Date;\n /** Earliest date the custom range picker allows. */\n minDate?: Date;\n /** Window the value suggestions are looked up in. */\n timeRange: TraceQueryDiscoveryTimeRange;\n tokens: TraceFilterToken[];\n groups: TraceFilterGroup[];\n onDatePresetChange: (preset: TraceDatePreset) => void;\n onDateChange: (value: Date | undefined, type: 'from' | 'to') => void;\n onDateRangeChange: (from: Date | undefined, to: Date | undefined) => void;\n /** Called by the time range chip's × with the default preset, e.g. to undo a histogram zoom first. */\n onDateReset?: (defaultPreset: TraceDatePreset) => void;\n onFiltersChange: (tokens: TraceFilterToken[], groups: TraceFilterGroup[]) => void;\n /** Turns a failed value suggestions lookup into the message shown in the option list. */\n describeSuggestionsError?: (error: unknown) => string | undefined;\n disabled?: boolean;\n};\n\n/** The spans filter bar: the time range plus the fields `querySpans()` accepts. */\nexport function SpansFilterBar({\n datePreset,\n dateFrom,\n dateTo,\n minDate,\n timeRange,\n tokens,\n groups,\n onDatePresetChange,\n onDateChange,\n onDateRangeChange,\n onDateReset,\n onFiltersChange,\n describeSuggestionsError,\n disabled,\n}: SpansFilterBarProps) {\n const fields = useSpansFilterBarFields({ timeRange });\n const { filterBarValue, onFilterBarChange } = useSpansFilterBar({ tokens, groups, onFiltersChange });\n\n return (\n <FilterBar\n fields={fields}\n operators={TRACE_FILTER_BAR_OPERATORS}\n value={filterBarValue}\n onValueChange={onFilterBarChange}\n createItemId={createItemId}\n describeSuggestionsError={describeSuggestionsError}\n maxDepth={3}\n aria-label=\"Span filters\"\n className=\"min-w-64 flex-1\"\n >\n <FilterBar.Chips\n renderChip={item =>\n item.fieldId === FILTER_BAR_TIME_RANGE_FIELD_ID ? (\n <FilterBar.TimeRange\n preset={datePreset}\n onPresetChange={onDatePresetChange}\n dateFrom={dateFrom}\n dateTo={dateTo}\n minDate={minDate}\n onDateChange={onDateChange}\n onDateRangeChange={onDateRangeChange}\n disabled={disabled}\n presets={SPAN_TIME_RANGE_PRESETS}\n defaultPreset={DEFAULT_TRACES_FILTERS.datePreset}\n onReset={onDateReset && (() => onDateReset(DEFAULT_TRACES_FILTERS.datePreset))}\n />\n ) : (\n <FilterBar.Chip item={item} />\n )\n }\n />\n <FilterBar.Input placeholder=\"Filter spans\" />\n </FilterBar>\n );\n}\n"],"mappings":";;;;;;;AAWA,IAAM,gBAAgB,YAAoB;;AAwB1C,SAAgB,eAAe,EAC7B,YACA,UACA,QACA,SACA,WACA,QACA,QACA,oBACA,cACA,mBACA,aACA,iBACA,0BACA,YACsB;CACtB,MAAM,SAAS,wBAAwB,EAAE,UAAU,CAAC;CACpD,MAAM,EAAE,gBAAgB,sBAAsB,kBAAkB;EAAE;EAAQ;EAAQ;CAAgB,CAAC;CAEnG,OACE,qBAAC,WAAD;EACU;EACR,WAAW;EACX,OAAO;EACP,eAAe;EACD;EACY;EAC1B,UAAU;EACV,cAAW;EACX,WAAU;EATZ,UAAA,CAWE,oBAAC,UAAU,OAAX,EACE,aAAY,SACV,KAAK,YAAA,cACH,oBAAC,UAAU,WAAX;GACE,QAAQ;GACR,gBAAgB;GACN;GACF;GACC;GACK;GACK;GACT;GACV,SAAS;GACT,eAAe,uBAAuB;GACtC,SAAS,sBAAsB,YAAY,uBAAuB,UAAU;EAC7E,CAAA,IAED,oBAAC,UAAU,MAAX,EAAsB,KAAO,CAAA,EAGlC,CAAA,GACD,oBAAC,UAAU,OAAX,EAAiB,aAAY,eAAgB,CAAA,CACpC;;AAEf"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_trace_filters = require("../../../trace-filters-
|
|
2
|
+
const require_trace_filters = require("../../../trace-filters-a0N9bf52.cjs");
|
|
3
3
|
const require_types = require("../../../types-CP7wbYua.cjs");
|
|
4
4
|
const require_domains_spans_span_filters = require("../span-filters.cjs.js");
|
|
5
|
-
const
|
|
5
|
+
const require_filter_bar_time_range = require("../../../filter-bar-time-range-BA-pXMlo.cjs");
|
|
6
6
|
let react = require("react");
|
|
7
7
|
let _mastra_react = require("@mastra/react");
|
|
8
8
|
let _mastra_react_hooks_capabilities = require("@mastra/react/hooks/capabilities");
|
|
@@ -32,7 +32,7 @@ function useSpansFilterBarFields({ timeRange }) {
|
|
|
32
32
|
const withModelFields = capabilities?.capabilities.spanQueryModelFields ?? false;
|
|
33
33
|
const { data: entityNames = NO_SUGGESTIONS } = (0, _mastra_react_hooks_traces.useEntityNames)();
|
|
34
34
|
const { data: environments = NO_SUGGESTIONS } = (0, _mastra_react_hooks_traces.useEnvironments)();
|
|
35
|
-
return (0, react.useMemo)(() => [
|
|
35
|
+
return (0, react.useMemo)(() => [require_filter_bar_time_range.FILTER_BAR_TIME_RANGE_FIELD, ...require_domains_spans_span_filters.createSpanFilterBarFields({
|
|
36
36
|
withContextFields,
|
|
37
37
|
withTimeToFirstChunk,
|
|
38
38
|
withTimeToFirstToken,
|
|
@@ -55,7 +55,7 @@ function useSpansFilterBarFields({ timeRange }) {
|
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
57
|
* The span filters as a filter bar value, and the handlers that write bar edits back.
|
|
58
|
-
* The time
|
|
58
|
+
* The time range is a synthetic, always-present item; it never round-trips to tokens.
|
|
59
59
|
*/
|
|
60
60
|
function useSpansFilterBar({ tokens, groups, onFiltersChange }) {
|
|
61
61
|
const items = (0, react.useMemo)(() => require_trace_filters.traceTokensToFilterBarItems(tokens), [tokens]);
|
|
@@ -64,7 +64,7 @@ function useSpansFilterBar({ tokens, groups, onFiltersChange }) {
|
|
|
64
64
|
return {
|
|
65
65
|
...groupsExpression,
|
|
66
66
|
nodes: [
|
|
67
|
-
|
|
67
|
+
require_filter_bar_time_range.FILTER_BAR_TIME_RANGE_ITEM,
|
|
68
68
|
...items,
|
|
69
69
|
...groupsExpression.nodes
|
|
70
70
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-spans-filter-bar.cjs.js","names":["useMastraClient","useObservabilityCapabilities","useEntityNames","useEnvironments","useMemo","
|
|
1
|
+
{"version":3,"file":"use-spans-filter-bar.cjs.js","names":["useMastraClient","useObservabilityCapabilities","useEntityNames","useEnvironments","useMemo","FILTER_BAR_TIME_RANGE_FIELD","createSpanFilterBarFields","createTraceQueryValuesResolver","traceTokensToFilterBarItems","traceFiltersToFilterBarExpression","FILTER_BAR_TIME_RANGE_ITEM","useCallback","filterBarExpressionToTraceFilters","isFilterBarGroup"],"sources":["../../../../src/domains/spans/hooks/use-spans-filter-bar.ts"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { useObservabilityCapabilities } from '@mastra/react/hooks/capabilities';\nimport { createTraceQueryValuesResolver, useEntityNames, useEnvironments } from '@mastra/react/hooks/traces';\nimport type { TraceQueryDiscoveryTimeRange } from '@mastra/react/hooks/traces';\nimport { useCallback, useMemo } from 'react';\nimport {\n filterBarExpressionToTraceFilters,\n traceFiltersToFilterBarExpression,\n traceTokensToFilterBarItems,\n} from '../../traces/trace-filters';\nimport type { TraceFilterGroup, TraceFilterToken } from '../../traces/trace-query-filters';\nimport type { TraceDatePreset } from '../../traces/types';\nimport { createSpanFilterBarFields } from '../span-filters';\nimport { isFilterBarGroup } from '@/ds/components/FilterBar';\nimport type { FilterBarExpression, FilterBarField, FilterBarItem } from '@/ds/components/FilterBar';\nimport {\n FILTER_BAR_TIME_RANGE_FIELD,\n FILTER_BAR_TIME_RANGE_FIELD_ID,\n FILTER_BAR_TIME_RANGE_ITEM,\n} from '@/ds/components/FilterBar/filter-bar-time-range';\n\n/** The time range presets the spans filter bar offers. */\nexport const SPAN_TIME_RANGE_PRESETS: readonly TraceDatePreset[] = [\n 'last-24h',\n 'last-3d',\n 'last-7d',\n 'last-14d',\n 'last-30d',\n 'custom',\n];\n\nconst NO_SUGGESTIONS: string[] = [];\n\nexport type UseSpansFilterBarFieldsOptions = {\n /** Window the value suggestions are looked up in. */\n timeRange: TraceQueryDiscoveryTimeRange;\n};\n\n/**\n * The fields the spans filter bar offers: the time range plus the fields `querySpans()` accepts.\n * Context, model and outcome fields and streaming timings are only included when the store declares them.\n */\nexport function useSpansFilterBarFields({ timeRange }: UseSpansFilterBarFieldsOptions): FilterBarField[] {\n const client = useMastraClient();\n const { data: capabilities } = useObservabilityCapabilities();\n const withContextFields = capabilities?.capabilities.spanQueryContextFields ?? false;\n const withTimeToFirstChunk = capabilities?.capabilities.traceQueryTimeToFirstChunk ?? false;\n const withTimeToFirstToken = capabilities?.capabilities.traceQueryTimeToFirstToken ?? false;\n const withOutcomeFields = capabilities?.capabilities.spanQueryOutcomeFields ?? false;\n const withModelFields = capabilities?.capabilities.spanQueryModelFields ?? false;\n const { data: entityNames = NO_SUGGESTIONS } = useEntityNames();\n const { data: environments = NO_SUGGESTIONS } = useEnvironments();\n\n // Memoized for correctness: static suggestion lists become the value editor's Combobox\n // `items`, which loops if handed a new array on every render.\n return useMemo(\n () => [\n FILTER_BAR_TIME_RANGE_FIELD,\n ...createSpanFilterBarFields({\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields,\n withModelFields,\n entityNames,\n environments,\n valueSuggestions: path => createTraceQueryValuesResolver(client, timeRange, 'spans', path),\n }),\n ],\n [\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields,\n withModelFields,\n entityNames,\n environments,\n client,\n timeRange,\n ],\n );\n}\n\nexport type UseSpansFilterBarOptions = {\n tokens: TraceFilterToken[];\n groups: TraceFilterGroup[];\n onFiltersChange: (tokens: TraceFilterToken[], groups: TraceFilterGroup[]) => void;\n};\n\n/**\n * The span filters as a filter bar value, and the handlers that write bar edits back.\n * The time range is a synthetic, always-present item; it never round-trips to tokens.\n */\nexport function useSpansFilterBar({ tokens, groups, onFiltersChange }: UseSpansFilterBarOptions): {\n filterBarValue: FilterBarExpression;\n onFilterBarChange: (expression: FilterBarExpression) => void;\n /** Replaces any filter on `fieldId` with `is value`, e.g. from a list cell. */\n onFilterByField: (fieldId: string, value: string) => void;\n} {\n const items = useMemo(() => traceTokensToFilterBarItems(tokens), [tokens]);\n\n const filterBarValue = useMemo<FilterBarExpression>(() => {\n const groupsExpression = traceFiltersToFilterBarExpression([], groups);\n return { ...groupsExpression, nodes: [FILTER_BAR_TIME_RANGE_ITEM, ...items, ...groupsExpression.nodes] };\n }, [items, groups]);\n\n const onFilterBarChange = useCallback(\n (expression: FilterBarExpression) => {\n const next = filterBarExpressionToTraceFilters({\n ...expression,\n nodes: expression.nodes.filter(\n node => isFilterBarGroup(node) || node.fieldId !== FILTER_BAR_TIME_RANGE_FIELD_ID,\n ),\n });\n onFiltersChange(next.tokens, next.groups);\n },\n [onFiltersChange],\n );\n\n const onFilterByField = useCallback(\n (fieldId: string, value: string) => {\n const withoutField = items.filter(item => item.fieldId !== fieldId);\n const item: FilterBarItem = { id: `${fieldId}:${value}`, fieldId, operatorId: 'is', value };\n const groupNodes = filterBarValue.nodes.filter(isFilterBarGroup);\n onFilterBarChange({ ...filterBarValue, nodes: [...withoutField, item, ...groupNodes] });\n },\n [items, filterBarValue, onFilterBarChange],\n );\n\n return { filterBarValue, onFilterBarChange, onFilterByField };\n}\n"],"mappings":";;;;;;;;;;;AAsBA,IAAa,0BAAsD;CACjE;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,IAAM,iBAA2B,CAAC;;;;;AAWlC,SAAgB,wBAAwB,EAAE,aAA+D;CACvG,MAAM,UAAA,GAASA,cAAAA,gBAAAA,CAAgB;CAC/B,MAAM,EAAE,MAAM,kBAAA,GAAiBC,iCAAAA,6BAAAA,CAA6B;CAC5D,MAAM,oBAAoB,cAAc,aAAa,0BAA0B;CAC/E,MAAM,uBAAuB,cAAc,aAAa,8BAA8B;CACtF,MAAM,uBAAuB,cAAc,aAAa,8BAA8B;CACtF,MAAM,oBAAoB,cAAc,aAAa,0BAA0B;CAC/E,MAAM,kBAAkB,cAAc,aAAa,wBAAwB;CAC3E,MAAM,EAAE,MAAM,cAAc,oBAAA,GAAmBC,2BAAAA,eAAAA,CAAe;CAC9D,MAAM,EAAE,MAAM,eAAe,oBAAA,GAAmBC,2BAAAA,gBAAAA,CAAgB;CAIhE,QAAA,GAAOC,MAAAA,QAAAA,OACC,CACJC,8BAAAA,6BACA,GAAGC,mCAAAA,0BAA0B;EAC3B;EACA;EACA;EACA;EACA;EACA;EACA;EACA,mBAAkB,UAAA,GAAQC,2BAAAA,+BAAAA,CAA+B,QAAQ,WAAW,SAAS,IAAI;CAC3F,CAAC,CACH,GACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;AACF;;;;;AAYA,SAAgB,kBAAkB,EAAE,QAAQ,QAAQ,mBAKlD;CACA,MAAM,SAAA,GAAQH,MAAAA,QAAAA,OAAcI,sBAAAA,4BAA4B,MAAM,GAAG,CAAC,MAAM,CAAC;CAEzE,MAAM,kBAAA,GAAiBJ,MAAAA,QAAAA,OAAmC;EACxD,MAAM,mBAAmBK,sBAAAA,kCAAkC,CAAC,GAAG,MAAM;EACrE,OAAO;GAAE,GAAG;GAAkB,OAAO;IAACC,8BAAAA;IAA4B,GAAG;IAAO,GAAG,iBAAiB;GAAK;EAAE;CACzG,GAAG,CAAC,OAAO,MAAM,CAAC;CAElB,MAAM,qBAAA,GAAoBC,MAAAA,YAAAA,EACvB,eAAoC;EACnC,MAAM,OAAOC,sBAAAA,kCAAkC;GAC7C,GAAG;GACH,OAAO,WAAW,MAAM,QACtB,SAAQC,cAAAA,iBAAiB,IAAI,KAAK,KAAK,YAAA,WACzC;EACF,CAAC;EACD,gBAAgB,KAAK,QAAQ,KAAK,MAAM;CAC1C,GACA,CAAC,eAAe,CAClB;CAYA,OAAO;EAAE;EAAgB;EAAmB,kBAAA,GAVpBF,MAAAA,YAAAA,EACrB,SAAiB,UAAkB;GAClC,MAAM,eAAe,MAAM,QAAO,SAAQ,KAAK,YAAY,OAAO;GAClE,MAAM,OAAsB;IAAE,IAAI,GAAG,QAAQ,GAAG;IAAS;IAAS,YAAY;IAAM;GAAM;GAC1F,MAAM,aAAa,eAAe,MAAM,OAAOE,cAAAA,gBAAgB;GAC/D,kBAAkB;IAAE,GAAG;IAAgB,OAAO;KAAC,GAAG;KAAc;KAAM,GAAG;IAAU;GAAE,CAAC;EACxF,GACA;GAAC;GAAO;GAAgB;EAAiB,CAGC;CAAgB;AAC9D"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { L as filterBarExpressionToTraceFilters, rt as traceTokensToFilterBarItems, tt as traceFiltersToFilterBarExpression } from "../../../trace-filters-
|
|
1
|
+
import { L as filterBarExpressionToTraceFilters, rt as traceTokensToFilterBarItems, tt as traceFiltersToFilterBarExpression } from "../../../trace-filters-CaWkw779.js";
|
|
2
2
|
import { t as isFilterBarGroup } from "../../../types-DiiL5mTO.js";
|
|
3
3
|
import { createSpanFilterBarFields } from "../span-filters.es.js";
|
|
4
|
-
import {
|
|
4
|
+
import { r as FILTER_BAR_TIME_RANGE_ITEM, t as FILTER_BAR_TIME_RANGE_FIELD } from "../../../filter-bar-time-range-mg9JeYue.js";
|
|
5
5
|
import { useCallback, useMemo } from "react";
|
|
6
6
|
import { useMastraClient } from "@mastra/react";
|
|
7
7
|
import { useObservabilityCapabilities } from "@mastra/react/hooks/capabilities";
|
|
@@ -31,7 +31,7 @@ function useSpansFilterBarFields({ timeRange }) {
|
|
|
31
31
|
const withModelFields = capabilities?.capabilities.spanQueryModelFields ?? false;
|
|
32
32
|
const { data: entityNames = NO_SUGGESTIONS } = useEntityNames();
|
|
33
33
|
const { data: environments = NO_SUGGESTIONS } = useEnvironments();
|
|
34
|
-
return useMemo(() => [
|
|
34
|
+
return useMemo(() => [FILTER_BAR_TIME_RANGE_FIELD, ...createSpanFilterBarFields({
|
|
35
35
|
withContextFields,
|
|
36
36
|
withTimeToFirstChunk,
|
|
37
37
|
withTimeToFirstToken,
|
|
@@ -54,7 +54,7 @@ function useSpansFilterBarFields({ timeRange }) {
|
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
56
|
* The span filters as a filter bar value, and the handlers that write bar edits back.
|
|
57
|
-
* The time
|
|
57
|
+
* The time range is a synthetic, always-present item; it never round-trips to tokens.
|
|
58
58
|
*/
|
|
59
59
|
function useSpansFilterBar({ tokens, groups, onFiltersChange }) {
|
|
60
60
|
const items = useMemo(() => traceTokensToFilterBarItems(tokens), [tokens]);
|
|
@@ -63,7 +63,7 @@ function useSpansFilterBar({ tokens, groups, onFiltersChange }) {
|
|
|
63
63
|
return {
|
|
64
64
|
...groupsExpression,
|
|
65
65
|
nodes: [
|
|
66
|
-
|
|
66
|
+
FILTER_BAR_TIME_RANGE_ITEM,
|
|
67
67
|
...items,
|
|
68
68
|
...groupsExpression.nodes
|
|
69
69
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-spans-filter-bar.es.js","names":[],"sources":["../../../../src/domains/spans/hooks/use-spans-filter-bar.ts"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { useObservabilityCapabilities } from '@mastra/react/hooks/capabilities';\nimport { createTraceQueryValuesResolver, useEntityNames, useEnvironments } from '@mastra/react/hooks/traces';\nimport type { TraceQueryDiscoveryTimeRange } from '@mastra/react/hooks/traces';\nimport { useCallback, useMemo } from 'react';\nimport {\n
|
|
1
|
+
{"version":3,"file":"use-spans-filter-bar.es.js","names":[],"sources":["../../../../src/domains/spans/hooks/use-spans-filter-bar.ts"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { useObservabilityCapabilities } from '@mastra/react/hooks/capabilities';\nimport { createTraceQueryValuesResolver, useEntityNames, useEnvironments } from '@mastra/react/hooks/traces';\nimport type { TraceQueryDiscoveryTimeRange } from '@mastra/react/hooks/traces';\nimport { useCallback, useMemo } from 'react';\nimport {\n filterBarExpressionToTraceFilters,\n traceFiltersToFilterBarExpression,\n traceTokensToFilterBarItems,\n} from '../../traces/trace-filters';\nimport type { TraceFilterGroup, TraceFilterToken } from '../../traces/trace-query-filters';\nimport type { TraceDatePreset } from '../../traces/types';\nimport { createSpanFilterBarFields } from '../span-filters';\nimport { isFilterBarGroup } from '@/ds/components/FilterBar';\nimport type { FilterBarExpression, FilterBarField, FilterBarItem } from '@/ds/components/FilterBar';\nimport {\n FILTER_BAR_TIME_RANGE_FIELD,\n FILTER_BAR_TIME_RANGE_FIELD_ID,\n FILTER_BAR_TIME_RANGE_ITEM,\n} from '@/ds/components/FilterBar/filter-bar-time-range';\n\n/** The time range presets the spans filter bar offers. */\nexport const SPAN_TIME_RANGE_PRESETS: readonly TraceDatePreset[] = [\n 'last-24h',\n 'last-3d',\n 'last-7d',\n 'last-14d',\n 'last-30d',\n 'custom',\n];\n\nconst NO_SUGGESTIONS: string[] = [];\n\nexport type UseSpansFilterBarFieldsOptions = {\n /** Window the value suggestions are looked up in. */\n timeRange: TraceQueryDiscoveryTimeRange;\n};\n\n/**\n * The fields the spans filter bar offers: the time range plus the fields `querySpans()` accepts.\n * Context, model and outcome fields and streaming timings are only included when the store declares them.\n */\nexport function useSpansFilterBarFields({ timeRange }: UseSpansFilterBarFieldsOptions): FilterBarField[] {\n const client = useMastraClient();\n const { data: capabilities } = useObservabilityCapabilities();\n const withContextFields = capabilities?.capabilities.spanQueryContextFields ?? false;\n const withTimeToFirstChunk = capabilities?.capabilities.traceQueryTimeToFirstChunk ?? false;\n const withTimeToFirstToken = capabilities?.capabilities.traceQueryTimeToFirstToken ?? false;\n const withOutcomeFields = capabilities?.capabilities.spanQueryOutcomeFields ?? false;\n const withModelFields = capabilities?.capabilities.spanQueryModelFields ?? false;\n const { data: entityNames = NO_SUGGESTIONS } = useEntityNames();\n const { data: environments = NO_SUGGESTIONS } = useEnvironments();\n\n // Memoized for correctness: static suggestion lists become the value editor's Combobox\n // `items`, which loops if handed a new array on every render.\n return useMemo(\n () => [\n FILTER_BAR_TIME_RANGE_FIELD,\n ...createSpanFilterBarFields({\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields,\n withModelFields,\n entityNames,\n environments,\n valueSuggestions: path => createTraceQueryValuesResolver(client, timeRange, 'spans', path),\n }),\n ],\n [\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields,\n withModelFields,\n entityNames,\n environments,\n client,\n timeRange,\n ],\n );\n}\n\nexport type UseSpansFilterBarOptions = {\n tokens: TraceFilterToken[];\n groups: TraceFilterGroup[];\n onFiltersChange: (tokens: TraceFilterToken[], groups: TraceFilterGroup[]) => void;\n};\n\n/**\n * The span filters as a filter bar value, and the handlers that write bar edits back.\n * The time range is a synthetic, always-present item; it never round-trips to tokens.\n */\nexport function useSpansFilterBar({ tokens, groups, onFiltersChange }: UseSpansFilterBarOptions): {\n filterBarValue: FilterBarExpression;\n onFilterBarChange: (expression: FilterBarExpression) => void;\n /** Replaces any filter on `fieldId` with `is value`, e.g. from a list cell. */\n onFilterByField: (fieldId: string, value: string) => void;\n} {\n const items = useMemo(() => traceTokensToFilterBarItems(tokens), [tokens]);\n\n const filterBarValue = useMemo<FilterBarExpression>(() => {\n const groupsExpression = traceFiltersToFilterBarExpression([], groups);\n return { ...groupsExpression, nodes: [FILTER_BAR_TIME_RANGE_ITEM, ...items, ...groupsExpression.nodes] };\n }, [items, groups]);\n\n const onFilterBarChange = useCallback(\n (expression: FilterBarExpression) => {\n const next = filterBarExpressionToTraceFilters({\n ...expression,\n nodes: expression.nodes.filter(\n node => isFilterBarGroup(node) || node.fieldId !== FILTER_BAR_TIME_RANGE_FIELD_ID,\n ),\n });\n onFiltersChange(next.tokens, next.groups);\n },\n [onFiltersChange],\n );\n\n const onFilterByField = useCallback(\n (fieldId: string, value: string) => {\n const withoutField = items.filter(item => item.fieldId !== fieldId);\n const item: FilterBarItem = { id: `${fieldId}:${value}`, fieldId, operatorId: 'is', value };\n const groupNodes = filterBarValue.nodes.filter(isFilterBarGroup);\n onFilterBarChange({ ...filterBarValue, nodes: [...withoutField, item, ...groupNodes] });\n },\n [items, filterBarValue, onFilterBarChange],\n );\n\n return { filterBarValue, onFilterBarChange, onFilterByField };\n}\n"],"mappings":";;;;;;;;;;AAsBA,IAAa,0BAAsD;CACjE;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,IAAM,iBAA2B,CAAC;;;;;AAWlC,SAAgB,wBAAwB,EAAE,aAA+D;CACvG,MAAM,SAAS,gBAAgB;CAC/B,MAAM,EAAE,MAAM,iBAAiB,6BAA6B;CAC5D,MAAM,oBAAoB,cAAc,aAAa,0BAA0B;CAC/E,MAAM,uBAAuB,cAAc,aAAa,8BAA8B;CACtF,MAAM,uBAAuB,cAAc,aAAa,8BAA8B;CACtF,MAAM,oBAAoB,cAAc,aAAa,0BAA0B;CAC/E,MAAM,kBAAkB,cAAc,aAAa,wBAAwB;CAC3E,MAAM,EAAE,MAAM,cAAc,mBAAmB,eAAe;CAC9D,MAAM,EAAE,MAAM,eAAe,mBAAmB,gBAAgB;CAIhE,OAAO,cACC,CACJ,6BACA,GAAG,0BAA0B;EAC3B;EACA;EACA;EACA;EACA;EACA;EACA;EACA,mBAAkB,SAAQ,+BAA+B,QAAQ,WAAW,SAAS,IAAI;CAC3F,CAAC,CACH,GACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;AACF;;;;;AAYA,SAAgB,kBAAkB,EAAE,QAAQ,QAAQ,mBAKlD;CACA,MAAM,QAAQ,cAAc,4BAA4B,MAAM,GAAG,CAAC,MAAM,CAAC;CAEzE,MAAM,iBAAiB,cAAmC;EACxD,MAAM,mBAAmB,kCAAkC,CAAC,GAAG,MAAM;EACrE,OAAO;GAAE,GAAG;GAAkB,OAAO;IAAC;IAA4B,GAAG;IAAO,GAAG,iBAAiB;GAAK;EAAE;CACzG,GAAG,CAAC,OAAO,MAAM,CAAC;CAElB,MAAM,oBAAoB,aACvB,eAAoC;EACnC,MAAM,OAAO,kCAAkC;GAC7C,GAAG;GACH,OAAO,WAAW,MAAM,QACtB,SAAQ,iBAAiB,IAAI,KAAK,KAAK,YAAA,WACzC;EACF,CAAC;EACD,gBAAgB,KAAK,QAAQ,KAAK,MAAM;CAC1C,GACA,CAAC,eAAe,CAClB;CAYA,OAAO;EAAE;EAAgB;EAAmB,iBAVpB,aACrB,SAAiB,UAAkB;GAClC,MAAM,eAAe,MAAM,QAAO,SAAQ,KAAK,YAAY,OAAO;GAClE,MAAM,OAAsB;IAAE,IAAI,GAAG,QAAQ,GAAG;IAAS;IAAS,YAAY;IAAM;GAAM;GAC1F,MAAM,aAAa,eAAe,MAAM,OAAO,gBAAgB;GAC/D,kBAAkB;IAAE,GAAG;IAAgB,OAAO;KAAC,GAAG;KAAc;KAAM,GAAG;IAAU;GAAE,CAAC;EACxF,GACA;GAAC;GAAO;GAAgB;EAAiB,CAGC;CAAgB;AAC9D"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_trace_filters = require("../../trace-filters-
|
|
2
|
+
const require_trace_filters = require("../../trace-filters-a0N9bf52.cjs");
|
|
3
3
|
let _mastra_core_observability = require("@mastra/core/observability");
|
|
4
4
|
// src/domains/spans/span-filters.ts
|
|
5
|
-
/** Span query fields every store accepts. `startedAt`/`endedAt` are left to the time
|
|
5
|
+
/** Span query fields every store accepts. `startedAt`/`endedAt` are left to the time range. */
|
|
6
6
|
var SPAN_CORE_FILTER_FIELD_IDS = [
|
|
7
7
|
"name",
|
|
8
8
|
"spanType",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"span-filters.cjs.js","names":["TRACE_FILTER_BAR_LABELS","traceFilterFieldIcon","traceFilterFieldColor","ROOT_ENTITY_TYPE_OPTIONS","SpanType","EntityType","TRACE_STATUS_OPTIONS","TRACE_STRING_OPERATORS","TRACE_SYNTHETIC_OPERATORS","TRACE_REQUIRED_STRING_OPERATORS","TRACE_TEXT_OPERATORS","TRACE_PRESENCE_OPERATORS","TRACE_NUMBER_OPERATORS","withoutUnrecordedStreamingTimings","createOutcomeFilterBarFields","isLegacyAnyValue","scalarPredicate","isTraceFilterGroup"],"sources":["../../../src/domains/spans/span-filters.ts"],"sourcesContent":["import { EntityType, SpanType } from '@mastra/core/observability';\nimport type { TraceQueryScalarPredicate } from '@mastra/core/storage';\nimport {\n isLegacyAnyValue,\n ROOT_ENTITY_TYPE_OPTIONS,\n TRACE_FILTER_BAR_LABELS,\n TRACE_NUMBER_OPERATORS,\n TRACE_PRESENCE_OPERATORS,\n TRACE_REQUIRED_STRING_OPERATORS,\n TRACE_STATUS_OPTIONS,\n TRACE_STRING_OPERATORS,\n TRACE_SYNTHETIC_OPERATORS,\n TRACE_TEXT_OPERATORS,\n createOutcomeFilterBarFields,\n traceFilterFieldColor,\n traceFilterFieldIcon,\n withoutUnrecordedStreamingTimings,\n} from '../traces/trace-filters';\nimport type { StreamingTimingSupport } from '../traces/trace-filters';\nimport { isTraceFilterGroup, scalarPredicate } from '../traces/trace-query-filters';\nimport type { TraceFilterGroup, TraceFilterOperatorId, TraceFilterToken } from '../traces/trace-query-filters';\nimport type { FilterBarField, FilterBarOption, FilterBarSuggestionsResolver } from '@/ds/components/FilterBar/types';\n\n/** Span query fields every store accepts. `startedAt`/`endedAt` are left to the time-range chip. */\nexport const SPAN_CORE_FILTER_FIELD_IDS = [\n 'name',\n 'spanType',\n 'status',\n 'error',\n 'durationMs',\n 'timeToFirstChunkMs',\n 'timeToFirstTokenMs',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityVersionId',\n 'rootEntityVersionId',\n 'runId',\n 'sessionId',\n 'userId',\n 'organizationId',\n] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryContextFields`. */\nexport const SPAN_CONTEXT_FILTER_FIELD_IDS = [\n 'traceId',\n 'spanId',\n 'parentSpanId',\n 'threadId',\n 'resourceId',\n 'requestId',\n 'serviceName',\n 'experimentId',\n 'environment',\n 'executionSource',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryOutcomeFields`. */\nexport const SPAN_OUTCOME_FILTER_FIELD_IDS = ['outcome', 'stopReason'] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryModelFields`. */\nexport const SPAN_MODEL_FILTER_FIELD_IDS = ['model', 'provider'] as const;\n\nconst NUMBER_FIELD_IDS: ReadonlySet<string> = new Set(['durationMs', 'timeToFirstChunkMs', 'timeToFirstTokenMs']);\n/** The query can only test `error` for presence; any other operator is rejected. */\nconst PRESENCE_ONLY_FIELD_IDS: ReadonlySet<string> = new Set(['error']);\n/** Fields every span carries. On any other field, \"is not X\" must also keep spans where it is missing. */\nconst REQUIRED_FIELD_IDS: ReadonlySet<string> = new Set([\n 'name',\n 'spanType',\n 'status',\n 'traceId',\n 'spanId',\n 'durationMs',\n]);\n\nconst SPAN_FILTER_BAR_LABELS: Record<string, string> = {\n ...TRACE_FILTER_BAR_LABELS,\n name: 'Span name',\n spanType: 'Span type',\n spanId: 'Span ID',\n parentSpanId: 'Parent span ID',\n error: 'Error',\n timeToFirstChunkMs: 'Time to first chunk (ms)',\n timeToFirstTokenMs: 'Time to first token (ms)',\n executionSource: 'Execution source',\n entityType: 'Primitive type',\n entityVersionId: 'Primitive version ID',\n parentEntityType: 'Parent primitive type',\n parentEntityId: 'Parent primitive ID',\n parentEntityName: 'Parent primitive name',\n parentEntityVersionId: 'Parent primitive version ID',\n rootEntityType: 'Root primitive type',\n rootEntityId: 'Root primitive ID',\n rootEntityName: 'Root primitive name',\n rootEntityVersionId: 'Root primitive version ID',\n model: 'Model',\n provider: 'Provider',\n};\n\n/** Span fields without their own trace icon borrow the icon of the closest trace field. */\nconst SPAN_ICON_FIELD_ALIASES: Record<string, string> = {\n name: 'spans.name',\n spanType: 'spans.spanType',\n error: 'spans.error',\n timeToFirstChunkMs: 'durationMs',\n timeToFirstTokenMs: 'durationMs',\n spanId: 'traceId',\n parentSpanId: 'traceId',\n executionSource: 'runId',\n entityType: 'rootEntityType',\n parentEntityType: 'rootEntityType',\n entityVersionId: 'entityId',\n parentEntityId: 'entityId',\n parentEntityVersionId: 'entityId',\n rootEntityId: 'entityId',\n rootEntityVersionId: 'entityId',\n parentEntityName: 'entityName',\n rootEntityName: 'entityName',\n model: 'spans.model',\n provider: 'spans.provider',\n};\n\nconst spanFieldBase = (id: string) => ({\n id,\n label: SPAN_FILTER_BAR_LABELS[id] ?? id,\n icon: traceFilterFieldIcon(SPAN_ICON_FIELD_ALIASES[id] ?? id),\n color: traceFilterFieldColor(id),\n});\n\nconst humanize = (value: string) => {\n const words = value.replace(/_/g, ' ');\n return words.charAt(0).toUpperCase() + words.slice(1);\n};\n\nconst byLabel = (a: { label?: string; value: string }, b: { label?: string; value: string }) =>\n (a.label ?? a.value).localeCompare(b.label ?? b.value);\n\nconst ENTITY_TYPE_LABELS: Record<string, string> = Object.fromEntries(\n ROOT_ENTITY_TYPE_OPTIONS.map(option => [option.entityType, option.label]),\n);\n\nconst SPAN_TYPE_OPTIONS: FilterBarOption[] = Object.values(SpanType)\n .map(value => ({ value, label: humanize(value) }))\n .sort(byLabel);\n\nconst ENTITY_TYPE_OPTIONS: FilterBarOption[] = Object.values(EntityType)\n .map(value => ({ value, label: ENTITY_TYPE_LABELS[value] ?? humanize(value) }))\n .sort(byLabel);\n\nconst STATUS_OPTIONS: FilterBarOption[] = TRACE_STATUS_OPTIONS.filter(option => option.value !== 'running').map(\n option => ({ value: option.value, label: option.label }),\n);\n\n/** FilterBar fields for the spans page: only paths and operators `querySpans()` accepts. */\nexport function createSpanFilterBarFields({\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields = false,\n withModelFields = false,\n entityNames,\n environments,\n valueSuggestions,\n}: StreamingTimingSupport & {\n /** Offer the context fields. Only when the server declares `spanQueryContextFields`. */\n withContextFields: boolean;\n /** Offer `outcome` and `stopReason`. Only when the server declares `spanQueryOutcomeFields`. */\n withOutcomeFields?: boolean;\n /** Offer `model` and `provider`. Only when the server declares `spanQueryModelFields`. */\n withModelFields?: boolean;\n entityNames: readonly string[];\n environments: readonly string[];\n /** Builds a lazy value resolver for a span field. Absent → free text. */\n valueSuggestions?: (path: string) => FilterBarSuggestionsResolver;\n}): FilterBarField[] {\n const pick = (\n id: string,\n suggestions: FilterBarOption[],\n operators: TraceFilterOperatorId[] = TRACE_STRING_OPERATORS,\n ): FilterBarField => ({ ...spanFieldBase(id), operators, strict: true, suggestions });\n const names = entityNames.map(value => ({ value }));\n\n const field = (id: string): FilterBarField => {\n switch (id) {\n case 'status':\n return pick(id, STATUS_OPTIONS, TRACE_SYNTHETIC_OPERATORS);\n case 'spanType':\n return pick(id, SPAN_TYPE_OPTIONS, TRACE_REQUIRED_STRING_OPERATORS);\n case 'entityType':\n case 'parentEntityType':\n case 'rootEntityType':\n return pick(id, ENTITY_TYPE_OPTIONS);\n case 'entityName':\n case 'rootEntityName':\n return pick(id, names);\n case 'environment':\n return pick(\n id,\n environments.map(value => ({ value })),\n );\n case 'name': {\n const resolver = valueSuggestions?.(id);\n return {\n ...spanFieldBase(id),\n operators: TRACE_TEXT_OPERATORS,\n ...(resolver ? { strict: true, suggestions: resolver } : {}),\n };\n }\n case 'error':\n return { ...spanFieldBase(id), operators: TRACE_PRESENCE_OPERATORS };\n case 'durationMs':\n case 'timeToFirstChunkMs':\n case 'timeToFirstTokenMs':\n return { ...spanFieldBase(id), type: 'number', operators: TRACE_NUMBER_OPERATORS };\n case 'traceId':\n case 'spanId':\n return { ...spanFieldBase(id), operators: TRACE_REQUIRED_STRING_OPERATORS };\n case 'model':\n case 'provider': {\n const resolver = valueSuggestions?.(id);\n return {\n ...spanFieldBase(id),\n operators: TRACE_STRING_OPERATORS,\n ...(resolver ? { suggestions: resolver } : {}),\n };\n }\n default:\n return { ...spanFieldBase(id), operators: TRACE_STRING_OPERATORS };\n }\n };\n\n const offered = withoutUnrecordedStreamingTimings(\n new Set([...SPAN_CORE_FILTER_FIELD_IDS, ...SPAN_CONTEXT_FILTER_FIELD_IDS]),\n {\n withTimeToFirstChunk,\n withTimeToFirstToken,\n },\n );\n const sortFields = (ids: readonly string[]) =>\n ids\n .filter(id => offered.has(id))\n .map(field)\n .sort((a, b) => a.label.localeCompare(b.label));\n return [\n ...sortFields(SPAN_CORE_FILTER_FIELD_IDS),\n ...(withContextFields ? sortFields(SPAN_CONTEXT_FILTER_FIELD_IDS) : []),\n ...(withModelFields ? SPAN_MODEL_FILTER_FIELD_IDS.map(field) : []),\n ...(withOutcomeFields ? createOutcomeFilterBarFields(spanFieldBase, valueSuggestions) : []),\n ];\n}\n\nfunction tokenToSpanQueryPredicate(\n token: TraceFilterToken,\n allowedFieldIds: ReadonlySet<string>,\n): TraceQueryScalarPredicate | undefined {\n const { fieldId } = token;\n if (!allowedFieldIds.has(fieldId)) return undefined;\n const operatorId = token.operatorId ?? 'is';\n const isPresence = operatorId === 'exists' || operatorId === 'notExists';\n if (PRESENCE_ONLY_FIELD_IDS.has(fieldId) && !isPresence) return undefined;\n\n const rawValues = (Array.isArray(token.value) ? token.value : [token.value]).filter(\n (value): value is string =>\n typeof value === 'string' && Boolean(value.trim()) && !isLegacyAnyValue(value, operatorId),\n );\n if (!rawValues.length && !isPresence) return undefined;\n\n let values: (string | number)[] = rawValues;\n if (NUMBER_FIELD_IDS.has(fieldId)) {\n values = rawValues.map(Number).filter(value => !Number.isNaN(value));\n if (!values.length && !isPresence) return undefined;\n }\n if (operatorId === 'matches' || operatorId === 'notMatches') {\n // The query rejects a text literal with no letters or digits.\n values = values.filter(value => /[\\p{L}\\p{M}\\p{N}]/u.test(String(value)));\n if (!values.length) return undefined;\n }\n\n const predicate = scalarPredicate(operatorId, fieldId, values);\n if (!predicate) return undefined;\n if ((operatorId === 'isNot' || operatorId === 'notIn') && !REQUIRED_FIELD_IDS.has(fieldId)) {\n return { op: 'or', args: [predicate, { op: 'notExists', path: fieldId }] };\n }\n return predicate;\n}\n\nfunction groupToSpanQueryPredicate(\n group: TraceFilterGroup,\n allowedFieldIds: ReadonlySet<string>,\n): TraceQueryScalarPredicate | undefined {\n const args = group.nodes\n .map(node =>\n isTraceFilterGroup(node)\n ? groupToSpanQueryPredicate(node, allowedFieldIds)\n : tokenToSpanQueryPredicate(node, allowedFieldIds),\n )\n .filter((predicate): predicate is TraceQueryScalarPredicate => Boolean(predicate));\n if (args.length === 0) return undefined;\n return args.length === 1 ? args[0] : { op: group.logic, args };\n}\n\n/**\n * The span query `where` for the filter bar's tokens and groups, or `undefined` when nothing applies.\n * Conditions the span query can't run (unknown fields, context, model or outcome fields or streaming timings without\n * the capability, unusable values) are left out instead of failing the request.\n */\nexport function buildSpanQueryWhere(\n tokens: TraceFilterToken[],\n groups: TraceFilterGroup[],\n {\n withContextFields,\n withOutcomeFields = false,\n withModelFields = false,\n ...support\n }: StreamingTimingSupport & { withContextFields: boolean; withOutcomeFields?: boolean; withModelFields?: boolean },\n): TraceQueryScalarPredicate | undefined {\n const allowedFieldIds = withoutUnrecordedStreamingTimings(\n new Set([\n ...SPAN_CORE_FILTER_FIELD_IDS,\n ...(withContextFields ? SPAN_CONTEXT_FILTER_FIELD_IDS : []),\n ...(withOutcomeFields ? SPAN_OUTCOME_FILTER_FIELD_IDS : []),\n ...(withModelFields ? SPAN_MODEL_FILTER_FIELD_IDS : []),\n ]),\n support,\n );\n const args = [\n ...tokens.map(token => tokenToSpanQueryPredicate(token, allowedFieldIds)),\n ...groups.map(group => groupToSpanQueryPredicate(group, allowedFieldIds)),\n ].filter((predicate): predicate is TraceQueryScalarPredicate => Boolean(predicate));\n return args.length ? { op: 'and', args } : undefined;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"span-filters.cjs.js","names":["TRACE_FILTER_BAR_LABELS","traceFilterFieldIcon","traceFilterFieldColor","ROOT_ENTITY_TYPE_OPTIONS","SpanType","EntityType","TRACE_STATUS_OPTIONS","TRACE_STRING_OPERATORS","TRACE_SYNTHETIC_OPERATORS","TRACE_REQUIRED_STRING_OPERATORS","TRACE_TEXT_OPERATORS","TRACE_PRESENCE_OPERATORS","TRACE_NUMBER_OPERATORS","withoutUnrecordedStreamingTimings","createOutcomeFilterBarFields","isLegacyAnyValue","scalarPredicate","isTraceFilterGroup"],"sources":["../../../src/domains/spans/span-filters.ts"],"sourcesContent":["import { EntityType, SpanType } from '@mastra/core/observability';\nimport type { TraceQueryScalarPredicate } from '@mastra/core/storage';\nimport {\n isLegacyAnyValue,\n ROOT_ENTITY_TYPE_OPTIONS,\n TRACE_FILTER_BAR_LABELS,\n TRACE_NUMBER_OPERATORS,\n TRACE_PRESENCE_OPERATORS,\n TRACE_REQUIRED_STRING_OPERATORS,\n TRACE_STATUS_OPTIONS,\n TRACE_STRING_OPERATORS,\n TRACE_SYNTHETIC_OPERATORS,\n TRACE_TEXT_OPERATORS,\n createOutcomeFilterBarFields,\n traceFilterFieldColor,\n traceFilterFieldIcon,\n withoutUnrecordedStreamingTimings,\n} from '../traces/trace-filters';\nimport type { StreamingTimingSupport } from '../traces/trace-filters';\nimport { isTraceFilterGroup, scalarPredicate } from '../traces/trace-query-filters';\nimport type { TraceFilterGroup, TraceFilterOperatorId, TraceFilterToken } from '../traces/trace-query-filters';\nimport type { FilterBarField, FilterBarOption, FilterBarSuggestionsResolver } from '@/ds/components/FilterBar/types';\n\n/** Span query fields every store accepts. `startedAt`/`endedAt` are left to the time range. */\nexport const SPAN_CORE_FILTER_FIELD_IDS = [\n 'name',\n 'spanType',\n 'status',\n 'error',\n 'durationMs',\n 'timeToFirstChunkMs',\n 'timeToFirstTokenMs',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityVersionId',\n 'rootEntityVersionId',\n 'runId',\n 'sessionId',\n 'userId',\n 'organizationId',\n] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryContextFields`. */\nexport const SPAN_CONTEXT_FILTER_FIELD_IDS = [\n 'traceId',\n 'spanId',\n 'parentSpanId',\n 'threadId',\n 'resourceId',\n 'requestId',\n 'serviceName',\n 'experimentId',\n 'environment',\n 'executionSource',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryOutcomeFields`. */\nexport const SPAN_OUTCOME_FILTER_FIELD_IDS = ['outcome', 'stopReason'] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryModelFields`. */\nexport const SPAN_MODEL_FILTER_FIELD_IDS = ['model', 'provider'] as const;\n\nconst NUMBER_FIELD_IDS: ReadonlySet<string> = new Set(['durationMs', 'timeToFirstChunkMs', 'timeToFirstTokenMs']);\n/** The query can only test `error` for presence; any other operator is rejected. */\nconst PRESENCE_ONLY_FIELD_IDS: ReadonlySet<string> = new Set(['error']);\n/** Fields every span carries. On any other field, \"is not X\" must also keep spans where it is missing. */\nconst REQUIRED_FIELD_IDS: ReadonlySet<string> = new Set([\n 'name',\n 'spanType',\n 'status',\n 'traceId',\n 'spanId',\n 'durationMs',\n]);\n\nconst SPAN_FILTER_BAR_LABELS: Record<string, string> = {\n ...TRACE_FILTER_BAR_LABELS,\n name: 'Span name',\n spanType: 'Span type',\n spanId: 'Span ID',\n parentSpanId: 'Parent span ID',\n error: 'Error',\n timeToFirstChunkMs: 'Time to first chunk (ms)',\n timeToFirstTokenMs: 'Time to first token (ms)',\n executionSource: 'Execution source',\n entityType: 'Primitive type',\n entityVersionId: 'Primitive version ID',\n parentEntityType: 'Parent primitive type',\n parentEntityId: 'Parent primitive ID',\n parentEntityName: 'Parent primitive name',\n parentEntityVersionId: 'Parent primitive version ID',\n rootEntityType: 'Root primitive type',\n rootEntityId: 'Root primitive ID',\n rootEntityName: 'Root primitive name',\n rootEntityVersionId: 'Root primitive version ID',\n model: 'Model',\n provider: 'Provider',\n};\n\n/** Span fields without their own trace icon borrow the icon of the closest trace field. */\nconst SPAN_ICON_FIELD_ALIASES: Record<string, string> = {\n name: 'spans.name',\n spanType: 'spans.spanType',\n error: 'spans.error',\n timeToFirstChunkMs: 'durationMs',\n timeToFirstTokenMs: 'durationMs',\n spanId: 'traceId',\n parentSpanId: 'traceId',\n executionSource: 'runId',\n entityType: 'rootEntityType',\n parentEntityType: 'rootEntityType',\n entityVersionId: 'entityId',\n parentEntityId: 'entityId',\n parentEntityVersionId: 'entityId',\n rootEntityId: 'entityId',\n rootEntityVersionId: 'entityId',\n parentEntityName: 'entityName',\n rootEntityName: 'entityName',\n model: 'spans.model',\n provider: 'spans.provider',\n};\n\nconst spanFieldBase = (id: string) => ({\n id,\n label: SPAN_FILTER_BAR_LABELS[id] ?? id,\n icon: traceFilterFieldIcon(SPAN_ICON_FIELD_ALIASES[id] ?? id),\n color: traceFilterFieldColor(id),\n});\n\nconst humanize = (value: string) => {\n const words = value.replace(/_/g, ' ');\n return words.charAt(0).toUpperCase() + words.slice(1);\n};\n\nconst byLabel = (a: { label?: string; value: string }, b: { label?: string; value: string }) =>\n (a.label ?? a.value).localeCompare(b.label ?? b.value);\n\nconst ENTITY_TYPE_LABELS: Record<string, string> = Object.fromEntries(\n ROOT_ENTITY_TYPE_OPTIONS.map(option => [option.entityType, option.label]),\n);\n\nconst SPAN_TYPE_OPTIONS: FilterBarOption[] = Object.values(SpanType)\n .map(value => ({ value, label: humanize(value) }))\n .sort(byLabel);\n\nconst ENTITY_TYPE_OPTIONS: FilterBarOption[] = Object.values(EntityType)\n .map(value => ({ value, label: ENTITY_TYPE_LABELS[value] ?? humanize(value) }))\n .sort(byLabel);\n\nconst STATUS_OPTIONS: FilterBarOption[] = TRACE_STATUS_OPTIONS.filter(option => option.value !== 'running').map(\n option => ({ value: option.value, label: option.label }),\n);\n\n/** FilterBar fields for the spans page: only paths and operators `querySpans()` accepts. */\nexport function createSpanFilterBarFields({\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields = false,\n withModelFields = false,\n entityNames,\n environments,\n valueSuggestions,\n}: StreamingTimingSupport & {\n /** Offer the context fields. Only when the server declares `spanQueryContextFields`. */\n withContextFields: boolean;\n /** Offer `outcome` and `stopReason`. Only when the server declares `spanQueryOutcomeFields`. */\n withOutcomeFields?: boolean;\n /** Offer `model` and `provider`. Only when the server declares `spanQueryModelFields`. */\n withModelFields?: boolean;\n entityNames: readonly string[];\n environments: readonly string[];\n /** Builds a lazy value resolver for a span field. Absent → free text. */\n valueSuggestions?: (path: string) => FilterBarSuggestionsResolver;\n}): FilterBarField[] {\n const pick = (\n id: string,\n suggestions: FilterBarOption[],\n operators: TraceFilterOperatorId[] = TRACE_STRING_OPERATORS,\n ): FilterBarField => ({ ...spanFieldBase(id), operators, strict: true, suggestions });\n const names = entityNames.map(value => ({ value }));\n\n const field = (id: string): FilterBarField => {\n switch (id) {\n case 'status':\n return pick(id, STATUS_OPTIONS, TRACE_SYNTHETIC_OPERATORS);\n case 'spanType':\n return pick(id, SPAN_TYPE_OPTIONS, TRACE_REQUIRED_STRING_OPERATORS);\n case 'entityType':\n case 'parentEntityType':\n case 'rootEntityType':\n return pick(id, ENTITY_TYPE_OPTIONS);\n case 'entityName':\n case 'rootEntityName':\n return pick(id, names);\n case 'environment':\n return pick(\n id,\n environments.map(value => ({ value })),\n );\n case 'name': {\n const resolver = valueSuggestions?.(id);\n return {\n ...spanFieldBase(id),\n operators: TRACE_TEXT_OPERATORS,\n ...(resolver ? { strict: true, suggestions: resolver } : {}),\n };\n }\n case 'error':\n return { ...spanFieldBase(id), operators: TRACE_PRESENCE_OPERATORS };\n case 'durationMs':\n case 'timeToFirstChunkMs':\n case 'timeToFirstTokenMs':\n return { ...spanFieldBase(id), type: 'number', operators: TRACE_NUMBER_OPERATORS };\n case 'traceId':\n case 'spanId':\n return { ...spanFieldBase(id), operators: TRACE_REQUIRED_STRING_OPERATORS };\n case 'model':\n case 'provider': {\n const resolver = valueSuggestions?.(id);\n return {\n ...spanFieldBase(id),\n operators: TRACE_STRING_OPERATORS,\n ...(resolver ? { suggestions: resolver } : {}),\n };\n }\n default:\n return { ...spanFieldBase(id), operators: TRACE_STRING_OPERATORS };\n }\n };\n\n const offered = withoutUnrecordedStreamingTimings(\n new Set([...SPAN_CORE_FILTER_FIELD_IDS, ...SPAN_CONTEXT_FILTER_FIELD_IDS]),\n {\n withTimeToFirstChunk,\n withTimeToFirstToken,\n },\n );\n const sortFields = (ids: readonly string[]) =>\n ids\n .filter(id => offered.has(id))\n .map(field)\n .sort((a, b) => a.label.localeCompare(b.label));\n return [\n ...sortFields(SPAN_CORE_FILTER_FIELD_IDS),\n ...(withContextFields ? sortFields(SPAN_CONTEXT_FILTER_FIELD_IDS) : []),\n ...(withModelFields ? SPAN_MODEL_FILTER_FIELD_IDS.map(field) : []),\n ...(withOutcomeFields ? createOutcomeFilterBarFields(spanFieldBase, valueSuggestions) : []),\n ];\n}\n\nfunction tokenToSpanQueryPredicate(\n token: TraceFilterToken,\n allowedFieldIds: ReadonlySet<string>,\n): TraceQueryScalarPredicate | undefined {\n const { fieldId } = token;\n if (!allowedFieldIds.has(fieldId)) return undefined;\n const operatorId = token.operatorId ?? 'is';\n const isPresence = operatorId === 'exists' || operatorId === 'notExists';\n if (PRESENCE_ONLY_FIELD_IDS.has(fieldId) && !isPresence) return undefined;\n\n const rawValues = (Array.isArray(token.value) ? token.value : [token.value]).filter(\n (value): value is string =>\n typeof value === 'string' && Boolean(value.trim()) && !isLegacyAnyValue(value, operatorId),\n );\n if (!rawValues.length && !isPresence) return undefined;\n\n let values: (string | number)[] = rawValues;\n if (NUMBER_FIELD_IDS.has(fieldId)) {\n values = rawValues.map(Number).filter(value => !Number.isNaN(value));\n if (!values.length && !isPresence) return undefined;\n }\n if (operatorId === 'matches' || operatorId === 'notMatches') {\n // The query rejects a text literal with no letters or digits.\n values = values.filter(value => /[\\p{L}\\p{M}\\p{N}]/u.test(String(value)));\n if (!values.length) return undefined;\n }\n\n const predicate = scalarPredicate(operatorId, fieldId, values);\n if (!predicate) return undefined;\n if ((operatorId === 'isNot' || operatorId === 'notIn') && !REQUIRED_FIELD_IDS.has(fieldId)) {\n return { op: 'or', args: [predicate, { op: 'notExists', path: fieldId }] };\n }\n return predicate;\n}\n\nfunction groupToSpanQueryPredicate(\n group: TraceFilterGroup,\n allowedFieldIds: ReadonlySet<string>,\n): TraceQueryScalarPredicate | undefined {\n const args = group.nodes\n .map(node =>\n isTraceFilterGroup(node)\n ? groupToSpanQueryPredicate(node, allowedFieldIds)\n : tokenToSpanQueryPredicate(node, allowedFieldIds),\n )\n .filter((predicate): predicate is TraceQueryScalarPredicate => Boolean(predicate));\n if (args.length === 0) return undefined;\n return args.length === 1 ? args[0] : { op: group.logic, args };\n}\n\n/**\n * The span query `where` for the filter bar's tokens and groups, or `undefined` when nothing applies.\n * Conditions the span query can't run (unknown fields, context, model or outcome fields or streaming timings without\n * the capability, unusable values) are left out instead of failing the request.\n */\nexport function buildSpanQueryWhere(\n tokens: TraceFilterToken[],\n groups: TraceFilterGroup[],\n {\n withContextFields,\n withOutcomeFields = false,\n withModelFields = false,\n ...support\n }: StreamingTimingSupport & { withContextFields: boolean; withOutcomeFields?: boolean; withModelFields?: boolean },\n): TraceQueryScalarPredicate | undefined {\n const allowedFieldIds = withoutUnrecordedStreamingTimings(\n new Set([\n ...SPAN_CORE_FILTER_FIELD_IDS,\n ...(withContextFields ? SPAN_CONTEXT_FILTER_FIELD_IDS : []),\n ...(withOutcomeFields ? SPAN_OUTCOME_FILTER_FIELD_IDS : []),\n ...(withModelFields ? SPAN_MODEL_FILTER_FIELD_IDS : []),\n ]),\n support,\n );\n const args = [\n ...tokens.map(token => tokenToSpanQueryPredicate(token, allowedFieldIds)),\n ...groups.map(group => groupToSpanQueryPredicate(group, allowedFieldIds)),\n ].filter((predicate): predicate is TraceQueryScalarPredicate => Boolean(predicate));\n return args.length ? { op: 'and', args } : undefined;\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { D as TRACE_STRING_OPERATORS, F as createOutcomeFilterBarFields, Q as traceFilterFieldIcon, S as TRACE_REQUIRED_STRING_OPERATORS, U as isLegacyAnyValue, Z as traceFilterFieldColor, it as withoutUnrecordedStreamingTimings, j as TRACE_TEXT_OPERATORS, k as TRACE_SYNTHETIC_OPERATORS, l as TRACE_FILTER_BAR_LABELS, pt as scalarPredicate, r as ROOT_ENTITY_TYPE_OPTIONS, ut as isTraceFilterGroup, v as TRACE_NUMBER_OPERATORS, w as TRACE_STATUS_OPTIONS, y as TRACE_PRESENCE_OPERATORS } from "../../trace-filters-
|
|
1
|
+
import { D as TRACE_STRING_OPERATORS, F as createOutcomeFilterBarFields, Q as traceFilterFieldIcon, S as TRACE_REQUIRED_STRING_OPERATORS, U as isLegacyAnyValue, Z as traceFilterFieldColor, it as withoutUnrecordedStreamingTimings, j as TRACE_TEXT_OPERATORS, k as TRACE_SYNTHETIC_OPERATORS, l as TRACE_FILTER_BAR_LABELS, pt as scalarPredicate, r as ROOT_ENTITY_TYPE_OPTIONS, ut as isTraceFilterGroup, v as TRACE_NUMBER_OPERATORS, w as TRACE_STATUS_OPTIONS, y as TRACE_PRESENCE_OPERATORS } from "../../trace-filters-CaWkw779.js";
|
|
2
2
|
import { EntityType, SpanType } from "@mastra/core/observability";
|
|
3
3
|
// src/domains/spans/span-filters.ts
|
|
4
|
-
/** Span query fields every store accepts. `startedAt`/`endedAt` are left to the time
|
|
4
|
+
/** Span query fields every store accepts. `startedAt`/`endedAt` are left to the time range. */
|
|
5
5
|
var SPAN_CORE_FILTER_FIELD_IDS = [
|
|
6
6
|
"name",
|
|
7
7
|
"spanType",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"span-filters.es.js","names":[],"sources":["../../../src/domains/spans/span-filters.ts"],"sourcesContent":["import { EntityType, SpanType } from '@mastra/core/observability';\nimport type { TraceQueryScalarPredicate } from '@mastra/core/storage';\nimport {\n isLegacyAnyValue,\n ROOT_ENTITY_TYPE_OPTIONS,\n TRACE_FILTER_BAR_LABELS,\n TRACE_NUMBER_OPERATORS,\n TRACE_PRESENCE_OPERATORS,\n TRACE_REQUIRED_STRING_OPERATORS,\n TRACE_STATUS_OPTIONS,\n TRACE_STRING_OPERATORS,\n TRACE_SYNTHETIC_OPERATORS,\n TRACE_TEXT_OPERATORS,\n createOutcomeFilterBarFields,\n traceFilterFieldColor,\n traceFilterFieldIcon,\n withoutUnrecordedStreamingTimings,\n} from '../traces/trace-filters';\nimport type { StreamingTimingSupport } from '../traces/trace-filters';\nimport { isTraceFilterGroup, scalarPredicate } from '../traces/trace-query-filters';\nimport type { TraceFilterGroup, TraceFilterOperatorId, TraceFilterToken } from '../traces/trace-query-filters';\nimport type { FilterBarField, FilterBarOption, FilterBarSuggestionsResolver } from '@/ds/components/FilterBar/types';\n\n/** Span query fields every store accepts. `startedAt`/`endedAt` are left to the time-range chip. */\nexport const SPAN_CORE_FILTER_FIELD_IDS = [\n 'name',\n 'spanType',\n 'status',\n 'error',\n 'durationMs',\n 'timeToFirstChunkMs',\n 'timeToFirstTokenMs',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityVersionId',\n 'rootEntityVersionId',\n 'runId',\n 'sessionId',\n 'userId',\n 'organizationId',\n] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryContextFields`. */\nexport const SPAN_CONTEXT_FILTER_FIELD_IDS = [\n 'traceId',\n 'spanId',\n 'parentSpanId',\n 'threadId',\n 'resourceId',\n 'requestId',\n 'serviceName',\n 'experimentId',\n 'environment',\n 'executionSource',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryOutcomeFields`. */\nexport const SPAN_OUTCOME_FILTER_FIELD_IDS = ['outcome', 'stopReason'] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryModelFields`. */\nexport const SPAN_MODEL_FILTER_FIELD_IDS = ['model', 'provider'] as const;\n\nconst NUMBER_FIELD_IDS: ReadonlySet<string> = new Set(['durationMs', 'timeToFirstChunkMs', 'timeToFirstTokenMs']);\n/** The query can only test `error` for presence; any other operator is rejected. */\nconst PRESENCE_ONLY_FIELD_IDS: ReadonlySet<string> = new Set(['error']);\n/** Fields every span carries. On any other field, \"is not X\" must also keep spans where it is missing. */\nconst REQUIRED_FIELD_IDS: ReadonlySet<string> = new Set([\n 'name',\n 'spanType',\n 'status',\n 'traceId',\n 'spanId',\n 'durationMs',\n]);\n\nconst SPAN_FILTER_BAR_LABELS: Record<string, string> = {\n ...TRACE_FILTER_BAR_LABELS,\n name: 'Span name',\n spanType: 'Span type',\n spanId: 'Span ID',\n parentSpanId: 'Parent span ID',\n error: 'Error',\n timeToFirstChunkMs: 'Time to first chunk (ms)',\n timeToFirstTokenMs: 'Time to first token (ms)',\n executionSource: 'Execution source',\n entityType: 'Primitive type',\n entityVersionId: 'Primitive version ID',\n parentEntityType: 'Parent primitive type',\n parentEntityId: 'Parent primitive ID',\n parentEntityName: 'Parent primitive name',\n parentEntityVersionId: 'Parent primitive version ID',\n rootEntityType: 'Root primitive type',\n rootEntityId: 'Root primitive ID',\n rootEntityName: 'Root primitive name',\n rootEntityVersionId: 'Root primitive version ID',\n model: 'Model',\n provider: 'Provider',\n};\n\n/** Span fields without their own trace icon borrow the icon of the closest trace field. */\nconst SPAN_ICON_FIELD_ALIASES: Record<string, string> = {\n name: 'spans.name',\n spanType: 'spans.spanType',\n error: 'spans.error',\n timeToFirstChunkMs: 'durationMs',\n timeToFirstTokenMs: 'durationMs',\n spanId: 'traceId',\n parentSpanId: 'traceId',\n executionSource: 'runId',\n entityType: 'rootEntityType',\n parentEntityType: 'rootEntityType',\n entityVersionId: 'entityId',\n parentEntityId: 'entityId',\n parentEntityVersionId: 'entityId',\n rootEntityId: 'entityId',\n rootEntityVersionId: 'entityId',\n parentEntityName: 'entityName',\n rootEntityName: 'entityName',\n model: 'spans.model',\n provider: 'spans.provider',\n};\n\nconst spanFieldBase = (id: string) => ({\n id,\n label: SPAN_FILTER_BAR_LABELS[id] ?? id,\n icon: traceFilterFieldIcon(SPAN_ICON_FIELD_ALIASES[id] ?? id),\n color: traceFilterFieldColor(id),\n});\n\nconst humanize = (value: string) => {\n const words = value.replace(/_/g, ' ');\n return words.charAt(0).toUpperCase() + words.slice(1);\n};\n\nconst byLabel = (a: { label?: string; value: string }, b: { label?: string; value: string }) =>\n (a.label ?? a.value).localeCompare(b.label ?? b.value);\n\nconst ENTITY_TYPE_LABELS: Record<string, string> = Object.fromEntries(\n ROOT_ENTITY_TYPE_OPTIONS.map(option => [option.entityType, option.label]),\n);\n\nconst SPAN_TYPE_OPTIONS: FilterBarOption[] = Object.values(SpanType)\n .map(value => ({ value, label: humanize(value) }))\n .sort(byLabel);\n\nconst ENTITY_TYPE_OPTIONS: FilterBarOption[] = Object.values(EntityType)\n .map(value => ({ value, label: ENTITY_TYPE_LABELS[value] ?? humanize(value) }))\n .sort(byLabel);\n\nconst STATUS_OPTIONS: FilterBarOption[] = TRACE_STATUS_OPTIONS.filter(option => option.value !== 'running').map(\n option => ({ value: option.value, label: option.label }),\n);\n\n/** FilterBar fields for the spans page: only paths and operators `querySpans()` accepts. */\nexport function createSpanFilterBarFields({\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields = false,\n withModelFields = false,\n entityNames,\n environments,\n valueSuggestions,\n}: StreamingTimingSupport & {\n /** Offer the context fields. Only when the server declares `spanQueryContextFields`. */\n withContextFields: boolean;\n /** Offer `outcome` and `stopReason`. Only when the server declares `spanQueryOutcomeFields`. */\n withOutcomeFields?: boolean;\n /** Offer `model` and `provider`. Only when the server declares `spanQueryModelFields`. */\n withModelFields?: boolean;\n entityNames: readonly string[];\n environments: readonly string[];\n /** Builds a lazy value resolver for a span field. Absent → free text. */\n valueSuggestions?: (path: string) => FilterBarSuggestionsResolver;\n}): FilterBarField[] {\n const pick = (\n id: string,\n suggestions: FilterBarOption[],\n operators: TraceFilterOperatorId[] = TRACE_STRING_OPERATORS,\n ): FilterBarField => ({ ...spanFieldBase(id), operators, strict: true, suggestions });\n const names = entityNames.map(value => ({ value }));\n\n const field = (id: string): FilterBarField => {\n switch (id) {\n case 'status':\n return pick(id, STATUS_OPTIONS, TRACE_SYNTHETIC_OPERATORS);\n case 'spanType':\n return pick(id, SPAN_TYPE_OPTIONS, TRACE_REQUIRED_STRING_OPERATORS);\n case 'entityType':\n case 'parentEntityType':\n case 'rootEntityType':\n return pick(id, ENTITY_TYPE_OPTIONS);\n case 'entityName':\n case 'rootEntityName':\n return pick(id, names);\n case 'environment':\n return pick(\n id,\n environments.map(value => ({ value })),\n );\n case 'name': {\n const resolver = valueSuggestions?.(id);\n return {\n ...spanFieldBase(id),\n operators: TRACE_TEXT_OPERATORS,\n ...(resolver ? { strict: true, suggestions: resolver } : {}),\n };\n }\n case 'error':\n return { ...spanFieldBase(id), operators: TRACE_PRESENCE_OPERATORS };\n case 'durationMs':\n case 'timeToFirstChunkMs':\n case 'timeToFirstTokenMs':\n return { ...spanFieldBase(id), type: 'number', operators: TRACE_NUMBER_OPERATORS };\n case 'traceId':\n case 'spanId':\n return { ...spanFieldBase(id), operators: TRACE_REQUIRED_STRING_OPERATORS };\n case 'model':\n case 'provider': {\n const resolver = valueSuggestions?.(id);\n return {\n ...spanFieldBase(id),\n operators: TRACE_STRING_OPERATORS,\n ...(resolver ? { suggestions: resolver } : {}),\n };\n }\n default:\n return { ...spanFieldBase(id), operators: TRACE_STRING_OPERATORS };\n }\n };\n\n const offered = withoutUnrecordedStreamingTimings(\n new Set([...SPAN_CORE_FILTER_FIELD_IDS, ...SPAN_CONTEXT_FILTER_FIELD_IDS]),\n {\n withTimeToFirstChunk,\n withTimeToFirstToken,\n },\n );\n const sortFields = (ids: readonly string[]) =>\n ids\n .filter(id => offered.has(id))\n .map(field)\n .sort((a, b) => a.label.localeCompare(b.label));\n return [\n ...sortFields(SPAN_CORE_FILTER_FIELD_IDS),\n ...(withContextFields ? sortFields(SPAN_CONTEXT_FILTER_FIELD_IDS) : []),\n ...(withModelFields ? SPAN_MODEL_FILTER_FIELD_IDS.map(field) : []),\n ...(withOutcomeFields ? createOutcomeFilterBarFields(spanFieldBase, valueSuggestions) : []),\n ];\n}\n\nfunction tokenToSpanQueryPredicate(\n token: TraceFilterToken,\n allowedFieldIds: ReadonlySet<string>,\n): TraceQueryScalarPredicate | undefined {\n const { fieldId } = token;\n if (!allowedFieldIds.has(fieldId)) return undefined;\n const operatorId = token.operatorId ?? 'is';\n const isPresence = operatorId === 'exists' || operatorId === 'notExists';\n if (PRESENCE_ONLY_FIELD_IDS.has(fieldId) && !isPresence) return undefined;\n\n const rawValues = (Array.isArray(token.value) ? token.value : [token.value]).filter(\n (value): value is string =>\n typeof value === 'string' && Boolean(value.trim()) && !isLegacyAnyValue(value, operatorId),\n );\n if (!rawValues.length && !isPresence) return undefined;\n\n let values: (string | number)[] = rawValues;\n if (NUMBER_FIELD_IDS.has(fieldId)) {\n values = rawValues.map(Number).filter(value => !Number.isNaN(value));\n if (!values.length && !isPresence) return undefined;\n }\n if (operatorId === 'matches' || operatorId === 'notMatches') {\n // The query rejects a text literal with no letters or digits.\n values = values.filter(value => /[\\p{L}\\p{M}\\p{N}]/u.test(String(value)));\n if (!values.length) return undefined;\n }\n\n const predicate = scalarPredicate(operatorId, fieldId, values);\n if (!predicate) return undefined;\n if ((operatorId === 'isNot' || operatorId === 'notIn') && !REQUIRED_FIELD_IDS.has(fieldId)) {\n return { op: 'or', args: [predicate, { op: 'notExists', path: fieldId }] };\n }\n return predicate;\n}\n\nfunction groupToSpanQueryPredicate(\n group: TraceFilterGroup,\n allowedFieldIds: ReadonlySet<string>,\n): TraceQueryScalarPredicate | undefined {\n const args = group.nodes\n .map(node =>\n isTraceFilterGroup(node)\n ? groupToSpanQueryPredicate(node, allowedFieldIds)\n : tokenToSpanQueryPredicate(node, allowedFieldIds),\n )\n .filter((predicate): predicate is TraceQueryScalarPredicate => Boolean(predicate));\n if (args.length === 0) return undefined;\n return args.length === 1 ? args[0] : { op: group.logic, args };\n}\n\n/**\n * The span query `where` for the filter bar's tokens and groups, or `undefined` when nothing applies.\n * Conditions the span query can't run (unknown fields, context, model or outcome fields or streaming timings without\n * the capability, unusable values) are left out instead of failing the request.\n */\nexport function buildSpanQueryWhere(\n tokens: TraceFilterToken[],\n groups: TraceFilterGroup[],\n {\n withContextFields,\n withOutcomeFields = false,\n withModelFields = false,\n ...support\n }: StreamingTimingSupport & { withContextFields: boolean; withOutcomeFields?: boolean; withModelFields?: boolean },\n): TraceQueryScalarPredicate | undefined {\n const allowedFieldIds = withoutUnrecordedStreamingTimings(\n new Set([\n ...SPAN_CORE_FILTER_FIELD_IDS,\n ...(withContextFields ? SPAN_CONTEXT_FILTER_FIELD_IDS : []),\n ...(withOutcomeFields ? SPAN_OUTCOME_FILTER_FIELD_IDS : []),\n ...(withModelFields ? SPAN_MODEL_FILTER_FIELD_IDS : []),\n ]),\n support,\n );\n const args = [\n ...tokens.map(token => tokenToSpanQueryPredicate(token, allowedFieldIds)),\n ...groups.map(group => groupToSpanQueryPredicate(group, allowedFieldIds)),\n ].filter((predicate): predicate is TraceQueryScalarPredicate => Boolean(predicate));\n return args.length ? { op: 'and', args } : undefined;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"span-filters.es.js","names":[],"sources":["../../../src/domains/spans/span-filters.ts"],"sourcesContent":["import { EntityType, SpanType } from '@mastra/core/observability';\nimport type { TraceQueryScalarPredicate } from '@mastra/core/storage';\nimport {\n isLegacyAnyValue,\n ROOT_ENTITY_TYPE_OPTIONS,\n TRACE_FILTER_BAR_LABELS,\n TRACE_NUMBER_OPERATORS,\n TRACE_PRESENCE_OPERATORS,\n TRACE_REQUIRED_STRING_OPERATORS,\n TRACE_STATUS_OPTIONS,\n TRACE_STRING_OPERATORS,\n TRACE_SYNTHETIC_OPERATORS,\n TRACE_TEXT_OPERATORS,\n createOutcomeFilterBarFields,\n traceFilterFieldColor,\n traceFilterFieldIcon,\n withoutUnrecordedStreamingTimings,\n} from '../traces/trace-filters';\nimport type { StreamingTimingSupport } from '../traces/trace-filters';\nimport { isTraceFilterGroup, scalarPredicate } from '../traces/trace-query-filters';\nimport type { TraceFilterGroup, TraceFilterOperatorId, TraceFilterToken } from '../traces/trace-query-filters';\nimport type { FilterBarField, FilterBarOption, FilterBarSuggestionsResolver } from '@/ds/components/FilterBar/types';\n\n/** Span query fields every store accepts. `startedAt`/`endedAt` are left to the time range. */\nexport const SPAN_CORE_FILTER_FIELD_IDS = [\n 'name',\n 'spanType',\n 'status',\n 'error',\n 'durationMs',\n 'timeToFirstChunkMs',\n 'timeToFirstTokenMs',\n 'entityType',\n 'entityId',\n 'entityName',\n 'entityVersionId',\n 'parentEntityVersionId',\n 'rootEntityVersionId',\n 'runId',\n 'sessionId',\n 'userId',\n 'organizationId',\n] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryContextFields`. */\nexport const SPAN_CONTEXT_FILTER_FIELD_IDS = [\n 'traceId',\n 'spanId',\n 'parentSpanId',\n 'threadId',\n 'resourceId',\n 'requestId',\n 'serviceName',\n 'experimentId',\n 'environment',\n 'executionSource',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryOutcomeFields`. */\nexport const SPAN_OUTCOME_FILTER_FIELD_IDS = ['outcome', 'stopReason'] as const;\n\n/** Span query fields the server only accepts when the store declares `spanQueryModelFields`. */\nexport const SPAN_MODEL_FILTER_FIELD_IDS = ['model', 'provider'] as const;\n\nconst NUMBER_FIELD_IDS: ReadonlySet<string> = new Set(['durationMs', 'timeToFirstChunkMs', 'timeToFirstTokenMs']);\n/** The query can only test `error` for presence; any other operator is rejected. */\nconst PRESENCE_ONLY_FIELD_IDS: ReadonlySet<string> = new Set(['error']);\n/** Fields every span carries. On any other field, \"is not X\" must also keep spans where it is missing. */\nconst REQUIRED_FIELD_IDS: ReadonlySet<string> = new Set([\n 'name',\n 'spanType',\n 'status',\n 'traceId',\n 'spanId',\n 'durationMs',\n]);\n\nconst SPAN_FILTER_BAR_LABELS: Record<string, string> = {\n ...TRACE_FILTER_BAR_LABELS,\n name: 'Span name',\n spanType: 'Span type',\n spanId: 'Span ID',\n parentSpanId: 'Parent span ID',\n error: 'Error',\n timeToFirstChunkMs: 'Time to first chunk (ms)',\n timeToFirstTokenMs: 'Time to first token (ms)',\n executionSource: 'Execution source',\n entityType: 'Primitive type',\n entityVersionId: 'Primitive version ID',\n parentEntityType: 'Parent primitive type',\n parentEntityId: 'Parent primitive ID',\n parentEntityName: 'Parent primitive name',\n parentEntityVersionId: 'Parent primitive version ID',\n rootEntityType: 'Root primitive type',\n rootEntityId: 'Root primitive ID',\n rootEntityName: 'Root primitive name',\n rootEntityVersionId: 'Root primitive version ID',\n model: 'Model',\n provider: 'Provider',\n};\n\n/** Span fields without their own trace icon borrow the icon of the closest trace field. */\nconst SPAN_ICON_FIELD_ALIASES: Record<string, string> = {\n name: 'spans.name',\n spanType: 'spans.spanType',\n error: 'spans.error',\n timeToFirstChunkMs: 'durationMs',\n timeToFirstTokenMs: 'durationMs',\n spanId: 'traceId',\n parentSpanId: 'traceId',\n executionSource: 'runId',\n entityType: 'rootEntityType',\n parentEntityType: 'rootEntityType',\n entityVersionId: 'entityId',\n parentEntityId: 'entityId',\n parentEntityVersionId: 'entityId',\n rootEntityId: 'entityId',\n rootEntityVersionId: 'entityId',\n parentEntityName: 'entityName',\n rootEntityName: 'entityName',\n model: 'spans.model',\n provider: 'spans.provider',\n};\n\nconst spanFieldBase = (id: string) => ({\n id,\n label: SPAN_FILTER_BAR_LABELS[id] ?? id,\n icon: traceFilterFieldIcon(SPAN_ICON_FIELD_ALIASES[id] ?? id),\n color: traceFilterFieldColor(id),\n});\n\nconst humanize = (value: string) => {\n const words = value.replace(/_/g, ' ');\n return words.charAt(0).toUpperCase() + words.slice(1);\n};\n\nconst byLabel = (a: { label?: string; value: string }, b: { label?: string; value: string }) =>\n (a.label ?? a.value).localeCompare(b.label ?? b.value);\n\nconst ENTITY_TYPE_LABELS: Record<string, string> = Object.fromEntries(\n ROOT_ENTITY_TYPE_OPTIONS.map(option => [option.entityType, option.label]),\n);\n\nconst SPAN_TYPE_OPTIONS: FilterBarOption[] = Object.values(SpanType)\n .map(value => ({ value, label: humanize(value) }))\n .sort(byLabel);\n\nconst ENTITY_TYPE_OPTIONS: FilterBarOption[] = Object.values(EntityType)\n .map(value => ({ value, label: ENTITY_TYPE_LABELS[value] ?? humanize(value) }))\n .sort(byLabel);\n\nconst STATUS_OPTIONS: FilterBarOption[] = TRACE_STATUS_OPTIONS.filter(option => option.value !== 'running').map(\n option => ({ value: option.value, label: option.label }),\n);\n\n/** FilterBar fields for the spans page: only paths and operators `querySpans()` accepts. */\nexport function createSpanFilterBarFields({\n withContextFields,\n withTimeToFirstChunk,\n withTimeToFirstToken,\n withOutcomeFields = false,\n withModelFields = false,\n entityNames,\n environments,\n valueSuggestions,\n}: StreamingTimingSupport & {\n /** Offer the context fields. Only when the server declares `spanQueryContextFields`. */\n withContextFields: boolean;\n /** Offer `outcome` and `stopReason`. Only when the server declares `spanQueryOutcomeFields`. */\n withOutcomeFields?: boolean;\n /** Offer `model` and `provider`. Only when the server declares `spanQueryModelFields`. */\n withModelFields?: boolean;\n entityNames: readonly string[];\n environments: readonly string[];\n /** Builds a lazy value resolver for a span field. Absent → free text. */\n valueSuggestions?: (path: string) => FilterBarSuggestionsResolver;\n}): FilterBarField[] {\n const pick = (\n id: string,\n suggestions: FilterBarOption[],\n operators: TraceFilterOperatorId[] = TRACE_STRING_OPERATORS,\n ): FilterBarField => ({ ...spanFieldBase(id), operators, strict: true, suggestions });\n const names = entityNames.map(value => ({ value }));\n\n const field = (id: string): FilterBarField => {\n switch (id) {\n case 'status':\n return pick(id, STATUS_OPTIONS, TRACE_SYNTHETIC_OPERATORS);\n case 'spanType':\n return pick(id, SPAN_TYPE_OPTIONS, TRACE_REQUIRED_STRING_OPERATORS);\n case 'entityType':\n case 'parentEntityType':\n case 'rootEntityType':\n return pick(id, ENTITY_TYPE_OPTIONS);\n case 'entityName':\n case 'rootEntityName':\n return pick(id, names);\n case 'environment':\n return pick(\n id,\n environments.map(value => ({ value })),\n );\n case 'name': {\n const resolver = valueSuggestions?.(id);\n return {\n ...spanFieldBase(id),\n operators: TRACE_TEXT_OPERATORS,\n ...(resolver ? { strict: true, suggestions: resolver } : {}),\n };\n }\n case 'error':\n return { ...spanFieldBase(id), operators: TRACE_PRESENCE_OPERATORS };\n case 'durationMs':\n case 'timeToFirstChunkMs':\n case 'timeToFirstTokenMs':\n return { ...spanFieldBase(id), type: 'number', operators: TRACE_NUMBER_OPERATORS };\n case 'traceId':\n case 'spanId':\n return { ...spanFieldBase(id), operators: TRACE_REQUIRED_STRING_OPERATORS };\n case 'model':\n case 'provider': {\n const resolver = valueSuggestions?.(id);\n return {\n ...spanFieldBase(id),\n operators: TRACE_STRING_OPERATORS,\n ...(resolver ? { suggestions: resolver } : {}),\n };\n }\n default:\n return { ...spanFieldBase(id), operators: TRACE_STRING_OPERATORS };\n }\n };\n\n const offered = withoutUnrecordedStreamingTimings(\n new Set([...SPAN_CORE_FILTER_FIELD_IDS, ...SPAN_CONTEXT_FILTER_FIELD_IDS]),\n {\n withTimeToFirstChunk,\n withTimeToFirstToken,\n },\n );\n const sortFields = (ids: readonly string[]) =>\n ids\n .filter(id => offered.has(id))\n .map(field)\n .sort((a, b) => a.label.localeCompare(b.label));\n return [\n ...sortFields(SPAN_CORE_FILTER_FIELD_IDS),\n ...(withContextFields ? sortFields(SPAN_CONTEXT_FILTER_FIELD_IDS) : []),\n ...(withModelFields ? SPAN_MODEL_FILTER_FIELD_IDS.map(field) : []),\n ...(withOutcomeFields ? createOutcomeFilterBarFields(spanFieldBase, valueSuggestions) : []),\n ];\n}\n\nfunction tokenToSpanQueryPredicate(\n token: TraceFilterToken,\n allowedFieldIds: ReadonlySet<string>,\n): TraceQueryScalarPredicate | undefined {\n const { fieldId } = token;\n if (!allowedFieldIds.has(fieldId)) return undefined;\n const operatorId = token.operatorId ?? 'is';\n const isPresence = operatorId === 'exists' || operatorId === 'notExists';\n if (PRESENCE_ONLY_FIELD_IDS.has(fieldId) && !isPresence) return undefined;\n\n const rawValues = (Array.isArray(token.value) ? token.value : [token.value]).filter(\n (value): value is string =>\n typeof value === 'string' && Boolean(value.trim()) && !isLegacyAnyValue(value, operatorId),\n );\n if (!rawValues.length && !isPresence) return undefined;\n\n let values: (string | number)[] = rawValues;\n if (NUMBER_FIELD_IDS.has(fieldId)) {\n values = rawValues.map(Number).filter(value => !Number.isNaN(value));\n if (!values.length && !isPresence) return undefined;\n }\n if (operatorId === 'matches' || operatorId === 'notMatches') {\n // The query rejects a text literal with no letters or digits.\n values = values.filter(value => /[\\p{L}\\p{M}\\p{N}]/u.test(String(value)));\n if (!values.length) return undefined;\n }\n\n const predicate = scalarPredicate(operatorId, fieldId, values);\n if (!predicate) return undefined;\n if ((operatorId === 'isNot' || operatorId === 'notIn') && !REQUIRED_FIELD_IDS.has(fieldId)) {\n return { op: 'or', args: [predicate, { op: 'notExists', path: fieldId }] };\n }\n return predicate;\n}\n\nfunction groupToSpanQueryPredicate(\n group: TraceFilterGroup,\n allowedFieldIds: ReadonlySet<string>,\n): TraceQueryScalarPredicate | undefined {\n const args = group.nodes\n .map(node =>\n isTraceFilterGroup(node)\n ? groupToSpanQueryPredicate(node, allowedFieldIds)\n : tokenToSpanQueryPredicate(node, allowedFieldIds),\n )\n .filter((predicate): predicate is TraceQueryScalarPredicate => Boolean(predicate));\n if (args.length === 0) return undefined;\n return args.length === 1 ? args[0] : { op: group.logic, args };\n}\n\n/**\n * The span query `where` for the filter bar's tokens and groups, or `undefined` when nothing applies.\n * Conditions the span query can't run (unknown fields, context, model or outcome fields or streaming timings without\n * the capability, unusable values) are left out instead of failing the request.\n */\nexport function buildSpanQueryWhere(\n tokens: TraceFilterToken[],\n groups: TraceFilterGroup[],\n {\n withContextFields,\n withOutcomeFields = false,\n withModelFields = false,\n ...support\n }: StreamingTimingSupport & { withContextFields: boolean; withOutcomeFields?: boolean; withModelFields?: boolean },\n): TraceQueryScalarPredicate | undefined {\n const allowedFieldIds = withoutUnrecordedStreamingTimings(\n new Set([\n ...SPAN_CORE_FILTER_FIELD_IDS,\n ...(withContextFields ? SPAN_CONTEXT_FILTER_FIELD_IDS : []),\n ...(withOutcomeFields ? SPAN_OUTCOME_FILTER_FIELD_IDS : []),\n ...(withModelFields ? SPAN_MODEL_FILTER_FIELD_IDS : []),\n ]),\n support,\n );\n const args = [\n ...tokens.map(token => tokenToSpanQueryPredicate(token, allowedFieldIds)),\n ...groups.map(group => groupToSpanQueryPredicate(group, allowedFieldIds)),\n ].filter((predicate): predicate is TraceQueryScalarPredicate => Boolean(predicate));\n return args.length ? { op: 'and', args } : undefined;\n}\n"],"mappings":";;;;AAwBA,IAAa,6BAA6B;CACxC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAGA,IAAa,gCAAgC;CAC3C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAGA,IAAa,gCAAgC,CAAC,WAAW,YAAY;;AAGrE,IAAa,8BAA8B,CAAC,SAAS,UAAU;AAE/D,IAAM,mCAAwC,IAAI,IAAI;CAAC;CAAc;CAAsB;AAAoB,CAAC;;AAEhH,IAAM,0CAA+C,IAAI,IAAI,CAAC,OAAO,CAAC;;AAEtE,IAAM,qCAA0C,IAAI,IAAI;CACtD;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,IAAM,yBAAiD;CACrD,GAAG;CACH,MAAM;CACN,UAAU;CACV,QAAQ;CACR,cAAc;CACd,OAAO;CACP,oBAAoB;CACpB,oBAAoB;CACpB,iBAAiB;CACjB,YAAY;CACZ,iBAAiB;CACjB,kBAAkB;CAClB,gBAAgB;CAChB,kBAAkB;CAClB,uBAAuB;CACvB,gBAAgB;CAChB,cAAc;CACd,gBAAgB;CAChB,qBAAqB;CACrB,OAAO;CACP,UAAU;AACZ;;AAGA,IAAM,0BAAkD;CACtD,MAAM;CACN,UAAU;CACV,OAAO;CACP,oBAAoB;CACpB,oBAAoB;CACpB,QAAQ;CACR,cAAc;CACd,iBAAiB;CACjB,YAAY;CACZ,kBAAkB;CAClB,iBAAiB;CACjB,gBAAgB;CAChB,uBAAuB;CACvB,cAAc;CACd,qBAAqB;CACrB,kBAAkB;CAClB,gBAAgB;CAChB,OAAO;CACP,UAAU;AACZ;AAEA,IAAM,iBAAiB,QAAgB;CACrC;CACA,OAAO,uBAAuB,OAAO;CACrC,MAAM,qBAAqB,wBAAwB,OAAO,EAAE;CAC5D,OAAO,sBAAsB,EAAE;AACjC;AAEA,IAAM,YAAY,UAAkB;CAClC,MAAM,QAAQ,MAAM,QAAQ,MAAM,GAAG;CACrC,OAAO,MAAM,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,MAAM,MAAM,CAAC;AACtD;AAEA,IAAM,WAAW,GAAsC,OACpD,EAAE,SAAS,EAAE,MAAA,CAAO,cAAc,EAAE,SAAS,EAAE,KAAK;AAEvD,IAAM,qBAA6C,OAAO,YACxD,yBAAyB,KAAI,WAAU,CAAC,OAAO,YAAY,OAAO,KAAK,CAAC,CAC1E;AAEA,IAAM,oBAAuC,OAAO,OAAO,QAAQ,CAAC,CACjE,KAAI,WAAU;CAAE;CAAO,OAAO,SAAS,KAAK;AAAE,EAAE,CAAC,CACjD,KAAK,OAAO;AAEf,IAAM,sBAAyC,OAAO,OAAO,UAAU,CAAC,CACrE,KAAI,WAAU;CAAE;CAAO,OAAO,mBAAmB,UAAU,SAAS,KAAK;AAAE,EAAE,CAAC,CAC9E,KAAK,OAAO;AAEf,IAAM,iBAAoC,qBAAqB,QAAO,WAAU,OAAO,UAAU,SAAS,CAAC,CAAC,KAC1G,YAAW;CAAE,OAAO,OAAO;CAAO,OAAO,OAAO;AAAM,EACxD;;AAGA,SAAgB,0BAA0B,EACxC,mBACA,sBACA,sBACA,oBAAoB,OACpB,kBAAkB,OAClB,aACA,cACA,oBAYmB;CACnB,MAAM,QACJ,IACA,aACA,YAAqC,4BACjB;EAAE,GAAG,cAAc,EAAE;EAAG;EAAW,QAAQ;EAAM;CAAY;CACnF,MAAM,QAAQ,YAAY,KAAI,WAAU,EAAE,MAAM,EAAE;CAElD,MAAM,SAAS,OAA+B;EAC5C,QAAQ,IAAR;GACE,KAAK,UACH,OAAO,KAAK,IAAI,gBAAgB,yBAAyB;GAC3D,KAAK,YACH,OAAO,KAAK,IAAI,mBAAmB,+BAA+B;GACpE,KAAK;GACL,KAAK;GACL,KAAK,kBACH,OAAO,KAAK,IAAI,mBAAmB;GACrC,KAAK;GACL,KAAK,kBACH,OAAO,KAAK,IAAI,KAAK;GACvB,KAAK,eACH,OAAO,KACL,IACA,aAAa,KAAI,WAAU,EAAE,MAAM,EAAE,CACvC;GACF,KAAK,QAAQ;IACX,MAAM,WAAW,mBAAmB,EAAE;IACtC,OAAO;KACL,GAAG,cAAc,EAAE;KACnB,WAAW;KACX,GAAI,WAAW;MAAE,QAAQ;MAAM,aAAa;KAAS,IAAI,CAAC;IAC5D;GACF;GACA,KAAK,SACH,OAAO;IAAE,GAAG,cAAc,EAAE;IAAG,WAAW;GAAyB;GACrE,KAAK;GACL,KAAK;GACL,KAAK,sBACH,OAAO;IAAE,GAAG,cAAc,EAAE;IAAG,MAAM;IAAU,WAAW;GAAuB;GACnF,KAAK;GACL,KAAK,UACH,OAAO;IAAE,GAAG,cAAc,EAAE;IAAG,WAAW;GAAgC;GAC5E,KAAK;GACL,KAAK,YAAY;IACf,MAAM,WAAW,mBAAmB,EAAE;IACtC,OAAO;KACL,GAAG,cAAc,EAAE;KACnB,WAAW;KACX,GAAI,WAAW,EAAE,aAAa,SAAS,IAAI,CAAC;IAC9C;GACF;GACA,SACE,OAAO;IAAE,GAAG,cAAc,EAAE;IAAG,WAAW;GAAuB;EACrE;CACF;CAEA,MAAM,UAAU,kDACd,IAAI,IAAI,CAAC,GAAG,4BAA4B,GAAG,6BAA6B,CAAC,GACzE;EACE;EACA;CACF,CACF;CACA,MAAM,cAAc,QAClB,IACG,QAAO,OAAM,QAAQ,IAAI,EAAE,CAAC,CAAC,CAC7B,IAAI,KAAK,CAAC,CACV,MAAM,GAAG,MAAM,EAAE,MAAM,cAAc,EAAE,KAAK,CAAC;CAClD,OAAO;EACL,GAAG,WAAW,0BAA0B;EACxC,GAAI,oBAAoB,WAAW,6BAA6B,IAAI,CAAC;EACrE,GAAI,kBAAkB,4BAA4B,IAAI,KAAK,IAAI,CAAC;EAChE,GAAI,oBAAoB,6BAA6B,eAAe,gBAAgB,IAAI,CAAC;CAC3F;AACF;AAEA,SAAS,0BACP,OACA,iBACuC;CACvC,MAAM,EAAE,YAAY;CACpB,IAAI,CAAC,gBAAgB,IAAI,OAAO,GAAG,OAAO,KAAA;CAC1C,MAAM,aAAa,MAAM,cAAc;CACvC,MAAM,aAAa,eAAe,YAAY,eAAe;CAC7D,IAAI,wBAAwB,IAAI,OAAO,KAAK,CAAC,YAAY,OAAO,KAAA;CAEhE,MAAM,aAAa,MAAM,QAAQ,MAAM,KAAK,IAAI,MAAM,QAAQ,CAAC,MAAM,KAAK,EAAA,CAAG,QAC1E,UACC,OAAO,UAAU,YAAY,QAAQ,MAAM,KAAK,CAAC,KAAK,CAAC,iBAAiB,OAAO,UAAU,CAC7F;CACA,IAAI,CAAC,UAAU,UAAU,CAAC,YAAY,OAAO,KAAA;CAE7C,IAAI,SAA8B;CAClC,IAAI,iBAAiB,IAAI,OAAO,GAAG;EACjC,SAAS,UAAU,IAAI,MAAM,CAAC,CAAC,QAAO,UAAS,CAAC,OAAO,MAAM,KAAK,CAAC;EACnE,IAAI,CAAC,OAAO,UAAU,CAAC,YAAY,OAAO,KAAA;CAC5C;CACA,IAAI,eAAe,aAAa,eAAe,cAAc;EAE3D,SAAS,OAAO,QAAO,UAAS,qBAAqB,KAAK,OAAO,KAAK,CAAC,CAAC;EACxE,IAAI,CAAC,OAAO,QAAQ,OAAO,KAAA;CAC7B;CAEA,MAAM,YAAY,gBAAgB,YAAY,SAAS,MAAM;CAC7D,IAAI,CAAC,WAAW,OAAO,KAAA;CACvB,KAAK,eAAe,WAAW,eAAe,YAAY,CAAC,mBAAmB,IAAI,OAAO,GACvF,OAAO;EAAE,IAAI;EAAM,MAAM,CAAC,WAAW;GAAE,IAAI;GAAa,MAAM;EAAQ,CAAC;CAAE;CAE3E,OAAO;AACT;AAEA,SAAS,0BACP,OACA,iBACuC;CACvC,MAAM,OAAO,MAAM,MAChB,KAAI,SACH,mBAAmB,IAAI,IACnB,0BAA0B,MAAM,eAAe,IAC/C,0BAA0B,MAAM,eAAe,CACrD,CAAC,CACA,QAAQ,cAAsD,QAAQ,SAAS,CAAC;CACnF,IAAI,KAAK,WAAW,GAAG,OAAO,KAAA;CAC9B,OAAO,KAAK,WAAW,IAAI,KAAK,KAAK;EAAE,IAAI,MAAM;EAAO;CAAK;AAC/D;;;;;;AAOA,SAAgB,oBACd,QACA,QACA,EACE,mBACA,oBAAoB,OACpB,kBAAkB,OAClB,GAAG,WAEkC;CACvC,MAAM,kBAAkB,kDACtB,IAAI,IAAI;EACN,GAAG;EACH,GAAI,oBAAoB,gCAAgC,CAAC;EACzD,GAAI,oBAAoB,gCAAgC,CAAC;EACzD,GAAI,kBAAkB,8BAA8B,CAAC;CACvD,CAAC,GACD,OACF;CACA,MAAM,OAAO,CACX,GAAG,OAAO,KAAI,UAAS,0BAA0B,OAAO,eAAe,CAAC,GACxE,GAAG,OAAO,KAAI,UAAS,0BAA0B,OAAO,eAAe,CAAC,CAC1E,CAAC,CAAC,QAAQ,cAAsD,QAAQ,SAAS,CAAC;CAClF,OAAO,KAAK,SAAS;EAAE,IAAI;EAAO;CAAK,IAAI,KAAA;AAC7C"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_domains_threads_thread_filters = require("../thread-filters.cjs.js");
|
|
3
3
|
const require_domains_traces_trace_list_columns = require("../../traces/trace-list-columns.cjs.js");
|
|
4
|
-
const require_observability_saved_views = require("../../../observability-saved-views-
|
|
4
|
+
const require_observability_saved_views = require("../../../observability-saved-views-Daizz4tU.cjs");
|
|
5
5
|
const require_domains_observability_components_observability_list_body = require("../../observability/components/observability-list-body.cjs.js");
|
|
6
6
|
const require_domains_observability_hooks_use_observability_list_filters = require("../../observability/hooks/use-observability-list-filters.cjs.js");
|
|
7
7
|
const require_domains_traces_components_columns_menu_columns_menu = require("../../traces/components/columns-menu/columns-menu.cjs.js");
|
|
@@ -9,7 +9,7 @@ const require_domains_traces_components_no_traces_info = require("../../traces/c
|
|
|
9
9
|
const require_domains_traces_components_traces_error_content = require("../../traces/components/traces-error-content.cjs.js");
|
|
10
10
|
const require_domains_traces_components_traces_list_view = require("../../traces/components/traces-list-view.cjs.js");
|
|
11
11
|
const require_domains_traces_hooks_use_trace_column_preferences = require("../../traces/hooks/use-trace-column-preferences.cjs.js");
|
|
12
|
-
const require_ActionRow = require("../../../ActionRow-
|
|
12
|
+
const require_ActionRow = require("../../../ActionRow-BlC9GAef.cjs");
|
|
13
13
|
const require_domains_threads_hooks_use_threads_list_source = require("../hooks/use-threads-list-source.cjs.js");
|
|
14
14
|
const require_domains_threads_thread_list_row = require("../thread-list-row.cjs.js");
|
|
15
15
|
const require_domains_threads_components_threads_filter_bar = require("./threads-filter-bar.cjs.js");
|
|
@@ -78,11 +78,7 @@ function ThreadsExplorerBody({ selectedThreadId, onSelectedThreadChange, onOpenS
|
|
|
78
78
|
page: "threads",
|
|
79
79
|
...urlState,
|
|
80
80
|
columns
|
|
81
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.
|
|
82
|
-
scope: "threads",
|
|
83
|
-
value: columns.preferences,
|
|
84
|
-
onChange: columns.setPreferences
|
|
85
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_threads_components_threads_filter_bar.ThreadsFilterBar, {
|
|
81
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_ActionRow.ActionRow, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_ActionRow.ActionRow.Start, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_threads_components_threads_filter_bar.ThreadsFilterBar, {
|
|
86
82
|
datePreset: filters.datePreset,
|
|
87
83
|
dateFrom: filters.dateFrom,
|
|
88
84
|
dateTo: filters.dateTo,
|
|
@@ -93,7 +89,11 @@ function ThreadsExplorerBody({ selectedThreadId, onSelectedThreadChange, onOpenS
|
|
|
93
89
|
onDateRangeChange: filters.onDateRangeChange,
|
|
94
90
|
onFiltersChange: filters.onFiltersChange,
|
|
95
91
|
disabled: isLoading
|
|
96
|
-
})
|
|
92
|
+
}) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_ActionRow.ActionRow.End, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_traces_components_columns_menu_columns_menu.ColumnsMenu, {
|
|
93
|
+
scope: "threads",
|
|
94
|
+
value: columns.preferences,
|
|
95
|
+
onChange: columns.setPreferences
|
|
96
|
+
}) })] })] }),
|
|
97
97
|
error: isError ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_traces_components_traces_error_content.TracesErrorContent, {
|
|
98
98
|
error,
|
|
99
99
|
resource: "threads",
|