@mastra/playground-ui 33.0.0 → 34.0.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/dist/components/DataList.cjs.js +2 -2
  3. package/dist/components/DataList.es.js +2 -2
  4. package/dist/components/HorizontalBars.cjs.js +1 -1
  5. package/dist/components/HorizontalBars.es.js +1 -1
  6. package/dist/components/LogsDataList.cjs.js +2 -2
  7. package/dist/components/LogsDataList.es.js +2 -2
  8. package/dist/components/MainSidebar.cjs.js +1 -1
  9. package/dist/components/MainSidebar.es.js +1 -1
  10. package/dist/components/MetricsDataTable.cjs.js +1 -1
  11. package/dist/components/MetricsDataTable.es.js +1 -1
  12. package/dist/components/ScrollArea.cjs.js +1 -1
  13. package/dist/components/ScrollArea.es.js +1 -1
  14. package/dist/{data-list-skeleton-C9Ncz3jM.js → data-list-skeleton-B3bHGBlU.js} +91 -13
  15. package/dist/data-list-skeleton-B3bHGBlU.js.map +1 -0
  16. package/dist/{data-list-skeleton-Bges_t5u.cjs → data-list-skeleton-DR7cqfzq.cjs} +91 -12
  17. package/dist/data-list-skeleton-DR7cqfzq.cjs.map +1 -0
  18. package/dist/{horizontal-bars-DkJlf6-x.cjs → horizontal-bars-C9qp4r47.cjs} +2 -2
  19. package/dist/{horizontal-bars-DkJlf6-x.cjs.map → horizontal-bars-C9qp4r47.cjs.map} +1 -1
  20. package/dist/{horizontal-bars-B43f5B_S.js → horizontal-bars-DjLETHvH.js} +2 -2
  21. package/dist/{horizontal-bars-B43f5B_S.js.map → horizontal-bars-DjLETHvH.js.map} +1 -1
  22. package/dist/index.cjs.js +10 -9
  23. package/dist/index.cjs.js.map +1 -1
  24. package/dist/index.css +153 -1
  25. package/dist/index.es.js +12 -11
  26. package/dist/index.es.js.map +1 -1
  27. package/dist/{logs-data-list-B0Y5AHWL.js → logs-data-list-Be970xP6.js} +2 -2
  28. package/dist/{logs-data-list-B0Y5AHWL.js.map → logs-data-list-Be970xP6.js.map} +1 -1
  29. package/dist/{logs-data-list-DikL8ZQ0.cjs → logs-data-list-De4DHIW9.cjs} +2 -2
  30. package/dist/{logs-data-list-DikL8ZQ0.cjs.map → logs-data-list-De4DHIW9.cjs.map} +1 -1
  31. package/dist/{main-sidebar-0q7MXh2j.js → main-sidebar-Bk2U9O57.js} +2 -2
  32. package/dist/{main-sidebar-0q7MXh2j.js.map → main-sidebar-Bk2U9O57.js.map} +1 -1
  33. package/dist/{main-sidebar-H8NQ7njm.cjs → main-sidebar-CWoM-yrH.cjs} +2 -2
  34. package/dist/{main-sidebar-H8NQ7njm.cjs.map → main-sidebar-CWoM-yrH.cjs.map} +1 -1
  35. package/dist/{metrics-data-table-BpEAlJi0.cjs → metrics-data-table-D7vx2WEJ.cjs} +2 -2
  36. package/dist/{metrics-data-table-BpEAlJi0.cjs.map → metrics-data-table-D7vx2WEJ.cjs.map} +1 -1
  37. package/dist/{metrics-data-table-Dds2TkvE.js → metrics-data-table-DryqJWoI.js} +2 -2
  38. package/dist/{metrics-data-table-Dds2TkvE.js.map → metrics-data-table-DryqJWoI.js.map} +1 -1
  39. package/dist/{scroll-area-KogxLVrV.cjs → scroll-area-BqJfcT94.cjs} +11 -2
  40. package/dist/scroll-area-BqJfcT94.cjs.map +1 -0
  41. package/dist/{scroll-area-BCZiAvhR.js → scroll-area-BtDqmqBK.js} +11 -2
  42. package/dist/scroll-area-BtDqmqBK.js.map +1 -0
  43. package/dist/src/ds/components/DataList/data-list-root.d.ts +10 -1
  44. package/dist/src/ds/components/DataList/data-list-row-link.d.ts +1 -1
  45. package/dist/src/ds/components/DataList/data-list.stories.d.ts +16 -1
  46. package/dist/src/ds/components/DataList/shared.d.ts +13 -0
  47. package/dist/src/ds/components/ScrollArea/scroll-area.d.ts +12 -0
  48. package/dist/{traces-data-list-Dru2XnRN.js → traces-data-list-JWUFbWnS.js} +7 -4
  49. package/dist/traces-data-list-JWUFbWnS.js.map +1 -0
  50. package/dist/{traces-data-list-5GA3JumQ.cjs → traces-data-list-kc8O_Yyd.cjs} +7 -4
  51. package/dist/traces-data-list-kc8O_Yyd.cjs.map +1 -0
  52. package/package.json +18 -18
  53. package/dist/data-list-skeleton-Bges_t5u.cjs.map +0 -1
  54. package/dist/data-list-skeleton-C9Ncz3jM.js.map +0 -1
  55. package/dist/scroll-area-BCZiAvhR.js.map +0 -1
  56. package/dist/scroll-area-KogxLVrV.cjs.map +0 -1
  57. package/dist/traces-data-list-5GA3JumQ.cjs.map +0 -1
  58. package/dist/traces-data-list-Dru2XnRN.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/ds/icons/AgentCoinIcon.tsx","../src/ds/icons/AiIcon.tsx","../src/ds/icons/ApiIcon.tsx","../src/ds/icons/BranchIcon.tsx","../src/ds/icons/CheckIcon.tsx","../src/ds/icons/ChevronIcon.tsx","../src/ds/icons/CommitIcon.tsx","../src/ds/icons/CrossIcon.tsx","../src/ds/icons/DbIcon.tsx","../src/ds/icons/DebugIcon.tsx","../src/ds/icons/DeploymentIcon.tsx","../src/ds/icons/DividerIcon.tsx","../src/ds/icons/DocsIcon.tsx","../src/ds/icons/EnvIcon.tsx","../src/ds/icons/FiltersIcon.tsx","../src/ds/icons/GithubCoinIcon.tsx","../src/ds/icons/GithubIcon.tsx","../src/ds/icons/GoogleIcon.tsx","../src/ds/icons/RepoIcon.tsx","../src/ds/icons/HomeIcon.tsx","../src/ds/icons/InfoIcon.tsx","../src/ds/icons/JudgeIcon.tsx","../src/ds/icons/LogsIcon.tsx","../src/ds/icons/MemoryIcon.tsx","../src/ds/icons/OpenAIIcon.tsx","../src/ds/icons/PromptIcon.tsx","../src/ds/icons/SettingsIcon.tsx","../src/ds/icons/SkillIcon.tsx","../src/ds/icons/TraceIcon.tsx","../src/ds/icons/TsIcon.tsx","../src/ds/icons/VariablesIcon.tsx","../src/ds/icons/WorkflowCoinIcon.tsx","../src/ds/icons/LatencyIcon.tsx","../src/ds/icons/McpServerIcon.tsx","../src/ds/icons/FolderIcon.tsx","../src/ds/icons/McpCoinIcon.tsx","../src/ds/icons/ToolCoinIcon.tsx","../src/ds/icons/AgentNetworkCoinIcon.tsx","../src/ds/icons/ProcessorIcon.tsx","../src/ds/icons/AmazonIcon.tsx","../src/ds/icons/AnthropicChatIcon.tsx","../src/ds/icons/AnthropicMessagesIcon.tsx","../src/ds/icons/AzureIcon.tsx","../src/ds/icons/CohereIcon.tsx","../src/ds/icons/GroqIcon.tsx","../src/ds/icons/MastraIcon.tsx","../src/ds/icons/MistralIcon.tsx","../src/ds/icons/NetlifyIcon.tsx","../src/ds/icons/OpenaiChatIcon.tsx","../src/ds/icons/XGroqIcon.tsx","../src/ds/icons/WorkspacesIcon.tsx","../src/ds/icons/RequestContextIcon.tsx","../src/ds/icons/ScorersIcon.tsx","../src/ds/icons/DatasetsIcon.tsx","../src/ds/icons/ExperimentsIcon.tsx","../src/ds/icons/MetricsIcon.tsx","../src/hooks/use-in-view.ts","../src/lib/string.ts","../src/lib/number.ts","../src/lib/object.ts","../src/lib/formatting.ts","../src/lib/colors.ts","../src/lib/truncate-string.ts","../src/lib/errors.ts","../src/lib/query-utils.ts","../src/lib/rule-engine/utils/index.ts","../src/lib/rule-engine/components/schema-utils.ts","../src/lib/rule-engine/components/rule-field-select.tsx","../src/lib/rule-engine/components/types.ts","../src/lib/rule-engine/components/rule-operator-select.tsx","../src/lib/rule-engine/components/rule-value-input.tsx","../src/lib/rule-engine/components/rule-row.tsx","../src/lib/rule-engine/components/rule-builder.tsx","../src/lib/resize/collapsible-panel.tsx","../src/lib/resize/separator.tsx","../src/lib/file/constants.ts","../src/lib/file/contentTypeFromUrl.ts","../src/lib/file/downloadJson.ts","../src/lib/file/toBase64.ts","../src/lib/template/generate-default-values.ts","../src/store/playground-store.ts","../src/domains/metrics/metrics-filters.ts","../src/domains/metrics/hooks/use-metrics.tsx","../src/domains/metrics/components/date-range-selector.tsx","../src/domains/metrics/components/metrics-utils.ts","../src/domains/metrics/components/bar-list.tsx","../src/domains/metrics/components/card-action-buttons.tsx","../src/domains/metrics/components/kpi-card-view.tsx","../src/domains/metrics/components/latency-card-view.tsx","../src/domains/metrics/components/memory-card-view.tsx","../src/domains/metrics/components/model-usage-cost-card-view.tsx","../src/domains/metrics/components/scores-card-view.tsx","../src/domains/metrics/components/token-usage-by-agent-card-view.tsx","../src/domains/metrics/components/token-usage-timeline-card-view.tsx","../src/domains/metrics/components/traces-volume-card-view.tsx","../src/domains/metrics/hooks/use-metrics-filters.tsx","../src/domains/metrics/hooks/use-agent-runs-kpi-metrics.tsx","../src/domains/metrics/hooks/use-model-cost-kpi-metrics.tsx","../src/domains/metrics/hooks/use-total-tokens-kpi-metrics.tsx","../src/domains/metrics/hooks/use-model-usage-cost-metrics.tsx","../src/domains/metrics/hooks/use-latency-metrics.tsx","../src/domains/metrics/hooks/use-trace-volume-metrics.tsx","../src/domains/metrics/hooks/use-scores-metrics.tsx","../src/domains/metrics/hooks/use-token-usage-by-agent-metrics.tsx","../src/domains/metrics/hooks/use-token-usage-timeseries.tsx","../src/domains/metrics/hooks/use-active-threads-kpi-metrics.tsx","../src/domains/metrics/hooks/use-active-resources-kpi-metrics.tsx","../src/domains/metrics/hooks/use-top-active-threads-metrics.tsx","../src/domains/metrics/hooks/use-top-resources-by-threads-metrics.tsx","../src/domains/logs/log-filters.ts","../src/domains/traces/trace-filters.ts","../src/domains/metrics/drilldown.ts","../src/domains/metrics/hooks/use-drilldown.tsx","../src/domains/traces/components/format-hierarchical-spans.ts","../src/domains/traces/components/shared.tsx","../src/domains/traces/components/span-token-usage.utils.ts","../src/domains/traces/components/span-token-usage.tsx","../src/domains/traces/components/timeline-expand-col.tsx","../src/domains/traces/components/timeline-structure-sign.tsx","../src/domains/traces/components/timeline-name-col.tsx","../src/domains/traces/components/timeline-timing-col.tsx","../src/domains/traces/components/trace-keys-and-values.tsx","../src/domains/traces/hooks/get-all-span-ids.ts","../src/domains/traces/components/trace-timeline-span.tsx","../src/domains/traces/components/trace-timeline.tsx","../src/domains/traces/components/traces-toolbar.tsx","../src/domains/traces/hooks/use-download-trace-json.ts","../src/domains/traces/components/trace-data-panel-view.tsx","../src/domains/traces/utils/span-utils.ts","../src/domains/traces/components/span-data-panel-view.tsx","../src/domains/traces/components/span-details-view.tsx","../src/domains/traces/components/trace-details-view.tsx","../src/domains/traces/components/traces-layout.tsx","../src/domains/traces/components/traces-list-view.tsx","../src/domains/traces/components/traces-list-mode-toggle.tsx","../src/domains/traces/components/traces-error-content.tsx","../src/domains/traces/components/no-traces-info.tsx","../src/domains/traces/hooks/use-branch.ts","../src/domains/traces/hooks/use-span-detail.ts","../src/domains/traces/hooks/use-trace-light-spans.ts","../src/domains/traces/hooks/use-trace-or-branch-spans.ts","../src/domains/traces/hooks/use-trace-spans.ts","../src/domains/traces/hooks/use-traces.tsx","../src/domains/traces/hooks/use-tags.ts","../src/domains/traces/hooks/use-entity-names.ts","../src/domains/traces/hooks/use-environments.ts","../src/domains/traces/hooks/use-service-names.ts","../src/domains/traces/hooks/use-trace-span-navigation.tsx","../src/domains/traces/hooks/use-trace-list-navigation.tsx","../src/domains/traces/hooks/use-trace-url-state.tsx","../src/domains/traces/hooks/use-trace-filter-persistence.tsx","../src/domains/traces/types.ts","../src/domains/logs/components/log-details-view.tsx","../src/domains/logs/components/logs-error-content.tsx","../src/domains/logs/components/logs-layout.tsx","../src/domains/logs/components/logs-list-view.tsx","../src/domains/logs/components/logs-toolbar.tsx","../src/domains/logs/components/no-logs-info.tsx","../src/domains/logs/hooks/use-logs.ts","../src/domains/logs/hooks/use-logs-url-state.tsx","../src/domains/logs/hooks/use-logs-filter-persistence.tsx","../src/domains/logs/hooks/use-logs-list-navigation.tsx"],"sourcesContent":["import React from 'react';\n\nexport const AgentCoinIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"126\" height=\"85\" viewBox=\"0 0 126 85\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M63.0002 0.968262C28.5152 0.968262 0.55957 15.6484 0.55957 33.7573V51.2428C0.55957 69.3517 28.5152 84.0319 63.0002 84.0319C97.4853 84.0319 125.441 69.3517 125.441 51.2428V33.7573C125.441 15.6484 97.4853 0.968262 63.0002 0.968262Z\"\n stroke=\"#707070\"\n />\n <path\n d=\"M119.322 35.1636C119.322 50.3595 94.1055 62.6782 62.9998 62.6782C31.894 62.6782 6.67773 50.3595 6.67773 35.1636V49.8363C6.67773 65.0322 31.894 77.351 62.9998 77.351C94.1055 77.351 119.322 65.0322 119.322 49.8363V35.1636Z\"\n fill=\"#2E2E2E\"\n fillOpacity=\"0.9\"\n />\n <path\n d=\"M119.322 35.1636C119.322 50.3595 94.1055 62.6782 62.9998 62.6782C31.894 62.6782 6.67773 50.3595 6.67773 35.1636M119.322 35.1636C119.322 19.9677 94.1055 7.64893 62.9998 7.64893C31.894 7.64893 6.67773 19.9677 6.67773 35.1636M119.322 35.1636V49.8363C119.322 65.0322 94.1055 77.351 62.9998 77.351C31.894 77.351 6.67773 65.0322 6.67773 49.8363V35.1636\"\n stroke=\"#424242\"\n />\n <g clipPath=\"url(#clip0_21421_19519)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M38.5383 47.0955C45.0714 50.3122 53.9322 52.1193 63.1714 52.1193C72.4106 52.1193 81.2714 50.3122 87.8045 47.0955C94.3376 43.8787 98.0078 39.5159 98.0078 34.9668C98.0078 30.4177 94.3376 26.0549 87.8045 22.8381C81.2714 19.6214 72.4106 17.8143 63.1714 17.8143C53.9322 17.8143 45.0714 19.6214 38.5383 22.8381C32.0052 26.0549 28.3349 30.4177 28.3349 34.9668C28.3349 39.5159 32.0052 43.8787 38.5383 47.0955ZM42.9089 34.9668L35.8005 34.9668C35.8004 32.3013 37.4056 29.6956 40.4132 27.4793C43.4207 25.263 47.6956 23.5355 52.6971 22.5154C57.6986 21.4954 63.2022 21.2285 68.5118 21.7485C73.8214 22.2685 78.6986 23.552 82.5266 25.4368C86.3546 27.3216 88.9615 29.723 90.0176 32.3373C91.0737 34.9517 90.5316 37.6614 88.4599 40.1241C86.3881 42.5867 82.8797 44.6915 78.3784 46.1723C73.8771 47.6532 68.585 48.4435 63.1714 48.4435V44.9435C63.1717 43.9778 62.7855 43.0215 62.035 42.1293C61.2845 41.2372 60.1843 40.4265 58.7973 39.7438L53.4695 37.1205C52.0828 36.4376 50.4364 35.8959 48.6244 35.5263C46.8124 35.1568 44.8702 34.9667 42.9089 34.9668Z\"\n fill=\"#A9A9A9\"\n />\n <path\n d=\"M77.2474 28.0361C75.3808 27.1171 72.8492 26.6007 70.2094 26.6007C67.5696 26.6007 65.038 27.1171 63.1714 28.0361L61.4119 28.9025C59.5453 29.8215 58.4966 31.068 58.4966 32.3678C58.4966 33.6676 59.5453 34.9141 61.4119 35.8331C63.2785 36.7522 65.8101 37.2685 68.4499 37.2685C71.0897 37.2685 73.6213 36.7522 75.4879 35.8331L77.2474 34.9668C79.114 34.0477 80.1627 32.8012 80.1627 31.5015C80.1627 30.2017 79.114 28.9552 77.2474 28.0361Z\"\n fill=\"#A9A9A9\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_21421_19519\">\n <rect\n width=\"62.7591\"\n height=\"62.7591\"\n fill=\"white\"\n transform=\"matrix(0.897148 0.441731 -0.897148 0.441731 63.1714 7.24365)\"\n />\n </clipPath>\n </defs>\n </svg>\n);\n","import React from 'react';\n\nexport const AiIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M4.31445 3.16083C3.78402 3.16083 3.27531 3.37154 2.90024 3.74661C2.52517 4.12169 2.31445 4.63039 2.31445 5.16083V5.66083C2.31445 6.19126 2.52517 6.69997 2.90024 7.07504C3.27531 7.45011 3.78402 7.66083 4.31445 7.66083C4.84489 7.66083 5.35359 7.45011 5.72867 7.07504C6.10374 6.69997 6.31445 6.19126 6.31445 5.66083V5.16083C6.31445 4.63039 6.10374 4.12169 5.72867 3.74661C5.35359 3.37154 4.84489 3.16083 4.31445 3.16083Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M6.76666 9.50235C6.57678 9.28532 6.30244 9.16083 6.01407 9.16083H4.50201C4.10791 9.16078 3.71766 9.23838 3.35356 9.38921C3.11733 9.48706 2.8951 9.6145 2.69205 9.76806C2.48056 9.928 2.38001 10.1888 2.38001 10.454V13.0642C2.38001 13.6165 2.82773 14.0642 3.38001 14.0642H8.55436C9.4135 14.0642 9.87269 13.0523 9.30695 12.4057L6.76666 9.50235Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.0686 2.26107C12.0686 2.17635 11.9999 2.10767 11.9152 2.10767H10.9948C10.91 2.10767 10.8414 2.17635 10.8414 2.26107V3.85184C10.8414 3.95606 10.7397 4.02994 10.6406 3.99773L9.12775 3.50619C9.04718 3.48001 8.96063 3.52411 8.93445 3.60468L8.65003 4.48004C8.62385 4.56062 8.66795 4.64716 8.74852 4.67334L10.2611 5.1648C10.3602 5.19701 10.399 5.31655 10.3378 5.40086L9.40289 6.68765C9.35309 6.75619 9.36829 6.85212 9.43683 6.90192L10.1815 7.44292C10.25 7.49272 10.3459 7.47752 10.3957 7.40898L11.3309 6.12181C11.3922 6.03749 11.5179 6.03749 11.5791 6.12181L12.5143 7.40904C12.5641 7.47758 12.6601 7.49278 12.7286 7.44298L13.4732 6.90198C13.5418 6.85218 13.557 6.75625 13.5072 6.68771L12.5723 5.40091C12.511 5.3166 12.5499 5.19705 12.649 5.16485L14.1615 4.67338C14.2421 4.6472 14.2862 4.56066 14.26 4.48009L13.9756 3.60473C13.9494 3.52415 13.8629 3.48006 13.7823 3.50624L12.2694 3.99782C12.1703 4.03003 12.0686 3.95615 12.0686 3.85193V2.26107Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const ApiIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M11.0313 7.97578C11.0313 9.34436 9.92183 10.4538 8.55324 10.4538C7.18466 10.4538 6.0752 9.34436 6.0752 7.97578C6.0752 6.60719 7.18466 5.49773 8.55324 5.49773C9.92183 5.49773 11.0313 6.60719 11.0313 7.97578ZM11.0313 7.97578H14.573\"\n stroke=\"currentColor\"\n strokeWidth=\"1.33333\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M12.967 4.46154C11.9273 3.14431 10.3165 2.29883 8.50814 2.29883C5.37277 2.29883 2.83105 4.84055 2.83105 7.97591C2.83105 11.1113 5.37277 13.653 8.50814 13.653C10.3165 13.653 11.9273 12.8075 12.967 11.4903\"\n stroke=\"currentColor\"\n strokeWidth=\"1.33333\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const BranchIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <circle cx=\"8.57129\" cy=\"8.08496\" r=\"2.27832\" stroke=\"currentColor\" />\n <path d=\"M5.89692 8.08203H2.45312\" stroke=\"currentColor\" />\n <path d=\"M14.5454 8.08203H11.1016\" stroke=\"currentColor\" />\n </svg>\n);\n","import React from 'react';\n\nexport const CheckIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.99982 2.0625C3.8252 2.0625 2.06232 3.82538 2.06232 6C2.06232 8.17462 3.8252 9.9375 5.99982 9.9375C8.17444 9.9375 9.93732 8.17462 9.93732 6C9.93732 3.82538 8.17444 2.0625 5.99982 2.0625ZM0.937317 6C0.937317 3.20406 3.20388 0.9375 5.99982 0.9375C8.79576 0.9375 11.0623 3.20406 11.0623 6C11.0623 8.79594 8.79576 11.0625 5.99982 11.0625C3.20388 11.0625 0.937317 8.79594 0.937317 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.97865 4.57004C8.22604 4.75795 8.27426 5.11082 8.08635 5.35821L6.05486 8.03279C5.94873 8.17251 5.78348 8.25471 5.60803 8.25505C5.43257 8.2554 5.267 8.17385 5.16032 8.03454L3.80937 6.27034C3.6205 6.02369 3.66733 5.67063 3.91398 5.48176C4.16063 5.29288 4.51369 5.33972 4.70257 5.58637L5.6051 6.76498L7.19048 4.67774C7.37839 4.43036 7.73126 4.38213 7.97865 4.57004Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const ChevronIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M4.60059 6.30005L8.00098 9.70005L11.3996 6.30142\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const CommitIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"12\" height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.46484 7.18262H3.29529C3.55505 8.46829 4.69121 9.43628 6.05347 9.43628C7.41572 9.43628 8.55188 8.46829 8.81165 7.18262L10.534 7.18262C10.8447 7.18262 11.0965 6.93078 11.0965 6.62012C11.0965 6.30946 10.8447 6.05762 10.534 6.05762L8.81075 6.05762C8.54929 4.77414 7.41417 3.80835 6.05347 3.80835C4.69277 3.80835 3.55764 4.77414 3.29618 6.05762H1.46484C1.15418 6.05762 0.902344 6.30946 0.902344 6.62012C0.902344 6.93078 1.15418 7.18262 1.46484 7.18262ZM6.05347 4.93335C5.12068 4.93335 4.3645 5.68952 4.3645 6.62231C4.3645 7.5551 5.12068 8.31128 6.05347 8.31128C6.98626 8.31128 7.74243 7.5551 7.74243 6.62231C7.74243 5.68952 6.98626 4.93335 6.05347 4.93335Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const CrossIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.99982 2.0625C3.8252 2.0625 2.06232 3.82538 2.06232 6C2.06232 8.17462 3.8252 9.9375 5.99982 9.9375C8.17444 9.9375 9.93732 8.17462 9.93732 6C9.93732 3.82538 8.17444 2.0625 5.99982 2.0625ZM0.937317 6C0.937317 3.20406 3.20388 0.9375 5.99982 0.9375C8.79576 0.9375 11.0623 3.20406 11.0623 6C11.0623 8.79594 8.79576 11.0625 5.99982 11.0625C3.20388 11.0625 0.937317 8.79594 0.937317 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.89741 4.10293C8.11707 4.32261 8.11706 4.67877 7.89738 4.89843L6.79517 6.00058L7.8962 7.10155C8.11588 7.32122 8.11589 7.67737 7.89623 7.89705C7.67656 8.11673 7.32041 8.11674 7.10073 7.89707L5.99965 6.79605L4.89856 7.89707C4.67889 8.11673 4.32273 8.11672 4.10307 7.89704C3.88341 7.67737 3.88342 7.32121 4.10309 7.10155L5.20413 6.00058L4.10191 4.89843C3.88224 4.67877 3.88223 4.32262 4.10189 4.10294C4.32155 3.88326 4.67771 3.88325 4.89738 4.10292L5.99965 5.20511L7.10191 4.10291C7.32159 3.88325 7.67774 3.88326 7.89741 4.10293Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const DbIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"13\" height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0.941406 2.831V3.75745C0.941406 4.27885 1.35491 4.76002 2.05273 5.14711C2.10389 5.17549 2.15658 5.20337 2.21074 5.23071C3.23028 5.74546 4.77322 6.07356 6.50007 6.07356C8.31866 6.07356 9.93328 5.70967 10.9474 5.14711C11.6453 4.76002 12.0587 4.27886 12.0587 3.75745V2.831C12.0587 1.55185 9.57003 0.514893 6.50007 0.514893C3.4301 0.514893 0.941406 1.55185 0.941406 2.831ZM1.02052 6.14518C0.968505 6.27247 0.941406 6.40331 0.941406 6.53678V7.46322C0.941406 7.98463 1.35491 8.46579 2.05273 8.85289C3.06686 9.41542 4.68148 9.77933 6.50007 9.77933C8.22692 9.77933 9.76986 9.45128 10.7894 8.93645C10.8436 8.90912 10.8962 8.88124 10.9474 8.85289C11.6453 8.46579 12.0587 7.98462 12.0587 7.46322V6.53678C12.0587 6.40331 12.0316 6.27248 11.9796 6.14519C11.664 6.35469 11.3187 6.53063 10.9652 6.67795C9.75207 7.18337 8.17267 7.46322 6.50007 7.46322C4.82747 7.46322 3.24803 7.18337 2.03502 6.67795C1.68142 6.53063 1.3362 6.35469 1.02052 6.14518ZM1.02052 9.85095C0.968505 9.97824 0.941406 10.1091 0.941406 10.2426V11.169C0.941406 12.4481 3.4301 13.4851 6.50007 13.4851C9.57003 13.4851 12.0587 12.4481 12.0587 11.169V10.2426C12.0587 10.1091 12.0316 9.97824 11.9796 9.85095C11.664 10.0605 11.3187 10.2364 10.9652 10.3837C9.75207 10.8891 8.17267 11.169 6.50007 11.169C4.82747 11.169 3.24803 10.8891 2.03502 10.3837C1.68142 10.2364 1.3362 10.0605 1.02052 9.85095Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const DebugIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M6.14934 2.26085C5.88284 2.57794 5.92385 3.05104 6.24094 3.31754L7.05702 4.00343C6.51911 4.24774 6.05679 4.62747 5.72304 5.10093L4.31451 3.91711C3.99742 3.65061 3.52432 3.69162 3.25781 4.00871C2.99131 4.3258 3.03232 4.7989 3.34941 5.06541L5.1711 6.59647C5.16257 6.69009 5.1582 6.78504 5.1582 6.88115V8.02254H3.36523C2.95102 8.02254 2.61523 8.35833 2.61523 8.77254C2.61523 9.18675 2.95102 9.52254 3.36523 9.52254H5.1582V11.0692L3.38248 12.7049C3.07782 12.9856 3.05836 13.4601 3.339 13.7647C3.61965 14.0694 4.09412 14.0888 4.39877 13.8082L10.2843 8.38652V10.5302C10.2843 11.4231 9.5099 12.2129 8.47123 12.2129C8.28703 12.2129 8.11062 12.1876 7.94518 12.1411C7.54642 12.029 7.13229 12.2614 7.02021 12.6601C6.90812 13.0589 7.14051 13.473 7.53927 13.5851C7.83596 13.6685 8.14892 13.7129 8.47123 13.7129C9.71498 13.7129 10.8279 13.0443 11.3927 12.0355L13.0897 13.4618C13.4068 13.7283 13.8799 13.6873 14.1464 13.3702C14.4129 13.0531 14.3719 12.58 14.0548 12.3135L11.7843 10.4052V9.52254H13.634C14.0482 9.52254 14.384 9.18675 14.384 8.77254C14.384 8.35833 14.0482 8.02254 13.634 8.02254H11.7843V7.00473L13.9182 5.039C14.2228 4.75836 14.2423 4.28389 13.9616 3.97923C13.681 3.67458 13.2065 3.65512 12.9019 3.93576L6.6582 9.68737V6.88115C6.6582 5.98821 7.43256 5.19844 8.47123 5.19844L8.4789 5.19846L8.50782 5.22276L8.53124 5.19934C8.72739 5.20523 8.91424 5.23987 9.08781 5.29818C9.48045 5.43009 9.90569 5.21873 10.0376 4.82608C10.146 4.50351 10.0227 4.15895 9.75749 3.97309L10.4258 3.30474C10.7187 3.01185 10.7187 2.53698 10.4258 2.24408C10.1329 1.95119 9.65807 1.95119 9.36518 2.24408L8.41985 3.18941L7.20604 2.16925C6.88895 1.90274 6.41585 1.94375 6.14934 2.26085Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const DeploymentIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"13\" height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M6.83531 7.0062C6.64515 7.35069 6.15 7.35069 5.95984 7.0062L2.99029 1.62664C2.7855 1.25565 3.10614 0.814077 3.5223 0.893977L6.30195 1.42765C6.36421 1.43961 6.42818 1.43961 6.49044 1.42766L9.27301 0.893806C9.68915 0.813965 10.0097 1.25552 9.80495 1.62648L6.83531 7.0062Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.77553 6.93249C4.70399 6.80288 4.52254 6.79459 4.4558 6.92674C4.30167 7.23196 4.21484 7.57697 4.21484 7.94226C4.21484 9.18814 5.22483 10.1981 6.4707 10.1981C7.71658 10.1981 8.72656 9.18814 8.72656 7.94226C8.72656 7.51818 8.60954 7.12143 8.40603 6.78254C8.33262 6.66031 8.15949 6.67411 8.09059 6.79894L7.70941 7.48947C7.13892 8.52294 5.65347 8.52293 5.08299 7.48947L4.77553 6.93249ZM5.56313 5.8764C5.46196 5.92091 5.42707 6.04354 5.48048 6.1403L5.95846 7.0062C6.14862 7.35069 6.64377 7.35069 6.83393 7.0062L7.33905 6.09115C7.39467 5.99039 7.35417 5.86275 7.2461 5.8232C7.00431 5.7347 6.74315 5.6864 6.4707 5.6864C6.14785 5.6864 5.84083 5.75423 5.56313 5.8764Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.01974 3.49407C4.17993 3.78426 4.54405 3.88541 4.85312 3.76562C5.35484 3.57118 5.90031 3.46453 6.4707 3.46453C7.0005 3.46453 7.50881 3.55654 7.98052 3.72545C8.28711 3.83523 8.64168 3.73133 8.79906 3.44623C8.96234 3.15043 8.85109 2.77497 8.5364 2.652C7.89621 2.40184 7.19949 2.26453 6.4707 2.26453C5.69013 2.26453 4.94634 2.42205 4.2694 2.70703C3.96395 2.83562 3.85958 3.20392 4.01974 3.49407ZM9.9461 4.47216C9.81565 4.70848 9.85645 4.99948 10.0211 5.21339C10.6026 5.96887 10.9484 6.91518 10.9484 7.94226C10.9484 10.4152 8.94369 12.42 6.4707 12.42C3.99772 12.42 1.99297 10.4152 1.99297 7.94226C1.99297 6.96004 2.30923 6.05168 2.84547 5.31345C3.0006 5.09989 3.03605 4.81591 2.90848 4.58482C2.70986 4.22501 2.22216 4.15342 1.97124 4.47893C1.2324 5.43738 0.792968 6.6385 0.792968 7.94226C0.792969 11.078 3.33498 13.62 6.4707 13.62C9.60643 13.62 12.1484 11.078 12.1484 7.94226C12.1484 6.58193 11.67 5.33333 10.8723 4.35553C10.6173 4.04298 10.141 4.11901 9.9461 4.47216Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const DividerIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M8.5 3V13\" stroke=\"currentColor\" strokeWidth=\"0.5\" />\n </svg>\n);\n","import React from 'react';\n\nexport const DocsIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.1747 3.18598L7.02554 1.95209C7.11557 1.89207 7.31087 1.87106 7.41016 1.90924L12.4139 3.83377C12.4683 3.85467 12.546 3.96798 12.546 4.03118V13.0167C12.546 13.265 12.7473 13.4663 12.9956 13.4663C13.2439 13.4663 13.4452 13.265 13.4452 13.0167V4.03118C13.4452 3.59605 13.1384 3.14906 12.7367 2.99456L7.73293 1.07004C7.36225 0.927472 6.86056 0.981451 6.52679 1.20396L4.20445 2.75219L3.90419 2.95236L3.90647 2.95824C3.69329 3.05449 3.55469 3.27599 3.55469 3.57581V11.7119C3.55469 12.2084 3.93067 12.7499 4.39251 12.9206L9.89804 14.955C10.3608 15.126 10.7359 14.8596 10.7359 14.3659V5.83295C10.7359 5.33662 10.3498 4.81289 9.88389 4.66643L5.1747 3.18598Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const EnvIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <rect x=\"2.74902\" y=\"1.89307\" width=\"11.8252\" height=\"11.8252\" rx=\"1.5\" stroke=\"currentColor\" />\n <path\n d=\"M5.74512 5.43539L8.13964 7.83011L5.86867 10.1011M9.32711 10.1753H11.7465\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const FiltersIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.00001 12.5C6.00001 11.948 6.44401 11.5 7.00001 11.5H10C10.552 11.5 11 11.944 11 12.5C11 13.052 10.556 13.5 10 13.5H7.00001C6.44801 13.5 6.00001 13.056 6.00001 12.5ZM4.00001 8.5C4.00001 7.948 4.44601 7.5 4.99801 7.5H12.002C12.553 7.5 13 7.944 13 8.5C13 9.052 12.554 9.5 12.002 9.5H4.99801C4.86671 9.50026 4.73665 9.47457 4.61531 9.42438C4.49398 9.37419 4.38377 9.30051 4.29102 9.20757C4.19827 9.11464 4.12481 9.00428 4.07486 8.88284C4.02492 8.76141 3.99948 8.6313 4.00001 8.5ZM1.50001 4C1.50001 3.172 2.17501 2.5 2.99801 2.5H14.002C14.829 2.5 15.5 3.166 15.5 4C15.5 4.828 14.825 5.5 14.002 5.5H2.99801C2.80101 5.5004 2.60587 5.46185 2.42382 5.38659C2.24176 5.31132 2.07638 5.20082 1.93717 5.06142C1.79796 4.92203 1.68768 4.7565 1.61265 4.57434C1.53763 4.39219 1.49935 4.197 1.50001 4Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const GithubCoinIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"127\" height=\"86\" viewBox=\"0 0 127 86\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M63.9116 1.87891C29.4266 1.87891 1.47095 16.5591 1.47095 34.668V52.1534C1.47095 70.2623 29.4266 84.9425 63.9116 84.9425C98.3967 84.9425 126.352 70.2623 126.352 52.1534V34.668C126.352 16.5591 98.3967 1.87891 63.9116 1.87891Z\"\n stroke=\"#707070\"\n />\n <path\n d=\"M120.233 36.0742C120.233 51.2701 95.0169 63.5889 63.9111 63.5889C32.8053 63.5889 7.58911 51.2701 7.58911 36.0742V50.7469C7.58911 65.9429 32.8053 78.2616 63.9111 78.2616C95.0169 78.2616 120.233 65.9429 120.233 50.7469V36.0742Z\"\n fill=\"#2E2E2E\"\n fillOpacity=\"0.9\"\n />\n <path\n d=\"M120.233 36.0742C120.233 51.2701 95.0169 63.5889 63.9111 63.5889C32.8053 63.5889 7.58911 51.2701 7.58911 36.0742M120.233 36.0742C120.233 20.8783 95.0169 8.55957 63.9111 8.55957C32.8053 8.55957 7.58911 20.8783 7.58911 36.0742M120.233 36.0742V50.7469C120.233 65.9429 95.0169 78.2616 63.9111 78.2616C32.8053 78.2616 7.58911 65.9429 7.58911 50.7469V36.0742\"\n stroke=\"#424242\"\n />\n <g clipPath=\"url(#clip0_21999_20545)\">\n <path\n d=\"M86.4812 24.847C73.5239 18.4672 52.5342 18.4672 39.5769 24.847C29.1993 29.9566 27.1473 37.5778 33.3621 43.6978C34.3295 44.3762 35.4728 44.2463 36.0884 43.9432C36.6454 43.6689 38.4629 42.7452 40.4271 41.7781C33.45 39.4109 34.4468 37.419 35.2969 36.5385C35.7073 36.0766 36.6454 34.4889 36.2057 33.7239C35.8246 33.1032 35.7366 31.9918 37.7301 32.9445C39.6062 33.8394 39.1958 35.3405 38.932 35.9034C37.4955 38.6892 41.8635 39.8584 43.8276 40.2192C45.5572 39.5697 47.1989 39.3676 48.4594 39.4109C43.8276 36.553 40.3977 32.8723 49.3682 28.4555C51.9186 27.1997 54.9381 26.6079 58.0748 26.5358C58.4266 26.1316 60.0096 24.5439 64.5241 23.5912C64.5241 23.5912 67.1039 24.2552 68.5696 27.9503C70.9735 28.6143 73.2307 29.4659 75.2242 30.4474C77.2176 31.4289 78.9472 32.5403 80.2957 33.7239C87.8297 34.4312 89.1489 35.7158 89.1489 35.7158C87.2141 37.9386 83.9894 38.7181 83.1686 38.8913C83.022 40.4357 81.8494 41.908 79.2697 43.1782C70.2699 47.6094 62.7945 45.8918 56.9901 43.6112C57.1074 44.3906 56.4331 45.4443 54.2345 46.5269C51.0978 48.0713 48.5474 49.2982 47.7558 49.6879C47.1402 49.991 46.8471 50.5684 48.2542 51.0303C54.4816 52.5487 61.5193 53.0674 68.3768 52.5133C75.2342 51.9592 81.5661 50.3602 86.4812 47.9414C99.4385 41.5616 99.4385 31.2268 86.4812 24.847Z\"\n fill=\"#A9A9A9\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_21999_20545\">\n <rect\n width=\"62.7591\"\n height=\"62.7591\"\n fill=\"white\"\n transform=\"matrix(0.897148 0.441731 -0.897148 0.441731 64.0828 8.1543)\"\n />\n </clipPath>\n </defs>\n </svg>\n);\n","import React from 'react';\n\nexport const GithubIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#clip0_21999_22095)\">\n <path\n d=\"M7.5 0.75C3.6325 0.75 0.5 3.8825 0.5 7.75C0.5 10.8475 2.50375 13.4637 5.28625 14.3912C5.63625 14.4525 5.7675 14.2425 5.7675 14.0587C5.7675 13.8925 5.75875 13.3412 5.75875 12.755C4 13.0787 3.545 12.3262 3.405 11.9325C3.32625 11.7312 2.985 11.11 2.6875 10.9437C2.4425 10.8125 2.0925 10.4887 2.67875 10.48C3.23 10.4712 3.62375 10.9875 3.755 11.1975C4.385 12.2562 5.39125 11.9587 5.79375 11.775C5.855 11.32 6.03875 11.0137 6.24 10.8387C4.6825 10.6637 3.055 10.06 3.055 7.3825C3.055 6.62125 3.32625 5.99125 3.7725 5.50125C3.7025 5.32625 3.4575 4.60875 3.8425 3.64625C3.8425 3.64625 4.42875 3.4625 5.7675 4.36375C6.3275 4.20625 6.9225 4.1275 7.5175 4.1275C8.1125 4.1275 8.7075 4.20625 9.2675 4.36375C10.6062 3.45375 11.1925 3.64625 11.1925 3.64625C11.5775 4.60875 11.3325 5.32625 11.2625 5.50125C11.7087 5.99125 11.98 6.6125 11.98 7.3825C11.98 10.0687 10.3438 10.6637 8.78625 10.8387C9.04 11.0575 9.25875 11.4775 9.25875 12.1337C9.25875 13.07 9.25 13.8225 9.25 14.0587C9.25 14.2425 9.38125 14.4612 9.73125 14.3912C11.1209 13.9221 12.3284 13.029 13.1839 11.8377C14.0393 10.6463 14.4996 9.21668 14.5 7.75C14.5 3.8825 11.3675 0.75 7.5 0.75Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_21999_22095\">\n <rect width=\"14\" height=\"14\" fill=\"currentColor\" transform=\"translate(0.5 0.75)\" />\n </clipPath>\n </defs>\n </svg>\n);\n","import React from 'react';\n\nexport const GoogleIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#clip0_21999_20513)\">\n <path\n d=\"M13.5037 7.54867C13.5037 7.1144 13.4648 6.69683 13.3924 6.29596H7.62436V8.66776H10.9204C10.7756 9.43052 10.3413 10.0764 9.68994 10.5106V12.0529H11.6776C12.8356 10.9839 13.5037 9.41382 13.5037 7.54867Z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M7.62415 13.5339C9.27773 13.5339 10.6643 12.9882 11.6776 12.0529L9.68994 10.5106C9.14431 10.8781 8.44816 11.1009 7.62415 11.1009C6.03182 11.1009 4.67889 10.0263 4.19451 8.57877H2.15677V10.16C3.1645 12.1587 5.23008 13.5339 7.62415 13.5339Z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M4.19472 8.57315C4.07223 8.20569 3.99985 7.81595 3.99985 7.40952C3.99985 7.00308 4.07223 6.61335 4.19472 6.24589V4.66469H2.15698C1.73941 5.4887 1.5 6.41849 1.5 7.40952C1.5 8.40055 1.73941 9.33034 2.15698 10.1543L3.74374 8.91834L4.19472 8.57315Z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M7.62415 3.72376C8.5261 3.72376 9.32783 4.03555 9.96811 4.63685L11.7219 2.88306C10.6585 1.89202 9.27773 1.28516 7.62415 1.28516C5.23008 1.28516 3.16471 2.66036 2.15698 4.66469L4.19472 6.24589C4.6791 4.79832 6.03182 3.72376 7.62415 3.72376Z\"\n fill=\"#EA4335\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_21999_20513\">\n <rect width=\"12.2487\" height=\"12.2487\" fill=\"white\" transform=\"translate(1.375 1.28516)\" />\n </clipPath>\n </defs>\n </svg>\n);\n","import React from 'react';\n\nexport const RepoIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"21\" height=\"21\" viewBox=\"0 0 21 21\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.15562 2.79004C4.56136 2.78745 3.26758 4.07913 3.26758 5.6734V13.8135C3.26758 15.4058 4.55831 16.6967 6.15062 16.6968L6.16797 16.6968V14.8218L6.15082 14.8218C5.59397 14.8218 5.14258 14.3703 5.14258 13.8135V13.4325C5.14258 12.8756 5.59415 12.4241 6.15112 12.4242L15.0001 12.4258L15.0056 14.8228L12.6035 14.8226V16.6976L16.8849 16.698L16.8713 10.7717V2.80745L6.15562 2.79004ZM14.9963 10.5508V4.67941L6.15257 4.66504C5.59503 4.66413 5.14258 5.11586 5.14258 5.6734V10.7304C5.4566 10.6132 5.79655 10.5491 6.15147 10.5492L14.9963 10.5508Z\"\n fill=\"#939393\"\n />\n <path d=\"M7.55469 13.6982H11.2655V18.6897L9.41007 17.1997L7.55469 18.6897V13.6982Z\" fill=\"#939393\" />\n </svg>\n);\n","import React from 'react';\n\nexport const HomeIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"13\" height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M3.84766 10.1444H9.11328\" stroke=\"currentColor\" strokeWidth=\"1.33333\" strokeLinecap=\"round\" />\n <path\n d=\"M11.1395 12.9536L1.82388 12.9535C1.4557 12.9535 1.15723 12.655 1.15723 12.2868V5.69147C1.15723 5.49041 1.24796 5.30009 1.40417 5.17351L6.07746 1.38658C6.32202 1.18841 6.67185 1.18829 6.91654 1.38629L11.5589 5.14286C11.7153 5.26944 11.8062 5.45989 11.8062 5.66111V12.287C11.8062 12.6552 11.5077 12.9536 11.1395 12.9536Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.33333\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const InfoIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M7.07303 7.39921C6.65882 7.39921 6.32303 7.735 6.32303 8.14921C6.32303 8.56343 6.65882 8.89921 7.07303 8.89921H7.75V10.6187C7.75 11.0329 8.08579 11.3687 8.5 11.3687C8.91421 11.3687 9.25 11.0329 9.25 10.6187V8.14921C9.25 7.735 8.91421 7.39921 8.5 7.39921H7.07303Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M8.50309 4.72995C7.9971 4.72995 7.58691 5.14014 7.58691 5.64613C7.58691 6.15212 7.9971 6.56231 8.50309 6.56231C9.00908 6.56231 9.41927 6.15212 9.41927 5.64613C9.41927 5.14014 9.00908 4.72995 8.50309 4.72995Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.5 1.75293C5.04984 1.75293 2.25293 4.54984 2.25293 8C2.25293 11.4502 5.04984 14.2471 8.5 14.2471C11.9502 14.2471 14.7471 11.4502 14.7471 8C14.7471 4.54984 11.9502 1.75293 8.5 1.75293ZM3.75293 8C3.75293 5.37827 5.87827 3.25293 8.5 3.25293C11.1218 3.25293 13.2471 5.37826 13.2471 8C13.2471 10.6218 11.1218 12.7471 8.5 12.7471C5.87826 12.7471 3.75293 10.6218 3.75293 8Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const JudgeIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M4.31445 3.16083C3.78402 3.16083 3.27531 3.37154 2.90024 3.74661C2.52517 4.12169 2.31445 4.63039 2.31445 5.16083V5.66083C2.31445 6.19126 2.52517 6.69997 2.90024 7.07504C3.27531 7.45011 3.78402 7.66083 4.31445 7.66083C4.84489 7.66083 5.35359 7.45011 5.72867 7.07504C6.10374 6.69997 6.31445 6.19126 6.31445 5.66083V5.16083C6.31445 4.63039 6.10374 4.12169 5.72867 3.74661C5.35359 3.37154 4.84489 3.16083 4.31445 3.16083Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M6.76666 9.50235C6.57678 9.28532 6.30244 9.16083 6.01407 9.16083H4.50201C4.10791 9.16078 3.71766 9.23838 3.35356 9.38921C3.11733 9.48706 2.8951 9.6145 2.69205 9.76806C2.48056 9.928 2.38001 10.1888 2.38001 10.454V13.0642C2.38001 13.6165 2.82773 14.0642 3.38001 14.0642H8.55436C9.4135 14.0642 9.87269 13.0523 9.30695 12.4057L6.76666 9.50235Z\"\n fill=\"currentColor\"\n />\n <rect x=\"7.92188\" y=\"6.46759\" width=\"1.41089\" height=\"1.56773\" rx=\"0.705445\" fill=\"currentColor\" />\n <rect x=\"10.4258\" y=\"4.35107\" width=\"1.41089\" height=\"3.72998\" rx=\"0.705445\" fill=\"currentColor\" />\n <rect x=\"12.9287\" y=\"2.23419\" width=\"1.41089\" height=\"5.75781\" rx=\"0.705445\" fill=\"currentColor\" />\n </svg>\n);\n","import React from 'react';\n\nexport const LogsIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 10.0412 8.39395\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M0 0.916539C0 0.410349 0.410349 0 0.916539 0C1.42273 0 1.83308 0.410349 1.83308 0.916539C1.83308 1.42273 1.42273 1.83308 0.916539 1.83308C0.410349 1.83308 0 1.42273 0 0.916539Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M2.88569 0.916539C2.88569 0.410349 3.29604 0 3.80223 0C4.30842 0 4.71877 0.410349 4.71877 0.916539C4.71877 1.42273 4.30842 1.83308 3.80223 1.83308C3.29604 1.83308 2.88569 1.42273 2.88569 0.916539Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M5.77139 0.916539C5.77139 0.410349 6.18174 0 6.68793 0H9.12465C9.63084 0 10.0412 0.410349 10.0412 0.916539C10.0412 1.42273 9.63084 1.83308 9.12465 1.83308H6.68793C6.18174 1.83308 5.77139 1.42273 5.77139 0.916539Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M0 4.19696C0 3.69077 0.410351 3.28042 0.916541 3.28042C1.42273 3.28042 1.83308 3.69077 1.83308 4.19696C1.83308 4.70315 1.42273 5.1135 0.916541 5.1135C0.410351 5.1135 0 4.70315 0 4.19696Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M2.8857 4.19694C2.8857 3.69075 3.29605 3.2804 3.80224 3.2804C4.30843 3.2804 4.71877 3.69075 4.71877 4.19694C4.71877 4.70313 4.30843 5.11348 3.80224 5.11348C3.29605 5.11348 2.8857 4.70313 2.8857 4.19694Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M5.77139 4.19694C5.77139 3.69075 6.18174 3.2804 6.68793 3.2804H9.12466C9.63085 3.2804 10.0412 3.69075 10.0412 4.19694C10.0412 4.70313 9.63085 5.11348 9.12466 5.11348H6.68793C6.18174 5.11348 5.77139 4.70313 5.77139 4.19694Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M0 7.47738C0 6.97119 0.410351 6.56084 0.916541 6.56084C1.42273 6.56084 1.83308 6.97119 1.83308 7.47738C1.83308 7.98357 1.42273 8.39392 0.916541 8.39392C0.410351 8.39392 0 7.98357 0 7.47738Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M2.8857 7.47741C2.8857 6.97122 3.29605 6.56087 3.80224 6.56087C4.30843 6.56087 4.71877 6.97122 4.71877 7.47741C4.71877 7.9836 4.30843 8.39395 3.80224 8.39395C3.29605 8.39395 2.8857 7.9836 2.8857 7.47741Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M5.77139 7.47741C5.77139 6.97122 6.18174 6.56087 6.68793 6.56087H9.12466C9.63085 6.56087 10.0412 6.97122 10.0412 7.47741C10.0412 7.9836 9.63085 8.39395 9.12466 8.39395H6.68793C6.18174 8.39395 5.77139 7.9836 5.77139 7.47741Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const MemoryIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M3.8674 9.19968L4.14554 10.8649C4.23965 11.4283 4.75254 11.8237 5.32137 11.7713L5.58252 11.7472C6.56555 11.6567 7.43309 12.3868 7.51181 13.3708L7.59308 14.3867C7.60422 14.5259 7.71868 14.6342 7.85825 14.6376L9.91053 14.6876C10.1066 14.6924 10.2434 14.4948 10.17 14.3129L8.90452 11.1782C8.80956 10.9429 8.65085 10.7389 8.44626 10.5889L7.90134 10.1895C7.70604 10.0464 7.55223 9.85411 7.45759 9.63124C7.15011 8.90712 6.6579 7.71234 6.37054 6.88944C6.19204 6.3783 5.79931 6.29158 5.45492 6.21553C4.98179 6.11106 4.5999 6.02673 4.99001 4.88985C5.66408 2.92541 8.06015 2.07904 10.6601 3.33088C12.6488 4.2884 13.1187 6.35416 13.0328 7.58237C13.0297 7.62768 13.0214 7.67186 13.0094 7.71566C12.8829 8.17534 12.368 8.40491 11.9415 8.19169L10.3022 7.37201C10.2069 7.32439 10.0927 7.33657 10.0096 7.40322L8.64809 8.49559C8.55405 8.57104 8.52072 8.69931 8.56615 8.811L10.8995 14.5478C10.9404 14.6483 11.0369 14.715 11.1454 14.7177L12.0572 14.7399C12.2581 14.7448 12.3951 14.5382 12.3124 14.3551L11.8681 13.3706C11.4211 12.3803 11.6047 11.2192 12.3354 10.4151L13.4616 9.17575C13.7473 8.86125 13.9224 8.46187 13.9599 8.03858L13.9763 7.85359C14.2866 4.35298 11.377 1.41272 7.87336 1.68639C6.03919 1.82965 4.45399 3.02228 3.80807 4.74492L3.70275 5.02579C3.5828 5.34571 3.62741 5.70411 3.82213 5.98485L3.88946 6.08192C4.12183 6.41695 4.0958 6.86726 3.82637 7.17328L3.06705 8.03572C2.96261 8.15435 2.98058 8.33664 3.10617 8.43259L3.66059 8.85617C3.77064 8.94026 3.84458 9.06307 3.8674 9.19968Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const OpenAIIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"12\" height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M10.1266 5.67745C10.3409 5.0225 10.2695 4.2961 9.92413 3.70069C9.40017 2.78376 8.34034 2.31934 7.30433 2.53369C6.85182 2.02164 6.18496 1.73584 5.49428 1.73584C4.43445 1.73584 3.50561 2.41461 3.17218 3.4149C2.49342 3.55779 1.90992 3.97458 1.56458 4.5819C1.04062 5.49883 1.1597 6.64202 1.86228 7.42796C1.64793 8.09482 1.73129 8.80931 2.07663 9.40472C2.60059 10.3217 3.66042 10.798 4.69643 10.5717C5.16085 11.0838 5.8158 11.3815 6.50648 11.3815C7.56631 11.3815 8.49515 10.7027 8.82858 9.70243C9.50735 9.55953 10.0908 9.14274 10.4362 8.53542C10.9601 7.61849 10.8411 6.46339 10.1266 5.67745ZM6.50648 10.7503C6.07778 10.7503 5.67291 10.6074 5.35138 10.3336C5.36329 10.3217 5.39902 10.3097 5.41093 10.2978L7.32815 9.19037C7.42341 9.13083 7.48295 9.03557 7.48295 8.91648V6.21332L8.29271 6.67774C8.30462 6.67774 8.30462 6.68965 8.30462 6.70156V8.9403C8.31653 9.94059 7.50677 10.7503 6.50648 10.7503ZM2.62441 9.09511C2.41006 8.72595 2.33861 8.29726 2.41006 7.88047C2.42197 7.89238 2.44578 7.90429 2.4696 7.91619L4.38682 9.02366C4.48209 9.0832 4.60117 9.0832 4.69643 9.02366L7.04235 7.66612V8.60687C7.04235 8.61878 7.04235 8.63069 7.03044 8.63069L5.0894 9.75006C4.23201 10.2502 3.12455 9.9525 2.62441 9.09511ZM2.12426 4.90342C2.33861 4.53427 2.67204 4.26038 3.06501 4.10557V6.39195C3.06501 6.49912 3.12455 6.60629 3.21982 6.66583L5.56573 8.02337L4.75597 8.48779C4.74407 8.48779 4.73216 8.4997 4.73216 8.48779L2.79112 7.36842C1.90992 6.86827 1.62412 5.76081 2.12426 4.90342ZM8.79285 6.45149L6.44694 5.09395L7.2567 4.62953C7.2686 4.62953 7.28051 4.61762 7.28051 4.62953L9.22155 5.7489C10.0908 6.24905 10.3766 7.35651 9.8765 8.2139C9.66215 8.58305 9.32872 8.85694 8.93575 8.99984V6.72538C8.94766 6.6182 8.88812 6.51103 8.79285 6.45149ZM9.5907 5.23685C9.5788 5.22494 9.55498 5.21303 9.53116 5.20113L7.61394 4.09366C7.51868 4.03412 7.39959 4.03412 7.30433 4.09366L4.95841 5.4512V4.51045C4.95841 4.49854 4.95841 4.48663 4.97032 4.48663L6.91136 3.36726C7.78066 2.86712 8.87621 3.16482 9.37636 4.03412C9.5907 4.39137 9.66215 4.82006 9.5907 5.23685ZM4.51781 6.904L3.70805 6.43958C3.69615 6.43958 3.69615 6.42767 3.69615 6.41576V4.17702C3.69615 3.17673 4.5059 2.36697 5.50619 2.36697C5.93489 2.36697 6.33977 2.50987 6.66129 2.78376C6.64938 2.79567 6.62556 2.80758 6.60175 2.81949L4.68453 3.92695C4.58926 3.98649 4.52972 4.08176 4.52972 4.20084V6.904H4.51781ZM4.95841 5.95134L6.00634 5.34402L7.05426 5.95134V7.15407L6.00634 7.76139L4.95841 7.15407V5.95134Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const PromptIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 11.185 11.185\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.57258 2.71626C9.57245 2.19794 9.14778 1.77075 8.61819 1.77075H2.56605C2.0377 1.77075 1.61179 2.19752 1.61165 2.71626V6.51162C1.61179 7.02856 2.03401 7.45487 2.5616 7.45713L3.12802 7.45935V9.21487L5.52178 7.55857L5.66764 7.45713H8.61819C9.14653 7.45713 9.57245 7.03036 9.57258 6.51162V2.71626ZM10.7099 6.51162C10.7097 7.66541 9.76766 8.59441 8.61819 8.59441H6.0223L3.51081 10.3336C3.25841 10.5083 2.86505 10.6555 2.4809 10.4558C2.09483 10.2551 1.99075 9.84577 1.99075 9.53473V8.51222C1.11705 8.26321 0.474488 7.46395 0.474378 6.51162V2.71626C0.474511 1.56248 1.41657 0.633479 2.56605 0.633479H8.61819C9.77051 0.633479 10.7097 1.56448 10.7099 2.71626V6.51162Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const SettingsIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"18\" viewBox=\"0 0 17 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.40864 11.9983C7.58064 11.9733 6.84164 11.6153 6.31564 11.0563C6.31464 11.0563 6.31464 11.0553 6.31464 11.0553C5.78864 10.4963 5.47564 9.73633 5.50064 8.90833C5.52564 8.08033 5.88464 7.34133 6.44364 6.81533C7.00264 6.28833 7.76264 5.97633 8.59064 6.00133C9.41864 6.02633 10.1576 6.38433 10.6836 6.94333H10.6846C11.2106 7.50333 11.5236 8.26233 11.4986 9.09033C11.4726 9.91833 11.1146 10.6583 10.5556 11.1843C9.99664 11.7103 9.23664 12.0233 8.40864 11.9983ZM16.1266 8.15033L14.3606 7.74033C14.2316 7.14133 14.0146 6.57633 13.7216 6.05733L14.7726 4.57933C14.9116 4.38533 14.8926 4.12033 14.7296 3.94633L13.9206 3.08733C13.7576 2.91333 13.4946 2.87933 13.2916 3.00533L11.7526 3.96533C11.2526 3.64133 10.7016 3.39033 10.1116 3.22633L9.80964 1.43833C9.76964 1.20333 9.56964 1.02833 9.33164 1.02133L8.15264 0.985326C7.91364 0.978326 7.70364 1.14033 7.64964 1.37233L7.24064 3.13933C6.64164 3.26733 6.07664 3.48433 5.55664 3.77733L4.07864 2.72633C3.88464 2.58833 3.61964 2.60633 3.44664 2.76933L2.58664 3.57833C2.41364 3.74133 2.37964 4.00533 2.50564 4.20733L3.46564 5.74633C3.14164 6.24633 2.89064 6.79833 2.72564 7.38833L0.937635 7.68933C0.702635 7.72933 0.528635 7.92933 0.520635 8.16733L0.485635 9.34733C0.477635 9.58533 0.639635 9.79533 0.872635 9.84933L2.63864 10.2583C2.76764 10.8573 2.98464 11.4233 3.27764 11.9423L2.22564 13.4203C2.08764 13.6143 2.10564 13.8793 2.26964 14.0523L3.07864 14.9123C3.24164 15.0853 3.50464 15.1203 3.70664 14.9933L5.24564 14.0333C5.74663 14.3583 6.29764 14.6093 6.88764 14.7733L7.18964 16.5613C7.22864 16.7963 7.42864 16.9713 7.66764 16.9783L8.84663 17.0143C9.08564 17.0213 9.29564 16.8593 9.34964 16.6273L9.75864 14.8603C10.3576 14.7323 10.9226 14.5153 11.4416 14.2213L12.9206 15.2733C13.1146 15.4113 13.3786 15.3933 13.5526 15.2293L14.4116 14.4213C14.5856 14.2573 14.6196 13.9943 14.4936 13.7923L13.5336 12.2533C13.8576 11.7523 14.1086 11.2013 14.2726 10.6113L16.0616 10.3103C16.2966 10.2703 16.4706 10.0703 16.4776 9.83233L16.5136 8.65233C16.5206 8.41433 16.3586 8.20433 16.1266 8.15033Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import { Wand2 } from 'lucide-react';\nimport React from 'react';\n\nexport const SkillIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <Wand2 {...(props as React.ComponentProps<typeof Wand2>)} />\n);\n","import React from 'react';\n\nexport const TraceIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 9.45892 8.88606\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M8.53702 7.36403C8.98547 7.36403 9.34918 7.70502 9.34918 8.12535C9.34906 8.54559 8.9854 8.88606 8.53702 8.88606H5.6839C5.23552 8.88606 4.87186 8.54559 4.87174 8.12535C4.87174 7.70502 5.23545 7.36403 5.6839 7.36403H8.53702Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M8.53702 3.67209C8.98547 3.67209 9.34918 4.01309 9.34918 4.43342C9.34911 4.8537 8.98543 5.19413 8.53702 5.19413H5.6839C5.23549 5.19413 4.87181 4.8537 4.87174 4.43342C4.87174 4.01309 5.23545 3.67209 5.6839 3.67209H8.53702Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M8.67155 0C9.10635 2.06584e-05 9.45892 0.341006 9.45892 0.761326C9.45878 1.18153 9.10627 1.52201 8.67155 1.52203H2.88163C2.4469 1.52203 2.0944 1.18154 2.09427 0.761326C2.09427 0.340993 2.44681 3.80132e-08 2.88163 0H8.67155Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M0.757606 0.760086V4.01122H3.50594V4.76883H0.759466L0.762566 5.4291C0.76837 6.70703 1.8058 7.73972 3.08374 7.73973H3.67953V8.49796H3.08374C1.38863 8.49795 0.0120204 7.1273 0.00433981 5.4322L0 4.39188V0.760086H0.757606Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const TsIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <rect x=\"2.74902\" y=\"1.89307\" width=\"11.8252\" height=\"11.8252\" rx=\"1.5\" stroke=\"currentColor\" />\n <path d=\"M5.64062 7.98265V7.29806H8.86605V7.98265H7.66371V11.2253H6.84297V7.98265H5.64062Z\" fill=\"currentColor\" />\n <path\n d=\"M11.5277 8.42754C11.5124 8.27285 11.4465 8.15268 11.3302 8.06703C11.2138 7.98137 11.056 7.93855 10.8565 7.93855C10.721 7.93855 10.6066 7.95772 10.5133 7.99607C10.42 8.03315 10.3484 8.08492 10.2985 8.1514C10.2499 8.21788 10.2256 8.2933 10.2256 8.37768C10.2231 8.44799 10.2378 8.50936 10.2697 8.56177C10.303 8.61418 10.3484 8.65957 10.4059 8.69792C10.4634 8.73499 10.5299 8.76759 10.6053 8.79572C10.6808 8.82257 10.7613 8.84558 10.8469 8.86475L11.1998 8.94913C11.3711 8.98748 11.5283 9.03862 11.6715 9.10254C11.8147 9.16646 11.9387 9.24508 12.0435 9.3384C12.1484 9.43173 12.2295 9.54167 12.2871 9.66823C12.3459 9.7948 12.3759 9.9399 12.3772 10.1035C12.3759 10.3439 12.3146 10.5523 12.1931 10.7287C12.0729 10.9038 11.8991 11.04 11.6715 11.1371C11.4452 11.233 11.1723 11.2809 10.8527 11.2809C10.5357 11.2809 10.2595 11.2324 10.0243 11.1352C9.79034 11.038 9.60753 10.8942 9.47585 10.7037C9.34545 10.512 9.27706 10.2748 9.27067 9.99231H10.0741C10.0831 10.124 10.1208 10.2339 10.1873 10.3221C10.255 10.4091 10.3452 10.4749 10.4577 10.5197C10.5714 10.5631 10.6999 10.5849 10.8431 10.5849C10.9837 10.5849 11.1058 10.5644 11.2094 10.5235C11.3142 10.4826 11.3954 10.4257 11.4529 10.3528C11.5104 10.28 11.5392 10.1962 11.5392 10.1016C11.5392 10.0134 11.513 9.93926 11.4606 9.87917C11.4094 9.81909 11.334 9.76795 11.2343 9.72576C11.1359 9.68357 11.0151 9.64522 10.8719 9.6107L10.4442 9.50332C10.1131 9.42278 9.8517 9.29686 9.65994 9.12555C9.46818 8.95424 9.37294 8.72349 9.37422 8.43329C9.37294 8.19551 9.43622 7.98776 9.56406 7.81007C9.69318 7.63237 9.87024 7.49366 10.0952 7.39394C10.3202 7.29423 10.5759 7.24437 10.8623 7.24437C11.1538 7.24437 11.4082 7.29423 11.6255 7.39394C11.8441 7.49366 12.0141 7.63237 12.1356 7.81007C12.257 7.98776 12.3197 8.19359 12.3235 8.42754H11.5277Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const VariablesIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M15.4997 7.97482V8.6501C15.0469 8.6501 14.7307 8.75585 14.5512 8.96735C14.3717 9.17885 14.2819 9.52631 14.2819 10.0097V11.315C14.2819 11.7773 14.235 12.1655 14.1413 12.4797C14.0502 12.797 13.9095 13.0508 13.7193 13.2411C13.529 13.4315 13.2879 13.5689 12.9958 13.6535C12.7038 13.7381 12.3594 13.7804 11.9629 13.7804V12.7063C12.2737 12.7063 12.5162 12.6535 12.6904 12.5477C12.8645 12.445 12.9851 12.2848 13.0521 12.0673C13.1217 11.8528 13.1566 11.5794 13.1566 11.247V9.59731C13.1566 9.36467 13.1874 9.15015 13.249 8.95376C13.3106 8.75434 13.4245 8.58212 13.5906 8.4371C13.7568 8.28905 13.9939 8.17575 14.302 8.09719C14.6102 8.01561 15.0094 7.97482 15.4997 7.97482ZM11.9629 2.21906C12.3594 2.21906 12.7038 2.26135 12.9958 2.34595C13.2879 2.43055 13.529 2.56803 13.7193 2.75837C13.9095 2.94872 14.0502 3.20252 14.1413 3.51977C14.235 3.83399 14.2819 4.22224 14.2819 4.68452V5.98523C14.2819 6.47168 14.3717 6.82065 14.5512 7.03214C14.7307 7.24062 15.0469 7.34486 15.4997 7.34486V8.02467C15.0094 8.02467 14.6102 7.98389 14.302 7.90231C13.9939 7.82073 13.7568 7.70743 13.5906 7.5624C13.4245 7.41737 13.3106 7.24666 13.249 7.05027C13.1874 6.85086 13.1566 6.63483 13.1566 6.40218V4.7525C13.1566 4.41712 13.1217 4.14218 13.0521 3.92766C12.9851 3.71012 12.8645 3.54998 12.6904 3.44725C12.5162 3.34453 12.2737 3.29316 11.9629 3.29316V2.21906ZM15.4997 7.34486V8.6501H14.3864V7.34486H15.4997Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M7.14024 4.97928L8.50273 7.33122L9.87728 4.97928H11.1915L9.26637 7.99983L11.2076 11.0204H9.89335L8.50273 8.76283L7.11613 11.0204H5.79785L7.719 7.99983L5.82197 4.97928H7.14024Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M1.5 8.02467V7.34486C1.95282 7.34486 2.269 7.24062 2.44852 7.03214C2.62804 6.82065 2.7178 6.47168 2.7178 5.98523V4.68452C2.7178 4.22224 2.76335 3.83399 2.85445 3.51977C2.94823 3.20252 3.09024 2.94872 3.28048 2.75837C3.47072 2.56803 3.71187 2.43055 4.00392 2.34595C4.29598 2.26135 4.64029 2.21906 5.03684 2.21906V3.29316C4.72603 3.29316 4.48354 3.34453 4.30938 3.44725C4.13522 3.54998 4.0133 3.71012 3.94364 3.92766C3.87665 4.14218 3.84316 4.41712 3.84316 4.7525V6.40218C3.84316 6.63483 3.81234 6.85086 3.75072 7.05027C3.68909 7.24666 3.57522 7.41737 3.40909 7.5624C3.24297 7.70743 3.00584 7.82073 2.6977 7.90231C2.38957 7.98389 1.99033 8.02467 1.5 8.02467ZM5.03684 13.7804C4.64029 13.7804 4.29598 13.7381 4.00392 13.6535C3.71187 13.5689 3.47072 13.4315 3.28048 13.2411C3.09024 13.0508 2.94823 12.797 2.85445 12.4797C2.76335 12.1655 2.7178 11.7773 2.7178 11.315V10.0097C2.7178 9.52631 2.62804 9.17885 2.44852 8.96735C2.269 8.75585 1.95282 8.6501 1.5 8.6501V7.97482C1.99033 7.97482 2.38957 8.01561 2.6977 8.09719C3.00584 8.17575 3.24297 8.28905 3.40909 8.4371C3.57522 8.58212 3.68909 8.75434 3.75072 8.95376C3.81234 9.15015 3.84316 9.36467 3.84316 9.59731V11.247C3.84316 11.5794 3.87665 11.8528 3.94364 12.0673C4.0133 12.2848 4.13522 12.445 4.30938 12.5477C4.48354 12.6535 4.72603 12.7063 5.03684 12.7063V13.7804ZM1.5 8.6501V7.34486H2.6133V8.6501H1.5Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const WorkflowCoinIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"126\" height=\"85\" viewBox=\"0 0 126 85\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M119.322 35.1636C119.322 50.3595 94.1055 62.6782 62.9998 62.6782C31.894 62.6782 6.67773 50.3595 6.67773 35.1636V49.8363C6.67773 65.0322 31.894 77.351 62.9998 77.351C94.1055 77.351 119.322 65.0322 119.322 49.8363V35.1636Z\"\n fill=\"#2E2E2E\"\n fillOpacity=\"0.9\"\n />\n <path\n d=\"M119.322 35.1636C119.322 50.3595 94.1055 62.6782 62.9998 62.6782C31.894 62.6782 6.67773 50.3595 6.67773 35.1636M119.322 35.1636C119.322 19.9677 94.1055 7.64893 62.9998 7.64893C31.894 7.64893 6.67773 19.9677 6.67773 35.1636M119.322 35.1636V49.8363C119.322 65.0322 94.1055 77.351 62.9998 77.351C31.894 77.351 6.67773 65.0322 6.67773 49.8363V35.1636\"\n stroke=\"#424242\"\n />\n <path\n d=\"M63.0002 0.968262C28.5152 0.968262 0.55957 15.6484 0.55957 33.7573V51.2428C0.55957 69.3517 28.5152 84.0319 63.0002 84.0319C97.4853 84.0319 125.441 69.3517 125.441 51.2428V33.7573C125.441 15.6484 97.4853 0.968262 63.0002 0.968262Z\"\n stroke=\"#707070\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M74.9374 21.357C76.2127 20.7291 78.2804 20.7291 79.5557 21.357L90.8129 26.8997C92.0882 27.5276 92.0882 28.5458 90.8129 29.1737L83.1638 32.9399C81.8885 33.5678 79.8207 33.5678 78.5454 32.9399L75.8033 31.5898L68.3324 35.2682L64.1502 39.696C63.8908 39.481 63.6138 39.2568 63.3231 39.0227L63.1495 38.883C62.2893 38.1914 61.2677 37.3701 60.6254 36.6376C60.5446 36.5456 60.4618 36.4463 60.3812 36.3407C60.1669 36.3011 59.9652 36.2603 59.7782 36.2205C58.2906 35.9043 56.6225 35.4013 55.2179 34.9777L54.9342 34.8922C54.4589 34.7491 54.0034 34.6127 53.5666 34.4849L62.5594 32.4258L70.0304 28.7473L67.2882 27.3972C66.0129 26.7692 66.0129 25.7512 67.2882 25.1232L74.9374 21.357ZM53.5666 34.4849C53.5666 34.4849 53.5666 34.4849 53.5666 34.4849L46.1603 36.1808L47.516 36.8483C48.7913 37.4762 48.7912 38.4943 47.516 39.1222L39.8668 42.8884C38.5916 43.5163 36.5238 43.5164 35.2485 42.8884L23.9913 37.3457C22.7159 36.7177 22.716 35.6996 23.9913 35.0717L31.6404 31.3055C32.9156 30.6776 34.9834 30.6776 36.2587 31.3055L38.5358 32.4267C39.6899 31.9483 40.9309 31.4611 42.153 31.0313C43.6354 30.5099 45.4001 29.9605 47.091 29.683C49.7278 29.2502 52.3729 29.7072 53.9892 30.0537C55.8019 30.4425 57.6745 31.0055 59.1934 31.4628C60.6081 31.8887 61.6949 32.2154 62.5594 32.4258L53.5666 34.4849ZM46.1603 36.1808L53.5666 34.4849C52.5189 34.1784 51.5786 33.9213 50.7293 33.7392C49.9958 33.5819 49.6114 33.5441 49.4794 33.5326C48.964 33.6384 48.0924 33.8823 46.8983 34.3023C46.0703 34.5936 45.1981 34.9293 44.3325 35.2808L46.1603 36.1808ZM64.1502 39.696L68.3324 35.2682C68.7598 35.6939 69.4232 36.229 70.2883 36.9256C71.2171 37.6735 72.3605 38.5954 73.15 39.488C73.8539 40.2838 74.7818 41.5862 73.9029 42.8844C73.3394 43.717 72.2235 44.5859 71.1648 45.3159C70.2916 45.9175 69.3021 46.5286 68.3305 47.0968L70.6077 48.218C71.8829 48.8459 71.8829 49.864 70.6077 50.4919L62.9585 54.2582C61.6833 54.8861 59.6154 54.8861 58.3402 54.2582L47.083 48.7154C45.8077 48.0875 45.8077 47.0694 47.083 46.4415L54.7321 42.6752C56.0074 42.0474 58.0751 42.0473 59.3505 42.6752L60.7062 43.3428L64.1502 39.696ZM64.1502 39.696L60.7062 43.3428L62.5339 44.2427C63.2478 43.8165 63.9298 43.3871 64.5213 42.9794C65.3742 42.3914 65.8695 41.9622 66.0846 41.7085C66.0613 41.6436 65.9844 41.4543 65.6649 41.0931C65.295 40.6749 64.773 40.212 64.1502 39.696Z\"\n fill=\"#A9A9A9\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const LatencyIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M2.0625 5.99976C2.0625 3.82513 3.82538 2.06226 6 2.06226C6.58712 2.06226 7.14423 2.19076 7.64473 2.42117V1.21042C7.12905 1.03337 6.57575 0.937256 6 0.937256C3.20406 0.937256 0.9375 3.20381 0.9375 5.99976C0.9375 8.7957 3.20406 11.0623 6 11.0623C8.79594 11.0623 11.0625 8.7957 11.0625 5.99976H9.9375C9.9375 8.17438 8.17462 9.93726 6 9.93726C3.82538 9.93726 2.0625 8.17438 2.0625 5.99976Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M9.28577 4.3986C9.08709 4.3986 8.92603 4.23753 8.92603 4.03885V0.978563C8.92603 0.681899 9.16652 0.441406 9.46318 0.441406C9.75985 0.441406 10.0003 0.6819 10.0003 0.978564V3.25858C10.0003 3.33638 10.0634 3.39944 10.1412 3.39944H11.2091C11.485 3.39944 11.7087 3.62311 11.7087 3.89902C11.7087 4.17493 11.485 4.3986 11.2091 4.3986H9.28577Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M6.57568 3.69244C6.57568 3.38178 6.32384 3.12994 6.01318 3.12994C5.70252 3.12994 5.45068 3.38178 5.45068 3.69244V6.22272L6.7242 7.88675C6.91301 8.13346 7.26606 8.18039 7.51276 7.99159C7.75946 7.80278 7.8064 7.44973 7.61759 7.20303L6.57568 5.84162V3.69244Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const McpServerIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 9.52233 10.4982\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M2.39065 4.27882L4.93898 1.73049C5.10578 1.56368 5.37622 1.56368 5.54303 1.73049C5.70983 1.89729 5.70983 2.16773 5.54303 2.33454L2.9947 4.88287C2.53924 5.33834 2.53929 6.0768 2.99475 6.53226C3.45022 6.9877 4.18863 6.98771 4.64409 6.53226L7.19242 3.98393C7.35922 3.81713 7.62967 3.81714 7.79647 3.98393C7.96328 4.15074 7.96328 4.42118 7.79647 4.58798L5.24814 7.13631C4.45907 7.92537 3.17978 7.92536 2.39071 7.13631C1.60163 6.34724 1.60158 5.0679 2.39065 4.27882Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M3.50354 5.43862C3.5236 5.3983 3.55044 5.36049 3.58404 5.32688L6.06565 2.84527C6.52112 2.3898 6.52112 1.65128 6.06565 1.19581C5.61018 0.740366 4.87172 0.740412 4.41626 1.19587L0.729138 4.88287C0.562334 5.04967 0.291892 5.04968 0.125089 4.88287C-0.0416875 4.71607 -0.0417052 4.44562 0.125089 4.27882L3.81221 0.591824C4.60128 -0.197241 5.88062 -0.197289 6.6697 0.591765C7.12856 1.05062 7.32058 1.67529 7.24578 2.27292C7.84449 2.19687 8.47073 2.38872 8.93052 2.84849C9.7196 3.63757 9.7196 4.91697 8.93052 5.70605L8.20316 6.44191L6.20449 8.44058C5.83765 8.80741 5.83765 9.40219 6.20449 9.76902C6.37128 9.93582 6.37129 10.2063 6.20449 10.3731C6.03769 10.5399 5.76724 10.5399 5.60044 10.3731C4.9 9.67263 4.9 8.53697 5.60044 7.83653L7.59911 5.83786L8.32647 5.102C8.78194 4.64653 8.78194 3.90801 8.32647 3.45254C7.871 2.9971 7.13254 2.99714 6.67707 3.4526L4.17576 5.95392C4.00896 6.12072 3.73851 6.12071 3.57171 5.95392C3.43204 5.81425 3.40932 5.60193 3.50354 5.43862Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const FolderIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M1.5 8.5V8C1.5 7.60218 1.65804 7.22064 1.93934 6.93934C2.22064 6.65804 2.60218 6.5 3 6.5H13C13.3978 6.5 13.7794 6.65804 14.0607 6.93934C14.342 7.22064 14.5 7.60218 14.5 8V8.5M8.70667 4.20667L7.29333 2.79333C7.20048 2.70037 7.09022 2.62661 6.96886 2.57628C6.84749 2.52595 6.71739 2.50003 6.586 2.5H3C2.60218 2.5 2.22064 2.65804 1.93934 2.93934C1.65804 3.22064 1.5 3.60218 1.5 4V12C1.5 12.3978 1.65804 12.7794 1.93934 13.0607C2.22064 13.342 2.60218 13.5 3 13.5H13C13.3978 13.5 13.7794 13.342 14.0607 13.0607C14.342 12.7794 14.5 12.3978 14.5 12V6C14.5 5.60218 14.342 5.22064 14.0607 4.93934C13.7794 4.65804 13.3978 4.5 13 4.5H9.414C9.14887 4.49977 8.89402 4.39426 8.70667 4.20667Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const McpCoinIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"126\" height=\"85\" viewBox=\"0 0 126 85\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M119.322 35.1641C119.322 50.36 94.1055 62.6787 62.9998 62.6787C31.894 62.6787 6.67773 50.36 6.67773 35.1641V49.8368C6.67773 65.0327 31.894 77.3514 62.9998 77.3514C94.1055 77.3514 119.322 65.0327 119.322 49.8368V35.1641Z\"\n fill=\"#2E2E2E\"\n fillOpacity=\"0.9\"\n />\n <path\n d=\"M119.322 35.1641C119.322 50.36 94.1055 62.6787 62.9998 62.6787C31.894 62.6787 6.67773 50.36 6.67773 35.1641M119.322 35.1641C119.322 19.9681 94.1055 7.64941 62.9998 7.64941C31.894 7.64941 6.67773 19.9681 6.67773 35.1641M119.322 35.1641V49.8368C119.322 65.0327 94.1055 77.3514 62.9998 77.3514C31.894 77.3514 6.67773 65.0327 6.67773 49.8368V35.1641\"\n stroke=\"#424242\"\n />\n <path\n d=\"M63.0002 0.96875C28.5152 0.96875 0.55957 15.6489 0.55957 33.7578V51.2433C0.55957 69.3522 28.5152 84.0323 63.0002 84.0323C97.4853 84.0323 125.441 69.3522 125.441 51.2433V33.7578C125.441 15.6489 97.4853 0.96875 63.0002 0.96875Z\"\n stroke=\"#707070\"\n />\n <path\n d=\"M51.5215 39.9726C50.5464 40.4477 48.9738 40.4435 48.009 39.9634C47.0442 39.4833 47.0526 38.709 48.0277 38.2339L69.7191 27.6672C72.7243 26.2032 72.7347 23.8181 69.7605 22.3476L69.6898 22.313C66.6927 20.8686 61.8895 20.8864 58.9368 22.3528L30.3946 36.5278C29.4288 37.0074 27.8561 37.0107 26.882 36.5352C25.9078 36.0597 25.901 35.2853 26.8668 34.8057L55.4092 20.6308C60.2847 18.2094 68.2157 18.1801 73.1645 20.5651L73.2814 20.6222C76.1808 22.0558 77.3624 24.0157 76.8227 25.8782C80.6339 25.5828 84.6694 26.1476 87.6364 27.5775C92.6525 29.9949 92.7059 33.962 87.7554 36.4119L61.5441 49.3836C61.282 49.5133 61.281 49.7227 61.5417 49.853L67.0252 52.5932C67.988 53.0743 67.9763 53.8486 66.9992 54.3226C66.0221 54.7966 64.4495 54.7909 63.4867 54.3098L58.0033 51.5695C55.8306 50.4838 55.8392 48.7391 58.0226 47.6585L84.2339 34.6868C87.2382 33.2 87.2058 30.7925 84.1617 29.3254C81.1488 27.8734 76.1811 27.9317 73.2127 29.4058L51.5215 39.9726Z\"\n fill=\"#A9A9A9\"\n />\n <path\n d=\"M63.0028 23.8809C64.0019 23.4098 65.5873 23.4146 66.5747 23.8972C67.562 24.3798 67.5831 25.1603 66.6338 25.6556L66.5879 25.679L45.1511 36.3113C42.2204 37.7649 42.2292 40.1117 45.1707 41.56C48.1228 43.0135 52.91 43.0118 55.8578 41.5563L76.8564 31.1875L76.9037 31.1648C77.9049 30.6949 79.4903 30.7013 80.4755 31.185C81.4763 31.6764 81.4785 32.4741 80.4806 32.9669L59.4821 43.3356C54.5363 45.7777 46.5044 45.7806 41.5516 43.342C36.6166 40.9121 36.602 36.9747 41.519 34.5359L62.9558 23.9037L63.0028 23.8809Z\"\n fill=\"#A9A9A9\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const ToolCoinIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"126\" height=\"85\" viewBox=\"0 0 126 85\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M119.322 35.1641C119.322 50.36 94.1055 62.6787 62.9998 62.6787C31.894 62.6787 6.67773 50.36 6.67773 35.1641V49.8368C6.67773 65.0327 31.894 77.3514 62.9998 77.3514C94.1055 77.3514 119.322 65.0327 119.322 49.8368V35.1641Z\"\n fill=\"#2E2E2E\"\n fillOpacity=\"0.9\"\n />\n <path\n d=\"M119.322 35.1641C119.322 50.36 94.1055 62.6787 62.9998 62.6787C31.894 62.6787 6.67773 50.36 6.67773 35.1641M119.322 35.1641C119.322 19.9681 94.1055 7.64941 62.9998 7.64941C31.894 7.64941 6.67773 19.9681 6.67773 35.1641M119.322 35.1641V49.8368C119.322 65.0327 94.1055 77.3514 62.9998 77.3514C31.894 77.3514 6.67773 65.0327 6.67773 49.8368V35.1641\"\n stroke=\"#424242\"\n />\n <path\n d=\"M63.0002 0.96875C28.5152 0.96875 0.55957 15.6489 0.55957 33.7578V51.2433C0.55957 69.3522 28.5152 84.0323 63.0002 84.0323C97.4853 84.0323 125.441 69.3522 125.441 51.2433V33.7578C125.441 15.6489 97.4853 0.96875 63.0002 0.96875Z\"\n stroke=\"#707070\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M95.8997 32.6647C98.4806 33.9355 98.4744 36.0012 95.8997 37.2689L89.6657 40.3384C87.0848 41.6091 82.8892 41.6061 80.3146 40.3384L74.0805 37.2689C71.4996 35.9981 71.5059 33.9324 74.0805 32.6647L80.3146 29.5952C82.8955 28.3244 87.091 28.3275 89.6657 29.5952L95.8997 32.6647ZM74.0805 21.9215C76.6614 23.1923 76.6552 25.258 74.0805 26.5257L67.8465 29.5952C65.2656 30.866 61.0701 30.8629 58.4954 29.5952L52.2613 26.5257C49.6804 25.255 49.6867 23.1892 52.2613 21.9215L58.4954 18.852C61.0763 17.5813 65.2718 17.5843 67.8465 18.852L74.0805 21.9215ZM74.0805 43.4079C76.6614 44.6786 76.6552 46.7444 74.0805 48.0121L67.8465 51.0816C65.2656 52.3523 61.0701 52.3493 58.4954 51.0816L52.2613 48.0121C49.6804 46.7413 49.6867 44.6756 52.2613 43.4079L58.4954 40.3384C61.0763 39.0676 65.2718 39.0707 67.8465 40.3384L74.0805 43.4079ZM52.2613 32.6647C54.8422 33.9355 54.836 36.0012 52.2613 37.2689L46.0273 40.3384C43.4464 41.6091 39.2509 41.6061 36.6762 40.3384L30.4422 37.2689C27.8613 35.9981 27.8675 33.9324 30.4422 32.6647L36.6762 29.5952C39.2571 28.3244 43.4526 28.3275 46.0273 29.5952L52.2613 32.6647Z\"\n fill=\"#A9A9A9\"\n />\n </svg>\n);\n","export const AgentNetworkCoinIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"126\" height=\"85\" viewBox=\"0 0 126 85\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M119.322 35.1641C119.322 50.36 94.1055 62.6787 62.9998 62.6787C31.894 62.6787 6.67773 50.36 6.67773 35.1641V49.8368C6.67773 65.0327 31.894 77.3514 62.9998 77.3514C94.1055 77.3514 119.322 65.0327 119.322 49.8368V35.1641Z\"\n fill=\"#2E2E2E\"\n fillOpacity=\"0.9\"\n />\n <path\n d=\"M119.322 35.1641C119.322 50.36 94.1055 62.6787 62.9998 62.6787C31.894 62.6787 6.67773 50.36 6.67773 35.1641M119.322 35.1641C119.322 19.9681 94.1055 7.64941 62.9998 7.64941C31.894 7.64941 6.67773 19.9681 6.67773 35.1641M119.322 35.1641V49.8368C119.322 65.0327 94.1055 77.3514 62.9998 77.3514C31.894 77.3514 6.67773 65.0327 6.67773 49.8368V35.1641\"\n stroke=\"#424242\"\n />\n <path\n d=\"M63.0002 0.96875C28.5152 0.96875 0.55957 15.6489 0.55957 33.7578V51.2433C0.55957 69.3522 28.5152 84.0323 63.0002 84.0323C97.4853 84.0323 125.441 69.3522 125.441 51.2433V33.7578C125.441 15.6489 97.4853 0.96875 63.0002 0.96875Z\"\n stroke=\"#707070\"\n />\n <g clipPath=\"url(#clip0_23333_14744)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M79.2946 17.9539C83.0143 19.7854 83.016 22.7559 79.2979 24.5879C77.0214 25.7087 73.8794 26.1385 70.9301 25.8878L67.5296 30.2202C68.0944 30.3987 68.6321 30.6075 69.1262 30.8507C71.0847 31.815 72.0009 33.0948 71.8979 34.3581L77.2504 35.1977C77.6452 34.8727 78.1174 34.5635 78.6856 34.2835C82.4066 32.4514 88.4403 32.4485 92.1623 34.2803C95.8842 36.1128 95.8805 39.0851 92.159 40.9175C88.4373 42.7488 82.4002 42.7513 78.679 40.9191C76.7415 39.9647 75.8248 38.7009 75.9073 37.4506L70.5219 36.6045C70.1354 36.9168 69.6777 37.2145 69.1295 37.4846C68.345 37.8708 67.4527 38.1705 66.5059 38.3939L67.9312 41.984C70.1507 42.0573 72.3276 42.5087 74.0244 43.3438C77.7444 45.1754 77.7467 48.1458 74.0277 49.9778C70.3071 51.8092 64.2712 51.8095 60.551 49.9778C56.8323 48.1459 56.8351 45.1755 60.5543 43.3438C61.3581 42.9482 62.2741 42.6414 63.247 42.4167L61.8282 38.8428C59.5803 38.7777 57.3696 38.3299 55.6527 37.4846C54.1264 36.7327 53.2395 35.7882 52.9666 34.8103L43.924 34.0469C43.4596 34.6259 42.7547 35.1702 41.8041 35.6385C38.0834 37.4696 32.0473 37.4701 28.3273 35.6385C24.6089 33.8068 24.6123 30.8363 28.3306 29.0046C32.0508 27.1737 38.0806 27.1737 41.8008 29.0046C43.3459 29.7653 44.2412 30.7224 44.5033 31.7129L53.5098 32.4747C53.9742 31.8832 54.6868 31.3279 55.656 30.8507C57.6687 29.8601 60.357 29.4079 62.9902 29.4892L66.5783 24.9218C66.3174 24.8179 66.0637 24.7073 65.8212 24.5879C62.1022 22.7559 62.1045 19.7856 65.8245 17.9539C69.5447 16.1235 75.5747 16.1232 79.2946 17.9539ZM38.4299 30.6643C36.5715 29.75 33.5599 29.75 31.7015 30.6643C29.8447 31.5793 29.8414 33.0638 31.6982 33.9788C33.5565 34.8938 36.5742 34.8933 38.4332 33.9788C40.2906 33.0635 40.2883 31.5793 38.4299 30.6643ZM70.6536 45.0035C68.7951 44.0893 65.7836 44.0893 63.9251 45.0035C62.0676 45.9185 62.0647 47.4029 63.9218 48.318C65.7804 49.2332 68.7979 49.2329 70.6569 48.3181C72.5142 47.4027 72.5119 45.9185 70.6536 45.0035ZM65.7553 32.5104C63.8969 31.5961 60.8853 31.5961 59.0269 32.5104C57.1685 33.4254 57.1662 34.9096 59.0236 35.8249C60.8824 36.7402 63.8998 36.7402 65.7586 35.8249C67.616 34.9096 67.6137 33.4254 65.7553 32.5104ZM88.7915 35.94C86.9338 35.0261 83.9184 35.0264 82.0564 35.9432C80.1965 36.8601 80.1945 38.3451 82.0498 39.2594C83.9067 40.1736 86.9255 40.1738 88.7882 39.2578C90.6507 38.3407 90.649 36.8546 88.7915 35.94ZM75.9238 19.6136C74.0656 18.6995 71.0538 18.6998 69.1953 19.6136C67.3369 20.5286 67.3347 22.0129 69.192 22.9282C71.0509 23.8434 74.0682 23.8434 75.9271 22.9282C77.7836 22.0128 77.7818 20.5285 75.9238 19.6136Z\"\n fill=\"#A9A9A9\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_23333_14744\">\n <rect\n width=\"59.3185\"\n height=\"59.3185\"\n fill=\"white\"\n transform=\"matrix(0.897148 0.441731 -0.897148 0.441731 65.3042 6.51953)\"\n />\n </clipPath>\n </defs>\n </svg>\n);\n","import type { ComponentProps } from 'react';\n\nexport function ProcessorIcon(props: ComponentProps<'svg'>) {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 10.123 10.123\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.50195 1.53809H5.62109V0H6.75098V1.53809H7.5293L7.64258 1.54395C8.19939 1.60066 8.63379 2.0708 8.63379 2.64258V3.37305H10.123V4.50195H8.63379V5.62109H10.123V6.75H8.63379V7.57812L8.62891 7.69141C8.57589 8.2109 8.16211 8.62387 7.64258 8.67676L7.5293 8.68262H6.75098V10.123H5.62109V8.68262H4.50195V10.123H3.37305V8.68262H2.59375L2.48047 8.67676C1.96102 8.62383 1.54817 8.21082 1.49512 7.69141L1.48926 7.57812V6.75H0V5.62109H1.48926V4.50195H0V3.37305H1.48926V2.64258C1.48926 2.07084 1.92371 1.60071 2.48047 1.54395L2.59375 1.53809H3.37305V0H4.50195V1.53809ZM2.61914 7.55273H7.50488V2.66699H2.61914V7.55273Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport const AmazonIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n className=\"h-3 w-3\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 181 108\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clipPath=\"url(#clip0_1480_1723)\">\n <path\n d=\"M51.2203 39.3158C51.2203 41.5066 51.4572 43.2829 51.8717 44.5856C52.3453 45.8882 52.9374 47.3093 53.7664 48.8487C54.0624 49.3224 54.1809 49.7961 54.1809 50.2106C54.1809 50.8027 53.8256 51.3948 53.0559 51.9869L49.3256 54.4737C48.7927 54.829 48.2598 55.0066 47.7861 55.0066C47.194 55.0066 46.6019 54.7106 46.0098 54.1777C45.1809 53.2895 44.4703 52.3422 43.8782 51.3948C43.2861 50.3882 42.694 49.2632 42.0427 47.9014C37.4243 53.3487 31.6217 56.0724 24.6348 56.0724C19.6611 56.0724 15.694 54.6514 12.7927 51.8093C9.8914 48.9672 8.41113 45.1777 8.41113 40.4408C8.41113 35.4079 10.1874 31.3224 13.7993 28.2435C17.4111 25.1645 22.2072 23.6251 28.3059 23.6251C30.319 23.6251 32.3914 23.8027 34.5822 24.0987C36.773 24.3948 39.023 24.8685 41.3914 25.4014V21.079C41.3914 16.579 40.444 13.4408 38.6085 11.6053C36.7138 9.76979 33.5164 8.88163 28.9572 8.88163C26.8848 8.88163 24.7532 9.11847 22.5624 9.65137C20.3717 10.1843 18.2401 10.8356 16.1677 11.6645C15.2203 12.079 14.5098 12.3158 14.0953 12.4343C13.6809 12.5527 13.3848 12.6119 13.148 12.6119C12.319 12.6119 11.9046 12.0198 11.9046 10.7764V7.87505C11.9046 6.92768 12.023 6.21716 12.319 5.80268C12.6151 5.38821 13.148 4.97374 13.9769 4.55926C16.0493 3.49347 18.5361 2.60531 21.4374 1.89479C24.3388 1.12505 27.4177 0.769788 30.6743 0.769788C37.7203 0.769788 42.8717 2.36847 46.1875 5.56584C49.444 8.76321 51.1019 13.6185 51.1019 20.1316V39.3158H51.2203ZM27.1809 48.3158C29.1348 48.3158 31.148 47.9606 33.2796 47.2501C35.4111 46.5395 37.3059 45.2369 38.9046 43.4606C39.8519 42.3356 40.5625 41.0922 40.9177 39.6711C41.273 38.2501 41.5098 36.5329 41.5098 34.5198V32.0329C39.7927 31.6185 37.9572 31.2632 36.0624 31.0264C34.1677 30.7895 32.3322 30.6711 30.4967 30.6711C26.5296 30.6711 23.6282 31.4408 21.6743 33.0395C19.7203 34.6382 18.773 36.8882 18.773 39.8487C18.773 42.6316 19.4835 44.704 20.9638 46.1251C22.3848 47.6053 24.4572 48.3158 27.1809 48.3158ZM74.7269 54.7106C73.6611 54.7106 72.9506 54.5329 72.4769 54.1185C72.0032 53.7632 71.5888 52.9343 71.2335 51.8093L57.319 6.03953C56.9638 4.85531 56.7861 4.08558 56.7861 3.6711C56.7861 2.72374 57.2598 2.19084 58.2072 2.19084H64.0098C65.1348 2.19084 65.9046 2.36847 66.319 2.78295C66.7927 3.13821 67.148 3.96716 67.5032 5.09216L77.4506 44.2895L86.6874 5.09216C86.9835 3.90795 87.3388 3.13821 87.8124 2.78295C88.2861 2.42768 89.1151 2.19084 90.1809 2.19084H94.9177C96.0427 2.19084 96.8124 2.36847 97.2861 2.78295C97.7598 3.13821 98.1743 3.96716 98.4111 5.09216L107.766 44.7632L118.01 5.09216C118.365 3.90795 118.78 3.13821 119.194 2.78295C119.668 2.42768 120.437 2.19084 121.503 2.19084H127.01C127.957 2.19084 128.49 2.66453 128.49 3.6711C128.49 3.96716 128.431 4.26321 128.372 4.61847C128.312 4.97374 128.194 5.44742 127.957 6.09874L113.687 51.8685C113.332 53.0527 112.918 53.8224 112.444 54.1777C111.97 54.5329 111.201 54.7698 110.194 54.7698H105.102C103.977 54.7698 103.207 54.5922 102.733 54.1777C102.26 53.7632 101.845 52.9935 101.608 51.8093L92.4309 13.6185L83.3125 51.7501C83.0164 52.9343 82.6611 53.704 82.1874 54.1185C81.7138 54.5329 80.8848 54.7106 79.819 54.7106H74.7269ZM150.812 56.3093C147.734 56.3093 144.655 55.954 141.694 55.2435C138.733 54.5329 136.424 53.7632 134.885 52.8751C133.937 52.3422 133.286 51.7501 133.049 51.2172C132.812 50.6843 132.694 50.0922 132.694 49.5593V46.5395C132.694 45.2961 133.168 44.704 134.056 44.704C134.411 44.704 134.766 44.7632 135.122 44.8816C135.477 45.0001 136.01 45.2369 136.602 45.4737C138.615 46.3619 140.806 47.0724 143.115 47.5461C145.484 48.0198 147.793 48.2566 150.161 48.2566C153.891 48.2566 156.793 47.6053 158.806 46.3027C160.819 45 161.885 43.1053 161.885 40.6777C161.885 39.0198 161.352 37.6579 160.286 36.5329C159.22 35.4079 157.207 34.4014 154.306 33.454L145.72 30.7895C141.398 29.4277 138.201 27.4145 136.247 24.7501C134.293 22.1448 133.286 19.2435 133.286 16.1645C133.286 13.6777 133.819 11.4869 134.885 9.59216C135.951 7.69742 137.372 6.03953 139.148 4.73689C140.924 3.37505 142.937 2.36847 145.306 1.65795C147.674 0.94742 150.161 0.651367 152.766 0.651367C154.069 0.651367 155.431 0.710578 156.734 0.888209C158.095 1.06584 159.339 1.30268 160.582 1.53953C161.766 1.83558 162.891 2.13163 163.957 2.48689C165.023 2.84216 165.852 3.19742 166.444 3.55268C167.273 4.02637 167.865 4.50005 168.22 5.03295C168.576 5.50663 168.753 6.15795 168.753 6.98689V9.76979C168.753 11.0132 168.28 11.6645 167.391 11.6645C166.918 11.6645 166.148 11.4277 165.141 10.954C161.766 9.41453 157.977 8.64479 153.773 8.64479C150.398 8.64479 147.734 9.17768 145.898 10.3027C144.062 11.4277 143.115 13.1448 143.115 15.5724C143.115 17.2303 143.707 18.6514 144.891 19.7764C146.076 20.9014 148.266 22.0264 151.405 23.0329L159.812 25.6974C164.076 27.0593 167.155 28.954 168.99 31.3816C170.826 33.8093 171.714 36.5922 171.714 39.6711C171.714 42.2172 171.181 44.5264 170.174 46.5395C169.108 48.5527 167.687 50.329 165.852 51.7501C164.016 53.2303 161.826 54.2961 159.28 55.0658C156.615 55.8948 153.832 56.3093 150.812 56.3093Z\"\n fill=\"currentColor\"\n ></path>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M162.004 85.0856C142.524 99.4738 114.221 107.112 89.8855 107.112C55.7803 107.112 25.05 94.5001 1.83948 73.5396C0.00394917 71.8817 1.66184 69.6317 3.85263 70.9343C28.9579 85.5001 59.925 94.3225 91.9579 94.3225C113.57 94.3225 137.313 89.8225 159.162 80.5856C162.418 79.1054 165.201 82.7172 162.004 85.0856Z\"\n fill=\"#FF9900\"\n ></path>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M170.115 75.8487C167.628 72.6513 153.654 74.3092 147.319 75.079C145.424 75.3158 145.128 73.6579 146.845 72.4145C157.976 64.5987 176.272 66.8487 178.404 69.454C180.536 72.1184 177.812 90.4145 167.391 99.1776C165.792 100.539 164.253 99.8289 164.963 98.0526C167.332 92.1908 172.601 78.9868 170.115 75.8487Z\"\n fill=\"#FF9900\"\n ></path>\n </g>\n <defs>\n <clipPath id=\"clip0_1480_1723\">\n <rect width=\"180\" height=\"107.763\" fill=\"white\" transform=\"translate(0.0625)\"></rect>\n </clipPath>\n </defs>\n </svg>\n);\n","import React from 'react';\n\nexport const AnthropicChatIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg className=\"h-3 w-3\" viewBox=\"0 0 320 320\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" {...props}>\n <path d=\"m297.06 130.97c7.26-21.79 4.76-45.66-6.85-65.48-17.46-30.4-52.56-46.04-86.84-38.68-15.25-17.18-37.16-26.95-60.13-26.81-35.04-.08-66.13 22.48-76.91 55.82-22.51 4.61-41.94 18.7-53.31 38.67-17.59 30.32-13.58 68.54 9.92 94.54-7.26 21.79-4.76 45.66 6.85 65.48 17.46 30.4 52.56 46.04 86.84 38.68 15.24 17.18 37.16 26.95 60.13 26.8 35.06.09 66.16-22.49 76.94-55.86 22.51-4.61 41.94-18.7 53.31-38.67 17.57-30.32 13.55-68.51-9.94-94.51zm-120.28 168.11c-14.03.02-27.62-4.89-38.39-13.88.49-.26 1.34-.73 1.89-1.07l63.72-36.8c3.26-1.85 5.26-5.32 5.24-9.07v-89.83l26.93 15.55c.29.14.48.42.52.74v74.39c-.04 33.08-26.83 59.9-59.91 59.97zm-128.84-55.03c-7.03-12.14-9.56-26.37-7.15-40.18.47.28 1.3.79 1.89 1.13l63.72 36.8c3.23 1.89 7.23 1.89 10.47 0l77.79-44.92v31.1c.02.32-.13.63-.38.83l-64.41 37.19c-28.69 16.52-65.33 6.7-81.92-21.95zm-16.77-139.09c7-12.16 18.05-21.46 31.21-26.29 0 .55-.03 1.52-.03 2.2v73.61c-.02 3.74 1.98 7.21 5.23 9.06l77.79 44.91-26.93 15.55c-.27.18-.61.21-.91.08l-64.42-37.22c-28.63-16.58-38.45-53.21-21.95-81.89zm221.26 51.49-77.79-44.92 26.93-15.54c.27-.18.61-.21.91-.08l64.42 37.19c28.68 16.57 38.51 53.26 21.94 81.94-7.01 12.14-18.05 21.44-31.2 26.28v-75.81c.03-3.74-1.96-7.2-5.2-9.06zm26.8-40.34c-.47-.29-1.3-.79-1.89-1.13l-63.72-36.8c-3.23-1.89-7.23-1.89-10.47 0l-77.79 44.92v-31.1c-.02-.32.13-.63.38-.83l64.41-37.16c28.69-16.55 65.37-6.7 81.91 22 6.99 12.12 9.52 26.31 7.15 40.1zm-168.51 55.43-26.94-15.55c-.29-.14-.48-.42-.52-.74v-74.39c.02-33.12 26.89-59.96 60.01-59.94 14.01 0 27.57 4.92 38.34 13.88-.49.26-1.33.73-1.89 1.07l-63.72 36.8c-3.26 1.85-5.26 5.31-5.24 9.06l-.04 89.79zm14.63-31.54 34.65-20.01 34.65 20v40.01l-34.65 20-34.65-20z\" />\n </svg>\n);\n","import React from 'react';\n\nexport const AnthropicMessagesIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n className=\"h-3 w-3\"\n fill=\"white\"\n height=\"78\"\n strokeLinejoin=\"round\"\n viewBox=\"0 0 16 16\"\n width=\"78\"\n style={{ color: 'currentcolor' }}\n {...props}\n >\n <g transform=\"translate(0,2)\">\n <path\n d=\"M11.375 0h-2.411L13.352 11.13h2.411L11.375 0ZM4.4 0 0 11.13h2.46l0.9-2.336h4.604l0.9 2.336h2.46L6.924 0H4.4Zm-0.244 6.723 1.506-3.909 1.506 3.909H4.156Z\"\n fill=\"currentColor\"\n ></path>\n </g>\n </svg>\n);\n","import React from 'react';\n\nexport const AzureIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n className=\"h-3 w-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n {...props}\n >\n <path\n d=\"M7.402 13.8777C9.45763 13.4674 11.1555 13.128 11.175 13.1233L11.2104 13.1148L9.2697 10.507C8.2023 9.07276 7.32898 7.8937 7.32898 7.88691C7.32898 7.87404 9.33293 1.63997 9.3442 1.61779C9.34797 1.61037 10.7117 4.27017 12.65 8.06532C14.4647 11.6184 15.9608 14.5479 15.9747 14.5754L16 14.6253L9.83224 14.6244L3.66449 14.6235L7.402 13.8777ZM0 13.0824C0 13.0787 0.914457 11.2855 2.03212 9.09735L4.06425 5.11896L6.43245 2.87384C7.73497 1.63902 8.80417 0.627201 8.80845 0.625356C8.81274 0.623511 8.79561 0.672228 8.77038 0.733617C8.74515 0.795006 7.58796 3.59893 6.19884 6.96455L3.67317 13.0839L1.83659 13.0865C0.826464 13.0879 0 13.0861 0 13.0824Z\"\n fill=\"#0089D6\"\n style={{ fill: '#0089D6', fillOpacity: 1 }}\n />\n </svg>\n);\n","import React from 'react';\n\nexport const CohereIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg className=\"h-3 w-3\" xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"18\" fill=\"none\" {...props}>\n <mask id=\"mask0_174_2406\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"17\" height=\"18\">\n <path d=\"M17 0.5H0V17.5H17V0.5Z\" fill=\"white\" />\n </mask>\n <g mask=\"url(#mask0_174_2406)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.50773 10.6219C5.9653 10.6219 6.8755 10.5968 8.13362 10.0788C9.59973 9.47518 12.5166 8.37942 14.6208 7.2539C16.0924 6.46668 16.7375 5.42553 16.7375 4.02344C16.7375 2.07751 15.16 0.5 13.2141 0.5H5.06095C2.26586 0.5 0 2.76586 0 5.56095C0 8.35604 2.12151 10.6219 5.50773 10.6219Z\"\n fill=\"#39594D\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.88672 14.107C6.88672 12.7369 7.71155 11.5016 8.97699 10.9764L11.5446 9.9108C14.1417 8.83294 17.0003 10.7415 17.0003 13.5535C17.0003 15.732 15.2339 17.4979 13.0553 17.4973L10.2754 17.4966C8.40372 17.4961 6.88672 15.9787 6.88672 14.107Z\"\n fill=\"#D18EE2\"\n />\n <path\n d=\"M2.91749 11.2891C1.30623 11.2891 0 12.5952 0 14.2065V14.5844C0 16.1956 1.30618 17.5018 2.91744 17.5018C4.5287 17.5018 5.83493 16.1956 5.83493 14.5844V14.2065C5.83493 12.5952 4.52875 11.2891 2.91749 11.2891Z\"\n fill=\"#FF7759\"\n />\n </g>\n </svg>\n);\n","import React from 'react';\n\nexport const GroqIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n className=\"h-3 w-3\"\n data-testid=\"geist-icon\"\n height=\"78\"\n strokeLinejoin=\"round\"\n viewBox=\"0 0 160 59\"\n width=\"104\"\n style={{\n color: 'currentcolor',\n }}\n {...props}\n >\n <mask\n id=\"mask0_4345_1846\"\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"160\"\n height=\"59\"\n style={{\n maskType: 'luminance',\n }}\n >\n <path d=\"M0.273438 0.219727H159.216V58.1817H0.273438V0.219727Z\" fill=\"white\"></path>\n </mask>\n <g mask=\"url(#mask0_4345_1846)\">\n <path\n d=\"M95.4635 0.314595C84.4822 0.314595 75.5599 9.19525 75.5599 20.1677C75.5599 31.1402 84.4632 40.0208 95.4635 40.0208C106.464 40.0208 115.367 31.1402 115.367 20.1677C115.348 9.21427 106.445 0.333611 95.4635 0.314595ZM95.4635 32.5664C88.6002 32.5664 83.0333 27.0136 83.0333 20.1677C83.0333 13.3218 88.6002 7.76902 95.4635 7.76902C102.327 7.76902 107.894 13.3218 107.894 20.1677C107.894 27.0136 102.327 32.5664 95.4635 32.5664ZM67.9912 0.39066C67.3049 0.314595 66.6376 0.276562 65.9513 0.276562C65.6081 0.276562 65.284 0.276562 64.9599 0.295578C64.6358 0.314595 64.2926 0.333611 63.9685 0.352628C62.634 0.44771 61.2995 0.675906 60.0031 1.03722C57.3531 1.74082 54.8556 2.99591 52.7013 4.68836C50.4898 6.43787 48.7358 8.68181 47.5347 11.23C46.9437 12.5041 46.5052 13.8543 46.2193 15.2234C46.0858 15.908 45.9905 16.5926 45.9142 17.2772C45.8952 17.6195 45.857 17.9618 45.857 18.3041L45.838 18.8175V19.293L45.8761 32.5854L45.9142 39.2221H53.3685L53.4067 32.5854L53.4448 19.293V18.5893C53.4448 18.3802 53.4829 18.171 53.4829 17.9618C53.5211 17.5434 53.5973 17.1441 53.6736 16.7257C53.8452 15.9271 54.093 15.1474 54.4362 14.4057C55.1225 12.9225 56.152 11.6293 57.4293 10.6025C58.7639 9.53755 60.3081 8.75787 61.9477 8.3205C62.7865 8.0923 63.6635 7.94017 64.5405 7.8641C64.7693 7.84509 64.979 7.82607 65.2078 7.82607C65.4365 7.82607 65.6653 7.80705 65.875 7.80705C66.2944 7.80705 66.7329 7.82607 67.1524 7.8641C68.8491 8.03525 70.4887 8.54869 71.9948 9.38541L75.7124 2.93886C73.3484 1.56968 70.7175 0.694923 67.9912 0.39066ZM20.3484 0.219513C9.36711 0.124431 0.36855 8.92902 0.273226 19.8825C0.177902 30.8359 9.00488 39.8116 19.9862 39.9067H26.8876V32.4713H20.3484C13.4851 32.5474 7.84193 27.0707 7.76567 20.2057C7.68941 13.3408 13.1801 7.73099 20.0624 7.65492H20.3484C27.2117 7.65492 32.7786 13.2077 32.8167 20.0536V38.3284C32.8167 45.1172 27.2689 50.651 20.4819 50.7271C17.2218 50.708 14.1142 49.3959 11.8265 47.0949L6.54553 52.3625C10.206 56.0326 15.1628 58.1244 20.3484 58.1625H20.6153C31.4632 58.0103 40.1757 49.2248 40.2329 38.4044V19.5592C39.966 8.81492 31.1391 0.238529 20.3484 0.219513ZM139.389 0.314595C128.407 0.314595 119.485 9.19525 119.504 20.1677C119.504 31.1212 128.407 40.0018 139.389 40.0018H146.195V32.5664H139.389C132.525 32.5664 126.958 27.0136 126.958 20.1677C126.958 13.3218 132.525 7.76902 139.389 7.76902C145.833 7.76902 151.209 12.6943 151.781 19.1028H151.762V57.2116H159.216V20.1677C159.216 9.21427 150.351 0.314595 139.389 0.314595Z\"\n fill=\"currentColor\"\n ></path>\n </g>\n </svg>\n);\n","import React from 'react';\n\nexport const MastraIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 34 21\" fill=\"none\" {...props}>\n <path\n d=\"M4.49805 11.6934C6.98237 11.6934 8.99609 13.7081 8.99609 16.1924C8.9959 18.6765 6.98225 20.6904 4.49805 20.6904C2.01394 20.6903 0.000196352 18.6765 0 16.1924C0 13.7081 2.01382 11.6935 4.49805 11.6934ZM10.3867 0C12.8709 0 14.8846 2.01388 14.8848 4.49805C14.8848 4.8377 14.847 5.16846 14.7755 5.48643C14.4618 6.88139 14.1953 8.4633 14.9928 9.65L16.2575 11.5319C16.3363 11.6491 16.4727 11.7115 16.6137 11.703C16.7369 11.6957 16.8525 11.6343 16.9214 11.5318L18.1876 9.64717C18.9772 8.47198 18.7236 6.90783 18.4205 5.52484C18.3523 5.21392 18.3164 4.89094 18.3164 4.55957C18.3167 2.07546 20.3313 0.0615234 22.8154 0.0615234C25.2994 0.0617476 27.3132 2.0756 27.3135 4.55957C27.3135 4.93883 27.2665 5.30712 27.178 5.65896C26.8547 6.94441 26.5817 8.37932 27.2446 9.52714L28.459 11.6301C28.4819 11.6697 28.5245 11.6934 28.5703 11.6934C31.0545 11.6935 33.0684 13.7081 33.0684 16.1924C33.0682 18.6765 31.0544 20.6903 28.5703 20.6904C26.0861 20.6904 24.0725 18.6765 24.0723 16.1924C24.0723 15.8049 24.1212 15.4288 24.2133 15.0701C24.5458 13.7746 24.8298 12.3251 24.1609 11.1668L23.0044 9.16384C22.9656 9.09659 22.8931 9.05859 22.8154 9.05859C22.7983 9.05859 22.7824 9.06614 22.7728 9.08033L21.4896 10.9895C20.686 12.1851 20.9622 13.781 21.284 15.1851C21.3582 15.5089 21.3975 15.8461 21.3975 16.1924C21.3973 18.6764 19.3834 20.6902 16.8994 20.6904C14.4152 20.6904 12.4006 18.6765 12.4004 16.1924C12.4004 15.932 12.4226 15.6768 12.4651 15.4286C12.6859 14.14 12.8459 12.7122 12.1167 11.6271L11.2419 10.3253C10.6829 9.49347 9.71913 9.05932 8.78286 8.70188C7.0906 8.05584 5.88867 6.41734 5.88867 4.49805C5.88886 2.0139 7.90254 3.29835e-05 10.3867 0Z\"\n fill={props.fill || 'currentColor'}\n />\n </svg>\n);\n","import React from 'react';\n\nexport const MistralIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n className=\"h-3 w-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"176\"\n height=\"162\"\n viewBox=\"0 0 176 162\"\n fill=\"none\"\n {...props}\n >\n <rect x=\"15\" y=\"1\" width=\"32\" height=\"32\" fill=\"#FFCD00\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect x=\"143\" y=\"1\" width=\"32\" height=\"32\" fill=\"#FFCD00\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect x=\"15\" y=\"33\" width=\"32\" height=\"32\" fill=\"#FFA400\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect x=\"47\" y=\"33\" width=\"32\" height=\"32\" fill=\"#FFA400\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect\n x=\"111\"\n y=\"33\"\n width=\"32\"\n height=\"32\"\n fill=\"#FFA400\"\n stroke=\"#636363\"\n stroke-opacity=\"0.2\"\n strokeWidth=\"0.5\"\n />\n <rect\n x=\"143\"\n y=\"33\"\n width=\"32\"\n height=\"32\"\n fill=\"#FFA400\"\n stroke=\"#636363\"\n stroke-opacity=\"0.2\"\n strokeWidth=\"0.5\"\n />\n <rect x=\"15\" y=\"65\" width=\"32\" height=\"32\" fill=\"#FF7100\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect x=\"47\" y=\"65\" width=\"32\" height=\"32\" fill=\"#FF7100\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect x=\"79\" y=\"65\" width=\"32\" height=\"32\" fill=\"#FF7100\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect\n x=\"111\"\n y=\"65\"\n width=\"32\"\n height=\"32\"\n fill=\"#FF7100\"\n stroke=\"#636363\"\n stroke-opacity=\"0.2\"\n strokeWidth=\"0.5\"\n />\n <rect\n x=\"143\"\n y=\"65\"\n width=\"32\"\n height=\"32\"\n fill=\"#FF7100\"\n stroke=\"#636363\"\n stroke-opacity=\"0.2\"\n strokeWidth=\"0.5\"\n />\n <rect x=\"15\" y=\"97\" width=\"32\" height=\"32\" fill=\"#FF4902\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect x=\"79\" y=\"97\" width=\"32\" height=\"32\" fill=\"#FF4902\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect\n x=\"143\"\n y=\"97\"\n width=\"32\"\n height=\"32\"\n fill=\"#FF4902\"\n stroke=\"#636363\"\n stroke-opacity=\"0.2\"\n strokeWidth=\"0.5\"\n />\n <rect\n x=\"15\"\n y=\"129\"\n width=\"32\"\n height=\"32\"\n fill=\"#FF0006\"\n stroke=\"#636363\"\n stroke-opacity=\"0.2\"\n strokeWidth=\"0.5\"\n />\n <rect\n x=\"143\"\n y=\"129\"\n width=\"32\"\n height=\"32\"\n fill=\"#FF0006\"\n stroke=\"#636363\"\n stroke-opacity=\"0.2\"\n strokeWidth=\"0.5\"\n />\n <rect y=\"1\" width=\"16\" height=\"160\" fill=\"black\" />\n <rect x=\"63\" y=\"97\" width=\"16\" height=\"32\" fill=\"black\" />\n <rect x=\"95\" y=\"33\" width=\"16\" height=\"32\" fill=\"black\" />\n <rect x=\"127\" y=\"1\" width=\"16\" height=\"32\" fill=\"black\" />\n <rect x=\"127\" y=\"97\" width=\"16\" height=\"64\" fill=\"black\" />\n </svg>\n);\n","import React from 'react';\n\nexport const NetlifyIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"128\" height=\"113\" viewBox=\"0 0 128 113\">\n <g clipPath=\"url(#clip0_236_138)\" {...props}>\n <path\n d=\"M34.593 94.0509H33.3844L27.3514 88.0179V86.8094L36.5743 77.5866H42.9639L43.8158 78.4385V84.8281L34.593 94.0509Z\"\n fill={props.fill || '#05BDBA'}\n />\n <path\n d=\"M27.3514 25.816V24.6074L33.3844 18.5744H34.593L43.8158 27.7972V34.1868L42.9639 35.0388H36.5743L27.3514 25.816Z\"\n fill={props.fill || '#05BDBA'}\n />\n <path\n d=\"M80.4594 74.6047H71.6824L70.9493 73.8717V53.3259C70.9493 49.6705 69.5129 46.8372 65.1046 46.7382C62.836 46.6787 60.2405 46.7382 57.4668 46.8471L57.0507 47.2731V73.8618L56.3176 74.5948H47.5406L46.8075 73.8618V38.7636L47.5406 38.0305H67.2939C74.9713 38.0305 81.1925 44.2517 81.1925 51.9291V73.8717L80.4594 74.6047Z\"\n fill={props.fill || '#014847'}\n />\n <path\n d=\"M35.8412 61.4491H0.73307L0 60.716V51.9192L0.73307 51.1861H35.8412L36.5743 51.9192V60.716L35.8412 61.4491Z\"\n fill={props.fill || '#05BDBA'}\n />\n <path\n d=\"M127.277 61.4491H92.1687L91.4356 60.716V51.9192L92.1687 51.1861H127.277L128.01 51.9192V60.716L127.277 61.4491Z\"\n fill={props.fill || '#05BDBA'}\n />\n <path\n d=\"M58.9428 27.0642V0.73307L59.6759 0H68.4727L69.2058 0.73307V27.0642L68.4727 27.7972H59.6759L58.9428 27.0642Z\"\n fill={props.fill || '#05BDBA'}\n />\n <path\n d=\"M58.9428 111.902V85.5711L59.6759 84.838H68.4727L69.2058 85.5711V111.902L68.4727 112.635H59.6759L58.9428 111.902Z\"\n fill={props.fill || '#05BDBA'}\n />\n </g>\n <defs>\n <clipPath id=\"clip0_236_138\">\n <rect width=\"128\" height=\"112.635\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n);\n","import React from 'react';\n\nexport const OpenaiChatIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg className=\"h-3 w-3\" viewBox=\"0 0 320 320\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" {...props}>\n <path d=\"m297.06 130.97c7.26-21.79 4.76-45.66-6.85-65.48-17.46-30.4-52.56-46.04-86.84-38.68-15.25-17.18-37.16-26.95-60.13-26.81-35.04-.08-66.13 22.48-76.91 55.82-22.51 4.61-41.94 18.7-53.31 38.67-17.59 30.32-13.58 68.54 9.92 94.54-7.26 21.79-4.76 45.66 6.85 65.48 17.46 30.4 52.56 46.04 86.84 38.68 15.24 17.18 37.16 26.95 60.13 26.8 35.06.09 66.16-22.49 76.94-55.86 22.51-4.61 41.94-18.7 53.31-38.67 17.57-30.32 13.55-68.51-9.94-94.51zm-120.28 168.11c-14.03.02-27.62-4.89-38.39-13.88.49-.26 1.34-.73 1.89-1.07l63.72-36.8c3.26-1.85 5.26-5.32 5.24-9.07v-89.83l26.93 15.55c.29.14.48.42.52.74v74.39c-.04 33.08-26.83 59.9-59.91 59.97zm-128.84-55.03c-7.03-12.14-9.56-26.37-7.15-40.18.47.28 1.3.79 1.89 1.13l63.72 36.8c3.23 1.89 7.23 1.89 10.47 0l77.79-44.92v31.1c.02.32-.13.63-.38.83l-64.41 37.19c-28.69 16.52-65.33 6.7-81.92-21.95zm-16.77-139.09c7-12.16 18.05-21.46 31.21-26.29 0 .55-.03 1.52-.03 2.2v73.61c-.02 3.74 1.98 7.21 5.23 9.06l77.79 44.91-26.93 15.55c-.27.18-.61.21-.91.08l-64.42-37.22c-28.63-16.58-38.45-53.21-21.95-81.89zm221.26 51.49-77.79-44.92 26.93-15.54c.27-.18.61-.21.91-.08l64.42 37.19c28.68 16.57 38.51 53.26 21.94 81.94-7.01 12.14-18.05 21.44-31.2 26.28v-75.81c.03-3.74-1.96-7.2-5.2-9.06zm26.8-40.34c-.47-.29-1.3-.79-1.89-1.13l-63.72-36.8c-3.23-1.89-7.23-1.89-10.47 0l-77.79 44.92v-31.1c-.02-.32.13-.63.38-.83l64.41-37.16c28.69-16.55 65.37-6.7 81.91 22 6.99 12.12 9.52 26.31 7.15 40.1zm-168.51 55.43-26.94-15.55c-.29-.14-.48-.42-.52-.74v-74.39c.02-33.12 26.89-59.96 60.01-59.94 14.01 0 27.57 4.92 38.34 13.88-.49.26-1.33.73-1.89 1.07l-63.72 36.8c-3.26 1.85-5.26 5.31-5.24 9.06l-.04 89.79zm14.63-31.54 34.65-20.01 34.65 20v40.01l-34.65 20-34.65-20z\" />\n </svg>\n);\n","import React from 'react';\n\nexport const XGroqIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n className=\"h-3 w-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 1000 1000\"\n width=\"78\"\n height=\"78\"\n style={{\n color: 'currentcolor',\n }}\n {...props}\n >\n <g>\n <polygon\n fill=\"currentColor\"\n points=\"226.83 411.15 501.31 803.15 623.31 803.15 348.82 411.15 226.83 411.15\"\n ></polygon>\n <polygon\n fill=\"currentColor\"\n points=\"348.72 628.87 226.69 803.15 348.77 803.15 409.76 716.05 348.72 628.87\"\n ></polygon>\n <polygon\n fill=\"currentColor\"\n points=\"651.23 196.85 440.28 498.12 501.32 585.29 773.31 196.85 651.23 196.85\"\n ></polygon>\n <polygon\n fill=\"currentColor\"\n points=\"673.31 383.25 673.31 803.15 773.31 803.15 773.31 240.44 673.31 383.25\"\n ></polygon>\n </g>\n </svg>\n);\n","import React from 'react';\n\nexport const WorkspacesIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 9.55888 8.30616\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M0 7.18794V1.11823C-4.80684e-08 0.5005 0.5005 2.79299e-06 1.11823 0H3.17924C3.48658 0 3.78038 0.126314 3.99163 0.349532L5.09347 1.5135C5.14625 1.56923 5.21948 1.60085 5.29623 1.60088H8.44065C9.05838 1.60088 9.55888 2.10206 9.55888 2.7198V7.18794C9.55888 7.80567 9.05838 8.30616 8.44065 8.30616H1.11823C0.500524 8.30614 4.41663e-06 7.80565 0 7.18794ZM0.838331 7.18794C0.838332 7.34235 0.963819 7.46781 1.11823 7.46783H8.44065C8.59509 7.46783 8.72055 7.34237 8.72055 7.18794V2.7198C8.72055 2.56536 8.59509 2.4399 8.44065 2.4399H5.29623C4.98896 2.43986 4.69506 2.31353 4.48384 2.09037L3.38268 0.925714C3.32987 0.869949 3.25604 0.838331 3.17924 0.838331H1.11823C0.963799 0.838334 0.838331 0.963798 0.838331 1.11823V7.18794Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const RequestContextIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 11.185 11.185\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2.13324 2.7965L2.18203 2.84592C1.82485 3.28847 1.55755 3.79653 1.39512 4.34155H2.38658C2.56011 3.8986 2.82333 3.49631 3.15971 3.15992C3.4961 2.82353 3.8984 2.56031 4.34134 2.38679V1.39533C3.79632 1.55775 3.28827 1.82506 2.84571 2.18224L2.7963 2.13345L1.85801 1.19516L1.52648 0.863634L0.863426 1.52669L1.19495 1.85822L2.13324 2.7965ZM9.00275 8.33927C9.35991 7.89671 9.62722 7.38866 9.78966 6.84365H8.7982C8.62471 7.28661 8.3615 7.68892 8.02511 8.02531C7.68871 8.3617 7.2864 8.62491 6.84344 8.79841V9.78987C7.38847 9.62746 7.89652 9.36015 8.33907 9.00296L8.38848 9.05175L9.32677 9.99003L9.6583 10.3216L10.3214 9.65851L9.98983 9.32698L9.05154 8.38869L9.00275 8.33927ZM9.00275 2.84592C9.35995 3.28846 9.62726 3.79651 9.78966 4.34155H8.7982C8.62467 3.8986 8.36145 3.49631 8.02506 3.15992C7.68868 2.82353 7.28638 2.56031 6.84344 2.38679V1.39533C7.38846 1.55775 7.89651 1.82506 8.33907 2.18224L8.38848 2.13345L9.32677 1.19516L9.6583 0.863634L10.3214 1.52669L9.98983 1.85822L9.05154 2.7965L9.00275 2.84592ZM1.39512 6.84365H2.38658C2.56011 7.28659 2.82333 7.68888 3.15971 8.02527C3.4961 8.36166 3.8984 8.62488 4.34134 8.79841V9.78987C3.79631 9.62747 3.28825 9.36016 2.84571 9.00296L2.7963 9.05175L1.85801 9.99003L1.52648 10.3216L0.863426 9.65851L1.19495 9.32698L2.13324 8.38869L2.18203 8.33927C1.82485 7.89672 1.55755 7.38867 1.39512 6.84365ZM5.59239 6.84365C5.92419 6.84365 6.2424 6.71184 6.47701 6.47722C6.71163 6.2426 6.84344 5.9244 6.84344 5.5926C6.84344 5.2608 6.71163 4.94259 6.47701 4.70797C6.2424 4.47336 5.92419 4.34155 5.59239 4.34155C5.26059 4.34155 4.94238 4.47336 4.70776 4.70797C4.47315 4.94259 4.34134 5.2608 4.34134 5.5926C4.34134 5.9244 4.47315 6.2426 4.70776 6.47722C4.94238 6.71184 5.26059 6.84365 5.59239 6.84365Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const ScorersIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 8.94379 8.92126\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M6.13251 5.43413C6.51629 5.43413 6.82744 5.74533 6.82748 6.1291C6.82748 6.5129 6.51631 6.82407 6.13251 6.82407C5.74877 6.824 5.43754 6.51286 5.43754 6.1291C5.43759 5.74537 5.74879 5.4342 6.13251 5.43413Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M5.92771 2.29722C6.13122 2.09376 6.46147 2.09379 6.665 2.29722C6.86843 2.50075 6.86846 2.831 6.665 3.03451L3.03724 6.66227C2.83373 6.86578 2.5035 6.86572 2.29995 6.66227C2.0965 6.45872 2.09644 6.12849 2.29995 5.92498L5.92771 2.29722Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M2.842 2.12791C3.22572 2.12799 3.53694 2.43914 3.53696 2.82288C3.53696 3.20664 3.22573 3.51777 2.842 3.51785C2.45819 3.51785 2.14703 3.20668 2.14703 2.82288C2.14705 2.4391 2.45821 2.12791 2.842 2.12791Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.38455 0.00887484C8.26052 0.0979278 8.94379 0.837945 8.94379 1.73742V7.18384C8.94369 8.08322 8.26046 8.82334 7.38455 8.91238L7.20705 8.92126H1.73742L1.55992 8.91238C0.683828 8.82351 0.000101213 8.08336 0 7.18384V1.73742C0 0.837813 0.683761 0.0977507 1.55992 0.00887484L1.73742 0H7.20705L7.38455 0.00887484ZM1.73742 0.839013C1.24121 0.839013 0.839013 1.24121 0.839013 1.73742V7.18384C0.839121 7.67996 1.24128 8.08293 1.73742 8.08293H7.20705C7.70305 8.08276 8.10535 7.67985 8.10546 7.18384V1.73742C8.10546 1.24131 7.70312 0.83918 7.20705 0.839013H1.73742Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const DatasetsIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 8.64637 9.45103\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M7.80735 5.87241C7.63209 5.97219 7.43696 6.06166 7.22844 6.13866C6.46456 6.42068 5.43714 6.58649 4.32296 6.58649C3.20873 6.58649 2.18135 6.4207 1.41747 6.13866C1.20889 6.06164 1.01385 5.97223 0.838558 5.87241V7.59003C0.838558 7.62341 0.855765 7.70759 1.00172 7.83512C1.14707 7.96201 1.38219 8.09563 1.70829 8.21605C2.3572 8.45563 3.28149 8.61268 4.32296 8.61269C5.36456 8.61269 6.28937 8.45568 6.9383 8.21605C7.26428 8.09566 7.49888 7.96198 7.64419 7.83512C7.79024 7.70754 7.80735 7.62342 7.80735 7.59003V5.87241ZM7.80735 3.00789C7.63214 3.10763 7.4369 3.19647 7.22844 3.27345C6.46455 3.55549 5.43719 3.72129 4.32296 3.72129C3.20868 3.72128 2.18136 3.55552 1.41747 3.27345C1.20896 3.19645 1.01381 3.10766 0.838558 3.00789V4.72551C0.838558 4.7589 0.855657 4.84301 1.00172 4.97059C1.14707 5.09749 1.38219 5.23111 1.70829 5.35153C2.3572 5.59109 3.28154 5.74747 4.32296 5.74748C5.36456 5.74748 6.28937 5.59116 6.9383 5.35153C7.26432 5.23112 7.49887 5.09747 7.64419 4.97059C7.7536 4.87505 7.79089 4.80404 7.80257 4.76033L7.80735 4.72551V3.00789ZM7.80735 1.86099C7.80735 1.82758 7.79045 1.74291 7.64419 1.61522C7.49887 1.48838 7.26421 1.35534 6.9383 1.23497C6.28937 0.995339 5.36456 0.838331 4.32296 0.838331C3.28149 0.83834 2.3572 0.995383 1.70829 1.23497C1.38219 1.35539 1.14707 1.48832 1.00172 1.61522C0.855475 1.7429 0.838558 1.82758 0.838558 1.86099C0.838673 1.89462 0.855968 1.97882 1.00172 2.10607C1.14707 2.23297 1.38219 2.3659 1.70829 2.48632C2.3572 2.7259 3.28149 2.88295 4.32296 2.88296C5.36456 2.88296 6.28937 2.72595 6.9383 2.48632C7.26421 2.36595 7.49887 2.23291 7.64419 2.10607C7.78996 1.97881 7.80724 1.89462 7.80735 1.86099ZM8.64637 7.59003C8.64637 7.95465 8.44458 8.25006 8.1958 8.46728C7.94608 8.68529 7.60876 8.86274 7.22844 9.00318C6.46455 9.28522 5.43718 9.45102 4.32296 9.45102C3.20869 9.45101 2.18135 9.28525 1.41747 9.00318C1.03715 8.86274 0.699831 8.68529 0.450113 8.46728C0.201377 8.25007 0.000227451 7.9546 0.000227451 7.59003V1.86099C0.000227451 1.49643 0.201388 1.20095 0.450113 0.983742C0.699831 0.765728 1.03715 0.588275 1.41747 0.447838C2.18136 0.165769 3.20868 8.74396e-06 4.32296 0C5.43719 0 6.46455 0.165797 7.22844 0.447838C7.60876 0.588275 7.94608 0.765728 8.1958 0.983742C8.44457 1.20096 8.64637 1.49638 8.64637 1.86099V7.59003Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const ExperimentsIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 9.83952 9.3295\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.67171 0.838331H6.70163V4.05307L9.68767 8.09999C10.0634 8.6093 9.69869 9.32932 9.06643 9.3295H0.772551C0.140289 9.3293 -0.223777 8.60929 0.151995 8.09999L3.13804 4.05307V0.838331H2.17136V0H7.67171V0.838331ZM3.97705 4.32955L3.89513 4.44015L2.34681 6.53802H7.49285L5.94453 4.44015L5.86261 4.32955V0.860859H3.97705V4.32955Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const MetricsIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 8.98824 8.33142\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M5.70011e-05 6.409V0H1.04865V6.409C1.04875 6.89152 1.43994 7.28283 1.92248 7.28283H8.3581V8.33142H1.92248C0.860814 8.33142 0.000149953 7.47065 5.70011e-05 6.409Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M8.08006 0.945713C8.27714 0.733828 8.6087 0.72151 8.82077 0.918405C9.03289 1.11551 9.04518 1.44767 8.84808 1.6598L6.08595 4.63218C5.90127 4.83085 5.59525 4.85557 5.38074 4.68953L4.03177 3.64571L2.74765 5.07183C2.55386 5.28688 2.22206 5.30441 2.00694 5.11074C1.79189 4.91695 1.77435 4.58515 1.96803 4.37003L3.57915 2.58278L3.65357 2.51451C3.83887 2.37494 4.09997 2.37165 4.28982 2.51861L5.64358 3.56652L8.08006 0.945713Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import { useCallback, useState } from 'react';\n\n/**\n * Tracks whether or not the given element is currently in view.\n * This is to replace framer-motion's `useInView` which has issues\n * tracking a ref that is set at a time other than mount.\n */\nexport const useInView = () => {\n const [inView, setInView] = useState(false);\n\n const setRef = useCallback((node: HTMLDivElement | null) => {\n if (node) {\n const observer = new IntersectionObserver(([entry]) => {\n setInView(entry.isIntersecting);\n });\n observer.observe(node);\n return () => observer.disconnect();\n }\n }, []);\n\n return { inView, setRef };\n};\n","export const lodashTitleCase = (str: string): string => {\n // First convert to camel case (handles various separators like spaces, hyphens, underscores)\n const camelCased = str\n .replace(/[-_\\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : ''))\n .replace(/^(.)/, char => char.toLowerCase());\n\n // Then convert to start case (capitalize first letter of each word)\n return camelCased\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, str => str.toUpperCase())\n .trim();\n};\n","export const toSigFigs = (num: number, sigFigs: number) => {\n // toPrecision returns significant digits formatted with potentially exponential notation\n // Number() converts the exponential notation to a regular number\n return Number(num.toPrecision(sigFigs));\n};\n","/**\n * Checks if object is empty\n * @param objectName\n * @returns boolean\n */\nexport const isObjectEmpty = (objectName: Object) => {\n return objectName && Object.keys(objectName).length === 0 && objectName.constructor === Object;\n};\n","/* eslint-disable @typescript-eslint/consistent-type-imports */\n\nlet prettierModules:\n | Promise<\n [\n typeof import('prettier/standalone'),\n typeof import('prettier/plugins/babel'),\n typeof import('prettier/plugins/estree'),\n ]\n >\n | undefined;\n\nconst loadPrettier = () =>\n (prettierModules ??= Promise.all([\n import('prettier/standalone'),\n import('prettier/plugins/babel'),\n import('prettier/plugins/estree'),\n ]).catch(error => {\n prettierModules = undefined;\n throw error;\n }));\n\nexport const formatJSON = async (code: string) => {\n const [prettier, prettierPluginBabel, prettierPluginEstree] = await loadPrettier();\n\n const formatted = await prettier.format(code, {\n semi: false,\n parser: 'json',\n printWidth: 80,\n tabWidth: 2,\n plugins: [prettierPluginBabel, prettierPluginEstree],\n });\n\n return formatted;\n};\n\nexport const formatTypeScript = async (code: string) => {\n const [prettier, prettierPluginBabel, prettierPluginEstree] = await loadPrettier();\n\n const formatted = await prettier.format(code, {\n parser: 'babel-ts',\n printWidth: 80,\n tabWidth: 2,\n plugins: [prettierPluginBabel, prettierPluginEstree],\n });\n\n return formatted;\n};\n\nexport const isValidJson = (str: string) => {\n try {\n // Attempt to parse the string as JSON\n const obj = JSON.parse(str);\n\n // Additionally check if the parsed result is an object\n return !!obj && typeof obj === 'object';\n } catch {\n // If parsing throws an error, it's not valid JSON\n return false;\n }\n};\n","export const stringToColor = (str: string, lightness: number = 90, saturation = 100) => {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n hash = hash & hash;\n }\n return `hsl(${hash % 360}, ${saturation}%, ${lightness}%)`;\n};\n","export function truncateString(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return str.slice(0, maxLength) + '…';\n}\n","const errorFallback = 'Something went wrong while fetching the data.';\nexport const parseError = (error: Error) => {\n try {\n const httpErrorPattern = /^HTTP error! status:\\s*\\d+\\s*- \\s*/;\n const errorMessage = error?.message.replace(httpErrorPattern, '');\n const jsonError = JSON.parse(errorMessage || '{}');\n return {\n error: jsonError?.error || errorFallback,\n stack: jsonError?.stack || error?.stack,\n };\n } catch {\n return {\n error: error?.message || errorFallback,\n stack: undefined,\n };\n }\n};\n","/**\n * HTTP status codes that should not be retried.\n * - 400: Bad Request (client error, won't change)\n * - 401: Unauthorized (needs re-auth, not retry)\n * - 403: Forbidden (RBAC permission denied)\n * - 404: Not Found (resource doesn't exist)\n */\nconst HTTP_NO_RETRY_STATUSES = [400, 401, 403, 404];\n\n/**\n * Check if error is a 401 Unauthorized response.\n * Indicates the user's session has expired or token is invalid.\n * Handles both direct status property and client-js error message format.\n */\nexport function is401UnauthorizedError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property (direct response or wrapped)\n if ('status' in error && (error as { status: number }).status === 401) {\n return true;\n }\n\n // Check for statusCode property (some HTTP clients)\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 401) {\n return true;\n }\n\n // Check error message for client-js pattern: \"HTTP error! status: 401\"\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*401\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if error is a 403 Forbidden response.\n * Handles both direct status property and client-js error message format.\n */\nexport function is403ForbiddenError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property (direct response or wrapped)\n if ('status' in error && (error as { status: number }).status === 403) {\n return true;\n }\n\n // Check for statusCode property (some HTTP clients)\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 403) {\n return true;\n }\n\n // Check error message for client-js pattern: \"HTTP error! status: 403\"\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*403\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if error is a 404 Not Found response.\n * Handles both direct status property and client-js error message format.\n */\nexport function is404NotFoundError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n if ('status' in error && (error as { status: number }).status === 404) {\n return true;\n }\n\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 404) {\n return true;\n }\n\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*404\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if an error came from a storage provider that does not implement `listBranches`.\n *\n * The server's `handleError` strips the original MastraError's `code`/`id` before serializing,\n * so we can't match on the ID `OBSERVABILITY_STORAGE_LIST_BRANCHES_NOT_IMPLEMENTED` directly —\n * we match on the message text from `core/.../observability/base.ts` instead.\n */\nexport function isBranchesNotSupportedError(error: unknown): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return message.includes('does not support listing trace branches');\n}\n\n/**\n * Check if error has a status code that shouldn't be retried.\n * Used to prevent retrying client errors that won't resolve.\n */\nexport function isNonRetryableError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property\n if ('status' in error) {\n const status = (error as { status: number }).status;\n return HTTP_NO_RETRY_STATUSES.includes(status);\n }\n\n // Check for statusCode property\n if ('statusCode' in error) {\n const statusCode = (error as { statusCode: number }).statusCode;\n return HTTP_NO_RETRY_STATUSES.includes(statusCode);\n }\n\n // Check error message for client-js pattern\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return HTTP_NO_RETRY_STATUSES.some(code => new RegExp(`\\\\bstatus:\\\\s*${code}\\\\b`).test(message));\n }\n }\n\n return false;\n}\n\n/**\n * Default retry function for TanStack Query.\n * Does not retry 4xx client errors (400, 401, 403, 404).\n * Retries other errors up to 3 times.\n */\nexport function shouldRetryQuery(failureCount: number, error: unknown): boolean {\n // Don't retry client errors - they won't resolve with retries\n if (isNonRetryableError(error)) {\n return false;\n }\n // Default: retry up to 3 times for transient errors\n return failureCount < 3;\n}\n","import type { Rule, RuleGroup } from '../types';\n\n/**\n * Type guard: checks if a condition is a leaf Rule\n */\nexport const isRule = (condition: Rule | RuleGroup): condition is Rule => 'field' in condition;\n\n/**\n * Type guard: checks if a condition is a nested RuleGroup\n */\nexport const isRuleGroup = (condition: Rule | RuleGroup): condition is RuleGroup => 'conditions' in condition;\n\n/**\n * Recursively counts the number of leaf Rule nodes in a RuleGroup\n */\nexport const countLeafRules = (group: RuleGroup | undefined): number => {\n if (!group) return 0;\n return group.conditions.reduce((count, condition) => {\n if (isRule(condition)) return count + 1;\n return count + countLeafRules(condition);\n }, 0);\n};\n\n/**\n * Creates a default empty rule\n */\nexport const createDefaultRule = (): Rule => ({\n field: '',\n operator: 'equals',\n value: '',\n});\n\n/**\n * Creates a default empty rule group\n */\nexport const createDefaultRuleGroup = (operator: 'AND' | 'OR' = 'AND'): RuleGroup => ({\n operator,\n conditions: [createDefaultRule()],\n});\n","import type { FieldOption, JsonSchema, JsonSchemaProperty } from './types';\n\n/**\n * Gets the primary type from a JSON Schema property\n */\nexport const getPropertyType = (property: JsonSchemaProperty): string => {\n if (Array.isArray(property.type)) {\n // Return the first non-null type\n return property.type.find(t => t !== 'null') || 'string';\n }\n return property.type || 'string';\n};\n\n/**\n * Checks if a property has nested children (object or array of objects)\n */\nexport const hasNestedChildren = (property: JsonSchemaProperty): boolean => {\n const type = getPropertyType(property);\n\n if (type === 'object' && property.properties) {\n return Object.keys(property.properties).length > 0;\n }\n\n if (type === 'array' && property.items) {\n const itemType = getPropertyType(property.items);\n return itemType === 'object' && !!property.items.properties;\n }\n\n return false;\n};\n\n/**\n * Extracts field options from JSON Schema properties at a given level\n */\nexport const getFieldOptionsFromProperties = (\n properties: Record<string, JsonSchemaProperty> | undefined,\n parentPath: string = '',\n): FieldOption[] => {\n if (!properties) return [];\n\n return Object.entries(properties).map(([key, property]) => {\n const path = parentPath ? `${parentPath}.${key}` : key;\n const type = getPropertyType(property);\n const hasChildren = hasNestedChildren(property);\n\n return {\n path,\n label: property.title || key,\n type,\n hasChildren,\n children: type === 'object' ? property.properties : undefined,\n items: type === 'array' ? property.items : undefined,\n };\n });\n};\n\n/**\n * Gets field options from the root schema\n */\nexport const getFieldOptionsFromSchema = (schema: JsonSchema): FieldOption[] => {\n return getFieldOptionsFromProperties(schema.properties);\n};\n\n/**\n * Gets child field options for a given field option\n */\nexport const getChildFieldOptions = (fieldOption: FieldOption, currentPath: string): FieldOption[] => {\n if (fieldOption.type === 'object' && fieldOption.children) {\n return getFieldOptionsFromProperties(fieldOption.children, currentPath);\n }\n\n if (fieldOption.type === 'array' && fieldOption.items) {\n const itemType = getPropertyType(fieldOption.items);\n if (itemType === 'object' && fieldOption.items.properties) {\n // For arrays, we use the current path directly (user will access via index or iteration)\n return getFieldOptionsFromProperties(fieldOption.items.properties, currentPath);\n }\n }\n\n return [];\n};\n\n/**\n * Parses a field path into segments\n */\nexport const parseFieldPath = (path: string): string[] => {\n return path.split('.').filter(Boolean);\n};\n\n/**\n * Gets the field option at a specific path in the schema\n */\nexport const getFieldOptionAtPath = (schema: JsonSchema, path: string): FieldOption | undefined => {\n const segments = parseFieldPath(path);\n if (segments.length === 0) return undefined;\n\n let currentProperties = schema.properties;\n let currentPath = '';\n let result: FieldOption | undefined;\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (!currentProperties || !currentProperties[segment]) {\n return undefined;\n }\n\n const property = currentProperties[segment];\n currentPath = currentPath ? `${currentPath}.${segment}` : segment;\n const type = getPropertyType(property);\n const hasChildren = hasNestedChildren(property);\n\n result = {\n path: currentPath,\n label: property.title || segment,\n type,\n hasChildren,\n children: type === 'object' ? property.properties : undefined,\n items: type === 'array' ? property.items : undefined,\n };\n\n // Navigate deeper\n if (type === 'object' && property.properties) {\n currentProperties = property.properties;\n } else if (type === 'array' && property.items?.properties) {\n currentProperties = property.items.properties;\n } else {\n currentProperties = undefined;\n }\n }\n\n return result;\n};\n","import { Braces, Hash, List, ToggleLeft, Type } from 'lucide-react';\nimport * as React from 'react';\n\nimport { getFieldOptionsFromSchema, getFieldOptionAtPath, getChildFieldOptions, parseFieldPath } from './schema-utils';\nimport type { FieldOption, RuleFieldSelectProps } from './types';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select/select';\nimport { Icon } from '@/ds/icons';\nimport { cn } from '@/lib/utils';\n\n/**\n * Get icon for a field type\n */\nconst getFieldTypeIcon = (type: string): React.ReactNode => {\n switch (type) {\n case 'object':\n return <Braces />;\n case 'array':\n return <List />;\n case 'number':\n case 'integer':\n return <Hash />;\n case 'boolean':\n return <ToggleLeft />;\n case 'string':\n default:\n return <Type />;\n }\n};\n\n/**\n * A single level of field selection\n */\ntype FieldLevelSelectProps = {\n options: FieldOption[];\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n className?: string;\n};\n\nconst FieldLevelSelect: React.FC<FieldLevelSelectProps> = ({\n options,\n value,\n onChange,\n placeholder = 'Select field',\n className,\n}) => {\n return (\n <div className={cn('relative', className)}>\n <Select value={value} onValueChange={onChange}>\n <SelectTrigger className=\"min-w-[140px] text-neutral6 bg-surface4\" size=\"sm\">\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map(option => (\n <SelectItem key={option.path} value={option.path}>\n <span className=\"flex items-center gap-2\">\n <Icon size=\"sm\" className=\"text-neutral3\">\n {getFieldTypeIcon(option.type)}\n </Icon>\n {option.label}\n {option.hasChildren && <span className=\"text-neutral3\">...</span>}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n );\n};\n\n/**\n * Recursive field selector that shows additional dropdowns for nested objects/arrays\n */\nexport const RuleFieldSelect: React.FC<RuleFieldSelectProps> = ({ schema, value, onChange, className }) => {\n // Parse the current path into segments\n const pathSegments = React.useMemo(() => parseFieldPath(value), [value]);\n\n // Build the list of selectors needed based on the current value\n const selectors = React.useMemo(() => {\n const result: Array<{\n options: FieldOption[];\n value: string;\n basePath: string;\n }> = [];\n\n // First level: root schema properties\n const rootOptions = getFieldOptionsFromSchema(schema);\n if (rootOptions.length === 0) return result;\n\n result.push({\n options: rootOptions,\n value: pathSegments[0] || '',\n basePath: '',\n });\n\n // For each segment, check if we need to add more selectors\n let currentPath = '';\n for (let i = 0; i < pathSegments.length; i++) {\n const segment = pathSegments[i];\n currentPath = currentPath ? `${currentPath}.${segment}` : segment;\n\n const fieldOption = getFieldOptionAtPath(schema, currentPath);\n if (!fieldOption || !fieldOption.hasChildren) break;\n\n // Get child options for the next level\n const childOptions = getChildFieldOptions(fieldOption, currentPath);\n if (childOptions.length === 0) break;\n\n // Check if there's a next segment selected\n const nextSegment = pathSegments[i + 1];\n const nextPath = nextSegment ? `${currentPath}.${nextSegment}` : '';\n\n result.push({\n options: childOptions,\n value: nextPath,\n basePath: currentPath,\n });\n }\n\n return result;\n }, [schema, pathSegments]);\n\n // Handle change at a specific level\n const handleChange = React.useCallback(\n (levelIndex: number, newValue: string) => {\n // When changing a level, we truncate any deeper selections\n onChange(newValue);\n },\n [onChange],\n );\n\n if (selectors.length === 0) {\n return <div className={cn('text-sm text-neutral3', className)}>No fields available</div>;\n }\n\n return (\n <div className={cn('flex items-center gap-1', className)}>\n {selectors.map((selector, index) => (\n <React.Fragment key={`${selector.basePath}-${index}`}>\n {index > 0 && <span className=\"text-neutral3\">.</span>}\n <FieldLevelSelect\n options={selector.options}\n value={selector.value}\n onChange={newValue => handleChange(index, newValue)}\n placeholder={index === 0 ? 'Select field' : 'Select property'}\n />\n </React.Fragment>\n ))}\n </div>\n );\n};\n","import type { ConditionOperator, Rule, RuleGroup } from '../types';\nimport type { JsonSchema, JsonSchemaProperty } from '@/lib/json-schema';\n\nexport type { JsonSchema, JsonSchemaProperty };\n\n/**\n * Represents a field option extracted from JSON Schema\n */\nexport type FieldOption = {\n /** The field path (e.g., \"user.email\") */\n path: string;\n /** Display label */\n label: string;\n /** The JSON Schema type of the field */\n type: string;\n /** Whether this field has nested properties */\n hasChildren: boolean;\n /** Child properties if type is object */\n children?: Record<string, JsonSchemaProperty>;\n /** Item schema if type is array */\n items?: JsonSchemaProperty;\n};\n\n/**\n * Props for the RuleBuilder root component\n */\nexport type RuleBuilderProps = {\n /** JSON Schema defining available fields */\n schema: JsonSchema;\n /** Current rule group (recursive, supports nested groups) */\n ruleGroup: RuleGroup | undefined;\n /** Callback when rule group changes */\n onChange: (ruleGroup: RuleGroup | undefined) => void;\n /** Maximum nesting depth (default: 3) */\n maxDepth?: number;\n /** Optional class name */\n className?: string;\n};\n\n/**\n * Internal props for the recursive RuleGroupView component\n */\nexport type RuleGroupViewProps = {\n /** JSON Schema defining available fields */\n schema: JsonSchema;\n /** The rule group to render */\n group: RuleGroup;\n /** Callback when this group changes */\n onChange: (group: RuleGroup) => void;\n /** Callback to remove this group (undefined for root) */\n onRemove?: () => void;\n /** Current nesting depth (0 = root) */\n depth: number;\n /** Maximum nesting depth */\n maxDepth: number;\n};\n\n/**\n * Props for a single rule row\n */\nexport type RuleRowProps = {\n /** JSON Schema defining available fields */\n schema: JsonSchema;\n /** Current rule */\n rule: Rule;\n /** Callback when rule changes */\n onChange: (rule: Rule) => void;\n /** Callback to remove this rule */\n onRemove: () => void;\n /** Optional class name */\n className?: string;\n};\n\n/**\n * Props for the field selector\n */\nexport type RuleFieldSelectProps = {\n /** JSON Schema defining available fields */\n schema: JsonSchema;\n /** Current selected field path */\n value: string;\n /** Callback when field changes */\n onChange: (field: string) => void;\n /** Optional class name */\n className?: string;\n};\n\n/**\n * Props for the operator selector\n */\nexport type RuleOperatorSelectProps = {\n /** Current selected operator */\n value: ConditionOperator;\n /** Callback when operator changes */\n onChange: (operator: ConditionOperator) => void;\n /** Subset of operators to show. Defaults to all operators. */\n operators?: readonly ConditionOperator[];\n /** Optional class name */\n className?: string;\n};\n\n/**\n * Props for the value input\n */\nexport type RuleValueInputProps = {\n /** Current value */\n value: unknown;\n /** Callback when value changes */\n onChange: (value: unknown) => void;\n /** The operator (affects input behavior for \"in\" and \"not_in\") */\n operator: ConditionOperator;\n /** The field type from JSON Schema (string, number, boolean, etc.) */\n fieldType?: string;\n /** Optional placeholder */\n placeholder?: string;\n /** Optional class name */\n className?: string;\n};\n\n/**\n * Operator labels for display\n */\nexport const OPERATOR_LABELS: Record<ConditionOperator, string> = {\n equals: 'equals',\n not_equals: 'not equals',\n contains: 'contains',\n not_contains: 'not contains',\n greater_than: 'greater than',\n less_than: 'less than',\n greater_than_or_equal: 'greater than or equal',\n less_than_or_equal: 'less than or equal',\n in: 'in',\n not_in: 'not in',\n exists: 'exists',\n not_exists: 'not exists',\n};\n\n/**\n * All available operators\n */\nexport const OPERATORS: ConditionOperator[] = [\n 'equals',\n 'not_equals',\n 'contains',\n 'not_contains',\n 'greater_than',\n 'less_than',\n 'greater_than_or_equal',\n 'less_than_or_equal',\n 'in',\n 'not_in',\n 'exists',\n 'not_exists',\n];\n","import {\n Equal,\n EqualNot,\n Text,\n TextSearch,\n ChevronRight,\n ChevronLeft,\n ChevronsRight,\n ChevronsLeft,\n List,\n ListX,\n Check,\n Ban,\n} from 'lucide-react';\nimport * as React from 'react';\n\nimport type { ConditionOperator } from '../types';\nimport type { RuleOperatorSelectProps } from './types';\nimport { OPERATOR_LABELS, OPERATORS } from './types';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select/select';\nimport { Icon } from '@/ds/icons';\nimport { cn } from '@/lib/utils';\n\n/**\n * Icons for each operator type\n */\nconst OPERATOR_ICONS: Record<ConditionOperator, React.ReactNode> = {\n equals: <Equal />,\n not_equals: <EqualNot />,\n contains: <TextSearch />,\n not_contains: <Text />,\n greater_than: <ChevronRight />,\n less_than: <ChevronLeft />,\n greater_than_or_equal: <ChevronsRight />,\n less_than_or_equal: <ChevronsLeft />,\n in: <List />,\n not_in: <ListX />,\n exists: <Check />,\n not_exists: <Ban />,\n};\n\n/**\n * Select component for choosing a rule operator\n */\nexport const RuleOperatorSelect: React.FC<RuleOperatorSelectProps> = ({ value, onChange, operators, className }) => {\n const operatorList = operators ?? OPERATORS;\n\n return (\n <div className={cn('relative', className)}>\n <Select value={value} onValueChange={onChange}>\n <SelectTrigger className=\"min-w-[150px] text-neutral6 bg-surface4\" size=\"sm\">\n <SelectValue placeholder=\"Select operator\" />\n </SelectTrigger>\n <SelectContent>\n {operatorList.map(operator => (\n <SelectItem key={operator} value={operator}>\n <span className=\"flex items-center gap-2\">\n <Icon size=\"sm\" className=\"text-neutral3\">\n {OPERATOR_ICONS[operator]}\n </Icon>\n {OPERATOR_LABELS[operator]}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n );\n};\n","import { Hash, ToggleLeft, Type } from 'lucide-react';\nimport * as React from 'react';\n\nimport type { RuleValueInputProps } from './types';\nimport { Input } from '@/ds/components/Input/input';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select/select';\nimport { Icon } from '@/ds/icons';\nimport { cn } from '@/lib/utils';\n\n/**\n * Parses a string value to the appropriate type\n */\nconst parseValue = (stringValue: string): unknown => {\n const trimmed = stringValue.trim();\n\n // Empty string\n if (trimmed === '') return '';\n\n // Boolean\n if (trimmed === 'true') return true;\n if (trimmed === 'false') return false;\n\n // Null\n if (trimmed === 'null') return null;\n\n // Reject special number strings - keep as strings\n const lowerTrimmed = trimmed.toLowerCase();\n if (lowerTrimmed === 'infinity' || lowerTrimmed === '-infinity' || lowerTrimmed === 'nan') {\n return trimmed;\n }\n\n // Number\n const num = Number(trimmed);\n if (!Number.isNaN(num)) return num;\n\n // String (default)\n return stringValue;\n};\n\n/**\n * Parses a comma-separated string into an array of values\n */\nconst parseArrayValue = (stringValue: string): unknown[] => {\n if (stringValue.trim() === '') return [];\n\n return stringValue.split(',').map(item => parseValue(item.trim()));\n};\n\n/**\n * Converts a value to a display string\n */\nconst valueToString = (value: unknown): string => {\n if (value === null) return 'null';\n if (value === undefined) return '';\n if (Array.isArray(value)) return value.map(valueToString).join(', ');\n return String(value);\n};\n\n/**\n * Converts a boolean value to a string for the select\n */\nconst booleanToString = (value: unknown): string => {\n if (value === true) return 'true';\n if (value === false) return 'false';\n return '';\n};\n\ntype BaseInputProps = {\n value: unknown;\n onChange: (value: unknown) => void;\n placeholder?: string;\n className?: string;\n};\n\n/**\n * Boolean value input using a Select dropdown with icon inside\n */\nconst BooleanValueInput: React.FC<BaseInputProps> = ({ value, onChange, className }) => {\n const stringValue = booleanToString(value);\n\n const handleChange = React.useCallback(\n (newValue: string) => {\n onChange(newValue === 'true');\n },\n [onChange],\n );\n\n return (\n <div className={cn('relative', className)}>\n <Icon size=\"sm\" className=\"absolute left-2 top-1/2 -translate-y-1/2 text-neutral3 pointer-events-none z-10\">\n <ToggleLeft />\n </Icon>\n <Select value={stringValue} onValueChange={handleChange}>\n <SelectTrigger className=\"min-w-[140px] bg-surface4 pl-7\" size=\"sm\">\n <SelectValue placeholder=\"Select value\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">true</SelectItem>\n <SelectItem value=\"false\">false</SelectItem>\n </SelectContent>\n </Select>\n </div>\n );\n};\n\n/**\n * Number value input with icon inside\n */\nconst NumberValueInput: React.FC<BaseInputProps> = ({ value, onChange, placeholder, className }) => {\n const displayValue = value === undefined || value === '' ? '' : String(value);\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n if (inputValue === '') {\n onChange('');\n } else {\n const num = Number(inputValue);\n onChange(Number.isNaN(num) ? inputValue : num);\n }\n },\n [onChange],\n );\n\n return (\n <div className={cn('relative', className)}>\n <Icon size=\"sm\" className=\"absolute left-2 top-1/2 -translate-y-1/2 text-neutral3 pointer-events-none\">\n <Hash />\n </Icon>\n <Input\n type=\"number\"\n value={displayValue}\n onChange={handleChange}\n placeholder={placeholder || 'Enter number'}\n className=\"min-w-[140px] bg-surface4 pl-7\"\n size=\"sm\"\n />\n </div>\n );\n};\n\n/**\n * Text value input with icon inside\n */\nconst TextValueInput: React.FC<BaseInputProps> = ({ value, onChange, placeholder, className }) => {\n const displayValue = valueToString(value);\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(parseValue(e.target.value));\n },\n [onChange],\n );\n\n return (\n <div className={cn('relative', className)}>\n <Icon size=\"sm\" className=\"absolute left-2 top-1/2 -translate-y-1/2 text-neutral3 pointer-events-none\">\n <Type />\n </Icon>\n <Input\n value={displayValue}\n onChange={handleChange}\n placeholder={placeholder || 'Enter value'}\n className=\"min-w-[140px] bg-surface4 pl-7\"\n size=\"sm\"\n />\n </div>\n );\n};\n\n/**\n * Array value input (for \"in\" and \"not_in\" operators)\n */\nconst ArrayValueInput: React.FC<BaseInputProps> = ({ value, onChange, placeholder, className }) => {\n const displayValue = React.useMemo(() => {\n if (Array.isArray(value)) {\n return value.map(valueToString).join(', ');\n }\n return valueToString(value);\n }, [value]);\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(parseArrayValue(e.target.value));\n },\n [onChange],\n );\n\n return (\n <Input\n value={displayValue}\n onChange={handleChange}\n placeholder={placeholder || 'Enter values (comma-separated)'}\n className={cn('min-w-[160px] bg-surface4', className)}\n size=\"sm\"\n />\n );\n};\n\n/**\n * Input component for entering rule values\n * Supports different modes based on the operator and field type:\n * - \"in\" and \"not_in\": Comma-separated values (parsed as array)\n * - Boolean fields: Select dropdown with true/false\n * - Number fields: Number input\n * - Other: Text input\n */\nexport const RuleValueInput: React.FC<RuleValueInputProps> = ({\n value,\n onChange,\n operator,\n fieldType,\n placeholder,\n className,\n}) => {\n const isArrayOperator = operator === 'in' || operator === 'not_in';\n\n // Array operators always use text input for comma-separated values\n if (isArrayOperator) {\n return <ArrayValueInput value={value} onChange={onChange} placeholder={placeholder} className={className} />;\n }\n\n // Boolean fields use Select dropdown\n if (fieldType === 'boolean') {\n return <BooleanValueInput value={value} onChange={onChange} placeholder={placeholder} className={className} />;\n }\n\n // Number fields use number input\n if (fieldType === 'number' || fieldType === 'integer') {\n return <NumberValueInput value={value} onChange={onChange} placeholder={placeholder} className={className} />;\n }\n\n // Default to text input\n return <TextValueInput value={value} onChange={onChange} placeholder={placeholder} className={className} />;\n};\n","import { X } from 'lucide-react';\nimport * as React from 'react';\n\nimport type { ConditionOperator } from '../types';\n\nimport { RuleFieldSelect } from './rule-field-select';\nimport { RuleOperatorSelect } from './rule-operator-select';\nimport { RuleValueInput } from './rule-value-input';\nimport { getFieldOptionAtPath } from './schema-utils';\nimport type { RuleRowProps } from './types';\n\nimport { Button } from '@/ds/components/Button';\nimport { cn } from '@/lib/utils';\n\nconst PRIMITIVE_TYPES = new Set(['string', 'number', 'boolean', 'integer']);\n\n/**\n * A single rule row with field selector, operator selector, and value input\n */\nexport const RuleRow: React.FC<RuleRowProps> = ({ schema, rule, onChange, onRemove, className }) => {\n const fieldType = React.useMemo(() => {\n return getFieldOptionAtPath(schema, rule.field)?.type;\n }, [schema, rule.field]);\n\n const isPrimitive = fieldType !== undefined && PRIMITIVE_TYPES.has(fieldType);\n const isArray = fieldType === 'array';\n const isArrayOperator = rule.operator === 'in' || rule.operator === 'not_in';\n const isExistenceOperator = rule.operator === 'exists' || rule.operator === 'not_exists';\n\n // Show operator + value for primitive types, or for array types (restricted to in/not_in)\n const showComparator = isPrimitive || isArray;\n const showValueInput = !isExistenceOperator && (isPrimitive || (isArray && isArrayOperator));\n\n const handleFieldChange = React.useCallback(\n (field: string) => {\n onChange({ ...rule, field });\n },\n [rule, onChange],\n );\n\n const handleOperatorChange = React.useCallback(\n (operator: ConditionOperator) => {\n const isNewExistence = operator === 'exists' || operator === 'not_exists';\n\n // Existence operators don't need a value\n if (isNewExistence) {\n onChange({ ...rule, operator, value: undefined });\n return;\n }\n\n // Reset value when changing to/from array operators\n const isArrayOperator = operator === 'in' || operator === 'not_in';\n const wasArrayOperator = rule.operator === 'in' || rule.operator === 'not_in';\n\n let newValue = rule.value;\n if (isArrayOperator && !wasArrayOperator) {\n // Converting to array operator: wrap value in array\n newValue = rule.value !== undefined ? [rule.value] : [];\n } else if (!isArrayOperator && wasArrayOperator) {\n // Converting from array operator: take first value\n newValue = Array.isArray(rule.value) ? rule.value[0] : rule.value;\n }\n\n onChange({ ...rule, operator, value: newValue });\n },\n [rule, onChange],\n );\n\n const handleValueChange = React.useCallback(\n (value: unknown) => {\n onChange({ ...rule, value });\n },\n [rule, onChange],\n );\n\n return (\n <div className=\"flex justify-between gap-2\">\n <div className={cn('flex flex-wrap items-center gap-2', className)}>\n <RuleFieldSelect schema={schema} value={rule.field} onChange={handleFieldChange} />\n\n {showComparator && (\n <>\n <RuleOperatorSelect\n value={rule.operator}\n onChange={handleOperatorChange}\n operators={isArray ? (['in', 'not_in'] as const) : undefined}\n />\n\n {showValueInput && (\n <RuleValueInput\n value={rule.value}\n onChange={handleValueChange}\n operator={rule.operator}\n fieldType={fieldType}\n />\n )}\n </>\n )}\n </div>\n\n <Button type=\"button\" onClick={onRemove} tooltip=\"Remove rule\" size=\"icon-sm\" variant=\"ghost\">\n <X />\n </Button>\n </div>\n );\n};\n","import { Plus, X, Component } from 'lucide-react';\nimport * as React from 'react';\n\nimport type { Rule, RuleGroup, RuleGroupDepth1 } from '../types';\nimport { isRule, createDefaultRule, createDefaultRuleGroup } from '../utils';\n\nimport { RuleRow } from './rule-row';\nimport type { RuleBuilderProps, RuleGroupViewProps } from './types';\nimport { Button } from '@/ds/components/Button';\nimport { Icon } from '@/ds/icons';\nimport { cn } from '@/lib/utils';\n\nconst DEFAULT_MAX_DEPTH = 3;\n\n/**\n * Internal recursive component that renders one level of a rule group.\n */\nconst RuleGroupView: React.FC<RuleGroupViewProps> = ({ schema, group, onChange, onRemove, depth, maxDepth }) => {\n const isRoot = depth === 0;\n\n const handleToggleOperator = () => {\n onChange({ ...group, operator: group.operator === 'AND' ? 'OR' : 'AND' });\n };\n\n const handleConditionChange = (index: number, condition: Rule | RuleGroup) => {\n onChange({\n ...group,\n conditions: group.conditions.map((c, i) => (i === index ? (condition as Rule | RuleGroupDepth1) : c)),\n });\n };\n\n const handleRemoveCondition = (index: number) => {\n const newConditions = group.conditions.filter((_, i) => i !== index);\n if (newConditions.length === 0 && onRemove) {\n onRemove();\n } else {\n onChange({ ...group, conditions: newConditions });\n }\n };\n\n const handleAddRule = () => {\n onChange({ ...group, conditions: [...group.conditions, createDefaultRule()] });\n };\n\n const handleAddGroup = () => {\n onChange({\n ...group,\n conditions: [\n ...group.conditions,\n createDefaultRuleGroup(group.operator === 'AND' ? 'OR' : 'AND') as RuleGroupDepth1,\n ],\n });\n };\n\n return (\n <div className={cn(isRoot ? 'bg-surface2' : 'pl-6 bg-surface3')}>\n {/* Non-root group header */}\n {!isRoot && (\n <div className=\"flex items-center justify-between pl-3 pr-4 py-1.5 border-b border-border1 border-dashed\">\n <span className=\"text-ui-xs text-neutral3\">Group</span>\n {onRemove && (\n <Button type=\"button\" onClick={onRemove} tooltip=\"Remove group\" size=\"icon-sm\" variant=\"ghost\">\n <X />\n </Button>\n )}\n </div>\n )}\n\n {group.conditions.map((condition, index) => (\n <div key={index} className=\"border-b border-border1 border-dashed last:border-b-0\">\n <div className={cn('relative', isRule(condition) && 'p-4 border-l-4 border-border1')}>\n {index > 0 && (\n <button\n type=\"button\"\n onClick={handleToggleOperator}\n className={cn(\n 'absolute left-1/2 -translate-x-1/2 z-10 -translate-y-1/2 top-0 text-ui-xs px-3 py-0.5 rounded-full cursor-pointer',\n group.operator === 'OR'\n ? 'bg-accent6Dark text-accent6 hover:bg-accent6Dark/70'\n : 'bg-accent3Dark text-accent3 hover:bg-accent3Dark/70',\n )}\n >\n {group.operator.toLowerCase()}\n </button>\n )}\n\n {isRule(condition) ? (\n <RuleRow\n schema={schema}\n rule={condition}\n onChange={updatedRule => handleConditionChange(index, updatedRule)}\n onRemove={() => handleRemoveCondition(index)}\n />\n ) : (\n <RuleGroupView\n schema={schema}\n group={condition}\n onChange={updatedGroup => handleConditionChange(index, updatedGroup)}\n onRemove={() => handleRemoveCondition(index)}\n depth={depth + 1}\n maxDepth={maxDepth}\n />\n )}\n </div>\n </div>\n ))}\n\n <div className=\"p-2 flex gap-1\">\n <Button type=\"button\" onClick={handleAddRule} variant=\"ghost\" size=\"sm\">\n <Icon>\n <Plus />\n </Icon>\n Add rule\n </Button>\n {depth < maxDepth - 1 && (\n <Button type=\"button\" onClick={handleAddGroup} variant=\"ghost\" size=\"sm\">\n <Icon>\n <Component />\n </Icon>\n Add group\n </Button>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * Rule builder component for creating and managing a recursive set of rules\n * based on a JSON Schema defining available fields.\n *\n * Supports nested rule groups with AND/OR operators at each level.\n */\nexport const RuleBuilder: React.FC<RuleBuilderProps> = ({\n schema,\n ruleGroup,\n onChange,\n maxDepth = DEFAULT_MAX_DEPTH,\n className,\n}) => {\n const handleGroupChange = React.useCallback(\n (group: RuleGroup) => {\n onChange(group);\n },\n [onChange],\n );\n\n const handleAddFirstRule = React.useCallback(() => {\n onChange({ operator: 'AND', conditions: [createDefaultRule()] });\n }, [onChange]);\n\n if (!ruleGroup) {\n return (\n <button\n type=\"button\"\n onClick={handleAddFirstRule}\n className=\"flex items-center justify-center gap-2 text-ui-sm text-neutral3 hover:text-neutral6 w-full border border-dashed border-border1 p-2 rounded-md\"\n >\n <Icon>\n <Plus />\n </Icon>\n Add conditional rule\n </button>\n );\n }\n\n return (\n <div className={className}>\n <RuleGroupView schema={schema} group={ruleGroup} onChange={handleGroupChange} depth={0} maxDepth={maxDepth} />\n </div>\n );\n};\n","import { ArrowLeft, ArrowRight } from 'lucide-react';\nimport { useState } from 'react';\nimport type { PanelProps } from 'react-resizable-panels';\nimport { Panel, usePanelRef } from 'react-resizable-panels';\nimport { Button } from '@/ds/components/Button/Button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { Icon } from '@/ds/icons';\n\nexport interface CollapsiblePanelProps extends PanelProps {\n direction: 'left' | 'right';\n}\n\nexport const CollapsiblePanel = ({ collapsedSize, children, direction, ...props }: CollapsiblePanelProps) => {\n const [collapsed, setCollapsed] = useState(false);\n const panelRef = usePanelRef();\n\n const expand = () => {\n if (!panelRef.current) return;\n panelRef.current.expand();\n };\n\n return (\n <Panel\n panelRef={panelRef}\n collapsedSize={collapsedSize}\n {...props}\n onResize={size => {\n if (!collapsedSize) return;\n if (typeof collapsedSize !== 'number') return;\n\n if (size.inPixels <= collapsedSize) {\n setCollapsed(true);\n } else if (collapsed) {\n setCollapsed(false);\n }\n }}\n >\n {collapsed ? (\n <Tooltip>\n <div className=\"flex items-center justify-center h-full\">\n <TooltipTrigger asChild>\n <Button onClick={expand} className=\"h-48! border-none\">\n <Icon>{direction === 'left' ? <ArrowRight /> : <ArrowLeft />}</Icon>\n </Button>\n </TooltipTrigger>\n </div>\n\n <TooltipContent>Expand</TooltipContent>\n </Tooltip>\n ) : (\n children\n )}\n </Panel>\n );\n};\n","import { Separator } from 'react-resizable-panels';\nimport { ResizeHandleIndicator } from '@/ds/primitives/resize-handle-indicator';\nimport { cn } from '@/lib/utils';\n\nexport type PanelSeparatorProps = {\n /** `line` fits a visible container edge; `pill` floats when there is none. */\n variant?: 'line' | 'pill';\n};\n\nconst stateClasses = {\n line: cn(\n 'group-hover/separator:opacity-100',\n \"group-data-[separator='hover']/separator:opacity-100\",\n \"group-data-[separator='active']/separator:opacity-100 group-data-[separator='active']/separator:via-neutral6/45\",\n 'group-focus-visible/separator:opacity-100 group-focus-visible/separator:via-accent1',\n ),\n pill: cn(\n 'group-hover/separator:h-12 group-hover/separator:w-1',\n \"group-data-[separator='hover']/separator:h-12 group-data-[separator='hover']/separator:w-1\",\n \"group-data-[separator='active']/separator:h-12 group-data-[separator='active']/separator:w-1 group-data-[separator='active']/separator:bg-accent1\",\n 'group-focus-visible/separator:bg-accent1',\n ),\n};\n\nexport const PanelSeparator = ({ variant = 'line' }: PanelSeparatorProps) => {\n return (\n <Separator\n className={cn(\n 'group/separator relative w-0 bg-transparent z-10',\n 'focus:outline-hidden focus-visible:outline-hidden',\n )}\n >\n {/* Hit zone wider than the 0px separator; indicator centered inside. */}\n <span\n aria-hidden\n className=\"absolute inset-y-0 -left-1 -right-1 flex items-center justify-center cursor-col-resize touch-none\"\n >\n <ResizeHandleIndicator variant={variant} className={stateClasses[variant]} />\n </span>\n </Separator>\n );\n};\n","export const EXTENSION_TO_MIME: Record<string, string> = {\n jpg: 'image/jpg',\n jpeg: 'image/jpeg',\n png: 'image/png',\n gif: 'image/gif',\n webp: 'image/webp',\n svg: 'image/svg+xml',\n bmp: 'image/bmp',\n ico: 'image/x-icon',\n pdf: 'application/pdf',\n};\n","import { EXTENSION_TO_MIME } from './constants';\n\nexport const getFileContentType = async (url: string) => {\n try {\n const response = await fetch(url, {\n method: 'HEAD',\n });\n\n if (!response.ok) {\n throw new Error('Failed to get file content type');\n }\n\n const contentType = response.headers.get('content-type');\n\n if (!contentType) {\n throw new Error('Failed to get file content type');\n }\n\n return contentType;\n } catch {\n // fetch failed — try to infer content type from the file extension\n try {\n const urlObject = new URL(url);\n const pathname = urlObject.pathname;\n const extension = pathname.split('.').pop();\n if (!extension) return undefined;\n return EXTENSION_TO_MIME[extension.toLowerCase()];\n } catch {\n // url is not a valid absolute URL (e.g. a relative path) — extract\n // extension from the raw string so we still return a useful MIME type.\n const extension = url.split('.').pop()?.split(/[?#]/)[0];\n if (!extension) return undefined;\n return EXTENSION_TO_MIME[extension.toLowerCase()];\n }\n }\n};\n","// Serialize data to pretty-printed JSON and trigger a browser file download.\nexport const downloadJson = (filename: string, data: unknown): void => {\n const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n\n anchor.href = url;\n anchor.download = filename;\n document.body.appendChild(anchor);\n anchor.click();\n anchor.remove();\n\n URL.revokeObjectURL(url);\n};\n","export const fileToBase64 = async (file: File): Promise<string> => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => {\n const result = reader.result;\n if (typeof result === 'string') {\n resolve(result);\n } else {\n reject(new Error('Failed to convert file to base64.'));\n }\n };\n\n reader.onerror = error => {\n reject(error);\n };\n\n reader.readAsDataURL(file);\n });\n};\n","import type { JsonSchema, JsonSchemaProperty } from '@/lib/json-schema';\n\nconst MAX_DEPTH = 10;\n\n/**\n * Generates a default value for a single property based on its type\n */\nfunction generatePropertyDefault(property: JsonSchemaProperty, depth: number): unknown {\n // Return explicit default if provided\n if (property.default !== undefined) {\n return property.default;\n }\n\n // Guard against circular references\n if (depth >= MAX_DEPTH) {\n return undefined;\n }\n\n const type = Array.isArray(property.type) ? property.type[0] : property.type;\n\n switch (type) {\n case 'string':\n return '';\n case 'number':\n case 'integer':\n return 0;\n case 'boolean':\n return false;\n case 'array':\n return [];\n case 'object':\n if (property.properties) {\n return generateObjectDefaults(property.properties, depth + 1);\n }\n return {};\n case 'null':\n return null;\n default:\n return '';\n }\n}\n\n/**\n * Generates default values for an object's properties\n */\nfunction generateObjectDefaults(\n properties: Record<string, JsonSchemaProperty>,\n depth: number,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, property] of Object.entries(properties)) {\n result[key] = generatePropertyDefault(property, depth);\n }\n\n return result;\n}\n\n/**\n * Generates default values from a JSON Schema.\n *\n * For each property:\n * - Uses `default` value if specified in schema\n * - Otherwise generates a placeholder based on type:\n * - string → \"\"\n * - number/integer → 0\n * - boolean → false\n * - array → []\n * - object → recurses into nested properties\n * - null → null\n *\n * @param schema - JSON Schema definition\n * @returns Object with default values for all properties\n */\nexport function generateDefaultValues(schema: JsonSchema | undefined): Record<string, unknown> {\n if (!schema || !schema.properties) {\n return {};\n }\n\n return generateObjectDefaults(schema.properties, 0);\n}\n","import { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\n\ninterface PlaygroundStore {\n requestContext: Record<string, any>;\n setRequestContext: (requestContext: Record<string, any>) => void;\n}\n\nexport const usePlaygroundStore = create<PlaygroundStore>()(\n persist(\n set => ({\n requestContext: {},\n setRequestContext: requestContext => set({ requestContext }),\n }),\n {\n name: 'mastra-playground-store',\n },\n ),\n);\n","import { EntityType } from '@mastra/core/observability';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\n/** Primitive type options — matches the traces filter vocabulary. */\nexport const METRICS_ROOT_ENTITY_TYPE_OPTIONS = [\n { label: 'Agent', entityType: EntityType.AGENT },\n { label: 'Workflow', entityType: EntityType.WORKFLOW_RUN },\n { label: 'Scorer', entityType: EntityType.SCORER },\n { label: 'Ingest', entityType: EntityType.RAG_INGESTION },\n] as const;\n\n/** Field IDs that live in dedicated URL params (not the generic `filterX` set). */\nexport const METRICS_SYNTHETIC_FILTER_FIELD_IDS = ['rootEntityType'] as const;\n\nexport const METRICS_ROOT_ENTITY_TYPE_PARAM = 'rootEntityType';\n\n/** URL param name for each generic property filter field. Mirrors traces for\n * cross-page URL consistency (user can copy a trace's filter URL and paste\n * equivalent dimensions into metrics). */\nexport const METRICS_PROPERTY_FILTER_PARAM_BY_FIELD = {\n tags: 'filterTags',\n entityId: 'filterEntityId',\n entityName: 'filterEntityName',\n runId: 'filterRunId',\n threadId: 'filterThreadId',\n sessionId: 'filterSessionId',\n requestId: 'filterRequestId',\n resourceId: 'filterResourceId',\n userId: 'filterUserId',\n organizationId: 'filterOrganizationId',\n serviceName: 'filterServiceName',\n environment: 'filterEnvironment',\n experimentId: 'filterExperimentId',\n provider: 'filterProvider',\n model: 'filterModel',\n} as const;\n\nexport type MetricsPropertyFilterFieldId = keyof typeof METRICS_PROPERTY_FILTER_PARAM_BY_FIELD;\n\nexport const METRICS_PROPERTY_FILTER_FIELD_IDS = Object.keys(\n METRICS_PROPERTY_FILTER_PARAM_BY_FIELD,\n) as Array<MetricsPropertyFilterFieldId>;\n\nconst METRICS_FILTERS_STORAGE_KEY = 'mastra:metrics:saved-filters';\n\n/** Save the current metrics filter URL params so the metrics page can restore\n * them on next visit (same pattern as traces/logs). */\nexport function saveMetricsFiltersToStorage(params: URLSearchParams): void {\n const serialized = getPreservedMetricsFilterParams(params);\n try {\n localStorage.setItem(METRICS_FILTERS_STORAGE_KEY, serialized.toString());\n } catch {\n // localStorage may be unavailable — silently skip.\n }\n}\n\nexport function clearSavedMetricsFilters(): void {\n try {\n localStorage.removeItem(METRICS_FILTERS_STORAGE_KEY);\n } catch {\n // ignore\n }\n}\n\nexport function loadMetricsFiltersFromStorage(): URLSearchParams | null {\n try {\n const raw = localStorage.getItem(METRICS_FILTERS_STORAGE_KEY);\n if (!raw) return null;\n const parsed = new URLSearchParams(raw);\n return parsed.toString() ? parsed : null;\n } catch {\n return null;\n }\n}\n\nexport function hasAnyMetricsFilterParams(params: URLSearchParams): boolean {\n if (params.has(METRICS_ROOT_ENTITY_TYPE_PARAM)) return true;\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n if (params.has(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId])) return true;\n }\n return false;\n}\n\n/** Build the PropertyFilterField list shown in the metrics filter popover.\n *\n * The field order is curated for OLAP efficiency: columnar/LowCardinality\n * dimensions first, then bloom_filter-indexed high-cardinality IDs as\n * free-text. Fields that are expensive to filter without an index are\n * intentionally omitted from this dashboard surface. */\nexport function createMetricsPropertyFilterFields({\n availableTags,\n availableEntityNames,\n availableServiceNames,\n availableEnvironments,\n loading,\n}: {\n availableTags: string[];\n availableEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n loading?: {\n tags?: boolean;\n entityNames?: boolean;\n serviceNames?: boolean;\n environments?: boolean;\n };\n}): PropertyFilterField[] {\n const fields: PropertyFilterField[] = [\n {\n id: 'rootEntityType',\n label: 'Primitive Type',\n kind: 'pick-multi',\n searchable: false,\n options: METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ label: o.label, value: o.entityType })),\n placeholder: 'Choose entity type',\n emptyText: 'No entity types.',\n },\n {\n id: 'entityName',\n label: 'Primitive Name',\n kind: 'pick-multi',\n options: availableEntityNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose entity names',\n emptyText: 'No entity names found.',\n isLoading: loading?.entityNames,\n },\n { id: 'entityId', label: 'Primitive ID', kind: 'text' },\n {\n id: 'tags',\n label: 'Tags',\n kind: 'pick-multi',\n multi: true,\n options: availableTags.map(tag => ({ label: tag, value: tag })),\n placeholder: 'Choose tags',\n emptyText: 'No tags found.',\n isLoading: loading?.tags,\n },\n {\n id: 'serviceName',\n label: 'Service Name',\n kind: 'pick-multi',\n options: availableServiceNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose service names',\n emptyText: 'No service names found.',\n isLoading: loading?.serviceNames,\n },\n {\n id: 'environment',\n label: 'Environment',\n kind: 'pick-multi',\n options: availableEnvironments.map(env => ({ label: env, value: env })),\n placeholder: 'Choose environments',\n emptyText: 'No environments found.',\n isLoading: loading?.environments,\n },\n // Provider / model are filterable by URL (filterProvider / filterModel) but\n // are omitted from the popover until we expose a discovery endpoint.\n // High-cardinality IDs — free-text. Backed by bloom_filter skip indexes on\n // ClickHouse, narrow timestamp range pruning on DuckDB.\n { id: 'threadId', label: 'Thread ID', kind: 'text' },\n { id: 'resourceId', label: 'Resource ID', kind: 'text' },\n { id: 'userId', label: 'User ID', kind: 'text' },\n { id: 'organizationId', label: 'Organization ID', kind: 'text' },\n { id: 'runId', label: 'Run ID', kind: 'text' },\n { id: 'sessionId', label: 'Session ID', kind: 'text' },\n { id: 'requestId', label: 'Request ID', kind: 'text' },\n { id: 'experimentId', label: 'Experiment ID', kind: 'text' },\n ];\n const byLabel = (a: PropertyFilterField, b: PropertyFilterField) => a.label.localeCompare(b.label);\n const pickMulti = fields.filter(f => f.kind === 'pick-multi').sort(byLabel);\n const text = fields.filter(f => f.kind === 'text').sort(byLabel);\n return [...pickMulti, ...text];\n}\n\n/** Parse filter tokens from URL params, preserving insertion order. */\nexport function getMetricsPropertyFilterTokens(searchParams: URLSearchParams): PropertyFilterToken[] {\n const tokens: PropertyFilterToken[] = [];\n\n const paramToFieldId = new Map<string, string>([[METRICS_ROOT_ENTITY_TYPE_PARAM, 'rootEntityType']]);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n paramToFieldId.set(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId], fieldId);\n }\n\n const seen = new Set<string>();\n for (const [paramName] of searchParams.entries()) {\n const fieldId = paramToFieldId.get(paramName);\n if (!fieldId || seen.has(fieldId)) continue;\n seen.add(fieldId);\n\n if (fieldId === 'tags') {\n const raw = searchParams.getAll(paramName);\n if (raw.length === 0) continue;\n tokens.push({ fieldId, value: raw.filter(Boolean) });\n continue;\n }\n\n // Multi-value pick-multi fields: collect all occurrences.\n if (\n fieldId === 'rootEntityType' ||\n fieldId === 'entityName' ||\n fieldId === 'serviceName' ||\n fieldId === 'environment' ||\n fieldId === 'provider' ||\n fieldId === 'model'\n ) {\n const raw = searchParams.getAll(paramName);\n if (raw.length > 1) {\n tokens.push({ fieldId, value: raw });\n continue;\n }\n }\n\n const value = searchParams.get(paramName);\n if (value !== null) tokens.push({ fieldId, value });\n }\n\n return tokens;\n}\n\n/** Return a fresh URLSearchParams containing only metrics filter params. */\nexport function getPreservedMetricsFilterParams(searchParams: URLSearchParams): URLSearchParams {\n const next = new URLSearchParams();\n const rootEntityValues = searchParams.getAll(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const v of rootEntityValues) next.append(METRICS_ROOT_ENTITY_TYPE_PARAM, v);\n\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n const param = METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId];\n const values = searchParams.getAll(param);\n for (const v of values) next.append(param, v);\n }\n return next;\n}\n\n/** Mutate `params` in place: strip every metrics filter param, then re-write\n * them from `tokens` in order. Token insertion order drives URL order so\n * filter pill order is stable across reloads. */\nexport function applyMetricsPropertyFilterTokens(params: URLSearchParams, tokens: PropertyFilterToken[]): void {\n params.delete(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n params.delete(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n\n for (const token of tokens) {\n const paramName =\n token.fieldId === 'rootEntityType'\n ? METRICS_ROOT_ENTITY_TYPE_PARAM\n : METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[token.fieldId as MetricsPropertyFilterFieldId];\n if (!paramName) continue;\n\n if (Array.isArray(token.value)) {\n const values = token.value.filter(v => typeof v === 'string' && v !== '');\n if (values.length === 0) {\n // Keep an empty sentinel for `tags` so the pill survives a Reset.\n if (token.fieldId === 'tags') params.append(paramName, '');\n continue;\n }\n for (const v of values) params.append(paramName, v);\n } else if (typeof token.value === 'string') {\n // Persist even empty / 'Any' strings so newly-created pills (and\n // neutralized-but-still-visible pills after a Reset) survive URL\n // round-trips. `buildMetricsDimensionalFilter` drops these on the API\n // query side so neutrals never reach the backend.\n params.set(paramName, token.value.trim());\n }\n }\n}\n\n/** Shape of the dimensional filter object fed into `MetricsFilter` on client\n * calls. Kept compatible with `metricsFilterSchema` in @internal/core — every\n * scalar field maps to a single-string column filter, and `tags` is the only\n * array field (matched via `has()` / equivalent on backends). */\nexport type MetricsDimensionalFilter = {\n rootEntityType?: EntityType;\n entityName?: string;\n entityId?: string;\n tags?: string[];\n serviceName?: string;\n environment?: string;\n provider?: string;\n model?: string;\n threadId?: string;\n resourceId?: string;\n userId?: string;\n organizationId?: string;\n runId?: string;\n sessionId?: string;\n requestId?: string;\n experimentId?: string;\n};\n\n/** Convert the active token list into a `MetricsFilter`-compatible object.\n *\n * Single-value text fields are assigned as strings; `pick-multi` fields are\n * assigned as string arrays. Empty/neutral values are dropped. */\n/** \"Neutral\" sentinel for single-select pick-multi fields. Emitted by the\n * toolbar's Clear action so pills stay visible after reset; must be stripped\n * before the filter object is sent to the backend (it is not a valid enum\n * option for fields like `rootEntityType`). */\nconst NEUTRAL_PICK_VALUE = 'Any';\n\nfunction isNeutralValue(v: string): boolean {\n const trimmed = v.trim();\n return trimmed === '' || trimmed === NEUTRAL_PICK_VALUE;\n}\n\n/** `rootEntityType` is enum-valued at the backend; URL-supplied or stale stored\n * values can be arbitrary strings, so we validate against the allowed set\n * before letting them reach the filter object. Returns `undefined` if the\n * value isn't a known enum option. */\nconst VALID_ROOT_ENTITY_TYPES: ReadonlySet<EntityType> = new Set(\n METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => o.entityType),\n);\nfunction toValidRootEntityType(v: string): EntityType | undefined {\n const trimmed = v.trim();\n return VALID_ROOT_ENTITY_TYPES.has(trimmed as EntityType) ? (trimmed as EntityType) : undefined;\n}\n\nexport function buildMetricsDimensionalFilter(tokens: PropertyFilterToken[]): MetricsDimensionalFilter {\n const result: MetricsDimensionalFilter = {};\n for (const token of tokens) {\n const fieldId = token.fieldId as keyof MetricsDimensionalFilter;\n if (Array.isArray(token.value)) {\n const values = token.value\n .filter((v): v is string => typeof v === 'string')\n .map(v => v.trim())\n .filter(v => !isNeutralValue(v));\n if (values.length === 0) continue;\n if (fieldId === 'tags') {\n result.tags = values;\n } else if (fieldId === 'rootEntityType') {\n const validated = toValidRootEntityType(values[0]);\n if (validated) result.rootEntityType = validated;\n } else {\n // Backend accepts a single string per dimension; take the first selection.\n (result as Record<string, unknown>)[fieldId] = values[0];\n }\n } else if (typeof token.value === 'string') {\n if (isNeutralValue(token.value)) continue;\n const trimmed = token.value.trim();\n if (fieldId === 'rootEntityType') {\n const validated = toValidRootEntityType(trimmed);\n if (validated) result.rootEntityType = validated;\n } else {\n (result as Record<string, unknown>)[fieldId] = trimmed;\n }\n }\n }\n return result;\n}\n","/* eslint-disable react-refresh/only-export-components */\nimport { format } from 'date-fns';\nimport { createContext, useContext, useMemo } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { buildMetricsDimensionalFilter } from '../metrics-filters';\nimport type { MetricsDimensionalFilter } from '../metrics-filters';\nimport type { PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\nconst DATE_PRESETS = [\n { label: 'Last 24 hours', value: '24h' },\n { label: 'Last 3 days', value: '3d' },\n { label: 'Last 7 days', value: '7d' },\n { label: 'Last 14 days', value: '14d' },\n { label: 'Last 30 days', value: '30d' },\n] as const;\n\nexport type DatePreset = (typeof DATE_PRESETS)[number]['value'] | 'custom';\n\nexport { DATE_PRESETS };\n\nconst VALID_PRESETS = new Set<string>(DATE_PRESETS.map(p => p.value));\n\nexport function isValidPreset(value: string | null | undefined): value is DatePreset {\n return typeof value === 'string' && (VALID_PRESETS.has(value) || value === 'custom');\n}\n\nexport type DateRange = { from?: Date; to?: Date };\n\n/** Internal — all state is derived from the URL-backed props the owner passes.\n * There is intentionally no local mirror; keeping a mirror caused URL ↔ state\n * feedback loops that re-rendered the entire metrics tree on every keystroke.\n */\ntype MetricsContextValue = {\n datePreset: DatePreset;\n setDatePreset: (v: DatePreset) => void;\n customRange: DateRange | undefined;\n setCustomRange: (v: DateRange | undefined) => void;\n dateRangeLabel: string;\n filterTokens: PropertyFilterToken[];\n setFilterTokens: (tokens: PropertyFilterToken[]) => void;\n dimensionalFilter: MetricsDimensionalFilter;\n /** Stable JSON representation of `dimensionalFilter`, safe for query keys. */\n dimensionalFilterKey: string;\n /** Base path drilldown links should target for the Traces page. */\n tracesBasePath: string | undefined;\n /** Base path drilldown links should target for the Logs page. */\n logsBasePath: string | undefined;\n};\n\nexport const MetricsContext = createContext<MetricsContextValue>({\n datePreset: '24h',\n setDatePreset: () => {},\n customRange: undefined,\n setCustomRange: () => {},\n dateRangeLabel: 'Last 24 hours',\n filterTokens: [],\n setFilterTokens: () => {},\n dimensionalFilter: {},\n dimensionalFilterKey: '{}',\n tracesBasePath: undefined,\n logsBasePath: undefined,\n});\n\nexport function useMetrics() {\n return useContext(MetricsContext);\n}\n\nfunction getDateRangeLabel(preset: DatePreset, customRange: DateRange | undefined) {\n if (preset !== 'custom') {\n return DATE_PRESETS.find(p => p.value === preset)!.label;\n }\n if (customRange?.from) {\n if (customRange.to) {\n return `${format(customRange.from, 'MMM d, yyyy')} – ${format(customRange.to, 'MMM d, yyyy')}`;\n }\n return format(customRange.from, 'MMM d, yyyy');\n }\n return 'Custom range';\n}\n\n/**\n * URL-driven metrics provider.\n *\n * The owner (page) is expected to:\n * - pass the current `preset` / `filterTokens` derived from `useSearchParams`\n * - pass `onPresetChange` / `onFilterTokensChange` that update the URL\n *\n * The provider never stores its own copies — changes round-trip through the URL\n * exactly once, which keeps re-renders bounded no matter how much data is on\n * screen.\n */\nexport function MetricsProvider({\n children,\n preset,\n filterTokens,\n onPresetChange,\n onFilterTokensChange,\n customRange,\n onCustomRangeChange,\n tracesBasePath,\n logsBasePath,\n}: {\n children: ReactNode;\n preset: DatePreset;\n filterTokens: PropertyFilterToken[];\n onPresetChange: (preset: DatePreset) => void;\n onFilterTokensChange: (tokens: PropertyFilterToken[]) => void;\n customRange?: DateRange;\n onCustomRangeChange?: (range: DateRange | undefined) => void;\n /** Base path for drilldown links to the Traces page. Defaults to `/observability` when omitted. */\n tracesBasePath?: string;\n /** Base path for drilldown links to the Logs page. Defaults to `/logs` when omitted. */\n logsBasePath?: string;\n}) {\n // Stable key for memo dependencies — the parent may re-create the tokens\n // array on every render (e.g. from `useMemo(... , [searchParams])`), but the\n // *content* usually doesn't change.\n const filterTokensKey = useMemo(() => JSON.stringify(filterTokens), [filterTokens]);\n\n // Intentional: re-pin only when the serialized content changes, not on every\n // parent render that allocates a new array.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const stableFilterTokens = useMemo(() => filterTokens, [filterTokensKey]);\n\n const dimensionalFilter = useMemo(() => buildMetricsDimensionalFilter(stableFilterTokens), [stableFilterTokens]);\n\n const dimensionalFilterKey = useMemo(() => JSON.stringify(dimensionalFilter), [dimensionalFilter]);\n\n const dateRangeLabel = getDateRangeLabel(preset, customRange);\n\n const value = useMemo<MetricsContextValue>(\n () => ({\n datePreset: preset,\n setDatePreset: onPresetChange,\n customRange,\n setCustomRange: onCustomRangeChange ?? (() => {}),\n dateRangeLabel,\n filterTokens: stableFilterTokens,\n setFilterTokens: onFilterTokensChange,\n dimensionalFilter,\n dimensionalFilterKey,\n tracesBasePath,\n logsBasePath,\n }),\n [\n preset,\n onPresetChange,\n customRange,\n onCustomRangeChange,\n dateRangeLabel,\n stableFilterTokens,\n onFilterTokensChange,\n dimensionalFilter,\n dimensionalFilterKey,\n tracesBasePath,\n logsBasePath,\n ],\n );\n\n return <MetricsContext.Provider value={value}>{children}</MetricsContext.Provider>;\n}\n","import { useRef } from 'react';\nimport { DateTimeRangePicker } from '../../../ds/components/DateTimeRangePicker';\nimport type { DateRangePreset } from '../../../ds/components/DateTimeRangePicker';\nimport { useMetrics } from '../hooks/use-metrics';\nimport type { DatePreset } from '../hooks/use-metrics';\n\nconst METRICS_PRESETS: readonly DateRangePreset[] = [\n 'last-24h',\n 'last-3d',\n 'last-7d',\n 'last-14d',\n 'last-30d',\n 'custom',\n];\n\nfunction toPickerPreset(preset: DatePreset): DateRangePreset {\n switch (preset) {\n case '3d':\n return 'last-3d';\n case '7d':\n return 'last-7d';\n case '14d':\n return 'last-14d';\n case '30d':\n return 'last-30d';\n case 'custom':\n return 'custom';\n default:\n return 'last-24h';\n }\n}\n\nfunction fromPickerPreset(preset: DateRangePreset): DatePreset {\n switch (preset) {\n case 'last-3d':\n return '3d';\n case 'last-7d':\n return '7d';\n case 'last-14d':\n return '14d';\n case 'last-30d':\n return '30d';\n case 'custom':\n return 'custom';\n default:\n return '24h';\n }\n}\n\nexport function DateRangeSelector() {\n const { datePreset, setDatePreset, customRange, setCustomRange } = useMetrics();\n\n // The picker reports each field separately and also fires onDateChange right\n // after a non-custom preset switch. Track the latest preset and range\n // synchronously so the guard below skips those calls and the second field\n // change still sees the first one.\n const presetRef = useRef(datePreset);\n presetRef.current = datePreset;\n const customRangeRef = useRef(customRange);\n customRangeRef.current = customRange;\n\n return (\n <DateTimeRangePicker\n preset={toPickerPreset(datePreset)}\n onPresetChange={next => {\n const mapped = fromPickerPreset(next);\n presetRef.current = mapped;\n setDatePreset(mapped);\n }}\n dateFrom={customRange?.from}\n dateTo={customRange?.to}\n onDateChange={(value, type) => {\n if (presetRef.current !== 'custom') return;\n const next = { ...customRangeRef.current, [type]: value };\n customRangeRef.current = next;\n setCustomRange(next);\n }}\n presets={METRICS_PRESETS}\n />\n );\n}\n","export function formatCompact(n: number): string {\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1_000) return `${(n / 1_000).toFixed(1)}K`;\n return n.toLocaleString();\n}\n\nexport function formatCost(value: number, unit?: string | null): string {\n if (unit?.toLowerCase() === 'usd' || !unit) {\n return `$${value < 0.01 && value > 0 ? value.toFixed(4) : value.toFixed(2)}`;\n }\n return `${value.toFixed(4)} ${unit}`;\n}\n\nexport const CHART_COLORS = {\n green: '#22c55e',\n orange: '#fb923c',\n pink: '#f472b6',\n purple: '#8b5cf6',\n blue: '#4f83f1',\n blueDark: '#2b5cd9',\n blueLight: '#6b8fe5',\n red: '#f87171',\n greenDark: '#15613a',\n redDark: '#991b1b',\n yellow: '#facc15',\n} as const;\n","import { Tooltip, TooltipContent, TooltipTrigger } from '../../../ds/components/Tooltip';\nimport { CHART_COLORS } from './metrics-utils';\n\nexport function BarListContent({\n data,\n maxVal,\n fmt,\n color,\n valueLabel,\n legend,\n}: {\n data: Array<{ name: string; value: number }>;\n maxVal: number;\n fmt: (v: number) => string;\n color: string;\n valueLabel?: string;\n legend?: Array<{ color: string; label: string }>;\n}) {\n const sorted = [...data].sort((a, b) => b.value - a.value);\n return (\n <div>\n <div className=\"flex items-center gap-3 mb-2\">\n <div className=\"flex-1 flex items-center gap-4\">\n {legend?.map(l => (\n <div key={l.label} className=\"flex items-center gap-1.5\">\n <div className=\"size-2 rounded-full\" style={{ backgroundColor: l.color }} />\n <span className=\"text-xs text-icon2\">{l.label}</span>\n </div>\n ))}\n </div>\n {valueLabel && <span className=\"shrink-0 text-xs text-icon2\">{valueLabel}</span>}\n </div>\n <div className=\"space-y-2.5\">\n {sorted.map(d => {\n const pct = Math.min(Math.max(maxVal > 0 ? (d.value / maxVal) * 100 : 0, 0), 100);\n return (\n <div key={d.name} className=\"group flex items-center gap-3\">\n <div className=\"relative flex-1 h-7\">\n <div\n className=\"absolute inset-y-0 left-0 rounded\"\n style={{ width: `${pct}%`, backgroundColor: color }}\n />\n <span className=\"absolute inset-y-0 left-2 flex items-center text-xs text-white whitespace-nowrap\">\n {d.name}\n </span>\n </div>\n <span className=\"shrink-0 text-xs font-mono text-icon6 tabular-nums\">{fmt(d.value)}</span>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport function StackedRunsBars({ data }: { data: Array<{ name: string; completed: number; errors: number }> }) {\n const sorted = [...data].sort((a, b) => b.completed + b.errors - (a.completed + a.errors));\n const maxTotal = Math.max(...sorted.map(d => d.completed + d.errors));\n return (\n <div>\n <div className=\"flex items-center gap-3 mb-2\">\n <div className=\"flex-1 flex items-center gap-4\">\n <div className=\"flex items-center gap-1.5\">\n <div className=\"size-2 rounded-full\" style={{ backgroundColor: CHART_COLORS.blue }} />\n <span className=\"text-xs text-icon2\">Completed</span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <div className=\"size-2 rounded-full\" style={{ backgroundColor: CHART_COLORS.red }} />\n <span className=\"text-xs text-icon2\">Errors</span>\n </div>\n </div>\n <span className=\"shrink-0 text-xs text-icon2\">Total (Success)</span>\n </div>\n <div className=\"space-y-2.5\">\n {sorted.map(d => {\n const total = d.completed + d.errors;\n const successPct = total > 0 ? ((d.completed / total) * 100).toFixed(1) : '0.0';\n const completedWidth = Math.min(Math.max(maxTotal > 0 ? (d.completed / maxTotal) * 100 : 0, 0), 100);\n const errorsWidth = Math.min(Math.max(maxTotal > 0 ? (d.errors / maxTotal) * 100 : 0, 0), 100);\n return (\n <div key={d.name} className=\"group flex items-center gap-3\">\n <div className=\"relative flex-1 h-7\">\n <Tooltip>\n <TooltipTrigger asChild>\n <div\n role=\"img\"\n aria-label={`${d.completed.toLocaleString()} completed`}\n tabIndex={0}\n className=\"absolute inset-y-0 left-0 rounded-l cursor-default\"\n style={{ width: `${completedWidth}%`, backgroundColor: CHART_COLORS.blue }}\n />\n </TooltipTrigger>\n <TooltipContent side=\"top\" className=\"font-mono\">\n {d.completed.toLocaleString()} completed\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <div\n role=\"img\"\n aria-label={`${d.errors.toLocaleString()} errors`}\n tabIndex={0}\n className=\"absolute inset-y-0 rounded-r cursor-default\"\n style={{\n left: `${completedWidth}%`,\n width: `${errorsWidth}%`,\n backgroundColor: CHART_COLORS.red,\n }}\n />\n </TooltipTrigger>\n <TooltipContent side=\"top\" className=\"font-mono\">\n {d.errors.toLocaleString()} errors\n </TooltipContent>\n </Tooltip>\n <span className=\"absolute inset-y-0 left-2 flex items-center text-xs text-white whitespace-nowrap pointer-events-none\">\n {d.name}\n </span>\n </div>\n <span className=\"shrink-0 text-xs font-mono text-icon6 tabular-nums\">\n {total.toLocaleString()} ({successPct}%)\n </span>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import { EyeIcon, LogsIcon } from 'lucide-react';\nimport type { ElementType } from 'react';\nimport { Button } from '../../../ds/components/Button';\n\ntype CardActionButtonProps = {\n /** Pre-built drilldown URL (typically from `useDrilldown().getTracesHref(...)`). */\n href: string;\n /** Override how the underlying anchor is rendered — pass a router-aware Link\n * to keep navigation in-app. Defaults to `<a>`. */\n LinkComponent?: ElementType;\n};\n\n/** Icon link in a MetricsCard top bar that opens the Traces page pre-filtered\n * to whatever dimensions the card knows about. */\nexport function OpenInTracesButton({ href, LinkComponent = 'a' }: CardActionButtonProps) {\n return (\n <Button\n as={LinkComponent}\n href={href}\n variant=\"ghost\"\n size=\"icon-md\"\n tooltip=\"View in Traces\"\n aria-label=\"View in Traces\"\n >\n <EyeIcon />\n </Button>\n );\n}\n\n/** Icon link in a MetricsCard top bar that opens the Logs page scoped to\n * errors for the card's current dimensions. */\nexport function OpenErrorsInLogsButton({ href, LinkComponent = 'a' }: CardActionButtonProps) {\n return (\n <Button\n as={LinkComponent}\n href={href}\n variant=\"ghost\"\n size=\"icon-md\"\n tooltip=\"View errors in Logs\"\n aria-label=\"View errors in Logs\"\n >\n <LogsIcon />\n </Button>\n );\n}\n","import { MetricsKpiCard } from '../../../ds/components/MetricsKpiCard';\n\nexport interface KpiCardViewProps {\n label: string;\n value: string | null;\n prevValue?: string;\n changePct?: number | null;\n isLoading: boolean;\n isError: boolean;\n}\n\nexport function KpiCardView({ label, value, prevValue, changePct, isLoading, isError }: KpiCardViewProps) {\n const hasData = value != null;\n return (\n <MetricsKpiCard>\n <MetricsKpiCard.Label>{label}</MetricsKpiCard.Label>\n <MetricsKpiCard.Value className={hasData ? undefined : 'invisible'}>{hasData ? value : '—'}</MetricsKpiCard.Value>\n {isError ? (\n <MetricsKpiCard.Error />\n ) : isLoading ? (\n <MetricsKpiCard.Loading />\n ) : hasData ? (\n changePct != null ? (\n <MetricsKpiCard.Change changePct={changePct} prevValue={prevValue} />\n ) : (\n <MetricsKpiCard.NoChange />\n )\n ) : (\n <MetricsKpiCard.NoData />\n )}\n </MetricsKpiCard>\n );\n}\n","import { useEffect, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { MetricsCard } from '../../../ds/components/MetricsCard';\nimport { MetricsLineChart } from '../../../ds/components/MetricsLineChart';\nimport { Tab, TabContent, TabList, Tabs } from '../../../ds/components/Tabs';\nimport type { LatencyPoint } from '../hooks/use-latency-metrics';\nimport { CHART_COLORS } from './metrics-utils';\n\nconst latencySeries = [\n {\n dataKey: 'p50',\n label: 'p50',\n color: CHART_COLORS.blue,\n aggregate: (data: Record<string, unknown>[]) => ({\n value: data.length > 0 ? `${Math.round(data.reduce((s, d) => s + (d.p50 as number), 0) / data.length)}` : '0',\n suffix: 'avg ms',\n }),\n },\n {\n dataKey: 'p95',\n label: 'p95',\n color: CHART_COLORS.yellow,\n aggregate: (data: Record<string, unknown>[]) => ({\n value: data.length > 0 ? `${Math.round(data.reduce((s, d) => s + (d.p95 as number), 0) / data.length)}` : '0',\n suffix: 'avg ms',\n }),\n },\n];\n\nexport type LatencyTab = 'agents' | 'workflows' | 'tools';\n\nfunction LatencyChart({ data, onPointClick }: { data: LatencyPoint[]; onPointClick?: (point: LatencyPoint) => void }) {\n if (data.length === 0) {\n return <MetricsCard.NoData message=\"No latency data yet\" />;\n }\n return (\n <MetricsLineChart\n data={data}\n series={latencySeries}\n onPointClick={\n onPointClick\n ? point => {\n const p = point as LatencyPoint;\n if (typeof p?.tsMs === 'number' && Number.isFinite(p.tsMs)) onPointClick(p);\n }\n : undefined\n }\n />\n );\n}\n\nexport interface LatencyCardViewProps {\n data: { agentData: LatencyPoint[]; workflowData: LatencyPoint[]; toolData: LatencyPoint[] } | undefined;\n isLoading: boolean;\n isError: boolean;\n /** Optional drilldown: invoked when a chart node is clicked. Container provides the navigation. */\n onPointClick?: (tab: LatencyTab, point: LatencyPoint) => void;\n /**\n * Optional slot for top-bar action buttons (e.g. \"View in Traces\").\n * Pass a function to receive the active tab so the action can scope itself to the current entity type.\n */\n actions?: ReactNode | ((tab: LatencyTab) => ReactNode);\n}\n\nexport function LatencyCardView({ data, isLoading, isError, onPointClick, actions }: LatencyCardViewProps) {\n const initialTab: LatencyTab = !data\n ? 'agents'\n : data.agentData.length > 0\n ? 'agents'\n : data.workflowData.length > 0\n ? 'workflows'\n : data.toolData.length > 0\n ? 'tools'\n : 'agents';\n const [activeTab, setActiveTab] = useState<LatencyTab>(initialTab);\n // Resync to a non-empty tab when async data finishes loading. Without this,\n // a card that mounts before data arrives stays stuck on `agents` even when\n // only workflow/tool data exists.\n useEffect(() => {\n if (!data) return;\n const tabHasData = {\n agents: data.agentData.length > 0,\n workflows: data.workflowData.length > 0,\n tools: data.toolData.length > 0,\n } as const;\n if (!tabHasData[activeTab] && tabHasData[initialTab]) {\n setActiveTab(initialTab);\n }\n }, [data, activeTab, initialTab]);\n const renderedActions = typeof actions === 'function' ? actions(activeTab) : actions;\n const hasData = !!data && (data.agentData.length > 0 || data.workflowData.length > 0 || data.toolData.length > 0);\n const p50Values = data\n ? Object.values(data)\n .filter(Array.isArray)\n .flat()\n .map(d => d.p50)\n .filter((v): v is number => typeof v === 'number')\n : [];\n const avgP50 =\n p50Values.length > 0 ? `${Math.round(p50Values.reduce((s, v) => s + v, 0) / p50Values.length)}ms` : '—';\n\n return (\n <MetricsCard>\n <MetricsCard.TopBar>\n <MetricsCard.TitleAndDescription title=\"Latency\" description=\"Hourly p50 and p95 latency.\" />\n {hasData && <MetricsCard.Summary value={avgP50} label=\"Avg p50\" />}\n {renderedActions ? <MetricsCard.Actions>{renderedActions}</MetricsCard.Actions> : null}\n </MetricsCard.TopBar>\n {isLoading ? (\n <MetricsCard.Loading />\n ) : isError ? (\n <MetricsCard.Error message=\"Failed to load latency data\" />\n ) : (\n <MetricsCard.Content>\n {!hasData ? (\n <MetricsCard.NoData message=\"No latency data yet\" />\n ) : (\n <Tabs value={activeTab} onValueChange={setActiveTab} defaultTab={initialTab} className=\"overflow-visible\">\n <TabList>\n <Tab value=\"agents\">Agents</Tab>\n <Tab value=\"workflows\">Workflows</Tab>\n <Tab value=\"tools\">Tools</Tab>\n </TabList>\n <TabContent value=\"agents\">\n <LatencyChart\n data={data.agentData}\n onPointClick={onPointClick ? p => onPointClick('agents', p) : undefined}\n />\n </TabContent>\n <TabContent value=\"workflows\">\n <LatencyChart\n data={data.workflowData}\n onPointClick={onPointClick ? p => onPointClick('workflows', p) : undefined}\n />\n </TabContent>\n <TabContent value=\"tools\">\n <LatencyChart\n data={data.toolData}\n onPointClick={onPointClick ? p => onPointClick('tools', p) : undefined}\n />\n </TabContent>\n </Tabs>\n )}\n </MetricsCard.Content>\n )}\n </MetricsCard>\n );\n}\n","import { useState } from 'react';\nimport type { ElementType, ReactNode } from 'react';\nimport { MetricsCard } from '../../../ds/components/MetricsCard';\nimport { MetricsDataTable } from '../../../ds/components/MetricsDataTable';\nimport { Tab, TabContent, TabList, Tabs } from '../../../ds/components/Tabs';\nimport type { ActiveThreadRow } from '../hooks/use-top-active-threads-metrics';\nimport type { ResourceThreadsRow } from '../hooks/use-top-resources-by-threads-metrics';\nimport { formatCompact, formatCost } from './metrics-utils';\n\nexport type MemoryTab = 'threads' | 'resources';\n\n/** Per-tab query state. Memory has two independent server queries (top\n * threads + top resources) so loading/error are scoped to the active tab. */\ntype MemoryTabState<T> = {\n data: T[] | undefined;\n isLoading: boolean;\n isError: boolean;\n};\n\nexport interface MemoryCardViewProps {\n threads: MemoryTabState<ActiveThreadRow>;\n resources: MemoryTabState<ResourceThreadsRow>;\n /** Optional drilldown for a thread row. Receives the raw hook row. */\n getThreadRowHref?: (row: ActiveThreadRow) => string | undefined;\n /** Optional drilldown for a resource row. Receives the raw hook row. */\n getResourceRowHref?: (row: ResourceThreadsRow) => string | undefined;\n /** Optional slot for top-bar action buttons. Function form receives the active tab. */\n actions?: ReactNode | ((tab: MemoryTab) => ReactNode);\n /** Override how drilldown links are rendered. Defaults to `<a>`. */\n LinkComponent?: ElementType;\n}\n\nfunction isMemoryTab(value: string): value is MemoryTab {\n return value === 'threads' || value === 'resources';\n}\n\n// IDs are usually 32+ char UUIDs; the table is too narrow to show the full\n// value without horizontal scroll, so we elide the middle.\nfunction shortId(id: string): string {\n if (id.length <= 12) return id;\n return `${id.slice(0, 6)}…${id.slice(-4)}`;\n}\n\ntype ThreadTableRow = ActiveThreadRow & { key: string };\ntype ResourceTableRow = ResourceThreadsRow & { key: string };\n\nexport function MemoryCardView({\n threads,\n resources,\n getThreadRowHref,\n getResourceRowHref,\n actions,\n LinkComponent,\n}: MemoryCardViewProps) {\n const [activeTab, setActiveTab] = useState<MemoryTab>('threads');\n\n const threadRows: ThreadTableRow[] = threads.data?.map(r => ({ ...r, key: r.threadId })) ?? [];\n const resourceRows: ResourceTableRow[] = resources.data?.map(r => ({ ...r, key: r.resourceId })) ?? [];\n\n const hasThreadData = threadRows.length > 0;\n const hasResourceData = resourceRows.length > 0;\n\n const threadTotal = threads.data?.reduce((s, r) => s + r.runs, 0) ?? 0;\n const resourceTotal = resources.data?.reduce((s, r) => s + r.threadCount, 0) ?? 0;\n\n const active = activeTab === 'threads' ? threads : resources;\n const renderedActions = typeof actions === 'function' ? actions(activeTab) : actions;\n\n return (\n <MetricsCard>\n <MetricsCard.TopBar>\n <MetricsCard.TitleAndDescription title=\"Memory\" description=\"Resource and Thread consumption\" />\n {activeTab === 'threads' && hasThreadData && (\n <MetricsCard.Summary value={threadTotal.toLocaleString()} label=\"Total runs\" />\n )}\n {activeTab === 'resources' && hasResourceData && (\n <MetricsCard.Summary value={resourceTotal.toLocaleString()} label=\"Total threads\" />\n )}\n {renderedActions ? <MetricsCard.Actions>{renderedActions}</MetricsCard.Actions> : null}\n </MetricsCard.TopBar>\n {active.isLoading ? (\n <MetricsCard.Loading />\n ) : active.isError ? (\n <MetricsCard.Error message=\"Failed to load memory data\" />\n ) : (\n <MetricsCard.Content>\n <Tabs\n defaultTab=\"threads\"\n value={activeTab}\n onValueChange={v => {\n if (isMemoryTab(v)) setActiveTab(v);\n }}\n className=\"grid grid-rows-[auto_1fr] overflow-y-auto h-full\"\n >\n <TabList>\n <Tab value=\"threads\">Threads</Tab>\n <Tab value=\"resources\">Resources</Tab>\n </TabList>\n <TabContent value=\"threads\">\n {hasThreadData ? (\n <MetricsDataTable\n columns={[\n { label: 'Thread ID', value: row => shortId(row.threadId) },\n { label: 'Resource ID', value: row => (row.resourceId ? shortId(row.resourceId) : '—') },\n { label: 'Runs', value: row => row.runs.toLocaleString(), highlight: true },\n { label: 'Tokens', value: row => (row.tokens > 0 ? formatCompact(row.tokens) : '—') },\n { label: 'Cost', value: row => (row.cost != null ? formatCost(row.cost, row.costUnit) : '—') },\n ]}\n data={threadRows}\n LinkComponent={LinkComponent}\n getRowHref={getThreadRowHref ? row => getThreadRowHref(row) : undefined}\n />\n ) : (\n <MetricsCard.NoData message=\"No thread activity yet\" />\n )}\n </TabContent>\n <TabContent value=\"resources\">\n {hasResourceData ? (\n <MetricsDataTable\n columns={[\n { label: 'Resource ID', value: row => shortId(row.resourceId) },\n { label: 'Threads', value: row => row.threadCount.toLocaleString(), highlight: true },\n { label: 'Tokens', value: row => (row.tokens > 0 ? formatCompact(row.tokens) : '—') },\n { label: 'Cost', value: row => (row.cost != null ? formatCost(row.cost, row.costUnit) : '—') },\n ]}\n data={resourceRows}\n LinkComponent={LinkComponent}\n getRowHref={getResourceRowHref ? row => getResourceRowHref(row) : undefined}\n />\n ) : (\n <MetricsCard.NoData message=\"No resource activity yet\" />\n )}\n </TabContent>\n </Tabs>\n </MetricsCard.Content>\n )}\n </MetricsCard>\n );\n}\n","import type { ElementType, ReactNode } from 'react';\nimport { MetricsCard } from '../../../ds/components/MetricsCard';\nimport { MetricsDataTable } from '../../../ds/components/MetricsDataTable';\nimport type { ModelUsageRow } from '../hooks/use-model-usage-cost-metrics';\nimport { formatCost } from './metrics-utils';\n\nexport interface ModelUsageCostCardViewProps {\n rows: ModelUsageRow[] | undefined;\n isLoading: boolean;\n isError: boolean;\n /** Optional drilldown for a row in the table. */\n getRowHref?: (row: ModelUsageRow) => string | undefined;\n /** Optional slot for top-bar action buttons. */\n actions?: ReactNode;\n /** Override how drilldown links are rendered. Defaults to `<a>`. */\n LinkComponent?: ElementType;\n}\n\nexport function ModelUsageCostCardView({\n rows,\n isLoading,\n isError,\n getRowHref,\n actions,\n LinkComponent,\n}: ModelUsageCostCardViewProps) {\n const hasData = !!rows && rows.length > 0;\n\n return (\n <MetricsCard>\n <MetricsCard.TopBar>\n <MetricsCard.TitleAndDescription title=\"Model Usage & Cost\" description=\"Token consumption by model.\" />\n {hasData &&\n (() => {\n const totalCost = rows.reduce((sum, r) => sum + (r.cost ?? 0), 0);\n const units = new Set(rows.filter(r => r.cost != null && r.costUnit).map(r => r.costUnit as string));\n let value: string;\n if (units.size === 0) {\n value = totalCost > 0 ? formatCost(totalCost) : '—';\n } else if (units.size === 1) {\n value = totalCost > 0 ? formatCost(totalCost, [...units][0]) : '—';\n } else {\n value = 'Mixed';\n }\n return <MetricsCard.Summary value={value} label=\"Total cost\" />;\n })()}\n {actions ? <MetricsCard.Actions>{actions}</MetricsCard.Actions> : null}\n </MetricsCard.TopBar>\n {isLoading ? (\n <MetricsCard.Loading />\n ) : isError ? (\n <MetricsCard.Error message=\"Failed to load model usage data\" />\n ) : (\n <MetricsCard.Content>\n {!hasData ? (\n <MetricsCard.NoData message=\"No model usage data yet\" />\n ) : (\n <MetricsDataTable\n columns={[\n { label: 'Model', value: row => row.model },\n { label: 'Input', value: row => row.input },\n { label: 'Output', value: row => row.output },\n { label: 'Cache Read', value: row => row.cacheRead },\n { label: 'Cache Write', value: row => row.cacheWrite },\n {\n label: 'Cost',\n value: row => (row.cost != null ? formatCost(row.cost, row.costUnit) : '—'),\n highlight: true,\n },\n ]}\n data={rows.map(row => ({ ...row, key: row.model }))}\n getRowHref={getRowHref}\n LinkComponent={LinkComponent}\n />\n )}\n </MetricsCard.Content>\n )}\n </MetricsCard>\n );\n}\n","import { useMemo } from 'react';\nimport { MetricsCard } from '../../../ds/components/MetricsCard';\nimport { MetricsDataTable } from '../../../ds/components/MetricsDataTable';\nimport { MetricsLineChart } from '../../../ds/components/MetricsLineChart';\nimport { Tab, TabContent, TabList, Tabs } from '../../../ds/components/Tabs';\nimport type { ScorerSummary, ScoresOverTimePoint } from '../hooks/use-scores-metrics';\nimport { CHART_COLORS } from './metrics-utils';\n\nconst SERIES_COLORS = [\n CHART_COLORS.green,\n CHART_COLORS.blue,\n CHART_COLORS.purple,\n CHART_COLORS.orange,\n CHART_COLORS.pink,\n CHART_COLORS.yellow,\n];\n\nexport interface ScoresCardViewProps {\n data:\n | {\n summaryData: ScorerSummary[];\n overTimeData: ScoresOverTimePoint[];\n scorerNames: string[];\n avgScore: number | null;\n }\n | undefined;\n isLoading: boolean;\n isError: boolean;\n}\n\nexport function ScoresCardView({ data, isLoading, isError }: ScoresCardViewProps) {\n const hasData = !!data && (data.summaryData.length > 0 || data.overTimeData.length > 0);\n\n const series = useMemo(() => {\n if (!data?.scorerNames) return [];\n return data.scorerNames.map((name, i) => ({\n dataKey: name,\n label: name,\n color: SERIES_COLORS[i % SERIES_COLORS.length],\n aggregate: (points: Record<string, unknown>[]) => ({\n value:\n points.length > 0\n ? (points.reduce((s, d) => s + ((d[name] as number) ?? 0), 0) / points.length).toFixed(2)\n : '0',\n suffix: 'avg',\n }),\n }));\n }, [data?.scorerNames]);\n\n return (\n <MetricsCard>\n <MetricsCard.TopBar>\n <MetricsCard.TitleAndDescription title=\"Scores\" description=\"Evaluation scorer performance.\" />\n </MetricsCard.TopBar>\n {isLoading ? (\n <MetricsCard.Loading />\n ) : isError ? (\n <MetricsCard.Error message=\"Failed to load scores data\" />\n ) : (\n <MetricsCard.Content>\n {!hasData ? (\n <MetricsCard.NoData message=\"No scores data yet\" />\n ) : (\n <Tabs defaultTab=\"over-time\" className=\"overflow-visible\">\n <TabList>\n <Tab value=\"over-time\">Over Time</Tab>\n <Tab value=\"summary\">Summary</Tab>\n </TabList>\n <TabContent value=\"over-time\" className=\"pb-0\">\n {data.overTimeData.length > 0 ? (\n <MetricsLineChart data={data.overTimeData} series={series} yDomain={[0, 1]} />\n ) : (\n <MetricsCard.NoData message=\"No time series data yet\" />\n )}\n </TabContent>\n <TabContent value=\"summary\">\n <MetricsDataTable\n columns={[\n { label: 'Scorer', value: row => row.scorer },\n { label: 'Avg', value: row => row.avg.toFixed(2), highlight: true },\n { label: 'Min', value: row => row.min.toFixed(2) },\n { label: 'Max', value: row => row.max.toFixed(2) },\n { label: 'Count', value: row => row.count.toLocaleString() },\n ]}\n data={data.summaryData.map(row => ({ ...row, key: row.scorer }))}\n />\n </TabContent>\n </Tabs>\n )}\n </MetricsCard.Content>\n )}\n </MetricsCard>\n );\n}\n","import { useState } from 'react';\nimport type { ElementType, ReactNode } from 'react';\nimport { HorizontalBars } from '../../../ds/components/HorizontalBars';\nimport { MetricsCard } from '../../../ds/components/MetricsCard';\nimport { Tab, TabContent, TabList, Tabs } from '../../../ds/components/Tabs';\nimport type { TokenUsageByAgentRow } from '../hooks/use-token-usage-by-agent-metrics';\nimport { CHART_COLORS, formatCompact, formatCost } from './metrics-utils';\n\nexport interface TokenUsageByAgentCardViewProps {\n data: TokenUsageByAgentRow[] | undefined;\n isLoading: boolean;\n isError: boolean;\n /** Optional drilldown: returns an href for a single row in either tab. */\n getRowHref?: (row: TokenUsageByAgentRow) => string | undefined;\n /** Optional slot for top-bar action buttons. */\n actions?: ReactNode;\n /** Override how drilldown links are rendered. Defaults to `<a>`. */\n LinkComponent?: ElementType;\n}\n\ntype TokenUsageTab = 'tokens' | 'cost';\n\nfunction isTokenUsageTab(value: string): value is TokenUsageTab {\n return value === 'tokens' || value === 'cost';\n}\n\nexport function TokenUsageByAgentCardView({\n data,\n isLoading,\n isError,\n getRowHref,\n actions,\n LinkComponent,\n}: TokenUsageByAgentCardViewProps) {\n const [activeTab, setActiveTab] = useState<TokenUsageTab>('tokens');\n\n const rows = data ?? [];\n const hasData = rows.length > 0;\n const totalTokens = rows.reduce((s, d) => s + d.total, 0);\n const costRows = rows.filter(d => d.cost != null && d.cost > 0);\n const uniqueCostUnits = new Set(costRows.map(d => d.costUnit ?? 'usd'));\n const hasSingleCostUnit = uniqueCostUnits.size <= 1;\n const costUnit = hasSingleCostUnit ? ([...uniqueCostUnits][0] ?? 'usd') : null;\n const totalCost = hasSingleCostUnit ? costRows.reduce((s, d) => s + (d.cost ?? 0), 0) : 0;\n const hasCostData = hasSingleCostUnit && totalCost > 0;\n\n return (\n <MetricsCard>\n <MetricsCard.TopBar>\n <MetricsCard.TitleAndDescription\n title=\"Token Usage by Agent\"\n description=\"Token consumption grouped by agent.\"\n />\n {hasData &&\n (activeTab === 'cost' && hasCostData ? (\n <MetricsCard.Summary value={formatCost(totalCost, costUnit)} label=\"Total cost\" />\n ) : (\n <MetricsCard.Summary value={formatCompact(totalTokens)} label=\"Total tokens\" />\n ))}\n {hasData && actions ? <MetricsCard.Actions>{actions}</MetricsCard.Actions> : null}\n </MetricsCard.TopBar>\n {isLoading ? (\n <MetricsCard.Loading />\n ) : isError ? (\n <MetricsCard.Error message=\"Failed to load token usage data\" />\n ) : (\n <MetricsCard.Content>\n {!hasData ? (\n <MetricsCard.NoData message=\"No token usage data yet\" />\n ) : (\n <Tabs\n defaultTab=\"tokens\"\n value={activeTab}\n onValueChange={v => {\n if (isTokenUsageTab(v)) setActiveTab(v);\n }}\n className=\"grid grid-rows-[auto_1fr] overflow-y-auto h-full\"\n >\n <TabList>\n <Tab value=\"tokens\">Tokens</Tab>\n <Tab value=\"cost\">Cost</Tab>\n </TabList>\n <TabContent value=\"tokens\">\n <HorizontalBars\n LinkComponent={LinkComponent}\n data={rows.map(d => ({\n name: d.name,\n values: [d.input, d.output],\n href: getRowHref?.(d),\n }))}\n segments={[\n { label: 'Input', color: CHART_COLORS.blueDark },\n { label: 'Output', color: CHART_COLORS.blue },\n ]}\n maxVal={Math.max(...rows.map(d => d.input + d.output))}\n fmt={formatCompact}\n />\n </TabContent>\n <TabContent value=\"cost\">\n {hasCostData ? (\n <HorizontalBars\n LinkComponent={LinkComponent}\n data={costRows\n .slice()\n .sort((a, b) => (b.cost ?? 0) - (a.cost ?? 0))\n .map(d => ({ name: d.name, values: [d.cost!], href: getRowHref?.(d) }))}\n segments={[{ label: 'Cost', color: CHART_COLORS.purple }]}\n maxVal={Math.max(...costRows.map(d => d.cost ?? 0))}\n fmt={v => formatCost(v, costUnit)}\n />\n ) : (\n <MetricsCard.NoData message=\"No cost data yet\" />\n )}\n </TabContent>\n </Tabs>\n )}\n </MetricsCard.Content>\n )}\n </MetricsCard>\n );\n}\n","import { useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { MetricsCard } from '../../../ds/components/MetricsCard';\nimport { MetricsLineChart } from '../../../ds/components/MetricsLineChart';\nimport { Tab, TabContent, TabList, Tabs } from '../../../ds/components/Tabs';\nimport type { TokenTimelinePoint, TokenUsageTimeSeriesInterval } from '../hooks/use-token-usage-timeseries';\nimport { CHART_COLORS, formatCompact, formatCost } from './metrics-utils';\n\ntype TokenUsageTimelineTab = 'tokens' | 'cost';\n\nfunction sumMetric(dataKey: 'input' | 'output' | 'cost', formatter: (value: number) => string = formatCompact) {\n return (data: Record<string, unknown>[]) => ({\n value: formatter(data.reduce((sum, point) => sum + (typeof point[dataKey] === 'number' ? point[dataKey] : 0), 0)),\n });\n}\n\nconst tokenSeries = [\n {\n dataKey: 'input',\n label: 'Input tokens',\n color: CHART_COLORS.blue,\n aggregate: sumMetric('input'),\n },\n {\n dataKey: 'output',\n label: 'Output tokens',\n color: CHART_COLORS.yellow,\n aggregate: sumMetric('output'),\n },\n];\n\nfunction isTokenUsageTimelineTab(value: string): value is TokenUsageTimelineTab {\n return value === 'tokens' || value === 'cost';\n}\n\nexport interface TokenUsageTimelineCardViewProps {\n data: TokenTimelinePoint[] | undefined;\n interval: TokenUsageTimeSeriesInterval | undefined;\n isLoading: boolean;\n isError: boolean;\n actions?: ReactNode;\n}\n\nexport function TokenUsageTimelineCardView({\n data,\n interval = '1d',\n isLoading,\n isError,\n actions,\n}: TokenUsageTimelineCardViewProps) {\n const [activeTab, setActiveTab] = useState<TokenUsageTimelineTab>('tokens');\n\n const points = data ?? [];\n const chartPoints = points.map(point => ({ ...point }));\n const hasData = points.length > 0;\n const totalTokens = points.reduce((sum, point) => sum + point.total, 0);\n const costPoints = points.filter(point => point.cost != null && point.cost > 0);\n const costChartPoints = costPoints.map(point => ({ ...point }));\n const uniqueCostUnits = new Set(costPoints.map(point => point.costUnit).filter((unit): unit is string => !!unit));\n const hasSingleCostUnit = uniqueCostUnits.size === 1 && costPoints.every(point => point.costUnit != null);\n const costUnit = hasSingleCostUnit ? ([...uniqueCostUnits][0] ?? null) : null;\n const totalCost = hasSingleCostUnit ? costPoints.reduce((sum, point) => sum + (point.cost ?? 0), 0) : 0;\n const hasCostData = hasSingleCostUnit && totalCost > 0;\n const description = interval === '1h' ? 'Input and output tokens per hour.' : 'Input and output tokens per day.';\n\n const costSeries = [\n {\n dataKey: 'cost',\n label: 'Cost',\n color: CHART_COLORS.purple,\n aggregate: sumMetric('cost', value => formatCost(value, costUnit)),\n },\n ];\n\n return (\n <MetricsCard>\n <MetricsCard.TopBar>\n <MetricsCard.TitleAndDescription title=\"Token usage over time\" description={description} />\n {hasData &&\n (activeTab === 'cost' && hasCostData ? (\n <MetricsCard.Summary value={formatCost(totalCost, costUnit)} label=\"Total cost\" />\n ) : (\n <MetricsCard.Summary value={formatCompact(totalTokens)} label=\"Total tokens\" />\n ))}\n {hasData && actions ? <MetricsCard.Actions>{actions}</MetricsCard.Actions> : null}\n </MetricsCard.TopBar>\n {isLoading ? (\n <MetricsCard.Loading />\n ) : isError ? (\n <MetricsCard.Error message=\"Failed to load token usage timeline\" />\n ) : (\n <MetricsCard.Content>\n {!hasData ? (\n <MetricsCard.NoData message=\"No token usage data yet\" />\n ) : (\n <Tabs\n defaultTab=\"tokens\"\n value={activeTab}\n onValueChange={value => {\n if (isTokenUsageTimelineTab(value)) setActiveTab(value);\n }}\n className=\"overflow-visible\"\n >\n <TabList>\n <Tab value=\"tokens\">Tokens</Tab>\n <Tab value=\"cost\">Cost</Tab>\n </TabList>\n <TabContent value=\"tokens\">\n <MetricsLineChart data={chartPoints} series={tokenSeries} />\n </TabContent>\n <TabContent value=\"cost\">\n {hasCostData ? (\n <MetricsLineChart data={costChartPoints} series={costSeries} />\n ) : (\n <MetricsCard.NoData message=\"No cost data yet\" />\n )}\n </TabContent>\n </Tabs>\n )}\n </MetricsCard.Content>\n )}\n </MetricsCard>\n );\n}\n","import { useState } from 'react';\nimport type { ElementType, ReactNode } from 'react';\nimport { HorizontalBars } from '../../../ds/components/HorizontalBars';\nimport { MetricsCard } from '../../../ds/components/MetricsCard';\nimport { Tab, TabContent, TabList, Tabs } from '../../../ds/components/Tabs';\nimport type { VolumeRow } from '../hooks/use-trace-volume-metrics';\nimport { CHART_COLORS, formatCompact } from './metrics-utils';\n\nexport type VolumeTab = 'agents' | 'workflows' | 'tools';\n\nfunction VolumeBars({\n data,\n rowHrefs,\n errorHrefs,\n LinkComponent,\n}: {\n data: VolumeRow[];\n rowHrefs?: (row: VolumeRow) => string | undefined;\n errorHrefs?: (row: VolumeRow) => string | undefined;\n LinkComponent?: ElementType;\n}) {\n return (\n <HorizontalBars\n LinkComponent={LinkComponent}\n data={data.map(d => {\n const errorHref = errorHrefs?.(d);\n const rowHref = rowHrefs?.(d);\n // HorizontalBars ignores per-segment `hrefs` whenever a row-level\n // `href` is set (to avoid nested anchors). When we want the Errors\n // segment to drill somewhere different from the rest of the row,\n // drop the row-level link and split navigation across segments\n // instead so each target is reachable.\n if (errorHref) {\n return {\n name: d.name,\n values: [d.completed, d.errors],\n hrefs: [rowHref, errorHref],\n };\n }\n return {\n name: d.name,\n values: [d.completed, d.errors],\n href: rowHref,\n };\n })}\n segments={[\n { label: 'Completed', color: CHART_COLORS.blueDark },\n { label: 'Errors', color: CHART_COLORS.pink },\n ]}\n maxVal={Math.max(...data.map(d => d.completed + d.errors))}\n fmt={formatCompact}\n />\n );\n}\n\nexport interface TracesVolumeCardViewProps {\n data: { agentData: VolumeRow[]; workflowData: VolumeRow[]; toolData: VolumeRow[] } | undefined;\n isLoading: boolean;\n isError: boolean;\n /** Optional drilldown: returns href for clicking a whole bar row. */\n getRowHref?: (tab: VolumeTab, row: VolumeRow) => string | undefined;\n /** Optional drilldown: returns href for clicking the \"Errors\" segment of a bar. */\n getErrorSegmentHref?: (tab: VolumeTab, row: VolumeRow) => string | undefined;\n /**\n * Optional slot for top-bar action buttons.\n * Pass a function to receive the active tab so actions can scope themselves to the current entity type.\n */\n actions?: ReactNode | ((tab: VolumeTab) => ReactNode);\n /** Override how drilldown links are rendered (e.g. router-aware adapter). Defaults to `<a>`. */\n LinkComponent?: ElementType;\n}\n\nexport function TracesVolumeCardView({\n data,\n isLoading,\n isError,\n getRowHref,\n getErrorSegmentHref,\n actions,\n LinkComponent,\n}: TracesVolumeCardViewProps) {\n const [activeTab, setActiveTab] = useState<VolumeTab>('agents');\n const renderedActions = typeof actions === 'function' ? actions(activeTab) : actions;\n const hasData = !!data && (data.agentData.length > 0 || data.workflowData.length > 0 || data.toolData.length > 0);\n const total = data\n ? [...data.agentData, ...data.workflowData, ...data.toolData].reduce((s, d) => s + d.completed + d.errors, 0)\n : 0;\n\n const tabRowHrefs = (tab: VolumeTab) => (getRowHref ? (row: VolumeRow) => getRowHref(tab, row) : undefined);\n const tabErrorHrefs = (tab: VolumeTab) =>\n getErrorSegmentHref ? (row: VolumeRow) => getErrorSegmentHref(tab, row) : undefined;\n\n return (\n <MetricsCard>\n <MetricsCard.TopBar>\n <MetricsCard.TitleAndDescription title=\"Trace Volume\" description=\"Runs and call counts.\" />\n {hasData && <MetricsCard.Summary value={formatCompact(total)} label=\"Total runs\" />}\n {renderedActions ? <MetricsCard.Actions>{renderedActions}</MetricsCard.Actions> : null}\n </MetricsCard.TopBar>\n {isLoading ? (\n <MetricsCard.Loading />\n ) : isError ? (\n <MetricsCard.Error message=\"Failed to load trace volume data\" />\n ) : (\n <MetricsCard.Content>\n {!hasData ? (\n <MetricsCard.NoData message=\"No trace volume data yet\" />\n ) : (\n <Tabs\n value={activeTab}\n onValueChange={setActiveTab}\n defaultTab=\"agents\"\n className=\"grid grid-rows-[auto_1fr] overflow-y-auto h-full\"\n >\n <TabList>\n <Tab value=\"agents\">Agents</Tab>\n <Tab value=\"workflows\">Workflows</Tab>\n <Tab value=\"tools\">Tools</Tab>\n </TabList>\n <TabContent value=\"agents\">\n {data.agentData.length > 0 ? (\n <VolumeBars\n data={data.agentData}\n rowHrefs={tabRowHrefs('agents')}\n errorHrefs={tabErrorHrefs('agents')}\n LinkComponent={LinkComponent}\n />\n ) : (\n <MetricsCard.NoData message=\"No agent data yet\" />\n )}\n </TabContent>\n <TabContent value=\"workflows\">\n {data.workflowData.length > 0 ? (\n <VolumeBars\n data={data.workflowData}\n rowHrefs={tabRowHrefs('workflows')}\n errorHrefs={tabErrorHrefs('workflows')}\n LinkComponent={LinkComponent}\n />\n ) : (\n <MetricsCard.NoData message=\"No workflow data yet\" />\n )}\n </TabContent>\n <TabContent value=\"tools\">\n {data.toolData.length > 0 ? (\n <VolumeBars\n data={data.toolData}\n rowHrefs={tabRowHrefs('tools')}\n errorHrefs={tabErrorHrefs('tools')}\n LinkComponent={LinkComponent}\n />\n ) : (\n <MetricsCard.NoData message=\"No tool data yet\" />\n )}\n </TabContent>\n </Tabs>\n )}\n </MetricsCard.Content>\n )}\n </MetricsCard>\n );\n}\n","import { useMemo, useRef } from 'react';\n\nimport { useMetrics } from './use-metrics';\nimport type { DatePreset, DateRange } from './use-metrics';\n\nconst PRESET_MS: Record<string, number> = {\n '24h': 24 * 60 * 60 * 1000,\n '3d': 3 * 24 * 60 * 60 * 1000,\n '7d': 7 * 24 * 60 * 60 * 1000,\n '14d': 14 * 24 * 60 * 60 * 1000,\n '30d': 30 * 24 * 60 * 60 * 1000,\n};\n\ntype Timestamp = { start: Date; end: Date };\n\nfunction buildTimestamp(preset: DatePreset, customRange: DateRange | undefined, anchor: number): Timestamp {\n if (preset !== 'custom') {\n const ms = PRESET_MS[preset] ?? PRESET_MS['24h'];\n return { start: new Date(anchor - ms), end: new Date(anchor) };\n }\n return {\n start: customRange?.from ?? new Date(anchor - PRESET_MS['24h']),\n end: customRange?.to ?? new Date(anchor),\n };\n}\n\n/**\n * Compose a ready-to-use metrics filter object: merges the active date range\n * with the dimensional filter pulled from the provider (sourced from URL +\n * toolbar).\n *\n * Hooks should spread `filters` directly into their backend call — do not pass\n * only `timestamp` or filters set via the toolbar will be silently ignored.\n *\n * Stability guarantees (important for react-query):\n * - `timestamp` is frozen at the moment the inputs change and does NOT update\n * on every render. Otherwise each render would mint a new `new Date()` and\n * every metrics query would re-fetch on every keystroke.\n * - `filters` and `filterKey` are referentially stable while inputs are\n * unchanged, so `queryKey` hashing is cheap and caches hit.\n */\nexport function useMetricsFilters() {\n const { datePreset, customRange, dimensionalFilter, dimensionalFilterKey } = useMetrics();\n\n // Anchor the \"now\" used for preset windows. We only recompute when the\n // preset or custom range changes — this gives a stable timestamp per query\n // boundary rather than a new Date on every render.\n const anchorRef = useRef<{ key: string; anchor: number } | null>(null);\n const windowKey =\n datePreset === 'custom'\n ? `custom:${customRange?.from?.getTime() ?? ''}:${customRange?.to?.getTime() ?? ''}`\n : `preset:${datePreset}`;\n if (!anchorRef.current || anchorRef.current.key !== windowKey) {\n anchorRef.current = { key: windowKey, anchor: Date.now() };\n }\n const anchor = anchorRef.current.anchor;\n\n const timestamp = useMemo(() => buildTimestamp(datePreset, customRange, anchor), [datePreset, customRange, anchor]);\n\n const filters = useMemo(\n () => ({ timestamp, ...dimensionalFilter }),\n // dimensionalFilterKey is a stringified digest, so this dep set gives a\n // stable ref while content is unchanged.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [timestamp, dimensionalFilterKey],\n );\n\n // filterKey combines window + dimensions so react-query keys are cheap.\n const filterKey = useMemo(() => `${windowKey}|${dimensionalFilterKey}`, [windowKey, dimensionalFilterKey]);\n\n return { datePreset, customRange, timestamp, filters, dimensionalFilter, filterKey };\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMetricsFilters } from './use-metrics-filters';\n\n/** Total Agent Runs — count of agent duration metric observations */\nexport function useAgentRunsKpiMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'agent-runs-kpi', filterKey],\n queryFn: () =>\n client.getMetricAggregate({\n name: ['mastra_agent_duration_ms'],\n aggregation: 'count',\n filters,\n comparePeriod: 'previous_period',\n }),\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMetricsFilters } from './use-metrics-filters';\n\n/** Total Model Cost — sum of estimatedCost across input and output token metrics */\nexport function useModelCostKpiMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'model-cost-kpi', filterKey],\n queryFn: async () => {\n const res = await client.getMetricAggregate({\n name: ['mastra_model_total_input_tokens', 'mastra_model_total_output_tokens'],\n aggregation: 'sum',\n filters,\n comparePeriod: 'previous_period',\n });\n\n return {\n cost: res.estimatedCost ?? null,\n costUnit: res.costUnit ?? null,\n previousCost: res.previousEstimatedCost ?? null,\n costChangePercent: res.costChangePercent ?? null,\n };\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMetricsFilters } from './use-metrics-filters';\n\n/** Total Tokens — sum of all input + output tokens */\nexport function useTotalTokensKpiMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'total-tokens-kpi', filterKey],\n queryFn: async () => {\n const [input, output] = await Promise.all([\n client.getMetricAggregate({\n name: ['mastra_model_total_input_tokens'],\n aggregation: 'sum',\n filters,\n comparePeriod: 'previous_period',\n }),\n client.getMetricAggregate({\n name: ['mastra_model_total_output_tokens'],\n aggregation: 'sum',\n filters,\n comparePeriod: 'previous_period',\n }),\n ]);\n\n const hasCurrent = input.value != null || output.value != null;\n const hasPrevious = input.previousValue != null || output.previousValue != null;\n const value = (input.value ?? 0) + (output.value ?? 0);\n const previousValue = (input.previousValue ?? 0) + (output.previousValue ?? 0);\n const changePercent = hasPrevious && previousValue > 0 ? ((value - previousValue) / previousValue) * 100 : null;\n\n return {\n value: hasCurrent ? value : null,\n previousValue: hasPrevious ? previousValue : null,\n changePercent,\n };\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { formatCompact } from '../components/metrics-utils';\nimport { useMetricsFilters } from './use-metrics-filters';\n\nexport interface ModelUsageRow {\n model: string;\n input: string;\n output: string;\n cacheRead: string;\n cacheWrite: string;\n cost: number | null;\n costUnit: string | null;\n}\n\nexport function useModelUsageCostMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'model-usage-cost', filterKey],\n queryFn: async (): Promise<ModelUsageRow[]> => {\n const [inputRes, outputRes, cacheReadRes, cacheWriteRes] = await Promise.all(\n (\n [\n 'mastra_model_total_input_tokens',\n 'mastra_model_total_output_tokens',\n 'mastra_model_input_cache_read_tokens',\n 'mastra_model_input_cache_write_tokens',\n ] as const\n ).map(name =>\n client.getMetricBreakdown({\n name: [name],\n groupBy: ['model'],\n aggregation: 'sum',\n orderDirection: 'DESC',\n filters,\n }),\n ),\n );\n\n type ModelEntry = {\n input: number;\n output: number;\n cacheRead: number;\n cacheWrite: number;\n cost: number | null;\n costUnit: string | null;\n };\n\n const modelMap = new Map<string, ModelEntry>();\n\n const ensureModel = (model: string): ModelEntry => {\n if (!modelMap.has(model)) {\n modelMap.set(model, { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: null, costUnit: null });\n }\n return modelMap.get(model)!;\n };\n\n // total_input/total_output estimatedCost already rolls up cache + other detail\n // costs. The cache breakdowns are kept for their token counts only.\n const addCost = (entry: ModelEntry, group: { estimatedCost?: number | null; costUnit?: string | null }) => {\n if (group.estimatedCost != null) {\n entry.cost = (entry.cost ?? 0) + group.estimatedCost;\n if (group.costUnit) entry.costUnit = group.costUnit;\n }\n };\n\n for (const group of inputRes.groups) {\n const m = group.dimensions.model ?? 'unknown';\n const entry = ensureModel(m);\n entry.input = group.value;\n addCost(entry, group);\n }\n for (const group of outputRes.groups) {\n const m = group.dimensions.model ?? 'unknown';\n const entry = ensureModel(m);\n entry.output = group.value;\n addCost(entry, group);\n }\n for (const group of cacheReadRes.groups) {\n const m = group.dimensions.model ?? 'unknown';\n const entry = ensureModel(m);\n entry.cacheRead = group.value;\n }\n for (const group of cacheWriteRes.groups) {\n const m = group.dimensions.model ?? 'unknown';\n const entry = ensureModel(m);\n entry.cacheWrite = group.value;\n }\n\n return Array.from(modelMap.entries())\n .map(([model, vals]) => ({\n model,\n input: formatCompact(vals.input),\n output: formatCompact(vals.output),\n cacheRead: formatCompact(vals.cacheRead),\n cacheWrite: formatCompact(vals.cacheWrite),\n cost: vals.cost,\n costUnit: vals.costUnit,\n }))\n .sort((a, b) => a.model.localeCompare(b.model));\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMetricsFilters } from './use-metrics-filters';\n\nexport interface LatencyPoint {\n [key: string]: unknown;\n time: string;\n /** Raw timestamp (ms since epoch) for the bucket this point represents.\n * Used by drilldown clicks to compute a narrow time window. */\n tsMs: number;\n p50: number;\n p95: number;\n}\n\nexport const LATENCY_INTERVAL: '1h' = '1h';\n\nasync function fetchPercentiles(\n client: ReturnType<typeof useMastraClient>,\n metricName: string,\n filters: Record<string, unknown>,\n): Promise<LatencyPoint[]> {\n const res = await client.getMetricPercentiles({\n name: metricName,\n percentiles: [0.5, 0.95],\n interval: LATENCY_INTERVAL,\n filters,\n });\n\n const p50Series = res.series.find(s => s.percentile === 0.5);\n const p95Series = res.series.find(s => s.percentile === 0.95);\n\n if (!p50Series || !p95Series) return [];\n\n const p95Map = new Map(p95Series.points.map(p => [new Date(p.timestamp).getTime(), p.value]));\n\n return p50Series.points.map(p => {\n const ts = new Date(p.timestamp);\n const tsMs = ts.getTime();\n return {\n time: ts.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', hour12: false }),\n tsMs,\n p50: Math.round(p.value),\n p95: Math.round(p95Map.get(tsMs) ?? 0),\n };\n });\n}\n\nexport function useLatencyMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'latency', filterKey],\n queryFn: async () => {\n const [agentData, workflowData, toolData] = await Promise.all([\n fetchPercentiles(client, 'mastra_agent_duration_ms', filters),\n fetchPercentiles(client, 'mastra_workflow_duration_ms', filters),\n fetchPercentiles(client, 'mastra_tool_duration_ms', filters),\n ]);\n return { agentData, workflowData, toolData, interval: LATENCY_INTERVAL };\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMetricsFilters } from './use-metrics-filters';\n\nexport interface VolumeRow {\n name: string;\n completed: number;\n errors: number;\n}\n\nasync function fetchVolume(\n client: ReturnType<typeof useMastraClient>,\n metricName: string,\n filters: Record<string, unknown>,\n): Promise<VolumeRow[]> {\n const res = await client.getMetricBreakdown({\n name: [metricName],\n groupBy: ['entityName', 'status'],\n aggregation: 'count',\n orderDirection: 'DESC',\n filters,\n });\n\n const map = new Map<string, { completed: number; errors: number }>();\n\n for (const group of res.groups) {\n const name = group.dimensions.entityName ?? 'unknown';\n const status = group.dimensions.status ?? 'ok';\n if (!map.has(name)) {\n map.set(name, { completed: 0, errors: 0 });\n }\n const entry = map.get(name)!;\n if (status === 'error') {\n entry.errors += group.value;\n } else {\n entry.completed += group.value;\n }\n }\n\n return Array.from(map.entries())\n .map(([name, vals]) => ({ name, ...vals }))\n .sort((a, b) => b.completed + b.errors - (a.completed + a.errors));\n}\n\nexport function useTraceVolumeMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'trace-volume', filterKey],\n queryFn: async () => {\n const [agentData, workflowData, toolData] = await Promise.all([\n fetchVolume(client, 'mastra_agent_duration_ms', filters),\n fetchVolume(client, 'mastra_workflow_duration_ms', filters),\n fetchVolume(client, 'mastra_tool_duration_ms', filters),\n ]);\n return { agentData, workflowData, toolData };\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMetricsFilters } from './use-metrics-filters';\n\nexport interface ScorerSummary {\n scorer: string;\n avg: number;\n min: number;\n max: number;\n count: number;\n}\n\nexport interface ScoresOverTimePoint {\n time: string;\n [scorer: string]: string | number;\n}\n\nexport function useScoresMetrics() {\n const client = useMastraClient();\n const { datePreset, customRange, timestamp } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'scores-card', datePreset, customRange],\n queryFn: async () => {\n const filters = {\n timestamp: { start: timestamp.start, end: timestamp.end },\n };\n\n const scorersMap = await client.listScorers();\n const scorerIds = Object.keys(scorersMap ?? {});\n\n if (scorerIds.length === 0) {\n return { summaryData: [], overTimeData: [], scorerNames: [], avgScore: null };\n }\n\n // Fetch summary stats first to determine which scorers have data\n const summaryResults = await Promise.all(\n scorerIds.map(async scorerId => {\n const [avg, min, max, count] = await Promise.all([\n client.getScoreAggregate({ scorerId, aggregation: 'avg', filters }),\n client.getScoreAggregate({ scorerId, aggregation: 'min', filters }),\n client.getScoreAggregate({ scorerId, aggregation: 'max', filters }),\n client.getScoreAggregate({ scorerId, aggregation: 'count', filters }),\n ]);\n return {\n scorer: scorerId,\n avg: avg.value ?? 0,\n min: min.value ?? 0,\n max: max.value ?? 0,\n count: count.value ?? 0,\n };\n }),\n );\n\n const summaryData: ScorerSummary[] = summaryResults.filter(s => s.count > 0);\n const scorerNames = summaryData.map(s => s.scorer);\n\n if (summaryData.length === 0) {\n return { summaryData: [], overTimeData: [], scorerNames: [], avgScore: null };\n }\n\n const totalWeighted = summaryData.reduce((s, d) => s + d.avg * d.count, 0);\n const totalCount = summaryData.reduce((s, d) => s + d.count, 0);\n const avgScore = totalCount ? Math.round((totalWeighted / totalCount) * 100) / 100 : 0;\n\n const interval = '1h';\n\n // Fetch hourly time series from the full period for active scorers\n const timeSeriesResults = await Promise.all(\n scorerNames.map(scorerId =>\n client.getScoreTimeSeries({\n scorerId,\n interval,\n aggregation: 'avg',\n filters,\n }),\n ),\n );\n\n // Collapse all days into a single 24-hour view (00:00–23:00).\n // For each hour-of-day, average the values across all days in the range.\n const hourBuckets = new Map<string, Map<string, { sum: number; count: number }>>();\n\n for (let i = 0; i < scorerNames.length; i++) {\n const scorerId = scorerNames[i];\n const series = timeSeriesResults[i]?.series ?? [];\n for (const s of series) {\n for (const point of s.points) {\n const ts = new Date(point.timestamp);\n const hourKey = ts.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n });\n if (!hourBuckets.has(hourKey)) {\n hourBuckets.set(hourKey, new Map());\n }\n const scorerMap = hourBuckets.get(hourKey)!;\n if (!scorerMap.has(scorerId)) {\n scorerMap.set(scorerId, { sum: 0, count: 0 });\n }\n const acc = scorerMap.get(scorerId)!;\n acc.sum += point.value;\n acc.count += 1;\n }\n }\n }\n\n // Build sorted 24h chart data\n const overTimeData: ScoresOverTimePoint[] = Array.from(hourBuckets.entries())\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([hourKey, scorerMap]) => {\n const point: ScoresOverTimePoint = { time: hourKey };\n for (const [scorerId, acc] of scorerMap) {\n point[scorerId] = +(acc.sum / acc.count).toFixed(2);\n }\n return point;\n });\n\n return {\n summaryData,\n overTimeData,\n scorerNames,\n avgScore,\n };\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMetricsFilters } from './use-metrics-filters';\n\nexport interface TokenUsageByAgentRow {\n name: string;\n total: number;\n input: number;\n output: number;\n cost: number | null;\n costUnit: string | null;\n}\n\nexport function useTokenUsageByAgentMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'token-usage-by-agent', filterKey],\n queryFn: async (): Promise<TokenUsageByAgentRow[]> => {\n const breakdownBase = {\n groupBy: ['entityName'],\n aggregation: 'sum' as const,\n orderDirection: 'DESC' as const,\n filters,\n };\n // total_input/total_output estimatedCost already rolls up cache + other detail costs.\n const [inputRes, outputRes] = await Promise.all([\n client.getMetricBreakdown({ ...breakdownBase, name: ['mastra_model_total_input_tokens'] }),\n client.getMetricBreakdown({ ...breakdownBase, name: ['mastra_model_total_output_tokens'] }),\n ]);\n\n type AgentEntry = { input: number; output: number; cost: number | null; costUnit: string | null };\n\n const agentMap = new Map<string, AgentEntry>();\n\n const ensure = (name: string): AgentEntry => {\n if (!agentMap.has(name)) {\n agentMap.set(name, { input: 0, output: 0, cost: null, costUnit: null });\n }\n return agentMap.get(name)!;\n };\n\n const addCost = (entry: AgentEntry, group: { estimatedCost?: number | null; costUnit?: string | null }) => {\n if (group.estimatedCost != null) {\n entry.cost = (entry.cost ?? 0) + group.estimatedCost;\n if (group.costUnit) entry.costUnit = group.costUnit;\n }\n };\n\n for (const group of inputRes.groups) {\n const name = group.dimensions.entityName ?? 'unknown';\n const entry = ensure(name);\n entry.input = group.value;\n addCost(entry, group);\n }\n for (const group of outputRes.groups) {\n const name = group.dimensions.entityName ?? 'unknown';\n const entry = ensure(name);\n entry.output = group.value;\n addCost(entry, group);\n }\n\n return Array.from(agentMap.entries())\n .map(([name, vals]) => ({\n name,\n input: vals.input,\n output: vals.output,\n total: vals.input + vals.output,\n cost: vals.cost,\n costUnit: vals.costUnit,\n }))\n .sort((a, b) => b.total - a.total);\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMetricsFilters } from './use-metrics-filters';\n\nexport type TokenUsageTimeSeriesInterval = '1h' | '1d';\n\nexport interface TokenTimelinePoint {\n time: string;\n tsMs: number;\n input: number;\n output: number;\n total: number;\n cost: number | null;\n costUnit: string | null;\n}\n\nexport interface TokenUsageTimeSeriesData {\n data: TokenTimelinePoint[];\n interval: TokenUsageTimeSeriesInterval;\n}\n\ntype TimeSeriesPoint = {\n timestamp: string | Date;\n value: number;\n estimatedCost?: number | null;\n};\n\ntype SeriesWithCost = {\n costUnit?: string | null;\n points: TimeSeriesPoint[];\n};\n\ntype TokenTimelineAccumulator = {\n tsMs: number;\n input: number;\n output: number;\n cost: number | null;\n costUnits: Set<string>;\n hasUnknownCostUnit: boolean;\n};\n\nfunction chooseTokenUsageInterval(\n datePreset: ReturnType<typeof useMetricsFilters>['datePreset'],\n): TokenUsageTimeSeriesInterval {\n return datePreset === '24h' ? '1h' : '1d';\n}\n\nfunction formatTime(ts: Date, interval: TokenUsageTimeSeriesInterval): string {\n if (interval === '1h') {\n return ts.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', hour12: false });\n }\n return ts.toLocaleDateString('en-US', { month: 'short', day: '2-digit' });\n}\n\nfunction addSeriesPoints(\n pointMap: Map<number, TokenTimelineAccumulator>,\n series: SeriesWithCost | undefined,\n key: 'input' | 'output',\n) {\n for (const point of series?.points ?? []) {\n const tsMs = new Date(point.timestamp).getTime();\n if (!Number.isFinite(tsMs)) continue;\n\n const existing = pointMap.get(tsMs) ?? {\n tsMs,\n input: 0,\n output: 0,\n cost: null,\n costUnits: new Set<string>(),\n hasUnknownCostUnit: false,\n };\n\n existing[key] += point.value;\n\n if (point.estimatedCost != null) {\n existing.cost = (existing.cost ?? 0) + point.estimatedCost;\n if (series?.costUnit) {\n existing.costUnits.add(series.costUnit);\n } else {\n existing.hasUnknownCostUnit = true;\n }\n }\n\n pointMap.set(tsMs, existing);\n }\n}\n\nfunction toCostUnit(entry: TokenTimelineAccumulator): string | null {\n if (entry.cost == null || entry.hasUnknownCostUnit || entry.costUnits.size !== 1) return null;\n return [...entry.costUnits][0] ?? null;\n}\n\nexport function useTokenUsageTimeSeries() {\n const client = useMastraClient();\n const { datePreset, filters, filterKey } = useMetricsFilters();\n const interval = chooseTokenUsageInterval(datePreset);\n\n return useQuery({\n queryKey: ['metrics', 'token-usage-timeseries', filterKey, interval],\n queryFn: async (): Promise<TokenUsageTimeSeriesData> => {\n const [inputRes, outputRes] = await Promise.all([\n client.getMetricTimeSeries({\n name: ['mastra_model_total_input_tokens'],\n interval,\n aggregation: 'sum',\n filters,\n }),\n client.getMetricTimeSeries({\n name: ['mastra_model_total_output_tokens'],\n interval,\n aggregation: 'sum',\n filters,\n }),\n ]);\n\n const pointMap = new Map<number, TokenTimelineAccumulator>();\n addSeriesPoints(pointMap, inputRes.series[0], 'input');\n addSeriesPoints(pointMap, outputRes.series[0], 'output');\n\n const data = Array.from(pointMap.values())\n .sort((a, b) => a.tsMs - b.tsMs)\n .map(point => {\n const ts = new Date(point.tsMs);\n return {\n time: formatTime(ts, interval),\n tsMs: point.tsMs,\n input: point.input,\n output: point.output,\n total: point.input + point.output,\n cost: point.cost,\n costUnit: toCostUnit(point),\n };\n });\n\n return { data, interval };\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\n\nimport { useMetricsFilters } from './use-metrics-filters';\n\n/** Active Threads — number of distinct thread IDs observed in agent runs.\n * Uses approximate `count_distinct` (HyperLogLog on ClickHouse,\n * `approx_count_distinct` on DuckDB) so the query stays fast even on\n * tens of millions of rows. */\nexport function useActiveThreadsKpiMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'active-threads-kpi', filterKey],\n queryFn: () =>\n client.getMetricAggregate({\n name: ['mastra_agent_duration_ms'],\n aggregation: 'count_distinct',\n distinctColumn: 'threadId' as never,\n filters,\n comparePeriod: 'previous_period',\n }),\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\n\nimport { useMetricsFilters } from './use-metrics-filters';\n\n/** Active Resources — number of distinct resource IDs observed in agent runs.\n * Uses approximate `count_distinct` (HyperLogLog on ClickHouse,\n * `approx_count_distinct` on DuckDB) so the query stays fast even on\n * tens of millions of rows. */\nexport function useActiveResourcesKpiMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'active-resources-kpi', filterKey],\n queryFn: () =>\n client.getMetricAggregate({\n name: ['mastra_agent_duration_ms'],\n aggregation: 'count_distinct',\n distinctColumn: 'resourceId' as never,\n filters,\n comparePeriod: 'previous_period',\n }),\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\n\nimport { useMetricsFilters } from './use-metrics-filters';\n\nexport interface ActiveThreadRow {\n threadId: string;\n resourceId: string | null;\n runs: number;\n tokens: number;\n cost: number | null;\n costUnit: string | null;\n}\n\nconst TOP_N = 20;\n\n/** Top Active Threads — the threads with the most agent runs in the selected\n * range. Server-side TopK (`ORDER BY value DESC LIMIT 20`) is required so the\n * query never returns the full thread set when cardinality is in the millions.\n *\n * Tokens + cost are joined in from parallel breakdowns on the same `threadId`\n * grouping so we don't need any new backend aggregation support. */\nexport function useTopActiveThreadsMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'top-active-threads', filterKey],\n queryFn: async (): Promise<ActiveThreadRow[]> => {\n const breakdownBase = {\n groupBy: ['threadId', 'resourceId'],\n orderDirection: 'DESC' as const,\n filters,\n };\n\n const [runsRes, inputRes, outputRes] = await Promise.all([\n client.getMetricBreakdown({\n ...breakdownBase,\n name: ['mastra_agent_duration_ms'],\n aggregation: 'count',\n limit: TOP_N,\n }),\n // Token breakdowns use the same groupBy and a server-side TopK so the\n // response stays bounded even when the underlying thread set has very\n // high cardinality. Threads that are top-N by runs but not by tokens\n // will display 0 tokens (an acceptable approximation in exchange for\n // a bounded query).\n client.getMetricBreakdown({\n ...breakdownBase,\n name: ['mastra_model_total_input_tokens'],\n aggregation: 'sum',\n limit: TOP_N,\n }),\n client.getMetricBreakdown({\n ...breakdownBase,\n name: ['mastra_model_total_output_tokens'],\n aggregation: 'sum',\n limit: TOP_N,\n }),\n ]);\n\n type Entry = { tokens: number; cost: number | null; costUnit: string | null };\n const byThread = new Map<string, Entry>();\n\n const ensure = (threadId: string): Entry => {\n if (!byThread.has(threadId)) byThread.set(threadId, { tokens: 0, cost: null, costUnit: null });\n return byThread.get(threadId)!;\n };\n\n const foldTokens = (groups: typeof inputRes.groups) => {\n for (const group of groups) {\n const threadId = group.dimensions.threadId;\n if (!threadId) continue;\n const entry = ensure(threadId as string);\n entry.tokens += group.value;\n if (group.estimatedCost != null) {\n entry.cost = (entry.cost ?? 0) + group.estimatedCost;\n if (group.costUnit) entry.costUnit = group.costUnit;\n }\n }\n };\n foldTokens(inputRes.groups);\n foldTokens(outputRes.groups);\n\n return runsRes.groups\n .filter(group => !!group.dimensions.threadId)\n .map(group => {\n const threadId = group.dimensions.threadId as string;\n const extra = byThread.get(threadId);\n return {\n threadId,\n resourceId: (group.dimensions.resourceId as string | undefined) ?? null,\n runs: group.value,\n tokens: extra?.tokens ?? 0,\n cost: extra?.cost ?? null,\n costUnit: extra?.costUnit ?? null,\n };\n });\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\n\nimport { useMetricsFilters } from './use-metrics-filters';\n\nexport interface ResourceThreadsRow {\n resourceId: string;\n threadCount: number;\n tokens: number;\n cost: number | null;\n costUnit: string | null;\n}\n\nconst TOP_N = 20;\n\n/** Top Resources by Thread Count — the resources with the most distinct threads\n * in the selected range. Uses `count_distinct(threadId)` per `resourceId`,\n * with server-side TopK (`ORDER BY value DESC LIMIT 20`).\n *\n * Tokens + cost are joined in from parallel breakdowns on `resourceId` so the\n * table can show cost/usage without a separate backend aggregation. */\nexport function useTopResourcesByThreadsMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'top-resources-by-threads', filterKey],\n queryFn: async (): Promise<ResourceThreadsRow[]> => {\n const breakdownBase = {\n groupBy: ['resourceId'],\n orderDirection: 'DESC' as const,\n filters,\n };\n\n const [threadsRes, inputRes, outputRes] = await Promise.all([\n client.getMetricBreakdown({\n ...breakdownBase,\n name: ['mastra_agent_duration_ms'],\n aggregation: 'count_distinct',\n distinctColumn: 'threadId' as never,\n limit: TOP_N,\n }),\n // Token breakdowns use the same groupBy and a server-side TopK so the\n // response stays bounded even when the underlying resource set has very\n // high cardinality. Resources that are top-N by thread count but not by\n // tokens will display 0 tokens (an acceptable approximation in exchange\n // for a bounded query).\n client.getMetricBreakdown({\n ...breakdownBase,\n name: ['mastra_model_total_input_tokens'],\n aggregation: 'sum',\n limit: TOP_N,\n }),\n client.getMetricBreakdown({\n ...breakdownBase,\n name: ['mastra_model_total_output_tokens'],\n aggregation: 'sum',\n limit: TOP_N,\n }),\n ]);\n\n type Entry = { tokens: number; cost: number | null; costUnit: string | null };\n const byResource = new Map<string, Entry>();\n\n const ensure = (resourceId: string): Entry => {\n if (!byResource.has(resourceId)) byResource.set(resourceId, { tokens: 0, cost: null, costUnit: null });\n return byResource.get(resourceId)!;\n };\n\n const foldTokens = (groups: typeof inputRes.groups) => {\n for (const group of groups) {\n const resourceId = group.dimensions.resourceId;\n if (!resourceId) continue;\n const entry = ensure(resourceId as string);\n entry.tokens += group.value;\n if (group.estimatedCost != null) {\n entry.cost = (entry.cost ?? 0) + group.estimatedCost;\n if (group.costUnit) entry.costUnit = group.costUnit;\n }\n }\n };\n foldTokens(inputRes.groups);\n foldTokens(outputRes.groups);\n\n return threadsRes.groups\n .filter(group => !!group.dimensions.resourceId)\n .map(group => {\n const resourceId = group.dimensions.resourceId as string;\n const extra = byResource.get(resourceId);\n return {\n resourceId,\n threadCount: group.value,\n tokens: extra?.tokens ?? 0,\n cost: extra?.cost ?? null,\n costUnit: extra?.costUnit ?? null,\n };\n });\n },\n });\n}\n","import { EntityType } from '@mastra/core/observability';\nimport type { ListLogsArgs } from '@mastra/core/storage';\nimport type { LogLevel } from './types';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\nexport type LogsDatePreset = 'all' | 'last-24h' | 'last-3d' | 'last-7d' | 'last-14d' | 'last-30d' | 'custom';\n\nexport type LogsEntityOptions = { label: string; entityType: EntityType };\n\nexport const LOGS_ROOT_ENTITY_TYPES = {\n AGENT: EntityType.AGENT,\n WORKFLOW: EntityType.WORKFLOW_RUN,\n SCORER: EntityType.SCORER,\n INGEST: EntityType.RAG_INGESTION,\n} as const;\n\nexport const LOGS_ROOT_ENTITY_TYPE_OPTIONS = [\n { label: 'Agent', entityType: LOGS_ROOT_ENTITY_TYPES.AGENT },\n { label: 'Workflow', entityType: LOGS_ROOT_ENTITY_TYPES.WORKFLOW },\n { label: 'Scorer', entityType: LOGS_ROOT_ENTITY_TYPES.SCORER },\n { label: 'Ingest', entityType: LOGS_ROOT_ENTITY_TYPES.INGEST },\n] as const satisfies readonly LogsEntityOptions[];\n\nexport const LOG_LEVEL_VALUES: readonly LogLevel[] = ['debug', 'info', 'warn', 'error', 'fatal'] as const;\n\nexport const LOG_LEVEL_OPTIONS = [\n { label: 'Debug', value: 'debug' },\n { label: 'Info', value: 'info' },\n { label: 'Warn', value: 'warn' },\n { label: 'Error', value: 'error' },\n { label: 'Fatal', value: 'fatal' },\n] as const satisfies readonly { label: string; value: LogLevel }[];\n\nexport const LOGS_ROOT_ENTITY_TYPE_PARAM = 'rootEntityType';\nexport const LOGS_DATE_PRESET_PARAM = 'datePreset';\nexport const LOGS_DATE_FROM_PARAM = 'dateFrom';\nexport const LOGS_DATE_TO_PARAM = 'dateTo';\n\nexport const LOGS_DATE_PRESET_VALUES = new Set<LogsDatePreset>([\n 'all',\n 'last-24h',\n 'last-3d',\n 'last-7d',\n 'last-14d',\n 'last-30d',\n 'custom',\n]);\n\n/**\n * Generic filter URL params (filterX keys). Fields that carry multiple values\n * (tags, level) use repeated params; everything else is a single string.\n */\nexport const LOGS_PROPERTY_FILTER_PARAM_BY_FIELD = {\n level: 'filterLevel',\n tags: 'filterTags',\n entityName: 'filterEntityName',\n traceId: 'filterTraceId',\n spanId: 'filterSpanId',\n runId: 'filterRunId',\n threadId: 'filterThreadId',\n sessionId: 'filterSessionId',\n requestId: 'filterRequestId',\n resourceId: 'filterResourceId',\n userId: 'filterUserId',\n organizationId: 'filterOrganizationId',\n serviceName: 'filterServiceName',\n environment: 'filterEnvironment',\n experimentId: 'filterExperimentId',\n} as const;\n\nexport const LOGS_PROPERTY_FILTER_FIELD_IDS = Object.keys(LOGS_PROPERTY_FILTER_PARAM_BY_FIELD) as Array<\n keyof typeof LOGS_PROPERTY_FILTER_PARAM_BY_FIELD\n>;\n\n/** Fields stored as repeated URL params (value is string[]). */\nconst LOGS_ARRAY_FIELD_IDS = new Set<string>(['tags']);\n\nexport const DEFAULT_LOGS_FILTERS_STORAGE_KEY = 'mastra:logs:saved-filters';\n\nexport function saveLogsFiltersToStorage(\n params: URLSearchParams,\n storageKey: string = DEFAULT_LOGS_FILTERS_STORAGE_KEY,\n): void {\n const serialized = getPreservedLogsFilterParams(params);\n const preset = params.get(LOGS_DATE_PRESET_PARAM);\n if (preset) serialized.set(LOGS_DATE_PRESET_PARAM, preset);\n const from = params.get(LOGS_DATE_FROM_PARAM);\n if (from) serialized.set(LOGS_DATE_FROM_PARAM, from);\n const to = params.get(LOGS_DATE_TO_PARAM);\n if (to) serialized.set(LOGS_DATE_TO_PARAM, to);\n\n try {\n localStorage.setItem(storageKey, serialized.toString());\n } catch {\n // localStorage may be unavailable (private mode / quota) — silently skip.\n }\n}\n\nexport function clearSavedLogsFilters(storageKey: string = DEFAULT_LOGS_FILTERS_STORAGE_KEY): void {\n try {\n localStorage.removeItem(storageKey);\n } catch {\n // ignore\n }\n}\n\nexport function loadLogsFiltersFromStorage(\n storageKey: string = DEFAULT_LOGS_FILTERS_STORAGE_KEY,\n): URLSearchParams | null {\n try {\n const raw = localStorage.getItem(storageKey);\n if (!raw) return null;\n const parsed = new URLSearchParams(raw);\n return parsed.toString() ? parsed : null;\n } catch {\n return null;\n }\n}\n\nexport function hasAnyLogsFilterParams(params: URLSearchParams): boolean {\n if (params.has(LOGS_DATE_PRESET_PARAM)) return true;\n if (params.has(LOGS_DATE_FROM_PARAM)) return true;\n if (params.has(LOGS_DATE_TO_PARAM)) return true;\n if (params.has(LOGS_ROOT_ENTITY_TYPE_PARAM)) return true;\n for (const fieldId of LOGS_PROPERTY_FILTER_FIELD_IDS) {\n if (params.has(LOGS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId])) return true;\n }\n return false;\n}\n\nexport function createLogsPropertyFilterFields({\n availableTags,\n availableRootEntityNames,\n availableServiceNames,\n availableEnvironments,\n loading,\n}: {\n availableTags: string[];\n availableRootEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n loading?: {\n tags?: boolean;\n entityNames?: boolean;\n serviceNames?: boolean;\n environments?: boolean;\n };\n}): PropertyFilterField[] {\n const fields: PropertyFilterField[] = [\n {\n id: 'rootEntityType',\n label: 'Primitive Type',\n kind: 'pick-multi',\n searchable: false,\n options: LOGS_ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ label: o.label, value: o.entityType })),\n placeholder: 'Choose entity type',\n emptyText: 'No entity types.',\n },\n {\n id: 'entityName',\n label: 'Primitive Name',\n kind: 'pick-multi',\n options: availableRootEntityNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose entity names',\n emptyText: 'No entity names found.',\n isLoading: loading?.entityNames,\n },\n {\n id: 'level',\n label: 'Level',\n kind: 'pick-multi',\n searchable: false,\n options: LOG_LEVEL_OPTIONS.map(o => ({ label: o.label, value: o.value })),\n placeholder: 'Choose level',\n emptyText: 'No levels.',\n },\n {\n id: 'tags',\n label: 'Tags',\n kind: 'pick-multi',\n multi: true,\n options: availableTags.map(tag => ({ label: tag, value: tag })),\n placeholder: 'Choose tags',\n emptyText: 'No tags found.',\n isLoading: loading?.tags,\n },\n {\n id: 'serviceName',\n label: 'Service Name',\n kind: 'pick-multi',\n options: availableServiceNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose service names',\n emptyText: 'No service names found.',\n isLoading: loading?.serviceNames,\n },\n {\n id: 'environment',\n label: 'Environment',\n kind: 'pick-multi',\n options: availableEnvironments.map(env => ({ label: env, value: env })),\n placeholder: 'Choose environments',\n emptyText: 'No environments found.',\n isLoading: loading?.environments,\n },\n { id: 'traceId', label: 'Trace ID', kind: 'text' },\n { id: 'spanId', label: 'Span ID', kind: 'text' },\n { id: 'runId', label: 'Run ID', kind: 'text' },\n { id: 'threadId', label: 'Thread ID', kind: 'text' },\n { id: 'sessionId', label: 'Session ID', kind: 'text' },\n { id: 'requestId', label: 'Request ID', kind: 'text' },\n { id: 'resourceId', label: 'Resource ID', kind: 'text' },\n { id: 'userId', label: 'User ID', kind: 'text' },\n { id: 'organizationId', label: 'Organization ID', kind: 'text' },\n { id: 'experimentId', label: 'Experiment ID', kind: 'text' },\n ];\n const byLabel = (a: PropertyFilterField, b: PropertyFilterField) => a.label.localeCompare(b.label);\n const pickMulti = fields.filter(f => f.kind === 'pick-multi').sort(byLabel);\n const text = fields.filter(f => f.kind === 'text').sort(byLabel);\n return [...pickMulti, ...text];\n}\n\n/**\n * Read filter tokens from URL search params preserving the order in which\n * each filter was first added. Fields in LOGS_ARRAY_FIELD_IDS are read as\n * string[]; an empty sentinel (`filterX=`) keeps the pill alive post-Reset.\n */\nexport function getLogsPropertyFilterTokens(searchParams: URLSearchParams): PropertyFilterToken[] {\n const tokens: PropertyFilterToken[] = [];\n\n const paramToFieldId = new Map<string, string>([[LOGS_ROOT_ENTITY_TYPE_PARAM, 'rootEntityType']]);\n for (const fieldId of LOGS_PROPERTY_FILTER_FIELD_IDS) {\n paramToFieldId.set(LOGS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId], fieldId);\n }\n\n const seen = new Set<string>();\n for (const [paramName] of searchParams.entries()) {\n const fieldId = paramToFieldId.get(paramName);\n if (!fieldId || seen.has(fieldId)) continue;\n seen.add(fieldId);\n\n if (LOGS_ARRAY_FIELD_IDS.has(fieldId)) {\n const raw = searchParams.getAll(paramName);\n if (raw.length === 0) continue;\n tokens.push({ fieldId, value: raw.filter(Boolean) });\n continue;\n }\n\n const value = searchParams.get(paramName);\n if (value !== null) tokens.push({ fieldId, value });\n }\n\n return tokens;\n}\n\nexport function getPreservedLogsFilterParams(searchParams: URLSearchParams) {\n const next = new URLSearchParams();\n\n const rootEntityType = searchParams.get(LOGS_ROOT_ENTITY_TYPE_PARAM);\n if (rootEntityType) next.set(LOGS_ROOT_ENTITY_TYPE_PARAM, rootEntityType);\n\n for (const fieldId of LOGS_PROPERTY_FILTER_FIELD_IDS) {\n const param = LOGS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId];\n if (LOGS_ARRAY_FIELD_IDS.has(fieldId)) {\n for (const value of searchParams.getAll(param)) {\n next.append(param, value);\n }\n continue;\n }\n\n const value = searchParams.get(param);\n if (value) next.set(param, value);\n }\n\n return next;\n}\n\nexport function applyLogsPropertyFilterTokens(params: URLSearchParams, tokens: PropertyFilterToken[]) {\n params.delete(LOGS_ROOT_ENTITY_TYPE_PARAM);\n for (const fieldId of LOGS_PROPERTY_FILTER_FIELD_IDS) {\n params.delete(LOGS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n\n for (const token of tokens) {\n if (token.fieldId === 'rootEntityType' && typeof token.value === 'string') {\n params.set(LOGS_ROOT_ENTITY_TYPE_PARAM, token.value);\n continue;\n }\n\n const param =\n LOGS_PROPERTY_FILTER_PARAM_BY_FIELD[token.fieldId as keyof typeof LOGS_PROPERTY_FILTER_PARAM_BY_FIELD];\n if (!param) continue;\n\n if (LOGS_ARRAY_FIELD_IDS.has(token.fieldId) && Array.isArray(token.value)) {\n if (token.value.length === 0) {\n // Empty sentinel — keeps the pill visible after Reset.\n params.append(param, '');\n } else {\n for (const value of token.value) {\n params.append(param, value);\n }\n }\n continue;\n }\n\n if (typeof token.value === 'string') {\n // Persist empty / 'Any' values too so neutralized-but-still-visible pills\n // survive URL round-trips. buildLogsListFilters skips these on the API\n // query side so neutrals never reach the backend.\n params.set(param, token.value.trim());\n }\n }\n}\n\nexport function buildLogsListFilters({\n rootEntityType,\n dateFrom,\n dateTo,\n tokens,\n}: {\n rootEntityType?: string;\n dateFrom?: Date;\n dateTo?: Date;\n tokens: PropertyFilterToken[];\n}): ListLogsArgs['filters'] {\n const filters: NonNullable<ListLogsArgs['filters']> = {};\n\n if (rootEntityType) {\n filters.rootEntityType = rootEntityType as NonNullable<ListLogsArgs['filters']>['rootEntityType'];\n }\n\n if (dateFrom || dateTo) {\n filters.timestamp = {\n ...(dateFrom ? { start: dateFrom } : {}),\n ...(dateTo ? { end: dateTo } : {}),\n };\n }\n\n for (const token of tokens) {\n if (token.fieldId === 'tags') {\n if (Array.isArray(token.value) && token.value.length > 0) {\n filters.tags = token.value;\n } else if (typeof token.value === 'string' && token.value.trim()) {\n filters.tags = [token.value.trim()];\n }\n continue;\n }\n\n if (token.fieldId === 'level') {\n // Single-select only — the server's `level` union (single LogLevel or\n // array) can't round-trip as a JSON-string array through the query-param\n // schema wrapper, so we send a single enum value. \"Any\" = no filter.\n if (typeof token.value === 'string' && token.value.trim() && token.value !== 'Any') {\n filters.level = token.value as LogLevel;\n }\n continue;\n }\n\n if (typeof token.value !== 'string') continue;\n // Skip empty-string tokens (unfilled pending filters) and 'Any'\n // (pick-multi single-select neutral state) so neutrals never reach the\n // backend.\n if (!token.value.trim()) continue;\n if (token.value === 'Any') continue;\n\n switch (token.fieldId) {\n case 'entityName':\n filters.rootEntityName = token.value;\n break;\n case 'traceId':\n filters.traceId = token.value;\n break;\n case 'spanId':\n filters.spanId = token.value;\n break;\n case 'runId':\n filters.runId = token.value;\n break;\n case 'threadId':\n filters.threadId = token.value;\n break;\n case 'sessionId':\n filters.sessionId = token.value;\n break;\n case 'requestId':\n filters.requestId = token.value;\n break;\n case 'resourceId':\n filters.resourceId = token.value;\n break;\n case 'userId':\n filters.userId = token.value;\n break;\n case 'organizationId':\n filters.organizationId = token.value;\n break;\n case 'serviceName':\n filters.serviceName = token.value;\n break;\n case 'environment':\n filters.environment = token.value;\n break;\n case 'experimentId':\n filters.experimentId = token.value;\n break;\n default:\n break;\n }\n }\n\n return filters;\n}\n\n/**\n * \"Clear\" semantics for the logs toolbar: keep all filter pills but neutralize each value.\n * '' for text fields, 'Any' for single-select pick-multi, [] for multi-select pick-multi.\n * Date range is intentionally NOT touched here — that's a separate concern.\n */\nexport function neutralizeLogsFilterTokens(\n filterFields: PropertyFilterField[],\n filterTokens: PropertyFilterToken[],\n): PropertyFilterToken[] {\n return filterTokens.map(token => {\n const field = filterFields.find(f => f.id === token.fieldId);\n if (!field) return token;\n if (field.kind === 'text') return { fieldId: token.fieldId, value: '' };\n if (field.kind === 'pick-multi') {\n return field.multi ? { fieldId: token.fieldId, value: [] } : { fieldId: token.fieldId, value: 'Any' };\n }\n return token;\n });\n}\n","import { EntityType } from '@mastra/core/observability';\nimport type { ListTracesArgs } from '@mastra/core/storage';\nimport type { TraceDatePreset } from './types';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\nexport type EntityOptions = { label: string; entityType: EntityType };\n\nexport const ROOT_ENTITY_TYPES = {\n AGENT: EntityType.AGENT,\n WORKFLOW: EntityType.WORKFLOW_RUN,\n SCORER: EntityType.SCORER,\n INGEST: EntityType.RAG_INGESTION,\n} as const;\n\nexport const ROOT_ENTITY_TYPE_OPTIONS = [\n { label: 'Agent', entityType: ROOT_ENTITY_TYPES.AGENT },\n { label: 'Workflow', entityType: ROOT_ENTITY_TYPES.WORKFLOW },\n { label: 'Scorer', entityType: ROOT_ENTITY_TYPES.SCORER },\n { label: 'Ingest', entityType: ROOT_ENTITY_TYPES.INGEST },\n] as const satisfies readonly EntityOptions[];\n\nexport type TraceStatusFilter = 'running' | 'success' | 'error';\n\nexport const TRACE_STATUS_OPTIONS = [\n { label: 'Running', value: 'running' },\n { label: 'Success', value: 'success' },\n { label: 'Error', value: 'error' },\n] as const satisfies readonly { label: string; value: TraceStatusFilter }[];\n\n/** Field ids for \"synthetic\" filter entries — they live in dedicated URL params\n * rather than the generic `filter*` set, but appear as rows in the Filter\n * popover so users can manage all filters from one place. */\nexport const TRACE_SYNTHETIC_FILTER_FIELD_IDS = ['rootEntityType', 'status'] as const;\n\nexport const TRACE_ROOT_ENTITY_TYPE_PARAM = 'rootEntityType';\nexport const TRACE_STATUS_PARAM = 'status';\nexport const TRACE_LIST_MODE_PARAM = 'listMode';\n/** Branch-mode only: identifies the anchor span that defines the displayed subtree.\n * Stable across intra-panel span navigation (which only changes `spanId`). */\nexport const TRACE_ANCHOR_SPAN_ID_PARAM = 'anchorSpanId';\nexport const TRACE_LIST_MODE_VALUES = new Set(['traces', 'branches'] as const);\nexport type TraceListMode = 'traces' | 'branches';\n\nexport const TRACE_LIST_MODE_OPTIONS = [\n { label: 'Traces (default)', value: 'traces' },\n { label: 'Branches', value: 'branches' },\n] as const satisfies readonly { label: string; value: TraceListMode }[];\nexport const TRACE_DATE_PRESET_PARAM = 'datePreset';\nexport const TRACE_DATE_FROM_PARAM = 'dateFrom';\nexport const TRACE_DATE_TO_PARAM = 'dateTo';\n\nexport const TRACE_DATE_PRESET_VALUES = new Set<TraceDatePreset>([\n 'all',\n 'last-24h',\n 'last-3d',\n 'last-7d',\n 'last-14d',\n 'last-30d',\n 'custom',\n]);\n\nexport const TRACE_PROPERTY_FILTER_PARAM_BY_FIELD = {\n tags: 'filterTags',\n entityId: 'filterEntityId',\n entityName: 'filterEntityName',\n traceId: 'filterTraceId',\n runId: 'filterRunId',\n threadId: 'filterThreadId',\n sessionId: 'filterSessionId',\n requestId: 'filterRequestId',\n resourceId: 'filterResourceId',\n userId: 'filterUserId',\n organizationId: 'filterOrganizationId',\n serviceName: 'filterServiceName',\n environment: 'filterEnvironment',\n experimentId: 'filterExperimentId',\n} as const;\n\nexport const TRACE_PROPERTY_FILTER_FIELD_IDS = Object.keys(TRACE_PROPERTY_FILTER_PARAM_BY_FIELD) as Array<\n keyof typeof TRACE_PROPERTY_FILTER_PARAM_BY_FIELD\n>;\n\nexport const TRACE_STATUS_VALUES = new Set<TraceStatusFilter>(['running', 'success', 'error']);\n\nexport const DEFAULT_TRACE_FILTERS_STORAGE_KEY = 'mastra:traces:saved-filters';\n\n/** Serialize the filter-related URL params (date + rootEntityType + status +\n * generic filterX set) to localStorage so the user can restore them on next\n * visit. Throws no errors — storage being unavailable is fine. */\nexport function saveTraceFiltersToStorage(\n params: URLSearchParams,\n storageKey: string = DEFAULT_TRACE_FILTERS_STORAGE_KEY,\n): void {\n const serialized = getPreservedTraceFilterParams(params);\n const preset = params.get(TRACE_DATE_PRESET_PARAM);\n if (preset) serialized.set(TRACE_DATE_PRESET_PARAM, preset);\n const from = params.get(TRACE_DATE_FROM_PARAM);\n if (from) serialized.set(TRACE_DATE_FROM_PARAM, from);\n const to = params.get(TRACE_DATE_TO_PARAM);\n if (to) serialized.set(TRACE_DATE_TO_PARAM, to);\n\n try {\n localStorage.setItem(storageKey, serialized.toString());\n } catch {\n // localStorage may be unavailable (private mode / quota) — silently skip.\n }\n}\n\n/** Forget any previously saved filter set. Called from the \"Remove filters\"\n * action so the next plain sidebar nav lands on an empty page. */\nexport function clearSavedTraceFilters(storageKey: string = DEFAULT_TRACE_FILTERS_STORAGE_KEY): void {\n try {\n localStorage.removeItem(storageKey);\n } catch {\n // ignore — storage may be unavailable\n }\n}\n\n/** Read a previously saved filter set and return it as URLSearchParams, or\n * null if nothing is saved or storage is unavailable. */\nexport function loadTraceFiltersFromStorage(\n storageKey: string = DEFAULT_TRACE_FILTERS_STORAGE_KEY,\n): URLSearchParams | null {\n try {\n const raw = localStorage.getItem(storageKey);\n if (!raw) return null;\n const parsed = new URLSearchParams(raw);\n return parsed.toString() ? parsed : null;\n } catch {\n return null;\n }\n}\n\n/** True when `params` carries any filter-related key — used to decide whether\n * to hydrate from localStorage on page mount (we only hydrate when the URL is\n * filter-clean, i.e. the user landed here via a plain sidebar nav). */\nexport function hasAnyTraceFilterParams(params: URLSearchParams): boolean {\n if (params.has(TRACE_DATE_PRESET_PARAM)) return true;\n if (params.has(TRACE_DATE_FROM_PARAM)) return true;\n if (params.has(TRACE_DATE_TO_PARAM)) return true;\n if (params.has(TRACE_ROOT_ENTITY_TYPE_PARAM)) return true;\n if (params.has(TRACE_STATUS_PARAM)) return true;\n if (params.has(TRACE_LIST_MODE_PARAM)) return true;\n for (const fieldId of TRACE_PROPERTY_FILTER_FIELD_IDS) {\n if (params.has(TRACE_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId])) return true;\n }\n return false;\n}\n\nexport function createTracePropertyFilterFields({\n availableTags,\n availableRootEntityNames,\n availableServiceNames,\n availableEnvironments,\n loading,\n}: {\n availableTags: string[];\n availableRootEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n loading?: {\n tags?: boolean;\n entityNames?: boolean;\n serviceNames?: boolean;\n environments?: boolean;\n };\n}): PropertyFilterField[] {\n const fields: PropertyFilterField[] = [\n {\n id: 'rootEntityType',\n label: 'Primitive Type',\n kind: 'pick-multi',\n searchable: false,\n options: ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ label: o.label, value: o.entityType })),\n placeholder: 'Choose entity type',\n emptyText: 'No entity types.',\n },\n {\n id: 'entityName',\n label: 'Primitive Name',\n kind: 'pick-multi',\n options: availableRootEntityNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose entity names',\n emptyText: 'No entity names found.',\n isLoading: loading?.entityNames,\n },\n { id: 'entityId', label: 'Primitive ID', kind: 'text' },\n {\n id: 'status',\n label: 'Status',\n kind: 'pick-multi',\n searchable: false,\n options: TRACE_STATUS_OPTIONS.map(o => ({ label: o.label, value: o.value })),\n placeholder: 'Choose status',\n emptyText: 'No statuses.',\n },\n {\n id: 'tags',\n label: 'Tags',\n kind: 'pick-multi',\n multi: true,\n options: availableTags.map(tag => ({ label: tag, value: tag })),\n placeholder: 'Choose tags',\n emptyText: 'No tags found.',\n isLoading: loading?.tags,\n },\n {\n id: 'serviceName',\n label: 'Service Name',\n kind: 'pick-multi',\n options: availableServiceNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose service names',\n emptyText: 'No service names found.',\n isLoading: loading?.serviceNames,\n },\n {\n id: 'environment',\n label: 'Environment',\n kind: 'pick-multi',\n options: availableEnvironments.map(env => ({ label: env, value: env })),\n placeholder: 'Choose environments',\n emptyText: 'No environments found.',\n isLoading: loading?.environments,\n },\n { id: 'traceId', label: 'Trace ID', kind: 'text' },\n { id: 'runId', label: 'Run ID', kind: 'text' },\n { id: 'threadId', label: 'Thread ID', kind: 'text' },\n { id: 'sessionId', label: 'Session ID', kind: 'text' },\n { id: 'requestId', label: 'Request ID', kind: 'text' },\n { id: 'resourceId', label: 'Resource ID', kind: 'text' },\n { id: 'userId', label: 'User ID', kind: 'text' },\n { id: 'organizationId', label: 'Organization ID', kind: 'text' },\n { id: 'experimentId', label: 'Experiment ID', kind: 'text' },\n ];\n const byLabel = (a: PropertyFilterField, b: PropertyFilterField) => a.label.localeCompare(b.label);\n const pickMulti = fields.filter(f => f.kind === 'pick-multi').sort(byLabel);\n const text = fields.filter(f => f.kind === 'text').sort(byLabel);\n return [...pickMulti, ...text];\n}\n\n/**\n * Read filter tokens from URL search params preserving the order in which each\n * filter was first added (URLSearchParams iterates in insertion order). This\n * is used by the Filter popover + PropertyFilterApplied pills so the UI reflects the\n * order the user created the filters in.\n */\nexport function getTracePropertyFilterTokens(searchParams: URLSearchParams): PropertyFilterToken[] {\n const tokens: PropertyFilterToken[] = [];\n\n // Map URL param name → fieldId for both generic filterX params and the\n // dedicated synthetic params (rootEntityType, status).\n const paramToFieldId = new Map<string, string>([\n [TRACE_ROOT_ENTITY_TYPE_PARAM, 'rootEntityType'],\n [TRACE_STATUS_PARAM, 'status'],\n ]);\n for (const fieldId of TRACE_PROPERTY_FILTER_FIELD_IDS) {\n paramToFieldId.set(TRACE_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId], fieldId);\n }\n\n const seen = new Set<string>();\n for (const [paramName] of searchParams.entries()) {\n const fieldId = paramToFieldId.get(paramName);\n if (!fieldId || seen.has(fieldId)) continue;\n seen.add(fieldId);\n\n if (fieldId === 'tags') {\n const raw = searchParams.getAll(paramName);\n if (raw.length === 0) continue;\n // An empty `filterTags=` sentinel keeps the pill alive after a Reset\n // (neutral state = no selections) so users can re-pick without losing\n // the pill's position. Non-empty entries are the actual selected tags.\n tokens.push({ fieldId, value: raw.filter(Boolean) });\n continue;\n }\n\n // Text and synthetic single-value fields: include empty strings so\n // pending-but-not-yet-filled filters survive URL round-trips.\n const value = searchParams.get(paramName);\n if (value !== null) tokens.push({ fieldId, value });\n }\n\n return tokens;\n}\n\nexport function getPreservedTraceFilterParams(searchParams: URLSearchParams) {\n const next = new URLSearchParams();\n\n const rootEntityType = searchParams.get(TRACE_ROOT_ENTITY_TYPE_PARAM);\n if (rootEntityType) next.set(TRACE_ROOT_ENTITY_TYPE_PARAM, rootEntityType);\n\n const status = searchParams.get(TRACE_STATUS_PARAM);\n if (status) next.set(TRACE_STATUS_PARAM, status);\n\n const listMode = searchParams.get(TRACE_LIST_MODE_PARAM);\n if (listMode) next.set(TRACE_LIST_MODE_PARAM, listMode);\n\n for (const fieldId of TRACE_PROPERTY_FILTER_FIELD_IDS) {\n const param = TRACE_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId];\n if (fieldId === 'tags') {\n for (const value of searchParams.getAll(param)) {\n next.append(param, value);\n }\n continue;\n }\n\n const value = searchParams.get(param);\n if (value) {\n next.set(param, value);\n }\n }\n\n return next;\n}\n\n/**\n * Clear all filter params from `params` and re-add them in the given `tokens`\n * order so the URL (and therefore the PropertyFilterApplied pills) reflects the\n * creation order of filters. Handles the generic `filterX` params plus the\n * dedicated synthetic params (rootEntityType, status).\n */\nexport function applyTracePropertyFilterTokens(params: URLSearchParams, tokens: PropertyFilterToken[]) {\n params.delete(TRACE_ROOT_ENTITY_TYPE_PARAM);\n params.delete(TRACE_STATUS_PARAM);\n for (const fieldId of TRACE_PROPERTY_FILTER_FIELD_IDS) {\n params.delete(TRACE_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n\n for (const token of tokens) {\n if (token.fieldId === 'rootEntityType' && typeof token.value === 'string') {\n params.set(TRACE_ROOT_ENTITY_TYPE_PARAM, token.value);\n continue;\n }\n if (token.fieldId === 'status' && typeof token.value === 'string') {\n params.set(TRACE_STATUS_PARAM, token.value);\n continue;\n }\n\n const param =\n TRACE_PROPERTY_FILTER_PARAM_BY_FIELD[token.fieldId as keyof typeof TRACE_PROPERTY_FILTER_PARAM_BY_FIELD];\n if (!param) continue;\n\n if (token.fieldId === 'tags' && Array.isArray(token.value)) {\n if (token.value.length === 0) {\n // Empty sentinel — keeps the pill visible after Reset.\n params.append(param, '');\n } else {\n for (const value of token.value) {\n params.append(param, value);\n }\n }\n continue;\n }\n\n if (typeof token.value === 'string') {\n // Persist empty / 'Any' values too so neutralized-but-still-visible pills\n // survive URL round-trips. buildTraceListFilters skips these on the API\n // query side so neutrals never reach the backend.\n params.set(param, token.value.trim());\n }\n }\n}\n\nexport function buildTraceListFilters({\n rootEntityType,\n status,\n dateFrom,\n dateTo,\n tokens,\n}: {\n rootEntityType?: string;\n status?: TraceStatusFilter;\n dateFrom?: Date;\n dateTo?: Date;\n tokens: PropertyFilterToken[];\n}): ListTracesArgs['filters'] {\n const filters: NonNullable<ListTracesArgs['filters']> = {};\n\n if (rootEntityType) {\n filters.entityType = rootEntityType as NonNullable<ListTracesArgs['filters']>['entityType'];\n }\n\n if (status) {\n filters.status = status as NonNullable<ListTracesArgs['filters']>['status'];\n }\n\n if (dateFrom) {\n filters.startedAt = { start: dateFrom };\n }\n\n if (dateTo) {\n filters.endedAt = { end: dateTo };\n }\n\n for (const token of tokens) {\n if (token.fieldId === 'tags') {\n if (Array.isArray(token.value) && token.value.length > 0) {\n filters.tags = token.value;\n } else if (typeof token.value === 'string' && token.value.trim()) {\n // pick-multi tags: single-string token → wrap for the server's array schema.\n filters.tags = [token.value.trim()];\n }\n continue;\n }\n\n if (typeof token.value !== 'string') continue;\n // Skip empty-string tokens (unfilled pending filters) and 'Any'\n // (pick-multi single-select neutral state) so neutrals never reach the\n // backend.\n if (!token.value.trim()) continue;\n if (token.value === 'Any') continue;\n\n switch (token.fieldId) {\n case 'entityId':\n filters.entityId = token.value;\n break;\n case 'entityName':\n filters.entityName = token.value;\n break;\n case 'traceId':\n filters.traceId = token.value;\n break;\n case 'runId':\n filters.runId = token.value;\n break;\n case 'threadId':\n filters.threadId = token.value;\n break;\n case 'sessionId':\n filters.sessionId = token.value;\n break;\n case 'requestId':\n filters.requestId = token.value;\n break;\n case 'resourceId':\n filters.resourceId = token.value;\n break;\n case 'userId':\n filters.userId = token.value;\n break;\n case 'organizationId':\n filters.organizationId = token.value;\n break;\n case 'serviceName':\n filters.serviceName = token.value;\n break;\n case 'environment':\n filters.environment = token.value;\n break;\n case 'experimentId':\n filters.experimentId = token.value;\n break;\n default:\n break;\n }\n }\n\n return filters;\n}\n\n/**\n * \"Clear\" semantics: keep all filter pills but neutralize each value.\n * '' for text fields, 'Any' for single-select pick-multi, [] for multi-select pick-multi.\n * Date range is intentionally NOT touched here — that's a separate concern.\n */\nexport function neutralizeFilterTokens(\n filterFields: PropertyFilterField[],\n filterTokens: PropertyFilterToken[],\n): PropertyFilterToken[] {\n return filterTokens.map(token => {\n const field = filterFields.find(f => f.id === token.fieldId);\n if (!field) return token;\n if (field.kind === 'text') return { fieldId: token.fieldId, value: '' };\n if (field.kind === 'pick-multi') {\n if (field.omitAnyOption) return token;\n return field.multi ? { fieldId: token.fieldId, value: [] } : { fieldId: token.fieldId, value: 'Any' };\n }\n return token;\n });\n}\n","import type { EntityType } from '@mastra/core/observability';\nimport {\n LOGS_DATE_FROM_PARAM,\n LOGS_DATE_PRESET_PARAM,\n LOGS_DATE_TO_PARAM,\n LOGS_PROPERTY_FILTER_PARAM_BY_FIELD,\n LOGS_ROOT_ENTITY_TYPE_PARAM,\n} from '../logs/log-filters';\nimport type { LogsDatePreset } from '../logs/log-filters';\nimport {\n TRACE_DATE_FROM_PARAM,\n TRACE_DATE_PRESET_PARAM,\n TRACE_DATE_TO_PARAM,\n TRACE_LIST_MODE_PARAM,\n TRACE_PROPERTY_FILTER_PARAM_BY_FIELD,\n TRACE_ROOT_ENTITY_TYPE_PARAM,\n TRACE_STATUS_PARAM,\n} from '../traces/trace-filters';\nimport type { TraceDatePreset } from '../traces/types';\nimport type { DatePreset, DateRange } from './hooks/use-metrics';\nimport type { MetricsDimensionalFilter } from './metrics-filters';\n\n/** Map the metrics date preset (`24h`, `3d`, …) to the equivalent traces /\n * logs preset (`last-24h`, `last-3d`, …). `'custom'` is passed through and\n * explicit from/to dates are serialized separately. Returns `undefined` for\n * presets we can't translate — in that case we omit the date preset and rely\n * on concrete `from`/`to` timestamps. */\nfunction mapPreset(preset: DatePreset): TraceDatePreset | LogsDatePreset | undefined {\n switch (preset) {\n case '24h':\n return 'last-24h';\n case '3d':\n return 'last-3d';\n case '7d':\n return 'last-7d';\n case '14d':\n return 'last-14d';\n case '30d':\n return 'last-30d';\n case 'custom':\n return 'custom';\n default:\n return undefined;\n }\n}\n\n/** Narrow time window for a single chart node. Callers pass concrete start/end\n * Dates (typically bucket boundaries); these bypass the preset. */\nexport type DrilldownWindow = {\n from: Date;\n to: Date;\n};\n\n/** Narrow a raw timestamp into the time-series bucket window that surrounds\n * it. For a chart with `interval = 1h`, clicking a node at 14:37Z drills into\n * 14:00Z → 15:00Z. For `1d`, the corresponding UTC day. */\nexport function narrowWindowToBucket(tsMs: number, interval: '1h' | '1d'): DrilldownWindow {\n if (interval === '1h') {\n const from = new Date(tsMs);\n from.setUTCMinutes(0, 0, 0);\n const to = new Date(from.getTime() + 60 * 60 * 1000);\n return { from, to };\n }\n const from = new Date(tsMs);\n from.setUTCHours(0, 0, 0, 0);\n const to = new Date(from.getTime() + 24 * 60 * 60 * 1000);\n return { from, to };\n}\n\n/** Fields a card may use to scope the drilldown. Only the pieces the caller\n * knows are attached; everything else falls through to the current dashboard\n * filters. `status` is only valid for traces. */\nexport type DrilldownScope = {\n rootEntityType?: EntityType;\n entityName?: string;\n threadId?: string;\n resourceId?: string;\n model?: string;\n provider?: string;\n /** Trace-only. Valid for drill-downs from \"errors\" segments. */\n status?: 'running' | 'success' | 'error';\n /** Overrides date preset with explicit window bounds. */\n window?: DrilldownWindow;\n};\n\ntype BuildArgs = {\n /** Current metrics dashboard preset. */\n preset: DatePreset;\n /** Current metrics dashboard custom range (only honoured when preset === 'custom'). */\n customRange?: DateRange;\n /** Dashboard-level dimensional filters (environment, serviceName, tags, etc.). */\n dashboardFilter: MetricsDimensionalFilter;\n /** Per-card scoping applied on top of dashboard filters. */\n scope: DrilldownScope;\n /** Override the Traces page base path. Defaults to `/observability` (mastra Studio). */\n tracesBasePath?: string;\n /** Override the Logs page base path. Defaults to `/logs` (mastra Studio). */\n logsBasePath?: string;\n};\n\nfunction applyDate(\n params: URLSearchParams,\n presetKey: string,\n fromKey: string,\n toKey: string,\n preset: DatePreset,\n customRange: DateRange | undefined,\n window: DrilldownWindow | undefined,\n): void {\n // A concrete window always wins — it's a precise node-level drilldown.\n if (window) {\n params.set(presetKey, 'custom');\n params.set(fromKey, window.from.toISOString());\n params.set(toKey, window.to.toISOString());\n return;\n }\n if (preset === 'custom') {\n params.set(presetKey, 'custom');\n if (customRange?.from) params.set(fromKey, customRange.from.toISOString());\n if (customRange?.to) params.set(toKey, customRange.to.toISOString());\n return;\n }\n const mapped = mapPreset(preset);\n if (mapped) params.set(presetKey, mapped);\n}\n\nfunction setIfDefined(params: URLSearchParams, key: string, value: string | undefined | null): void {\n if (typeof value === 'string' && value.length > 0) {\n params.set(key, value);\n }\n}\n\nfunction appendArray(params: URLSearchParams, key: string, values: string[] | undefined): void {\n if (!Array.isArray(values) || values.length === 0) return;\n for (const v of values) if (v) params.append(key, v);\n}\n\n/** Build a relative URL to the Traces page pre-filtered by the dashboard\n * filters + per-card scope. */\nexport function buildTracesDrilldownUrl({\n preset,\n customRange,\n dashboardFilter,\n scope,\n tracesBasePath = '/observability',\n}: BuildArgs): string {\n const params = new URLSearchParams();\n params.set(TRACE_LIST_MODE_PARAM, 'branches');\n\n applyDate(\n params,\n TRACE_DATE_PRESET_PARAM,\n TRACE_DATE_FROM_PARAM,\n TRACE_DATE_TO_PARAM,\n preset,\n customRange,\n scope.window,\n );\n\n // Scope overrides dashboard filter when both are present.\n const rootEntityType = scope.rootEntityType ?? dashboardFilter.rootEntityType;\n if (rootEntityType) params.set(TRACE_ROOT_ENTITY_TYPE_PARAM, rootEntityType);\n\n if (scope.status) params.set(TRACE_STATUS_PARAM, scope.status);\n\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.entityName, scope.entityName ?? dashboardFilter.entityName);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.threadId, scope.threadId ?? dashboardFilter.threadId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.resourceId, scope.resourceId ?? dashboardFilter.resourceId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.entityId, dashboardFilter.entityId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.runId, dashboardFilter.runId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.sessionId, dashboardFilter.sessionId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.requestId, dashboardFilter.requestId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.userId, dashboardFilter.userId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.organizationId, dashboardFilter.organizationId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.experimentId, dashboardFilter.experimentId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.serviceName, dashboardFilter.serviceName);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.environment, dashboardFilter.environment);\n appendArray(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.tags, dashboardFilter.tags);\n\n const query = params.toString();\n return query ? `${tracesBasePath}?${query}` : tracesBasePath;\n}\n\n/** Build a relative URL to the Logs page pre-filtered by the dashboard filters\n * + per-card scope. Useful for \"View errors in logs\" affordances. */\nexport function buildLogsDrilldownUrl({\n preset,\n customRange,\n dashboardFilter,\n scope,\n logsBasePath = '/logs',\n}: BuildArgs): string {\n const params = new URLSearchParams();\n\n applyDate(\n params,\n LOGS_DATE_PRESET_PARAM,\n LOGS_DATE_FROM_PARAM,\n LOGS_DATE_TO_PARAM,\n preset,\n customRange,\n scope.window,\n );\n\n const rootEntityType = scope.rootEntityType ?? dashboardFilter.rootEntityType;\n if (rootEntityType) params.set(LOGS_ROOT_ENTITY_TYPE_PARAM, rootEntityType);\n\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.entityName, scope.entityName ?? dashboardFilter.entityName);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.threadId, scope.threadId ?? dashboardFilter.threadId);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.resourceId, scope.resourceId ?? dashboardFilter.resourceId);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.runId, dashboardFilter.runId);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.sessionId, dashboardFilter.sessionId);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.requestId, dashboardFilter.requestId);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.userId, dashboardFilter.userId);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.organizationId, dashboardFilter.organizationId);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.experimentId, dashboardFilter.experimentId);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.serviceName, dashboardFilter.serviceName);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.environment, dashboardFilter.environment);\n appendArray(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.tags, dashboardFilter.tags);\n\n // Error drill-ins always target log level=error. Status filter isn't valid\n // for logs, so we translate `status: 'error'` to `filterLevel=error`.\n if (scope.status === 'error') {\n params.append(LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.level, 'error');\n }\n\n const query = params.toString();\n return query ? `${logsBasePath}?${query}` : logsBasePath;\n}\n","import { useCallback } from 'react';\n\nimport { buildLogsDrilldownUrl, buildTracesDrilldownUrl, narrowWindowToBucket } from '../drilldown';\nimport type { DrilldownScope, DrilldownWindow } from '../drilldown';\nimport { useMetrics } from './use-metrics';\n\n/** Consolidates the current metrics dashboard's date + dimensional context so\n * each card only has to supply its own scope (`{ rootEntityType, entityName,\n * ... }`) to produce a full drilldown URL. */\nexport function useDrilldown() {\n const { datePreset, customRange, dimensionalFilter, tracesBasePath, logsBasePath } = useMetrics();\n\n const getTracesHref = useCallback(\n (scope: DrilldownScope = {}): string =>\n buildTracesDrilldownUrl({\n preset: datePreset,\n customRange,\n dashboardFilter: dimensionalFilter,\n scope,\n tracesBasePath,\n }),\n [datePreset, customRange, dimensionalFilter, tracesBasePath],\n );\n\n const getLogsHref = useCallback(\n (scope: DrilldownScope = {}): string =>\n buildLogsDrilldownUrl({\n preset: datePreset,\n customRange,\n dashboardFilter: dimensionalFilter,\n scope,\n logsBasePath,\n }),\n [datePreset, customRange, dimensionalFilter, logsBasePath],\n );\n\n const getBucketTracesHref = useCallback(\n (scope: Omit<DrilldownScope, 'window'>, tsMs: number, interval: '1h' | '1d'): string => {\n const window: DrilldownWindow = narrowWindowToBucket(tsMs, interval);\n return buildTracesDrilldownUrl({\n preset: datePreset,\n customRange,\n dashboardFilter: dimensionalFilter,\n scope: { ...scope, window },\n tracesBasePath,\n });\n },\n [datePreset, customRange, dimensionalFilter, tracesBasePath],\n );\n\n return { getTracesHref, getLogsHref, getBucketTracesHref };\n}\n","import type { UISpan } from '../types';\n\n/** Minimal span fields required for building the hierarchical timeline tree. */\ntype TimelineSpan = {\n spanId: string;\n name: string;\n spanType: string;\n startedAt: Date | string;\n endedAt?: Date | string | null;\n parentSpanId?: string | null;\n};\n\n/**\n * When `anchorSpanId` is provided, that span is treated as the displayed root\n * regardless of its `parentSpanId` -- the branch-subtree case from `getBranch`,\n * where the anchor has a real parent that's outside the returned set. Without\n * it, the displayed roots are the spans with no parent (the trace case).\n */\nexport const formatHierarchicalSpans = (spans: TimelineSpan[], anchorSpanId?: string): UISpan[] => {\n if (!spans || spans.length === 0) {\n return [];\n }\n\n const overallEndDate = spans.reduce(\n (latest, span) => {\n const endDate = span?.endedAt ? new Date(span.endedAt) : undefined;\n return endDate && (!latest || endDate > latest) ? endDate : latest;\n },\n null as Date | null,\n );\n\n const spanMap = new Map<string, UISpan>();\n const rootSpans: UISpan[] = [];\n\n spans.forEach(spanRecord => {\n const startDate = new Date(spanRecord.startedAt);\n const endDate = spanRecord.endedAt ? new Date(spanRecord.endedAt) : undefined;\n\n const uiSpan: UISpan = {\n id: spanRecord.spanId,\n name: spanRecord.name,\n type: spanRecord.spanType,\n latency: endDate ? endDate.getTime() - startDate.getTime() : 0,\n startTime: startDate.toISOString(),\n endTime: endDate ? endDate.toISOString() : undefined,\n spans: [],\n parentSpanId: spanRecord.parentSpanId,\n };\n\n spanMap.set(spanRecord.spanId, uiSpan);\n });\n\n const isAnchor = (spanRecord: TimelineSpan) =>\n anchorSpanId ? spanRecord.spanId === anchorSpanId : spanRecord?.parentSpanId == null;\n\n spans.forEach(spanRecord => {\n const uiSpan = spanMap.get(spanRecord.spanId)!;\n\n if (isAnchor(spanRecord)) {\n if (overallEndDate && uiSpan.endTime && overallEndDate > new Date(uiSpan.endTime)) {\n uiSpan.endTime = overallEndDate.toISOString();\n const overallEndTime = new Date(overallEndDate).getTime();\n const spanStartTime = new Date(uiSpan.startTime).getTime();\n uiSpan.latency = overallEndTime - spanStartTime;\n }\n rootSpans.push(uiSpan);\n } else {\n const parent = spanRecord.parentSpanId ? spanMap.get(spanRecord.parentSpanId) : undefined;\n if (parent) {\n parent.spans!.push(uiSpan);\n } else {\n // Orphan: either the parent isn't in the supplied set (branch subtree boundary), or\n // the span has no parent yet wasn't picked as the anchor (rare when `anchorSpanId`\n // is specified). Surface it at the displayed root rather than dropping it.\n rootSpans.push(uiSpan);\n }\n }\n });\n\n const sortSpansByStartTime = (spans: UISpan[]): UISpan[] => {\n return spans.sort((a, b) => new Date(a.startTime).getTime() - new Date(b.startTime).getTime());\n };\n\n const sortedRootSpans = sortSpansByStartTime(rootSpans);\n\n const sortNestedSpans = (spans: UISpan[]): void => {\n spans.forEach(span => {\n if (span.spans && span.spans.length > 0) {\n span.spans = sortSpansByStartTime(span.spans);\n sortNestedSpans(span.spans);\n }\n });\n };\n\n sortNestedSpans(sortedRootSpans);\n\n return sortedRootSpans;\n};\n","import { BrainIcon, GaugeIcon } from 'lucide-react';\nimport type { UISpanStyle } from '../types';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\nimport { FolderIcon } from '@/ds/icons/FolderIcon';\nimport { McpServerIcon } from '@/ds/icons/McpServerIcon';\nimport { MemoryIcon } from '@/ds/icons/MemoryIcon';\nimport { ToolsIcon } from '@/ds/icons/ToolsIcon';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\n\nexport const spanTypePrefixes = ['agent', 'workflow', 'model', 'mcp', 'tool', 'memory', 'workspace', 'scorer', 'other'];\n\nconst spanTypeToUiElements: Record<string, UISpanStyle> = {\n agent: {\n icon: <AgentIcon />,\n color: 'oklch(0.75 0.15 250)',\n label: 'Agent',\n typePrefix: 'agent',\n },\n workflow: {\n icon: <WorkflowIcon />,\n color: 'oklch(0.75 0.15 200)',\n label: 'Workflow',\n typePrefix: 'workflow',\n },\n model: {\n icon: <BrainIcon />,\n color: 'oklch(0.75 0.15 320)',\n label: 'Model',\n typePrefix: 'model',\n },\n mcp: {\n icon: <McpServerIcon />,\n color: 'oklch(0.75 0.15 160)',\n label: 'MCP',\n typePrefix: 'mcp',\n },\n tool: {\n icon: <ToolsIcon />,\n color: 'oklch(0.75 0.15 100)',\n label: 'Tool',\n typePrefix: 'tool',\n },\n memory: {\n icon: <MemoryIcon />,\n color: 'oklch(0.75 0.15 60)',\n label: 'Memory',\n typePrefix: 'memory',\n },\n workspace: {\n icon: <FolderIcon />,\n color: 'oklch(0.75 0.15 40)',\n label: 'Workspace',\n typePrefix: 'workspace',\n },\n scorer: {\n icon: <GaugeIcon />,\n color: 'oklch(0.75 0.15 280)',\n label: 'Scorer',\n typePrefix: 'scorer',\n },\n};\n\nconst otherSpanType: UISpanStyle = {\n color: 'oklch(0.65 0 0)',\n label: 'Other',\n typePrefix: 'other',\n};\n\nexport function getSpanTypeUi(type: string) {\n const typePrefix = type?.toLowerCase().split('_')[0];\n return spanTypeToUiElements[typePrefix] ?? otherSpanType;\n}\n","import type { InputTokenDetails, OutputTokenDetails, UsageStats } from '@mastra/core/observability';\n\ntype TokenDetailsObject = InputTokenDetails | OutputTokenDetails;\n\nexport type TokenUsageView = {\n inputValue: number;\n outputValue: number;\n total: number;\n showSplit: boolean;\n inputPct: number;\n outputPct: number;\n inputDetails: TokenDetailsObject | undefined;\n outputDetails: TokenDetailsObject | undefined;\n};\n\nfunction hasNumericDetails(details: TokenDetailsObject | undefined): details is TokenDetailsObject {\n return !!details && Object.values(details).some(v => typeof v === 'number');\n}\n\nexport function getTokenUsageView(usage: UsageStats | undefined | null): TokenUsageView | null {\n if (!usage) return null;\n\n const hasInput = typeof usage.inputTokens === 'number';\n const hasOutput = typeof usage.outputTokens === 'number';\n\n if (!hasInput && !hasOutput) return null;\n\n const inputValue = usage.inputTokens ?? 0;\n const outputValue = usage.outputTokens ?? 0;\n const total = inputValue + outputValue;\n const showSplit = total > 0;\n\n return {\n inputValue,\n outputValue,\n total,\n showSplit,\n inputPct: showSplit ? (inputValue / total) * 100 : 0,\n outputPct: showSplit ? (outputValue / total) * 100 : 0,\n inputDetails: hasInput && hasNumericDetails(usage.inputDetails) ? usage.inputDetails : undefined,\n outputDetails: hasOutput && hasNumericDetails(usage.outputDetails) ? usage.outputDetails : undefined,\n };\n}\n","import type { InputTokenDetails, OutputTokenDetails, UsageStats } from '@mastra/core/observability';\nimport { Fragment } from 'react';\nimport { getTokenUsageView } from './span-token-usage.utils';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { cn } from '@/lib/utils';\n\nexport type TokenUsage = UsageStats;\n\ntype TokenDetailsObject = InputTokenDetails | OutputTokenDetails;\n\nconst detailKeyLabels: Record<string, string> = {\n text: 'Text',\n cacheRead: 'Cache read',\n cacheWrite: 'Cache write',\n audio: 'Audio',\n image: 'Image',\n reasoning: 'Reasoning',\n};\n\ntype SpanTokenUsageProps = {\n usage: UsageStats;\n className?: string;\n};\n\nconst INPUT_COLOR = 'oklch(0.78 0.16 320)';\nconst OUTPUT_COLOR = 'oklch(0.55 0.18 320)';\n\nexport function SpanTokenUsage({ usage, className }: SpanTokenUsageProps) {\n const view = getTokenUsageView(usage);\n if (!view) return null;\n\n const { inputValue, outputValue, total, showSplit, inputPct, outputPct, inputDetails, outputDetails } = view;\n\n return (\n <div\n className={cn('border-b border-border1 mt-2 mb-8 pb-3 grid grid-cols-1 4xl:grid-cols-2 4xl:gap-12', className)}\n >\n {showSplit && (\n <div className=\"mb-2\">\n <div className=\"flex items-baseline text-neutral2 gap-3\">\n <span className=\"text-ui-md\">Tokens Used</span>\n <span className=\"text-neutral4 text-ui-md font-semibold\">{total.toLocaleString()}</span>\n <span className=\"ml-auto text-ui-sm\">\n {Math.round(inputPct)}% Input vs {Math.round(outputPct)}% Output\n </span>\n </div>\n <div className=\"p-1.5 rounded-md bg-surface4 mt-2\">\n <div className=\"relative w-full h-1.5 rounded-sm overflow-hidden\">\n <div\n className=\"absolute h-1.5 top-0 left-0\"\n style={{ width: `${inputPct}%`, backgroundColor: INPUT_COLOR }}\n />\n <div\n className=\"absolute h-1.5 top-0\"\n style={{ left: `${inputPct}%`, width: `${outputPct}%`, backgroundColor: OUTPUT_COLOR }}\n />\n </div>\n </div>\n </div>\n )}\n\n <div className=\"grid gap-6 grid-cols-2\">\n <UsageColumn label=\"Input\" color={INPUT_COLOR} value={inputValue} details={inputDetails} />\n <UsageColumn label=\"Output\" color={OUTPUT_COLOR} value={outputValue} details={outputDetails} />\n </div>\n </div>\n );\n}\n\nfunction UsageColumn({\n label,\n color,\n value,\n details,\n}: {\n label: string;\n color: string;\n value?: number;\n details?: TokenDetailsObject;\n}) {\n return (\n <div>\n <div className=\"flex items-baseline text-neutral2 gap-3 mb-2\">\n <span className=\"text-ui-md\">{label}</span>\n {typeof value === 'number' && (\n <span className=\"flex items-baseline gap-1.5\">\n <span className=\"text-neutral4 text-ui-md font-semibold\">{value.toLocaleString()}</span>\n <span className=\"size-2 rounded-full self-center\" style={{ backgroundColor: color }} />\n </span>\n )}\n </div>\n {details && <DetailsList details={details} />}\n </div>\n );\n}\n\nfunction DetailsList({ details }: { details: TokenDetailsObject }) {\n return (\n <DataKeysAndValues density=\"dense\">\n {Object.entries(details).map(([detailKey, detailValue]) => {\n if (typeof detailValue !== 'number') return null;\n return (\n <Fragment key={detailKey}>\n <DataKeysAndValues.Key>{detailKeyLabels[detailKey] || detailKey}</DataKeysAndValues.Key>\n <DataKeysAndValues.Value className=\"text-right\">{detailValue.toLocaleString()}</DataKeysAndValues.Value>\n </Fragment>\n );\n })}\n </DataKeysAndValues>\n );\n}\n","import {\n ChevronDownIcon,\n ChevronsDownIcon,\n ChevronsDownUpIcon,\n ChevronsUpDownIcon,\n ChevronsUpIcon,\n ChevronUpIcon,\n FoldVerticalIcon,\n UnfoldVerticalIcon,\n} from 'lucide-react';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { cn } from '@/lib/utils';\n\ntype TimelineExpandColProps = {\n isSelected?: boolean;\n isFaded?: boolean;\n isExpanded?: boolean;\n isRootSpan?: boolean;\n toggleChildren?: () => void;\n expandAllDescendants?: () => void;\n collapseAllDescendants?: () => void;\n collapseAll?: () => void;\n totalDescendants?: number;\n allDescendantsExpanded?: boolean;\n numOfChildren?: number;\n toggleSiblings?: () => void;\n siblingsAllExpanded?: boolean;\n siblingsWithChildrenCount?: number;\n};\n\nexport function TimelineExpandCol({\n isSelected,\n isFaded,\n isExpanded,\n isRootSpan,\n toggleChildren,\n expandAllDescendants,\n collapseAllDescendants,\n collapseAll,\n totalDescendants = 0,\n allDescendantsExpanded,\n numOfChildren = 0,\n toggleSiblings,\n siblingsAllExpanded,\n siblingsWithChildrenCount = 0,\n}: TimelineExpandColProps) {\n const toggleTooltip = isExpanded ? `Collapse children (${numOfChildren})` : `Expand children (${numOfChildren})`;\n\n const showToggleChildren = !isRootSpan && !!numOfChildren && numOfChildren > 0;\n const showDescendantsButton = !isRootSpan && showToggleChildren && totalDescendants > numOfChildren;\n const showToggleSiblings = !isRootSpan && siblingsWithChildrenCount >= 2;\n const showRootToggleAll = !!isRootSpan && !!numOfChildren && numOfChildren > 0;\n const fullyExpanded = !!isExpanded && !!allDescendantsExpanded;\n\n return (\n <div\n className={cn('flex items-center justify-end h-full px-1.5', {\n 'opacity-30 [&:hover]:opacity-60': isFaded,\n 'bg-surface4': isSelected,\n })}\n >\n <div className=\"grid grid-cols-[1.625rem_1.625rem_1.625rem] gap-1\">\n <div>\n {showToggleChildren && (\n <ExpandButton onClick={() => toggleChildren?.()} tooltip={toggleTooltip}>\n {isExpanded ? <ChevronUpIcon /> : <ChevronDownIcon />}\n </ExpandButton>\n )}\n </div>\n\n <div>\n {showDescendantsButton && (\n <ExpandButton\n onClick={() => (allDescendantsExpanded ? collapseAllDescendants?.() : expandAllDescendants?.())}\n tooltip={\n allDescendantsExpanded\n ? `Collapse all descendants (${totalDescendants})`\n : `Expand all descendants (${totalDescendants})`\n }\n >\n {allDescendantsExpanded ? <ChevronsUpIcon /> : <ChevronsDownIcon />}\n </ExpandButton>\n )}\n </div>\n\n <div>\n {showToggleSiblings && (\n <ExpandButton\n onClick={() => toggleSiblings?.()}\n tooltip={siblingsAllExpanded ? 'Collapse at this level' : 'Expand at this level'}\n >\n {siblingsAllExpanded ? <FoldVerticalIcon /> : <UnfoldVerticalIcon />}\n </ExpandButton>\n )}\n\n {showRootToggleAll && (\n <ExpandButton\n onClick={() => (fullyExpanded ? collapseAll?.() : expandAllDescendants?.())}\n tooltip={fullyExpanded ? 'Collapse all' : 'Expand all'}\n >\n {fullyExpanded ? <ChevronsDownUpIcon /> : <ChevronsUpDownIcon />}\n </ExpandButton>\n )}\n </div>\n </div>\n </div>\n );\n}\n\ntype ExpandButtonProps = {\n onClick?: () => void;\n children?: React.ReactNode;\n className?: string;\n tooltip?: string;\n};\n\nfunction ExpandButton({ onClick, children, className, tooltip }: ExpandButtonProps) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <button onClick={onClick} className={cn('h-full shrink-0 cursor-pointer', className)} aria-label={tooltip}>\n <div\n className={cn(\n 'flex items-center gap-[0.1rem] rounded-md transition-all p-1',\n 'hover:bg-surface5',\n '[&>svg]:shrink-0 [&>svg]:opacity-50 [&:hover>svg]:opacity-100 [&>svg]:w-4 [&>svg]:h-4 [&>svg]:transition-all',\n )}\n >\n {children}\n </div>\n </button>\n </TooltipTrigger>\n {tooltip && <TooltipContent>{tooltip}</TooltipContent>}\n </Tooltip>\n );\n}\n","import { cn } from '@/lib/utils';\n\ntype TimelineStructureSignProps = {\n isLastChild?: boolean;\n};\n\nexport function TimelineStructureSign({ isLastChild }: TimelineStructureSignProps) {\n return (\n <div\n className={cn(\n 'w-[0.5rem] h-[1.8rem] relative opacity-100 shrink-0',\n 'after:content-[\"\"] after:absolute after:left-[-1px] after:top-0 after:bottom-0 after:w-[0px] after:border-l-[1px] after:border-neutral3 after:border-dashed ',\n 'before:content-[\"\"] before:absolute before:left-0 before:top-[50%] before:w-full before:h-[0px] before:border-b-[1px] before:border-neutral3 before:border-dashed',\n {\n 'after:bottom-[50%]': isLastChild,\n },\n )}\n />\n );\n}\n","import type { UISpan, UISpanStyle } from '../types';\nimport { TimelineStructureSign } from './timeline-structure-sign';\nimport { cn } from '@/lib/utils';\n\ntype TimelineNameColProps = {\n span: UISpan;\n spanUI?: UISpanStyle | null;\n isFaded?: boolean;\n depth?: number;\n onSpanClick?: (id: string) => void;\n selectedSpanId?: string;\n isLastChild?: boolean;\n hasChildren?: boolean;\n isRootSpan?: boolean;\n isExpanded?: boolean;\n};\n\nexport function TimelineNameCol({\n span,\n spanUI,\n isFaded,\n depth = 0,\n onSpanClick,\n selectedSpanId,\n isLastChild,\n hasChildren: _hasChildren,\n isRootSpan,\n isExpanded: _isExpanded,\n}: TimelineNameColProps) {\n return (\n <div\n data-span-id={span.id}\n aria-label={`View details for span ${span.name}`}\n className={cn('rounded-md flex opacity-80 min-h-8 items-center rounded-l-lg', {\n 'opacity-30 [&:hover]:opacity-60': isFaded,\n 'bg-surface4': selectedSpanId === span.id,\n })}\n style={{ paddingLeft: `${depth * 1}rem` }}\n >\n {!isRootSpan && <TimelineStructureSign isLastChild={isLastChild} />}\n\n <button\n onClick={() => onSpanClick?.(span.id)}\n className={cn(\n 'text-ui-smd flex items-center text-left gap-1.5 text-neutral6 w-full min-w-0 rounded-md h-full px-2 py-1 transition-colors',\n '[&>svg]:transition-all [&>svg]:shrink-0 [&>svg]:opacity-0 [&>svg]:w-[1em] [&>svg]:h-[1em] [&>svg]:ml-auto',\n 'hover:bg-surface4 [&:hover>svg]:opacity-60',\n 'focus:outline-none focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-accent1',\n )}\n >\n {spanUI?.color && (\n <span\n aria-hidden\n title={spanUI.label}\n className=\"inline-block w-2 h-2 shrink-0 rounded-full\"\n style={{ backgroundColor: spanUI.color }}\n />\n )}\n <span className=\"min-w-0 truncate\">{span.name}</span>\n </button>\n </div>\n );\n}\n","import { format } from 'date-fns/format';\nimport type { UISpan } from '../types';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from '@/ds/components/HoverCard';\nimport { cn } from '@/lib/utils';\n\ntype TimelineTimingColProps = {\n span: UISpan;\n selectedSpanId?: string;\n isFaded?: boolean;\n overallLatency?: number;\n overallStartTime?: string;\n color?: string;\n chartWidth?: 'wide' | 'default';\n};\n\nexport function TimelineTimingCol({\n span,\n selectedSpanId,\n isFaded,\n overallLatency,\n overallStartTime,\n color,\n chartWidth = 'default',\n}: TimelineTimingColProps) {\n const percentageSpanLatency = overallLatency ? Math.ceil((span.latency / overallLatency) * 100) : 0;\n const overallStartTimeDate = overallStartTime ? new Date(overallStartTime) : null;\n const spanStartTimeDate = span.startTime ? new Date(span.startTime) : null;\n const spanStartTimeShift =\n spanStartTimeDate && overallStartTimeDate ? spanStartTimeDate.getTime() - overallStartTimeDate.getTime() : 0;\n\n const percentageSpanStartTime = overallLatency && Math.floor((spanStartTimeShift / overallLatency) * 100);\n\n return (\n <HoverCard>\n <HoverCardTrigger\n className={cn(\n 'h-8 p-1 grid grid-cols-[1fr_auto] gap-2 items-center cursor-help pr-2 rounded-r-md',\n chartWidth === 'wide' ? 'min-w-72' : 'min-w-32',\n '[&:hover>div]:bg-surface5',\n {\n 'opacity-30 [&:hover]:opacity-60': isFaded,\n 'bg-surface4': selectedSpanId === span.id,\n },\n )}\n >\n <div className={cn('w-full p-1.5 rounded-md bg-surface4 transition-colors duration-1000')}>\n <div className=\"relative w-full h-1.5 rounded-sm overflow-hidden\">\n <div\n className={cn('bg-neutral1 absolute rounded-sm h-1.5 top-0')}\n style={{\n width: percentageSpanLatency ? `${percentageSpanLatency}%` : '2px',\n left: `${percentageSpanStartTime || 0}%`,\n backgroundColor: color,\n }}\n ></div>\n </div>\n </div>\n\n <div className={cn('flex justify-end text-neutral3 text-ui-xs')}>{(span.latency / 1000).toFixed(3)}&nbsp;s</div>\n </HoverCardTrigger>\n <HoverCardContent className=\"bg-surface4 pr-6\">\n <div className={cn('text-ui-sm flex items-center gap-2 mb-2 mt-1')}>Span Timing</div>\n <DataKeysAndValues>\n <DataKeysAndValues.Key>Latency</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{span.latency} ms</DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Started at</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>\n {span.startTime ? format(new Date(span.startTime), 'hh:mm:ss:SSS a') : '-'}\n </DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Ended at</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>\n {span.endTime ? format(new Date(span.endTime), 'hh:mm:ss:SSS a') : '-'}\n </DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Start Shift</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{spanStartTimeShift}ms</DataKeysAndValues.Value>\n </DataKeysAndValues>\n </HoverCardContent>\n </HoverCard>\n );\n}\n","import { format } from 'date-fns';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\n\nenum TraceStatus {\n SUCCESS = 'success',\n ERROR = 'error',\n RUNNING = 'running',\n}\n\nfunction computeTraceStatus(span: { error?: unknown; endedAt?: Date | string | null }): TraceStatus {\n if (span.error != null) return TraceStatus.ERROR;\n if (span.endedAt == null) return TraceStatus.RUNNING;\n return TraceStatus.SUCCESS;\n}\n\n/** Lightweight root-span fields available from `useTraceLightSpans`. */\ntype RootSpanSummary = {\n entityId?: string | null;\n entityName?: string | null;\n entityType?: string | null;\n startedAt: Date | string;\n endedAt?: Date | string | null;\n error?: unknown;\n};\n\nexport interface TraceKeysAndValuesProps {\n rootSpan: RootSpanSummary;\n numOfCol?: 1 | 2 | 3;\n className?: string;\n}\n\nexport function TraceKeysAndValues({ rootSpan, numOfCol = 2, className }: TraceKeysAndValuesProps) {\n const startedAt = rootSpan.startedAt ? new Date(rootSpan.startedAt) : null;\n const endedAt = rootSpan.endedAt ? new Date(rootSpan.endedAt) : null;\n const status = computeTraceStatus(rootSpan);\n const statusLabel = status === TraceStatus.ERROR ? 'ERROR' : status === TraceStatus.RUNNING ? 'RUNNING' : 'SUCCESS';\n\n return (\n <DataKeysAndValues numOfCol={numOfCol} className={className}>\n {rootSpan.entityId && (\n <>\n <DataKeysAndValues.Key>Entity Id</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{rootSpan.entityName || rootSpan.entityId}</DataKeysAndValues.Value>\n </>\n )}\n {rootSpan.entityType && (\n <>\n <DataKeysAndValues.Key>Entity Type</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{rootSpan.entityType}</DataKeysAndValues.Value>\n </>\n )}\n <DataKeysAndValues.Key>Status</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{statusLabel}</DataKeysAndValues.Value>\n {startedAt && endedAt && (\n <>\n <DataKeysAndValues.Key>Duration</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>\n {`${(endedAt.getTime() - startedAt.getTime()).toLocaleString()}ms`}\n </DataKeysAndValues.Value>\n </>\n )}\n {startedAt && (\n <>\n <DataKeysAndValues.Key>Started at</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{format(startedAt, 'MMM dd, h:mm:ss.SSS aaa')}</DataKeysAndValues.Value>\n </>\n )}\n {endedAt && (\n <>\n <DataKeysAndValues.Key>Ended at</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{format(endedAt, 'MMM dd, h:mm:ss.SSS aaa')}</DataKeysAndValues.Value>\n </>\n )}\n </DataKeysAndValues>\n );\n}\n","import type { UISpan } from '../types';\n\nexport function getSpanDescendantIds(span: UISpan): string[] {\n if (!span.spans || span.spans.length === 0) {\n return [];\n }\n\n const descendantIds: string[] = [];\n\n span.spans.forEach(childSpan => {\n descendantIds.push(childSpan.id);\n descendantIds.push(...getSpanDescendantIds(childSpan));\n });\n\n return descendantIds;\n}\n\nexport function getAllSpanIds(spans: UISpan[]): string[] {\n const ids: string[] = [];\n for (const span of spans) {\n ids.push(span.id);\n ids.push(...getSpanDescendantIds(span));\n }\n return ids;\n}\n","import { useEffect } from 'react';\nimport { getSpanDescendantIds } from '../hooks/get-all-span-ids';\nimport type { UISpan } from '../types';\nimport { getSpanTypeUi } from './shared';\nimport { TimelineExpandCol } from './timeline-expand-col';\nimport { TimelineNameCol } from './timeline-name-col';\nimport { TimelineTimingCol } from './timeline-timing-col';\n\ntype TraceTimelineSpanProps = {\n span: UISpan;\n siblings?: UISpan[];\n depth?: number;\n onSpanClick?: (id: string) => void;\n selectedSpanId?: string;\n isLastChild?: boolean;\n overallLatency?: number;\n overallStartTime?: string;\n fadedTypes?: string[];\n searchPhrase?: string;\n featuredSpanIds?: string[];\n expandedSpanIds?: string[];\n setExpandedSpanIds?: React.Dispatch<React.SetStateAction<string[]>>;\n chartWidth?: 'wide' | 'default';\n};\n\nexport function TraceTimelineSpan({\n span,\n siblings,\n depth = 0,\n onSpanClick,\n selectedSpanId,\n isLastChild,\n overallLatency,\n overallStartTime,\n fadedTypes,\n searchPhrase,\n featuredSpanIds,\n expandedSpanIds,\n setExpandedSpanIds,\n chartWidth,\n}: TraceTimelineSpanProps) {\n const hasChildren = span.spans && span.spans.length > 0;\n const numOfChildren = span.spans ? span.spans.length : 0;\n const allDescendantIds = getSpanDescendantIds(span);\n const totalDescendants = allDescendantIds.length;\n const isRootSpan = depth === 0;\n const spanUI = getSpanTypeUi(span?.type);\n const isExpanded = expandedSpanIds ? expandedSpanIds.includes(span.id) : false;\n const isFadedBySearch = featuredSpanIds && featuredSpanIds.length > 0 ? !featuredSpanIds.includes(span.id) : false;\n const isFadedByType = fadedTypes && fadedTypes.length > 0 ? fadedTypes.includes(spanUI?.typePrefix || '') : false;\n const isFaded = isFadedByType || isFadedBySearch;\n\n useEffect(() => {\n if (!featuredSpanIds || allDescendantIds.length === 0) return;\n if (isExpanded) return;\n const hasFeaturedDescendant = allDescendantIds.some(id => featuredSpanIds.includes(id));\n if (hasFeaturedDescendant && setExpandedSpanIds) {\n setExpandedSpanIds(prev => (!prev || prev.includes(span.id) ? (prev ?? [span.id]) : [...prev, span.id]));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [featuredSpanIds, allDescendantIds]);\n\n const toggleChildren = () => {\n if (!setExpandedSpanIds) return;\n setExpandedSpanIds(prev => {\n if (!prev) return prev;\n return isExpanded ? prev.filter(id => id !== span.id) : [...prev, span.id];\n });\n };\n\n const expandAllDescendants = () => {\n if (!setExpandedSpanIds) return;\n setExpandedSpanIds(prev => {\n if (!prev) return prev;\n return Array.from(new Set([...prev, span.id, ...allDescendantIds]));\n });\n };\n\n const collapseAllDescendants = () => {\n if (!setExpandedSpanIds) return;\n setExpandedSpanIds(prev => {\n if (!prev) return prev;\n const idsToRemove = new Set(allDescendantIds);\n return prev.filter(id => !idsToRemove.has(id));\n });\n };\n\n const collapseAll = () => {\n if (!setExpandedSpanIds) return;\n setExpandedSpanIds(prev => {\n if (!prev) return prev;\n const idsToRemove = new Set([span.id, ...allDescendantIds]);\n return prev.filter(id => !idsToRemove.has(id));\n });\n };\n\n const allDescendantsExpanded = allDescendantIds.every(id => expandedSpanIds?.includes(id));\n\n const siblingsWithChildren = (siblings ?? []).filter(s => s.spans && s.spans.length > 0);\n const siblingsWithChildrenCount = siblingsWithChildren.length;\n const siblingsAllExpanded =\n siblingsWithChildrenCount > 0 && siblingsWithChildren.every(s => expandedSpanIds?.includes(s.id));\n\n const toggleSiblings = () => {\n if (!setExpandedSpanIds || siblingsWithChildrenCount === 0) return;\n setExpandedSpanIds(prev => {\n if (!prev) return prev;\n if (siblingsAllExpanded) {\n const idsToRemove = new Set<string>();\n siblingsWithChildren.forEach(s => {\n idsToRemove.add(s.id);\n getSpanDescendantIds(s).forEach(id => idsToRemove.add(id));\n });\n return prev.filter(id => !idsToRemove.has(id));\n }\n return Array.from(new Set([...prev, ...siblingsWithChildren.map(s => s.id)]));\n });\n };\n\n return (\n <>\n <TimelineNameCol\n span={span}\n spanUI={spanUI}\n isFaded={isFaded}\n depth={depth}\n onSpanClick={onSpanClick}\n selectedSpanId={selectedSpanId}\n isLastChild={isLastChild}\n hasChildren={hasChildren}\n isRootSpan={isRootSpan}\n isExpanded={isExpanded}\n />\n\n <TimelineExpandCol\n isSelected={selectedSpanId === span.id}\n isFaded={isFaded}\n isExpanded={isExpanded}\n isRootSpan={isRootSpan}\n toggleChildren={toggleChildren}\n expandAllDescendants={expandAllDescendants}\n collapseAllDescendants={collapseAllDescendants}\n collapseAll={collapseAll}\n totalDescendants={totalDescendants}\n allDescendantsExpanded={allDescendantsExpanded}\n numOfChildren={numOfChildren}\n toggleSiblings={toggleSiblings}\n siblingsAllExpanded={siblingsAllExpanded}\n siblingsWithChildrenCount={siblingsWithChildrenCount}\n />\n\n <TimelineTimingCol\n span={span}\n selectedSpanId={selectedSpanId}\n isFaded={isFaded}\n overallLatency={overallLatency}\n overallStartTime={overallStartTime}\n color={spanUI?.color}\n chartWidth={chartWidth}\n />\n\n {hasChildren &&\n isExpanded &&\n span.spans?.map((childSpan: UISpan, idx: number, array: UISpan[]) => {\n const isLast = idx === array.length - 1;\n\n return (\n <TraceTimelineSpan\n key={childSpan.id}\n span={childSpan}\n siblings={array}\n depth={depth + 1}\n onSpanClick={onSpanClick}\n selectedSpanId={selectedSpanId}\n isLastChild={isLast}\n overallLatency={overallLatency}\n overallStartTime={overallStartTime}\n fadedTypes={fadedTypes}\n searchPhrase={searchPhrase}\n expandedSpanIds={expandedSpanIds}\n setExpandedSpanIds={setExpandedSpanIds}\n featuredSpanIds={featuredSpanIds}\n chartWidth={chartWidth}\n />\n );\n })}\n </>\n );\n}\n","import type { Dispatch, SetStateAction } from 'react';\nimport { useMemo } from 'react';\nimport type { UISpan } from '../types';\nimport { spanTypePrefixes, getSpanTypeUi } from './shared';\nimport { TraceTimelineSpan } from './trace-timeline-span';\nimport { Spinner } from '@/ds/components/Spinner';\nimport { cn } from '@/lib/utils';\n\ntype TraceTimelineProps = {\n hierarchicalSpans: UISpan[];\n onSpanClick: (id: string) => void;\n selectedSpanId?: string;\n isLoading?: boolean;\n fadedTypes?: string[];\n expandedSpanIds?: string[];\n setExpandedSpanIds?: Dispatch<SetStateAction<string[]>>;\n featuredSpanIds?: string[];\n chartWidth?: 'wide' | 'default';\n};\n\nexport function TraceTimeline({\n hierarchicalSpans = [],\n onSpanClick,\n selectedSpanId,\n isLoading,\n fadedTypes,\n expandedSpanIds,\n setExpandedSpanIds,\n featuredSpanIds,\n chartWidth = 'default',\n}: TraceTimelineProps) {\n const overallLatency = hierarchicalSpans?.[0]?.latency || 0;\n const overallStartTime = hierarchicalSpans?.[0]?.startTime || '';\n\n const usedSpanTypes = useMemo(() => {\n const collectTypes = (spans: UISpan[]): Set<string> => {\n const types = new Set<string>();\n for (const span of spans) {\n const prefix = span.type?.toLowerCase().split('_')[0];\n if (prefix) types.add(prefix);\n if (span.spans) {\n for (const t of collectTypes(span.spans)) types.add(t);\n }\n }\n return types;\n };\n const types = collectTypes(hierarchicalSpans);\n const hasOther = [...types].some(t => !spanTypePrefixes.includes(t));\n const known = spanTypePrefixes.filter(p => p !== 'other' && types.has(p));\n if (hasOther) known.push('other');\n return known;\n }, [hierarchicalSpans]);\n\n return (\n <>\n {isLoading ? (\n <div\n className={cn(\n 'flex items-center text-ui-sm gap-3 bg-surface3/50 rounded-md p-3 justify-center text-neutral3',\n '[&_svg]:w-[1.25em] [&_svg]:h-[1.25em] [&_svg]:opacity-50',\n )}\n >\n <Spinner /> Loading Trace Timeline ...\n </div>\n ) : (\n <>\n {usedSpanTypes.length > 0 && (\n <div className=\"flex flex-wrap gap-3 px-2 py-1.5 justify-end\">\n {usedSpanTypes.map(type => {\n const spanUI = getSpanTypeUi(type);\n return (\n <div key={type} className=\"flex items-center gap-1 text-ui-sm text-neutral3\">\n <span\n className=\"inline-block w-1.5 h-1.5 rounded-full shrink-0\"\n style={{ backgroundColor: spanUI?.color }}\n />\n {spanUI?.label || type}\n </div>\n );\n })}\n </div>\n )}\n <div className=\"grid grid-cols-[minmax(0,1fr)_auto_auto] items-start content-start gap-y-px overflow-hidden py-1\">\n {hierarchicalSpans?.map(span => (\n <TraceTimelineSpan\n key={span.id}\n span={span}\n siblings={hierarchicalSpans}\n onSpanClick={onSpanClick}\n selectedSpanId={selectedSpanId}\n overallLatency={overallLatency}\n overallStartTime={overallStartTime}\n fadedTypes={fadedTypes}\n featuredSpanIds={featuredSpanIds}\n expandedSpanIds={expandedSpanIds}\n setExpandedSpanIds={setExpandedSpanIds}\n chartWidth={chartWidth}\n />\n ))}\n </div>\n </>\n )}\n </>\n );\n}\n","import type { ReactNode } from 'react';\nimport { PropertyFilterActions } from '@/ds/components/PropertyFilter/property-filter-actions';\nimport { PropertyFilterApplied } from '@/ds/components/PropertyFilter/property-filter-applied';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\nimport { cn } from '@/lib/utils';\n\ntype TracesToolbarProps = {\n /** Keep all filter pills but reset each value to its neutral state\n * ('' for text, 'Any' for single-select, [] for multi-select). */\n onClear?: () => void;\n /** Fully remove all filter pills. */\n onRemoveAll?: () => void;\n onSave?: () => void;\n /** When provided, an extra \"Remove saved filters\" option is shown —\n * wire it up only when there is actually a saved set to remove. */\n onRemoveSaved?: () => void;\n isLoading?: boolean;\n filterFields: PropertyFilterField[];\n filterTokens: PropertyFilterToken[];\n onFilterTokensChange: (tokens: PropertyFilterToken[]) => void;\n autoFocusFilterFieldId?: string;\n /** Field ids rendered as read-only pills (cannot be edited or removed). */\n lockedFieldIds?: readonly string[];\n lockedTooltipContent?: ReactNode;\n};\n\nexport function TracesToolbar({\n onClear,\n onRemoveAll,\n onSave,\n onRemoveSaved,\n isLoading,\n filterFields,\n filterTokens,\n onFilterTokensChange,\n autoFocusFilterFieldId,\n lockedFieldIds,\n lockedTooltipContent,\n}: TracesToolbarProps) {\n const hasActiveFilters = filterTokens.length > 0;\n const lockedSet = new Set(lockedFieldIds ?? []);\n const editableTokens = filterTokens.filter(t => !lockedSet.has(t.fieldId));\n const hasNonDefaultFilter = editableTokens.some(token => isNonDefaultFilter(token, filterFields));\n const hasEditableFilters = editableTokens.length > 0;\n\n return (\n // 1fr | auto — pills wrap in the first column; Clear stays pinned to the\n // top of the second column regardless of how many pill rows render.\n <div className={cn('grid grid-cols-[1fr_auto] gap-3 items-start ')}>\n <PropertyFilterApplied\n fields={filterFields}\n tokens={filterTokens}\n onTokensChange={onFilterTokensChange}\n disabled={isLoading}\n autoFocusFieldId={autoFocusFilterFieldId}\n lockedFieldIds={lockedFieldIds}\n lockedTooltipContent={lockedTooltipContent}\n />\n\n {hasActiveFilters && hasEditableFilters && (\n <PropertyFilterActions\n disabled={isLoading}\n onClear={hasNonDefaultFilter ? onClear : undefined}\n onRemoveAll={onRemoveAll}\n onSave={onSave}\n onRemoveSaved={onRemoveSaved}\n />\n )}\n </div>\n );\n}\n\nfunction isNonDefaultFilter(token: PropertyFilterToken, fields: PropertyFilterField[]): boolean {\n const field = fields.find(f => f.id === token.fieldId);\n if (!field) return false;\n if (field.kind === 'text') {\n return typeof token.value === 'string' && token.value.trim() !== '';\n }\n if (field.kind === 'pick-multi') {\n if (field.multi) return Array.isArray(token.value) && token.value.length > 0;\n return typeof token.value === 'string' && token.value !== '' && token.value !== 'Any';\n }\n if (field.kind === 'multi-select') {\n return Array.isArray(token.value) && token.value.length > 0;\n }\n return false;\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useState } from 'react';\nimport { downloadJson } from '@/lib/file';\nimport { toast } from '@/lib/toast';\n\nexport function useDownloadTraceJson() {\n const client = useMastraClient();\n const [isPending, setIsPending] = useState(false);\n\n const download = (traceId: string) => {\n if (isPending) return;\n setIsPending(true);\n\n // getTrace returns the full payload (heavy input/output), unlike the light spans the panel renders.\n const task = client\n .getTrace(traceId)\n .then(trace => downloadJson(`trace-${traceId}.json`, trace))\n .finally(() => setIsPending(false));\n\n toast.promise({\n myPromise: task,\n loadingMessage: 'Preparing trace download…',\n successMessage: 'Trace downloaded',\n errorMessage: 'Failed to download trace',\n });\n };\n\n return { download, isPending };\n}\n","import type { LightSpanRecord } from '@mastra/core/storage';\nimport {\n CircleGaugeIcon,\n ChevronsDownUpIcon,\n ChevronsUpDownIcon,\n DownloadIcon,\n Link2Icon,\n Loader2Icon,\n SaveIcon,\n} from 'lucide-react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { getAllSpanIds } from '../hooks/get-all-span-ids';\nimport { useDownloadTraceJson } from '../hooks/use-download-trace-json';\nimport { formatHierarchicalSpans } from './format-hierarchical-spans';\nimport { TraceKeysAndValues } from './trace-keys-and-values';\nimport { TraceTimeline } from './trace-timeline';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport { Notice } from '@/ds/components/Notice';\nimport { Icon } from '@/ds/icons/Icon';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { truncateString } from '@/lib/truncate-string';\n\nexport type TraceDataPanelPlacement = 'traces-list' | 'trace-page';\n\nexport interface TraceDataPanelViewProps {\n traceId: string;\n /** Lightweight spans for the trace. Caller fetches via useTraceLightSpans. */\n spans: LightSpanRecord[] | undefined;\n isLoading?: boolean;\n onClose: () => void;\n onSpanSelect?: (spanId: string | undefined) => void;\n onEvaluateTrace?: () => void;\n /** When set, a \"Save as Dataset Item\" button appears; the consumer owns the dialog. */\n onSaveAsDatasetItem?: (args: { traceId: string; rootSpanId: string | undefined }) => void;\n initialSpanId?: string | null;\n onPrevious?: () => void;\n onNext?: () => void;\n collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n placement: TraceDataPanelPlacement;\n timelineChartWidth?: 'wide' | 'default';\n /** When both are provided, renders an \"Open trace page\" button. */\n LinkComponent?: LinkComponent;\n traceHref?: string;\n /**\n * Span treated as the displayed root of the timeline. Required for branch\n * subtrees from `getBranch` where the anchor has a real parent that's outside\n * `spans`. When omitted, the span with no parent is used (trace case).\n */\n anchorSpanId?: string;\n /**\n * Whether to render the \"Evaluating traces and saving them as dataset items is\n * available in Mastra Studio\" info notice when neither `onEvaluateTrace` nor\n * `onSaveAsDatasetItem` is provided. Defaults to `true`. Pass `false` when this\n * panel is rendered inside Studio in a context that intentionally omits those\n * handlers (e.g. inline below an experiment result).\n */\n showUnavailableFeaturesMsg?: boolean;\n}\n\nexport function TraceDataPanelView({\n traceId,\n spans,\n isLoading,\n onClose,\n onSpanSelect,\n onEvaluateTrace,\n onSaveAsDatasetItem,\n initialSpanId,\n onPrevious,\n onNext,\n collapsed: controlledCollapsed,\n onCollapsedChange,\n placement,\n timelineChartWidth = 'default',\n LinkComponent,\n traceHref,\n anchorSpanId,\n showUnavailableFeaturesMsg = true,\n}: TraceDataPanelViewProps) {\n const isOnTracePage = placement === 'trace-page';\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const setCollapsed = onCollapsedChange ?? setInternalCollapsed;\n\n const { download: downloadTraceJson, isPending: isDownloadingTrace } = useDownloadTraceJson();\n\n const contentRef = useRef<HTMLDivElement>(null);\n const [selectedSpanId, setSelectedSpanId] = useState<string | undefined>(initialSpanId ?? undefined);\n\n // Sync selected span when initialSpanId or trace data changes\n useEffect(() => {\n // No span requested: clear immediately.\n if (!initialSpanId) {\n setSelectedSpanId(undefined);\n onSpanSelect?.(undefined);\n return;\n }\n // Span requested: wait for trace data before deciding so an in-flight\n // fetch doesn't wipe a URL-provided selection.\n if (!spans) return;\n\n const found = spans.find(s => s.spanId === initialSpanId);\n if (found) {\n setSelectedSpanId(initialSpanId);\n onSpanSelect?.(initialSpanId);\n } else {\n setSelectedSpanId(undefined);\n onSpanSelect?.(undefined);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialSpanId, spans]);\n\n // Scroll the selected span into view within the timeline\n useEffect(() => {\n if (!selectedSpanId || !contentRef.current) return;\n const el = contentRef.current.querySelector(`[data-span-id=\"${selectedSpanId}\"]`);\n el?.scrollIntoView({ block: 'nearest' });\n }, [selectedSpanId]);\n\n const hierarchicalSpans = useMemo(() => formatHierarchicalSpans(spans ?? [], anchorSpanId), [spans, anchorSpanId]);\n\n const [expandedSpanIds, setExpandedSpanIds] = useState<string[]>([]);\n\n useEffect(() => {\n if (hierarchicalSpans.length > 0) {\n setExpandedSpanIds(getAllSpanIds(hierarchicalSpans));\n }\n }, [hierarchicalSpans]);\n\n const rootSpan = useMemo(\n () => (anchorSpanId ? spans?.find(s => s.spanId === anchorSpanId) : spans?.find(s => s.parentSpanId == null)),\n [spans, anchorSpanId],\n );\n\n const handleSpanClick = (id: string) => {\n const newId = selectedSpanId === id ? undefined : id;\n setSelectedSpanId(newId);\n onSpanSelect?.(newId);\n };\n\n const showOpenTracePageLink = !isOnTracePage && LinkComponent && traceHref;\n\n // Shared across both header layouts (list side panel and full trace page) so a trace can be\n // downloaded from wherever it's being inspected.\n const downloadTraceButton = (\n <Button\n size=\"md\"\n tooltip=\"Download trace JSON\"\n aria-label=\"Download trace JSON\"\n disabled={isDownloadingTrace}\n onClick={() => downloadTraceJson(traceId)}\n >\n {isDownloadingTrace ? <Loader2Icon className=\"animate-spin\" /> : <DownloadIcon />}\n </Button>\n );\n\n return (\n <DataPanel collapsed={collapsed}>\n <DataPanel.Header>\n {isOnTracePage ? (\n <>\n <DataPanel.Heading>Trace Timeline</DataPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">{downloadTraceButton}</ButtonsGroup>\n </>\n ) : (\n <>\n <DataPanel.Heading>\n Trace <b># {truncateString(traceId, 12)}</b>\n </DataPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">\n {onCollapsedChange && (\n <Button\n size=\"md\"\n tooltip={collapsed ? 'Expand panel' : 'Collapse panel'}\n onClick={() => setCollapsed(!collapsed)}\n >\n {collapsed ? <ChevronsUpDownIcon /> : <ChevronsDownUpIcon />}\n </Button>\n )}\n {(onPrevious || onNext) && (\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Previous trace\"\n nextLabel=\"Next trace\"\n />\n )}\n {showOpenTracePageLink && (\n <Button\n as={LinkComponent}\n href={traceHref}\n size=\"md\"\n tooltip=\"Open trace page\"\n aria-label=\"Open trace page\"\n >\n <Link2Icon />\n </Button>\n )}\n {downloadTraceButton}\n <DataPanel.CloseButton onClick={onClose} />\n </ButtonsGroup>\n </>\n )}\n </DataPanel.Header>\n\n {!collapsed &&\n (isLoading ? (\n <DataPanel.LoadingData>Loading trace...</DataPanel.LoadingData>\n ) : hierarchicalSpans.length === 0 ? (\n <DataPanel.NoData>No spans found for this trace.</DataPanel.NoData>\n ) : (\n <DataPanel.Content ref={contentRef}>\n {!isOnTracePage && rootSpan && <TraceKeysAndValues rootSpan={rootSpan} className=\"mb-6\" />}\n\n {!isOnTracePage && (onEvaluateTrace || onSaveAsDatasetItem) && (\n <div className=\"mb-6 flex justify-between items-center gap-4\">\n {onEvaluateTrace && (\n <Button size=\"sm\" onClick={onEvaluateTrace}>\n <Icon>\n <CircleGaugeIcon />\n </Icon>\n Evaluate Trace\n </Button>\n )}\n {onSaveAsDatasetItem && (\n <Button size=\"sm\" onClick={() => onSaveAsDatasetItem({ traceId, rootSpanId: rootSpan?.spanId })}>\n <Icon>\n <SaveIcon />\n </Icon>\n Save as Dataset Item\n </Button>\n )}\n </div>\n )}\n\n {!isOnTracePage && !onEvaluateTrace && !onSaveAsDatasetItem && showUnavailableFeaturesMsg && (\n <Notice variant=\"info\" className=\"mb-6\">\n <Notice.Message>\n Evaluating traces and saving them as dataset items is available in Mastra Studio (local or deployed).\n </Notice.Message>\n </Notice>\n )}\n\n <TraceTimeline\n hierarchicalSpans={hierarchicalSpans}\n onSpanClick={handleSpanClick}\n selectedSpanId={selectedSpanId}\n expandedSpanIds={expandedSpanIds}\n setExpandedSpanIds={setExpandedSpanIds}\n chartWidth={timelineChartWidth}\n />\n </DataPanel.Content>\n ))}\n </DataPanel>\n );\n}\n","import type { SpanRecord } from '@mastra/core/storage';\n\ntype MessageLike = { role?: string; content?: unknown };\n\n/**\n * Extract a truncated text preview from a span's input field.\n * Agent traces store `input` as an array of message objects.\n * Returns the text content of all user messages joined, truncated to maxLength.\n */\nexport function getInputPreview(input: unknown, maxLength = 100): string {\n if (input == null) return '';\n\n // Unwrap legacy { messages: [...] } wrapper from agent_run spans\n const messageArray = Array.isArray(input)\n ? input\n : input && typeof input === 'object' && !Array.isArray(input) && Array.isArray((input as any).messages)\n ? (input as any).messages\n : null;\n\n if (messageArray) {\n const messages = messageArray as MessageLike[];\n const userMessages = messages\n .filter(m => m?.role === 'user')\n .map(m => {\n if (typeof m.content === 'string') return m.content;\n if (Array.isArray(m.content)) {\n return m.content\n .map((part: any) => {\n if (typeof part === 'string') return part;\n if (part?.type === 'text' && typeof part.text === 'string') return part.text;\n return '';\n })\n .filter(Boolean)\n .join(' ');\n }\n return '';\n })\n .filter(Boolean);\n\n const joined = userMessages.join(' | ');\n if (joined.length > maxLength) {\n return joined.slice(0, maxLength) + '…';\n }\n return joined;\n }\n\n if (typeof input === 'string') {\n if (input.length > maxLength) {\n return input.slice(0, maxLength) + '…';\n }\n return input;\n }\n\n const str = JSON.stringify(input);\n if (str.length > maxLength) {\n return str.slice(0, maxLength) + '…';\n }\n return str;\n}\n\ntype TokenUsage = {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n};\n\n/**\n * Check if a span indicates that the token limit was exceeded\n */\nexport function isTokenLimitExceeded(span?: SpanRecord): boolean {\n return span?.attributes?.finishReason === 'length';\n}\n\n/**\n * Get a human-readable message for token limit exceeded\n */\nexport function getTokenLimitMessage(span?: SpanRecord): string {\n const usage = span?.attributes?.usage as TokenUsage | undefined;\n\n if (!usage) {\n return `The model stopped generating because it reached the maximum token limit. The response was truncated and may be incomplete.`;\n }\n\n const inputTokens = usage.inputTokens ?? 0;\n const outputTokens = usage.outputTokens ?? 0;\n const totalTokens = usage.totalTokens ?? inputTokens + outputTokens;\n\n // Show breakdown if we have detailed info\n if (inputTokens > 0 || outputTokens > 0) {\n return `The model stopped generating because it reached the maximum token limit. The response was truncated and may be incomplete.\\n\\nToken usage: ${inputTokens} input + ${outputTokens} output = ${totalTokens} total`;\n }\n\n return `The model stopped generating because it reached the maximum token limit (${totalTokens} tokens). The response was truncated and may be incomplete.`;\n}\n","import type { SpanRecord } from '@mastra/core/storage';\nimport { format } from 'date-fns';\nimport { BracesIcon, FileInputIcon, FileOutputIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { getTokenLimitMessage, isTokenLimitExceeded } from '../utils/span-utils';\nimport { SpanTokenUsage } from './span-token-usage';\nimport type { TokenUsage } from './span-token-usage';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport { Notice } from '@/ds/components/Notice';\nimport { Tab, TabContent, TabList, Tabs } from '@/ds/components/Tabs';\n\nfunction buildDialogTitle(sectionTitle: string, icon: ReactNode, span: { spanId: string; traceId: string }) {\n return (\n <>\n <span className=\"flex items-center gap-1.5 text-neutral2 uppercase tracking-widest [&>svg]:size-3.5\">\n {icon}\n {sectionTitle}\n </span>\n <span>\n › Span <b className=\"text-neutral3\">#{span.spanId}</b>\n </span>\n <span>\n › Trace <b className=\"text-neutral3\">#{span.traceId}</b>\n </span>\n </>\n );\n}\n\nexport interface SpanDataPanelViewProps {\n traceId: string;\n spanId: string;\n /** Full span record. Caller fetches via useSpanDetail. */\n span: SpanRecord | undefined;\n isLoading?: boolean;\n onClose: () => void;\n onPrevious?: () => void;\n onNext?: () => void;\n activeTab?: string;\n onTabChange?: (tab: string) => void;\n /**\n * When provided, a \"Scoring\" tab appears; the slot receives the loaded span and renders\n * whatever scoring UI the consumer wants. When undefined, only the \"Details\" tab renders.\n */\n scoringTabSlot?: (args: { span: SpanRecord; traceId: string; spanId: string }) => ReactNode;\n /** Optional count shown in the \"Scoring\" tab label (e.g. number of scores). */\n scoringTabBadge?: ReactNode;\n /**\n * When provided, a \"Feedback\" tab appears; the slot receives the loaded span and renders\n * whatever feedback UI the consumer wants.\n */\n feedbackTabSlot?: (args: { span: SpanRecord; traceId: string; spanId: string }) => ReactNode;\n /** Optional count shown in the \"Feedback\" tab label. */\n feedbackTabBadge?: ReactNode;\n /**\n * Whether this span is the displayed root of the current view (trace root or\n * branch anchor). Controls visibility of trace-level metadata fields. Defaults\n * to `span.parentSpanId == null` (trace case) when omitted.\n */\n isAnchor?: boolean;\n}\n\nexport function SpanDataPanelView({\n traceId,\n spanId,\n span,\n isLoading,\n onClose,\n onPrevious,\n onNext,\n activeTab,\n onTabChange,\n scoringTabSlot,\n scoringTabBadge,\n feedbackTabSlot,\n feedbackTabBadge,\n isAnchor,\n}: SpanDataPanelViewProps) {\n return (\n <DataPanel>\n <DataPanel.Header>\n <DataPanel.Heading>\n Span <b># {spanId}</b>\n </DataPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Previous span\"\n nextLabel=\"Next span\"\n />\n <DataPanel.CloseButton onClick={onClose} />\n </ButtonsGroup>\n </DataPanel.Header>\n\n {isLoading ? (\n <DataPanel.LoadingData>Loading span details...</DataPanel.LoadingData>\n ) : !span ? (\n <DataPanel.NoData>Span not found.</DataPanel.NoData>\n ) : (\n <SpanDataPanelContent\n span={span}\n traceId={traceId}\n spanId={spanId}\n activeTab={activeTab}\n onTabChange={onTabChange}\n scoringTabSlot={scoringTabSlot}\n scoringTabBadge={scoringTabBadge}\n feedbackTabSlot={feedbackTabSlot}\n feedbackTabBadge={feedbackTabBadge}\n isAnchor={isAnchor}\n />\n )}\n </DataPanel>\n );\n}\n\nfunction SpanDataPanelContent({\n span,\n traceId,\n spanId,\n activeTab,\n onTabChange,\n scoringTabSlot,\n scoringTabBadge,\n feedbackTabSlot,\n feedbackTabBadge,\n isAnchor,\n}: {\n span: SpanRecord;\n traceId: string;\n spanId: string;\n activeTab?: string;\n onTabChange?: (tab: string) => void;\n scoringTabSlot?: (args: { span: SpanRecord; traceId: string; spanId: string }) => ReactNode;\n scoringTabBadge?: ReactNode;\n feedbackTabSlot?: (args: { span: SpanRecord; traceId: string; spanId: string }) => ReactNode;\n feedbackTabBadge?: ReactNode;\n isAnchor?: boolean;\n}) {\n const durationMs =\n span.startedAt && span.endedAt ? new Date(span.endedAt).getTime() - new Date(span.startedAt).getTime() : null;\n const usage = span.attributes?.usage as TokenUsage | undefined;\n\n const detailsBody = (\n <>\n {isTokenLimitExceeded(span) && (\n <div className=\"mb-3\">\n <Notice variant=\"warning\" title=\"Token Limit Exceeded\">\n <Notice.Message>{getTokenLimitMessage(span)}</Notice.Message>\n </Notice>\n </div>\n )}\n\n {usage && <SpanTokenUsage usage={usage} className=\"mb-3\" />}\n\n <DataKeysAndValues>\n {/* Anchor-only: rich trace-context fields. Live on the full SpanRecord, not on the\n * lightweight payload, so they only have values once the full span is loaded. */}\n {(isAnchor ?? span.parentSpanId == null) && (\n <>\n {span.traceId && (\n <>\n <DataKeysAndValues.Key>Trace Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyTooltip=\"Copy Trace Id to clipboard\" copyValue={span.traceId}>\n {span.traceId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.tags && span.tags.length > 0 && (\n <>\n <DataKeysAndValues.Key>Tags</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{span.tags.join(', ')}</DataKeysAndValues.Value>\n </>\n )}\n {span.runId && (\n <>\n <DataKeysAndValues.Key>Run Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyTooltip=\"Copy Run Id to clipboard\" copyValue={span.runId}>\n {span.runId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.threadId && (\n <>\n <DataKeysAndValues.Key>Thread Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyTooltip=\"Copy Thread Id to clipboard\" copyValue={span.threadId}>\n {span.threadId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.sessionId && (\n <>\n <DataKeysAndValues.Key>Session Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Session Id to clipboard\"\n copyValue={span.sessionId}\n >\n {span.sessionId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.requestId && (\n <>\n <DataKeysAndValues.Key>Request Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Request Id to clipboard\"\n copyValue={span.requestId}\n >\n {span.requestId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.resourceId && (\n <>\n <DataKeysAndValues.Key>Resource Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Resource Id to clipboard\"\n copyValue={span.resourceId}\n >\n {span.resourceId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.userId && (\n <>\n <DataKeysAndValues.Key>User Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyTooltip=\"Copy User Id to clipboard\" copyValue={span.userId}>\n {span.userId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.organizationId && (\n <>\n <DataKeysAndValues.Key>Organization Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Organization Id to clipboard\"\n copyValue={span.organizationId}\n >\n {span.organizationId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.experimentId && (\n <>\n <DataKeysAndValues.Key>Experiment Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Experiment Id to clipboard\"\n copyValue={span.experimentId}\n >\n {span.experimentId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n </>\n )}\n {span.name && (\n <>\n <DataKeysAndValues.Key>Name</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{span.name}</DataKeysAndValues.Value>\n </>\n )}\n {span.spanType && (\n <>\n <DataKeysAndValues.Key>Type</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{span.spanType}</DataKeysAndValues.Value>\n </>\n )}\n {span.startedAt && (\n <>\n <DataKeysAndValues.Key>Started</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>\n {format(new Date(span.startedAt), 'MMM dd, HH:mm:ss.SSS')}\n </DataKeysAndValues.Value>\n </>\n )}\n {span.endedAt && (\n <>\n <DataKeysAndValues.Key>Ended</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{format(new Date(span.endedAt), 'MMM dd, HH:mm:ss.SSS')}</DataKeysAndValues.Value>\n </>\n )}\n {durationMs != null && (\n <>\n <DataKeysAndValues.Key>Duration</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>\n {durationMs < 1000 ? `${durationMs}ms` : `${(durationMs / 1000).toFixed(2)}s`}\n </DataKeysAndValues.Value>\n </>\n )}\n </DataKeysAndValues>\n\n <div className=\"grid gap-3 mt-3\">\n <DataPanel.CodeSection\n title=\"Input\"\n dialogTitle={buildDialogTitle('Input', <FileInputIcon />, { spanId, traceId })}\n icon={<FileInputIcon />}\n codeStr={JSON.stringify(span.input ?? null, null, 2)}\n />\n <DataPanel.CodeSection\n title=\"Output\"\n dialogTitle={buildDialogTitle('Output', <FileOutputIcon />, { spanId, traceId })}\n icon={<FileOutputIcon />}\n codeStr={JSON.stringify(span.output ?? null, null, 2)}\n />\n <DataPanel.CodeSection\n title=\"Metadata\"\n dialogTitle={buildDialogTitle('Metadata', <BracesIcon />, { spanId, traceId })}\n icon={<BracesIcon />}\n codeStr={JSON.stringify(span.metadata ?? null, null, 2)}\n />\n <DataPanel.CodeSection\n title=\"Attributes\"\n dialogTitle={buildDialogTitle('Attributes', <BracesIcon />, { spanId, traceId })}\n icon={<BracesIcon />}\n codeStr={JSON.stringify(span.attributes ?? null, null, 2)}\n />\n </div>\n </>\n );\n\n // No extra tab slots → render details directly without the Tabs/TabList wrapper.\n if (!scoringTabSlot && !feedbackTabSlot) {\n return <DataPanel.Content>{detailsBody}</DataPanel.Content>;\n }\n\n return (\n <DataPanel.Content>\n <Tabs defaultTab=\"details\" value={activeTab} onValueChange={onTabChange}>\n <TabList>\n <Tab value=\"details\">Details</Tab>\n {scoringTabSlot && <Tab value=\"scoring\">Scoring {scoringTabBadge != null && <>({scoringTabBadge})</>}</Tab>}\n {feedbackTabSlot && (\n <Tab value=\"feedback\">Feedback {feedbackTabBadge != null && <>({feedbackTabBadge})</>}</Tab>\n )}\n </TabList>\n\n <TabContent value=\"details\">{detailsBody}</TabContent>\n {scoringTabSlot && <TabContent value=\"scoring\">{scoringTabSlot({ span, traceId, spanId })}</TabContent>}\n {feedbackTabSlot && <TabContent value=\"feedback\">{feedbackTabSlot({ span, traceId, spanId })}</TabContent>}\n </Tabs>\n </DataPanel.Content>\n );\n}\n","import type { SpanRecord } from '@mastra/core/storage';\nimport { format } from 'date-fns';\nimport { BracesIcon, FileInputIcon, FileOutputIcon } from 'lucide-react';\nimport { DataDetailsPanel } from '@/ds/components/DataDetailsPanel';\n\nconst KV = DataDetailsPanel.KeyValueList;\n\nexport interface SpanDetailsViewProps {\n spanId: string;\n /** Full span record. Caller fetches via useSpanDetail. */\n span: SpanRecord | undefined;\n isLoading?: boolean;\n onClose: () => void;\n}\n\n/**\n * Compact span panel using `DataDetailsPanel` (popover-style). Shows basic span metadata +\n * input/output/metadata/attributes code sections. Use this for inline span inspection; for the\n * full-width span view with scoring tab + prev/next nav, use `SpanDataPanelView`.\n */\nexport function SpanDetailsView({ spanId, span, isLoading, onClose }: SpanDetailsViewProps) {\n const durationMs =\n span?.startedAt && span?.endedAt ? new Date(span.endedAt).getTime() - new Date(span.startedAt).getTime() : null;\n\n return (\n <DataDetailsPanel>\n <DataDetailsPanel.Header>\n <DataDetailsPanel.Heading>\n Span <b># {spanId}</b>\n </DataDetailsPanel.Heading>\n <DataDetailsPanel.CloseButton onClick={onClose} />\n </DataDetailsPanel.Header>\n\n {isLoading ? (\n <DataDetailsPanel.LoadingData>Loading span...</DataDetailsPanel.LoadingData>\n ) : !span ? (\n <DataDetailsPanel.NoData>Span not found.</DataDetailsPanel.NoData>\n ) : (\n <DataDetailsPanel.Content>\n <KV>\n {span.spanType && (\n <>\n <KV.Key>Type</KV.Key>\n <KV.Value>{span.spanType}</KV.Value>\n </>\n )}\n {span.startedAt && (\n <>\n <KV.Key>Started</KV.Key>\n <KV.Value>{format(new Date(span.startedAt), 'MMM dd, HH:mm:ss.SSS')}</KV.Value>\n </>\n )}\n {span.endedAt && (\n <>\n <KV.Key>Ended</KV.Key>\n <KV.Value>{format(new Date(span.endedAt), 'MMM dd, HH:mm:ss.SSS')}</KV.Value>\n </>\n )}\n {durationMs != null && (\n <>\n <KV.Key>Duration</KV.Key>\n <KV.Value>{durationMs < 1000 ? `${durationMs}ms` : `${(durationMs / 1000).toFixed(2)}s`}</KV.Value>\n </>\n )}\n </KV>\n\n <br />\n\n <DataDetailsPanel.CodeSection\n title=\"Input\"\n icon={<FileInputIcon />}\n codeStr={JSON.stringify(span.input ?? null, null, 2)}\n />\n <DataDetailsPanel.CodeSection\n title=\"Output\"\n icon={<FileOutputIcon />}\n codeStr={JSON.stringify(span.output ?? null, null, 2)}\n />\n <DataDetailsPanel.CodeSection\n title=\"Metadata\"\n icon={<BracesIcon />}\n codeStr={JSON.stringify(span.metadata ?? null, null, 2)}\n />\n <DataDetailsPanel.CodeSection\n title=\"Attributes\"\n icon={<BracesIcon />}\n codeStr={JSON.stringify(span.attributes ?? null, null, 2)}\n />\n </DataDetailsPanel.Content>\n )}\n </DataDetailsPanel>\n );\n}\n","import type { LightSpanRecord } from '@mastra/core/storage';\nimport { useEffect, useMemo, useState } from 'react';\nimport { getAllSpanIds } from '../hooks/get-all-span-ids';\nimport { formatHierarchicalSpans } from './format-hierarchical-spans';\nimport { TraceTimeline } from './trace-timeline';\nimport { DataDetailsPanel } from '@/ds/components/DataDetailsPanel';\n\nexport interface TraceDetailsViewProps {\n traceId: string;\n /** Lightweight spans for the trace. Caller fetches via useTraceLightSpans. */\n spans: LightSpanRecord[] | undefined;\n isLoading?: boolean;\n onClose: () => void;\n /** Called when the user clicks a span in the timeline. Toggling a selected span off passes undefined. */\n onSpanSelect?: (spanId: string | undefined) => void;\n /** Fully controlled selection — the span to highlight. Pass whatever the parent's source of truth is. */\n selectedSpanId?: string | null;\n}\n\n/**\n * Compact trace panel using `DataDetailsPanel` (popover-style). Renders the timeline only —\n * no trace header KV, no evaluate/save actions. Use this for inline trace inspection from a\n * list page (e.g. the Logs page). For the full-width trace view, use `TraceDataPanelView`.\n */\nexport function TraceDetailsView({\n traceId,\n spans,\n isLoading,\n onClose,\n onSpanSelect,\n selectedSpanId,\n}: TraceDetailsViewProps) {\n const hierarchicalSpans = useMemo(() => formatHierarchicalSpans(spans ?? []), [spans]);\n\n const [expandedSpanIds, setExpandedSpanIds] = useState<string[]>([]);\n\n useEffect(() => {\n if (hierarchicalSpans.length > 0) {\n setExpandedSpanIds(getAllSpanIds(hierarchicalSpans));\n }\n }, [hierarchicalSpans]);\n\n const handleSpanClick = (id: string) => {\n onSpanSelect?.(selectedSpanId === id ? undefined : id);\n };\n\n return (\n <DataDetailsPanel>\n <DataDetailsPanel.Header>\n <DataDetailsPanel.Heading>\n Trace <b># {traceId}</b>\n </DataDetailsPanel.Heading>\n <DataDetailsPanel.CloseButton onClick={onClose} />\n </DataDetailsPanel.Header>\n\n {isLoading ? (\n <DataDetailsPanel.LoadingData>Loading trace...</DataDetailsPanel.LoadingData>\n ) : hierarchicalSpans.length === 0 ? (\n <DataDetailsPanel.NoData>No spans found for this trace.</DataDetailsPanel.NoData>\n ) : (\n <DataDetailsPanel.Content>\n <TraceTimeline\n hierarchicalSpans={hierarchicalSpans}\n onSpanClick={handleSpanClick}\n selectedSpanId={selectedSpanId ?? undefined}\n expandedSpanIds={expandedSpanIds}\n setExpandedSpanIds={setExpandedSpanIds}\n />\n </DataDetailsPanel.Content>\n )}\n </DataDetailsPanel>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface TracesLayoutProps {\n /** The trace list (left column). */\n listSlot: ReactNode;\n /** The trace data panel (right column, top). When null/undefined, the whole right column collapses. */\n tracePanelSlot?: ReactNode;\n /** The span data panel (right column, middle). Only rendered when truthy. */\n spanPanelSlot?: ReactNode;\n /** The score data panel (right column, bottom). Only rendered when truthy. */\n scorePanelSlot?: ReactNode;\n /** When the trace panel is collapsed, the right column's grid-rows squash the trace row to `auto`. */\n traceCollapsed?: boolean;\n}\n\n/**\n * Pure 2-column layout shell for the traces page. Owns no state and fetches no data — pass slots in.\n * Right-column row template adapts based on which panels are present.\n */\nexport function TracesLayout({\n listSlot,\n tracePanelSlot,\n spanPanelSlot,\n scorePanelSlot,\n traceCollapsed,\n}: TracesLayoutProps) {\n const hasSidePanel = !!tracePanelSlot;\n\n return (\n <div\n className={cn(\n 'grid max-h-full min-h-0 gap-4 items-start ',\n hasSidePanel ? 'grid-cols-[1fr_1fr]' : 'grid-cols-[1fr]',\n )}\n >\n {listSlot}\n\n {hasSidePanel && (\n <div\n className={cn(\n 'grid gap-4 max-h-full overflow-auto',\n scorePanelSlot\n ? traceCollapsed\n ? 'grid-rows-[auto_3fr_3fr]'\n : 'grid-rows-[2fr_3fr_3fr]'\n : spanPanelSlot\n ? traceCollapsed\n ? 'grid-rows-[auto_3fr]'\n : 'grid-rows-[2fr_3fr]'\n : traceCollapsed\n ? 'grid-rows-[auto]'\n : 'grid-rows-[1fr]',\n )}\n >\n {tracePanelSlot}\n {spanPanelSlot}\n {scorePanelSlot}\n </div>\n )}\n </div>\n );\n}\n","import { useVirtualizer } from '@tanstack/react-virtual';\nimport { useEffect, useRef } from 'react';\nimport { getInputPreview } from '../utils/span-utils';\nimport { DataListSkeleton, TracesDataList } from '@/ds/components/DataList';\nimport { cn } from '@/lib/utils';\n\n/** Span attributes fields the list view reads directly. Extra unknown keys are allowed so callers\n * can pass the full attributes record from @mastra/core/storage without mapping. */\nexport type TraceAttributes = {\n status?: string | null;\n agentId?: string | null;\n workflowId?: string | null;\n [key: string]: unknown;\n};\n\nexport type TracesListViewTrace = {\n traceId: string;\n /** Required for branch rows; absent on plain trace rows (which are root-rooted). */\n spanId?: string | null;\n /** `null`/missing → root span. Drives the Kind column's icon (top-level trace vs nested branch). */\n parentSpanId?: string | null;\n name: string;\n entityType?: string | null;\n entityId?: string | null;\n entityName?: string | null;\n attributes?: TraceAttributes | null;\n input?: unknown;\n startedAt?: Date | string | null;\n createdAt: Date | string;\n};\n\n// Fixed widths on non-flex columns prevent track shifts as the virtualizer swaps rows in/out.\nconst COLUMNS = '6rem 9rem 14rem minmax(8rem,1fr) 14rem 6rem';\n\nconst ROW_HEIGHT = 36;\nconst OVERSCAN = 8;\n\nexport type TracesListViewProps = {\n traces: TracesListViewTrace[];\n isLoading?: boolean;\n isFetchingNextPage?: boolean;\n hasNextPage?: boolean;\n setEndOfListElement?: (element: HTMLDivElement | null) => void;\n filtersApplied?: boolean;\n /** Currently featured/selected trace — its row gets the highlighted background. */\n featuredTraceId?: string | null;\n /**\n * Required in branches mode to disambiguate rows sharing a `traceId`. When set,\n * a row is featured only when both `traceId` and `spanId` match.\n */\n featuredSpanId?: string | null;\n /** Branches mode mixes root traces with subtraces — enables the Trace/Subtrace tooltip on the\n * level icon in the Name column, which is meaningless when every row is a root. */\n isBranchesMode?: boolean;\n /** Keys (`traceId:spanId`) of rows that just arrived via delta polling. Rows whose key is in\n * this set get a temporary tint to distinguish them from rows present since the last page-mode\n * fetch. Auto-expires upstream (in useTraces) after a short window. */\n recentlyAddedKeys?: Set<string>;\n /** Called when a row is clicked. The current selection logic (toggle on same id) is the consumer's call. */\n onTraceClick: (trace: TracesListViewTrace) => void;\n};\n\n/**\n * Virtualized presentational list. Renders only the visible window via TanStack Virtual, and\n * uses DataList primitives for layout (CSS Grid with subgrid rows).\n */\nexport function TracesListView({\n traces,\n isLoading,\n isFetchingNextPage,\n hasNextPage,\n setEndOfListElement,\n filtersApplied,\n featuredTraceId,\n featuredSpanId,\n isBranchesMode,\n recentlyAddedKeys,\n onTraceClick,\n}: TracesListViewProps) {\n const scrollRef = useRef<HTMLDivElement | null>(null);\n\n const virtualizer = useVirtualizer({\n count: traces.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => ROW_HEIGHT,\n overscan: OVERSCAN,\n });\n\n // Reset scroll to top whenever a fresh query resolves (filter / date range change).\n // `isLoading` only flips on initial fetches — `fetchNextPage` keeps it `false`, so this\n // effect doesn't fire during pagination.\n //\n // Why the manual scroll event: when the skeleton-vs-list branch swaps in the new scroll\n // container, it mounts at `scrollTop = 0`. The virtualizer rebinds its listener but\n // doesn't re-read `scrollTop`, so it keeps the stale `scrollOffset` from the previous\n // element. `scrollToOffset(0)` no-ops because the new element is already at 0 (no scroll\n // event fires). Dispatching a synthetic `scroll` forces the virtualizer's handler to\n // read the fresh `scrollTop` and recompute `virtualItems` with `paddingTop = 0`.\n const wasLoadingRef = useRef(isLoading);\n useEffect(() => {\n if (wasLoadingRef.current && !isLoading) {\n scrollRef.current?.dispatchEvent(new Event('scroll'));\n }\n wasLoadingRef.current = isLoading;\n }, [isLoading]);\n\n if (isLoading) {\n return <DataListSkeleton columns={COLUMNS} />;\n }\n\n const virtualItems = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n const paddingTop = virtualItems[0]?.start ?? 0;\n const paddingBottom =\n virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;\n\n return (\n <TracesDataList columns={COLUMNS} scrollRef={scrollRef} className=\"min-w-0\">\n <TracesDataList.Top>\n <TracesDataList.TopCell>Date</TracesDataList.TopCell>\n <TracesDataList.TopCell>Time</TracesDataList.TopCell>\n <TracesDataList.TopCell>Name</TracesDataList.TopCell>\n <TracesDataList.TopCell>Input</TracesDataList.TopCell>\n <TracesDataList.TopCell>Entity</TracesDataList.TopCell>\n <TracesDataList.TopCell>Status</TracesDataList.TopCell>\n </TracesDataList.Top>\n\n {traces.length === 0 ? (\n <TracesDataList.NoMatch\n message={filtersApplied ? 'No traces found for applied filters' : 'No traces found yet'}\n />\n ) : (\n <>\n <TracesDataList.Spacer height={paddingTop} />\n {virtualItems.map(vi => {\n const trace = traces[vi.index];\n if (!trace) return null;\n\n const isFeatured =\n trace.traceId === featuredTraceId && (featuredSpanId == null || trace.spanId === featuredSpanId);\n const rowKey = `${trace.traceId}:${trace.spanId ?? ''}`;\n const isRecentlyAdded = recentlyAddedKeys?.has(rowKey) ?? false;\n const displayDate = trace.startedAt ?? trace.createdAt;\n const entityName =\n trace.entityName || trace.entityId || trace.attributes?.agentId || trace.attributes?.workflowId;\n\n return (\n <TracesDataList.RowButton\n key={rowKey}\n ref={virtualizer.measureElement}\n data-index={vi.index}\n onClick={() => onTraceClick(trace)}\n featured={isFeatured}\n className={cn(isRecentlyAdded && 'animate-row-highlight')}\n >\n <TracesDataList.DateCell timestamp={displayDate} />\n <TracesDataList.TimeCell timestamp={displayDate} />\n <TracesDataList.NameCell\n name={trace.name}\n parentSpanId={trace.parentSpanId}\n showLevelTooltip={isBranchesMode}\n />\n <TracesDataList.InputCell input={getInputPreview(trace.input)} />\n <TracesDataList.EntityCell entityType={trace.entityType} entityName={entityName} />\n <TracesDataList.StatusCell status={trace.attributes?.status} />\n </TracesDataList.RowButton>\n );\n })}\n <TracesDataList.Spacer height={paddingBottom} />\n <TracesDataList.NextPageLoading\n isLoading={isFetchingNextPage}\n hasMore={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n />\n </>\n )}\n </TracesDataList>\n );\n}\n","import { ChevronDownIcon } from 'lucide-react';\nimport type { TraceListMode } from '../trace-filters';\nimport { Button } from '@/ds/components/Button';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\n\nconst TRACES_LIST_MODE_LABELS: Record<TraceListMode, string> = {\n traces: 'Top-level traces only',\n branches: 'All traces, nested too',\n};\n\nexport interface TracesListModeToggleProps {\n value: TraceListMode;\n onChange: (mode: TraceListMode) => void;\n disabled?: boolean;\n}\n\n/**\n * Dropdown switcher between the two list modes on the Observability traces page:\n * - `traces` — one row per top-level run (each trace's root anchor).\n * - `branches` — one row per anchor span, including ones nested inside other runs.\n */\nexport function TracesListModeToggle({ value, onChange, disabled }: TracesListModeToggleProps) {\n return (\n <DropdownMenu>\n <DropdownMenu.Trigger asChild>\n <Button size=\"md\" variant=\"default\" disabled={disabled}>\n {TRACES_LIST_MODE_LABELS[value]}\n <ChevronDownIcon />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"start\">\n <DropdownMenu.RadioGroup value={value} onValueChange={v => onChange(v as TraceListMode)}>\n <DropdownMenu.RadioItem value=\"traces\">{TRACES_LIST_MODE_LABELS.traces}</DropdownMenu.RadioItem>\n <DropdownMenu.RadioItem value=\"branches\">{TRACES_LIST_MODE_LABELS.branches}</DropdownMenu.RadioItem>\n </DropdownMenu.RadioGroup>\n </DropdownMenu.Content>\n </DropdownMenu>\n );\n}\n","import { ErrorState } from '@/ds/components/ErrorState';\nimport { PermissionDenied } from '@/ds/components/PermissionDenied';\nimport { SessionExpired } from '@/ds/components/SessionExpired';\nimport { parseError } from '@/lib/errors';\nimport { is401UnauthorizedError, is403ForbiddenError } from '@/lib/query-utils';\n\nexport interface TracesErrorContentProps {\n /** The error from a useTraces / useTraceLightSpans / etc. query. */\n error: unknown;\n /** Passed to PermissionDenied (e.g. 'traces' / 'trace'). */\n resource: string;\n /** Title shown on the generic ErrorState fallback. */\n errorTitle: string;\n}\n\n/**\n * Renders the appropriate fallback content for a traces-related query error:\n * `<SessionExpired />` for 401, `<PermissionDenied />` for 403, otherwise `<ErrorState />`.\n *\n * The consumer wraps it in whatever layout they want (NoDataPageLayout for the list page,\n * PageLayout.MainArea for the detail page, etc.) — this component only owns the 3-branch decision.\n */\nexport function TracesErrorContent({ error, resource, errorTitle }: TracesErrorContentProps) {\n if (is401UnauthorizedError(error)) return <SessionExpired />;\n if (is403ForbiddenError(error)) return <PermissionDenied resource={resource} />;\n const parsed = error instanceof Error ? parseError(error) : undefined;\n return <ErrorState title={errorTitle} message={parsed?.error ?? 'Unknown error'} />;\n}\n","import { format } from 'date-fns';\nimport { CircleSlashIcon, ExternalLinkIcon } from 'lucide-react';\nimport type { TraceDatePreset } from '../types';\nimport { Button } from '@/ds/components/Button';\nimport { EmptyState } from '@/ds/components/EmptyState';\n\nconst PRESET_LABELS: Record<Exclude<TraceDatePreset, 'all' | 'custom'>, string> = {\n 'last-24h': 'the last 24 hours',\n 'last-3d': 'the last 3 days',\n 'last-7d': 'the last 7 days',\n 'last-14d': 'the last 14 days',\n 'last-30d': 'the last 30 days',\n};\n\nexport interface NoTracesInfoProps {\n datePreset?: TraceDatePreset;\n dateFrom?: Date;\n dateTo?: Date;\n}\n\nconst DATE_FORMAT = 'MMM d, yyyy HH:mm';\n\nconst RANGE_TIP = 'Pick a wider time range — older traces may fall outside the current window.';\n\nfunction describeRange({ datePreset, dateFrom, dateTo }: NoTracesInfoProps): { title: string; description: string } {\n if (datePreset && datePreset !== 'all' && datePreset !== 'custom') {\n return {\n title: `No traces for ${PRESET_LABELS[datePreset]}`,\n description: RANGE_TIP,\n };\n }\n if (dateFrom && dateTo) {\n return {\n title: `No traces between ${format(dateFrom, DATE_FORMAT)} and ${format(dateTo, DATE_FORMAT)}`,\n description: RANGE_TIP,\n };\n }\n if (dateFrom) {\n return {\n title: `No traces since ${format(dateFrom, DATE_FORMAT)}`,\n description: RANGE_TIP,\n };\n }\n return {\n title: 'No traces yet',\n description: 'Traces will appear here once agents, workflows, or tools are executed.',\n };\n}\n\nexport const NoTracesInfo = ({ datePreset, dateFrom, dateTo }: NoTracesInfoProps = {}) => {\n const { title, description } = describeRange({ datePreset, dateFrom, dateTo });\n return (\n <div className=\"flex h-full items-center justify-center\">\n <EmptyState\n iconSlot={<CircleSlashIcon />}\n titleSlot={title}\n descriptionSlot={description}\n actionSlot={\n <Button\n variant=\"ghost\"\n as=\"a\"\n href=\"https://mastra.ai/en/docs/observability/tracing/overview\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Tracing Documentation <ExternalLinkIcon />\n </Button>\n }\n />\n </div>\n );\n};\n","import type { LightSpanRecord } from '@mastra/core/storage';\nimport { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport type { UseQueryResult } from '@tanstack/react-query';\n\nconst IMMUTABLE_CACHE_TIME = 1000 * 60 * 60 * 24 * 30; // 30 days, massive cache, span data is immutable\n\nexport interface UseBranchArgs {\n traceId: string | null | undefined;\n spanId: string | null | undefined;\n depth?: number;\n}\n\nexport function useBranch({\n traceId,\n spanId,\n depth,\n}: UseBranchArgs): UseQueryResult<{ traceId: string; spans: LightSpanRecord[] } | null> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['branch', traceId, spanId, depth],\n queryFn: async () => {\n if (!traceId || !spanId) {\n throw new Error('traceId and spanId are required');\n }\n return client.getBranch({ traceId, spanId, depth });\n },\n enabled: !!traceId && !!spanId,\n staleTime: query => {\n const data = query.state.data;\n const isFinished = data?.spans.every(s => Boolean(s.endedAt));\n return isFinished ? IMMUTABLE_CACHE_TIME : 0;\n },\n });\n}\n","import type { LightSpanRecord } from '@mastra/core/storage';\nimport { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport type { UseQueryResult } from '@tanstack/react-query';\n\nconst IMMUTABLE_CACHE_TIME = 1000 * 60 * 60 * 24 * 30; // 30 days, massive cache, span data is immutable\n\nexport function useSpanDetail(\n traceId: string | null | undefined,\n spanId: string | null | undefined,\n): UseQueryResult<{ span: LightSpanRecord & { output?: unknown; result?: unknown } } | null> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['span-detail', traceId, spanId],\n queryFn: async () => {\n if (!traceId || !spanId) {\n throw new Error('Trace ID and Span ID are required');\n }\n return client.getSpan(traceId, spanId);\n },\n enabled: !!traceId && !!spanId,\n staleTime: query => {\n const data = query.state.data;\n\n if (data?.span?.endedAt) {\n return IMMUTABLE_CACHE_TIME;\n }\n\n return 0;\n },\n });\n}\n","import type { LightSpanRecord } from '@mastra/core/storage';\nimport { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport type { UseQueryResult } from '@tanstack/react-query';\n\nconst IMMUTABLE_CACHE_TIME = 1000 * 60 * 60 * 24 * 30; // 30 days, massive cache, span data is immutable\n\nexport function useTraceLightSpans(\n traceId: string | null | undefined,\n): UseQueryResult<{ traceId: string; spans: LightSpanRecord[] } | null> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['trace-light-spans', traceId],\n queryFn: async () => {\n if (!traceId) {\n throw new Error('Trace ID is required');\n }\n const res = await client.getTraceLight(traceId);\n return res;\n },\n enabled: !!traceId,\n staleTime: query => {\n const data = query.state.data;\n\n const isFinished = data?.spans.every(d => Boolean(d.endedAt));\n\n if (isFinished) {\n return IMMUTABLE_CACHE_TIME;\n }\n\n return 0;\n },\n });\n}\n","import type { LightSpanRecord } from '@mastra/core/storage';\nimport type { TraceListMode } from '../trace-filters';\nimport { useBranch } from './use-branch';\nimport { useTraceLightSpans } from './use-trace-light-spans';\n\nexport interface UseTraceOrBranchSpansArgs {\n traceId: string | null | undefined;\n /** Required when `listMode === 'branches'` — the anchor span identifying the displayed\n * subtree. The hook fetches `getBranch(traceId, anchorSpanId)`. Intra-panel span selection\n * is separate (the caller's `spanIdParam`); the anchor stays put while it changes. */\n anchorSpanId?: string | null;\n listMode: TraceListMode;\n depth?: number;\n}\n\nexport interface UseTraceOrBranchSpansResult {\n spans: LightSpanRecord[] | undefined;\n /** Set in branches mode; undefined in traces mode (which uses parentSpanId == null). */\n anchorSpanId: string | undefined;\n isLoading: boolean;\n isError: boolean;\n error: unknown;\n}\n\n/**\n * Unified data source for the trace/span detail panel. Returns trace spans (full tree from the\n * root) in traces mode, or branch spans (subtree rooted at `anchorSpanId`) in branches mode.\n * Only the active query fires; the inactive one is disabled via its `enabled` flag.\n */\nexport function useTraceOrBranchSpans({\n traceId,\n anchorSpanId,\n listMode,\n depth,\n}: UseTraceOrBranchSpansArgs): UseTraceOrBranchSpansResult {\n const isBranches = listMode === 'branches';\n\n const traceQuery = useTraceLightSpans(isBranches ? null : traceId);\n const branchQuery = useBranch({\n traceId: isBranches ? traceId : null,\n spanId: isBranches ? anchorSpanId : null,\n depth,\n });\n\n if (isBranches) {\n return {\n spans: branchQuery.data?.spans,\n anchorSpanId: anchorSpanId ?? undefined,\n isLoading: branchQuery.isLoading,\n isError: branchQuery.isError,\n error: branchQuery.error,\n };\n }\n\n return {\n spans: traceQuery.data?.spans,\n anchorSpanId: undefined,\n isLoading: traceQuery.isLoading,\n isError: traceQuery.isError,\n error: traceQuery.error,\n };\n}\n","import type { LightSpanRecord } from '@mastra/core/storage';\nimport { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport type { UseQueryResult } from '@tanstack/react-query';\n\nexport function useTraceSpans(\n traceId: string | null | undefined,\n): UseQueryResult<{ traceId: string; spans: LightSpanRecord[] } | null> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['trace-spans', traceId],\n queryFn: async () => {\n if (!traceId) {\n throw new Error('Trace ID is required');\n }\n const res = await client.getTrace(traceId);\n return res;\n },\n enabled: !!traceId,\n });\n}\n","import type {\n LightSpanRecord,\n ListBranchesArgs,\n ListBranchesResponse,\n ListTracesArgs,\n ListTracesResponse,\n} from '@mastra/core/storage';\nimport { useMastraClient } from '@mastra/react';\nimport type { InfiniteData } from '@tanstack/react-query';\nimport { useInfiniteQuery, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useEffect, useRef, useState } from 'react';\nimport type { TraceListMode } from '../trace-filters';\nimport { useInView } from '@/hooks/use-in-view';\nimport { is403ForbiddenError } from '@/lib/query-utils';\n\n/**\n * Per-MastraClient delta-polling support cache. Sticks once we observe a 501\n * or a page-0 response without `deltaCursor` (legacy server or store without\n * delta capability), so we don't re-probe on every mount.\n */\ntype DeltaSupport = 'unknown' | 'unsupported';\nconst deltaSupportByClient = new WeakMap<ReturnType<typeof useMastraClient>, DeltaSupport>();\n\n/** Tunables for live-tail polling. All fields optional — defaults below.\n * Platform consumers override individual fields to throttle traffic or\n * reshape the freshness/visibility trade-offs. */\nexport interface TracesPollingConfig {\n /** Interval between delta polls. Default 5_000ms. */\n deltaPollIntervalMs?: number;\n /** Refetch delay when the server signals `delta.hasMore` (chase remaining updates immediately). Default 100ms. */\n deltaChaseIntervalMs?: number;\n /** Max rows per delta poll. Server caps at 100. Default 100. */\n deltaLimit?: number;\n /** Page-mode refetch interval used when the configured store does not support delta polling. Default 10_000ms. */\n pageModeRefetchIntervalMs?: number;\n /** Periodic page-0 refetch interval while delta is active. Delta only delivers new rows, so this\n * is how we surface status flips (running → success/error) on rows already visible. Default 60_000ms. */\n page0StatusRefreshIntervalMs?: number;\n /** When the tab returns from being hidden and the last successful poll was older than this, the\n * cursor is treated as stale (ClickHouse delta tables TTL after 2 days; other stores may be more\n * aggressive). The infinite query is reset so page 0 refetches and delta resumes from a fresh\n * cursor. Default 900_000ms (15 min). */\n idleGuardThresholdMs?: number;\n /** Minimum visible duration for `isRefetching` after any query completes. On localhost a delta\n * poll can resolve in tens of ms — too brief for the spinner's 1s rotation to register visually,\n * and quick enough that React may batch the start/finish transitions. Pulsing for this duration\n * on completion (~144° of rotation at 400ms) makes each poll perceptible as a heartbeat.\n * Default 400ms. */\n minRefetchSpinMs?: number;\n /** Window during which a delta-arrived row's key stays in `recentlyAddedKeys` so the list view\n * can apply its `animate-row-highlight` class. Should match the CSS animation duration\n * (currently 1_000ms — see `index.css`). Default 1_000ms. */\n deltaHighlightMs?: number;\n}\n\nconst DEFAULT_POLLING_CONFIG: Required<TracesPollingConfig> = {\n deltaPollIntervalMs: 5_000,\n deltaChaseIntervalMs: 100,\n deltaLimit: 100,\n pageModeRefetchIntervalMs: 10_000,\n page0StatusRefreshIntervalMs: 60_000,\n idleGuardThresholdMs: 15 * 60_000,\n minRefetchSpinMs: 400,\n deltaHighlightMs: 1_000,\n};\n\n/** Returns true when the cursor should be considered stale and re-seeded.\n * Exported for testing — pure function of timestamps. */\nexport function shouldResetAfterIdle(lastSuccessAt: number, now: number, thresholdMs: number): boolean {\n if (lastSuccessAt === 0) return false;\n return now - lastSuccessAt > thresholdMs;\n}\n\nfunction isHttp501(error: unknown): boolean {\n return (error as { status?: number } | null)?.status === 501;\n}\n\ntype FetchTracesFnArgs = TracesFilters & {\n client: ReturnType<typeof useMastraClient>;\n mode?: 'page' | 'delta';\n page?: number;\n perPage?: number;\n after?: string;\n limit?: number;\n};\n\nconst fetchTracesFn = async ({\n client,\n mode,\n page,\n perPage,\n after,\n limit,\n filters,\n listMode = 'traces',\n}: FetchTracesFnArgs) => {\n const params =\n mode === 'delta'\n ? { mode: 'delta' as const, after, limit, filters }\n : { pagination: { page: page!, perPage: perPage! }, filters };\n\n if (listMode === 'branches') {\n return client.listBranches(params as ListBranchesArgs);\n }\n\n return client.listTraces(params as ListTracesArgs);\n};\n\nexport const TRACES_PER_PAGE = 25;\n\nexport interface TracesFilters {\n filters?: ListTracesArgs['filters'] | ListBranchesArgs['filters'];\n listMode?: TraceListMode;\n}\n\n/** Returns the next page number if the server indicates more pages are available. */\nexport function getTracesNextPageParam(\n lastPage: ListTracesResponse | ListBranchesResponse | undefined,\n _allPages: unknown,\n lastPageParam: number,\n) {\n if (lastPage?.pagination?.hasMore) {\n return lastPageParam + 1;\n }\n return undefined;\n}\n\ntype TracesPageResponse = ListTracesResponse | ListBranchesResponse;\n\nfunction getPageSpans(page: TracesPageResponse) {\n if ('branches' in page) return page.branches ?? [];\n return page.spans ?? [];\n}\n\n/** Deduplicates trace/branch rows by traceId + spanId across all loaded pages.\n * Also surfaces page 0's deltaCursor so the live-tail query can read it reactively. */\nexport function selectUniqueTraces(data: { pages: TracesPageResponse[] }): {\n spans: LightSpanRecord[];\n deltaCursor: string | undefined;\n} {\n const seen = new Set<string>();\n const spans = data.pages\n .flatMap(page => getPageSpans(page))\n .filter(span => {\n const key = `${span.traceId}:${span.spanId}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n\n return { spans, deltaCursor: data.pages[0]?.deltaCursor };\n}\n\n/** Replaces existing page-0 rows in place (keyed by traceId:spanId) with\n * refreshed copies from the server. Rows the server doesn't return are kept\n * as-is so delta-accumulated rows that have aged off the server's page 0\n * aren't dropped from the UI. New rows aren't added here — delta polling\n * delivers those. */\nexport function refreshPage0Rows(\n old: InfiniteData<TracesPageResponse> | undefined,\n refreshed: ListTracesResponse | ListBranchesResponse,\n listMode: TraceListMode,\n): InfiniteData<TracesPageResponse> | undefined {\n if (!old || old.pages.length === 0) return old;\n const [firstPage, ...rest] = old.pages;\n\n const refreshedRows =\n listMode === 'branches' && 'branches' in refreshed\n ? (refreshed.branches ?? [])\n : 'spans' in refreshed\n ? (refreshed.spans ?? [])\n : [];\n\n if (refreshedRows.length === 0) return old;\n\n const refreshedByKey = new Map<string, (typeof refreshedRows)[number]>();\n for (const row of refreshedRows) {\n refreshedByKey.set(`${row.traceId}:${row.spanId}`, row);\n }\n\n let updatedFirst: TracesPageResponse;\n if (listMode === 'branches' && 'branches' in firstPage) {\n const updated = (firstPage.branches ?? []).map(existing => {\n const fresh = refreshedByKey.get(`${existing.traceId}:${existing.spanId}`);\n return fresh ?? existing;\n });\n updatedFirst = { ...firstPage, branches: updated };\n } else if ('spans' in firstPage) {\n const updated = (firstPage.spans ?? []).map(existing => {\n const fresh = refreshedByKey.get(`${existing.traceId}:${existing.spanId}`);\n return fresh ?? existing;\n });\n updatedFirst = { ...firstPage, spans: updated };\n } else {\n return old;\n }\n\n return { ...old, pages: [updatedFirst, ...rest] };\n}\n\n/** Stable `startedAt DESC` sort matching the server's default page-mode\n * ordering for both list endpoints. Rows missing `startedAt` sink to the\n * bottom (compared as time 0). */\nfunction sortRowsByStartedAtDesc<T extends { startedAt?: unknown }>(rows: T[]): T[] {\n return [...rows].sort((a, b) => {\n const aTime = a.startedAt ? new Date(a.startedAt as string | number | Date).getTime() : 0;\n const bTime = b.startedAt ? new Date(b.startedAt as string | number | Date).getTime() : 0;\n return bTime - aTime;\n });\n}\n\n/** Prepends delta-mode rows into page 0 and advances its deltaCursor.\n * Delta responses come back in server cursor order (insertion order into\n * the per-store delta index), not the `startedAt DESC` order page-mode\n * uses — so we re-sort the merged page 0 to match what the user sees on\n * a fresh page-mode load. Cross-page duplication is handled later by\n * selectUniqueTraces. */\nexport function mergeDeltaIntoPage0(\n old: InfiniteData<TracesPageResponse> | undefined,\n delta: ListTracesResponse | ListBranchesResponse,\n listMode: TraceListMode,\n): InfiniteData<TracesPageResponse> | undefined {\n if (!old || old.pages.length === 0) return old;\n const [firstPage, ...rest] = old.pages;\n const nextCursor = delta.deltaCursor ?? firstPage.deltaCursor;\n\n let updatedFirst: TracesPageResponse;\n if (listMode === 'branches' && 'branches' in firstPage) {\n const newRows = (delta as ListBranchesResponse).branches ?? [];\n updatedFirst = {\n ...firstPage,\n branches: sortRowsByStartedAtDesc([...newRows, ...(firstPage.branches ?? [])]),\n deltaCursor: nextCursor,\n };\n } else if ('spans' in firstPage) {\n const newRows = (delta as ListTracesResponse).spans ?? [];\n updatedFirst = {\n ...firstPage,\n spans: sortRowsByStartedAtDesc([...newRows, ...(firstPage.spans ?? [])]),\n deltaCursor: nextCursor,\n };\n } else {\n return old;\n }\n\n return { ...old, pages: [updatedFirst, ...rest] };\n}\n\nexport interface UseTracesArgs extends TracesFilters {\n /** Optional overrides for the live-tail polling tunables. Any omitted fields fall back to the\n * built-in defaults; pass only what you want to change. */\n polling?: TracesPollingConfig;\n}\n\ninterface UseTracesReturn {\n data: { spans: LightSpanRecord[]; deltaCursor: string | undefined } | undefined;\n hasNextPage: boolean;\n isFetchingNextPage: boolean;\n fetchNextPage: () => void;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n setEndOfListElement: (node: HTMLDivElement | null) => void;\n isRefetching: boolean;\n autoRefetch: boolean;\n setAutoRefetch: (v: boolean) => void;\n recentlyAddedKeys: Set<string>;\n dataUpdatedAt: number;\n errorUpdatedAt: number;\n isFetching: boolean;\n isSuccess: boolean;\n fetchStatus: 'idle' | 'fetching' | 'paused';\n refetch: () => void;\n}\n\nexport const useTraces: (args: UseTracesArgs) => UseTracesReturn = ({\n filters,\n listMode = 'traces',\n polling = {},\n}: UseTracesArgs) => {\n const {\n deltaPollIntervalMs = DEFAULT_POLLING_CONFIG.deltaPollIntervalMs,\n deltaChaseIntervalMs = DEFAULT_POLLING_CONFIG.deltaChaseIntervalMs,\n deltaLimit = DEFAULT_POLLING_CONFIG.deltaLimit,\n pageModeRefetchIntervalMs = DEFAULT_POLLING_CONFIG.pageModeRefetchIntervalMs,\n page0StatusRefreshIntervalMs = DEFAULT_POLLING_CONFIG.page0StatusRefreshIntervalMs,\n idleGuardThresholdMs = DEFAULT_POLLING_CONFIG.idleGuardThresholdMs,\n minRefetchSpinMs = DEFAULT_POLLING_CONFIG.minRefetchSpinMs,\n deltaHighlightMs = DEFAULT_POLLING_CONFIG.deltaHighlightMs,\n } = polling;\n const client = useMastraClient();\n const queryClient = useQueryClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const [deltaSupport, setDeltaSupport] = useState<DeltaSupport>(() => deltaSupportByClient.get(client) ?? 'unknown');\n const deltaUnsupported = deltaSupport === 'unsupported';\n\n // When false, all automatic polling stops: delta polls, status refresh,\n // idle-guard resets, and the page-mode fallback interval. Manual `resync`\n // still works. Session-scoped (no persistence across mounts).\n const [autoRefetch, setAutoRefetch] = useState(true);\n\n // Keys (`traceId:spanId`) of rows that arrived via the most recent delta\n // poll(s). The list view reads this to apply a temporary highlight class\n // for deltaHighlightMs, then they auto-expire. Resets on filter/listMode\n // change since a new query key spawns a fresh list.\n const [recentlyAddedKeys, setRecentlyAddedKeys] = useState<Set<string>>(() => new Set());\n useEffect(() => {\n setRecentlyAddedKeys(new Set());\n }, [listMode, filters]);\n\n const tracesQueryKey = ['traces', listMode, filters] as const;\n\n const query = useInfiniteQuery({\n queryKey: tracesQueryKey,\n queryFn: ({ pageParam }) =>\n fetchTracesFn({\n client,\n page: pageParam,\n perPage: TRACES_PER_PAGE,\n filters,\n listMode,\n }),\n initialPageParam: 0,\n getNextPageParam: getTracesNextPageParam,\n select: selectUniqueTraces,\n retry: false,\n // Disable polling on 403 to prevent flickering.\n // Fall back to page-mode polling only when delta isn't running.\n refetchInterval: q => {\n if (is403ForbiddenError(q.state.error)) return false;\n if (!autoRefetch) return false;\n return deltaUnsupported ? pageModeRefetchIntervalMs : false;\n },\n });\n\n const cursor = query.data?.deltaCursor;\n\n // If page 0 came back without a deltaCursor, the server/store doesn't\n // support delta polling. Pin the client to 'unsupported' so the infinite\n // query resumes page-mode polling and we stop probing.\n useEffect(() => {\n if (query.isSuccess && cursor === undefined && deltaSupport === 'unknown') {\n deltaSupportByClient.set(client, 'unsupported');\n setDeltaSupport('unsupported');\n }\n }, [query.isSuccess, cursor, deltaSupport, client]);\n\n const deltaQuery = useQuery({\n queryKey: ['traces-delta', listMode, filters] as const,\n queryFn: () => {\n const current = queryClient.getQueryData<InfiniteData<TracesPageResponse>>(tracesQueryKey)?.pages[0]?.deltaCursor;\n if (!current) return null;\n return fetchTracesFn({\n client,\n mode: 'delta',\n after: current,\n limit: deltaLimit,\n filters,\n listMode,\n });\n },\n enabled: !!cursor && !deltaUnsupported && autoRefetch,\n retry: false,\n refetchInterval: q => {\n if (q.state.error) return false;\n const data = q.state.data as ListTracesResponse | ListBranchesResponse | null | undefined;\n if (data?.delta?.hasMore) return deltaChaseIntervalMs;\n return deltaPollIntervalMs;\n },\n });\n\n // Merge new delta rows into the infinite-query cache. Also captures the\n // arrived keys into `recentlyAddedKeys` for deltaHighlightMs so the UI\n // can briefly distinguish them. The cleanup timer is intentionally NOT\n // tied to the effect lifecycle — if a newer delta arrives first, we still\n // want each prior batch to expire on its own schedule.\n useEffect(() => {\n const result = deltaQuery.data;\n if (!result) return;\n queryClient.setQueryData<InfiniteData<TracesPageResponse>>(tracesQueryKey, old =>\n mergeDeltaIntoPage0(old, result, listMode),\n );\n\n const newRows =\n listMode === 'branches' && 'branches' in result\n ? (result.branches ?? [])\n : 'spans' in result\n ? (result.spans ?? [])\n : [];\n if (newRows.length === 0) return;\n const keys = newRows.map(r => `${r.traceId}:${r.spanId ?? ''}`);\n setRecentlyAddedKeys(prev => {\n const next = new Set(prev);\n for (const k of keys) next.add(k);\n return next;\n });\n setTimeout(() => {\n setRecentlyAddedKeys(prev => {\n const next = new Set(prev);\n for (const k of keys) next.delete(k);\n return next;\n });\n }, deltaHighlightMs);\n // tracesQueryKey is a new array each render but its contents drive cache keying;\n // depending on its members (listMode/filters) is enough.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [deltaQuery.data, queryClient, listMode, filters, deltaHighlightMs]);\n\n // A 501 means the server is too old (or store doesn't support delta) — pin\n // 'unsupported' so the delta query disables and page-mode polling resumes.\n useEffect(() => {\n if (isHttp501(deltaQuery.error)) {\n deltaSupportByClient.set(client, 'unsupported');\n setDeltaSupport('unsupported');\n }\n }, [deltaQuery.error, client]);\n\n // Periodic page-0 refresh to surface status updates on visible rows\n // (running → success/error). Only runs while delta is the primary polling\n // mechanism; otherwise the infinite query's own refetchInterval covers it.\n const statusRefreshQuery = useQuery({\n queryKey: ['traces-status-refresh', listMode, filters] as const,\n queryFn: () =>\n fetchTracesFn({\n client,\n page: 0,\n perPage: TRACES_PER_PAGE,\n filters,\n listMode,\n }),\n enabled: !!cursor && !deltaUnsupported && autoRefetch,\n refetchInterval: page0StatusRefreshIntervalMs,\n refetchOnMount: false,\n retry: false,\n });\n\n useEffect(() => {\n const result = statusRefreshQuery.data;\n if (!result) return;\n queryClient.setQueryData<InfiniteData<TracesPageResponse>>(tracesQueryKey, old =>\n refreshPage0Rows(old, result, listMode),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [statusRefreshQuery.data, queryClient, listMode, filters]);\n\n // Idle guard: when the tab returns from being hidden, check how long it's\n // been since the last successful poll. If past the threshold, reset the\n // infinite query so page 0 refetches and the cursor is re-seeded.\n const lastSuccessAtRef = useRef(0);\n useEffect(() => {\n const ts = Math.max(query.dataUpdatedAt, deltaQuery.dataUpdatedAt, statusRefreshQuery.dataUpdatedAt);\n if (ts > lastSuccessAtRef.current) {\n lastSuccessAtRef.current = ts;\n }\n }, [query.dataUpdatedAt, deltaQuery.dataUpdatedAt, statusRefreshQuery.dataUpdatedAt]);\n\n // Track autoRefetch in a ref so the visibility listener (attached once)\n // reads the current value without needing to re-attach.\n const autoRefetchRef = useRef(autoRefetch);\n useEffect(() => {\n autoRefetchRef.current = autoRefetch;\n }, [autoRefetch]);\n\n useEffect(() => {\n const handler = () => {\n if (document.visibilityState !== 'visible') return;\n if (!autoRefetchRef.current) return;\n if (!shouldResetAfterIdle(lastSuccessAtRef.current, Date.now(), idleGuardThresholdMs)) return;\n void queryClient.resetQueries({ queryKey: ['traces', listMode, filters] });\n };\n document.addEventListener('visibilitychange', handler);\n return () => document.removeEventListener('visibilitychange', handler);\n }, [queryClient, listMode, filters, idleGuardThresholdMs]);\n\n const { hasNextPage, isFetchingNextPage, fetchNextPage } = query;\n\n useEffect(() => {\n if (isEndOfListInView && hasNextPage && !isFetchingNextPage) {\n void fetchNextPage();\n }\n }, [isEndOfListInView, hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n // `isRefetching` aggregates every active fetch — page-mode (initial, next\n // page, manual resync, idle reset), the 60s page-0 status refresh, AND the\n // delta polls — so a spinner bound to it acts as a heartbeat indicator.\n //\n // Short polls (e.g. delta on localhost) can resolve in tens of ms — too\n // brief for `animate-spin` (1s/rotation) to register visually, and quick\n // enough that React may batch the start/finish transitions so we never\n // even observe `isFetching: true`. So we also watch every query's\n // data/errorUpdatedAt; any advance pulses `isRefetching` true for at least\n // minRefetchSpinMs, which is ~144° of rotation — clearly perceptible.\n const isFetchingAny = query.isFetching || statusRefreshQuery.isFetching || deltaQuery.isFetching;\n const lastActivityAt = Math.max(\n query.dataUpdatedAt,\n query.errorUpdatedAt,\n deltaQuery.dataUpdatedAt,\n deltaQuery.errorUpdatedAt,\n statusRefreshQuery.dataUpdatedAt,\n statusRefreshQuery.errorUpdatedAt,\n );\n const [pulse, setPulse] = useState(false);\n const prevActivityAtRef = useRef(lastActivityAt);\n useEffect(() => {\n if (lastActivityAt > prevActivityAtRef.current) {\n prevActivityAtRef.current = lastActivityAt;\n setPulse(true);\n const t = setTimeout(() => setPulse(false), minRefetchSpinMs);\n return () => clearTimeout(t);\n }\n }, [lastActivityAt, minRefetchSpinMs]);\n const isRefetching = isFetchingAny || pulse;\n\n return {\n ...query,\n setEndOfListElement,\n isRefetching,\n autoRefetch,\n setAutoRefetch,\n recentlyAddedKeys,\n };\n};\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\n\nexport const useTags = () => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['observability-tags'],\n queryFn: async () => {\n try {\n return await client.getTags();\n } catch {\n // Storage provider may not support tag discovery (e.g. LibSQL)\n return { tags: [] };\n }\n },\n select: data => data?.tags ?? [],\n retry: false,\n });\n};\n","import type { EntityType } from '@mastra/core/observability';\nimport { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { ROOT_ENTITY_TYPE_OPTIONS } from '@/domains/traces/trace-filters';\n\ntype UseEntityNamesOptions = {\n entityType?: EntityType;\n rootOnly?: boolean;\n};\n\nexport const useEntityNames = ({ entityType, rootOnly = false }: UseEntityNamesOptions = {}) => {\n const client = useMastraClient();\n\n // Mirror the queryFn branches so the cache key reflects what the server\n // actually returns. rootOnly only matters when entityType is not set; when\n // entityType is set, the query ignores rootOnly entirely.\n const queryKey = entityType\n ? ['observability-entity-names', 'by-type', entityType]\n : ['observability-entity-names', 'all', rootOnly ? 'root-only' : 'all-types'];\n\n return useQuery({\n queryKey,\n queryFn: async () => {\n try {\n if (entityType) {\n return await client.getEntityNames({ entityType });\n }\n\n if (!rootOnly) {\n return await client.getEntityNames();\n }\n\n const responses = await Promise.all(\n ROOT_ENTITY_TYPE_OPTIONS.map(option => client.getEntityNames({ entityType: option.entityType })),\n );\n\n return {\n names: Array.from(new Set(responses.flatMap(response => response?.names ?? []))).sort(),\n };\n } catch {\n return { names: [] };\n }\n },\n select: data => data?.names ?? [],\n retry: false,\n });\n};\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\n\nexport const useEnvironments = () => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['observability-environments'],\n queryFn: async () => {\n try {\n return await client.getEnvironments();\n } catch {\n return { environments: [] };\n }\n },\n select: data => data?.environments ?? [],\n retry: false,\n });\n};\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\n\nexport const useServiceNames = () => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['observability-service-names'],\n queryFn: async () => {\n try {\n return await client.getServiceNames();\n } catch {\n return { serviceNames: [] };\n }\n },\n select: data => data?.serviceNames ?? [],\n retry: false,\n });\n};\n","import type { LightSpanRecord } from '@mastra/core/storage';\nimport { useMemo } from 'react';\nimport { formatHierarchicalSpans } from '../components/format-hierarchical-spans';\nimport { getAllSpanIds } from './get-all-span-ids';\n\n/**\n * Derives previous/next span navigation handlers from a trace's lightweight spans.\n * Returns undefined for handlers that are out of bounds so the consumer can render disabled UI.\n */\nexport function useTraceSpanNavigation(\n lightSpans: LightSpanRecord[] | undefined,\n featuredSpanId: string | null | undefined,\n onSpanChange: (spanId: string) => void,\n) {\n const timelineSpanIds = useMemo(() => getAllSpanIds(formatHierarchicalSpans(lightSpans ?? [])), [lightSpans]);\n\n const featuredSpanIdx = featuredSpanId ? timelineSpanIds.indexOf(featuredSpanId) : -1;\n\n const handlePreviousSpan = featuredSpanIdx > 0 ? () => onSpanChange(timelineSpanIds[featuredSpanIdx - 1]) : undefined;\n\n const handleNextSpan =\n featuredSpanIdx >= 0 && featuredSpanIdx < timelineSpanIds.length - 1\n ? () => onSpanChange(timelineSpanIds[featuredSpanIdx + 1])\n : undefined;\n\n return { handlePreviousSpan, handleNextSpan, timelineSpanIds };\n}\n","import { useMemo } from 'react';\n\n/**\n * Derives previous/next *trace* navigation handlers from the current traces list and the featured\n * row. Returns undefined for handlers that are out of bounds so the consumer can render\n * disabled UI. Mirrors the shape of `useTraceSpanNavigation`.\n *\n * In branches mode rows share a `traceId`, so the consumer can pass a `featuredSpanId` to\n * disambiguate the active row (and receive the new row's `spanId` on prev/next). In traces\n * mode `featuredSpanId` should be null/undefined; only the `traceId` is used.\n */\nexport function useTraceListNavigation<T extends { traceId: string; spanId?: string | null }>(\n traces: T[],\n featuredTraceId: string | undefined,\n featuredSpanId: string | null | undefined,\n onTraceChange: (traceId: string, spanId?: string) => void,\n): {\n featuredTraceIdx: number;\n handlePreviousTrace: (() => void) | undefined;\n handleNextTrace: (() => void) | undefined;\n} {\n const featuredTraceIdx = useMemo(\n () =>\n featuredTraceId\n ? traces.findIndex(\n t => t.traceId === featuredTraceId && (featuredSpanId == null || t.spanId === featuredSpanId),\n )\n : -1,\n [traces, featuredTraceId, featuredSpanId],\n );\n\n // Only forward a spanId on nav when the consumer indicated it's part of the row identity\n // (branches mode). In traces mode `featuredSpanId` is null, so prev/next just sets the new\n // `traceId` and the consumer's handler clears any stale spanId from the URL.\n const passSpanId = featuredSpanId != null;\n const navigateTo = (row: T) => onTraceChange(row.traceId, passSpanId ? (row.spanId ?? undefined) : undefined);\n\n const handlePreviousTrace = featuredTraceIdx > 0 ? () => navigateTo(traces[featuredTraceIdx - 1]) : undefined;\n\n const handleNextTrace =\n featuredTraceIdx >= 0 && featuredTraceIdx < traces.length - 1\n ? () => navigateTo(traces[featuredTraceIdx + 1])\n : undefined;\n\n return { featuredTraceIdx, handlePreviousTrace, handleNextTrace };\n}\n","import { useCallback, useMemo, useRef } from 'react';\nimport type { SpanTab, TraceDatePreset } from '../index';\nimport {\n ROOT_ENTITY_TYPE_OPTIONS,\n TRACE_ANCHOR_SPAN_ID_PARAM,\n TRACE_DATE_FROM_PARAM,\n TRACE_DATE_PRESET_PARAM,\n TRACE_DATE_PRESET_VALUES,\n TRACE_DATE_TO_PARAM,\n TRACE_PROPERTY_FILTER_FIELD_IDS,\n TRACE_LIST_MODE_PARAM,\n TRACE_LIST_MODE_VALUES,\n TRACE_PROPERTY_FILTER_PARAM_BY_FIELD,\n TRACE_ROOT_ENTITY_TYPE_PARAM,\n TRACE_STATUS_PARAM,\n TRACE_STATUS_VALUES,\n applyTracePropertyFilterTokens,\n getTracePropertyFilterTokens,\n} from '../trace-filters';\nimport type { EntityOptions, TraceListMode, TraceStatusFilter } from '../trace-filters';\nimport type { PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\nconst TRACE_ID_PARAM = 'traceId';\nconst SPAN_ID_PARAM = 'spanId';\nconst TAB_PARAM = 'tab';\nconst SCORE_ID_PARAM = 'scoreId';\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\nconst PRESET_MS: Partial<Record<TraceDatePreset, number>> = {\n 'last-24h': DAY_MS,\n 'last-3d': 3 * DAY_MS,\n 'last-7d': 7 * DAY_MS,\n 'last-14d': 14 * DAY_MS,\n 'last-30d': 30 * DAY_MS,\n};\n\n/** Mutates `params` in place to drop the featured trace/span/tab/score selection.\n * Used whenever a filter changes — selection no longer makes sense in the new result set. */\nfunction clearSelectionParams(params: URLSearchParams) {\n params.delete(TRACE_ID_PARAM);\n params.delete(SPAN_ID_PARAM);\n params.delete(TRACE_ANCHOR_SPAN_ID_PARAM);\n params.delete(TAB_PARAM);\n params.delete(SCORE_ID_PARAM);\n}\n\n/** Minimal interface compatible with react-router's `setSearchParams`. */\nexport type SetURLSearchParamsLike = (\n next: URLSearchParams | ((prev: URLSearchParams) => URLSearchParams),\n options?: { replace?: boolean; preventScrollReset?: boolean; state?: unknown },\n) => void;\n\nexport interface UseTraceUrlStateOptions {\n /** Called after `handleRemoveAll` clears all filter URL params. Use this to reset page-local\n * UI state (e.g. a \"group by thread\" toggle) without wrapping the handler. */\n onRemoveAll?: () => void;\n}\n\nexport interface UseTraceUrlStateResult {\n // Raw search params passed through for convenience\n searchParams: URLSearchParams;\n setSearchParams: SetURLSearchParamsLike;\n\n // Date state (derived from URL)\n datePreset: TraceDatePreset;\n selectedDateFrom: Date | undefined;\n selectedDateTo: Date | undefined;\n /** Synchronously-updated ref of the latest preset. Used to ignore onDateChange callbacks\n * the date picker fires after a non-custom preset switch. */\n datePresetRef: React.MutableRefObject<TraceDatePreset>;\n\n // Selection state (derived from URL)\n traceIdParam: string | undefined;\n spanIdParam: string | undefined;\n /** Branch-mode only: the anchor span that defines the displayed subtree. Stable while the\n * user navigates between spans inside the panel (which only changes `spanIdParam`). */\n anchorSpanIdParam: string | undefined;\n spanTabParam: SpanTab | undefined;\n scoreIdParam: string | undefined;\n\n // Filter state (derived from URL)\n listMode: TraceListMode;\n selectedEntityOption: EntityOptions | undefined;\n selectedStatus: TraceStatusFilter | undefined;\n filterTokens: PropertyFilterToken[];\n\n // URL-modifying handlers\n /**\n * Selects a row. In traces mode pass just `traceId` (and optionally a `spanId` for an\n * initial span selection in the panel). In branches mode also pass `anchorSpanId` — the\n * branch identity, kept stable while the user navigates between spans inside the panel.\n * Branch rows are identified by (traceId, anchorSpanId); trace rows by traceId alone.\n */\n handleTraceClick: (traceId: string, spanId?: string, anchorSpanId?: string) => void;\n /** Convenience: clears the featured trace selection. Equivalent to `handleTraceClick('')`. */\n handleTraceClose: () => void;\n handleSpanChange: (spanId: string | null) => void;\n /** Convenience: clears the featured span selection. Equivalent to `handleSpanChange(null)`. */\n handleSpanClose: () => void;\n handleSpanTabChange: (tab: SpanTab) => void;\n /** Selects a span AND switches its panel tab in a single URL update. Use when both must change\n * from one interaction (e.g. \"Evaluate Trace\"). Calling `handleSpanChange` + `handleSpanTabChange`\n * separately races: each functional `setSearchParams` updater reads the same pre-update\n * `searchParams` snapshot, so the second navigation overwrites the first (last write wins) and one\n * of the two changes is lost on the first click. */\n handleSpanChangeWithTab: (spanId: string, tab: SpanTab) => void;\n handleScoreChange: (scoreId: string | null) => void;\n /** Switches the list view between traces and branches. Clears the current selection. */\n handleListModeChange: (mode: TraceListMode) => void;\n handleFilterTokensChange: (nextTokens: PropertyFilterToken[]) => void;\n handleDateChange: (value: Date | undefined, type: 'from' | 'to') => void;\n handleDatePresetChange: (preset: TraceDatePreset) => void;\n handleRemoveAll: () => void;\n\n /** Lower-level helper used by `handleClear`: writes a token set and clears the trace/span selection. */\n applyFilterTokens: (tokens: PropertyFilterToken[]) => void;\n}\n\n/**\n * Owns all URL-derived state and URL-modifying handlers for the traces page. Routing-agnostic —\n * pass `searchParams` and `setSearchParams` from whichever router the consumer uses.\n *\n * Stays focused on URL state: localStorage save/restore, filter discovery, and the error-view\n * short-circuit are intentionally NOT part of this hook so consumers can swap them independently.\n */\nexport function useTraceUrlState(\n searchParams: URLSearchParams,\n setSearchParams: SetURLSearchParamsLike,\n options?: UseTraceUrlStateOptions,\n): UseTraceUrlStateResult {\n const { onRemoveAll } = options ?? {};\n const datePreset = useMemo<TraceDatePreset>(() => {\n const value = searchParams.get(TRACE_DATE_PRESET_PARAM);\n return value && TRACE_DATE_PRESET_VALUES.has(value as TraceDatePreset) ? (value as TraceDatePreset) : 'last-24h';\n }, [searchParams]);\n\n const dateFromParamRaw = searchParams.get(TRACE_DATE_FROM_PARAM);\n const dateToParamRaw = searchParams.get(TRACE_DATE_TO_PARAM);\n\n const selectedDateFrom = useMemo(() => {\n if (datePreset === 'custom') {\n if (!dateFromParamRaw) return undefined;\n const parsed = new Date(dateFromParamRaw);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }\n if (datePreset === 'all') return undefined;\n const ms = PRESET_MS[datePreset];\n return ms ? new Date(Date.now() - ms) : undefined;\n }, [datePreset, dateFromParamRaw]);\n\n const selectedDateTo = useMemo(() => {\n if (datePreset !== 'custom' || !dateToParamRaw) return undefined;\n const parsed = new Date(dateToParamRaw);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }, [datePreset, dateToParamRaw]);\n\n // Track the latest preset synchronously so onDateChange callbacks that follow\n // a non-custom preset switch can be ignored (router setSearchParams captures\n // searchParams in its closure, so multiple synchronous calls would otherwise\n // clobber each other).\n const datePresetRef = useRef(datePreset);\n datePresetRef.current = datePreset;\n\n const traceIdParam = searchParams.get(TRACE_ID_PARAM) || undefined;\n const spanIdParam = searchParams.get(SPAN_ID_PARAM) || undefined;\n /** Branch-mode only: identifies which branch (anchor span) the panel is viewing. Stays put\n * while the user navigates between spans inside the panel (which only changes spanIdParam). */\n const anchorSpanIdParam = searchParams.get(TRACE_ANCHOR_SPAN_ID_PARAM) || undefined;\n const tabParam = searchParams.get(TAB_PARAM);\n const spanTabParam: SpanTab | undefined =\n tabParam === 'scoring'\n ? 'scoring'\n : tabParam === 'feedback'\n ? 'feedback'\n : tabParam === 'details'\n ? 'details'\n : undefined;\n const scoreIdParam = searchParams.get(SCORE_ID_PARAM) || undefined;\n\n const listMode = useMemo<TraceListMode>(() => {\n const value = searchParams.get(TRACE_LIST_MODE_PARAM);\n return value && TRACE_LIST_MODE_VALUES.has(value as TraceListMode) ? (value as TraceListMode) : 'traces';\n }, [searchParams]);\n const selectedEntityOption = useMemo(\n () => ROOT_ENTITY_TYPE_OPTIONS.find(option => option.entityType === searchParams.get(TRACE_ROOT_ENTITY_TYPE_PARAM)),\n [searchParams],\n );\n const selectedStatus = useMemo<TraceStatusFilter | undefined>(() => {\n const value = searchParams.get(TRACE_STATUS_PARAM);\n return value && TRACE_STATUS_VALUES.has(value as TraceStatusFilter) ? (value as TraceStatusFilter) : undefined;\n }, [searchParams]);\n const filterTokens = useMemo(() => getTracePropertyFilterTokens(searchParams), [searchParams]);\n\n const handleTraceClick = useCallback(\n (traceId: string, spanId?: string, anchorSpanId?: string) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (traceId) {\n next.set(TRACE_ID_PARAM, traceId);\n } else {\n next.delete(TRACE_ID_PARAM);\n }\n if (spanId) {\n next.set(SPAN_ID_PARAM, spanId);\n } else {\n next.delete(SPAN_ID_PARAM);\n }\n if (anchorSpanId) {\n next.set(TRACE_ANCHOR_SPAN_ID_PARAM, anchorSpanId);\n } else {\n next.delete(TRACE_ANCHOR_SPAN_ID_PARAM);\n }\n next.delete(TAB_PARAM);\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleTraceClose = useCallback(() => handleTraceClick(''), [handleTraceClick]);\n\n const handleSpanChange = useCallback(\n (spanId: string | null) => {\n const currentSpanId = searchParams.get(SPAN_ID_PARAM) || null;\n if (spanId === currentSpanId) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (spanId) {\n next.set(SPAN_ID_PARAM, spanId);\n } else {\n next.delete(SPAN_ID_PARAM);\n }\n // Tab + score are per-span; they'd point at the previous span's context otherwise.\n next.delete(TAB_PARAM);\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleSpanClose = useCallback(() => handleSpanChange(null), [handleSpanChange]);\n\n const handleSpanTabChange = useCallback(\n (tab: SpanTab) => {\n const currentTab = searchParams.get(TAB_PARAM) || null;\n if (tab === currentTab) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (tab && tab !== 'details') {\n next.set(TAB_PARAM, tab);\n } else {\n next.delete(TAB_PARAM);\n }\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleSpanChangeWithTab = useCallback(\n (spanId: string, tab: SpanTab) => {\n const nextTab = tab && tab !== 'details' ? tab : null;\n // No-op guard (same pattern as the sibling handlers): skip the navigation only when span,\n // tab AND score are already exactly what this call would produce.\n const isNoOp =\n spanId === (searchParams.get(SPAN_ID_PARAM) || null) &&\n nextTab === (searchParams.get(TAB_PARAM) || null) &&\n !searchParams.get(SCORE_ID_PARAM);\n if (isNoOp) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n next.set(SPAN_ID_PARAM, spanId);\n if (nextTab) {\n next.set(TAB_PARAM, nextTab);\n } else {\n next.delete(TAB_PARAM);\n }\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleScoreChange = useCallback(\n (scoreId: string | null) => {\n const currentScoreId = searchParams.get(SCORE_ID_PARAM) || null;\n if (scoreId === currentScoreId) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (scoreId) {\n next.set(SCORE_ID_PARAM, scoreId);\n } else {\n next.delete(SCORE_ID_PARAM);\n }\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const applyFilterTokens = useCallback(\n (tokens: PropertyFilterToken[]) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n // applyTracePropertyFilterTokens wipes all filter params (including\n // rootEntityType / status) and re-adds them in `nextTokens` order so\n // URL insertion order == filter creation order.\n applyTracePropertyFilterTokens(next, tokens);\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleFilterTokensChange = applyFilterTokens;\n\n // Only relevant for 'custom' — the picker also fires onDateChange after a\n // non-custom preset switch, which we ignore to avoid racing URL updates.\n const handleDateChange = useCallback(\n (value: Date | undefined, type: 'from' | 'to') => {\n if (datePresetRef.current !== 'custom') return;\n const param = type === 'from' ? TRACE_DATE_FROM_PARAM : TRACE_DATE_TO_PARAM;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (value) {\n next.set(param, value.toISOString());\n } else {\n next.delete(param);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleDatePresetChange = useCallback(\n (preset: TraceDatePreset) => {\n // Update ref synchronously so any onDateChange fired by the picker in the\n // same tick (for non-custom presets) sees the new value and skips.\n datePresetRef.current = preset;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (preset === 'last-24h') {\n // Default — clear all date params.\n next.delete(TRACE_DATE_PRESET_PARAM);\n next.delete(TRACE_DATE_FROM_PARAM);\n next.delete(TRACE_DATE_TO_PARAM);\n } else if (preset === 'custom') {\n next.set(TRACE_DATE_PRESET_PARAM, 'custom');\n // Keep existing dateFrom/dateTo for the user to adjust.\n } else {\n // `last-*` or 'all' — only the preset is stored; dates are derived.\n next.set(TRACE_DATE_PRESET_PARAM, preset);\n next.delete(TRACE_DATE_FROM_PARAM);\n next.delete(TRACE_DATE_TO_PARAM);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleListModeChange = useCallback(\n (mode: TraceListMode) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (mode === 'traces') {\n next.delete(TRACE_LIST_MODE_PARAM);\n } else {\n next.set(TRACE_LIST_MODE_PARAM, mode);\n }\n // Clear selection: rows from the previous mode don't map cleanly to the new mode.\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleRemoveAll = useCallback(() => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n next.delete(TRACE_LIST_MODE_PARAM);\n next.delete(TRACE_ROOT_ENTITY_TYPE_PARAM);\n next.delete(TRACE_STATUS_PARAM);\n for (const fieldId of TRACE_PROPERTY_FILTER_FIELD_IDS) {\n next.delete(TRACE_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n onRemoveAll?.();\n }, [setSearchParams, onRemoveAll]);\n\n return {\n searchParams,\n setSearchParams,\n datePreset,\n selectedDateFrom,\n selectedDateTo,\n datePresetRef,\n traceIdParam,\n spanIdParam,\n anchorSpanIdParam,\n spanTabParam,\n scoreIdParam,\n listMode,\n selectedEntityOption,\n selectedStatus,\n filterTokens,\n handleTraceClick,\n handleTraceClose,\n handleSpanChange,\n handleSpanClose,\n handleSpanTabChange,\n handleSpanChangeWithTab,\n handleScoreChange,\n handleListModeChange,\n handleFilterTokensChange,\n handleDateChange,\n handleDatePresetChange,\n handleRemoveAll,\n applyFilterTokens,\n };\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport {\n clearSavedTraceFilters,\n hasAnyTraceFilterParams,\n loadTraceFiltersFromStorage,\n saveTraceFiltersToStorage,\n} from '../trace-filters';\nimport type { SetURLSearchParamsLike } from './use-trace-url-state';\nimport { toast } from '@/lib/toast';\n\nconst DEFAULT_SAVED_MESSAGE = 'Trace filter settings saved.';\nconst DEFAULT_CLEARED_MESSAGE = 'Trace filter settings cleared.';\n\nexport interface TraceFilterPersistenceOptions {\n /** Override the localStorage key. Default: traces filters storage. */\n storageKey?: string;\n /** Toast text overrides; pass `false` to suppress the toast entirely. */\n messages?: {\n saved?: string | false;\n cleared?: string | false;\n };\n /** Skip the once-on-mount hydration from localStorage. Default: false (hydration runs). */\n skipHydration?: boolean;\n}\n\nexport interface UseTraceFilterPersistenceResult {\n /** True when localStorage has a previously saved filter set. */\n hasSavedFilters: boolean;\n /** Persist the current URL filter params to localStorage. */\n handleSave: () => void;\n /** Forget the saved filter set. */\n handleRemoveSaved: () => void;\n}\n\n/**\n * Owns the localStorage save/restore lifecycle for trace filters:\n * - tracks `hasSavedFilters`\n * - exposes `handleSave` / `handleRemoveSaved` (with toast feedback)\n * - hydrates the URL from saved filters once on mount, but only if the URL is filter-clean\n * (so a shared link / direct nav with explicit filters wins over the saved set)\n *\n * Pass `storageKey` to scope persistence (e.g. per-project). Pass `messages.{saved,cleared} = false`\n * to suppress the toast.\n */\nexport function useTraceFilterPersistence(\n searchParams: URLSearchParams,\n setSearchParams: SetURLSearchParamsLike,\n options?: TraceFilterPersistenceOptions,\n): UseTraceFilterPersistenceResult {\n const { storageKey, messages, skipHydration } = options ?? {};\n\n const [hasSavedFilters, setHasSavedFilters] = useState(() => loadTraceFiltersFromStorage(storageKey) !== null);\n\n const handleSave = useCallback(() => {\n saveTraceFiltersToStorage(searchParams, storageKey);\n setHasSavedFilters(true);\n const text = messages?.saved ?? DEFAULT_SAVED_MESSAGE;\n if (text !== false) toast.success(text);\n }, [searchParams, storageKey, messages?.saved]);\n\n const handleRemoveSaved = useCallback(() => {\n clearSavedTraceFilters(storageKey);\n setHasSavedFilters(false);\n const text = messages?.cleared ?? DEFAULT_CLEARED_MESSAGE;\n if (text !== false) toast.success(text);\n }, [storageKey, messages?.cleared]);\n\n // Hydrate from the saved filter set on mount, but only when the URL is\n // filter-clean (user arrived via a plain sidebar nav). If the URL already\n // carries filters — e.g. a shared link — leave it alone.\n const hydratedRef = useRef(false);\n useEffect(() => {\n if (skipHydration) return;\n if (hydratedRef.current) return;\n hydratedRef.current = true;\n if (hasAnyTraceFilterParams(searchParams)) return;\n const saved = loadTraceFiltersFromStorage(storageKey);\n if (!saved) return;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n for (const [key, value] of saved) {\n next.append(key, value);\n }\n return next;\n },\n { replace: true },\n );\n // Run once on mount — searchParams intentionally read at mount time.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { hasSavedFilters, handleSave, handleRemoveSaved };\n}\n","import type { EntityType } from '@mastra/core/observability';\nimport type { ReactNode } from 'react';\n\nexport type UISpan = {\n id: string;\n name: string;\n type: string;\n latency: number;\n startTime: string;\n endTime?: string;\n spans?: UISpan[];\n parentSpanId?: string | null;\n};\n\nexport type UISpanStyle = {\n icon?: ReactNode;\n color?: string;\n label?: string;\n typePrefix: string;\n};\n\n// -- Trace filtering types ----------------------------------------------------\n\nexport type EntityOptions =\n | { value: string; label: string; type: EntityType.AGENT }\n | { value: string; label: string; type: EntityType.WORKFLOW_RUN }\n | { value: string; label: string; type: 'all' };\n\nexport type TraceDatePreset = 'all' | 'last-24h' | 'last-3d' | 'last-7d' | 'last-14d' | 'last-30d' | 'custom';\n\n/** Canonical list of context field IDs used for trace filtering and value extraction */\nexport const CONTEXT_FIELD_IDS = [\n 'environment',\n 'serviceName',\n 'source',\n 'scope',\n 'userId',\n 'organizationId',\n 'resourceId',\n 'runId',\n 'sessionId',\n 'threadId',\n 'requestId',\n 'experimentId',\n 'spanType',\n 'entityName',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n] as const;\n","import { format } from 'date-fns';\nimport { ArrowDownIcon, ArrowRightIcon, ArrowUpIcon, ChevronsDownUpIcon, ChevronsUpDownIcon } from 'lucide-react';\nimport { Fragment, useState } from 'react';\nimport type { LogRecord } from '../types';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { DataDetailsPanel } from '@/ds/components/DataDetailsPanel';\nimport { cn } from '@/lib/utils';\n\nconst KV = DataDetailsPanel.KeyValueList;\n\nfunction toDate(value: Date | string): Date {\n return value instanceof Date ? value : new Date(value);\n}\n\nexport interface LogDetailsViewProps {\n log: LogRecord;\n onClose: () => void;\n onTraceClick?: (traceId: string) => void;\n onSpanClick?: (traceId: string, spanId: string) => void;\n onPrevious?: () => void;\n onNext?: () => void;\n collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n}\n\nexport function LogDetailsView({\n log,\n onClose,\n onTraceClick,\n onSpanClick,\n onPrevious,\n onNext,\n collapsed: controlledCollapsed,\n onCollapsedChange,\n}: LogDetailsViewProps) {\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const setCollapsed = onCollapsedChange ?? setInternalCollapsed;\n const date = toDate(log.timestamp);\n\n return (\n <DataDetailsPanel collapsed={collapsed}>\n <DataDetailsPanel.Header>\n <DataDetailsPanel.Heading>\n Log <b>{format(date, 'MMM dd, HH:mm:ss.SSS')}</b>\n </DataDetailsPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">\n {onCollapsedChange && (\n <Button\n size=\"md\"\n tooltip={collapsed ? 'Expand panel' : 'Collapse panel'}\n onClick={() => setCollapsed(!collapsed)}\n >\n {collapsed ? <ChevronsUpDownIcon /> : <ChevronsDownUpIcon />}\n </Button>\n )}\n\n <ButtonsGroup spacing=\"close\">\n <Button size=\"md\" tooltip=\"Previous log\" onClick={onPrevious} disabled={!onPrevious}>\n <ArrowUpIcon />\n </Button>\n <Button size=\"md\" tooltip=\"Next log\" onClick={onNext} disabled={!onNext}>\n <ArrowDownIcon />\n </Button>\n </ButtonsGroup>\n\n <DataDetailsPanel.CloseButton onClick={onClose} />\n </ButtonsGroup>\n </DataDetailsPanel.Header>\n\n {!collapsed && (\n <DataDetailsPanel.Content>\n <p className=\"text-ui-md text-neutral4 font-mono wrap-break-word whitespace-pre-wrap\">{log.message}</p>\n\n {(log.traceId || log.spanId) && (\n <div className={cn('grid gap-2 my-8', '[&>button]:justify-between [&>button]:overflow-hidden')}>\n {log.traceId && (\n <ButtonsGroup spacing=\"close\" className=\"min-w-0 w-full\">\n <Button\n size=\"md\"\n className=\"min-w-0 flex-1 overflow-hidden\"\n onClick={() => onTraceClick?.(log.traceId!)}\n >\n <ArrowRightIcon />\n <span>Trace</span>\n <span className=\" ml-auto text-ui-sm text-neutral2 min-w-0 truncate\"># {log.traceId}</span>\n </Button>\n <CopyButton content={log.traceId!} size=\"md\" tooltip=\"Copy Trace ID to clipboard\" />\n </ButtonsGroup>\n )}\n {log.spanId && (\n <ButtonsGroup spacing=\"close\" className=\"min-w-0 w-full\">\n <Button\n size=\"md\"\n className=\"min-w-0 flex-1 overflow-hidden\"\n disabled={!log.traceId || !onSpanClick}\n onClick={() => log.traceId && onSpanClick?.(log.traceId, log.spanId!)}\n >\n <ArrowRightIcon />\n <span>Span</span>\n <span className=\" ml-auto text-ui-sm text-neutral2 min-w-0 truncate\"># {log.spanId}</span>\n </Button>\n <CopyButton content={log.spanId!} size=\"md\" tooltip=\"Copy Span ID to clipboard\" />\n </ButtonsGroup>\n )}\n </div>\n )}\n\n <KV className=\"mb-6\">\n {log.entityType && (\n <>\n <KV.Key>Entity Type</KV.Key>\n <KV.Value>{log.entityType}</KV.Value>\n </>\n )}\n {log.entityName && (\n <>\n <KV.Key>Entity Name</KV.Key>\n <KV.Value>{log.entityName}</KV.Value>\n </>\n )}\n {log.serviceName && (\n <>\n <KV.Key>Service</KV.Key>\n <KV.Value>{log.serviceName}</KV.Value>\n </>\n )}\n {log.environment && (\n <>\n <KV.Key>Environment</KV.Key>\n <KV.Value>{log.environment}</KV.Value>\n </>\n )}\n {log.source && (\n <>\n <KV.Key>Source</KV.Key>\n <KV.Value>{log.source}</KV.Value>\n </>\n )}\n {log.metadata && Object.keys(log.metadata).length > 0 && (\n <>\n {Object.entries(log.metadata).map(([key, value]) => (\n <Fragment key={key}>\n <KV.Key>{key}</KV.Key>\n <KV.Value>{String(value)}</KV.Value>\n </Fragment>\n ))}\n </>\n )}\n </KV>\n\n {log.data && Object.keys(log.data).length > 0 && (\n <DataDetailsPanel.CodeSection title=\"Data\" codeStr={JSON.stringify(log.data, null, 2)} className=\"mt-6\" />\n )}\n </DataDetailsPanel.Content>\n )}\n </DataDetailsPanel>\n );\n}\n","import { ErrorState } from '@/ds/components/ErrorState';\nimport { PermissionDenied } from '@/ds/components/PermissionDenied';\nimport { SessionExpired } from '@/ds/components/SessionExpired';\nimport { is401UnauthorizedError, is403ForbiddenError } from '@/lib/query-utils';\n\nexport interface LogsErrorContentProps {\n /** The error from a useLogs query. */\n error: unknown;\n /** Passed to PermissionDenied (usually 'logs'). */\n resource: string;\n /** Title shown on the generic ErrorState fallback. */\n errorTitle: string;\n}\n\n/**\n * Renders the appropriate fallback content for a logs-related query error:\n * `<SessionExpired />` for 401, `<PermissionDenied />` for 403, otherwise `<ErrorState />`.\n * Mirror of `TracesErrorContent` for the logs domain.\n */\nexport function LogsErrorContent({ error, resource, errorTitle }: LogsErrorContentProps) {\n if (is401UnauthorizedError(error)) return <SessionExpired />;\n if (is403ForbiddenError(error)) return <PermissionDenied resource={resource} />;\n const message = error instanceof Error ? error.message : undefined;\n return <ErrorState title={errorTitle} message={message ?? 'Unknown error'} />;\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface LogsLayoutProps {\n /** The logs list (left column). */\n listSlot: ReactNode;\n /** The log data panel (right column, top). When null/undefined, the whole right column collapses. */\n logPanelSlot?: ReactNode;\n /** The trace data panel (right column, middle). Only rendered when truthy. */\n tracePanelSlot?: ReactNode;\n /** The span data panel (right column, bottom). Only rendered when truthy. */\n spanPanelSlot?: ReactNode;\n /** When the log panel is collapsed, the right column's grid-rows squash the log row to `auto`. */\n logCollapsed?: boolean;\n}\n\n/**\n * Pure 2-column layout shell for the logs page. Owns no state and fetches no data — pass slots in.\n * Right-column row template adapts based on which panels are present and whether the log panel is\n * collapsed.\n */\nexport function LogsLayout({ listSlot, logPanelSlot, tracePanelSlot, spanPanelSlot, logCollapsed }: LogsLayoutProps) {\n const hasSidePanel = !!logPanelSlot;\n\n return (\n <div\n className={cn('grid h-full min-h-0 gap-4 items-start', hasSidePanel ? 'grid-cols-[1fr_1fr]' : 'grid-cols-[1fr]')}\n >\n {listSlot}\n\n {hasSidePanel && (\n <div\n className={cn(\n 'grid gap-4 h-full overflow-auto',\n tracePanelSlot && spanPanelSlot\n ? logCollapsed\n ? 'grid-rows-[auto_1fr_1fr]'\n : 'grid-rows-[1fr_1fr_1fr]'\n : tracePanelSlot\n ? logCollapsed\n ? 'grid-rows-[auto_1fr]'\n : 'grid-rows-[1fr_1fr]'\n : logCollapsed\n ? 'grid-rows-[auto]'\n : 'grid-rows-[1fr]',\n )}\n >\n {logPanelSlot}\n {tracePanelSlot}\n {spanPanelSlot}\n </div>\n )}\n </div>\n );\n}\n","import { useVirtualizer } from '@tanstack/react-virtual';\nimport { useEffect, useRef } from 'react';\nimport type { LogRecord } from '../types';\nimport { LogsDataList, LogsDataListSkeleton } from '@/ds/components/LogsDataList';\n\n// Fixed widths on non-flex columns prevent track shifts as the virtualizer swaps rows in/out.\nconst COLUMNS = '6rem 9rem 5rem 10rem minmax(8rem,1fr) minmax(8rem,1fr)';\n\nconst ROW_HEIGHT = 36;\nconst OVERSCAN = 8;\n\nexport interface LogsListViewProps {\n logs: LogRecord[];\n isLoading?: boolean;\n isFetchingNextPage?: boolean;\n hasNextPage?: boolean;\n setEndOfListElement?: (element: HTMLDivElement | null) => void;\n /** Stable per-render id for each log — used for React keys and for matching against `featuredLogId`.\n * Build with `useLogsListNavigation`. */\n logIdMap: Map<LogRecord, string>;\n /** Currently featured/selected log — its row gets the highlighted background. */\n featuredLogId?: string | null;\n /** Called when a row is clicked. The current toggle + trace-sync logic is the consumer's call. */\n onLogClick: (log: LogRecord) => void;\n}\n\n/**\n * Virtualized presentational list. Renders only the visible window of logs via\n * TanStack Virtual, sandwiched between top/bottom Spacers that preserve total\n * scroll height. Owns no state and fetches no data.\n */\nexport function LogsListView({\n logs,\n isLoading,\n isFetchingNextPage,\n hasNextPage,\n setEndOfListElement,\n logIdMap,\n featuredLogId,\n onLogClick,\n}: LogsListViewProps) {\n const scrollRef = useRef<HTMLDivElement | null>(null);\n\n const virtualizer = useVirtualizer({\n count: logs.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => ROW_HEIGHT,\n overscan: OVERSCAN,\n });\n\n // Reset scroll to top whenever a fresh query resolves (filter / date range change).\n // `isLoading` only flips on initial fetches — `fetchNextPage` keeps it `false`, so this\n // effect doesn't fire during pagination.\n //\n // Why the manual scroll event: when the skeleton-vs-list branch swaps in the new scroll\n // container, it mounts at `scrollTop = 0`. The virtualizer rebinds its listener but\n // doesn't re-read `scrollTop`, so it keeps the stale `scrollOffset` from the previous\n // element. `scrollToOffset(0)` no-ops because the new element is already at 0 (no scroll\n // event fires). Dispatching a synthetic `scroll` forces the virtualizer's handler to\n // read the fresh `scrollTop` and recompute `virtualItems` with `paddingTop = 0`.\n const wasLoadingRef = useRef(isLoading);\n useEffect(() => {\n if (wasLoadingRef.current && !isLoading) {\n scrollRef.current?.dispatchEvent(new Event('scroll'));\n }\n wasLoadingRef.current = isLoading;\n }, [isLoading]);\n\n if (isLoading) {\n return <LogsDataListSkeleton columns={COLUMNS} />;\n }\n\n const virtualItems = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n const paddingTop = virtualItems[0]?.start ?? 0;\n const paddingBottom =\n virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;\n\n return (\n <LogsDataList columns={COLUMNS} scrollRef={scrollRef} className=\"min-w-0\">\n <LogsDataList.Top>\n <LogsDataList.TopCell>Date</LogsDataList.TopCell>\n <LogsDataList.TopCell>Time</LogsDataList.TopCell>\n <LogsDataList.TopCell>Level</LogsDataList.TopCell>\n <LogsDataList.TopCell>Entity</LogsDataList.TopCell>\n <LogsDataList.TopCell>Message</LogsDataList.TopCell>\n <LogsDataList.TopCell>Data</LogsDataList.TopCell>\n </LogsDataList.Top>\n\n {logs.length === 0 ? (\n <LogsDataList.NoMatch message=\"No logs match your search\" />\n ) : (\n <>\n <LogsDataList.Spacer height={paddingTop} />\n {virtualItems.map(vi => {\n const log = logs[vi.index];\n if (!log) return null;\n const id = logIdMap.get(log);\n // Defensive: consumer is expected to build `logIdMap` from the same `logs` list\n // (via `useLogsListNavigation`), but if they drift we'd rather drop the row than\n // ship a missing-key warning and broken selection highlighting.\n if (!id) return null;\n const isFeatured = id === featuredLogId;\n\n return (\n <LogsDataList.RowButton\n key={id}\n ref={virtualizer.measureElement}\n data-index={vi.index}\n onClick={() => onLogClick(log)}\n featured={isFeatured}\n >\n <LogsDataList.DateCell timestamp={log.timestamp} />\n <LogsDataList.TimeCell timestamp={log.timestamp} />\n <LogsDataList.LevelCell level={log.level} />\n <LogsDataList.EntityCell entityType={log.entityType} entityName={log.entityName} />\n <LogsDataList.MessageCell message={log.message} />\n <LogsDataList.DataCell data={log.data} />\n </LogsDataList.RowButton>\n );\n })}\n <LogsDataList.Spacer height={paddingBottom} />\n </>\n )}\n <LogsDataList.NextPageLoading\n isLoading={isFetchingNextPage}\n hasMore={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n />\n </LogsDataList>\n );\n}\n","import { PropertyFilterActions } from '@/ds/components/PropertyFilter/property-filter-actions';\nimport { PropertyFilterApplied } from '@/ds/components/PropertyFilter/property-filter-applied';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\nimport { cn } from '@/lib/utils';\n\nexport interface LogsToolbarProps {\n onClear?: () => void;\n onRemoveAll?: () => void;\n onSave?: () => void;\n onRemoveSaved?: () => void;\n isLoading?: boolean;\n filterFields: PropertyFilterField[];\n filterTokens: PropertyFilterToken[];\n onFilterTokensChange: (tokens: PropertyFilterToken[]) => void;\n autoFocusFilterFieldId?: string;\n}\n\nexport function LogsToolbar({\n onClear,\n onRemoveAll,\n onSave,\n onRemoveSaved,\n isLoading,\n filterFields,\n filterTokens,\n onFilterTokensChange,\n autoFocusFilterFieldId,\n}: LogsToolbarProps) {\n const hasActiveFilters = filterTokens.length > 0;\n const hasNonDefaultFilter = filterTokens.some(token => isNonDefaultFilter(token, filterFields));\n\n return (\n <div className={cn('grid grid-cols-[1fr_auto] gap-3 items-start')}>\n <PropertyFilterApplied\n fields={filterFields}\n tokens={filterTokens}\n onTokensChange={onFilterTokensChange}\n disabled={isLoading}\n autoFocusFieldId={autoFocusFilterFieldId}\n />\n\n {hasActiveFilters && (\n <PropertyFilterActions\n disabled={isLoading}\n onClear={hasNonDefaultFilter ? onClear : undefined}\n onRemoveAll={onRemoveAll}\n onSave={onSave}\n onRemoveSaved={onRemoveSaved}\n />\n )}\n </div>\n );\n}\n\nfunction isNonDefaultFilter(token: PropertyFilterToken, fields: PropertyFilterField[]): boolean {\n const field = fields.find(f => f.id === token.fieldId);\n if (!field) return false;\n if (field.kind === 'text') {\n return typeof token.value === 'string' && token.value.trim() !== '';\n }\n if (field.kind === 'pick-multi') {\n if (field.multi) return Array.isArray(token.value) && token.value.length > 0;\n return typeof token.value === 'string' && token.value !== '' && token.value !== 'Any';\n }\n if (field.kind === 'multi-select') {\n return Array.isArray(token.value) && token.value.length > 0;\n }\n return false;\n}\n","import { format } from 'date-fns';\nimport { CircleSlashIcon, ExternalLinkIcon } from 'lucide-react';\nimport type { LogsDatePreset } from '../log-filters';\nimport { Button } from '@/ds/components/Button';\nimport { EmptyState } from '@/ds/components/EmptyState';\n\nconst PRESET_LABELS: Record<Exclude<LogsDatePreset, 'all' | 'custom'>, string> = {\n 'last-24h': 'the last 24 hours',\n 'last-3d': 'the last 3 days',\n 'last-7d': 'the last 7 days',\n 'last-14d': 'the last 14 days',\n 'last-30d': 'the last 30 days',\n};\n\nexport interface NoLogsInfoProps {\n datePreset?: LogsDatePreset;\n dateFrom?: Date;\n dateTo?: Date;\n}\n\nconst DATE_FORMAT = 'MMM d, yyyy HH:mm';\n\nconst LEVEL_TIP = 'Pick a wider range or lower the logging level — verbose entries (debug, info) may be filtered out.';\n\nfunction describeRange({ datePreset, dateFrom, dateTo }: NoLogsInfoProps): { title: string; description: string } {\n if (datePreset && datePreset !== 'all' && datePreset !== 'custom') {\n return {\n title: `No logs for ${PRESET_LABELS[datePreset]}`,\n description: LEVEL_TIP,\n };\n }\n if (dateFrom && dateTo) {\n return {\n title: `No logs between ${format(dateFrom, DATE_FORMAT)} and ${format(dateTo, DATE_FORMAT)}`,\n description: LEVEL_TIP,\n };\n }\n if (dateFrom) {\n return {\n title: `No logs since ${format(dateFrom, DATE_FORMAT)}`,\n description: LEVEL_TIP,\n };\n }\n return {\n title: 'No logs yet',\n description: 'Logs will appear here once agents, workflows, or tools are executed.',\n };\n}\n\nexport const NoLogsInfo = ({ datePreset, dateFrom, dateTo }: NoLogsInfoProps = {}) => {\n const { title, description } = describeRange({ datePreset, dateFrom, dateTo });\n return (\n <div className=\"flex h-full items-center justify-center\">\n <EmptyState\n iconSlot={<CircleSlashIcon />}\n titleSlot={title}\n descriptionSlot={description}\n actionSlot={\n <Button\n variant=\"ghost\"\n as=\"a\"\n href=\"https://mastra.ai/en/docs/observability/logging\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Logging Documentation <ExternalLinkIcon />\n </Button>\n }\n />\n </div>\n );\n};\n","import type { ListLogsArgs, ListLogsResponse } from '@mastra/core/storage';\nimport { useMastraClient } from '@mastra/react';\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport { useEffect } from 'react';\n\nimport type { LogRecord } from '../types';\nimport { useInView } from '@/hooks/use-in-view';\n\ninterface UseLogsReturn {\n data: LogRecord[] | undefined;\n hasNextPage: boolean;\n isFetchingNextPage: boolean;\n fetchNextPage: () => void;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n setEndOfListElement: (node: HTMLDivElement | null) => void;\n}\n\nconst LOGS_PER_PAGE = 20;\n\nexport interface LogsFilters {\n filters?: ListLogsArgs['filters'];\n}\n\nfunction getNextPageParam(lastPage: ListLogsResponse | undefined, _allPages: unknown, lastPageParam: number) {\n if (lastPage?.pagination?.hasMore) {\n return lastPageParam + 1;\n }\n return undefined;\n}\n\n/** Deduplicates logs across loaded pages. Offset-based pagination duplicates rows at the page\n * boundary whenever new logs are inserted between sequential `fetchNextPage` calls — without\n * this filter the duplicates produce duplicate React keys and chaotic virtualizer offsets.\n * Falls back to the full serialized record when `logId` is absent so logs that happen to\n * share `(timestamp, message, data)` but differ in other fields aren't collapsed. */\nfunction selectLogs(data: { pages: ListLogsResponse[] }) {\n const seen = new Set<string>();\n const result = [];\n for (const page of data.pages) {\n for (const log of page.logs ?? []) {\n const key = log.logId ?? JSON.stringify(log);\n if (seen.has(key)) continue;\n seen.add(key);\n result.push(log);\n }\n }\n return result;\n}\n\nexport const useLogs: (props?: LogsFilters) => UseLogsReturn = ({ filters }: LogsFilters = {}) => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery<ListLogsResponse, Error, ReturnType<typeof selectLogs>, readonly unknown[], number>({\n queryKey: ['logs', filters],\n queryFn: ({ pageParam }) =>\n client.listLogsVNext({\n pagination: { page: pageParam, perPage: LOGS_PER_PAGE },\n filters,\n orderBy: { field: 'timestamp', direction: 'DESC' },\n }),\n initialPageParam: 0,\n getNextPageParam,\n select: selectLogs,\n retry: false,\n refetchInterval: 10000,\n });\n\n const { hasNextPage, isFetchingNextPage, fetchNextPage, data, isLoading, isError, error } = query;\n\n useEffect(() => {\n if (isEndOfListInView && hasNextPage && !isFetchingNextPage) {\n void fetchNextPage();\n }\n }, [isEndOfListInView, hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n return { data, hasNextPage, isFetchingNextPage, fetchNextPage, isLoading, isError, error, setEndOfListElement };\n};\n","import { useCallback, useMemo, useRef } from 'react';\nimport type { SetURLSearchParamsLike } from '../../traces/hooks/use-trace-url-state';\nimport {\n LOGS_DATE_FROM_PARAM,\n LOGS_DATE_PRESET_PARAM,\n LOGS_DATE_PRESET_VALUES,\n LOGS_DATE_TO_PARAM,\n LOGS_PROPERTY_FILTER_FIELD_IDS,\n LOGS_PROPERTY_FILTER_PARAM_BY_FIELD,\n LOGS_ROOT_ENTITY_TYPE_OPTIONS,\n LOGS_ROOT_ENTITY_TYPE_PARAM,\n applyLogsPropertyFilterTokens,\n getLogsPropertyFilterTokens,\n} from '../log-filters';\nimport type { LogsDatePreset, LogsEntityOptions } from '../log-filters';\nimport type { PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\nconst LOG_PARAM = 'logId';\nconst TRACE_PARAM = 'traceId';\nconst SPAN_PARAM = 'spanId';\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\nconst PRESET_MS: Partial<Record<LogsDatePreset, number>> = {\n 'last-24h': DAY_MS,\n 'last-3d': 3 * DAY_MS,\n 'last-7d': 7 * DAY_MS,\n 'last-14d': 14 * DAY_MS,\n 'last-30d': 30 * DAY_MS,\n};\n\n/** Mutates `params` in place to drop the featured log/trace/span selection.\n * Used whenever a filter changes — selection no longer makes sense in the new result set. */\nfunction clearSelectionParams(params: URLSearchParams) {\n params.delete(LOG_PARAM);\n params.delete(TRACE_PARAM);\n params.delete(SPAN_PARAM);\n}\n\nexport interface LogsFeaturedIds {\n logId?: string | null;\n traceId?: string | null;\n spanId?: string | null;\n}\n\nexport interface UseLogsUrlStateOptions {\n /** Called after `handleRemoveAll` clears all filter URL params. */\n onRemoveAll?: () => void;\n}\n\nexport interface UseLogsUrlStateResult {\n searchParams: URLSearchParams;\n setSearchParams: SetURLSearchParamsLike;\n\n datePreset: LogsDatePreset;\n selectedDateFrom: Date | undefined;\n selectedDateTo: Date | undefined;\n datePresetRef: React.MutableRefObject<LogsDatePreset>;\n\n featuredLogId: string | null;\n featuredTraceId: string | null;\n featuredSpanId: string | null;\n\n selectedEntityOption: LogsEntityOptions | undefined;\n filterTokens: PropertyFilterToken[];\n\n /** Partial update of the featured log/trace/span selection. Omitted keys are left as-is. */\n handleFeaturedChange: (ids: LogsFeaturedIds) => void;\n handleFilterTokensChange: (nextTokens: PropertyFilterToken[]) => void;\n handleDateChange: (value: Date | undefined, type: 'from' | 'to') => void;\n handleDatePresetChange: (preset: LogsDatePreset) => void;\n handleRemoveAll: () => void;\n\n /** Lower-level helper used by `handleClear`: writes a token set and clears the log/trace/span selection. */\n applyFilterTokens: (tokens: PropertyFilterToken[]) => void;\n}\n\n/**\n * Owns all URL-derived state and URL-modifying handlers for the logs page. Routing-agnostic —\n * pass `searchParams` and `setSearchParams` from whichever router the consumer uses.\n */\nexport function useLogsUrlState(\n searchParams: URLSearchParams,\n setSearchParams: SetURLSearchParamsLike,\n options?: UseLogsUrlStateOptions,\n): UseLogsUrlStateResult {\n const { onRemoveAll } = options ?? {};\n\n const datePreset = useMemo<LogsDatePreset>(() => {\n const value = searchParams.get(LOGS_DATE_PRESET_PARAM);\n return value && LOGS_DATE_PRESET_VALUES.has(value as LogsDatePreset) ? (value as LogsDatePreset) : 'last-24h';\n }, [searchParams]);\n\n const dateFromParamRaw = searchParams.get(LOGS_DATE_FROM_PARAM);\n const dateToParamRaw = searchParams.get(LOGS_DATE_TO_PARAM);\n\n const selectedDateFrom = useMemo(() => {\n if (datePreset === 'custom') {\n if (!dateFromParamRaw) return undefined;\n const parsed = new Date(dateFromParamRaw);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }\n if (datePreset === 'all') return undefined;\n const ms = PRESET_MS[datePreset];\n return ms ? new Date(Date.now() - ms) : undefined;\n }, [datePreset, dateFromParamRaw]);\n\n const selectedDateTo = useMemo(() => {\n if (datePreset !== 'custom' || !dateToParamRaw) return undefined;\n const parsed = new Date(dateToParamRaw);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }, [datePreset, dateToParamRaw]);\n\n const datePresetRef = useRef(datePreset);\n datePresetRef.current = datePreset;\n\n const featuredLogId = searchParams.get(LOG_PARAM);\n const featuredTraceId = searchParams.get(TRACE_PARAM);\n const featuredSpanId = searchParams.get(SPAN_PARAM);\n\n const selectedEntityOption = useMemo(\n () =>\n LOGS_ROOT_ENTITY_TYPE_OPTIONS.find(option => option.entityType === searchParams.get(LOGS_ROOT_ENTITY_TYPE_PARAM)),\n [searchParams],\n );\n\n const filterTokens = useMemo(() => getLogsPropertyFilterTokens(searchParams), [searchParams]);\n\n const handleFeaturedChange = useCallback(\n (ids: LogsFeaturedIds) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n for (const [field, value] of Object.entries(ids)) {\n const param = field === 'logId' ? LOG_PARAM : field === 'traceId' ? TRACE_PARAM : SPAN_PARAM;\n if (value) {\n next.set(param, value);\n } else {\n next.delete(param);\n }\n }\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const applyFilterTokens = useCallback(\n (tokens: PropertyFilterToken[]) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n applyLogsPropertyFilterTokens(next, tokens);\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleFilterTokensChange = applyFilterTokens;\n\n const handleDateChange = useCallback(\n (value: Date | undefined, type: 'from' | 'to') => {\n if (datePresetRef.current !== 'custom') return;\n const param = type === 'from' ? LOGS_DATE_FROM_PARAM : LOGS_DATE_TO_PARAM;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (value) {\n next.set(param, value.toISOString());\n } else {\n next.delete(param);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleDatePresetChange = useCallback(\n (preset: LogsDatePreset) => {\n datePresetRef.current = preset;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (preset === 'last-24h') {\n next.delete(LOGS_DATE_PRESET_PARAM);\n next.delete(LOGS_DATE_FROM_PARAM);\n next.delete(LOGS_DATE_TO_PARAM);\n } else if (preset === 'custom') {\n next.set(LOGS_DATE_PRESET_PARAM, 'custom');\n } else {\n next.set(LOGS_DATE_PRESET_PARAM, preset);\n next.delete(LOGS_DATE_FROM_PARAM);\n next.delete(LOGS_DATE_TO_PARAM);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleRemoveAll = useCallback(() => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n next.delete(LOGS_ROOT_ENTITY_TYPE_PARAM);\n for (const fieldId of LOGS_PROPERTY_FILTER_FIELD_IDS) {\n next.delete(LOGS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n next.delete(LOGS_DATE_PRESET_PARAM);\n next.delete(LOGS_DATE_FROM_PARAM);\n next.delete(LOGS_DATE_TO_PARAM);\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n onRemoveAll?.();\n }, [setSearchParams, onRemoveAll]);\n\n return useMemo(\n () => ({\n searchParams,\n setSearchParams,\n datePreset,\n selectedDateFrom,\n selectedDateTo,\n datePresetRef,\n featuredLogId,\n featuredTraceId,\n featuredSpanId,\n selectedEntityOption,\n filterTokens,\n handleFeaturedChange,\n handleFilterTokensChange,\n handleDateChange,\n handleDatePresetChange,\n handleRemoveAll,\n applyFilterTokens,\n }),\n [\n searchParams,\n setSearchParams,\n datePreset,\n selectedDateFrom,\n selectedDateTo,\n datePresetRef,\n featuredLogId,\n featuredTraceId,\n featuredSpanId,\n selectedEntityOption,\n filterTokens,\n handleFeaturedChange,\n handleFilterTokensChange,\n handleDateChange,\n handleDatePresetChange,\n handleRemoveAll,\n applyFilterTokens,\n ],\n );\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { SetURLSearchParamsLike } from '../../traces/hooks/use-trace-url-state';\nimport {\n clearSavedLogsFilters,\n hasAnyLogsFilterParams,\n loadLogsFiltersFromStorage,\n saveLogsFiltersToStorage,\n} from '../log-filters';\nimport { toast } from '@/lib/toast';\n\nconst DEFAULT_SAVED_MESSAGE = 'Filters setting for Logs saved';\nconst DEFAULT_CLEARED_MESSAGE = 'Filters setting for Logs cleared up';\n\nexport interface LogsFilterPersistenceOptions {\n /** Override the localStorage key. Default: logs filters storage. */\n storageKey?: string;\n /** Toast text overrides; pass `false` to suppress the toast entirely. */\n messages?: {\n saved?: string | false;\n cleared?: string | false;\n };\n /** Skip the once-on-mount hydration from localStorage. Default: false. */\n skipHydration?: boolean;\n}\n\nexport interface UseLogsFilterPersistenceResult {\n hasSavedFilters: boolean;\n handleSave: () => void;\n handleRemoveSaved: () => void;\n}\n\n/**\n * Owns the localStorage save/restore lifecycle for logs filters. Mirrors\n * `useTraceFilterPersistence` — same pattern, different storage key default.\n */\nexport function useLogsFilterPersistence(\n searchParams: URLSearchParams,\n setSearchParams: SetURLSearchParamsLike,\n options?: LogsFilterPersistenceOptions,\n): UseLogsFilterPersistenceResult {\n const { storageKey, messages, skipHydration } = options ?? {};\n\n const [hasSavedFilters, setHasSavedFilters] = useState(() => loadLogsFiltersFromStorage(storageKey) !== null);\n\n const handleSave = useCallback(() => {\n saveLogsFiltersToStorage(searchParams, storageKey);\n setHasSavedFilters(true);\n const text = messages?.saved ?? DEFAULT_SAVED_MESSAGE;\n if (text !== false) toast.success(text);\n }, [searchParams, storageKey, messages?.saved]);\n\n const handleRemoveSaved = useCallback(() => {\n clearSavedLogsFilters(storageKey);\n setHasSavedFilters(false);\n const text = messages?.cleared ?? DEFAULT_CLEARED_MESSAGE;\n if (text !== false) toast.success(text);\n }, [storageKey, messages?.cleared]);\n\n const hydratedRef = useRef(false);\n useEffect(() => {\n if (skipHydration) return;\n if (hydratedRef.current) return;\n hydratedRef.current = true;\n if (hasAnyLogsFilterParams(searchParams)) return;\n const saved = loadLogsFiltersFromStorage(storageKey);\n if (!saved) return;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n for (const [key, value] of saved) {\n next.append(key, value);\n }\n return next;\n },\n { replace: true },\n );\n // Run once on mount — searchParams intentionally read at mount time.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { hasSavedFilters, handleSave, handleRemoveSaved };\n}\n","import { useCallback, useMemo } from 'react';\nimport type { LogRecord } from '../types';\nimport type { LogsFeaturedIds } from './use-logs-url-state';\n\nfunction hashCode(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) - hash + str.charCodeAt(i)) | 0;\n }\n return (hash >>> 0).toString(36);\n}\n\n/** Prefer the storage-assigned `logId`. When absent, derive an id from immutable content fields\n * (`timestamp + message + data`) so the same log lands on the same id across polls regardless\n * of list order or insertions. Two logs without `logId` that hash identically share an id —\n * acceptable because the URL-driven selection still resolves deterministically. */\nfunction buildLogIds(logs: LogRecord[]): Map<LogRecord, string> {\n const ids = new Map<LogRecord, string>();\n for (const log of logs) {\n if (log.logId) {\n ids.set(log, log.logId);\n continue;\n }\n const ts = log.timestamp instanceof Date ? log.timestamp.toISOString() : log.timestamp;\n ids.set(log, hashCode(`${ts}${log.message ?? ''}${log.data ? JSON.stringify(log.data) : ''}`));\n }\n return ids;\n}\n\nexport interface UseLogsListNavigationResult {\n /** Map each log in the list to its derived id. Pass to `<LogsListView logIdMap={...}>`. */\n logIdMap: Map<LogRecord, string>;\n /** Look up a log's id (undefined if not in the list). */\n getLogId: (log: LogRecord) => string | undefined;\n /** The currently featured log resolved from `featuredLogId`, or null. */\n featuredLog: LogRecord | null;\n /** Click handler that flips featured selection with toggle behavior, and — when a trace panel is\n * open — syncs the trace panel to the new log's trace. Pass to `<LogsListView onLogClick={...}>`. */\n handleLogClick: (log: LogRecord) => void;\n /** Undefined when at the start of the list (disable the prev button). */\n handlePreviousLog: (() => void) | undefined;\n /** Undefined when at the end of the list (disable the next button). */\n handleNextLog: (() => void) | undefined;\n}\n\n/**\n * Derives id mapping + featured log + prev/next/click handlers for a logs list. Stateless — only\n * reads from the inputs and calls `onFeaturedChange` on selection changes.\n */\nexport function useLogsListNavigation(\n logs: LogRecord[],\n featuredLogId: string | null,\n onFeaturedChange: (ids: LogsFeaturedIds) => void,\n featuredTraceId?: string | null,\n): UseLogsListNavigationResult {\n const logIdMap = useMemo(() => buildLogIds(logs), [logs]);\n\n const idToLog = useMemo(() => {\n const m = new Map<string, { log: LogRecord; idx: number }>();\n for (let i = 0; i < logs.length; i++) {\n const id = logIdMap.get(logs[i]);\n if (id) m.set(id, { log: logs[i], idx: i });\n }\n return m;\n }, [logs, logIdMap]);\n\n const entry = featuredLogId ? idToLog.get(featuredLogId) : undefined;\n const featuredLogIdx = entry?.idx ?? -1;\n const featuredLog = featuredLogIdx >= 0 ? logs[featuredLogIdx] : null;\n\n const getLogId = useCallback((log: LogRecord) => logIdMap.get(log), [logIdMap]);\n\n const handleLogClick = useCallback(\n (log: LogRecord) => {\n const id = logIdMap.get(log);\n if (!id) return;\n if (featuredLogId === id) {\n onFeaturedChange({ logId: null });\n return;\n }\n if (featuredTraceId) {\n onFeaturedChange({ logId: id, traceId: log.traceId ?? null, spanId: null });\n } else {\n onFeaturedChange({ logId: id });\n }\n },\n [logIdMap, featuredLogId, featuredTraceId, onFeaturedChange],\n );\n\n const handlePreviousLog =\n featuredLogIdx > 0\n ? () => {\n const prevLog = logs[featuredLogIdx - 1];\n const id = logIdMap.get(prevLog)!;\n if (featuredTraceId) {\n onFeaturedChange({ logId: id, traceId: prevLog.traceId ?? null, spanId: null });\n } else {\n onFeaturedChange({ logId: id });\n }\n }\n : undefined;\n\n const handleNextLog =\n featuredLogIdx >= 0 && featuredLogIdx < logs.length - 1\n ? () => {\n const nextLog = logs[featuredLogIdx + 1];\n const id = logIdMap.get(nextLog)!;\n if (featuredTraceId) {\n onFeaturedChange({ logId: id, traceId: nextLog.traceId ?? null, spanId: null });\n } else {\n onFeaturedChange({ logId: id });\n }\n }\n : undefined;\n\n return {\n logIdMap,\n getLogId,\n featuredLog,\n handleLogClick,\n handlePreviousLog,\n handleNextLog,\n };\n}\n"],"names":["jsxs","jsx","Wand2","useState","useCallback","str","Braces","List","Hash","ToggleLeft","Type","cn","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Icon","React","Equal","EqualNot","TextSearch","Text","ChevronRight","ChevronLeft","ChevronsRight","ChevronsLeft","ListX","Check","Ban","Input","isArrayOperator","Fragment","Button","X","Plus","Component","usePanelRef","Panel","Tooltip","TooltipTrigger","ArrowRight","ArrowLeft","TooltipContent","Separator","ResizeHandleIndicator","create","persist","EntityType","createContext","useContext","format","useMemo","useRef","DateTimeRangePicker","EyeIcon","LogsIcon","MetricsKpiCard","MetricsCard","MetricsLineChart","useEffect","Tabs","TabList","Tab","TabContent","MetricsDataTable","HorizontalBars","PRESET_MS","useMastraClient","useQuery","TOP_N","value","from","to","spans","AgentIcon","WorkflowIcon","BrainIcon","ToolsIcon","GaugeIcon","DataKeysAndValues","ChevronUpIcon","ChevronDownIcon","ChevronsUpIcon","ChevronsDownIcon","FoldVerticalIcon","UnfoldVerticalIcon","ChevronsDownUpIcon","ChevronsUpDownIcon","tooltip","HoverCard","HoverCardTrigger","HoverCardContent","types","Spinner","isNonDefaultFilter","PropertyFilterApplied","PropertyFilterActions","toast","Loader2Icon","DownloadIcon","DataPanel","ButtonsGroup","Link2Icon","CircleGaugeIcon","SaveIcon","Notice","FileInputIcon","FileOutputIcon","BracesIcon","KV","DataDetailsPanel","COLUMNS","ROW_HEIGHT","OVERSCAN","useVirtualizer","DataListSkeleton","TracesDataList","DropdownMenu","SessionExpired","PermissionDenied","ErrorState","PRESET_LABELS","DATE_FORMAT","describeRange","EmptyState","CircleSlashIcon","ExternalLinkIcon","IMMUTABLE_CACHE_TIME","useQueryClient","useInfiniteQuery","DAY_MS","clearSelectionParams","DEFAULT_SAVED_MESSAGE","DEFAULT_CLEARED_MESSAGE","ArrowUpIcon","ArrowDownIcon","ArrowRightIcon","CopyButton","LogsDataListSkeleton","LogsDataList"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/ds/icons/AgentCoinIcon.tsx","../src/ds/icons/AiIcon.tsx","../src/ds/icons/ApiIcon.tsx","../src/ds/icons/BranchIcon.tsx","../src/ds/icons/CheckIcon.tsx","../src/ds/icons/ChevronIcon.tsx","../src/ds/icons/CommitIcon.tsx","../src/ds/icons/CrossIcon.tsx","../src/ds/icons/DbIcon.tsx","../src/ds/icons/DebugIcon.tsx","../src/ds/icons/DeploymentIcon.tsx","../src/ds/icons/DividerIcon.tsx","../src/ds/icons/DocsIcon.tsx","../src/ds/icons/EnvIcon.tsx","../src/ds/icons/FiltersIcon.tsx","../src/ds/icons/GithubCoinIcon.tsx","../src/ds/icons/GithubIcon.tsx","../src/ds/icons/GoogleIcon.tsx","../src/ds/icons/RepoIcon.tsx","../src/ds/icons/HomeIcon.tsx","../src/ds/icons/InfoIcon.tsx","../src/ds/icons/JudgeIcon.tsx","../src/ds/icons/LogsIcon.tsx","../src/ds/icons/MemoryIcon.tsx","../src/ds/icons/OpenAIIcon.tsx","../src/ds/icons/PromptIcon.tsx","../src/ds/icons/SettingsIcon.tsx","../src/ds/icons/SkillIcon.tsx","../src/ds/icons/TraceIcon.tsx","../src/ds/icons/TsIcon.tsx","../src/ds/icons/VariablesIcon.tsx","../src/ds/icons/WorkflowCoinIcon.tsx","../src/ds/icons/LatencyIcon.tsx","../src/ds/icons/McpServerIcon.tsx","../src/ds/icons/FolderIcon.tsx","../src/ds/icons/McpCoinIcon.tsx","../src/ds/icons/ToolCoinIcon.tsx","../src/ds/icons/AgentNetworkCoinIcon.tsx","../src/ds/icons/ProcessorIcon.tsx","../src/ds/icons/AmazonIcon.tsx","../src/ds/icons/AnthropicChatIcon.tsx","../src/ds/icons/AnthropicMessagesIcon.tsx","../src/ds/icons/AzureIcon.tsx","../src/ds/icons/CohereIcon.tsx","../src/ds/icons/GroqIcon.tsx","../src/ds/icons/MastraIcon.tsx","../src/ds/icons/MistralIcon.tsx","../src/ds/icons/NetlifyIcon.tsx","../src/ds/icons/OpenaiChatIcon.tsx","../src/ds/icons/XGroqIcon.tsx","../src/ds/icons/WorkspacesIcon.tsx","../src/ds/icons/RequestContextIcon.tsx","../src/ds/icons/ScorersIcon.tsx","../src/ds/icons/DatasetsIcon.tsx","../src/ds/icons/ExperimentsIcon.tsx","../src/ds/icons/MetricsIcon.tsx","../src/hooks/use-in-view.ts","../src/lib/string.ts","../src/lib/number.ts","../src/lib/object.ts","../src/lib/formatting.ts","../src/lib/colors.ts","../src/lib/truncate-string.ts","../src/lib/errors.ts","../src/lib/query-utils.ts","../src/lib/rule-engine/utils/index.ts","../src/lib/rule-engine/components/schema-utils.ts","../src/lib/rule-engine/components/rule-field-select.tsx","../src/lib/rule-engine/components/types.ts","../src/lib/rule-engine/components/rule-operator-select.tsx","../src/lib/rule-engine/components/rule-value-input.tsx","../src/lib/rule-engine/components/rule-row.tsx","../src/lib/rule-engine/components/rule-builder.tsx","../src/lib/resize/collapsible-panel.tsx","../src/lib/resize/separator.tsx","../src/lib/file/constants.ts","../src/lib/file/contentTypeFromUrl.ts","../src/lib/file/downloadJson.ts","../src/lib/file/toBase64.ts","../src/lib/template/generate-default-values.ts","../src/store/playground-store.ts","../src/domains/metrics/metrics-filters.ts","../src/domains/metrics/hooks/use-metrics.tsx","../src/domains/metrics/components/date-range-selector.tsx","../src/domains/metrics/components/metrics-utils.ts","../src/domains/metrics/components/bar-list.tsx","../src/domains/metrics/components/card-action-buttons.tsx","../src/domains/metrics/components/kpi-card-view.tsx","../src/domains/metrics/components/latency-card-view.tsx","../src/domains/metrics/components/memory-card-view.tsx","../src/domains/metrics/components/model-usage-cost-card-view.tsx","../src/domains/metrics/components/scores-card-view.tsx","../src/domains/metrics/components/token-usage-by-agent-card-view.tsx","../src/domains/metrics/components/token-usage-timeline-card-view.tsx","../src/domains/metrics/components/traces-volume-card-view.tsx","../src/domains/metrics/hooks/use-metrics-filters.tsx","../src/domains/metrics/hooks/use-agent-runs-kpi-metrics.tsx","../src/domains/metrics/hooks/use-model-cost-kpi-metrics.tsx","../src/domains/metrics/hooks/use-total-tokens-kpi-metrics.tsx","../src/domains/metrics/hooks/use-model-usage-cost-metrics.tsx","../src/domains/metrics/hooks/use-latency-metrics.tsx","../src/domains/metrics/hooks/use-trace-volume-metrics.tsx","../src/domains/metrics/hooks/use-scores-metrics.tsx","../src/domains/metrics/hooks/use-token-usage-by-agent-metrics.tsx","../src/domains/metrics/hooks/use-token-usage-timeseries.tsx","../src/domains/metrics/hooks/use-active-threads-kpi-metrics.tsx","../src/domains/metrics/hooks/use-active-resources-kpi-metrics.tsx","../src/domains/metrics/hooks/use-top-active-threads-metrics.tsx","../src/domains/metrics/hooks/use-top-resources-by-threads-metrics.tsx","../src/domains/logs/log-filters.ts","../src/domains/traces/trace-filters.ts","../src/domains/metrics/drilldown.ts","../src/domains/metrics/hooks/use-drilldown.tsx","../src/domains/traces/components/format-hierarchical-spans.ts","../src/domains/traces/components/shared.tsx","../src/domains/traces/components/span-token-usage.utils.ts","../src/domains/traces/components/span-token-usage.tsx","../src/domains/traces/components/timeline-expand-col.tsx","../src/domains/traces/components/timeline-structure-sign.tsx","../src/domains/traces/components/timeline-name-col.tsx","../src/domains/traces/components/timeline-timing-col.tsx","../src/domains/traces/components/trace-keys-and-values.tsx","../src/domains/traces/hooks/get-all-span-ids.ts","../src/domains/traces/components/trace-timeline-span.tsx","../src/domains/traces/components/trace-timeline.tsx","../src/domains/traces/components/traces-toolbar.tsx","../src/domains/traces/hooks/use-download-trace-json.ts","../src/domains/traces/components/trace-data-panel-view.tsx","../src/domains/traces/utils/span-utils.ts","../src/domains/traces/components/span-data-panel-view.tsx","../src/domains/traces/components/span-details-view.tsx","../src/domains/traces/components/trace-details-view.tsx","../src/domains/traces/components/traces-layout.tsx","../src/domains/traces/components/traces-list-view.tsx","../src/domains/traces/components/traces-list-mode-toggle.tsx","../src/domains/traces/components/traces-error-content.tsx","../src/domains/traces/components/no-traces-info.tsx","../src/domains/traces/hooks/use-branch.ts","../src/domains/traces/hooks/use-span-detail.ts","../src/domains/traces/hooks/use-trace-light-spans.ts","../src/domains/traces/hooks/use-trace-or-branch-spans.ts","../src/domains/traces/hooks/use-trace-spans.ts","../src/domains/traces/hooks/use-traces.tsx","../src/domains/traces/hooks/use-tags.ts","../src/domains/traces/hooks/use-entity-names.ts","../src/domains/traces/hooks/use-environments.ts","../src/domains/traces/hooks/use-service-names.ts","../src/domains/traces/hooks/use-trace-span-navigation.tsx","../src/domains/traces/hooks/use-trace-list-navigation.tsx","../src/domains/traces/hooks/use-trace-url-state.tsx","../src/domains/traces/hooks/use-trace-filter-persistence.tsx","../src/domains/traces/types.ts","../src/domains/logs/components/log-details-view.tsx","../src/domains/logs/components/logs-error-content.tsx","../src/domains/logs/components/logs-layout.tsx","../src/domains/logs/components/logs-list-view.tsx","../src/domains/logs/components/logs-toolbar.tsx","../src/domains/logs/components/no-logs-info.tsx","../src/domains/logs/hooks/use-logs.ts","../src/domains/logs/hooks/use-logs-url-state.tsx","../src/domains/logs/hooks/use-logs-filter-persistence.tsx","../src/domains/logs/hooks/use-logs-list-navigation.tsx"],"sourcesContent":["import React from 'react';\n\nexport const AgentCoinIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"126\" height=\"85\" viewBox=\"0 0 126 85\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M63.0002 0.968262C28.5152 0.968262 0.55957 15.6484 0.55957 33.7573V51.2428C0.55957 69.3517 28.5152 84.0319 63.0002 84.0319C97.4853 84.0319 125.441 69.3517 125.441 51.2428V33.7573C125.441 15.6484 97.4853 0.968262 63.0002 0.968262Z\"\n stroke=\"#707070\"\n />\n <path\n d=\"M119.322 35.1636C119.322 50.3595 94.1055 62.6782 62.9998 62.6782C31.894 62.6782 6.67773 50.3595 6.67773 35.1636V49.8363C6.67773 65.0322 31.894 77.351 62.9998 77.351C94.1055 77.351 119.322 65.0322 119.322 49.8363V35.1636Z\"\n fill=\"#2E2E2E\"\n fillOpacity=\"0.9\"\n />\n <path\n d=\"M119.322 35.1636C119.322 50.3595 94.1055 62.6782 62.9998 62.6782C31.894 62.6782 6.67773 50.3595 6.67773 35.1636M119.322 35.1636C119.322 19.9677 94.1055 7.64893 62.9998 7.64893C31.894 7.64893 6.67773 19.9677 6.67773 35.1636M119.322 35.1636V49.8363C119.322 65.0322 94.1055 77.351 62.9998 77.351C31.894 77.351 6.67773 65.0322 6.67773 49.8363V35.1636\"\n stroke=\"#424242\"\n />\n <g clipPath=\"url(#clip0_21421_19519)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M38.5383 47.0955C45.0714 50.3122 53.9322 52.1193 63.1714 52.1193C72.4106 52.1193 81.2714 50.3122 87.8045 47.0955C94.3376 43.8787 98.0078 39.5159 98.0078 34.9668C98.0078 30.4177 94.3376 26.0549 87.8045 22.8381C81.2714 19.6214 72.4106 17.8143 63.1714 17.8143C53.9322 17.8143 45.0714 19.6214 38.5383 22.8381C32.0052 26.0549 28.3349 30.4177 28.3349 34.9668C28.3349 39.5159 32.0052 43.8787 38.5383 47.0955ZM42.9089 34.9668L35.8005 34.9668C35.8004 32.3013 37.4056 29.6956 40.4132 27.4793C43.4207 25.263 47.6956 23.5355 52.6971 22.5154C57.6986 21.4954 63.2022 21.2285 68.5118 21.7485C73.8214 22.2685 78.6986 23.552 82.5266 25.4368C86.3546 27.3216 88.9615 29.723 90.0176 32.3373C91.0737 34.9517 90.5316 37.6614 88.4599 40.1241C86.3881 42.5867 82.8797 44.6915 78.3784 46.1723C73.8771 47.6532 68.585 48.4435 63.1714 48.4435V44.9435C63.1717 43.9778 62.7855 43.0215 62.035 42.1293C61.2845 41.2372 60.1843 40.4265 58.7973 39.7438L53.4695 37.1205C52.0828 36.4376 50.4364 35.8959 48.6244 35.5263C46.8124 35.1568 44.8702 34.9667 42.9089 34.9668Z\"\n fill=\"#A9A9A9\"\n />\n <path\n d=\"M77.2474 28.0361C75.3808 27.1171 72.8492 26.6007 70.2094 26.6007C67.5696 26.6007 65.038 27.1171 63.1714 28.0361L61.4119 28.9025C59.5453 29.8215 58.4966 31.068 58.4966 32.3678C58.4966 33.6676 59.5453 34.9141 61.4119 35.8331C63.2785 36.7522 65.8101 37.2685 68.4499 37.2685C71.0897 37.2685 73.6213 36.7522 75.4879 35.8331L77.2474 34.9668C79.114 34.0477 80.1627 32.8012 80.1627 31.5015C80.1627 30.2017 79.114 28.9552 77.2474 28.0361Z\"\n fill=\"#A9A9A9\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_21421_19519\">\n <rect\n width=\"62.7591\"\n height=\"62.7591\"\n fill=\"white\"\n transform=\"matrix(0.897148 0.441731 -0.897148 0.441731 63.1714 7.24365)\"\n />\n </clipPath>\n </defs>\n </svg>\n);\n","import React from 'react';\n\nexport const AiIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M4.31445 3.16083C3.78402 3.16083 3.27531 3.37154 2.90024 3.74661C2.52517 4.12169 2.31445 4.63039 2.31445 5.16083V5.66083C2.31445 6.19126 2.52517 6.69997 2.90024 7.07504C3.27531 7.45011 3.78402 7.66083 4.31445 7.66083C4.84489 7.66083 5.35359 7.45011 5.72867 7.07504C6.10374 6.69997 6.31445 6.19126 6.31445 5.66083V5.16083C6.31445 4.63039 6.10374 4.12169 5.72867 3.74661C5.35359 3.37154 4.84489 3.16083 4.31445 3.16083Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M6.76666 9.50235C6.57678 9.28532 6.30244 9.16083 6.01407 9.16083H4.50201C4.10791 9.16078 3.71766 9.23838 3.35356 9.38921C3.11733 9.48706 2.8951 9.6145 2.69205 9.76806C2.48056 9.928 2.38001 10.1888 2.38001 10.454V13.0642C2.38001 13.6165 2.82773 14.0642 3.38001 14.0642H8.55436C9.4135 14.0642 9.87269 13.0523 9.30695 12.4057L6.76666 9.50235Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.0686 2.26107C12.0686 2.17635 11.9999 2.10767 11.9152 2.10767H10.9948C10.91 2.10767 10.8414 2.17635 10.8414 2.26107V3.85184C10.8414 3.95606 10.7397 4.02994 10.6406 3.99773L9.12775 3.50619C9.04718 3.48001 8.96063 3.52411 8.93445 3.60468L8.65003 4.48004C8.62385 4.56062 8.66795 4.64716 8.74852 4.67334L10.2611 5.1648C10.3602 5.19701 10.399 5.31655 10.3378 5.40086L9.40289 6.68765C9.35309 6.75619 9.36829 6.85212 9.43683 6.90192L10.1815 7.44292C10.25 7.49272 10.3459 7.47752 10.3957 7.40898L11.3309 6.12181C11.3922 6.03749 11.5179 6.03749 11.5791 6.12181L12.5143 7.40904C12.5641 7.47758 12.6601 7.49278 12.7286 7.44298L13.4732 6.90198C13.5418 6.85218 13.557 6.75625 13.5072 6.68771L12.5723 5.40091C12.511 5.3166 12.5499 5.19705 12.649 5.16485L14.1615 4.67338C14.2421 4.6472 14.2862 4.56066 14.26 4.48009L13.9756 3.60473C13.9494 3.52415 13.8629 3.48006 13.7823 3.50624L12.2694 3.99782C12.1703 4.03003 12.0686 3.95615 12.0686 3.85193V2.26107Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const ApiIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M11.0313 7.97578C11.0313 9.34436 9.92183 10.4538 8.55324 10.4538C7.18466 10.4538 6.0752 9.34436 6.0752 7.97578C6.0752 6.60719 7.18466 5.49773 8.55324 5.49773C9.92183 5.49773 11.0313 6.60719 11.0313 7.97578ZM11.0313 7.97578H14.573\"\n stroke=\"currentColor\"\n strokeWidth=\"1.33333\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M12.967 4.46154C11.9273 3.14431 10.3165 2.29883 8.50814 2.29883C5.37277 2.29883 2.83105 4.84055 2.83105 7.97591C2.83105 11.1113 5.37277 13.653 8.50814 13.653C10.3165 13.653 11.9273 12.8075 12.967 11.4903\"\n stroke=\"currentColor\"\n strokeWidth=\"1.33333\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const BranchIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <circle cx=\"8.57129\" cy=\"8.08496\" r=\"2.27832\" stroke=\"currentColor\" />\n <path d=\"M5.89692 8.08203H2.45312\" stroke=\"currentColor\" />\n <path d=\"M14.5454 8.08203H11.1016\" stroke=\"currentColor\" />\n </svg>\n);\n","import React from 'react';\n\nexport const CheckIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.99982 2.0625C3.8252 2.0625 2.06232 3.82538 2.06232 6C2.06232 8.17462 3.8252 9.9375 5.99982 9.9375C8.17444 9.9375 9.93732 8.17462 9.93732 6C9.93732 3.82538 8.17444 2.0625 5.99982 2.0625ZM0.937317 6C0.937317 3.20406 3.20388 0.9375 5.99982 0.9375C8.79576 0.9375 11.0623 3.20406 11.0623 6C11.0623 8.79594 8.79576 11.0625 5.99982 11.0625C3.20388 11.0625 0.937317 8.79594 0.937317 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.97865 4.57004C8.22604 4.75795 8.27426 5.11082 8.08635 5.35821L6.05486 8.03279C5.94873 8.17251 5.78348 8.25471 5.60803 8.25505C5.43257 8.2554 5.267 8.17385 5.16032 8.03454L3.80937 6.27034C3.6205 6.02369 3.66733 5.67063 3.91398 5.48176C4.16063 5.29288 4.51369 5.33972 4.70257 5.58637L5.6051 6.76498L7.19048 4.67774C7.37839 4.43036 7.73126 4.38213 7.97865 4.57004Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const ChevronIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M4.60059 6.30005L8.00098 9.70005L11.3996 6.30142\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const CommitIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"12\" height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M1.46484 7.18262H3.29529C3.55505 8.46829 4.69121 9.43628 6.05347 9.43628C7.41572 9.43628 8.55188 8.46829 8.81165 7.18262L10.534 7.18262C10.8447 7.18262 11.0965 6.93078 11.0965 6.62012C11.0965 6.30946 10.8447 6.05762 10.534 6.05762L8.81075 6.05762C8.54929 4.77414 7.41417 3.80835 6.05347 3.80835C4.69277 3.80835 3.55764 4.77414 3.29618 6.05762H1.46484C1.15418 6.05762 0.902344 6.30946 0.902344 6.62012C0.902344 6.93078 1.15418 7.18262 1.46484 7.18262ZM6.05347 4.93335C5.12068 4.93335 4.3645 5.68952 4.3645 6.62231C4.3645 7.5551 5.12068 8.31128 6.05347 8.31128C6.98626 8.31128 7.74243 7.5551 7.74243 6.62231C7.74243 5.68952 6.98626 4.93335 6.05347 4.93335Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const CrossIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.99982 2.0625C3.8252 2.0625 2.06232 3.82538 2.06232 6C2.06232 8.17462 3.8252 9.9375 5.99982 9.9375C8.17444 9.9375 9.93732 8.17462 9.93732 6C9.93732 3.82538 8.17444 2.0625 5.99982 2.0625ZM0.937317 6C0.937317 3.20406 3.20388 0.9375 5.99982 0.9375C8.79576 0.9375 11.0623 3.20406 11.0623 6C11.0623 8.79594 8.79576 11.0625 5.99982 11.0625C3.20388 11.0625 0.937317 8.79594 0.937317 6Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.89741 4.10293C8.11707 4.32261 8.11706 4.67877 7.89738 4.89843L6.79517 6.00058L7.8962 7.10155C8.11588 7.32122 8.11589 7.67737 7.89623 7.89705C7.67656 8.11673 7.32041 8.11674 7.10073 7.89707L5.99965 6.79605L4.89856 7.89707C4.67889 8.11673 4.32273 8.11672 4.10307 7.89704C3.88341 7.67737 3.88342 7.32121 4.10309 7.10155L5.20413 6.00058L4.10191 4.89843C3.88224 4.67877 3.88223 4.32262 4.10189 4.10294C4.32155 3.88326 4.67771 3.88325 4.89738 4.10292L5.99965 5.20511L7.10191 4.10291C7.32159 3.88325 7.67774 3.88326 7.89741 4.10293Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const DbIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"13\" height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0.941406 2.831V3.75745C0.941406 4.27885 1.35491 4.76002 2.05273 5.14711C2.10389 5.17549 2.15658 5.20337 2.21074 5.23071C3.23028 5.74546 4.77322 6.07356 6.50007 6.07356C8.31866 6.07356 9.93328 5.70967 10.9474 5.14711C11.6453 4.76002 12.0587 4.27886 12.0587 3.75745V2.831C12.0587 1.55185 9.57003 0.514893 6.50007 0.514893C3.4301 0.514893 0.941406 1.55185 0.941406 2.831ZM1.02052 6.14518C0.968505 6.27247 0.941406 6.40331 0.941406 6.53678V7.46322C0.941406 7.98463 1.35491 8.46579 2.05273 8.85289C3.06686 9.41542 4.68148 9.77933 6.50007 9.77933C8.22692 9.77933 9.76986 9.45128 10.7894 8.93645C10.8436 8.90912 10.8962 8.88124 10.9474 8.85289C11.6453 8.46579 12.0587 7.98462 12.0587 7.46322V6.53678C12.0587 6.40331 12.0316 6.27248 11.9796 6.14519C11.664 6.35469 11.3187 6.53063 10.9652 6.67795C9.75207 7.18337 8.17267 7.46322 6.50007 7.46322C4.82747 7.46322 3.24803 7.18337 2.03502 6.67795C1.68142 6.53063 1.3362 6.35469 1.02052 6.14518ZM1.02052 9.85095C0.968505 9.97824 0.941406 10.1091 0.941406 10.2426V11.169C0.941406 12.4481 3.4301 13.4851 6.50007 13.4851C9.57003 13.4851 12.0587 12.4481 12.0587 11.169V10.2426C12.0587 10.1091 12.0316 9.97824 11.9796 9.85095C11.664 10.0605 11.3187 10.2364 10.9652 10.3837C9.75207 10.8891 8.17267 11.169 6.50007 11.169C4.82747 11.169 3.24803 10.8891 2.03502 10.3837C1.68142 10.2364 1.3362 10.0605 1.02052 9.85095Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const DebugIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M6.14934 2.26085C5.88284 2.57794 5.92385 3.05104 6.24094 3.31754L7.05702 4.00343C6.51911 4.24774 6.05679 4.62747 5.72304 5.10093L4.31451 3.91711C3.99742 3.65061 3.52432 3.69162 3.25781 4.00871C2.99131 4.3258 3.03232 4.7989 3.34941 5.06541L5.1711 6.59647C5.16257 6.69009 5.1582 6.78504 5.1582 6.88115V8.02254H3.36523C2.95102 8.02254 2.61523 8.35833 2.61523 8.77254C2.61523 9.18675 2.95102 9.52254 3.36523 9.52254H5.1582V11.0692L3.38248 12.7049C3.07782 12.9856 3.05836 13.4601 3.339 13.7647C3.61965 14.0694 4.09412 14.0888 4.39877 13.8082L10.2843 8.38652V10.5302C10.2843 11.4231 9.5099 12.2129 8.47123 12.2129C8.28703 12.2129 8.11062 12.1876 7.94518 12.1411C7.54642 12.029 7.13229 12.2614 7.02021 12.6601C6.90812 13.0589 7.14051 13.473 7.53927 13.5851C7.83596 13.6685 8.14892 13.7129 8.47123 13.7129C9.71498 13.7129 10.8279 13.0443 11.3927 12.0355L13.0897 13.4618C13.4068 13.7283 13.8799 13.6873 14.1464 13.3702C14.4129 13.0531 14.3719 12.58 14.0548 12.3135L11.7843 10.4052V9.52254H13.634C14.0482 9.52254 14.384 9.18675 14.384 8.77254C14.384 8.35833 14.0482 8.02254 13.634 8.02254H11.7843V7.00473L13.9182 5.039C14.2228 4.75836 14.2423 4.28389 13.9616 3.97923C13.681 3.67458 13.2065 3.65512 12.9019 3.93576L6.6582 9.68737V6.88115C6.6582 5.98821 7.43256 5.19844 8.47123 5.19844L8.4789 5.19846L8.50782 5.22276L8.53124 5.19934C8.72739 5.20523 8.91424 5.23987 9.08781 5.29818C9.48045 5.43009 9.90569 5.21873 10.0376 4.82608C10.146 4.50351 10.0227 4.15895 9.75749 3.97309L10.4258 3.30474C10.7187 3.01185 10.7187 2.53698 10.4258 2.24408C10.1329 1.95119 9.65807 1.95119 9.36518 2.24408L8.41985 3.18941L7.20604 2.16925C6.88895 1.90274 6.41585 1.94375 6.14934 2.26085Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const DeploymentIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"13\" height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M6.83531 7.0062C6.64515 7.35069 6.15 7.35069 5.95984 7.0062L2.99029 1.62664C2.7855 1.25565 3.10614 0.814077 3.5223 0.893977L6.30195 1.42765C6.36421 1.43961 6.42818 1.43961 6.49044 1.42766L9.27301 0.893806C9.68915 0.813965 10.0097 1.25552 9.80495 1.62648L6.83531 7.0062Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.77553 6.93249C4.70399 6.80288 4.52254 6.79459 4.4558 6.92674C4.30167 7.23196 4.21484 7.57697 4.21484 7.94226C4.21484 9.18814 5.22483 10.1981 6.4707 10.1981C7.71658 10.1981 8.72656 9.18814 8.72656 7.94226C8.72656 7.51818 8.60954 7.12143 8.40603 6.78254C8.33262 6.66031 8.15949 6.67411 8.09059 6.79894L7.70941 7.48947C7.13892 8.52294 5.65347 8.52293 5.08299 7.48947L4.77553 6.93249ZM5.56313 5.8764C5.46196 5.92091 5.42707 6.04354 5.48048 6.1403L5.95846 7.0062C6.14862 7.35069 6.64377 7.35069 6.83393 7.0062L7.33905 6.09115C7.39467 5.99039 7.35417 5.86275 7.2461 5.8232C7.00431 5.7347 6.74315 5.6864 6.4707 5.6864C6.14785 5.6864 5.84083 5.75423 5.56313 5.8764Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.01974 3.49407C4.17993 3.78426 4.54405 3.88541 4.85312 3.76562C5.35484 3.57118 5.90031 3.46453 6.4707 3.46453C7.0005 3.46453 7.50881 3.55654 7.98052 3.72545C8.28711 3.83523 8.64168 3.73133 8.79906 3.44623C8.96234 3.15043 8.85109 2.77497 8.5364 2.652C7.89621 2.40184 7.19949 2.26453 6.4707 2.26453C5.69013 2.26453 4.94634 2.42205 4.2694 2.70703C3.96395 2.83562 3.85958 3.20392 4.01974 3.49407ZM9.9461 4.47216C9.81565 4.70848 9.85645 4.99948 10.0211 5.21339C10.6026 5.96887 10.9484 6.91518 10.9484 7.94226C10.9484 10.4152 8.94369 12.42 6.4707 12.42C3.99772 12.42 1.99297 10.4152 1.99297 7.94226C1.99297 6.96004 2.30923 6.05168 2.84547 5.31345C3.0006 5.09989 3.03605 4.81591 2.90848 4.58482C2.70986 4.22501 2.22216 4.15342 1.97124 4.47893C1.2324 5.43738 0.792968 6.6385 0.792968 7.94226C0.792969 11.078 3.33498 13.62 6.4707 13.62C9.60643 13.62 12.1484 11.078 12.1484 7.94226C12.1484 6.58193 11.67 5.33333 10.8723 4.35553C10.6173 4.04298 10.141 4.11901 9.9461 4.47216Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const DividerIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M8.5 3V13\" stroke=\"currentColor\" strokeWidth=\"0.5\" />\n </svg>\n);\n","import React from 'react';\n\nexport const DocsIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.1747 3.18598L7.02554 1.95209C7.11557 1.89207 7.31087 1.87106 7.41016 1.90924L12.4139 3.83377C12.4683 3.85467 12.546 3.96798 12.546 4.03118V13.0167C12.546 13.265 12.7473 13.4663 12.9956 13.4663C13.2439 13.4663 13.4452 13.265 13.4452 13.0167V4.03118C13.4452 3.59605 13.1384 3.14906 12.7367 2.99456L7.73293 1.07004C7.36225 0.927472 6.86056 0.981451 6.52679 1.20396L4.20445 2.75219L3.90419 2.95236L3.90647 2.95824C3.69329 3.05449 3.55469 3.27599 3.55469 3.57581V11.7119C3.55469 12.2084 3.93067 12.7499 4.39251 12.9206L9.89804 14.955C10.3608 15.126 10.7359 14.8596 10.7359 14.3659V5.83295C10.7359 5.33662 10.3498 4.81289 9.88389 4.66643L5.1747 3.18598Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const EnvIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <rect x=\"2.74902\" y=\"1.89307\" width=\"11.8252\" height=\"11.8252\" rx=\"1.5\" stroke=\"currentColor\" />\n <path\n d=\"M5.74512 5.43539L8.13964 7.83011L5.86867 10.1011M9.32711 10.1753H11.7465\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const FiltersIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.00001 12.5C6.00001 11.948 6.44401 11.5 7.00001 11.5H10C10.552 11.5 11 11.944 11 12.5C11 13.052 10.556 13.5 10 13.5H7.00001C6.44801 13.5 6.00001 13.056 6.00001 12.5ZM4.00001 8.5C4.00001 7.948 4.44601 7.5 4.99801 7.5H12.002C12.553 7.5 13 7.944 13 8.5C13 9.052 12.554 9.5 12.002 9.5H4.99801C4.86671 9.50026 4.73665 9.47457 4.61531 9.42438C4.49398 9.37419 4.38377 9.30051 4.29102 9.20757C4.19827 9.11464 4.12481 9.00428 4.07486 8.88284C4.02492 8.76141 3.99948 8.6313 4.00001 8.5ZM1.50001 4C1.50001 3.172 2.17501 2.5 2.99801 2.5H14.002C14.829 2.5 15.5 3.166 15.5 4C15.5 4.828 14.825 5.5 14.002 5.5H2.99801C2.80101 5.5004 2.60587 5.46185 2.42382 5.38659C2.24176 5.31132 2.07638 5.20082 1.93717 5.06142C1.79796 4.92203 1.68768 4.7565 1.61265 4.57434C1.53763 4.39219 1.49935 4.197 1.50001 4Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const GithubCoinIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"127\" height=\"86\" viewBox=\"0 0 127 86\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M63.9116 1.87891C29.4266 1.87891 1.47095 16.5591 1.47095 34.668V52.1534C1.47095 70.2623 29.4266 84.9425 63.9116 84.9425C98.3967 84.9425 126.352 70.2623 126.352 52.1534V34.668C126.352 16.5591 98.3967 1.87891 63.9116 1.87891Z\"\n stroke=\"#707070\"\n />\n <path\n d=\"M120.233 36.0742C120.233 51.2701 95.0169 63.5889 63.9111 63.5889C32.8053 63.5889 7.58911 51.2701 7.58911 36.0742V50.7469C7.58911 65.9429 32.8053 78.2616 63.9111 78.2616C95.0169 78.2616 120.233 65.9429 120.233 50.7469V36.0742Z\"\n fill=\"#2E2E2E\"\n fillOpacity=\"0.9\"\n />\n <path\n d=\"M120.233 36.0742C120.233 51.2701 95.0169 63.5889 63.9111 63.5889C32.8053 63.5889 7.58911 51.2701 7.58911 36.0742M120.233 36.0742C120.233 20.8783 95.0169 8.55957 63.9111 8.55957C32.8053 8.55957 7.58911 20.8783 7.58911 36.0742M120.233 36.0742V50.7469C120.233 65.9429 95.0169 78.2616 63.9111 78.2616C32.8053 78.2616 7.58911 65.9429 7.58911 50.7469V36.0742\"\n stroke=\"#424242\"\n />\n <g clipPath=\"url(#clip0_21999_20545)\">\n <path\n d=\"M86.4812 24.847C73.5239 18.4672 52.5342 18.4672 39.5769 24.847C29.1993 29.9566 27.1473 37.5778 33.3621 43.6978C34.3295 44.3762 35.4728 44.2463 36.0884 43.9432C36.6454 43.6689 38.4629 42.7452 40.4271 41.7781C33.45 39.4109 34.4468 37.419 35.2969 36.5385C35.7073 36.0766 36.6454 34.4889 36.2057 33.7239C35.8246 33.1032 35.7366 31.9918 37.7301 32.9445C39.6062 33.8394 39.1958 35.3405 38.932 35.9034C37.4955 38.6892 41.8635 39.8584 43.8276 40.2192C45.5572 39.5697 47.1989 39.3676 48.4594 39.4109C43.8276 36.553 40.3977 32.8723 49.3682 28.4555C51.9186 27.1997 54.9381 26.6079 58.0748 26.5358C58.4266 26.1316 60.0096 24.5439 64.5241 23.5912C64.5241 23.5912 67.1039 24.2552 68.5696 27.9503C70.9735 28.6143 73.2307 29.4659 75.2242 30.4474C77.2176 31.4289 78.9472 32.5403 80.2957 33.7239C87.8297 34.4312 89.1489 35.7158 89.1489 35.7158C87.2141 37.9386 83.9894 38.7181 83.1686 38.8913C83.022 40.4357 81.8494 41.908 79.2697 43.1782C70.2699 47.6094 62.7945 45.8918 56.9901 43.6112C57.1074 44.3906 56.4331 45.4443 54.2345 46.5269C51.0978 48.0713 48.5474 49.2982 47.7558 49.6879C47.1402 49.991 46.8471 50.5684 48.2542 51.0303C54.4816 52.5487 61.5193 53.0674 68.3768 52.5133C75.2342 51.9592 81.5661 50.3602 86.4812 47.9414C99.4385 41.5616 99.4385 31.2268 86.4812 24.847Z\"\n fill=\"#A9A9A9\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_21999_20545\">\n <rect\n width=\"62.7591\"\n height=\"62.7591\"\n fill=\"white\"\n transform=\"matrix(0.897148 0.441731 -0.897148 0.441731 64.0828 8.1543)\"\n />\n </clipPath>\n </defs>\n </svg>\n);\n","import React from 'react';\n\nexport const GithubIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#clip0_21999_22095)\">\n <path\n d=\"M7.5 0.75C3.6325 0.75 0.5 3.8825 0.5 7.75C0.5 10.8475 2.50375 13.4637 5.28625 14.3912C5.63625 14.4525 5.7675 14.2425 5.7675 14.0587C5.7675 13.8925 5.75875 13.3412 5.75875 12.755C4 13.0787 3.545 12.3262 3.405 11.9325C3.32625 11.7312 2.985 11.11 2.6875 10.9437C2.4425 10.8125 2.0925 10.4887 2.67875 10.48C3.23 10.4712 3.62375 10.9875 3.755 11.1975C4.385 12.2562 5.39125 11.9587 5.79375 11.775C5.855 11.32 6.03875 11.0137 6.24 10.8387C4.6825 10.6637 3.055 10.06 3.055 7.3825C3.055 6.62125 3.32625 5.99125 3.7725 5.50125C3.7025 5.32625 3.4575 4.60875 3.8425 3.64625C3.8425 3.64625 4.42875 3.4625 5.7675 4.36375C6.3275 4.20625 6.9225 4.1275 7.5175 4.1275C8.1125 4.1275 8.7075 4.20625 9.2675 4.36375C10.6062 3.45375 11.1925 3.64625 11.1925 3.64625C11.5775 4.60875 11.3325 5.32625 11.2625 5.50125C11.7087 5.99125 11.98 6.6125 11.98 7.3825C11.98 10.0687 10.3438 10.6637 8.78625 10.8387C9.04 11.0575 9.25875 11.4775 9.25875 12.1337C9.25875 13.07 9.25 13.8225 9.25 14.0587C9.25 14.2425 9.38125 14.4612 9.73125 14.3912C11.1209 13.9221 12.3284 13.029 13.1839 11.8377C14.0393 10.6463 14.4996 9.21668 14.5 7.75C14.5 3.8825 11.3675 0.75 7.5 0.75Z\"\n fill=\"currentColor\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_21999_22095\">\n <rect width=\"14\" height=\"14\" fill=\"currentColor\" transform=\"translate(0.5 0.75)\" />\n </clipPath>\n </defs>\n </svg>\n);\n","import React from 'react';\n\nexport const GoogleIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <g clipPath=\"url(#clip0_21999_20513)\">\n <path\n d=\"M13.5037 7.54867C13.5037 7.1144 13.4648 6.69683 13.3924 6.29596H7.62436V8.66776H10.9204C10.7756 9.43052 10.3413 10.0764 9.68994 10.5106V12.0529H11.6776C12.8356 10.9839 13.5037 9.41382 13.5037 7.54867Z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M7.62415 13.5339C9.27773 13.5339 10.6643 12.9882 11.6776 12.0529L9.68994 10.5106C9.14431 10.8781 8.44816 11.1009 7.62415 11.1009C6.03182 11.1009 4.67889 10.0263 4.19451 8.57877H2.15677V10.16C3.1645 12.1587 5.23008 13.5339 7.62415 13.5339Z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M4.19472 8.57315C4.07223 8.20569 3.99985 7.81595 3.99985 7.40952C3.99985 7.00308 4.07223 6.61335 4.19472 6.24589V4.66469H2.15698C1.73941 5.4887 1.5 6.41849 1.5 7.40952C1.5 8.40055 1.73941 9.33034 2.15698 10.1543L3.74374 8.91834L4.19472 8.57315Z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M7.62415 3.72376C8.5261 3.72376 9.32783 4.03555 9.96811 4.63685L11.7219 2.88306C10.6585 1.89202 9.27773 1.28516 7.62415 1.28516C5.23008 1.28516 3.16471 2.66036 2.15698 4.66469L4.19472 6.24589C4.6791 4.79832 6.03182 3.72376 7.62415 3.72376Z\"\n fill=\"#EA4335\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_21999_20513\">\n <rect width=\"12.2487\" height=\"12.2487\" fill=\"white\" transform=\"translate(1.375 1.28516)\" />\n </clipPath>\n </defs>\n </svg>\n);\n","import React from 'react';\n\nexport const RepoIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"21\" height=\"21\" viewBox=\"0 0 21 21\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.15562 2.79004C4.56136 2.78745 3.26758 4.07913 3.26758 5.6734V13.8135C3.26758 15.4058 4.55831 16.6967 6.15062 16.6968L6.16797 16.6968V14.8218L6.15082 14.8218C5.59397 14.8218 5.14258 14.3703 5.14258 13.8135V13.4325C5.14258 12.8756 5.59415 12.4241 6.15112 12.4242L15.0001 12.4258L15.0056 14.8228L12.6035 14.8226V16.6976L16.8849 16.698L16.8713 10.7717V2.80745L6.15562 2.79004ZM14.9963 10.5508V4.67941L6.15257 4.66504C5.59503 4.66413 5.14258 5.11586 5.14258 5.6734V10.7304C5.4566 10.6132 5.79655 10.5491 6.15147 10.5492L14.9963 10.5508Z\"\n fill=\"#939393\"\n />\n <path d=\"M7.55469 13.6982H11.2655V18.6897L9.41007 17.1997L7.55469 18.6897V13.6982Z\" fill=\"#939393\" />\n </svg>\n);\n","import React from 'react';\n\nexport const HomeIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"13\" height=\"14\" viewBox=\"0 0 13 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path d=\"M3.84766 10.1444H9.11328\" stroke=\"currentColor\" strokeWidth=\"1.33333\" strokeLinecap=\"round\" />\n <path\n d=\"M11.1395 12.9536L1.82388 12.9535C1.4557 12.9535 1.15723 12.655 1.15723 12.2868V5.69147C1.15723 5.49041 1.24796 5.30009 1.40417 5.17351L6.07746 1.38658C6.32202 1.18841 6.67185 1.18829 6.91654 1.38629L11.5589 5.14286C11.7153 5.26944 11.8062 5.45989 11.8062 5.66111V12.287C11.8062 12.6552 11.5077 12.9536 11.1395 12.9536Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.33333\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const InfoIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M7.07303 7.39921C6.65882 7.39921 6.32303 7.735 6.32303 8.14921C6.32303 8.56343 6.65882 8.89921 7.07303 8.89921H7.75V10.6187C7.75 11.0329 8.08579 11.3687 8.5 11.3687C8.91421 11.3687 9.25 11.0329 9.25 10.6187V8.14921C9.25 7.735 8.91421 7.39921 8.5 7.39921H7.07303Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M8.50309 4.72995C7.9971 4.72995 7.58691 5.14014 7.58691 5.64613C7.58691 6.15212 7.9971 6.56231 8.50309 6.56231C9.00908 6.56231 9.41927 6.15212 9.41927 5.64613C9.41927 5.14014 9.00908 4.72995 8.50309 4.72995Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.5 1.75293C5.04984 1.75293 2.25293 4.54984 2.25293 8C2.25293 11.4502 5.04984 14.2471 8.5 14.2471C11.9502 14.2471 14.7471 11.4502 14.7471 8C14.7471 4.54984 11.9502 1.75293 8.5 1.75293ZM3.75293 8C3.75293 5.37827 5.87827 3.25293 8.5 3.25293C11.1218 3.25293 13.2471 5.37826 13.2471 8C13.2471 10.6218 11.1218 12.7471 8.5 12.7471C5.87826 12.7471 3.75293 10.6218 3.75293 8Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const JudgeIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M4.31445 3.16083C3.78402 3.16083 3.27531 3.37154 2.90024 3.74661C2.52517 4.12169 2.31445 4.63039 2.31445 5.16083V5.66083C2.31445 6.19126 2.52517 6.69997 2.90024 7.07504C3.27531 7.45011 3.78402 7.66083 4.31445 7.66083C4.84489 7.66083 5.35359 7.45011 5.72867 7.07504C6.10374 6.69997 6.31445 6.19126 6.31445 5.66083V5.16083C6.31445 4.63039 6.10374 4.12169 5.72867 3.74661C5.35359 3.37154 4.84489 3.16083 4.31445 3.16083Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M6.76666 9.50235C6.57678 9.28532 6.30244 9.16083 6.01407 9.16083H4.50201C4.10791 9.16078 3.71766 9.23838 3.35356 9.38921C3.11733 9.48706 2.8951 9.6145 2.69205 9.76806C2.48056 9.928 2.38001 10.1888 2.38001 10.454V13.0642C2.38001 13.6165 2.82773 14.0642 3.38001 14.0642H8.55436C9.4135 14.0642 9.87269 13.0523 9.30695 12.4057L6.76666 9.50235Z\"\n fill=\"currentColor\"\n />\n <rect x=\"7.92188\" y=\"6.46759\" width=\"1.41089\" height=\"1.56773\" rx=\"0.705445\" fill=\"currentColor\" />\n <rect x=\"10.4258\" y=\"4.35107\" width=\"1.41089\" height=\"3.72998\" rx=\"0.705445\" fill=\"currentColor\" />\n <rect x=\"12.9287\" y=\"2.23419\" width=\"1.41089\" height=\"5.75781\" rx=\"0.705445\" fill=\"currentColor\" />\n </svg>\n);\n","import React from 'react';\n\nexport const LogsIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 10.0412 8.39395\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M0 0.916539C0 0.410349 0.410349 0 0.916539 0C1.42273 0 1.83308 0.410349 1.83308 0.916539C1.83308 1.42273 1.42273 1.83308 0.916539 1.83308C0.410349 1.83308 0 1.42273 0 0.916539Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M2.88569 0.916539C2.88569 0.410349 3.29604 0 3.80223 0C4.30842 0 4.71877 0.410349 4.71877 0.916539C4.71877 1.42273 4.30842 1.83308 3.80223 1.83308C3.29604 1.83308 2.88569 1.42273 2.88569 0.916539Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M5.77139 0.916539C5.77139 0.410349 6.18174 0 6.68793 0H9.12465C9.63084 0 10.0412 0.410349 10.0412 0.916539C10.0412 1.42273 9.63084 1.83308 9.12465 1.83308H6.68793C6.18174 1.83308 5.77139 1.42273 5.77139 0.916539Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M0 4.19696C0 3.69077 0.410351 3.28042 0.916541 3.28042C1.42273 3.28042 1.83308 3.69077 1.83308 4.19696C1.83308 4.70315 1.42273 5.1135 0.916541 5.1135C0.410351 5.1135 0 4.70315 0 4.19696Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M2.8857 4.19694C2.8857 3.69075 3.29605 3.2804 3.80224 3.2804C4.30843 3.2804 4.71877 3.69075 4.71877 4.19694C4.71877 4.70313 4.30843 5.11348 3.80224 5.11348C3.29605 5.11348 2.8857 4.70313 2.8857 4.19694Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M5.77139 4.19694C5.77139 3.69075 6.18174 3.2804 6.68793 3.2804H9.12466C9.63085 3.2804 10.0412 3.69075 10.0412 4.19694C10.0412 4.70313 9.63085 5.11348 9.12466 5.11348H6.68793C6.18174 5.11348 5.77139 4.70313 5.77139 4.19694Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M0 7.47738C0 6.97119 0.410351 6.56084 0.916541 6.56084C1.42273 6.56084 1.83308 6.97119 1.83308 7.47738C1.83308 7.98357 1.42273 8.39392 0.916541 8.39392C0.410351 8.39392 0 7.98357 0 7.47738Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M2.8857 7.47741C2.8857 6.97122 3.29605 6.56087 3.80224 6.56087C4.30843 6.56087 4.71877 6.97122 4.71877 7.47741C4.71877 7.9836 4.30843 8.39395 3.80224 8.39395C3.29605 8.39395 2.8857 7.9836 2.8857 7.47741Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M5.77139 7.47741C5.77139 6.97122 6.18174 6.56087 6.68793 6.56087H9.12466C9.63085 6.56087 10.0412 6.97122 10.0412 7.47741C10.0412 7.9836 9.63085 8.39395 9.12466 8.39395H6.68793C6.18174 8.39395 5.77139 7.9836 5.77139 7.47741Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const MemoryIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M3.8674 9.19968L4.14554 10.8649C4.23965 11.4283 4.75254 11.8237 5.32137 11.7713L5.58252 11.7472C6.56555 11.6567 7.43309 12.3868 7.51181 13.3708L7.59308 14.3867C7.60422 14.5259 7.71868 14.6342 7.85825 14.6376L9.91053 14.6876C10.1066 14.6924 10.2434 14.4948 10.17 14.3129L8.90452 11.1782C8.80956 10.9429 8.65085 10.7389 8.44626 10.5889L7.90134 10.1895C7.70604 10.0464 7.55223 9.85411 7.45759 9.63124C7.15011 8.90712 6.6579 7.71234 6.37054 6.88944C6.19204 6.3783 5.79931 6.29158 5.45492 6.21553C4.98179 6.11106 4.5999 6.02673 4.99001 4.88985C5.66408 2.92541 8.06015 2.07904 10.6601 3.33088C12.6488 4.2884 13.1187 6.35416 13.0328 7.58237C13.0297 7.62768 13.0214 7.67186 13.0094 7.71566C12.8829 8.17534 12.368 8.40491 11.9415 8.19169L10.3022 7.37201C10.2069 7.32439 10.0927 7.33657 10.0096 7.40322L8.64809 8.49559C8.55405 8.57104 8.52072 8.69931 8.56615 8.811L10.8995 14.5478C10.9404 14.6483 11.0369 14.715 11.1454 14.7177L12.0572 14.7399C12.2581 14.7448 12.3951 14.5382 12.3124 14.3551L11.8681 13.3706C11.4211 12.3803 11.6047 11.2192 12.3354 10.4151L13.4616 9.17575C13.7473 8.86125 13.9224 8.46187 13.9599 8.03858L13.9763 7.85359C14.2866 4.35298 11.377 1.41272 7.87336 1.68639C6.03919 1.82965 4.45399 3.02228 3.80807 4.74492L3.70275 5.02579C3.5828 5.34571 3.62741 5.70411 3.82213 5.98485L3.88946 6.08192C4.12183 6.41695 4.0958 6.86726 3.82637 7.17328L3.06705 8.03572C2.96261 8.15435 2.98058 8.33664 3.10617 8.43259L3.66059 8.85617C3.77064 8.94026 3.84458 9.06307 3.8674 9.19968Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const OpenAIIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"12\" height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M10.1266 5.67745C10.3409 5.0225 10.2695 4.2961 9.92413 3.70069C9.40017 2.78376 8.34034 2.31934 7.30433 2.53369C6.85182 2.02164 6.18496 1.73584 5.49428 1.73584C4.43445 1.73584 3.50561 2.41461 3.17218 3.4149C2.49342 3.55779 1.90992 3.97458 1.56458 4.5819C1.04062 5.49883 1.1597 6.64202 1.86228 7.42796C1.64793 8.09482 1.73129 8.80931 2.07663 9.40472C2.60059 10.3217 3.66042 10.798 4.69643 10.5717C5.16085 11.0838 5.8158 11.3815 6.50648 11.3815C7.56631 11.3815 8.49515 10.7027 8.82858 9.70243C9.50735 9.55953 10.0908 9.14274 10.4362 8.53542C10.9601 7.61849 10.8411 6.46339 10.1266 5.67745ZM6.50648 10.7503C6.07778 10.7503 5.67291 10.6074 5.35138 10.3336C5.36329 10.3217 5.39902 10.3097 5.41093 10.2978L7.32815 9.19037C7.42341 9.13083 7.48295 9.03557 7.48295 8.91648V6.21332L8.29271 6.67774C8.30462 6.67774 8.30462 6.68965 8.30462 6.70156V8.9403C8.31653 9.94059 7.50677 10.7503 6.50648 10.7503ZM2.62441 9.09511C2.41006 8.72595 2.33861 8.29726 2.41006 7.88047C2.42197 7.89238 2.44578 7.90429 2.4696 7.91619L4.38682 9.02366C4.48209 9.0832 4.60117 9.0832 4.69643 9.02366L7.04235 7.66612V8.60687C7.04235 8.61878 7.04235 8.63069 7.03044 8.63069L5.0894 9.75006C4.23201 10.2502 3.12455 9.9525 2.62441 9.09511ZM2.12426 4.90342C2.33861 4.53427 2.67204 4.26038 3.06501 4.10557V6.39195C3.06501 6.49912 3.12455 6.60629 3.21982 6.66583L5.56573 8.02337L4.75597 8.48779C4.74407 8.48779 4.73216 8.4997 4.73216 8.48779L2.79112 7.36842C1.90992 6.86827 1.62412 5.76081 2.12426 4.90342ZM8.79285 6.45149L6.44694 5.09395L7.2567 4.62953C7.2686 4.62953 7.28051 4.61762 7.28051 4.62953L9.22155 5.7489C10.0908 6.24905 10.3766 7.35651 9.8765 8.2139C9.66215 8.58305 9.32872 8.85694 8.93575 8.99984V6.72538C8.94766 6.6182 8.88812 6.51103 8.79285 6.45149ZM9.5907 5.23685C9.5788 5.22494 9.55498 5.21303 9.53116 5.20113L7.61394 4.09366C7.51868 4.03412 7.39959 4.03412 7.30433 4.09366L4.95841 5.4512V4.51045C4.95841 4.49854 4.95841 4.48663 4.97032 4.48663L6.91136 3.36726C7.78066 2.86712 8.87621 3.16482 9.37636 4.03412C9.5907 4.39137 9.66215 4.82006 9.5907 5.23685ZM4.51781 6.904L3.70805 6.43958C3.69615 6.43958 3.69615 6.42767 3.69615 6.41576V4.17702C3.69615 3.17673 4.5059 2.36697 5.50619 2.36697C5.93489 2.36697 6.33977 2.50987 6.66129 2.78376C6.64938 2.79567 6.62556 2.80758 6.60175 2.81949L4.68453 3.92695C4.58926 3.98649 4.52972 4.08176 4.52972 4.20084V6.904H4.51781ZM4.95841 5.95134L6.00634 5.34402L7.05426 5.95134V7.15407L6.00634 7.76139L4.95841 7.15407V5.95134Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const PromptIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 11.185 11.185\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.57258 2.71626C9.57245 2.19794 9.14778 1.77075 8.61819 1.77075H2.56605C2.0377 1.77075 1.61179 2.19752 1.61165 2.71626V6.51162C1.61179 7.02856 2.03401 7.45487 2.5616 7.45713L3.12802 7.45935V9.21487L5.52178 7.55857L5.66764 7.45713H8.61819C9.14653 7.45713 9.57245 7.03036 9.57258 6.51162V2.71626ZM10.7099 6.51162C10.7097 7.66541 9.76766 8.59441 8.61819 8.59441H6.0223L3.51081 10.3336C3.25841 10.5083 2.86505 10.6555 2.4809 10.4558C2.09483 10.2551 1.99075 9.84577 1.99075 9.53473V8.51222C1.11705 8.26321 0.474488 7.46395 0.474378 6.51162V2.71626C0.474511 1.56248 1.41657 0.633479 2.56605 0.633479H8.61819C9.77051 0.633479 10.7097 1.56448 10.7099 2.71626V6.51162Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const SettingsIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"18\" viewBox=\"0 0 17 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.40864 11.9983C7.58064 11.9733 6.84164 11.6153 6.31564 11.0563C6.31464 11.0563 6.31464 11.0553 6.31464 11.0553C5.78864 10.4963 5.47564 9.73633 5.50064 8.90833C5.52564 8.08033 5.88464 7.34133 6.44364 6.81533C7.00264 6.28833 7.76264 5.97633 8.59064 6.00133C9.41864 6.02633 10.1576 6.38433 10.6836 6.94333H10.6846C11.2106 7.50333 11.5236 8.26233 11.4986 9.09033C11.4726 9.91833 11.1146 10.6583 10.5556 11.1843C9.99664 11.7103 9.23664 12.0233 8.40864 11.9983ZM16.1266 8.15033L14.3606 7.74033C14.2316 7.14133 14.0146 6.57633 13.7216 6.05733L14.7726 4.57933C14.9116 4.38533 14.8926 4.12033 14.7296 3.94633L13.9206 3.08733C13.7576 2.91333 13.4946 2.87933 13.2916 3.00533L11.7526 3.96533C11.2526 3.64133 10.7016 3.39033 10.1116 3.22633L9.80964 1.43833C9.76964 1.20333 9.56964 1.02833 9.33164 1.02133L8.15264 0.985326C7.91364 0.978326 7.70364 1.14033 7.64964 1.37233L7.24064 3.13933C6.64164 3.26733 6.07664 3.48433 5.55664 3.77733L4.07864 2.72633C3.88464 2.58833 3.61964 2.60633 3.44664 2.76933L2.58664 3.57833C2.41364 3.74133 2.37964 4.00533 2.50564 4.20733L3.46564 5.74633C3.14164 6.24633 2.89064 6.79833 2.72564 7.38833L0.937635 7.68933C0.702635 7.72933 0.528635 7.92933 0.520635 8.16733L0.485635 9.34733C0.477635 9.58533 0.639635 9.79533 0.872635 9.84933L2.63864 10.2583C2.76764 10.8573 2.98464 11.4233 3.27764 11.9423L2.22564 13.4203C2.08764 13.6143 2.10564 13.8793 2.26964 14.0523L3.07864 14.9123C3.24164 15.0853 3.50464 15.1203 3.70664 14.9933L5.24564 14.0333C5.74663 14.3583 6.29764 14.6093 6.88764 14.7733L7.18964 16.5613C7.22864 16.7963 7.42864 16.9713 7.66764 16.9783L8.84663 17.0143C9.08564 17.0213 9.29564 16.8593 9.34964 16.6273L9.75864 14.8603C10.3576 14.7323 10.9226 14.5153 11.4416 14.2213L12.9206 15.2733C13.1146 15.4113 13.3786 15.3933 13.5526 15.2293L14.4116 14.4213C14.5856 14.2573 14.6196 13.9943 14.4936 13.7923L13.5336 12.2533C13.8576 11.7523 14.1086 11.2013 14.2726 10.6113L16.0616 10.3103C16.2966 10.2703 16.4706 10.0703 16.4776 9.83233L16.5136 8.65233C16.5206 8.41433 16.3586 8.20433 16.1266 8.15033Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import { Wand2 } from 'lucide-react';\nimport React from 'react';\n\nexport const SkillIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <Wand2 {...(props as React.ComponentProps<typeof Wand2>)} />\n);\n","import React from 'react';\n\nexport const TraceIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 9.45892 8.88606\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M8.53702 7.36403C8.98547 7.36403 9.34918 7.70502 9.34918 8.12535C9.34906 8.54559 8.9854 8.88606 8.53702 8.88606H5.6839C5.23552 8.88606 4.87186 8.54559 4.87174 8.12535C4.87174 7.70502 5.23545 7.36403 5.6839 7.36403H8.53702Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M8.53702 3.67209C8.98547 3.67209 9.34918 4.01309 9.34918 4.43342C9.34911 4.8537 8.98543 5.19413 8.53702 5.19413H5.6839C5.23549 5.19413 4.87181 4.8537 4.87174 4.43342C4.87174 4.01309 5.23545 3.67209 5.6839 3.67209H8.53702Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M8.67155 0C9.10635 2.06584e-05 9.45892 0.341006 9.45892 0.761326C9.45878 1.18153 9.10627 1.52201 8.67155 1.52203H2.88163C2.4469 1.52203 2.0944 1.18154 2.09427 0.761326C2.09427 0.340993 2.44681 3.80132e-08 2.88163 0H8.67155Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M0.757606 0.760086V4.01122H3.50594V4.76883H0.759466L0.762566 5.4291C0.76837 6.70703 1.8058 7.73972 3.08374 7.73973H3.67953V8.49796H3.08374C1.38863 8.49795 0.0120204 7.1273 0.00433981 5.4322L0 4.39188V0.760086H0.757606Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const TsIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <rect x=\"2.74902\" y=\"1.89307\" width=\"11.8252\" height=\"11.8252\" rx=\"1.5\" stroke=\"currentColor\" />\n <path d=\"M5.64062 7.98265V7.29806H8.86605V7.98265H7.66371V11.2253H6.84297V7.98265H5.64062Z\" fill=\"currentColor\" />\n <path\n d=\"M11.5277 8.42754C11.5124 8.27285 11.4465 8.15268 11.3302 8.06703C11.2138 7.98137 11.056 7.93855 10.8565 7.93855C10.721 7.93855 10.6066 7.95772 10.5133 7.99607C10.42 8.03315 10.3484 8.08492 10.2985 8.1514C10.2499 8.21788 10.2256 8.2933 10.2256 8.37768C10.2231 8.44799 10.2378 8.50936 10.2697 8.56177C10.303 8.61418 10.3484 8.65957 10.4059 8.69792C10.4634 8.73499 10.5299 8.76759 10.6053 8.79572C10.6808 8.82257 10.7613 8.84558 10.8469 8.86475L11.1998 8.94913C11.3711 8.98748 11.5283 9.03862 11.6715 9.10254C11.8147 9.16646 11.9387 9.24508 12.0435 9.3384C12.1484 9.43173 12.2295 9.54167 12.2871 9.66823C12.3459 9.7948 12.3759 9.9399 12.3772 10.1035C12.3759 10.3439 12.3146 10.5523 12.1931 10.7287C12.0729 10.9038 11.8991 11.04 11.6715 11.1371C11.4452 11.233 11.1723 11.2809 10.8527 11.2809C10.5357 11.2809 10.2595 11.2324 10.0243 11.1352C9.79034 11.038 9.60753 10.8942 9.47585 10.7037C9.34545 10.512 9.27706 10.2748 9.27067 9.99231H10.0741C10.0831 10.124 10.1208 10.2339 10.1873 10.3221C10.255 10.4091 10.3452 10.4749 10.4577 10.5197C10.5714 10.5631 10.6999 10.5849 10.8431 10.5849C10.9837 10.5849 11.1058 10.5644 11.2094 10.5235C11.3142 10.4826 11.3954 10.4257 11.4529 10.3528C11.5104 10.28 11.5392 10.1962 11.5392 10.1016C11.5392 10.0134 11.513 9.93926 11.4606 9.87917C11.4094 9.81909 11.334 9.76795 11.2343 9.72576C11.1359 9.68357 11.0151 9.64522 10.8719 9.6107L10.4442 9.50332C10.1131 9.42278 9.8517 9.29686 9.65994 9.12555C9.46818 8.95424 9.37294 8.72349 9.37422 8.43329C9.37294 8.19551 9.43622 7.98776 9.56406 7.81007C9.69318 7.63237 9.87024 7.49366 10.0952 7.39394C10.3202 7.29423 10.5759 7.24437 10.8623 7.24437C11.1538 7.24437 11.4082 7.29423 11.6255 7.39394C11.8441 7.49366 12.0141 7.63237 12.1356 7.81007C12.257 7.98776 12.3197 8.19359 12.3235 8.42754H11.5277Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const VariablesIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M15.4997 7.97482V8.6501C15.0469 8.6501 14.7307 8.75585 14.5512 8.96735C14.3717 9.17885 14.2819 9.52631 14.2819 10.0097V11.315C14.2819 11.7773 14.235 12.1655 14.1413 12.4797C14.0502 12.797 13.9095 13.0508 13.7193 13.2411C13.529 13.4315 13.2879 13.5689 12.9958 13.6535C12.7038 13.7381 12.3594 13.7804 11.9629 13.7804V12.7063C12.2737 12.7063 12.5162 12.6535 12.6904 12.5477C12.8645 12.445 12.9851 12.2848 13.0521 12.0673C13.1217 11.8528 13.1566 11.5794 13.1566 11.247V9.59731C13.1566 9.36467 13.1874 9.15015 13.249 8.95376C13.3106 8.75434 13.4245 8.58212 13.5906 8.4371C13.7568 8.28905 13.9939 8.17575 14.302 8.09719C14.6102 8.01561 15.0094 7.97482 15.4997 7.97482ZM11.9629 2.21906C12.3594 2.21906 12.7038 2.26135 12.9958 2.34595C13.2879 2.43055 13.529 2.56803 13.7193 2.75837C13.9095 2.94872 14.0502 3.20252 14.1413 3.51977C14.235 3.83399 14.2819 4.22224 14.2819 4.68452V5.98523C14.2819 6.47168 14.3717 6.82065 14.5512 7.03214C14.7307 7.24062 15.0469 7.34486 15.4997 7.34486V8.02467C15.0094 8.02467 14.6102 7.98389 14.302 7.90231C13.9939 7.82073 13.7568 7.70743 13.5906 7.5624C13.4245 7.41737 13.3106 7.24666 13.249 7.05027C13.1874 6.85086 13.1566 6.63483 13.1566 6.40218V4.7525C13.1566 4.41712 13.1217 4.14218 13.0521 3.92766C12.9851 3.71012 12.8645 3.54998 12.6904 3.44725C12.5162 3.34453 12.2737 3.29316 11.9629 3.29316V2.21906ZM15.4997 7.34486V8.6501H14.3864V7.34486H15.4997Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M7.14024 4.97928L8.50273 7.33122L9.87728 4.97928H11.1915L9.26637 7.99983L11.2076 11.0204H9.89335L8.50273 8.76283L7.11613 11.0204H5.79785L7.719 7.99983L5.82197 4.97928H7.14024Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M1.5 8.02467V7.34486C1.95282 7.34486 2.269 7.24062 2.44852 7.03214C2.62804 6.82065 2.7178 6.47168 2.7178 5.98523V4.68452C2.7178 4.22224 2.76335 3.83399 2.85445 3.51977C2.94823 3.20252 3.09024 2.94872 3.28048 2.75837C3.47072 2.56803 3.71187 2.43055 4.00392 2.34595C4.29598 2.26135 4.64029 2.21906 5.03684 2.21906V3.29316C4.72603 3.29316 4.48354 3.34453 4.30938 3.44725C4.13522 3.54998 4.0133 3.71012 3.94364 3.92766C3.87665 4.14218 3.84316 4.41712 3.84316 4.7525V6.40218C3.84316 6.63483 3.81234 6.85086 3.75072 7.05027C3.68909 7.24666 3.57522 7.41737 3.40909 7.5624C3.24297 7.70743 3.00584 7.82073 2.6977 7.90231C2.38957 7.98389 1.99033 8.02467 1.5 8.02467ZM5.03684 13.7804C4.64029 13.7804 4.29598 13.7381 4.00392 13.6535C3.71187 13.5689 3.47072 13.4315 3.28048 13.2411C3.09024 13.0508 2.94823 12.797 2.85445 12.4797C2.76335 12.1655 2.7178 11.7773 2.7178 11.315V10.0097C2.7178 9.52631 2.62804 9.17885 2.44852 8.96735C2.269 8.75585 1.95282 8.6501 1.5 8.6501V7.97482C1.99033 7.97482 2.38957 8.01561 2.6977 8.09719C3.00584 8.17575 3.24297 8.28905 3.40909 8.4371C3.57522 8.58212 3.68909 8.75434 3.75072 8.95376C3.81234 9.15015 3.84316 9.36467 3.84316 9.59731V11.247C3.84316 11.5794 3.87665 11.8528 3.94364 12.0673C4.0133 12.2848 4.13522 12.445 4.30938 12.5477C4.48354 12.6535 4.72603 12.7063 5.03684 12.7063V13.7804ZM1.5 8.6501V7.34486H2.6133V8.6501H1.5Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const WorkflowCoinIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"126\" height=\"85\" viewBox=\"0 0 126 85\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M119.322 35.1636C119.322 50.3595 94.1055 62.6782 62.9998 62.6782C31.894 62.6782 6.67773 50.3595 6.67773 35.1636V49.8363C6.67773 65.0322 31.894 77.351 62.9998 77.351C94.1055 77.351 119.322 65.0322 119.322 49.8363V35.1636Z\"\n fill=\"#2E2E2E\"\n fillOpacity=\"0.9\"\n />\n <path\n d=\"M119.322 35.1636C119.322 50.3595 94.1055 62.6782 62.9998 62.6782C31.894 62.6782 6.67773 50.3595 6.67773 35.1636M119.322 35.1636C119.322 19.9677 94.1055 7.64893 62.9998 7.64893C31.894 7.64893 6.67773 19.9677 6.67773 35.1636M119.322 35.1636V49.8363C119.322 65.0322 94.1055 77.351 62.9998 77.351C31.894 77.351 6.67773 65.0322 6.67773 49.8363V35.1636\"\n stroke=\"#424242\"\n />\n <path\n d=\"M63.0002 0.968262C28.5152 0.968262 0.55957 15.6484 0.55957 33.7573V51.2428C0.55957 69.3517 28.5152 84.0319 63.0002 84.0319C97.4853 84.0319 125.441 69.3517 125.441 51.2428V33.7573C125.441 15.6484 97.4853 0.968262 63.0002 0.968262Z\"\n stroke=\"#707070\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M74.9374 21.357C76.2127 20.7291 78.2804 20.7291 79.5557 21.357L90.8129 26.8997C92.0882 27.5276 92.0882 28.5458 90.8129 29.1737L83.1638 32.9399C81.8885 33.5678 79.8207 33.5678 78.5454 32.9399L75.8033 31.5898L68.3324 35.2682L64.1502 39.696C63.8908 39.481 63.6138 39.2568 63.3231 39.0227L63.1495 38.883C62.2893 38.1914 61.2677 37.3701 60.6254 36.6376C60.5446 36.5456 60.4618 36.4463 60.3812 36.3407C60.1669 36.3011 59.9652 36.2603 59.7782 36.2205C58.2906 35.9043 56.6225 35.4013 55.2179 34.9777L54.9342 34.8922C54.4589 34.7491 54.0034 34.6127 53.5666 34.4849L62.5594 32.4258L70.0304 28.7473L67.2882 27.3972C66.0129 26.7692 66.0129 25.7512 67.2882 25.1232L74.9374 21.357ZM53.5666 34.4849C53.5666 34.4849 53.5666 34.4849 53.5666 34.4849L46.1603 36.1808L47.516 36.8483C48.7913 37.4762 48.7912 38.4943 47.516 39.1222L39.8668 42.8884C38.5916 43.5163 36.5238 43.5164 35.2485 42.8884L23.9913 37.3457C22.7159 36.7177 22.716 35.6996 23.9913 35.0717L31.6404 31.3055C32.9156 30.6776 34.9834 30.6776 36.2587 31.3055L38.5358 32.4267C39.6899 31.9483 40.9309 31.4611 42.153 31.0313C43.6354 30.5099 45.4001 29.9605 47.091 29.683C49.7278 29.2502 52.3729 29.7072 53.9892 30.0537C55.8019 30.4425 57.6745 31.0055 59.1934 31.4628C60.6081 31.8887 61.6949 32.2154 62.5594 32.4258L53.5666 34.4849ZM46.1603 36.1808L53.5666 34.4849C52.5189 34.1784 51.5786 33.9213 50.7293 33.7392C49.9958 33.5819 49.6114 33.5441 49.4794 33.5326C48.964 33.6384 48.0924 33.8823 46.8983 34.3023C46.0703 34.5936 45.1981 34.9293 44.3325 35.2808L46.1603 36.1808ZM64.1502 39.696L68.3324 35.2682C68.7598 35.6939 69.4232 36.229 70.2883 36.9256C71.2171 37.6735 72.3605 38.5954 73.15 39.488C73.8539 40.2838 74.7818 41.5862 73.9029 42.8844C73.3394 43.717 72.2235 44.5859 71.1648 45.3159C70.2916 45.9175 69.3021 46.5286 68.3305 47.0968L70.6077 48.218C71.8829 48.8459 71.8829 49.864 70.6077 50.4919L62.9585 54.2582C61.6833 54.8861 59.6154 54.8861 58.3402 54.2582L47.083 48.7154C45.8077 48.0875 45.8077 47.0694 47.083 46.4415L54.7321 42.6752C56.0074 42.0474 58.0751 42.0473 59.3505 42.6752L60.7062 43.3428L64.1502 39.696ZM64.1502 39.696L60.7062 43.3428L62.5339 44.2427C63.2478 43.8165 63.9298 43.3871 64.5213 42.9794C65.3742 42.3914 65.8695 41.9622 66.0846 41.7085C66.0613 41.6436 65.9844 41.4543 65.6649 41.0931C65.295 40.6749 64.773 40.212 64.1502 39.696Z\"\n fill=\"#A9A9A9\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const LatencyIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M2.0625 5.99976C2.0625 3.82513 3.82538 2.06226 6 2.06226C6.58712 2.06226 7.14423 2.19076 7.64473 2.42117V1.21042C7.12905 1.03337 6.57575 0.937256 6 0.937256C3.20406 0.937256 0.9375 3.20381 0.9375 5.99976C0.9375 8.7957 3.20406 11.0623 6 11.0623C8.79594 11.0623 11.0625 8.7957 11.0625 5.99976H9.9375C9.9375 8.17438 8.17462 9.93726 6 9.93726C3.82538 9.93726 2.0625 8.17438 2.0625 5.99976Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M9.28577 4.3986C9.08709 4.3986 8.92603 4.23753 8.92603 4.03885V0.978563C8.92603 0.681899 9.16652 0.441406 9.46318 0.441406C9.75985 0.441406 10.0003 0.6819 10.0003 0.978564V3.25858C10.0003 3.33638 10.0634 3.39944 10.1412 3.39944H11.2091C11.485 3.39944 11.7087 3.62311 11.7087 3.89902C11.7087 4.17493 11.485 4.3986 11.2091 4.3986H9.28577Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M6.57568 3.69244C6.57568 3.38178 6.32384 3.12994 6.01318 3.12994C5.70252 3.12994 5.45068 3.38178 5.45068 3.69244V6.22272L6.7242 7.88675C6.91301 8.13346 7.26606 8.18039 7.51276 7.99159C7.75946 7.80278 7.8064 7.44973 7.61759 7.20303L6.57568 5.84162V3.69244Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const McpServerIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 9.52233 10.4982\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M2.39065 4.27882L4.93898 1.73049C5.10578 1.56368 5.37622 1.56368 5.54303 1.73049C5.70983 1.89729 5.70983 2.16773 5.54303 2.33454L2.9947 4.88287C2.53924 5.33834 2.53929 6.0768 2.99475 6.53226C3.45022 6.9877 4.18863 6.98771 4.64409 6.53226L7.19242 3.98393C7.35922 3.81713 7.62967 3.81714 7.79647 3.98393C7.96328 4.15074 7.96328 4.42118 7.79647 4.58798L5.24814 7.13631C4.45907 7.92537 3.17978 7.92536 2.39071 7.13631C1.60163 6.34724 1.60158 5.0679 2.39065 4.27882Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M3.50354 5.43862C3.5236 5.3983 3.55044 5.36049 3.58404 5.32688L6.06565 2.84527C6.52112 2.3898 6.52112 1.65128 6.06565 1.19581C5.61018 0.740366 4.87172 0.740412 4.41626 1.19587L0.729138 4.88287C0.562334 5.04967 0.291892 5.04968 0.125089 4.88287C-0.0416875 4.71607 -0.0417052 4.44562 0.125089 4.27882L3.81221 0.591824C4.60128 -0.197241 5.88062 -0.197289 6.6697 0.591765C7.12856 1.05062 7.32058 1.67529 7.24578 2.27292C7.84449 2.19687 8.47073 2.38872 8.93052 2.84849C9.7196 3.63757 9.7196 4.91697 8.93052 5.70605L8.20316 6.44191L6.20449 8.44058C5.83765 8.80741 5.83765 9.40219 6.20449 9.76902C6.37128 9.93582 6.37129 10.2063 6.20449 10.3731C6.03769 10.5399 5.76724 10.5399 5.60044 10.3731C4.9 9.67263 4.9 8.53697 5.60044 7.83653L7.59911 5.83786L8.32647 5.102C8.78194 4.64653 8.78194 3.90801 8.32647 3.45254C7.871 2.9971 7.13254 2.99714 6.67707 3.4526L4.17576 5.95392C4.00896 6.12072 3.73851 6.12071 3.57171 5.95392C3.43204 5.81425 3.40932 5.60193 3.50354 5.43862Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const FolderIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M1.5 8.5V8C1.5 7.60218 1.65804 7.22064 1.93934 6.93934C2.22064 6.65804 2.60218 6.5 3 6.5H13C13.3978 6.5 13.7794 6.65804 14.0607 6.93934C14.342 7.22064 14.5 7.60218 14.5 8V8.5M8.70667 4.20667L7.29333 2.79333C7.20048 2.70037 7.09022 2.62661 6.96886 2.57628C6.84749 2.52595 6.71739 2.50003 6.586 2.5H3C2.60218 2.5 2.22064 2.65804 1.93934 2.93934C1.65804 3.22064 1.5 3.60218 1.5 4V12C1.5 12.3978 1.65804 12.7794 1.93934 13.0607C2.22064 13.342 2.60218 13.5 3 13.5H13C13.3978 13.5 13.7794 13.342 14.0607 13.0607C14.342 12.7794 14.5 12.3978 14.5 12V6C14.5 5.60218 14.342 5.22064 14.0607 4.93934C13.7794 4.65804 13.3978 4.5 13 4.5H9.414C9.14887 4.49977 8.89402 4.39426 8.70667 4.20667Z\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const McpCoinIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"126\" height=\"85\" viewBox=\"0 0 126 85\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M119.322 35.1641C119.322 50.36 94.1055 62.6787 62.9998 62.6787C31.894 62.6787 6.67773 50.36 6.67773 35.1641V49.8368C6.67773 65.0327 31.894 77.3514 62.9998 77.3514C94.1055 77.3514 119.322 65.0327 119.322 49.8368V35.1641Z\"\n fill=\"#2E2E2E\"\n fillOpacity=\"0.9\"\n />\n <path\n d=\"M119.322 35.1641C119.322 50.36 94.1055 62.6787 62.9998 62.6787C31.894 62.6787 6.67773 50.36 6.67773 35.1641M119.322 35.1641C119.322 19.9681 94.1055 7.64941 62.9998 7.64941C31.894 7.64941 6.67773 19.9681 6.67773 35.1641M119.322 35.1641V49.8368C119.322 65.0327 94.1055 77.3514 62.9998 77.3514C31.894 77.3514 6.67773 65.0327 6.67773 49.8368V35.1641\"\n stroke=\"#424242\"\n />\n <path\n d=\"M63.0002 0.96875C28.5152 0.96875 0.55957 15.6489 0.55957 33.7578V51.2433C0.55957 69.3522 28.5152 84.0323 63.0002 84.0323C97.4853 84.0323 125.441 69.3522 125.441 51.2433V33.7578C125.441 15.6489 97.4853 0.96875 63.0002 0.96875Z\"\n stroke=\"#707070\"\n />\n <path\n d=\"M51.5215 39.9726C50.5464 40.4477 48.9738 40.4435 48.009 39.9634C47.0442 39.4833 47.0526 38.709 48.0277 38.2339L69.7191 27.6672C72.7243 26.2032 72.7347 23.8181 69.7605 22.3476L69.6898 22.313C66.6927 20.8686 61.8895 20.8864 58.9368 22.3528L30.3946 36.5278C29.4288 37.0074 27.8561 37.0107 26.882 36.5352C25.9078 36.0597 25.901 35.2853 26.8668 34.8057L55.4092 20.6308C60.2847 18.2094 68.2157 18.1801 73.1645 20.5651L73.2814 20.6222C76.1808 22.0558 77.3624 24.0157 76.8227 25.8782C80.6339 25.5828 84.6694 26.1476 87.6364 27.5775C92.6525 29.9949 92.7059 33.962 87.7554 36.4119L61.5441 49.3836C61.282 49.5133 61.281 49.7227 61.5417 49.853L67.0252 52.5932C67.988 53.0743 67.9763 53.8486 66.9992 54.3226C66.0221 54.7966 64.4495 54.7909 63.4867 54.3098L58.0033 51.5695C55.8306 50.4838 55.8392 48.7391 58.0226 47.6585L84.2339 34.6868C87.2382 33.2 87.2058 30.7925 84.1617 29.3254C81.1488 27.8734 76.1811 27.9317 73.2127 29.4058L51.5215 39.9726Z\"\n fill=\"#A9A9A9\"\n />\n <path\n d=\"M63.0028 23.8809C64.0019 23.4098 65.5873 23.4146 66.5747 23.8972C67.562 24.3798 67.5831 25.1603 66.6338 25.6556L66.5879 25.679L45.1511 36.3113C42.2204 37.7649 42.2292 40.1117 45.1707 41.56C48.1228 43.0135 52.91 43.0118 55.8578 41.5563L76.8564 31.1875L76.9037 31.1648C77.9049 30.6949 79.4903 30.7013 80.4755 31.185C81.4763 31.6764 81.4785 32.4741 80.4806 32.9669L59.4821 43.3356C54.5363 45.7777 46.5044 45.7806 41.5516 43.342C36.6166 40.9121 36.602 36.9747 41.519 34.5359L62.9558 23.9037L63.0028 23.8809Z\"\n fill=\"#A9A9A9\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const ToolCoinIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"126\" height=\"85\" viewBox=\"0 0 126 85\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M119.322 35.1641C119.322 50.36 94.1055 62.6787 62.9998 62.6787C31.894 62.6787 6.67773 50.36 6.67773 35.1641V49.8368C6.67773 65.0327 31.894 77.3514 62.9998 77.3514C94.1055 77.3514 119.322 65.0327 119.322 49.8368V35.1641Z\"\n fill=\"#2E2E2E\"\n fillOpacity=\"0.9\"\n />\n <path\n d=\"M119.322 35.1641C119.322 50.36 94.1055 62.6787 62.9998 62.6787C31.894 62.6787 6.67773 50.36 6.67773 35.1641M119.322 35.1641C119.322 19.9681 94.1055 7.64941 62.9998 7.64941C31.894 7.64941 6.67773 19.9681 6.67773 35.1641M119.322 35.1641V49.8368C119.322 65.0327 94.1055 77.3514 62.9998 77.3514C31.894 77.3514 6.67773 65.0327 6.67773 49.8368V35.1641\"\n stroke=\"#424242\"\n />\n <path\n d=\"M63.0002 0.96875C28.5152 0.96875 0.55957 15.6489 0.55957 33.7578V51.2433C0.55957 69.3522 28.5152 84.0323 63.0002 84.0323C97.4853 84.0323 125.441 69.3522 125.441 51.2433V33.7578C125.441 15.6489 97.4853 0.96875 63.0002 0.96875Z\"\n stroke=\"#707070\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M95.8997 32.6647C98.4806 33.9355 98.4744 36.0012 95.8997 37.2689L89.6657 40.3384C87.0848 41.6091 82.8892 41.6061 80.3146 40.3384L74.0805 37.2689C71.4996 35.9981 71.5059 33.9324 74.0805 32.6647L80.3146 29.5952C82.8955 28.3244 87.091 28.3275 89.6657 29.5952L95.8997 32.6647ZM74.0805 21.9215C76.6614 23.1923 76.6552 25.258 74.0805 26.5257L67.8465 29.5952C65.2656 30.866 61.0701 30.8629 58.4954 29.5952L52.2613 26.5257C49.6804 25.255 49.6867 23.1892 52.2613 21.9215L58.4954 18.852C61.0763 17.5813 65.2718 17.5843 67.8465 18.852L74.0805 21.9215ZM74.0805 43.4079C76.6614 44.6786 76.6552 46.7444 74.0805 48.0121L67.8465 51.0816C65.2656 52.3523 61.0701 52.3493 58.4954 51.0816L52.2613 48.0121C49.6804 46.7413 49.6867 44.6756 52.2613 43.4079L58.4954 40.3384C61.0763 39.0676 65.2718 39.0707 67.8465 40.3384L74.0805 43.4079ZM52.2613 32.6647C54.8422 33.9355 54.836 36.0012 52.2613 37.2689L46.0273 40.3384C43.4464 41.6091 39.2509 41.6061 36.6762 40.3384L30.4422 37.2689C27.8613 35.9981 27.8675 33.9324 30.4422 32.6647L36.6762 29.5952C39.2571 28.3244 43.4526 28.3275 46.0273 29.5952L52.2613 32.6647Z\"\n fill=\"#A9A9A9\"\n />\n </svg>\n);\n","export const AgentNetworkCoinIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"126\" height=\"85\" viewBox=\"0 0 126 85\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M119.322 35.1641C119.322 50.36 94.1055 62.6787 62.9998 62.6787C31.894 62.6787 6.67773 50.36 6.67773 35.1641V49.8368C6.67773 65.0327 31.894 77.3514 62.9998 77.3514C94.1055 77.3514 119.322 65.0327 119.322 49.8368V35.1641Z\"\n fill=\"#2E2E2E\"\n fillOpacity=\"0.9\"\n />\n <path\n d=\"M119.322 35.1641C119.322 50.36 94.1055 62.6787 62.9998 62.6787C31.894 62.6787 6.67773 50.36 6.67773 35.1641M119.322 35.1641C119.322 19.9681 94.1055 7.64941 62.9998 7.64941C31.894 7.64941 6.67773 19.9681 6.67773 35.1641M119.322 35.1641V49.8368C119.322 65.0327 94.1055 77.3514 62.9998 77.3514C31.894 77.3514 6.67773 65.0327 6.67773 49.8368V35.1641\"\n stroke=\"#424242\"\n />\n <path\n d=\"M63.0002 0.96875C28.5152 0.96875 0.55957 15.6489 0.55957 33.7578V51.2433C0.55957 69.3522 28.5152 84.0323 63.0002 84.0323C97.4853 84.0323 125.441 69.3522 125.441 51.2433V33.7578C125.441 15.6489 97.4853 0.96875 63.0002 0.96875Z\"\n stroke=\"#707070\"\n />\n <g clipPath=\"url(#clip0_23333_14744)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M79.2946 17.9539C83.0143 19.7854 83.016 22.7559 79.2979 24.5879C77.0214 25.7087 73.8794 26.1385 70.9301 25.8878L67.5296 30.2202C68.0944 30.3987 68.6321 30.6075 69.1262 30.8507C71.0847 31.815 72.0009 33.0948 71.8979 34.3581L77.2504 35.1977C77.6452 34.8727 78.1174 34.5635 78.6856 34.2835C82.4066 32.4514 88.4403 32.4485 92.1623 34.2803C95.8842 36.1128 95.8805 39.0851 92.159 40.9175C88.4373 42.7488 82.4002 42.7513 78.679 40.9191C76.7415 39.9647 75.8248 38.7009 75.9073 37.4506L70.5219 36.6045C70.1354 36.9168 69.6777 37.2145 69.1295 37.4846C68.345 37.8708 67.4527 38.1705 66.5059 38.3939L67.9312 41.984C70.1507 42.0573 72.3276 42.5087 74.0244 43.3438C77.7444 45.1754 77.7467 48.1458 74.0277 49.9778C70.3071 51.8092 64.2712 51.8095 60.551 49.9778C56.8323 48.1459 56.8351 45.1755 60.5543 43.3438C61.3581 42.9482 62.2741 42.6414 63.247 42.4167L61.8282 38.8428C59.5803 38.7777 57.3696 38.3299 55.6527 37.4846C54.1264 36.7327 53.2395 35.7882 52.9666 34.8103L43.924 34.0469C43.4596 34.6259 42.7547 35.1702 41.8041 35.6385C38.0834 37.4696 32.0473 37.4701 28.3273 35.6385C24.6089 33.8068 24.6123 30.8363 28.3306 29.0046C32.0508 27.1737 38.0806 27.1737 41.8008 29.0046C43.3459 29.7653 44.2412 30.7224 44.5033 31.7129L53.5098 32.4747C53.9742 31.8832 54.6868 31.3279 55.656 30.8507C57.6687 29.8601 60.357 29.4079 62.9902 29.4892L66.5783 24.9218C66.3174 24.8179 66.0637 24.7073 65.8212 24.5879C62.1022 22.7559 62.1045 19.7856 65.8245 17.9539C69.5447 16.1235 75.5747 16.1232 79.2946 17.9539ZM38.4299 30.6643C36.5715 29.75 33.5599 29.75 31.7015 30.6643C29.8447 31.5793 29.8414 33.0638 31.6982 33.9788C33.5565 34.8938 36.5742 34.8933 38.4332 33.9788C40.2906 33.0635 40.2883 31.5793 38.4299 30.6643ZM70.6536 45.0035C68.7951 44.0893 65.7836 44.0893 63.9251 45.0035C62.0676 45.9185 62.0647 47.4029 63.9218 48.318C65.7804 49.2332 68.7979 49.2329 70.6569 48.3181C72.5142 47.4027 72.5119 45.9185 70.6536 45.0035ZM65.7553 32.5104C63.8969 31.5961 60.8853 31.5961 59.0269 32.5104C57.1685 33.4254 57.1662 34.9096 59.0236 35.8249C60.8824 36.7402 63.8998 36.7402 65.7586 35.8249C67.616 34.9096 67.6137 33.4254 65.7553 32.5104ZM88.7915 35.94C86.9338 35.0261 83.9184 35.0264 82.0564 35.9432C80.1965 36.8601 80.1945 38.3451 82.0498 39.2594C83.9067 40.1736 86.9255 40.1738 88.7882 39.2578C90.6507 38.3407 90.649 36.8546 88.7915 35.94ZM75.9238 19.6136C74.0656 18.6995 71.0538 18.6998 69.1953 19.6136C67.3369 20.5286 67.3347 22.0129 69.192 22.9282C71.0509 23.8434 74.0682 23.8434 75.9271 22.9282C77.7836 22.0128 77.7818 20.5285 75.9238 19.6136Z\"\n fill=\"#A9A9A9\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_23333_14744\">\n <rect\n width=\"59.3185\"\n height=\"59.3185\"\n fill=\"white\"\n transform=\"matrix(0.897148 0.441731 -0.897148 0.441731 65.3042 6.51953)\"\n />\n </clipPath>\n </defs>\n </svg>\n);\n","import type { ComponentProps } from 'react';\n\nexport function ProcessorIcon(props: ComponentProps<'svg'>) {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 10.123 10.123\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.50195 1.53809H5.62109V0H6.75098V1.53809H7.5293L7.64258 1.54395C8.19939 1.60066 8.63379 2.0708 8.63379 2.64258V3.37305H10.123V4.50195H8.63379V5.62109H10.123V6.75H8.63379V7.57812L8.62891 7.69141C8.57589 8.2109 8.16211 8.62387 7.64258 8.67676L7.5293 8.68262H6.75098V10.123H5.62109V8.68262H4.50195V10.123H3.37305V8.68262H2.59375L2.48047 8.67676C1.96102 8.62383 1.54817 8.21082 1.49512 7.69141L1.48926 7.57812V6.75H0V5.62109H1.48926V4.50195H0V3.37305H1.48926V2.64258C1.48926 2.07084 1.92371 1.60071 2.48047 1.54395L2.59375 1.53809H3.37305V0H4.50195V1.53809ZM2.61914 7.55273H7.50488V2.66699H2.61914V7.55273Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport const AmazonIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n className=\"h-3 w-3\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 181 108\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g clipPath=\"url(#clip0_1480_1723)\">\n <path\n d=\"M51.2203 39.3158C51.2203 41.5066 51.4572 43.2829 51.8717 44.5856C52.3453 45.8882 52.9374 47.3093 53.7664 48.8487C54.0624 49.3224 54.1809 49.7961 54.1809 50.2106C54.1809 50.8027 53.8256 51.3948 53.0559 51.9869L49.3256 54.4737C48.7927 54.829 48.2598 55.0066 47.7861 55.0066C47.194 55.0066 46.6019 54.7106 46.0098 54.1777C45.1809 53.2895 44.4703 52.3422 43.8782 51.3948C43.2861 50.3882 42.694 49.2632 42.0427 47.9014C37.4243 53.3487 31.6217 56.0724 24.6348 56.0724C19.6611 56.0724 15.694 54.6514 12.7927 51.8093C9.8914 48.9672 8.41113 45.1777 8.41113 40.4408C8.41113 35.4079 10.1874 31.3224 13.7993 28.2435C17.4111 25.1645 22.2072 23.6251 28.3059 23.6251C30.319 23.6251 32.3914 23.8027 34.5822 24.0987C36.773 24.3948 39.023 24.8685 41.3914 25.4014V21.079C41.3914 16.579 40.444 13.4408 38.6085 11.6053C36.7138 9.76979 33.5164 8.88163 28.9572 8.88163C26.8848 8.88163 24.7532 9.11847 22.5624 9.65137C20.3717 10.1843 18.2401 10.8356 16.1677 11.6645C15.2203 12.079 14.5098 12.3158 14.0953 12.4343C13.6809 12.5527 13.3848 12.6119 13.148 12.6119C12.319 12.6119 11.9046 12.0198 11.9046 10.7764V7.87505C11.9046 6.92768 12.023 6.21716 12.319 5.80268C12.6151 5.38821 13.148 4.97374 13.9769 4.55926C16.0493 3.49347 18.5361 2.60531 21.4374 1.89479C24.3388 1.12505 27.4177 0.769788 30.6743 0.769788C37.7203 0.769788 42.8717 2.36847 46.1875 5.56584C49.444 8.76321 51.1019 13.6185 51.1019 20.1316V39.3158H51.2203ZM27.1809 48.3158C29.1348 48.3158 31.148 47.9606 33.2796 47.2501C35.4111 46.5395 37.3059 45.2369 38.9046 43.4606C39.8519 42.3356 40.5625 41.0922 40.9177 39.6711C41.273 38.2501 41.5098 36.5329 41.5098 34.5198V32.0329C39.7927 31.6185 37.9572 31.2632 36.0624 31.0264C34.1677 30.7895 32.3322 30.6711 30.4967 30.6711C26.5296 30.6711 23.6282 31.4408 21.6743 33.0395C19.7203 34.6382 18.773 36.8882 18.773 39.8487C18.773 42.6316 19.4835 44.704 20.9638 46.1251C22.3848 47.6053 24.4572 48.3158 27.1809 48.3158ZM74.7269 54.7106C73.6611 54.7106 72.9506 54.5329 72.4769 54.1185C72.0032 53.7632 71.5888 52.9343 71.2335 51.8093L57.319 6.03953C56.9638 4.85531 56.7861 4.08558 56.7861 3.6711C56.7861 2.72374 57.2598 2.19084 58.2072 2.19084H64.0098C65.1348 2.19084 65.9046 2.36847 66.319 2.78295C66.7927 3.13821 67.148 3.96716 67.5032 5.09216L77.4506 44.2895L86.6874 5.09216C86.9835 3.90795 87.3388 3.13821 87.8124 2.78295C88.2861 2.42768 89.1151 2.19084 90.1809 2.19084H94.9177C96.0427 2.19084 96.8124 2.36847 97.2861 2.78295C97.7598 3.13821 98.1743 3.96716 98.4111 5.09216L107.766 44.7632L118.01 5.09216C118.365 3.90795 118.78 3.13821 119.194 2.78295C119.668 2.42768 120.437 2.19084 121.503 2.19084H127.01C127.957 2.19084 128.49 2.66453 128.49 3.6711C128.49 3.96716 128.431 4.26321 128.372 4.61847C128.312 4.97374 128.194 5.44742 127.957 6.09874L113.687 51.8685C113.332 53.0527 112.918 53.8224 112.444 54.1777C111.97 54.5329 111.201 54.7698 110.194 54.7698H105.102C103.977 54.7698 103.207 54.5922 102.733 54.1777C102.26 53.7632 101.845 52.9935 101.608 51.8093L92.4309 13.6185L83.3125 51.7501C83.0164 52.9343 82.6611 53.704 82.1874 54.1185C81.7138 54.5329 80.8848 54.7106 79.819 54.7106H74.7269ZM150.812 56.3093C147.734 56.3093 144.655 55.954 141.694 55.2435C138.733 54.5329 136.424 53.7632 134.885 52.8751C133.937 52.3422 133.286 51.7501 133.049 51.2172C132.812 50.6843 132.694 50.0922 132.694 49.5593V46.5395C132.694 45.2961 133.168 44.704 134.056 44.704C134.411 44.704 134.766 44.7632 135.122 44.8816C135.477 45.0001 136.01 45.2369 136.602 45.4737C138.615 46.3619 140.806 47.0724 143.115 47.5461C145.484 48.0198 147.793 48.2566 150.161 48.2566C153.891 48.2566 156.793 47.6053 158.806 46.3027C160.819 45 161.885 43.1053 161.885 40.6777C161.885 39.0198 161.352 37.6579 160.286 36.5329C159.22 35.4079 157.207 34.4014 154.306 33.454L145.72 30.7895C141.398 29.4277 138.201 27.4145 136.247 24.7501C134.293 22.1448 133.286 19.2435 133.286 16.1645C133.286 13.6777 133.819 11.4869 134.885 9.59216C135.951 7.69742 137.372 6.03953 139.148 4.73689C140.924 3.37505 142.937 2.36847 145.306 1.65795C147.674 0.94742 150.161 0.651367 152.766 0.651367C154.069 0.651367 155.431 0.710578 156.734 0.888209C158.095 1.06584 159.339 1.30268 160.582 1.53953C161.766 1.83558 162.891 2.13163 163.957 2.48689C165.023 2.84216 165.852 3.19742 166.444 3.55268C167.273 4.02637 167.865 4.50005 168.22 5.03295C168.576 5.50663 168.753 6.15795 168.753 6.98689V9.76979C168.753 11.0132 168.28 11.6645 167.391 11.6645C166.918 11.6645 166.148 11.4277 165.141 10.954C161.766 9.41453 157.977 8.64479 153.773 8.64479C150.398 8.64479 147.734 9.17768 145.898 10.3027C144.062 11.4277 143.115 13.1448 143.115 15.5724C143.115 17.2303 143.707 18.6514 144.891 19.7764C146.076 20.9014 148.266 22.0264 151.405 23.0329L159.812 25.6974C164.076 27.0593 167.155 28.954 168.99 31.3816C170.826 33.8093 171.714 36.5922 171.714 39.6711C171.714 42.2172 171.181 44.5264 170.174 46.5395C169.108 48.5527 167.687 50.329 165.852 51.7501C164.016 53.2303 161.826 54.2961 159.28 55.0658C156.615 55.8948 153.832 56.3093 150.812 56.3093Z\"\n fill=\"currentColor\"\n ></path>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M162.004 85.0856C142.524 99.4738 114.221 107.112 89.8855 107.112C55.7803 107.112 25.05 94.5001 1.83948 73.5396C0.00394917 71.8817 1.66184 69.6317 3.85263 70.9343C28.9579 85.5001 59.925 94.3225 91.9579 94.3225C113.57 94.3225 137.313 89.8225 159.162 80.5856C162.418 79.1054 165.201 82.7172 162.004 85.0856Z\"\n fill=\"#FF9900\"\n ></path>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M170.115 75.8487C167.628 72.6513 153.654 74.3092 147.319 75.079C145.424 75.3158 145.128 73.6579 146.845 72.4145C157.976 64.5987 176.272 66.8487 178.404 69.454C180.536 72.1184 177.812 90.4145 167.391 99.1776C165.792 100.539 164.253 99.8289 164.963 98.0526C167.332 92.1908 172.601 78.9868 170.115 75.8487Z\"\n fill=\"#FF9900\"\n ></path>\n </g>\n <defs>\n <clipPath id=\"clip0_1480_1723\">\n <rect width=\"180\" height=\"107.763\" fill=\"white\" transform=\"translate(0.0625)\"></rect>\n </clipPath>\n </defs>\n </svg>\n);\n","import React from 'react';\n\nexport const AnthropicChatIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg className=\"h-3 w-3\" viewBox=\"0 0 320 320\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" {...props}>\n <path d=\"m297.06 130.97c7.26-21.79 4.76-45.66-6.85-65.48-17.46-30.4-52.56-46.04-86.84-38.68-15.25-17.18-37.16-26.95-60.13-26.81-35.04-.08-66.13 22.48-76.91 55.82-22.51 4.61-41.94 18.7-53.31 38.67-17.59 30.32-13.58 68.54 9.92 94.54-7.26 21.79-4.76 45.66 6.85 65.48 17.46 30.4 52.56 46.04 86.84 38.68 15.24 17.18 37.16 26.95 60.13 26.8 35.06.09 66.16-22.49 76.94-55.86 22.51-4.61 41.94-18.7 53.31-38.67 17.57-30.32 13.55-68.51-9.94-94.51zm-120.28 168.11c-14.03.02-27.62-4.89-38.39-13.88.49-.26 1.34-.73 1.89-1.07l63.72-36.8c3.26-1.85 5.26-5.32 5.24-9.07v-89.83l26.93 15.55c.29.14.48.42.52.74v74.39c-.04 33.08-26.83 59.9-59.91 59.97zm-128.84-55.03c-7.03-12.14-9.56-26.37-7.15-40.18.47.28 1.3.79 1.89 1.13l63.72 36.8c3.23 1.89 7.23 1.89 10.47 0l77.79-44.92v31.1c.02.32-.13.63-.38.83l-64.41 37.19c-28.69 16.52-65.33 6.7-81.92-21.95zm-16.77-139.09c7-12.16 18.05-21.46 31.21-26.29 0 .55-.03 1.52-.03 2.2v73.61c-.02 3.74 1.98 7.21 5.23 9.06l77.79 44.91-26.93 15.55c-.27.18-.61.21-.91.08l-64.42-37.22c-28.63-16.58-38.45-53.21-21.95-81.89zm221.26 51.49-77.79-44.92 26.93-15.54c.27-.18.61-.21.91-.08l64.42 37.19c28.68 16.57 38.51 53.26 21.94 81.94-7.01 12.14-18.05 21.44-31.2 26.28v-75.81c.03-3.74-1.96-7.2-5.2-9.06zm26.8-40.34c-.47-.29-1.3-.79-1.89-1.13l-63.72-36.8c-3.23-1.89-7.23-1.89-10.47 0l-77.79 44.92v-31.1c-.02-.32.13-.63.38-.83l64.41-37.16c28.69-16.55 65.37-6.7 81.91 22 6.99 12.12 9.52 26.31 7.15 40.1zm-168.51 55.43-26.94-15.55c-.29-.14-.48-.42-.52-.74v-74.39c.02-33.12 26.89-59.96 60.01-59.94 14.01 0 27.57 4.92 38.34 13.88-.49.26-1.33.73-1.89 1.07l-63.72 36.8c-3.26 1.85-5.26 5.31-5.24 9.06l-.04 89.79zm14.63-31.54 34.65-20.01 34.65 20v40.01l-34.65 20-34.65-20z\" />\n </svg>\n);\n","import React from 'react';\n\nexport const AnthropicMessagesIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n className=\"h-3 w-3\"\n fill=\"white\"\n height=\"78\"\n strokeLinejoin=\"round\"\n viewBox=\"0 0 16 16\"\n width=\"78\"\n style={{ color: 'currentcolor' }}\n {...props}\n >\n <g transform=\"translate(0,2)\">\n <path\n d=\"M11.375 0h-2.411L13.352 11.13h2.411L11.375 0ZM4.4 0 0 11.13h2.46l0.9-2.336h4.604l0.9 2.336h2.46L6.924 0H4.4Zm-0.244 6.723 1.506-3.909 1.506 3.909H4.156Z\"\n fill=\"currentColor\"\n ></path>\n </g>\n </svg>\n);\n","import React from 'react';\n\nexport const AzureIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n className=\"h-3 w-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n {...props}\n >\n <path\n d=\"M7.402 13.8777C9.45763 13.4674 11.1555 13.128 11.175 13.1233L11.2104 13.1148L9.2697 10.507C8.2023 9.07276 7.32898 7.8937 7.32898 7.88691C7.32898 7.87404 9.33293 1.63997 9.3442 1.61779C9.34797 1.61037 10.7117 4.27017 12.65 8.06532C14.4647 11.6184 15.9608 14.5479 15.9747 14.5754L16 14.6253L9.83224 14.6244L3.66449 14.6235L7.402 13.8777ZM0 13.0824C0 13.0787 0.914457 11.2855 2.03212 9.09735L4.06425 5.11896L6.43245 2.87384C7.73497 1.63902 8.80417 0.627201 8.80845 0.625356C8.81274 0.623511 8.79561 0.672228 8.77038 0.733617C8.74515 0.795006 7.58796 3.59893 6.19884 6.96455L3.67317 13.0839L1.83659 13.0865C0.826464 13.0879 0 13.0861 0 13.0824Z\"\n fill=\"#0089D6\"\n style={{ fill: '#0089D6', fillOpacity: 1 }}\n />\n </svg>\n);\n","import React from 'react';\n\nexport const CohereIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg className=\"h-3 w-3\" xmlns=\"http://www.w3.org/2000/svg\" width=\"17\" height=\"18\" fill=\"none\" {...props}>\n <mask id=\"mask0_174_2406\" maskUnits=\"userSpaceOnUse\" x=\"0\" y=\"0\" width=\"17\" height=\"18\">\n <path d=\"M17 0.5H0V17.5H17V0.5Z\" fill=\"white\" />\n </mask>\n <g mask=\"url(#mask0_174_2406)\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M5.50773 10.6219C5.9653 10.6219 6.8755 10.5968 8.13362 10.0788C9.59973 9.47518 12.5166 8.37942 14.6208 7.2539C16.0924 6.46668 16.7375 5.42553 16.7375 4.02344C16.7375 2.07751 15.16 0.5 13.2141 0.5H5.06095C2.26586 0.5 0 2.76586 0 5.56095C0 8.35604 2.12151 10.6219 5.50773 10.6219Z\"\n fill=\"#39594D\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.88672 14.107C6.88672 12.7369 7.71155 11.5016 8.97699 10.9764L11.5446 9.9108C14.1417 8.83294 17.0003 10.7415 17.0003 13.5535C17.0003 15.732 15.2339 17.4979 13.0553 17.4973L10.2754 17.4966C8.40372 17.4961 6.88672 15.9787 6.88672 14.107Z\"\n fill=\"#D18EE2\"\n />\n <path\n d=\"M2.91749 11.2891C1.30623 11.2891 0 12.5952 0 14.2065V14.5844C0 16.1956 1.30618 17.5018 2.91744 17.5018C4.5287 17.5018 5.83493 16.1956 5.83493 14.5844V14.2065C5.83493 12.5952 4.52875 11.2891 2.91749 11.2891Z\"\n fill=\"#FF7759\"\n />\n </g>\n </svg>\n);\n","import React from 'react';\n\nexport const GroqIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n className=\"h-3 w-3\"\n data-testid=\"geist-icon\"\n height=\"78\"\n strokeLinejoin=\"round\"\n viewBox=\"0 0 160 59\"\n width=\"104\"\n style={{\n color: 'currentcolor',\n }}\n {...props}\n >\n <mask\n id=\"mask0_4345_1846\"\n maskUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"160\"\n height=\"59\"\n style={{\n maskType: 'luminance',\n }}\n >\n <path d=\"M0.273438 0.219727H159.216V58.1817H0.273438V0.219727Z\" fill=\"white\"></path>\n </mask>\n <g mask=\"url(#mask0_4345_1846)\">\n <path\n d=\"M95.4635 0.314595C84.4822 0.314595 75.5599 9.19525 75.5599 20.1677C75.5599 31.1402 84.4632 40.0208 95.4635 40.0208C106.464 40.0208 115.367 31.1402 115.367 20.1677C115.348 9.21427 106.445 0.333611 95.4635 0.314595ZM95.4635 32.5664C88.6002 32.5664 83.0333 27.0136 83.0333 20.1677C83.0333 13.3218 88.6002 7.76902 95.4635 7.76902C102.327 7.76902 107.894 13.3218 107.894 20.1677C107.894 27.0136 102.327 32.5664 95.4635 32.5664ZM67.9912 0.39066C67.3049 0.314595 66.6376 0.276562 65.9513 0.276562C65.6081 0.276562 65.284 0.276562 64.9599 0.295578C64.6358 0.314595 64.2926 0.333611 63.9685 0.352628C62.634 0.44771 61.2995 0.675906 60.0031 1.03722C57.3531 1.74082 54.8556 2.99591 52.7013 4.68836C50.4898 6.43787 48.7358 8.68181 47.5347 11.23C46.9437 12.5041 46.5052 13.8543 46.2193 15.2234C46.0858 15.908 45.9905 16.5926 45.9142 17.2772C45.8952 17.6195 45.857 17.9618 45.857 18.3041L45.838 18.8175V19.293L45.8761 32.5854L45.9142 39.2221H53.3685L53.4067 32.5854L53.4448 19.293V18.5893C53.4448 18.3802 53.4829 18.171 53.4829 17.9618C53.5211 17.5434 53.5973 17.1441 53.6736 16.7257C53.8452 15.9271 54.093 15.1474 54.4362 14.4057C55.1225 12.9225 56.152 11.6293 57.4293 10.6025C58.7639 9.53755 60.3081 8.75787 61.9477 8.3205C62.7865 8.0923 63.6635 7.94017 64.5405 7.8641C64.7693 7.84509 64.979 7.82607 65.2078 7.82607C65.4365 7.82607 65.6653 7.80705 65.875 7.80705C66.2944 7.80705 66.7329 7.82607 67.1524 7.8641C68.8491 8.03525 70.4887 8.54869 71.9948 9.38541L75.7124 2.93886C73.3484 1.56968 70.7175 0.694923 67.9912 0.39066ZM20.3484 0.219513C9.36711 0.124431 0.36855 8.92902 0.273226 19.8825C0.177902 30.8359 9.00488 39.8116 19.9862 39.9067H26.8876V32.4713H20.3484C13.4851 32.5474 7.84193 27.0707 7.76567 20.2057C7.68941 13.3408 13.1801 7.73099 20.0624 7.65492H20.3484C27.2117 7.65492 32.7786 13.2077 32.8167 20.0536V38.3284C32.8167 45.1172 27.2689 50.651 20.4819 50.7271C17.2218 50.708 14.1142 49.3959 11.8265 47.0949L6.54553 52.3625C10.206 56.0326 15.1628 58.1244 20.3484 58.1625H20.6153C31.4632 58.0103 40.1757 49.2248 40.2329 38.4044V19.5592C39.966 8.81492 31.1391 0.238529 20.3484 0.219513ZM139.389 0.314595C128.407 0.314595 119.485 9.19525 119.504 20.1677C119.504 31.1212 128.407 40.0018 139.389 40.0018H146.195V32.5664H139.389C132.525 32.5664 126.958 27.0136 126.958 20.1677C126.958 13.3218 132.525 7.76902 139.389 7.76902C145.833 7.76902 151.209 12.6943 151.781 19.1028H151.762V57.2116H159.216V20.1677C159.216 9.21427 150.351 0.314595 139.389 0.314595Z\"\n fill=\"currentColor\"\n ></path>\n </g>\n </svg>\n);\n","import React from 'react';\n\nexport const MastraIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 34 21\" fill=\"none\" {...props}>\n <path\n d=\"M4.49805 11.6934C6.98237 11.6934 8.99609 13.7081 8.99609 16.1924C8.9959 18.6765 6.98225 20.6904 4.49805 20.6904C2.01394 20.6903 0.000196352 18.6765 0 16.1924C0 13.7081 2.01382 11.6935 4.49805 11.6934ZM10.3867 0C12.8709 0 14.8846 2.01388 14.8848 4.49805C14.8848 4.8377 14.847 5.16846 14.7755 5.48643C14.4618 6.88139 14.1953 8.4633 14.9928 9.65L16.2575 11.5319C16.3363 11.6491 16.4727 11.7115 16.6137 11.703C16.7369 11.6957 16.8525 11.6343 16.9214 11.5318L18.1876 9.64717C18.9772 8.47198 18.7236 6.90783 18.4205 5.52484C18.3523 5.21392 18.3164 4.89094 18.3164 4.55957C18.3167 2.07546 20.3313 0.0615234 22.8154 0.0615234C25.2994 0.0617476 27.3132 2.0756 27.3135 4.55957C27.3135 4.93883 27.2665 5.30712 27.178 5.65896C26.8547 6.94441 26.5817 8.37932 27.2446 9.52714L28.459 11.6301C28.4819 11.6697 28.5245 11.6934 28.5703 11.6934C31.0545 11.6935 33.0684 13.7081 33.0684 16.1924C33.0682 18.6765 31.0544 20.6903 28.5703 20.6904C26.0861 20.6904 24.0725 18.6765 24.0723 16.1924C24.0723 15.8049 24.1212 15.4288 24.2133 15.0701C24.5458 13.7746 24.8298 12.3251 24.1609 11.1668L23.0044 9.16384C22.9656 9.09659 22.8931 9.05859 22.8154 9.05859C22.7983 9.05859 22.7824 9.06614 22.7728 9.08033L21.4896 10.9895C20.686 12.1851 20.9622 13.781 21.284 15.1851C21.3582 15.5089 21.3975 15.8461 21.3975 16.1924C21.3973 18.6764 19.3834 20.6902 16.8994 20.6904C14.4152 20.6904 12.4006 18.6765 12.4004 16.1924C12.4004 15.932 12.4226 15.6768 12.4651 15.4286C12.6859 14.14 12.8459 12.7122 12.1167 11.6271L11.2419 10.3253C10.6829 9.49347 9.71913 9.05932 8.78286 8.70188C7.0906 8.05584 5.88867 6.41734 5.88867 4.49805C5.88886 2.0139 7.90254 3.29835e-05 10.3867 0Z\"\n fill={props.fill || 'currentColor'}\n />\n </svg>\n);\n","import React from 'react';\n\nexport const MistralIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n className=\"h-3 w-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"176\"\n height=\"162\"\n viewBox=\"0 0 176 162\"\n fill=\"none\"\n {...props}\n >\n <rect x=\"15\" y=\"1\" width=\"32\" height=\"32\" fill=\"#FFCD00\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect x=\"143\" y=\"1\" width=\"32\" height=\"32\" fill=\"#FFCD00\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect x=\"15\" y=\"33\" width=\"32\" height=\"32\" fill=\"#FFA400\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect x=\"47\" y=\"33\" width=\"32\" height=\"32\" fill=\"#FFA400\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect\n x=\"111\"\n y=\"33\"\n width=\"32\"\n height=\"32\"\n fill=\"#FFA400\"\n stroke=\"#636363\"\n stroke-opacity=\"0.2\"\n strokeWidth=\"0.5\"\n />\n <rect\n x=\"143\"\n y=\"33\"\n width=\"32\"\n height=\"32\"\n fill=\"#FFA400\"\n stroke=\"#636363\"\n stroke-opacity=\"0.2\"\n strokeWidth=\"0.5\"\n />\n <rect x=\"15\" y=\"65\" width=\"32\" height=\"32\" fill=\"#FF7100\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect x=\"47\" y=\"65\" width=\"32\" height=\"32\" fill=\"#FF7100\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect x=\"79\" y=\"65\" width=\"32\" height=\"32\" fill=\"#FF7100\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect\n x=\"111\"\n y=\"65\"\n width=\"32\"\n height=\"32\"\n fill=\"#FF7100\"\n stroke=\"#636363\"\n stroke-opacity=\"0.2\"\n strokeWidth=\"0.5\"\n />\n <rect\n x=\"143\"\n y=\"65\"\n width=\"32\"\n height=\"32\"\n fill=\"#FF7100\"\n stroke=\"#636363\"\n stroke-opacity=\"0.2\"\n strokeWidth=\"0.5\"\n />\n <rect x=\"15\" y=\"97\" width=\"32\" height=\"32\" fill=\"#FF4902\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect x=\"79\" y=\"97\" width=\"32\" height=\"32\" fill=\"#FF4902\" stroke=\"#636363\" stroke-opacity=\"0.2\" strokeWidth=\"0.5\" />\n <rect\n x=\"143\"\n y=\"97\"\n width=\"32\"\n height=\"32\"\n fill=\"#FF4902\"\n stroke=\"#636363\"\n stroke-opacity=\"0.2\"\n strokeWidth=\"0.5\"\n />\n <rect\n x=\"15\"\n y=\"129\"\n width=\"32\"\n height=\"32\"\n fill=\"#FF0006\"\n stroke=\"#636363\"\n stroke-opacity=\"0.2\"\n strokeWidth=\"0.5\"\n />\n <rect\n x=\"143\"\n y=\"129\"\n width=\"32\"\n height=\"32\"\n fill=\"#FF0006\"\n stroke=\"#636363\"\n stroke-opacity=\"0.2\"\n strokeWidth=\"0.5\"\n />\n <rect y=\"1\" width=\"16\" height=\"160\" fill=\"black\" />\n <rect x=\"63\" y=\"97\" width=\"16\" height=\"32\" fill=\"black\" />\n <rect x=\"95\" y=\"33\" width=\"16\" height=\"32\" fill=\"black\" />\n <rect x=\"127\" y=\"1\" width=\"16\" height=\"32\" fill=\"black\" />\n <rect x=\"127\" y=\"97\" width=\"16\" height=\"64\" fill=\"black\" />\n </svg>\n);\n","import React from 'react';\n\nexport const NetlifyIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"128\" height=\"113\" viewBox=\"0 0 128 113\">\n <g clipPath=\"url(#clip0_236_138)\" {...props}>\n <path\n d=\"M34.593 94.0509H33.3844L27.3514 88.0179V86.8094L36.5743 77.5866H42.9639L43.8158 78.4385V84.8281L34.593 94.0509Z\"\n fill={props.fill || '#05BDBA'}\n />\n <path\n d=\"M27.3514 25.816V24.6074L33.3844 18.5744H34.593L43.8158 27.7972V34.1868L42.9639 35.0388H36.5743L27.3514 25.816Z\"\n fill={props.fill || '#05BDBA'}\n />\n <path\n d=\"M80.4594 74.6047H71.6824L70.9493 73.8717V53.3259C70.9493 49.6705 69.5129 46.8372 65.1046 46.7382C62.836 46.6787 60.2405 46.7382 57.4668 46.8471L57.0507 47.2731V73.8618L56.3176 74.5948H47.5406L46.8075 73.8618V38.7636L47.5406 38.0305H67.2939C74.9713 38.0305 81.1925 44.2517 81.1925 51.9291V73.8717L80.4594 74.6047Z\"\n fill={props.fill || '#014847'}\n />\n <path\n d=\"M35.8412 61.4491H0.73307L0 60.716V51.9192L0.73307 51.1861H35.8412L36.5743 51.9192V60.716L35.8412 61.4491Z\"\n fill={props.fill || '#05BDBA'}\n />\n <path\n d=\"M127.277 61.4491H92.1687L91.4356 60.716V51.9192L92.1687 51.1861H127.277L128.01 51.9192V60.716L127.277 61.4491Z\"\n fill={props.fill || '#05BDBA'}\n />\n <path\n d=\"M58.9428 27.0642V0.73307L59.6759 0H68.4727L69.2058 0.73307V27.0642L68.4727 27.7972H59.6759L58.9428 27.0642Z\"\n fill={props.fill || '#05BDBA'}\n />\n <path\n d=\"M58.9428 111.902V85.5711L59.6759 84.838H68.4727L69.2058 85.5711V111.902L68.4727 112.635H59.6759L58.9428 111.902Z\"\n fill={props.fill || '#05BDBA'}\n />\n </g>\n <defs>\n <clipPath id=\"clip0_236_138\">\n <rect width=\"128\" height=\"112.635\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n);\n","import React from 'react';\n\nexport const OpenaiChatIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg className=\"h-3 w-3\" viewBox=\"0 0 320 320\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" {...props}>\n <path d=\"m297.06 130.97c7.26-21.79 4.76-45.66-6.85-65.48-17.46-30.4-52.56-46.04-86.84-38.68-15.25-17.18-37.16-26.95-60.13-26.81-35.04-.08-66.13 22.48-76.91 55.82-22.51 4.61-41.94 18.7-53.31 38.67-17.59 30.32-13.58 68.54 9.92 94.54-7.26 21.79-4.76 45.66 6.85 65.48 17.46 30.4 52.56 46.04 86.84 38.68 15.24 17.18 37.16 26.95 60.13 26.8 35.06.09 66.16-22.49 76.94-55.86 22.51-4.61 41.94-18.7 53.31-38.67 17.57-30.32 13.55-68.51-9.94-94.51zm-120.28 168.11c-14.03.02-27.62-4.89-38.39-13.88.49-.26 1.34-.73 1.89-1.07l63.72-36.8c3.26-1.85 5.26-5.32 5.24-9.07v-89.83l26.93 15.55c.29.14.48.42.52.74v74.39c-.04 33.08-26.83 59.9-59.91 59.97zm-128.84-55.03c-7.03-12.14-9.56-26.37-7.15-40.18.47.28 1.3.79 1.89 1.13l63.72 36.8c3.23 1.89 7.23 1.89 10.47 0l77.79-44.92v31.1c.02.32-.13.63-.38.83l-64.41 37.19c-28.69 16.52-65.33 6.7-81.92-21.95zm-16.77-139.09c7-12.16 18.05-21.46 31.21-26.29 0 .55-.03 1.52-.03 2.2v73.61c-.02 3.74 1.98 7.21 5.23 9.06l77.79 44.91-26.93 15.55c-.27.18-.61.21-.91.08l-64.42-37.22c-28.63-16.58-38.45-53.21-21.95-81.89zm221.26 51.49-77.79-44.92 26.93-15.54c.27-.18.61-.21.91-.08l64.42 37.19c28.68 16.57 38.51 53.26 21.94 81.94-7.01 12.14-18.05 21.44-31.2 26.28v-75.81c.03-3.74-1.96-7.2-5.2-9.06zm26.8-40.34c-.47-.29-1.3-.79-1.89-1.13l-63.72-36.8c-3.23-1.89-7.23-1.89-10.47 0l-77.79 44.92v-31.1c-.02-.32.13-.63.38-.83l64.41-37.16c28.69-16.55 65.37-6.7 81.91 22 6.99 12.12 9.52 26.31 7.15 40.1zm-168.51 55.43-26.94-15.55c-.29-.14-.48-.42-.52-.74v-74.39c.02-33.12 26.89-59.96 60.01-59.94 14.01 0 27.57 4.92 38.34 13.88-.49.26-1.33.73-1.89 1.07l-63.72 36.8c-3.26 1.85-5.26 5.31-5.24 9.06l-.04 89.79zm14.63-31.54 34.65-20.01 34.65 20v40.01l-34.65 20-34.65-20z\" />\n </svg>\n);\n","import React from 'react';\n\nexport const XGroqIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n className=\"h-3 w-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 1000 1000\"\n width=\"78\"\n height=\"78\"\n style={{\n color: 'currentcolor',\n }}\n {...props}\n >\n <g>\n <polygon\n fill=\"currentColor\"\n points=\"226.83 411.15 501.31 803.15 623.31 803.15 348.82 411.15 226.83 411.15\"\n ></polygon>\n <polygon\n fill=\"currentColor\"\n points=\"348.72 628.87 226.69 803.15 348.77 803.15 409.76 716.05 348.72 628.87\"\n ></polygon>\n <polygon\n fill=\"currentColor\"\n points=\"651.23 196.85 440.28 498.12 501.32 585.29 773.31 196.85 651.23 196.85\"\n ></polygon>\n <polygon\n fill=\"currentColor\"\n points=\"673.31 383.25 673.31 803.15 773.31 803.15 773.31 240.44 673.31 383.25\"\n ></polygon>\n </g>\n </svg>\n);\n","import React from 'react';\n\nexport const WorkspacesIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 9.55888 8.30616\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M0 7.18794V1.11823C-4.80684e-08 0.5005 0.5005 2.79299e-06 1.11823 0H3.17924C3.48658 0 3.78038 0.126314 3.99163 0.349532L5.09347 1.5135C5.14625 1.56923 5.21948 1.60085 5.29623 1.60088H8.44065C9.05838 1.60088 9.55888 2.10206 9.55888 2.7198V7.18794C9.55888 7.80567 9.05838 8.30616 8.44065 8.30616H1.11823C0.500524 8.30614 4.41663e-06 7.80565 0 7.18794ZM0.838331 7.18794C0.838332 7.34235 0.963819 7.46781 1.11823 7.46783H8.44065C8.59509 7.46783 8.72055 7.34237 8.72055 7.18794V2.7198C8.72055 2.56536 8.59509 2.4399 8.44065 2.4399H5.29623C4.98896 2.43986 4.69506 2.31353 4.48384 2.09037L3.38268 0.925714C3.32987 0.869949 3.25604 0.838331 3.17924 0.838331H1.11823C0.963799 0.838334 0.838331 0.963798 0.838331 1.11823V7.18794Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const RequestContextIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 11.185 11.185\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2.13324 2.7965L2.18203 2.84592C1.82485 3.28847 1.55755 3.79653 1.39512 4.34155H2.38658C2.56011 3.8986 2.82333 3.49631 3.15971 3.15992C3.4961 2.82353 3.8984 2.56031 4.34134 2.38679V1.39533C3.79632 1.55775 3.28827 1.82506 2.84571 2.18224L2.7963 2.13345L1.85801 1.19516L1.52648 0.863634L0.863426 1.52669L1.19495 1.85822L2.13324 2.7965ZM9.00275 8.33927C9.35991 7.89671 9.62722 7.38866 9.78966 6.84365H8.7982C8.62471 7.28661 8.3615 7.68892 8.02511 8.02531C7.68871 8.3617 7.2864 8.62491 6.84344 8.79841V9.78987C7.38847 9.62746 7.89652 9.36015 8.33907 9.00296L8.38848 9.05175L9.32677 9.99003L9.6583 10.3216L10.3214 9.65851L9.98983 9.32698L9.05154 8.38869L9.00275 8.33927ZM9.00275 2.84592C9.35995 3.28846 9.62726 3.79651 9.78966 4.34155H8.7982C8.62467 3.8986 8.36145 3.49631 8.02506 3.15992C7.68868 2.82353 7.28638 2.56031 6.84344 2.38679V1.39533C7.38846 1.55775 7.89651 1.82506 8.33907 2.18224L8.38848 2.13345L9.32677 1.19516L9.6583 0.863634L10.3214 1.52669L9.98983 1.85822L9.05154 2.7965L9.00275 2.84592ZM1.39512 6.84365H2.38658C2.56011 7.28659 2.82333 7.68888 3.15971 8.02527C3.4961 8.36166 3.8984 8.62488 4.34134 8.79841V9.78987C3.79631 9.62747 3.28825 9.36016 2.84571 9.00296L2.7963 9.05175L1.85801 9.99003L1.52648 10.3216L0.863426 9.65851L1.19495 9.32698L2.13324 8.38869L2.18203 8.33927C1.82485 7.89672 1.55755 7.38867 1.39512 6.84365ZM5.59239 6.84365C5.92419 6.84365 6.2424 6.71184 6.47701 6.47722C6.71163 6.2426 6.84344 5.9244 6.84344 5.5926C6.84344 5.2608 6.71163 4.94259 6.47701 4.70797C6.2424 4.47336 5.92419 4.34155 5.59239 4.34155C5.26059 4.34155 4.94238 4.47336 4.70776 4.70797C4.47315 4.94259 4.34134 5.2608 4.34134 5.5926C4.34134 5.9244 4.47315 6.2426 4.70776 6.47722C4.94238 6.71184 5.26059 6.84365 5.59239 6.84365Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const ScorersIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 8.94379 8.92126\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M6.13251 5.43413C6.51629 5.43413 6.82744 5.74533 6.82748 6.1291C6.82748 6.5129 6.51631 6.82407 6.13251 6.82407C5.74877 6.824 5.43754 6.51286 5.43754 6.1291C5.43759 5.74537 5.74879 5.4342 6.13251 5.43413Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M5.92771 2.29722C6.13122 2.09376 6.46147 2.09379 6.665 2.29722C6.86843 2.50075 6.86846 2.831 6.665 3.03451L3.03724 6.66227C2.83373 6.86578 2.5035 6.86572 2.29995 6.66227C2.0965 6.45872 2.09644 6.12849 2.29995 5.92498L5.92771 2.29722Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M2.842 2.12791C3.22572 2.12799 3.53694 2.43914 3.53696 2.82288C3.53696 3.20664 3.22573 3.51777 2.842 3.51785C2.45819 3.51785 2.14703 3.20668 2.14703 2.82288C2.14705 2.4391 2.45821 2.12791 2.842 2.12791Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.38455 0.00887484C8.26052 0.0979278 8.94379 0.837945 8.94379 1.73742V7.18384C8.94369 8.08322 8.26046 8.82334 7.38455 8.91238L7.20705 8.92126H1.73742L1.55992 8.91238C0.683828 8.82351 0.000101213 8.08336 0 7.18384V1.73742C0 0.837813 0.683761 0.0977507 1.55992 0.00887484L1.73742 0H7.20705L7.38455 0.00887484ZM1.73742 0.839013C1.24121 0.839013 0.839013 1.24121 0.839013 1.73742V7.18384C0.839121 7.67996 1.24128 8.08293 1.73742 8.08293H7.20705C7.70305 8.08276 8.10535 7.67985 8.10546 7.18384V1.73742C8.10546 1.24131 7.70312 0.83918 7.20705 0.839013H1.73742Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const DatasetsIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 8.64637 9.45103\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M7.80735 5.87241C7.63209 5.97219 7.43696 6.06166 7.22844 6.13866C6.46456 6.42068 5.43714 6.58649 4.32296 6.58649C3.20873 6.58649 2.18135 6.4207 1.41747 6.13866C1.20889 6.06164 1.01385 5.97223 0.838558 5.87241V7.59003C0.838558 7.62341 0.855765 7.70759 1.00172 7.83512C1.14707 7.96201 1.38219 8.09563 1.70829 8.21605C2.3572 8.45563 3.28149 8.61268 4.32296 8.61269C5.36456 8.61269 6.28937 8.45568 6.9383 8.21605C7.26428 8.09566 7.49888 7.96198 7.64419 7.83512C7.79024 7.70754 7.80735 7.62342 7.80735 7.59003V5.87241ZM7.80735 3.00789C7.63214 3.10763 7.4369 3.19647 7.22844 3.27345C6.46455 3.55549 5.43719 3.72129 4.32296 3.72129C3.20868 3.72128 2.18136 3.55552 1.41747 3.27345C1.20896 3.19645 1.01381 3.10766 0.838558 3.00789V4.72551C0.838558 4.7589 0.855657 4.84301 1.00172 4.97059C1.14707 5.09749 1.38219 5.23111 1.70829 5.35153C2.3572 5.59109 3.28154 5.74747 4.32296 5.74748C5.36456 5.74748 6.28937 5.59116 6.9383 5.35153C7.26432 5.23112 7.49887 5.09747 7.64419 4.97059C7.7536 4.87505 7.79089 4.80404 7.80257 4.76033L7.80735 4.72551V3.00789ZM7.80735 1.86099C7.80735 1.82758 7.79045 1.74291 7.64419 1.61522C7.49887 1.48838 7.26421 1.35534 6.9383 1.23497C6.28937 0.995339 5.36456 0.838331 4.32296 0.838331C3.28149 0.83834 2.3572 0.995383 1.70829 1.23497C1.38219 1.35539 1.14707 1.48832 1.00172 1.61522C0.855475 1.7429 0.838558 1.82758 0.838558 1.86099C0.838673 1.89462 0.855968 1.97882 1.00172 2.10607C1.14707 2.23297 1.38219 2.3659 1.70829 2.48632C2.3572 2.7259 3.28149 2.88295 4.32296 2.88296C5.36456 2.88296 6.28937 2.72595 6.9383 2.48632C7.26421 2.36595 7.49887 2.23291 7.64419 2.10607C7.78996 1.97881 7.80724 1.89462 7.80735 1.86099ZM8.64637 7.59003C8.64637 7.95465 8.44458 8.25006 8.1958 8.46728C7.94608 8.68529 7.60876 8.86274 7.22844 9.00318C6.46455 9.28522 5.43718 9.45102 4.32296 9.45102C3.20869 9.45101 2.18135 9.28525 1.41747 9.00318C1.03715 8.86274 0.699831 8.68529 0.450113 8.46728C0.201377 8.25007 0.000227451 7.9546 0.000227451 7.59003V1.86099C0.000227451 1.49643 0.201388 1.20095 0.450113 0.983742C0.699831 0.765728 1.03715 0.588275 1.41747 0.447838C2.18136 0.165769 3.20868 8.74396e-06 4.32296 0C5.43719 0 6.46455 0.165797 7.22844 0.447838C7.60876 0.588275 7.94608 0.765728 8.1958 0.983742C8.44457 1.20096 8.64637 1.49638 8.64637 1.86099V7.59003Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const ExperimentsIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 9.83952 9.3295\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.67171 0.838331H6.70163V4.05307L9.68767 8.09999C10.0634 8.6093 9.69869 9.32932 9.06643 9.3295H0.772551C0.140289 9.3293 -0.223777 8.60929 0.151995 8.09999L3.13804 4.05307V0.838331H2.17136V0H7.67171V0.838331ZM3.97705 4.32955L3.89513 4.44015L2.34681 6.53802H7.49285L5.94453 4.44015L5.86261 4.32955V0.860859H3.97705V4.32955Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const MetricsIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 8.98824 8.33142\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M5.70011e-05 6.409V0H1.04865V6.409C1.04875 6.89152 1.43994 7.28283 1.92248 7.28283H8.3581V8.33142H1.92248C0.860814 8.33142 0.000149953 7.47065 5.70011e-05 6.409Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M8.08006 0.945713C8.27714 0.733828 8.6087 0.72151 8.82077 0.918405C9.03289 1.11551 9.04518 1.44767 8.84808 1.6598L6.08595 4.63218C5.90127 4.83085 5.59525 4.85557 5.38074 4.68953L4.03177 3.64571L2.74765 5.07183C2.55386 5.28688 2.22206 5.30441 2.00694 5.11074C1.79189 4.91695 1.77435 4.58515 1.96803 4.37003L3.57915 2.58278L3.65357 2.51451C3.83887 2.37494 4.09997 2.37165 4.28982 2.51861L5.64358 3.56652L8.08006 0.945713Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n","import { useCallback, useState } from 'react';\n\n/**\n * Tracks whether or not the given element is currently in view.\n * This is to replace framer-motion's `useInView` which has issues\n * tracking a ref that is set at a time other than mount.\n */\nexport const useInView = () => {\n const [inView, setInView] = useState(false);\n\n const setRef = useCallback((node: HTMLDivElement | null) => {\n if (node) {\n const observer = new IntersectionObserver(([entry]) => {\n setInView(entry.isIntersecting);\n });\n observer.observe(node);\n return () => observer.disconnect();\n }\n }, []);\n\n return { inView, setRef };\n};\n","export const lodashTitleCase = (str: string): string => {\n // First convert to camel case (handles various separators like spaces, hyphens, underscores)\n const camelCased = str\n .replace(/[-_\\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : ''))\n .replace(/^(.)/, char => char.toLowerCase());\n\n // Then convert to start case (capitalize first letter of each word)\n return camelCased\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, str => str.toUpperCase())\n .trim();\n};\n","export const toSigFigs = (num: number, sigFigs: number) => {\n // toPrecision returns significant digits formatted with potentially exponential notation\n // Number() converts the exponential notation to a regular number\n return Number(num.toPrecision(sigFigs));\n};\n","/**\n * Checks if object is empty\n * @param objectName\n * @returns boolean\n */\nexport const isObjectEmpty = (objectName: Object) => {\n return objectName && Object.keys(objectName).length === 0 && objectName.constructor === Object;\n};\n","/* eslint-disable @typescript-eslint/consistent-type-imports */\n\nlet prettierModules:\n | Promise<\n [\n typeof import('prettier/standalone'),\n typeof import('prettier/plugins/babel'),\n typeof import('prettier/plugins/estree'),\n ]\n >\n | undefined;\n\nconst loadPrettier = () =>\n (prettierModules ??= Promise.all([\n import('prettier/standalone'),\n import('prettier/plugins/babel'),\n import('prettier/plugins/estree'),\n ]).catch(error => {\n prettierModules = undefined;\n throw error;\n }));\n\nexport const formatJSON = async (code: string) => {\n const [prettier, prettierPluginBabel, prettierPluginEstree] = await loadPrettier();\n\n const formatted = await prettier.format(code, {\n semi: false,\n parser: 'json',\n printWidth: 80,\n tabWidth: 2,\n plugins: [prettierPluginBabel, prettierPluginEstree],\n });\n\n return formatted;\n};\n\nexport const formatTypeScript = async (code: string) => {\n const [prettier, prettierPluginBabel, prettierPluginEstree] = await loadPrettier();\n\n const formatted = await prettier.format(code, {\n parser: 'babel-ts',\n printWidth: 80,\n tabWidth: 2,\n plugins: [prettierPluginBabel, prettierPluginEstree],\n });\n\n return formatted;\n};\n\nexport const isValidJson = (str: string) => {\n try {\n // Attempt to parse the string as JSON\n const obj = JSON.parse(str);\n\n // Additionally check if the parsed result is an object\n return !!obj && typeof obj === 'object';\n } catch {\n // If parsing throws an error, it's not valid JSON\n return false;\n }\n};\n","export const stringToColor = (str: string, lightness: number = 90, saturation = 100) => {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n hash = hash & hash;\n }\n return `hsl(${hash % 360}, ${saturation}%, ${lightness}%)`;\n};\n","export function truncateString(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return str.slice(0, maxLength) + '…';\n}\n","const errorFallback = 'Something went wrong while fetching the data.';\nexport const parseError = (error: Error) => {\n try {\n const httpErrorPattern = /^HTTP error! status:\\s*\\d+\\s*- \\s*/;\n const errorMessage = error?.message.replace(httpErrorPattern, '');\n const jsonError = JSON.parse(errorMessage || '{}');\n return {\n error: jsonError?.error || errorFallback,\n stack: jsonError?.stack || error?.stack,\n };\n } catch {\n return {\n error: error?.message || errorFallback,\n stack: undefined,\n };\n }\n};\n","/**\n * HTTP status codes that should not be retried.\n * - 400: Bad Request (client error, won't change)\n * - 401: Unauthorized (needs re-auth, not retry)\n * - 403: Forbidden (RBAC permission denied)\n * - 404: Not Found (resource doesn't exist)\n */\nconst HTTP_NO_RETRY_STATUSES = [400, 401, 403, 404];\n\n/**\n * Check if error is a 401 Unauthorized response.\n * Indicates the user's session has expired or token is invalid.\n * Handles both direct status property and client-js error message format.\n */\nexport function is401UnauthorizedError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property (direct response or wrapped)\n if ('status' in error && (error as { status: number }).status === 401) {\n return true;\n }\n\n // Check for statusCode property (some HTTP clients)\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 401) {\n return true;\n }\n\n // Check error message for client-js pattern: \"HTTP error! status: 401\"\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*401\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if error is a 403 Forbidden response.\n * Handles both direct status property and client-js error message format.\n */\nexport function is403ForbiddenError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property (direct response or wrapped)\n if ('status' in error && (error as { status: number }).status === 403) {\n return true;\n }\n\n // Check for statusCode property (some HTTP clients)\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 403) {\n return true;\n }\n\n // Check error message for client-js pattern: \"HTTP error! status: 403\"\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*403\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if error is a 404 Not Found response.\n * Handles both direct status property and client-js error message format.\n */\nexport function is404NotFoundError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n if ('status' in error && (error as { status: number }).status === 404) {\n return true;\n }\n\n if ('statusCode' in error && (error as { statusCode: number }).statusCode === 404) {\n return true;\n }\n\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return /\\bstatus:\\s*404\\b/.test(message);\n }\n }\n\n return false;\n}\n\n/**\n * Check if an error came from a storage provider that does not implement `listBranches`.\n *\n * The server's `handleError` strips the original MastraError's `code`/`id` before serializing,\n * so we can't match on the ID `OBSERVABILITY_STORAGE_LIST_BRANCHES_NOT_IMPLEMENTED` directly —\n * we match on the message text from `core/.../observability/base.ts` instead.\n */\nexport function isBranchesNotSupportedError(error: unknown): boolean {\n if (!error || typeof error !== 'object' || !('message' in error)) return false;\n const message = (error as { message: unknown }).message;\n if (typeof message !== 'string') return false;\n return message.includes('does not support listing trace branches');\n}\n\n/**\n * Check if error has a status code that shouldn't be retried.\n * Used to prevent retrying client errors that won't resolve.\n */\nexport function isNonRetryableError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false;\n\n // Check for status property\n if ('status' in error) {\n const status = (error as { status: number }).status;\n return HTTP_NO_RETRY_STATUSES.includes(status);\n }\n\n // Check for statusCode property\n if ('statusCode' in error) {\n const statusCode = (error as { statusCode: number }).statusCode;\n return HTTP_NO_RETRY_STATUSES.includes(statusCode);\n }\n\n // Check error message for client-js pattern\n if ('message' in error) {\n const message = (error as { message: unknown }).message;\n if (typeof message === 'string') {\n return HTTP_NO_RETRY_STATUSES.some(code => new RegExp(`\\\\bstatus:\\\\s*${code}\\\\b`).test(message));\n }\n }\n\n return false;\n}\n\n/**\n * Default retry function for TanStack Query.\n * Does not retry 4xx client errors (400, 401, 403, 404).\n * Retries other errors up to 3 times.\n */\nexport function shouldRetryQuery(failureCount: number, error: unknown): boolean {\n // Don't retry client errors - they won't resolve with retries\n if (isNonRetryableError(error)) {\n return false;\n }\n // Default: retry up to 3 times for transient errors\n return failureCount < 3;\n}\n","import type { Rule, RuleGroup } from '../types';\n\n/**\n * Type guard: checks if a condition is a leaf Rule\n */\nexport const isRule = (condition: Rule | RuleGroup): condition is Rule => 'field' in condition;\n\n/**\n * Type guard: checks if a condition is a nested RuleGroup\n */\nexport const isRuleGroup = (condition: Rule | RuleGroup): condition is RuleGroup => 'conditions' in condition;\n\n/**\n * Recursively counts the number of leaf Rule nodes in a RuleGroup\n */\nexport const countLeafRules = (group: RuleGroup | undefined): number => {\n if (!group) return 0;\n return group.conditions.reduce((count, condition) => {\n if (isRule(condition)) return count + 1;\n return count + countLeafRules(condition);\n }, 0);\n};\n\n/**\n * Creates a default empty rule\n */\nexport const createDefaultRule = (): Rule => ({\n field: '',\n operator: 'equals',\n value: '',\n});\n\n/**\n * Creates a default empty rule group\n */\nexport const createDefaultRuleGroup = (operator: 'AND' | 'OR' = 'AND'): RuleGroup => ({\n operator,\n conditions: [createDefaultRule()],\n});\n","import type { FieldOption, JsonSchema, JsonSchemaProperty } from './types';\n\n/**\n * Gets the primary type from a JSON Schema property\n */\nexport const getPropertyType = (property: JsonSchemaProperty): string => {\n if (Array.isArray(property.type)) {\n // Return the first non-null type\n return property.type.find(t => t !== 'null') || 'string';\n }\n return property.type || 'string';\n};\n\n/**\n * Checks if a property has nested children (object or array of objects)\n */\nexport const hasNestedChildren = (property: JsonSchemaProperty): boolean => {\n const type = getPropertyType(property);\n\n if (type === 'object' && property.properties) {\n return Object.keys(property.properties).length > 0;\n }\n\n if (type === 'array' && property.items) {\n const itemType = getPropertyType(property.items);\n return itemType === 'object' && !!property.items.properties;\n }\n\n return false;\n};\n\n/**\n * Extracts field options from JSON Schema properties at a given level\n */\nexport const getFieldOptionsFromProperties = (\n properties: Record<string, JsonSchemaProperty> | undefined,\n parentPath: string = '',\n): FieldOption[] => {\n if (!properties) return [];\n\n return Object.entries(properties).map(([key, property]) => {\n const path = parentPath ? `${parentPath}.${key}` : key;\n const type = getPropertyType(property);\n const hasChildren = hasNestedChildren(property);\n\n return {\n path,\n label: property.title || key,\n type,\n hasChildren,\n children: type === 'object' ? property.properties : undefined,\n items: type === 'array' ? property.items : undefined,\n };\n });\n};\n\n/**\n * Gets field options from the root schema\n */\nexport const getFieldOptionsFromSchema = (schema: JsonSchema): FieldOption[] => {\n return getFieldOptionsFromProperties(schema.properties);\n};\n\n/**\n * Gets child field options for a given field option\n */\nexport const getChildFieldOptions = (fieldOption: FieldOption, currentPath: string): FieldOption[] => {\n if (fieldOption.type === 'object' && fieldOption.children) {\n return getFieldOptionsFromProperties(fieldOption.children, currentPath);\n }\n\n if (fieldOption.type === 'array' && fieldOption.items) {\n const itemType = getPropertyType(fieldOption.items);\n if (itemType === 'object' && fieldOption.items.properties) {\n // For arrays, we use the current path directly (user will access via index or iteration)\n return getFieldOptionsFromProperties(fieldOption.items.properties, currentPath);\n }\n }\n\n return [];\n};\n\n/**\n * Parses a field path into segments\n */\nexport const parseFieldPath = (path: string): string[] => {\n return path.split('.').filter(Boolean);\n};\n\n/**\n * Gets the field option at a specific path in the schema\n */\nexport const getFieldOptionAtPath = (schema: JsonSchema, path: string): FieldOption | undefined => {\n const segments = parseFieldPath(path);\n if (segments.length === 0) return undefined;\n\n let currentProperties = schema.properties;\n let currentPath = '';\n let result: FieldOption | undefined;\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (!currentProperties || !currentProperties[segment]) {\n return undefined;\n }\n\n const property = currentProperties[segment];\n currentPath = currentPath ? `${currentPath}.${segment}` : segment;\n const type = getPropertyType(property);\n const hasChildren = hasNestedChildren(property);\n\n result = {\n path: currentPath,\n label: property.title || segment,\n type,\n hasChildren,\n children: type === 'object' ? property.properties : undefined,\n items: type === 'array' ? property.items : undefined,\n };\n\n // Navigate deeper\n if (type === 'object' && property.properties) {\n currentProperties = property.properties;\n } else if (type === 'array' && property.items?.properties) {\n currentProperties = property.items.properties;\n } else {\n currentProperties = undefined;\n }\n }\n\n return result;\n};\n","import { Braces, Hash, List, ToggleLeft, Type } from 'lucide-react';\nimport * as React from 'react';\n\nimport { getFieldOptionsFromSchema, getFieldOptionAtPath, getChildFieldOptions, parseFieldPath } from './schema-utils';\nimport type { FieldOption, RuleFieldSelectProps } from './types';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select/select';\nimport { Icon } from '@/ds/icons';\nimport { cn } from '@/lib/utils';\n\n/**\n * Get icon for a field type\n */\nconst getFieldTypeIcon = (type: string): React.ReactNode => {\n switch (type) {\n case 'object':\n return <Braces />;\n case 'array':\n return <List />;\n case 'number':\n case 'integer':\n return <Hash />;\n case 'boolean':\n return <ToggleLeft />;\n case 'string':\n default:\n return <Type />;\n }\n};\n\n/**\n * A single level of field selection\n */\ntype FieldLevelSelectProps = {\n options: FieldOption[];\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n className?: string;\n};\n\nconst FieldLevelSelect: React.FC<FieldLevelSelectProps> = ({\n options,\n value,\n onChange,\n placeholder = 'Select field',\n className,\n}) => {\n return (\n <div className={cn('relative', className)}>\n <Select value={value} onValueChange={onChange}>\n <SelectTrigger className=\"min-w-[140px] text-neutral6 bg-surface4\" size=\"sm\">\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map(option => (\n <SelectItem key={option.path} value={option.path}>\n <span className=\"flex items-center gap-2\">\n <Icon size=\"sm\" className=\"text-neutral3\">\n {getFieldTypeIcon(option.type)}\n </Icon>\n {option.label}\n {option.hasChildren && <span className=\"text-neutral3\">...</span>}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n );\n};\n\n/**\n * Recursive field selector that shows additional dropdowns for nested objects/arrays\n */\nexport const RuleFieldSelect: React.FC<RuleFieldSelectProps> = ({ schema, value, onChange, className }) => {\n // Parse the current path into segments\n const pathSegments = React.useMemo(() => parseFieldPath(value), [value]);\n\n // Build the list of selectors needed based on the current value\n const selectors = React.useMemo(() => {\n const result: Array<{\n options: FieldOption[];\n value: string;\n basePath: string;\n }> = [];\n\n // First level: root schema properties\n const rootOptions = getFieldOptionsFromSchema(schema);\n if (rootOptions.length === 0) return result;\n\n result.push({\n options: rootOptions,\n value: pathSegments[0] || '',\n basePath: '',\n });\n\n // For each segment, check if we need to add more selectors\n let currentPath = '';\n for (let i = 0; i < pathSegments.length; i++) {\n const segment = pathSegments[i];\n currentPath = currentPath ? `${currentPath}.${segment}` : segment;\n\n const fieldOption = getFieldOptionAtPath(schema, currentPath);\n if (!fieldOption || !fieldOption.hasChildren) break;\n\n // Get child options for the next level\n const childOptions = getChildFieldOptions(fieldOption, currentPath);\n if (childOptions.length === 0) break;\n\n // Check if there's a next segment selected\n const nextSegment = pathSegments[i + 1];\n const nextPath = nextSegment ? `${currentPath}.${nextSegment}` : '';\n\n result.push({\n options: childOptions,\n value: nextPath,\n basePath: currentPath,\n });\n }\n\n return result;\n }, [schema, pathSegments]);\n\n // Handle change at a specific level\n const handleChange = React.useCallback(\n (levelIndex: number, newValue: string) => {\n // When changing a level, we truncate any deeper selections\n onChange(newValue);\n },\n [onChange],\n );\n\n if (selectors.length === 0) {\n return <div className={cn('text-sm text-neutral3', className)}>No fields available</div>;\n }\n\n return (\n <div className={cn('flex items-center gap-1', className)}>\n {selectors.map((selector, index) => (\n <React.Fragment key={`${selector.basePath}-${index}`}>\n {index > 0 && <span className=\"text-neutral3\">.</span>}\n <FieldLevelSelect\n options={selector.options}\n value={selector.value}\n onChange={newValue => handleChange(index, newValue)}\n placeholder={index === 0 ? 'Select field' : 'Select property'}\n />\n </React.Fragment>\n ))}\n </div>\n );\n};\n","import type { ConditionOperator, Rule, RuleGroup } from '../types';\nimport type { JsonSchema, JsonSchemaProperty } from '@/lib/json-schema';\n\nexport type { JsonSchema, JsonSchemaProperty };\n\n/**\n * Represents a field option extracted from JSON Schema\n */\nexport type FieldOption = {\n /** The field path (e.g., \"user.email\") */\n path: string;\n /** Display label */\n label: string;\n /** The JSON Schema type of the field */\n type: string;\n /** Whether this field has nested properties */\n hasChildren: boolean;\n /** Child properties if type is object */\n children?: Record<string, JsonSchemaProperty>;\n /** Item schema if type is array */\n items?: JsonSchemaProperty;\n};\n\n/**\n * Props for the RuleBuilder root component\n */\nexport type RuleBuilderProps = {\n /** JSON Schema defining available fields */\n schema: JsonSchema;\n /** Current rule group (recursive, supports nested groups) */\n ruleGroup: RuleGroup | undefined;\n /** Callback when rule group changes */\n onChange: (ruleGroup: RuleGroup | undefined) => void;\n /** Maximum nesting depth (default: 3) */\n maxDepth?: number;\n /** Optional class name */\n className?: string;\n};\n\n/**\n * Internal props for the recursive RuleGroupView component\n */\nexport type RuleGroupViewProps = {\n /** JSON Schema defining available fields */\n schema: JsonSchema;\n /** The rule group to render */\n group: RuleGroup;\n /** Callback when this group changes */\n onChange: (group: RuleGroup) => void;\n /** Callback to remove this group (undefined for root) */\n onRemove?: () => void;\n /** Current nesting depth (0 = root) */\n depth: number;\n /** Maximum nesting depth */\n maxDepth: number;\n};\n\n/**\n * Props for a single rule row\n */\nexport type RuleRowProps = {\n /** JSON Schema defining available fields */\n schema: JsonSchema;\n /** Current rule */\n rule: Rule;\n /** Callback when rule changes */\n onChange: (rule: Rule) => void;\n /** Callback to remove this rule */\n onRemove: () => void;\n /** Optional class name */\n className?: string;\n};\n\n/**\n * Props for the field selector\n */\nexport type RuleFieldSelectProps = {\n /** JSON Schema defining available fields */\n schema: JsonSchema;\n /** Current selected field path */\n value: string;\n /** Callback when field changes */\n onChange: (field: string) => void;\n /** Optional class name */\n className?: string;\n};\n\n/**\n * Props for the operator selector\n */\nexport type RuleOperatorSelectProps = {\n /** Current selected operator */\n value: ConditionOperator;\n /** Callback when operator changes */\n onChange: (operator: ConditionOperator) => void;\n /** Subset of operators to show. Defaults to all operators. */\n operators?: readonly ConditionOperator[];\n /** Optional class name */\n className?: string;\n};\n\n/**\n * Props for the value input\n */\nexport type RuleValueInputProps = {\n /** Current value */\n value: unknown;\n /** Callback when value changes */\n onChange: (value: unknown) => void;\n /** The operator (affects input behavior for \"in\" and \"not_in\") */\n operator: ConditionOperator;\n /** The field type from JSON Schema (string, number, boolean, etc.) */\n fieldType?: string;\n /** Optional placeholder */\n placeholder?: string;\n /** Optional class name */\n className?: string;\n};\n\n/**\n * Operator labels for display\n */\nexport const OPERATOR_LABELS: Record<ConditionOperator, string> = {\n equals: 'equals',\n not_equals: 'not equals',\n contains: 'contains',\n not_contains: 'not contains',\n greater_than: 'greater than',\n less_than: 'less than',\n greater_than_or_equal: 'greater than or equal',\n less_than_or_equal: 'less than or equal',\n in: 'in',\n not_in: 'not in',\n exists: 'exists',\n not_exists: 'not exists',\n};\n\n/**\n * All available operators\n */\nexport const OPERATORS: ConditionOperator[] = [\n 'equals',\n 'not_equals',\n 'contains',\n 'not_contains',\n 'greater_than',\n 'less_than',\n 'greater_than_or_equal',\n 'less_than_or_equal',\n 'in',\n 'not_in',\n 'exists',\n 'not_exists',\n];\n","import {\n Equal,\n EqualNot,\n Text,\n TextSearch,\n ChevronRight,\n ChevronLeft,\n ChevronsRight,\n ChevronsLeft,\n List,\n ListX,\n Check,\n Ban,\n} from 'lucide-react';\nimport * as React from 'react';\n\nimport type { ConditionOperator } from '../types';\nimport type { RuleOperatorSelectProps } from './types';\nimport { OPERATOR_LABELS, OPERATORS } from './types';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select/select';\nimport { Icon } from '@/ds/icons';\nimport { cn } from '@/lib/utils';\n\n/**\n * Icons for each operator type\n */\nconst OPERATOR_ICONS: Record<ConditionOperator, React.ReactNode> = {\n equals: <Equal />,\n not_equals: <EqualNot />,\n contains: <TextSearch />,\n not_contains: <Text />,\n greater_than: <ChevronRight />,\n less_than: <ChevronLeft />,\n greater_than_or_equal: <ChevronsRight />,\n less_than_or_equal: <ChevronsLeft />,\n in: <List />,\n not_in: <ListX />,\n exists: <Check />,\n not_exists: <Ban />,\n};\n\n/**\n * Select component for choosing a rule operator\n */\nexport const RuleOperatorSelect: React.FC<RuleOperatorSelectProps> = ({ value, onChange, operators, className }) => {\n const operatorList = operators ?? OPERATORS;\n\n return (\n <div className={cn('relative', className)}>\n <Select value={value} onValueChange={onChange}>\n <SelectTrigger className=\"min-w-[150px] text-neutral6 bg-surface4\" size=\"sm\">\n <SelectValue placeholder=\"Select operator\" />\n </SelectTrigger>\n <SelectContent>\n {operatorList.map(operator => (\n <SelectItem key={operator} value={operator}>\n <span className=\"flex items-center gap-2\">\n <Icon size=\"sm\" className=\"text-neutral3\">\n {OPERATOR_ICONS[operator]}\n </Icon>\n {OPERATOR_LABELS[operator]}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n );\n};\n","import { Hash, ToggleLeft, Type } from 'lucide-react';\nimport * as React from 'react';\n\nimport type { RuleValueInputProps } from './types';\nimport { Input } from '@/ds/components/Input/input';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/ds/components/Select/select';\nimport { Icon } from '@/ds/icons';\nimport { cn } from '@/lib/utils';\n\n/**\n * Parses a string value to the appropriate type\n */\nconst parseValue = (stringValue: string): unknown => {\n const trimmed = stringValue.trim();\n\n // Empty string\n if (trimmed === '') return '';\n\n // Boolean\n if (trimmed === 'true') return true;\n if (trimmed === 'false') return false;\n\n // Null\n if (trimmed === 'null') return null;\n\n // Reject special number strings - keep as strings\n const lowerTrimmed = trimmed.toLowerCase();\n if (lowerTrimmed === 'infinity' || lowerTrimmed === '-infinity' || lowerTrimmed === 'nan') {\n return trimmed;\n }\n\n // Number\n const num = Number(trimmed);\n if (!Number.isNaN(num)) return num;\n\n // String (default)\n return stringValue;\n};\n\n/**\n * Parses a comma-separated string into an array of values\n */\nconst parseArrayValue = (stringValue: string): unknown[] => {\n if (stringValue.trim() === '') return [];\n\n return stringValue.split(',').map(item => parseValue(item.trim()));\n};\n\n/**\n * Converts a value to a display string\n */\nconst valueToString = (value: unknown): string => {\n if (value === null) return 'null';\n if (value === undefined) return '';\n if (Array.isArray(value)) return value.map(valueToString).join(', ');\n return String(value);\n};\n\n/**\n * Converts a boolean value to a string for the select\n */\nconst booleanToString = (value: unknown): string => {\n if (value === true) return 'true';\n if (value === false) return 'false';\n return '';\n};\n\ntype BaseInputProps = {\n value: unknown;\n onChange: (value: unknown) => void;\n placeholder?: string;\n className?: string;\n};\n\n/**\n * Boolean value input using a Select dropdown with icon inside\n */\nconst BooleanValueInput: React.FC<BaseInputProps> = ({ value, onChange, className }) => {\n const stringValue = booleanToString(value);\n\n const handleChange = React.useCallback(\n (newValue: string) => {\n onChange(newValue === 'true');\n },\n [onChange],\n );\n\n return (\n <div className={cn('relative', className)}>\n <Icon size=\"sm\" className=\"absolute left-2 top-1/2 -translate-y-1/2 text-neutral3 pointer-events-none z-10\">\n <ToggleLeft />\n </Icon>\n <Select value={stringValue} onValueChange={handleChange}>\n <SelectTrigger className=\"min-w-[140px] bg-surface4 pl-7\" size=\"sm\">\n <SelectValue placeholder=\"Select value\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"true\">true</SelectItem>\n <SelectItem value=\"false\">false</SelectItem>\n </SelectContent>\n </Select>\n </div>\n );\n};\n\n/**\n * Number value input with icon inside\n */\nconst NumberValueInput: React.FC<BaseInputProps> = ({ value, onChange, placeholder, className }) => {\n const displayValue = value === undefined || value === '' ? '' : String(value);\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n if (inputValue === '') {\n onChange('');\n } else {\n const num = Number(inputValue);\n onChange(Number.isNaN(num) ? inputValue : num);\n }\n },\n [onChange],\n );\n\n return (\n <div className={cn('relative', className)}>\n <Icon size=\"sm\" className=\"absolute left-2 top-1/2 -translate-y-1/2 text-neutral3 pointer-events-none\">\n <Hash />\n </Icon>\n <Input\n type=\"number\"\n value={displayValue}\n onChange={handleChange}\n placeholder={placeholder || 'Enter number'}\n className=\"min-w-[140px] bg-surface4 pl-7\"\n size=\"sm\"\n />\n </div>\n );\n};\n\n/**\n * Text value input with icon inside\n */\nconst TextValueInput: React.FC<BaseInputProps> = ({ value, onChange, placeholder, className }) => {\n const displayValue = valueToString(value);\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(parseValue(e.target.value));\n },\n [onChange],\n );\n\n return (\n <div className={cn('relative', className)}>\n <Icon size=\"sm\" className=\"absolute left-2 top-1/2 -translate-y-1/2 text-neutral3 pointer-events-none\">\n <Type />\n </Icon>\n <Input\n value={displayValue}\n onChange={handleChange}\n placeholder={placeholder || 'Enter value'}\n className=\"min-w-[140px] bg-surface4 pl-7\"\n size=\"sm\"\n />\n </div>\n );\n};\n\n/**\n * Array value input (for \"in\" and \"not_in\" operators)\n */\nconst ArrayValueInput: React.FC<BaseInputProps> = ({ value, onChange, placeholder, className }) => {\n const displayValue = React.useMemo(() => {\n if (Array.isArray(value)) {\n return value.map(valueToString).join(', ');\n }\n return valueToString(value);\n }, [value]);\n\n const handleChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(parseArrayValue(e.target.value));\n },\n [onChange],\n );\n\n return (\n <Input\n value={displayValue}\n onChange={handleChange}\n placeholder={placeholder || 'Enter values (comma-separated)'}\n className={cn('min-w-[160px] bg-surface4', className)}\n size=\"sm\"\n />\n );\n};\n\n/**\n * Input component for entering rule values\n * Supports different modes based on the operator and field type:\n * - \"in\" and \"not_in\": Comma-separated values (parsed as array)\n * - Boolean fields: Select dropdown with true/false\n * - Number fields: Number input\n * - Other: Text input\n */\nexport const RuleValueInput: React.FC<RuleValueInputProps> = ({\n value,\n onChange,\n operator,\n fieldType,\n placeholder,\n className,\n}) => {\n const isArrayOperator = operator === 'in' || operator === 'not_in';\n\n // Array operators always use text input for comma-separated values\n if (isArrayOperator) {\n return <ArrayValueInput value={value} onChange={onChange} placeholder={placeholder} className={className} />;\n }\n\n // Boolean fields use Select dropdown\n if (fieldType === 'boolean') {\n return <BooleanValueInput value={value} onChange={onChange} placeholder={placeholder} className={className} />;\n }\n\n // Number fields use number input\n if (fieldType === 'number' || fieldType === 'integer') {\n return <NumberValueInput value={value} onChange={onChange} placeholder={placeholder} className={className} />;\n }\n\n // Default to text input\n return <TextValueInput value={value} onChange={onChange} placeholder={placeholder} className={className} />;\n};\n","import { X } from 'lucide-react';\nimport * as React from 'react';\n\nimport type { ConditionOperator } from '../types';\n\nimport { RuleFieldSelect } from './rule-field-select';\nimport { RuleOperatorSelect } from './rule-operator-select';\nimport { RuleValueInput } from './rule-value-input';\nimport { getFieldOptionAtPath } from './schema-utils';\nimport type { RuleRowProps } from './types';\n\nimport { Button } from '@/ds/components/Button';\nimport { cn } from '@/lib/utils';\n\nconst PRIMITIVE_TYPES = new Set(['string', 'number', 'boolean', 'integer']);\n\n/**\n * A single rule row with field selector, operator selector, and value input\n */\nexport const RuleRow: React.FC<RuleRowProps> = ({ schema, rule, onChange, onRemove, className }) => {\n const fieldType = React.useMemo(() => {\n return getFieldOptionAtPath(schema, rule.field)?.type;\n }, [schema, rule.field]);\n\n const isPrimitive = fieldType !== undefined && PRIMITIVE_TYPES.has(fieldType);\n const isArray = fieldType === 'array';\n const isArrayOperator = rule.operator === 'in' || rule.operator === 'not_in';\n const isExistenceOperator = rule.operator === 'exists' || rule.operator === 'not_exists';\n\n // Show operator + value for primitive types, or for array types (restricted to in/not_in)\n const showComparator = isPrimitive || isArray;\n const showValueInput = !isExistenceOperator && (isPrimitive || (isArray && isArrayOperator));\n\n const handleFieldChange = React.useCallback(\n (field: string) => {\n onChange({ ...rule, field });\n },\n [rule, onChange],\n );\n\n const handleOperatorChange = React.useCallback(\n (operator: ConditionOperator) => {\n const isNewExistence = operator === 'exists' || operator === 'not_exists';\n\n // Existence operators don't need a value\n if (isNewExistence) {\n onChange({ ...rule, operator, value: undefined });\n return;\n }\n\n // Reset value when changing to/from array operators\n const isArrayOperator = operator === 'in' || operator === 'not_in';\n const wasArrayOperator = rule.operator === 'in' || rule.operator === 'not_in';\n\n let newValue = rule.value;\n if (isArrayOperator && !wasArrayOperator) {\n // Converting to array operator: wrap value in array\n newValue = rule.value !== undefined ? [rule.value] : [];\n } else if (!isArrayOperator && wasArrayOperator) {\n // Converting from array operator: take first value\n newValue = Array.isArray(rule.value) ? rule.value[0] : rule.value;\n }\n\n onChange({ ...rule, operator, value: newValue });\n },\n [rule, onChange],\n );\n\n const handleValueChange = React.useCallback(\n (value: unknown) => {\n onChange({ ...rule, value });\n },\n [rule, onChange],\n );\n\n return (\n <div className=\"flex justify-between gap-2\">\n <div className={cn('flex flex-wrap items-center gap-2', className)}>\n <RuleFieldSelect schema={schema} value={rule.field} onChange={handleFieldChange} />\n\n {showComparator && (\n <>\n <RuleOperatorSelect\n value={rule.operator}\n onChange={handleOperatorChange}\n operators={isArray ? (['in', 'not_in'] as const) : undefined}\n />\n\n {showValueInput && (\n <RuleValueInput\n value={rule.value}\n onChange={handleValueChange}\n operator={rule.operator}\n fieldType={fieldType}\n />\n )}\n </>\n )}\n </div>\n\n <Button type=\"button\" onClick={onRemove} tooltip=\"Remove rule\" size=\"icon-sm\" variant=\"ghost\">\n <X />\n </Button>\n </div>\n );\n};\n","import { Plus, X, Component } from 'lucide-react';\nimport * as React from 'react';\n\nimport type { Rule, RuleGroup, RuleGroupDepth1 } from '../types';\nimport { isRule, createDefaultRule, createDefaultRuleGroup } from '../utils';\n\nimport { RuleRow } from './rule-row';\nimport type { RuleBuilderProps, RuleGroupViewProps } from './types';\nimport { Button } from '@/ds/components/Button';\nimport { Icon } from '@/ds/icons';\nimport { cn } from '@/lib/utils';\n\nconst DEFAULT_MAX_DEPTH = 3;\n\n/**\n * Internal recursive component that renders one level of a rule group.\n */\nconst RuleGroupView: React.FC<RuleGroupViewProps> = ({ schema, group, onChange, onRemove, depth, maxDepth }) => {\n const isRoot = depth === 0;\n\n const handleToggleOperator = () => {\n onChange({ ...group, operator: group.operator === 'AND' ? 'OR' : 'AND' });\n };\n\n const handleConditionChange = (index: number, condition: Rule | RuleGroup) => {\n onChange({\n ...group,\n conditions: group.conditions.map((c, i) => (i === index ? (condition as Rule | RuleGroupDepth1) : c)),\n });\n };\n\n const handleRemoveCondition = (index: number) => {\n const newConditions = group.conditions.filter((_, i) => i !== index);\n if (newConditions.length === 0 && onRemove) {\n onRemove();\n } else {\n onChange({ ...group, conditions: newConditions });\n }\n };\n\n const handleAddRule = () => {\n onChange({ ...group, conditions: [...group.conditions, createDefaultRule()] });\n };\n\n const handleAddGroup = () => {\n onChange({\n ...group,\n conditions: [\n ...group.conditions,\n createDefaultRuleGroup(group.operator === 'AND' ? 'OR' : 'AND') as RuleGroupDepth1,\n ],\n });\n };\n\n return (\n <div className={cn(isRoot ? 'bg-surface2' : 'pl-6 bg-surface3')}>\n {/* Non-root group header */}\n {!isRoot && (\n <div className=\"flex items-center justify-between pl-3 pr-4 py-1.5 border-b border-border1 border-dashed\">\n <span className=\"text-ui-xs text-neutral3\">Group</span>\n {onRemove && (\n <Button type=\"button\" onClick={onRemove} tooltip=\"Remove group\" size=\"icon-sm\" variant=\"ghost\">\n <X />\n </Button>\n )}\n </div>\n )}\n\n {group.conditions.map((condition, index) => (\n <div key={index} className=\"border-b border-border1 border-dashed last:border-b-0\">\n <div className={cn('relative', isRule(condition) && 'p-4 border-l-4 border-border1')}>\n {index > 0 && (\n <button\n type=\"button\"\n onClick={handleToggleOperator}\n className={cn(\n 'absolute left-1/2 -translate-x-1/2 z-10 -translate-y-1/2 top-0 text-ui-xs px-3 py-0.5 rounded-full cursor-pointer',\n group.operator === 'OR'\n ? 'bg-accent6Dark text-accent6 hover:bg-accent6Dark/70'\n : 'bg-accent3Dark text-accent3 hover:bg-accent3Dark/70',\n )}\n >\n {group.operator.toLowerCase()}\n </button>\n )}\n\n {isRule(condition) ? (\n <RuleRow\n schema={schema}\n rule={condition}\n onChange={updatedRule => handleConditionChange(index, updatedRule)}\n onRemove={() => handleRemoveCondition(index)}\n />\n ) : (\n <RuleGroupView\n schema={schema}\n group={condition}\n onChange={updatedGroup => handleConditionChange(index, updatedGroup)}\n onRemove={() => handleRemoveCondition(index)}\n depth={depth + 1}\n maxDepth={maxDepth}\n />\n )}\n </div>\n </div>\n ))}\n\n <div className=\"p-2 flex gap-1\">\n <Button type=\"button\" onClick={handleAddRule} variant=\"ghost\" size=\"sm\">\n <Icon>\n <Plus />\n </Icon>\n Add rule\n </Button>\n {depth < maxDepth - 1 && (\n <Button type=\"button\" onClick={handleAddGroup} variant=\"ghost\" size=\"sm\">\n <Icon>\n <Component />\n </Icon>\n Add group\n </Button>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * Rule builder component for creating and managing a recursive set of rules\n * based on a JSON Schema defining available fields.\n *\n * Supports nested rule groups with AND/OR operators at each level.\n */\nexport const RuleBuilder: React.FC<RuleBuilderProps> = ({\n schema,\n ruleGroup,\n onChange,\n maxDepth = DEFAULT_MAX_DEPTH,\n className,\n}) => {\n const handleGroupChange = React.useCallback(\n (group: RuleGroup) => {\n onChange(group);\n },\n [onChange],\n );\n\n const handleAddFirstRule = React.useCallback(() => {\n onChange({ operator: 'AND', conditions: [createDefaultRule()] });\n }, [onChange]);\n\n if (!ruleGroup) {\n return (\n <button\n type=\"button\"\n onClick={handleAddFirstRule}\n className=\"flex items-center justify-center gap-2 text-ui-sm text-neutral3 hover:text-neutral6 w-full border border-dashed border-border1 p-2 rounded-md\"\n >\n <Icon>\n <Plus />\n </Icon>\n Add conditional rule\n </button>\n );\n }\n\n return (\n <div className={className}>\n <RuleGroupView schema={schema} group={ruleGroup} onChange={handleGroupChange} depth={0} maxDepth={maxDepth} />\n </div>\n );\n};\n","import { ArrowLeft, ArrowRight } from 'lucide-react';\nimport { useState } from 'react';\nimport type { PanelProps } from 'react-resizable-panels';\nimport { Panel, usePanelRef } from 'react-resizable-panels';\nimport { Button } from '@/ds/components/Button/Button';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { Icon } from '@/ds/icons';\n\nexport interface CollapsiblePanelProps extends PanelProps {\n direction: 'left' | 'right';\n}\n\nexport const CollapsiblePanel = ({ collapsedSize, children, direction, ...props }: CollapsiblePanelProps) => {\n const [collapsed, setCollapsed] = useState(false);\n const panelRef = usePanelRef();\n\n const expand = () => {\n if (!panelRef.current) return;\n panelRef.current.expand();\n };\n\n return (\n <Panel\n panelRef={panelRef}\n collapsedSize={collapsedSize}\n {...props}\n onResize={size => {\n if (!collapsedSize) return;\n if (typeof collapsedSize !== 'number') return;\n\n if (size.inPixels <= collapsedSize) {\n setCollapsed(true);\n } else if (collapsed) {\n setCollapsed(false);\n }\n }}\n >\n {collapsed ? (\n <Tooltip>\n <div className=\"flex items-center justify-center h-full\">\n <TooltipTrigger asChild>\n <Button onClick={expand} className=\"h-48! border-none\">\n <Icon>{direction === 'left' ? <ArrowRight /> : <ArrowLeft />}</Icon>\n </Button>\n </TooltipTrigger>\n </div>\n\n <TooltipContent>Expand</TooltipContent>\n </Tooltip>\n ) : (\n children\n )}\n </Panel>\n );\n};\n","import { Separator } from 'react-resizable-panels';\nimport { ResizeHandleIndicator } from '@/ds/primitives/resize-handle-indicator';\nimport { cn } from '@/lib/utils';\n\nexport type PanelSeparatorProps = {\n /** `line` fits a visible container edge; `pill` floats when there is none. */\n variant?: 'line' | 'pill';\n};\n\nconst stateClasses = {\n line: cn(\n 'group-hover/separator:opacity-100',\n \"group-data-[separator='hover']/separator:opacity-100\",\n \"group-data-[separator='active']/separator:opacity-100 group-data-[separator='active']/separator:via-neutral6/45\",\n 'group-focus-visible/separator:opacity-100 group-focus-visible/separator:via-accent1',\n ),\n pill: cn(\n 'group-hover/separator:h-12 group-hover/separator:w-1',\n \"group-data-[separator='hover']/separator:h-12 group-data-[separator='hover']/separator:w-1\",\n \"group-data-[separator='active']/separator:h-12 group-data-[separator='active']/separator:w-1 group-data-[separator='active']/separator:bg-accent1\",\n 'group-focus-visible/separator:bg-accent1',\n ),\n};\n\nexport const PanelSeparator = ({ variant = 'line' }: PanelSeparatorProps) => {\n return (\n <Separator\n className={cn(\n 'group/separator relative w-0 bg-transparent z-10',\n 'focus:outline-hidden focus-visible:outline-hidden',\n )}\n >\n {/* Hit zone wider than the 0px separator; indicator centered inside. */}\n <span\n aria-hidden\n className=\"absolute inset-y-0 -left-1 -right-1 flex items-center justify-center cursor-col-resize touch-none\"\n >\n <ResizeHandleIndicator variant={variant} className={stateClasses[variant]} />\n </span>\n </Separator>\n );\n};\n","export const EXTENSION_TO_MIME: Record<string, string> = {\n jpg: 'image/jpg',\n jpeg: 'image/jpeg',\n png: 'image/png',\n gif: 'image/gif',\n webp: 'image/webp',\n svg: 'image/svg+xml',\n bmp: 'image/bmp',\n ico: 'image/x-icon',\n pdf: 'application/pdf',\n};\n","import { EXTENSION_TO_MIME } from './constants';\n\nexport const getFileContentType = async (url: string) => {\n try {\n const response = await fetch(url, {\n method: 'HEAD',\n });\n\n if (!response.ok) {\n throw new Error('Failed to get file content type');\n }\n\n const contentType = response.headers.get('content-type');\n\n if (!contentType) {\n throw new Error('Failed to get file content type');\n }\n\n return contentType;\n } catch {\n // fetch failed — try to infer content type from the file extension\n try {\n const urlObject = new URL(url);\n const pathname = urlObject.pathname;\n const extension = pathname.split('.').pop();\n if (!extension) return undefined;\n return EXTENSION_TO_MIME[extension.toLowerCase()];\n } catch {\n // url is not a valid absolute URL (e.g. a relative path) — extract\n // extension from the raw string so we still return a useful MIME type.\n const extension = url.split('.').pop()?.split(/[?#]/)[0];\n if (!extension) return undefined;\n return EXTENSION_TO_MIME[extension.toLowerCase()];\n }\n }\n};\n","// Serialize data to pretty-printed JSON and trigger a browser file download.\nexport const downloadJson = (filename: string, data: unknown): void => {\n const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n\n anchor.href = url;\n anchor.download = filename;\n document.body.appendChild(anchor);\n anchor.click();\n anchor.remove();\n\n URL.revokeObjectURL(url);\n};\n","export const fileToBase64 = async (file: File): Promise<string> => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => {\n const result = reader.result;\n if (typeof result === 'string') {\n resolve(result);\n } else {\n reject(new Error('Failed to convert file to base64.'));\n }\n };\n\n reader.onerror = error => {\n reject(error);\n };\n\n reader.readAsDataURL(file);\n });\n};\n","import type { JsonSchema, JsonSchemaProperty } from '@/lib/json-schema';\n\nconst MAX_DEPTH = 10;\n\n/**\n * Generates a default value for a single property based on its type\n */\nfunction generatePropertyDefault(property: JsonSchemaProperty, depth: number): unknown {\n // Return explicit default if provided\n if (property.default !== undefined) {\n return property.default;\n }\n\n // Guard against circular references\n if (depth >= MAX_DEPTH) {\n return undefined;\n }\n\n const type = Array.isArray(property.type) ? property.type[0] : property.type;\n\n switch (type) {\n case 'string':\n return '';\n case 'number':\n case 'integer':\n return 0;\n case 'boolean':\n return false;\n case 'array':\n return [];\n case 'object':\n if (property.properties) {\n return generateObjectDefaults(property.properties, depth + 1);\n }\n return {};\n case 'null':\n return null;\n default:\n return '';\n }\n}\n\n/**\n * Generates default values for an object's properties\n */\nfunction generateObjectDefaults(\n properties: Record<string, JsonSchemaProperty>,\n depth: number,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, property] of Object.entries(properties)) {\n result[key] = generatePropertyDefault(property, depth);\n }\n\n return result;\n}\n\n/**\n * Generates default values from a JSON Schema.\n *\n * For each property:\n * - Uses `default` value if specified in schema\n * - Otherwise generates a placeholder based on type:\n * - string → \"\"\n * - number/integer → 0\n * - boolean → false\n * - array → []\n * - object → recurses into nested properties\n * - null → null\n *\n * @param schema - JSON Schema definition\n * @returns Object with default values for all properties\n */\nexport function generateDefaultValues(schema: JsonSchema | undefined): Record<string, unknown> {\n if (!schema || !schema.properties) {\n return {};\n }\n\n return generateObjectDefaults(schema.properties, 0);\n}\n","import { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\n\ninterface PlaygroundStore {\n requestContext: Record<string, any>;\n setRequestContext: (requestContext: Record<string, any>) => void;\n}\n\nexport const usePlaygroundStore = create<PlaygroundStore>()(\n persist(\n set => ({\n requestContext: {},\n setRequestContext: requestContext => set({ requestContext }),\n }),\n {\n name: 'mastra-playground-store',\n },\n ),\n);\n","import { EntityType } from '@mastra/core/observability';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\n/** Primitive type options — matches the traces filter vocabulary. */\nexport const METRICS_ROOT_ENTITY_TYPE_OPTIONS = [\n { label: 'Agent', entityType: EntityType.AGENT },\n { label: 'Workflow', entityType: EntityType.WORKFLOW_RUN },\n { label: 'Scorer', entityType: EntityType.SCORER },\n { label: 'Ingest', entityType: EntityType.RAG_INGESTION },\n] as const;\n\n/** Field IDs that live in dedicated URL params (not the generic `filterX` set). */\nexport const METRICS_SYNTHETIC_FILTER_FIELD_IDS = ['rootEntityType'] as const;\n\nexport const METRICS_ROOT_ENTITY_TYPE_PARAM = 'rootEntityType';\n\n/** URL param name for each generic property filter field. Mirrors traces for\n * cross-page URL consistency (user can copy a trace's filter URL and paste\n * equivalent dimensions into metrics). */\nexport const METRICS_PROPERTY_FILTER_PARAM_BY_FIELD = {\n tags: 'filterTags',\n entityId: 'filterEntityId',\n entityName: 'filterEntityName',\n runId: 'filterRunId',\n threadId: 'filterThreadId',\n sessionId: 'filterSessionId',\n requestId: 'filterRequestId',\n resourceId: 'filterResourceId',\n userId: 'filterUserId',\n organizationId: 'filterOrganizationId',\n serviceName: 'filterServiceName',\n environment: 'filterEnvironment',\n experimentId: 'filterExperimentId',\n provider: 'filterProvider',\n model: 'filterModel',\n} as const;\n\nexport type MetricsPropertyFilterFieldId = keyof typeof METRICS_PROPERTY_FILTER_PARAM_BY_FIELD;\n\nexport const METRICS_PROPERTY_FILTER_FIELD_IDS = Object.keys(\n METRICS_PROPERTY_FILTER_PARAM_BY_FIELD,\n) as Array<MetricsPropertyFilterFieldId>;\n\nconst METRICS_FILTERS_STORAGE_KEY = 'mastra:metrics:saved-filters';\n\n/** Save the current metrics filter URL params so the metrics page can restore\n * them on next visit (same pattern as traces/logs). */\nexport function saveMetricsFiltersToStorage(params: URLSearchParams): void {\n const serialized = getPreservedMetricsFilterParams(params);\n try {\n localStorage.setItem(METRICS_FILTERS_STORAGE_KEY, serialized.toString());\n } catch {\n // localStorage may be unavailable — silently skip.\n }\n}\n\nexport function clearSavedMetricsFilters(): void {\n try {\n localStorage.removeItem(METRICS_FILTERS_STORAGE_KEY);\n } catch {\n // ignore\n }\n}\n\nexport function loadMetricsFiltersFromStorage(): URLSearchParams | null {\n try {\n const raw = localStorage.getItem(METRICS_FILTERS_STORAGE_KEY);\n if (!raw) return null;\n const parsed = new URLSearchParams(raw);\n return parsed.toString() ? parsed : null;\n } catch {\n return null;\n }\n}\n\nexport function hasAnyMetricsFilterParams(params: URLSearchParams): boolean {\n if (params.has(METRICS_ROOT_ENTITY_TYPE_PARAM)) return true;\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n if (params.has(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId])) return true;\n }\n return false;\n}\n\n/** Build the PropertyFilterField list shown in the metrics filter popover.\n *\n * The field order is curated for OLAP efficiency: columnar/LowCardinality\n * dimensions first, then bloom_filter-indexed high-cardinality IDs as\n * free-text. Fields that are expensive to filter without an index are\n * intentionally omitted from this dashboard surface. */\nexport function createMetricsPropertyFilterFields({\n availableTags,\n availableEntityNames,\n availableServiceNames,\n availableEnvironments,\n loading,\n}: {\n availableTags: string[];\n availableEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n loading?: {\n tags?: boolean;\n entityNames?: boolean;\n serviceNames?: boolean;\n environments?: boolean;\n };\n}): PropertyFilterField[] {\n const fields: PropertyFilterField[] = [\n {\n id: 'rootEntityType',\n label: 'Primitive Type',\n kind: 'pick-multi',\n searchable: false,\n options: METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ label: o.label, value: o.entityType })),\n placeholder: 'Choose entity type',\n emptyText: 'No entity types.',\n },\n {\n id: 'entityName',\n label: 'Primitive Name',\n kind: 'pick-multi',\n options: availableEntityNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose entity names',\n emptyText: 'No entity names found.',\n isLoading: loading?.entityNames,\n },\n { id: 'entityId', label: 'Primitive ID', kind: 'text' },\n {\n id: 'tags',\n label: 'Tags',\n kind: 'pick-multi',\n multi: true,\n options: availableTags.map(tag => ({ label: tag, value: tag })),\n placeholder: 'Choose tags',\n emptyText: 'No tags found.',\n isLoading: loading?.tags,\n },\n {\n id: 'serviceName',\n label: 'Service Name',\n kind: 'pick-multi',\n options: availableServiceNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose service names',\n emptyText: 'No service names found.',\n isLoading: loading?.serviceNames,\n },\n {\n id: 'environment',\n label: 'Environment',\n kind: 'pick-multi',\n options: availableEnvironments.map(env => ({ label: env, value: env })),\n placeholder: 'Choose environments',\n emptyText: 'No environments found.',\n isLoading: loading?.environments,\n },\n // Provider / model are filterable by URL (filterProvider / filterModel) but\n // are omitted from the popover until we expose a discovery endpoint.\n // High-cardinality IDs — free-text. Backed by bloom_filter skip indexes on\n // ClickHouse, narrow timestamp range pruning on DuckDB.\n { id: 'threadId', label: 'Thread ID', kind: 'text' },\n { id: 'resourceId', label: 'Resource ID', kind: 'text' },\n { id: 'userId', label: 'User ID', kind: 'text' },\n { id: 'organizationId', label: 'Organization ID', kind: 'text' },\n { id: 'runId', label: 'Run ID', kind: 'text' },\n { id: 'sessionId', label: 'Session ID', kind: 'text' },\n { id: 'requestId', label: 'Request ID', kind: 'text' },\n { id: 'experimentId', label: 'Experiment ID', kind: 'text' },\n ];\n const byLabel = (a: PropertyFilterField, b: PropertyFilterField) => a.label.localeCompare(b.label);\n const pickMulti = fields.filter(f => f.kind === 'pick-multi').sort(byLabel);\n const text = fields.filter(f => f.kind === 'text').sort(byLabel);\n return [...pickMulti, ...text];\n}\n\n/** Parse filter tokens from URL params, preserving insertion order. */\nexport function getMetricsPropertyFilterTokens(searchParams: URLSearchParams): PropertyFilterToken[] {\n const tokens: PropertyFilterToken[] = [];\n\n const paramToFieldId = new Map<string, string>([[METRICS_ROOT_ENTITY_TYPE_PARAM, 'rootEntityType']]);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n paramToFieldId.set(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId], fieldId);\n }\n\n const seen = new Set<string>();\n for (const [paramName] of searchParams.entries()) {\n const fieldId = paramToFieldId.get(paramName);\n if (!fieldId || seen.has(fieldId)) continue;\n seen.add(fieldId);\n\n if (fieldId === 'tags') {\n const raw = searchParams.getAll(paramName);\n if (raw.length === 0) continue;\n tokens.push({ fieldId, value: raw.filter(Boolean) });\n continue;\n }\n\n // Multi-value pick-multi fields: collect all occurrences.\n if (\n fieldId === 'rootEntityType' ||\n fieldId === 'entityName' ||\n fieldId === 'serviceName' ||\n fieldId === 'environment' ||\n fieldId === 'provider' ||\n fieldId === 'model'\n ) {\n const raw = searchParams.getAll(paramName);\n if (raw.length > 1) {\n tokens.push({ fieldId, value: raw });\n continue;\n }\n }\n\n const value = searchParams.get(paramName);\n if (value !== null) tokens.push({ fieldId, value });\n }\n\n return tokens;\n}\n\n/** Return a fresh URLSearchParams containing only metrics filter params. */\nexport function getPreservedMetricsFilterParams(searchParams: URLSearchParams): URLSearchParams {\n const next = new URLSearchParams();\n const rootEntityValues = searchParams.getAll(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const v of rootEntityValues) next.append(METRICS_ROOT_ENTITY_TYPE_PARAM, v);\n\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n const param = METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId];\n const values = searchParams.getAll(param);\n for (const v of values) next.append(param, v);\n }\n return next;\n}\n\n/** Mutate `params` in place: strip every metrics filter param, then re-write\n * them from `tokens` in order. Token insertion order drives URL order so\n * filter pill order is stable across reloads. */\nexport function applyMetricsPropertyFilterTokens(params: URLSearchParams, tokens: PropertyFilterToken[]): void {\n params.delete(METRICS_ROOT_ENTITY_TYPE_PARAM);\n for (const fieldId of METRICS_PROPERTY_FILTER_FIELD_IDS) {\n params.delete(METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n\n for (const token of tokens) {\n const paramName =\n token.fieldId === 'rootEntityType'\n ? METRICS_ROOT_ENTITY_TYPE_PARAM\n : METRICS_PROPERTY_FILTER_PARAM_BY_FIELD[token.fieldId as MetricsPropertyFilterFieldId];\n if (!paramName) continue;\n\n if (Array.isArray(token.value)) {\n const values = token.value.filter(v => typeof v === 'string' && v !== '');\n if (values.length === 0) {\n // Keep an empty sentinel for `tags` so the pill survives a Reset.\n if (token.fieldId === 'tags') params.append(paramName, '');\n continue;\n }\n for (const v of values) params.append(paramName, v);\n } else if (typeof token.value === 'string') {\n // Persist even empty / 'Any' strings so newly-created pills (and\n // neutralized-but-still-visible pills after a Reset) survive URL\n // round-trips. `buildMetricsDimensionalFilter` drops these on the API\n // query side so neutrals never reach the backend.\n params.set(paramName, token.value.trim());\n }\n }\n}\n\n/** Shape of the dimensional filter object fed into `MetricsFilter` on client\n * calls. Kept compatible with `metricsFilterSchema` in @internal/core — every\n * scalar field maps to a single-string column filter, and `tags` is the only\n * array field (matched via `has()` / equivalent on backends). */\nexport type MetricsDimensionalFilter = {\n rootEntityType?: EntityType;\n entityName?: string;\n entityId?: string;\n tags?: string[];\n serviceName?: string;\n environment?: string;\n provider?: string;\n model?: string;\n threadId?: string;\n resourceId?: string;\n userId?: string;\n organizationId?: string;\n runId?: string;\n sessionId?: string;\n requestId?: string;\n experimentId?: string;\n};\n\n/** Convert the active token list into a `MetricsFilter`-compatible object.\n *\n * Single-value text fields are assigned as strings; `pick-multi` fields are\n * assigned as string arrays. Empty/neutral values are dropped. */\n/** \"Neutral\" sentinel for single-select pick-multi fields. Emitted by the\n * toolbar's Clear action so pills stay visible after reset; must be stripped\n * before the filter object is sent to the backend (it is not a valid enum\n * option for fields like `rootEntityType`). */\nconst NEUTRAL_PICK_VALUE = 'Any';\n\nfunction isNeutralValue(v: string): boolean {\n const trimmed = v.trim();\n return trimmed === '' || trimmed === NEUTRAL_PICK_VALUE;\n}\n\n/** `rootEntityType` is enum-valued at the backend; URL-supplied or stale stored\n * values can be arbitrary strings, so we validate against the allowed set\n * before letting them reach the filter object. Returns `undefined` if the\n * value isn't a known enum option. */\nconst VALID_ROOT_ENTITY_TYPES: ReadonlySet<EntityType> = new Set(\n METRICS_ROOT_ENTITY_TYPE_OPTIONS.map(o => o.entityType),\n);\nfunction toValidRootEntityType(v: string): EntityType | undefined {\n const trimmed = v.trim();\n return VALID_ROOT_ENTITY_TYPES.has(trimmed as EntityType) ? (trimmed as EntityType) : undefined;\n}\n\nexport function buildMetricsDimensionalFilter(tokens: PropertyFilterToken[]): MetricsDimensionalFilter {\n const result: MetricsDimensionalFilter = {};\n for (const token of tokens) {\n const fieldId = token.fieldId as keyof MetricsDimensionalFilter;\n if (Array.isArray(token.value)) {\n const values = token.value\n .filter((v): v is string => typeof v === 'string')\n .map(v => v.trim())\n .filter(v => !isNeutralValue(v));\n if (values.length === 0) continue;\n if (fieldId === 'tags') {\n result.tags = values;\n } else if (fieldId === 'rootEntityType') {\n const validated = toValidRootEntityType(values[0]);\n if (validated) result.rootEntityType = validated;\n } else {\n // Backend accepts a single string per dimension; take the first selection.\n (result as Record<string, unknown>)[fieldId] = values[0];\n }\n } else if (typeof token.value === 'string') {\n if (isNeutralValue(token.value)) continue;\n const trimmed = token.value.trim();\n if (fieldId === 'rootEntityType') {\n const validated = toValidRootEntityType(trimmed);\n if (validated) result.rootEntityType = validated;\n } else {\n (result as Record<string, unknown>)[fieldId] = trimmed;\n }\n }\n }\n return result;\n}\n","/* eslint-disable react-refresh/only-export-components */\nimport { format } from 'date-fns';\nimport { createContext, useContext, useMemo } from 'react';\nimport type { ReactNode } from 'react';\n\nimport { buildMetricsDimensionalFilter } from '../metrics-filters';\nimport type { MetricsDimensionalFilter } from '../metrics-filters';\nimport type { PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\nconst DATE_PRESETS = [\n { label: 'Last 24 hours', value: '24h' },\n { label: 'Last 3 days', value: '3d' },\n { label: 'Last 7 days', value: '7d' },\n { label: 'Last 14 days', value: '14d' },\n { label: 'Last 30 days', value: '30d' },\n] as const;\n\nexport type DatePreset = (typeof DATE_PRESETS)[number]['value'] | 'custom';\n\nexport { DATE_PRESETS };\n\nconst VALID_PRESETS = new Set<string>(DATE_PRESETS.map(p => p.value));\n\nexport function isValidPreset(value: string | null | undefined): value is DatePreset {\n return typeof value === 'string' && (VALID_PRESETS.has(value) || value === 'custom');\n}\n\nexport type DateRange = { from?: Date; to?: Date };\n\n/** Internal — all state is derived from the URL-backed props the owner passes.\n * There is intentionally no local mirror; keeping a mirror caused URL ↔ state\n * feedback loops that re-rendered the entire metrics tree on every keystroke.\n */\ntype MetricsContextValue = {\n datePreset: DatePreset;\n setDatePreset: (v: DatePreset) => void;\n customRange: DateRange | undefined;\n setCustomRange: (v: DateRange | undefined) => void;\n dateRangeLabel: string;\n filterTokens: PropertyFilterToken[];\n setFilterTokens: (tokens: PropertyFilterToken[]) => void;\n dimensionalFilter: MetricsDimensionalFilter;\n /** Stable JSON representation of `dimensionalFilter`, safe for query keys. */\n dimensionalFilterKey: string;\n /** Base path drilldown links should target for the Traces page. */\n tracesBasePath: string | undefined;\n /** Base path drilldown links should target for the Logs page. */\n logsBasePath: string | undefined;\n};\n\nexport const MetricsContext = createContext<MetricsContextValue>({\n datePreset: '24h',\n setDatePreset: () => {},\n customRange: undefined,\n setCustomRange: () => {},\n dateRangeLabel: 'Last 24 hours',\n filterTokens: [],\n setFilterTokens: () => {},\n dimensionalFilter: {},\n dimensionalFilterKey: '{}',\n tracesBasePath: undefined,\n logsBasePath: undefined,\n});\n\nexport function useMetrics() {\n return useContext(MetricsContext);\n}\n\nfunction getDateRangeLabel(preset: DatePreset, customRange: DateRange | undefined) {\n if (preset !== 'custom') {\n return DATE_PRESETS.find(p => p.value === preset)!.label;\n }\n if (customRange?.from) {\n if (customRange.to) {\n return `${format(customRange.from, 'MMM d, yyyy')} – ${format(customRange.to, 'MMM d, yyyy')}`;\n }\n return format(customRange.from, 'MMM d, yyyy');\n }\n return 'Custom range';\n}\n\n/**\n * URL-driven metrics provider.\n *\n * The owner (page) is expected to:\n * - pass the current `preset` / `filterTokens` derived from `useSearchParams`\n * - pass `onPresetChange` / `onFilterTokensChange` that update the URL\n *\n * The provider never stores its own copies — changes round-trip through the URL\n * exactly once, which keeps re-renders bounded no matter how much data is on\n * screen.\n */\nexport function MetricsProvider({\n children,\n preset,\n filterTokens,\n onPresetChange,\n onFilterTokensChange,\n customRange,\n onCustomRangeChange,\n tracesBasePath,\n logsBasePath,\n}: {\n children: ReactNode;\n preset: DatePreset;\n filterTokens: PropertyFilterToken[];\n onPresetChange: (preset: DatePreset) => void;\n onFilterTokensChange: (tokens: PropertyFilterToken[]) => void;\n customRange?: DateRange;\n onCustomRangeChange?: (range: DateRange | undefined) => void;\n /** Base path for drilldown links to the Traces page. Defaults to `/observability` when omitted. */\n tracesBasePath?: string;\n /** Base path for drilldown links to the Logs page. Defaults to `/logs` when omitted. */\n logsBasePath?: string;\n}) {\n // Stable key for memo dependencies — the parent may re-create the tokens\n // array on every render (e.g. from `useMemo(... , [searchParams])`), but the\n // *content* usually doesn't change.\n const filterTokensKey = useMemo(() => JSON.stringify(filterTokens), [filterTokens]);\n\n // Intentional: re-pin only when the serialized content changes, not on every\n // parent render that allocates a new array.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const stableFilterTokens = useMemo(() => filterTokens, [filterTokensKey]);\n\n const dimensionalFilter = useMemo(() => buildMetricsDimensionalFilter(stableFilterTokens), [stableFilterTokens]);\n\n const dimensionalFilterKey = useMemo(() => JSON.stringify(dimensionalFilter), [dimensionalFilter]);\n\n const dateRangeLabel = getDateRangeLabel(preset, customRange);\n\n const value = useMemo<MetricsContextValue>(\n () => ({\n datePreset: preset,\n setDatePreset: onPresetChange,\n customRange,\n setCustomRange: onCustomRangeChange ?? (() => {}),\n dateRangeLabel,\n filterTokens: stableFilterTokens,\n setFilterTokens: onFilterTokensChange,\n dimensionalFilter,\n dimensionalFilterKey,\n tracesBasePath,\n logsBasePath,\n }),\n [\n preset,\n onPresetChange,\n customRange,\n onCustomRangeChange,\n dateRangeLabel,\n stableFilterTokens,\n onFilterTokensChange,\n dimensionalFilter,\n dimensionalFilterKey,\n tracesBasePath,\n logsBasePath,\n ],\n );\n\n return <MetricsContext.Provider value={value}>{children}</MetricsContext.Provider>;\n}\n","import { useRef } from 'react';\nimport { DateTimeRangePicker } from '../../../ds/components/DateTimeRangePicker';\nimport type { DateRangePreset } from '../../../ds/components/DateTimeRangePicker';\nimport { useMetrics } from '../hooks/use-metrics';\nimport type { DatePreset } from '../hooks/use-metrics';\n\nconst METRICS_PRESETS: readonly DateRangePreset[] = [\n 'last-24h',\n 'last-3d',\n 'last-7d',\n 'last-14d',\n 'last-30d',\n 'custom',\n];\n\nfunction toPickerPreset(preset: DatePreset): DateRangePreset {\n switch (preset) {\n case '3d':\n return 'last-3d';\n case '7d':\n return 'last-7d';\n case '14d':\n return 'last-14d';\n case '30d':\n return 'last-30d';\n case 'custom':\n return 'custom';\n default:\n return 'last-24h';\n }\n}\n\nfunction fromPickerPreset(preset: DateRangePreset): DatePreset {\n switch (preset) {\n case 'last-3d':\n return '3d';\n case 'last-7d':\n return '7d';\n case 'last-14d':\n return '14d';\n case 'last-30d':\n return '30d';\n case 'custom':\n return 'custom';\n default:\n return '24h';\n }\n}\n\nexport function DateRangeSelector() {\n const { datePreset, setDatePreset, customRange, setCustomRange } = useMetrics();\n\n // The picker reports each field separately and also fires onDateChange right\n // after a non-custom preset switch. Track the latest preset and range\n // synchronously so the guard below skips those calls and the second field\n // change still sees the first one.\n const presetRef = useRef(datePreset);\n presetRef.current = datePreset;\n const customRangeRef = useRef(customRange);\n customRangeRef.current = customRange;\n\n return (\n <DateTimeRangePicker\n preset={toPickerPreset(datePreset)}\n onPresetChange={next => {\n const mapped = fromPickerPreset(next);\n presetRef.current = mapped;\n setDatePreset(mapped);\n }}\n dateFrom={customRange?.from}\n dateTo={customRange?.to}\n onDateChange={(value, type) => {\n if (presetRef.current !== 'custom') return;\n const next = { ...customRangeRef.current, [type]: value };\n customRangeRef.current = next;\n setCustomRange(next);\n }}\n presets={METRICS_PRESETS}\n />\n );\n}\n","export function formatCompact(n: number): string {\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1_000) return `${(n / 1_000).toFixed(1)}K`;\n return n.toLocaleString();\n}\n\nexport function formatCost(value: number, unit?: string | null): string {\n if (unit?.toLowerCase() === 'usd' || !unit) {\n return `$${value < 0.01 && value > 0 ? value.toFixed(4) : value.toFixed(2)}`;\n }\n return `${value.toFixed(4)} ${unit}`;\n}\n\nexport const CHART_COLORS = {\n green: '#22c55e',\n orange: '#fb923c',\n pink: '#f472b6',\n purple: '#8b5cf6',\n blue: '#4f83f1',\n blueDark: '#2b5cd9',\n blueLight: '#6b8fe5',\n red: '#f87171',\n greenDark: '#15613a',\n redDark: '#991b1b',\n yellow: '#facc15',\n} as const;\n","import { Tooltip, TooltipContent, TooltipTrigger } from '../../../ds/components/Tooltip';\nimport { CHART_COLORS } from './metrics-utils';\n\nexport function BarListContent({\n data,\n maxVal,\n fmt,\n color,\n valueLabel,\n legend,\n}: {\n data: Array<{ name: string; value: number }>;\n maxVal: number;\n fmt: (v: number) => string;\n color: string;\n valueLabel?: string;\n legend?: Array<{ color: string; label: string }>;\n}) {\n const sorted = [...data].sort((a, b) => b.value - a.value);\n return (\n <div>\n <div className=\"flex items-center gap-3 mb-2\">\n <div className=\"flex-1 flex items-center gap-4\">\n {legend?.map(l => (\n <div key={l.label} className=\"flex items-center gap-1.5\">\n <div className=\"size-2 rounded-full\" style={{ backgroundColor: l.color }} />\n <span className=\"text-xs text-icon2\">{l.label}</span>\n </div>\n ))}\n </div>\n {valueLabel && <span className=\"shrink-0 text-xs text-icon2\">{valueLabel}</span>}\n </div>\n <div className=\"space-y-2.5\">\n {sorted.map(d => {\n const pct = Math.min(Math.max(maxVal > 0 ? (d.value / maxVal) * 100 : 0, 0), 100);\n return (\n <div key={d.name} className=\"group flex items-center gap-3\">\n <div className=\"relative flex-1 h-7\">\n <div\n className=\"absolute inset-y-0 left-0 rounded\"\n style={{ width: `${pct}%`, backgroundColor: color }}\n />\n <span className=\"absolute inset-y-0 left-2 flex items-center text-xs text-white whitespace-nowrap\">\n {d.name}\n </span>\n </div>\n <span className=\"shrink-0 text-xs font-mono text-icon6 tabular-nums\">{fmt(d.value)}</span>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport function StackedRunsBars({ data }: { data: Array<{ name: string; completed: number; errors: number }> }) {\n const sorted = [...data].sort((a, b) => b.completed + b.errors - (a.completed + a.errors));\n const maxTotal = Math.max(...sorted.map(d => d.completed + d.errors));\n return (\n <div>\n <div className=\"flex items-center gap-3 mb-2\">\n <div className=\"flex-1 flex items-center gap-4\">\n <div className=\"flex items-center gap-1.5\">\n <div className=\"size-2 rounded-full\" style={{ backgroundColor: CHART_COLORS.blue }} />\n <span className=\"text-xs text-icon2\">Completed</span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <div className=\"size-2 rounded-full\" style={{ backgroundColor: CHART_COLORS.red }} />\n <span className=\"text-xs text-icon2\">Errors</span>\n </div>\n </div>\n <span className=\"shrink-0 text-xs text-icon2\">Total (Success)</span>\n </div>\n <div className=\"space-y-2.5\">\n {sorted.map(d => {\n const total = d.completed + d.errors;\n const successPct = total > 0 ? ((d.completed / total) * 100).toFixed(1) : '0.0';\n const completedWidth = Math.min(Math.max(maxTotal > 0 ? (d.completed / maxTotal) * 100 : 0, 0), 100);\n const errorsWidth = Math.min(Math.max(maxTotal > 0 ? (d.errors / maxTotal) * 100 : 0, 0), 100);\n return (\n <div key={d.name} className=\"group flex items-center gap-3\">\n <div className=\"relative flex-1 h-7\">\n <Tooltip>\n <TooltipTrigger asChild>\n <div\n role=\"img\"\n aria-label={`${d.completed.toLocaleString()} completed`}\n tabIndex={0}\n className=\"absolute inset-y-0 left-0 rounded-l cursor-default\"\n style={{ width: `${completedWidth}%`, backgroundColor: CHART_COLORS.blue }}\n />\n </TooltipTrigger>\n <TooltipContent side=\"top\" className=\"font-mono\">\n {d.completed.toLocaleString()} completed\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <div\n role=\"img\"\n aria-label={`${d.errors.toLocaleString()} errors`}\n tabIndex={0}\n className=\"absolute inset-y-0 rounded-r cursor-default\"\n style={{\n left: `${completedWidth}%`,\n width: `${errorsWidth}%`,\n backgroundColor: CHART_COLORS.red,\n }}\n />\n </TooltipTrigger>\n <TooltipContent side=\"top\" className=\"font-mono\">\n {d.errors.toLocaleString()} errors\n </TooltipContent>\n </Tooltip>\n <span className=\"absolute inset-y-0 left-2 flex items-center text-xs text-white whitespace-nowrap pointer-events-none\">\n {d.name}\n </span>\n </div>\n <span className=\"shrink-0 text-xs font-mono text-icon6 tabular-nums\">\n {total.toLocaleString()} ({successPct}%)\n </span>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import { EyeIcon, LogsIcon } from 'lucide-react';\nimport type { ElementType } from 'react';\nimport { Button } from '../../../ds/components/Button';\n\ntype CardActionButtonProps = {\n /** Pre-built drilldown URL (typically from `useDrilldown().getTracesHref(...)`). */\n href: string;\n /** Override how the underlying anchor is rendered — pass a router-aware Link\n * to keep navigation in-app. Defaults to `<a>`. */\n LinkComponent?: ElementType;\n};\n\n/** Icon link in a MetricsCard top bar that opens the Traces page pre-filtered\n * to whatever dimensions the card knows about. */\nexport function OpenInTracesButton({ href, LinkComponent = 'a' }: CardActionButtonProps) {\n return (\n <Button\n as={LinkComponent}\n href={href}\n variant=\"ghost\"\n size=\"icon-md\"\n tooltip=\"View in Traces\"\n aria-label=\"View in Traces\"\n >\n <EyeIcon />\n </Button>\n );\n}\n\n/** Icon link in a MetricsCard top bar that opens the Logs page scoped to\n * errors for the card's current dimensions. */\nexport function OpenErrorsInLogsButton({ href, LinkComponent = 'a' }: CardActionButtonProps) {\n return (\n <Button\n as={LinkComponent}\n href={href}\n variant=\"ghost\"\n size=\"icon-md\"\n tooltip=\"View errors in Logs\"\n aria-label=\"View errors in Logs\"\n >\n <LogsIcon />\n </Button>\n );\n}\n","import { MetricsKpiCard } from '../../../ds/components/MetricsKpiCard';\n\nexport interface KpiCardViewProps {\n label: string;\n value: string | null;\n prevValue?: string;\n changePct?: number | null;\n isLoading: boolean;\n isError: boolean;\n}\n\nexport function KpiCardView({ label, value, prevValue, changePct, isLoading, isError }: KpiCardViewProps) {\n const hasData = value != null;\n return (\n <MetricsKpiCard>\n <MetricsKpiCard.Label>{label}</MetricsKpiCard.Label>\n <MetricsKpiCard.Value className={hasData ? undefined : 'invisible'}>{hasData ? value : '—'}</MetricsKpiCard.Value>\n {isError ? (\n <MetricsKpiCard.Error />\n ) : isLoading ? (\n <MetricsKpiCard.Loading />\n ) : hasData ? (\n changePct != null ? (\n <MetricsKpiCard.Change changePct={changePct} prevValue={prevValue} />\n ) : (\n <MetricsKpiCard.NoChange />\n )\n ) : (\n <MetricsKpiCard.NoData />\n )}\n </MetricsKpiCard>\n );\n}\n","import { useEffect, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { MetricsCard } from '../../../ds/components/MetricsCard';\nimport { MetricsLineChart } from '../../../ds/components/MetricsLineChart';\nimport { Tab, TabContent, TabList, Tabs } from '../../../ds/components/Tabs';\nimport type { LatencyPoint } from '../hooks/use-latency-metrics';\nimport { CHART_COLORS } from './metrics-utils';\n\nconst latencySeries = [\n {\n dataKey: 'p50',\n label: 'p50',\n color: CHART_COLORS.blue,\n aggregate: (data: Record<string, unknown>[]) => ({\n value: data.length > 0 ? `${Math.round(data.reduce((s, d) => s + (d.p50 as number), 0) / data.length)}` : '0',\n suffix: 'avg ms',\n }),\n },\n {\n dataKey: 'p95',\n label: 'p95',\n color: CHART_COLORS.yellow,\n aggregate: (data: Record<string, unknown>[]) => ({\n value: data.length > 0 ? `${Math.round(data.reduce((s, d) => s + (d.p95 as number), 0) / data.length)}` : '0',\n suffix: 'avg ms',\n }),\n },\n];\n\nexport type LatencyTab = 'agents' | 'workflows' | 'tools';\n\nfunction LatencyChart({ data, onPointClick }: { data: LatencyPoint[]; onPointClick?: (point: LatencyPoint) => void }) {\n if (data.length === 0) {\n return <MetricsCard.NoData message=\"No latency data yet\" />;\n }\n return (\n <MetricsLineChart\n data={data}\n series={latencySeries}\n onPointClick={\n onPointClick\n ? point => {\n const p = point as LatencyPoint;\n if (typeof p?.tsMs === 'number' && Number.isFinite(p.tsMs)) onPointClick(p);\n }\n : undefined\n }\n />\n );\n}\n\nexport interface LatencyCardViewProps {\n data: { agentData: LatencyPoint[]; workflowData: LatencyPoint[]; toolData: LatencyPoint[] } | undefined;\n isLoading: boolean;\n isError: boolean;\n /** Optional drilldown: invoked when a chart node is clicked. Container provides the navigation. */\n onPointClick?: (tab: LatencyTab, point: LatencyPoint) => void;\n /**\n * Optional slot for top-bar action buttons (e.g. \"View in Traces\").\n * Pass a function to receive the active tab so the action can scope itself to the current entity type.\n */\n actions?: ReactNode | ((tab: LatencyTab) => ReactNode);\n}\n\nexport function LatencyCardView({ data, isLoading, isError, onPointClick, actions }: LatencyCardViewProps) {\n const initialTab: LatencyTab = !data\n ? 'agents'\n : data.agentData.length > 0\n ? 'agents'\n : data.workflowData.length > 0\n ? 'workflows'\n : data.toolData.length > 0\n ? 'tools'\n : 'agents';\n const [activeTab, setActiveTab] = useState<LatencyTab>(initialTab);\n // Resync to a non-empty tab when async data finishes loading. Without this,\n // a card that mounts before data arrives stays stuck on `agents` even when\n // only workflow/tool data exists.\n useEffect(() => {\n if (!data) return;\n const tabHasData = {\n agents: data.agentData.length > 0,\n workflows: data.workflowData.length > 0,\n tools: data.toolData.length > 0,\n } as const;\n if (!tabHasData[activeTab] && tabHasData[initialTab]) {\n setActiveTab(initialTab);\n }\n }, [data, activeTab, initialTab]);\n const renderedActions = typeof actions === 'function' ? actions(activeTab) : actions;\n const hasData = !!data && (data.agentData.length > 0 || data.workflowData.length > 0 || data.toolData.length > 0);\n const p50Values = data\n ? Object.values(data)\n .filter(Array.isArray)\n .flat()\n .map(d => d.p50)\n .filter((v): v is number => typeof v === 'number')\n : [];\n const avgP50 =\n p50Values.length > 0 ? `${Math.round(p50Values.reduce((s, v) => s + v, 0) / p50Values.length)}ms` : '—';\n\n return (\n <MetricsCard>\n <MetricsCard.TopBar>\n <MetricsCard.TitleAndDescription title=\"Latency\" description=\"Hourly p50 and p95 latency.\" />\n {hasData && <MetricsCard.Summary value={avgP50} label=\"Avg p50\" />}\n {renderedActions ? <MetricsCard.Actions>{renderedActions}</MetricsCard.Actions> : null}\n </MetricsCard.TopBar>\n {isLoading ? (\n <MetricsCard.Loading />\n ) : isError ? (\n <MetricsCard.Error message=\"Failed to load latency data\" />\n ) : (\n <MetricsCard.Content>\n {!hasData ? (\n <MetricsCard.NoData message=\"No latency data yet\" />\n ) : (\n <Tabs value={activeTab} onValueChange={setActiveTab} defaultTab={initialTab} className=\"overflow-visible\">\n <TabList>\n <Tab value=\"agents\">Agents</Tab>\n <Tab value=\"workflows\">Workflows</Tab>\n <Tab value=\"tools\">Tools</Tab>\n </TabList>\n <TabContent value=\"agents\">\n <LatencyChart\n data={data.agentData}\n onPointClick={onPointClick ? p => onPointClick('agents', p) : undefined}\n />\n </TabContent>\n <TabContent value=\"workflows\">\n <LatencyChart\n data={data.workflowData}\n onPointClick={onPointClick ? p => onPointClick('workflows', p) : undefined}\n />\n </TabContent>\n <TabContent value=\"tools\">\n <LatencyChart\n data={data.toolData}\n onPointClick={onPointClick ? p => onPointClick('tools', p) : undefined}\n />\n </TabContent>\n </Tabs>\n )}\n </MetricsCard.Content>\n )}\n </MetricsCard>\n );\n}\n","import { useState } from 'react';\nimport type { ElementType, ReactNode } from 'react';\nimport { MetricsCard } from '../../../ds/components/MetricsCard';\nimport { MetricsDataTable } from '../../../ds/components/MetricsDataTable';\nimport { Tab, TabContent, TabList, Tabs } from '../../../ds/components/Tabs';\nimport type { ActiveThreadRow } from '../hooks/use-top-active-threads-metrics';\nimport type { ResourceThreadsRow } from '../hooks/use-top-resources-by-threads-metrics';\nimport { formatCompact, formatCost } from './metrics-utils';\n\nexport type MemoryTab = 'threads' | 'resources';\n\n/** Per-tab query state. Memory has two independent server queries (top\n * threads + top resources) so loading/error are scoped to the active tab. */\ntype MemoryTabState<T> = {\n data: T[] | undefined;\n isLoading: boolean;\n isError: boolean;\n};\n\nexport interface MemoryCardViewProps {\n threads: MemoryTabState<ActiveThreadRow>;\n resources: MemoryTabState<ResourceThreadsRow>;\n /** Optional drilldown for a thread row. Receives the raw hook row. */\n getThreadRowHref?: (row: ActiveThreadRow) => string | undefined;\n /** Optional drilldown for a resource row. Receives the raw hook row. */\n getResourceRowHref?: (row: ResourceThreadsRow) => string | undefined;\n /** Optional slot for top-bar action buttons. Function form receives the active tab. */\n actions?: ReactNode | ((tab: MemoryTab) => ReactNode);\n /** Override how drilldown links are rendered. Defaults to `<a>`. */\n LinkComponent?: ElementType;\n}\n\nfunction isMemoryTab(value: string): value is MemoryTab {\n return value === 'threads' || value === 'resources';\n}\n\n// IDs are usually 32+ char UUIDs; the table is too narrow to show the full\n// value without horizontal scroll, so we elide the middle.\nfunction shortId(id: string): string {\n if (id.length <= 12) return id;\n return `${id.slice(0, 6)}…${id.slice(-4)}`;\n}\n\ntype ThreadTableRow = ActiveThreadRow & { key: string };\ntype ResourceTableRow = ResourceThreadsRow & { key: string };\n\nexport function MemoryCardView({\n threads,\n resources,\n getThreadRowHref,\n getResourceRowHref,\n actions,\n LinkComponent,\n}: MemoryCardViewProps) {\n const [activeTab, setActiveTab] = useState<MemoryTab>('threads');\n\n const threadRows: ThreadTableRow[] = threads.data?.map(r => ({ ...r, key: r.threadId })) ?? [];\n const resourceRows: ResourceTableRow[] = resources.data?.map(r => ({ ...r, key: r.resourceId })) ?? [];\n\n const hasThreadData = threadRows.length > 0;\n const hasResourceData = resourceRows.length > 0;\n\n const threadTotal = threads.data?.reduce((s, r) => s + r.runs, 0) ?? 0;\n const resourceTotal = resources.data?.reduce((s, r) => s + r.threadCount, 0) ?? 0;\n\n const active = activeTab === 'threads' ? threads : resources;\n const renderedActions = typeof actions === 'function' ? actions(activeTab) : actions;\n\n return (\n <MetricsCard>\n <MetricsCard.TopBar>\n <MetricsCard.TitleAndDescription title=\"Memory\" description=\"Resource and Thread consumption\" />\n {activeTab === 'threads' && hasThreadData && (\n <MetricsCard.Summary value={threadTotal.toLocaleString()} label=\"Total runs\" />\n )}\n {activeTab === 'resources' && hasResourceData && (\n <MetricsCard.Summary value={resourceTotal.toLocaleString()} label=\"Total threads\" />\n )}\n {renderedActions ? <MetricsCard.Actions>{renderedActions}</MetricsCard.Actions> : null}\n </MetricsCard.TopBar>\n {active.isLoading ? (\n <MetricsCard.Loading />\n ) : active.isError ? (\n <MetricsCard.Error message=\"Failed to load memory data\" />\n ) : (\n <MetricsCard.Content>\n <Tabs\n defaultTab=\"threads\"\n value={activeTab}\n onValueChange={v => {\n if (isMemoryTab(v)) setActiveTab(v);\n }}\n className=\"grid grid-rows-[auto_1fr] overflow-y-auto h-full\"\n >\n <TabList>\n <Tab value=\"threads\">Threads</Tab>\n <Tab value=\"resources\">Resources</Tab>\n </TabList>\n <TabContent value=\"threads\">\n {hasThreadData ? (\n <MetricsDataTable\n columns={[\n { label: 'Thread ID', value: row => shortId(row.threadId) },\n { label: 'Resource ID', value: row => (row.resourceId ? shortId(row.resourceId) : '—') },\n { label: 'Runs', value: row => row.runs.toLocaleString(), highlight: true },\n { label: 'Tokens', value: row => (row.tokens > 0 ? formatCompact(row.tokens) : '—') },\n { label: 'Cost', value: row => (row.cost != null ? formatCost(row.cost, row.costUnit) : '—') },\n ]}\n data={threadRows}\n LinkComponent={LinkComponent}\n getRowHref={getThreadRowHref ? row => getThreadRowHref(row) : undefined}\n />\n ) : (\n <MetricsCard.NoData message=\"No thread activity yet\" />\n )}\n </TabContent>\n <TabContent value=\"resources\">\n {hasResourceData ? (\n <MetricsDataTable\n columns={[\n { label: 'Resource ID', value: row => shortId(row.resourceId) },\n { label: 'Threads', value: row => row.threadCount.toLocaleString(), highlight: true },\n { label: 'Tokens', value: row => (row.tokens > 0 ? formatCompact(row.tokens) : '—') },\n { label: 'Cost', value: row => (row.cost != null ? formatCost(row.cost, row.costUnit) : '—') },\n ]}\n data={resourceRows}\n LinkComponent={LinkComponent}\n getRowHref={getResourceRowHref ? row => getResourceRowHref(row) : undefined}\n />\n ) : (\n <MetricsCard.NoData message=\"No resource activity yet\" />\n )}\n </TabContent>\n </Tabs>\n </MetricsCard.Content>\n )}\n </MetricsCard>\n );\n}\n","import type { ElementType, ReactNode } from 'react';\nimport { MetricsCard } from '../../../ds/components/MetricsCard';\nimport { MetricsDataTable } from '../../../ds/components/MetricsDataTable';\nimport type { ModelUsageRow } from '../hooks/use-model-usage-cost-metrics';\nimport { formatCost } from './metrics-utils';\n\nexport interface ModelUsageCostCardViewProps {\n rows: ModelUsageRow[] | undefined;\n isLoading: boolean;\n isError: boolean;\n /** Optional drilldown for a row in the table. */\n getRowHref?: (row: ModelUsageRow) => string | undefined;\n /** Optional slot for top-bar action buttons. */\n actions?: ReactNode;\n /** Override how drilldown links are rendered. Defaults to `<a>`. */\n LinkComponent?: ElementType;\n}\n\nexport function ModelUsageCostCardView({\n rows,\n isLoading,\n isError,\n getRowHref,\n actions,\n LinkComponent,\n}: ModelUsageCostCardViewProps) {\n const hasData = !!rows && rows.length > 0;\n\n return (\n <MetricsCard>\n <MetricsCard.TopBar>\n <MetricsCard.TitleAndDescription title=\"Model Usage & Cost\" description=\"Token consumption by model.\" />\n {hasData &&\n (() => {\n const totalCost = rows.reduce((sum, r) => sum + (r.cost ?? 0), 0);\n const units = new Set(rows.filter(r => r.cost != null && r.costUnit).map(r => r.costUnit as string));\n let value: string;\n if (units.size === 0) {\n value = totalCost > 0 ? formatCost(totalCost) : '—';\n } else if (units.size === 1) {\n value = totalCost > 0 ? formatCost(totalCost, [...units][0]) : '—';\n } else {\n value = 'Mixed';\n }\n return <MetricsCard.Summary value={value} label=\"Total cost\" />;\n })()}\n {actions ? <MetricsCard.Actions>{actions}</MetricsCard.Actions> : null}\n </MetricsCard.TopBar>\n {isLoading ? (\n <MetricsCard.Loading />\n ) : isError ? (\n <MetricsCard.Error message=\"Failed to load model usage data\" />\n ) : (\n <MetricsCard.Content>\n {!hasData ? (\n <MetricsCard.NoData message=\"No model usage data yet\" />\n ) : (\n <MetricsDataTable\n columns={[\n { label: 'Model', value: row => row.model },\n { label: 'Input', value: row => row.input },\n { label: 'Output', value: row => row.output },\n { label: 'Cache Read', value: row => row.cacheRead },\n { label: 'Cache Write', value: row => row.cacheWrite },\n {\n label: 'Cost',\n value: row => (row.cost != null ? formatCost(row.cost, row.costUnit) : '—'),\n highlight: true,\n },\n ]}\n data={rows.map(row => ({ ...row, key: row.model }))}\n getRowHref={getRowHref}\n LinkComponent={LinkComponent}\n />\n )}\n </MetricsCard.Content>\n )}\n </MetricsCard>\n );\n}\n","import { useMemo } from 'react';\nimport { MetricsCard } from '../../../ds/components/MetricsCard';\nimport { MetricsDataTable } from '../../../ds/components/MetricsDataTable';\nimport { MetricsLineChart } from '../../../ds/components/MetricsLineChart';\nimport { Tab, TabContent, TabList, Tabs } from '../../../ds/components/Tabs';\nimport type { ScorerSummary, ScoresOverTimePoint } from '../hooks/use-scores-metrics';\nimport { CHART_COLORS } from './metrics-utils';\n\nconst SERIES_COLORS = [\n CHART_COLORS.green,\n CHART_COLORS.blue,\n CHART_COLORS.purple,\n CHART_COLORS.orange,\n CHART_COLORS.pink,\n CHART_COLORS.yellow,\n];\n\nexport interface ScoresCardViewProps {\n data:\n | {\n summaryData: ScorerSummary[];\n overTimeData: ScoresOverTimePoint[];\n scorerNames: string[];\n avgScore: number | null;\n }\n | undefined;\n isLoading: boolean;\n isError: boolean;\n}\n\nexport function ScoresCardView({ data, isLoading, isError }: ScoresCardViewProps) {\n const hasData = !!data && (data.summaryData.length > 0 || data.overTimeData.length > 0);\n\n const series = useMemo(() => {\n if (!data?.scorerNames) return [];\n return data.scorerNames.map((name, i) => ({\n dataKey: name,\n label: name,\n color: SERIES_COLORS[i % SERIES_COLORS.length],\n aggregate: (points: Record<string, unknown>[]) => ({\n value:\n points.length > 0\n ? (points.reduce((s, d) => s + ((d[name] as number) ?? 0), 0) / points.length).toFixed(2)\n : '0',\n suffix: 'avg',\n }),\n }));\n }, [data?.scorerNames]);\n\n return (\n <MetricsCard>\n <MetricsCard.TopBar>\n <MetricsCard.TitleAndDescription title=\"Scores\" description=\"Evaluation scorer performance.\" />\n </MetricsCard.TopBar>\n {isLoading ? (\n <MetricsCard.Loading />\n ) : isError ? (\n <MetricsCard.Error message=\"Failed to load scores data\" />\n ) : (\n <MetricsCard.Content>\n {!hasData ? (\n <MetricsCard.NoData message=\"No scores data yet\" />\n ) : (\n <Tabs defaultTab=\"over-time\" className=\"overflow-visible\">\n <TabList>\n <Tab value=\"over-time\">Over Time</Tab>\n <Tab value=\"summary\">Summary</Tab>\n </TabList>\n <TabContent value=\"over-time\" className=\"pb-0\">\n {data.overTimeData.length > 0 ? (\n <MetricsLineChart data={data.overTimeData} series={series} yDomain={[0, 1]} />\n ) : (\n <MetricsCard.NoData message=\"No time series data yet\" />\n )}\n </TabContent>\n <TabContent value=\"summary\">\n <MetricsDataTable\n columns={[\n { label: 'Scorer', value: row => row.scorer },\n { label: 'Avg', value: row => row.avg.toFixed(2), highlight: true },\n { label: 'Min', value: row => row.min.toFixed(2) },\n { label: 'Max', value: row => row.max.toFixed(2) },\n { label: 'Count', value: row => row.count.toLocaleString() },\n ]}\n data={data.summaryData.map(row => ({ ...row, key: row.scorer }))}\n />\n </TabContent>\n </Tabs>\n )}\n </MetricsCard.Content>\n )}\n </MetricsCard>\n );\n}\n","import { useState } from 'react';\nimport type { ElementType, ReactNode } from 'react';\nimport { HorizontalBars } from '../../../ds/components/HorizontalBars';\nimport { MetricsCard } from '../../../ds/components/MetricsCard';\nimport { Tab, TabContent, TabList, Tabs } from '../../../ds/components/Tabs';\nimport type { TokenUsageByAgentRow } from '../hooks/use-token-usage-by-agent-metrics';\nimport { CHART_COLORS, formatCompact, formatCost } from './metrics-utils';\n\nexport interface TokenUsageByAgentCardViewProps {\n data: TokenUsageByAgentRow[] | undefined;\n isLoading: boolean;\n isError: boolean;\n /** Optional drilldown: returns an href for a single row in either tab. */\n getRowHref?: (row: TokenUsageByAgentRow) => string | undefined;\n /** Optional slot for top-bar action buttons. */\n actions?: ReactNode;\n /** Override how drilldown links are rendered. Defaults to `<a>`. */\n LinkComponent?: ElementType;\n}\n\ntype TokenUsageTab = 'tokens' | 'cost';\n\nfunction isTokenUsageTab(value: string): value is TokenUsageTab {\n return value === 'tokens' || value === 'cost';\n}\n\nexport function TokenUsageByAgentCardView({\n data,\n isLoading,\n isError,\n getRowHref,\n actions,\n LinkComponent,\n}: TokenUsageByAgentCardViewProps) {\n const [activeTab, setActiveTab] = useState<TokenUsageTab>('tokens');\n\n const rows = data ?? [];\n const hasData = rows.length > 0;\n const totalTokens = rows.reduce((s, d) => s + d.total, 0);\n const costRows = rows.filter(d => d.cost != null && d.cost > 0);\n const uniqueCostUnits = new Set(costRows.map(d => d.costUnit ?? 'usd'));\n const hasSingleCostUnit = uniqueCostUnits.size <= 1;\n const costUnit = hasSingleCostUnit ? ([...uniqueCostUnits][0] ?? 'usd') : null;\n const totalCost = hasSingleCostUnit ? costRows.reduce((s, d) => s + (d.cost ?? 0), 0) : 0;\n const hasCostData = hasSingleCostUnit && totalCost > 0;\n\n return (\n <MetricsCard>\n <MetricsCard.TopBar>\n <MetricsCard.TitleAndDescription\n title=\"Token Usage by Agent\"\n description=\"Token consumption grouped by agent.\"\n />\n {hasData &&\n (activeTab === 'cost' && hasCostData ? (\n <MetricsCard.Summary value={formatCost(totalCost, costUnit)} label=\"Total cost\" />\n ) : (\n <MetricsCard.Summary value={formatCompact(totalTokens)} label=\"Total tokens\" />\n ))}\n {hasData && actions ? <MetricsCard.Actions>{actions}</MetricsCard.Actions> : null}\n </MetricsCard.TopBar>\n {isLoading ? (\n <MetricsCard.Loading />\n ) : isError ? (\n <MetricsCard.Error message=\"Failed to load token usage data\" />\n ) : (\n <MetricsCard.Content>\n {!hasData ? (\n <MetricsCard.NoData message=\"No token usage data yet\" />\n ) : (\n <Tabs\n defaultTab=\"tokens\"\n value={activeTab}\n onValueChange={v => {\n if (isTokenUsageTab(v)) setActiveTab(v);\n }}\n className=\"grid grid-rows-[auto_1fr] overflow-y-auto h-full\"\n >\n <TabList>\n <Tab value=\"tokens\">Tokens</Tab>\n <Tab value=\"cost\">Cost</Tab>\n </TabList>\n <TabContent value=\"tokens\">\n <HorizontalBars\n LinkComponent={LinkComponent}\n data={rows.map(d => ({\n name: d.name,\n values: [d.input, d.output],\n href: getRowHref?.(d),\n }))}\n segments={[\n { label: 'Input', color: CHART_COLORS.blueDark },\n { label: 'Output', color: CHART_COLORS.blue },\n ]}\n maxVal={Math.max(...rows.map(d => d.input + d.output))}\n fmt={formatCompact}\n />\n </TabContent>\n <TabContent value=\"cost\">\n {hasCostData ? (\n <HorizontalBars\n LinkComponent={LinkComponent}\n data={costRows\n .slice()\n .sort((a, b) => (b.cost ?? 0) - (a.cost ?? 0))\n .map(d => ({ name: d.name, values: [d.cost!], href: getRowHref?.(d) }))}\n segments={[{ label: 'Cost', color: CHART_COLORS.purple }]}\n maxVal={Math.max(...costRows.map(d => d.cost ?? 0))}\n fmt={v => formatCost(v, costUnit)}\n />\n ) : (\n <MetricsCard.NoData message=\"No cost data yet\" />\n )}\n </TabContent>\n </Tabs>\n )}\n </MetricsCard.Content>\n )}\n </MetricsCard>\n );\n}\n","import { useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { MetricsCard } from '../../../ds/components/MetricsCard';\nimport { MetricsLineChart } from '../../../ds/components/MetricsLineChart';\nimport { Tab, TabContent, TabList, Tabs } from '../../../ds/components/Tabs';\nimport type { TokenTimelinePoint, TokenUsageTimeSeriesInterval } from '../hooks/use-token-usage-timeseries';\nimport { CHART_COLORS, formatCompact, formatCost } from './metrics-utils';\n\ntype TokenUsageTimelineTab = 'tokens' | 'cost';\n\nfunction sumMetric(dataKey: 'input' | 'output' | 'cost', formatter: (value: number) => string = formatCompact) {\n return (data: Record<string, unknown>[]) => ({\n value: formatter(data.reduce((sum, point) => sum + (typeof point[dataKey] === 'number' ? point[dataKey] : 0), 0)),\n });\n}\n\nconst tokenSeries = [\n {\n dataKey: 'input',\n label: 'Input tokens',\n color: CHART_COLORS.blue,\n aggregate: sumMetric('input'),\n },\n {\n dataKey: 'output',\n label: 'Output tokens',\n color: CHART_COLORS.yellow,\n aggregate: sumMetric('output'),\n },\n];\n\nfunction isTokenUsageTimelineTab(value: string): value is TokenUsageTimelineTab {\n return value === 'tokens' || value === 'cost';\n}\n\nexport interface TokenUsageTimelineCardViewProps {\n data: TokenTimelinePoint[] | undefined;\n interval: TokenUsageTimeSeriesInterval | undefined;\n isLoading: boolean;\n isError: boolean;\n actions?: ReactNode;\n}\n\nexport function TokenUsageTimelineCardView({\n data,\n interval = '1d',\n isLoading,\n isError,\n actions,\n}: TokenUsageTimelineCardViewProps) {\n const [activeTab, setActiveTab] = useState<TokenUsageTimelineTab>('tokens');\n\n const points = data ?? [];\n const chartPoints = points.map(point => ({ ...point }));\n const hasData = points.length > 0;\n const totalTokens = points.reduce((sum, point) => sum + point.total, 0);\n const costPoints = points.filter(point => point.cost != null && point.cost > 0);\n const costChartPoints = costPoints.map(point => ({ ...point }));\n const uniqueCostUnits = new Set(costPoints.map(point => point.costUnit).filter((unit): unit is string => !!unit));\n const hasSingleCostUnit = uniqueCostUnits.size === 1 && costPoints.every(point => point.costUnit != null);\n const costUnit = hasSingleCostUnit ? ([...uniqueCostUnits][0] ?? null) : null;\n const totalCost = hasSingleCostUnit ? costPoints.reduce((sum, point) => sum + (point.cost ?? 0), 0) : 0;\n const hasCostData = hasSingleCostUnit && totalCost > 0;\n const description = interval === '1h' ? 'Input and output tokens per hour.' : 'Input and output tokens per day.';\n\n const costSeries = [\n {\n dataKey: 'cost',\n label: 'Cost',\n color: CHART_COLORS.purple,\n aggregate: sumMetric('cost', value => formatCost(value, costUnit)),\n },\n ];\n\n return (\n <MetricsCard>\n <MetricsCard.TopBar>\n <MetricsCard.TitleAndDescription title=\"Token usage over time\" description={description} />\n {hasData &&\n (activeTab === 'cost' && hasCostData ? (\n <MetricsCard.Summary value={formatCost(totalCost, costUnit)} label=\"Total cost\" />\n ) : (\n <MetricsCard.Summary value={formatCompact(totalTokens)} label=\"Total tokens\" />\n ))}\n {hasData && actions ? <MetricsCard.Actions>{actions}</MetricsCard.Actions> : null}\n </MetricsCard.TopBar>\n {isLoading ? (\n <MetricsCard.Loading />\n ) : isError ? (\n <MetricsCard.Error message=\"Failed to load token usage timeline\" />\n ) : (\n <MetricsCard.Content>\n {!hasData ? (\n <MetricsCard.NoData message=\"No token usage data yet\" />\n ) : (\n <Tabs\n defaultTab=\"tokens\"\n value={activeTab}\n onValueChange={value => {\n if (isTokenUsageTimelineTab(value)) setActiveTab(value);\n }}\n className=\"overflow-visible\"\n >\n <TabList>\n <Tab value=\"tokens\">Tokens</Tab>\n <Tab value=\"cost\">Cost</Tab>\n </TabList>\n <TabContent value=\"tokens\">\n <MetricsLineChart data={chartPoints} series={tokenSeries} />\n </TabContent>\n <TabContent value=\"cost\">\n {hasCostData ? (\n <MetricsLineChart data={costChartPoints} series={costSeries} />\n ) : (\n <MetricsCard.NoData message=\"No cost data yet\" />\n )}\n </TabContent>\n </Tabs>\n )}\n </MetricsCard.Content>\n )}\n </MetricsCard>\n );\n}\n","import { useState } from 'react';\nimport type { ElementType, ReactNode } from 'react';\nimport { HorizontalBars } from '../../../ds/components/HorizontalBars';\nimport { MetricsCard } from '../../../ds/components/MetricsCard';\nimport { Tab, TabContent, TabList, Tabs } from '../../../ds/components/Tabs';\nimport type { VolumeRow } from '../hooks/use-trace-volume-metrics';\nimport { CHART_COLORS, formatCompact } from './metrics-utils';\n\nexport type VolumeTab = 'agents' | 'workflows' | 'tools';\n\nfunction VolumeBars({\n data,\n rowHrefs,\n errorHrefs,\n LinkComponent,\n}: {\n data: VolumeRow[];\n rowHrefs?: (row: VolumeRow) => string | undefined;\n errorHrefs?: (row: VolumeRow) => string | undefined;\n LinkComponent?: ElementType;\n}) {\n return (\n <HorizontalBars\n LinkComponent={LinkComponent}\n data={data.map(d => {\n const errorHref = errorHrefs?.(d);\n const rowHref = rowHrefs?.(d);\n // HorizontalBars ignores per-segment `hrefs` whenever a row-level\n // `href` is set (to avoid nested anchors). When we want the Errors\n // segment to drill somewhere different from the rest of the row,\n // drop the row-level link and split navigation across segments\n // instead so each target is reachable.\n if (errorHref) {\n return {\n name: d.name,\n values: [d.completed, d.errors],\n hrefs: [rowHref, errorHref],\n };\n }\n return {\n name: d.name,\n values: [d.completed, d.errors],\n href: rowHref,\n };\n })}\n segments={[\n { label: 'Completed', color: CHART_COLORS.blueDark },\n { label: 'Errors', color: CHART_COLORS.pink },\n ]}\n maxVal={Math.max(...data.map(d => d.completed + d.errors))}\n fmt={formatCompact}\n />\n );\n}\n\nexport interface TracesVolumeCardViewProps {\n data: { agentData: VolumeRow[]; workflowData: VolumeRow[]; toolData: VolumeRow[] } | undefined;\n isLoading: boolean;\n isError: boolean;\n /** Optional drilldown: returns href for clicking a whole bar row. */\n getRowHref?: (tab: VolumeTab, row: VolumeRow) => string | undefined;\n /** Optional drilldown: returns href for clicking the \"Errors\" segment of a bar. */\n getErrorSegmentHref?: (tab: VolumeTab, row: VolumeRow) => string | undefined;\n /**\n * Optional slot for top-bar action buttons.\n * Pass a function to receive the active tab so actions can scope themselves to the current entity type.\n */\n actions?: ReactNode | ((tab: VolumeTab) => ReactNode);\n /** Override how drilldown links are rendered (e.g. router-aware adapter). Defaults to `<a>`. */\n LinkComponent?: ElementType;\n}\n\nexport function TracesVolumeCardView({\n data,\n isLoading,\n isError,\n getRowHref,\n getErrorSegmentHref,\n actions,\n LinkComponent,\n}: TracesVolumeCardViewProps) {\n const [activeTab, setActiveTab] = useState<VolumeTab>('agents');\n const renderedActions = typeof actions === 'function' ? actions(activeTab) : actions;\n const hasData = !!data && (data.agentData.length > 0 || data.workflowData.length > 0 || data.toolData.length > 0);\n const total = data\n ? [...data.agentData, ...data.workflowData, ...data.toolData].reduce((s, d) => s + d.completed + d.errors, 0)\n : 0;\n\n const tabRowHrefs = (tab: VolumeTab) => (getRowHref ? (row: VolumeRow) => getRowHref(tab, row) : undefined);\n const tabErrorHrefs = (tab: VolumeTab) =>\n getErrorSegmentHref ? (row: VolumeRow) => getErrorSegmentHref(tab, row) : undefined;\n\n return (\n <MetricsCard>\n <MetricsCard.TopBar>\n <MetricsCard.TitleAndDescription title=\"Trace Volume\" description=\"Runs and call counts.\" />\n {hasData && <MetricsCard.Summary value={formatCompact(total)} label=\"Total runs\" />}\n {renderedActions ? <MetricsCard.Actions>{renderedActions}</MetricsCard.Actions> : null}\n </MetricsCard.TopBar>\n {isLoading ? (\n <MetricsCard.Loading />\n ) : isError ? (\n <MetricsCard.Error message=\"Failed to load trace volume data\" />\n ) : (\n <MetricsCard.Content>\n {!hasData ? (\n <MetricsCard.NoData message=\"No trace volume data yet\" />\n ) : (\n <Tabs\n value={activeTab}\n onValueChange={setActiveTab}\n defaultTab=\"agents\"\n className=\"grid grid-rows-[auto_1fr] overflow-y-auto h-full\"\n >\n <TabList>\n <Tab value=\"agents\">Agents</Tab>\n <Tab value=\"workflows\">Workflows</Tab>\n <Tab value=\"tools\">Tools</Tab>\n </TabList>\n <TabContent value=\"agents\">\n {data.agentData.length > 0 ? (\n <VolumeBars\n data={data.agentData}\n rowHrefs={tabRowHrefs('agents')}\n errorHrefs={tabErrorHrefs('agents')}\n LinkComponent={LinkComponent}\n />\n ) : (\n <MetricsCard.NoData message=\"No agent data yet\" />\n )}\n </TabContent>\n <TabContent value=\"workflows\">\n {data.workflowData.length > 0 ? (\n <VolumeBars\n data={data.workflowData}\n rowHrefs={tabRowHrefs('workflows')}\n errorHrefs={tabErrorHrefs('workflows')}\n LinkComponent={LinkComponent}\n />\n ) : (\n <MetricsCard.NoData message=\"No workflow data yet\" />\n )}\n </TabContent>\n <TabContent value=\"tools\">\n {data.toolData.length > 0 ? (\n <VolumeBars\n data={data.toolData}\n rowHrefs={tabRowHrefs('tools')}\n errorHrefs={tabErrorHrefs('tools')}\n LinkComponent={LinkComponent}\n />\n ) : (\n <MetricsCard.NoData message=\"No tool data yet\" />\n )}\n </TabContent>\n </Tabs>\n )}\n </MetricsCard.Content>\n )}\n </MetricsCard>\n );\n}\n","import { useMemo, useRef } from 'react';\n\nimport { useMetrics } from './use-metrics';\nimport type { DatePreset, DateRange } from './use-metrics';\n\nconst PRESET_MS: Record<string, number> = {\n '24h': 24 * 60 * 60 * 1000,\n '3d': 3 * 24 * 60 * 60 * 1000,\n '7d': 7 * 24 * 60 * 60 * 1000,\n '14d': 14 * 24 * 60 * 60 * 1000,\n '30d': 30 * 24 * 60 * 60 * 1000,\n};\n\ntype Timestamp = { start: Date; end: Date };\n\nfunction buildTimestamp(preset: DatePreset, customRange: DateRange | undefined, anchor: number): Timestamp {\n if (preset !== 'custom') {\n const ms = PRESET_MS[preset] ?? PRESET_MS['24h'];\n return { start: new Date(anchor - ms), end: new Date(anchor) };\n }\n return {\n start: customRange?.from ?? new Date(anchor - PRESET_MS['24h']),\n end: customRange?.to ?? new Date(anchor),\n };\n}\n\n/**\n * Compose a ready-to-use metrics filter object: merges the active date range\n * with the dimensional filter pulled from the provider (sourced from URL +\n * toolbar).\n *\n * Hooks should spread `filters` directly into their backend call — do not pass\n * only `timestamp` or filters set via the toolbar will be silently ignored.\n *\n * Stability guarantees (important for react-query):\n * - `timestamp` is frozen at the moment the inputs change and does NOT update\n * on every render. Otherwise each render would mint a new `new Date()` and\n * every metrics query would re-fetch on every keystroke.\n * - `filters` and `filterKey` are referentially stable while inputs are\n * unchanged, so `queryKey` hashing is cheap and caches hit.\n */\nexport function useMetricsFilters() {\n const { datePreset, customRange, dimensionalFilter, dimensionalFilterKey } = useMetrics();\n\n // Anchor the \"now\" used for preset windows. We only recompute when the\n // preset or custom range changes — this gives a stable timestamp per query\n // boundary rather than a new Date on every render.\n const anchorRef = useRef<{ key: string; anchor: number } | null>(null);\n const windowKey =\n datePreset === 'custom'\n ? `custom:${customRange?.from?.getTime() ?? ''}:${customRange?.to?.getTime() ?? ''}`\n : `preset:${datePreset}`;\n if (!anchorRef.current || anchorRef.current.key !== windowKey) {\n anchorRef.current = { key: windowKey, anchor: Date.now() };\n }\n const anchor = anchorRef.current.anchor;\n\n const timestamp = useMemo(() => buildTimestamp(datePreset, customRange, anchor), [datePreset, customRange, anchor]);\n\n const filters = useMemo(\n () => ({ timestamp, ...dimensionalFilter }),\n // dimensionalFilterKey is a stringified digest, so this dep set gives a\n // stable ref while content is unchanged.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [timestamp, dimensionalFilterKey],\n );\n\n // filterKey combines window + dimensions so react-query keys are cheap.\n const filterKey = useMemo(() => `${windowKey}|${dimensionalFilterKey}`, [windowKey, dimensionalFilterKey]);\n\n return { datePreset, customRange, timestamp, filters, dimensionalFilter, filterKey };\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMetricsFilters } from './use-metrics-filters';\n\n/** Total Agent Runs — count of agent duration metric observations */\nexport function useAgentRunsKpiMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'agent-runs-kpi', filterKey],\n queryFn: () =>\n client.getMetricAggregate({\n name: ['mastra_agent_duration_ms'],\n aggregation: 'count',\n filters,\n comparePeriod: 'previous_period',\n }),\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMetricsFilters } from './use-metrics-filters';\n\n/** Total Model Cost — sum of estimatedCost across input and output token metrics */\nexport function useModelCostKpiMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'model-cost-kpi', filterKey],\n queryFn: async () => {\n const res = await client.getMetricAggregate({\n name: ['mastra_model_total_input_tokens', 'mastra_model_total_output_tokens'],\n aggregation: 'sum',\n filters,\n comparePeriod: 'previous_period',\n });\n\n return {\n cost: res.estimatedCost ?? null,\n costUnit: res.costUnit ?? null,\n previousCost: res.previousEstimatedCost ?? null,\n costChangePercent: res.costChangePercent ?? null,\n };\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMetricsFilters } from './use-metrics-filters';\n\n/** Total Tokens — sum of all input + output tokens */\nexport function useTotalTokensKpiMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'total-tokens-kpi', filterKey],\n queryFn: async () => {\n const [input, output] = await Promise.all([\n client.getMetricAggregate({\n name: ['mastra_model_total_input_tokens'],\n aggregation: 'sum',\n filters,\n comparePeriod: 'previous_period',\n }),\n client.getMetricAggregate({\n name: ['mastra_model_total_output_tokens'],\n aggregation: 'sum',\n filters,\n comparePeriod: 'previous_period',\n }),\n ]);\n\n const hasCurrent = input.value != null || output.value != null;\n const hasPrevious = input.previousValue != null || output.previousValue != null;\n const value = (input.value ?? 0) + (output.value ?? 0);\n const previousValue = (input.previousValue ?? 0) + (output.previousValue ?? 0);\n const changePercent = hasPrevious && previousValue > 0 ? ((value - previousValue) / previousValue) * 100 : null;\n\n return {\n value: hasCurrent ? value : null,\n previousValue: hasPrevious ? previousValue : null,\n changePercent,\n };\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { formatCompact } from '../components/metrics-utils';\nimport { useMetricsFilters } from './use-metrics-filters';\n\nexport interface ModelUsageRow {\n model: string;\n input: string;\n output: string;\n cacheRead: string;\n cacheWrite: string;\n cost: number | null;\n costUnit: string | null;\n}\n\nexport function useModelUsageCostMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'model-usage-cost', filterKey],\n queryFn: async (): Promise<ModelUsageRow[]> => {\n const [inputRes, outputRes, cacheReadRes, cacheWriteRes] = await Promise.all(\n (\n [\n 'mastra_model_total_input_tokens',\n 'mastra_model_total_output_tokens',\n 'mastra_model_input_cache_read_tokens',\n 'mastra_model_input_cache_write_tokens',\n ] as const\n ).map(name =>\n client.getMetricBreakdown({\n name: [name],\n groupBy: ['model'],\n aggregation: 'sum',\n orderDirection: 'DESC',\n filters,\n }),\n ),\n );\n\n type ModelEntry = {\n input: number;\n output: number;\n cacheRead: number;\n cacheWrite: number;\n cost: number | null;\n costUnit: string | null;\n };\n\n const modelMap = new Map<string, ModelEntry>();\n\n const ensureModel = (model: string): ModelEntry => {\n if (!modelMap.has(model)) {\n modelMap.set(model, { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: null, costUnit: null });\n }\n return modelMap.get(model)!;\n };\n\n // total_input/total_output estimatedCost already rolls up cache + other detail\n // costs. The cache breakdowns are kept for their token counts only.\n const addCost = (entry: ModelEntry, group: { estimatedCost?: number | null; costUnit?: string | null }) => {\n if (group.estimatedCost != null) {\n entry.cost = (entry.cost ?? 0) + group.estimatedCost;\n if (group.costUnit) entry.costUnit = group.costUnit;\n }\n };\n\n for (const group of inputRes.groups) {\n const m = group.dimensions.model ?? 'unknown';\n const entry = ensureModel(m);\n entry.input = group.value;\n addCost(entry, group);\n }\n for (const group of outputRes.groups) {\n const m = group.dimensions.model ?? 'unknown';\n const entry = ensureModel(m);\n entry.output = group.value;\n addCost(entry, group);\n }\n for (const group of cacheReadRes.groups) {\n const m = group.dimensions.model ?? 'unknown';\n const entry = ensureModel(m);\n entry.cacheRead = group.value;\n }\n for (const group of cacheWriteRes.groups) {\n const m = group.dimensions.model ?? 'unknown';\n const entry = ensureModel(m);\n entry.cacheWrite = group.value;\n }\n\n return Array.from(modelMap.entries())\n .map(([model, vals]) => ({\n model,\n input: formatCompact(vals.input),\n output: formatCompact(vals.output),\n cacheRead: formatCompact(vals.cacheRead),\n cacheWrite: formatCompact(vals.cacheWrite),\n cost: vals.cost,\n costUnit: vals.costUnit,\n }))\n .sort((a, b) => a.model.localeCompare(b.model));\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMetricsFilters } from './use-metrics-filters';\n\nexport interface LatencyPoint {\n [key: string]: unknown;\n time: string;\n /** Raw timestamp (ms since epoch) for the bucket this point represents.\n * Used by drilldown clicks to compute a narrow time window. */\n tsMs: number;\n p50: number;\n p95: number;\n}\n\nexport const LATENCY_INTERVAL: '1h' = '1h';\n\nasync function fetchPercentiles(\n client: ReturnType<typeof useMastraClient>,\n metricName: string,\n filters: Record<string, unknown>,\n): Promise<LatencyPoint[]> {\n const res = await client.getMetricPercentiles({\n name: metricName,\n percentiles: [0.5, 0.95],\n interval: LATENCY_INTERVAL,\n filters,\n });\n\n const p50Series = res.series.find(s => s.percentile === 0.5);\n const p95Series = res.series.find(s => s.percentile === 0.95);\n\n if (!p50Series || !p95Series) return [];\n\n const p95Map = new Map(p95Series.points.map(p => [new Date(p.timestamp).getTime(), p.value]));\n\n return p50Series.points.map(p => {\n const ts = new Date(p.timestamp);\n const tsMs = ts.getTime();\n return {\n time: ts.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', hour12: false }),\n tsMs,\n p50: Math.round(p.value),\n p95: Math.round(p95Map.get(tsMs) ?? 0),\n };\n });\n}\n\nexport function useLatencyMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'latency', filterKey],\n queryFn: async () => {\n const [agentData, workflowData, toolData] = await Promise.all([\n fetchPercentiles(client, 'mastra_agent_duration_ms', filters),\n fetchPercentiles(client, 'mastra_workflow_duration_ms', filters),\n fetchPercentiles(client, 'mastra_tool_duration_ms', filters),\n ]);\n return { agentData, workflowData, toolData, interval: LATENCY_INTERVAL };\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMetricsFilters } from './use-metrics-filters';\n\nexport interface VolumeRow {\n name: string;\n completed: number;\n errors: number;\n}\n\nasync function fetchVolume(\n client: ReturnType<typeof useMastraClient>,\n metricName: string,\n filters: Record<string, unknown>,\n): Promise<VolumeRow[]> {\n const res = await client.getMetricBreakdown({\n name: [metricName],\n groupBy: ['entityName', 'status'],\n aggregation: 'count',\n orderDirection: 'DESC',\n filters,\n });\n\n const map = new Map<string, { completed: number; errors: number }>();\n\n for (const group of res.groups) {\n const name = group.dimensions.entityName ?? 'unknown';\n const status = group.dimensions.status ?? 'ok';\n if (!map.has(name)) {\n map.set(name, { completed: 0, errors: 0 });\n }\n const entry = map.get(name)!;\n if (status === 'error') {\n entry.errors += group.value;\n } else {\n entry.completed += group.value;\n }\n }\n\n return Array.from(map.entries())\n .map(([name, vals]) => ({ name, ...vals }))\n .sort((a, b) => b.completed + b.errors - (a.completed + a.errors));\n}\n\nexport function useTraceVolumeMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'trace-volume', filterKey],\n queryFn: async () => {\n const [agentData, workflowData, toolData] = await Promise.all([\n fetchVolume(client, 'mastra_agent_duration_ms', filters),\n fetchVolume(client, 'mastra_workflow_duration_ms', filters),\n fetchVolume(client, 'mastra_tool_duration_ms', filters),\n ]);\n return { agentData, workflowData, toolData };\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMetricsFilters } from './use-metrics-filters';\n\nexport interface ScorerSummary {\n scorer: string;\n avg: number;\n min: number;\n max: number;\n count: number;\n}\n\nexport interface ScoresOverTimePoint {\n time: string;\n [scorer: string]: string | number;\n}\n\nexport function useScoresMetrics() {\n const client = useMastraClient();\n const { datePreset, customRange, timestamp } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'scores-card', datePreset, customRange],\n queryFn: async () => {\n const filters = {\n timestamp: { start: timestamp.start, end: timestamp.end },\n };\n\n const scorersMap = await client.listScorers();\n const scorerIds = Object.keys(scorersMap ?? {});\n\n if (scorerIds.length === 0) {\n return { summaryData: [], overTimeData: [], scorerNames: [], avgScore: null };\n }\n\n // Fetch summary stats first to determine which scorers have data\n const summaryResults = await Promise.all(\n scorerIds.map(async scorerId => {\n const [avg, min, max, count] = await Promise.all([\n client.getScoreAggregate({ scorerId, aggregation: 'avg', filters }),\n client.getScoreAggregate({ scorerId, aggregation: 'min', filters }),\n client.getScoreAggregate({ scorerId, aggregation: 'max', filters }),\n client.getScoreAggregate({ scorerId, aggregation: 'count', filters }),\n ]);\n return {\n scorer: scorerId,\n avg: avg.value ?? 0,\n min: min.value ?? 0,\n max: max.value ?? 0,\n count: count.value ?? 0,\n };\n }),\n );\n\n const summaryData: ScorerSummary[] = summaryResults.filter(s => s.count > 0);\n const scorerNames = summaryData.map(s => s.scorer);\n\n if (summaryData.length === 0) {\n return { summaryData: [], overTimeData: [], scorerNames: [], avgScore: null };\n }\n\n const totalWeighted = summaryData.reduce((s, d) => s + d.avg * d.count, 0);\n const totalCount = summaryData.reduce((s, d) => s + d.count, 0);\n const avgScore = totalCount ? Math.round((totalWeighted / totalCount) * 100) / 100 : 0;\n\n const interval = '1h';\n\n // Fetch hourly time series from the full period for active scorers\n const timeSeriesResults = await Promise.all(\n scorerNames.map(scorerId =>\n client.getScoreTimeSeries({\n scorerId,\n interval,\n aggregation: 'avg',\n filters,\n }),\n ),\n );\n\n // Collapse all days into a single 24-hour view (00:00–23:00).\n // For each hour-of-day, average the values across all days in the range.\n const hourBuckets = new Map<string, Map<string, { sum: number; count: number }>>();\n\n for (let i = 0; i < scorerNames.length; i++) {\n const scorerId = scorerNames[i];\n const series = timeSeriesResults[i]?.series ?? [];\n for (const s of series) {\n for (const point of s.points) {\n const ts = new Date(point.timestamp);\n const hourKey = ts.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n });\n if (!hourBuckets.has(hourKey)) {\n hourBuckets.set(hourKey, new Map());\n }\n const scorerMap = hourBuckets.get(hourKey)!;\n if (!scorerMap.has(scorerId)) {\n scorerMap.set(scorerId, { sum: 0, count: 0 });\n }\n const acc = scorerMap.get(scorerId)!;\n acc.sum += point.value;\n acc.count += 1;\n }\n }\n }\n\n // Build sorted 24h chart data\n const overTimeData: ScoresOverTimePoint[] = Array.from(hourBuckets.entries())\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([hourKey, scorerMap]) => {\n const point: ScoresOverTimePoint = { time: hourKey };\n for (const [scorerId, acc] of scorerMap) {\n point[scorerId] = +(acc.sum / acc.count).toFixed(2);\n }\n return point;\n });\n\n return {\n summaryData,\n overTimeData,\n scorerNames,\n avgScore,\n };\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMetricsFilters } from './use-metrics-filters';\n\nexport interface TokenUsageByAgentRow {\n name: string;\n total: number;\n input: number;\n output: number;\n cost: number | null;\n costUnit: string | null;\n}\n\nexport function useTokenUsageByAgentMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'token-usage-by-agent', filterKey],\n queryFn: async (): Promise<TokenUsageByAgentRow[]> => {\n const breakdownBase = {\n groupBy: ['entityName'],\n aggregation: 'sum' as const,\n orderDirection: 'DESC' as const,\n filters,\n };\n // total_input/total_output estimatedCost already rolls up cache + other detail costs.\n const [inputRes, outputRes] = await Promise.all([\n client.getMetricBreakdown({ ...breakdownBase, name: ['mastra_model_total_input_tokens'] }),\n client.getMetricBreakdown({ ...breakdownBase, name: ['mastra_model_total_output_tokens'] }),\n ]);\n\n type AgentEntry = { input: number; output: number; cost: number | null; costUnit: string | null };\n\n const agentMap = new Map<string, AgentEntry>();\n\n const ensure = (name: string): AgentEntry => {\n if (!agentMap.has(name)) {\n agentMap.set(name, { input: 0, output: 0, cost: null, costUnit: null });\n }\n return agentMap.get(name)!;\n };\n\n const addCost = (entry: AgentEntry, group: { estimatedCost?: number | null; costUnit?: string | null }) => {\n if (group.estimatedCost != null) {\n entry.cost = (entry.cost ?? 0) + group.estimatedCost;\n if (group.costUnit) entry.costUnit = group.costUnit;\n }\n };\n\n for (const group of inputRes.groups) {\n const name = group.dimensions.entityName ?? 'unknown';\n const entry = ensure(name);\n entry.input = group.value;\n addCost(entry, group);\n }\n for (const group of outputRes.groups) {\n const name = group.dimensions.entityName ?? 'unknown';\n const entry = ensure(name);\n entry.output = group.value;\n addCost(entry, group);\n }\n\n return Array.from(agentMap.entries())\n .map(([name, vals]) => ({\n name,\n input: vals.input,\n output: vals.output,\n total: vals.input + vals.output,\n cost: vals.cost,\n costUnit: vals.costUnit,\n }))\n .sort((a, b) => b.total - a.total);\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMetricsFilters } from './use-metrics-filters';\n\nexport type TokenUsageTimeSeriesInterval = '1h' | '1d';\n\nexport interface TokenTimelinePoint {\n time: string;\n tsMs: number;\n input: number;\n output: number;\n total: number;\n cost: number | null;\n costUnit: string | null;\n}\n\nexport interface TokenUsageTimeSeriesData {\n data: TokenTimelinePoint[];\n interval: TokenUsageTimeSeriesInterval;\n}\n\ntype TimeSeriesPoint = {\n timestamp: string | Date;\n value: number;\n estimatedCost?: number | null;\n};\n\ntype SeriesWithCost = {\n costUnit?: string | null;\n points: TimeSeriesPoint[];\n};\n\ntype TokenTimelineAccumulator = {\n tsMs: number;\n input: number;\n output: number;\n cost: number | null;\n costUnits: Set<string>;\n hasUnknownCostUnit: boolean;\n};\n\nfunction chooseTokenUsageInterval(\n datePreset: ReturnType<typeof useMetricsFilters>['datePreset'],\n): TokenUsageTimeSeriesInterval {\n return datePreset === '24h' ? '1h' : '1d';\n}\n\nfunction formatTime(ts: Date, interval: TokenUsageTimeSeriesInterval): string {\n if (interval === '1h') {\n return ts.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', hour12: false });\n }\n return ts.toLocaleDateString('en-US', { month: 'short', day: '2-digit' });\n}\n\nfunction addSeriesPoints(\n pointMap: Map<number, TokenTimelineAccumulator>,\n series: SeriesWithCost | undefined,\n key: 'input' | 'output',\n) {\n for (const point of series?.points ?? []) {\n const tsMs = new Date(point.timestamp).getTime();\n if (!Number.isFinite(tsMs)) continue;\n\n const existing = pointMap.get(tsMs) ?? {\n tsMs,\n input: 0,\n output: 0,\n cost: null,\n costUnits: new Set<string>(),\n hasUnknownCostUnit: false,\n };\n\n existing[key] += point.value;\n\n if (point.estimatedCost != null) {\n existing.cost = (existing.cost ?? 0) + point.estimatedCost;\n if (series?.costUnit) {\n existing.costUnits.add(series.costUnit);\n } else {\n existing.hasUnknownCostUnit = true;\n }\n }\n\n pointMap.set(tsMs, existing);\n }\n}\n\nfunction toCostUnit(entry: TokenTimelineAccumulator): string | null {\n if (entry.cost == null || entry.hasUnknownCostUnit || entry.costUnits.size !== 1) return null;\n return [...entry.costUnits][0] ?? null;\n}\n\nexport function useTokenUsageTimeSeries() {\n const client = useMastraClient();\n const { datePreset, filters, filterKey } = useMetricsFilters();\n const interval = chooseTokenUsageInterval(datePreset);\n\n return useQuery({\n queryKey: ['metrics', 'token-usage-timeseries', filterKey, interval],\n queryFn: async (): Promise<TokenUsageTimeSeriesData> => {\n const [inputRes, outputRes] = await Promise.all([\n client.getMetricTimeSeries({\n name: ['mastra_model_total_input_tokens'],\n interval,\n aggregation: 'sum',\n filters,\n }),\n client.getMetricTimeSeries({\n name: ['mastra_model_total_output_tokens'],\n interval,\n aggregation: 'sum',\n filters,\n }),\n ]);\n\n const pointMap = new Map<number, TokenTimelineAccumulator>();\n addSeriesPoints(pointMap, inputRes.series[0], 'input');\n addSeriesPoints(pointMap, outputRes.series[0], 'output');\n\n const data = Array.from(pointMap.values())\n .sort((a, b) => a.tsMs - b.tsMs)\n .map(point => {\n const ts = new Date(point.tsMs);\n return {\n time: formatTime(ts, interval),\n tsMs: point.tsMs,\n input: point.input,\n output: point.output,\n total: point.input + point.output,\n cost: point.cost,\n costUnit: toCostUnit(point),\n };\n });\n\n return { data, interval };\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\n\nimport { useMetricsFilters } from './use-metrics-filters';\n\n/** Active Threads — number of distinct thread IDs observed in agent runs.\n * Uses approximate `count_distinct` (HyperLogLog on ClickHouse,\n * `approx_count_distinct` on DuckDB) so the query stays fast even on\n * tens of millions of rows. */\nexport function useActiveThreadsKpiMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'active-threads-kpi', filterKey],\n queryFn: () =>\n client.getMetricAggregate({\n name: ['mastra_agent_duration_ms'],\n aggregation: 'count_distinct',\n distinctColumn: 'threadId' as never,\n filters,\n comparePeriod: 'previous_period',\n }),\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\n\nimport { useMetricsFilters } from './use-metrics-filters';\n\n/** Active Resources — number of distinct resource IDs observed in agent runs.\n * Uses approximate `count_distinct` (HyperLogLog on ClickHouse,\n * `approx_count_distinct` on DuckDB) so the query stays fast even on\n * tens of millions of rows. */\nexport function useActiveResourcesKpiMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'active-resources-kpi', filterKey],\n queryFn: () =>\n client.getMetricAggregate({\n name: ['mastra_agent_duration_ms'],\n aggregation: 'count_distinct',\n distinctColumn: 'resourceId' as never,\n filters,\n comparePeriod: 'previous_period',\n }),\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\n\nimport { useMetricsFilters } from './use-metrics-filters';\n\nexport interface ActiveThreadRow {\n threadId: string;\n resourceId: string | null;\n runs: number;\n tokens: number;\n cost: number | null;\n costUnit: string | null;\n}\n\nconst TOP_N = 20;\n\n/** Top Active Threads — the threads with the most agent runs in the selected\n * range. Server-side TopK (`ORDER BY value DESC LIMIT 20`) is required so the\n * query never returns the full thread set when cardinality is in the millions.\n *\n * Tokens + cost are joined in from parallel breakdowns on the same `threadId`\n * grouping so we don't need any new backend aggregation support. */\nexport function useTopActiveThreadsMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'top-active-threads', filterKey],\n queryFn: async (): Promise<ActiveThreadRow[]> => {\n const breakdownBase = {\n groupBy: ['threadId', 'resourceId'],\n orderDirection: 'DESC' as const,\n filters,\n };\n\n const [runsRes, inputRes, outputRes] = await Promise.all([\n client.getMetricBreakdown({\n ...breakdownBase,\n name: ['mastra_agent_duration_ms'],\n aggregation: 'count',\n limit: TOP_N,\n }),\n // Token breakdowns use the same groupBy and a server-side TopK so the\n // response stays bounded even when the underlying thread set has very\n // high cardinality. Threads that are top-N by runs but not by tokens\n // will display 0 tokens (an acceptable approximation in exchange for\n // a bounded query).\n client.getMetricBreakdown({\n ...breakdownBase,\n name: ['mastra_model_total_input_tokens'],\n aggregation: 'sum',\n limit: TOP_N,\n }),\n client.getMetricBreakdown({\n ...breakdownBase,\n name: ['mastra_model_total_output_tokens'],\n aggregation: 'sum',\n limit: TOP_N,\n }),\n ]);\n\n type Entry = { tokens: number; cost: number | null; costUnit: string | null };\n const byThread = new Map<string, Entry>();\n\n const ensure = (threadId: string): Entry => {\n if (!byThread.has(threadId)) byThread.set(threadId, { tokens: 0, cost: null, costUnit: null });\n return byThread.get(threadId)!;\n };\n\n const foldTokens = (groups: typeof inputRes.groups) => {\n for (const group of groups) {\n const threadId = group.dimensions.threadId;\n if (!threadId) continue;\n const entry = ensure(threadId as string);\n entry.tokens += group.value;\n if (group.estimatedCost != null) {\n entry.cost = (entry.cost ?? 0) + group.estimatedCost;\n if (group.costUnit) entry.costUnit = group.costUnit;\n }\n }\n };\n foldTokens(inputRes.groups);\n foldTokens(outputRes.groups);\n\n return runsRes.groups\n .filter(group => !!group.dimensions.threadId)\n .map(group => {\n const threadId = group.dimensions.threadId as string;\n const extra = byThread.get(threadId);\n return {\n threadId,\n resourceId: (group.dimensions.resourceId as string | undefined) ?? null,\n runs: group.value,\n tokens: extra?.tokens ?? 0,\n cost: extra?.cost ?? null,\n costUnit: extra?.costUnit ?? null,\n };\n });\n },\n });\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\n\nimport { useMetricsFilters } from './use-metrics-filters';\n\nexport interface ResourceThreadsRow {\n resourceId: string;\n threadCount: number;\n tokens: number;\n cost: number | null;\n costUnit: string | null;\n}\n\nconst TOP_N = 20;\n\n/** Top Resources by Thread Count — the resources with the most distinct threads\n * in the selected range. Uses `count_distinct(threadId)` per `resourceId`,\n * with server-side TopK (`ORDER BY value DESC LIMIT 20`).\n *\n * Tokens + cost are joined in from parallel breakdowns on `resourceId` so the\n * table can show cost/usage without a separate backend aggregation. */\nexport function useTopResourcesByThreadsMetrics() {\n const client = useMastraClient();\n const { filters, filterKey } = useMetricsFilters();\n\n return useQuery({\n queryKey: ['metrics', 'top-resources-by-threads', filterKey],\n queryFn: async (): Promise<ResourceThreadsRow[]> => {\n const breakdownBase = {\n groupBy: ['resourceId'],\n orderDirection: 'DESC' as const,\n filters,\n };\n\n const [threadsRes, inputRes, outputRes] = await Promise.all([\n client.getMetricBreakdown({\n ...breakdownBase,\n name: ['mastra_agent_duration_ms'],\n aggregation: 'count_distinct',\n distinctColumn: 'threadId' as never,\n limit: TOP_N,\n }),\n // Token breakdowns use the same groupBy and a server-side TopK so the\n // response stays bounded even when the underlying resource set has very\n // high cardinality. Resources that are top-N by thread count but not by\n // tokens will display 0 tokens (an acceptable approximation in exchange\n // for a bounded query).\n client.getMetricBreakdown({\n ...breakdownBase,\n name: ['mastra_model_total_input_tokens'],\n aggregation: 'sum',\n limit: TOP_N,\n }),\n client.getMetricBreakdown({\n ...breakdownBase,\n name: ['mastra_model_total_output_tokens'],\n aggregation: 'sum',\n limit: TOP_N,\n }),\n ]);\n\n type Entry = { tokens: number; cost: number | null; costUnit: string | null };\n const byResource = new Map<string, Entry>();\n\n const ensure = (resourceId: string): Entry => {\n if (!byResource.has(resourceId)) byResource.set(resourceId, { tokens: 0, cost: null, costUnit: null });\n return byResource.get(resourceId)!;\n };\n\n const foldTokens = (groups: typeof inputRes.groups) => {\n for (const group of groups) {\n const resourceId = group.dimensions.resourceId;\n if (!resourceId) continue;\n const entry = ensure(resourceId as string);\n entry.tokens += group.value;\n if (group.estimatedCost != null) {\n entry.cost = (entry.cost ?? 0) + group.estimatedCost;\n if (group.costUnit) entry.costUnit = group.costUnit;\n }\n }\n };\n foldTokens(inputRes.groups);\n foldTokens(outputRes.groups);\n\n return threadsRes.groups\n .filter(group => !!group.dimensions.resourceId)\n .map(group => {\n const resourceId = group.dimensions.resourceId as string;\n const extra = byResource.get(resourceId);\n return {\n resourceId,\n threadCount: group.value,\n tokens: extra?.tokens ?? 0,\n cost: extra?.cost ?? null,\n costUnit: extra?.costUnit ?? null,\n };\n });\n },\n });\n}\n","import { EntityType } from '@mastra/core/observability';\nimport type { ListLogsArgs } from '@mastra/core/storage';\nimport type { LogLevel } from './types';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\nexport type LogsDatePreset = 'all' | 'last-24h' | 'last-3d' | 'last-7d' | 'last-14d' | 'last-30d' | 'custom';\n\nexport type LogsEntityOptions = { label: string; entityType: EntityType };\n\nexport const LOGS_ROOT_ENTITY_TYPES = {\n AGENT: EntityType.AGENT,\n WORKFLOW: EntityType.WORKFLOW_RUN,\n SCORER: EntityType.SCORER,\n INGEST: EntityType.RAG_INGESTION,\n} as const;\n\nexport const LOGS_ROOT_ENTITY_TYPE_OPTIONS = [\n { label: 'Agent', entityType: LOGS_ROOT_ENTITY_TYPES.AGENT },\n { label: 'Workflow', entityType: LOGS_ROOT_ENTITY_TYPES.WORKFLOW },\n { label: 'Scorer', entityType: LOGS_ROOT_ENTITY_TYPES.SCORER },\n { label: 'Ingest', entityType: LOGS_ROOT_ENTITY_TYPES.INGEST },\n] as const satisfies readonly LogsEntityOptions[];\n\nexport const LOG_LEVEL_VALUES: readonly LogLevel[] = ['debug', 'info', 'warn', 'error', 'fatal'] as const;\n\nexport const LOG_LEVEL_OPTIONS = [\n { label: 'Debug', value: 'debug' },\n { label: 'Info', value: 'info' },\n { label: 'Warn', value: 'warn' },\n { label: 'Error', value: 'error' },\n { label: 'Fatal', value: 'fatal' },\n] as const satisfies readonly { label: string; value: LogLevel }[];\n\nexport const LOGS_ROOT_ENTITY_TYPE_PARAM = 'rootEntityType';\nexport const LOGS_DATE_PRESET_PARAM = 'datePreset';\nexport const LOGS_DATE_FROM_PARAM = 'dateFrom';\nexport const LOGS_DATE_TO_PARAM = 'dateTo';\n\nexport const LOGS_DATE_PRESET_VALUES = new Set<LogsDatePreset>([\n 'all',\n 'last-24h',\n 'last-3d',\n 'last-7d',\n 'last-14d',\n 'last-30d',\n 'custom',\n]);\n\n/**\n * Generic filter URL params (filterX keys). Fields that carry multiple values\n * (tags, level) use repeated params; everything else is a single string.\n */\nexport const LOGS_PROPERTY_FILTER_PARAM_BY_FIELD = {\n level: 'filterLevel',\n tags: 'filterTags',\n entityName: 'filterEntityName',\n traceId: 'filterTraceId',\n spanId: 'filterSpanId',\n runId: 'filterRunId',\n threadId: 'filterThreadId',\n sessionId: 'filterSessionId',\n requestId: 'filterRequestId',\n resourceId: 'filterResourceId',\n userId: 'filterUserId',\n organizationId: 'filterOrganizationId',\n serviceName: 'filterServiceName',\n environment: 'filterEnvironment',\n experimentId: 'filterExperimentId',\n} as const;\n\nexport const LOGS_PROPERTY_FILTER_FIELD_IDS = Object.keys(LOGS_PROPERTY_FILTER_PARAM_BY_FIELD) as Array<\n keyof typeof LOGS_PROPERTY_FILTER_PARAM_BY_FIELD\n>;\n\n/** Fields stored as repeated URL params (value is string[]). */\nconst LOGS_ARRAY_FIELD_IDS = new Set<string>(['tags']);\n\nexport const DEFAULT_LOGS_FILTERS_STORAGE_KEY = 'mastra:logs:saved-filters';\n\nexport function saveLogsFiltersToStorage(\n params: URLSearchParams,\n storageKey: string = DEFAULT_LOGS_FILTERS_STORAGE_KEY,\n): void {\n const serialized = getPreservedLogsFilterParams(params);\n const preset = params.get(LOGS_DATE_PRESET_PARAM);\n if (preset) serialized.set(LOGS_DATE_PRESET_PARAM, preset);\n const from = params.get(LOGS_DATE_FROM_PARAM);\n if (from) serialized.set(LOGS_DATE_FROM_PARAM, from);\n const to = params.get(LOGS_DATE_TO_PARAM);\n if (to) serialized.set(LOGS_DATE_TO_PARAM, to);\n\n try {\n localStorage.setItem(storageKey, serialized.toString());\n } catch {\n // localStorage may be unavailable (private mode / quota) — silently skip.\n }\n}\n\nexport function clearSavedLogsFilters(storageKey: string = DEFAULT_LOGS_FILTERS_STORAGE_KEY): void {\n try {\n localStorage.removeItem(storageKey);\n } catch {\n // ignore\n }\n}\n\nexport function loadLogsFiltersFromStorage(\n storageKey: string = DEFAULT_LOGS_FILTERS_STORAGE_KEY,\n): URLSearchParams | null {\n try {\n const raw = localStorage.getItem(storageKey);\n if (!raw) return null;\n const parsed = new URLSearchParams(raw);\n return parsed.toString() ? parsed : null;\n } catch {\n return null;\n }\n}\n\nexport function hasAnyLogsFilterParams(params: URLSearchParams): boolean {\n if (params.has(LOGS_DATE_PRESET_PARAM)) return true;\n if (params.has(LOGS_DATE_FROM_PARAM)) return true;\n if (params.has(LOGS_DATE_TO_PARAM)) return true;\n if (params.has(LOGS_ROOT_ENTITY_TYPE_PARAM)) return true;\n for (const fieldId of LOGS_PROPERTY_FILTER_FIELD_IDS) {\n if (params.has(LOGS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId])) return true;\n }\n return false;\n}\n\nexport function createLogsPropertyFilterFields({\n availableTags,\n availableRootEntityNames,\n availableServiceNames,\n availableEnvironments,\n loading,\n}: {\n availableTags: string[];\n availableRootEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n loading?: {\n tags?: boolean;\n entityNames?: boolean;\n serviceNames?: boolean;\n environments?: boolean;\n };\n}): PropertyFilterField[] {\n const fields: PropertyFilterField[] = [\n {\n id: 'rootEntityType',\n label: 'Primitive Type',\n kind: 'pick-multi',\n searchable: false,\n options: LOGS_ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ label: o.label, value: o.entityType })),\n placeholder: 'Choose entity type',\n emptyText: 'No entity types.',\n },\n {\n id: 'entityName',\n label: 'Primitive Name',\n kind: 'pick-multi',\n options: availableRootEntityNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose entity names',\n emptyText: 'No entity names found.',\n isLoading: loading?.entityNames,\n },\n {\n id: 'level',\n label: 'Level',\n kind: 'pick-multi',\n searchable: false,\n options: LOG_LEVEL_OPTIONS.map(o => ({ label: o.label, value: o.value })),\n placeholder: 'Choose level',\n emptyText: 'No levels.',\n },\n {\n id: 'tags',\n label: 'Tags',\n kind: 'pick-multi',\n multi: true,\n options: availableTags.map(tag => ({ label: tag, value: tag })),\n placeholder: 'Choose tags',\n emptyText: 'No tags found.',\n isLoading: loading?.tags,\n },\n {\n id: 'serviceName',\n label: 'Service Name',\n kind: 'pick-multi',\n options: availableServiceNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose service names',\n emptyText: 'No service names found.',\n isLoading: loading?.serviceNames,\n },\n {\n id: 'environment',\n label: 'Environment',\n kind: 'pick-multi',\n options: availableEnvironments.map(env => ({ label: env, value: env })),\n placeholder: 'Choose environments',\n emptyText: 'No environments found.',\n isLoading: loading?.environments,\n },\n { id: 'traceId', label: 'Trace ID', kind: 'text' },\n { id: 'spanId', label: 'Span ID', kind: 'text' },\n { id: 'runId', label: 'Run ID', kind: 'text' },\n { id: 'threadId', label: 'Thread ID', kind: 'text' },\n { id: 'sessionId', label: 'Session ID', kind: 'text' },\n { id: 'requestId', label: 'Request ID', kind: 'text' },\n { id: 'resourceId', label: 'Resource ID', kind: 'text' },\n { id: 'userId', label: 'User ID', kind: 'text' },\n { id: 'organizationId', label: 'Organization ID', kind: 'text' },\n { id: 'experimentId', label: 'Experiment ID', kind: 'text' },\n ];\n const byLabel = (a: PropertyFilterField, b: PropertyFilterField) => a.label.localeCompare(b.label);\n const pickMulti = fields.filter(f => f.kind === 'pick-multi').sort(byLabel);\n const text = fields.filter(f => f.kind === 'text').sort(byLabel);\n return [...pickMulti, ...text];\n}\n\n/**\n * Read filter tokens from URL search params preserving the order in which\n * each filter was first added. Fields in LOGS_ARRAY_FIELD_IDS are read as\n * string[]; an empty sentinel (`filterX=`) keeps the pill alive post-Reset.\n */\nexport function getLogsPropertyFilterTokens(searchParams: URLSearchParams): PropertyFilterToken[] {\n const tokens: PropertyFilterToken[] = [];\n\n const paramToFieldId = new Map<string, string>([[LOGS_ROOT_ENTITY_TYPE_PARAM, 'rootEntityType']]);\n for (const fieldId of LOGS_PROPERTY_FILTER_FIELD_IDS) {\n paramToFieldId.set(LOGS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId], fieldId);\n }\n\n const seen = new Set<string>();\n for (const [paramName] of searchParams.entries()) {\n const fieldId = paramToFieldId.get(paramName);\n if (!fieldId || seen.has(fieldId)) continue;\n seen.add(fieldId);\n\n if (LOGS_ARRAY_FIELD_IDS.has(fieldId)) {\n const raw = searchParams.getAll(paramName);\n if (raw.length === 0) continue;\n tokens.push({ fieldId, value: raw.filter(Boolean) });\n continue;\n }\n\n const value = searchParams.get(paramName);\n if (value !== null) tokens.push({ fieldId, value });\n }\n\n return tokens;\n}\n\nexport function getPreservedLogsFilterParams(searchParams: URLSearchParams) {\n const next = new URLSearchParams();\n\n const rootEntityType = searchParams.get(LOGS_ROOT_ENTITY_TYPE_PARAM);\n if (rootEntityType) next.set(LOGS_ROOT_ENTITY_TYPE_PARAM, rootEntityType);\n\n for (const fieldId of LOGS_PROPERTY_FILTER_FIELD_IDS) {\n const param = LOGS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId];\n if (LOGS_ARRAY_FIELD_IDS.has(fieldId)) {\n for (const value of searchParams.getAll(param)) {\n next.append(param, value);\n }\n continue;\n }\n\n const value = searchParams.get(param);\n if (value) next.set(param, value);\n }\n\n return next;\n}\n\nexport function applyLogsPropertyFilterTokens(params: URLSearchParams, tokens: PropertyFilterToken[]) {\n params.delete(LOGS_ROOT_ENTITY_TYPE_PARAM);\n for (const fieldId of LOGS_PROPERTY_FILTER_FIELD_IDS) {\n params.delete(LOGS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n\n for (const token of tokens) {\n if (token.fieldId === 'rootEntityType' && typeof token.value === 'string') {\n params.set(LOGS_ROOT_ENTITY_TYPE_PARAM, token.value);\n continue;\n }\n\n const param =\n LOGS_PROPERTY_FILTER_PARAM_BY_FIELD[token.fieldId as keyof typeof LOGS_PROPERTY_FILTER_PARAM_BY_FIELD];\n if (!param) continue;\n\n if (LOGS_ARRAY_FIELD_IDS.has(token.fieldId) && Array.isArray(token.value)) {\n if (token.value.length === 0) {\n // Empty sentinel — keeps the pill visible after Reset.\n params.append(param, '');\n } else {\n for (const value of token.value) {\n params.append(param, value);\n }\n }\n continue;\n }\n\n if (typeof token.value === 'string') {\n // Persist empty / 'Any' values too so neutralized-but-still-visible pills\n // survive URL round-trips. buildLogsListFilters skips these on the API\n // query side so neutrals never reach the backend.\n params.set(param, token.value.trim());\n }\n }\n}\n\nexport function buildLogsListFilters({\n rootEntityType,\n dateFrom,\n dateTo,\n tokens,\n}: {\n rootEntityType?: string;\n dateFrom?: Date;\n dateTo?: Date;\n tokens: PropertyFilterToken[];\n}): ListLogsArgs['filters'] {\n const filters: NonNullable<ListLogsArgs['filters']> = {};\n\n if (rootEntityType) {\n filters.rootEntityType = rootEntityType as NonNullable<ListLogsArgs['filters']>['rootEntityType'];\n }\n\n if (dateFrom || dateTo) {\n filters.timestamp = {\n ...(dateFrom ? { start: dateFrom } : {}),\n ...(dateTo ? { end: dateTo } : {}),\n };\n }\n\n for (const token of tokens) {\n if (token.fieldId === 'tags') {\n if (Array.isArray(token.value) && token.value.length > 0) {\n filters.tags = token.value;\n } else if (typeof token.value === 'string' && token.value.trim()) {\n filters.tags = [token.value.trim()];\n }\n continue;\n }\n\n if (token.fieldId === 'level') {\n // Single-select only — the server's `level` union (single LogLevel or\n // array) can't round-trip as a JSON-string array through the query-param\n // schema wrapper, so we send a single enum value. \"Any\" = no filter.\n if (typeof token.value === 'string' && token.value.trim() && token.value !== 'Any') {\n filters.level = token.value as LogLevel;\n }\n continue;\n }\n\n if (typeof token.value !== 'string') continue;\n // Skip empty-string tokens (unfilled pending filters) and 'Any'\n // (pick-multi single-select neutral state) so neutrals never reach the\n // backend.\n if (!token.value.trim()) continue;\n if (token.value === 'Any') continue;\n\n switch (token.fieldId) {\n case 'entityName':\n filters.rootEntityName = token.value;\n break;\n case 'traceId':\n filters.traceId = token.value;\n break;\n case 'spanId':\n filters.spanId = token.value;\n break;\n case 'runId':\n filters.runId = token.value;\n break;\n case 'threadId':\n filters.threadId = token.value;\n break;\n case 'sessionId':\n filters.sessionId = token.value;\n break;\n case 'requestId':\n filters.requestId = token.value;\n break;\n case 'resourceId':\n filters.resourceId = token.value;\n break;\n case 'userId':\n filters.userId = token.value;\n break;\n case 'organizationId':\n filters.organizationId = token.value;\n break;\n case 'serviceName':\n filters.serviceName = token.value;\n break;\n case 'environment':\n filters.environment = token.value;\n break;\n case 'experimentId':\n filters.experimentId = token.value;\n break;\n default:\n break;\n }\n }\n\n return filters;\n}\n\n/**\n * \"Clear\" semantics for the logs toolbar: keep all filter pills but neutralize each value.\n * '' for text fields, 'Any' for single-select pick-multi, [] for multi-select pick-multi.\n * Date range is intentionally NOT touched here — that's a separate concern.\n */\nexport function neutralizeLogsFilterTokens(\n filterFields: PropertyFilterField[],\n filterTokens: PropertyFilterToken[],\n): PropertyFilterToken[] {\n return filterTokens.map(token => {\n const field = filterFields.find(f => f.id === token.fieldId);\n if (!field) return token;\n if (field.kind === 'text') return { fieldId: token.fieldId, value: '' };\n if (field.kind === 'pick-multi') {\n return field.multi ? { fieldId: token.fieldId, value: [] } : { fieldId: token.fieldId, value: 'Any' };\n }\n return token;\n });\n}\n","import { EntityType } from '@mastra/core/observability';\nimport type { ListTracesArgs } from '@mastra/core/storage';\nimport type { TraceDatePreset } from './types';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\nexport type EntityOptions = { label: string; entityType: EntityType };\n\nexport const ROOT_ENTITY_TYPES = {\n AGENT: EntityType.AGENT,\n WORKFLOW: EntityType.WORKFLOW_RUN,\n SCORER: EntityType.SCORER,\n INGEST: EntityType.RAG_INGESTION,\n} as const;\n\nexport const ROOT_ENTITY_TYPE_OPTIONS = [\n { label: 'Agent', entityType: ROOT_ENTITY_TYPES.AGENT },\n { label: 'Workflow', entityType: ROOT_ENTITY_TYPES.WORKFLOW },\n { label: 'Scorer', entityType: ROOT_ENTITY_TYPES.SCORER },\n { label: 'Ingest', entityType: ROOT_ENTITY_TYPES.INGEST },\n] as const satisfies readonly EntityOptions[];\n\nexport type TraceStatusFilter = 'running' | 'success' | 'error';\n\nexport const TRACE_STATUS_OPTIONS = [\n { label: 'Running', value: 'running' },\n { label: 'Success', value: 'success' },\n { label: 'Error', value: 'error' },\n] as const satisfies readonly { label: string; value: TraceStatusFilter }[];\n\n/** Field ids for \"synthetic\" filter entries — they live in dedicated URL params\n * rather than the generic `filter*` set, but appear as rows in the Filter\n * popover so users can manage all filters from one place. */\nexport const TRACE_SYNTHETIC_FILTER_FIELD_IDS = ['rootEntityType', 'status'] as const;\n\nexport const TRACE_ROOT_ENTITY_TYPE_PARAM = 'rootEntityType';\nexport const TRACE_STATUS_PARAM = 'status';\nexport const TRACE_LIST_MODE_PARAM = 'listMode';\n/** Branch-mode only: identifies the anchor span that defines the displayed subtree.\n * Stable across intra-panel span navigation (which only changes `spanId`). */\nexport const TRACE_ANCHOR_SPAN_ID_PARAM = 'anchorSpanId';\nexport const TRACE_LIST_MODE_VALUES = new Set(['traces', 'branches'] as const);\nexport type TraceListMode = 'traces' | 'branches';\n\nexport const TRACE_LIST_MODE_OPTIONS = [\n { label: 'Traces (default)', value: 'traces' },\n { label: 'Branches', value: 'branches' },\n] as const satisfies readonly { label: string; value: TraceListMode }[];\nexport const TRACE_DATE_PRESET_PARAM = 'datePreset';\nexport const TRACE_DATE_FROM_PARAM = 'dateFrom';\nexport const TRACE_DATE_TO_PARAM = 'dateTo';\n\nexport const TRACE_DATE_PRESET_VALUES = new Set<TraceDatePreset>([\n 'all',\n 'last-24h',\n 'last-3d',\n 'last-7d',\n 'last-14d',\n 'last-30d',\n 'custom',\n]);\n\nexport const TRACE_PROPERTY_FILTER_PARAM_BY_FIELD = {\n tags: 'filterTags',\n entityId: 'filterEntityId',\n entityName: 'filterEntityName',\n traceId: 'filterTraceId',\n runId: 'filterRunId',\n threadId: 'filterThreadId',\n sessionId: 'filterSessionId',\n requestId: 'filterRequestId',\n resourceId: 'filterResourceId',\n userId: 'filterUserId',\n organizationId: 'filterOrganizationId',\n serviceName: 'filterServiceName',\n environment: 'filterEnvironment',\n experimentId: 'filterExperimentId',\n} as const;\n\nexport const TRACE_PROPERTY_FILTER_FIELD_IDS = Object.keys(TRACE_PROPERTY_FILTER_PARAM_BY_FIELD) as Array<\n keyof typeof TRACE_PROPERTY_FILTER_PARAM_BY_FIELD\n>;\n\nexport const TRACE_STATUS_VALUES = new Set<TraceStatusFilter>(['running', 'success', 'error']);\n\nexport const DEFAULT_TRACE_FILTERS_STORAGE_KEY = 'mastra:traces:saved-filters';\n\n/** Serialize the filter-related URL params (date + rootEntityType + status +\n * generic filterX set) to localStorage so the user can restore them on next\n * visit. Throws no errors — storage being unavailable is fine. */\nexport function saveTraceFiltersToStorage(\n params: URLSearchParams,\n storageKey: string = DEFAULT_TRACE_FILTERS_STORAGE_KEY,\n): void {\n const serialized = getPreservedTraceFilterParams(params);\n const preset = params.get(TRACE_DATE_PRESET_PARAM);\n if (preset) serialized.set(TRACE_DATE_PRESET_PARAM, preset);\n const from = params.get(TRACE_DATE_FROM_PARAM);\n if (from) serialized.set(TRACE_DATE_FROM_PARAM, from);\n const to = params.get(TRACE_DATE_TO_PARAM);\n if (to) serialized.set(TRACE_DATE_TO_PARAM, to);\n\n try {\n localStorage.setItem(storageKey, serialized.toString());\n } catch {\n // localStorage may be unavailable (private mode / quota) — silently skip.\n }\n}\n\n/** Forget any previously saved filter set. Called from the \"Remove filters\"\n * action so the next plain sidebar nav lands on an empty page. */\nexport function clearSavedTraceFilters(storageKey: string = DEFAULT_TRACE_FILTERS_STORAGE_KEY): void {\n try {\n localStorage.removeItem(storageKey);\n } catch {\n // ignore — storage may be unavailable\n }\n}\n\n/** Read a previously saved filter set and return it as URLSearchParams, or\n * null if nothing is saved or storage is unavailable. */\nexport function loadTraceFiltersFromStorage(\n storageKey: string = DEFAULT_TRACE_FILTERS_STORAGE_KEY,\n): URLSearchParams | null {\n try {\n const raw = localStorage.getItem(storageKey);\n if (!raw) return null;\n const parsed = new URLSearchParams(raw);\n return parsed.toString() ? parsed : null;\n } catch {\n return null;\n }\n}\n\n/** True when `params` carries any filter-related key — used to decide whether\n * to hydrate from localStorage on page mount (we only hydrate when the URL is\n * filter-clean, i.e. the user landed here via a plain sidebar nav). */\nexport function hasAnyTraceFilterParams(params: URLSearchParams): boolean {\n if (params.has(TRACE_DATE_PRESET_PARAM)) return true;\n if (params.has(TRACE_DATE_FROM_PARAM)) return true;\n if (params.has(TRACE_DATE_TO_PARAM)) return true;\n if (params.has(TRACE_ROOT_ENTITY_TYPE_PARAM)) return true;\n if (params.has(TRACE_STATUS_PARAM)) return true;\n if (params.has(TRACE_LIST_MODE_PARAM)) return true;\n for (const fieldId of TRACE_PROPERTY_FILTER_FIELD_IDS) {\n if (params.has(TRACE_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId])) return true;\n }\n return false;\n}\n\nexport function createTracePropertyFilterFields({\n availableTags,\n availableRootEntityNames,\n availableServiceNames,\n availableEnvironments,\n loading,\n}: {\n availableTags: string[];\n availableRootEntityNames: string[];\n availableServiceNames: string[];\n availableEnvironments: string[];\n loading?: {\n tags?: boolean;\n entityNames?: boolean;\n serviceNames?: boolean;\n environments?: boolean;\n };\n}): PropertyFilterField[] {\n const fields: PropertyFilterField[] = [\n {\n id: 'rootEntityType',\n label: 'Primitive Type',\n kind: 'pick-multi',\n searchable: false,\n options: ROOT_ENTITY_TYPE_OPTIONS.map(o => ({ label: o.label, value: o.entityType })),\n placeholder: 'Choose entity type',\n emptyText: 'No entity types.',\n },\n {\n id: 'entityName',\n label: 'Primitive Name',\n kind: 'pick-multi',\n options: availableRootEntityNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose entity names',\n emptyText: 'No entity names found.',\n isLoading: loading?.entityNames,\n },\n { id: 'entityId', label: 'Primitive ID', kind: 'text' },\n {\n id: 'status',\n label: 'Status',\n kind: 'pick-multi',\n searchable: false,\n options: TRACE_STATUS_OPTIONS.map(o => ({ label: o.label, value: o.value })),\n placeholder: 'Choose status',\n emptyText: 'No statuses.',\n },\n {\n id: 'tags',\n label: 'Tags',\n kind: 'pick-multi',\n multi: true,\n options: availableTags.map(tag => ({ label: tag, value: tag })),\n placeholder: 'Choose tags',\n emptyText: 'No tags found.',\n isLoading: loading?.tags,\n },\n {\n id: 'serviceName',\n label: 'Service Name',\n kind: 'pick-multi',\n options: availableServiceNames.map(name => ({ label: name, value: name })),\n placeholder: 'Choose service names',\n emptyText: 'No service names found.',\n isLoading: loading?.serviceNames,\n },\n {\n id: 'environment',\n label: 'Environment',\n kind: 'pick-multi',\n options: availableEnvironments.map(env => ({ label: env, value: env })),\n placeholder: 'Choose environments',\n emptyText: 'No environments found.',\n isLoading: loading?.environments,\n },\n { id: 'traceId', label: 'Trace ID', kind: 'text' },\n { id: 'runId', label: 'Run ID', kind: 'text' },\n { id: 'threadId', label: 'Thread ID', kind: 'text' },\n { id: 'sessionId', label: 'Session ID', kind: 'text' },\n { id: 'requestId', label: 'Request ID', kind: 'text' },\n { id: 'resourceId', label: 'Resource ID', kind: 'text' },\n { id: 'userId', label: 'User ID', kind: 'text' },\n { id: 'organizationId', label: 'Organization ID', kind: 'text' },\n { id: 'experimentId', label: 'Experiment ID', kind: 'text' },\n ];\n const byLabel = (a: PropertyFilterField, b: PropertyFilterField) => a.label.localeCompare(b.label);\n const pickMulti = fields.filter(f => f.kind === 'pick-multi').sort(byLabel);\n const text = fields.filter(f => f.kind === 'text').sort(byLabel);\n return [...pickMulti, ...text];\n}\n\n/**\n * Read filter tokens from URL search params preserving the order in which each\n * filter was first added (URLSearchParams iterates in insertion order). This\n * is used by the Filter popover + PropertyFilterApplied pills so the UI reflects the\n * order the user created the filters in.\n */\nexport function getTracePropertyFilterTokens(searchParams: URLSearchParams): PropertyFilterToken[] {\n const tokens: PropertyFilterToken[] = [];\n\n // Map URL param name → fieldId for both generic filterX params and the\n // dedicated synthetic params (rootEntityType, status).\n const paramToFieldId = new Map<string, string>([\n [TRACE_ROOT_ENTITY_TYPE_PARAM, 'rootEntityType'],\n [TRACE_STATUS_PARAM, 'status'],\n ]);\n for (const fieldId of TRACE_PROPERTY_FILTER_FIELD_IDS) {\n paramToFieldId.set(TRACE_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId], fieldId);\n }\n\n const seen = new Set<string>();\n for (const [paramName] of searchParams.entries()) {\n const fieldId = paramToFieldId.get(paramName);\n if (!fieldId || seen.has(fieldId)) continue;\n seen.add(fieldId);\n\n if (fieldId === 'tags') {\n const raw = searchParams.getAll(paramName);\n if (raw.length === 0) continue;\n // An empty `filterTags=` sentinel keeps the pill alive after a Reset\n // (neutral state = no selections) so users can re-pick without losing\n // the pill's position. Non-empty entries are the actual selected tags.\n tokens.push({ fieldId, value: raw.filter(Boolean) });\n continue;\n }\n\n // Text and synthetic single-value fields: include empty strings so\n // pending-but-not-yet-filled filters survive URL round-trips.\n const value = searchParams.get(paramName);\n if (value !== null) tokens.push({ fieldId, value });\n }\n\n return tokens;\n}\n\nexport function getPreservedTraceFilterParams(searchParams: URLSearchParams) {\n const next = new URLSearchParams();\n\n const rootEntityType = searchParams.get(TRACE_ROOT_ENTITY_TYPE_PARAM);\n if (rootEntityType) next.set(TRACE_ROOT_ENTITY_TYPE_PARAM, rootEntityType);\n\n const status = searchParams.get(TRACE_STATUS_PARAM);\n if (status) next.set(TRACE_STATUS_PARAM, status);\n\n const listMode = searchParams.get(TRACE_LIST_MODE_PARAM);\n if (listMode) next.set(TRACE_LIST_MODE_PARAM, listMode);\n\n for (const fieldId of TRACE_PROPERTY_FILTER_FIELD_IDS) {\n const param = TRACE_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId];\n if (fieldId === 'tags') {\n for (const value of searchParams.getAll(param)) {\n next.append(param, value);\n }\n continue;\n }\n\n const value = searchParams.get(param);\n if (value) {\n next.set(param, value);\n }\n }\n\n return next;\n}\n\n/**\n * Clear all filter params from `params` and re-add them in the given `tokens`\n * order so the URL (and therefore the PropertyFilterApplied pills) reflects the\n * creation order of filters. Handles the generic `filterX` params plus the\n * dedicated synthetic params (rootEntityType, status).\n */\nexport function applyTracePropertyFilterTokens(params: URLSearchParams, tokens: PropertyFilterToken[]) {\n params.delete(TRACE_ROOT_ENTITY_TYPE_PARAM);\n params.delete(TRACE_STATUS_PARAM);\n for (const fieldId of TRACE_PROPERTY_FILTER_FIELD_IDS) {\n params.delete(TRACE_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n\n for (const token of tokens) {\n if (token.fieldId === 'rootEntityType' && typeof token.value === 'string') {\n params.set(TRACE_ROOT_ENTITY_TYPE_PARAM, token.value);\n continue;\n }\n if (token.fieldId === 'status' && typeof token.value === 'string') {\n params.set(TRACE_STATUS_PARAM, token.value);\n continue;\n }\n\n const param =\n TRACE_PROPERTY_FILTER_PARAM_BY_FIELD[token.fieldId as keyof typeof TRACE_PROPERTY_FILTER_PARAM_BY_FIELD];\n if (!param) continue;\n\n if (token.fieldId === 'tags' && Array.isArray(token.value)) {\n if (token.value.length === 0) {\n // Empty sentinel — keeps the pill visible after Reset.\n params.append(param, '');\n } else {\n for (const value of token.value) {\n params.append(param, value);\n }\n }\n continue;\n }\n\n if (typeof token.value === 'string') {\n // Persist empty / 'Any' values too so neutralized-but-still-visible pills\n // survive URL round-trips. buildTraceListFilters skips these on the API\n // query side so neutrals never reach the backend.\n params.set(param, token.value.trim());\n }\n }\n}\n\nexport function buildTraceListFilters({\n rootEntityType,\n status,\n dateFrom,\n dateTo,\n tokens,\n}: {\n rootEntityType?: string;\n status?: TraceStatusFilter;\n dateFrom?: Date;\n dateTo?: Date;\n tokens: PropertyFilterToken[];\n}): ListTracesArgs['filters'] {\n const filters: NonNullable<ListTracesArgs['filters']> = {};\n\n if (rootEntityType) {\n filters.entityType = rootEntityType as NonNullable<ListTracesArgs['filters']>['entityType'];\n }\n\n if (status) {\n filters.status = status as NonNullable<ListTracesArgs['filters']>['status'];\n }\n\n if (dateFrom) {\n filters.startedAt = { start: dateFrom };\n }\n\n if (dateTo) {\n filters.endedAt = { end: dateTo };\n }\n\n for (const token of tokens) {\n if (token.fieldId === 'tags') {\n if (Array.isArray(token.value) && token.value.length > 0) {\n filters.tags = token.value;\n } else if (typeof token.value === 'string' && token.value.trim()) {\n // pick-multi tags: single-string token → wrap for the server's array schema.\n filters.tags = [token.value.trim()];\n }\n continue;\n }\n\n if (typeof token.value !== 'string') continue;\n // Skip empty-string tokens (unfilled pending filters) and 'Any'\n // (pick-multi single-select neutral state) so neutrals never reach the\n // backend.\n if (!token.value.trim()) continue;\n if (token.value === 'Any') continue;\n\n switch (token.fieldId) {\n case 'entityId':\n filters.entityId = token.value;\n break;\n case 'entityName':\n filters.entityName = token.value;\n break;\n case 'traceId':\n filters.traceId = token.value;\n break;\n case 'runId':\n filters.runId = token.value;\n break;\n case 'threadId':\n filters.threadId = token.value;\n break;\n case 'sessionId':\n filters.sessionId = token.value;\n break;\n case 'requestId':\n filters.requestId = token.value;\n break;\n case 'resourceId':\n filters.resourceId = token.value;\n break;\n case 'userId':\n filters.userId = token.value;\n break;\n case 'organizationId':\n filters.organizationId = token.value;\n break;\n case 'serviceName':\n filters.serviceName = token.value;\n break;\n case 'environment':\n filters.environment = token.value;\n break;\n case 'experimentId':\n filters.experimentId = token.value;\n break;\n default:\n break;\n }\n }\n\n return filters;\n}\n\n/**\n * \"Clear\" semantics: keep all filter pills but neutralize each value.\n * '' for text fields, 'Any' for single-select pick-multi, [] for multi-select pick-multi.\n * Date range is intentionally NOT touched here — that's a separate concern.\n */\nexport function neutralizeFilterTokens(\n filterFields: PropertyFilterField[],\n filterTokens: PropertyFilterToken[],\n): PropertyFilterToken[] {\n return filterTokens.map(token => {\n const field = filterFields.find(f => f.id === token.fieldId);\n if (!field) return token;\n if (field.kind === 'text') return { fieldId: token.fieldId, value: '' };\n if (field.kind === 'pick-multi') {\n if (field.omitAnyOption) return token;\n return field.multi ? { fieldId: token.fieldId, value: [] } : { fieldId: token.fieldId, value: 'Any' };\n }\n return token;\n });\n}\n","import type { EntityType } from '@mastra/core/observability';\nimport {\n LOGS_DATE_FROM_PARAM,\n LOGS_DATE_PRESET_PARAM,\n LOGS_DATE_TO_PARAM,\n LOGS_PROPERTY_FILTER_PARAM_BY_FIELD,\n LOGS_ROOT_ENTITY_TYPE_PARAM,\n} from '../logs/log-filters';\nimport type { LogsDatePreset } from '../logs/log-filters';\nimport {\n TRACE_DATE_FROM_PARAM,\n TRACE_DATE_PRESET_PARAM,\n TRACE_DATE_TO_PARAM,\n TRACE_LIST_MODE_PARAM,\n TRACE_PROPERTY_FILTER_PARAM_BY_FIELD,\n TRACE_ROOT_ENTITY_TYPE_PARAM,\n TRACE_STATUS_PARAM,\n} from '../traces/trace-filters';\nimport type { TraceDatePreset } from '../traces/types';\nimport type { DatePreset, DateRange } from './hooks/use-metrics';\nimport type { MetricsDimensionalFilter } from './metrics-filters';\n\n/** Map the metrics date preset (`24h`, `3d`, …) to the equivalent traces /\n * logs preset (`last-24h`, `last-3d`, …). `'custom'` is passed through and\n * explicit from/to dates are serialized separately. Returns `undefined` for\n * presets we can't translate — in that case we omit the date preset and rely\n * on concrete `from`/`to` timestamps. */\nfunction mapPreset(preset: DatePreset): TraceDatePreset | LogsDatePreset | undefined {\n switch (preset) {\n case '24h':\n return 'last-24h';\n case '3d':\n return 'last-3d';\n case '7d':\n return 'last-7d';\n case '14d':\n return 'last-14d';\n case '30d':\n return 'last-30d';\n case 'custom':\n return 'custom';\n default:\n return undefined;\n }\n}\n\n/** Narrow time window for a single chart node. Callers pass concrete start/end\n * Dates (typically bucket boundaries); these bypass the preset. */\nexport type DrilldownWindow = {\n from: Date;\n to: Date;\n};\n\n/** Narrow a raw timestamp into the time-series bucket window that surrounds\n * it. For a chart with `interval = 1h`, clicking a node at 14:37Z drills into\n * 14:00Z → 15:00Z. For `1d`, the corresponding UTC day. */\nexport function narrowWindowToBucket(tsMs: number, interval: '1h' | '1d'): DrilldownWindow {\n if (interval === '1h') {\n const from = new Date(tsMs);\n from.setUTCMinutes(0, 0, 0);\n const to = new Date(from.getTime() + 60 * 60 * 1000);\n return { from, to };\n }\n const from = new Date(tsMs);\n from.setUTCHours(0, 0, 0, 0);\n const to = new Date(from.getTime() + 24 * 60 * 60 * 1000);\n return { from, to };\n}\n\n/** Fields a card may use to scope the drilldown. Only the pieces the caller\n * knows are attached; everything else falls through to the current dashboard\n * filters. `status` is only valid for traces. */\nexport type DrilldownScope = {\n rootEntityType?: EntityType;\n entityName?: string;\n threadId?: string;\n resourceId?: string;\n model?: string;\n provider?: string;\n /** Trace-only. Valid for drill-downs from \"errors\" segments. */\n status?: 'running' | 'success' | 'error';\n /** Overrides date preset with explicit window bounds. */\n window?: DrilldownWindow;\n};\n\ntype BuildArgs = {\n /** Current metrics dashboard preset. */\n preset: DatePreset;\n /** Current metrics dashboard custom range (only honoured when preset === 'custom'). */\n customRange?: DateRange;\n /** Dashboard-level dimensional filters (environment, serviceName, tags, etc.). */\n dashboardFilter: MetricsDimensionalFilter;\n /** Per-card scoping applied on top of dashboard filters. */\n scope: DrilldownScope;\n /** Override the Traces page base path. Defaults to `/observability` (mastra Studio). */\n tracesBasePath?: string;\n /** Override the Logs page base path. Defaults to `/logs` (mastra Studio). */\n logsBasePath?: string;\n};\n\nfunction applyDate(\n params: URLSearchParams,\n presetKey: string,\n fromKey: string,\n toKey: string,\n preset: DatePreset,\n customRange: DateRange | undefined,\n window: DrilldownWindow | undefined,\n): void {\n // A concrete window always wins — it's a precise node-level drilldown.\n if (window) {\n params.set(presetKey, 'custom');\n params.set(fromKey, window.from.toISOString());\n params.set(toKey, window.to.toISOString());\n return;\n }\n if (preset === 'custom') {\n params.set(presetKey, 'custom');\n if (customRange?.from) params.set(fromKey, customRange.from.toISOString());\n if (customRange?.to) params.set(toKey, customRange.to.toISOString());\n return;\n }\n const mapped = mapPreset(preset);\n if (mapped) params.set(presetKey, mapped);\n}\n\nfunction setIfDefined(params: URLSearchParams, key: string, value: string | undefined | null): void {\n if (typeof value === 'string' && value.length > 0) {\n params.set(key, value);\n }\n}\n\nfunction appendArray(params: URLSearchParams, key: string, values: string[] | undefined): void {\n if (!Array.isArray(values) || values.length === 0) return;\n for (const v of values) if (v) params.append(key, v);\n}\n\n/** Build a relative URL to the Traces page pre-filtered by the dashboard\n * filters + per-card scope. */\nexport function buildTracesDrilldownUrl({\n preset,\n customRange,\n dashboardFilter,\n scope,\n tracesBasePath = '/observability',\n}: BuildArgs): string {\n const params = new URLSearchParams();\n params.set(TRACE_LIST_MODE_PARAM, 'branches');\n\n applyDate(\n params,\n TRACE_DATE_PRESET_PARAM,\n TRACE_DATE_FROM_PARAM,\n TRACE_DATE_TO_PARAM,\n preset,\n customRange,\n scope.window,\n );\n\n // Scope overrides dashboard filter when both are present.\n const rootEntityType = scope.rootEntityType ?? dashboardFilter.rootEntityType;\n if (rootEntityType) params.set(TRACE_ROOT_ENTITY_TYPE_PARAM, rootEntityType);\n\n if (scope.status) params.set(TRACE_STATUS_PARAM, scope.status);\n\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.entityName, scope.entityName ?? dashboardFilter.entityName);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.threadId, scope.threadId ?? dashboardFilter.threadId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.resourceId, scope.resourceId ?? dashboardFilter.resourceId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.entityId, dashboardFilter.entityId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.runId, dashboardFilter.runId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.sessionId, dashboardFilter.sessionId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.requestId, dashboardFilter.requestId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.userId, dashboardFilter.userId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.organizationId, dashboardFilter.organizationId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.experimentId, dashboardFilter.experimentId);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.serviceName, dashboardFilter.serviceName);\n setIfDefined(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.environment, dashboardFilter.environment);\n appendArray(params, TRACE_PROPERTY_FILTER_PARAM_BY_FIELD.tags, dashboardFilter.tags);\n\n const query = params.toString();\n return query ? `${tracesBasePath}?${query}` : tracesBasePath;\n}\n\n/** Build a relative URL to the Logs page pre-filtered by the dashboard filters\n * + per-card scope. Useful for \"View errors in logs\" affordances. */\nexport function buildLogsDrilldownUrl({\n preset,\n customRange,\n dashboardFilter,\n scope,\n logsBasePath = '/logs',\n}: BuildArgs): string {\n const params = new URLSearchParams();\n\n applyDate(\n params,\n LOGS_DATE_PRESET_PARAM,\n LOGS_DATE_FROM_PARAM,\n LOGS_DATE_TO_PARAM,\n preset,\n customRange,\n scope.window,\n );\n\n const rootEntityType = scope.rootEntityType ?? dashboardFilter.rootEntityType;\n if (rootEntityType) params.set(LOGS_ROOT_ENTITY_TYPE_PARAM, rootEntityType);\n\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.entityName, scope.entityName ?? dashboardFilter.entityName);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.threadId, scope.threadId ?? dashboardFilter.threadId);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.resourceId, scope.resourceId ?? dashboardFilter.resourceId);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.runId, dashboardFilter.runId);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.sessionId, dashboardFilter.sessionId);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.requestId, dashboardFilter.requestId);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.userId, dashboardFilter.userId);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.organizationId, dashboardFilter.organizationId);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.experimentId, dashboardFilter.experimentId);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.serviceName, dashboardFilter.serviceName);\n setIfDefined(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.environment, dashboardFilter.environment);\n appendArray(params, LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.tags, dashboardFilter.tags);\n\n // Error drill-ins always target log level=error. Status filter isn't valid\n // for logs, so we translate `status: 'error'` to `filterLevel=error`.\n if (scope.status === 'error') {\n params.append(LOGS_PROPERTY_FILTER_PARAM_BY_FIELD.level, 'error');\n }\n\n const query = params.toString();\n return query ? `${logsBasePath}?${query}` : logsBasePath;\n}\n","import { useCallback } from 'react';\n\nimport { buildLogsDrilldownUrl, buildTracesDrilldownUrl, narrowWindowToBucket } from '../drilldown';\nimport type { DrilldownScope, DrilldownWindow } from '../drilldown';\nimport { useMetrics } from './use-metrics';\n\n/** Consolidates the current metrics dashboard's date + dimensional context so\n * each card only has to supply its own scope (`{ rootEntityType, entityName,\n * ... }`) to produce a full drilldown URL. */\nexport function useDrilldown() {\n const { datePreset, customRange, dimensionalFilter, tracesBasePath, logsBasePath } = useMetrics();\n\n const getTracesHref = useCallback(\n (scope: DrilldownScope = {}): string =>\n buildTracesDrilldownUrl({\n preset: datePreset,\n customRange,\n dashboardFilter: dimensionalFilter,\n scope,\n tracesBasePath,\n }),\n [datePreset, customRange, dimensionalFilter, tracesBasePath],\n );\n\n const getLogsHref = useCallback(\n (scope: DrilldownScope = {}): string =>\n buildLogsDrilldownUrl({\n preset: datePreset,\n customRange,\n dashboardFilter: dimensionalFilter,\n scope,\n logsBasePath,\n }),\n [datePreset, customRange, dimensionalFilter, logsBasePath],\n );\n\n const getBucketTracesHref = useCallback(\n (scope: Omit<DrilldownScope, 'window'>, tsMs: number, interval: '1h' | '1d'): string => {\n const window: DrilldownWindow = narrowWindowToBucket(tsMs, interval);\n return buildTracesDrilldownUrl({\n preset: datePreset,\n customRange,\n dashboardFilter: dimensionalFilter,\n scope: { ...scope, window },\n tracesBasePath,\n });\n },\n [datePreset, customRange, dimensionalFilter, tracesBasePath],\n );\n\n return { getTracesHref, getLogsHref, getBucketTracesHref };\n}\n","import type { UISpan } from '../types';\n\n/** Minimal span fields required for building the hierarchical timeline tree. */\ntype TimelineSpan = {\n spanId: string;\n name: string;\n spanType: string;\n startedAt: Date | string;\n endedAt?: Date | string | null;\n parentSpanId?: string | null;\n};\n\n/**\n * When `anchorSpanId` is provided, that span is treated as the displayed root\n * regardless of its `parentSpanId` -- the branch-subtree case from `getBranch`,\n * where the anchor has a real parent that's outside the returned set. Without\n * it, the displayed roots are the spans with no parent (the trace case).\n */\nexport const formatHierarchicalSpans = (spans: TimelineSpan[], anchorSpanId?: string): UISpan[] => {\n if (!spans || spans.length === 0) {\n return [];\n }\n\n const overallEndDate = spans.reduce(\n (latest, span) => {\n const endDate = span?.endedAt ? new Date(span.endedAt) : undefined;\n return endDate && (!latest || endDate > latest) ? endDate : latest;\n },\n null as Date | null,\n );\n\n const spanMap = new Map<string, UISpan>();\n const rootSpans: UISpan[] = [];\n\n spans.forEach(spanRecord => {\n const startDate = new Date(spanRecord.startedAt);\n const endDate = spanRecord.endedAt ? new Date(spanRecord.endedAt) : undefined;\n\n const uiSpan: UISpan = {\n id: spanRecord.spanId,\n name: spanRecord.name,\n type: spanRecord.spanType,\n latency: endDate ? endDate.getTime() - startDate.getTime() : 0,\n startTime: startDate.toISOString(),\n endTime: endDate ? endDate.toISOString() : undefined,\n spans: [],\n parentSpanId: spanRecord.parentSpanId,\n };\n\n spanMap.set(spanRecord.spanId, uiSpan);\n });\n\n const isAnchor = (spanRecord: TimelineSpan) =>\n anchorSpanId ? spanRecord.spanId === anchorSpanId : spanRecord?.parentSpanId == null;\n\n spans.forEach(spanRecord => {\n const uiSpan = spanMap.get(spanRecord.spanId)!;\n\n if (isAnchor(spanRecord)) {\n if (overallEndDate && uiSpan.endTime && overallEndDate > new Date(uiSpan.endTime)) {\n uiSpan.endTime = overallEndDate.toISOString();\n const overallEndTime = new Date(overallEndDate).getTime();\n const spanStartTime = new Date(uiSpan.startTime).getTime();\n uiSpan.latency = overallEndTime - spanStartTime;\n }\n rootSpans.push(uiSpan);\n } else {\n const parent = spanRecord.parentSpanId ? spanMap.get(spanRecord.parentSpanId) : undefined;\n if (parent) {\n parent.spans!.push(uiSpan);\n } else {\n // Orphan: either the parent isn't in the supplied set (branch subtree boundary), or\n // the span has no parent yet wasn't picked as the anchor (rare when `anchorSpanId`\n // is specified). Surface it at the displayed root rather than dropping it.\n rootSpans.push(uiSpan);\n }\n }\n });\n\n const sortSpansByStartTime = (spans: UISpan[]): UISpan[] => {\n return spans.sort((a, b) => new Date(a.startTime).getTime() - new Date(b.startTime).getTime());\n };\n\n const sortedRootSpans = sortSpansByStartTime(rootSpans);\n\n const sortNestedSpans = (spans: UISpan[]): void => {\n spans.forEach(span => {\n if (span.spans && span.spans.length > 0) {\n span.spans = sortSpansByStartTime(span.spans);\n sortNestedSpans(span.spans);\n }\n });\n };\n\n sortNestedSpans(sortedRootSpans);\n\n return sortedRootSpans;\n};\n","import { BrainIcon, GaugeIcon } from 'lucide-react';\nimport type { UISpanStyle } from '../types';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\nimport { FolderIcon } from '@/ds/icons/FolderIcon';\nimport { McpServerIcon } from '@/ds/icons/McpServerIcon';\nimport { MemoryIcon } from '@/ds/icons/MemoryIcon';\nimport { ToolsIcon } from '@/ds/icons/ToolsIcon';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\n\nexport const spanTypePrefixes = ['agent', 'workflow', 'model', 'mcp', 'tool', 'memory', 'workspace', 'scorer', 'other'];\n\nconst spanTypeToUiElements: Record<string, UISpanStyle> = {\n agent: {\n icon: <AgentIcon />,\n color: 'oklch(0.75 0.15 250)',\n label: 'Agent',\n typePrefix: 'agent',\n },\n workflow: {\n icon: <WorkflowIcon />,\n color: 'oklch(0.75 0.15 200)',\n label: 'Workflow',\n typePrefix: 'workflow',\n },\n model: {\n icon: <BrainIcon />,\n color: 'oklch(0.75 0.15 320)',\n label: 'Model',\n typePrefix: 'model',\n },\n mcp: {\n icon: <McpServerIcon />,\n color: 'oklch(0.75 0.15 160)',\n label: 'MCP',\n typePrefix: 'mcp',\n },\n tool: {\n icon: <ToolsIcon />,\n color: 'oklch(0.75 0.15 100)',\n label: 'Tool',\n typePrefix: 'tool',\n },\n memory: {\n icon: <MemoryIcon />,\n color: 'oklch(0.75 0.15 60)',\n label: 'Memory',\n typePrefix: 'memory',\n },\n workspace: {\n icon: <FolderIcon />,\n color: 'oklch(0.75 0.15 40)',\n label: 'Workspace',\n typePrefix: 'workspace',\n },\n scorer: {\n icon: <GaugeIcon />,\n color: 'oklch(0.75 0.15 280)',\n label: 'Scorer',\n typePrefix: 'scorer',\n },\n};\n\nconst otherSpanType: UISpanStyle = {\n color: 'oklch(0.65 0 0)',\n label: 'Other',\n typePrefix: 'other',\n};\n\nexport function getSpanTypeUi(type: string) {\n const typePrefix = type?.toLowerCase().split('_')[0];\n return spanTypeToUiElements[typePrefix] ?? otherSpanType;\n}\n","import type { InputTokenDetails, OutputTokenDetails, UsageStats } from '@mastra/core/observability';\n\ntype TokenDetailsObject = InputTokenDetails | OutputTokenDetails;\n\nexport type TokenUsageView = {\n inputValue: number;\n outputValue: number;\n total: number;\n showSplit: boolean;\n inputPct: number;\n outputPct: number;\n inputDetails: TokenDetailsObject | undefined;\n outputDetails: TokenDetailsObject | undefined;\n};\n\nfunction hasNumericDetails(details: TokenDetailsObject | undefined): details is TokenDetailsObject {\n return !!details && Object.values(details).some(v => typeof v === 'number');\n}\n\nexport function getTokenUsageView(usage: UsageStats | undefined | null): TokenUsageView | null {\n if (!usage) return null;\n\n const hasInput = typeof usage.inputTokens === 'number';\n const hasOutput = typeof usage.outputTokens === 'number';\n\n if (!hasInput && !hasOutput) return null;\n\n const inputValue = usage.inputTokens ?? 0;\n const outputValue = usage.outputTokens ?? 0;\n const total = inputValue + outputValue;\n const showSplit = total > 0;\n\n return {\n inputValue,\n outputValue,\n total,\n showSplit,\n inputPct: showSplit ? (inputValue / total) * 100 : 0,\n outputPct: showSplit ? (outputValue / total) * 100 : 0,\n inputDetails: hasInput && hasNumericDetails(usage.inputDetails) ? usage.inputDetails : undefined,\n outputDetails: hasOutput && hasNumericDetails(usage.outputDetails) ? usage.outputDetails : undefined,\n };\n}\n","import type { InputTokenDetails, OutputTokenDetails, UsageStats } from '@mastra/core/observability';\nimport { Fragment } from 'react';\nimport { getTokenUsageView } from './span-token-usage.utils';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { cn } from '@/lib/utils';\n\nexport type TokenUsage = UsageStats;\n\ntype TokenDetailsObject = InputTokenDetails | OutputTokenDetails;\n\nconst detailKeyLabels: Record<string, string> = {\n text: 'Text',\n cacheRead: 'Cache read',\n cacheWrite: 'Cache write',\n audio: 'Audio',\n image: 'Image',\n reasoning: 'Reasoning',\n};\n\ntype SpanTokenUsageProps = {\n usage: UsageStats;\n className?: string;\n};\n\nconst INPUT_COLOR = 'oklch(0.78 0.16 320)';\nconst OUTPUT_COLOR = 'oklch(0.55 0.18 320)';\n\nexport function SpanTokenUsage({ usage, className }: SpanTokenUsageProps) {\n const view = getTokenUsageView(usage);\n if (!view) return null;\n\n const { inputValue, outputValue, total, showSplit, inputPct, outputPct, inputDetails, outputDetails } = view;\n\n return (\n <div\n className={cn('border-b border-border1 mt-2 mb-8 pb-3 grid grid-cols-1 4xl:grid-cols-2 4xl:gap-12', className)}\n >\n {showSplit && (\n <div className=\"mb-2\">\n <div className=\"flex items-baseline text-neutral2 gap-3\">\n <span className=\"text-ui-md\">Tokens Used</span>\n <span className=\"text-neutral4 text-ui-md font-semibold\">{total.toLocaleString()}</span>\n <span className=\"ml-auto text-ui-sm\">\n {Math.round(inputPct)}% Input vs {Math.round(outputPct)}% Output\n </span>\n </div>\n <div className=\"p-1.5 rounded-md bg-surface4 mt-2\">\n <div className=\"relative w-full h-1.5 rounded-sm overflow-hidden\">\n <div\n className=\"absolute h-1.5 top-0 left-0\"\n style={{ width: `${inputPct}%`, backgroundColor: INPUT_COLOR }}\n />\n <div\n className=\"absolute h-1.5 top-0\"\n style={{ left: `${inputPct}%`, width: `${outputPct}%`, backgroundColor: OUTPUT_COLOR }}\n />\n </div>\n </div>\n </div>\n )}\n\n <div className=\"grid gap-6 grid-cols-2\">\n <UsageColumn label=\"Input\" color={INPUT_COLOR} value={inputValue} details={inputDetails} />\n <UsageColumn label=\"Output\" color={OUTPUT_COLOR} value={outputValue} details={outputDetails} />\n </div>\n </div>\n );\n}\n\nfunction UsageColumn({\n label,\n color,\n value,\n details,\n}: {\n label: string;\n color: string;\n value?: number;\n details?: TokenDetailsObject;\n}) {\n return (\n <div>\n <div className=\"flex items-baseline text-neutral2 gap-3 mb-2\">\n <span className=\"text-ui-md\">{label}</span>\n {typeof value === 'number' && (\n <span className=\"flex items-baseline gap-1.5\">\n <span className=\"text-neutral4 text-ui-md font-semibold\">{value.toLocaleString()}</span>\n <span className=\"size-2 rounded-full self-center\" style={{ backgroundColor: color }} />\n </span>\n )}\n </div>\n {details && <DetailsList details={details} />}\n </div>\n );\n}\n\nfunction DetailsList({ details }: { details: TokenDetailsObject }) {\n return (\n <DataKeysAndValues density=\"dense\">\n {Object.entries(details).map(([detailKey, detailValue]) => {\n if (typeof detailValue !== 'number') return null;\n return (\n <Fragment key={detailKey}>\n <DataKeysAndValues.Key>{detailKeyLabels[detailKey] || detailKey}</DataKeysAndValues.Key>\n <DataKeysAndValues.Value className=\"text-right\">{detailValue.toLocaleString()}</DataKeysAndValues.Value>\n </Fragment>\n );\n })}\n </DataKeysAndValues>\n );\n}\n","import {\n ChevronDownIcon,\n ChevronsDownIcon,\n ChevronsDownUpIcon,\n ChevronsUpDownIcon,\n ChevronsUpIcon,\n ChevronUpIcon,\n FoldVerticalIcon,\n UnfoldVerticalIcon,\n} from 'lucide-react';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { cn } from '@/lib/utils';\n\ntype TimelineExpandColProps = {\n isSelected?: boolean;\n isFaded?: boolean;\n isExpanded?: boolean;\n isRootSpan?: boolean;\n toggleChildren?: () => void;\n expandAllDescendants?: () => void;\n collapseAllDescendants?: () => void;\n collapseAll?: () => void;\n totalDescendants?: number;\n allDescendantsExpanded?: boolean;\n numOfChildren?: number;\n toggleSiblings?: () => void;\n siblingsAllExpanded?: boolean;\n siblingsWithChildrenCount?: number;\n};\n\nexport function TimelineExpandCol({\n isSelected,\n isFaded,\n isExpanded,\n isRootSpan,\n toggleChildren,\n expandAllDescendants,\n collapseAllDescendants,\n collapseAll,\n totalDescendants = 0,\n allDescendantsExpanded,\n numOfChildren = 0,\n toggleSiblings,\n siblingsAllExpanded,\n siblingsWithChildrenCount = 0,\n}: TimelineExpandColProps) {\n const toggleTooltip = isExpanded ? `Collapse children (${numOfChildren})` : `Expand children (${numOfChildren})`;\n\n const showToggleChildren = !isRootSpan && !!numOfChildren && numOfChildren > 0;\n const showDescendantsButton = !isRootSpan && showToggleChildren && totalDescendants > numOfChildren;\n const showToggleSiblings = !isRootSpan && siblingsWithChildrenCount >= 2;\n const showRootToggleAll = !!isRootSpan && !!numOfChildren && numOfChildren > 0;\n const fullyExpanded = !!isExpanded && !!allDescendantsExpanded;\n\n return (\n <div\n className={cn('flex items-center justify-end h-full px-1.5', {\n 'opacity-30 [&:hover]:opacity-60': isFaded,\n 'bg-surface4': isSelected,\n })}\n >\n <div className=\"grid grid-cols-[1.625rem_1.625rem_1.625rem] gap-1\">\n <div>\n {showToggleChildren && (\n <ExpandButton onClick={() => toggleChildren?.()} tooltip={toggleTooltip}>\n {isExpanded ? <ChevronUpIcon /> : <ChevronDownIcon />}\n </ExpandButton>\n )}\n </div>\n\n <div>\n {showDescendantsButton && (\n <ExpandButton\n onClick={() => (allDescendantsExpanded ? collapseAllDescendants?.() : expandAllDescendants?.())}\n tooltip={\n allDescendantsExpanded\n ? `Collapse all descendants (${totalDescendants})`\n : `Expand all descendants (${totalDescendants})`\n }\n >\n {allDescendantsExpanded ? <ChevronsUpIcon /> : <ChevronsDownIcon />}\n </ExpandButton>\n )}\n </div>\n\n <div>\n {showToggleSiblings && (\n <ExpandButton\n onClick={() => toggleSiblings?.()}\n tooltip={siblingsAllExpanded ? 'Collapse at this level' : 'Expand at this level'}\n >\n {siblingsAllExpanded ? <FoldVerticalIcon /> : <UnfoldVerticalIcon />}\n </ExpandButton>\n )}\n\n {showRootToggleAll && (\n <ExpandButton\n onClick={() => (fullyExpanded ? collapseAll?.() : expandAllDescendants?.())}\n tooltip={fullyExpanded ? 'Collapse all' : 'Expand all'}\n >\n {fullyExpanded ? <ChevronsDownUpIcon /> : <ChevronsUpDownIcon />}\n </ExpandButton>\n )}\n </div>\n </div>\n </div>\n );\n}\n\ntype ExpandButtonProps = {\n onClick?: () => void;\n children?: React.ReactNode;\n className?: string;\n tooltip?: string;\n};\n\nfunction ExpandButton({ onClick, children, className, tooltip }: ExpandButtonProps) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <button onClick={onClick} className={cn('h-full shrink-0 cursor-pointer', className)} aria-label={tooltip}>\n <div\n className={cn(\n 'flex items-center gap-[0.1rem] rounded-md transition-all p-1',\n 'hover:bg-surface5',\n '[&>svg]:shrink-0 [&>svg]:opacity-50 [&:hover>svg]:opacity-100 [&>svg]:w-4 [&>svg]:h-4 [&>svg]:transition-all',\n )}\n >\n {children}\n </div>\n </button>\n </TooltipTrigger>\n {tooltip && <TooltipContent>{tooltip}</TooltipContent>}\n </Tooltip>\n );\n}\n","import { cn } from '@/lib/utils';\n\ntype TimelineStructureSignProps = {\n isLastChild?: boolean;\n};\n\nexport function TimelineStructureSign({ isLastChild }: TimelineStructureSignProps) {\n return (\n <div\n className={cn(\n 'w-[0.5rem] h-[1.8rem] relative opacity-100 shrink-0',\n 'after:content-[\"\"] after:absolute after:left-[-1px] after:top-0 after:bottom-0 after:w-[0px] after:border-l-[1px] after:border-neutral3 after:border-dashed ',\n 'before:content-[\"\"] before:absolute before:left-0 before:top-[50%] before:w-full before:h-[0px] before:border-b-[1px] before:border-neutral3 before:border-dashed',\n {\n 'after:bottom-[50%]': isLastChild,\n },\n )}\n />\n );\n}\n","import type { UISpan, UISpanStyle } from '../types';\nimport { TimelineStructureSign } from './timeline-structure-sign';\nimport { cn } from '@/lib/utils';\n\ntype TimelineNameColProps = {\n span: UISpan;\n spanUI?: UISpanStyle | null;\n isFaded?: boolean;\n depth?: number;\n onSpanClick?: (id: string) => void;\n selectedSpanId?: string;\n isLastChild?: boolean;\n hasChildren?: boolean;\n isRootSpan?: boolean;\n isExpanded?: boolean;\n};\n\nexport function TimelineNameCol({\n span,\n spanUI,\n isFaded,\n depth = 0,\n onSpanClick,\n selectedSpanId,\n isLastChild,\n hasChildren: _hasChildren,\n isRootSpan,\n isExpanded: _isExpanded,\n}: TimelineNameColProps) {\n return (\n <div\n data-span-id={span.id}\n aria-label={`View details for span ${span.name}`}\n className={cn('rounded-md flex opacity-80 min-h-8 items-center rounded-l-lg', {\n 'opacity-30 [&:hover]:opacity-60': isFaded,\n 'bg-surface4': selectedSpanId === span.id,\n })}\n style={{ paddingLeft: `${depth * 1}rem` }}\n >\n {!isRootSpan && <TimelineStructureSign isLastChild={isLastChild} />}\n\n <button\n onClick={() => onSpanClick?.(span.id)}\n className={cn(\n 'text-ui-smd flex items-center text-left gap-1.5 text-neutral6 w-full min-w-0 rounded-md h-full px-2 py-1 transition-colors',\n '[&>svg]:transition-all [&>svg]:shrink-0 [&>svg]:opacity-0 [&>svg]:w-[1em] [&>svg]:h-[1em] [&>svg]:ml-auto',\n 'hover:bg-surface4 [&:hover>svg]:opacity-60',\n 'focus:outline-none focus-visible:ring-1 focus-visible:ring-inset focus-visible:ring-accent1',\n )}\n >\n {spanUI?.color && (\n <span\n aria-hidden\n title={spanUI.label}\n className=\"inline-block w-2 h-2 shrink-0 rounded-full\"\n style={{ backgroundColor: spanUI.color }}\n />\n )}\n <span className=\"min-w-0 truncate\">{span.name}</span>\n </button>\n </div>\n );\n}\n","import { format } from 'date-fns/format';\nimport type { UISpan } from '../types';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from '@/ds/components/HoverCard';\nimport { cn } from '@/lib/utils';\n\ntype TimelineTimingColProps = {\n span: UISpan;\n selectedSpanId?: string;\n isFaded?: boolean;\n overallLatency?: number;\n overallStartTime?: string;\n color?: string;\n chartWidth?: 'wide' | 'default';\n};\n\nexport function TimelineTimingCol({\n span,\n selectedSpanId,\n isFaded,\n overallLatency,\n overallStartTime,\n color,\n chartWidth = 'default',\n}: TimelineTimingColProps) {\n const percentageSpanLatency = overallLatency ? Math.ceil((span.latency / overallLatency) * 100) : 0;\n const overallStartTimeDate = overallStartTime ? new Date(overallStartTime) : null;\n const spanStartTimeDate = span.startTime ? new Date(span.startTime) : null;\n const spanStartTimeShift =\n spanStartTimeDate && overallStartTimeDate ? spanStartTimeDate.getTime() - overallStartTimeDate.getTime() : 0;\n\n const percentageSpanStartTime = overallLatency && Math.floor((spanStartTimeShift / overallLatency) * 100);\n\n return (\n <HoverCard>\n <HoverCardTrigger\n className={cn(\n 'h-8 p-1 grid grid-cols-[1fr_auto] gap-2 items-center cursor-help pr-2 rounded-r-md',\n chartWidth === 'wide' ? 'min-w-72' : 'min-w-32',\n '[&:hover>div]:bg-surface5',\n {\n 'opacity-30 [&:hover]:opacity-60': isFaded,\n 'bg-surface4': selectedSpanId === span.id,\n },\n )}\n >\n <div className={cn('w-full p-1.5 rounded-md bg-surface4 transition-colors duration-1000')}>\n <div className=\"relative w-full h-1.5 rounded-sm overflow-hidden\">\n <div\n className={cn('bg-neutral1 absolute rounded-sm h-1.5 top-0')}\n style={{\n width: percentageSpanLatency ? `${percentageSpanLatency}%` : '2px',\n left: `${percentageSpanStartTime || 0}%`,\n backgroundColor: color,\n }}\n ></div>\n </div>\n </div>\n\n <div className={cn('flex justify-end text-neutral3 text-ui-xs')}>{(span.latency / 1000).toFixed(3)}&nbsp;s</div>\n </HoverCardTrigger>\n <HoverCardContent className=\"bg-surface4 pr-6\">\n <div className={cn('text-ui-sm flex items-center gap-2 mb-2 mt-1')}>Span Timing</div>\n <DataKeysAndValues>\n <DataKeysAndValues.Key>Latency</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{span.latency} ms</DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Started at</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>\n {span.startTime ? format(new Date(span.startTime), 'hh:mm:ss:SSS a') : '-'}\n </DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Ended at</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>\n {span.endTime ? format(new Date(span.endTime), 'hh:mm:ss:SSS a') : '-'}\n </DataKeysAndValues.Value>\n <DataKeysAndValues.Key>Start Shift</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{spanStartTimeShift}ms</DataKeysAndValues.Value>\n </DataKeysAndValues>\n </HoverCardContent>\n </HoverCard>\n );\n}\n","import { format } from 'date-fns';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\n\nenum TraceStatus {\n SUCCESS = 'success',\n ERROR = 'error',\n RUNNING = 'running',\n}\n\nfunction computeTraceStatus(span: { error?: unknown; endedAt?: Date | string | null }): TraceStatus {\n if (span.error != null) return TraceStatus.ERROR;\n if (span.endedAt == null) return TraceStatus.RUNNING;\n return TraceStatus.SUCCESS;\n}\n\n/** Lightweight root-span fields available from `useTraceLightSpans`. */\ntype RootSpanSummary = {\n entityId?: string | null;\n entityName?: string | null;\n entityType?: string | null;\n startedAt: Date | string;\n endedAt?: Date | string | null;\n error?: unknown;\n};\n\nexport interface TraceKeysAndValuesProps {\n rootSpan: RootSpanSummary;\n numOfCol?: 1 | 2 | 3;\n className?: string;\n}\n\nexport function TraceKeysAndValues({ rootSpan, numOfCol = 2, className }: TraceKeysAndValuesProps) {\n const startedAt = rootSpan.startedAt ? new Date(rootSpan.startedAt) : null;\n const endedAt = rootSpan.endedAt ? new Date(rootSpan.endedAt) : null;\n const status = computeTraceStatus(rootSpan);\n const statusLabel = status === TraceStatus.ERROR ? 'ERROR' : status === TraceStatus.RUNNING ? 'RUNNING' : 'SUCCESS';\n\n return (\n <DataKeysAndValues numOfCol={numOfCol} className={className}>\n {rootSpan.entityId && (\n <>\n <DataKeysAndValues.Key>Entity Id</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{rootSpan.entityName || rootSpan.entityId}</DataKeysAndValues.Value>\n </>\n )}\n {rootSpan.entityType && (\n <>\n <DataKeysAndValues.Key>Entity Type</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{rootSpan.entityType}</DataKeysAndValues.Value>\n </>\n )}\n <DataKeysAndValues.Key>Status</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{statusLabel}</DataKeysAndValues.Value>\n {startedAt && endedAt && (\n <>\n <DataKeysAndValues.Key>Duration</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>\n {`${(endedAt.getTime() - startedAt.getTime()).toLocaleString()}ms`}\n </DataKeysAndValues.Value>\n </>\n )}\n {startedAt && (\n <>\n <DataKeysAndValues.Key>Started at</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{format(startedAt, 'MMM dd, h:mm:ss.SSS aaa')}</DataKeysAndValues.Value>\n </>\n )}\n {endedAt && (\n <>\n <DataKeysAndValues.Key>Ended at</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{format(endedAt, 'MMM dd, h:mm:ss.SSS aaa')}</DataKeysAndValues.Value>\n </>\n )}\n </DataKeysAndValues>\n );\n}\n","import type { UISpan } from '../types';\n\nexport function getSpanDescendantIds(span: UISpan): string[] {\n if (!span.spans || span.spans.length === 0) {\n return [];\n }\n\n const descendantIds: string[] = [];\n\n span.spans.forEach(childSpan => {\n descendantIds.push(childSpan.id);\n descendantIds.push(...getSpanDescendantIds(childSpan));\n });\n\n return descendantIds;\n}\n\nexport function getAllSpanIds(spans: UISpan[]): string[] {\n const ids: string[] = [];\n for (const span of spans) {\n ids.push(span.id);\n ids.push(...getSpanDescendantIds(span));\n }\n return ids;\n}\n","import { useEffect } from 'react';\nimport { getSpanDescendantIds } from '../hooks/get-all-span-ids';\nimport type { UISpan } from '../types';\nimport { getSpanTypeUi } from './shared';\nimport { TimelineExpandCol } from './timeline-expand-col';\nimport { TimelineNameCol } from './timeline-name-col';\nimport { TimelineTimingCol } from './timeline-timing-col';\n\ntype TraceTimelineSpanProps = {\n span: UISpan;\n siblings?: UISpan[];\n depth?: number;\n onSpanClick?: (id: string) => void;\n selectedSpanId?: string;\n isLastChild?: boolean;\n overallLatency?: number;\n overallStartTime?: string;\n fadedTypes?: string[];\n searchPhrase?: string;\n featuredSpanIds?: string[];\n expandedSpanIds?: string[];\n setExpandedSpanIds?: React.Dispatch<React.SetStateAction<string[]>>;\n chartWidth?: 'wide' | 'default';\n};\n\nexport function TraceTimelineSpan({\n span,\n siblings,\n depth = 0,\n onSpanClick,\n selectedSpanId,\n isLastChild,\n overallLatency,\n overallStartTime,\n fadedTypes,\n searchPhrase,\n featuredSpanIds,\n expandedSpanIds,\n setExpandedSpanIds,\n chartWidth,\n}: TraceTimelineSpanProps) {\n const hasChildren = span.spans && span.spans.length > 0;\n const numOfChildren = span.spans ? span.spans.length : 0;\n const allDescendantIds = getSpanDescendantIds(span);\n const totalDescendants = allDescendantIds.length;\n const isRootSpan = depth === 0;\n const spanUI = getSpanTypeUi(span?.type);\n const isExpanded = expandedSpanIds ? expandedSpanIds.includes(span.id) : false;\n const isFadedBySearch = featuredSpanIds && featuredSpanIds.length > 0 ? !featuredSpanIds.includes(span.id) : false;\n const isFadedByType = fadedTypes && fadedTypes.length > 0 ? fadedTypes.includes(spanUI?.typePrefix || '') : false;\n const isFaded = isFadedByType || isFadedBySearch;\n\n useEffect(() => {\n if (!featuredSpanIds || allDescendantIds.length === 0) return;\n if (isExpanded) return;\n const hasFeaturedDescendant = allDescendantIds.some(id => featuredSpanIds.includes(id));\n if (hasFeaturedDescendant && setExpandedSpanIds) {\n setExpandedSpanIds(prev => (!prev || prev.includes(span.id) ? (prev ?? [span.id]) : [...prev, span.id]));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [featuredSpanIds, allDescendantIds]);\n\n const toggleChildren = () => {\n if (!setExpandedSpanIds) return;\n setExpandedSpanIds(prev => {\n if (!prev) return prev;\n return isExpanded ? prev.filter(id => id !== span.id) : [...prev, span.id];\n });\n };\n\n const expandAllDescendants = () => {\n if (!setExpandedSpanIds) return;\n setExpandedSpanIds(prev => {\n if (!prev) return prev;\n return Array.from(new Set([...prev, span.id, ...allDescendantIds]));\n });\n };\n\n const collapseAllDescendants = () => {\n if (!setExpandedSpanIds) return;\n setExpandedSpanIds(prev => {\n if (!prev) return prev;\n const idsToRemove = new Set(allDescendantIds);\n return prev.filter(id => !idsToRemove.has(id));\n });\n };\n\n const collapseAll = () => {\n if (!setExpandedSpanIds) return;\n setExpandedSpanIds(prev => {\n if (!prev) return prev;\n const idsToRemove = new Set([span.id, ...allDescendantIds]);\n return prev.filter(id => !idsToRemove.has(id));\n });\n };\n\n const allDescendantsExpanded = allDescendantIds.every(id => expandedSpanIds?.includes(id));\n\n const siblingsWithChildren = (siblings ?? []).filter(s => s.spans && s.spans.length > 0);\n const siblingsWithChildrenCount = siblingsWithChildren.length;\n const siblingsAllExpanded =\n siblingsWithChildrenCount > 0 && siblingsWithChildren.every(s => expandedSpanIds?.includes(s.id));\n\n const toggleSiblings = () => {\n if (!setExpandedSpanIds || siblingsWithChildrenCount === 0) return;\n setExpandedSpanIds(prev => {\n if (!prev) return prev;\n if (siblingsAllExpanded) {\n const idsToRemove = new Set<string>();\n siblingsWithChildren.forEach(s => {\n idsToRemove.add(s.id);\n getSpanDescendantIds(s).forEach(id => idsToRemove.add(id));\n });\n return prev.filter(id => !idsToRemove.has(id));\n }\n return Array.from(new Set([...prev, ...siblingsWithChildren.map(s => s.id)]));\n });\n };\n\n return (\n <>\n <TimelineNameCol\n span={span}\n spanUI={spanUI}\n isFaded={isFaded}\n depth={depth}\n onSpanClick={onSpanClick}\n selectedSpanId={selectedSpanId}\n isLastChild={isLastChild}\n hasChildren={hasChildren}\n isRootSpan={isRootSpan}\n isExpanded={isExpanded}\n />\n\n <TimelineExpandCol\n isSelected={selectedSpanId === span.id}\n isFaded={isFaded}\n isExpanded={isExpanded}\n isRootSpan={isRootSpan}\n toggleChildren={toggleChildren}\n expandAllDescendants={expandAllDescendants}\n collapseAllDescendants={collapseAllDescendants}\n collapseAll={collapseAll}\n totalDescendants={totalDescendants}\n allDescendantsExpanded={allDescendantsExpanded}\n numOfChildren={numOfChildren}\n toggleSiblings={toggleSiblings}\n siblingsAllExpanded={siblingsAllExpanded}\n siblingsWithChildrenCount={siblingsWithChildrenCount}\n />\n\n <TimelineTimingCol\n span={span}\n selectedSpanId={selectedSpanId}\n isFaded={isFaded}\n overallLatency={overallLatency}\n overallStartTime={overallStartTime}\n color={spanUI?.color}\n chartWidth={chartWidth}\n />\n\n {hasChildren &&\n isExpanded &&\n span.spans?.map((childSpan: UISpan, idx: number, array: UISpan[]) => {\n const isLast = idx === array.length - 1;\n\n return (\n <TraceTimelineSpan\n key={childSpan.id}\n span={childSpan}\n siblings={array}\n depth={depth + 1}\n onSpanClick={onSpanClick}\n selectedSpanId={selectedSpanId}\n isLastChild={isLast}\n overallLatency={overallLatency}\n overallStartTime={overallStartTime}\n fadedTypes={fadedTypes}\n searchPhrase={searchPhrase}\n expandedSpanIds={expandedSpanIds}\n setExpandedSpanIds={setExpandedSpanIds}\n featuredSpanIds={featuredSpanIds}\n chartWidth={chartWidth}\n />\n );\n })}\n </>\n );\n}\n","import type { Dispatch, SetStateAction } from 'react';\nimport { useMemo } from 'react';\nimport type { UISpan } from '../types';\nimport { spanTypePrefixes, getSpanTypeUi } from './shared';\nimport { TraceTimelineSpan } from './trace-timeline-span';\nimport { Spinner } from '@/ds/components/Spinner';\nimport { cn } from '@/lib/utils';\n\ntype TraceTimelineProps = {\n hierarchicalSpans: UISpan[];\n onSpanClick: (id: string) => void;\n selectedSpanId?: string;\n isLoading?: boolean;\n fadedTypes?: string[];\n expandedSpanIds?: string[];\n setExpandedSpanIds?: Dispatch<SetStateAction<string[]>>;\n featuredSpanIds?: string[];\n chartWidth?: 'wide' | 'default';\n};\n\nexport function TraceTimeline({\n hierarchicalSpans = [],\n onSpanClick,\n selectedSpanId,\n isLoading,\n fadedTypes,\n expandedSpanIds,\n setExpandedSpanIds,\n featuredSpanIds,\n chartWidth = 'default',\n}: TraceTimelineProps) {\n const overallLatency = hierarchicalSpans?.[0]?.latency || 0;\n const overallStartTime = hierarchicalSpans?.[0]?.startTime || '';\n\n const usedSpanTypes = useMemo(() => {\n const collectTypes = (spans: UISpan[]): Set<string> => {\n const types = new Set<string>();\n for (const span of spans) {\n const prefix = span.type?.toLowerCase().split('_')[0];\n if (prefix) types.add(prefix);\n if (span.spans) {\n for (const t of collectTypes(span.spans)) types.add(t);\n }\n }\n return types;\n };\n const types = collectTypes(hierarchicalSpans);\n const hasOther = [...types].some(t => !spanTypePrefixes.includes(t));\n const known = spanTypePrefixes.filter(p => p !== 'other' && types.has(p));\n if (hasOther) known.push('other');\n return known;\n }, [hierarchicalSpans]);\n\n return (\n <>\n {isLoading ? (\n <div\n className={cn(\n 'flex items-center text-ui-sm gap-3 bg-surface3/50 rounded-md p-3 justify-center text-neutral3',\n '[&_svg]:w-[1.25em] [&_svg]:h-[1.25em] [&_svg]:opacity-50',\n )}\n >\n <Spinner /> Loading Trace Timeline ...\n </div>\n ) : (\n <>\n {usedSpanTypes.length > 0 && (\n <div className=\"flex flex-wrap gap-3 px-2 py-1.5 justify-end\">\n {usedSpanTypes.map(type => {\n const spanUI = getSpanTypeUi(type);\n return (\n <div key={type} className=\"flex items-center gap-1 text-ui-sm text-neutral3\">\n <span\n className=\"inline-block w-1.5 h-1.5 rounded-full shrink-0\"\n style={{ backgroundColor: spanUI?.color }}\n />\n {spanUI?.label || type}\n </div>\n );\n })}\n </div>\n )}\n <div className=\"grid grid-cols-[minmax(0,1fr)_auto_auto] items-start content-start gap-y-px overflow-hidden py-1\">\n {hierarchicalSpans?.map(span => (\n <TraceTimelineSpan\n key={span.id}\n span={span}\n siblings={hierarchicalSpans}\n onSpanClick={onSpanClick}\n selectedSpanId={selectedSpanId}\n overallLatency={overallLatency}\n overallStartTime={overallStartTime}\n fadedTypes={fadedTypes}\n featuredSpanIds={featuredSpanIds}\n expandedSpanIds={expandedSpanIds}\n setExpandedSpanIds={setExpandedSpanIds}\n chartWidth={chartWidth}\n />\n ))}\n </div>\n </>\n )}\n </>\n );\n}\n","import type { ReactNode } from 'react';\nimport { PropertyFilterActions } from '@/ds/components/PropertyFilter/property-filter-actions';\nimport { PropertyFilterApplied } from '@/ds/components/PropertyFilter/property-filter-applied';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\nimport { cn } from '@/lib/utils';\n\ntype TracesToolbarProps = {\n /** Keep all filter pills but reset each value to its neutral state\n * ('' for text, 'Any' for single-select, [] for multi-select). */\n onClear?: () => void;\n /** Fully remove all filter pills. */\n onRemoveAll?: () => void;\n onSave?: () => void;\n /** When provided, an extra \"Remove saved filters\" option is shown —\n * wire it up only when there is actually a saved set to remove. */\n onRemoveSaved?: () => void;\n isLoading?: boolean;\n filterFields: PropertyFilterField[];\n filterTokens: PropertyFilterToken[];\n onFilterTokensChange: (tokens: PropertyFilterToken[]) => void;\n autoFocusFilterFieldId?: string;\n /** Field ids rendered as read-only pills (cannot be edited or removed). */\n lockedFieldIds?: readonly string[];\n lockedTooltipContent?: ReactNode;\n};\n\nexport function TracesToolbar({\n onClear,\n onRemoveAll,\n onSave,\n onRemoveSaved,\n isLoading,\n filterFields,\n filterTokens,\n onFilterTokensChange,\n autoFocusFilterFieldId,\n lockedFieldIds,\n lockedTooltipContent,\n}: TracesToolbarProps) {\n const hasActiveFilters = filterTokens.length > 0;\n const lockedSet = new Set(lockedFieldIds ?? []);\n const editableTokens = filterTokens.filter(t => !lockedSet.has(t.fieldId));\n const hasNonDefaultFilter = editableTokens.some(token => isNonDefaultFilter(token, filterFields));\n const hasEditableFilters = editableTokens.length > 0;\n\n return (\n // 1fr | auto — pills wrap in the first column; Clear stays pinned to the\n // top of the second column regardless of how many pill rows render.\n <div className={cn('grid grid-cols-[1fr_auto] gap-3 items-start ')}>\n <PropertyFilterApplied\n fields={filterFields}\n tokens={filterTokens}\n onTokensChange={onFilterTokensChange}\n disabled={isLoading}\n autoFocusFieldId={autoFocusFilterFieldId}\n lockedFieldIds={lockedFieldIds}\n lockedTooltipContent={lockedTooltipContent}\n />\n\n {hasActiveFilters && hasEditableFilters && (\n <PropertyFilterActions\n disabled={isLoading}\n onClear={hasNonDefaultFilter ? onClear : undefined}\n onRemoveAll={onRemoveAll}\n onSave={onSave}\n onRemoveSaved={onRemoveSaved}\n />\n )}\n </div>\n );\n}\n\nfunction isNonDefaultFilter(token: PropertyFilterToken, fields: PropertyFilterField[]): boolean {\n const field = fields.find(f => f.id === token.fieldId);\n if (!field) return false;\n if (field.kind === 'text') {\n return typeof token.value === 'string' && token.value.trim() !== '';\n }\n if (field.kind === 'pick-multi') {\n if (field.multi) return Array.isArray(token.value) && token.value.length > 0;\n return typeof token.value === 'string' && token.value !== '' && token.value !== 'Any';\n }\n if (field.kind === 'multi-select') {\n return Array.isArray(token.value) && token.value.length > 0;\n }\n return false;\n}\n","import { useMastraClient } from '@mastra/react';\nimport { useState } from 'react';\nimport { downloadJson } from '@/lib/file';\nimport { toast } from '@/lib/toast';\n\nexport function useDownloadTraceJson() {\n const client = useMastraClient();\n const [isPending, setIsPending] = useState(false);\n\n const download = (traceId: string) => {\n if (isPending) return;\n setIsPending(true);\n\n // getTrace returns the full payload (heavy input/output), unlike the light spans the panel renders.\n const task = client\n .getTrace(traceId)\n .then(trace => downloadJson(`trace-${traceId}.json`, trace))\n .finally(() => setIsPending(false));\n\n toast.promise({\n myPromise: task,\n loadingMessage: 'Preparing trace download…',\n successMessage: 'Trace downloaded',\n errorMessage: 'Failed to download trace',\n });\n };\n\n return { download, isPending };\n}\n","import type { LightSpanRecord } from '@mastra/core/storage';\nimport {\n CircleGaugeIcon,\n ChevronsDownUpIcon,\n ChevronsUpDownIcon,\n DownloadIcon,\n Link2Icon,\n Loader2Icon,\n SaveIcon,\n} from 'lucide-react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { getAllSpanIds } from '../hooks/get-all-span-ids';\nimport { useDownloadTraceJson } from '../hooks/use-download-trace-json';\nimport { formatHierarchicalSpans } from './format-hierarchical-spans';\nimport { TraceKeysAndValues } from './trace-keys-and-values';\nimport { TraceTimeline } from './trace-timeline';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport { Notice } from '@/ds/components/Notice';\nimport { Icon } from '@/ds/icons/Icon';\nimport type { LinkComponent } from '@/ds/types/link-component';\nimport { truncateString } from '@/lib/truncate-string';\n\nexport type TraceDataPanelPlacement = 'traces-list' | 'trace-page';\n\nexport interface TraceDataPanelViewProps {\n traceId: string;\n /** Lightweight spans for the trace. Caller fetches via useTraceLightSpans. */\n spans: LightSpanRecord[] | undefined;\n isLoading?: boolean;\n onClose: () => void;\n onSpanSelect?: (spanId: string | undefined) => void;\n onEvaluateTrace?: () => void;\n /** When set, a \"Save as Dataset Item\" button appears; the consumer owns the dialog. */\n onSaveAsDatasetItem?: (args: { traceId: string; rootSpanId: string | undefined }) => void;\n initialSpanId?: string | null;\n onPrevious?: () => void;\n onNext?: () => void;\n collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n placement: TraceDataPanelPlacement;\n timelineChartWidth?: 'wide' | 'default';\n /** When both are provided, renders an \"Open trace page\" button. */\n LinkComponent?: LinkComponent;\n traceHref?: string;\n /**\n * Span treated as the displayed root of the timeline. Required for branch\n * subtrees from `getBranch` where the anchor has a real parent that's outside\n * `spans`. When omitted, the span with no parent is used (trace case).\n */\n anchorSpanId?: string;\n /**\n * Whether to render the \"Evaluating traces and saving them as dataset items is\n * available in Mastra Studio\" info notice when neither `onEvaluateTrace` nor\n * `onSaveAsDatasetItem` is provided. Defaults to `true`. Pass `false` when this\n * panel is rendered inside Studio in a context that intentionally omits those\n * handlers (e.g. inline below an experiment result).\n */\n showUnavailableFeaturesMsg?: boolean;\n}\n\nexport function TraceDataPanelView({\n traceId,\n spans,\n isLoading,\n onClose,\n onSpanSelect,\n onEvaluateTrace,\n onSaveAsDatasetItem,\n initialSpanId,\n onPrevious,\n onNext,\n collapsed: controlledCollapsed,\n onCollapsedChange,\n placement,\n timelineChartWidth = 'default',\n LinkComponent,\n traceHref,\n anchorSpanId,\n showUnavailableFeaturesMsg = true,\n}: TraceDataPanelViewProps) {\n const isOnTracePage = placement === 'trace-page';\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const setCollapsed = onCollapsedChange ?? setInternalCollapsed;\n\n const { download: downloadTraceJson, isPending: isDownloadingTrace } = useDownloadTraceJson();\n\n const contentRef = useRef<HTMLDivElement>(null);\n const [selectedSpanId, setSelectedSpanId] = useState<string | undefined>(initialSpanId ?? undefined);\n\n // Sync selected span when initialSpanId or trace data changes\n useEffect(() => {\n // No span requested: clear immediately.\n if (!initialSpanId) {\n setSelectedSpanId(undefined);\n onSpanSelect?.(undefined);\n return;\n }\n // Span requested: wait for trace data before deciding so an in-flight\n // fetch doesn't wipe a URL-provided selection.\n if (!spans) return;\n\n const found = spans.find(s => s.spanId === initialSpanId);\n if (found) {\n setSelectedSpanId(initialSpanId);\n onSpanSelect?.(initialSpanId);\n } else {\n setSelectedSpanId(undefined);\n onSpanSelect?.(undefined);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialSpanId, spans]);\n\n // Scroll the selected span into view within the timeline\n useEffect(() => {\n if (!selectedSpanId || !contentRef.current) return;\n const el = contentRef.current.querySelector(`[data-span-id=\"${selectedSpanId}\"]`);\n el?.scrollIntoView({ block: 'nearest' });\n }, [selectedSpanId]);\n\n const hierarchicalSpans = useMemo(() => formatHierarchicalSpans(spans ?? [], anchorSpanId), [spans, anchorSpanId]);\n\n const [expandedSpanIds, setExpandedSpanIds] = useState<string[]>([]);\n\n useEffect(() => {\n if (hierarchicalSpans.length > 0) {\n setExpandedSpanIds(getAllSpanIds(hierarchicalSpans));\n }\n }, [hierarchicalSpans]);\n\n const rootSpan = useMemo(\n () => (anchorSpanId ? spans?.find(s => s.spanId === anchorSpanId) : spans?.find(s => s.parentSpanId == null)),\n [spans, anchorSpanId],\n );\n\n const handleSpanClick = (id: string) => {\n const newId = selectedSpanId === id ? undefined : id;\n setSelectedSpanId(newId);\n onSpanSelect?.(newId);\n };\n\n const showOpenTracePageLink = !isOnTracePage && LinkComponent && traceHref;\n\n // Shared across both header layouts (list side panel and full trace page) so a trace can be\n // downloaded from wherever it's being inspected.\n const downloadTraceButton = (\n <Button\n size=\"md\"\n tooltip=\"Download trace JSON\"\n aria-label=\"Download trace JSON\"\n disabled={isDownloadingTrace}\n onClick={() => downloadTraceJson(traceId)}\n >\n {isDownloadingTrace ? <Loader2Icon className=\"animate-spin\" /> : <DownloadIcon />}\n </Button>\n );\n\n return (\n <DataPanel collapsed={collapsed}>\n <DataPanel.Header>\n {isOnTracePage ? (\n <>\n <DataPanel.Heading>Trace Timeline</DataPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">{downloadTraceButton}</ButtonsGroup>\n </>\n ) : (\n <>\n <DataPanel.Heading>\n Trace <b># {truncateString(traceId, 12)}</b>\n </DataPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">\n {onCollapsedChange && (\n <Button\n size=\"md\"\n tooltip={collapsed ? 'Expand panel' : 'Collapse panel'}\n onClick={() => setCollapsed(!collapsed)}\n >\n {collapsed ? <ChevronsUpDownIcon /> : <ChevronsDownUpIcon />}\n </Button>\n )}\n {(onPrevious || onNext) && (\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Previous trace\"\n nextLabel=\"Next trace\"\n />\n )}\n {showOpenTracePageLink && (\n <Button\n as={LinkComponent}\n href={traceHref}\n size=\"md\"\n tooltip=\"Open trace page\"\n aria-label=\"Open trace page\"\n >\n <Link2Icon />\n </Button>\n )}\n {downloadTraceButton}\n <DataPanel.CloseButton onClick={onClose} />\n </ButtonsGroup>\n </>\n )}\n </DataPanel.Header>\n\n {!collapsed &&\n (isLoading ? (\n <DataPanel.LoadingData>Loading trace...</DataPanel.LoadingData>\n ) : hierarchicalSpans.length === 0 ? (\n <DataPanel.NoData>No spans found for this trace.</DataPanel.NoData>\n ) : (\n <DataPanel.Content ref={contentRef}>\n {!isOnTracePage && rootSpan && <TraceKeysAndValues rootSpan={rootSpan} className=\"mb-6\" />}\n\n {!isOnTracePage && (onEvaluateTrace || onSaveAsDatasetItem) && (\n <div className=\"mb-6 flex justify-between items-center gap-4\">\n {onEvaluateTrace && (\n <Button size=\"sm\" onClick={onEvaluateTrace}>\n <Icon>\n <CircleGaugeIcon />\n </Icon>\n Evaluate Trace\n </Button>\n )}\n {onSaveAsDatasetItem && (\n <Button size=\"sm\" onClick={() => onSaveAsDatasetItem({ traceId, rootSpanId: rootSpan?.spanId })}>\n <Icon>\n <SaveIcon />\n </Icon>\n Save as Dataset Item\n </Button>\n )}\n </div>\n )}\n\n {!isOnTracePage && !onEvaluateTrace && !onSaveAsDatasetItem && showUnavailableFeaturesMsg && (\n <Notice variant=\"info\" className=\"mb-6\">\n <Notice.Message>\n Evaluating traces and saving them as dataset items is available in Mastra Studio (local or deployed).\n </Notice.Message>\n </Notice>\n )}\n\n <TraceTimeline\n hierarchicalSpans={hierarchicalSpans}\n onSpanClick={handleSpanClick}\n selectedSpanId={selectedSpanId}\n expandedSpanIds={expandedSpanIds}\n setExpandedSpanIds={setExpandedSpanIds}\n chartWidth={timelineChartWidth}\n />\n </DataPanel.Content>\n ))}\n </DataPanel>\n );\n}\n","import type { SpanRecord } from '@mastra/core/storage';\n\ntype MessageLike = { role?: string; content?: unknown };\n\n/**\n * Extract a truncated text preview from a span's input field.\n * Agent traces store `input` as an array of message objects.\n * Returns the text content of all user messages joined, truncated to maxLength.\n */\nexport function getInputPreview(input: unknown, maxLength = 100): string {\n if (input == null) return '';\n\n // Unwrap legacy { messages: [...] } wrapper from agent_run spans\n const messageArray = Array.isArray(input)\n ? input\n : input && typeof input === 'object' && !Array.isArray(input) && Array.isArray((input as any).messages)\n ? (input as any).messages\n : null;\n\n if (messageArray) {\n const messages = messageArray as MessageLike[];\n const userMessages = messages\n .filter(m => m?.role === 'user')\n .map(m => {\n if (typeof m.content === 'string') return m.content;\n if (Array.isArray(m.content)) {\n return m.content\n .map((part: any) => {\n if (typeof part === 'string') return part;\n if (part?.type === 'text' && typeof part.text === 'string') return part.text;\n return '';\n })\n .filter(Boolean)\n .join(' ');\n }\n return '';\n })\n .filter(Boolean);\n\n const joined = userMessages.join(' | ');\n if (joined.length > maxLength) {\n return joined.slice(0, maxLength) + '…';\n }\n return joined;\n }\n\n if (typeof input === 'string') {\n if (input.length > maxLength) {\n return input.slice(0, maxLength) + '…';\n }\n return input;\n }\n\n const str = JSON.stringify(input);\n if (str.length > maxLength) {\n return str.slice(0, maxLength) + '…';\n }\n return str;\n}\n\ntype TokenUsage = {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n};\n\n/**\n * Check if a span indicates that the token limit was exceeded\n */\nexport function isTokenLimitExceeded(span?: SpanRecord): boolean {\n return span?.attributes?.finishReason === 'length';\n}\n\n/**\n * Get a human-readable message for token limit exceeded\n */\nexport function getTokenLimitMessage(span?: SpanRecord): string {\n const usage = span?.attributes?.usage as TokenUsage | undefined;\n\n if (!usage) {\n return `The model stopped generating because it reached the maximum token limit. The response was truncated and may be incomplete.`;\n }\n\n const inputTokens = usage.inputTokens ?? 0;\n const outputTokens = usage.outputTokens ?? 0;\n const totalTokens = usage.totalTokens ?? inputTokens + outputTokens;\n\n // Show breakdown if we have detailed info\n if (inputTokens > 0 || outputTokens > 0) {\n return `The model stopped generating because it reached the maximum token limit. The response was truncated and may be incomplete.\\n\\nToken usage: ${inputTokens} input + ${outputTokens} output = ${totalTokens} total`;\n }\n\n return `The model stopped generating because it reached the maximum token limit (${totalTokens} tokens). The response was truncated and may be incomplete.`;\n}\n","import type { SpanRecord } from '@mastra/core/storage';\nimport { format } from 'date-fns';\nimport { BracesIcon, FileInputIcon, FileOutputIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { getTokenLimitMessage, isTokenLimitExceeded } from '../utils/span-utils';\nimport { SpanTokenUsage } from './span-token-usage';\nimport type { TokenUsage } from './span-token-usage';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { DataPanel } from '@/ds/components/DataPanel';\nimport { Notice } from '@/ds/components/Notice';\nimport { Tab, TabContent, TabList, Tabs } from '@/ds/components/Tabs';\n\nfunction buildDialogTitle(sectionTitle: string, icon: ReactNode, span: { spanId: string; traceId: string }) {\n return (\n <>\n <span className=\"flex items-center gap-1.5 text-neutral2 uppercase tracking-widest [&>svg]:size-3.5\">\n {icon}\n {sectionTitle}\n </span>\n <span>\n › Span <b className=\"text-neutral3\">#{span.spanId}</b>\n </span>\n <span>\n › Trace <b className=\"text-neutral3\">#{span.traceId}</b>\n </span>\n </>\n );\n}\n\nexport interface SpanDataPanelViewProps {\n traceId: string;\n spanId: string;\n /** Full span record. Caller fetches via useSpanDetail. */\n span: SpanRecord | undefined;\n isLoading?: boolean;\n onClose: () => void;\n onPrevious?: () => void;\n onNext?: () => void;\n activeTab?: string;\n onTabChange?: (tab: string) => void;\n /**\n * When provided, a \"Scoring\" tab appears; the slot receives the loaded span and renders\n * whatever scoring UI the consumer wants. When undefined, only the \"Details\" tab renders.\n */\n scoringTabSlot?: (args: { span: SpanRecord; traceId: string; spanId: string }) => ReactNode;\n /** Optional count shown in the \"Scoring\" tab label (e.g. number of scores). */\n scoringTabBadge?: ReactNode;\n /**\n * When provided, a \"Feedback\" tab appears; the slot receives the loaded span and renders\n * whatever feedback UI the consumer wants.\n */\n feedbackTabSlot?: (args: { span: SpanRecord; traceId: string; spanId: string }) => ReactNode;\n /** Optional count shown in the \"Feedback\" tab label. */\n feedbackTabBadge?: ReactNode;\n /**\n * Whether this span is the displayed root of the current view (trace root or\n * branch anchor). Controls visibility of trace-level metadata fields. Defaults\n * to `span.parentSpanId == null` (trace case) when omitted.\n */\n isAnchor?: boolean;\n}\n\nexport function SpanDataPanelView({\n traceId,\n spanId,\n span,\n isLoading,\n onClose,\n onPrevious,\n onNext,\n activeTab,\n onTabChange,\n scoringTabSlot,\n scoringTabBadge,\n feedbackTabSlot,\n feedbackTabBadge,\n isAnchor,\n}: SpanDataPanelViewProps) {\n return (\n <DataPanel>\n <DataPanel.Header>\n <DataPanel.Heading>\n Span <b># {spanId}</b>\n </DataPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">\n <DataPanel.NextPrevNav\n onPrevious={onPrevious}\n onNext={onNext}\n previousLabel=\"Previous span\"\n nextLabel=\"Next span\"\n />\n <DataPanel.CloseButton onClick={onClose} />\n </ButtonsGroup>\n </DataPanel.Header>\n\n {isLoading ? (\n <DataPanel.LoadingData>Loading span details...</DataPanel.LoadingData>\n ) : !span ? (\n <DataPanel.NoData>Span not found.</DataPanel.NoData>\n ) : (\n <SpanDataPanelContent\n span={span}\n traceId={traceId}\n spanId={spanId}\n activeTab={activeTab}\n onTabChange={onTabChange}\n scoringTabSlot={scoringTabSlot}\n scoringTabBadge={scoringTabBadge}\n feedbackTabSlot={feedbackTabSlot}\n feedbackTabBadge={feedbackTabBadge}\n isAnchor={isAnchor}\n />\n )}\n </DataPanel>\n );\n}\n\nfunction SpanDataPanelContent({\n span,\n traceId,\n spanId,\n activeTab,\n onTabChange,\n scoringTabSlot,\n scoringTabBadge,\n feedbackTabSlot,\n feedbackTabBadge,\n isAnchor,\n}: {\n span: SpanRecord;\n traceId: string;\n spanId: string;\n activeTab?: string;\n onTabChange?: (tab: string) => void;\n scoringTabSlot?: (args: { span: SpanRecord; traceId: string; spanId: string }) => ReactNode;\n scoringTabBadge?: ReactNode;\n feedbackTabSlot?: (args: { span: SpanRecord; traceId: string; spanId: string }) => ReactNode;\n feedbackTabBadge?: ReactNode;\n isAnchor?: boolean;\n}) {\n const durationMs =\n span.startedAt && span.endedAt ? new Date(span.endedAt).getTime() - new Date(span.startedAt).getTime() : null;\n const usage = span.attributes?.usage as TokenUsage | undefined;\n\n const detailsBody = (\n <>\n {isTokenLimitExceeded(span) && (\n <div className=\"mb-3\">\n <Notice variant=\"warning\" title=\"Token Limit Exceeded\">\n <Notice.Message>{getTokenLimitMessage(span)}</Notice.Message>\n </Notice>\n </div>\n )}\n\n {usage && <SpanTokenUsage usage={usage} className=\"mb-3\" />}\n\n <DataKeysAndValues>\n {/* Anchor-only: rich trace-context fields. Live on the full SpanRecord, not on the\n * lightweight payload, so they only have values once the full span is loaded. */}\n {(isAnchor ?? span.parentSpanId == null) && (\n <>\n {span.traceId && (\n <>\n <DataKeysAndValues.Key>Trace Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyTooltip=\"Copy Trace Id to clipboard\" copyValue={span.traceId}>\n {span.traceId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.tags && span.tags.length > 0 && (\n <>\n <DataKeysAndValues.Key>Tags</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{span.tags.join(', ')}</DataKeysAndValues.Value>\n </>\n )}\n {span.runId && (\n <>\n <DataKeysAndValues.Key>Run Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyTooltip=\"Copy Run Id to clipboard\" copyValue={span.runId}>\n {span.runId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.threadId && (\n <>\n <DataKeysAndValues.Key>Thread Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyTooltip=\"Copy Thread Id to clipboard\" copyValue={span.threadId}>\n {span.threadId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.sessionId && (\n <>\n <DataKeysAndValues.Key>Session Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Session Id to clipboard\"\n copyValue={span.sessionId}\n >\n {span.sessionId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.requestId && (\n <>\n <DataKeysAndValues.Key>Request Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Request Id to clipboard\"\n copyValue={span.requestId}\n >\n {span.requestId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.resourceId && (\n <>\n <DataKeysAndValues.Key>Resource Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Resource Id to clipboard\"\n copyValue={span.resourceId}\n >\n {span.resourceId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.userId && (\n <>\n <DataKeysAndValues.Key>User Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyTooltip=\"Copy User Id to clipboard\" copyValue={span.userId}>\n {span.userId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.organizationId && (\n <>\n <DataKeysAndValues.Key>Organization Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Organization Id to clipboard\"\n copyValue={span.organizationId}\n >\n {span.organizationId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n {span.experimentId && (\n <>\n <DataKeysAndValues.Key>Experiment Id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn\n copyTooltip=\"Copy Experiment Id to clipboard\"\n copyValue={span.experimentId}\n >\n {span.experimentId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n </>\n )}\n {span.name && (\n <>\n <DataKeysAndValues.Key>Name</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{span.name}</DataKeysAndValues.Value>\n </>\n )}\n {span.spanType && (\n <>\n <DataKeysAndValues.Key>Type</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{span.spanType}</DataKeysAndValues.Value>\n </>\n )}\n {span.startedAt && (\n <>\n <DataKeysAndValues.Key>Started</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>\n {format(new Date(span.startedAt), 'MMM dd, HH:mm:ss.SSS')}\n </DataKeysAndValues.Value>\n </>\n )}\n {span.endedAt && (\n <>\n <DataKeysAndValues.Key>Ended</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>{format(new Date(span.endedAt), 'MMM dd, HH:mm:ss.SSS')}</DataKeysAndValues.Value>\n </>\n )}\n {durationMs != null && (\n <>\n <DataKeysAndValues.Key>Duration</DataKeysAndValues.Key>\n <DataKeysAndValues.Value>\n {durationMs < 1000 ? `${durationMs}ms` : `${(durationMs / 1000).toFixed(2)}s`}\n </DataKeysAndValues.Value>\n </>\n )}\n </DataKeysAndValues>\n\n <div className=\"grid gap-3 mt-3\">\n <DataPanel.CodeSection\n title=\"Input\"\n dialogTitle={buildDialogTitle('Input', <FileInputIcon />, { spanId, traceId })}\n icon={<FileInputIcon />}\n codeStr={JSON.stringify(span.input ?? null, null, 2)}\n />\n <DataPanel.CodeSection\n title=\"Output\"\n dialogTitle={buildDialogTitle('Output', <FileOutputIcon />, { spanId, traceId })}\n icon={<FileOutputIcon />}\n codeStr={JSON.stringify(span.output ?? null, null, 2)}\n />\n <DataPanel.CodeSection\n title=\"Metadata\"\n dialogTitle={buildDialogTitle('Metadata', <BracesIcon />, { spanId, traceId })}\n icon={<BracesIcon />}\n codeStr={JSON.stringify(span.metadata ?? null, null, 2)}\n />\n <DataPanel.CodeSection\n title=\"Attributes\"\n dialogTitle={buildDialogTitle('Attributes', <BracesIcon />, { spanId, traceId })}\n icon={<BracesIcon />}\n codeStr={JSON.stringify(span.attributes ?? null, null, 2)}\n />\n </div>\n </>\n );\n\n // No extra tab slots → render details directly without the Tabs/TabList wrapper.\n if (!scoringTabSlot && !feedbackTabSlot) {\n return <DataPanel.Content>{detailsBody}</DataPanel.Content>;\n }\n\n return (\n <DataPanel.Content>\n <Tabs defaultTab=\"details\" value={activeTab} onValueChange={onTabChange}>\n <TabList>\n <Tab value=\"details\">Details</Tab>\n {scoringTabSlot && <Tab value=\"scoring\">Scoring {scoringTabBadge != null && <>({scoringTabBadge})</>}</Tab>}\n {feedbackTabSlot && (\n <Tab value=\"feedback\">Feedback {feedbackTabBadge != null && <>({feedbackTabBadge})</>}</Tab>\n )}\n </TabList>\n\n <TabContent value=\"details\">{detailsBody}</TabContent>\n {scoringTabSlot && <TabContent value=\"scoring\">{scoringTabSlot({ span, traceId, spanId })}</TabContent>}\n {feedbackTabSlot && <TabContent value=\"feedback\">{feedbackTabSlot({ span, traceId, spanId })}</TabContent>}\n </Tabs>\n </DataPanel.Content>\n );\n}\n","import type { SpanRecord } from '@mastra/core/storage';\nimport { format } from 'date-fns';\nimport { BracesIcon, FileInputIcon, FileOutputIcon } from 'lucide-react';\nimport { DataDetailsPanel } from '@/ds/components/DataDetailsPanel';\n\nconst KV = DataDetailsPanel.KeyValueList;\n\nexport interface SpanDetailsViewProps {\n spanId: string;\n /** Full span record. Caller fetches via useSpanDetail. */\n span: SpanRecord | undefined;\n isLoading?: boolean;\n onClose: () => void;\n}\n\n/**\n * Compact span panel using `DataDetailsPanel` (popover-style). Shows basic span metadata +\n * input/output/metadata/attributes code sections. Use this for inline span inspection; for the\n * full-width span view with scoring tab + prev/next nav, use `SpanDataPanelView`.\n */\nexport function SpanDetailsView({ spanId, span, isLoading, onClose }: SpanDetailsViewProps) {\n const durationMs =\n span?.startedAt && span?.endedAt ? new Date(span.endedAt).getTime() - new Date(span.startedAt).getTime() : null;\n\n return (\n <DataDetailsPanel>\n <DataDetailsPanel.Header>\n <DataDetailsPanel.Heading>\n Span <b># {spanId}</b>\n </DataDetailsPanel.Heading>\n <DataDetailsPanel.CloseButton onClick={onClose} />\n </DataDetailsPanel.Header>\n\n {isLoading ? (\n <DataDetailsPanel.LoadingData>Loading span...</DataDetailsPanel.LoadingData>\n ) : !span ? (\n <DataDetailsPanel.NoData>Span not found.</DataDetailsPanel.NoData>\n ) : (\n <DataDetailsPanel.Content>\n <KV>\n {span.spanType && (\n <>\n <KV.Key>Type</KV.Key>\n <KV.Value>{span.spanType}</KV.Value>\n </>\n )}\n {span.startedAt && (\n <>\n <KV.Key>Started</KV.Key>\n <KV.Value>{format(new Date(span.startedAt), 'MMM dd, HH:mm:ss.SSS')}</KV.Value>\n </>\n )}\n {span.endedAt && (\n <>\n <KV.Key>Ended</KV.Key>\n <KV.Value>{format(new Date(span.endedAt), 'MMM dd, HH:mm:ss.SSS')}</KV.Value>\n </>\n )}\n {durationMs != null && (\n <>\n <KV.Key>Duration</KV.Key>\n <KV.Value>{durationMs < 1000 ? `${durationMs}ms` : `${(durationMs / 1000).toFixed(2)}s`}</KV.Value>\n </>\n )}\n </KV>\n\n <br />\n\n <DataDetailsPanel.CodeSection\n title=\"Input\"\n icon={<FileInputIcon />}\n codeStr={JSON.stringify(span.input ?? null, null, 2)}\n />\n <DataDetailsPanel.CodeSection\n title=\"Output\"\n icon={<FileOutputIcon />}\n codeStr={JSON.stringify(span.output ?? null, null, 2)}\n />\n <DataDetailsPanel.CodeSection\n title=\"Metadata\"\n icon={<BracesIcon />}\n codeStr={JSON.stringify(span.metadata ?? null, null, 2)}\n />\n <DataDetailsPanel.CodeSection\n title=\"Attributes\"\n icon={<BracesIcon />}\n codeStr={JSON.stringify(span.attributes ?? null, null, 2)}\n />\n </DataDetailsPanel.Content>\n )}\n </DataDetailsPanel>\n );\n}\n","import type { LightSpanRecord } from '@mastra/core/storage';\nimport { useEffect, useMemo, useState } from 'react';\nimport { getAllSpanIds } from '../hooks/get-all-span-ids';\nimport { formatHierarchicalSpans } from './format-hierarchical-spans';\nimport { TraceTimeline } from './trace-timeline';\nimport { DataDetailsPanel } from '@/ds/components/DataDetailsPanel';\n\nexport interface TraceDetailsViewProps {\n traceId: string;\n /** Lightweight spans for the trace. Caller fetches via useTraceLightSpans. */\n spans: LightSpanRecord[] | undefined;\n isLoading?: boolean;\n onClose: () => void;\n /** Called when the user clicks a span in the timeline. Toggling a selected span off passes undefined. */\n onSpanSelect?: (spanId: string | undefined) => void;\n /** Fully controlled selection — the span to highlight. Pass whatever the parent's source of truth is. */\n selectedSpanId?: string | null;\n}\n\n/**\n * Compact trace panel using `DataDetailsPanel` (popover-style). Renders the timeline only —\n * no trace header KV, no evaluate/save actions. Use this for inline trace inspection from a\n * list page (e.g. the Logs page). For the full-width trace view, use `TraceDataPanelView`.\n */\nexport function TraceDetailsView({\n traceId,\n spans,\n isLoading,\n onClose,\n onSpanSelect,\n selectedSpanId,\n}: TraceDetailsViewProps) {\n const hierarchicalSpans = useMemo(() => formatHierarchicalSpans(spans ?? []), [spans]);\n\n const [expandedSpanIds, setExpandedSpanIds] = useState<string[]>([]);\n\n useEffect(() => {\n if (hierarchicalSpans.length > 0) {\n setExpandedSpanIds(getAllSpanIds(hierarchicalSpans));\n }\n }, [hierarchicalSpans]);\n\n const handleSpanClick = (id: string) => {\n onSpanSelect?.(selectedSpanId === id ? undefined : id);\n };\n\n return (\n <DataDetailsPanel>\n <DataDetailsPanel.Header>\n <DataDetailsPanel.Heading>\n Trace <b># {traceId}</b>\n </DataDetailsPanel.Heading>\n <DataDetailsPanel.CloseButton onClick={onClose} />\n </DataDetailsPanel.Header>\n\n {isLoading ? (\n <DataDetailsPanel.LoadingData>Loading trace...</DataDetailsPanel.LoadingData>\n ) : hierarchicalSpans.length === 0 ? (\n <DataDetailsPanel.NoData>No spans found for this trace.</DataDetailsPanel.NoData>\n ) : (\n <DataDetailsPanel.Content>\n <TraceTimeline\n hierarchicalSpans={hierarchicalSpans}\n onSpanClick={handleSpanClick}\n selectedSpanId={selectedSpanId ?? undefined}\n expandedSpanIds={expandedSpanIds}\n setExpandedSpanIds={setExpandedSpanIds}\n />\n </DataDetailsPanel.Content>\n )}\n </DataDetailsPanel>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface TracesLayoutProps {\n /** The trace list (left column). */\n listSlot: ReactNode;\n /** The trace data panel (right column, top). When null/undefined, the whole right column collapses. */\n tracePanelSlot?: ReactNode;\n /** The span data panel (right column, middle). Only rendered when truthy. */\n spanPanelSlot?: ReactNode;\n /** The score data panel (right column, bottom). Only rendered when truthy. */\n scorePanelSlot?: ReactNode;\n /** When the trace panel is collapsed, the right column's grid-rows squash the trace row to `auto`. */\n traceCollapsed?: boolean;\n}\n\n/**\n * Pure 2-column layout shell for the traces page. Owns no state and fetches no data — pass slots in.\n * Right-column row template adapts based on which panels are present.\n */\nexport function TracesLayout({\n listSlot,\n tracePanelSlot,\n spanPanelSlot,\n scorePanelSlot,\n traceCollapsed,\n}: TracesLayoutProps) {\n const hasSidePanel = !!tracePanelSlot;\n\n return (\n <div\n className={cn(\n 'grid max-h-full min-h-0 gap-4 items-start ',\n hasSidePanel ? 'grid-cols-[1fr_1fr]' : 'grid-cols-[1fr]',\n )}\n >\n {listSlot}\n\n {hasSidePanel && (\n <div\n className={cn(\n 'grid gap-4 max-h-full overflow-auto',\n scorePanelSlot\n ? traceCollapsed\n ? 'grid-rows-[auto_3fr_3fr]'\n : 'grid-rows-[2fr_3fr_3fr]'\n : spanPanelSlot\n ? traceCollapsed\n ? 'grid-rows-[auto_3fr]'\n : 'grid-rows-[2fr_3fr]'\n : traceCollapsed\n ? 'grid-rows-[auto]'\n : 'grid-rows-[1fr]',\n )}\n >\n {tracePanelSlot}\n {spanPanelSlot}\n {scorePanelSlot}\n </div>\n )}\n </div>\n );\n}\n","import { useVirtualizer } from '@tanstack/react-virtual';\nimport { useEffect, useRef } from 'react';\nimport { getInputPreview } from '../utils/span-utils';\nimport { DataListSkeleton, TracesDataList } from '@/ds/components/DataList';\nimport { cn } from '@/lib/utils';\n\n/** Span attributes fields the list view reads directly. Extra unknown keys are allowed so callers\n * can pass the full attributes record from @mastra/core/storage without mapping. */\nexport type TraceAttributes = {\n status?: string | null;\n agentId?: string | null;\n workflowId?: string | null;\n [key: string]: unknown;\n};\n\nexport type TracesListViewTrace = {\n traceId: string;\n /** Required for branch rows; absent on plain trace rows (which are root-rooted). */\n spanId?: string | null;\n /** `null`/missing → root span. Drives the Kind column's icon (top-level trace vs nested branch). */\n parentSpanId?: string | null;\n name: string;\n entityType?: string | null;\n entityId?: string | null;\n entityName?: string | null;\n attributes?: TraceAttributes | null;\n input?: unknown;\n startedAt?: Date | string | null;\n createdAt: Date | string;\n};\n\n// Fixed widths on non-flex columns prevent track shifts as the virtualizer swaps rows in/out.\nconst COLUMNS = '6rem 9rem 14rem minmax(8rem,1fr) 14rem 6rem';\n\nconst ROW_HEIGHT = 36;\nconst OVERSCAN = 8;\n\nexport type TracesListViewProps = {\n traces: TracesListViewTrace[];\n isLoading?: boolean;\n isFetchingNextPage?: boolean;\n hasNextPage?: boolean;\n setEndOfListElement?: (element: HTMLDivElement | null) => void;\n filtersApplied?: boolean;\n /** Currently featured/selected trace — its row gets the highlighted background. */\n featuredTraceId?: string | null;\n /**\n * Required in branches mode to disambiguate rows sharing a `traceId`. When set,\n * a row is featured only when both `traceId` and `spanId` match.\n */\n featuredSpanId?: string | null;\n /** Branches mode mixes root traces with subtraces — enables the Trace/Subtrace tooltip on the\n * level icon in the Name column, which is meaningless when every row is a root. */\n isBranchesMode?: boolean;\n /** Keys (`traceId:spanId`) of rows that just arrived via delta polling. Rows whose key is in\n * this set get a temporary tint to distinguish them from rows present since the last page-mode\n * fetch. Auto-expires upstream (in useTraces) after a short window. */\n recentlyAddedKeys?: Set<string>;\n /** Called when a row is clicked. The current selection logic (toggle on same id) is the consumer's call. */\n onTraceClick: (trace: TracesListViewTrace) => void;\n};\n\n/**\n * Virtualized presentational list. Renders only the visible window via TanStack Virtual, and\n * uses DataList primitives for layout (CSS Grid with subgrid rows).\n */\nexport function TracesListView({\n traces,\n isLoading,\n isFetchingNextPage,\n hasNextPage,\n setEndOfListElement,\n filtersApplied,\n featuredTraceId,\n featuredSpanId,\n isBranchesMode,\n recentlyAddedKeys,\n onTraceClick,\n}: TracesListViewProps) {\n const scrollRef = useRef<HTMLDivElement | null>(null);\n\n const virtualizer = useVirtualizer({\n count: traces.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => ROW_HEIGHT,\n overscan: OVERSCAN,\n });\n\n // Reset scroll to top whenever a fresh query resolves (filter / date range change).\n // `isLoading` only flips on initial fetches — `fetchNextPage` keeps it `false`, so this\n // effect doesn't fire during pagination.\n //\n // Why the manual scroll event: when the skeleton-vs-list branch swaps in the new scroll\n // container, it mounts at `scrollTop = 0`. The virtualizer rebinds its listener but\n // doesn't re-read `scrollTop`, so it keeps the stale `scrollOffset` from the previous\n // element. `scrollToOffset(0)` no-ops because the new element is already at 0 (no scroll\n // event fires). Dispatching a synthetic `scroll` forces the virtualizer's handler to\n // read the fresh `scrollTop` and recompute `virtualItems` with `paddingTop = 0`.\n const wasLoadingRef = useRef(isLoading);\n useEffect(() => {\n if (wasLoadingRef.current && !isLoading) {\n scrollRef.current?.dispatchEvent(new Event('scroll'));\n }\n wasLoadingRef.current = isLoading;\n }, [isLoading]);\n\n if (isLoading) {\n return <DataListSkeleton columns={COLUMNS} />;\n }\n\n const virtualItems = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n const paddingTop = virtualItems[0]?.start ?? 0;\n const paddingBottom =\n virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;\n\n return (\n <TracesDataList columns={COLUMNS} variant=\"striped\" scrollRef={scrollRef} className=\"min-w-0\">\n <TracesDataList.Top>\n <TracesDataList.TopCell>Date</TracesDataList.TopCell>\n <TracesDataList.TopCell>Time</TracesDataList.TopCell>\n <TracesDataList.TopCell>Name</TracesDataList.TopCell>\n <TracesDataList.TopCell>Input</TracesDataList.TopCell>\n <TracesDataList.TopCell>Entity</TracesDataList.TopCell>\n <TracesDataList.TopCell>Status</TracesDataList.TopCell>\n </TracesDataList.Top>\n\n {traces.length === 0 ? (\n <TracesDataList.NoMatch\n message={filtersApplied ? 'No traces found for applied filters' : 'No traces found yet'}\n />\n ) : (\n <>\n <TracesDataList.Spacer height={paddingTop} />\n {virtualItems.map(vi => {\n const trace = traces[vi.index];\n if (!trace) return null;\n\n const isFeatured =\n trace.traceId === featuredTraceId && (featuredSpanId == null || trace.spanId === featuredSpanId);\n const rowKey = `${trace.traceId}:${trace.spanId ?? ''}`;\n const isRecentlyAdded = recentlyAddedKeys?.has(rowKey) ?? false;\n const displayDate = trace.startedAt ?? trace.createdAt;\n const entityName =\n trace.entityName || trace.entityId || trace.attributes?.agentId || trace.attributes?.workflowId;\n\n return (\n <TracesDataList.RowButton\n key={rowKey}\n ref={virtualizer.measureElement}\n data-index={vi.index}\n onClick={() => onTraceClick(trace)}\n featured={isFeatured}\n className={cn(isRecentlyAdded && 'animate-row-highlight')}\n >\n <TracesDataList.DateCell timestamp={displayDate} />\n <TracesDataList.TimeCell timestamp={displayDate} />\n <TracesDataList.NameCell\n name={trace.name}\n parentSpanId={trace.parentSpanId}\n showLevelTooltip={isBranchesMode}\n />\n <TracesDataList.InputCell input={getInputPreview(trace.input)} />\n <TracesDataList.EntityCell entityType={trace.entityType} entityName={entityName} />\n <TracesDataList.StatusCell status={trace.attributes?.status} />\n </TracesDataList.RowButton>\n );\n })}\n <TracesDataList.Spacer height={paddingBottom} />\n <TracesDataList.NextPageLoading\n isLoading={isFetchingNextPage}\n hasMore={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n />\n </>\n )}\n </TracesDataList>\n );\n}\n","import { ChevronDownIcon } from 'lucide-react';\nimport type { TraceListMode } from '../trace-filters';\nimport { Button } from '@/ds/components/Button';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu';\n\nconst TRACES_LIST_MODE_LABELS: Record<TraceListMode, string> = {\n traces: 'Top-level traces only',\n branches: 'All traces, nested too',\n};\n\nexport interface TracesListModeToggleProps {\n value: TraceListMode;\n onChange: (mode: TraceListMode) => void;\n disabled?: boolean;\n}\n\n/**\n * Dropdown switcher between the two list modes on the Observability traces page:\n * - `traces` — one row per top-level run (each trace's root anchor).\n * - `branches` — one row per anchor span, including ones nested inside other runs.\n */\nexport function TracesListModeToggle({ value, onChange, disabled }: TracesListModeToggleProps) {\n return (\n <DropdownMenu>\n <DropdownMenu.Trigger asChild>\n <Button size=\"md\" variant=\"default\" disabled={disabled}>\n {TRACES_LIST_MODE_LABELS[value]}\n <ChevronDownIcon />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"start\">\n <DropdownMenu.RadioGroup value={value} onValueChange={v => onChange(v as TraceListMode)}>\n <DropdownMenu.RadioItem value=\"traces\">{TRACES_LIST_MODE_LABELS.traces}</DropdownMenu.RadioItem>\n <DropdownMenu.RadioItem value=\"branches\">{TRACES_LIST_MODE_LABELS.branches}</DropdownMenu.RadioItem>\n </DropdownMenu.RadioGroup>\n </DropdownMenu.Content>\n </DropdownMenu>\n );\n}\n","import { ErrorState } from '@/ds/components/ErrorState';\nimport { PermissionDenied } from '@/ds/components/PermissionDenied';\nimport { SessionExpired } from '@/ds/components/SessionExpired';\nimport { parseError } from '@/lib/errors';\nimport { is401UnauthorizedError, is403ForbiddenError } from '@/lib/query-utils';\n\nexport interface TracesErrorContentProps {\n /** The error from a useTraces / useTraceLightSpans / etc. query. */\n error: unknown;\n /** Passed to PermissionDenied (e.g. 'traces' / 'trace'). */\n resource: string;\n /** Title shown on the generic ErrorState fallback. */\n errorTitle: string;\n}\n\n/**\n * Renders the appropriate fallback content for a traces-related query error:\n * `<SessionExpired />` for 401, `<PermissionDenied />` for 403, otherwise `<ErrorState />`.\n *\n * The consumer wraps it in whatever layout they want (NoDataPageLayout for the list page,\n * PageLayout.MainArea for the detail page, etc.) — this component only owns the 3-branch decision.\n */\nexport function TracesErrorContent({ error, resource, errorTitle }: TracesErrorContentProps) {\n if (is401UnauthorizedError(error)) return <SessionExpired />;\n if (is403ForbiddenError(error)) return <PermissionDenied resource={resource} />;\n const parsed = error instanceof Error ? parseError(error) : undefined;\n return <ErrorState title={errorTitle} message={parsed?.error ?? 'Unknown error'} />;\n}\n","import { format } from 'date-fns';\nimport { CircleSlashIcon, ExternalLinkIcon } from 'lucide-react';\nimport type { TraceDatePreset } from '../types';\nimport { Button } from '@/ds/components/Button';\nimport { EmptyState } from '@/ds/components/EmptyState';\n\nconst PRESET_LABELS: Record<Exclude<TraceDatePreset, 'all' | 'custom'>, string> = {\n 'last-24h': 'the last 24 hours',\n 'last-3d': 'the last 3 days',\n 'last-7d': 'the last 7 days',\n 'last-14d': 'the last 14 days',\n 'last-30d': 'the last 30 days',\n};\n\nexport interface NoTracesInfoProps {\n datePreset?: TraceDatePreset;\n dateFrom?: Date;\n dateTo?: Date;\n}\n\nconst DATE_FORMAT = 'MMM d, yyyy HH:mm';\n\nconst RANGE_TIP = 'Pick a wider time range — older traces may fall outside the current window.';\n\nfunction describeRange({ datePreset, dateFrom, dateTo }: NoTracesInfoProps): { title: string; description: string } {\n if (datePreset && datePreset !== 'all' && datePreset !== 'custom') {\n return {\n title: `No traces for ${PRESET_LABELS[datePreset]}`,\n description: RANGE_TIP,\n };\n }\n if (dateFrom && dateTo) {\n return {\n title: `No traces between ${format(dateFrom, DATE_FORMAT)} and ${format(dateTo, DATE_FORMAT)}`,\n description: RANGE_TIP,\n };\n }\n if (dateFrom) {\n return {\n title: `No traces since ${format(dateFrom, DATE_FORMAT)}`,\n description: RANGE_TIP,\n };\n }\n return {\n title: 'No traces yet',\n description: 'Traces will appear here once agents, workflows, or tools are executed.',\n };\n}\n\nexport const NoTracesInfo = ({ datePreset, dateFrom, dateTo }: NoTracesInfoProps = {}) => {\n const { title, description } = describeRange({ datePreset, dateFrom, dateTo });\n return (\n <div className=\"flex h-full items-center justify-center\">\n <EmptyState\n iconSlot={<CircleSlashIcon />}\n titleSlot={title}\n descriptionSlot={description}\n actionSlot={\n <Button\n variant=\"ghost\"\n as=\"a\"\n href=\"https://mastra.ai/en/docs/observability/tracing/overview\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Tracing Documentation <ExternalLinkIcon />\n </Button>\n }\n />\n </div>\n );\n};\n","import type { LightSpanRecord } from '@mastra/core/storage';\nimport { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport type { UseQueryResult } from '@tanstack/react-query';\n\nconst IMMUTABLE_CACHE_TIME = 1000 * 60 * 60 * 24 * 30; // 30 days, massive cache, span data is immutable\n\nexport interface UseBranchArgs {\n traceId: string | null | undefined;\n spanId: string | null | undefined;\n depth?: number;\n}\n\nexport function useBranch({\n traceId,\n spanId,\n depth,\n}: UseBranchArgs): UseQueryResult<{ traceId: string; spans: LightSpanRecord[] } | null> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['branch', traceId, spanId, depth],\n queryFn: async () => {\n if (!traceId || !spanId) {\n throw new Error('traceId and spanId are required');\n }\n return client.getBranch({ traceId, spanId, depth });\n },\n enabled: !!traceId && !!spanId,\n staleTime: query => {\n const data = query.state.data;\n const isFinished = data?.spans.every(s => Boolean(s.endedAt));\n return isFinished ? IMMUTABLE_CACHE_TIME : 0;\n },\n });\n}\n","import type { LightSpanRecord } from '@mastra/core/storage';\nimport { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport type { UseQueryResult } from '@tanstack/react-query';\n\nconst IMMUTABLE_CACHE_TIME = 1000 * 60 * 60 * 24 * 30; // 30 days, massive cache, span data is immutable\n\nexport function useSpanDetail(\n traceId: string | null | undefined,\n spanId: string | null | undefined,\n): UseQueryResult<{ span: LightSpanRecord & { output?: unknown; result?: unknown } } | null> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['span-detail', traceId, spanId],\n queryFn: async () => {\n if (!traceId || !spanId) {\n throw new Error('Trace ID and Span ID are required');\n }\n return client.getSpan(traceId, spanId);\n },\n enabled: !!traceId && !!spanId,\n staleTime: query => {\n const data = query.state.data;\n\n if (data?.span?.endedAt) {\n return IMMUTABLE_CACHE_TIME;\n }\n\n return 0;\n },\n });\n}\n","import type { LightSpanRecord } from '@mastra/core/storage';\nimport { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport type { UseQueryResult } from '@tanstack/react-query';\n\nconst IMMUTABLE_CACHE_TIME = 1000 * 60 * 60 * 24 * 30; // 30 days, massive cache, span data is immutable\n\nexport function useTraceLightSpans(\n traceId: string | null | undefined,\n): UseQueryResult<{ traceId: string; spans: LightSpanRecord[] } | null> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['trace-light-spans', traceId],\n queryFn: async () => {\n if (!traceId) {\n throw new Error('Trace ID is required');\n }\n const res = await client.getTraceLight(traceId);\n return res;\n },\n enabled: !!traceId,\n staleTime: query => {\n const data = query.state.data;\n\n const isFinished = data?.spans.every(d => Boolean(d.endedAt));\n\n if (isFinished) {\n return IMMUTABLE_CACHE_TIME;\n }\n\n return 0;\n },\n });\n}\n","import type { LightSpanRecord } from '@mastra/core/storage';\nimport type { TraceListMode } from '../trace-filters';\nimport { useBranch } from './use-branch';\nimport { useTraceLightSpans } from './use-trace-light-spans';\n\nexport interface UseTraceOrBranchSpansArgs {\n traceId: string | null | undefined;\n /** Required when `listMode === 'branches'` — the anchor span identifying the displayed\n * subtree. The hook fetches `getBranch(traceId, anchorSpanId)`. Intra-panel span selection\n * is separate (the caller's `spanIdParam`); the anchor stays put while it changes. */\n anchorSpanId?: string | null;\n listMode: TraceListMode;\n depth?: number;\n}\n\nexport interface UseTraceOrBranchSpansResult {\n spans: LightSpanRecord[] | undefined;\n /** Set in branches mode; undefined in traces mode (which uses parentSpanId == null). */\n anchorSpanId: string | undefined;\n isLoading: boolean;\n isError: boolean;\n error: unknown;\n}\n\n/**\n * Unified data source for the trace/span detail panel. Returns trace spans (full tree from the\n * root) in traces mode, or branch spans (subtree rooted at `anchorSpanId`) in branches mode.\n * Only the active query fires; the inactive one is disabled via its `enabled` flag.\n */\nexport function useTraceOrBranchSpans({\n traceId,\n anchorSpanId,\n listMode,\n depth,\n}: UseTraceOrBranchSpansArgs): UseTraceOrBranchSpansResult {\n const isBranches = listMode === 'branches';\n\n const traceQuery = useTraceLightSpans(isBranches ? null : traceId);\n const branchQuery = useBranch({\n traceId: isBranches ? traceId : null,\n spanId: isBranches ? anchorSpanId : null,\n depth,\n });\n\n if (isBranches) {\n return {\n spans: branchQuery.data?.spans,\n anchorSpanId: anchorSpanId ?? undefined,\n isLoading: branchQuery.isLoading,\n isError: branchQuery.isError,\n error: branchQuery.error,\n };\n }\n\n return {\n spans: traceQuery.data?.spans,\n anchorSpanId: undefined,\n isLoading: traceQuery.isLoading,\n isError: traceQuery.isError,\n error: traceQuery.error,\n };\n}\n","import type { LightSpanRecord } from '@mastra/core/storage';\nimport { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport type { UseQueryResult } from '@tanstack/react-query';\n\nexport function useTraceSpans(\n traceId: string | null | undefined,\n): UseQueryResult<{ traceId: string; spans: LightSpanRecord[] } | null> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['trace-spans', traceId],\n queryFn: async () => {\n if (!traceId) {\n throw new Error('Trace ID is required');\n }\n const res = await client.getTrace(traceId);\n return res;\n },\n enabled: !!traceId,\n });\n}\n","import type {\n LightSpanRecord,\n ListBranchesArgs,\n ListBranchesResponse,\n ListTracesArgs,\n ListTracesResponse,\n} from '@mastra/core/storage';\nimport { useMastraClient } from '@mastra/react';\nimport type { InfiniteData } from '@tanstack/react-query';\nimport { useInfiniteQuery, useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useEffect, useRef, useState } from 'react';\nimport type { TraceListMode } from '../trace-filters';\nimport { useInView } from '@/hooks/use-in-view';\nimport { is403ForbiddenError } from '@/lib/query-utils';\n\n/**\n * Per-MastraClient delta-polling support cache. Sticks once we observe a 501\n * or a page-0 response without `deltaCursor` (legacy server or store without\n * delta capability), so we don't re-probe on every mount.\n */\ntype DeltaSupport = 'unknown' | 'unsupported';\nconst deltaSupportByClient = new WeakMap<ReturnType<typeof useMastraClient>, DeltaSupport>();\n\n/** Tunables for live-tail polling. All fields optional — defaults below.\n * Platform consumers override individual fields to throttle traffic or\n * reshape the freshness/visibility trade-offs. */\nexport interface TracesPollingConfig {\n /** Interval between delta polls. Default 5_000ms. */\n deltaPollIntervalMs?: number;\n /** Refetch delay when the server signals `delta.hasMore` (chase remaining updates immediately). Default 100ms. */\n deltaChaseIntervalMs?: number;\n /** Max rows per delta poll. Server caps at 100. Default 100. */\n deltaLimit?: number;\n /** Page-mode refetch interval used when the configured store does not support delta polling. Default 10_000ms. */\n pageModeRefetchIntervalMs?: number;\n /** Periodic page-0 refetch interval while delta is active. Delta only delivers new rows, so this\n * is how we surface status flips (running → success/error) on rows already visible. Default 60_000ms. */\n page0StatusRefreshIntervalMs?: number;\n /** When the tab returns from being hidden and the last successful poll was older than this, the\n * cursor is treated as stale (ClickHouse delta tables TTL after 2 days; other stores may be more\n * aggressive). The infinite query is reset so page 0 refetches and delta resumes from a fresh\n * cursor. Default 900_000ms (15 min). */\n idleGuardThresholdMs?: number;\n /** Minimum visible duration for `isRefetching` after any query completes. On localhost a delta\n * poll can resolve in tens of ms — too brief for the spinner's 1s rotation to register visually,\n * and quick enough that React may batch the start/finish transitions. Pulsing for this duration\n * on completion (~144° of rotation at 400ms) makes each poll perceptible as a heartbeat.\n * Default 400ms. */\n minRefetchSpinMs?: number;\n /** Window during which a delta-arrived row's key stays in `recentlyAddedKeys` so the list view\n * can apply its `animate-row-highlight` class. Should match the CSS animation duration\n * (currently 1_000ms — see `index.css`). Default 1_000ms. */\n deltaHighlightMs?: number;\n}\n\nconst DEFAULT_POLLING_CONFIG: Required<TracesPollingConfig> = {\n deltaPollIntervalMs: 5_000,\n deltaChaseIntervalMs: 100,\n deltaLimit: 100,\n pageModeRefetchIntervalMs: 10_000,\n page0StatusRefreshIntervalMs: 60_000,\n idleGuardThresholdMs: 15 * 60_000,\n minRefetchSpinMs: 400,\n deltaHighlightMs: 1_000,\n};\n\n/** Returns true when the cursor should be considered stale and re-seeded.\n * Exported for testing — pure function of timestamps. */\nexport function shouldResetAfterIdle(lastSuccessAt: number, now: number, thresholdMs: number): boolean {\n if (lastSuccessAt === 0) return false;\n return now - lastSuccessAt > thresholdMs;\n}\n\nfunction isHttp501(error: unknown): boolean {\n return (error as { status?: number } | null)?.status === 501;\n}\n\ntype FetchTracesFnArgs = TracesFilters & {\n client: ReturnType<typeof useMastraClient>;\n mode?: 'page' | 'delta';\n page?: number;\n perPage?: number;\n after?: string;\n limit?: number;\n};\n\nconst fetchTracesFn = async ({\n client,\n mode,\n page,\n perPage,\n after,\n limit,\n filters,\n listMode = 'traces',\n}: FetchTracesFnArgs) => {\n const params =\n mode === 'delta'\n ? { mode: 'delta' as const, after, limit, filters }\n : { pagination: { page: page!, perPage: perPage! }, filters };\n\n if (listMode === 'branches') {\n return client.listBranches(params as ListBranchesArgs);\n }\n\n return client.listTraces(params as ListTracesArgs);\n};\n\nexport const TRACES_PER_PAGE = 25;\n\nexport interface TracesFilters {\n filters?: ListTracesArgs['filters'] | ListBranchesArgs['filters'];\n listMode?: TraceListMode;\n}\n\n/** Returns the next page number if the server indicates more pages are available. */\nexport function getTracesNextPageParam(\n lastPage: ListTracesResponse | ListBranchesResponse | undefined,\n _allPages: unknown,\n lastPageParam: number,\n) {\n if (lastPage?.pagination?.hasMore) {\n return lastPageParam + 1;\n }\n return undefined;\n}\n\ntype TracesPageResponse = ListTracesResponse | ListBranchesResponse;\n\nfunction getPageSpans(page: TracesPageResponse) {\n if ('branches' in page) return page.branches ?? [];\n return page.spans ?? [];\n}\n\n/** Deduplicates trace/branch rows by traceId + spanId across all loaded pages.\n * Also surfaces page 0's deltaCursor so the live-tail query can read it reactively. */\nexport function selectUniqueTraces(data: { pages: TracesPageResponse[] }): {\n spans: LightSpanRecord[];\n deltaCursor: string | undefined;\n} {\n const seen = new Set<string>();\n const spans = data.pages\n .flatMap(page => getPageSpans(page))\n .filter(span => {\n const key = `${span.traceId}:${span.spanId}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n\n return { spans, deltaCursor: data.pages[0]?.deltaCursor };\n}\n\n/** Replaces existing page-0 rows in place (keyed by traceId:spanId) with\n * refreshed copies from the server. Rows the server doesn't return are kept\n * as-is so delta-accumulated rows that have aged off the server's page 0\n * aren't dropped from the UI. New rows aren't added here — delta polling\n * delivers those. */\nexport function refreshPage0Rows(\n old: InfiniteData<TracesPageResponse> | undefined,\n refreshed: ListTracesResponse | ListBranchesResponse,\n listMode: TraceListMode,\n): InfiniteData<TracesPageResponse> | undefined {\n if (!old || old.pages.length === 0) return old;\n const [firstPage, ...rest] = old.pages;\n\n const refreshedRows =\n listMode === 'branches' && 'branches' in refreshed\n ? (refreshed.branches ?? [])\n : 'spans' in refreshed\n ? (refreshed.spans ?? [])\n : [];\n\n if (refreshedRows.length === 0) return old;\n\n const refreshedByKey = new Map<string, (typeof refreshedRows)[number]>();\n for (const row of refreshedRows) {\n refreshedByKey.set(`${row.traceId}:${row.spanId}`, row);\n }\n\n let updatedFirst: TracesPageResponse;\n if (listMode === 'branches' && 'branches' in firstPage) {\n const updated = (firstPage.branches ?? []).map(existing => {\n const fresh = refreshedByKey.get(`${existing.traceId}:${existing.spanId}`);\n return fresh ?? existing;\n });\n updatedFirst = { ...firstPage, branches: updated };\n } else if ('spans' in firstPage) {\n const updated = (firstPage.spans ?? []).map(existing => {\n const fresh = refreshedByKey.get(`${existing.traceId}:${existing.spanId}`);\n return fresh ?? existing;\n });\n updatedFirst = { ...firstPage, spans: updated };\n } else {\n return old;\n }\n\n return { ...old, pages: [updatedFirst, ...rest] };\n}\n\n/** Stable `startedAt DESC` sort matching the server's default page-mode\n * ordering for both list endpoints. Rows missing `startedAt` sink to the\n * bottom (compared as time 0). */\nfunction sortRowsByStartedAtDesc<T extends { startedAt?: unknown }>(rows: T[]): T[] {\n return [...rows].sort((a, b) => {\n const aTime = a.startedAt ? new Date(a.startedAt as string | number | Date).getTime() : 0;\n const bTime = b.startedAt ? new Date(b.startedAt as string | number | Date).getTime() : 0;\n return bTime - aTime;\n });\n}\n\n/** Prepends delta-mode rows into page 0 and advances its deltaCursor.\n * Delta responses come back in server cursor order (insertion order into\n * the per-store delta index), not the `startedAt DESC` order page-mode\n * uses — so we re-sort the merged page 0 to match what the user sees on\n * a fresh page-mode load. Cross-page duplication is handled later by\n * selectUniqueTraces. */\nexport function mergeDeltaIntoPage0(\n old: InfiniteData<TracesPageResponse> | undefined,\n delta: ListTracesResponse | ListBranchesResponse,\n listMode: TraceListMode,\n): InfiniteData<TracesPageResponse> | undefined {\n if (!old || old.pages.length === 0) return old;\n const [firstPage, ...rest] = old.pages;\n const nextCursor = delta.deltaCursor ?? firstPage.deltaCursor;\n\n let updatedFirst: TracesPageResponse;\n if (listMode === 'branches' && 'branches' in firstPage) {\n const newRows = (delta as ListBranchesResponse).branches ?? [];\n updatedFirst = {\n ...firstPage,\n branches: sortRowsByStartedAtDesc([...newRows, ...(firstPage.branches ?? [])]),\n deltaCursor: nextCursor,\n };\n } else if ('spans' in firstPage) {\n const newRows = (delta as ListTracesResponse).spans ?? [];\n updatedFirst = {\n ...firstPage,\n spans: sortRowsByStartedAtDesc([...newRows, ...(firstPage.spans ?? [])]),\n deltaCursor: nextCursor,\n };\n } else {\n return old;\n }\n\n return { ...old, pages: [updatedFirst, ...rest] };\n}\n\nexport interface UseTracesArgs extends TracesFilters {\n /** Optional overrides for the live-tail polling tunables. Any omitted fields fall back to the\n * built-in defaults; pass only what you want to change. */\n polling?: TracesPollingConfig;\n}\n\ninterface UseTracesReturn {\n data: { spans: LightSpanRecord[]; deltaCursor: string | undefined } | undefined;\n hasNextPage: boolean;\n isFetchingNextPage: boolean;\n fetchNextPage: () => void;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n setEndOfListElement: (node: HTMLDivElement | null) => void;\n isRefetching: boolean;\n autoRefetch: boolean;\n setAutoRefetch: (v: boolean) => void;\n recentlyAddedKeys: Set<string>;\n dataUpdatedAt: number;\n errorUpdatedAt: number;\n isFetching: boolean;\n isSuccess: boolean;\n fetchStatus: 'idle' | 'fetching' | 'paused';\n refetch: () => void;\n}\n\nexport const useTraces: (args: UseTracesArgs) => UseTracesReturn = ({\n filters,\n listMode = 'traces',\n polling = {},\n}: UseTracesArgs) => {\n const {\n deltaPollIntervalMs = DEFAULT_POLLING_CONFIG.deltaPollIntervalMs,\n deltaChaseIntervalMs = DEFAULT_POLLING_CONFIG.deltaChaseIntervalMs,\n deltaLimit = DEFAULT_POLLING_CONFIG.deltaLimit,\n pageModeRefetchIntervalMs = DEFAULT_POLLING_CONFIG.pageModeRefetchIntervalMs,\n page0StatusRefreshIntervalMs = DEFAULT_POLLING_CONFIG.page0StatusRefreshIntervalMs,\n idleGuardThresholdMs = DEFAULT_POLLING_CONFIG.idleGuardThresholdMs,\n minRefetchSpinMs = DEFAULT_POLLING_CONFIG.minRefetchSpinMs,\n deltaHighlightMs = DEFAULT_POLLING_CONFIG.deltaHighlightMs,\n } = polling;\n const client = useMastraClient();\n const queryClient = useQueryClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const [deltaSupport, setDeltaSupport] = useState<DeltaSupport>(() => deltaSupportByClient.get(client) ?? 'unknown');\n const deltaUnsupported = deltaSupport === 'unsupported';\n\n // When false, all automatic polling stops: delta polls, status refresh,\n // idle-guard resets, and the page-mode fallback interval. Manual `resync`\n // still works. Session-scoped (no persistence across mounts).\n const [autoRefetch, setAutoRefetch] = useState(true);\n\n // Keys (`traceId:spanId`) of rows that arrived via the most recent delta\n // poll(s). The list view reads this to apply a temporary highlight class\n // for deltaHighlightMs, then they auto-expire. Resets on filter/listMode\n // change since a new query key spawns a fresh list.\n const [recentlyAddedKeys, setRecentlyAddedKeys] = useState<Set<string>>(() => new Set());\n useEffect(() => {\n setRecentlyAddedKeys(new Set());\n }, [listMode, filters]);\n\n const tracesQueryKey = ['traces', listMode, filters] as const;\n\n const query = useInfiniteQuery({\n queryKey: tracesQueryKey,\n queryFn: ({ pageParam }) =>\n fetchTracesFn({\n client,\n page: pageParam,\n perPage: TRACES_PER_PAGE,\n filters,\n listMode,\n }),\n initialPageParam: 0,\n getNextPageParam: getTracesNextPageParam,\n select: selectUniqueTraces,\n retry: false,\n // Disable polling on 403 to prevent flickering.\n // Fall back to page-mode polling only when delta isn't running.\n refetchInterval: q => {\n if (is403ForbiddenError(q.state.error)) return false;\n if (!autoRefetch) return false;\n return deltaUnsupported ? pageModeRefetchIntervalMs : false;\n },\n });\n\n const cursor = query.data?.deltaCursor;\n\n // If page 0 came back without a deltaCursor, the server/store doesn't\n // support delta polling. Pin the client to 'unsupported' so the infinite\n // query resumes page-mode polling and we stop probing.\n useEffect(() => {\n if (query.isSuccess && cursor === undefined && deltaSupport === 'unknown') {\n deltaSupportByClient.set(client, 'unsupported');\n setDeltaSupport('unsupported');\n }\n }, [query.isSuccess, cursor, deltaSupport, client]);\n\n const deltaQuery = useQuery({\n queryKey: ['traces-delta', listMode, filters] as const,\n queryFn: () => {\n const current = queryClient.getQueryData<InfiniteData<TracesPageResponse>>(tracesQueryKey)?.pages[0]?.deltaCursor;\n if (!current) return null;\n return fetchTracesFn({\n client,\n mode: 'delta',\n after: current,\n limit: deltaLimit,\n filters,\n listMode,\n });\n },\n enabled: !!cursor && !deltaUnsupported && autoRefetch,\n retry: false,\n refetchInterval: q => {\n if (q.state.error) return false;\n const data = q.state.data as ListTracesResponse | ListBranchesResponse | null | undefined;\n if (data?.delta?.hasMore) return deltaChaseIntervalMs;\n return deltaPollIntervalMs;\n },\n });\n\n // Merge new delta rows into the infinite-query cache. Also captures the\n // arrived keys into `recentlyAddedKeys` for deltaHighlightMs so the UI\n // can briefly distinguish them. The cleanup timer is intentionally NOT\n // tied to the effect lifecycle — if a newer delta arrives first, we still\n // want each prior batch to expire on its own schedule.\n useEffect(() => {\n const result = deltaQuery.data;\n if (!result) return;\n queryClient.setQueryData<InfiniteData<TracesPageResponse>>(tracesQueryKey, old =>\n mergeDeltaIntoPage0(old, result, listMode),\n );\n\n const newRows =\n listMode === 'branches' && 'branches' in result\n ? (result.branches ?? [])\n : 'spans' in result\n ? (result.spans ?? [])\n : [];\n if (newRows.length === 0) return;\n const keys = newRows.map(r => `${r.traceId}:${r.spanId ?? ''}`);\n setRecentlyAddedKeys(prev => {\n const next = new Set(prev);\n for (const k of keys) next.add(k);\n return next;\n });\n setTimeout(() => {\n setRecentlyAddedKeys(prev => {\n const next = new Set(prev);\n for (const k of keys) next.delete(k);\n return next;\n });\n }, deltaHighlightMs);\n // tracesQueryKey is a new array each render but its contents drive cache keying;\n // depending on its members (listMode/filters) is enough.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [deltaQuery.data, queryClient, listMode, filters, deltaHighlightMs]);\n\n // A 501 means the server is too old (or store doesn't support delta) — pin\n // 'unsupported' so the delta query disables and page-mode polling resumes.\n useEffect(() => {\n if (isHttp501(deltaQuery.error)) {\n deltaSupportByClient.set(client, 'unsupported');\n setDeltaSupport('unsupported');\n }\n }, [deltaQuery.error, client]);\n\n // Periodic page-0 refresh to surface status updates on visible rows\n // (running → success/error). Only runs while delta is the primary polling\n // mechanism; otherwise the infinite query's own refetchInterval covers it.\n const statusRefreshQuery = useQuery({\n queryKey: ['traces-status-refresh', listMode, filters] as const,\n queryFn: () =>\n fetchTracesFn({\n client,\n page: 0,\n perPage: TRACES_PER_PAGE,\n filters,\n listMode,\n }),\n enabled: !!cursor && !deltaUnsupported && autoRefetch,\n refetchInterval: page0StatusRefreshIntervalMs,\n refetchOnMount: false,\n retry: false,\n });\n\n useEffect(() => {\n const result = statusRefreshQuery.data;\n if (!result) return;\n queryClient.setQueryData<InfiniteData<TracesPageResponse>>(tracesQueryKey, old =>\n refreshPage0Rows(old, result, listMode),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [statusRefreshQuery.data, queryClient, listMode, filters]);\n\n // Idle guard: when the tab returns from being hidden, check how long it's\n // been since the last successful poll. If past the threshold, reset the\n // infinite query so page 0 refetches and the cursor is re-seeded.\n const lastSuccessAtRef = useRef(0);\n useEffect(() => {\n const ts = Math.max(query.dataUpdatedAt, deltaQuery.dataUpdatedAt, statusRefreshQuery.dataUpdatedAt);\n if (ts > lastSuccessAtRef.current) {\n lastSuccessAtRef.current = ts;\n }\n }, [query.dataUpdatedAt, deltaQuery.dataUpdatedAt, statusRefreshQuery.dataUpdatedAt]);\n\n // Track autoRefetch in a ref so the visibility listener (attached once)\n // reads the current value without needing to re-attach.\n const autoRefetchRef = useRef(autoRefetch);\n useEffect(() => {\n autoRefetchRef.current = autoRefetch;\n }, [autoRefetch]);\n\n useEffect(() => {\n const handler = () => {\n if (document.visibilityState !== 'visible') return;\n if (!autoRefetchRef.current) return;\n if (!shouldResetAfterIdle(lastSuccessAtRef.current, Date.now(), idleGuardThresholdMs)) return;\n void queryClient.resetQueries({ queryKey: ['traces', listMode, filters] });\n };\n document.addEventListener('visibilitychange', handler);\n return () => document.removeEventListener('visibilitychange', handler);\n }, [queryClient, listMode, filters, idleGuardThresholdMs]);\n\n const { hasNextPage, isFetchingNextPage, fetchNextPage } = query;\n\n useEffect(() => {\n if (isEndOfListInView && hasNextPage && !isFetchingNextPage) {\n void fetchNextPage();\n }\n }, [isEndOfListInView, hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n // `isRefetching` aggregates every active fetch — page-mode (initial, next\n // page, manual resync, idle reset), the 60s page-0 status refresh, AND the\n // delta polls — so a spinner bound to it acts as a heartbeat indicator.\n //\n // Short polls (e.g. delta on localhost) can resolve in tens of ms — too\n // brief for `animate-spin` (1s/rotation) to register visually, and quick\n // enough that React may batch the start/finish transitions so we never\n // even observe `isFetching: true`. So we also watch every query's\n // data/errorUpdatedAt; any advance pulses `isRefetching` true for at least\n // minRefetchSpinMs, which is ~144° of rotation — clearly perceptible.\n const isFetchingAny = query.isFetching || statusRefreshQuery.isFetching || deltaQuery.isFetching;\n const lastActivityAt = Math.max(\n query.dataUpdatedAt,\n query.errorUpdatedAt,\n deltaQuery.dataUpdatedAt,\n deltaQuery.errorUpdatedAt,\n statusRefreshQuery.dataUpdatedAt,\n statusRefreshQuery.errorUpdatedAt,\n );\n const [pulse, setPulse] = useState(false);\n const prevActivityAtRef = useRef(lastActivityAt);\n useEffect(() => {\n if (lastActivityAt > prevActivityAtRef.current) {\n prevActivityAtRef.current = lastActivityAt;\n setPulse(true);\n const t = setTimeout(() => setPulse(false), minRefetchSpinMs);\n return () => clearTimeout(t);\n }\n }, [lastActivityAt, minRefetchSpinMs]);\n const isRefetching = isFetchingAny || pulse;\n\n return {\n ...query,\n setEndOfListElement,\n isRefetching,\n autoRefetch,\n setAutoRefetch,\n recentlyAddedKeys,\n };\n};\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\n\nexport const useTags = () => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['observability-tags'],\n queryFn: async () => {\n try {\n return await client.getTags();\n } catch {\n // Storage provider may not support tag discovery (e.g. LibSQL)\n return { tags: [] };\n }\n },\n select: data => data?.tags ?? [],\n retry: false,\n });\n};\n","import type { EntityType } from '@mastra/core/observability';\nimport { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\nimport { ROOT_ENTITY_TYPE_OPTIONS } from '@/domains/traces/trace-filters';\n\ntype UseEntityNamesOptions = {\n entityType?: EntityType;\n rootOnly?: boolean;\n};\n\nexport const useEntityNames = ({ entityType, rootOnly = false }: UseEntityNamesOptions = {}) => {\n const client = useMastraClient();\n\n // Mirror the queryFn branches so the cache key reflects what the server\n // actually returns. rootOnly only matters when entityType is not set; when\n // entityType is set, the query ignores rootOnly entirely.\n const queryKey = entityType\n ? ['observability-entity-names', 'by-type', entityType]\n : ['observability-entity-names', 'all', rootOnly ? 'root-only' : 'all-types'];\n\n return useQuery({\n queryKey,\n queryFn: async () => {\n try {\n if (entityType) {\n return await client.getEntityNames({ entityType });\n }\n\n if (!rootOnly) {\n return await client.getEntityNames();\n }\n\n const responses = await Promise.all(\n ROOT_ENTITY_TYPE_OPTIONS.map(option => client.getEntityNames({ entityType: option.entityType })),\n );\n\n return {\n names: Array.from(new Set(responses.flatMap(response => response?.names ?? []))).sort(),\n };\n } catch {\n return { names: [] };\n }\n },\n select: data => data?.names ?? [],\n retry: false,\n });\n};\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\n\nexport const useEnvironments = () => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['observability-environments'],\n queryFn: async () => {\n try {\n return await client.getEnvironments();\n } catch {\n return { environments: [] };\n }\n },\n select: data => data?.environments ?? [],\n retry: false,\n });\n};\n","import { useMastraClient } from '@mastra/react';\nimport { useQuery } from '@tanstack/react-query';\n\nexport const useServiceNames = () => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['observability-service-names'],\n queryFn: async () => {\n try {\n return await client.getServiceNames();\n } catch {\n return { serviceNames: [] };\n }\n },\n select: data => data?.serviceNames ?? [],\n retry: false,\n });\n};\n","import type { LightSpanRecord } from '@mastra/core/storage';\nimport { useMemo } from 'react';\nimport { formatHierarchicalSpans } from '../components/format-hierarchical-spans';\nimport { getAllSpanIds } from './get-all-span-ids';\n\n/**\n * Derives previous/next span navigation handlers from a trace's lightweight spans.\n * Returns undefined for handlers that are out of bounds so the consumer can render disabled UI.\n */\nexport function useTraceSpanNavigation(\n lightSpans: LightSpanRecord[] | undefined,\n featuredSpanId: string | null | undefined,\n onSpanChange: (spanId: string) => void,\n) {\n const timelineSpanIds = useMemo(() => getAllSpanIds(formatHierarchicalSpans(lightSpans ?? [])), [lightSpans]);\n\n const featuredSpanIdx = featuredSpanId ? timelineSpanIds.indexOf(featuredSpanId) : -1;\n\n const handlePreviousSpan = featuredSpanIdx > 0 ? () => onSpanChange(timelineSpanIds[featuredSpanIdx - 1]) : undefined;\n\n const handleNextSpan =\n featuredSpanIdx >= 0 && featuredSpanIdx < timelineSpanIds.length - 1\n ? () => onSpanChange(timelineSpanIds[featuredSpanIdx + 1])\n : undefined;\n\n return { handlePreviousSpan, handleNextSpan, timelineSpanIds };\n}\n","import { useMemo } from 'react';\n\n/**\n * Derives previous/next *trace* navigation handlers from the current traces list and the featured\n * row. Returns undefined for handlers that are out of bounds so the consumer can render\n * disabled UI. Mirrors the shape of `useTraceSpanNavigation`.\n *\n * In branches mode rows share a `traceId`, so the consumer can pass a `featuredSpanId` to\n * disambiguate the active row (and receive the new row's `spanId` on prev/next). In traces\n * mode `featuredSpanId` should be null/undefined; only the `traceId` is used.\n */\nexport function useTraceListNavigation<T extends { traceId: string; spanId?: string | null }>(\n traces: T[],\n featuredTraceId: string | undefined,\n featuredSpanId: string | null | undefined,\n onTraceChange: (traceId: string, spanId?: string) => void,\n): {\n featuredTraceIdx: number;\n handlePreviousTrace: (() => void) | undefined;\n handleNextTrace: (() => void) | undefined;\n} {\n const featuredTraceIdx = useMemo(\n () =>\n featuredTraceId\n ? traces.findIndex(\n t => t.traceId === featuredTraceId && (featuredSpanId == null || t.spanId === featuredSpanId),\n )\n : -1,\n [traces, featuredTraceId, featuredSpanId],\n );\n\n // Only forward a spanId on nav when the consumer indicated it's part of the row identity\n // (branches mode). In traces mode `featuredSpanId` is null, so prev/next just sets the new\n // `traceId` and the consumer's handler clears any stale spanId from the URL.\n const passSpanId = featuredSpanId != null;\n const navigateTo = (row: T) => onTraceChange(row.traceId, passSpanId ? (row.spanId ?? undefined) : undefined);\n\n const handlePreviousTrace = featuredTraceIdx > 0 ? () => navigateTo(traces[featuredTraceIdx - 1]) : undefined;\n\n const handleNextTrace =\n featuredTraceIdx >= 0 && featuredTraceIdx < traces.length - 1\n ? () => navigateTo(traces[featuredTraceIdx + 1])\n : undefined;\n\n return { featuredTraceIdx, handlePreviousTrace, handleNextTrace };\n}\n","import { useCallback, useMemo, useRef } from 'react';\nimport type { SpanTab, TraceDatePreset } from '../index';\nimport {\n ROOT_ENTITY_TYPE_OPTIONS,\n TRACE_ANCHOR_SPAN_ID_PARAM,\n TRACE_DATE_FROM_PARAM,\n TRACE_DATE_PRESET_PARAM,\n TRACE_DATE_PRESET_VALUES,\n TRACE_DATE_TO_PARAM,\n TRACE_PROPERTY_FILTER_FIELD_IDS,\n TRACE_LIST_MODE_PARAM,\n TRACE_LIST_MODE_VALUES,\n TRACE_PROPERTY_FILTER_PARAM_BY_FIELD,\n TRACE_ROOT_ENTITY_TYPE_PARAM,\n TRACE_STATUS_PARAM,\n TRACE_STATUS_VALUES,\n applyTracePropertyFilterTokens,\n getTracePropertyFilterTokens,\n} from '../trace-filters';\nimport type { EntityOptions, TraceListMode, TraceStatusFilter } from '../trace-filters';\nimport type { PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\nconst TRACE_ID_PARAM = 'traceId';\nconst SPAN_ID_PARAM = 'spanId';\nconst TAB_PARAM = 'tab';\nconst SCORE_ID_PARAM = 'scoreId';\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\nconst PRESET_MS: Partial<Record<TraceDatePreset, number>> = {\n 'last-24h': DAY_MS,\n 'last-3d': 3 * DAY_MS,\n 'last-7d': 7 * DAY_MS,\n 'last-14d': 14 * DAY_MS,\n 'last-30d': 30 * DAY_MS,\n};\n\n/** Mutates `params` in place to drop the featured trace/span/tab/score selection.\n * Used whenever a filter changes — selection no longer makes sense in the new result set. */\nfunction clearSelectionParams(params: URLSearchParams) {\n params.delete(TRACE_ID_PARAM);\n params.delete(SPAN_ID_PARAM);\n params.delete(TRACE_ANCHOR_SPAN_ID_PARAM);\n params.delete(TAB_PARAM);\n params.delete(SCORE_ID_PARAM);\n}\n\n/** Minimal interface compatible with react-router's `setSearchParams`. */\nexport type SetURLSearchParamsLike = (\n next: URLSearchParams | ((prev: URLSearchParams) => URLSearchParams),\n options?: { replace?: boolean; preventScrollReset?: boolean; state?: unknown },\n) => void;\n\nexport interface UseTraceUrlStateOptions {\n /** Called after `handleRemoveAll` clears all filter URL params. Use this to reset page-local\n * UI state (e.g. a \"group by thread\" toggle) without wrapping the handler. */\n onRemoveAll?: () => void;\n}\n\nexport interface UseTraceUrlStateResult {\n // Raw search params passed through for convenience\n searchParams: URLSearchParams;\n setSearchParams: SetURLSearchParamsLike;\n\n // Date state (derived from URL)\n datePreset: TraceDatePreset;\n selectedDateFrom: Date | undefined;\n selectedDateTo: Date | undefined;\n /** Synchronously-updated ref of the latest preset. Used to ignore onDateChange callbacks\n * the date picker fires after a non-custom preset switch. */\n datePresetRef: React.MutableRefObject<TraceDatePreset>;\n\n // Selection state (derived from URL)\n traceIdParam: string | undefined;\n spanIdParam: string | undefined;\n /** Branch-mode only: the anchor span that defines the displayed subtree. Stable while the\n * user navigates between spans inside the panel (which only changes `spanIdParam`). */\n anchorSpanIdParam: string | undefined;\n spanTabParam: SpanTab | undefined;\n scoreIdParam: string | undefined;\n\n // Filter state (derived from URL)\n listMode: TraceListMode;\n selectedEntityOption: EntityOptions | undefined;\n selectedStatus: TraceStatusFilter | undefined;\n filterTokens: PropertyFilterToken[];\n\n // URL-modifying handlers\n /**\n * Selects a row. In traces mode pass just `traceId` (and optionally a `spanId` for an\n * initial span selection in the panel). In branches mode also pass `anchorSpanId` — the\n * branch identity, kept stable while the user navigates between spans inside the panel.\n * Branch rows are identified by (traceId, anchorSpanId); trace rows by traceId alone.\n */\n handleTraceClick: (traceId: string, spanId?: string, anchorSpanId?: string) => void;\n /** Convenience: clears the featured trace selection. Equivalent to `handleTraceClick('')`. */\n handleTraceClose: () => void;\n handleSpanChange: (spanId: string | null) => void;\n /** Convenience: clears the featured span selection. Equivalent to `handleSpanChange(null)`. */\n handleSpanClose: () => void;\n handleSpanTabChange: (tab: SpanTab) => void;\n /** Selects a span AND switches its panel tab in a single URL update. Use when both must change\n * from one interaction (e.g. \"Evaluate Trace\"). Calling `handleSpanChange` + `handleSpanTabChange`\n * separately races: each functional `setSearchParams` updater reads the same pre-update\n * `searchParams` snapshot, so the second navigation overwrites the first (last write wins) and one\n * of the two changes is lost on the first click. */\n handleSpanChangeWithTab: (spanId: string, tab: SpanTab) => void;\n handleScoreChange: (scoreId: string | null) => void;\n /** Switches the list view between traces and branches. Clears the current selection. */\n handleListModeChange: (mode: TraceListMode) => void;\n handleFilterTokensChange: (nextTokens: PropertyFilterToken[]) => void;\n handleDateChange: (value: Date | undefined, type: 'from' | 'to') => void;\n handleDatePresetChange: (preset: TraceDatePreset) => void;\n handleRemoveAll: () => void;\n\n /** Lower-level helper used by `handleClear`: writes a token set and clears the trace/span selection. */\n applyFilterTokens: (tokens: PropertyFilterToken[]) => void;\n}\n\n/**\n * Owns all URL-derived state and URL-modifying handlers for the traces page. Routing-agnostic —\n * pass `searchParams` and `setSearchParams` from whichever router the consumer uses.\n *\n * Stays focused on URL state: localStorage save/restore, filter discovery, and the error-view\n * short-circuit are intentionally NOT part of this hook so consumers can swap them independently.\n */\nexport function useTraceUrlState(\n searchParams: URLSearchParams,\n setSearchParams: SetURLSearchParamsLike,\n options?: UseTraceUrlStateOptions,\n): UseTraceUrlStateResult {\n const { onRemoveAll } = options ?? {};\n const datePreset = useMemo<TraceDatePreset>(() => {\n const value = searchParams.get(TRACE_DATE_PRESET_PARAM);\n return value && TRACE_DATE_PRESET_VALUES.has(value as TraceDatePreset) ? (value as TraceDatePreset) : 'last-24h';\n }, [searchParams]);\n\n const dateFromParamRaw = searchParams.get(TRACE_DATE_FROM_PARAM);\n const dateToParamRaw = searchParams.get(TRACE_DATE_TO_PARAM);\n\n const selectedDateFrom = useMemo(() => {\n if (datePreset === 'custom') {\n if (!dateFromParamRaw) return undefined;\n const parsed = new Date(dateFromParamRaw);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }\n if (datePreset === 'all') return undefined;\n const ms = PRESET_MS[datePreset];\n return ms ? new Date(Date.now() - ms) : undefined;\n }, [datePreset, dateFromParamRaw]);\n\n const selectedDateTo = useMemo(() => {\n if (datePreset !== 'custom' || !dateToParamRaw) return undefined;\n const parsed = new Date(dateToParamRaw);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }, [datePreset, dateToParamRaw]);\n\n // Track the latest preset synchronously so onDateChange callbacks that follow\n // a non-custom preset switch can be ignored (router setSearchParams captures\n // searchParams in its closure, so multiple synchronous calls would otherwise\n // clobber each other).\n const datePresetRef = useRef(datePreset);\n datePresetRef.current = datePreset;\n\n const traceIdParam = searchParams.get(TRACE_ID_PARAM) || undefined;\n const spanIdParam = searchParams.get(SPAN_ID_PARAM) || undefined;\n /** Branch-mode only: identifies which branch (anchor span) the panel is viewing. Stays put\n * while the user navigates between spans inside the panel (which only changes spanIdParam). */\n const anchorSpanIdParam = searchParams.get(TRACE_ANCHOR_SPAN_ID_PARAM) || undefined;\n const tabParam = searchParams.get(TAB_PARAM);\n const spanTabParam: SpanTab | undefined =\n tabParam === 'scoring'\n ? 'scoring'\n : tabParam === 'feedback'\n ? 'feedback'\n : tabParam === 'details'\n ? 'details'\n : undefined;\n const scoreIdParam = searchParams.get(SCORE_ID_PARAM) || undefined;\n\n const listMode = useMemo<TraceListMode>(() => {\n const value = searchParams.get(TRACE_LIST_MODE_PARAM);\n return value && TRACE_LIST_MODE_VALUES.has(value as TraceListMode) ? (value as TraceListMode) : 'traces';\n }, [searchParams]);\n const selectedEntityOption = useMemo(\n () => ROOT_ENTITY_TYPE_OPTIONS.find(option => option.entityType === searchParams.get(TRACE_ROOT_ENTITY_TYPE_PARAM)),\n [searchParams],\n );\n const selectedStatus = useMemo<TraceStatusFilter | undefined>(() => {\n const value = searchParams.get(TRACE_STATUS_PARAM);\n return value && TRACE_STATUS_VALUES.has(value as TraceStatusFilter) ? (value as TraceStatusFilter) : undefined;\n }, [searchParams]);\n const filterTokens = useMemo(() => getTracePropertyFilterTokens(searchParams), [searchParams]);\n\n const handleTraceClick = useCallback(\n (traceId: string, spanId?: string, anchorSpanId?: string) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (traceId) {\n next.set(TRACE_ID_PARAM, traceId);\n } else {\n next.delete(TRACE_ID_PARAM);\n }\n if (spanId) {\n next.set(SPAN_ID_PARAM, spanId);\n } else {\n next.delete(SPAN_ID_PARAM);\n }\n if (anchorSpanId) {\n next.set(TRACE_ANCHOR_SPAN_ID_PARAM, anchorSpanId);\n } else {\n next.delete(TRACE_ANCHOR_SPAN_ID_PARAM);\n }\n next.delete(TAB_PARAM);\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleTraceClose = useCallback(() => handleTraceClick(''), [handleTraceClick]);\n\n const handleSpanChange = useCallback(\n (spanId: string | null) => {\n const currentSpanId = searchParams.get(SPAN_ID_PARAM) || null;\n if (spanId === currentSpanId) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (spanId) {\n next.set(SPAN_ID_PARAM, spanId);\n } else {\n next.delete(SPAN_ID_PARAM);\n }\n // Tab + score are per-span; they'd point at the previous span's context otherwise.\n next.delete(TAB_PARAM);\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleSpanClose = useCallback(() => handleSpanChange(null), [handleSpanChange]);\n\n const handleSpanTabChange = useCallback(\n (tab: SpanTab) => {\n const currentTab = searchParams.get(TAB_PARAM) || null;\n if (tab === currentTab) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (tab && tab !== 'details') {\n next.set(TAB_PARAM, tab);\n } else {\n next.delete(TAB_PARAM);\n }\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleSpanChangeWithTab = useCallback(\n (spanId: string, tab: SpanTab) => {\n const nextTab = tab && tab !== 'details' ? tab : null;\n // No-op guard (same pattern as the sibling handlers): skip the navigation only when span,\n // tab AND score are already exactly what this call would produce.\n const isNoOp =\n spanId === (searchParams.get(SPAN_ID_PARAM) || null) &&\n nextTab === (searchParams.get(TAB_PARAM) || null) &&\n !searchParams.get(SCORE_ID_PARAM);\n if (isNoOp) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n next.set(SPAN_ID_PARAM, spanId);\n if (nextTab) {\n next.set(TAB_PARAM, nextTab);\n } else {\n next.delete(TAB_PARAM);\n }\n next.delete(SCORE_ID_PARAM);\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const handleScoreChange = useCallback(\n (scoreId: string | null) => {\n const currentScoreId = searchParams.get(SCORE_ID_PARAM) || null;\n if (scoreId === currentScoreId) return;\n\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (scoreId) {\n next.set(SCORE_ID_PARAM, scoreId);\n } else {\n next.delete(SCORE_ID_PARAM);\n }\n return next;\n },\n { replace: true },\n );\n },\n [searchParams, setSearchParams],\n );\n\n const applyFilterTokens = useCallback(\n (tokens: PropertyFilterToken[]) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n // applyTracePropertyFilterTokens wipes all filter params (including\n // rootEntityType / status) and re-adds them in `nextTokens` order so\n // URL insertion order == filter creation order.\n applyTracePropertyFilterTokens(next, tokens);\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleFilterTokensChange = applyFilterTokens;\n\n // Only relevant for 'custom' — the picker also fires onDateChange after a\n // non-custom preset switch, which we ignore to avoid racing URL updates.\n const handleDateChange = useCallback(\n (value: Date | undefined, type: 'from' | 'to') => {\n if (datePresetRef.current !== 'custom') return;\n const param = type === 'from' ? TRACE_DATE_FROM_PARAM : TRACE_DATE_TO_PARAM;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (value) {\n next.set(param, value.toISOString());\n } else {\n next.delete(param);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleDatePresetChange = useCallback(\n (preset: TraceDatePreset) => {\n // Update ref synchronously so any onDateChange fired by the picker in the\n // same tick (for non-custom presets) sees the new value and skips.\n datePresetRef.current = preset;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (preset === 'last-24h') {\n // Default — clear all date params.\n next.delete(TRACE_DATE_PRESET_PARAM);\n next.delete(TRACE_DATE_FROM_PARAM);\n next.delete(TRACE_DATE_TO_PARAM);\n } else if (preset === 'custom') {\n next.set(TRACE_DATE_PRESET_PARAM, 'custom');\n // Keep existing dateFrom/dateTo for the user to adjust.\n } else {\n // `last-*` or 'all' — only the preset is stored; dates are derived.\n next.set(TRACE_DATE_PRESET_PARAM, preset);\n next.delete(TRACE_DATE_FROM_PARAM);\n next.delete(TRACE_DATE_TO_PARAM);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleListModeChange = useCallback(\n (mode: TraceListMode) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (mode === 'traces') {\n next.delete(TRACE_LIST_MODE_PARAM);\n } else {\n next.set(TRACE_LIST_MODE_PARAM, mode);\n }\n // Clear selection: rows from the previous mode don't map cleanly to the new mode.\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleRemoveAll = useCallback(() => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n next.delete(TRACE_LIST_MODE_PARAM);\n next.delete(TRACE_ROOT_ENTITY_TYPE_PARAM);\n next.delete(TRACE_STATUS_PARAM);\n for (const fieldId of TRACE_PROPERTY_FILTER_FIELD_IDS) {\n next.delete(TRACE_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n onRemoveAll?.();\n }, [setSearchParams, onRemoveAll]);\n\n return {\n searchParams,\n setSearchParams,\n datePreset,\n selectedDateFrom,\n selectedDateTo,\n datePresetRef,\n traceIdParam,\n spanIdParam,\n anchorSpanIdParam,\n spanTabParam,\n scoreIdParam,\n listMode,\n selectedEntityOption,\n selectedStatus,\n filterTokens,\n handleTraceClick,\n handleTraceClose,\n handleSpanChange,\n handleSpanClose,\n handleSpanTabChange,\n handleSpanChangeWithTab,\n handleScoreChange,\n handleListModeChange,\n handleFilterTokensChange,\n handleDateChange,\n handleDatePresetChange,\n handleRemoveAll,\n applyFilterTokens,\n };\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport {\n clearSavedTraceFilters,\n hasAnyTraceFilterParams,\n loadTraceFiltersFromStorage,\n saveTraceFiltersToStorage,\n} from '../trace-filters';\nimport type { SetURLSearchParamsLike } from './use-trace-url-state';\nimport { toast } from '@/lib/toast';\n\nconst DEFAULT_SAVED_MESSAGE = 'Trace filter settings saved.';\nconst DEFAULT_CLEARED_MESSAGE = 'Trace filter settings cleared.';\n\nexport interface TraceFilterPersistenceOptions {\n /** Override the localStorage key. Default: traces filters storage. */\n storageKey?: string;\n /** Toast text overrides; pass `false` to suppress the toast entirely. */\n messages?: {\n saved?: string | false;\n cleared?: string | false;\n };\n /** Skip the once-on-mount hydration from localStorage. Default: false (hydration runs). */\n skipHydration?: boolean;\n}\n\nexport interface UseTraceFilterPersistenceResult {\n /** True when localStorage has a previously saved filter set. */\n hasSavedFilters: boolean;\n /** Persist the current URL filter params to localStorage. */\n handleSave: () => void;\n /** Forget the saved filter set. */\n handleRemoveSaved: () => void;\n}\n\n/**\n * Owns the localStorage save/restore lifecycle for trace filters:\n * - tracks `hasSavedFilters`\n * - exposes `handleSave` / `handleRemoveSaved` (with toast feedback)\n * - hydrates the URL from saved filters once on mount, but only if the URL is filter-clean\n * (so a shared link / direct nav with explicit filters wins over the saved set)\n *\n * Pass `storageKey` to scope persistence (e.g. per-project). Pass `messages.{saved,cleared} = false`\n * to suppress the toast.\n */\nexport function useTraceFilterPersistence(\n searchParams: URLSearchParams,\n setSearchParams: SetURLSearchParamsLike,\n options?: TraceFilterPersistenceOptions,\n): UseTraceFilterPersistenceResult {\n const { storageKey, messages, skipHydration } = options ?? {};\n\n const [hasSavedFilters, setHasSavedFilters] = useState(() => loadTraceFiltersFromStorage(storageKey) !== null);\n\n const handleSave = useCallback(() => {\n saveTraceFiltersToStorage(searchParams, storageKey);\n setHasSavedFilters(true);\n const text = messages?.saved ?? DEFAULT_SAVED_MESSAGE;\n if (text !== false) toast.success(text);\n }, [searchParams, storageKey, messages?.saved]);\n\n const handleRemoveSaved = useCallback(() => {\n clearSavedTraceFilters(storageKey);\n setHasSavedFilters(false);\n const text = messages?.cleared ?? DEFAULT_CLEARED_MESSAGE;\n if (text !== false) toast.success(text);\n }, [storageKey, messages?.cleared]);\n\n // Hydrate from the saved filter set on mount, but only when the URL is\n // filter-clean (user arrived via a plain sidebar nav). If the URL already\n // carries filters — e.g. a shared link — leave it alone.\n const hydratedRef = useRef(false);\n useEffect(() => {\n if (skipHydration) return;\n if (hydratedRef.current) return;\n hydratedRef.current = true;\n if (hasAnyTraceFilterParams(searchParams)) return;\n const saved = loadTraceFiltersFromStorage(storageKey);\n if (!saved) return;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n for (const [key, value] of saved) {\n next.append(key, value);\n }\n return next;\n },\n { replace: true },\n );\n // Run once on mount — searchParams intentionally read at mount time.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { hasSavedFilters, handleSave, handleRemoveSaved };\n}\n","import type { EntityType } from '@mastra/core/observability';\nimport type { ReactNode } from 'react';\n\nexport type UISpan = {\n id: string;\n name: string;\n type: string;\n latency: number;\n startTime: string;\n endTime?: string;\n spans?: UISpan[];\n parentSpanId?: string | null;\n};\n\nexport type UISpanStyle = {\n icon?: ReactNode;\n color?: string;\n label?: string;\n typePrefix: string;\n};\n\n// -- Trace filtering types ----------------------------------------------------\n\nexport type EntityOptions =\n | { value: string; label: string; type: EntityType.AGENT }\n | { value: string; label: string; type: EntityType.WORKFLOW_RUN }\n | { value: string; label: string; type: 'all' };\n\nexport type TraceDatePreset = 'all' | 'last-24h' | 'last-3d' | 'last-7d' | 'last-14d' | 'last-30d' | 'custom';\n\n/** Canonical list of context field IDs used for trace filtering and value extraction */\nexport const CONTEXT_FIELD_IDS = [\n 'environment',\n 'serviceName',\n 'source',\n 'scope',\n 'userId',\n 'organizationId',\n 'resourceId',\n 'runId',\n 'sessionId',\n 'threadId',\n 'requestId',\n 'experimentId',\n 'spanType',\n 'entityName',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n] as const;\n","import { format } from 'date-fns';\nimport { ArrowDownIcon, ArrowRightIcon, ArrowUpIcon, ChevronsDownUpIcon, ChevronsUpDownIcon } from 'lucide-react';\nimport { Fragment, useState } from 'react';\nimport type { LogRecord } from '../types';\nimport { Button } from '@/ds/components/Button';\nimport { ButtonsGroup } from '@/ds/components/ButtonsGroup';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { DataDetailsPanel } from '@/ds/components/DataDetailsPanel';\nimport { cn } from '@/lib/utils';\n\nconst KV = DataDetailsPanel.KeyValueList;\n\nfunction toDate(value: Date | string): Date {\n return value instanceof Date ? value : new Date(value);\n}\n\nexport interface LogDetailsViewProps {\n log: LogRecord;\n onClose: () => void;\n onTraceClick?: (traceId: string) => void;\n onSpanClick?: (traceId: string, spanId: string) => void;\n onPrevious?: () => void;\n onNext?: () => void;\n collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n}\n\nexport function LogDetailsView({\n log,\n onClose,\n onTraceClick,\n onSpanClick,\n onPrevious,\n onNext,\n collapsed: controlledCollapsed,\n onCollapsedChange,\n}: LogDetailsViewProps) {\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n const collapsed = controlledCollapsed ?? internalCollapsed;\n const setCollapsed = onCollapsedChange ?? setInternalCollapsed;\n const date = toDate(log.timestamp);\n\n return (\n <DataDetailsPanel collapsed={collapsed}>\n <DataDetailsPanel.Header>\n <DataDetailsPanel.Heading>\n Log <b>{format(date, 'MMM dd, HH:mm:ss.SSS')}</b>\n </DataDetailsPanel.Heading>\n <ButtonsGroup className=\"ml-auto shrink-0\">\n {onCollapsedChange && (\n <Button\n size=\"md\"\n tooltip={collapsed ? 'Expand panel' : 'Collapse panel'}\n onClick={() => setCollapsed(!collapsed)}\n >\n {collapsed ? <ChevronsUpDownIcon /> : <ChevronsDownUpIcon />}\n </Button>\n )}\n\n <ButtonsGroup spacing=\"close\">\n <Button size=\"md\" tooltip=\"Previous log\" onClick={onPrevious} disabled={!onPrevious}>\n <ArrowUpIcon />\n </Button>\n <Button size=\"md\" tooltip=\"Next log\" onClick={onNext} disabled={!onNext}>\n <ArrowDownIcon />\n </Button>\n </ButtonsGroup>\n\n <DataDetailsPanel.CloseButton onClick={onClose} />\n </ButtonsGroup>\n </DataDetailsPanel.Header>\n\n {!collapsed && (\n <DataDetailsPanel.Content>\n <p className=\"text-ui-md text-neutral4 font-mono wrap-break-word whitespace-pre-wrap\">{log.message}</p>\n\n {(log.traceId || log.spanId) && (\n <div className={cn('grid gap-2 my-8', '[&>button]:justify-between [&>button]:overflow-hidden')}>\n {log.traceId && (\n <ButtonsGroup spacing=\"close\" className=\"min-w-0 w-full\">\n <Button\n size=\"md\"\n className=\"min-w-0 flex-1 overflow-hidden\"\n onClick={() => onTraceClick?.(log.traceId!)}\n >\n <ArrowRightIcon />\n <span>Trace</span>\n <span className=\" ml-auto text-ui-sm text-neutral2 min-w-0 truncate\"># {log.traceId}</span>\n </Button>\n <CopyButton content={log.traceId!} size=\"md\" tooltip=\"Copy Trace ID to clipboard\" />\n </ButtonsGroup>\n )}\n {log.spanId && (\n <ButtonsGroup spacing=\"close\" className=\"min-w-0 w-full\">\n <Button\n size=\"md\"\n className=\"min-w-0 flex-1 overflow-hidden\"\n disabled={!log.traceId || !onSpanClick}\n onClick={() => log.traceId && onSpanClick?.(log.traceId, log.spanId!)}\n >\n <ArrowRightIcon />\n <span>Span</span>\n <span className=\" ml-auto text-ui-sm text-neutral2 min-w-0 truncate\"># {log.spanId}</span>\n </Button>\n <CopyButton content={log.spanId!} size=\"md\" tooltip=\"Copy Span ID to clipboard\" />\n </ButtonsGroup>\n )}\n </div>\n )}\n\n <KV className=\"mb-6\">\n {log.entityType && (\n <>\n <KV.Key>Entity Type</KV.Key>\n <KV.Value>{log.entityType}</KV.Value>\n </>\n )}\n {log.entityName && (\n <>\n <KV.Key>Entity Name</KV.Key>\n <KV.Value>{log.entityName}</KV.Value>\n </>\n )}\n {log.serviceName && (\n <>\n <KV.Key>Service</KV.Key>\n <KV.Value>{log.serviceName}</KV.Value>\n </>\n )}\n {log.environment && (\n <>\n <KV.Key>Environment</KV.Key>\n <KV.Value>{log.environment}</KV.Value>\n </>\n )}\n {log.source && (\n <>\n <KV.Key>Source</KV.Key>\n <KV.Value>{log.source}</KV.Value>\n </>\n )}\n {log.metadata && Object.keys(log.metadata).length > 0 && (\n <>\n {Object.entries(log.metadata).map(([key, value]) => (\n <Fragment key={key}>\n <KV.Key>{key}</KV.Key>\n <KV.Value>{String(value)}</KV.Value>\n </Fragment>\n ))}\n </>\n )}\n </KV>\n\n {log.data && Object.keys(log.data).length > 0 && (\n <DataDetailsPanel.CodeSection title=\"Data\" codeStr={JSON.stringify(log.data, null, 2)} className=\"mt-6\" />\n )}\n </DataDetailsPanel.Content>\n )}\n </DataDetailsPanel>\n );\n}\n","import { ErrorState } from '@/ds/components/ErrorState';\nimport { PermissionDenied } from '@/ds/components/PermissionDenied';\nimport { SessionExpired } from '@/ds/components/SessionExpired';\nimport { is401UnauthorizedError, is403ForbiddenError } from '@/lib/query-utils';\n\nexport interface LogsErrorContentProps {\n /** The error from a useLogs query. */\n error: unknown;\n /** Passed to PermissionDenied (usually 'logs'). */\n resource: string;\n /** Title shown on the generic ErrorState fallback. */\n errorTitle: string;\n}\n\n/**\n * Renders the appropriate fallback content for a logs-related query error:\n * `<SessionExpired />` for 401, `<PermissionDenied />` for 403, otherwise `<ErrorState />`.\n * Mirror of `TracesErrorContent` for the logs domain.\n */\nexport function LogsErrorContent({ error, resource, errorTitle }: LogsErrorContentProps) {\n if (is401UnauthorizedError(error)) return <SessionExpired />;\n if (is403ForbiddenError(error)) return <PermissionDenied resource={resource} />;\n const message = error instanceof Error ? error.message : undefined;\n return <ErrorState title={errorTitle} message={message ?? 'Unknown error'} />;\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface LogsLayoutProps {\n /** The logs list (left column). */\n listSlot: ReactNode;\n /** The log data panel (right column, top). When null/undefined, the whole right column collapses. */\n logPanelSlot?: ReactNode;\n /** The trace data panel (right column, middle). Only rendered when truthy. */\n tracePanelSlot?: ReactNode;\n /** The span data panel (right column, bottom). Only rendered when truthy. */\n spanPanelSlot?: ReactNode;\n /** When the log panel is collapsed, the right column's grid-rows squash the log row to `auto`. */\n logCollapsed?: boolean;\n}\n\n/**\n * Pure 2-column layout shell for the logs page. Owns no state and fetches no data — pass slots in.\n * Right-column row template adapts based on which panels are present and whether the log panel is\n * collapsed.\n */\nexport function LogsLayout({ listSlot, logPanelSlot, tracePanelSlot, spanPanelSlot, logCollapsed }: LogsLayoutProps) {\n const hasSidePanel = !!logPanelSlot;\n\n return (\n <div\n className={cn('grid h-full min-h-0 gap-4 items-start', hasSidePanel ? 'grid-cols-[1fr_1fr]' : 'grid-cols-[1fr]')}\n >\n {listSlot}\n\n {hasSidePanel && (\n <div\n className={cn(\n 'grid gap-4 h-full overflow-auto',\n tracePanelSlot && spanPanelSlot\n ? logCollapsed\n ? 'grid-rows-[auto_1fr_1fr]'\n : 'grid-rows-[1fr_1fr_1fr]'\n : tracePanelSlot\n ? logCollapsed\n ? 'grid-rows-[auto_1fr]'\n : 'grid-rows-[1fr_1fr]'\n : logCollapsed\n ? 'grid-rows-[auto]'\n : 'grid-rows-[1fr]',\n )}\n >\n {logPanelSlot}\n {tracePanelSlot}\n {spanPanelSlot}\n </div>\n )}\n </div>\n );\n}\n","import { useVirtualizer } from '@tanstack/react-virtual';\nimport { useEffect, useRef } from 'react';\nimport type { LogRecord } from '../types';\nimport { LogsDataList, LogsDataListSkeleton } from '@/ds/components/LogsDataList';\n\n// Fixed widths on non-flex columns prevent track shifts as the virtualizer swaps rows in/out.\nconst COLUMNS = '6rem 9rem 5rem 10rem minmax(8rem,1fr) minmax(8rem,1fr)';\n\nconst ROW_HEIGHT = 36;\nconst OVERSCAN = 8;\n\nexport interface LogsListViewProps {\n logs: LogRecord[];\n isLoading?: boolean;\n isFetchingNextPage?: boolean;\n hasNextPage?: boolean;\n setEndOfListElement?: (element: HTMLDivElement | null) => void;\n /** Stable per-render id for each log — used for React keys and for matching against `featuredLogId`.\n * Build with `useLogsListNavigation`. */\n logIdMap: Map<LogRecord, string>;\n /** Currently featured/selected log — its row gets the highlighted background. */\n featuredLogId?: string | null;\n /** Called when a row is clicked. The current toggle + trace-sync logic is the consumer's call. */\n onLogClick: (log: LogRecord) => void;\n}\n\n/**\n * Virtualized presentational list. Renders only the visible window of logs via\n * TanStack Virtual, sandwiched between top/bottom Spacers that preserve total\n * scroll height. Owns no state and fetches no data.\n */\nexport function LogsListView({\n logs,\n isLoading,\n isFetchingNextPage,\n hasNextPage,\n setEndOfListElement,\n logIdMap,\n featuredLogId,\n onLogClick,\n}: LogsListViewProps) {\n const scrollRef = useRef<HTMLDivElement | null>(null);\n\n const virtualizer = useVirtualizer({\n count: logs.length,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => ROW_HEIGHT,\n overscan: OVERSCAN,\n });\n\n // Reset scroll to top whenever a fresh query resolves (filter / date range change).\n // `isLoading` only flips on initial fetches — `fetchNextPage` keeps it `false`, so this\n // effect doesn't fire during pagination.\n //\n // Why the manual scroll event: when the skeleton-vs-list branch swaps in the new scroll\n // container, it mounts at `scrollTop = 0`. The virtualizer rebinds its listener but\n // doesn't re-read `scrollTop`, so it keeps the stale `scrollOffset` from the previous\n // element. `scrollToOffset(0)` no-ops because the new element is already at 0 (no scroll\n // event fires). Dispatching a synthetic `scroll` forces the virtualizer's handler to\n // read the fresh `scrollTop` and recompute `virtualItems` with `paddingTop = 0`.\n const wasLoadingRef = useRef(isLoading);\n useEffect(() => {\n if (wasLoadingRef.current && !isLoading) {\n scrollRef.current?.dispatchEvent(new Event('scroll'));\n }\n wasLoadingRef.current = isLoading;\n }, [isLoading]);\n\n if (isLoading) {\n return <LogsDataListSkeleton columns={COLUMNS} />;\n }\n\n const virtualItems = virtualizer.getVirtualItems();\n const totalSize = virtualizer.getTotalSize();\n const paddingTop = virtualItems[0]?.start ?? 0;\n const paddingBottom =\n virtualItems.length > 0 ? Math.max(0, totalSize - (virtualItems[virtualItems.length - 1]?.end ?? 0)) : 0;\n\n return (\n <LogsDataList columns={COLUMNS} variant=\"striped\" scrollRef={scrollRef} className=\"min-w-0\">\n <LogsDataList.Top>\n <LogsDataList.TopCell>Date</LogsDataList.TopCell>\n <LogsDataList.TopCell>Time</LogsDataList.TopCell>\n <LogsDataList.TopCell>Level</LogsDataList.TopCell>\n <LogsDataList.TopCell>Entity</LogsDataList.TopCell>\n <LogsDataList.TopCell>Message</LogsDataList.TopCell>\n <LogsDataList.TopCell>Data</LogsDataList.TopCell>\n </LogsDataList.Top>\n\n {logs.length === 0 ? (\n <LogsDataList.NoMatch message=\"No logs match your search\" />\n ) : (\n <>\n <LogsDataList.Spacer height={paddingTop} />\n {virtualItems.map(vi => {\n const log = logs[vi.index];\n if (!log) return null;\n const id = logIdMap.get(log);\n // Defensive: consumer is expected to build `logIdMap` from the same `logs` list\n // (via `useLogsListNavigation`), but if they drift we'd rather drop the row than\n // ship a missing-key warning and broken selection highlighting.\n if (!id) return null;\n const isFeatured = id === featuredLogId;\n\n return (\n <LogsDataList.RowButton\n key={id}\n ref={virtualizer.measureElement}\n data-index={vi.index}\n onClick={() => onLogClick(log)}\n featured={isFeatured}\n variant={log.level === 'error' || log.level === 'fatal' ? 'error' : 'default'}\n >\n <LogsDataList.DateCell timestamp={log.timestamp} />\n <LogsDataList.TimeCell timestamp={log.timestamp} />\n <LogsDataList.LevelCell level={log.level} />\n <LogsDataList.EntityCell entityType={log.entityType} entityName={log.entityName} />\n <LogsDataList.MessageCell message={log.message} />\n <LogsDataList.DataCell data={log.data} />\n </LogsDataList.RowButton>\n );\n })}\n <LogsDataList.Spacer height={paddingBottom} />\n </>\n )}\n <LogsDataList.NextPageLoading\n isLoading={isFetchingNextPage}\n hasMore={hasNextPage}\n setEndOfListElement={setEndOfListElement}\n />\n </LogsDataList>\n );\n}\n","import { PropertyFilterActions } from '@/ds/components/PropertyFilter/property-filter-actions';\nimport { PropertyFilterApplied } from '@/ds/components/PropertyFilter/property-filter-applied';\nimport type { PropertyFilterField, PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\nimport { cn } from '@/lib/utils';\n\nexport interface LogsToolbarProps {\n onClear?: () => void;\n onRemoveAll?: () => void;\n onSave?: () => void;\n onRemoveSaved?: () => void;\n isLoading?: boolean;\n filterFields: PropertyFilterField[];\n filterTokens: PropertyFilterToken[];\n onFilterTokensChange: (tokens: PropertyFilterToken[]) => void;\n autoFocusFilterFieldId?: string;\n}\n\nexport function LogsToolbar({\n onClear,\n onRemoveAll,\n onSave,\n onRemoveSaved,\n isLoading,\n filterFields,\n filterTokens,\n onFilterTokensChange,\n autoFocusFilterFieldId,\n}: LogsToolbarProps) {\n const hasActiveFilters = filterTokens.length > 0;\n const hasNonDefaultFilter = filterTokens.some(token => isNonDefaultFilter(token, filterFields));\n\n return (\n <div className={cn('grid grid-cols-[1fr_auto] gap-3 items-start')}>\n <PropertyFilterApplied\n fields={filterFields}\n tokens={filterTokens}\n onTokensChange={onFilterTokensChange}\n disabled={isLoading}\n autoFocusFieldId={autoFocusFilterFieldId}\n />\n\n {hasActiveFilters && (\n <PropertyFilterActions\n disabled={isLoading}\n onClear={hasNonDefaultFilter ? onClear : undefined}\n onRemoveAll={onRemoveAll}\n onSave={onSave}\n onRemoveSaved={onRemoveSaved}\n />\n )}\n </div>\n );\n}\n\nfunction isNonDefaultFilter(token: PropertyFilterToken, fields: PropertyFilterField[]): boolean {\n const field = fields.find(f => f.id === token.fieldId);\n if (!field) return false;\n if (field.kind === 'text') {\n return typeof token.value === 'string' && token.value.trim() !== '';\n }\n if (field.kind === 'pick-multi') {\n if (field.multi) return Array.isArray(token.value) && token.value.length > 0;\n return typeof token.value === 'string' && token.value !== '' && token.value !== 'Any';\n }\n if (field.kind === 'multi-select') {\n return Array.isArray(token.value) && token.value.length > 0;\n }\n return false;\n}\n","import { format } from 'date-fns';\nimport { CircleSlashIcon, ExternalLinkIcon } from 'lucide-react';\nimport type { LogsDatePreset } from '../log-filters';\nimport { Button } from '@/ds/components/Button';\nimport { EmptyState } from '@/ds/components/EmptyState';\n\nconst PRESET_LABELS: Record<Exclude<LogsDatePreset, 'all' | 'custom'>, string> = {\n 'last-24h': 'the last 24 hours',\n 'last-3d': 'the last 3 days',\n 'last-7d': 'the last 7 days',\n 'last-14d': 'the last 14 days',\n 'last-30d': 'the last 30 days',\n};\n\nexport interface NoLogsInfoProps {\n datePreset?: LogsDatePreset;\n dateFrom?: Date;\n dateTo?: Date;\n}\n\nconst DATE_FORMAT = 'MMM d, yyyy HH:mm';\n\nconst LEVEL_TIP = 'Pick a wider range or lower the logging level — verbose entries (debug, info) may be filtered out.';\n\nfunction describeRange({ datePreset, dateFrom, dateTo }: NoLogsInfoProps): { title: string; description: string } {\n if (datePreset && datePreset !== 'all' && datePreset !== 'custom') {\n return {\n title: `No logs for ${PRESET_LABELS[datePreset]}`,\n description: LEVEL_TIP,\n };\n }\n if (dateFrom && dateTo) {\n return {\n title: `No logs between ${format(dateFrom, DATE_FORMAT)} and ${format(dateTo, DATE_FORMAT)}`,\n description: LEVEL_TIP,\n };\n }\n if (dateFrom) {\n return {\n title: `No logs since ${format(dateFrom, DATE_FORMAT)}`,\n description: LEVEL_TIP,\n };\n }\n return {\n title: 'No logs yet',\n description: 'Logs will appear here once agents, workflows, or tools are executed.',\n };\n}\n\nexport const NoLogsInfo = ({ datePreset, dateFrom, dateTo }: NoLogsInfoProps = {}) => {\n const { title, description } = describeRange({ datePreset, dateFrom, dateTo });\n return (\n <div className=\"flex h-full items-center justify-center\">\n <EmptyState\n iconSlot={<CircleSlashIcon />}\n titleSlot={title}\n descriptionSlot={description}\n actionSlot={\n <Button\n variant=\"ghost\"\n as=\"a\"\n href=\"https://mastra.ai/en/docs/observability/logging\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Logging Documentation <ExternalLinkIcon />\n </Button>\n }\n />\n </div>\n );\n};\n","import type { ListLogsArgs, ListLogsResponse } from '@mastra/core/storage';\nimport { useMastraClient } from '@mastra/react';\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport { useEffect } from 'react';\n\nimport type { LogRecord } from '../types';\nimport { useInView } from '@/hooks/use-in-view';\n\ninterface UseLogsReturn {\n data: LogRecord[] | undefined;\n hasNextPage: boolean;\n isFetchingNextPage: boolean;\n fetchNextPage: () => void;\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n setEndOfListElement: (node: HTMLDivElement | null) => void;\n}\n\nconst LOGS_PER_PAGE = 20;\n\nexport interface LogsFilters {\n filters?: ListLogsArgs['filters'];\n}\n\nfunction getNextPageParam(lastPage: ListLogsResponse | undefined, _allPages: unknown, lastPageParam: number) {\n if (lastPage?.pagination?.hasMore) {\n return lastPageParam + 1;\n }\n return undefined;\n}\n\n/** Deduplicates logs across loaded pages. Offset-based pagination duplicates rows at the page\n * boundary whenever new logs are inserted between sequential `fetchNextPage` calls — without\n * this filter the duplicates produce duplicate React keys and chaotic virtualizer offsets.\n * Falls back to the full serialized record when `logId` is absent so logs that happen to\n * share `(timestamp, message, data)` but differ in other fields aren't collapsed. */\nfunction selectLogs(data: { pages: ListLogsResponse[] }) {\n const seen = new Set<string>();\n const result = [];\n for (const page of data.pages) {\n for (const log of page.logs ?? []) {\n const key = log.logId ?? JSON.stringify(log);\n if (seen.has(key)) continue;\n seen.add(key);\n result.push(log);\n }\n }\n return result;\n}\n\nexport const useLogs: (props?: LogsFilters) => UseLogsReturn = ({ filters }: LogsFilters = {}) => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery<ListLogsResponse, Error, ReturnType<typeof selectLogs>, readonly unknown[], number>({\n queryKey: ['logs', filters],\n queryFn: ({ pageParam }) =>\n client.listLogsVNext({\n pagination: { page: pageParam, perPage: LOGS_PER_PAGE },\n filters,\n orderBy: { field: 'timestamp', direction: 'DESC' },\n }),\n initialPageParam: 0,\n getNextPageParam,\n select: selectLogs,\n retry: false,\n refetchInterval: 10000,\n });\n\n const { hasNextPage, isFetchingNextPage, fetchNextPage, data, isLoading, isError, error } = query;\n\n useEffect(() => {\n if (isEndOfListInView && hasNextPage && !isFetchingNextPage) {\n void fetchNextPage();\n }\n }, [isEndOfListInView, hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n return { data, hasNextPage, isFetchingNextPage, fetchNextPage, isLoading, isError, error, setEndOfListElement };\n};\n","import { useCallback, useMemo, useRef } from 'react';\nimport type { SetURLSearchParamsLike } from '../../traces/hooks/use-trace-url-state';\nimport {\n LOGS_DATE_FROM_PARAM,\n LOGS_DATE_PRESET_PARAM,\n LOGS_DATE_PRESET_VALUES,\n LOGS_DATE_TO_PARAM,\n LOGS_PROPERTY_FILTER_FIELD_IDS,\n LOGS_PROPERTY_FILTER_PARAM_BY_FIELD,\n LOGS_ROOT_ENTITY_TYPE_OPTIONS,\n LOGS_ROOT_ENTITY_TYPE_PARAM,\n applyLogsPropertyFilterTokens,\n getLogsPropertyFilterTokens,\n} from '../log-filters';\nimport type { LogsDatePreset, LogsEntityOptions } from '../log-filters';\nimport type { PropertyFilterToken } from '@/ds/components/PropertyFilter/types';\n\nconst LOG_PARAM = 'logId';\nconst TRACE_PARAM = 'traceId';\nconst SPAN_PARAM = 'spanId';\n\nconst DAY_MS = 24 * 60 * 60 * 1000;\nconst PRESET_MS: Partial<Record<LogsDatePreset, number>> = {\n 'last-24h': DAY_MS,\n 'last-3d': 3 * DAY_MS,\n 'last-7d': 7 * DAY_MS,\n 'last-14d': 14 * DAY_MS,\n 'last-30d': 30 * DAY_MS,\n};\n\n/** Mutates `params` in place to drop the featured log/trace/span selection.\n * Used whenever a filter changes — selection no longer makes sense in the new result set. */\nfunction clearSelectionParams(params: URLSearchParams) {\n params.delete(LOG_PARAM);\n params.delete(TRACE_PARAM);\n params.delete(SPAN_PARAM);\n}\n\nexport interface LogsFeaturedIds {\n logId?: string | null;\n traceId?: string | null;\n spanId?: string | null;\n}\n\nexport interface UseLogsUrlStateOptions {\n /** Called after `handleRemoveAll` clears all filter URL params. */\n onRemoveAll?: () => void;\n}\n\nexport interface UseLogsUrlStateResult {\n searchParams: URLSearchParams;\n setSearchParams: SetURLSearchParamsLike;\n\n datePreset: LogsDatePreset;\n selectedDateFrom: Date | undefined;\n selectedDateTo: Date | undefined;\n datePresetRef: React.MutableRefObject<LogsDatePreset>;\n\n featuredLogId: string | null;\n featuredTraceId: string | null;\n featuredSpanId: string | null;\n\n selectedEntityOption: LogsEntityOptions | undefined;\n filterTokens: PropertyFilterToken[];\n\n /** Partial update of the featured log/trace/span selection. Omitted keys are left as-is. */\n handleFeaturedChange: (ids: LogsFeaturedIds) => void;\n handleFilterTokensChange: (nextTokens: PropertyFilterToken[]) => void;\n handleDateChange: (value: Date | undefined, type: 'from' | 'to') => void;\n handleDatePresetChange: (preset: LogsDatePreset) => void;\n handleRemoveAll: () => void;\n\n /** Lower-level helper used by `handleClear`: writes a token set and clears the log/trace/span selection. */\n applyFilterTokens: (tokens: PropertyFilterToken[]) => void;\n}\n\n/**\n * Owns all URL-derived state and URL-modifying handlers for the logs page. Routing-agnostic —\n * pass `searchParams` and `setSearchParams` from whichever router the consumer uses.\n */\nexport function useLogsUrlState(\n searchParams: URLSearchParams,\n setSearchParams: SetURLSearchParamsLike,\n options?: UseLogsUrlStateOptions,\n): UseLogsUrlStateResult {\n const { onRemoveAll } = options ?? {};\n\n const datePreset = useMemo<LogsDatePreset>(() => {\n const value = searchParams.get(LOGS_DATE_PRESET_PARAM);\n return value && LOGS_DATE_PRESET_VALUES.has(value as LogsDatePreset) ? (value as LogsDatePreset) : 'last-24h';\n }, [searchParams]);\n\n const dateFromParamRaw = searchParams.get(LOGS_DATE_FROM_PARAM);\n const dateToParamRaw = searchParams.get(LOGS_DATE_TO_PARAM);\n\n const selectedDateFrom = useMemo(() => {\n if (datePreset === 'custom') {\n if (!dateFromParamRaw) return undefined;\n const parsed = new Date(dateFromParamRaw);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }\n if (datePreset === 'all') return undefined;\n const ms = PRESET_MS[datePreset];\n return ms ? new Date(Date.now() - ms) : undefined;\n }, [datePreset, dateFromParamRaw]);\n\n const selectedDateTo = useMemo(() => {\n if (datePreset !== 'custom' || !dateToParamRaw) return undefined;\n const parsed = new Date(dateToParamRaw);\n return Number.isNaN(parsed.getTime()) ? undefined : parsed;\n }, [datePreset, dateToParamRaw]);\n\n const datePresetRef = useRef(datePreset);\n datePresetRef.current = datePreset;\n\n const featuredLogId = searchParams.get(LOG_PARAM);\n const featuredTraceId = searchParams.get(TRACE_PARAM);\n const featuredSpanId = searchParams.get(SPAN_PARAM);\n\n const selectedEntityOption = useMemo(\n () =>\n LOGS_ROOT_ENTITY_TYPE_OPTIONS.find(option => option.entityType === searchParams.get(LOGS_ROOT_ENTITY_TYPE_PARAM)),\n [searchParams],\n );\n\n const filterTokens = useMemo(() => getLogsPropertyFilterTokens(searchParams), [searchParams]);\n\n const handleFeaturedChange = useCallback(\n (ids: LogsFeaturedIds) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n for (const [field, value] of Object.entries(ids)) {\n const param = field === 'logId' ? LOG_PARAM : field === 'traceId' ? TRACE_PARAM : SPAN_PARAM;\n if (value) {\n next.set(param, value);\n } else {\n next.delete(param);\n }\n }\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const applyFilterTokens = useCallback(\n (tokens: PropertyFilterToken[]) => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n applyLogsPropertyFilterTokens(next, tokens);\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleFilterTokensChange = applyFilterTokens;\n\n const handleDateChange = useCallback(\n (value: Date | undefined, type: 'from' | 'to') => {\n if (datePresetRef.current !== 'custom') return;\n const param = type === 'from' ? LOGS_DATE_FROM_PARAM : LOGS_DATE_TO_PARAM;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (value) {\n next.set(param, value.toISOString());\n } else {\n next.delete(param);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleDatePresetChange = useCallback(\n (preset: LogsDatePreset) => {\n datePresetRef.current = preset;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n if (preset === 'last-24h') {\n next.delete(LOGS_DATE_PRESET_PARAM);\n next.delete(LOGS_DATE_FROM_PARAM);\n next.delete(LOGS_DATE_TO_PARAM);\n } else if (preset === 'custom') {\n next.set(LOGS_DATE_PRESET_PARAM, 'custom');\n } else {\n next.set(LOGS_DATE_PRESET_PARAM, preset);\n next.delete(LOGS_DATE_FROM_PARAM);\n next.delete(LOGS_DATE_TO_PARAM);\n }\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n },\n [setSearchParams],\n );\n\n const handleRemoveAll = useCallback(() => {\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n next.delete(LOGS_ROOT_ENTITY_TYPE_PARAM);\n for (const fieldId of LOGS_PROPERTY_FILTER_FIELD_IDS) {\n next.delete(LOGS_PROPERTY_FILTER_PARAM_BY_FIELD[fieldId]);\n }\n next.delete(LOGS_DATE_PRESET_PARAM);\n next.delete(LOGS_DATE_FROM_PARAM);\n next.delete(LOGS_DATE_TO_PARAM);\n clearSelectionParams(next);\n return next;\n },\n { replace: true },\n );\n onRemoveAll?.();\n }, [setSearchParams, onRemoveAll]);\n\n return useMemo(\n () => ({\n searchParams,\n setSearchParams,\n datePreset,\n selectedDateFrom,\n selectedDateTo,\n datePresetRef,\n featuredLogId,\n featuredTraceId,\n featuredSpanId,\n selectedEntityOption,\n filterTokens,\n handleFeaturedChange,\n handleFilterTokensChange,\n handleDateChange,\n handleDatePresetChange,\n handleRemoveAll,\n applyFilterTokens,\n }),\n [\n searchParams,\n setSearchParams,\n datePreset,\n selectedDateFrom,\n selectedDateTo,\n datePresetRef,\n featuredLogId,\n featuredTraceId,\n featuredSpanId,\n selectedEntityOption,\n filterTokens,\n handleFeaturedChange,\n handleFilterTokensChange,\n handleDateChange,\n handleDatePresetChange,\n handleRemoveAll,\n applyFilterTokens,\n ],\n );\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { SetURLSearchParamsLike } from '../../traces/hooks/use-trace-url-state';\nimport {\n clearSavedLogsFilters,\n hasAnyLogsFilterParams,\n loadLogsFiltersFromStorage,\n saveLogsFiltersToStorage,\n} from '../log-filters';\nimport { toast } from '@/lib/toast';\n\nconst DEFAULT_SAVED_MESSAGE = 'Filters setting for Logs saved';\nconst DEFAULT_CLEARED_MESSAGE = 'Filters setting for Logs cleared up';\n\nexport interface LogsFilterPersistenceOptions {\n /** Override the localStorage key. Default: logs filters storage. */\n storageKey?: string;\n /** Toast text overrides; pass `false` to suppress the toast entirely. */\n messages?: {\n saved?: string | false;\n cleared?: string | false;\n };\n /** Skip the once-on-mount hydration from localStorage. Default: false. */\n skipHydration?: boolean;\n}\n\nexport interface UseLogsFilterPersistenceResult {\n hasSavedFilters: boolean;\n handleSave: () => void;\n handleRemoveSaved: () => void;\n}\n\n/**\n * Owns the localStorage save/restore lifecycle for logs filters. Mirrors\n * `useTraceFilterPersistence` — same pattern, different storage key default.\n */\nexport function useLogsFilterPersistence(\n searchParams: URLSearchParams,\n setSearchParams: SetURLSearchParamsLike,\n options?: LogsFilterPersistenceOptions,\n): UseLogsFilterPersistenceResult {\n const { storageKey, messages, skipHydration } = options ?? {};\n\n const [hasSavedFilters, setHasSavedFilters] = useState(() => loadLogsFiltersFromStorage(storageKey) !== null);\n\n const handleSave = useCallback(() => {\n saveLogsFiltersToStorage(searchParams, storageKey);\n setHasSavedFilters(true);\n const text = messages?.saved ?? DEFAULT_SAVED_MESSAGE;\n if (text !== false) toast.success(text);\n }, [searchParams, storageKey, messages?.saved]);\n\n const handleRemoveSaved = useCallback(() => {\n clearSavedLogsFilters(storageKey);\n setHasSavedFilters(false);\n const text = messages?.cleared ?? DEFAULT_CLEARED_MESSAGE;\n if (text !== false) toast.success(text);\n }, [storageKey, messages?.cleared]);\n\n const hydratedRef = useRef(false);\n useEffect(() => {\n if (skipHydration) return;\n if (hydratedRef.current) return;\n hydratedRef.current = true;\n if (hasAnyLogsFilterParams(searchParams)) return;\n const saved = loadLogsFiltersFromStorage(storageKey);\n if (!saved) return;\n setSearchParams(\n prev => {\n const next = new URLSearchParams(prev);\n for (const [key, value] of saved) {\n next.append(key, value);\n }\n return next;\n },\n { replace: true },\n );\n // Run once on mount — searchParams intentionally read at mount time.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { hasSavedFilters, handleSave, handleRemoveSaved };\n}\n","import { useCallback, useMemo } from 'react';\nimport type { LogRecord } from '../types';\nimport type { LogsFeaturedIds } from './use-logs-url-state';\n\nfunction hashCode(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) - hash + str.charCodeAt(i)) | 0;\n }\n return (hash >>> 0).toString(36);\n}\n\n/** Prefer the storage-assigned `logId`. When absent, derive an id from immutable content fields\n * (`timestamp + message + data`) so the same log lands on the same id across polls regardless\n * of list order or insertions. Two logs without `logId` that hash identically share an id —\n * acceptable because the URL-driven selection still resolves deterministically. */\nfunction buildLogIds(logs: LogRecord[]): Map<LogRecord, string> {\n const ids = new Map<LogRecord, string>();\n for (const log of logs) {\n if (log.logId) {\n ids.set(log, log.logId);\n continue;\n }\n const ts = log.timestamp instanceof Date ? log.timestamp.toISOString() : log.timestamp;\n ids.set(log, hashCode(`${ts}${log.message ?? ''}${log.data ? JSON.stringify(log.data) : ''}`));\n }\n return ids;\n}\n\nexport interface UseLogsListNavigationResult {\n /** Map each log in the list to its derived id. Pass to `<LogsListView logIdMap={...}>`. */\n logIdMap: Map<LogRecord, string>;\n /** Look up a log's id (undefined if not in the list). */\n getLogId: (log: LogRecord) => string | undefined;\n /** The currently featured log resolved from `featuredLogId`, or null. */\n featuredLog: LogRecord | null;\n /** Click handler that flips featured selection with toggle behavior, and — when a trace panel is\n * open — syncs the trace panel to the new log's trace. Pass to `<LogsListView onLogClick={...}>`. */\n handleLogClick: (log: LogRecord) => void;\n /** Undefined when at the start of the list (disable the prev button). */\n handlePreviousLog: (() => void) | undefined;\n /** Undefined when at the end of the list (disable the next button). */\n handleNextLog: (() => void) | undefined;\n}\n\n/**\n * Derives id mapping + featured log + prev/next/click handlers for a logs list. Stateless — only\n * reads from the inputs and calls `onFeaturedChange` on selection changes.\n */\nexport function useLogsListNavigation(\n logs: LogRecord[],\n featuredLogId: string | null,\n onFeaturedChange: (ids: LogsFeaturedIds) => void,\n featuredTraceId?: string | null,\n): UseLogsListNavigationResult {\n const logIdMap = useMemo(() => buildLogIds(logs), [logs]);\n\n const idToLog = useMemo(() => {\n const m = new Map<string, { log: LogRecord; idx: number }>();\n for (let i = 0; i < logs.length; i++) {\n const id = logIdMap.get(logs[i]);\n if (id) m.set(id, { log: logs[i], idx: i });\n }\n return m;\n }, [logs, logIdMap]);\n\n const entry = featuredLogId ? idToLog.get(featuredLogId) : undefined;\n const featuredLogIdx = entry?.idx ?? -1;\n const featuredLog = featuredLogIdx >= 0 ? logs[featuredLogIdx] : null;\n\n const getLogId = useCallback((log: LogRecord) => logIdMap.get(log), [logIdMap]);\n\n const handleLogClick = useCallback(\n (log: LogRecord) => {\n const id = logIdMap.get(log);\n if (!id) return;\n if (featuredLogId === id) {\n onFeaturedChange({ logId: null });\n return;\n }\n if (featuredTraceId) {\n onFeaturedChange({ logId: id, traceId: log.traceId ?? null, spanId: null });\n } else {\n onFeaturedChange({ logId: id });\n }\n },\n [logIdMap, featuredLogId, featuredTraceId, onFeaturedChange],\n );\n\n const handlePreviousLog =\n featuredLogIdx > 0\n ? () => {\n const prevLog = logs[featuredLogIdx - 1];\n const id = logIdMap.get(prevLog)!;\n if (featuredTraceId) {\n onFeaturedChange({ logId: id, traceId: prevLog.traceId ?? null, spanId: null });\n } else {\n onFeaturedChange({ logId: id });\n }\n }\n : undefined;\n\n const handleNextLog =\n featuredLogIdx >= 0 && featuredLogIdx < logs.length - 1\n ? () => {\n const nextLog = logs[featuredLogIdx + 1];\n const id = logIdMap.get(nextLog)!;\n if (featuredTraceId) {\n onFeaturedChange({ logId: id, traceId: nextLog.traceId ?? null, spanId: null });\n } else {\n onFeaturedChange({ logId: id });\n }\n }\n : undefined;\n\n return {\n logIdMap,\n getLogId,\n featuredLog,\n handleLogClick,\n handlePreviousLog,\n handleNextLog,\n };\n}\n"],"names":["jsxs","jsx","Wand2","useState","useCallback","str","Braces","List","Hash","ToggleLeft","Type","cn","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Icon","React","Equal","EqualNot","TextSearch","Text","ChevronRight","ChevronLeft","ChevronsRight","ChevronsLeft","ListX","Check","Ban","Input","isArrayOperator","Fragment","Button","X","Plus","Component","usePanelRef","Panel","Tooltip","TooltipTrigger","ArrowRight","ArrowLeft","TooltipContent","Separator","ResizeHandleIndicator","create","persist","EntityType","createContext","useContext","format","useMemo","useRef","DateTimeRangePicker","EyeIcon","LogsIcon","MetricsKpiCard","MetricsCard","MetricsLineChart","useEffect","Tabs","TabList","Tab","TabContent","MetricsDataTable","HorizontalBars","PRESET_MS","useMastraClient","useQuery","TOP_N","value","from","to","spans","AgentIcon","WorkflowIcon","BrainIcon","ToolsIcon","GaugeIcon","DataKeysAndValues","ChevronUpIcon","ChevronDownIcon","ChevronsUpIcon","ChevronsDownIcon","FoldVerticalIcon","UnfoldVerticalIcon","ChevronsDownUpIcon","ChevronsUpDownIcon","tooltip","HoverCard","HoverCardTrigger","HoverCardContent","types","Spinner","isNonDefaultFilter","PropertyFilterApplied","PropertyFilterActions","toast","Loader2Icon","DownloadIcon","DataPanel","ButtonsGroup","Link2Icon","CircleGaugeIcon","SaveIcon","Notice","FileInputIcon","FileOutputIcon","BracesIcon","KV","DataDetailsPanel","COLUMNS","ROW_HEIGHT","OVERSCAN","useVirtualizer","DataListSkeleton","TracesDataList","DropdownMenu","SessionExpired","PermissionDenied","ErrorState","PRESET_LABELS","DATE_FORMAT","describeRange","EmptyState","CircleSlashIcon","ExternalLinkIcon","IMMUTABLE_CACHE_TIME","useQueryClient","useInfiniteQuery","DAY_MS","clearSelectionParams","DEFAULT_SAVED_MESSAGE","DEFAULT_CLEARED_MESSAGE","ArrowUpIcon","ArrowDownIcon","ArrowRightIcon","CopyButton","LogsDataListSkeleton","LogsDataList"],"mappings":"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"}