@mastra/playground-ui 68.0.0-alpha.3 → 68.0.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 (163) hide show
  1. package/dist/{FilterBar-CQl04O6t.cjs → FilterBar-BSP2UTjc.cjs} +2 -2
  2. package/dist/{FilterBar-CQl04O6t.cjs.map → FilterBar-BSP2UTjc.cjs.map} +1 -1
  3. package/dist/{FilterBar-BgW2dqRQ.js → FilterBar-PSQ1OwqH.js} +2 -2
  4. package/dist/{FilterBar-BgW2dqRQ.js.map → FilterBar-PSQ1OwqH.js.map} +1 -1
  5. package/dist/{MetricsCard-CEB-f2sv.cjs → MetricsCard-BEwiS7Pe.cjs} +8 -8
  6. package/dist/MetricsCard-BEwiS7Pe.cjs.map +1 -0
  7. package/dist/{MetricsCard-M8awJ2B_.js → MetricsCard-ua6C6b8a.js} +10 -10
  8. package/dist/MetricsCard-ua6C6b8a.js.map +1 -0
  9. package/dist/{MetricsLineChart-BhHoduO0.js → MetricsLineChart-4SwxBbQx.js} +14 -3
  10. package/dist/MetricsLineChart-4SwxBbQx.js.map +1 -0
  11. package/dist/{MetricsLineChart-CjBm4IXu.cjs → MetricsLineChart-tZxsauau.cjs} +13 -2
  12. package/dist/MetricsLineChart-tZxsauau.cjs.map +1 -0
  13. package/dist/{MetricsStackedBarChart-BdMlKv6G.cjs → MetricsStackedBarChart-CDLE76IB.cjs} +2 -2
  14. package/dist/{MetricsStackedBarChart-BdMlKv6G.cjs.map → MetricsStackedBarChart-CDLE76IB.cjs.map} +1 -1
  15. package/dist/{MetricsStackedBarChart-BRuA6MTE.js → MetricsStackedBarChart-D2QyS4-z.js} +2 -2
  16. package/dist/{MetricsStackedBarChart-BRuA6MTE.js.map → MetricsStackedBarChart-D2QyS4-z.js.map} +1 -1
  17. package/dist/components/DateTimeRangePicker.cjs.js +1 -1
  18. package/dist/components/DateTimeRangePicker.es.js +1 -1
  19. package/dist/components/FilterBar.cjs.js +2 -2
  20. package/dist/components/FilterBar.es.js +2 -2
  21. package/dist/components/MetricsCard.cjs.js +1 -1
  22. package/dist/components/MetricsCard.es.js +1 -1
  23. package/dist/components/MetricsLineChart.cjs.js +1 -1
  24. package/dist/components/MetricsLineChart.es.js +1 -1
  25. package/dist/components/MetricsStackedBarChart.cjs.js +1 -1
  26. package/dist/components/MetricsStackedBarChart.es.js +1 -1
  27. package/dist/{date-time-range-picker-CTt7Od0P.cjs → date-time-range-picker-CWGjoR3j.cjs} +40 -13
  28. package/dist/date-time-range-picker-CWGjoR3j.cjs.map +1 -0
  29. package/dist/{date-time-range-picker-DKh1K9Iy.js → date-time-range-picker-CdSiXwB4.js} +40 -13
  30. package/dist/date-time-range-picker-CdSiXwB4.js.map +1 -0
  31. package/dist/domains/chat/messages/message-row.cjs.js +1 -1
  32. package/dist/domains/chat/messages/message-row.es.js +1 -1
  33. package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
  34. package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
  35. package/dist/domains/chat/tools/badges/agent-badge.cjs.js +1 -1
  36. package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
  37. package/dist/domains/chat/tools/connect-prompt-tool.cjs.js +79 -4
  38. package/dist/domains/chat/tools/connect-prompt-tool.cjs.js.map +1 -1
  39. package/dist/domains/chat/tools/connect-prompt-tool.es.js +79 -4
  40. package/dist/domains/chat/tools/connect-prompt-tool.es.js.map +1 -1
  41. package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js +10 -12
  42. package/dist/domains/chat/tools/mcp-input-request-tool.cjs.js.map +1 -1
  43. package/dist/domains/chat/tools/mcp-input-request-tool.es.js +10 -12
  44. package/dist/domains/chat/tools/mcp-input-request-tool.es.js.map +1 -1
  45. package/dist/domains/chat/tools/tool-card-kind.cjs.js +1 -1
  46. package/dist/domains/chat/tools/tool-card-kind.cjs.js.map +1 -1
  47. package/dist/domains/chat/tools/tool-card-kind.es.js +1 -1
  48. package/dist/domains/chat/tools/tool-card-kind.es.js.map +1 -1
  49. package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
  50. package/dist/domains/chat/tools/tool-card.es.js +1 -1
  51. package/dist/domains/connect/types.cjs.js.map +1 -1
  52. package/dist/domains/connect/types.es.js.map +1 -1
  53. package/dist/domains/connect/use-user-connect.cjs.js +19 -2
  54. package/dist/domains/connect/use-user-connect.cjs.js.map +1 -1
  55. package/dist/domains/connect/use-user-connect.es.js +19 -2
  56. package/dist/domains/connect/use-user-connect.es.js.map +1 -1
  57. package/dist/domains/dashboards/components/dashboard-renderer.cjs.js +4 -3
  58. package/dist/domains/dashboards/components/dashboard-renderer.cjs.js.map +1 -1
  59. package/dist/domains/dashboards/components/dashboard-renderer.es.js +4 -3
  60. package/dist/domains/dashboards/components/dashboard-renderer.es.js.map +1 -1
  61. package/dist/domains/dashboards/components/widget-chrome.cjs.js +1 -1
  62. package/dist/domains/dashboards/components/widget-chrome.es.js +1 -1
  63. package/dist/domains/dashboards/components/widget-error.cjs.js +1 -1
  64. package/dist/domains/dashboards/components/widget-error.es.js +1 -1
  65. package/dist/domains/dashboards/hooks/use-widget-views.cjs.js +4 -3
  66. package/dist/domains/dashboards/hooks/use-widget-views.cjs.js.map +1 -1
  67. package/dist/domains/dashboards/hooks/use-widget-views.es.js +4 -3
  68. package/dist/domains/dashboards/hooks/use-widget-views.es.js.map +1 -1
  69. package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js +9 -6
  70. package/dist/domains/dashboards/kinds/scores/scores-widget.cjs.js.map +1 -1
  71. package/dist/domains/dashboards/kinds/scores/scores-widget.es.js +9 -6
  72. package/dist/domains/dashboards/kinds/scores/scores-widget.es.js.map +1 -1
  73. package/dist/domains/dashboards/kinds/table/table-tabs.cjs.js +2 -2
  74. package/dist/domains/dashboards/kinds/table/table-tabs.es.js +2 -2
  75. package/dist/domains/dashboards/kinds/table/table-widget.cjs.js +1 -1
  76. package/dist/domains/dashboards/kinds/table/table-widget.es.js +1 -1
  77. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js +6 -5
  78. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.cjs.js.map +1 -1
  79. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js +6 -5
  80. package/dist/domains/dashboards/kinds/timeseries/timeseries-widget.es.js.map +1 -1
  81. package/dist/domains/dashboards/lib/chrome.cjs.js +9 -2
  82. package/dist/domains/dashboards/lib/chrome.cjs.js.map +1 -1
  83. package/dist/domains/dashboards/lib/chrome.es.js +9 -2
  84. package/dist/domains/dashboards/lib/chrome.es.js.map +1 -1
  85. package/dist/domains/dashboards/widget-kind.cjs.js.map +1 -1
  86. package/dist/domains/dashboards/widget-kind.es.js.map +1 -1
  87. package/dist/domains/metrics/components/agent-runs-card.cjs.js +3 -3
  88. package/dist/domains/metrics/components/agent-runs-card.es.js +3 -3
  89. package/dist/domains/metrics/components/breakdown/breakdown-tab-body.cjs.js +1 -1
  90. package/dist/domains/metrics/components/breakdown/breakdown-tab-body.es.js +1 -1
  91. package/dist/domains/metrics/components/breakdown-card.cjs.js +1 -1
  92. package/dist/domains/metrics/components/breakdown-card.es.js +1 -1
  93. package/dist/domains/metrics/components/chart-area.cjs.js +1 -1
  94. package/dist/domains/metrics/components/chart-area.es.js +1 -1
  95. package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
  96. package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
  97. package/dist/domains/metrics/components/chart-card.cjs.js +1 -1
  98. package/dist/domains/metrics/components/chart-card.es.js +1 -1
  99. package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
  100. package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
  101. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.cjs.js +3 -2
  102. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.cjs.js.map +1 -1
  103. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.es.js +3 -2
  104. package/dist/domains/metrics/components/distinct-ids/distinct-ids-chart.es.js.map +1 -1
  105. package/dist/domains/metrics/components/failure-rate-card.cjs.js +3 -2
  106. package/dist/domains/metrics/components/failure-rate-card.cjs.js.map +1 -1
  107. package/dist/domains/metrics/components/failure-rate-card.es.js +3 -2
  108. package/dist/domains/metrics/components/failure-rate-card.es.js.map +1 -1
  109. package/dist/domains/metrics/components/latency-card.cjs.js +3 -2
  110. package/dist/domains/metrics/components/latency-card.cjs.js.map +1 -1
  111. package/dist/domains/metrics/components/latency-card.es.js +3 -2
  112. package/dist/domains/metrics/components/latency-card.es.js.map +1 -1
  113. package/dist/domains/metrics/components/metrics-time-range-chip.cjs.js +1 -1
  114. package/dist/domains/metrics/components/metrics-time-range-chip.es.js +1 -1
  115. package/dist/domains/metrics/components/scores-card.cjs.js +2 -1
  116. package/dist/domains/metrics/components/scores-card.cjs.js.map +1 -1
  117. package/dist/domains/metrics/components/scores-card.es.js +2 -1
  118. package/dist/domains/metrics/components/scores-card.es.js.map +1 -1
  119. package/dist/domains/metrics/components/token-usage-card.cjs.js +3 -3
  120. package/dist/domains/metrics/components/token-usage-card.es.js +3 -3
  121. package/dist/domains/metrics/components/trace-aggregate-card.cjs.js +1 -1
  122. package/dist/domains/metrics/components/trace-aggregate-card.es.js +1 -1
  123. package/dist/domains/observability/components/observability-histogram.cjs.js +1 -1
  124. package/dist/domains/observability/components/observability-histogram.es.js +1 -1
  125. package/dist/domains/spans/components/spans-filter-bar.cjs.js +2 -2
  126. package/dist/domains/spans/components/spans-filter-bar.es.js +2 -2
  127. package/dist/domains/spans/hooks/use-spans-filter-bar.cjs.js +1 -1
  128. package/dist/domains/spans/hooks/use-spans-filter-bar.es.js +1 -1
  129. package/dist/domains/threads/components/threads-filter-bar.cjs.js +2 -2
  130. package/dist/domains/threads/components/threads-filter-bar.es.js +2 -2
  131. package/dist/domains/threads/hooks/use-threads-filter-bar.cjs.js +1 -1
  132. package/dist/domains/threads/hooks/use-threads-filter-bar.es.js +1 -1
  133. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.cjs.js +2 -2
  134. package/dist/domains/traces/components/traces-explorer/traces-explorer-filter-bar.es.js +2 -2
  135. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.cjs.js +1 -1
  136. package/dist/domains/traces/components/traces-explorer/use-traces-filter-bar.es.js +1 -1
  137. package/dist/{filter-bar-time-range-mg9JeYue.js → filter-bar-time-range-qlV8p7hp.js} +2 -2
  138. package/dist/{filter-bar-time-range-mg9JeYue.js.map → filter-bar-time-range-qlV8p7hp.js.map} +1 -1
  139. package/dist/{filter-bar-time-range-BA-pXMlo.cjs → filter-bar-time-range-zdM024JD.cjs} +2 -2
  140. package/dist/{filter-bar-time-range-BA-pXMlo.cjs.map → filter-bar-time-range-zdM024JD.cjs.map} +1 -1
  141. package/dist/src/domains/chat/tools/connect-prompt-tool.d.ts +10 -1
  142. package/dist/src/domains/connect/types.d.ts +16 -0
  143. package/dist/src/domains/dashboards/components/dashboard-renderer.d.ts +4 -2
  144. package/dist/src/domains/dashboards/hooks/use-widget-views.d.ts +4 -3
  145. package/dist/src/domains/dashboards/index.d.ts +1 -1
  146. package/dist/src/domains/dashboards/kinds/scores/scores-widget.d.ts +1 -1
  147. package/dist/src/domains/dashboards/lib/chrome.d.ts +6 -4
  148. package/dist/src/domains/dashboards/widget-kind.d.ts +12 -0
  149. package/dist/src/ds/components/DateTimeRangePicker/date-time-range-picker.d.ts +12 -1
  150. package/dist/src/ds/components/MetricsCard/metrics-card-headline.d.ts +1 -1
  151. package/dist/src/ds/components/MetricsLineChart/metrics-line-chart.d.ts +8 -0
  152. package/dist/style.css +4 -0
  153. package/dist/{tool-card-rxhTDpk_.cjs → tool-card-BOLXeKIp.cjs} +4 -1
  154. package/dist/{tool-card-rxhTDpk_.cjs.map → tool-card-BOLXeKIp.cjs.map} +1 -1
  155. package/dist/{tool-card-toDgoZzJ.js → tool-card-HZ5bm7ue.js} +4 -1
  156. package/dist/{tool-card-toDgoZzJ.js.map → tool-card-HZ5bm7ue.js.map} +1 -1
  157. package/package.json +9 -9
  158. package/dist/MetricsCard-CEB-f2sv.cjs.map +0 -1
  159. package/dist/MetricsCard-M8awJ2B_.js.map +0 -1
  160. package/dist/MetricsLineChart-BhHoduO0.js.map +0 -1
  161. package/dist/MetricsLineChart-CjBm4IXu.cjs.map +0 -1
  162. package/dist/date-time-range-picker-CTt7Od0P.cjs.map +0 -1
  163. package/dist/date-time-range-picker-DKh1K9Iy.js.map +0 -1
