@mastra/playground-ui 69.0.0-alpha.0 → 69.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/components.css +6 -0
- package/dist/{CodeEditor-ZoBu3Gjw.js → CodeEditor-BqAM9L7t.js} +5 -2
- package/dist/{CodeEditor-ZoBu3Gjw.js.map → CodeEditor-BqAM9L7t.js.map} +1 -1
- package/dist/{CodeEditor-DHIDfP5g.cjs → CodeEditor-zMSUzPdX.cjs} +5 -2
- package/dist/{CodeEditor-DHIDfP5g.cjs.map → CodeEditor-zMSUzPdX.cjs.map} +1 -1
- package/dist/{Comment-rQxuMDQv.cjs → Comment-A07IvOt2.cjs} +3 -3
- package/dist/{Comment-rQxuMDQv.cjs.map → Comment-A07IvOt2.cjs.map} +1 -1
- package/dist/{Comment-2q9SomE2.js → Comment-D_gSx7oM.js} +3 -3
- package/dist/{Comment-2q9SomE2.js.map → Comment-D_gSx7oM.js.map} +1 -1
- package/dist/{Composer-u1K6edoZ.cjs → Composer-D2BqRyb5.cjs} +2 -2
- package/dist/Composer-D2BqRyb5.cjs.map +1 -0
- package/dist/{Composer-bVE8qK52.js → Composer-kjwmlIgL.js} +2 -2
- package/dist/Composer-kjwmlIgL.js.map +1 -0
- package/dist/{DataCodeSection-CTodi9wg.js → DataCodeSection-CcX8Z68Y.js} +2 -2
- package/dist/{DataCodeSection-CTodi9wg.js.map → DataCodeSection-CcX8Z68Y.js.map} +1 -1
- package/dist/{DataCodeSection-7SvRJj6f.cjs → DataCodeSection-JPGTWLcL.cjs} +2 -2
- package/dist/{DataCodeSection-7SvRJj6f.cjs.map → DataCodeSection-JPGTWLcL.cjs.map} +1 -1
- package/dist/{DataDetailsPanel-BDoD6pxx.cjs → DataDetailsPanel-DCMlaG7j.cjs} +2 -2
- package/dist/{DataDetailsPanel-BDoD6pxx.cjs.map → DataDetailsPanel-DCMlaG7j.cjs.map} +1 -1
- package/dist/{DataDetailsPanel-BU05psHL.js → DataDetailsPanel-mTfbbQho.js} +2 -2
- package/dist/{DataDetailsPanel-BU05psHL.js.map → DataDetailsPanel-mTfbbQho.js.map} +1 -1
- package/dist/{DataPanel-BRRAvWYQ.cjs → DataPanel-LfExjFpP.cjs} +2 -2
- package/dist/{DataPanel-BRRAvWYQ.cjs.map → DataPanel-LfExjFpP.cjs.map} +1 -1
- package/dist/{DataPanel-pVr5LVaK.js → DataPanel-Rv5Mb_pf.js} +2 -2
- package/dist/{DataPanel-pVr5LVaK.js.map → DataPanel-Rv5Mb_pf.js.map} +1 -1
- package/dist/{FilterBar-Kmn6gMgO.js → FilterBar-DgHNtsDI.js} +5 -5
- package/dist/FilterBar-DgHNtsDI.js.map +1 -0
- package/dist/{FilterBar-jBz6yaNu.cjs → FilterBar-O8SYau_Q.cjs} +5 -5
- package/dist/FilterBar-O8SYau_Q.cjs.map +1 -0
- package/dist/KnowledgePageGraph.css +1 -3
- package/dist/{MarkdownRenderer-CY8LGt-l.js → MarkdownRenderer-BSGb65Ze.js} +2 -2
- package/dist/{MarkdownRenderer-CY8LGt-l.js.map → MarkdownRenderer-BSGb65Ze.js.map} +1 -1
- package/dist/{MarkdownRenderer-CUYpmuPh.cjs → MarkdownRenderer-CDwlvw0Y.cjs} +2 -2
- package/dist/{MarkdownRenderer-CUYpmuPh.cjs.map → MarkdownRenderer-CDwlvw0Y.cjs.map} +1 -1
- package/dist/{MetricsCard-DojbLiEx.cjs → MetricsCard-CSJ4TsNq.cjs} +3 -3
- package/dist/MetricsCard-CSJ4TsNq.cjs.map +1 -0
- package/dist/{MetricsCard-kAqSCPPe.js → MetricsCard-D6bQfynP.js} +3 -3
- package/dist/MetricsCard-D6bQfynP.js.map +1 -0
- package/dist/{Tree-Caz4FTCU.cjs → Tree-6pubDJLQ.cjs} +4 -3
- package/dist/Tree-6pubDJLQ.cjs.map +1 -0
- package/dist/{Tree-od43gLMO.js → Tree-DpRLmis3.js} +4 -3
- package/dist/Tree-DpRLmis3.js.map +1 -0
- package/dist/{Workflow-mIbUYdv0.js → Workflow-BVVYys0W.js} +3 -3
- package/dist/{Workflow-mIbUYdv0.js.map → Workflow-BVVYys0W.js.map} +1 -1
- package/dist/{Workflow-XR5L-3cJ.cjs → Workflow-CwIjxwC6.cjs} +3 -3
- package/dist/{Workflow-XR5L-3cJ.cjs.map → Workflow-CwIjxwC6.cjs.map} +1 -1
- package/dist/{activity-ClFChYfl.js → activity-BH_eegMA.js} +2 -2
- package/dist/{activity-ClFChYfl.js.map → activity-BH_eegMA.js.map} +1 -1
- package/dist/{activity-BprmG6yH.cjs → activity-Ciolopq8.cjs} +2 -2
- package/dist/{activity-BprmG6yH.cjs.map → activity-Ciolopq8.cjs.map} +1 -1
- package/dist/{ask-user-D4ezQ6pt.js → ask-user-CqzPUD9E.js} +2 -2
- package/dist/{ask-user-D4ezQ6pt.js.map → ask-user-CqzPUD9E.js.map} +1 -1
- package/dist/{ask-user-DcnUNMM5.cjs → ask-user-DIYcPkoX.cjs} +2 -2
- package/dist/{ask-user-DcnUNMM5.cjs.map → ask-user-DIYcPkoX.cjs.map} +1 -1
- package/dist/{combobox-lbSxWRMl.js → combobox-DLdInLYm.js} +2 -2
- package/dist/{combobox-lbSxWRMl.js.map → combobox-DLdInLYm.js.map} +1 -1
- package/dist/{combobox-i723LxeC.cjs → combobox-DU2jsrGa.cjs} +2 -2
- package/dist/{combobox-i723LxeC.cjs.map → combobox-DU2jsrGa.cjs.map} +1 -1
- package/dist/{combobox-parts-BeNqgCbj.cjs → combobox-parts-C236ZHtn.cjs} +2 -2
- package/dist/combobox-parts-C236ZHtn.cjs.map +1 -0
- package/dist/{combobox-parts-C9o4UfH_.js → combobox-parts-_m3Qgmci.js} +2 -2
- package/dist/combobox-parts-_m3Qgmci.js.map +1 -0
- package/dist/components/Breadcrumb.cjs.js.map +1 -1
- package/dist/components/Breadcrumb.es.js.map +1 -1
- package/dist/components/CodeBlock.cjs.js +1 -1
- package/dist/components/CodeBlock.es.js +1 -1
- package/dist/components/CodeEditor.cjs.js +1 -1
- package/dist/components/CodeEditor.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 +1 -1
- package/dist/components/Command.cjs.js.map +1 -1
- package/dist/components/Command.es.js +1 -1
- 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/Composer.cjs.js +1 -1
- package/dist/components/Composer.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 +1 -1
- package/dist/components/DataList.es.js +1 -1
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.es.js +1 -1
- package/dist/components/DateTimePicker.cjs.js +1 -1
- package/dist/components/DateTimePicker.es.js +1 -1
- package/dist/components/DateTimeRangePicker.cjs.js +1 -1
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/DropdownMenu.cjs.js +1 -1
- package/dist/components/DropdownMenu.es.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.es.js +1 -1
- package/dist/components/FilterBar.cjs.js +3 -3
- package/dist/components/FilterBar.es.js +3 -3
- package/dist/components/FormFieldBlocks.cjs.js +1 -1
- package/dist/components/FormFieldBlocks.es.js +1 -1
- package/dist/components/Input.cjs.js +1 -1
- package/dist/components/Input.es.js +1 -1
- package/dist/components/InputGroup.cjs.js +1 -1
- package/dist/components/InputGroup.es.js +1 -1
- package/dist/components/InputNumber.cjs.js +1 -1
- package/dist/components/InputNumber.es.js +1 -1
- package/dist/components/JSONSchemaForm.cjs.js +1 -1
- package/dist/components/JSONSchemaForm.es.js +1 -1
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/MetricsCard.cjs.js +1 -1
- package/dist/components/MetricsCard.es.js +1 -1
- package/dist/components/PropertyFilter.cjs.js +2 -2
- package/dist/components/PropertyFilter.es.js +2 -2
- package/dist/components/RuleBuilder.cjs.js +1 -1
- package/dist/components/RuleBuilder.es.js +1 -1
- package/dist/components/SavedViews.cjs.js +3 -3
- package/dist/components/SavedViews.cjs.js.map +1 -1
- package/dist/components/SavedViews.es.js +3 -3
- package/dist/components/SavedViews.es.js.map +1 -1
- package/dist/components/SearchInput.cjs.js +1 -1
- package/dist/components/SearchInput.es.js +1 -1
- package/dist/components/SideDialog.cjs.js +1 -1
- package/dist/components/SideDialog.es.js +1 -1
- package/dist/components/Sidebar.cjs.js +1 -1
- package/dist/components/Sidebar.es.js +1 -1
- package/dist/components/Tabs.cjs.js +2 -2
- package/dist/components/Tabs.es.js +2 -2
- package/dist/components/Textarea.cjs.js +1 -1
- package/dist/components/Textarea.cjs.js.map +1 -1
- package/dist/components/Textarea.es.js +1 -1
- package/dist/components/Textarea.es.js.map +1 -1
- package/dist/components/ThreadRail.cjs.js +2 -0
- package/dist/components/ThreadRail.cjs.js.map +1 -1
- package/dist/components/ThreadRail.es.js +2 -0
- package/dist/components/ThreadRail.es.js.map +1 -1
- package/dist/components/Tree.cjs.js +1 -1
- package/dist/components/Tree.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 +1 -1
- package/dist/components/ai/plan.es.js +1 -1
- package/dist/components/ai/tool-approval.cjs.js +1 -1
- package/dist/components/ai/tool-approval.es.js +1 -1
- package/dist/components/ai/tool-call.cjs.js +1 -1
- package/dist/components/ai/tool-call.es.js +1 -1
- package/dist/{date-time-range-picker-DdNgKD87.js → date-time-range-picker-CJyhcug7.js} +3 -3
- package/dist/{date-time-range-picker-DdNgKD87.js.map → date-time-range-picker-CJyhcug7.js.map} +1 -1
- package/dist/{date-time-range-picker-Bq-8IPtS.cjs → date-time-range-picker-Dhnuwa-U.cjs} +3 -3
- package/dist/{date-time-range-picker-Bq-8IPtS.cjs.map → date-time-range-picker-Dhnuwa-U.cjs.map} +1 -1
- 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/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/composer-attachment-list.cjs.js +1 -1
- package/dist/domains/chat/attachments/composer-attachment-list.es.js +1 -1
- package/dist/domains/chat/attachments/split-message-attachments.cjs.js +4 -1
- package/dist/domains/chat/attachments/split-message-attachments.cjs.js.map +1 -1
- package/dist/domains/chat/attachments/split-message-attachments.es.js +4 -1
- package/dist/domains/chat/attachments/split-message-attachments.es.js.map +1 -1
- package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +1 -1
- package/dist/domains/chat/knowledge/pinned-knowledge.cjs.js +1 -1
- package/dist/domains/chat/knowledge/pinned-knowledge.es.js +1 -1
- package/dist/domains/chat/messages/dataset-save-action.cjs.js +1 -1
- package/dist/domains/chat/messages/dataset-save-action.es.js +1 -1
- package/dist/domains/chat/messages/message-row.cjs.js +2 -2
- package/dist/domains/chat/messages/message-row.es.js +2 -2
- 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 +1 -1
- package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
- package/dist/domains/chat/messages/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 +5 -10
- package/dist/domains/chat/messages/tripwire-notice.cjs.js.map +1 -1
- package/dist/domains/chat/messages/tripwire-notice.es.js +5 -10
- package/dist/domains/chat/messages/tripwire-notice.es.js.map +1 -1
- 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 +1 -1
- package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/file-tree-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/knowledge-tool-badge.es.js +2 -2
- 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 +2 -2
- package/dist/domains/chat/tools/badges/workflow-badge.es.js +2 -2
- package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js +2 -2
- package/dist/domains/chat/tools/mcp-input-request-tool.es.js +2 -2
- 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/connected-widget.cjs.js +55 -0
- package/dist/domains/dashboards/components/connected-widget.cjs.js.map +1 -0
- package/dist/domains/dashboards/components/connected-widget.d.ts +1 -0
- package/dist/domains/dashboards/components/connected-widget.es.js +54 -0
- package/dist/domains/dashboards/components/connected-widget.es.js.map +1 -0
- package/dist/domains/dashboards/components/dashboard-renderer.cjs.js +13 -8
- package/dist/domains/dashboards/components/dashboard-renderer.cjs.js.map +1 -1
- package/dist/domains/dashboards/components/dashboard-renderer.es.js +13 -8
- package/dist/domains/dashboards/components/dashboard-renderer.es.js.map +1 -1
- package/dist/domains/dashboards/components/stateless-widget.cjs.js +30 -0
- package/dist/domains/dashboards/components/stateless-widget.cjs.js.map +1 -0
- package/dist/domains/dashboards/components/stateless-widget.d.ts +1 -0
- package/dist/domains/dashboards/components/stateless-widget.es.js +29 -0
- package/dist/domains/dashboards/components/stateless-widget.es.js.map +1 -0
- package/dist/domains/dashboards/components/view-gate.cjs.js +18 -40
- package/dist/domains/dashboards/components/view-gate.cjs.js.map +1 -1
- package/dist/domains/dashboards/components/view-gate.es.js +18 -40
- package/dist/domains/dashboards/components/view-gate.es.js.map +1 -1
- package/dist/domains/dashboards/components/widget-chrome.cjs.js +1 -1
- package/dist/domains/dashboards/components/widget-chrome.es.js +1 -1
- package/dist/domains/dashboards/components/widget-controls.cjs.js +106 -0
- package/dist/domains/dashboards/components/widget-controls.cjs.js.map +1 -1
- package/dist/domains/dashboards/components/widget-controls.es.js +107 -3
- package/dist/domains/dashboards/components/widget-controls.es.js.map +1 -1
- package/dist/domains/dashboards/components/widget-error.cjs.js +1 -1
- package/dist/domains/dashboards/components/widget-error.es.js +1 -1
- package/dist/domains/dashboards/hooks/use-dashboard-environment.cjs.js +55 -0
- package/dist/domains/dashboards/hooks/use-dashboard-environment.cjs.js.map +1 -0
- package/dist/domains/dashboards/hooks/use-dashboard-environment.d.ts +1 -0
- package/dist/domains/dashboards/hooks/use-dashboard-environment.es.js +53 -0
- package/dist/domains/dashboards/hooks/use-dashboard-environment.es.js.map +1 -0
- package/dist/domains/dashboards/hooks/use-dashboard-requests.cjs.js +24 -0
- package/dist/domains/dashboards/hooks/use-dashboard-requests.cjs.js.map +1 -1
- package/dist/domains/dashboards/hooks/use-dashboard-requests.es.js +23 -1
- package/dist/domains/dashboards/hooks/use-dashboard-requests.es.js.map +1 -1
- package/dist/domains/dashboards/hooks/use-widget-views.cjs.js +10 -6
- package/dist/domains/dashboards/hooks/use-widget-views.cjs.js.map +1 -1
- package/dist/domains/dashboards/hooks/use-widget-views.es.js +10 -7
- package/dist/domains/dashboards/hooks/use-widget-views.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/kpis/kpis-plan.cjs.js +11 -0
- package/dist/domains/dashboards/kinds/kpis/kpis-plan.cjs.js.map +1 -0
- package/dist/domains/dashboards/kinds/kpis/kpis-plan.d.ts +1 -0
- package/dist/domains/dashboards/kinds/kpis/kpis-plan.es.js +9 -0
- package/dist/domains/dashboards/kinds/kpis/kpis-plan.es.js.map +1 -0
- package/dist/domains/dashboards/kinds/kpis/kpis-widget.cjs.js +18 -19
- package/dist/domains/dashboards/kinds/kpis/kpis-widget.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/kpis/kpis-widget.es.js +18 -19
- package/dist/domains/dashboards/kinds/kpis/kpis-widget.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/kpis.cjs.js +3 -0
- package/dist/domains/dashboards/kinds/kpis.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/kpis.es.js +3 -0
- package/dist/domains/dashboards/kinds/kpis.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/scores/scores-plan.cjs.js +27 -0
- package/dist/domains/dashboards/kinds/scores/scores-plan.cjs.js.map +1 -0
- package/dist/domains/dashboards/kinds/scores/scores-plan.d.ts +1 -0
- package/dist/domains/dashboards/kinds/scores/scores-plan.es.js +24 -0
- package/dist/domains/dashboards/kinds/scores/scores-plan.es.js.map +1 -0
- package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js +25 -32
- package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/scores/scores-widget.es.js +26 -33
- package/dist/domains/dashboards/kinds/scores/scores-widget.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/scores.cjs.js +4 -0
- package/dist/domains/dashboards/kinds/scores.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/scores.es.js +4 -0
- package/dist/domains/dashboards/kinds/scores.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-cells.cjs.js +2 -6
- package/dist/domains/dashboards/kinds/table/table-cells.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-cells.es.js +2 -6
- package/dist/domains/dashboards/kinds/table/table-cells.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-columns.cjs.js +5 -3
- package/dist/domains/dashboards/kinds/table/table-columns.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-columns.es.js +5 -3
- package/dist/domains/dashboards/kinds/table/table-columns.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-plan.cjs.js +47 -0
- package/dist/domains/dashboards/kinds/table/table-plan.cjs.js.map +1 -0
- package/dist/domains/dashboards/kinds/table/table-plan.d.ts +1 -0
- package/dist/domains/dashboards/kinds/table/table-plan.es.js +44 -0
- package/dist/domains/dashboards/kinds/table/table-plan.es.js.map +1 -0
- package/dist/domains/dashboards/kinds/table/table-tabs.cjs.js +20 -26
- package/dist/domains/dashboards/kinds/table/table-tabs.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-tabs.es.js +22 -28
- package/dist/domains/dashboards/kinds/table/table-tabs.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-view.cjs.js +13 -13
- package/dist/domains/dashboards/kinds/table/table-view.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-view.es.js +14 -14
- package/dist/domains/dashboards/kinds/table/table-view.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-widget.cjs.js +13 -17
- package/dist/domains/dashboards/kinds/table/table-widget.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/table/table-widget.es.js +13 -17
- package/dist/domains/dashboards/kinds/table/table-widget.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/table.cjs.js +4 -0
- package/dist/domains/dashboards/kinds/table.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/table.es.js +4 -0
- package/dist/domains/dashboards/kinds/table.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.cjs.js +18 -0
- package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.cjs.js.map +1 -0
- package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.d.ts +1 -0
- package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.es.js +16 -0
- package/dist/domains/dashboards/kinds/timeseries/timeseries-plan.es.js.map +1 -0
- package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js +22 -22
- package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js +25 -25
- package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js.map +1 -1
- package/dist/domains/dashboards/kinds/timeseries.cjs.js +3 -0
- package/dist/domains/dashboards/kinds/timeseries.cjs.js.map +1 -1
- package/dist/domains/dashboards/kinds/timeseries.es.js +3 -0
- package/dist/domains/dashboards/kinds/timeseries.es.js.map +1 -1
- package/dist/domains/dashboards/lib/alert-actions.cjs.js +123 -0
- package/dist/domains/dashboards/lib/alert-actions.cjs.js.map +1 -0
- package/dist/domains/dashboards/lib/alert-actions.d.ts +1 -0
- package/dist/domains/dashboards/lib/alert-actions.es.js +118 -0
- package/dist/domains/dashboards/lib/alert-actions.es.js.map +1 -0
- package/dist/domains/dashboards/lib/gate.cjs.js +62 -0
- package/dist/domains/dashboards/lib/gate.cjs.js.map +1 -0
- package/dist/domains/dashboards/lib/gate.d.ts +1 -0
- package/dist/domains/dashboards/lib/gate.es.js +60 -0
- package/dist/domains/dashboards/lib/gate.es.js.map +1 -0
- package/dist/domains/dashboards/lib/plan-widget.cjs.js +41 -0
- package/dist/domains/dashboards/lib/plan-widget.cjs.js.map +1 -0
- package/dist/domains/dashboards/lib/plan-widget.d.ts +1 -0
- package/dist/domains/dashboards/lib/plan-widget.es.js +38 -0
- package/dist/domains/dashboards/lib/plan-widget.es.js.map +1 -0
- package/dist/domains/dashboards/lib/requests.cjs.js +47 -0
- package/dist/domains/dashboards/lib/requests.cjs.js.map +1 -1
- package/dist/domains/dashboards/lib/requests.es.js +46 -1
- package/dist/domains/dashboards/lib/requests.es.js.map +1 -1
- package/dist/domains/dashboards/lib/scores.cjs.js +32 -0
- package/dist/domains/dashboards/lib/scores.cjs.js.map +1 -1
- package/dist/domains/dashboards/lib/scores.es.js +31 -1
- package/dist/domains/dashboards/lib/scores.es.js.map +1 -1
- package/dist/domains/dashboards/lib/timeseries.cjs.js +17 -0
- package/dist/domains/dashboards/lib/timeseries.cjs.js.map +1 -1
- package/dist/domains/dashboards/lib/timeseries.es.js +17 -1
- package/dist/domains/dashboards/lib/timeseries.es.js.map +1 -1
- package/dist/domains/dashboards/lib/values.cjs.js.map +1 -1
- package/dist/domains/dashboards/lib/values.es.js.map +1 -1
- package/dist/domains/dashboards/widget-kind.cjs.js.map +1 -1
- package/dist/domains/dashboards/widget-kind.es.js.map +1 -1
- package/dist/domains/dashboards.cjs.js +19 -2
- package/dist/domains/dashboards.es.js +9 -5
- package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.cjs.js +1 -1
- package/dist/domains/datasets/components/add-dataset-item-dialog/add-dataset-item-dialog.es.js +1 -1
- package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.cjs.js +2 -2
- package/dist/domains/datasets/components/add-dataset-item-dialog/trajectory-editor.es.js +2 -2
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +2 -2
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +2 -2
- package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js +186 -212
- package/dist/domains/knowledge/components/KnowledgePageDetail.cjs.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageDetail.es.js +188 -215
- package/dist/domains/knowledge/components/KnowledgePageDetail.es.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js +620 -268
- package/dist/domains/knowledge/components/KnowledgePageExplorer.cjs.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js +622 -270
- package/dist/domains/knowledge/components/KnowledgePageExplorer.es.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js +544 -454
- package/dist/domains/knowledge/components/KnowledgePageGraph.cjs.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageGraph.es.js +548 -458
- package/dist/domains/knowledge/components/KnowledgePageGraph.es.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js +21 -12
- package/dist/domains/knowledge/components/KnowledgePageTree.cjs.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgePageTree.es.js +22 -13
- package/dist/domains/knowledge/components/KnowledgePageTree.es.js.map +1 -1
- package/dist/domains/knowledge/components/KnowledgeSourceIcon.cjs.js +16 -0
- package/dist/domains/knowledge/components/KnowledgeSourceIcon.cjs.js.map +1 -0
- package/dist/domains/knowledge/components/KnowledgeSourceIcon.d.ts +1 -0
- package/dist/domains/knowledge/components/KnowledgeSourceIcon.es.js +15 -0
- package/dist/domains/knowledge/components/KnowledgeSourceIcon.es.js.map +1 -0
- package/dist/domains/knowledge/components/KnowledgeTooltip.cjs.js +10 -0
- package/dist/domains/knowledge/components/KnowledgeTooltip.cjs.js.map +1 -0
- package/dist/domains/knowledge/components/KnowledgeTooltip.d.ts +1 -0
- package/dist/domains/knowledge/components/KnowledgeTooltip.es.js +9 -0
- package/dist/domains/knowledge/components/KnowledgeTooltip.es.js.map +1 -0
- package/dist/domains/knowledge/lib/fitViewport.cjs.js +22 -8
- package/dist/domains/knowledge/lib/fitViewport.cjs.js.map +1 -1
- package/dist/domains/knowledge/lib/fitViewport.es.js +22 -9
- package/dist/domains/knowledge/lib/fitViewport.es.js.map +1 -1
- package/dist/domains/knowledge/lib/pageAddress.cjs.js +51 -0
- package/dist/domains/knowledge/lib/pageAddress.cjs.js.map +1 -1
- package/dist/domains/knowledge/lib/pageAddress.es.js +50 -1
- package/dist/domains/knowledge/lib/pageAddress.es.js.map +1 -1
- package/dist/domains/knowledge/lib/pageRefs.cjs.js +43 -2
- package/dist/domains/knowledge/lib/pageRefs.cjs.js.map +1 -1
- package/dist/domains/knowledge/lib/pageRefs.es.js +43 -3
- package/dist/domains/knowledge/lib/pageRefs.es.js.map +1 -1
- package/dist/domains/knowledge/lib/pagesByRefContext.cjs.js +10 -0
- package/dist/domains/knowledge/lib/pagesByRefContext.cjs.js.map +1 -0
- package/dist/domains/knowledge/lib/pagesByRefContext.d.ts +1 -0
- package/dist/domains/knowledge/lib/pagesByRefContext.es.js +10 -0
- package/dist/domains/knowledge/lib/pagesByRefContext.es.js.map +1 -0
- package/dist/domains/logs/components/log-data-panel.cjs.js +1 -1
- package/dist/domains/logs/components/log-data-panel.es.js +1 -1
- package/dist/domains/logs/components/logs-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/mcps/components/mcp-app-tool-result.cjs.js +28 -3
- package/dist/domains/mcps/components/mcp-app-tool-result.cjs.js.map +1 -1
- package/dist/domains/mcps/components/mcp-app-tool-result.es.js +27 -2
- package/dist/domains/mcps/components/mcp-app-tool-result.es.js.map +1 -1
- package/dist/domains/mcps/components/mcp-app-viewer.cjs.js +163 -2
- package/dist/domains/mcps/components/mcp-app-viewer.cjs.js.map +1 -0
- package/dist/domains/mcps/components/mcp-app-viewer.es.js +163 -1
- package/dist/domains/mcps/components/mcp-app-viewer.es.js.map +1 -0
- package/dist/domains/mcps/context/mcp-app-host-context-value.cjs.js +11 -0
- package/dist/domains/mcps/context/mcp-app-host-context-value.cjs.js.map +1 -0
- package/dist/domains/mcps/context/mcp-app-host-context-value.d.ts +1 -0
- package/dist/domains/mcps/context/mcp-app-host-context-value.es.js +9 -0
- package/dist/domains/mcps/context/mcp-app-host-context-value.es.js.map +1 -0
- package/dist/domains/mcps/context/mcp-app-host-context.cjs.js +14 -0
- package/dist/domains/mcps/context/mcp-app-host-context.cjs.js.map +1 -0
- package/dist/domains/mcps/context/mcp-app-host-context.d.ts +1 -0
- package/dist/domains/mcps/context/mcp-app-host-context.es.js +13 -0
- package/dist/domains/mcps/context/mcp-app-host-context.es.js.map +1 -0
- package/dist/domains/mcps/hooks/use-mcp-app-tool-call.cjs.js +2 -1
- package/dist/domains/mcps/hooks/use-mcp-app-tool-call.cjs.js.map +1 -1
- package/dist/domains/mcps/hooks/use-mcp-app-tool-call.es.js +2 -1
- package/dist/domains/mcps/hooks/use-mcp-app-tool-call.es.js.map +1 -1
- package/dist/domains/mcps.cjs.js +5 -0
- package/dist/domains/mcps.d.ts +1 -0
- package/dist/domains/mcps.es.js +3 -0
- package/dist/domains/metrics/components/agent-runs-card.cjs.js +1 -1
- package/dist/domains/metrics/components/agent-runs-card.es.js +1 -1
- package/dist/domains/metrics/components/breakdown/breakdown-tab-body.cjs.js +1 -1
- package/dist/domains/metrics/components/breakdown/breakdown-tab-body.es.js +1 -1
- package/dist/domains/metrics/components/breakdown-card.cjs.js +1 -1
- package/dist/domains/metrics/components/breakdown-card.es.js +1 -1
- package/dist/domains/metrics/components/chart-area.cjs.js +1 -1
- package/dist/domains/metrics/components/chart-area.es.js +1 -1
- package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
- package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
- package/dist/domains/metrics/components/chart-card.cjs.js +1 -1
- package/dist/domains/metrics/components/chart-card.es.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
- package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.cjs.js +1 -1
- package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.es.js +1 -1
- package/dist/domains/metrics/components/failure-rate-card.cjs.js +1 -1
- package/dist/domains/metrics/components/failure-rate-card.es.js +1 -1
- package/dist/domains/metrics/components/latency-card.cjs.js +1 -1
- package/dist/domains/metrics/components/latency-card.es.js +1 -1
- package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +1 -1
- package/dist/domains/metrics/components/metrics-time-range-chip.es.js +1 -1
- package/dist/domains/metrics/components/token-usage-card.cjs.js +1 -1
- package/dist/domains/metrics/components/token-usage-card.es.js +1 -1
- package/dist/domains/metrics/components/trace-aggregate-card.cjs.js +1 -1
- package/dist/domains/metrics/components/trace-aggregate-card.es.js +1 -1
- package/dist/domains/metrics.cjs.js +3 -3
- package/dist/domains/metrics.es.js +3 -3
- 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 +1 -1
- package/dist/domains/scores/components/score-data-panel.es.js +1 -1
- package/dist/domains/scores/components/span-scoring.cjs.js +1 -1
- package/dist/domains/scores/components/span-scoring.es.js +1 -1
- package/dist/domains/scores/components/trace-scores-list.cjs.js +1 -1
- package/dist/domains/scores/components/trace-scores-list.es.js +1 -1
- package/dist/domains/skills/skill-simple-form.cjs.js +3 -3
- package/dist/domains/skills/skill-simple-form.es.js +3 -3
- package/dist/domains/spans/components/spans-explorer-body.cjs.js +1 -1
- package/dist/domains/spans/components/spans-explorer-body.es.js +1 -1
- package/dist/domains/spans/components/spans-filter-bar.cjs.js +2 -2
- package/dist/domains/spans/components/spans-filter-bar.es.js +2 -2
- package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js +1 -1
- package/dist/domains/spans/hooks/use-spans-filter-bar.es.js +1 -1
- package/dist/domains/threads/components/threads-explorer-body.cjs.js +1 -1
- package/dist/domains/threads/components/threads-explorer-body.es.js +1 -1
- package/dist/domains/threads/components/threads-filter-bar.cjs.js +2 -2
- package/dist/domains/threads/components/threads-filter-bar.es.js +2 -2
- package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js +1 -1
- package/dist/domains/threads/hooks/use-threads-filter-bar.es.js +1 -1
- package/dist/domains/traces/components/feedback-options.cjs.js +0 -0
- package/dist/domains/traces/components/feedback-options.d.ts +1 -0
- package/dist/domains/traces/components/feedback-options.es.js +0 -0
- package/dist/domains/traces/components/feedback-thread.cjs.js +10 -4
- package/dist/domains/traces/components/feedback-thread.cjs.js.map +1 -1
- package/dist/domains/traces/components/feedback-thread.es.js +10 -4
- package/dist/domains/traces/components/feedback-thread.es.js.map +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +2 -2
- package/dist/domains/traces/components/span-data-panel-view.es.js +2 -2
- package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
- package/dist/domains/traces/components/span-details-view.es.js +1 -1
- package/dist/domains/traces/components/span-feedback-tab.cjs.js +8 -5
- package/dist/domains/traces/components/span-feedback-tab.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-feedback-tab.es.js +8 -5
- package/dist/domains/traces/components/span-feedback-tab.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-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 +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +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-view-by-trace.cjs.js +5 -3
- package/dist/domains/traces/components/thread-view-by-trace.cjs.js.map +1 -1
- package/dist/domains/traces/components/thread-view-by-trace.es.js +5 -3
- package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +2 -2
- package/dist/domains/traces/components/trace-columns-menu.es.js +2 -2
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +2 -2
- package/dist/domains/traces/components/trace-data-panel-view.es.js +2 -2
- package/dist/domains/traces/components/trace-details-view.cjs.js +1 -1
- package/dist/domains/traces/components/trace-details-view.es.js +1 -1
- package/dist/domains/traces/components/trace-feedback-tab.cjs.js +9 -4
- package/dist/domains/traces/components/trace-feedback-tab.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-feedback-tab.es.js +9 -4
- package/dist/domains/traces/components/trace-feedback-tab.es.js.map +1 -1
- package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
- package/dist/domains/traces/components/trace-id-button.es.js +1 -1
- package/dist/domains/traces/components/trace-span-panel.cjs.js +2 -1
- package/dist/domains/traces/components/trace-span-panel.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-span-panel.es.js +2 -1
- package/dist/domains/traces/components/trace-span-panel.es.js.map +1 -1
- package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
- package/dist/domains/traces/components/trace-thread-panel.cjs.js +3 -2
- package/dist/domains/traces/components/trace-thread-panel.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-thread-panel.es.js +3 -2
- package/dist/domains/traces/components/trace-thread-panel.es.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-context.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-context.es.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +2 -2
- package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +2 -2
- package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js +8 -3
- package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js +8 -3
- package/dist/domains/traces/components/traces-explorer/traces-explorer-panel.es.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js +14 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-root.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js +14 -1
- package/dist/domains/traces/components/traces-explorer/traces-explorer-root.es.js.map +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 +1 -1
- package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +1 -1
- package/dist/domains/traces/components/traces-explorer.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-explorer.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 +1 -1
- package/dist/domains/traces/components/traces-list-view.es.js +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/workflows/components/workflow-combobox.cjs.js +1 -1
- package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
- package/dist/domains/workflows/components/workflow-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/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 +1 -1
- package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +1 -1
- 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/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-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-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 +1 -1
- package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +1 -1
- 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-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 +1 -1
- package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +1 -1
- 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 +1 -1
- package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +1 -1
- package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +1 -1
- package/dist/domains/workspace/components/workspace-create-directory.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-create-directory.es.js +1 -1
- package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +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/{dropdown-menu-Dx-jCOIv.cjs → dropdown-menu-D3D8USIY.cjs} +9 -1
- package/dist/dropdown-menu-D3D8USIY.cjs.map +1 -0
- package/dist/{dropdown-menu-DKoWI8kD.js → dropdown-menu-jsf9D-J_.js} +9 -1
- package/dist/dropdown-menu-jsf9D-J_.js.map +1 -0
- 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 +1 -1
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +1 -1
- package/dist/ee/signals/settings/trace-signal-settings.cjs.js +1 -1
- package/dist/ee/signals/settings/trace-signal-settings.es.js +1 -1
- package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
- package/dist/ee/signals/view-mode-tab.es.js +1 -1
- package/dist/{filter-bar-chip-NBtfDca9.js → filter-bar-chip-Cz5GYBWP.js} +2 -2
- package/dist/{filter-bar-chip-NBtfDca9.js.map → filter-bar-chip-Cz5GYBWP.js.map} +1 -1
- package/dist/{filter-bar-chip-DFsbUZ-V.cjs → filter-bar-chip-q2Zr-cnY.cjs} +2 -2
- package/dist/{filter-bar-chip-DFsbUZ-V.cjs.map → filter-bar-chip-q2Zr-cnY.cjs.map} +1 -1
- package/dist/{filter-bar-time-range-DlVNjw43.cjs → filter-bar-time-range-D4C3kU0J.cjs} +3 -3
- package/dist/{filter-bar-time-range-DlVNjw43.cjs.map → filter-bar-time-range-D4C3kU0J.cjs.map} +1 -1
- package/dist/{filter-bar-time-range-D9SnzR2J.js → filter-bar-time-range-ao2YiYEJ.js} +3 -3
- package/dist/{filter-bar-time-range-D9SnzR2J.js.map → filter-bar-time-range-ao2YiYEJ.js.map} +1 -1
- package/dist/icons/ConfluenceIcon.cjs.js +18 -0
- package/dist/icons/ConfluenceIcon.cjs.js.map +1 -0
- package/dist/icons/ConfluenceIcon.d.ts +1 -0
- package/dist/icons/ConfluenceIcon.es.js +15 -0
- package/dist/icons/ConfluenceIcon.es.js.map +1 -0
- package/dist/icons/NotionIcon.cjs.js +18 -0
- package/dist/icons/NotionIcon.cjs.js.map +1 -0
- package/dist/icons/NotionIcon.d.ts +1 -0
- package/dist/icons/NotionIcon.es.js +15 -0
- package/dist/icons/NotionIcon.es.js.map +1 -0
- package/dist/icons/ZendeskIcon.cjs.js +18 -0
- package/dist/icons/ZendeskIcon.cjs.js.map +1 -0
- package/dist/icons/ZendeskIcon.d.ts +1 -0
- package/dist/icons/ZendeskIcon.es.js +15 -0
- package/dist/icons/ZendeskIcon.es.js.map +1 -0
- package/dist/{input-Cyit5ZSc.js → input-BNykbvOz.js} +2 -2
- package/dist/input-BNykbvOz.js.map +1 -0
- package/dist/{input-BpnUsQSt.cjs → input-D_V0m95F.cjs} +2 -2
- package/dist/input-D_V0m95F.cjs.map +1 -0
- package/dist/{input-group-NV4ZzKOk.js → input-group-CCSyY4J5.js} +3 -3
- package/dist/{input-group-NV4ZzKOk.js.map → input-group-CCSyY4J5.js.map} +1 -1
- package/dist/{input-group-DBCilXjT.cjs → input-group-Da8HBo30.cjs} +3 -3
- package/dist/{input-group-DBCilXjT.cjs.map → input-group-Da8HBo30.cjs.map} +1 -1
- package/dist/layout/tabbed-container.cjs.js +1 -1
- package/dist/layout/tabbed-container.es.js +1 -1
- package/dist/lib/form/components/number-field.cjs.js +1 -1
- package/dist/lib/form/components/number-field.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/{observability-saved-views-DgABvgat.cjs → observability-saved-views-CzRPN_9m.cjs} +4 -4
- package/dist/{observability-saved-views-DgABvgat.cjs.map → observability-saved-views-CzRPN_9m.cjs.map} +1 -1
- package/dist/{observability-saved-views-Ch53fh5_.js → observability-saved-views-hu_hkXVY.js} +4 -4
- package/dist/{observability-saved-views-Ch53fh5_.js.map → observability-saved-views-hu_hkXVY.js.map} +1 -1
- package/dist/primitives/menu-item.cjs.js +1 -1
- package/dist/primitives/menu-item.cjs.js.map +1 -1
- package/dist/primitives/menu-item.es.js +1 -1
- package/dist/primitives/menu-item.es.js.map +1 -1
- package/dist/{property-filter-applied-DuyL4S_K.cjs → property-filter-applied-ML84st6J.cjs} +3 -3
- package/dist/{property-filter-applied-DuyL4S_K.cjs.map → property-filter-applied-ML84st6J.cjs.map} +1 -1
- package/dist/{property-filter-applied-DoxQHG09.js → property-filter-applied-PaJ7sLsM.js} +3 -3
- package/dist/{property-filter-applied-DoxQHG09.js.map → property-filter-applied-PaJ7sLsM.js.map} +1 -1
- package/dist/{span-payload-primitives-D2NWznGy.cjs → span-payload-primitives-CL3hlirm.cjs} +3 -3
- package/dist/{span-payload-primitives-D2NWznGy.cjs.map → span-payload-primitives-CL3hlirm.cjs.map} +1 -1
- package/dist/{span-payload-primitives-BKkRpVVO.js → span-payload-primitives-KxqoXspn.js} +3 -3
- package/dist/{span-payload-primitives-BKkRpVVO.js.map → span-payload-primitives-KxqoXspn.js.map} +1 -1
- package/dist/src/domains/dashboards/components/connected-widget.d.ts +9 -0
- package/dist/src/domains/dashboards/components/dashboard-renderer.d.ts +9 -2
- package/dist/src/domains/dashboards/components/stateless-widget.d.ts +40 -0
- package/dist/src/domains/dashboards/components/view-gate.d.ts +2 -10
- package/dist/src/domains/dashboards/components/widget-controls.d.ts +25 -1
- package/dist/src/domains/dashboards/hooks/use-dashboard-environment.d.ts +8 -0
- package/dist/src/domains/dashboards/hooks/use-dashboard-requests.d.ts +11 -1
- package/dist/src/domains/dashboards/hooks/use-widget-views.d.ts +8 -2
- package/dist/src/domains/dashboards/index.d.ts +14 -6
- package/dist/src/domains/dashboards/kinds/kpis/kpis-plan.d.ts +355 -0
- package/dist/src/domains/dashboards/kinds/kpis/kpis-widget.d.ts +1 -1
- package/dist/src/domains/dashboards/kinds/scores/scores-plan.d.ts +358 -0
- package/dist/src/domains/dashboards/kinds/scores/scores-widget.d.ts +1 -1
- package/dist/src/domains/dashboards/kinds/table/table-cells.d.ts +6 -2
- package/dist/src/domains/dashboards/kinds/table/table-columns.d.ts +2 -1
- package/dist/src/domains/dashboards/kinds/table/table-plan.d.ts +18 -0
- package/dist/src/domains/dashboards/kinds/table/table-tabs.d.ts +1 -1
- package/dist/src/domains/dashboards/kinds/table/table-view.d.ts +1 -0
- package/dist/src/domains/dashboards/kinds/timeseries/timeseries-plan.d.ts +355 -0
- package/dist/src/domains/dashboards/lib/alert-actions.d.ts +36 -0
- package/dist/src/domains/dashboards/lib/gate.d.ts +65 -0
- package/dist/src/domains/dashboards/lib/plan-widget.d.ts +390 -0
- package/dist/src/domains/dashboards/lib/requests.d.ts +22 -0
- package/dist/src/domains/dashboards/lib/scores.d.ts +11 -1
- package/dist/src/domains/dashboards/lib/timeseries.d.ts +6 -1
- package/dist/src/domains/dashboards/lib/values.d.ts +5 -0
- package/dist/src/domains/dashboards/widget-kind.d.ts +105 -2
- package/dist/src/domains/knowledge/components/KnowledgePageDetail.d.ts +7 -1
- package/dist/src/domains/knowledge/components/KnowledgePageExplorer.d.ts +4 -1
- package/dist/src/domains/knowledge/components/KnowledgePageGraph.d.ts +3 -0
- package/dist/src/domains/knowledge/components/KnowledgeSourceIcon.d.ts +5 -0
- package/dist/src/domains/knowledge/components/KnowledgeTooltip.d.ts +5 -0
- package/dist/src/domains/knowledge/lib/fitViewport.d.ts +9 -2
- package/dist/src/domains/knowledge/lib/pageAddress.d.ts +10 -0
- package/dist/src/domains/knowledge/lib/pageRefs.d.ts +12 -1
- package/dist/src/domains/knowledge/lib/pagesByRefContext.d.ts +6 -0
- package/dist/src/domains/mcps/components/mcp-app-tool-result.d.ts +3 -1
- package/dist/src/domains/mcps/components/mcp-app-viewer.d.ts +6 -1
- package/dist/src/domains/mcps/context/mcp-app-host-context-value.d.ts +23 -0
- package/dist/src/domains/mcps/context/mcp-app-host-context.d.ts +7 -0
- package/dist/src/domains/mcps/index.d.ts +3 -0
- package/dist/src/domains/traces/components/feedback-options.d.ts +8 -0
- package/dist/src/domains/traces/components/feedback-thread.d.ts +2 -1
- package/dist/src/domains/traces/components/span-feedback-tab.d.ts +4 -2
- package/dist/src/domains/traces/components/thread-view-by-trace.d.ts +4 -1
- package/dist/src/domains/traces/components/trace-feedback-tab.d.ts +4 -2
- package/dist/src/domains/traces/components/trace-span-panel.d.ts +3 -1
- package/dist/src/domains/traces/components/trace-thread-panel.d.ts +3 -1
- package/dist/src/domains/traces/components/traces-explorer/index.d.ts +1 -0
- package/dist/src/domains/traces/components/traces-explorer/traces-explorer-context.d.ts +2 -0
- package/dist/src/domains/traces/components/traces-explorer/traces-explorer-root.d.ts +4 -1
- package/dist/src/ds/components/Breadcrumb/Breadcrumb.d.ts +2 -0
- package/dist/src/ds/components/DropdownMenu/dropdown-menu.d.ts +3 -0
- package/dist/src/ds/components/Tree/tree-label.d.ts +1 -1
- package/dist/src/ds/icons/ConfluenceIcon.d.ts +2 -0
- package/dist/src/ds/icons/NotionIcon.d.ts +2 -0
- package/dist/src/ds/icons/ZendeskIcon.d.ts +2 -0
- package/dist/src/ds/icons/index.d.ts +3 -0
- package/dist/src/utils/mcp-app-context.d.ts +6 -0
- package/dist/style.css +85 -35
- package/dist/{tabbed-container-Bhfi-DWr.cjs → tabbed-container-BMLD6mvc.cjs} +4 -4
- package/dist/{tabbed-container-Bhfi-DWr.cjs.map → tabbed-container-BMLD6mvc.cjs.map} +1 -1
- package/dist/{tabbed-container-DOkHshha.js → tabbed-container-CaS8cZCS.js} +4 -4
- package/dist/{tabbed-container-DOkHshha.js.map → tabbed-container-CaS8cZCS.js.map} +1 -1
- package/dist/{tabs-content-DwU_eA-a.js → tabs-content-BGkPZ5EQ.js} +2 -2
- package/dist/{tabs-content-DwU_eA-a.js.map → tabs-content-BGkPZ5EQ.js.map} +1 -1
- package/dist/{tabs-content-BACwMrMG.cjs → tabs-content-D_ic2ZqI.cjs} +2 -2
- package/dist/{tabs-content-BACwMrMG.cjs.map → tabs-content-D_ic2ZqI.cjs.map} +1 -1
- package/dist/{tabs-tab-BHs639jL.js → tabs-tab-CJVS0WED.js} +2 -2
- package/dist/{tabs-tab-BHs639jL.js.map → tabs-tab-CJVS0WED.js.map} +1 -1
- package/dist/{tabs-tab-CANh2eAD.cjs → tabs-tab-Dj2huH5T.cjs} +2 -2
- package/dist/{tabs-tab-CANh2eAD.cjs.map → tabs-tab-Dj2huH5T.cjs.map} +1 -1
- package/dist/{tool-approval-CguPaikn.cjs → tool-approval-C4WNL8VD.cjs} +3 -3
- package/dist/{tool-approval-CguPaikn.cjs.map → tool-approval-C4WNL8VD.cjs.map} +1 -1
- package/dist/{tool-approval-Cjz0yAzw.js → tool-approval-ZfL3-Vvi.js} +3 -3
- package/dist/{tool-approval-Cjz0yAzw.js.map → tool-approval-ZfL3-Vvi.js.map} +1 -1
- package/dist/{tool-call-ChJKYCfu.js → tool-call-BLzYTI-x.js} +2 -2
- package/dist/{tool-call-ChJKYCfu.js.map → tool-call-BLzYTI-x.js.map} +1 -1
- package/dist/{tool-call-BqDI9mrY.cjs → tool-call-C4TBpJ6Y.cjs} +2 -2
- package/dist/{tool-call-BqDI9mrY.cjs.map → tool-call-C4TBpJ6Y.cjs.map} +1 -1
- package/dist/{tool-card-GSiCfxMz.js → tool-card-CM0aHG3p.js} +4 -3
- package/dist/{tool-card-GSiCfxMz.js.map → tool-card-CM0aHG3p.js.map} +1 -1
- package/dist/{tool-card-Dg4VOYV6.cjs → tool-card-xDlCD0m6.cjs} +4 -3
- package/dist/{tool-card-Dg4VOYV6.cjs.map → tool-card-xDlCD0m6.cjs.map} +1 -1
- package/dist/{mcp-app-viewer-BV7FI498.js → types-BwdKiX24.js} +2 -144
- package/dist/types-BwdKiX24.js.map +1 -0
- package/dist/{mcp-app-viewer-M3-pqAlo.cjs → types-KjLUPShK.cjs} +8 -144
- package/dist/types-KjLUPShK.cjs.map +1 -0
- package/dist/{use-workflow-graph-runtime-BfCL6nd4.cjs → use-workflow-graph-runtime-DEJA9rk4.cjs} +2 -2
- package/dist/{use-workflow-graph-runtime-BfCL6nd4.cjs.map → use-workflow-graph-runtime-DEJA9rk4.cjs.map} +1 -1
- package/dist/{use-workflow-graph-runtime-B3VUuhUE.js → use-workflow-graph-runtime-DHOsA1DM.js} +2 -2
- package/dist/{use-workflow-graph-runtime-B3VUuhUE.js.map → use-workflow-graph-runtime-DHOsA1DM.js.map} +1 -1
- package/dist/utils/mcp-app-context.cjs.js +17 -0
- package/dist/utils/mcp-app-context.cjs.js.map +1 -0
- package/dist/utils/mcp-app-context.d.ts +1 -0
- package/dist/utils/mcp-app-context.es.js +15 -0
- package/dist/utils/mcp-app-context.es.js.map +1 -0
- package/package.json +8 -8
- package/dist/Composer-bVE8qK52.js.map +0 -1
- package/dist/Composer-u1K6edoZ.cjs.map +0 -1
- package/dist/FilterBar-Kmn6gMgO.js.map +0 -1
- package/dist/FilterBar-jBz6yaNu.cjs.map +0 -1
- package/dist/MetricsCard-DojbLiEx.cjs.map +0 -1
- package/dist/MetricsCard-kAqSCPPe.js.map +0 -1
- package/dist/Tree-Caz4FTCU.cjs.map +0 -1
- package/dist/Tree-od43gLMO.js.map +0 -1
- package/dist/combobox-parts-BeNqgCbj.cjs.map +0 -1
- package/dist/combobox-parts-C9o4UfH_.js.map +0 -1
- package/dist/domains/dashboards/hooks/use-scorers.cjs.js +0 -41
- package/dist/domains/dashboards/hooks/use-scorers.cjs.js.map +0 -1
- package/dist/domains/dashboards/hooks/use-scorers.d.ts +0 -1
- package/dist/domains/dashboards/hooks/use-scorers.es.js +0 -40
- package/dist/domains/dashboards/hooks/use-scorers.es.js.map +0 -1
- package/dist/dropdown-menu-DKoWI8kD.js.map +0 -1
- package/dist/dropdown-menu-Dx-jCOIv.cjs.map +0 -1
- package/dist/input-BpnUsQSt.cjs.map +0 -1
- package/dist/input-Cyit5ZSc.js.map +0 -1
- package/dist/mcp-app-viewer-BV7FI498.js.map +0 -1
- package/dist/mcp-app-viewer-M3-pqAlo.cjs.map +0 -1
- package/dist/src/domains/dashboards/hooks/use-scorers.d.ts +0 -66
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-span-panel.es.js","names":["_Fragment"],"sources":["../../../../src/domains/traces/components/trace-span-panel.tsx"],"sourcesContent":["import { useSpanDetail, useThreadHasOtherTraces } from '@mastra/react/hooks/traces';\nimport { MessagesSquareIcon } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { SpanDataPanelView } from '@/domains/traces/components/span-data-panel-view';\nimport { TraceDataPanel } from '@/domains/traces/components/trace-data-panel';\nimport type { TraceDataPanelView } from '@/domains/traces/components/trace-data-panel-view';\nimport { TraceMessagesPanel } from '@/domains/traces/components/trace-messages-panel';\nimport { getTraceThreadId } from '@/domains/traces/components/trace-thread-context';\nimport { TraceThreadPanel } from '@/domains/traces/components/trace-thread-panel';\nimport { Button } from '@/ds/components/Button';\nimport { useLinkComponent } from '@/lib/framework';\nimport type { LinkComponentPaths } from '@/lib/framework';\n\ntype TraceDataPanelViewProps = ComponentProps<typeof TraceDataPanelView>;\n\nfunction getEntityHref(\n paths: LinkComponentPaths,\n entityType: string | null | undefined,\n entityId: string | null | undefined,\n) {\n if (!entityId || !entityType) return undefined;\n const normalizedEntityType = entityType.toLowerCase();\n if (normalizedEntityType.includes('workflow')) return paths.workflowLink(entityId) || undefined;\n if (normalizedEntityType.includes('agent')) return paths.agentLink(entityId) || undefined;\n return undefined;\n}\ntype SpanDataPanelViewProps = ComponentProps<typeof SpanDataPanelView>;\n\nexport interface TraceSpanPanelProps {\n /** Keep the panel mounted and pass `undefined` to close it, so the drawer animates out. */\n traceId?: string;\n /** Spans returned by `useTraceOrBranchSpans` — the page owns the fetch, the panel renders it. */\n spans: TraceDataPanelViewProps['spans'];\n isLoadingSpans: boolean;\n /** Controlled span selection (URL state on the traces page, local state in the chat aside). */\n selectedSpanId: string | null;\n onSpanSelect: (spanId: string | undefined) => void;\n onClose: () => void;\n\n // Trace-panel pass-through.\n anchorSpanId?: string;\n entityType?: TraceDataPanelViewProps['entityType'];\n initialSpanId?: string | null;\n onPrevious?: () => void;\n onNext?: () => void;\n onSaveAsDatasetItem?: TraceDataPanelViewProps['onSaveAsDatasetItem'];\n feedbackTabBadge?: ReactNode;\n feedbackTabSlot?: TraceDataPanelViewProps['feedbackTabSlot'];\n /** Enables the \"Messages\" column (reconstructed turn) when the displayed root is a complete agent trace with a thread id. */\n showPartialThread?: boolean;\n /** Span ids featured in the timeline (non-featured spans are faded). */\n featuredSpanIds?: string[];\n /** Called with the span ids behind a reconstructed message when the user asks to highlight them. */\n onHighlightSpans?: (spanIds: string[]) => void;\n /** When true, opens the trace's thread (every turn) in a stacked drawer above the trace panel. */\n isFullThreadOpen?: boolean;\n /** Enables the in-place \"Open full thread\" swap; without it the action falls back to a link. */\n onFullThreadOpenChange?: (open: boolean) => void;\n /** Full-thread view: lists through the trace-query API; `false` falls back to `listTracesLight`. */\n withQueryTrace: boolean;\n /** Full-thread view: shows the per-trace Feedback tab. */\n withFeedback: boolean;\n /** Full-thread view: opens a score of one of the thread's traces (the app owns routing). */\n onOpenScore: (traceId: string, scoreId: string) => void;\n scoresTabBadge?: ReactNode;\n scoresTabSlot?: TraceDataPanelViewProps['scoresTabSlot'];\n usage?: TraceDataPanelViewProps['usage'];\n rootStreamingTimings?: TraceDataPanelViewProps['rootStreamingTimings'];\n traceHref?: string;\n /** Drawer width; defaults to `wide`. */\n size?: TraceDataPanelViewProps['size'];\n /** Sibling-drawer elevation (see `DataPanel`). */\n depth?: TraceDataPanelViewProps['depth'];\n /** Rendered inside the drawer above the trace header (e.g. feedback context). */\n headerSlot?: ReactNode;\n /** Integration actions displayed alongside the trace controls. */\n headerActionsSlot?: ReactNode;\n /** Accessible drawer name; defaults to the trace id. */\n title?: string;\n showUnavailableFeaturesMsg?: TraceDataPanelViewProps['showUnavailableFeaturesMsg'];\n spanView?: TraceDataPanelViewProps['spanView'];\n onSpanViewChange?: TraceDataPanelViewProps['onSpanViewChange'];\n\n // Span-panel pass-through.\n spanActiveTab?: SpanDataPanelViewProps['activeTab'];\n onSpanTabChange?: SpanDataPanelViewProps['onTabChange'];\n spanFeedbackTabBadge?: ReactNode;\n spanFeedbackTabSlot?: SpanDataPanelViewProps['feedbackTabSlot'];\n}\n\n/**\n * Shared trace → span drilldown drawer: `TraceDataPanel` with a nested `SpanDataPanelView`.\n * Encapsulates the span-detail fetch and prev/next span navigation that the traces page\n * and the agent chat traces aside used to duplicate.\n */\nexport function TraceSpanPanel({\n traceId,\n spans,\n isLoadingSpans,\n selectedSpanId,\n onSpanSelect,\n onClose,\n anchorSpanId,\n entityType,\n initialSpanId,\n onPrevious,\n onNext,\n onSaveAsDatasetItem,\n feedbackTabBadge,\n feedbackTabSlot,\n showPartialThread,\n featuredSpanIds,\n onHighlightSpans,\n isFullThreadOpen,\n onFullThreadOpenChange,\n withQueryTrace,\n withFeedback,\n onOpenScore,\n scoresTabBadge,\n scoresTabSlot,\n usage,\n rootStreamingTimings,\n traceHref,\n size,\n depth,\n headerSlot,\n headerActionsSlot,\n title,\n showUnavailableFeaturesMsg,\n spanView,\n onSpanViewChange,\n spanActiveTab,\n onSpanTabChange,\n spanFeedbackTabBadge,\n spanFeedbackTabSlot,\n}: TraceSpanPanelProps) {\n const { data: spanDetailData, isLoading: isLoadingSpanDetail } = useSpanDetail({\n traceId: traceId,\n spanId: selectedSpanId ?? '',\n queryOptions: { enabled: !!traceId && !!selectedSpanId },\n });\n const { Link, paths } = useLinkComponent();\n\n // The trace summary links the entity to its page; the app's link provider owns the routes.\n const rootSpan = anchorSpanId\n ? spans?.find(s => s.spanId === anchorSpanId)\n : spans?.find(s => s.parentSpanId == null);\n const entityHref = getEntityHref(paths, rootSpan?.entityType, rootSpan?.entityId);\n const threadId = getTraceThreadId(rootSpan, anchorSpanId);\n const hasMessagesPanel = !!(traceId && showPartialThread && threadId);\n // A single-trace thread would show exactly what the Messages column already shows.\n const hasOtherTraces = useThreadHasOtherTraces({\n threadId: hasMessagesPanel ? threadId : undefined,\n queryOptions: { enabled: !!(hasMessagesPanel ? threadId : undefined) },\n });\n const showFullThreadAction = hasMessagesPanel && hasOtherTraces && !!onFullThreadOpenChange;\n\n return (\n <>\n <TraceDataPanel\n traceId={traceId}\n spans={spans}\n anchorSpanId={anchorSpanId}\n entityType={entityType}\n entityHref={entityHref}\n usage={usage}\n rootStreamingTimings={rootStreamingTimings}\n isLoading={isLoadingSpans}\n onClose={onClose}\n onSpanSelect={onSpanSelect}\n onSaveAsDatasetItem={onSaveAsDatasetItem}\n initialSpanId={initialSpanId ?? selectedSpanId}\n onPrevious={onPrevious}\n onNext={onNext}\n placement=\"traces-list\"\n LinkComponent={Link}\n traceHref={traceHref}\n size={size}\n depth={depth}\n headerSlot={headerSlot}\n headerActionsSlot={headerActionsSlot}\n title={title}\n showUnavailableFeaturesMsg={showUnavailableFeaturesMsg}\n spanView={spanView}\n onSpanViewChange={onSpanViewChange}\n feedbackTabBadge={feedbackTabBadge}\n feedbackTabSlot={feedbackTabSlot}\n featuredSpanIds={featuredSpanIds}\n messagesPanelSlot={\n hasMessagesPanel ? <TraceMessagesPanel traceId={traceId} onHighlightSpans={onHighlightSpans} /> : undefined\n }\n sideHeaderActions={\n showFullThreadAction\n ? ({ compact }) => (\n <Button\n tooltip={compact ? 'Open full thread' : undefined}\n icon={<MessagesSquareIcon />}\n variant=\"ghost\"\n size=\"sm\"\n // At a side column of 500px or less, collapse to a round icon button; the label stays for screen readers.\n className=\"@max-[501px]:w-control-sm @max-[501px]:rounded-full @max-[501px]:px-0 @max-[501px]:[&>[data-slot=button-icon]]:ml-0\"\n onClick={() => onFullThreadOpenChange(true)}\n >\n <span className=\"@max-[501px]:sr-only\">Open full thread</span>\n </Button>\n )\n : undefined\n }\n scoresTabBadge={scoresTabBadge}\n scoresTabSlot={scoresTabSlot}\n spanPanelSlot={\n traceId && selectedSpanId ? (\n <SpanDataPanelView\n traceId={traceId}\n spanId={selectedSpanId}\n span={spanDetailData?.span}\n isLoading={isLoadingSpanDetail}\n onClose={() => onSpanSelect(undefined)}\n activeTab={spanActiveTab}\n onTabChange={onSpanTabChange}\n feedbackTabBadge={spanFeedbackTabBadge}\n feedbackTabSlot={spanFeedbackTabSlot}\n />\n ) : null\n }\n />\n {/* Rendered after the trace panel: DataPanel stacking follows DOM order. */}\n <TraceThreadPanel\n open={!!(traceId && isFullThreadOpen && threadId)}\n depth={depth && depth > 1 ? 3 : 2}\n threadId={threadId ?? ''}\n onOpenScore={onOpenScore}\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n onClose={() => onFullThreadOpenChange?.(false)}\n />\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;AAeA,SAAS,cACP,OACA,YACA,UACA;CACA,IAAI,CAAC,YAAY,CAAC,YAAY,OAAO,KAAA;CACrC,MAAM,uBAAuB,WAAW,YAAY;CACpD,IAAI,qBAAqB,SAAS,UAAU,GAAG,OAAO,MAAM,aAAa,QAAQ,KAAK,KAAA;CACtF,IAAI,qBAAqB,SAAS,OAAO,GAAG,OAAO,MAAM,UAAU,QAAQ,KAAK,KAAA;AAElF;;;;;;AAsEA,SAAgB,eAAe,EAC7B,SACA,OACA,gBACA,gBACA,cACA,SACA,cACA,YACA,eACA,YACA,QACA,qBACA,kBACA,iBACA,mBACA,iBACA,kBACA,kBACA,wBACA,gBACA,cACA,aACA,gBACA,eACA,OACA,sBACA,WACA,MACA,OACA,YACA,mBACA,OACA,4BACA,UACA,kBACA,eACA,iBACA,sBACA,uBACsB;CACtB,MAAM,EAAE,MAAM,gBAAgB,WAAW,wBAAwB,cAAc;EACpE;EACT,QAAQ,kBAAkB;EAC1B,cAAc,EAAE,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC,eAAe;CACzD,CAAC;CACD,MAAM,EAAE,MAAM,UAAU,iBAAiB;CAGzC,MAAM,WAAW,eACb,OAAO,MAAK,MAAK,EAAE,WAAW,YAAY,IAC1C,OAAO,MAAK,MAAK,EAAE,gBAAgB,IAAI;CAC3C,MAAM,aAAa,cAAc,OAAO,UAAU,YAAY,UAAU,QAAQ;CAChF,MAAM,WAAW,iBAAiB,UAAU,YAAY;CACxD,MAAM,mBAAmB,CAAC,EAAE,WAAW,qBAAqB;CAE5D,MAAM,iBAAiB,wBAAwB;EAC7C,UAAU,mBAAmB,WAAW,KAAA;EACxC,cAAc,EAAE,SAAS,CAAC,EAAE,mBAAmB,WAAW,KAAA,GAAW;CACvE,CAAC;CAGD,OACE,qBAAAA,UAAA,EAAA,UAAA,CACE,oBAAC,gBAAD;EACW;EACF;EACO;EACF;EACA;EACL;EACe;EACtB,WAAW;EACF;EACK;EACO;EACrB,eAAe,iBAAiB;EACpB;EACJ;EACR,WAAU;EACV,eAAe;EACJ;EACL;EACC;EACK;EACO;EACZ;EACqB;EAClB;EACQ;EACA;EACD;EACA;EACjB,mBACE,mBAAmB,oBAAC,oBAAD;GAA6B;GAA2B;EAAmB,CAAA,IAAI,KAAA;EAEpG,mBApCuB,oBAAoB,kBAAkB,CAAC,CAAC,0BAsCxD,EAAE,cACD,oBAAC,QAAD;GACE,SAAS,UAAU,qBAAqB,KAAA;GACxC,MAAM,oBAAC,oBAAD,CAAqB,CAAA;GAC3B,SAAQ;GACR,MAAK;GAEL,WAAU;GACV,eAAe,uBAAuB,IAAI;GAE1C,UAAA,oBAAC,QAAD;IAAM,WAAU;IAAuB,UAAA;GAAsB,CAAA;EACvD,CAAA,IAEV,KAAA;EAEU;EACD;EACf,eACE,WAAW,iBACT,oBAAC,mBAAD;GACW;GACT,QAAQ;GACR,MAAM,gBAAgB;GACtB,WAAW;GACX,eAAe,aAAa,KAAA,CAAS;GACrC,WAAW;GACX,aAAa;GACb,kBAAkB;GAClB,iBAAiB;EAClB,CAAA,IACC;CAEP,CAAA,GAED,oBAAC,kBAAD;EACE,MAAM,CAAC,EAAE,WAAW,oBAAoB;EACxC,OAAO,SAAS,QAAQ,IAAI,IAAI;EAChC,UAAU,YAAY;EACT;EACG;EACF;EACd,eAAe,yBAAyB,KAAK;CAC9C,CAAA,CACD,EAAA,CAAA;AAEN"}
|
|
1
|
+
{"version":3,"file":"trace-span-panel.es.js","names":["_Fragment"],"sources":["../../../../src/domains/traces/components/trace-span-panel.tsx"],"sourcesContent":["import { useSpanDetail, useThreadHasOtherTraces } from '@mastra/react/hooks/traces';\nimport { MessagesSquareIcon } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport type { FeedbackOptions } from './feedback-options';\nimport { SpanDataPanelView } from '@/domains/traces/components/span-data-panel-view';\nimport { TraceDataPanel } from '@/domains/traces/components/trace-data-panel';\nimport type { TraceDataPanelView } from '@/domains/traces/components/trace-data-panel-view';\nimport { TraceMessagesPanel } from '@/domains/traces/components/trace-messages-panel';\nimport { getTraceThreadId } from '@/domains/traces/components/trace-thread-context';\nimport { TraceThreadPanel } from '@/domains/traces/components/trace-thread-panel';\nimport { Button } from '@/ds/components/Button';\nimport { useLinkComponent } from '@/lib/framework';\nimport type { LinkComponentPaths } from '@/lib/framework';\n\ntype TraceDataPanelViewProps = ComponentProps<typeof TraceDataPanelView>;\n\nfunction getEntityHref(\n paths: LinkComponentPaths,\n entityType: string | null | undefined,\n entityId: string | null | undefined,\n) {\n if (!entityId || !entityType) return undefined;\n const normalizedEntityType = entityType.toLowerCase();\n if (normalizedEntityType.includes('workflow')) return paths.workflowLink(entityId) || undefined;\n if (normalizedEntityType.includes('agent')) return paths.agentLink(entityId) || undefined;\n return undefined;\n}\ntype SpanDataPanelViewProps = ComponentProps<typeof SpanDataPanelView>;\n\nexport interface TraceSpanPanelProps {\n /** Keep the panel mounted and pass `undefined` to close it, so the drawer animates out. */\n traceId?: string;\n /** Spans returned by `useTraceOrBranchSpans` — the page owns the fetch, the panel renders it. */\n spans: TraceDataPanelViewProps['spans'];\n isLoadingSpans: boolean;\n /** Controlled span selection (URL state on the traces page, local state in the chat aside). */\n selectedSpanId: string | null;\n onSpanSelect: (spanId: string | undefined) => void;\n onClose: () => void;\n\n // Trace-panel pass-through.\n anchorSpanId?: string;\n entityType?: TraceDataPanelViewProps['entityType'];\n initialSpanId?: string | null;\n onPrevious?: () => void;\n onNext?: () => void;\n onSaveAsDatasetItem?: TraceDataPanelViewProps['onSaveAsDatasetItem'];\n feedbackTabBadge?: ReactNode;\n feedbackTabSlot?: TraceDataPanelViewProps['feedbackTabSlot'];\n /** Enables the \"Messages\" column (reconstructed turn) when the displayed root is a complete agent trace with a thread id. */\n showPartialThread?: boolean;\n /** Span ids featured in the timeline (non-featured spans are faded). */\n featuredSpanIds?: string[];\n /** Called with the span ids behind a reconstructed message when the user asks to highlight them. */\n onHighlightSpans?: (spanIds: string[]) => void;\n /** When true, opens the trace's thread (every turn) in a stacked drawer above the trace panel. */\n isFullThreadOpen?: boolean;\n /** Enables the in-place \"Open full thread\" swap; without it the action falls back to a link. */\n onFullThreadOpenChange?: (open: boolean) => void;\n /** Full-thread view: lists through the trace-query API; `false` falls back to `listTracesLight`. */\n withQueryTrace: boolean;\n /** Full-thread view: shows the per-trace Feedback tab. */\n withFeedback: boolean;\n feedbackOptions?: FeedbackOptions;\n /** Full-thread view: opens a score of one of the thread's traces (the app owns routing). */\n onOpenScore: (traceId: string, scoreId: string) => void;\n scoresTabBadge?: ReactNode;\n scoresTabSlot?: TraceDataPanelViewProps['scoresTabSlot'];\n usage?: TraceDataPanelViewProps['usage'];\n rootStreamingTimings?: TraceDataPanelViewProps['rootStreamingTimings'];\n traceHref?: string;\n /** Drawer width; defaults to `wide`. */\n size?: TraceDataPanelViewProps['size'];\n /** Sibling-drawer elevation (see `DataPanel`). */\n depth?: TraceDataPanelViewProps['depth'];\n /** Rendered inside the drawer above the trace header (e.g. feedback context). */\n headerSlot?: ReactNode;\n /** Integration actions displayed alongside the trace controls. */\n headerActionsSlot?: ReactNode;\n /** Accessible drawer name; defaults to the trace id. */\n title?: string;\n showUnavailableFeaturesMsg?: TraceDataPanelViewProps['showUnavailableFeaturesMsg'];\n spanView?: TraceDataPanelViewProps['spanView'];\n onSpanViewChange?: TraceDataPanelViewProps['onSpanViewChange'];\n\n // Span-panel pass-through.\n spanActiveTab?: SpanDataPanelViewProps['activeTab'];\n onSpanTabChange?: SpanDataPanelViewProps['onTabChange'];\n spanFeedbackTabBadge?: ReactNode;\n spanFeedbackTabSlot?: SpanDataPanelViewProps['feedbackTabSlot'];\n}\n\n/**\n * Shared trace → span drilldown drawer: `TraceDataPanel` with a nested `SpanDataPanelView`.\n * Encapsulates the span-detail fetch and prev/next span navigation that the traces page\n * and the agent chat traces aside used to duplicate.\n */\nexport function TraceSpanPanel({\n traceId,\n spans,\n isLoadingSpans,\n selectedSpanId,\n onSpanSelect,\n onClose,\n anchorSpanId,\n entityType,\n initialSpanId,\n onPrevious,\n onNext,\n onSaveAsDatasetItem,\n feedbackTabBadge,\n feedbackTabSlot,\n showPartialThread,\n featuredSpanIds,\n onHighlightSpans,\n isFullThreadOpen,\n onFullThreadOpenChange,\n withQueryTrace,\n withFeedback,\n feedbackOptions,\n onOpenScore,\n scoresTabBadge,\n scoresTabSlot,\n usage,\n rootStreamingTimings,\n traceHref,\n size,\n depth,\n headerSlot,\n headerActionsSlot,\n title,\n showUnavailableFeaturesMsg,\n spanView,\n onSpanViewChange,\n spanActiveTab,\n onSpanTabChange,\n spanFeedbackTabBadge,\n spanFeedbackTabSlot,\n}: TraceSpanPanelProps) {\n const { data: spanDetailData, isLoading: isLoadingSpanDetail } = useSpanDetail({\n traceId: traceId,\n spanId: selectedSpanId ?? '',\n queryOptions: { enabled: !!traceId && !!selectedSpanId },\n });\n const { Link, paths } = useLinkComponent();\n\n // The trace summary links the entity to its page; the app's link provider owns the routes.\n const rootSpan = anchorSpanId\n ? spans?.find(s => s.spanId === anchorSpanId)\n : spans?.find(s => s.parentSpanId == null);\n const entityHref = getEntityHref(paths, rootSpan?.entityType, rootSpan?.entityId);\n const threadId = getTraceThreadId(rootSpan, anchorSpanId);\n const hasMessagesPanel = !!(traceId && showPartialThread && threadId);\n // A single-trace thread would show exactly what the Messages column already shows.\n const hasOtherTraces = useThreadHasOtherTraces({\n threadId: hasMessagesPanel ? threadId : undefined,\n queryOptions: { enabled: !!(hasMessagesPanel ? threadId : undefined) },\n });\n const showFullThreadAction = hasMessagesPanel && hasOtherTraces && !!onFullThreadOpenChange;\n\n return (\n <>\n <TraceDataPanel\n traceId={traceId}\n spans={spans}\n anchorSpanId={anchorSpanId}\n entityType={entityType}\n entityHref={entityHref}\n usage={usage}\n rootStreamingTimings={rootStreamingTimings}\n isLoading={isLoadingSpans}\n onClose={onClose}\n onSpanSelect={onSpanSelect}\n onSaveAsDatasetItem={onSaveAsDatasetItem}\n initialSpanId={initialSpanId ?? selectedSpanId}\n onPrevious={onPrevious}\n onNext={onNext}\n placement=\"traces-list\"\n LinkComponent={Link}\n traceHref={traceHref}\n size={size}\n depth={depth}\n headerSlot={headerSlot}\n headerActionsSlot={headerActionsSlot}\n title={title}\n showUnavailableFeaturesMsg={showUnavailableFeaturesMsg}\n spanView={spanView}\n onSpanViewChange={onSpanViewChange}\n feedbackTabBadge={feedbackTabBadge}\n feedbackTabSlot={feedbackTabSlot}\n featuredSpanIds={featuredSpanIds}\n messagesPanelSlot={\n hasMessagesPanel ? <TraceMessagesPanel traceId={traceId} onHighlightSpans={onHighlightSpans} /> : undefined\n }\n sideHeaderActions={\n showFullThreadAction\n ? ({ compact }) => (\n <Button\n tooltip={compact ? 'Open full thread' : undefined}\n icon={<MessagesSquareIcon />}\n variant=\"ghost\"\n size=\"sm\"\n // At a side column of 500px or less, collapse to a round icon button; the label stays for screen readers.\n className=\"@max-[501px]:w-control-sm @max-[501px]:rounded-full @max-[501px]:px-0 @max-[501px]:[&>[data-slot=button-icon]]:ml-0\"\n onClick={() => onFullThreadOpenChange(true)}\n >\n <span className=\"@max-[501px]:sr-only\">Open full thread</span>\n </Button>\n )\n : undefined\n }\n scoresTabBadge={scoresTabBadge}\n scoresTabSlot={scoresTabSlot}\n spanPanelSlot={\n traceId && selectedSpanId ? (\n <SpanDataPanelView\n traceId={traceId}\n spanId={selectedSpanId}\n span={spanDetailData?.span}\n isLoading={isLoadingSpanDetail}\n onClose={() => onSpanSelect(undefined)}\n activeTab={spanActiveTab}\n onTabChange={onSpanTabChange}\n feedbackTabBadge={spanFeedbackTabBadge}\n feedbackTabSlot={spanFeedbackTabSlot}\n />\n ) : null\n }\n />\n {/* Rendered after the trace panel: DataPanel stacking follows DOM order. */}\n <TraceThreadPanel\n open={!!(traceId && isFullThreadOpen && threadId)}\n depth={depth && depth > 1 ? 3 : 2}\n threadId={threadId ?? ''}\n onOpenScore={onOpenScore}\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n feedbackOptions={feedbackOptions}\n onClose={() => onFullThreadOpenChange?.(false)}\n />\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;AAgBA,SAAS,cACP,OACA,YACA,UACA;CACA,IAAI,CAAC,YAAY,CAAC,YAAY,OAAO,KAAA;CACrC,MAAM,uBAAuB,WAAW,YAAY;CACpD,IAAI,qBAAqB,SAAS,UAAU,GAAG,OAAO,MAAM,aAAa,QAAQ,KAAK,KAAA;CACtF,IAAI,qBAAqB,SAAS,OAAO,GAAG,OAAO,MAAM,UAAU,QAAQ,KAAK,KAAA;AAElF;;;;;;AAuEA,SAAgB,eAAe,EAC7B,SACA,OACA,gBACA,gBACA,cACA,SACA,cACA,YACA,eACA,YACA,QACA,qBACA,kBACA,iBACA,mBACA,iBACA,kBACA,kBACA,wBACA,gBACA,cACA,iBACA,aACA,gBACA,eACA,OACA,sBACA,WACA,MACA,OACA,YACA,mBACA,OACA,4BACA,UACA,kBACA,eACA,iBACA,sBACA,uBACsB;CACtB,MAAM,EAAE,MAAM,gBAAgB,WAAW,wBAAwB,cAAc;EACpE;EACT,QAAQ,kBAAkB;EAC1B,cAAc,EAAE,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC,eAAe;CACzD,CAAC;CACD,MAAM,EAAE,MAAM,UAAU,iBAAiB;CAGzC,MAAM,WAAW,eACb,OAAO,MAAK,MAAK,EAAE,WAAW,YAAY,IAC1C,OAAO,MAAK,MAAK,EAAE,gBAAgB,IAAI;CAC3C,MAAM,aAAa,cAAc,OAAO,UAAU,YAAY,UAAU,QAAQ;CAChF,MAAM,WAAW,iBAAiB,UAAU,YAAY;CACxD,MAAM,mBAAmB,CAAC,EAAE,WAAW,qBAAqB;CAE5D,MAAM,iBAAiB,wBAAwB;EAC7C,UAAU,mBAAmB,WAAW,KAAA;EACxC,cAAc,EAAE,SAAS,CAAC,EAAE,mBAAmB,WAAW,KAAA,GAAW;CACvE,CAAC;CAGD,OACE,qBAAAA,UAAA,EAAA,UAAA,CACE,oBAAC,gBAAD;EACW;EACF;EACO;EACF;EACA;EACL;EACe;EACtB,WAAW;EACF;EACK;EACO;EACrB,eAAe,iBAAiB;EACpB;EACJ;EACR,WAAU;EACV,eAAe;EACJ;EACL;EACC;EACK;EACO;EACZ;EACqB;EAClB;EACQ;EACA;EACD;EACA;EACjB,mBACE,mBAAmB,oBAAC,oBAAD;GAA6B;GAA2B;EAAmB,CAAA,IAAI,KAAA;EAEpG,mBApCuB,oBAAoB,kBAAkB,CAAC,CAAC,0BAsCxD,EAAE,cACD,oBAAC,QAAD;GACE,SAAS,UAAU,qBAAqB,KAAA;GACxC,MAAM,oBAAC,oBAAD,CAAqB,CAAA;GAC3B,SAAQ;GACR,MAAK;GAEL,WAAU;GACV,eAAe,uBAAuB,IAAI;GAE1C,UAAA,oBAAC,QAAD;IAAM,WAAU;IAAuB,UAAA;GAAsB,CAAA;EACvD,CAAA,IAEV,KAAA;EAEU;EACD;EACf,eACE,WAAW,iBACT,oBAAC,mBAAD;GACW;GACT,QAAQ;GACR,MAAM,gBAAgB;GACtB,WAAW;GACX,eAAe,aAAa,KAAA,CAAS;GACrC,WAAW;GACX,aAAa;GACb,kBAAkB;GAClB,iBAAiB;EAClB,CAAA,IACC;CAEP,CAAA,GAED,oBAAC,kBAAD;EACE,MAAM,CAAC,EAAE,WAAW,oBAAoB;EACxC,OAAO,SAAS,QAAQ,IAAI,IAAI;EAChC,UAAU,YAAY;EACT;EACG;EACF;EACG;EACjB,eAAe,yBAAyB,KAAK;CAC9C,CAAA,CACD,EAAA,CAAA;AAEN"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_domains_traces_utils_span_utils = require("../utils/span-utils.cjs.js");
|
|
3
3
|
const require_domains_traces_components_trace_status_value = require("./trace-status-value.cjs.js");
|
|
4
|
-
const require_DataPanel = require("../../../DataPanel-
|
|
4
|
+
const require_DataPanel = require("../../../DataPanel-LfExjFpP.cjs");
|
|
5
5
|
const require_icons_AgentIcon = require("../../../icons/AgentIcon.cjs.js");
|
|
6
6
|
const require_icons_WorkflowIcon = require("../../../icons/WorkflowIcon.cjs.js");
|
|
7
7
|
const require_cost = require("../../../cost-CDXUhpb_.cjs");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getSpanDurationMs } from "../utils/span-utils.es.js";
|
|
2
2
|
import { TraceStatusValue } from "./trace-status-value.es.js";
|
|
3
|
-
import { t as DataPanel } from "../../../DataPanel-
|
|
3
|
+
import { t as DataPanel } from "../../../DataPanel-Rv5Mb_pf.js";
|
|
4
4
|
import { AgentIcon } from "../../../icons/AgentIcon.es.js";
|
|
5
5
|
import { WorkflowIcon as WorkflowIcon$1 } from "../../../icons/WorkflowIcon.es.js";
|
|
6
6
|
import { n as formatCost, t as formatCompactNumber } from "../../../cost-C2vDb3o7.js";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_domains_traces_components_thread_view_by_trace = require("./thread-view-by-trace.cjs.js");
|
|
3
|
-
const require_DataPanel = require("../../../DataPanel-
|
|
3
|
+
const require_DataPanel = require("../../../DataPanel-LfExjFpP.cjs");
|
|
4
4
|
let react = require("react");
|
|
5
5
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
6
|
// src/domains/traces/components/trace-thread-panel.tsx
|
|
7
7
|
/** The full thread in its own drawer, stacked above the trace panel: every turn as traces, opened on the latest one. */
|
|
8
|
-
function TraceThreadPanel({ open, threadId, withQueryTrace, withFeedback, onOpenScore, onClose, depth = 2, title, closeLabel = "Back to trace" }) {
|
|
8
|
+
function TraceThreadPanel({ open, threadId, withQueryTrace, withFeedback, feedbackOptions, onOpenScore, onClose, depth = 2, title, closeLabel = "Back to trace" }) {
|
|
9
9
|
const [hasSelectedSpan, setHasSelectedSpan] = (0, react.useState)(false);
|
|
10
10
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_DataPanel.DataPanel, {
|
|
11
11
|
open,
|
|
@@ -23,6 +23,7 @@ function TraceThreadPanel({ open, threadId, withQueryTrace, withFeedback, onOpen
|
|
|
23
23
|
threadId,
|
|
24
24
|
withQueryTrace,
|
|
25
25
|
withFeedback,
|
|
26
|
+
feedbackOptions,
|
|
26
27
|
onOpenScore,
|
|
27
28
|
onSelectedSpanChange: (selected) => setHasSelectedSpan(selected !== null)
|
|
28
29
|
}) : null
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-thread-panel.cjs.js","names":["useState","DataPanel","ThreadViewByTrace"],"sources":["../../../../src/domains/traces/components/trace-thread-panel.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { ThreadViewByTrace } from '@/domains/traces/components/thread-view-by-trace';\nimport { DataPanel } from '@/ds/components/DataPanel';\n\nexport interface TraceThreadPanelProps {\n /** Keep the panel mounted and toggle `open` so the drawer animates in and out. */\n open: boolean;\n threadId: string;\n withQueryTrace: boolean;\n withFeedback: boolean;\n onOpenScore: (traceId: string, scoreId: string) => void;\n /** Close the thread drawer, revealing the trace panel underneath. */\n onClose: () => void;\n /** Sibling-drawer elevation (see `DataPanel`); defaults to 2, above the trace panel. */\n depth?: 1 | 2 | 3;\n /** Accessible drawer name; defaults to the thread id. */\n title?: string;\n /** Close button label; defaults to \"Back to trace\" for the stacked drawer. */\n closeLabel?: string;\n}\n\n/** The full thread in its own drawer, stacked above the trace panel: every turn as traces, opened on the latest one. */\nexport function TraceThreadPanel({\n open,\n threadId,\n withQueryTrace,\n withFeedback,\n onOpenScore,\n onClose,\n depth = 2,\n title,\n closeLabel = 'Back to trace',\n}: TraceThreadPanelProps) {\n // Like the trace panel: the drawer only takes the full frame while a span detail is open.\n const [hasSelectedSpan, setHasSelectedSpan] = useState(false);\n return (\n <DataPanel\n open={open}\n onClose={onClose}\n title={title ?? `Thread ${threadId}`}\n depth={depth}\n size={hasSelectedSpan ? 'full' : 'wide'}\n >\n <DataPanel.Header>\n <DataPanel.CloseButton onClick={onClose} label={closeLabel} tooltip={closeLabel} />\n <DataPanel.HeaderContent>\n <DataPanel.Heading>\n Thread\n <DataPanel.CopyId id={threadId} />\n </DataPanel.Heading>\n </DataPanel.HeaderContent>\n </DataPanel.Header>\n <div className=\"min-h-0 flex-1\">\n {threadId ? (\n <ThreadViewByTrace\n threadId={threadId}\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n onOpenScore={onOpenScore}\n onSelectedSpanChange={selected => setHasSelectedSpan(selected !== null)}\n />\n ) : null}\n </div>\n </DataPanel>\n );\n}\n"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"trace-thread-panel.cjs.js","names":["useState","DataPanel","ThreadViewByTrace"],"sources":["../../../../src/domains/traces/components/trace-thread-panel.tsx"],"sourcesContent":["import { useState } from 'react';\nimport type { FeedbackOptions } from './feedback-options';\n\nimport { ThreadViewByTrace } from '@/domains/traces/components/thread-view-by-trace';\nimport { DataPanel } from '@/ds/components/DataPanel';\n\nexport interface TraceThreadPanelProps {\n /** Keep the panel mounted and toggle `open` so the drawer animates in and out. */\n open: boolean;\n threadId: string;\n withQueryTrace: boolean;\n withFeedback: boolean;\n feedbackOptions?: FeedbackOptions;\n onOpenScore: (traceId: string, scoreId: string) => void;\n /** Close the thread drawer, revealing the trace panel underneath. */\n onClose: () => void;\n /** Sibling-drawer elevation (see `DataPanel`); defaults to 2, above the trace panel. */\n depth?: 1 | 2 | 3;\n /** Accessible drawer name; defaults to the thread id. */\n title?: string;\n /** Close button label; defaults to \"Back to trace\" for the stacked drawer. */\n closeLabel?: string;\n}\n\n/** The full thread in its own drawer, stacked above the trace panel: every turn as traces, opened on the latest one. */\nexport function TraceThreadPanel({\n open,\n threadId,\n withQueryTrace,\n withFeedback,\n feedbackOptions,\n onOpenScore,\n onClose,\n depth = 2,\n title,\n closeLabel = 'Back to trace',\n}: TraceThreadPanelProps) {\n // Like the trace panel: the drawer only takes the full frame while a span detail is open.\n const [hasSelectedSpan, setHasSelectedSpan] = useState(false);\n return (\n <DataPanel\n open={open}\n onClose={onClose}\n title={title ?? `Thread ${threadId}`}\n depth={depth}\n size={hasSelectedSpan ? 'full' : 'wide'}\n >\n <DataPanel.Header>\n <DataPanel.CloseButton onClick={onClose} label={closeLabel} tooltip={closeLabel} />\n <DataPanel.HeaderContent>\n <DataPanel.Heading>\n Thread\n <DataPanel.CopyId id={threadId} />\n </DataPanel.Heading>\n </DataPanel.HeaderContent>\n </DataPanel.Header>\n <div className=\"min-h-0 flex-1\">\n {threadId ? (\n <ThreadViewByTrace\n threadId={threadId}\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n feedbackOptions={feedbackOptions}\n onOpenScore={onOpenScore}\n onSelectedSpanChange={selected => setHasSelectedSpan(selected !== null)}\n />\n ) : null}\n </div>\n </DataPanel>\n );\n}\n"],"mappings":";;;;;;;AAyBA,SAAgB,iBAAiB,EAC/B,MACA,UACA,gBACA,cACA,iBACA,aACA,SACA,QAAQ,GACR,OACA,aAAa,mBACW;CAExB,MAAM,CAAC,iBAAiB,uBAAA,GAAsBA,MAAAA,SAAAA,CAAS,KAAK;CAC5D,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,kBAAAA,WAAD;EACQ;EACG;EACT,OAAO,SAAS,UAAU;EACnB;EACP,MAAM,kBAAkB,SAAS;EALnC,UAAA,CAOE,iBAAA,GAAA,kBAAA,KAAA,CAACA,kBAAAA,UAAU,QAAX,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,kBAAAA,UAAU,aAAX;GAAuB,SAAS;GAAS,OAAO;GAAY,SAAS;EAAa,CAAA,GAClF,iBAAA,GAAA,kBAAA,IAAA,CAACA,kBAAAA,UAAU,eAAX,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAA,CAACA,kBAAAA,UAAU,SAAX,EAAA,UAAA,CAAmB,UAEjB,iBAAA,GAAA,kBAAA,IAAA,CAACA,kBAAAA,UAAU,QAAX,EAAkB,IAAI,SAAW,CAAA,CAChB,EAAA,CAAA,EACI,CAAA,CACT,EAAA,CAAA,GAClB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GACZ,UAAA,WACC,iBAAA,GAAA,kBAAA,IAAA,CAACC,uDAAAA,mBAAD;IACY;IACM;IACF;IACG;IACJ;IACb,uBAAsB,aAAY,mBAAmB,aAAa,IAAI;GACvE,CAAA,IACC;EACD,CAAA,CACI;;AAEf"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { ThreadViewByTrace } from "./thread-view-by-trace.es.js";
|
|
2
|
-
import { t as DataPanel } from "../../../DataPanel-
|
|
2
|
+
import { t as DataPanel } from "../../../DataPanel-Rv5Mb_pf.js";
|
|
3
3
|
import { useState } from "react";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
// src/domains/traces/components/trace-thread-panel.tsx
|
|
6
6
|
/** The full thread in its own drawer, stacked above the trace panel: every turn as traces, opened on the latest one. */
|
|
7
|
-
function TraceThreadPanel({ open, threadId, withQueryTrace, withFeedback, onOpenScore, onClose, depth = 2, title, closeLabel = "Back to trace" }) {
|
|
7
|
+
function TraceThreadPanel({ open, threadId, withQueryTrace, withFeedback, feedbackOptions, onOpenScore, onClose, depth = 2, title, closeLabel = "Back to trace" }) {
|
|
8
8
|
const [hasSelectedSpan, setHasSelectedSpan] = useState(false);
|
|
9
9
|
return /* @__PURE__ */ jsxs(DataPanel, {
|
|
10
10
|
open,
|
|
@@ -22,6 +22,7 @@ function TraceThreadPanel({ open, threadId, withQueryTrace, withFeedback, onOpen
|
|
|
22
22
|
threadId,
|
|
23
23
|
withQueryTrace,
|
|
24
24
|
withFeedback,
|
|
25
|
+
feedbackOptions,
|
|
25
26
|
onOpenScore,
|
|
26
27
|
onSelectedSpanChange: (selected) => setHasSelectedSpan(selected !== null)
|
|
27
28
|
}) : null
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-thread-panel.es.js","names":[],"sources":["../../../../src/domains/traces/components/trace-thread-panel.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { ThreadViewByTrace } from '@/domains/traces/components/thread-view-by-trace';\nimport { DataPanel } from '@/ds/components/DataPanel';\n\nexport interface TraceThreadPanelProps {\n /** Keep the panel mounted and toggle `open` so the drawer animates in and out. */\n open: boolean;\n threadId: string;\n withQueryTrace: boolean;\n withFeedback: boolean;\n onOpenScore: (traceId: string, scoreId: string) => void;\n /** Close the thread drawer, revealing the trace panel underneath. */\n onClose: () => void;\n /** Sibling-drawer elevation (see `DataPanel`); defaults to 2, above the trace panel. */\n depth?: 1 | 2 | 3;\n /** Accessible drawer name; defaults to the thread id. */\n title?: string;\n /** Close button label; defaults to \"Back to trace\" for the stacked drawer. */\n closeLabel?: string;\n}\n\n/** The full thread in its own drawer, stacked above the trace panel: every turn as traces, opened on the latest one. */\nexport function TraceThreadPanel({\n open,\n threadId,\n withQueryTrace,\n withFeedback,\n onOpenScore,\n onClose,\n depth = 2,\n title,\n closeLabel = 'Back to trace',\n}: TraceThreadPanelProps) {\n // Like the trace panel: the drawer only takes the full frame while a span detail is open.\n const [hasSelectedSpan, setHasSelectedSpan] = useState(false);\n return (\n <DataPanel\n open={open}\n onClose={onClose}\n title={title ?? `Thread ${threadId}`}\n depth={depth}\n size={hasSelectedSpan ? 'full' : 'wide'}\n >\n <DataPanel.Header>\n <DataPanel.CloseButton onClick={onClose} label={closeLabel} tooltip={closeLabel} />\n <DataPanel.HeaderContent>\n <DataPanel.Heading>\n Thread\n <DataPanel.CopyId id={threadId} />\n </DataPanel.Heading>\n </DataPanel.HeaderContent>\n </DataPanel.Header>\n <div className=\"min-h-0 flex-1\">\n {threadId ? (\n <ThreadViewByTrace\n threadId={threadId}\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n onOpenScore={onOpenScore}\n onSelectedSpanChange={selected => setHasSelectedSpan(selected !== null)}\n />\n ) : null}\n </div>\n </DataPanel>\n );\n}\n"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"trace-thread-panel.es.js","names":[],"sources":["../../../../src/domains/traces/components/trace-thread-panel.tsx"],"sourcesContent":["import { useState } from 'react';\nimport type { FeedbackOptions } from './feedback-options';\n\nimport { ThreadViewByTrace } from '@/domains/traces/components/thread-view-by-trace';\nimport { DataPanel } from '@/ds/components/DataPanel';\n\nexport interface TraceThreadPanelProps {\n /** Keep the panel mounted and toggle `open` so the drawer animates in and out. */\n open: boolean;\n threadId: string;\n withQueryTrace: boolean;\n withFeedback: boolean;\n feedbackOptions?: FeedbackOptions;\n onOpenScore: (traceId: string, scoreId: string) => void;\n /** Close the thread drawer, revealing the trace panel underneath. */\n onClose: () => void;\n /** Sibling-drawer elevation (see `DataPanel`); defaults to 2, above the trace panel. */\n depth?: 1 | 2 | 3;\n /** Accessible drawer name; defaults to the thread id. */\n title?: string;\n /** Close button label; defaults to \"Back to trace\" for the stacked drawer. */\n closeLabel?: string;\n}\n\n/** The full thread in its own drawer, stacked above the trace panel: every turn as traces, opened on the latest one. */\nexport function TraceThreadPanel({\n open,\n threadId,\n withQueryTrace,\n withFeedback,\n feedbackOptions,\n onOpenScore,\n onClose,\n depth = 2,\n title,\n closeLabel = 'Back to trace',\n}: TraceThreadPanelProps) {\n // Like the trace panel: the drawer only takes the full frame while a span detail is open.\n const [hasSelectedSpan, setHasSelectedSpan] = useState(false);\n return (\n <DataPanel\n open={open}\n onClose={onClose}\n title={title ?? `Thread ${threadId}`}\n depth={depth}\n size={hasSelectedSpan ? 'full' : 'wide'}\n >\n <DataPanel.Header>\n <DataPanel.CloseButton onClick={onClose} label={closeLabel} tooltip={closeLabel} />\n <DataPanel.HeaderContent>\n <DataPanel.Heading>\n Thread\n <DataPanel.CopyId id={threadId} />\n </DataPanel.Heading>\n </DataPanel.HeaderContent>\n </DataPanel.Header>\n <div className=\"min-h-0 flex-1\">\n {threadId ? (\n <ThreadViewByTrace\n threadId={threadId}\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n feedbackOptions={feedbackOptions}\n onOpenScore={onOpenScore}\n onSelectedSpanChange={selected => setHasSelectedSpan(selected !== null)}\n />\n ) : null}\n </div>\n </DataPanel>\n );\n}\n"],"mappings":";;;;;;AAyBA,SAAgB,iBAAiB,EAC/B,MACA,UACA,gBACA,cACA,iBACA,aACA,SACA,QAAQ,GACR,OACA,aAAa,mBACW;CAExB,MAAM,CAAC,iBAAiB,sBAAsB,SAAS,KAAK;CAC5D,OACE,qBAAC,WAAD;EACQ;EACG;EACT,OAAO,SAAS,UAAU;EACnB;EACP,MAAM,kBAAkB,SAAS;EALnC,UAAA,CAOE,qBAAC,UAAU,QAAX,EAAA,UAAA,CACE,oBAAC,UAAU,aAAX;GAAuB,SAAS;GAAS,OAAO;GAAY,SAAS;EAAa,CAAA,GAClF,oBAAC,UAAU,eAAX,EAAA,UACE,qBAAC,UAAU,SAAX,EAAA,UAAA,CAAmB,UAEjB,oBAAC,UAAU,QAAX,EAAkB,IAAI,SAAW,CAAA,CAChB,EAAA,CAAA,EACI,CAAA,CACT,EAAA,CAAA,GAClB,oBAAC,OAAD;GAAK,WAAU;GACZ,UAAA,WACC,oBAAC,mBAAD;IACY;IACM;IACF;IACG;IACJ;IACb,uBAAsB,aAAY,mBAAmB,aAAa,IAAI;GACvE,CAAA,IACC;EACD,CAAA,CACI;;AAEf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traces-explorer-context.cjs.js","names":["createContext","useContext","isTraceUsageColumn","hasTraceUsageColumn"],"sources":["../../../../../src/domains/traces/components/traces-explorer/traces-explorer-context.ts"],"sourcesContent":["import type { EntityType } from '@mastra/core/observability';\nimport type { TraceQueryDiscoveryTimeRange } from '@mastra/react/hooks/traces';\nimport { createContext, useContext } from 'react';\nimport type { useTraceColumnPreferences } from '../../hooks/use-trace-column-preferences';\nimport type { useTracesListSource } from '../../hooks/use-traces-list-source';\nimport { hasTraceUsageColumn, isTraceUsageColumn } from '../../trace-list-columns';\nimport type { TraceColumnPreferences } from '../../trace-list-columns';\nimport type { SpanTab, TraceDatePreset } from '../../types';\nimport type { TraceSpanView } from '../trace-data-panel-view';\nimport type { TracesFilters, TracesSelection, TracesSort } from './traces-explorer-actions';\n\nexport type TracesExplorerScope = { entityId: string; entityType?: EntityType };\n\nexport type TracesMetricsSupport = { supported: boolean; isLoading: boolean };\n\n/**\n * Host switches (e.g. feature flags), combined with what the server supports.\n * `traceQuery` and `feedback` default to on and can only turn their feature off.\n * `spanQuery` and `threadQuery` default to off: each view is offered only when its flag is `true`\n * and the server supports it.\n */\nexport type TracesExplorerFeatures = {\n traceQuery?: boolean;\n feedback?: boolean;\n spanQuery?: boolean;\n threadQuery?: boolean;\n};\n\nexport type TracesConfigContextValue = {\n listId: string;\n scopedFieldIds: ReadonlySet<string>;\n hiddenFieldIds: readonly string[];\n withQueryTrace: boolean;\n withFeedback: boolean;\n /** The span query API is on, so the host can offer a spans view next to the traces list. */\n withSpanQuery: boolean;\n /** The thread rows API is on, so the host can offer a threads view next to the traces list. */\n withThreadQuery: boolean;\n withRootDuration: boolean;\n /** The server filters trace queries on the root span's `outcome` and `stopReason`. */\n withOutcomeFields: boolean;\n /** Trace rows carry the root span's time to first chunk, so the TTFC column can be shown. */\n withTimeToFirstChunk: boolean;\n /** Trace queries can be ordered by the root span's time to first chunk. */\n withTimeToFirstChunkSort: boolean;\n /** Trace rows carry the root span's time to first token, so the TTFT column can be shown. */\n withTimeToFirstToken: boolean;\n /** Trace queries can be ordered by the root span's time to first token. */\n withTimeToFirstTokenSort: boolean;\n /** The server supports delta polling, so auto-refresh merges new traces instead of reloading pages. */\n withDeltaPolling: boolean;\n /** Whether field discovery should run: the server supports it and the trace query API is on. */\n withDiscovery: boolean;\n isCapabilitiesLoading: boolean;\n metricsSupport: TracesMetricsSupport;\n /** Shared by every discovery consumer so they hit the same cached query. */\n discoveryTimeRange: TraceQueryDiscoveryTimeRange;\n};\n\nexport type TracesFiltersActions = {\n /** Replaces the filter tokens and groups. The scope tokens are always kept. */\n setFilterTokens: (tokens: TracesFilters['tokens'], groups: TracesFilters['groups']) => void;\n setDatePreset: (preset: TraceDatePreset) => void;\n setDate: (value: Date | undefined, end: 'from' | 'to') => void;\n setDateRange: (from: Date | undefined, to: Date | undefined) => void;\n /** Narrows the range to a histogram selection, remembering the range to return to on reset. */\n zoomDateRange: (from: Date, to: Date) => void;\n /** Undoes the last histogram zoom, or switches to `defaultPreset` when there is none to undo. */\n resetDateRange: (defaultPreset: TraceDatePreset) => void;\n};\n\nexport type TracesFiltersContextValue = TracesFiltersActions & {\n /** The host's filters with the entries this server can't query dropped. */\n filters: TracesFilters;\n dateFrom?: Date;\n dateTo?: Date;\n filtersApplied: boolean;\n contentFiltersApplied: boolean;\n /** The host's filters ask for `running` traces, which `filters` (and so the query) can't express. */\n runningSelected: boolean;\n};\n\nexport type TracesSelectionActions = {\n selectTrace: (traceId: string) => void;\n closeTrace: () => void;\n selectSpan: (spanId: string | null) => void;\n setSpanTab: (tab: SpanTab) => void;\n setSpanView: (view: TraceSpanView) => void;\n selectScore: (scoreId: string | null) => void;\n highlightSpans: (spanIds: string[]) => void;\n};\n\nexport type TracesSelectionContextValue = TracesSelectionActions & {\n selection: TracesSelection;\n selectedTraceId?: string;\n};\n\ntype ListSource = ReturnType<typeof useTracesListSource>;\n\nexport type TracesListContextValue = Pick<\n ListSource,\n | 'rows'\n | 'isLoading'\n | 'isFetchingNextPage'\n | 'hasNextPage'\n | 'setEndOfListElement'\n | 'error'\n | 'refetch'\n | 'autoRefetch'\n> & {\n sort: TracesSort;\n onSortChange: (next: TracesSort) => void;\n};\n\nexport type TracesColumnsContextValue = ReturnType<typeof useTraceColumnPreferences>;\n\nexport const TracesConfigContext = createContext<TracesConfigContextValue | null>(null);\nexport const TracesFiltersContext = createContext<TracesFiltersContextValue | null>(null);\nexport const TracesSelectionContext = createContext<TracesSelectionContextValue | null>(null);\nexport const TracesListContext = createContext<TracesListContextValue | null>(null);\n/** Kept out of `TracesListContext` so a poll tick doesn't re-render every list consumer. */\nexport const TracesListFetchingContext = createContext<boolean | null>(null);\nexport const TracesColumnsContext = createContext<TracesColumnsContextValue | null>(null);\n\nconst useRequired = <T>(context: React.Context<T | null>, name: string): T => {\n const value = useContext(context);\n if (!value) throw new Error(`${name} must be used inside <TracesExplorer>`);\n return value;\n};\n\nexport const useTracesConfig = () => useRequired(TracesConfigContext, 'useTracesConfig');\nexport const useTracesFilters = () => useRequired(TracesFiltersContext, 'useTracesFilters');\nexport const useTracesSelection = () => useRequired(TracesSelectionContext, 'useTracesSelection');\nexport const useTracesList = () => useRequired(TracesListContext, 'useTracesList');\n/** Whether the list query is fetching, including background refetches and retries. */\nexport const useTracesListFetching = () => {\n const value = useContext(TracesListFetchingContext);\n if (value === null) throw new Error('useTracesListFetching must be used inside <TracesExplorer>');\n return value;\n};\nexport const useTracesColumns = () => useRequired(TracesColumnsContext, 'useTracesColumns');\n\nexport const CHECKING_USAGE_REASON = 'Checking whether this storage supports usage data.';\nexport const UNSUPPORTED_USAGE_REASON = 'This observability store does not support token and cost metrics.';\n\nexport type TraceUsageColumns = {\n /** Column preferences without the columns the store can't serve (usage, time to first chunk/token). */\n displayedPreferences: TraceColumnPreferences;\n /** Whether usage should be fetched: metrics are supported and a usage column is visible. */\n usageEnabled: boolean;\n usageDisabledReason?: string;\n};\n\nexport const useTraceUsageColumns = (): TraceUsageColumns => {\n const { preferences } = useTracesColumns();\n const { metricsSupport, withTimeToFirstChunk, withTimeToFirstToken, isCapabilitiesLoading } = useTracesConfig();\n const unavailable = !metricsSupport.isLoading && !metricsSupport.supported;\n const timeToFirstChunkUnavailable = !isCapabilitiesLoading && !withTimeToFirstChunk;\n const timeToFirstTokenUnavailable = !isCapabilitiesLoading && !withTimeToFirstToken;\n const displayedPreferences =\n unavailable || timeToFirstChunkUnavailable || timeToFirstTokenUnavailable\n ? {\n ...preferences,\n visibleColumns: preferences.visibleColumns.filter(\n column =>\n !(unavailable && isTraceUsageColumn(column)) &&\n !(timeToFirstChunkUnavailable && column === 'timeToFirstChunk') &&\n !(timeToFirstTokenUnavailable && column === 'timeToFirstToken'),\n ),\n }\n : preferences;\n return {\n displayedPreferences,\n usageEnabled: !unavailable && !metricsSupport.isLoading && hasTraceUsageColumn(displayedPreferences),\n usageDisabledReason: metricsSupport.isLoading\n ? CHECKING_USAGE_REASON\n : !metricsSupport.supported\n ? UNSUPPORTED_USAGE_REASON\n : undefined,\n };\n};\n"],"mappings":";;;;AAoHA,IAAa,uBAAA,GAAsBA,MAAAA,cAAAA,CAA+C,IAAI;AACtF,IAAa,wBAAA,GAAuBA,MAAAA,cAAAA,CAAgD,IAAI;AACxF,IAAa,0BAAA,GAAyBA,MAAAA,cAAAA,CAAkD,IAAI;AAC5F,IAAa,qBAAA,GAAoBA,MAAAA,cAAAA,CAA6C,IAAI;;AAElF,IAAa,6BAAA,GAA4BA,MAAAA,cAAAA,CAA8B,IAAI;AAC3E,IAAa,wBAAA,GAAuBA,MAAAA,cAAAA,CAAgD,IAAI;AAExF,IAAM,eAAkB,SAAkC,SAAoB;CAC5E,MAAM,SAAA,GAAQC,MAAAA,WAAAA,CAAW,OAAO;CAChC,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,GAAG,KAAK,sCAAsC;CAC1E,OAAO;AACT;AAEA,IAAa,wBAAwB,YAAY,qBAAqB,iBAAiB;AACvF,IAAa,yBAAyB,YAAY,sBAAsB,kBAAkB;AAC1F,IAAa,2BAA2B,YAAY,wBAAwB,oBAAoB;AAChG,IAAa,sBAAsB,YAAY,mBAAmB,eAAe;;AAEjF,IAAa,8BAA8B;CACzC,MAAM,SAAA,GAAQA,MAAAA,WAAAA,CAAW,yBAAyB;CAClD,IAAI,UAAU,MAAM,MAAM,IAAI,MAAM,4DAA4D;CAChG,OAAO;AACT;AACA,IAAa,yBAAyB,YAAY,sBAAsB,kBAAkB;AAE1F,IAAa,wBAAwB;AACrC,IAAa,2BAA2B;AAUxC,IAAa,6BAAgD;CAC3D,MAAM,EAAE,gBAAgB,iBAAiB;CACzC,MAAM,EAAE,gBAAgB,sBAAsB,sBAAsB,0BAA0B,gBAAgB;CAC9G,MAAM,cAAc,CAAC,eAAe,aAAa,CAAC,eAAe;CACjE,MAAM,8BAA8B,CAAC,yBAAyB,CAAC;CAC/D,MAAM,8BAA8B,CAAC,yBAAyB,CAAC;CAC/D,MAAM,uBACJ,eAAe,+BAA+B,8BAC1C;EACE,GAAG;EACH,gBAAgB,YAAY,eAAe,QACzC,WACE,EAAE,eAAeC,0CAAAA,mBAAmB,MAAM,MAC1C,EAAE,+BAA+B,WAAW,uBAC5C,EAAE,+BAA+B,WAAW,mBAChD;CACF,IACA;CACN,OAAO;EACL;EACA,cAAc,CAAC,eAAe,CAAC,eAAe,aAAaC,0CAAAA,oBAAoB,oBAAoB;EACnG,qBAAqB,eAAe,YAChC,wBACA,CAAC,eAAe,YACd,2BACA,KAAA;CACR;AACF"}
|
|
1
|
+
{"version":3,"file":"traces-explorer-context.cjs.js","names":["createContext","useContext","isTraceUsageColumn","hasTraceUsageColumn"],"sources":["../../../../../src/domains/traces/components/traces-explorer/traces-explorer-context.ts"],"sourcesContent":["import type { EntityType } from '@mastra/core/observability';\nimport type { TraceQueryDiscoveryTimeRange } from '@mastra/react/hooks/traces';\nimport { createContext, useContext } from 'react';\nimport type { useTraceColumnPreferences } from '../../hooks/use-trace-column-preferences';\nimport type { useTracesListSource } from '../../hooks/use-traces-list-source';\nimport { hasTraceUsageColumn, isTraceUsageColumn } from '../../trace-list-columns';\nimport type { TraceColumnPreferences } from '../../trace-list-columns';\nimport type { SpanTab, TraceDatePreset } from '../../types';\nimport type { FeedbackOptions } from '../feedback-options';\nimport type { TraceSpanView } from '../trace-data-panel-view';\nimport type { TracesFilters, TracesSelection, TracesSort } from './traces-explorer-actions';\n\nexport type TracesExplorerScope = { entityId: string; entityType?: EntityType };\n\nexport type TracesMetricsSupport = { supported: boolean; isLoading: boolean };\n\n/**\n * Host switches (e.g. feature flags), combined with what the server supports.\n * `traceQuery` and `feedback` default to on and can only turn their feature off.\n * `spanQuery` and `threadQuery` default to off: each view is offered only when its flag is `true`\n * and the server supports it.\n */\nexport type TracesExplorerFeatures = {\n traceQuery?: boolean;\n feedback?: boolean;\n spanQuery?: boolean;\n threadQuery?: boolean;\n};\n\nexport type TracesConfigContextValue = {\n listId: string;\n scopedFieldIds: ReadonlySet<string>;\n hiddenFieldIds: readonly string[];\n withQueryTrace: boolean;\n withFeedback: boolean;\n feedbackOptions?: FeedbackOptions;\n /** The span query API is on, so the host can offer a spans view next to the traces list. */\n withSpanQuery: boolean;\n /** The thread rows API is on, so the host can offer a threads view next to the traces list. */\n withThreadQuery: boolean;\n withRootDuration: boolean;\n /** The server filters trace queries on the root span's `outcome` and `stopReason`. */\n withOutcomeFields: boolean;\n /** Trace rows carry the root span's time to first chunk, so the TTFC column can be shown. */\n withTimeToFirstChunk: boolean;\n /** Trace queries can be ordered by the root span's time to first chunk. */\n withTimeToFirstChunkSort: boolean;\n /** Trace rows carry the root span's time to first token, so the TTFT column can be shown. */\n withTimeToFirstToken: boolean;\n /** Trace queries can be ordered by the root span's time to first token. */\n withTimeToFirstTokenSort: boolean;\n /** The server supports delta polling, so auto-refresh merges new traces instead of reloading pages. */\n withDeltaPolling: boolean;\n /** Whether field discovery should run: the server supports it and the trace query API is on. */\n withDiscovery: boolean;\n isCapabilitiesLoading: boolean;\n metricsSupport: TracesMetricsSupport;\n /** Shared by every discovery consumer so they hit the same cached query. */\n discoveryTimeRange: TraceQueryDiscoveryTimeRange;\n};\n\nexport type TracesFiltersActions = {\n /** Replaces the filter tokens and groups. The scope tokens are always kept. */\n setFilterTokens: (tokens: TracesFilters['tokens'], groups: TracesFilters['groups']) => void;\n setDatePreset: (preset: TraceDatePreset) => void;\n setDate: (value: Date | undefined, end: 'from' | 'to') => void;\n setDateRange: (from: Date | undefined, to: Date | undefined) => void;\n /** Narrows the range to a histogram selection, remembering the range to return to on reset. */\n zoomDateRange: (from: Date, to: Date) => void;\n /** Undoes the last histogram zoom, or switches to `defaultPreset` when there is none to undo. */\n resetDateRange: (defaultPreset: TraceDatePreset) => void;\n};\n\nexport type TracesFiltersContextValue = TracesFiltersActions & {\n /** The host's filters with the entries this server can't query dropped. */\n filters: TracesFilters;\n dateFrom?: Date;\n dateTo?: Date;\n filtersApplied: boolean;\n contentFiltersApplied: boolean;\n /** The host's filters ask for `running` traces, which `filters` (and so the query) can't express. */\n runningSelected: boolean;\n};\n\nexport type TracesSelectionActions = {\n selectTrace: (traceId: string) => void;\n closeTrace: () => void;\n selectSpan: (spanId: string | null) => void;\n setSpanTab: (tab: SpanTab) => void;\n setSpanView: (view: TraceSpanView) => void;\n selectScore: (scoreId: string | null) => void;\n highlightSpans: (spanIds: string[]) => void;\n};\n\nexport type TracesSelectionContextValue = TracesSelectionActions & {\n selection: TracesSelection;\n selectedTraceId?: string;\n};\n\ntype ListSource = ReturnType<typeof useTracesListSource>;\n\nexport type TracesListContextValue = Pick<\n ListSource,\n | 'rows'\n | 'isLoading'\n | 'isFetchingNextPage'\n | 'hasNextPage'\n | 'setEndOfListElement'\n | 'error'\n | 'refetch'\n | 'autoRefetch'\n> & {\n sort: TracesSort;\n onSortChange: (next: TracesSort) => void;\n};\n\nexport type TracesColumnsContextValue = ReturnType<typeof useTraceColumnPreferences>;\n\nexport const TracesConfigContext = createContext<TracesConfigContextValue | null>(null);\nexport const TracesFiltersContext = createContext<TracesFiltersContextValue | null>(null);\nexport const TracesSelectionContext = createContext<TracesSelectionContextValue | null>(null);\nexport const TracesListContext = createContext<TracesListContextValue | null>(null);\n/** Kept out of `TracesListContext` so a poll tick doesn't re-render every list consumer. */\nexport const TracesListFetchingContext = createContext<boolean | null>(null);\nexport const TracesColumnsContext = createContext<TracesColumnsContextValue | null>(null);\n\nconst useRequired = <T>(context: React.Context<T | null>, name: string): T => {\n const value = useContext(context);\n if (!value) throw new Error(`${name} must be used inside <TracesExplorer>`);\n return value;\n};\n\nexport const useTracesConfig = () => useRequired(TracesConfigContext, 'useTracesConfig');\nexport const useTracesFilters = () => useRequired(TracesFiltersContext, 'useTracesFilters');\nexport const useTracesSelection = () => useRequired(TracesSelectionContext, 'useTracesSelection');\nexport const useTracesList = () => useRequired(TracesListContext, 'useTracesList');\n/** Whether the list query is fetching, including background refetches and retries. */\nexport const useTracesListFetching = () => {\n const value = useContext(TracesListFetchingContext);\n if (value === null) throw new Error('useTracesListFetching must be used inside <TracesExplorer>');\n return value;\n};\nexport const useTracesColumns = () => useRequired(TracesColumnsContext, 'useTracesColumns');\n\nexport const CHECKING_USAGE_REASON = 'Checking whether this storage supports usage data.';\nexport const UNSUPPORTED_USAGE_REASON = 'This observability store does not support token and cost metrics.';\n\nexport type TraceUsageColumns = {\n /** Column preferences without the columns the store can't serve (usage, time to first chunk/token). */\n displayedPreferences: TraceColumnPreferences;\n /** Whether usage should be fetched: metrics are supported and a usage column is visible. */\n usageEnabled: boolean;\n usageDisabledReason?: string;\n};\n\nexport const useTraceUsageColumns = (): TraceUsageColumns => {\n const { preferences } = useTracesColumns();\n const { metricsSupport, withTimeToFirstChunk, withTimeToFirstToken, isCapabilitiesLoading } = useTracesConfig();\n const unavailable = !metricsSupport.isLoading && !metricsSupport.supported;\n const timeToFirstChunkUnavailable = !isCapabilitiesLoading && !withTimeToFirstChunk;\n const timeToFirstTokenUnavailable = !isCapabilitiesLoading && !withTimeToFirstToken;\n const displayedPreferences =\n unavailable || timeToFirstChunkUnavailable || timeToFirstTokenUnavailable\n ? {\n ...preferences,\n visibleColumns: preferences.visibleColumns.filter(\n column =>\n !(unavailable && isTraceUsageColumn(column)) &&\n !(timeToFirstChunkUnavailable && column === 'timeToFirstChunk') &&\n !(timeToFirstTokenUnavailable && column === 'timeToFirstToken'),\n ),\n }\n : preferences;\n return {\n displayedPreferences,\n usageEnabled: !unavailable && !metricsSupport.isLoading && hasTraceUsageColumn(displayedPreferences),\n usageDisabledReason: metricsSupport.isLoading\n ? CHECKING_USAGE_REASON\n : !metricsSupport.supported\n ? UNSUPPORTED_USAGE_REASON\n : undefined,\n };\n};\n"],"mappings":";;;;AAsHA,IAAa,uBAAA,GAAsBA,MAAAA,cAAAA,CAA+C,IAAI;AACtF,IAAa,wBAAA,GAAuBA,MAAAA,cAAAA,CAAgD,IAAI;AACxF,IAAa,0BAAA,GAAyBA,MAAAA,cAAAA,CAAkD,IAAI;AAC5F,IAAa,qBAAA,GAAoBA,MAAAA,cAAAA,CAA6C,IAAI;;AAElF,IAAa,6BAAA,GAA4BA,MAAAA,cAAAA,CAA8B,IAAI;AAC3E,IAAa,wBAAA,GAAuBA,MAAAA,cAAAA,CAAgD,IAAI;AAExF,IAAM,eAAkB,SAAkC,SAAoB;CAC5E,MAAM,SAAA,GAAQC,MAAAA,WAAAA,CAAW,OAAO;CAChC,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,GAAG,KAAK,sCAAsC;CAC1E,OAAO;AACT;AAEA,IAAa,wBAAwB,YAAY,qBAAqB,iBAAiB;AACvF,IAAa,yBAAyB,YAAY,sBAAsB,kBAAkB;AAC1F,IAAa,2BAA2B,YAAY,wBAAwB,oBAAoB;AAChG,IAAa,sBAAsB,YAAY,mBAAmB,eAAe;;AAEjF,IAAa,8BAA8B;CACzC,MAAM,SAAA,GAAQA,MAAAA,WAAAA,CAAW,yBAAyB;CAClD,IAAI,UAAU,MAAM,MAAM,IAAI,MAAM,4DAA4D;CAChG,OAAO;AACT;AACA,IAAa,yBAAyB,YAAY,sBAAsB,kBAAkB;AAE1F,IAAa,wBAAwB;AACrC,IAAa,2BAA2B;AAUxC,IAAa,6BAAgD;CAC3D,MAAM,EAAE,gBAAgB,iBAAiB;CACzC,MAAM,EAAE,gBAAgB,sBAAsB,sBAAsB,0BAA0B,gBAAgB;CAC9G,MAAM,cAAc,CAAC,eAAe,aAAa,CAAC,eAAe;CACjE,MAAM,8BAA8B,CAAC,yBAAyB,CAAC;CAC/D,MAAM,8BAA8B,CAAC,yBAAyB,CAAC;CAC/D,MAAM,uBACJ,eAAe,+BAA+B,8BAC1C;EACE,GAAG;EACH,gBAAgB,YAAY,eAAe,QACzC,WACE,EAAE,eAAeC,0CAAAA,mBAAmB,MAAM,MAC1C,EAAE,+BAA+B,WAAW,uBAC5C,EAAE,+BAA+B,WAAW,mBAChD;CACF,IACA;CACN,OAAO;EACL;EACA,cAAc,CAAC,eAAe,CAAC,eAAe,aAAaC,0CAAAA,oBAAoB,oBAAoB;EACnG,qBAAqB,eAAe,YAChC,wBACA,CAAC,eAAe,YACd,2BACA,KAAA;CACR;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traces-explorer-context.es.js","names":[],"sources":["../../../../../src/domains/traces/components/traces-explorer/traces-explorer-context.ts"],"sourcesContent":["import type { EntityType } from '@mastra/core/observability';\nimport type { TraceQueryDiscoveryTimeRange } from '@mastra/react/hooks/traces';\nimport { createContext, useContext } from 'react';\nimport type { useTraceColumnPreferences } from '../../hooks/use-trace-column-preferences';\nimport type { useTracesListSource } from '../../hooks/use-traces-list-source';\nimport { hasTraceUsageColumn, isTraceUsageColumn } from '../../trace-list-columns';\nimport type { TraceColumnPreferences } from '../../trace-list-columns';\nimport type { SpanTab, TraceDatePreset } from '../../types';\nimport type { TraceSpanView } from '../trace-data-panel-view';\nimport type { TracesFilters, TracesSelection, TracesSort } from './traces-explorer-actions';\n\nexport type TracesExplorerScope = { entityId: string; entityType?: EntityType };\n\nexport type TracesMetricsSupport = { supported: boolean; isLoading: boolean };\n\n/**\n * Host switches (e.g. feature flags), combined with what the server supports.\n * `traceQuery` and `feedback` default to on and can only turn their feature off.\n * `spanQuery` and `threadQuery` default to off: each view is offered only when its flag is `true`\n * and the server supports it.\n */\nexport type TracesExplorerFeatures = {\n traceQuery?: boolean;\n feedback?: boolean;\n spanQuery?: boolean;\n threadQuery?: boolean;\n};\n\nexport type TracesConfigContextValue = {\n listId: string;\n scopedFieldIds: ReadonlySet<string>;\n hiddenFieldIds: readonly string[];\n withQueryTrace: boolean;\n withFeedback: boolean;\n /** The span query API is on, so the host can offer a spans view next to the traces list. */\n withSpanQuery: boolean;\n /** The thread rows API is on, so the host can offer a threads view next to the traces list. */\n withThreadQuery: boolean;\n withRootDuration: boolean;\n /** The server filters trace queries on the root span's `outcome` and `stopReason`. */\n withOutcomeFields: boolean;\n /** Trace rows carry the root span's time to first chunk, so the TTFC column can be shown. */\n withTimeToFirstChunk: boolean;\n /** Trace queries can be ordered by the root span's time to first chunk. */\n withTimeToFirstChunkSort: boolean;\n /** Trace rows carry the root span's time to first token, so the TTFT column can be shown. */\n withTimeToFirstToken: boolean;\n /** Trace queries can be ordered by the root span's time to first token. */\n withTimeToFirstTokenSort: boolean;\n /** The server supports delta polling, so auto-refresh merges new traces instead of reloading pages. */\n withDeltaPolling: boolean;\n /** Whether field discovery should run: the server supports it and the trace query API is on. */\n withDiscovery: boolean;\n isCapabilitiesLoading: boolean;\n metricsSupport: TracesMetricsSupport;\n /** Shared by every discovery consumer so they hit the same cached query. */\n discoveryTimeRange: TraceQueryDiscoveryTimeRange;\n};\n\nexport type TracesFiltersActions = {\n /** Replaces the filter tokens and groups. The scope tokens are always kept. */\n setFilterTokens: (tokens: TracesFilters['tokens'], groups: TracesFilters['groups']) => void;\n setDatePreset: (preset: TraceDatePreset) => void;\n setDate: (value: Date | undefined, end: 'from' | 'to') => void;\n setDateRange: (from: Date | undefined, to: Date | undefined) => void;\n /** Narrows the range to a histogram selection, remembering the range to return to on reset. */\n zoomDateRange: (from: Date, to: Date) => void;\n /** Undoes the last histogram zoom, or switches to `defaultPreset` when there is none to undo. */\n resetDateRange: (defaultPreset: TraceDatePreset) => void;\n};\n\nexport type TracesFiltersContextValue = TracesFiltersActions & {\n /** The host's filters with the entries this server can't query dropped. */\n filters: TracesFilters;\n dateFrom?: Date;\n dateTo?: Date;\n filtersApplied: boolean;\n contentFiltersApplied: boolean;\n /** The host's filters ask for `running` traces, which `filters` (and so the query) can't express. */\n runningSelected: boolean;\n};\n\nexport type TracesSelectionActions = {\n selectTrace: (traceId: string) => void;\n closeTrace: () => void;\n selectSpan: (spanId: string | null) => void;\n setSpanTab: (tab: SpanTab) => void;\n setSpanView: (view: TraceSpanView) => void;\n selectScore: (scoreId: string | null) => void;\n highlightSpans: (spanIds: string[]) => void;\n};\n\nexport type TracesSelectionContextValue = TracesSelectionActions & {\n selection: TracesSelection;\n selectedTraceId?: string;\n};\n\ntype ListSource = ReturnType<typeof useTracesListSource>;\n\nexport type TracesListContextValue = Pick<\n ListSource,\n | 'rows'\n | 'isLoading'\n | 'isFetchingNextPage'\n | 'hasNextPage'\n | 'setEndOfListElement'\n | 'error'\n | 'refetch'\n | 'autoRefetch'\n> & {\n sort: TracesSort;\n onSortChange: (next: TracesSort) => void;\n};\n\nexport type TracesColumnsContextValue = ReturnType<typeof useTraceColumnPreferences>;\n\nexport const TracesConfigContext = createContext<TracesConfigContextValue | null>(null);\nexport const TracesFiltersContext = createContext<TracesFiltersContextValue | null>(null);\nexport const TracesSelectionContext = createContext<TracesSelectionContextValue | null>(null);\nexport const TracesListContext = createContext<TracesListContextValue | null>(null);\n/** Kept out of `TracesListContext` so a poll tick doesn't re-render every list consumer. */\nexport const TracesListFetchingContext = createContext<boolean | null>(null);\nexport const TracesColumnsContext = createContext<TracesColumnsContextValue | null>(null);\n\nconst useRequired = <T>(context: React.Context<T | null>, name: string): T => {\n const value = useContext(context);\n if (!value) throw new Error(`${name} must be used inside <TracesExplorer>`);\n return value;\n};\n\nexport const useTracesConfig = () => useRequired(TracesConfigContext, 'useTracesConfig');\nexport const useTracesFilters = () => useRequired(TracesFiltersContext, 'useTracesFilters');\nexport const useTracesSelection = () => useRequired(TracesSelectionContext, 'useTracesSelection');\nexport const useTracesList = () => useRequired(TracesListContext, 'useTracesList');\n/** Whether the list query is fetching, including background refetches and retries. */\nexport const useTracesListFetching = () => {\n const value = useContext(TracesListFetchingContext);\n if (value === null) throw new Error('useTracesListFetching must be used inside <TracesExplorer>');\n return value;\n};\nexport const useTracesColumns = () => useRequired(TracesColumnsContext, 'useTracesColumns');\n\nexport const CHECKING_USAGE_REASON = 'Checking whether this storage supports usage data.';\nexport const UNSUPPORTED_USAGE_REASON = 'This observability store does not support token and cost metrics.';\n\nexport type TraceUsageColumns = {\n /** Column preferences without the columns the store can't serve (usage, time to first chunk/token). */\n displayedPreferences: TraceColumnPreferences;\n /** Whether usage should be fetched: metrics are supported and a usage column is visible. */\n usageEnabled: boolean;\n usageDisabledReason?: string;\n};\n\nexport const useTraceUsageColumns = (): TraceUsageColumns => {\n const { preferences } = useTracesColumns();\n const { metricsSupport, withTimeToFirstChunk, withTimeToFirstToken, isCapabilitiesLoading } = useTracesConfig();\n const unavailable = !metricsSupport.isLoading && !metricsSupport.supported;\n const timeToFirstChunkUnavailable = !isCapabilitiesLoading && !withTimeToFirstChunk;\n const timeToFirstTokenUnavailable = !isCapabilitiesLoading && !withTimeToFirstToken;\n const displayedPreferences =\n unavailable || timeToFirstChunkUnavailable || timeToFirstTokenUnavailable\n ? {\n ...preferences,\n visibleColumns: preferences.visibleColumns.filter(\n column =>\n !(unavailable && isTraceUsageColumn(column)) &&\n !(timeToFirstChunkUnavailable && column === 'timeToFirstChunk') &&\n !(timeToFirstTokenUnavailable && column === 'timeToFirstToken'),\n ),\n }\n : preferences;\n return {\n displayedPreferences,\n usageEnabled: !unavailable && !metricsSupport.isLoading && hasTraceUsageColumn(displayedPreferences),\n usageDisabledReason: metricsSupport.isLoading\n ? CHECKING_USAGE_REASON\n : !metricsSupport.supported\n ? UNSUPPORTED_USAGE_REASON\n : undefined,\n };\n};\n"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"traces-explorer-context.es.js","names":[],"sources":["../../../../../src/domains/traces/components/traces-explorer/traces-explorer-context.ts"],"sourcesContent":["import type { EntityType } from '@mastra/core/observability';\nimport type { TraceQueryDiscoveryTimeRange } from '@mastra/react/hooks/traces';\nimport { createContext, useContext } from 'react';\nimport type { useTraceColumnPreferences } from '../../hooks/use-trace-column-preferences';\nimport type { useTracesListSource } from '../../hooks/use-traces-list-source';\nimport { hasTraceUsageColumn, isTraceUsageColumn } from '../../trace-list-columns';\nimport type { TraceColumnPreferences } from '../../trace-list-columns';\nimport type { SpanTab, TraceDatePreset } from '../../types';\nimport type { FeedbackOptions } from '../feedback-options';\nimport type { TraceSpanView } from '../trace-data-panel-view';\nimport type { TracesFilters, TracesSelection, TracesSort } from './traces-explorer-actions';\n\nexport type TracesExplorerScope = { entityId: string; entityType?: EntityType };\n\nexport type TracesMetricsSupport = { supported: boolean; isLoading: boolean };\n\n/**\n * Host switches (e.g. feature flags), combined with what the server supports.\n * `traceQuery` and `feedback` default to on and can only turn their feature off.\n * `spanQuery` and `threadQuery` default to off: each view is offered only when its flag is `true`\n * and the server supports it.\n */\nexport type TracesExplorerFeatures = {\n traceQuery?: boolean;\n feedback?: boolean;\n spanQuery?: boolean;\n threadQuery?: boolean;\n};\n\nexport type TracesConfigContextValue = {\n listId: string;\n scopedFieldIds: ReadonlySet<string>;\n hiddenFieldIds: readonly string[];\n withQueryTrace: boolean;\n withFeedback: boolean;\n feedbackOptions?: FeedbackOptions;\n /** The span query API is on, so the host can offer a spans view next to the traces list. */\n withSpanQuery: boolean;\n /** The thread rows API is on, so the host can offer a threads view next to the traces list. */\n withThreadQuery: boolean;\n withRootDuration: boolean;\n /** The server filters trace queries on the root span's `outcome` and `stopReason`. */\n withOutcomeFields: boolean;\n /** Trace rows carry the root span's time to first chunk, so the TTFC column can be shown. */\n withTimeToFirstChunk: boolean;\n /** Trace queries can be ordered by the root span's time to first chunk. */\n withTimeToFirstChunkSort: boolean;\n /** Trace rows carry the root span's time to first token, so the TTFT column can be shown. */\n withTimeToFirstToken: boolean;\n /** Trace queries can be ordered by the root span's time to first token. */\n withTimeToFirstTokenSort: boolean;\n /** The server supports delta polling, so auto-refresh merges new traces instead of reloading pages. */\n withDeltaPolling: boolean;\n /** Whether field discovery should run: the server supports it and the trace query API is on. */\n withDiscovery: boolean;\n isCapabilitiesLoading: boolean;\n metricsSupport: TracesMetricsSupport;\n /** Shared by every discovery consumer so they hit the same cached query. */\n discoveryTimeRange: TraceQueryDiscoveryTimeRange;\n};\n\nexport type TracesFiltersActions = {\n /** Replaces the filter tokens and groups. The scope tokens are always kept. */\n setFilterTokens: (tokens: TracesFilters['tokens'], groups: TracesFilters['groups']) => void;\n setDatePreset: (preset: TraceDatePreset) => void;\n setDate: (value: Date | undefined, end: 'from' | 'to') => void;\n setDateRange: (from: Date | undefined, to: Date | undefined) => void;\n /** Narrows the range to a histogram selection, remembering the range to return to on reset. */\n zoomDateRange: (from: Date, to: Date) => void;\n /** Undoes the last histogram zoom, or switches to `defaultPreset` when there is none to undo. */\n resetDateRange: (defaultPreset: TraceDatePreset) => void;\n};\n\nexport type TracesFiltersContextValue = TracesFiltersActions & {\n /** The host's filters with the entries this server can't query dropped. */\n filters: TracesFilters;\n dateFrom?: Date;\n dateTo?: Date;\n filtersApplied: boolean;\n contentFiltersApplied: boolean;\n /** The host's filters ask for `running` traces, which `filters` (and so the query) can't express. */\n runningSelected: boolean;\n};\n\nexport type TracesSelectionActions = {\n selectTrace: (traceId: string) => void;\n closeTrace: () => void;\n selectSpan: (spanId: string | null) => void;\n setSpanTab: (tab: SpanTab) => void;\n setSpanView: (view: TraceSpanView) => void;\n selectScore: (scoreId: string | null) => void;\n highlightSpans: (spanIds: string[]) => void;\n};\n\nexport type TracesSelectionContextValue = TracesSelectionActions & {\n selection: TracesSelection;\n selectedTraceId?: string;\n};\n\ntype ListSource = ReturnType<typeof useTracesListSource>;\n\nexport type TracesListContextValue = Pick<\n ListSource,\n | 'rows'\n | 'isLoading'\n | 'isFetchingNextPage'\n | 'hasNextPage'\n | 'setEndOfListElement'\n | 'error'\n | 'refetch'\n | 'autoRefetch'\n> & {\n sort: TracesSort;\n onSortChange: (next: TracesSort) => void;\n};\n\nexport type TracesColumnsContextValue = ReturnType<typeof useTraceColumnPreferences>;\n\nexport const TracesConfigContext = createContext<TracesConfigContextValue | null>(null);\nexport const TracesFiltersContext = createContext<TracesFiltersContextValue | null>(null);\nexport const TracesSelectionContext = createContext<TracesSelectionContextValue | null>(null);\nexport const TracesListContext = createContext<TracesListContextValue | null>(null);\n/** Kept out of `TracesListContext` so a poll tick doesn't re-render every list consumer. */\nexport const TracesListFetchingContext = createContext<boolean | null>(null);\nexport const TracesColumnsContext = createContext<TracesColumnsContextValue | null>(null);\n\nconst useRequired = <T>(context: React.Context<T | null>, name: string): T => {\n const value = useContext(context);\n if (!value) throw new Error(`${name} must be used inside <TracesExplorer>`);\n return value;\n};\n\nexport const useTracesConfig = () => useRequired(TracesConfigContext, 'useTracesConfig');\nexport const useTracesFilters = () => useRequired(TracesFiltersContext, 'useTracesFilters');\nexport const useTracesSelection = () => useRequired(TracesSelectionContext, 'useTracesSelection');\nexport const useTracesList = () => useRequired(TracesListContext, 'useTracesList');\n/** Whether the list query is fetching, including background refetches and retries. */\nexport const useTracesListFetching = () => {\n const value = useContext(TracesListFetchingContext);\n if (value === null) throw new Error('useTracesListFetching must be used inside <TracesExplorer>');\n return value;\n};\nexport const useTracesColumns = () => useRequired(TracesColumnsContext, 'useTracesColumns');\n\nexport const CHECKING_USAGE_REASON = 'Checking whether this storage supports usage data.';\nexport const UNSUPPORTED_USAGE_REASON = 'This observability store does not support token and cost metrics.';\n\nexport type TraceUsageColumns = {\n /** Column preferences without the columns the store can't serve (usage, time to first chunk/token). */\n displayedPreferences: TraceColumnPreferences;\n /** Whether usage should be fetched: metrics are supported and a usage column is visible. */\n usageEnabled: boolean;\n usageDisabledReason?: string;\n};\n\nexport const useTraceUsageColumns = (): TraceUsageColumns => {\n const { preferences } = useTracesColumns();\n const { metricsSupport, withTimeToFirstChunk, withTimeToFirstToken, isCapabilitiesLoading } = useTracesConfig();\n const unavailable = !metricsSupport.isLoading && !metricsSupport.supported;\n const timeToFirstChunkUnavailable = !isCapabilitiesLoading && !withTimeToFirstChunk;\n const timeToFirstTokenUnavailable = !isCapabilitiesLoading && !withTimeToFirstToken;\n const displayedPreferences =\n unavailable || timeToFirstChunkUnavailable || timeToFirstTokenUnavailable\n ? {\n ...preferences,\n visibleColumns: preferences.visibleColumns.filter(\n column =>\n !(unavailable && isTraceUsageColumn(column)) &&\n !(timeToFirstChunkUnavailable && column === 'timeToFirstChunk') &&\n !(timeToFirstTokenUnavailable && column === 'timeToFirstToken'),\n ),\n }\n : preferences;\n return {\n displayedPreferences,\n usageEnabled: !unavailable && !metricsSupport.isLoading && hasTraceUsageColumn(displayedPreferences),\n usageDisabledReason: metricsSupport.isLoading\n ? CHECKING_USAGE_REASON\n : !metricsSupport.supported\n ? UNSUPPORTED_USAGE_REASON\n : undefined,\n };\n};\n"],"mappings":";;;AAsHA,IAAa,sBAAsB,cAA+C,IAAI;AACtF,IAAa,uBAAuB,cAAgD,IAAI;AACxF,IAAa,yBAAyB,cAAkD,IAAI;AAC5F,IAAa,oBAAoB,cAA6C,IAAI;;AAElF,IAAa,4BAA4B,cAA8B,IAAI;AAC3E,IAAa,uBAAuB,cAAgD,IAAI;AAExF,IAAM,eAAkB,SAAkC,SAAoB;CAC5E,MAAM,QAAQ,WAAW,OAAO;CAChC,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,GAAG,KAAK,sCAAsC;CAC1E,OAAO;AACT;AAEA,IAAa,wBAAwB,YAAY,qBAAqB,iBAAiB;AACvF,IAAa,yBAAyB,YAAY,sBAAsB,kBAAkB;AAC1F,IAAa,2BAA2B,YAAY,wBAAwB,oBAAoB;AAChG,IAAa,sBAAsB,YAAY,mBAAmB,eAAe;;AAEjF,IAAa,8BAA8B;CACzC,MAAM,QAAQ,WAAW,yBAAyB;CAClD,IAAI,UAAU,MAAM,MAAM,IAAI,MAAM,4DAA4D;CAChG,OAAO;AACT;AACA,IAAa,yBAAyB,YAAY,sBAAsB,kBAAkB;AAE1F,IAAa,wBAAwB;AACrC,IAAa,2BAA2B;AAUxC,IAAa,6BAAgD;CAC3D,MAAM,EAAE,gBAAgB,iBAAiB;CACzC,MAAM,EAAE,gBAAgB,sBAAsB,sBAAsB,0BAA0B,gBAAgB;CAC9G,MAAM,cAAc,CAAC,eAAe,aAAa,CAAC,eAAe;CACjE,MAAM,8BAA8B,CAAC,yBAAyB,CAAC;CAC/D,MAAM,8BAA8B,CAAC,yBAAyB,CAAC;CAC/D,MAAM,uBACJ,eAAe,+BAA+B,8BAC1C;EACE,GAAG;EACH,gBAAgB,YAAY,eAAe,QACzC,WACE,EAAE,eAAe,mBAAmB,MAAM,MAC1C,EAAE,+BAA+B,WAAW,uBAC5C,EAAE,+BAA+B,WAAW,mBAChD;CACF,IACA;CACN,OAAO;EACL;EACA,cAAc,CAAC,eAAe,CAAC,eAAe,aAAa,oBAAoB,oBAAoB;EACnG,qBAAqB,eAAe,YAChC,wBACA,CAAC,eAAe,YACd,2BACA,KAAA;CACR;AACF"}
|
|
@@ -3,8 +3,8 @@ const require_trace_filters = require("../../../../trace-filters-a0N9bf52.cjs");
|
|
|
3
3
|
const require_domains_traces_components_traces_explorer_traces_explorer_actions = require("./traces-explorer-actions.cjs.js");
|
|
4
4
|
const require_domains_traces_components_traces_explorer_traces_explorer_context = require("./traces-explorer-context.cjs.js");
|
|
5
5
|
const require_domains_traces_components_traces_explorer_use_traces_filter_bar = require("./use-traces-filter-bar.cjs.js");
|
|
6
|
-
const require_FilterBar = require("../../../../FilterBar-
|
|
7
|
-
require("../../../../filter-bar-time-range-
|
|
6
|
+
const require_FilterBar = require("../../../../FilterBar-O8SYau_Q.cjs");
|
|
7
|
+
require("../../../../filter-bar-time-range-D4C3kU0J.cjs");
|
|
8
8
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
9
|
// src/domains/traces/components/traces-explorer/traces-explorer-filter-bar.tsx
|
|
10
10
|
var TIME_RANGE_PRESETS = [
|
|
@@ -2,8 +2,8 @@ import { u as TRACE_FILTER_BAR_OPERATORS } from "../../../../trace-filters-CaWkw
|
|
|
2
2
|
import { DEFAULT_TRACES_FILTERS } from "./traces-explorer-actions.es.js";
|
|
3
3
|
import { useTracesConfig, useTracesFilters, useTracesList } from "./traces-explorer-context.es.js";
|
|
4
4
|
import { useTracesFilterBar, useTracesFilterBarFields } from "./use-traces-filter-bar.es.js";
|
|
5
|
-
import { n as FilterBar } from "../../../../FilterBar-
|
|
6
|
-
import "../../../../filter-bar-time-range-
|
|
5
|
+
import { n as FilterBar } from "../../../../FilterBar-DgHNtsDI.js";
|
|
6
|
+
import "../../../../filter-bar-time-range-ao2YiYEJ.js";
|
|
7
7
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
8
8
|
// src/domains/traces/components/traces-explorer/traces-explorer-filter-bar.tsx
|
|
9
9
|
var TIME_RANGE_PRESETS = [
|
|
@@ -14,7 +14,7 @@ let _mastra_core_observability = require("@mastra/core/observability");
|
|
|
14
14
|
let _mastra_react_hooks_scores = require("@mastra/react/hooks/scores");
|
|
15
15
|
// src/domains/traces/components/traces-explorer/traces-explorer-panel.tsx
|
|
16
16
|
function TracesExplorerPanel({ onOpenScore, renderCreateDatasetDialog, headerActionsSlot, traceHref, withAddTraceToDataset = true }) {
|
|
17
|
-
const { withQueryTrace, withFeedback } = require_domains_traces_components_traces_explorer_traces_explorer_context.useTracesConfig();
|
|
17
|
+
const { withQueryTrace, withFeedback, feedbackOptions } = require_domains_traces_components_traces_explorer_traces_explorer_context.useTracesConfig();
|
|
18
18
|
const { rows, autoRefetch, isLoading: isListLoading } = require_domains_traces_components_traces_explorer_traces_explorer_context.useTracesList();
|
|
19
19
|
const { selection, selectTrace, closeTrace, selectSpan, setSpanTab, setSpanView, selectScore, highlightSpans } = require_domains_traces_components_traces_explorer_traces_explorer_context.useTracesSelection();
|
|
20
20
|
const { usageEnabled } = require_domains_traces_components_traces_explorer_traces_explorer_context.useTraceUsageColumns();
|
|
@@ -76,6 +76,7 @@ function TracesExplorerPanel({ onOpenScore, renderCreateDatasetDialog, headerAct
|
|
|
76
76
|
isFullThreadOpen,
|
|
77
77
|
withQueryTrace,
|
|
78
78
|
withFeedback,
|
|
79
|
+
feedbackOptions,
|
|
79
80
|
onOpenScore,
|
|
80
81
|
onFullThreadOpenChange: (open) => setFullThreadTraceId(open ? traceId ?? null : null),
|
|
81
82
|
onSpanSelect: (id) => selectSpan(id ?? null),
|
|
@@ -87,7 +88,10 @@ function TracesExplorerPanel({ onOpenScore, renderCreateDatasetDialog, headerAct
|
|
|
87
88
|
featuredSpanIds: selection.highlightSpanIds,
|
|
88
89
|
onHighlightSpans: highlightSpans,
|
|
89
90
|
feedbackTabBadge: withFeedback ? traceFeedbackData?.pagination?.total ?? void 0 : void 0,
|
|
90
|
-
feedbackTabSlot: withFeedback ? ({ traceId: tid }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_traces_components_trace_feedback_tab.TraceFeedbackTab, {
|
|
91
|
+
feedbackTabSlot: withFeedback ? ({ traceId: tid }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_traces_components_trace_feedback_tab.TraceFeedbackTab, {
|
|
92
|
+
traceId: tid,
|
|
93
|
+
feedbackOptions
|
|
94
|
+
}, tid) : void 0,
|
|
91
95
|
scoresTabBadge: spanScoresData?.pagination?.total ?? void 0,
|
|
92
96
|
scoresTabSlot: ({ traceId: tid, rootSpanId }) => rootSpanId ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_scores_components_trace_scores_list.TraceScoresList, {
|
|
93
97
|
traceId: tid,
|
|
@@ -101,7 +105,8 @@ function TracesExplorerPanel({ onOpenScore, renderCreateDatasetDialog, headerAct
|
|
|
101
105
|
spanFeedbackTabBadge: withFeedback ? spanFeedbackData?.pagination?.total ?? void 0 : void 0,
|
|
102
106
|
spanFeedbackTabSlot: withFeedback ? ({ traceId: tid, spanId: sid }) => tid && sid ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_traces_components_span_feedback_tab.SpanFeedbackTab, {
|
|
103
107
|
traceId: tid,
|
|
104
|
-
spanId: sid
|
|
108
|
+
spanId: sid,
|
|
109
|
+
feedbackOptions
|
|
105
110
|
}, `${tid}:${sid}`) : null : void 0,
|
|
106
111
|
headerActionsSlot: traceId && headerActionsSlot ? headerActionsSlot({
|
|
107
112
|
traceId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traces-explorer-panel.cjs.js","names":["useTracesConfig","useTracesList","useTracesSelection","useTraceUsageColumns","useState","useTraceFeedback","useSpanFeedback","useTraceOrBranchSpans","useTraceSpanScores","useTraceUsage","useTraceListNavigation","EntityType","_Fragment","TraceSpanPanel","TraceFeedbackTab","TraceScoresList","SpanFeedbackTab","ScoreDataPanel","TraceAsItemDialog"],"sources":["../../../../../src/domains/traces/components/traces-explorer/traces-explorer-panel.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport { useTraceSpanScores } from '@mastra/react/hooks/scores';\nimport { useSpanFeedback, useTraceFeedback, useTraceOrBranchSpans, useTraceUsage } from '@mastra/react/hooks/traces';\nimport { useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useTraceListNavigation } from '../../hooks/use-trace-list-navigation';\nimport { SpanFeedbackTab } from '../span-feedback-tab';\nimport { TraceFeedbackTab } from '../trace-feedback-tab';\nimport { TraceSpanPanel } from '../trace-span-panel';\nimport type { TraceSpanPanelProps } from '../trace-span-panel';\nimport { useTraceUsageColumns, useTracesConfig, useTracesList, useTracesSelection } from './traces-explorer-context';\nimport { TraceAsItemDialog } from '@/domains/observability/components/trace-as-item-dialog';\nimport { ScoreDataPanel, TraceScoresList } from '@/domains/scores';\n\nexport type TracesExplorerPanelProps = {\n /** Opens a score of one of the full thread's traces (the host owns routing). */\n onOpenScore: (traceId: string, scoreId: string) => void;\n renderCreateDatasetDialog?: ComponentProps<typeof TraceAsItemDialog>['renderCreateDatasetDialog'];\n /** Host integration actions rendered alongside the trace controls. */\n headerActionsSlot?: (args: { traceId: string; spans: TraceSpanPanelProps['spans'] }) => ReactNode;\n /** Builds the href of the dedicated trace page; without it the drawer offers no \"Open trace page\" link. */\n traceHref?: (traceId: string) => string;\n /** Shows the \"Add to dataset\" button next to \"Score trace\". Defaults to `true`. */\n withAddTraceToDataset?: boolean;\n};\n\ntype DatasetDialogTarget = { traceId: string; rootSpanId: string | undefined };\n\nexport function TracesExplorerPanel({\n onOpenScore,\n renderCreateDatasetDialog,\n headerActionsSlot,\n traceHref,\n withAddTraceToDataset = true,\n}: TracesExplorerPanelProps) {\n const { withQueryTrace, withFeedback } = useTracesConfig();\n const { rows, autoRefetch, isLoading: isListLoading } = useTracesList();\n const { selection, selectTrace, closeTrace, selectSpan, setSpanTab, setSpanView, selectScore, highlightSpans } =\n useTracesSelection();\n const { usageEnabled } = useTraceUsageColumns();\n const traceId = selection.traceId;\n const spanId = selection.spanId;\n\n const [datasetDialogTarget, setDatasetDialogTarget] = useState<DatasetDialogTarget | null>(null);\n // Keyed by trace id so selecting another trace (row click, prev/next) falls back to the trace panel.\n const [fullThreadTraceId, setFullThreadTraceId] = useState<string | null>(null);\n\n // Tab badge counts; the tab bodies re-use these first-page queries through React Query's cache.\n const { data: traceFeedbackData } = useTraceFeedback({\n traceId,\n queryOptions: { enabled: withFeedback && !!traceId },\n });\n const { data: spanFeedbackData } = useSpanFeedback({\n traceId,\n spanId,\n queryOptions: { enabled: withFeedback && !!traceId && !!spanId },\n });\n\n const {\n spans,\n anchorSpanId,\n isLoading: isLoadingSpans,\n } = useTraceOrBranchSpans({ traceId: traceId ?? null, listMode: 'traces', anchorSpanId: null });\n const anchorSpan = anchorSpanId\n ? spans?.find(s => s.spanId === anchorSpanId)\n : spans?.find(s => s.parentSpanId == null);\n\n const { data: spanScoresData } = useTraceSpanScores({\n traceId,\n spanId: anchorSpan?.spanId,\n queryOptions: { enabled: !!traceId && !!anchorSpan?.spanId },\n });\n const featuredScore = selection.scoreId\n ? spanScoresData?.scores?.find(score => score.id === selection.scoreId)\n : undefined;\n\n // Same key as the list's usage query when the trace is listed, so React Query serves it from cache.\n // Waits for the list so a deep-linked trace doesn't fetch its own usage before the rows arrive.\n const rowIds = rows.map(row => row.traceId);\n const isListed = !!traceId && rowIds.includes(traceId);\n const { data: usageByTraceId } = useTraceUsage({\n traceIds: isListed ? rowIds : traceId ? [traceId] : [],\n enabled: usageEnabled && !isListLoading,\n autoRefetch,\n });\n const usage = traceId ? usageByTraceId?.get(traceId) : undefined;\n\n const { handlePreviousTrace, handleNextTrace } = useTraceListNavigation(rows, traceId, null, selectTrace);\n\n const isFullThreadOpen = !!traceId && fullThreadTraceId === traceId;\n const depth = isFullThreadOpen ? 3 : 2;\n\n // Only agent traces carry the Messages column, so other traces open the drawer one size\n // smaller, with or without a span open. The listed row knows the entity on click; the root\n // span covers deep-linked traces outside the list.\n const listedRow = rows.find(row => row.traceId === traceId);\n const entityType = listedRow?.entityType ?? anchorSpan?.entityType;\n const isAgent = entityType === EntityType.AGENT;\n const panelSize = spanId ? (isAgent ? 'full' : 'wide') : isAgent ? 'wide' : 'half';\n\n return (\n <>\n <TraceSpanPanel\n title=\"Trace details\"\n size={panelSize}\n traceId={traceId}\n spans={spans}\n anchorSpanId={anchorSpanId}\n entityType={entityType}\n usage={usage}\n rootStreamingTimings={listedRow}\n isLoadingSpans={isLoadingSpans}\n selectedSpanId={spanId ?? null}\n onClose={() => {\n setFullThreadTraceId(null);\n closeTrace();\n }}\n isFullThreadOpen={isFullThreadOpen}\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n onOpenScore={onOpenScore}\n onFullThreadOpenChange={open => setFullThreadTraceId(open ? (traceId ?? null) : null)}\n onSpanSelect={id => selectSpan(id ?? null)}\n onSaveAsDatasetItem={withAddTraceToDataset ? setDatasetDialogTarget : undefined}\n initialSpanId={spanId}\n onPrevious={handlePreviousTrace}\n onNext={handleNextTrace}\n showPartialThread\n featuredSpanIds={selection.highlightSpanIds}\n onHighlightSpans={highlightSpans}\n feedbackTabBadge={withFeedback ? (traceFeedbackData?.pagination?.total ?? undefined) : undefined}\n feedbackTabSlot={withFeedback ? ({ traceId: tid }) => <TraceFeedbackTab traceId={tid} /> : undefined}\n scoresTabBadge={spanScoresData?.pagination?.total ?? undefined}\n scoresTabSlot={({ traceId: tid, rootSpanId }) =>\n rootSpanId ? <TraceScoresList traceId={tid} spanId={rootSpanId} onScoreSelect={selectScore} /> : null\n }\n spanView={selection.spanView}\n onSpanViewChange={setSpanView}\n spanActiveTab={selection.spanTab ?? 'details'}\n onSpanTabChange={setSpanTab}\n spanFeedbackTabBadge={withFeedback ? (spanFeedbackData?.pagination?.total ?? undefined) : undefined}\n spanFeedbackTabSlot={\n withFeedback\n ? ({ traceId: tid, spanId: sid }) =>\n tid && sid ? <SpanFeedbackTab key={`${tid}:${sid}`} traceId={tid} spanId={sid} /> : null\n : undefined\n }\n headerActionsSlot={traceId && headerActionsSlot ? headerActionsSlot({ traceId, spans }) : undefined}\n traceHref={traceId && traceHref ? traceHref(traceId) : undefined}\n />\n <ScoreDataPanel depth={depth} score={featuredScore} onClose={() => selectScore(null)} />\n {withAddTraceToDataset && (\n <TraceAsItemDialog\n rootSpanId={datasetDialogTarget?.rootSpanId}\n traceId={datasetDialogTarget?.traceId}\n isOpen={!!datasetDialogTarget}\n onClose={() => setDatasetDialogTarget(null)}\n renderCreateDatasetDialog={renderCreateDatasetDialog}\n />\n )}\n </>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"traces-explorer-panel.cjs.js","names":["useTracesConfig","useTracesList","useTracesSelection","useTraceUsageColumns","useState","useTraceFeedback","useSpanFeedback","useTraceOrBranchSpans","useTraceSpanScores","useTraceUsage","useTraceListNavigation","EntityType","_Fragment","TraceSpanPanel","TraceFeedbackTab","TraceScoresList","SpanFeedbackTab","ScoreDataPanel","TraceAsItemDialog"],"sources":["../../../../../src/domains/traces/components/traces-explorer/traces-explorer-panel.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport { useTraceSpanScores } from '@mastra/react/hooks/scores';\nimport { useSpanFeedback, useTraceFeedback, useTraceOrBranchSpans, useTraceUsage } from '@mastra/react/hooks/traces';\nimport { useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useTraceListNavigation } from '../../hooks/use-trace-list-navigation';\nimport { SpanFeedbackTab } from '../span-feedback-tab';\nimport { TraceFeedbackTab } from '../trace-feedback-tab';\nimport { TraceSpanPanel } from '../trace-span-panel';\nimport type { TraceSpanPanelProps } from '../trace-span-panel';\nimport { useTraceUsageColumns, useTracesConfig, useTracesList, useTracesSelection } from './traces-explorer-context';\nimport { TraceAsItemDialog } from '@/domains/observability/components/trace-as-item-dialog';\nimport { ScoreDataPanel, TraceScoresList } from '@/domains/scores';\n\nexport type TracesExplorerPanelProps = {\n /** Opens a score of one of the full thread's traces (the host owns routing). */\n onOpenScore: (traceId: string, scoreId: string) => void;\n renderCreateDatasetDialog?: ComponentProps<typeof TraceAsItemDialog>['renderCreateDatasetDialog'];\n /** Host integration actions rendered alongside the trace controls. */\n headerActionsSlot?: (args: { traceId: string; spans: TraceSpanPanelProps['spans'] }) => ReactNode;\n /** Builds the href of the dedicated trace page; without it the drawer offers no \"Open trace page\" link. */\n traceHref?: (traceId: string) => string;\n /** Shows the \"Add to dataset\" button next to \"Score trace\". Defaults to `true`. */\n withAddTraceToDataset?: boolean;\n};\n\ntype DatasetDialogTarget = { traceId: string; rootSpanId: string | undefined };\n\nexport function TracesExplorerPanel({\n onOpenScore,\n renderCreateDatasetDialog,\n headerActionsSlot,\n traceHref,\n withAddTraceToDataset = true,\n}: TracesExplorerPanelProps) {\n const { withQueryTrace, withFeedback, feedbackOptions } = useTracesConfig();\n const { rows, autoRefetch, isLoading: isListLoading } = useTracesList();\n const { selection, selectTrace, closeTrace, selectSpan, setSpanTab, setSpanView, selectScore, highlightSpans } =\n useTracesSelection();\n const { usageEnabled } = useTraceUsageColumns();\n const traceId = selection.traceId;\n const spanId = selection.spanId;\n\n const [datasetDialogTarget, setDatasetDialogTarget] = useState<DatasetDialogTarget | null>(null);\n // Keyed by trace id so selecting another trace (row click, prev/next) falls back to the trace panel.\n const [fullThreadTraceId, setFullThreadTraceId] = useState<string | null>(null);\n\n // Tab badge counts; the tab bodies re-use these first-page queries through React Query's cache.\n const { data: traceFeedbackData } = useTraceFeedback({\n traceId,\n queryOptions: { enabled: withFeedback && !!traceId },\n });\n const { data: spanFeedbackData } = useSpanFeedback({\n traceId,\n spanId,\n queryOptions: { enabled: withFeedback && !!traceId && !!spanId },\n });\n\n const {\n spans,\n anchorSpanId,\n isLoading: isLoadingSpans,\n } = useTraceOrBranchSpans({ traceId: traceId ?? null, listMode: 'traces', anchorSpanId: null });\n const anchorSpan = anchorSpanId\n ? spans?.find(s => s.spanId === anchorSpanId)\n : spans?.find(s => s.parentSpanId == null);\n\n const { data: spanScoresData } = useTraceSpanScores({\n traceId,\n spanId: anchorSpan?.spanId,\n queryOptions: { enabled: !!traceId && !!anchorSpan?.spanId },\n });\n const featuredScore = selection.scoreId\n ? spanScoresData?.scores?.find(score => score.id === selection.scoreId)\n : undefined;\n\n // Same key as the list's usage query when the trace is listed, so React Query serves it from cache.\n // Waits for the list so a deep-linked trace doesn't fetch its own usage before the rows arrive.\n const rowIds = rows.map(row => row.traceId);\n const isListed = !!traceId && rowIds.includes(traceId);\n const { data: usageByTraceId } = useTraceUsage({\n traceIds: isListed ? rowIds : traceId ? [traceId] : [],\n enabled: usageEnabled && !isListLoading,\n autoRefetch,\n });\n const usage = traceId ? usageByTraceId?.get(traceId) : undefined;\n\n const { handlePreviousTrace, handleNextTrace } = useTraceListNavigation(rows, traceId, null, selectTrace);\n\n const isFullThreadOpen = !!traceId && fullThreadTraceId === traceId;\n const depth = isFullThreadOpen ? 3 : 2;\n\n // Only agent traces carry the Messages column, so other traces open the drawer one size\n // smaller, with or without a span open. The listed row knows the entity on click; the root\n // span covers deep-linked traces outside the list.\n const listedRow = rows.find(row => row.traceId === traceId);\n const entityType = listedRow?.entityType ?? anchorSpan?.entityType;\n const isAgent = entityType === EntityType.AGENT;\n const panelSize = spanId ? (isAgent ? 'full' : 'wide') : isAgent ? 'wide' : 'half';\n\n return (\n <>\n <TraceSpanPanel\n title=\"Trace details\"\n size={panelSize}\n traceId={traceId}\n spans={spans}\n anchorSpanId={anchorSpanId}\n entityType={entityType}\n usage={usage}\n rootStreamingTimings={listedRow}\n isLoadingSpans={isLoadingSpans}\n selectedSpanId={spanId ?? null}\n onClose={() => {\n setFullThreadTraceId(null);\n closeTrace();\n }}\n isFullThreadOpen={isFullThreadOpen}\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n feedbackOptions={feedbackOptions}\n onOpenScore={onOpenScore}\n onFullThreadOpenChange={open => setFullThreadTraceId(open ? (traceId ?? null) : null)}\n onSpanSelect={id => selectSpan(id ?? null)}\n onSaveAsDatasetItem={withAddTraceToDataset ? setDatasetDialogTarget : undefined}\n initialSpanId={spanId}\n onPrevious={handlePreviousTrace}\n onNext={handleNextTrace}\n showPartialThread\n featuredSpanIds={selection.highlightSpanIds}\n onHighlightSpans={highlightSpans}\n feedbackTabBadge={withFeedback ? (traceFeedbackData?.pagination?.total ?? undefined) : undefined}\n feedbackTabSlot={\n withFeedback\n ? ({ traceId: tid }) => <TraceFeedbackTab key={tid} traceId={tid} feedbackOptions={feedbackOptions} />\n : undefined\n }\n scoresTabBadge={spanScoresData?.pagination?.total ?? undefined}\n scoresTabSlot={({ traceId: tid, rootSpanId }) =>\n rootSpanId ? <TraceScoresList traceId={tid} spanId={rootSpanId} onScoreSelect={selectScore} /> : null\n }\n spanView={selection.spanView}\n onSpanViewChange={setSpanView}\n spanActiveTab={selection.spanTab ?? 'details'}\n onSpanTabChange={setSpanTab}\n spanFeedbackTabBadge={withFeedback ? (spanFeedbackData?.pagination?.total ?? undefined) : undefined}\n spanFeedbackTabSlot={\n withFeedback\n ? ({ traceId: tid, spanId: sid }) =>\n tid && sid ? (\n <SpanFeedbackTab key={`${tid}:${sid}`} traceId={tid} spanId={sid} feedbackOptions={feedbackOptions} />\n ) : null\n : undefined\n }\n headerActionsSlot={traceId && headerActionsSlot ? headerActionsSlot({ traceId, spans }) : undefined}\n traceHref={traceId && traceHref ? traceHref(traceId) : undefined}\n />\n <ScoreDataPanel depth={depth} score={featuredScore} onClose={() => selectScore(null)} />\n {withAddTraceToDataset && (\n <TraceAsItemDialog\n rootSpanId={datasetDialogTarget?.rootSpanId}\n traceId={datasetDialogTarget?.traceId}\n isOpen={!!datasetDialogTarget}\n onClose={() => setDatasetDialogTarget(null)}\n renderCreateDatasetDialog={renderCreateDatasetDialog}\n />\n )}\n </>\n );\n}\n"],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ import { EntityType } from "@mastra/core/observability";
|
|
|
13
13
|
import { useTraceSpanScores } from "@mastra/react/hooks/scores";
|
|
14
14
|
// src/domains/traces/components/traces-explorer/traces-explorer-panel.tsx
|
|
15
15
|
function TracesExplorerPanel({ onOpenScore, renderCreateDatasetDialog, headerActionsSlot, traceHref, withAddTraceToDataset = true }) {
|
|
16
|
-
const { withQueryTrace, withFeedback } = useTracesConfig();
|
|
16
|
+
const { withQueryTrace, withFeedback, feedbackOptions } = useTracesConfig();
|
|
17
17
|
const { rows, autoRefetch, isLoading: isListLoading } = useTracesList();
|
|
18
18
|
const { selection, selectTrace, closeTrace, selectSpan, setSpanTab, setSpanView, selectScore, highlightSpans } = useTracesSelection();
|
|
19
19
|
const { usageEnabled } = useTraceUsageColumns();
|
|
@@ -75,6 +75,7 @@ function TracesExplorerPanel({ onOpenScore, renderCreateDatasetDialog, headerAct
|
|
|
75
75
|
isFullThreadOpen,
|
|
76
76
|
withQueryTrace,
|
|
77
77
|
withFeedback,
|
|
78
|
+
feedbackOptions,
|
|
78
79
|
onOpenScore,
|
|
79
80
|
onFullThreadOpenChange: (open) => setFullThreadTraceId(open ? traceId ?? null : null),
|
|
80
81
|
onSpanSelect: (id) => selectSpan(id ?? null),
|
|
@@ -86,7 +87,10 @@ function TracesExplorerPanel({ onOpenScore, renderCreateDatasetDialog, headerAct
|
|
|
86
87
|
featuredSpanIds: selection.highlightSpanIds,
|
|
87
88
|
onHighlightSpans: highlightSpans,
|
|
88
89
|
feedbackTabBadge: withFeedback ? traceFeedbackData?.pagination?.total ?? void 0 : void 0,
|
|
89
|
-
feedbackTabSlot: withFeedback ? ({ traceId: tid }) => /* @__PURE__ */ jsx(TraceFeedbackTab, {
|
|
90
|
+
feedbackTabSlot: withFeedback ? ({ traceId: tid }) => /* @__PURE__ */ jsx(TraceFeedbackTab, {
|
|
91
|
+
traceId: tid,
|
|
92
|
+
feedbackOptions
|
|
93
|
+
}, tid) : void 0,
|
|
90
94
|
scoresTabBadge: spanScoresData?.pagination?.total ?? void 0,
|
|
91
95
|
scoresTabSlot: ({ traceId: tid, rootSpanId }) => rootSpanId ? /* @__PURE__ */ jsx(TraceScoresList, {
|
|
92
96
|
traceId: tid,
|
|
@@ -100,7 +104,8 @@ function TracesExplorerPanel({ onOpenScore, renderCreateDatasetDialog, headerAct
|
|
|
100
104
|
spanFeedbackTabBadge: withFeedback ? spanFeedbackData?.pagination?.total ?? void 0 : void 0,
|
|
101
105
|
spanFeedbackTabSlot: withFeedback ? ({ traceId: tid, spanId: sid }) => tid && sid ? /* @__PURE__ */ jsx(SpanFeedbackTab, {
|
|
102
106
|
traceId: tid,
|
|
103
|
-
spanId: sid
|
|
107
|
+
spanId: sid,
|
|
108
|
+
feedbackOptions
|
|
104
109
|
}, `${tid}:${sid}`) : null : void 0,
|
|
105
110
|
headerActionsSlot: traceId && headerActionsSlot ? headerActionsSlot({
|
|
106
111
|
traceId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"traces-explorer-panel.es.js","names":["_Fragment"],"sources":["../../../../../src/domains/traces/components/traces-explorer/traces-explorer-panel.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport { useTraceSpanScores } from '@mastra/react/hooks/scores';\nimport { useSpanFeedback, useTraceFeedback, useTraceOrBranchSpans, useTraceUsage } from '@mastra/react/hooks/traces';\nimport { useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useTraceListNavigation } from '../../hooks/use-trace-list-navigation';\nimport { SpanFeedbackTab } from '../span-feedback-tab';\nimport { TraceFeedbackTab } from '../trace-feedback-tab';\nimport { TraceSpanPanel } from '../trace-span-panel';\nimport type { TraceSpanPanelProps } from '../trace-span-panel';\nimport { useTraceUsageColumns, useTracesConfig, useTracesList, useTracesSelection } from './traces-explorer-context';\nimport { TraceAsItemDialog } from '@/domains/observability/components/trace-as-item-dialog';\nimport { ScoreDataPanel, TraceScoresList } from '@/domains/scores';\n\nexport type TracesExplorerPanelProps = {\n /** Opens a score of one of the full thread's traces (the host owns routing). */\n onOpenScore: (traceId: string, scoreId: string) => void;\n renderCreateDatasetDialog?: ComponentProps<typeof TraceAsItemDialog>['renderCreateDatasetDialog'];\n /** Host integration actions rendered alongside the trace controls. */\n headerActionsSlot?: (args: { traceId: string; spans: TraceSpanPanelProps['spans'] }) => ReactNode;\n /** Builds the href of the dedicated trace page; without it the drawer offers no \"Open trace page\" link. */\n traceHref?: (traceId: string) => string;\n /** Shows the \"Add to dataset\" button next to \"Score trace\". Defaults to `true`. */\n withAddTraceToDataset?: boolean;\n};\n\ntype DatasetDialogTarget = { traceId: string; rootSpanId: string | undefined };\n\nexport function TracesExplorerPanel({\n onOpenScore,\n renderCreateDatasetDialog,\n headerActionsSlot,\n traceHref,\n withAddTraceToDataset = true,\n}: TracesExplorerPanelProps) {\n const { withQueryTrace, withFeedback } = useTracesConfig();\n const { rows, autoRefetch, isLoading: isListLoading } = useTracesList();\n const { selection, selectTrace, closeTrace, selectSpan, setSpanTab, setSpanView, selectScore, highlightSpans } =\n useTracesSelection();\n const { usageEnabled } = useTraceUsageColumns();\n const traceId = selection.traceId;\n const spanId = selection.spanId;\n\n const [datasetDialogTarget, setDatasetDialogTarget] = useState<DatasetDialogTarget | null>(null);\n // Keyed by trace id so selecting another trace (row click, prev/next) falls back to the trace panel.\n const [fullThreadTraceId, setFullThreadTraceId] = useState<string | null>(null);\n\n // Tab badge counts; the tab bodies re-use these first-page queries through React Query's cache.\n const { data: traceFeedbackData } = useTraceFeedback({\n traceId,\n queryOptions: { enabled: withFeedback && !!traceId },\n });\n const { data: spanFeedbackData } = useSpanFeedback({\n traceId,\n spanId,\n queryOptions: { enabled: withFeedback && !!traceId && !!spanId },\n });\n\n const {\n spans,\n anchorSpanId,\n isLoading: isLoadingSpans,\n } = useTraceOrBranchSpans({ traceId: traceId ?? null, listMode: 'traces', anchorSpanId: null });\n const anchorSpan = anchorSpanId\n ? spans?.find(s => s.spanId === anchorSpanId)\n : spans?.find(s => s.parentSpanId == null);\n\n const { data: spanScoresData } = useTraceSpanScores({\n traceId,\n spanId: anchorSpan?.spanId,\n queryOptions: { enabled: !!traceId && !!anchorSpan?.spanId },\n });\n const featuredScore = selection.scoreId\n ? spanScoresData?.scores?.find(score => score.id === selection.scoreId)\n : undefined;\n\n // Same key as the list's usage query when the trace is listed, so React Query serves it from cache.\n // Waits for the list so a deep-linked trace doesn't fetch its own usage before the rows arrive.\n const rowIds = rows.map(row => row.traceId);\n const isListed = !!traceId && rowIds.includes(traceId);\n const { data: usageByTraceId } = useTraceUsage({\n traceIds: isListed ? rowIds : traceId ? [traceId] : [],\n enabled: usageEnabled && !isListLoading,\n autoRefetch,\n });\n const usage = traceId ? usageByTraceId?.get(traceId) : undefined;\n\n const { handlePreviousTrace, handleNextTrace } = useTraceListNavigation(rows, traceId, null, selectTrace);\n\n const isFullThreadOpen = !!traceId && fullThreadTraceId === traceId;\n const depth = isFullThreadOpen ? 3 : 2;\n\n // Only agent traces carry the Messages column, so other traces open the drawer one size\n // smaller, with or without a span open. The listed row knows the entity on click; the root\n // span covers deep-linked traces outside the list.\n const listedRow = rows.find(row => row.traceId === traceId);\n const entityType = listedRow?.entityType ?? anchorSpan?.entityType;\n const isAgent = entityType === EntityType.AGENT;\n const panelSize = spanId ? (isAgent ? 'full' : 'wide') : isAgent ? 'wide' : 'half';\n\n return (\n <>\n <TraceSpanPanel\n title=\"Trace details\"\n size={panelSize}\n traceId={traceId}\n spans={spans}\n anchorSpanId={anchorSpanId}\n entityType={entityType}\n usage={usage}\n rootStreamingTimings={listedRow}\n isLoadingSpans={isLoadingSpans}\n selectedSpanId={spanId ?? null}\n onClose={() => {\n setFullThreadTraceId(null);\n closeTrace();\n }}\n isFullThreadOpen={isFullThreadOpen}\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n onOpenScore={onOpenScore}\n onFullThreadOpenChange={open => setFullThreadTraceId(open ? (traceId ?? null) : null)}\n onSpanSelect={id => selectSpan(id ?? null)}\n onSaveAsDatasetItem={withAddTraceToDataset ? setDatasetDialogTarget : undefined}\n initialSpanId={spanId}\n onPrevious={handlePreviousTrace}\n onNext={handleNextTrace}\n showPartialThread\n featuredSpanIds={selection.highlightSpanIds}\n onHighlightSpans={highlightSpans}\n feedbackTabBadge={withFeedback ? (traceFeedbackData?.pagination?.total ?? undefined) : undefined}\n feedbackTabSlot={withFeedback ? ({ traceId: tid }) => <TraceFeedbackTab traceId={tid} /> : undefined}\n scoresTabBadge={spanScoresData?.pagination?.total ?? undefined}\n scoresTabSlot={({ traceId: tid, rootSpanId }) =>\n rootSpanId ? <TraceScoresList traceId={tid} spanId={rootSpanId} onScoreSelect={selectScore} /> : null\n }\n spanView={selection.spanView}\n onSpanViewChange={setSpanView}\n spanActiveTab={selection.spanTab ?? 'details'}\n onSpanTabChange={setSpanTab}\n spanFeedbackTabBadge={withFeedback ? (spanFeedbackData?.pagination?.total ?? undefined) : undefined}\n spanFeedbackTabSlot={\n withFeedback\n ? ({ traceId: tid, spanId: sid }) =>\n tid && sid ? <SpanFeedbackTab key={`${tid}:${sid}`} traceId={tid} spanId={sid} /> : null\n : undefined\n }\n headerActionsSlot={traceId && headerActionsSlot ? headerActionsSlot({ traceId, spans }) : undefined}\n traceHref={traceId && traceHref ? traceHref(traceId) : undefined}\n />\n <ScoreDataPanel depth={depth} score={featuredScore} onClose={() => selectScore(null)} />\n {withAddTraceToDataset && (\n <TraceAsItemDialog\n rootSpanId={datasetDialogTarget?.rootSpanId}\n traceId={datasetDialogTarget?.traceId}\n isOpen={!!datasetDialogTarget}\n onClose={() => setDatasetDialogTarget(null)}\n renderCreateDatasetDialog={renderCreateDatasetDialog}\n />\n )}\n </>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"traces-explorer-panel.es.js","names":["_Fragment"],"sources":["../../../../../src/domains/traces/components/traces-explorer/traces-explorer-panel.tsx"],"sourcesContent":["import { EntityType } from '@mastra/core/observability';\nimport { useTraceSpanScores } from '@mastra/react/hooks/scores';\nimport { useSpanFeedback, useTraceFeedback, useTraceOrBranchSpans, useTraceUsage } from '@mastra/react/hooks/traces';\nimport { useState } from 'react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useTraceListNavigation } from '../../hooks/use-trace-list-navigation';\nimport { SpanFeedbackTab } from '../span-feedback-tab';\nimport { TraceFeedbackTab } from '../trace-feedback-tab';\nimport { TraceSpanPanel } from '../trace-span-panel';\nimport type { TraceSpanPanelProps } from '../trace-span-panel';\nimport { useTraceUsageColumns, useTracesConfig, useTracesList, useTracesSelection } from './traces-explorer-context';\nimport { TraceAsItemDialog } from '@/domains/observability/components/trace-as-item-dialog';\nimport { ScoreDataPanel, TraceScoresList } from '@/domains/scores';\n\nexport type TracesExplorerPanelProps = {\n /** Opens a score of one of the full thread's traces (the host owns routing). */\n onOpenScore: (traceId: string, scoreId: string) => void;\n renderCreateDatasetDialog?: ComponentProps<typeof TraceAsItemDialog>['renderCreateDatasetDialog'];\n /** Host integration actions rendered alongside the trace controls. */\n headerActionsSlot?: (args: { traceId: string; spans: TraceSpanPanelProps['spans'] }) => ReactNode;\n /** Builds the href of the dedicated trace page; without it the drawer offers no \"Open trace page\" link. */\n traceHref?: (traceId: string) => string;\n /** Shows the \"Add to dataset\" button next to \"Score trace\". Defaults to `true`. */\n withAddTraceToDataset?: boolean;\n};\n\ntype DatasetDialogTarget = { traceId: string; rootSpanId: string | undefined };\n\nexport function TracesExplorerPanel({\n onOpenScore,\n renderCreateDatasetDialog,\n headerActionsSlot,\n traceHref,\n withAddTraceToDataset = true,\n}: TracesExplorerPanelProps) {\n const { withQueryTrace, withFeedback, feedbackOptions } = useTracesConfig();\n const { rows, autoRefetch, isLoading: isListLoading } = useTracesList();\n const { selection, selectTrace, closeTrace, selectSpan, setSpanTab, setSpanView, selectScore, highlightSpans } =\n useTracesSelection();\n const { usageEnabled } = useTraceUsageColumns();\n const traceId = selection.traceId;\n const spanId = selection.spanId;\n\n const [datasetDialogTarget, setDatasetDialogTarget] = useState<DatasetDialogTarget | null>(null);\n // Keyed by trace id so selecting another trace (row click, prev/next) falls back to the trace panel.\n const [fullThreadTraceId, setFullThreadTraceId] = useState<string | null>(null);\n\n // Tab badge counts; the tab bodies re-use these first-page queries through React Query's cache.\n const { data: traceFeedbackData } = useTraceFeedback({\n traceId,\n queryOptions: { enabled: withFeedback && !!traceId },\n });\n const { data: spanFeedbackData } = useSpanFeedback({\n traceId,\n spanId,\n queryOptions: { enabled: withFeedback && !!traceId && !!spanId },\n });\n\n const {\n spans,\n anchorSpanId,\n isLoading: isLoadingSpans,\n } = useTraceOrBranchSpans({ traceId: traceId ?? null, listMode: 'traces', anchorSpanId: null });\n const anchorSpan = anchorSpanId\n ? spans?.find(s => s.spanId === anchorSpanId)\n : spans?.find(s => s.parentSpanId == null);\n\n const { data: spanScoresData } = useTraceSpanScores({\n traceId,\n spanId: anchorSpan?.spanId,\n queryOptions: { enabled: !!traceId && !!anchorSpan?.spanId },\n });\n const featuredScore = selection.scoreId\n ? spanScoresData?.scores?.find(score => score.id === selection.scoreId)\n : undefined;\n\n // Same key as the list's usage query when the trace is listed, so React Query serves it from cache.\n // Waits for the list so a deep-linked trace doesn't fetch its own usage before the rows arrive.\n const rowIds = rows.map(row => row.traceId);\n const isListed = !!traceId && rowIds.includes(traceId);\n const { data: usageByTraceId } = useTraceUsage({\n traceIds: isListed ? rowIds : traceId ? [traceId] : [],\n enabled: usageEnabled && !isListLoading,\n autoRefetch,\n });\n const usage = traceId ? usageByTraceId?.get(traceId) : undefined;\n\n const { handlePreviousTrace, handleNextTrace } = useTraceListNavigation(rows, traceId, null, selectTrace);\n\n const isFullThreadOpen = !!traceId && fullThreadTraceId === traceId;\n const depth = isFullThreadOpen ? 3 : 2;\n\n // Only agent traces carry the Messages column, so other traces open the drawer one size\n // smaller, with or without a span open. The listed row knows the entity on click; the root\n // span covers deep-linked traces outside the list.\n const listedRow = rows.find(row => row.traceId === traceId);\n const entityType = listedRow?.entityType ?? anchorSpan?.entityType;\n const isAgent = entityType === EntityType.AGENT;\n const panelSize = spanId ? (isAgent ? 'full' : 'wide') : isAgent ? 'wide' : 'half';\n\n return (\n <>\n <TraceSpanPanel\n title=\"Trace details\"\n size={panelSize}\n traceId={traceId}\n spans={spans}\n anchorSpanId={anchorSpanId}\n entityType={entityType}\n usage={usage}\n rootStreamingTimings={listedRow}\n isLoadingSpans={isLoadingSpans}\n selectedSpanId={spanId ?? null}\n onClose={() => {\n setFullThreadTraceId(null);\n closeTrace();\n }}\n isFullThreadOpen={isFullThreadOpen}\n withQueryTrace={withQueryTrace}\n withFeedback={withFeedback}\n feedbackOptions={feedbackOptions}\n onOpenScore={onOpenScore}\n onFullThreadOpenChange={open => setFullThreadTraceId(open ? (traceId ?? null) : null)}\n onSpanSelect={id => selectSpan(id ?? null)}\n onSaveAsDatasetItem={withAddTraceToDataset ? setDatasetDialogTarget : undefined}\n initialSpanId={spanId}\n onPrevious={handlePreviousTrace}\n onNext={handleNextTrace}\n showPartialThread\n featuredSpanIds={selection.highlightSpanIds}\n onHighlightSpans={highlightSpans}\n feedbackTabBadge={withFeedback ? (traceFeedbackData?.pagination?.total ?? undefined) : undefined}\n feedbackTabSlot={\n withFeedback\n ? ({ traceId: tid }) => <TraceFeedbackTab key={tid} traceId={tid} feedbackOptions={feedbackOptions} />\n : undefined\n }\n scoresTabBadge={spanScoresData?.pagination?.total ?? undefined}\n scoresTabSlot={({ traceId: tid, rootSpanId }) =>\n rootSpanId ? <TraceScoresList traceId={tid} spanId={rootSpanId} onScoreSelect={selectScore} /> : null\n }\n spanView={selection.spanView}\n onSpanViewChange={setSpanView}\n spanActiveTab={selection.spanTab ?? 'details'}\n onSpanTabChange={setSpanTab}\n spanFeedbackTabBadge={withFeedback ? (spanFeedbackData?.pagination?.total ?? undefined) : undefined}\n spanFeedbackTabSlot={\n withFeedback\n ? ({ traceId: tid, spanId: sid }) =>\n tid && sid ? (\n <SpanFeedbackTab key={`${tid}:${sid}`} traceId={tid} spanId={sid} feedbackOptions={feedbackOptions} />\n ) : null\n : undefined\n }\n headerActionsSlot={traceId && headerActionsSlot ? headerActionsSlot({ traceId, spans }) : undefined}\n traceHref={traceId && traceHref ? traceHref(traceId) : undefined}\n />\n <ScoreDataPanel depth={depth} score={featuredScore} onClose={() => selectScore(null)} />\n {withAddTraceToDataset && (\n <TraceAsItemDialog\n rootSpanId={datasetDialogTarget?.rootSpanId}\n traceId={datasetDialogTarget?.traceId}\n isOpen={!!datasetDialogTarget}\n onClose={() => setDatasetDialogTarget(null)}\n renderCreateDatasetDialog={renderCreateDatasetDialog}\n />\n )}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AA4BA,SAAgB,oBAAoB,EAClC,aACA,2BACA,mBACA,WACA,wBAAwB,QACG;CAC3B,MAAM,EAAE,gBAAgB,cAAc,oBAAoB,gBAAgB;CAC1E,MAAM,EAAE,MAAM,aAAa,WAAW,kBAAkB,cAAc;CACtE,MAAM,EAAE,WAAW,aAAa,YAAY,YAAY,YAAY,aAAa,aAAa,mBAC5F,mBAAmB;CACrB,MAAM,EAAE,iBAAiB,qBAAqB;CAC9C,MAAM,UAAU,UAAU;CAC1B,MAAM,SAAS,UAAU;CAEzB,MAAM,CAAC,qBAAqB,0BAA0B,SAAqC,IAAI;CAE/F,MAAM,CAAC,mBAAmB,wBAAwB,SAAwB,IAAI;CAG9E,MAAM,EAAE,MAAM,sBAAsB,iBAAiB;EACnD;EACA,cAAc,EAAE,SAAS,gBAAgB,CAAC,CAAC,QAAQ;CACrD,CAAC;CACD,MAAM,EAAE,MAAM,qBAAqB,gBAAgB;EACjD;EACA;EACA,cAAc,EAAE,SAAS,gBAAgB,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO;CACjE,CAAC;CAED,MAAM,EACJ,OACA,cACA,WAAW,mBACT,sBAAsB;EAAE,SAAS,WAAW;EAAM,UAAU;EAAU,cAAc;CAAK,CAAC;CAC9F,MAAM,aAAa,eACf,OAAO,MAAK,MAAK,EAAE,WAAW,YAAY,IAC1C,OAAO,MAAK,MAAK,EAAE,gBAAgB,IAAI;CAE3C,MAAM,EAAE,MAAM,mBAAmB,mBAAmB;EAClD;EACA,QAAQ,YAAY;EACpB,cAAc,EAAE,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC,YAAY,OAAO;CAC7D,CAAC;CACD,MAAM,gBAAgB,UAAU,UAC5B,gBAAgB,QAAQ,MAAK,UAAS,MAAM,OAAO,UAAU,OAAO,IACpE,KAAA;CAIJ,MAAM,SAAS,KAAK,KAAI,QAAO,IAAI,OAAO;CAC1C,MAAM,WAAW,CAAC,CAAC,WAAW,OAAO,SAAS,OAAO;CACrD,MAAM,EAAE,MAAM,mBAAmB,cAAc;EAC7C,UAAU,WAAW,SAAS,UAAU,CAAC,OAAO,IAAI,CAAC;EACrD,SAAS,gBAAgB,CAAC;EAC1B;CACF,CAAC;CACD,MAAM,QAAQ,UAAU,gBAAgB,IAAI,OAAO,IAAI,KAAA;CAEvD,MAAM,EAAE,qBAAqB,oBAAoB,uBAAuB,MAAM,SAAS,MAAM,WAAW;CAExG,MAAM,mBAAmB,CAAC,CAAC,WAAW,sBAAsB;CAC5D,MAAM,QAAQ,mBAAmB,IAAI;CAKrC,MAAM,YAAY,KAAK,MAAK,QAAO,IAAI,YAAY,OAAO;CAC1D,MAAM,aAAa,WAAW,cAAc,YAAY;CACxD,MAAM,UAAU,eAAe,WAAW;CAG1C,OACE,qBAAAA,YAAA,EAAA,UAAA;EACE,oBAAC,gBAAD;GACE,OAAM;GACN,MANY,SAAU,UAAU,SAAS,SAAU,UAAU,SAAS;GAO7D;GACF;GACO;GACF;GACL;GACP,sBAAsB;GACN;GAChB,gBAAgB,UAAU;GAC1B,eAAe;IACb,qBAAqB,IAAI;IACzB,WAAW;GACb;GACkB;GACF;GACF;GACG;GACJ;GACb,yBAAwB,SAAQ,qBAAqB,OAAQ,WAAW,OAAQ,IAAI;GACpF,eAAc,OAAM,WAAW,MAAM,IAAI;GACzC,qBAAqB,wBAAwB,yBAAyB,KAAA;GACtE,eAAe;GACf,YAAY;GACZ,QAAQ;GACR,mBAAA;GACA,iBAAiB,UAAU;GAC3B,kBAAkB;GAClB,kBAAkB,eAAgB,mBAAmB,YAAY,SAAS,KAAA,IAAa,KAAA;GACvF,iBACE,gBACK,EAAE,SAAS,UAAU,oBAAC,kBAAD;IAA4B,SAAS;IAAsB;GAAkB,GAAtD,GAAsD,IACnG,KAAA;GAEN,gBAAgB,gBAAgB,YAAY,SAAS,KAAA;GACrD,gBAAgB,EAAE,SAAS,KAAK,iBAC9B,aAAa,oBAAC,iBAAD;IAAiB,SAAS;IAAK,QAAQ;IAAY,eAAe;GAAc,CAAA,IAAI;GAEnG,UAAU,UAAU;GACpB,kBAAkB;GAClB,eAAe,UAAU,WAAW;GACpC,iBAAiB;GACjB,sBAAsB,eAAgB,kBAAkB,YAAY,SAAS,KAAA,IAAa,KAAA;GAC1F,qBACE,gBACK,EAAE,SAAS,KAAK,QAAQ,UACvB,OAAO,MACL,oBAAC,iBAAD;IAAuC,SAAS;IAAK,QAAQ;IAAsB;GAAkB,GAA/E,GAAG,IAAI,GAAG,KAAqE,IACnG,OACN,KAAA;GAEN,mBAAmB,WAAW,oBAAoB,kBAAkB;IAAE;IAAS;GAAM,CAAC,IAAI,KAAA;GAC1F,WAAW,WAAW,YAAY,UAAU,OAAO,IAAI,KAAA;EACxD,CAAA;EACD,oBAAC,gBAAD;GAAuB;GAAO,OAAO;GAAe,eAAe,YAAY,IAAI;EAAI,CAAA;EACtF,yBACC,oBAAC,mBAAD;GACE,YAAY,qBAAqB;GACjC,SAAS,qBAAqB;GAC9B,QAAQ,CAAC,CAAC;GACV,eAAe,uBAAuB,IAAI;GACf;EAC5B,CAAA;CAEH,EAAA,CAAA;AAEN"}
|
|
@@ -19,7 +19,7 @@ var HIDDEN_SCOPED_FIELD_IDS = [
|
|
|
19
19
|
var NO_FIELD_IDS = /* @__PURE__ */ new Set();
|
|
20
20
|
var NO_HIDDEN_FIELD_IDS = [];
|
|
21
21
|
var listIdForScope = (scope) => scope?.entityType === _mastra_core_observability.EntityType.AGENT ? "agent-traces" : scope?.entityType === _mastra_core_observability.EntityType.WORKFLOW_RUN ? "workflows-traces" : "all-traces";
|
|
22
|
-
function TracesExplorerRoot({ selection, filters: rawFilters, onChange, sort, onSortChange: onHostSortChange, scope, metricsSupport, features, initialFilters = require_domains_traces_components_traces_explorer_traces_explorer_actions.DEFAULT_TRACES_FILTERS, children }) {
|
|
22
|
+
function TracesExplorerRoot({ selection, filters: rawFilters, onChange, sort, onSortChange: onHostSortChange, scope, metricsSupport, features, feedbackOptions, initialFilters = require_domains_traces_components_traces_explorer_traces_explorer_actions.DEFAULT_TRACES_FILTERS, children }) {
|
|
23
23
|
const traceQuery = (0, _mastra_react_hooks_capabilities.useTraceQueryAvailable)();
|
|
24
24
|
const withQueryTrace = traceQuery.enabled && features?.traceQuery !== false;
|
|
25
25
|
const withFeedback = (0, _mastra_react_hooks_capabilities.useFeedbackAvailable)().enabled && features?.feedback !== false;
|
|
@@ -144,12 +144,20 @@ function TracesExplorerRoot({ selection, filters: rawFilters, onChange, sort, on
|
|
|
144
144
|
discoveryNow
|
|
145
145
|
]);
|
|
146
146
|
const listId = listIdForScope(scope);
|
|
147
|
+
const hasFeedbackOptions = feedbackOptions !== void 0;
|
|
148
|
+
const { contextMode, feedbackUserId, allowDelete, allowReview } = feedbackOptions ?? {};
|
|
147
149
|
const configValue = (0, react.useMemo)(() => ({
|
|
148
150
|
listId,
|
|
149
151
|
scopedFieldIds,
|
|
150
152
|
hiddenFieldIds,
|
|
151
153
|
withQueryTrace,
|
|
152
154
|
withFeedback,
|
|
155
|
+
feedbackOptions: hasFeedbackOptions ? {
|
|
156
|
+
contextMode,
|
|
157
|
+
feedbackUserId,
|
|
158
|
+
allowDelete,
|
|
159
|
+
allowReview
|
|
160
|
+
} : void 0,
|
|
153
161
|
withSpanQuery,
|
|
154
162
|
withThreadQuery,
|
|
155
163
|
withRootDuration,
|
|
@@ -169,6 +177,11 @@ function TracesExplorerRoot({ selection, filters: rawFilters, onChange, sort, on
|
|
|
169
177
|
hiddenFieldIds,
|
|
170
178
|
withQueryTrace,
|
|
171
179
|
withFeedback,
|
|
180
|
+
hasFeedbackOptions,
|
|
181
|
+
contextMode,
|
|
182
|
+
feedbackUserId,
|
|
183
|
+
allowDelete,
|
|
184
|
+
allowReview,
|
|
172
185
|
withSpanQuery,
|
|
173
186
|
withThreadQuery,
|
|
174
187
|
withRootDuration,
|