@@ -2,7 +2,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_trace_filters = require("../../../../trace-filters-a0N9bf52.cjs");
3
3
  const require_types = require("../../../../types-CP7wbYua.cjs");
4
4
  const require_domains_traces_components_traces_explorer_traces_explorer_actions = require("./traces-explorer-actions.cjs.js");
5
- const require_filter_bar_time_range = require("../../../../filter-bar-time-range-BA-pXMlo.cjs");
5
+ const require_filter_bar_time_range = require("../../../../filter-bar-time-range-zdM024JD.cjs");
6
6
  const require_domains_traces_components_traces_explorer_traces_explorer_context = require("./traces-explorer-context.cjs.js");
7
7
  const require_domains_traces_components_traces_explorer_use_traces_discovery = require("./use-traces-discovery.cjs.js");
8
8
  let react = require("react");
@@ -1,7 +1,7 @@
1
1
  import { I as createTraceFilterBarFields, L as filterBarExpressionToTraceFilters, rt as traceTokensToFilterBarItems, tt as traceFiltersToFilterBarExpression } from "../../../../trace-filters-CaWkw779.js";
2
2
  import { t as isFilterBarGroup } from "../../../../types-DiiL5mTO.js";
3
3
  import { getSelectedEntityOption } from "./traces-explorer-actions.es.js";
4
- import { r as FILTER_BAR_TIME_RANGE_ITEM, t as FILTER_BAR_TIME_RANGE_FIELD } from "../../../../filter-bar-time-range-mg9JeYue.js";
4
+ import { r as FILTER_BAR_TIME_RANGE_ITEM, t as FILTER_BAR_TIME_RANGE_FIELD } from "../../../../filter-bar-time-range-qlV8p7hp.js";
5
5
  import { useTracesConfig, useTracesFilters } from "./traces-explorer-context.es.js";
6
6
  import { useTracesDiscovery } from "./use-traces-discovery.es.js";
7
7
  import { useMemo } from "react";
@@ -1,4 +1,4 @@
1
- import { t as DateTimeRangePicker } from "./date-time-range-picker-DKh1K9Iy.js";
1
+ import { t as DateTimeRangePicker } from "./date-time-range-picker-CdSiXwB4.js";
2
2
  import { p as useFilterBarItemKeys, y as useFilterBarContext } from "./filter-bar-chip-CABeKrtf.js";
3
3
  import { useRef } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -57,4 +57,4 @@ function FilterBarTimeRange(props) {
57
57
  }
58
58
  export { FilterBarTimeRange as i, FILTER_BAR_TIME_RANGE_FIELD_ID as n, FILTER_BAR_TIME_RANGE_ITEM as r, FILTER_BAR_TIME_RANGE_FIELD as t };
59
59
 
60
- //# sourceMappingURL=filter-bar-time-range-mg9JeYue.js.map
60
+ //# sourceMappingURL=filter-bar-time-range-qlV8p7hp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter-bar-time-range-mg9JeYue.js","names":[],"sources":["../src/ds/components/FilterBar/filter-bar-time-range.tsx"],"sourcesContent":["/* eslint-disable react-refresh/only-export-components */\nimport { CalendarIcon } from 'lucide-react';\nimport { useRef } from 'react';\nimport { FILTER_BAR_CONTROL_SIZE } from './filter-bar-chip';\nimport { useFilterBarContext } from './filter-bar-context';\nimport type { FilterBarField, FilterBarItem } from './types';\nimport { useFilterBarItemKeys } from './use-filter-bar-item-keys';\nimport { DateTimeRangePicker } from '@/ds/components/DateTimeRangePicker/date-time-range-picker';\nimport type { DateTimeRangePickerProps } from '@/ds/components/DateTimeRangePicker/date-time-range-picker';\n\nexport const FILTER_BAR_TIME_RANGE_FIELD_ID = 'timeRange';\n\n/**\n * Synthetic field backing the time range control. Hidden from the input's field step (the\n * range cannot be added twice) but registered so the bar resolves its label and takes it into\n * keyboard navigation. Add it to the bar's `fields` and `FILTER_BAR_TIME_RANGE_ITEM` to its\n * `items`, then render `FilterBar.TimeRange` for that item from `FilterBar.Chips`.\n */\nexport const FILTER_BAR_TIME_RANGE_FIELD: FilterBarField = {\n id: FILTER_BAR_TIME_RANGE_FIELD_ID,\n label: 'Time',\n icon: CalendarIcon,\n type: 'text',\n operators: ['is'],\n hidden: true,\n};\n\nexport const FILTER_BAR_TIME_RANGE_ITEM: FilterBarItem = {\n id: FILTER_BAR_TIME_RANGE_FIELD_ID,\n fieldId: FILTER_BAR_TIME_RANGE_FIELD_ID,\n operatorId: 'is',\n value: '',\n};\n\nexport type FilterBarTimeRangeProps = Omit<DateTimeRangePickerProps, 'size' | 'ref'>;\n\n/**\n * A filter bar's time range: the `DateTimeRangePicker` itself at the bar's rung, so it looks and\n * behaves exactly as it does anywhere else, reset × included. It scopes the bar rather than\n * filtering it, so it is not a removable chip; the wrapper only joins it to the bar's arrow-key\n * order.\n */\nexport function FilterBarTimeRange(props: FilterBarTimeRangeProps) {\n const ctx = useFilterBarContext();\n const rootRef = useRef<HTMLDivElement>(null);\n const { onKeyDown } = useFilterBarItemKeys({\n item: FILTER_BAR_TIME_RANGE_ITEM,\n rootRef,\n pinned: true,\n removable: false,\n segmentSelector: 'button',\n });\n\n return (\n <div\n ref={rootRef}\n role=\"group\"\n aria-label=\"Time range\"\n data-slot=\"filter-bar-time-range\"\n className=\"flex\"\n onKeyDown={onKeyDown}\n >\n <DateTimeRangePicker\n {...props}\n size={FILTER_BAR_CONTROL_SIZE}\n ref={el => ctx.registerSegment(FILTER_BAR_TIME_RANGE_ITEM.id, 'value', el)}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;AAUA,IAAa,iCAAiC;;;;;;;AAQ9C,IAAa,8BAA8C;CACzD,IAAI;CACJ,OAAO;CACP,MAAM;CACN,MAAM;CACN,WAAW,CAAC,IAAI;CAChB,QAAQ;AACV;AAEA,IAAa,6BAA4C;CACvD,IAAI;CACJ,SAAS;CACT,YAAY;CACZ,OAAO;AACT;;;;;;;AAUA,SAAgB,mBAAmB,OAAgC;CACjE,MAAM,MAAM,oBAAoB;CAChC,MAAM,UAAU,OAAuB,IAAI;CAC3C,MAAM,EAAE,cAAc,qBAAqB;EACzC,MAAM;EACN;EACA,QAAQ;EACR,WAAW;EACX,iBAAiB;CACnB,CAAC;CAED,OACE,oBAAC,OAAD;EACE,KAAK;EACL,MAAK;EACL,cAAW;EACX,aAAU;EACV,WAAU;EACC;EAEX,UAAA,oBAAC,qBAAD;GACE,GAAI;GACJ,MAAA;GACA,MAAK,OAAM,IAAI,gBAAgB,2BAA2B,IAAI,SAAS,EAAE;EAC1E,CAAA;CACE,CAAA;AAET"}
1
+ {"version":3,"file":"filter-bar-time-range-qlV8p7hp.js","names":[],"sources":["../src/ds/components/FilterBar/filter-bar-time-range.tsx"],"sourcesContent":["/* eslint-disable react-refresh/only-export-components */\nimport { CalendarIcon } from 'lucide-react';\nimport { useRef } from 'react';\nimport { FILTER_BAR_CONTROL_SIZE } from './filter-bar-chip';\nimport { useFilterBarContext } from './filter-bar-context';\nimport type { FilterBarField, FilterBarItem } from './types';\nimport { useFilterBarItemKeys } from './use-filter-bar-item-keys';\nimport { DateTimeRangePicker } from '@/ds/components/DateTimeRangePicker/date-time-range-picker';\nimport type { DateTimeRangePickerProps } from '@/ds/components/DateTimeRangePicker/date-time-range-picker';\n\nexport const FILTER_BAR_TIME_RANGE_FIELD_ID = 'timeRange';\n\n/**\n * Synthetic field backing the time range control. Hidden from the input's field step (the\n * range cannot be added twice) but registered so the bar resolves its label and takes it into\n * keyboard navigation. Add it to the bar's `fields` and `FILTER_BAR_TIME_RANGE_ITEM` to its\n * `items`, then render `FilterBar.TimeRange` for that item from `FilterBar.Chips`.\n */\nexport const FILTER_BAR_TIME_RANGE_FIELD: FilterBarField = {\n id: FILTER_BAR_TIME_RANGE_FIELD_ID,\n label: 'Time',\n icon: CalendarIcon,\n type: 'text',\n operators: ['is'],\n hidden: true,\n};\n\nexport const FILTER_BAR_TIME_RANGE_ITEM: FilterBarItem = {\n id: FILTER_BAR_TIME_RANGE_FIELD_ID,\n fieldId: FILTER_BAR_TIME_RANGE_FIELD_ID,\n operatorId: 'is',\n value: '',\n};\n\nexport type FilterBarTimeRangeProps = Omit<DateTimeRangePickerProps, 'size' | 'ref'>;\n\n/**\n * A filter bar's time range: the `DateTimeRangePicker` itself at the bar's rung, so it looks and\n * behaves exactly as it does anywhere else, reset × included. It scopes the bar rather than\n * filtering it, so it is not a removable chip; the wrapper only joins it to the bar's arrow-key\n * order.\n */\nexport function FilterBarTimeRange(props: FilterBarTimeRangeProps) {\n const ctx = useFilterBarContext();\n const rootRef = useRef<HTMLDivElement>(null);\n const { onKeyDown } = useFilterBarItemKeys({\n item: FILTER_BAR_TIME_RANGE_ITEM,\n rootRef,\n pinned: true,\n removable: false,\n segmentSelector: 'button',\n });\n\n return (\n <div\n ref={rootRef}\n role=\"group\"\n aria-label=\"Time range\"\n data-slot=\"filter-bar-time-range\"\n className=\"flex\"\n onKeyDown={onKeyDown}\n >\n <DateTimeRangePicker\n {...props}\n size={FILTER_BAR_CONTROL_SIZE}\n ref={el => ctx.registerSegment(FILTER_BAR_TIME_RANGE_ITEM.id, 'value', el)}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;AAUA,IAAa,iCAAiC;;;;;;;AAQ9C,IAAa,8BAA8C;CACzD,IAAI;CACJ,OAAO;CACP,MAAM;CACN,MAAM;CACN,WAAW,CAAC,IAAI;CAChB,QAAQ;AACV;AAEA,IAAa,6BAA4C;CACvD,IAAI;CACJ,SAAS;CACT,YAAY;CACZ,OAAO;AACT;;;;;;;AAUA,SAAgB,mBAAmB,OAAgC;CACjE,MAAM,MAAM,oBAAoB;CAChC,MAAM,UAAU,OAAuB,IAAI;CAC3C,MAAM,EAAE,cAAc,qBAAqB;EACzC,MAAM;EACN;EACA,QAAQ;EACR,WAAW;EACX,iBAAiB;CACnB,CAAC;CAED,OACE,oBAAC,OAAD;EACE,KAAK;EACL,MAAK;EACL,cAAW;EACX,aAAU;EACV,WAAU;EACC;EAEX,UAAA,oBAAC,qBAAD;GACE,GAAI;GACJ,MAAA;GACA,MAAK,OAAM,IAAI,gBAAgB,2BAA2B,IAAI,SAAS,EAAE;EAC1E,CAAA;CACE,CAAA;AAET"}
@@ -1,4 +1,4 @@
1
- const require_date_time_range_picker = require("./date-time-range-picker-CTt7Od0P.cjs");
1
+ const require_date_time_range_picker = require("./date-time-range-picker-CWGjoR3j.cjs");
2
2
  const require_filter_bar_chip = require("./filter-bar-chip-Cg-UbIwP.cjs");
3
3
  let react = require("react");
4
4
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -80,4 +80,4 @@ Object.defineProperty(exports, "FilterBarTimeRange", {
80
80
  }
81
81
  });
82
82
 
83
- //# sourceMappingURL=filter-bar-time-range-BA-pXMlo.cjs.map
83
+ //# sourceMappingURL=filter-bar-time-range-zdM024JD.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter-bar-time-range-BA-pXMlo.cjs","names":["CalendarIcon","useFilterBarContext","useRef","useFilterBarItemKeys","DateTimeRangePicker"],"sources":["../src/ds/components/FilterBar/filter-bar-time-range.tsx"],"sourcesContent":["/* eslint-disable react-refresh/only-export-components */\nimport { CalendarIcon } from 'lucide-react';\nimport { useRef } from 'react';\nimport { FILTER_BAR_CONTROL_SIZE } from './filter-bar-chip';\nimport { useFilterBarContext } from './filter-bar-context';\nimport type { FilterBarField, FilterBarItem } from './types';\nimport { useFilterBarItemKeys } from './use-filter-bar-item-keys';\nimport { DateTimeRangePicker } from '@/ds/components/DateTimeRangePicker/date-time-range-picker';\nimport type { DateTimeRangePickerProps } from '@/ds/components/DateTimeRangePicker/date-time-range-picker';\n\nexport const FILTER_BAR_TIME_RANGE_FIELD_ID = 'timeRange';\n\n/**\n * Synthetic field backing the time range control. Hidden from the input's field step (the\n * range cannot be added twice) but registered so the bar resolves its label and takes it into\n * keyboard navigation. Add it to the bar's `fields` and `FILTER_BAR_TIME_RANGE_ITEM` to its\n * `items`, then render `FilterBar.TimeRange` for that item from `FilterBar.Chips`.\n */\nexport const FILTER_BAR_TIME_RANGE_FIELD: FilterBarField = {\n id: FILTER_BAR_TIME_RANGE_FIELD_ID,\n label: 'Time',\n icon: CalendarIcon,\n type: 'text',\n operators: ['is'],\n hidden: true,\n};\n\nexport const FILTER_BAR_TIME_RANGE_ITEM: FilterBarItem = {\n id: FILTER_BAR_TIME_RANGE_FIELD_ID,\n fieldId: FILTER_BAR_TIME_RANGE_FIELD_ID,\n operatorId: 'is',\n value: '',\n};\n\nexport type FilterBarTimeRangeProps = Omit<DateTimeRangePickerProps, 'size' | 'ref'>;\n\n/**\n * A filter bar's time range: the `DateTimeRangePicker` itself at the bar's rung, so it looks and\n * behaves exactly as it does anywhere else, reset × included. It scopes the bar rather than\n * filtering it, so it is not a removable chip; the wrapper only joins it to the bar's arrow-key\n * order.\n */\nexport function FilterBarTimeRange(props: FilterBarTimeRangeProps) {\n const ctx = useFilterBarContext();\n const rootRef = useRef<HTMLDivElement>(null);\n const { onKeyDown } = useFilterBarItemKeys({\n item: FILTER_BAR_TIME_RANGE_ITEM,\n rootRef,\n pinned: true,\n removable: false,\n segmentSelector: 'button',\n });\n\n return (\n <div\n ref={rootRef}\n role=\"group\"\n aria-label=\"Time range\"\n data-slot=\"filter-bar-time-range\"\n className=\"flex\"\n onKeyDown={onKeyDown}\n >\n <DateTimeRangePicker\n {...props}\n size={FILTER_BAR_CONTROL_SIZE}\n ref={el => ctx.registerSegment(FILTER_BAR_TIME_RANGE_ITEM.id, 'value', el)}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;AAUA,IAAa,iCAAiC;;;;;;;AAQ9C,IAAa,8BAA8C;CACzD,IAAI;CACJ,OAAO;CACP,MAAMA,aAAAA;CACN,MAAM;CACN,WAAW,CAAC,IAAI;CAChB,QAAQ;AACV;AAEA,IAAa,6BAA4C;CACvD,IAAI;CACJ,SAAS;CACT,YAAY;CACZ,OAAO;AACT;;;;;;;AAUA,SAAgB,mBAAmB,OAAgC;CACjE,MAAM,MAAMC,wBAAAA,oBAAoB;CAChC,MAAM,WAAA,GAAUC,MAAAA,OAAAA,CAAuB,IAAI;CAC3C,MAAM,EAAE,cAAcC,wBAAAA,qBAAqB;EACzC,MAAM;EACN;EACA,QAAQ;EACR,WAAW;EACX,iBAAiB;CACnB,CAAC;CAED,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACE,KAAK;EACL,MAAK;EACL,cAAW;EACX,aAAU;EACV,WAAU;EACC;EAEX,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,+BAAAA,qBAAD;GACE,GAAI;GACJ,MAAA;GACA,MAAK,OAAM,IAAI,gBAAgB,2BAA2B,IAAI,SAAS,EAAE;EAC1E,CAAA;CACE,CAAA;AAET"}
1
+ {"version":3,"file":"filter-bar-time-range-zdM024JD.cjs","names":["CalendarIcon","useFilterBarContext","useRef","useFilterBarItemKeys","DateTimeRangePicker"],"sources":["../src/ds/components/FilterBar/filter-bar-time-range.tsx"],"sourcesContent":["/* eslint-disable react-refresh/only-export-components */\nimport { CalendarIcon } from 'lucide-react';\nimport { useRef } from 'react';\nimport { FILTER_BAR_CONTROL_SIZE } from './filter-bar-chip';\nimport { useFilterBarContext } from './filter-bar-context';\nimport type { FilterBarField, FilterBarItem } from './types';\nimport { useFilterBarItemKeys } from './use-filter-bar-item-keys';\nimport { DateTimeRangePicker } from '@/ds/components/DateTimeRangePicker/date-time-range-picker';\nimport type { DateTimeRangePickerProps } from '@/ds/components/DateTimeRangePicker/date-time-range-picker';\n\nexport const FILTER_BAR_TIME_RANGE_FIELD_ID = 'timeRange';\n\n/**\n * Synthetic field backing the time range control. Hidden from the input's field step (the\n * range cannot be added twice) but registered so the bar resolves its label and takes it into\n * keyboard navigation. Add it to the bar's `fields` and `FILTER_BAR_TIME_RANGE_ITEM` to its\n * `items`, then render `FilterBar.TimeRange` for that item from `FilterBar.Chips`.\n */\nexport const FILTER_BAR_TIME_RANGE_FIELD: FilterBarField = {\n id: FILTER_BAR_TIME_RANGE_FIELD_ID,\n label: 'Time',\n icon: CalendarIcon,\n type: 'text',\n operators: ['is'],\n hidden: true,\n};\n\nexport const FILTER_BAR_TIME_RANGE_ITEM: FilterBarItem = {\n id: FILTER_BAR_TIME_RANGE_FIELD_ID,\n fieldId: FILTER_BAR_TIME_RANGE_FIELD_ID,\n operatorId: 'is',\n value: '',\n};\n\nexport type FilterBarTimeRangeProps = Omit<DateTimeRangePickerProps, 'size' | 'ref'>;\n\n/**\n * A filter bar's time range: the `DateTimeRangePicker` itself at the bar's rung, so it looks and\n * behaves exactly as it does anywhere else, reset × included. It scopes the bar rather than\n * filtering it, so it is not a removable chip; the wrapper only joins it to the bar's arrow-key\n * order.\n */\nexport function FilterBarTimeRange(props: FilterBarTimeRangeProps) {\n const ctx = useFilterBarContext();\n const rootRef = useRef<HTMLDivElement>(null);\n const { onKeyDown } = useFilterBarItemKeys({\n item: FILTER_BAR_TIME_RANGE_ITEM,\n rootRef,\n pinned: true,\n removable: false,\n segmentSelector: 'button',\n });\n\n return (\n <div\n ref={rootRef}\n role=\"group\"\n aria-label=\"Time range\"\n data-slot=\"filter-bar-time-range\"\n className=\"flex\"\n onKeyDown={onKeyDown}\n >\n <DateTimeRangePicker\n {...props}\n size={FILTER_BAR_CONTROL_SIZE}\n ref={el => ctx.registerSegment(FILTER_BAR_TIME_RANGE_ITEM.id, 'value', el)}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;AAUA,IAAa,iCAAiC;;;;;;;AAQ9C,IAAa,8BAA8C;CACzD,IAAI;CACJ,OAAO;CACP,MAAMA,aAAAA;CACN,MAAM;CACN,WAAW,CAAC,IAAI;CAChB,QAAQ;AACV;AAEA,IAAa,6BAA4C;CACvD,IAAI;CACJ,SAAS;CACT,YAAY;CACZ,OAAO;AACT;;;;;;;AAUA,SAAgB,mBAAmB,OAAgC;CACjE,MAAM,MAAMC,wBAAAA,oBAAoB;CAChC,MAAM,WAAA,GAAUC,MAAAA,OAAAA,CAAuB,IAAI;CAC3C,MAAM,EAAE,cAAcC,wBAAAA,qBAAqB;EACzC,MAAM;EACN;EACA,QAAQ;EACR,WAAW;EACX,iBAAiB;CACnB,CAAC;CAED,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACE,KAAK;EACL,MAAK;EACL,cAAW;EACX,aAAU;EACV,WAAU;EACC;EAEX,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,+BAAAA,qBAAD;GACE,GAAI;GACJ,MAAA;GACA,MAAK,OAAM,IAAI,gBAAgB,2BAA2B,IAAI,SAAS,EAAE;EAC1E,CAAA;CACE,CAAA;AAET"}
@@ -1,6 +1,10 @@
1
+ import type { MessageMetadata } from '../messages/message-metadata';
1
2
  export { CONNECT_PROMPT_TOOL_NAME } from './connect-prompt-tool-id';
2
3
  export interface ConnectPromptToolProps {
4
+ toolName: string;
5
+ toolCallId: string;
3
6
  output: unknown;
7
+ metadata?: MessageMetadata;
4
8
  /** Historical rendering: show the card but suppress the connect action. */
5
9
  readOnly?: boolean;
6
10
  }
@@ -11,5 +15,10 @@ export interface ConnectPromptToolProps {
11
15
  * the mounted `/connect` routes, drives the OAuth flow in a popup through the
12
16
  * server's launch gate (which verifies this browser owns the pending session
13
17
  * before redirecting to the vendor), and polls until the connection settles.
18
+ *
19
+ * The tool pauses the agent run while the card is up. Once the connection
20
+ * settles, the card resumes the paused call with the outcome — connected, or
21
+ * the reason it failed — so the agent continues from the tool's result rather
22
+ * than a chat message.
14
23
  */
15
- export declare const ConnectPromptTool: ({ output, readOnly }: ConnectPromptToolProps) => import("react").JSX.Element | null;
24
+ export declare const ConnectPromptTool: ({ toolName, toolCallId, output, metadata, readOnly, }: ConnectPromptToolProps) => import("react").JSX.Element | null;
@@ -103,6 +103,22 @@ export interface ConnectPromptPayload {
103
103
  type: 'connect-prompt';
104
104
  requestedProvider?: string;
105
105
  providers: ConnectPromptProvider[];
106
+ /** Outcome for the model once a paused prompt resumes, e.g. "Linear connected successfully." */
107
+ message?: string;
108
+ /** Why the connection failed, when a paused prompt resumed without one. */
109
+ error?: string;
106
110
  }
111
+ /**
112
+ * What the card resumes a paused `request_connection` call with once the
113
+ * connection settles: `active`, or `failed` with the reason the card showed.
114
+ */
115
+ export type ConnectPromptResume = {
116
+ provider: string;
117
+ status: 'active';
118
+ } | {
119
+ provider: string;
120
+ status: 'failed';
121
+ error: string;
122
+ };
107
123
  /** Narrows an arbitrary tool output to a connect-prompt payload. */
108
124
  export declare function isConnectPromptPayload(output: unknown): output is ConnectPromptPayload;
@@ -1,12 +1,14 @@
1
1
  import type { DashboardDefinition } from '@mastra/client-js';
2
2
  import type { DashboardScope, OnDashboardDrilldown } from '../lib/definition';
3
- import type { AnyWidgetKind } from '../widget-kind';
3
+ import type { AnyWidgetKind, DashboardExpand } from '../widget-kind';
4
4
  export type DashboardRendererProps = {
5
5
  definition: DashboardDefinition;
6
6
  /** Which widgets, views and columns show: `org` spans several projects, `project` is one. */
7
7
  scope: DashboardScope;
8
8
  /** Opens a drilldown; each host routes to its own Traces or Logs page. */
9
9
  onDrilldown?: OnDashboardDrilldown;
10
+ /** Where chart cards expand to, e.g. the host's query page; see `DashboardExpand`. */
11
+ expand?: DashboardExpand;
10
12
  /** Kinds beyond the built-in ones; a kind of the same name replaces the built-in. */
11
13
  kinds?: AnyWidgetKind[];
12
14
  className?: string;
@@ -16,4 +18,4 @@ export type DashboardRendererProps = {
16
18
  * owns the range and filters. Each widget is checked and rendered on its own: one that fails to
17
19
  * parse, query or render shows its own error, and the rest of the dashboard still renders.
18
20
  */
19
- export declare function DashboardRenderer({ definition, scope, onDrilldown, kinds, className }: DashboardRendererProps): import("react").JSX.Element;
21
+ export declare function DashboardRenderer({ definition, scope, onDrilldown, expand, kinds, className, }: DashboardRendererProps): import("react").JSX.Element;
@@ -1,13 +1,14 @@
1
1
  import type { DashboardWidget, DashboardWidgetView } from '@mastra/client-js';
2
2
  import type { DrilldownScope } from '../../metrics/drilldown';
3
3
  import type { OnDashboardDrilldown } from '../lib/definition';
4
- import type { ResolvedView } from '../widget-kind';
4
+ import type { DashboardExpand, ResolvedView } from '../widget-kind';
5
5
  export type Views<Options> = readonly [ResolvedView<Options>, ...ResolvedView<Options>[]];
6
6
  /**
7
7
  * The open view of a widget, `defaultIndex` until one is picked, and the card title for it
8
- * (`title`, and `titleMenu` with several views) to spread into `ChartCard`.
8
+ * (`title`, and `titleMenu` with several views, or an expand link with `expand`) to spread into
9
+ * `ChartCard`.
9
10
  */
10
- export declare function useViewMenu<Options>(widget: DashboardWidget, views: Views<Options>, defaultIndex?: number): {
11
+ export declare function useViewMenu<Options>(widget: DashboardWidget, views: Views<Options>, defaultIndex?: number, expand?: DashboardExpand): {
11
12
  view: ResolvedView<Options>;
12
13
  index: number;
13
14
  heading: import("../lib/chrome").ViewHeading;
@@ -16,4 +16,4 @@ export type { DashboardScope, OnDashboardDrilldown } from './lib/definition';
16
16
  export { buildRequest } from './lib/requests';
17
17
  export type { DashboardPageContext, DashboardRequest } from './lib/requests';
18
18
  export { defineWidgetKind } from './widget-kind';
19
- export type { AnyWidgetKind, ResolvedView, WidgetKind, WidgetKindProps } from './widget-kind';
19
+ export type { AnyWidgetKind, DashboardExpand, ResolvedView, WidgetKind, WidgetKindProps } from './widget-kind';
@@ -1,3 +1,3 @@
1
1
  import type { WidgetKindProps } from '../../widget-kind';
2
2
  import type { ScoresOptions } from './options';
3
- export declare function ScoresWidget({ widget, views }: WidgetKindProps<ScoresOptions>): import("react").JSX.Element;
3
+ export declare function ScoresWidget({ widget, views, expand }: WidgetKindProps<ScoresOptions>): import("react").JSX.Element;
@@ -1,7 +1,8 @@
1
1
  import type { DashboardWidget, DashboardWidgetView } from '@mastra/client-js';
2
2
  import type { ChartCardProps } from '../../metrics/components/chart-card';
3
- /** What a widget's card shows as its title: `title`, and `titleMenu` with several views. */
4
- export type ViewHeading = Pick<ChartCardProps, 'title' | 'titleMenu'>;
3
+ import type { DashboardExpand } from '../widget-kind';
4
+ /** What a widget's card shows as its title: `title`, and `titleMenu` with several views or an expand link. */
5
+ export type ViewHeading = Pick<ChartCardProps, 'title' | 'titleMenu' | 'href' | 'LinkComponent'>;
5
6
  export declare const unsupportedMessage: (fields: string[], names?: Record<string, string>) => string;
6
7
  /** A view's value in the card's menu: its label in kebab case (`Token usage` → `token-usage`), or its position when unlabelled or blank. */
7
8
  export declare const viewValue: (label: string | undefined, index: number) => string;
@@ -9,6 +10,7 @@ export declare const viewValue: (label: string | undefined, index: number) => st
9
10
  export declare const viewLabel: (label: string | undefined, index: number) => string;
10
11
  /**
11
12
  * The card title for the open view: the widget's title for a single view; with several, the open
12
- * view's label, as a menu of every view (as the metrics cards switch views).
13
+ * view's label, as a menu of every view (as the metrics cards switch views). With somewhere to
14
+ * expand to, the widget's title links there instead.
13
15
  */
14
- export declare function viewTitle(widget: DashboardWidget, views: readonly DashboardWidgetView[], index: number, onChoose: (index: number) => void): ViewHeading;
16
+ export declare function viewTitle(widget: DashboardWidget, views: readonly DashboardWidgetView[], index: number, onChoose: (index: number) => void, expand?: DashboardExpand): ViewHeading;
@@ -1,6 +1,7 @@
1
1
  import type { DashboardWidget, DashboardWidgetView } from '@mastra/client-js';
2
2
  import type { ComponentType } from 'react';
3
3
  import type { z } from 'zod/v4';
4
+ import type { ChartCardProps } from '../metrics/components/chart-card';
4
5
  import type { DashboardScope, OnDashboardDrilldown } from './lib/definition';
5
6
  /** A view whose options passed its kind's schema. */
6
7
  export type ResolvedView<Options> = DashboardWidgetView & {
@@ -12,6 +13,17 @@ export type WidgetKindProps<Options> = {
12
13
  views: [ResolvedView<Options>, ...ResolvedView<Options>[]];
13
14
  scope: DashboardScope;
14
15
  onDrilldown?: OnDashboardDrilldown;
16
+ /** Where a chart card expands to; see `DashboardExpand`. */
17
+ expand?: DashboardExpand;
18
+ };
19
+ /**
20
+ * Where a chart widget expands to (a host's query page), as the Gateway Overview's cards do: the card
21
+ * shows its title with an expand icon linking there, in place of its views menu, on its first view.
22
+ * `href` returns `undefined` for a widget with nowhere to go; that card keeps its menu.
23
+ */
24
+ export type DashboardExpand = {
25
+ href: (widget: DashboardWidget) => string | undefined;
26
+ LinkComponent: NonNullable<ChartCardProps['LinkComponent']>;
15
27
  };
16
28
  /**
17
29
  * One kind of widget, self-contained: the renderer only looks it up by name, checks each view's
@@ -1,6 +1,12 @@
1
1
  import type { Ref } from 'react';
2
2
  import type { TextButtonSize } from '../Button/Button';
3
3
  export type DateRangePreset = 'all' | 'last-24h' | 'last-3d' | 'last-7d' | 'last-14d' | 'last-30d' | 'custom';
4
+ /** A fixed range offered beside the presets, e.g. the current billing period. */
5
+ export type DateTimeRangePickerNamedRange = {
6
+ label: string;
7
+ from: Date;
8
+ to?: Date;
9
+ };
4
10
  export interface DateTimeRangePickerProps {
5
11
  preset?: DateRangePreset;
6
12
  onPresetChange?: (preset: DateRangePreset) => void;
@@ -19,6 +25,11 @@ export interface DateTimeRangePickerProps {
19
25
  minDate?: Date;
20
26
  /** Subset of presets to show. If omitted, all presets are shown. */
21
27
  presets?: readonly DateRangePreset[];
28
+ /**
29
+ * Fixed ranges listed above the presets, e.g. `{ label: 'This period', from: periodStart }`.
30
+ * Picking one applies it as a custom range; while it's applied the trigger shows its label.
31
+ */
32
+ namedRanges?: readonly DateTimeRangePickerNamedRange[];
22
33
  /** Size of the trigger Button. Defaults to 'sm', the toolbar rung. */
23
34
  size?: TextButtonSize;
24
35
  /**
@@ -31,4 +42,4 @@ export interface DateTimeRangePickerProps {
31
42
  /** The trigger Button. */
32
43
  ref?: Ref<HTMLButtonElement>;
33
44
  }
34
- export declare function DateTimeRangePicker({ preset, onPresetChange, dateFrom, dateTo, onDateChange, onDateRangeChange, disabled, maxRangeMs, minDate, presets, size, defaultPreset, onReset, ref, }: DateTimeRangePickerProps): import("react").JSX.Element;
45
+ export declare function DateTimeRangePicker({ preset, onPresetChange, dateFrom, dateTo, onDateChange, onDateRangeChange, disabled, maxRangeMs, minDate, presets, namedRanges, size, defaultPreset, onReset, ref, }: DateTimeRangePickerProps): import("react").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * The header of a card with one large chart (an explorer, a detail page): the label over a large
3
3
  * value, the change against the previous period beside it. Cards in a grid use the compact title
4
- * and `MetricsCard.Total` instead. A skeleton while loading, in the value's own line box.
4
+ * and `MetricsCard.Total` instead. A skeleton while loading, at the value's own trimmed height.
5
5
  */
6
6
  export declare function MetricsCardHeadline({ label, value, change, isLoading, className, }: {
7
7
  label: string;
@@ -57,6 +57,14 @@ export type MetricsLineChartProps = {
57
57
  showYAxis?: boolean;
58
58
  /** Show a ghost of the chart while data loads, in the chart's own footprint. */
59
59
  isLoading?: boolean;
60
+ /**
61
+ * Vertical lines at buckets, e.g. where a billing period starts. `x` must be one of the data's
62
+ * `xKey` values: the axis is categorical, so any other value draws nothing.
63
+ */
64
+ markers?: {
65
+ x: string;
66
+ label?: string;
67
+ }[];
60
68
  className?: string;
61
69
  };
62
70
  export declare function MetricsLineChart(props: MetricsLineChartProps): import("react").JSX.Element;
package/dist/style.css CHANGED
@@ -8105,6 +8105,10 @@
8105
8105
  user-select: none;
8106
8106
  }
8107
8107
 
8108
+ .\!paused {
8109
+ animation-play-state: paused !important;
8110
+ }
8111
+
8108
8112
  .\[--attachment-action-inset\:--spacing\(1\)\] {
8109
8113
  --attachment-action-inset: var(--spacing);
8110
8114
  }
@@ -235,7 +235,10 @@ var ToolCardInner = ({ toolName, input, output, modelOutput, backgroundTaskId, b
235
235
  });
236
236
  break;
237
237
  case "connect_prompt": return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_chat_tools_connect_prompt_tool.ConnectPromptTool, {
238
+ toolName,
239
+ toolCallId,
238
240
  output,
241
+ metadata,
239
242
  readOnly
240
243
  });
241
244
  case "submit_plan": return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_chat_tools_submit_plan_tool.SubmitPlanTool, {
@@ -422,4 +425,4 @@ Object.defineProperty(exports, "ToolCardInner", {
422
425
  }
423
426
  });
424
427
 
425
- //# sourceMappingURL=tool-card-rxhTDpk_.cjs.map
428
+ //# sourceMappingURL=tool-card-BOLXeKIp.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-card-rxhTDpk_.cjs","names":["awaitsToolApproval","ToolCallMono","CodeEditor","ToolApprovalBadge","AgentIcon","NetworkChoiceMetadataDialogTrigger","BackgroundTaskMetadataDialogTrigger","_Fragment","Button","Markdown","React","SectionLabel","useAgentMessages","LoadingBadge","toAISdkV5Messages","resolveToChildMessages","PlaygroundWorkflowRunProvider","useMcpAppTools","useChatSend","useContext","ChatAgentContext","useChatRunning","useCallback","toolCardKind","toolInteraction","badgeStatus","useDeferredInputRequest","isDeferredCall","DeferredMcpInputRequest","_Fragment","ObservationMarkerBadge","AskUserTool","ConnectPromptTool","SubmitPlanTool","suspendedMcpInputRequest","ToolBadge","ForegroundMcpInputRequest","isAgentCall","isWorkflowCall","isSettledState","WorkflowBadge","FileTreeBadge","SandboxExecutionBadge","codeModeCall","CodeModeBadge","knowledgeCard","KnowledgeToolBadge","ToolResultMedia","McpAppToolResult"],"sources":["../src/domains/chat/tools/badges/agent-badge.tsx","../src/domains/chat/tools/badges/agent-badge-wrapper.tsx","../src/domains/chat/tools/tool-card.tsx"],"sourcesContent":["import React from 'react';\nimport Markdown from 'react-markdown';\nimport { ToolCard } from '../tool-card';\nimport { BackgroundTaskMetadataDialogTrigger } from './background-task-metadata-dialog';\nimport type { MessageMetadata } from '@/domains/chat';\nimport { NetworkChoiceMetadataDialogTrigger } from '@/domains/chat/components/network-choice-metadata-dialog';\nimport { SectionLabel } from '@/domains/chat/components/section-label';\nimport { awaitsToolApproval } from '@/domains/chat/tools/badges/awaits-tool-approval';\nimport type { ToolApprovalRequest } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport { ToolApprovalBadge } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\nimport { ToolCallMono } from '@/ds/components/ai/tool-call';\nimport { Button } from '@/ds/components/Button';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\n\ntype TextMessage = {\n type: 'text';\n content: string;\n};\n\ntype ToolMessage = {\n type: 'tool';\n toolName: string;\n toolOutput?: any;\n args?: any;\n toolCallId: string;\n result?: any;\n};\n\nexport type AgentMessage = TextMessage | ToolMessage;\n\nexport interface AgentBadgeProps extends Omit<ToolApprovalRequest, 'toolCalled'> {\n agentId: string;\n messages: AgentMessage[];\n metadata?: MessageMetadata;\n suspendPayload?: any;\n toolCalled?: boolean;\n isComplete?: boolean;\n keepOpenForStreamingChildMessages?: boolean;\n status?: ActivityStatus;\n errorText?: string;\n onLoadPrevious?: () => void;\n isLoadingPrevious?: boolean;\n}\n\nexport const AgentBadge = ({\n agentId,\n messages = [],\n metadata,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n suspendPayload,\n toolCalled: toolCalledProp,\n isComplete = false,\n keepOpenForStreamingChildMessages = false,\n status = 'idle',\n errorText,\n onLoadPrevious,\n isLoadingPrevious = false,\n}: AgentBadgeProps) => {\n const routingDecision = metadata?.mode === 'network' ? metadata.routingDecision : undefined;\n const selectionReason =\n metadata?.mode === 'network' ? (routingDecision?.selectionReason ?? metadata.selectionReason) : undefined;\n const agentNetworkInput = metadata?.mode === 'network' ? (routingDecision ?? metadata.agentInput) : undefined;\n\n const parentSuspendedTools =\n metadata?.mode === 'stream' || metadata?.mode === 'network' || metadata?.mode === 'generate'\n ? metadata?.suspendedTools\n : undefined;\n\n const bgEntry =\n (metadata?.mode === 'stream' || metadata?.mode === 'generate') && metadata?.backgroundTasks\n ? metadata.backgroundTasks[toolCallId]\n : undefined;\n\n const allChildToolsComplete =\n messages.length > 0 &&\n messages.every(message => {\n if (message.type === 'text') {\n return true;\n }\n return message.toolOutput !== undefined;\n });\n\n let toolCalled = isComplete && allChildToolsComplete;\n\n if (isNetwork) {\n toolCalled = toolCalledProp ?? allChildToolsComplete;\n }\n\n const isError = status === 'error';\n const shouldCollapseContent = isComplete && !isError && !toolApprovalMetadata && !keepOpenForStreamingChildMessages;\n const shownError = isError ? errorText : undefined;\n const hasBody =\n Boolean(onLoadPrevious) ||\n messages.length > 0 ||\n Boolean(shownError) ||\n Boolean(suspendPayload) ||\n awaitsToolApproval({ toolApprovalMetadata, toolCalled });\n\n let suspendPayloadSlot =\n typeof suspendPayload === 'string' ? (\n <ToolCallMono copyText={suspendPayload} className=\"text-muted-foreground\">\n {suspendPayload}\n </ToolCallMono>\n ) : (\n <CodeEditor data={suspendPayload} data-testid=\"tool-suspend-payload\" />\n );\n\n return (\n <ToolApprovalBadge\n approval={{\n toolCalled,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n isGenerateMode: metadata?.mode === 'generate',\n }}\n data-testid=\"agent-badge\"\n icon={<AgentIcon className=\"text-span-agent\" />}\n title={agentId}\n status={status}\n initialCollapsed={shouldCollapseContent}\n extraInfo={\n metadata?.mode === 'network' ? (\n <NetworkChoiceMetadataDialogTrigger\n selectionReason={selectionReason ?? ''}\n input={agentNetworkInput as string | Record<string, unknown> | undefined}\n />\n ) : bgEntry?.taskId && bgEntry?.startedAt ? (\n <BackgroundTaskMetadataDialogTrigger backgroundTask={bgEntry} />\n ) : null\n }\n >\n {hasBody && (\n <>\n {onLoadPrevious && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onLoadPrevious}\n disabled={isLoadingPrevious}\n data-testid=\"agent-badge-load-previous\"\n >\n {isLoadingPrevious ? 'Loading earlier messages…' : 'Load earlier messages'}\n </Button>\n )}\n\n {messages.map((message, index) => {\n if (message.type === 'text') {\n return <Markdown key={index}>{message.content}</Markdown>;\n }\n\n let result;\n\n try {\n result = typeof message.toolOutput === 'string' ? JSON.parse(message.toolOutput) : message.toolOutput;\n } catch {\n result = message.toolOutput;\n }\n\n return (\n <React.Fragment key={index}>\n <ToolCard\n toolName={message.toolName}\n input={message.args}\n output={result}\n state=\"output-available\"\n toolCallId={message.toolCallId}\n metadata={{\n mode: 'stream',\n requireApprovalMetadata: isNetwork ? metadata?.requireApprovalMetadata : undefined,\n suspendedTools: parentSuspendedTools,\n }}\n />\n </React.Fragment>\n );\n })}\n\n {shownError && (\n <ToolCallMono copyText={shownError} data-testid=\"agent-error\" className=\"text-destructive-foreground\">\n {shownError}\n </ToolCallMono>\n )}\n\n {suspendPayloadSlot !== undefined && suspendPayload && (\n <div>\n <SectionLabel>Agent suspend payload</SectionLabel>\n {suspendPayloadSlot}\n </div>\n )}\n </>\n )}\n </ToolApprovalBadge>\n );\n};\n","import { toAISdkV5Messages } from '@mastra/ai-sdk/ui';\nimport { useAgentMessages } from '@mastra/react/hooks/agents';\nimport type { AgentMessage } from './agent-badge';\nimport { AgentBadge } from './agent-badge';\nimport { resolveToChildMessages } from './resolve-child-messages';\nimport type { MessageMetadata } from '@/domains/chat';\nimport { LoadingBadge } from '@/domains/chat/components/loading-badge';\nimport type { ToolApprovalRequest } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\n\ninterface SubAgentToolResult {\n toolName: string;\n toolCallId: string;\n result: any;\n args: any;\n}\n\ninterface AgentBadgeWrapperProps extends Omit<ToolApprovalRequest, 'toolCalled'> {\n agentId: string;\n result?: {\n childMessages?: AgentMessage[];\n subAgentResourceId?: string;\n subAgentThreadId?: string;\n subAgentToolResults?: SubAgentToolResult[];\n text?: string;\n };\n metadata?: MessageMetadata;\n suspendPayload?: any;\n toolCalled?: boolean;\n isComplete?: boolean;\n status?: ActivityStatus;\n errorText?: string;\n}\n\nexport const AgentBadgeWrapper = ({\n agentId,\n result,\n metadata,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n suspendPayload,\n toolCalled,\n isComplete,\n status,\n errorText,\n}: AgentBadgeWrapperProps) => {\n const shouldFetchAgentMessages = Boolean(\n result?.subAgentThreadId && !result.text && !result.subAgentToolResults?.length,\n );\n const { data, isLoading, fetchNextPage, hasNextPage, isFetchingNextPage } = useAgentMessages({\n threadId: shouldFetchAgentMessages ? result?.subAgentThreadId : undefined,\n agentId,\n memory: true,\n });\n\n if (isLoading) {\n return <LoadingBadge />;\n }\n\n const convertedMessages = data?.messages ? toAISdkV5Messages(data.messages) : [];\n\n let childMessages = result?.childMessages?.length ? result.childMessages : undefined;\n\n if (!childMessages && result?.subAgentToolResults?.length) {\n const toolMessages: AgentMessage[] = result.subAgentToolResults.map(tr => ({\n type: 'tool' as const,\n toolName: tr.toolName,\n toolCallId: tr.toolCallId,\n args: tr.args,\n toolOutput: tr.result,\n }));\n if (result.text) {\n toolMessages.push({ type: 'text' as const, content: result.text });\n }\n childMessages = toolMessages;\n }\n\n if (!childMessages && result?.text) {\n childMessages = [{ type: 'text' as const, content: result.text }];\n }\n\n let onLoadPrevious: (() => void) | undefined;\n if (!childMessages) {\n childMessages = resolveToChildMessages(convertedMessages) as AgentMessage[];\n onLoadPrevious = hasNextPage ? fetchNextPage : undefined;\n }\n\n const hasStreamingChildMessages = Boolean(result && Object.prototype.hasOwnProperty.call(result, 'childMessages'));\n\n return (\n <AgentBadge\n agentId={agentId}\n messages={childMessages ?? []}\n keepOpenForStreamingChildMessages={hasStreamingChildMessages}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n toolName={toolName}\n isNetwork={isNetwork}\n suspendPayload={suspendPayload}\n toolCalled={toolCalled}\n isComplete={isComplete}\n status={status}\n errorText={errorText}\n onLoadPrevious={onLoadPrevious}\n isLoadingPrevious={isFetchingNextPage}\n />\n );\n};\n","import { useMcpAppTools } from '@mastra/react/hooks/mcps';\nimport { useCallback, useContext } from 'react';\nimport { AgentBadgeWrapper } from './badges/agent-badge-wrapper';\nimport { FileTreeBadge } from './badges/file-tree-badge';\nimport { KnowledgeToolBadge, knowledgeCard } from './badges/knowledge-tool-badge';\nimport { DeferredMcpInputRequest, ForegroundMcpInputRequest } from './badges/mcp-input-request-badge';\nimport { SandboxExecutionBadge } from './badges/sandbox-execution-badge';\nimport { ToolBadge } from './badges/tool-badge';\nimport { useDeferredInputRequest } from './badges/use-deferred-input-request';\nimport { useWorkflowStream, WorkflowBadge } from './badges/workflow-badge';\nimport { suspendedMcpInputRequest } from './mcp-input-request';\nimport { SubmitPlanTool } from './submit-plan-tool';\nimport { ToolResultMedia } from './tool-result-media';\nimport type { MessageMetadata } from '@/domains/chat';\nimport { ChatAgentContext, useChatRunning, useChatSend } from '@/domains/chat/context/chat-context';\nimport { AskUserTool } from '@/domains/chat/tools/ask-user-tool';\nimport { CodeModeBadge } from '@/domains/chat/tools/badges/code-mode-badge';\nimport { ObservationMarkerBadge } from '@/domains/chat/tools/badges/observation-marker-badge';\nimport { ConnectPromptTool } from '@/domains/chat/tools/connect-prompt-tool';\nimport {\n badgeStatus,\n codeModeCall,\n isAgentCall,\n isDeferredCall,\n isSettledState,\n isWorkflowCall,\n toolCardKind,\n toolInteraction,\n} from '@/domains/chat/tools/tool-card-kind';\nimport { McpAppToolResult } from '@/domains/mcps/components/mcp-app-tool-result';\nimport { PlaygroundWorkflowRunProvider } from '@/domains/workflows/context/playground-workflow-run-provider';\n\n/** A `data`-typed part the agent wrote via `writer.custom`, scoped to a call by `data.toolCallId`. */\nexport interface DataMessagePart {\n type: string;\n name?: string;\n data?: any;\n}\n\nexport interface ToolCardProps {\n toolName: string;\n input: any;\n output: any;\n modelOutput?: unknown;\n /** The Mastra background task running the call, when it was deferred. */\n backgroundTaskId?: string;\n /** The background task's status in the part's metadata: `running` until the part holds its result. */\n backgroundTaskStatus?: string;\n toolCallId: string;\n /** Part state: v5 `output-available`/`output-error`/`input-available`, or v4 `result`/`call`. */\n state?: string;\n /** Error message when `state` is `output-error`. */\n errorText?: string;\n metadata?: MessageMetadata;\n /** `data`-typed parts from the parent message, for badges that read live streaming metadata. */\n dataParts?: ReadonlyArray<DataMessagePart>;\n /** Historical rendering mode: preserve presentation while suppressing executable actions and side effects. */\n readOnly?: boolean;\n}\n\nconst stripPrefix = (toolName: string, prefix: string): string =>\n toolName.startsWith(prefix) ? toolName.slice(prefix.length) : toolName;\n\n/** Its own workflow run scope, so a streaming workflow result can drive a live graph inside the card. */\nexport const ToolCard = (props: ToolCardProps) => {\n return (\n <PlaygroundWorkflowRunProvider workflowId=\"\" withoutTimeTravel>\n <ToolCardInner {...props} />\n </PlaygroundWorkflowRunProvider>\n );\n};\n\nexport const ToolCardInner = ({\n toolName,\n input,\n output,\n modelOutput,\n backgroundTaskId,\n backgroundTaskStatus,\n toolCallId,\n state,\n errorText,\n metadata,\n dataParts,\n readOnly = false,\n}: ToolCardProps) => {\n const { data: mcpAppTools } = useMcpAppTools();\n const send = useChatSend();\n const chatAgent = useContext(ChatAgentContext);\n const { isRunning } = useChatRunning();\n const handleMcpAppSendMessage = useCallback(\n (content: string) => {\n void send({ message: content });\n },\n [send],\n );\n useWorkflowStream(output);\n\n const kind = toolCardKind(\n { toolName, toolCallId, input, output, state, backgroundTaskId, backgroundTaskStatus },\n { metadata, mcpAppTools },\n );\n const { approval: toolApprovalMetadata, suspended: suspendedToolMetadata } = toolInteraction(\n metadata,\n toolName,\n toolCallId,\n );\n const status = badgeStatus(state, isRunning);\n // Any deferred call, whatever its output looks like: live it holds the MCP task's progress records,\n // after a reload the \"Background task started\" placeholder.\n const deferredRequest = useDeferredInputRequest(\n backgroundTaskId ?? '',\n isDeferredCall(backgroundTaskId, backgroundTaskStatus) && !readOnly,\n );\n const isNetwork = metadata?.mode === 'network';\n const toolCalled = isNetwork && metadata?.hasMoreMessages ? true : undefined;\n const agentToolName = stripPrefix(toolName, 'agent-');\n const workflowToolName = stripPrefix(toolName, 'workflow-');\n const deferredCard = deferredRequest && backgroundTaskId && (\n <DeferredMcpInputRequest\n key={String(deferredRequest.suspendedAt)}\n backgroundTaskId={backgroundTaskId}\n request={deferredRequest}\n />\n );\n\n const body = renderKind();\n // A deferred call's question shows under whichever badge draws the call. One fragment either way, so\n // the badge (and its task progress) isn't remounted when the question comes and goes.\n return (\n <>\n {body}\n {body !== null && deferredCard}\n </>\n );\n\n function renderKind() {\n switch (kind) {\n case 'hidden':\n return null;\n case 'observation':\n return <ObservationMarkerBadge toolName={toolName} omData={output?.omData ?? input} />;\n case 'ask_user':\n if (!readOnly) {\n return <AskUserTool toolName={toolName} toolCallId={toolCallId} output={output} metadata={metadata} />;\n }\n break;\n case 'connect_prompt':\n return <ConnectPromptTool output={output} readOnly={readOnly} />;\n case 'submit_plan':\n return (\n <SubmitPlanTool\n agentId={chatAgent?.agentId}\n agentVersionId={chatAgent?.agentVersionId}\n requestContext={chatAgent?.requestContext}\n toolName={toolName}\n toolCallId={toolCallId}\n output={output}\n metadata={metadata}\n />\n );\n case 'mcp_input_request': {\n const payload = suspendedMcpInputRequest(metadata, toolCallId);\n if (!payload) break;\n return (\n <>\n <ToolBadge\n toolName={toolName}\n args={input}\n result={output}\n toolOutput={[]}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n status={status}\n mcpInputRequest={payload}\n />\n {/* The card stays mounted across a call's suspensions, so a new one must start with no answers. */}\n <ForegroundMcpInputRequest\n key={payload.requestedAt ?? payload.createdAt}\n toolCallId={toolCallId}\n payload={payload}\n readOnly={readOnly}\n isNetwork={isNetwork}\n />\n </>\n );\n }\n case 'background': {\n const isAgent = isAgentCall(metadata, toolName);\n const isWorkflow = isWorkflowCall(metadata, toolName);\n return (\n <>\n <ToolBadge\n toolName={isAgent ? agentToolName : isWorkflow ? workflowToolName : toolName}\n args={input}\n result={output}\n toolOutput={[]}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n suspendPayload={suspendedToolMetadata?.suspendPayload}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n withoutArgs={isAgent || isWorkflow}\n status={status}\n backgroundTaskId={backgroundTaskId}\n backgroundTaskStatus={backgroundTaskStatus}\n mcpInputRequest={deferredRequest?.payload}\n />\n </>\n );\n }\n case 'agent':\n return (\n <AgentBadgeWrapper\n agentId={agentToolName}\n result={output}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n toolName={toolName}\n isNetwork={isNetwork}\n suspendPayload={suspendedToolMetadata?.suspendPayload}\n toolCalled={toolCalled}\n isComplete={isSettledState(state)}\n status={status}\n errorText={errorText}\n />\n );\n case 'workflow':\n return (\n <WorkflowBadge\n workflowId={workflowToolName}\n isStreaming={metadata?.mode === 'stream' || isNetwork}\n result={output}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n suspendPayload={suspendedToolMetadata?.suspendPayload}\n toolName={toolName}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n />\n );\n case 'file_tree':\n return (\n <FileTreeBadge\n toolName={toolName}\n args={input}\n result={output}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n dataParts={dataParts}\n status={status}\n />\n );\n case 'sandbox':\n return (\n <SandboxExecutionBadge\n toolName={toolName}\n args={input}\n result={output}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n dataParts={dataParts}\n status={status}\n />\n );\n case 'code_mode': {\n const call = codeModeCall(input, output);\n if (call) {\n return (\n <CodeModeBadge\n toolName={toolName}\n code={call.code}\n result={call.result}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n />\n );\n }\n break;\n }\n case 'knowledge': {\n const card = knowledgeCard(toolName, input, output, state === 'output-error' ? (errorText ?? '') : undefined);\n if (card) {\n return (\n <KnowledgeToolBadge\n card={card}\n toolName={toolName}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n isNetwork={isNetwork}\n status={status}\n />\n );\n }\n break;\n }\n case 'mcp_app':\n case 'plain':\n break;\n }\n\n const mcpAppInfo = mcpAppTools?.[toolName];\n\n return (\n <>\n <ToolBadge\n toolName={toolName}\n args={input}\n result={output ?? errorText}\n toolOutput={output?.toolOutput || []}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n suspendPayload={suspendedToolMetadata?.suspendPayload}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n status={status}\n backgroundTaskId={backgroundTaskId}\n backgroundTaskStatus={backgroundTaskStatus}\n mcpInputRequest={deferredRequest?.payload}\n />\n <ToolResultMedia modelOutput={modelOutput} />\n {mcpAppInfo && output !== undefined && (\n <McpAppToolResult\n appInfo={mcpAppInfo}\n toolArgs={input}\n toolResult={output}\n onSendMessage={handleMcpAppSendMessage}\n readOnly={readOnly}\n />\n )}\n </>\n );\n }\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"tool-card-BOLXeKIp.cjs","names":["awaitsToolApproval","ToolCallMono","CodeEditor","ToolApprovalBadge","AgentIcon","NetworkChoiceMetadataDialogTrigger","BackgroundTaskMetadataDialogTrigger","_Fragment","Button","Markdown","React","SectionLabel","useAgentMessages","LoadingBadge","toAISdkV5Messages","resolveToChildMessages","PlaygroundWorkflowRunProvider","useMcpAppTools","useChatSend","useContext","ChatAgentContext","useChatRunning","useCallback","toolCardKind","toolInteraction","badgeStatus","useDeferredInputRequest","isDeferredCall","DeferredMcpInputRequest","_Fragment","ObservationMarkerBadge","AskUserTool","ConnectPromptTool","SubmitPlanTool","suspendedMcpInputRequest","ToolBadge","ForegroundMcpInputRequest","isAgentCall","isWorkflowCall","isSettledState","WorkflowBadge","FileTreeBadge","SandboxExecutionBadge","codeModeCall","CodeModeBadge","knowledgeCard","KnowledgeToolBadge","ToolResultMedia","McpAppToolResult"],"sources":["../src/domains/chat/tools/badges/agent-badge.tsx","../src/domains/chat/tools/badges/agent-badge-wrapper.tsx","../src/domains/chat/tools/tool-card.tsx"],"sourcesContent":["import React from 'react';\nimport Markdown from 'react-markdown';\nimport { ToolCard } from '../tool-card';\nimport { BackgroundTaskMetadataDialogTrigger } from './background-task-metadata-dialog';\nimport type { MessageMetadata } from '@/domains/chat';\nimport { NetworkChoiceMetadataDialogTrigger } from '@/domains/chat/components/network-choice-metadata-dialog';\nimport { SectionLabel } from '@/domains/chat/components/section-label';\nimport { awaitsToolApproval } from '@/domains/chat/tools/badges/awaits-tool-approval';\nimport type { ToolApprovalRequest } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport { ToolApprovalBadge } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\nimport { ToolCallMono } from '@/ds/components/ai/tool-call';\nimport { Button } from '@/ds/components/Button';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\n\ntype TextMessage = {\n type: 'text';\n content: string;\n};\n\ntype ToolMessage = {\n type: 'tool';\n toolName: string;\n toolOutput?: any;\n args?: any;\n toolCallId: string;\n result?: any;\n};\n\nexport type AgentMessage = TextMessage | ToolMessage;\n\nexport interface AgentBadgeProps extends Omit<ToolApprovalRequest, 'toolCalled'> {\n agentId: string;\n messages: AgentMessage[];\n metadata?: MessageMetadata;\n suspendPayload?: any;\n toolCalled?: boolean;\n isComplete?: boolean;\n keepOpenForStreamingChildMessages?: boolean;\n status?: ActivityStatus;\n errorText?: string;\n onLoadPrevious?: () => void;\n isLoadingPrevious?: boolean;\n}\n\nexport const AgentBadge = ({\n agentId,\n messages = [],\n metadata,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n suspendPayload,\n toolCalled: toolCalledProp,\n isComplete = false,\n keepOpenForStreamingChildMessages = false,\n status = 'idle',\n errorText,\n onLoadPrevious,\n isLoadingPrevious = false,\n}: AgentBadgeProps) => {\n const routingDecision = metadata?.mode === 'network' ? metadata.routingDecision : undefined;\n const selectionReason =\n metadata?.mode === 'network' ? (routingDecision?.selectionReason ?? metadata.selectionReason) : undefined;\n const agentNetworkInput = metadata?.mode === 'network' ? (routingDecision ?? metadata.agentInput) : undefined;\n\n const parentSuspendedTools =\n metadata?.mode === 'stream' || metadata?.mode === 'network' || metadata?.mode === 'generate'\n ? metadata?.suspendedTools\n : undefined;\n\n const bgEntry =\n (metadata?.mode === 'stream' || metadata?.mode === 'generate') && metadata?.backgroundTasks\n ? metadata.backgroundTasks[toolCallId]\n : undefined;\n\n const allChildToolsComplete =\n messages.length > 0 &&\n messages.every(message => {\n if (message.type === 'text') {\n return true;\n }\n return message.toolOutput !== undefined;\n });\n\n let toolCalled = isComplete && allChildToolsComplete;\n\n if (isNetwork) {\n toolCalled = toolCalledProp ?? allChildToolsComplete;\n }\n\n const isError = status === 'error';\n const shouldCollapseContent = isComplete && !isError && !toolApprovalMetadata && !keepOpenForStreamingChildMessages;\n const shownError = isError ? errorText : undefined;\n const hasBody =\n Boolean(onLoadPrevious) ||\n messages.length > 0 ||\n Boolean(shownError) ||\n Boolean(suspendPayload) ||\n awaitsToolApproval({ toolApprovalMetadata, toolCalled });\n\n let suspendPayloadSlot =\n typeof suspendPayload === 'string' ? (\n <ToolCallMono copyText={suspendPayload} className=\"text-muted-foreground\">\n {suspendPayload}\n </ToolCallMono>\n ) : (\n <CodeEditor data={suspendPayload} data-testid=\"tool-suspend-payload\" />\n );\n\n return (\n <ToolApprovalBadge\n approval={{\n toolCalled,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n isGenerateMode: metadata?.mode === 'generate',\n }}\n data-testid=\"agent-badge\"\n icon={<AgentIcon className=\"text-span-agent\" />}\n title={agentId}\n status={status}\n initialCollapsed={shouldCollapseContent}\n extraInfo={\n metadata?.mode === 'network' ? (\n <NetworkChoiceMetadataDialogTrigger\n selectionReason={selectionReason ?? ''}\n input={agentNetworkInput as string | Record<string, unknown> | undefined}\n />\n ) : bgEntry?.taskId && bgEntry?.startedAt ? (\n <BackgroundTaskMetadataDialogTrigger backgroundTask={bgEntry} />\n ) : null\n }\n >\n {hasBody && (\n <>\n {onLoadPrevious && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onLoadPrevious}\n disabled={isLoadingPrevious}\n data-testid=\"agent-badge-load-previous\"\n >\n {isLoadingPrevious ? 'Loading earlier messages…' : 'Load earlier messages'}\n </Button>\n )}\n\n {messages.map((message, index) => {\n if (message.type === 'text') {\n return <Markdown key={index}>{message.content}</Markdown>;\n }\n\n let result;\n\n try {\n result = typeof message.toolOutput === 'string' ? JSON.parse(message.toolOutput) : message.toolOutput;\n } catch {\n result = message.toolOutput;\n }\n\n return (\n <React.Fragment key={index}>\n <ToolCard\n toolName={message.toolName}\n input={message.args}\n output={result}\n state=\"output-available\"\n toolCallId={message.toolCallId}\n metadata={{\n mode: 'stream',\n requireApprovalMetadata: isNetwork ? metadata?.requireApprovalMetadata : undefined,\n suspendedTools: parentSuspendedTools,\n }}\n />\n </React.Fragment>\n );\n })}\n\n {shownError && (\n <ToolCallMono copyText={shownError} data-testid=\"agent-error\" className=\"text-destructive-foreground\">\n {shownError}\n </ToolCallMono>\n )}\n\n {suspendPayloadSlot !== undefined && suspendPayload && (\n <div>\n <SectionLabel>Agent suspend payload</SectionLabel>\n {suspendPayloadSlot}\n </div>\n )}\n </>\n )}\n </ToolApprovalBadge>\n );\n};\n","import { toAISdkV5Messages } from '@mastra/ai-sdk/ui';\nimport { useAgentMessages } from '@mastra/react/hooks/agents';\nimport type { AgentMessage } from './agent-badge';\nimport { AgentBadge } from './agent-badge';\nimport { resolveToChildMessages } from './resolve-child-messages';\nimport type { MessageMetadata } from '@/domains/chat';\nimport { LoadingBadge } from '@/domains/chat/components/loading-badge';\nimport type { ToolApprovalRequest } from '@/domains/chat/tools/badges/tool-approval-badge';\nimport type { ActivityStatus } from '@/ds/components/ai/activity';\n\ninterface SubAgentToolResult {\n toolName: string;\n toolCallId: string;\n result: any;\n args: any;\n}\n\ninterface AgentBadgeWrapperProps extends Omit<ToolApprovalRequest, 'toolCalled'> {\n agentId: string;\n result?: {\n childMessages?: AgentMessage[];\n subAgentResourceId?: string;\n subAgentThreadId?: string;\n subAgentToolResults?: SubAgentToolResult[];\n text?: string;\n };\n metadata?: MessageMetadata;\n suspendPayload?: any;\n toolCalled?: boolean;\n isComplete?: boolean;\n status?: ActivityStatus;\n errorText?: string;\n}\n\nexport const AgentBadgeWrapper = ({\n agentId,\n result,\n metadata,\n toolCallId,\n toolApprovalMetadata,\n toolName,\n isNetwork,\n suspendPayload,\n toolCalled,\n isComplete,\n status,\n errorText,\n}: AgentBadgeWrapperProps) => {\n const shouldFetchAgentMessages = Boolean(\n result?.subAgentThreadId && !result.text && !result.subAgentToolResults?.length,\n );\n const { data, isLoading, fetchNextPage, hasNextPage, isFetchingNextPage } = useAgentMessages({\n threadId: shouldFetchAgentMessages ? result?.subAgentThreadId : undefined,\n agentId,\n memory: true,\n });\n\n if (isLoading) {\n return <LoadingBadge />;\n }\n\n const convertedMessages = data?.messages ? toAISdkV5Messages(data.messages) : [];\n\n let childMessages = result?.childMessages?.length ? result.childMessages : undefined;\n\n if (!childMessages && result?.subAgentToolResults?.length) {\n const toolMessages: AgentMessage[] = result.subAgentToolResults.map(tr => ({\n type: 'tool' as const,\n toolName: tr.toolName,\n toolCallId: tr.toolCallId,\n args: tr.args,\n toolOutput: tr.result,\n }));\n if (result.text) {\n toolMessages.push({ type: 'text' as const, content: result.text });\n }\n childMessages = toolMessages;\n }\n\n if (!childMessages && result?.text) {\n childMessages = [{ type: 'text' as const, content: result.text }];\n }\n\n let onLoadPrevious: (() => void) | undefined;\n if (!childMessages) {\n childMessages = resolveToChildMessages(convertedMessages) as AgentMessage[];\n onLoadPrevious = hasNextPage ? fetchNextPage : undefined;\n }\n\n const hasStreamingChildMessages = Boolean(result && Object.prototype.hasOwnProperty.call(result, 'childMessages'));\n\n return (\n <AgentBadge\n agentId={agentId}\n messages={childMessages ?? []}\n keepOpenForStreamingChildMessages={hasStreamingChildMessages}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n toolName={toolName}\n isNetwork={isNetwork}\n suspendPayload={suspendPayload}\n toolCalled={toolCalled}\n isComplete={isComplete}\n status={status}\n errorText={errorText}\n onLoadPrevious={onLoadPrevious}\n isLoadingPrevious={isFetchingNextPage}\n />\n );\n};\n","import { useMcpAppTools } from '@mastra/react/hooks/mcps';\nimport { useCallback, useContext } from 'react';\nimport { AgentBadgeWrapper } from './badges/agent-badge-wrapper';\nimport { FileTreeBadge } from './badges/file-tree-badge';\nimport { KnowledgeToolBadge, knowledgeCard } from './badges/knowledge-tool-badge';\nimport { DeferredMcpInputRequest, ForegroundMcpInputRequest } from './badges/mcp-input-request-badge';\nimport { SandboxExecutionBadge } from './badges/sandbox-execution-badge';\nimport { ToolBadge } from './badges/tool-badge';\nimport { useDeferredInputRequest } from './badges/use-deferred-input-request';\nimport { useWorkflowStream, WorkflowBadge } from './badges/workflow-badge';\nimport { suspendedMcpInputRequest } from './mcp-input-request';\nimport { SubmitPlanTool } from './submit-plan-tool';\nimport { ToolResultMedia } from './tool-result-media';\nimport type { MessageMetadata } from '@/domains/chat';\nimport { ChatAgentContext, useChatRunning, useChatSend } from '@/domains/chat/context/chat-context';\nimport { AskUserTool } from '@/domains/chat/tools/ask-user-tool';\nimport { CodeModeBadge } from '@/domains/chat/tools/badges/code-mode-badge';\nimport { ObservationMarkerBadge } from '@/domains/chat/tools/badges/observation-marker-badge';\nimport { ConnectPromptTool } from '@/domains/chat/tools/connect-prompt-tool';\nimport {\n badgeStatus,\n codeModeCall,\n isAgentCall,\n isDeferredCall,\n isSettledState,\n isWorkflowCall,\n toolCardKind,\n toolInteraction,\n} from '@/domains/chat/tools/tool-card-kind';\nimport { McpAppToolResult } from '@/domains/mcps/components/mcp-app-tool-result';\nimport { PlaygroundWorkflowRunProvider } from '@/domains/workflows/context/playground-workflow-run-provider';\n\n/** A `data`-typed part the agent wrote via `writer.custom`, scoped to a call by `data.toolCallId`. */\nexport interface DataMessagePart {\n type: string;\n name?: string;\n data?: any;\n}\n\nexport interface ToolCardProps {\n toolName: string;\n input: any;\n output: any;\n modelOutput?: unknown;\n /** The Mastra background task running the call, when it was deferred. */\n backgroundTaskId?: string;\n /** The background task's status in the part's metadata: `running` until the part holds its result. */\n backgroundTaskStatus?: string;\n toolCallId: string;\n /** Part state: v5 `output-available`/`output-error`/`input-available`, or v4 `result`/`call`. */\n state?: string;\n /** Error message when `state` is `output-error`. */\n errorText?: string;\n metadata?: MessageMetadata;\n /** `data`-typed parts from the parent message, for badges that read live streaming metadata. */\n dataParts?: ReadonlyArray<DataMessagePart>;\n /** Historical rendering mode: preserve presentation while suppressing executable actions and side effects. */\n readOnly?: boolean;\n}\n\nconst stripPrefix = (toolName: string, prefix: string): string =>\n toolName.startsWith(prefix) ? toolName.slice(prefix.length) : toolName;\n\n/** Its own workflow run scope, so a streaming workflow result can drive a live graph inside the card. */\nexport const ToolCard = (props: ToolCardProps) => {\n return (\n <PlaygroundWorkflowRunProvider workflowId=\"\" withoutTimeTravel>\n <ToolCardInner {...props} />\n </PlaygroundWorkflowRunProvider>\n );\n};\n\nexport const ToolCardInner = ({\n toolName,\n input,\n output,\n modelOutput,\n backgroundTaskId,\n backgroundTaskStatus,\n toolCallId,\n state,\n errorText,\n metadata,\n dataParts,\n readOnly = false,\n}: ToolCardProps) => {\n const { data: mcpAppTools } = useMcpAppTools();\n const send = useChatSend();\n const chatAgent = useContext(ChatAgentContext);\n const { isRunning } = useChatRunning();\n const handleMcpAppSendMessage = useCallback(\n (content: string) => {\n void send({ message: content });\n },\n [send],\n );\n useWorkflowStream(output);\n\n const kind = toolCardKind(\n { toolName, toolCallId, input, output, state, backgroundTaskId, backgroundTaskStatus },\n { metadata, mcpAppTools },\n );\n const { approval: toolApprovalMetadata, suspended: suspendedToolMetadata } = toolInteraction(\n metadata,\n toolName,\n toolCallId,\n );\n const status = badgeStatus(state, isRunning);\n // Any deferred call, whatever its output looks like: live it holds the MCP task's progress records,\n // after a reload the \"Background task started\" placeholder.\n const deferredRequest = useDeferredInputRequest(\n backgroundTaskId ?? '',\n isDeferredCall(backgroundTaskId, backgroundTaskStatus) && !readOnly,\n );\n const isNetwork = metadata?.mode === 'network';\n const toolCalled = isNetwork && metadata?.hasMoreMessages ? true : undefined;\n const agentToolName = stripPrefix(toolName, 'agent-');\n const workflowToolName = stripPrefix(toolName, 'workflow-');\n const deferredCard = deferredRequest && backgroundTaskId && (\n <DeferredMcpInputRequest\n key={String(deferredRequest.suspendedAt)}\n backgroundTaskId={backgroundTaskId}\n request={deferredRequest}\n />\n );\n\n const body = renderKind();\n // A deferred call's question shows under whichever badge draws the call. One fragment either way, so\n // the badge (and its task progress) isn't remounted when the question comes and goes.\n return (\n <>\n {body}\n {body !== null && deferredCard}\n </>\n );\n\n function renderKind() {\n switch (kind) {\n case 'hidden':\n return null;\n case 'observation':\n return <ObservationMarkerBadge toolName={toolName} omData={output?.omData ?? input} />;\n case 'ask_user':\n if (!readOnly) {\n return <AskUserTool toolName={toolName} toolCallId={toolCallId} output={output} metadata={metadata} />;\n }\n break;\n case 'connect_prompt':\n return (\n <ConnectPromptTool\n toolName={toolName}\n toolCallId={toolCallId}\n output={output}\n metadata={metadata}\n readOnly={readOnly}\n />\n );\n case 'submit_plan':\n return (\n <SubmitPlanTool\n agentId={chatAgent?.agentId}\n agentVersionId={chatAgent?.agentVersionId}\n requestContext={chatAgent?.requestContext}\n toolName={toolName}\n toolCallId={toolCallId}\n output={output}\n metadata={metadata}\n />\n );\n case 'mcp_input_request': {\n const payload = suspendedMcpInputRequest(metadata, toolCallId);\n if (!payload) break;\n return (\n <>\n <ToolBadge\n toolName={toolName}\n args={input}\n result={output}\n toolOutput={[]}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n status={status}\n mcpInputRequest={payload}\n />\n {/* The card stays mounted across a call's suspensions, so a new one must start with no answers. */}\n <ForegroundMcpInputRequest\n key={payload.requestedAt ?? payload.createdAt}\n toolCallId={toolCallId}\n payload={payload}\n readOnly={readOnly}\n isNetwork={isNetwork}\n />\n </>\n );\n }\n case 'background': {\n const isAgent = isAgentCall(metadata, toolName);\n const isWorkflow = isWorkflowCall(metadata, toolName);\n return (\n <>\n <ToolBadge\n toolName={isAgent ? agentToolName : isWorkflow ? workflowToolName : toolName}\n args={input}\n result={output}\n toolOutput={[]}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n suspendPayload={suspendedToolMetadata?.suspendPayload}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n withoutArgs={isAgent || isWorkflow}\n status={status}\n backgroundTaskId={backgroundTaskId}\n backgroundTaskStatus={backgroundTaskStatus}\n mcpInputRequest={deferredRequest?.payload}\n />\n </>\n );\n }\n case 'agent':\n return (\n <AgentBadgeWrapper\n agentId={agentToolName}\n result={output}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n toolName={toolName}\n isNetwork={isNetwork}\n suspendPayload={suspendedToolMetadata?.suspendPayload}\n toolCalled={toolCalled}\n isComplete={isSettledState(state)}\n status={status}\n errorText={errorText}\n />\n );\n case 'workflow':\n return (\n <WorkflowBadge\n workflowId={workflowToolName}\n isStreaming={metadata?.mode === 'stream' || isNetwork}\n result={output}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n suspendPayload={suspendedToolMetadata?.suspendPayload}\n toolName={toolName}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n />\n );\n case 'file_tree':\n return (\n <FileTreeBadge\n toolName={toolName}\n args={input}\n result={output}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n dataParts={dataParts}\n status={status}\n />\n );\n case 'sandbox':\n return (\n <SandboxExecutionBadge\n toolName={toolName}\n args={input}\n result={output}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n dataParts={dataParts}\n status={status}\n />\n );\n case 'code_mode': {\n const call = codeModeCall(input, output);\n if (call) {\n return (\n <CodeModeBadge\n toolName={toolName}\n code={call.code}\n result={call.result}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n />\n );\n }\n break;\n }\n case 'knowledge': {\n const card = knowledgeCard(toolName, input, output, state === 'output-error' ? (errorText ?? '') : undefined);\n if (card) {\n return (\n <KnowledgeToolBadge\n card={card}\n toolName={toolName}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n isNetwork={isNetwork}\n status={status}\n />\n );\n }\n break;\n }\n case 'mcp_app':\n case 'plain':\n break;\n }\n\n const mcpAppInfo = mcpAppTools?.[toolName];\n\n return (\n <>\n <ToolBadge\n toolName={toolName}\n args={input}\n result={output ?? errorText}\n toolOutput={output?.toolOutput || []}\n metadata={metadata}\n toolCallId={toolCallId}\n toolApprovalMetadata={toolApprovalMetadata}\n suspendPayload={suspendedToolMetadata?.suspendPayload}\n isNetwork={isNetwork}\n toolCalled={toolCalled}\n status={status}\n backgroundTaskId={backgroundTaskId}\n backgroundTaskStatus={backgroundTaskStatus}\n mcpInputRequest={deferredRequest?.payload}\n />\n <ToolResultMedia modelOutput={modelOutput} />\n {mcpAppInfo && output !== undefined && (\n <McpAppToolResult\n appInfo={mcpAppInfo}\n toolArgs={input}\n toolResult={output}\n onSendMessage={handleMcpAppSendMessage}\n readOnly={readOnly}\n />\n )}\n </>\n );\n }\n};\n"],"mappings":"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"}
@@ -232,7 +232,10 @@ var ToolCardInner = ({ toolName, input, output, modelOutput, backgroundTaskId, b
232
232
  });
233
233
  break;
234
234
  case "connect_prompt": return /* @__PURE__ */ jsx(ConnectPromptTool, {
235
+ toolName,
236
+ toolCallId,
235
237
  output,
238
+ metadata,
236
239
  readOnly
237
240
  });
238
241
  case "submit_plan": return /* @__PURE__ */ jsx(SubmitPlanTool, {
@@ -396,4 +399,4 @@ var ToolCardInner = ({ toolName, input, output, modelOutput, backgroundTaskId, b
396
399
  };
397
400
  export { AgentBadge as i, ToolCardInner as n, AgentBadgeWrapper as r, ToolCard as t };
398
401
 
399
- //# sourceMappingURL=tool-card-toDgoZzJ.js.map
402
+ //# sourceMappingURL=tool-card-HZ5bm7ue.js.map