@mastra/playground-ui 66.0.0 → 66.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 (109) hide show
  1. package/dist/domains/traces/components/format-trace-thread-messages.cjs.js +52 -0
  2. package/dist/domains/traces/components/format-trace-thread-messages.cjs.js.map +1 -1
  3. package/dist/domains/traces/components/format-trace-thread-messages.es.js +51 -1
  4. package/dist/domains/traces/components/format-trace-thread-messages.es.js.map +1 -1
  5. package/dist/domains/traces/components/read-only-tool-call-provider.cjs.js +23 -0
  6. package/dist/domains/traces/components/read-only-tool-call-provider.cjs.js.map +1 -0
  7. package/dist/domains/traces/components/read-only-tool-call-provider.d.ts +1 -0
  8. package/dist/domains/traces/components/read-only-tool-call-provider.es.js +22 -0
  9. package/dist/domains/traces/components/read-only-tool-call-provider.es.js.map +1 -0
  10. package/dist/domains/traces/components/span-data-panel-view.cjs.js +123 -67
  11. package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
  12. package/dist/domains/traces/components/span-data-panel-view.es.js +131 -75
  13. package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
  14. package/dist/domains/traces/components/span-details-view.cjs.js +19 -11
  15. package/dist/domains/traces/components/span-details-view.cjs.js.map +1 -1
  16. package/dist/domains/traces/components/span-details-view.es.js +22 -14
  17. package/dist/domains/traces/components/span-details-view.es.js.map +1 -1
  18. package/dist/domains/traces/components/span-outcome.cjs.js +78 -0
  19. package/dist/domains/traces/components/span-outcome.cjs.js.map +1 -0
  20. package/dist/domains/traces/components/span-outcome.d.ts +1 -0
  21. package/dist/domains/traces/components/span-outcome.es.js +77 -0
  22. package/dist/domains/traces/components/span-outcome.es.js.map +1 -0
  23. package/dist/domains/traces/components/span-outcome.utils.cjs.js +360 -0
  24. package/dist/domains/traces/components/span-outcome.utils.cjs.js.map +1 -0
  25. package/dist/domains/traces/components/span-outcome.utils.d.ts +1 -0
  26. package/dist/domains/traces/components/span-outcome.utils.es.js +357 -0
  27. package/dist/domains/traces/components/span-outcome.utils.es.js.map +1 -0
  28. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +32 -15
  29. package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js.map +1 -1
  30. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +32 -16
  31. package/dist/domains/traces/components/span-payload/span-error-renderer.es.js.map +1 -1
  32. package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +2 -2
  33. package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +2 -2
  34. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -10
  35. package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js.map +1 -1
  36. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -10
  37. package/dist/domains/traces/components/span-payload/span-output-renderers.es.js.map +1 -1
  38. package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +22 -1
  39. package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js.map +1 -1
  40. package/dist/domains/traces/components/span-payload/span-payload-json.es.js +22 -1
  41. package/dist/domains/traces/components/span-payload/span-payload-json.es.js.map +1 -1
  42. package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +1 -1
  43. package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +1 -1
  44. package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
  45. package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
  46. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +4 -7
  47. package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js.map +1 -1
  48. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +4 -7
  49. package/dist/domains/traces/components/span-payload/span-payload-processor.es.js.map +1 -1
  50. package/dist/domains/traces/components/span-payload/span-payload-registry.cjs.js +21 -19
  51. package/dist/domains/traces/components/span-payload/span-payload-registry.cjs.js.map +1 -1
  52. package/dist/domains/traces/components/span-payload/span-payload-registry.es.js +22 -20
  53. package/dist/domains/traces/components/span-payload/span-payload-registry.es.js.map +1 -1
  54. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +62 -19
  55. package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js.map +1 -1
  56. package/dist/domains/traces/components/span-payload/span-payload-section.es.js +62 -20
  57. package/dist/domains/traces/components/span-payload/span-payload-section.es.js.map +1 -1
  58. package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
  59. package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
  60. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +51 -140
  61. package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js.map +1 -1
  62. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +54 -143
  63. package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js.map +1 -1
  64. package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js +99 -0
  65. package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js.map +1 -0
  66. package/dist/domains/traces/components/span-payload/span-processor-mutations.d.ts +1 -0
  67. package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js +98 -0
  68. package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js.map +1 -0
  69. package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js +48 -3
  70. package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js.map +1 -1
  71. package/dist/domains/traces/components/span-payload/span-tools-section.es.js +48 -5
  72. package/dist/domains/traces/components/span-payload/span-tools-section.es.js.map +1 -1
  73. package/dist/domains/traces/components/span-payload.cjs.js +6 -1
  74. package/dist/domains/traces/components/span-payload.es.js +5 -4
  75. package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +1 -1
  76. package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +1 -1
  77. package/dist/domains/traces/components/trace-data-panel-view.cjs.js +1 -1
  78. package/dist/domains/traces/components/trace-data-panel-view.es.js +1 -1
  79. package/dist/domains/traces/components/trace-details-view.cjs.js +1 -1
  80. package/dist/domains/traces/components/trace-details-view.es.js +1 -1
  81. package/dist/domains/traces/components/trace-thread-item-view.cjs.js +26 -38
  82. package/dist/domains/traces/components/trace-thread-item-view.cjs.js.map +1 -1
  83. package/dist/domains/traces/components/trace-thread-item-view.es.js +26 -38
  84. package/dist/domains/traces/components/trace-thread-item-view.es.js.map +1 -1
  85. package/dist/domains/traces/components.cjs.js +7 -2
  86. package/dist/domains/traces/components.es.js +6 -5
  87. package/dist/domains/traces/hooks/use-trace-span-navigation.cjs.js +1 -1
  88. package/dist/domains/traces/hooks/use-trace-span-navigation.es.js +1 -1
  89. package/dist/domains/traces.cjs.js +7 -2
  90. package/dist/domains/traces.es.js +6 -5
  91. package/dist/{span-payload-primitives-Fi1kSYyM.js → span-payload-primitives-CNDSzk1Q.js} +2 -2
  92. package/dist/{span-payload-primitives-Fi1kSYyM.js.map → span-payload-primitives-CNDSzk1Q.js.map} +1 -1
  93. package/dist/{span-payload-primitives-rxerCV7Y.cjs → span-payload-primitives-DNhjpAtm.cjs} +2 -2
  94. package/dist/{span-payload-primitives-rxerCV7Y.cjs.map → span-payload-primitives-DNhjpAtm.cjs.map} +1 -1
  95. package/dist/src/domains/traces/components/format-trace-thread-messages.d.ts +14 -0
  96. package/dist/src/domains/traces/components/read-only-tool-call-provider.d.ts +5 -0
  97. package/dist/src/domains/traces/components/span-outcome.d.ts +15 -0
  98. package/dist/src/domains/traces/components/span-outcome.utils.d.ts +32 -0
  99. package/dist/src/domains/traces/components/span-payload/index.d.ts +4 -3
  100. package/dist/src/domains/traces/components/span-payload/span-error-renderer.d.ts +2 -0
  101. package/dist/src/domains/traces/components/span-payload/span-payload-json.d.ts +3 -1
  102. package/dist/src/domains/traces/components/span-payload/span-payload-processor.d.ts +1 -4
  103. package/dist/src/domains/traces/components/span-payload/span-payload-registry.d.ts +5 -14
  104. package/dist/src/domains/traces/components/span-payload/span-payload-section.d.ts +20 -1
  105. package/dist/src/domains/traces/components/span-payload/span-processor-attributes.d.ts +4 -4
  106. package/dist/src/domains/traces/components/span-payload/span-processor-mutations.d.ts +5 -0
  107. package/dist/src/domains/traces/components/span-payload/span-tools-section.d.ts +14 -2
  108. package/dist/style.css +22 -2
  109. package/package.json +6 -6
@@ -1,8 +1,8 @@
1
1
  import { t as DataKeysAndValues } from "../../../../DataKeysAndValues-B2jquIjh.js";
2
2
  import { getSpanSignal } from "../../utils/span-signal.es.js";
3
- import { SpanPayloadJson } from "./span-payload-json.es.js";
4
3
  import { asCoreSpan, pickRenderer } from "./span-payload-registry.es.js";
5
- import { l as SpanToolNameValue, n as SpanPayloadField, o as SpanPayloadMarkdown } from "../../../../span-payload-primitives-Fi1kSYyM.js";
4
+ import { SpanPayloadJson } from "./span-payload-json.es.js";
5
+ import { l as SpanToolNameValue, n as SpanPayloadField, o as SpanPayloadMarkdown } from "../../../../span-payload-primitives-CNDSzk1Q.js";
6
6
  import { SpanPayloadMessages, SpanSignal } from "./span-payload-messages.es.js";
7
7
  import { SpanPayloadProcessorInput } from "./span-payload-processor.es.js";
8
8
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -3,10 +3,10 @@ const require_Txt = require("../../../../Txt-BnoSqxKE.cjs");
3
3
  const require_activity = require("../../../../activity-B4CnOYnh.cjs");
4
4
  const require_Notice = require("../../../../Notice-DWNeCe-t.cjs");
5
5
  const require_DataKeysAndValues = require("../../../../DataKeysAndValues-CHQcnHzv.cjs");
6
+ const require_domains_traces_components_span_payload_span_payload_registry = require("./span-payload-registry.cjs.js");
6
7
  const require_domains_traces_components_span_payload_span_payload_json = require("./span-payload-json.cjs.js");
7
8
  const require_domains_traces_components_span_payload_span_payload_attachment = require("./span-payload-attachment.cjs.js");
8
- const require_domains_traces_components_span_payload_span_payload_registry = require("./span-payload-registry.cjs.js");
9
- const require_span_payload_primitives = require("../../../../span-payload-primitives-rxerCV7Y.cjs");
9
+ const require_span_payload_primitives = require("../../../../span-payload-primitives-DNhjpAtm.cjs");
10
10
  const require_domains_traces_components_span_payload_span_payload_processor = require("./span-payload-processor.cjs.js");
11
11
  const require_inline_code = require("../../../../inline-code-nhZUg7Zj.cjs");
12
12
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -77,10 +77,6 @@ function SpanModelGenerationResultRenderer({ value }) {
77
77
  label: "Object",
78
78
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_traces_components_span_payload_span_payload_json.SpanPayloadJson, { value: value.object })
79
79
  }),
80
- require_domains_traces_components_span_payload_span_payload_registry.hasItems(value.toolCalls) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_span_payload_primitives.SpanPayloadField, {
81
- label: `Tool calls (${value.toolCalls.length})`,
82
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_span_payload_primitives.SpanPayloadToolCalls, { toolCalls: value.toolCalls })
83
- }),
84
80
  require_domains_traces_components_span_payload_span_payload_registry.hasItems(value.sources) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_span_payload_primitives.SpanPayloadCollapsible, {
85
81
  label: `Sources (${value.sources.length})`,
86
82
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_traces_components_span_payload_span_payload_json.SpanPayloadJson, { value: value.sources })
@@ -102,10 +98,6 @@ function SpanModelStepResultRenderer({ value }) {
102
98
  className: "flex flex-col gap-3",
103
99
  children: [
104
100
  typeof value.text === "string" && value.text.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_span_payload_primitives.SpanPayloadMarkdown, { children: value.text }),
105
- require_domains_traces_components_span_payload_span_payload_registry.hasItems(value.toolCalls) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_span_payload_primitives.SpanPayloadField, {
106
- label: `Tool calls (${value.toolCalls.length})`,
107
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_span_payload_primitives.SpanPayloadToolCalls, { toolCalls: value.toolCalls })
108
- }),
109
101
  value.object !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_span_payload_primitives.SpanPayloadField, {
110
102
  label: "Object",
111
103
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_domains_traces_components_span_payload_span_payload_json.SpanPayloadJson, { value: value.object })
@@ -1 +1 @@
1
- {"version":3,"file":"span-output-renderers.cjs.js","names":["SpanPayloadMarkdown","Notice","DataKeysAndValues","_Fragment","SpanToolNameValue","Txt","InlineCode","SpanPayloadField","SpanPayloadJson","hasItems","SpanPayloadCollapsible","SpanPayloadAttachment","ReasoningActivity","SpanPayloadToolCalls","SpanPayloadProcessor","describeSpanOutput","asCoreSpan","pickRenderer"],"sources":["../../../../../src/domains/traces/components/span-payload/span-output-renderers.tsx"],"sourcesContent":["import { describeSpanOutput } from '@mastra/core/observability';\nimport type {\n AgentRunResult,\n InterruptedSpanOutput,\n ModelGenerationResult,\n ModelStepResult,\n SpanOutputDescription,\n} from '@mastra/core/observability';\nimport type { SpanRecord } from '../../types';\nimport { SpanPayloadAttachment } from './span-payload-attachment';\nimport { SpanPayloadJson } from './span-payload-json';\nimport {\n SpanPayloadCollapsible,\n SpanPayloadField,\n SpanPayloadMarkdown,\n SpanPayloadToolCalls,\n} from './span-payload-primitives';\nimport { SpanPayloadProcessor } from './span-payload-processor';\nimport { asCoreSpan, hasItems, pickRenderer } from './span-payload-registry';\nimport type { PayloadRegistry } from './span-payload-registry';\nimport { SpanToolNameValue } from './span-payload-tool';\nimport { ReasoningActivity } from '@/ds/components/ai/activity';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { InlineCode } from '@/ds/components/InlineCode/inline-code';\nimport { Notice } from '@/ds/components/Notice';\nimport { Txt } from '@/ds/components/Txt';\n\nfunction SpanTextRenderer({ value }: { value: string }) {\n return <SpanPayloadMarkdown>{value}</SpanPayloadMarkdown>;\n}\n\nfunction SpanInterruptedRenderer({ value }: { value: InterruptedSpanOutput }) {\n const title = { suspended: 'Suspended', aborted: 'Aborted', interrupted: 'Interrupted' }[value.status];\n const hasTarget = value.toolName !== undefined || value.toolCallId !== undefined;\n return (\n <div data-slot=\"span-interrupted\" data-status={value.status} className=\"flex flex-col gap-3\">\n <Notice variant=\"warning\" title={title}>\n {value.reason && <Notice.Message>{value.reason}</Notice.Message>}\n </Notice>\n {hasTarget && (\n <DataKeysAndValues>\n {value.toolName !== undefined && (\n <>\n <DataKeysAndValues.Key>Tool</DataKeysAndValues.Key>\n <SpanToolNameValue toolName={value.toolName} />\n </>\n )}\n {value.toolCallId !== undefined && (\n <>\n <DataKeysAndValues.Key>Tool call id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyValue={value.toolCallId}>\n {value.toolCallId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n </DataKeysAndValues>\n )}\n </div>\n );\n}\n\nfunction SpanAgentRunResultRenderer({ value }: { value: AgentRunResult }) {\n return (\n <div data-slot=\"span-agent-run-result\" className=\"flex flex-col gap-3\">\n {value.tripwire && (\n <Notice variant=\"destructive\" title=\"Tripwire\">\n {value.tripwire.reason && <Notice.Message>{value.tripwire.reason}</Notice.Message>}\n {value.tripwire.processorId && (\n <Txt as=\"p\" variant=\"caption\">\n Processor <InlineCode>{value.tripwire.processorId}</InlineCode>\n </Txt>\n )}\n </Notice>\n )}\n {typeof value.text === 'string' && value.text.length > 0 && (\n <SpanPayloadMarkdown>{value.text}</SpanPayloadMarkdown>\n )}\n {value.object !== undefined && (\n <SpanPayloadField label=\"Object\">\n <SpanPayloadJson value={value.object} />\n </SpanPayloadField>\n )}\n {hasItems(value.files) && (\n <SpanPayloadCollapsible label={`Files (${value.files.length})`}>\n {value.files.map((file, index) => (\n <SpanPayloadAttachment key={index} value={file} />\n ))}\n </SpanPayloadCollapsible>\n )}\n </div>\n );\n}\n\nfunction SpanModelGenerationResultRenderer({ value }: { value: ModelGenerationResult }) {\n return (\n <div data-slot=\"span-model-generation-result\" className=\"flex flex-col gap-3\">\n {typeof value.text === 'string' && value.text.length > 0 && (\n <SpanPayloadMarkdown>{value.text}</SpanPayloadMarkdown>\n )}\n {typeof value.reasoningText === 'string' && <ReasoningActivity text={value.reasoningText} />}\n {value.reasoning !== undefined && (\n <SpanPayloadCollapsible label=\"Reasoning details\">\n <SpanPayloadJson value={value.reasoning} />\n </SpanPayloadCollapsible>\n )}\n {value.object !== undefined && (\n <SpanPayloadField label=\"Object\">\n <SpanPayloadJson value={value.object} />\n </SpanPayloadField>\n )}\n {hasItems(value.toolCalls) && (\n <SpanPayloadField label={`Tool calls (${value.toolCalls.length})`}>\n <SpanPayloadToolCalls toolCalls={value.toolCalls} />\n </SpanPayloadField>\n )}\n {hasItems(value.sources) && (\n <SpanPayloadCollapsible label={`Sources (${value.sources.length})`}>\n <SpanPayloadJson value={value.sources} />\n </SpanPayloadCollapsible>\n )}\n {hasItems(value.files) && (\n <SpanPayloadCollapsible label={`Files (${value.files.length})`}>\n {value.files.map((file, index) => (\n <SpanPayloadAttachment key={index} value={file} />\n ))}\n </SpanPayloadCollapsible>\n )}\n {hasItems(value.warnings) && (\n <SpanPayloadCollapsible label={`Warnings (${value.warnings.length})`}>\n <SpanPayloadJson value={value.warnings} />\n </SpanPayloadCollapsible>\n )}\n </div>\n );\n}\n\nfunction SpanModelStepResultRenderer({ value }: { value: ModelStepResult }) {\n return (\n <div data-slot=\"span-model-step-result\" className=\"flex flex-col gap-3\">\n {typeof value.text === 'string' && value.text.length > 0 && (\n <SpanPayloadMarkdown>{value.text}</SpanPayloadMarkdown>\n )}\n {hasItems(value.toolCalls) && (\n <SpanPayloadField label={`Tool calls (${value.toolCalls.length})`}>\n <SpanPayloadToolCalls toolCalls={value.toolCalls} />\n </SpanPayloadField>\n )}\n {value.object !== undefined && (\n <SpanPayloadField label=\"Object\">\n <SpanPayloadJson value={value.object} />\n </SpanPayloadField>\n )}\n {hasItems(value.steps) && (\n <SpanPayloadCollapsible label={`Steps (${value.steps.length})`}>\n <SpanPayloadJson value={value.steps} />\n </SpanPayloadCollapsible>\n )}\n </div>\n );\n}\n\n/** One renderer per `describeSpanOutput` tag; see `SPAN_INPUT_RENDERERS`. */\nconst SPAN_OUTPUT_RENDERERS = {\n interrupted: SpanInterruptedRenderer,\n 'agent-run-result': SpanAgentRunResultRenderer,\n 'model-generation-result': SpanModelGenerationResultRenderer,\n 'model-step-result': SpanModelStepResultRenderer,\n processor: SpanPayloadProcessor,\n text: SpanTextRenderer,\n json: SpanPayloadJson,\n} satisfies PayloadRegistry<SpanOutputDescription>;\n\nexport interface SpanOutputRendererProps {\n span: SpanRecord;\n}\n\n/** Renders a span's output through the registry; `null` when the span recorded none. */\nexport function SpanOutputRenderer({ span }: SpanOutputRendererProps) {\n const description = describeSpanOutput(asCoreSpan(span));\n if (!description) return null;\n if (description.type === 'json') return <SpanPayloadJson value={description.value} />;\n const Renderer = pickRenderer(SPAN_OUTPUT_RENDERERS, description);\n return <Renderer value={description.value} />;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"span-output-renderers.cjs.js","names":["SpanPayloadMarkdown","Notice","DataKeysAndValues","_Fragment","SpanToolNameValue","Txt","InlineCode","SpanPayloadField","SpanPayloadJson","hasItems","SpanPayloadCollapsible","SpanPayloadAttachment","ReasoningActivity","SpanPayloadProcessor","describeSpanOutput","asCoreSpan","pickRenderer"],"sources":["../../../../../src/domains/traces/components/span-payload/span-output-renderers.tsx"],"sourcesContent":["import { describeSpanOutput } from '@mastra/core/observability';\nimport type {\n AgentRunResult,\n InterruptedSpanOutput,\n ModelGenerationResult,\n ModelStepResult,\n SpanOutputDescription,\n} from '@mastra/core/observability';\nimport type { SpanRecord } from '../../types';\nimport { SpanPayloadAttachment } from './span-payload-attachment';\nimport { SpanPayloadJson } from './span-payload-json';\nimport { SpanPayloadCollapsible, SpanPayloadField, SpanPayloadMarkdown } from './span-payload-primitives';\nimport { SpanPayloadProcessor } from './span-payload-processor';\nimport { asCoreSpan, hasItems, pickRenderer } from './span-payload-registry';\nimport type { PayloadRegistry } from './span-payload-registry';\nimport { SpanToolNameValue } from './span-payload-tool';\nimport { ReasoningActivity } from '@/ds/components/ai/activity';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { InlineCode } from '@/ds/components/InlineCode/inline-code';\nimport { Notice } from '@/ds/components/Notice';\nimport { Txt } from '@/ds/components/Txt';\n\nfunction SpanTextRenderer({ value }: { value: string }) {\n return <SpanPayloadMarkdown>{value}</SpanPayloadMarkdown>;\n}\n\nfunction SpanInterruptedRenderer({ value }: { value: InterruptedSpanOutput }) {\n const title = { suspended: 'Suspended', aborted: 'Aborted', interrupted: 'Interrupted' }[value.status];\n const hasTarget = value.toolName !== undefined || value.toolCallId !== undefined;\n return (\n <div data-slot=\"span-interrupted\" data-status={value.status} className=\"flex flex-col gap-3\">\n <Notice variant=\"warning\" title={title}>\n {value.reason && <Notice.Message>{value.reason}</Notice.Message>}\n </Notice>\n {hasTarget && (\n <DataKeysAndValues>\n {value.toolName !== undefined && (\n <>\n <DataKeysAndValues.Key>Tool</DataKeysAndValues.Key>\n <SpanToolNameValue toolName={value.toolName} />\n </>\n )}\n {value.toolCallId !== undefined && (\n <>\n <DataKeysAndValues.Key>Tool call id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyValue={value.toolCallId}>\n {value.toolCallId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n </DataKeysAndValues>\n )}\n </div>\n );\n}\n\nfunction SpanAgentRunResultRenderer({ value }: { value: AgentRunResult }) {\n return (\n <div data-slot=\"span-agent-run-result\" className=\"flex flex-col gap-3\">\n {value.tripwire && (\n <Notice variant=\"destructive\" title=\"Tripwire\">\n {value.tripwire.reason && <Notice.Message>{value.tripwire.reason}</Notice.Message>}\n {value.tripwire.processorId && (\n <Txt as=\"p\" variant=\"caption\">\n Processor <InlineCode>{value.tripwire.processorId}</InlineCode>\n </Txt>\n )}\n </Notice>\n )}\n {typeof value.text === 'string' && value.text.length > 0 && (\n <SpanPayloadMarkdown>{value.text}</SpanPayloadMarkdown>\n )}\n {value.object !== undefined && (\n <SpanPayloadField label=\"Object\">\n <SpanPayloadJson value={value.object} />\n </SpanPayloadField>\n )}\n {hasItems(value.files) && (\n <SpanPayloadCollapsible label={`Files (${value.files.length})`}>\n {value.files.map((file, index) => (\n <SpanPayloadAttachment key={index} value={file} />\n ))}\n </SpanPayloadCollapsible>\n )}\n </div>\n );\n}\n\nfunction SpanModelGenerationResultRenderer({ value }: { value: ModelGenerationResult }) {\n return (\n <div data-slot=\"span-model-generation-result\" className=\"flex flex-col gap-3\">\n {typeof value.text === 'string' && value.text.length > 0 && (\n <SpanPayloadMarkdown>{value.text}</SpanPayloadMarkdown>\n )}\n {typeof value.reasoningText === 'string' && <ReasoningActivity text={value.reasoningText} />}\n {value.reasoning !== undefined && (\n <SpanPayloadCollapsible label=\"Reasoning details\">\n <SpanPayloadJson value={value.reasoning} />\n </SpanPayloadCollapsible>\n )}\n {value.object !== undefined && (\n <SpanPayloadField label=\"Object\">\n <SpanPayloadJson value={value.object} />\n </SpanPayloadField>\n )}\n {hasItems(value.sources) && (\n <SpanPayloadCollapsible label={`Sources (${value.sources.length})`}>\n <SpanPayloadJson value={value.sources} />\n </SpanPayloadCollapsible>\n )}\n {hasItems(value.files) && (\n <SpanPayloadCollapsible label={`Files (${value.files.length})`}>\n {value.files.map((file, index) => (\n <SpanPayloadAttachment key={index} value={file} />\n ))}\n </SpanPayloadCollapsible>\n )}\n {hasItems(value.warnings) && (\n <SpanPayloadCollapsible label={`Warnings (${value.warnings.length})`}>\n <SpanPayloadJson value={value.warnings} />\n </SpanPayloadCollapsible>\n )}\n </div>\n );\n}\n\nfunction SpanModelStepResultRenderer({ value }: { value: ModelStepResult }) {\n return (\n <div data-slot=\"span-model-step-result\" className=\"flex flex-col gap-3\">\n {typeof value.text === 'string' && value.text.length > 0 && (\n <SpanPayloadMarkdown>{value.text}</SpanPayloadMarkdown>\n )}\n {value.object !== undefined && (\n <SpanPayloadField label=\"Object\">\n <SpanPayloadJson value={value.object} />\n </SpanPayloadField>\n )}\n {hasItems(value.steps) && (\n <SpanPayloadCollapsible label={`Steps (${value.steps.length})`}>\n <SpanPayloadJson value={value.steps} />\n </SpanPayloadCollapsible>\n )}\n </div>\n );\n}\n\n/** One renderer per `describeSpanOutput` tag; see `SPAN_INPUT_RENDERERS`. */\nconst SPAN_OUTPUT_RENDERERS = {\n interrupted: SpanInterruptedRenderer,\n 'agent-run-result': SpanAgentRunResultRenderer,\n 'model-generation-result': SpanModelGenerationResultRenderer,\n 'model-step-result': SpanModelStepResultRenderer,\n processor: SpanPayloadProcessor,\n text: SpanTextRenderer,\n json: SpanPayloadJson,\n} satisfies PayloadRegistry<SpanOutputDescription>;\n\nexport interface SpanOutputRendererProps {\n span: SpanRecord;\n}\n\n/** Renders a span's output through the registry; `null` when the span recorded none. */\nexport function SpanOutputRenderer({ span }: SpanOutputRendererProps) {\n const description = describeSpanOutput(asCoreSpan(span));\n if (!description) return null;\n if (description.type === 'json') return <SpanPayloadJson value={description.value} />;\n const Renderer = pickRenderer(SPAN_OUTPUT_RENDERERS, description);\n return <Renderer value={description.value} />;\n}\n"],"mappings":"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"}
@@ -2,10 +2,10 @@ import { t as Txt } from "../../../../Txt-BM6TVV_c.js";
2
2
  import { n as ReasoningActivity } from "../../../../activity-Dc-NsOSz.js";
3
3
  import { t as Notice } from "../../../../Notice-CyKngbbv.js";
4
4
  import { t as DataKeysAndValues } from "../../../../DataKeysAndValues-B2jquIjh.js";
5
+ import { asCoreSpan, hasItems, pickRenderer } from "./span-payload-registry.es.js";
5
6
  import { SpanPayloadJson } from "./span-payload-json.es.js";
6
7
  import { SpanPayloadAttachment } from "./span-payload-attachment.es.js";
7
- import { asCoreSpan, hasItems, pickRenderer } from "./span-payload-registry.es.js";
8
- import { l as SpanToolNameValue, n as SpanPayloadField, o as SpanPayloadMarkdown, s as SpanPayloadToolCalls, t as SpanPayloadCollapsible } from "../../../../span-payload-primitives-Fi1kSYyM.js";
8
+ import { l as SpanToolNameValue, n as SpanPayloadField, o as SpanPayloadMarkdown, t as SpanPayloadCollapsible } from "../../../../span-payload-primitives-CNDSzk1Q.js";
9
9
  import { SpanPayloadProcessor } from "./span-payload-processor.es.js";
10
10
  import { t as InlineCode } from "../../../../inline-code-BR1gVYiZ.js";
11
11
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -76,10 +76,6 @@ function SpanModelGenerationResultRenderer({ value }) {
76
76
  label: "Object",
77
77
  children: /* @__PURE__ */ jsx(SpanPayloadJson, { value: value.object })
78
78
  }),
79
- hasItems(value.toolCalls) && /* @__PURE__ */ jsx(SpanPayloadField, {
80
- label: `Tool calls (${value.toolCalls.length})`,
81
- children: /* @__PURE__ */ jsx(SpanPayloadToolCalls, { toolCalls: value.toolCalls })
82
- }),
83
79
  hasItems(value.sources) && /* @__PURE__ */ jsx(SpanPayloadCollapsible, {
84
80
  label: `Sources (${value.sources.length})`,
85
81
  children: /* @__PURE__ */ jsx(SpanPayloadJson, { value: value.sources })
@@ -101,10 +97,6 @@ function SpanModelStepResultRenderer({ value }) {
101
97
  className: "flex flex-col gap-3",
102
98
  children: [
103
99
  typeof value.text === "string" && value.text.length > 0 && /* @__PURE__ */ jsx(SpanPayloadMarkdown, { children: value.text }),
104
- hasItems(value.toolCalls) && /* @__PURE__ */ jsx(SpanPayloadField, {
105
- label: `Tool calls (${value.toolCalls.length})`,
106
- children: /* @__PURE__ */ jsx(SpanPayloadToolCalls, { toolCalls: value.toolCalls })
107
- }),
108
100
  value.object !== void 0 && /* @__PURE__ */ jsx(SpanPayloadField, {
109
101
  label: "Object",
110
102
  children: /* @__PURE__ */ jsx(SpanPayloadJson, { value: value.object })
@@ -1 +1 @@
1
- {"version":3,"file":"span-output-renderers.es.js","names":["_Fragment"],"sources":["../../../../../src/domains/traces/components/span-payload/span-output-renderers.tsx"],"sourcesContent":["import { describeSpanOutput } from '@mastra/core/observability';\nimport type {\n AgentRunResult,\n InterruptedSpanOutput,\n ModelGenerationResult,\n ModelStepResult,\n SpanOutputDescription,\n} from '@mastra/core/observability';\nimport type { SpanRecord } from '../../types';\nimport { SpanPayloadAttachment } from './span-payload-attachment';\nimport { SpanPayloadJson } from './span-payload-json';\nimport {\n SpanPayloadCollapsible,\n SpanPayloadField,\n SpanPayloadMarkdown,\n SpanPayloadToolCalls,\n} from './span-payload-primitives';\nimport { SpanPayloadProcessor } from './span-payload-processor';\nimport { asCoreSpan, hasItems, pickRenderer } from './span-payload-registry';\nimport type { PayloadRegistry } from './span-payload-registry';\nimport { SpanToolNameValue } from './span-payload-tool';\nimport { ReasoningActivity } from '@/ds/components/ai/activity';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { InlineCode } from '@/ds/components/InlineCode/inline-code';\nimport { Notice } from '@/ds/components/Notice';\nimport { Txt } from '@/ds/components/Txt';\n\nfunction SpanTextRenderer({ value }: { value: string }) {\n return <SpanPayloadMarkdown>{value}</SpanPayloadMarkdown>;\n}\n\nfunction SpanInterruptedRenderer({ value }: { value: InterruptedSpanOutput }) {\n const title = { suspended: 'Suspended', aborted: 'Aborted', interrupted: 'Interrupted' }[value.status];\n const hasTarget = value.toolName !== undefined || value.toolCallId !== undefined;\n return (\n <div data-slot=\"span-interrupted\" data-status={value.status} className=\"flex flex-col gap-3\">\n <Notice variant=\"warning\" title={title}>\n {value.reason && <Notice.Message>{value.reason}</Notice.Message>}\n </Notice>\n {hasTarget && (\n <DataKeysAndValues>\n {value.toolName !== undefined && (\n <>\n <DataKeysAndValues.Key>Tool</DataKeysAndValues.Key>\n <SpanToolNameValue toolName={value.toolName} />\n </>\n )}\n {value.toolCallId !== undefined && (\n <>\n <DataKeysAndValues.Key>Tool call id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyValue={value.toolCallId}>\n {value.toolCallId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n </DataKeysAndValues>\n )}\n </div>\n );\n}\n\nfunction SpanAgentRunResultRenderer({ value }: { value: AgentRunResult }) {\n return (\n <div data-slot=\"span-agent-run-result\" className=\"flex flex-col gap-3\">\n {value.tripwire && (\n <Notice variant=\"destructive\" title=\"Tripwire\">\n {value.tripwire.reason && <Notice.Message>{value.tripwire.reason}</Notice.Message>}\n {value.tripwire.processorId && (\n <Txt as=\"p\" variant=\"caption\">\n Processor <InlineCode>{value.tripwire.processorId}</InlineCode>\n </Txt>\n )}\n </Notice>\n )}\n {typeof value.text === 'string' && value.text.length > 0 && (\n <SpanPayloadMarkdown>{value.text}</SpanPayloadMarkdown>\n )}\n {value.object !== undefined && (\n <SpanPayloadField label=\"Object\">\n <SpanPayloadJson value={value.object} />\n </SpanPayloadField>\n )}\n {hasItems(value.files) && (\n <SpanPayloadCollapsible label={`Files (${value.files.length})`}>\n {value.files.map((file, index) => (\n <SpanPayloadAttachment key={index} value={file} />\n ))}\n </SpanPayloadCollapsible>\n )}\n </div>\n );\n}\n\nfunction SpanModelGenerationResultRenderer({ value }: { value: ModelGenerationResult }) {\n return (\n <div data-slot=\"span-model-generation-result\" className=\"flex flex-col gap-3\">\n {typeof value.text === 'string' && value.text.length > 0 && (\n <SpanPayloadMarkdown>{value.text}</SpanPayloadMarkdown>\n )}\n {typeof value.reasoningText === 'string' && <ReasoningActivity text={value.reasoningText} />}\n {value.reasoning !== undefined && (\n <SpanPayloadCollapsible label=\"Reasoning details\">\n <SpanPayloadJson value={value.reasoning} />\n </SpanPayloadCollapsible>\n )}\n {value.object !== undefined && (\n <SpanPayloadField label=\"Object\">\n <SpanPayloadJson value={value.object} />\n </SpanPayloadField>\n )}\n {hasItems(value.toolCalls) && (\n <SpanPayloadField label={`Tool calls (${value.toolCalls.length})`}>\n <SpanPayloadToolCalls toolCalls={value.toolCalls} />\n </SpanPayloadField>\n )}\n {hasItems(value.sources) && (\n <SpanPayloadCollapsible label={`Sources (${value.sources.length})`}>\n <SpanPayloadJson value={value.sources} />\n </SpanPayloadCollapsible>\n )}\n {hasItems(value.files) && (\n <SpanPayloadCollapsible label={`Files (${value.files.length})`}>\n {value.files.map((file, index) => (\n <SpanPayloadAttachment key={index} value={file} />\n ))}\n </SpanPayloadCollapsible>\n )}\n {hasItems(value.warnings) && (\n <SpanPayloadCollapsible label={`Warnings (${value.warnings.length})`}>\n <SpanPayloadJson value={value.warnings} />\n </SpanPayloadCollapsible>\n )}\n </div>\n );\n}\n\nfunction SpanModelStepResultRenderer({ value }: { value: ModelStepResult }) {\n return (\n <div data-slot=\"span-model-step-result\" className=\"flex flex-col gap-3\">\n {typeof value.text === 'string' && value.text.length > 0 && (\n <SpanPayloadMarkdown>{value.text}</SpanPayloadMarkdown>\n )}\n {hasItems(value.toolCalls) && (\n <SpanPayloadField label={`Tool calls (${value.toolCalls.length})`}>\n <SpanPayloadToolCalls toolCalls={value.toolCalls} />\n </SpanPayloadField>\n )}\n {value.object !== undefined && (\n <SpanPayloadField label=\"Object\">\n <SpanPayloadJson value={value.object} />\n </SpanPayloadField>\n )}\n {hasItems(value.steps) && (\n <SpanPayloadCollapsible label={`Steps (${value.steps.length})`}>\n <SpanPayloadJson value={value.steps} />\n </SpanPayloadCollapsible>\n )}\n </div>\n );\n}\n\n/** One renderer per `describeSpanOutput` tag; see `SPAN_INPUT_RENDERERS`. */\nconst SPAN_OUTPUT_RENDERERS = {\n interrupted: SpanInterruptedRenderer,\n 'agent-run-result': SpanAgentRunResultRenderer,\n 'model-generation-result': SpanModelGenerationResultRenderer,\n 'model-step-result': SpanModelStepResultRenderer,\n processor: SpanPayloadProcessor,\n text: SpanTextRenderer,\n json: SpanPayloadJson,\n} satisfies PayloadRegistry<SpanOutputDescription>;\n\nexport interface SpanOutputRendererProps {\n span: SpanRecord;\n}\n\n/** Renders a span's output through the registry; `null` when the span recorded none. */\nexport function SpanOutputRenderer({ span }: SpanOutputRendererProps) {\n const description = describeSpanOutput(asCoreSpan(span));\n if (!description) return null;\n if (description.type === 'json') return <SpanPayloadJson value={description.value} />;\n const Renderer = pickRenderer(SPAN_OUTPUT_RENDERERS, description);\n return <Renderer value={description.value} />;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"span-output-renderers.es.js","names":["_Fragment"],"sources":["../../../../../src/domains/traces/components/span-payload/span-output-renderers.tsx"],"sourcesContent":["import { describeSpanOutput } from '@mastra/core/observability';\nimport type {\n AgentRunResult,\n InterruptedSpanOutput,\n ModelGenerationResult,\n ModelStepResult,\n SpanOutputDescription,\n} from '@mastra/core/observability';\nimport type { SpanRecord } from '../../types';\nimport { SpanPayloadAttachment } from './span-payload-attachment';\nimport { SpanPayloadJson } from './span-payload-json';\nimport { SpanPayloadCollapsible, SpanPayloadField, SpanPayloadMarkdown } from './span-payload-primitives';\nimport { SpanPayloadProcessor } from './span-payload-processor';\nimport { asCoreSpan, hasItems, pickRenderer } from './span-payload-registry';\nimport type { PayloadRegistry } from './span-payload-registry';\nimport { SpanToolNameValue } from './span-payload-tool';\nimport { ReasoningActivity } from '@/ds/components/ai/activity';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\nimport { InlineCode } from '@/ds/components/InlineCode/inline-code';\nimport { Notice } from '@/ds/components/Notice';\nimport { Txt } from '@/ds/components/Txt';\n\nfunction SpanTextRenderer({ value }: { value: string }) {\n return <SpanPayloadMarkdown>{value}</SpanPayloadMarkdown>;\n}\n\nfunction SpanInterruptedRenderer({ value }: { value: InterruptedSpanOutput }) {\n const title = { suspended: 'Suspended', aborted: 'Aborted', interrupted: 'Interrupted' }[value.status];\n const hasTarget = value.toolName !== undefined || value.toolCallId !== undefined;\n return (\n <div data-slot=\"span-interrupted\" data-status={value.status} className=\"flex flex-col gap-3\">\n <Notice variant=\"warning\" title={title}>\n {value.reason && <Notice.Message>{value.reason}</Notice.Message>}\n </Notice>\n {hasTarget && (\n <DataKeysAndValues>\n {value.toolName !== undefined && (\n <>\n <DataKeysAndValues.Key>Tool</DataKeysAndValues.Key>\n <SpanToolNameValue toolName={value.toolName} />\n </>\n )}\n {value.toolCallId !== undefined && (\n <>\n <DataKeysAndValues.Key>Tool call id</DataKeysAndValues.Key>\n <DataKeysAndValues.ValueWithCopyBtn copyValue={value.toolCallId}>\n {value.toolCallId}\n </DataKeysAndValues.ValueWithCopyBtn>\n </>\n )}\n </DataKeysAndValues>\n )}\n </div>\n );\n}\n\nfunction SpanAgentRunResultRenderer({ value }: { value: AgentRunResult }) {\n return (\n <div data-slot=\"span-agent-run-result\" className=\"flex flex-col gap-3\">\n {value.tripwire && (\n <Notice variant=\"destructive\" title=\"Tripwire\">\n {value.tripwire.reason && <Notice.Message>{value.tripwire.reason}</Notice.Message>}\n {value.tripwire.processorId && (\n <Txt as=\"p\" variant=\"caption\">\n Processor <InlineCode>{value.tripwire.processorId}</InlineCode>\n </Txt>\n )}\n </Notice>\n )}\n {typeof value.text === 'string' && value.text.length > 0 && (\n <SpanPayloadMarkdown>{value.text}</SpanPayloadMarkdown>\n )}\n {value.object !== undefined && (\n <SpanPayloadField label=\"Object\">\n <SpanPayloadJson value={value.object} />\n </SpanPayloadField>\n )}\n {hasItems(value.files) && (\n <SpanPayloadCollapsible label={`Files (${value.files.length})`}>\n {value.files.map((file, index) => (\n <SpanPayloadAttachment key={index} value={file} />\n ))}\n </SpanPayloadCollapsible>\n )}\n </div>\n );\n}\n\nfunction SpanModelGenerationResultRenderer({ value }: { value: ModelGenerationResult }) {\n return (\n <div data-slot=\"span-model-generation-result\" className=\"flex flex-col gap-3\">\n {typeof value.text === 'string' && value.text.length > 0 && (\n <SpanPayloadMarkdown>{value.text}</SpanPayloadMarkdown>\n )}\n {typeof value.reasoningText === 'string' && <ReasoningActivity text={value.reasoningText} />}\n {value.reasoning !== undefined && (\n <SpanPayloadCollapsible label=\"Reasoning details\">\n <SpanPayloadJson value={value.reasoning} />\n </SpanPayloadCollapsible>\n )}\n {value.object !== undefined && (\n <SpanPayloadField label=\"Object\">\n <SpanPayloadJson value={value.object} />\n </SpanPayloadField>\n )}\n {hasItems(value.sources) && (\n <SpanPayloadCollapsible label={`Sources (${value.sources.length})`}>\n <SpanPayloadJson value={value.sources} />\n </SpanPayloadCollapsible>\n )}\n {hasItems(value.files) && (\n <SpanPayloadCollapsible label={`Files (${value.files.length})`}>\n {value.files.map((file, index) => (\n <SpanPayloadAttachment key={index} value={file} />\n ))}\n </SpanPayloadCollapsible>\n )}\n {hasItems(value.warnings) && (\n <SpanPayloadCollapsible label={`Warnings (${value.warnings.length})`}>\n <SpanPayloadJson value={value.warnings} />\n </SpanPayloadCollapsible>\n )}\n </div>\n );\n}\n\nfunction SpanModelStepResultRenderer({ value }: { value: ModelStepResult }) {\n return (\n <div data-slot=\"span-model-step-result\" className=\"flex flex-col gap-3\">\n {typeof value.text === 'string' && value.text.length > 0 && (\n <SpanPayloadMarkdown>{value.text}</SpanPayloadMarkdown>\n )}\n {value.object !== undefined && (\n <SpanPayloadField label=\"Object\">\n <SpanPayloadJson value={value.object} />\n </SpanPayloadField>\n )}\n {hasItems(value.steps) && (\n <SpanPayloadCollapsible label={`Steps (${value.steps.length})`}>\n <SpanPayloadJson value={value.steps} />\n </SpanPayloadCollapsible>\n )}\n </div>\n );\n}\n\n/** One renderer per `describeSpanOutput` tag; see `SPAN_INPUT_RENDERERS`. */\nconst SPAN_OUTPUT_RENDERERS = {\n interrupted: SpanInterruptedRenderer,\n 'agent-run-result': SpanAgentRunResultRenderer,\n 'model-generation-result': SpanModelGenerationResultRenderer,\n 'model-step-result': SpanModelStepResultRenderer,\n processor: SpanPayloadProcessor,\n text: SpanTextRenderer,\n json: SpanPayloadJson,\n} satisfies PayloadRegistry<SpanOutputDescription>;\n\nexport interface SpanOutputRendererProps {\n span: SpanRecord;\n}\n\n/** Renders a span's output through the registry; `null` when the span recorded none. */\nexport function SpanOutputRenderer({ span }: SpanOutputRendererProps) {\n const description = describeSpanOutput(asCoreSpan(span));\n if (!description) return null;\n if (description.type === 'json') return <SpanPayloadJson value={description.value} />;\n const Renderer = pickRenderer(SPAN_OUTPUT_RENDERERS, description);\n return <Renderer value={description.value} />;\n}\n"],"mappings":"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"}
@@ -3,9 +3,29 @@ const require_utils = require("../../../../utils-uDc1ofX1.cjs");
3
3
  require("../../../../primitives/raised-surface.cjs.js");
4
4
  const require_CodeEditor = require("../../../../CodeEditor-DaJm0o69.cjs");
5
5
  let react_jsx_runtime = require("react/jsx-runtime");
6
+ let _codemirror_language = require("@codemirror/language");
7
+ let _codemirror_view = require("@codemirror/view");
6
8
  // src/domains/traces/components/span-payload/span-payload-json.tsx
9
+ /** A top-level key or item in `JSON.stringify(value, null, 2)` output. */
10
+ var TOP_LEVEL_LINE = /^ {2}\S/;
11
+ /** Folds the value of every top-level key or item, so the payload opens on its outline. */
12
+ var foldNestedValues = [_codemirror_view.ViewPlugin.define((view) => {
13
+ queueMicrotask(() => {
14
+ const { state } = view;
15
+ (0, _codemirror_language.ensureSyntaxTree)(state, state.doc.length, 200);
16
+ const effects = [];
17
+ for (let number = 2; number < state.doc.lines; number++) {
18
+ const line = state.doc.line(number);
19
+ if (!TOP_LEVEL_LINE.test(line.text)) continue;
20
+ const range = (0, _codemirror_language.foldable)(state, line.from, line.to);
21
+ if (range) effects.push(_codemirror_language.foldEffect.of(range));
22
+ }
23
+ if (effects.length > 0) view.dispatch({ effects });
24
+ });
25
+ return {};
26
+ })];
7
27
  /** Fallback renderer: pretty-printed JSON for any payload core does not describe in more detail. */
8
- function SpanPayloadJson({ value, bare = false, className }) {
28
+ function SpanPayloadJson({ value, bare = false, foldNested = false, className }) {
9
29
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_CodeEditor.CodeEditor, {
10
30
  value: JSON.stringify(value ?? null, null, 2),
11
31
  language: "json",
@@ -15,6 +35,7 @@ function SpanPayloadJson({ value, bare = false, className }) {
15
35
  variant: "embedded",
16
36
  "aria-label": "JSON payload",
17
37
  "data-slot": "span-payload-json",
38
+ extensions: foldNested ? foldNestedValues : void 0,
18
39
  className: require_utils.cn(!bare && require_utils.cn("bg-card hover:bg-card active:bg-card shadow-raised [--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--field-rim-on-surface)]", "rounded-lg p-3"), className)
19
40
  });
20
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"span-payload-json.cjs.js","names":["CodeEditor","cn"],"sources":["../../../../../src/domains/traces/components/span-payload/span-payload-json.tsx"],"sourcesContent":["import { CodeEditor } from '@/ds/components/CodeEditor';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface SpanPayloadJsonProps {\n value: unknown;\n /** Drops the surface and padding, for JSON that sits in an already framed container. */\n bare?: boolean;\n className?: string;\n}\n\n/** Fallback renderer: pretty-printed JSON for any payload core does not describe in more detail. */\nexport function SpanPayloadJson({ value, bare = false, className }: SpanPayloadJsonProps) {\n return (\n <CodeEditor\n value={JSON.stringify(value ?? null, null, 2)}\n language=\"json\"\n editable={false}\n lineNumbers={false}\n showCopyButton={false}\n variant=\"embedded\"\n aria-label=\"JSON payload\"\n data-slot=\"span-payload-json\"\n className={cn(!bare && cn(raisedSurfaceStyle, 'rounded-lg p-3'), className)}\n />\n );\n}\n"],"mappings":";;;;;;;AAYA,SAAgB,gBAAgB,EAAE,OAAO,OAAO,OAAO,aAAmC;CACxF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,mBAAAA,YAAD;EACE,OAAO,KAAK,UAAU,SAAS,MAAM,MAAM,CAAC;EAC5C,UAAS;EACT,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,SAAQ;EACR,cAAW;EACX,aAAU;EACV,WAAWC,cAAAA,GAAG,CAAC,QAAQA,cAAAA,GAAAA,6KAAuB,gBAAgB,GAAG,SAAS;CAC3E,CAAA;AAEL"}
1
+ {"version":3,"file":"span-payload-json.cjs.js","names":["ViewPlugin","foldable","foldEffect","CodeEditor","cn"],"sources":["../../../../../src/domains/traces/components/span-payload/span-payload-json.tsx"],"sourcesContent":["import { ensureSyntaxTree, foldEffect, foldable } from '@codemirror/language';\nimport type { StateEffect } from '@codemirror/state';\nimport { ViewPlugin } from '@codemirror/view';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\n/** A top-level key or item in `JSON.stringify(value, null, 2)` output. */\nconst TOP_LEVEL_LINE = /^ {2}\\S/;\n\n/** Folds the value of every top-level key or item, so the payload opens on its outline. */\nconst foldNestedValues = [\n ViewPlugin.define(view => {\n // A view cannot be updated while it is being constructed.\n queueMicrotask(() => {\n const { state } = view;\n ensureSyntaxTree(state, state.doc.length, 200);\n const effects: StateEffect<unknown>[] = [];\n for (let number = 2; number < state.doc.lines; number++) {\n const line = state.doc.line(number);\n if (!TOP_LEVEL_LINE.test(line.text)) continue;\n const range = foldable(state, line.from, line.to);\n if (range) effects.push(foldEffect.of(range));\n }\n if (effects.length > 0) view.dispatch({ effects });\n });\n return {};\n }),\n];\n\nexport interface SpanPayloadJsonProps {\n value: unknown;\n /** Drops the surface and padding, for JSON that sits in an already framed container. */\n bare?: boolean;\n /** Opens with every top-level value folded, leaving only the keys. */\n foldNested?: boolean;\n className?: string;\n}\n\n/** Fallback renderer: pretty-printed JSON for any payload core does not describe in more detail. */\nexport function SpanPayloadJson({ value, bare = false, foldNested = false, className }: SpanPayloadJsonProps) {\n return (\n <CodeEditor\n value={JSON.stringify(value ?? null, null, 2)}\n language=\"json\"\n editable={false}\n lineNumbers={false}\n showCopyButton={false}\n variant=\"embedded\"\n aria-label=\"JSON payload\"\n data-slot=\"span-payload-json\"\n extensions={foldNested ? foldNestedValues : undefined}\n className={cn(!bare && cn(raisedSurfaceStyle, 'rounded-lg p-3'), className)}\n />\n );\n}\n"],"mappings":";;;;;;;;;AAQA,IAAM,iBAAiB;;AAGvB,IAAM,mBAAmB,CACvBA,iBAAAA,WAAW,QAAO,SAAQ;CAExB,qBAAqB;EACnB,MAAM,EAAE,UAAU;EAClB,CAAA,GAAA,qBAAA,iBAAA,CAAiB,OAAO,MAAM,IAAI,QAAQ,GAAG;EAC7C,MAAM,UAAkC,CAAC;EACzC,KAAK,IAAI,SAAS,GAAG,SAAS,MAAM,IAAI,OAAO,UAAU;GACvD,MAAM,OAAO,MAAM,IAAI,KAAK,MAAM;GAClC,IAAI,CAAC,eAAe,KAAK,KAAK,IAAI,GAAG;GACrC,MAAM,SAAA,GAAQC,qBAAAA,SAAAA,CAAS,OAAO,KAAK,MAAM,KAAK,EAAE;GAChD,IAAI,OAAO,QAAQ,KAAKC,qBAAAA,WAAW,GAAG,KAAK,CAAC;EAC9C;EACA,IAAI,QAAQ,SAAS,GAAG,KAAK,SAAS,EAAE,QAAQ,CAAC;CACnD,CAAC;CACD,OAAO,CAAC;AACV,CAAC,CACH;;AAYA,SAAgB,gBAAgB,EAAE,OAAO,OAAO,OAAO,aAAa,OAAO,aAAmC;CAC5G,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,mBAAAA,YAAD;EACE,OAAO,KAAK,UAAU,SAAS,MAAM,MAAM,CAAC;EAC5C,UAAS;EACT,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,SAAQ;EACR,cAAW;EACX,aAAU;EACV,YAAY,aAAa,mBAAmB,KAAA;EAC5C,WAAWC,cAAAA,GAAG,CAAC,QAAQA,cAAAA,GAAAA,6KAAuB,gBAAgB,GAAG,SAAS;CAC3E,CAAA;AAEL"}
@@ -2,9 +2,29 @@ import { t as cn } from "../../../../utils-DQx8TpNT.js";
2
2
  import "../../../../primitives/raised-surface.es.js";
3
3
  import { t as CodeEditor } from "../../../../CodeEditor-CZC9DMKA.js";
4
4
  import { jsx } from "react/jsx-runtime";
5
+ import { ensureSyntaxTree, foldEffect, foldable } from "@codemirror/language";
6
+ import { ViewPlugin } from "@codemirror/view";
5
7
  // src/domains/traces/components/span-payload/span-payload-json.tsx
8
+ /** A top-level key or item in `JSON.stringify(value, null, 2)` output. */
9
+ var TOP_LEVEL_LINE = /^ {2}\S/;
10
+ /** Folds the value of every top-level key or item, so the payload opens on its outline. */
11
+ var foldNestedValues = [ViewPlugin.define((view) => {
12
+ queueMicrotask(() => {
13
+ const { state } = view;
14
+ ensureSyntaxTree(state, state.doc.length, 200);
15
+ const effects = [];
16
+ for (let number = 2; number < state.doc.lines; number++) {
17
+ const line = state.doc.line(number);
18
+ if (!TOP_LEVEL_LINE.test(line.text)) continue;
19
+ const range = foldable(state, line.from, line.to);
20
+ if (range) effects.push(foldEffect.of(range));
21
+ }
22
+ if (effects.length > 0) view.dispatch({ effects });
23
+ });
24
+ return {};
25
+ })];
6
26
  /** Fallback renderer: pretty-printed JSON for any payload core does not describe in more detail. */
7
- function SpanPayloadJson({ value, bare = false, className }) {
27
+ function SpanPayloadJson({ value, bare = false, foldNested = false, className }) {
8
28
  return /* @__PURE__ */ jsx(CodeEditor, {
9
29
  value: JSON.stringify(value ?? null, null, 2),
10
30
  language: "json",
@@ -14,6 +34,7 @@ function SpanPayloadJson({ value, bare = false, className }) {
14
34
  variant: "embedded",
15
35
  "aria-label": "JSON payload",
16
36
  "data-slot": "span-payload-json",
37
+ extensions: foldNested ? foldNestedValues : void 0,
17
38
  className: cn(!bare && cn("bg-card hover:bg-card active:bg-card shadow-raised [--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--field-rim-on-surface)]", "rounded-lg p-3"), className)
18
39
  });
19
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"span-payload-json.es.js","names":[],"sources":["../../../../../src/domains/traces/components/span-payload/span-payload-json.tsx"],"sourcesContent":["import { CodeEditor } from '@/ds/components/CodeEditor';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport interface SpanPayloadJsonProps {\n value: unknown;\n /** Drops the surface and padding, for JSON that sits in an already framed container. */\n bare?: boolean;\n className?: string;\n}\n\n/** Fallback renderer: pretty-printed JSON for any payload core does not describe in more detail. */\nexport function SpanPayloadJson({ value, bare = false, className }: SpanPayloadJsonProps) {\n return (\n <CodeEditor\n value={JSON.stringify(value ?? null, null, 2)}\n language=\"json\"\n editable={false}\n lineNumbers={false}\n showCopyButton={false}\n variant=\"embedded\"\n aria-label=\"JSON payload\"\n data-slot=\"span-payload-json\"\n className={cn(!bare && cn(raisedSurfaceStyle, 'rounded-lg p-3'), className)}\n />\n );\n}\n"],"mappings":";;;;;;AAYA,SAAgB,gBAAgB,EAAE,OAAO,OAAO,OAAO,aAAmC;CACxF,OACE,oBAAC,YAAD;EACE,OAAO,KAAK,UAAU,SAAS,MAAM,MAAM,CAAC;EAC5C,UAAS;EACT,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,SAAQ;EACR,cAAW;EACX,aAAU;EACV,WAAW,GAAG,CAAC,QAAQ,GAAA,6KAAuB,gBAAgB,GAAG,SAAS;CAC3E,CAAA;AAEL"}
1
+ {"version":3,"file":"span-payload-json.es.js","names":[],"sources":["../../../../../src/domains/traces/components/span-payload/span-payload-json.tsx"],"sourcesContent":["import { ensureSyntaxTree, foldEffect, foldable } from '@codemirror/language';\nimport type { StateEffect } from '@codemirror/state';\nimport { ViewPlugin } from '@codemirror/view';\nimport { CodeEditor } from '@/ds/components/CodeEditor';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\n/** A top-level key or item in `JSON.stringify(value, null, 2)` output. */\nconst TOP_LEVEL_LINE = /^ {2}\\S/;\n\n/** Folds the value of every top-level key or item, so the payload opens on its outline. */\nconst foldNestedValues = [\n ViewPlugin.define(view => {\n // A view cannot be updated while it is being constructed.\n queueMicrotask(() => {\n const { state } = view;\n ensureSyntaxTree(state, state.doc.length, 200);\n const effects: StateEffect<unknown>[] = [];\n for (let number = 2; number < state.doc.lines; number++) {\n const line = state.doc.line(number);\n if (!TOP_LEVEL_LINE.test(line.text)) continue;\n const range = foldable(state, line.from, line.to);\n if (range) effects.push(foldEffect.of(range));\n }\n if (effects.length > 0) view.dispatch({ effects });\n });\n return {};\n }),\n];\n\nexport interface SpanPayloadJsonProps {\n value: unknown;\n /** Drops the surface and padding, for JSON that sits in an already framed container. */\n bare?: boolean;\n /** Opens with every top-level value folded, leaving only the keys. */\n foldNested?: boolean;\n className?: string;\n}\n\n/** Fallback renderer: pretty-printed JSON for any payload core does not describe in more detail. */\nexport function SpanPayloadJson({ value, bare = false, foldNested = false, className }: SpanPayloadJsonProps) {\n return (\n <CodeEditor\n value={JSON.stringify(value ?? null, null, 2)}\n language=\"json\"\n editable={false}\n lineNumbers={false}\n showCopyButton={false}\n variant=\"embedded\"\n aria-label=\"JSON payload\"\n data-slot=\"span-payload-json\"\n extensions={foldNested ? foldNestedValues : undefined}\n className={cn(!bare && cn(raisedSurfaceStyle, 'rounded-lg p-3'), className)}\n />\n );\n}\n"],"mappings":";;;;;;;;AAQA,IAAM,iBAAiB;;AAGvB,IAAM,mBAAmB,CACvB,WAAW,QAAO,SAAQ;CAExB,qBAAqB;EACnB,MAAM,EAAE,UAAU;EAClB,iBAAiB,OAAO,MAAM,IAAI,QAAQ,GAAG;EAC7C,MAAM,UAAkC,CAAC;EACzC,KAAK,IAAI,SAAS,GAAG,SAAS,MAAM,IAAI,OAAO,UAAU;GACvD,MAAM,OAAO,MAAM,IAAI,KAAK,MAAM;GAClC,IAAI,CAAC,eAAe,KAAK,KAAK,IAAI,GAAG;GACrC,MAAM,QAAQ,SAAS,OAAO,KAAK,MAAM,KAAK,EAAE;GAChD,IAAI,OAAO,QAAQ,KAAK,WAAW,GAAG,KAAK,CAAC;EAC9C;EACA,IAAI,QAAQ,SAAS,GAAG,KAAK,SAAS,EAAE,QAAQ,CAAC;CACnD,CAAC;CACD,OAAO,CAAC;AACV,CAAC,CACH;;AAYA,SAAgB,gBAAgB,EAAE,OAAO,OAAO,OAAO,aAAa,OAAO,aAAmC;CAC5G,OACE,oBAAC,YAAD;EACE,OAAO,KAAK,UAAU,SAAS,MAAM,MAAM,CAAC;EAC5C,UAAS;EACT,UAAU;EACV,aAAa;EACb,gBAAgB;EAChB,SAAQ;EACR,cAAW;EACX,aAAU;EACV,YAAY,aAAa,mBAAmB,KAAA;EAC5C,WAAW,GAAG,CAAC,QAAQ,GAAA,6KAAuB,gBAAgB,GAAG,SAAS;CAC3E,CAAA;AAEL"}
@@ -8,7 +8,7 @@ const require_domains_chat_messages_signal_badge = require("../../../chat/messag
8
8
  const require_domains_traces_components_span_payload_span_payload_json = require("./span-payload-json.cjs.js");
9
9
  const require_domains_traces_components_span_payload_available_skills = require("./available-skills.cjs.js");
10
10
  const require_domains_traces_components_span_payload_span_payload_attachment = require("./span-payload-attachment.cjs.js");
11
- const require_span_payload_primitives = require("../../../../span-payload-primitives-rxerCV7Y.cjs");
11
+ const require_span_payload_primitives = require("../../../../span-payload-primitives-DNhjpAtm.cjs");
12
12
  const require_domains_traces_components_span_payload_span_signal_details = require("./span-signal-details.cjs.js");
13
13
  let react_jsx_runtime = require("react/jsx-runtime");
14
14
  // src/domains/traces/components/span-payload/span-payload-messages.tsx
@@ -7,7 +7,7 @@ import { SignalBadge } from "../../../chat/messages/signal-badge.es.js";
7
7
  import { SpanPayloadJson } from "./span-payload-json.es.js";
8
8
  import { parseAvailableSkills } from "./available-skills.es.js";
9
9
  import { SpanPayloadAttachment } from "./span-payload-attachment.es.js";
10
- import { a as SpanPayloadListName, c as SpanPayloadTool, i as SpanPayloadList, n as SpanPayloadField, o as SpanPayloadMarkdown, r as SpanPayloadLabel } from "../../../../span-payload-primitives-Fi1kSYyM.js";
10
+ import { a as SpanPayloadListName, c as SpanPayloadTool, i as SpanPayloadList, n as SpanPayloadField, o as SpanPayloadMarkdown, r as SpanPayloadLabel } from "../../../../span-payload-primitives-CNDSzk1Q.js";
11
11
  import { SignalDetails } from "./span-signal-details.es.js";
12
12
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
13
13
  // src/domains/traces/components/span-payload/span-payload-messages.tsx
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_span_payload_primitives = require("../../../../span-payload-primitives-rxerCV7Y.cjs");
2
+ const require_span_payload_primitives = require("../../../../span-payload-primitives-DNhjpAtm.cjs");
3
3
  exports.SpanPayloadCollapsible = require_span_payload_primitives.SpanPayloadCollapsible;
4
4
  exports.SpanPayloadField = require_span_payload_primitives.SpanPayloadField;
5
5
  exports.SpanPayloadLabel = require_span_payload_primitives.SpanPayloadLabel;
@@ -1 +1 @@
1
- export { t as SpanPayloadCollapsible, n as SpanPayloadField, r as SpanPayloadLabel, i as SpanPayloadList, a as SpanPayloadListName, o as SpanPayloadMarkdown, s as SpanPayloadToolCalls } from "../../../../span-payload-primitives-Fi1kSYyM.js";
1
+ export { t as SpanPayloadCollapsible, n as SpanPayloadField, r as SpanPayloadLabel, i as SpanPayloadList, a as SpanPayloadListName, o as SpanPayloadMarkdown, s as SpanPayloadToolCalls } from "../../../../span-payload-primitives-CNDSzk1Q.js";
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_DataKeysAndValues = require("../../../../DataKeysAndValues-CHQcnHzv.cjs");
3
- const require_domains_traces_components_span_payload_span_payload_json = require("./span-payload-json.cjs.js");
4
3
  const require_domains_traces_components_span_payload_span_payload_registry = require("./span-payload-registry.cjs.js");
5
- const require_span_payload_primitives = require("../../../../span-payload-primitives-rxerCV7Y.cjs");
4
+ const require_domains_traces_components_span_payload_span_payload_json = require("./span-payload-json.cjs.js");
5
+ const require_span_payload_primitives = require("../../../../span-payload-primitives-DNhjpAtm.cjs");
6
6
  const require_domains_traces_components_span_payload_span_payload_messages = require("./span-payload-messages.cjs.js");
7
7
  let react = require("react");
8
8
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -150,15 +150,12 @@ function SpanPayloadProcessor({ value, hidden = [] }) {
150
150
  ]
151
151
  });
152
152
  }
153
- /**
154
- * A processor span's input, without the step and retry count that Attributes
155
- * shows as run context, nor the tools and tool choice the Tools section shows.
156
- */
153
+ /** A processor span's input, without the tools and tool choice the Tools section shows. */
157
154
  function SpanPayloadProcessorInput({ value }) {
158
155
  const toolKeys = "tools" in value.data && require_domains_traces_components_span_payload_span_payload_registry.hasItems(value.data.tools) ? ["tools", "toolChoice"] : [];
159
156
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SpanPayloadProcessor, {
160
157
  value,
161
- hidden: [...Object.keys(require_domains_traces_components_span_payload_span_payload_registry.getProcessorRunContext(value)), ...toolKeys]
158
+ hidden: toolKeys
162
159
  });
163
160
  }
164
161
  exports.SpanPayloadProcessor = SpanPayloadProcessor;
@@ -1 +1 @@
1
- {"version":3,"file":"span-payload-processor.cjs.js","names":["hasItems","SpanPayloadJson","SpanPayloadMessages","SpanPayloadField","SpanPayloadToolCalls","SpanPayloadMarkdown","DataKeysAndValues","Fragment","SpanToolNameValue","SpanPayloadCollapsible","getProcessorRunContext"],"sources":["../../../../../src/domains/traces/components/span-payload/span-payload-processor.tsx"],"sourcesContent":["import type {\n ProcessorRunInputByPhase,\n ProcessorRunOutputByPhase,\n ProcessorSpanPayload,\n SpanInputMessage,\n} from '@mastra/core/observability';\nimport { Fragment } from 'react';\nimport { SpanPayloadJson } from './span-payload-json';\nimport { SpanPayloadMessages } from './span-payload-messages';\nimport {\n SpanPayloadCollapsible,\n SpanPayloadField,\n SpanPayloadMarkdown,\n SpanPayloadToolCalls,\n} from './span-payload-primitives';\nimport { getProcessorRunContext, hasItems } from './span-payload-registry';\nimport { SpanToolNameValue } from './span-payload-tool';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\n\ntype Scalar = string | number | boolean;\n\nconst isScalar = (value: unknown): value is Scalar =>\n typeof value === 'string' || typeof value === 'boolean' || (typeof value === 'number' && Number.isFinite(value));\n\nconst isText = (value: unknown): value is string => typeof value === 'string' && value.length > 0;\n\n/** Message renderers read each message defensively, so any array is a valid list. */\nconst isMessageList = (value: unknown): value is SpanInputMessage[] => Array.isArray(value);\n\nconst listOf = (value: unknown): SpanInputMessage[] => (isMessageList(value) ? value : []);\n\nconst isEmptyList = (value: unknown) => Array.isArray(value) && value.length === 0;\n\n/** Single-line values, shown as labelled rows. Ids get a copy button. */\nconst SCALAR_FIELDS = [\n { key: 'toolName', label: 'Tool' },\n { key: 'toolCallId', label: 'Tool call id', copy: true },\n { key: 'stepNumber', label: 'Step' },\n { key: 'finishReason', label: 'Finish reason' },\n { key: 'totalChunks', label: 'Chunks' },\n { key: 'chunkCount', label: 'Chunks' },\n { key: 'retryCount', label: 'Retries' },\n { key: 'messageId', label: 'Message id', copy: true },\n { key: 'fromCache', label: 'From cache' },\n { key: 'providerExecuted', label: 'Provider executed' },\n] as const;\n\n/** Large secondary context, collapsed because it is rarely why someone opened the span. */\nconst CONTEXT_FIELDS = [\n { key: 'prompt', label: 'Prompt' },\n { key: 'result', label: 'Result' },\n { key: 'model', label: 'Model' },\n { key: 'tools', label: 'Tools' },\n { key: 'toolChoice', label: 'Tool choice' },\n { key: 'activeTools', label: 'Active tools' },\n] as const;\n\n/**\n * Whether the preview places a known key. A known key holding a value of the\n * wrong shape is not placed, so it reaches the reader under \"Other fields\".\n */\nconst PLACES: Record<string, (value: unknown) => boolean> = {\n messages: Array.isArray,\n systemMessages: Array.isArray,\n toolCalls: Array.isArray,\n text: value => typeof value === 'string',\n accumulatedText: value => typeof value === 'string',\n error: value => typeof value === 'string',\n ...Object.fromEntries(SCALAR_FIELDS.map(({ key }) => [key, isScalar])),\n ...Object.fromEntries(CONTEXT_FIELDS.map(({ key }) => [key, (value: unknown) => value !== undefined])),\n};\n\nconst formatScalar = (value: Scalar): string => (typeof value === 'boolean' ? (value ? 'Yes' : 'No') : String(value));\n\nconst withCount = (label: string, value: unknown) => (Array.isArray(value) ? `${label} (${value.length})` : label);\n\nexport interface SpanPayloadProcessorProps {\n value: ProcessorSpanPayload<ProcessorRunInputByPhase> | ProcessorSpanPayload<ProcessorRunOutputByPhase>;\n /** Keys another section already shows; left out of the preview but kept in the raw JSON. */\n hidden?: readonly string[];\n}\n\n/**\n * A processor span's input or output. One renderer serves every phase: the\n * phases share most keys, and each payload carries only the ones its phase\n * records. The phase itself is shown once, in the Attributes preview.\n */\nexport function SpanPayloadProcessor({ value, hidden = [] }: SpanPayloadProcessorProps) {\n const data: Record<string, unknown> = Object.fromEntries(\n Object.entries(value.data).filter(([key]) => !hidden.includes(key)),\n );\n const messages = [...listOf(data.systemMessages), ...listOf(data.messages)];\n const texts = [data.text, data.accumulatedText].filter(isText);\n const scalars = SCALAR_FIELDS.filter(({ key }) => isScalar(data[key]));\n const context = CONTEXT_FIELDS.filter(({ key }) => data[key] !== undefined && !isEmptyList(data[key]));\n const extras = Object.fromEntries(Object.entries(data).filter(([key, field]) => !PLACES[key]?.(field)));\n const hasExtras = Object.keys(extras).length > 0;\n\n const hasContent =\n messages.length > 0 ||\n hasItems(data.toolCalls) ||\n texts.length > 0 ||\n isText(data.error) ||\n scalars.length > 0 ||\n context.length > 0 ||\n hasExtras;\n\n return (\n <div data-slot=\"span-payload-processor\" data-phase={value.phase} className=\"flex flex-col gap-3\">\n {!hasContent && <SpanPayloadJson value={data} />}\n {messages.length > 0 && <SpanPayloadMessages value={messages} />}\n {hasItems(data.toolCalls) && (\n <SpanPayloadField label={`Tool calls (${data.toolCalls.length})`}>\n <SpanPayloadToolCalls toolCalls={data.toolCalls} />\n </SpanPayloadField>\n )}\n {texts.map((text, index) => (\n <SpanPayloadMarkdown key={index}>{text}</SpanPayloadMarkdown>\n ))}\n {isText(data.error) && (\n <SpanPayloadField label=\"Error\">\n <SpanPayloadMarkdown>{data.error}</SpanPayloadMarkdown>\n </SpanPayloadField>\n )}\n {scalars.length > 0 && (\n <DataKeysAndValues>\n {scalars.map(field => {\n const scalar = data[field.key];\n if (!isScalar(scalar)) return null;\n return (\n <Fragment key={field.key}>\n <DataKeysAndValues.Key>{field.label}</DataKeysAndValues.Key>\n {field.key === 'toolName' ? (\n <SpanToolNameValue toolName={String(scalar)} />\n ) : 'copy' in field ? (\n <DataKeysAndValues.ValueWithCopyBtn copyValue={String(scalar)}>\n {formatScalar(scalar)}\n </DataKeysAndValues.ValueWithCopyBtn>\n ) : (\n <DataKeysAndValues.Value>{formatScalar(scalar)}</DataKeysAndValues.Value>\n )}\n </Fragment>\n );\n })}\n </DataKeysAndValues>\n )}\n {context.map(({ key, label }) => (\n <SpanPayloadCollapsible key={key} label={withCount(label, data[key])}>\n <SpanPayloadJson value={data[key]} />\n </SpanPayloadCollapsible>\n ))}\n {hasExtras && (\n <SpanPayloadCollapsible label=\"Other fields\">\n <SpanPayloadJson value={extras} />\n </SpanPayloadCollapsible>\n )}\n </div>\n );\n}\n\n/**\n * A processor span's input, without the step and retry count that Attributes\n * shows as run context, nor the tools and tool choice the Tools section shows.\n */\nexport function SpanPayloadProcessorInput({ value }: { value: ProcessorSpanPayload<ProcessorRunInputByPhase> }) {\n const toolKeys = 'tools' in value.data && hasItems(value.data.tools) ? ['tools', 'toolChoice'] : [];\n return <SpanPayloadProcessor value={value} hidden={[...Object.keys(getProcessorRunContext(value)), ...toolKeys]} />;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"span-payload-processor.cjs.js","names":["hasItems","SpanPayloadJson","SpanPayloadMessages","SpanPayloadField","SpanPayloadToolCalls","SpanPayloadMarkdown","DataKeysAndValues","Fragment","SpanToolNameValue","SpanPayloadCollapsible"],"sources":["../../../../../src/domains/traces/components/span-payload/span-payload-processor.tsx"],"sourcesContent":["import type {\n ProcessorRunInputByPhase,\n ProcessorRunOutputByPhase,\n ProcessorSpanPayload,\n SpanInputMessage,\n} from '@mastra/core/observability';\nimport { Fragment } from 'react';\nimport { SpanPayloadJson } from './span-payload-json';\nimport { SpanPayloadMessages } from './span-payload-messages';\nimport {\n SpanPayloadCollapsible,\n SpanPayloadField,\n SpanPayloadMarkdown,\n SpanPayloadToolCalls,\n} from './span-payload-primitives';\nimport { hasItems } from './span-payload-registry';\nimport { SpanToolNameValue } from './span-payload-tool';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\n\ntype Scalar = string | number | boolean;\n\nconst isScalar = (value: unknown): value is Scalar =>\n typeof value === 'string' || typeof value === 'boolean' || (typeof value === 'number' && Number.isFinite(value));\n\nconst isText = (value: unknown): value is string => typeof value === 'string' && value.length > 0;\n\n/** Message renderers read each message defensively, so any array is a valid list. */\nconst isMessageList = (value: unknown): value is SpanInputMessage[] => Array.isArray(value);\n\nconst listOf = (value: unknown): SpanInputMessage[] => (isMessageList(value) ? value : []);\n\nconst isEmptyList = (value: unknown) => Array.isArray(value) && value.length === 0;\n\n/** Single-line values, shown as labelled rows. Ids get a copy button. */\nconst SCALAR_FIELDS = [\n { key: 'toolName', label: 'Tool' },\n { key: 'toolCallId', label: 'Tool call id', copy: true },\n { key: 'stepNumber', label: 'Step' },\n { key: 'finishReason', label: 'Finish reason' },\n { key: 'totalChunks', label: 'Chunks' },\n { key: 'chunkCount', label: 'Chunks' },\n { key: 'retryCount', label: 'Retries' },\n { key: 'messageId', label: 'Message id', copy: true },\n { key: 'fromCache', label: 'From cache' },\n { key: 'providerExecuted', label: 'Provider executed' },\n] as const;\n\n/** Large secondary context, collapsed because it is rarely why someone opened the span. */\nconst CONTEXT_FIELDS = [\n { key: 'prompt', label: 'Prompt' },\n { key: 'result', label: 'Result' },\n { key: 'model', label: 'Model' },\n { key: 'tools', label: 'Tools' },\n { key: 'toolChoice', label: 'Tool choice' },\n { key: 'activeTools', label: 'Active tools' },\n] as const;\n\n/**\n * Whether the preview places a known key. A known key holding a value of the\n * wrong shape is not placed, so it reaches the reader under \"Other fields\".\n */\nconst PLACES: Record<string, (value: unknown) => boolean> = {\n messages: Array.isArray,\n systemMessages: Array.isArray,\n toolCalls: Array.isArray,\n text: value => typeof value === 'string',\n accumulatedText: value => typeof value === 'string',\n error: value => typeof value === 'string',\n ...Object.fromEntries(SCALAR_FIELDS.map(({ key }) => [key, isScalar])),\n ...Object.fromEntries(CONTEXT_FIELDS.map(({ key }) => [key, (value: unknown) => value !== undefined])),\n};\n\nconst formatScalar = (value: Scalar): string => (typeof value === 'boolean' ? (value ? 'Yes' : 'No') : String(value));\n\nconst withCount = (label: string, value: unknown) => (Array.isArray(value) ? `${label} (${value.length})` : label);\n\nexport interface SpanPayloadProcessorProps {\n value: ProcessorSpanPayload<ProcessorRunInputByPhase> | ProcessorSpanPayload<ProcessorRunOutputByPhase>;\n /** Keys another section already shows; left out of the preview but kept in the raw JSON. */\n hidden?: readonly string[];\n}\n\n/**\n * A processor span's input or output. One renderer serves every phase: the\n * phases share most keys, and each payload carries only the ones its phase\n * records. The phase itself is shown once, in the Attributes preview.\n */\nexport function SpanPayloadProcessor({ value, hidden = [] }: SpanPayloadProcessorProps) {\n const data: Record<string, unknown> = Object.fromEntries(\n Object.entries(value.data).filter(([key]) => !hidden.includes(key)),\n );\n const messages = [...listOf(data.systemMessages), ...listOf(data.messages)];\n const texts = [data.text, data.accumulatedText].filter(isText);\n const scalars = SCALAR_FIELDS.filter(({ key }) => isScalar(data[key]));\n const context = CONTEXT_FIELDS.filter(({ key }) => data[key] !== undefined && !isEmptyList(data[key]));\n const extras = Object.fromEntries(Object.entries(data).filter(([key, field]) => !PLACES[key]?.(field)));\n const hasExtras = Object.keys(extras).length > 0;\n\n const hasContent =\n messages.length > 0 ||\n hasItems(data.toolCalls) ||\n texts.length > 0 ||\n isText(data.error) ||\n scalars.length > 0 ||\n context.length > 0 ||\n hasExtras;\n\n return (\n <div data-slot=\"span-payload-processor\" data-phase={value.phase} className=\"flex flex-col gap-3\">\n {!hasContent && <SpanPayloadJson value={data} />}\n {messages.length > 0 && <SpanPayloadMessages value={messages} />}\n {hasItems(data.toolCalls) && (\n <SpanPayloadField label={`Tool calls (${data.toolCalls.length})`}>\n <SpanPayloadToolCalls toolCalls={data.toolCalls} />\n </SpanPayloadField>\n )}\n {texts.map((text, index) => (\n <SpanPayloadMarkdown key={index}>{text}</SpanPayloadMarkdown>\n ))}\n {isText(data.error) && (\n <SpanPayloadField label=\"Error\">\n <SpanPayloadMarkdown>{data.error}</SpanPayloadMarkdown>\n </SpanPayloadField>\n )}\n {scalars.length > 0 && (\n <DataKeysAndValues>\n {scalars.map(field => {\n const scalar = data[field.key];\n if (!isScalar(scalar)) return null;\n return (\n <Fragment key={field.key}>\n <DataKeysAndValues.Key>{field.label}</DataKeysAndValues.Key>\n {field.key === 'toolName' ? (\n <SpanToolNameValue toolName={String(scalar)} />\n ) : 'copy' in field ? (\n <DataKeysAndValues.ValueWithCopyBtn copyValue={String(scalar)}>\n {formatScalar(scalar)}\n </DataKeysAndValues.ValueWithCopyBtn>\n ) : (\n <DataKeysAndValues.Value>{formatScalar(scalar)}</DataKeysAndValues.Value>\n )}\n </Fragment>\n );\n })}\n </DataKeysAndValues>\n )}\n {context.map(({ key, label }) => (\n <SpanPayloadCollapsible key={key} label={withCount(label, data[key])}>\n <SpanPayloadJson value={data[key]} />\n </SpanPayloadCollapsible>\n ))}\n {hasExtras && (\n <SpanPayloadCollapsible label=\"Other fields\">\n <SpanPayloadJson value={extras} />\n </SpanPayloadCollapsible>\n )}\n </div>\n );\n}\n\n/** A processor span's input, without the tools and tool choice the Tools section shows. */\nexport function SpanPayloadProcessorInput({ value }: { value: ProcessorSpanPayload<ProcessorRunInputByPhase> }) {\n const toolKeys = 'tools' in value.data && hasItems(value.data.tools) ? ['tools', 'toolChoice'] : [];\n return <SpanPayloadProcessor value={value} hidden={toolKeys} />;\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { t as DataKeysAndValues } from "../../../../DataKeysAndValues-B2jquIjh.js";
2
+ import { hasItems } from "./span-payload-registry.es.js";
2
3
  import { SpanPayloadJson } from "./span-payload-json.es.js";
3
- import { getProcessorRunContext, hasItems } from "./span-payload-registry.es.js";
4
- import { l as SpanToolNameValue, n as SpanPayloadField, o as SpanPayloadMarkdown, s as SpanPayloadToolCalls, t as SpanPayloadCollapsible } from "../../../../span-payload-primitives-Fi1kSYyM.js";
4
+ import { l as SpanToolNameValue, n as SpanPayloadField, o as SpanPayloadMarkdown, s as SpanPayloadToolCalls, t as SpanPayloadCollapsible } from "../../../../span-payload-primitives-CNDSzk1Q.js";
5
5
  import { SpanPayloadMessages } from "./span-payload-messages.es.js";
6
6
  import { Fragment } from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -149,15 +149,12 @@ function SpanPayloadProcessor({ value, hidden = [] }) {
149
149
  ]
150
150
  });
151
151
  }
152
- /**
153
- * A processor span's input, without the step and retry count that Attributes
154
- * shows as run context, nor the tools and tool choice the Tools section shows.
155
- */
152
+ /** A processor span's input, without the tools and tool choice the Tools section shows. */
156
153
  function SpanPayloadProcessorInput({ value }) {
157
154
  const toolKeys = "tools" in value.data && hasItems(value.data.tools) ? ["tools", "toolChoice"] : [];
158
155
  return /* @__PURE__ */ jsx(SpanPayloadProcessor, {
159
156
  value,
160
- hidden: [...Object.keys(getProcessorRunContext(value)), ...toolKeys]
157
+ hidden: toolKeys
161
158
  });
162
159
  }
163
160
  export { SpanPayloadProcessor, SpanPayloadProcessorInput };
@@ -1 +1 @@
1
- {"version":3,"file":"span-payload-processor.es.js","names":[],"sources":["../../../../../src/domains/traces/components/span-payload/span-payload-processor.tsx"],"sourcesContent":["import type {\n ProcessorRunInputByPhase,\n ProcessorRunOutputByPhase,\n ProcessorSpanPayload,\n SpanInputMessage,\n} from '@mastra/core/observability';\nimport { Fragment } from 'react';\nimport { SpanPayloadJson } from './span-payload-json';\nimport { SpanPayloadMessages } from './span-payload-messages';\nimport {\n SpanPayloadCollapsible,\n SpanPayloadField,\n SpanPayloadMarkdown,\n SpanPayloadToolCalls,\n} from './span-payload-primitives';\nimport { getProcessorRunContext, hasItems } from './span-payload-registry';\nimport { SpanToolNameValue } from './span-payload-tool';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\n\ntype Scalar = string | number | boolean;\n\nconst isScalar = (value: unknown): value is Scalar =>\n typeof value === 'string' || typeof value === 'boolean' || (typeof value === 'number' && Number.isFinite(value));\n\nconst isText = (value: unknown): value is string => typeof value === 'string' && value.length > 0;\n\n/** Message renderers read each message defensively, so any array is a valid list. */\nconst isMessageList = (value: unknown): value is SpanInputMessage[] => Array.isArray(value);\n\nconst listOf = (value: unknown): SpanInputMessage[] => (isMessageList(value) ? value : []);\n\nconst isEmptyList = (value: unknown) => Array.isArray(value) && value.length === 0;\n\n/** Single-line values, shown as labelled rows. Ids get a copy button. */\nconst SCALAR_FIELDS = [\n { key: 'toolName', label: 'Tool' },\n { key: 'toolCallId', label: 'Tool call id', copy: true },\n { key: 'stepNumber', label: 'Step' },\n { key: 'finishReason', label: 'Finish reason' },\n { key: 'totalChunks', label: 'Chunks' },\n { key: 'chunkCount', label: 'Chunks' },\n { key: 'retryCount', label: 'Retries' },\n { key: 'messageId', label: 'Message id', copy: true },\n { key: 'fromCache', label: 'From cache' },\n { key: 'providerExecuted', label: 'Provider executed' },\n] as const;\n\n/** Large secondary context, collapsed because it is rarely why someone opened the span. */\nconst CONTEXT_FIELDS = [\n { key: 'prompt', label: 'Prompt' },\n { key: 'result', label: 'Result' },\n { key: 'model', label: 'Model' },\n { key: 'tools', label: 'Tools' },\n { key: 'toolChoice', label: 'Tool choice' },\n { key: 'activeTools', label: 'Active tools' },\n] as const;\n\n/**\n * Whether the preview places a known key. A known key holding a value of the\n * wrong shape is not placed, so it reaches the reader under \"Other fields\".\n */\nconst PLACES: Record<string, (value: unknown) => boolean> = {\n messages: Array.isArray,\n systemMessages: Array.isArray,\n toolCalls: Array.isArray,\n text: value => typeof value === 'string',\n accumulatedText: value => typeof value === 'string',\n error: value => typeof value === 'string',\n ...Object.fromEntries(SCALAR_FIELDS.map(({ key }) => [key, isScalar])),\n ...Object.fromEntries(CONTEXT_FIELDS.map(({ key }) => [key, (value: unknown) => value !== undefined])),\n};\n\nconst formatScalar = (value: Scalar): string => (typeof value === 'boolean' ? (value ? 'Yes' : 'No') : String(value));\n\nconst withCount = (label: string, value: unknown) => (Array.isArray(value) ? `${label} (${value.length})` : label);\n\nexport interface SpanPayloadProcessorProps {\n value: ProcessorSpanPayload<ProcessorRunInputByPhase> | ProcessorSpanPayload<ProcessorRunOutputByPhase>;\n /** Keys another section already shows; left out of the preview but kept in the raw JSON. */\n hidden?: readonly string[];\n}\n\n/**\n * A processor span's input or output. One renderer serves every phase: the\n * phases share most keys, and each payload carries only the ones its phase\n * records. The phase itself is shown once, in the Attributes preview.\n */\nexport function SpanPayloadProcessor({ value, hidden = [] }: SpanPayloadProcessorProps) {\n const data: Record<string, unknown> = Object.fromEntries(\n Object.entries(value.data).filter(([key]) => !hidden.includes(key)),\n );\n const messages = [...listOf(data.systemMessages), ...listOf(data.messages)];\n const texts = [data.text, data.accumulatedText].filter(isText);\n const scalars = SCALAR_FIELDS.filter(({ key }) => isScalar(data[key]));\n const context = CONTEXT_FIELDS.filter(({ key }) => data[key] !== undefined && !isEmptyList(data[key]));\n const extras = Object.fromEntries(Object.entries(data).filter(([key, field]) => !PLACES[key]?.(field)));\n const hasExtras = Object.keys(extras).length > 0;\n\n const hasContent =\n messages.length > 0 ||\n hasItems(data.toolCalls) ||\n texts.length > 0 ||\n isText(data.error) ||\n scalars.length > 0 ||\n context.length > 0 ||\n hasExtras;\n\n return (\n <div data-slot=\"span-payload-processor\" data-phase={value.phase} className=\"flex flex-col gap-3\">\n {!hasContent && <SpanPayloadJson value={data} />}\n {messages.length > 0 && <SpanPayloadMessages value={messages} />}\n {hasItems(data.toolCalls) && (\n <SpanPayloadField label={`Tool calls (${data.toolCalls.length})`}>\n <SpanPayloadToolCalls toolCalls={data.toolCalls} />\n </SpanPayloadField>\n )}\n {texts.map((text, index) => (\n <SpanPayloadMarkdown key={index}>{text}</SpanPayloadMarkdown>\n ))}\n {isText(data.error) && (\n <SpanPayloadField label=\"Error\">\n <SpanPayloadMarkdown>{data.error}</SpanPayloadMarkdown>\n </SpanPayloadField>\n )}\n {scalars.length > 0 && (\n <DataKeysAndValues>\n {scalars.map(field => {\n const scalar = data[field.key];\n if (!isScalar(scalar)) return null;\n return (\n <Fragment key={field.key}>\n <DataKeysAndValues.Key>{field.label}</DataKeysAndValues.Key>\n {field.key === 'toolName' ? (\n <SpanToolNameValue toolName={String(scalar)} />\n ) : 'copy' in field ? (\n <DataKeysAndValues.ValueWithCopyBtn copyValue={String(scalar)}>\n {formatScalar(scalar)}\n </DataKeysAndValues.ValueWithCopyBtn>\n ) : (\n <DataKeysAndValues.Value>{formatScalar(scalar)}</DataKeysAndValues.Value>\n )}\n </Fragment>\n );\n })}\n </DataKeysAndValues>\n )}\n {context.map(({ key, label }) => (\n <SpanPayloadCollapsible key={key} label={withCount(label, data[key])}>\n <SpanPayloadJson value={data[key]} />\n </SpanPayloadCollapsible>\n ))}\n {hasExtras && (\n <SpanPayloadCollapsible label=\"Other fields\">\n <SpanPayloadJson value={extras} />\n </SpanPayloadCollapsible>\n )}\n </div>\n );\n}\n\n/**\n * A processor span's input, without the step and retry count that Attributes\n * shows as run context, nor the tools and tool choice the Tools section shows.\n */\nexport function SpanPayloadProcessorInput({ value }: { value: ProcessorSpanPayload<ProcessorRunInputByPhase> }) {\n const toolKeys = 'tools' in value.data && hasItems(value.data.tools) ? ['tools', 'toolChoice'] : [];\n return <SpanPayloadProcessor value={value} hidden={[...Object.keys(getProcessorRunContext(value)), ...toolKeys]} />;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"span-payload-processor.es.js","names":[],"sources":["../../../../../src/domains/traces/components/span-payload/span-payload-processor.tsx"],"sourcesContent":["import type {\n ProcessorRunInputByPhase,\n ProcessorRunOutputByPhase,\n ProcessorSpanPayload,\n SpanInputMessage,\n} from '@mastra/core/observability';\nimport { Fragment } from 'react';\nimport { SpanPayloadJson } from './span-payload-json';\nimport { SpanPayloadMessages } from './span-payload-messages';\nimport {\n SpanPayloadCollapsible,\n SpanPayloadField,\n SpanPayloadMarkdown,\n SpanPayloadToolCalls,\n} from './span-payload-primitives';\nimport { hasItems } from './span-payload-registry';\nimport { SpanToolNameValue } from './span-payload-tool';\nimport { DataKeysAndValues } from '@/ds/components/DataKeysAndValues';\n\ntype Scalar = string | number | boolean;\n\nconst isScalar = (value: unknown): value is Scalar =>\n typeof value === 'string' || typeof value === 'boolean' || (typeof value === 'number' && Number.isFinite(value));\n\nconst isText = (value: unknown): value is string => typeof value === 'string' && value.length > 0;\n\n/** Message renderers read each message defensively, so any array is a valid list. */\nconst isMessageList = (value: unknown): value is SpanInputMessage[] => Array.isArray(value);\n\nconst listOf = (value: unknown): SpanInputMessage[] => (isMessageList(value) ? value : []);\n\nconst isEmptyList = (value: unknown) => Array.isArray(value) && value.length === 0;\n\n/** Single-line values, shown as labelled rows. Ids get a copy button. */\nconst SCALAR_FIELDS = [\n { key: 'toolName', label: 'Tool' },\n { key: 'toolCallId', label: 'Tool call id', copy: true },\n { key: 'stepNumber', label: 'Step' },\n { key: 'finishReason', label: 'Finish reason' },\n { key: 'totalChunks', label: 'Chunks' },\n { key: 'chunkCount', label: 'Chunks' },\n { key: 'retryCount', label: 'Retries' },\n { key: 'messageId', label: 'Message id', copy: true },\n { key: 'fromCache', label: 'From cache' },\n { key: 'providerExecuted', label: 'Provider executed' },\n] as const;\n\n/** Large secondary context, collapsed because it is rarely why someone opened the span. */\nconst CONTEXT_FIELDS = [\n { key: 'prompt', label: 'Prompt' },\n { key: 'result', label: 'Result' },\n { key: 'model', label: 'Model' },\n { key: 'tools', label: 'Tools' },\n { key: 'toolChoice', label: 'Tool choice' },\n { key: 'activeTools', label: 'Active tools' },\n] as const;\n\n/**\n * Whether the preview places a known key. A known key holding a value of the\n * wrong shape is not placed, so it reaches the reader under \"Other fields\".\n */\nconst PLACES: Record<string, (value: unknown) => boolean> = {\n messages: Array.isArray,\n systemMessages: Array.isArray,\n toolCalls: Array.isArray,\n text: value => typeof value === 'string',\n accumulatedText: value => typeof value === 'string',\n error: value => typeof value === 'string',\n ...Object.fromEntries(SCALAR_FIELDS.map(({ key }) => [key, isScalar])),\n ...Object.fromEntries(CONTEXT_FIELDS.map(({ key }) => [key, (value: unknown) => value !== undefined])),\n};\n\nconst formatScalar = (value: Scalar): string => (typeof value === 'boolean' ? (value ? 'Yes' : 'No') : String(value));\n\nconst withCount = (label: string, value: unknown) => (Array.isArray(value) ? `${label} (${value.length})` : label);\n\nexport interface SpanPayloadProcessorProps {\n value: ProcessorSpanPayload<ProcessorRunInputByPhase> | ProcessorSpanPayload<ProcessorRunOutputByPhase>;\n /** Keys another section already shows; left out of the preview but kept in the raw JSON. */\n hidden?: readonly string[];\n}\n\n/**\n * A processor span's input or output. One renderer serves every phase: the\n * phases share most keys, and each payload carries only the ones its phase\n * records. The phase itself is shown once, in the Attributes preview.\n */\nexport function SpanPayloadProcessor({ value, hidden = [] }: SpanPayloadProcessorProps) {\n const data: Record<string, unknown> = Object.fromEntries(\n Object.entries(value.data).filter(([key]) => !hidden.includes(key)),\n );\n const messages = [...listOf(data.systemMessages), ...listOf(data.messages)];\n const texts = [data.text, data.accumulatedText].filter(isText);\n const scalars = SCALAR_FIELDS.filter(({ key }) => isScalar(data[key]));\n const context = CONTEXT_FIELDS.filter(({ key }) => data[key] !== undefined && !isEmptyList(data[key]));\n const extras = Object.fromEntries(Object.entries(data).filter(([key, field]) => !PLACES[key]?.(field)));\n const hasExtras = Object.keys(extras).length > 0;\n\n const hasContent =\n messages.length > 0 ||\n hasItems(data.toolCalls) ||\n texts.length > 0 ||\n isText(data.error) ||\n scalars.length > 0 ||\n context.length > 0 ||\n hasExtras;\n\n return (\n <div data-slot=\"span-payload-processor\" data-phase={value.phase} className=\"flex flex-col gap-3\">\n {!hasContent && <SpanPayloadJson value={data} />}\n {messages.length > 0 && <SpanPayloadMessages value={messages} />}\n {hasItems(data.toolCalls) && (\n <SpanPayloadField label={`Tool calls (${data.toolCalls.length})`}>\n <SpanPayloadToolCalls toolCalls={data.toolCalls} />\n </SpanPayloadField>\n )}\n {texts.map((text, index) => (\n <SpanPayloadMarkdown key={index}>{text}</SpanPayloadMarkdown>\n ))}\n {isText(data.error) && (\n <SpanPayloadField label=\"Error\">\n <SpanPayloadMarkdown>{data.error}</SpanPayloadMarkdown>\n </SpanPayloadField>\n )}\n {scalars.length > 0 && (\n <DataKeysAndValues>\n {scalars.map(field => {\n const scalar = data[field.key];\n if (!isScalar(scalar)) return null;\n return (\n <Fragment key={field.key}>\n <DataKeysAndValues.Key>{field.label}</DataKeysAndValues.Key>\n {field.key === 'toolName' ? (\n <SpanToolNameValue toolName={String(scalar)} />\n ) : 'copy' in field ? (\n <DataKeysAndValues.ValueWithCopyBtn copyValue={String(scalar)}>\n {formatScalar(scalar)}\n </DataKeysAndValues.ValueWithCopyBtn>\n ) : (\n <DataKeysAndValues.Value>{formatScalar(scalar)}</DataKeysAndValues.Value>\n )}\n </Fragment>\n );\n })}\n </DataKeysAndValues>\n )}\n {context.map(({ key, label }) => (\n <SpanPayloadCollapsible key={key} label={withCount(label, data[key])}>\n <SpanPayloadJson value={data[key]} />\n </SpanPayloadCollapsible>\n ))}\n {hasExtras && (\n <SpanPayloadCollapsible label=\"Other fields\">\n <SpanPayloadJson value={extras} />\n </SpanPayloadCollapsible>\n )}\n </div>\n );\n}\n\n/** A processor span's input, without the tools and tool choice the Tools section shows. */\nexport function SpanPayloadProcessorInput({ value }: { value: ProcessorSpanPayload<ProcessorRunInputByPhase> }) {\n const toolKeys = 'tools' in value.data && hasItems(value.data.tools) ? ['tools', 'toolChoice'] : [];\n return <SpanPayloadProcessor value={value} hidden={toolKeys} />;\n}\n"],"mappings":"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"}
@@ -23,6 +23,26 @@ var hasItems = (value) => Array.isArray(value) && value.length > 0;
23
23
  function hasSpanInputPreview(span) {
24
24
  return require_domains_traces_utils_span_signal.getSpanSignal(span) !== void 0 || (0, _mastra_core_observability.describeSpanInput)(asCoreSpan(span))?.type !== "json";
25
25
  }
26
+ var hasText = (value) => typeof value === "string" && value.length > 0;
27
+ /**
28
+ * Whether a span's output has a rendered preview, rather than only its raw JSON.
29
+ * A model result that only asked for tools has nothing to preview: its calls are listed under Tool calls.
30
+ */
31
+ function hasSpanOutputPreview(span) {
32
+ const description = (0, _mastra_core_observability.describeSpanOutput)(asCoreSpan(span));
33
+ switch (description?.type) {
34
+ case "json": return false;
35
+ case "model-step-result": {
36
+ const { text, object, steps } = description.value;
37
+ return hasText(text) || object !== void 0 || hasItems(steps);
38
+ }
39
+ case "model-generation-result": {
40
+ const { text, reasoningText, reasoning, object, sources, files, warnings } = description.value;
41
+ return hasText(text) || typeof reasoningText === "string" || reasoning !== void 0 || object !== void 0 || hasItems(sources) || hasItems(files) || hasItems(warnings);
42
+ }
43
+ default: return true;
44
+ }
45
+ }
26
46
  var isEmptyObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value) && Object.keys(value).length === 0;
27
47
  /**
28
48
  * Whether a processor ran the span. A processor can retype its span (memory
@@ -37,24 +57,6 @@ function getSpanOutputPayload(span) {
37
57
  if (isEmptyObject(span.output) && (span.spanType === _mastra_core_observability.SpanType.MODEL_CHUNK || isProcessorSpan(span))) return;
38
58
  return span.output;
39
59
  }
40
- var isCount = (value) => typeof value === "number" && Number.isFinite(value);
41
- /**
42
- * Where in the generation the hook ran. The runner hands these values to every
43
- * hook, so they are recorded in `input`, but they describe the run rather than
44
- * what the processor read: Attributes shows them and the input preview skips them.
45
- * A key is present only when it holds a well-formed value, so a malformed one stays in the input.
46
- */
47
- function getProcessorRunContext(input) {
48
- const { data } = input;
49
- const stepNumber = "stepNumber" in data ? data.stepNumber : void 0;
50
- const retryCount = "retryCount" in data ? data.retryCount : void 0;
51
- const messageId = "messageId" in data ? data.messageId : void 0;
52
- return {
53
- ...isCount(stepNumber) ? { stepNumber } : {},
54
- ...isCount(retryCount) ? { retryCount } : {},
55
- ...typeof messageId === "string" && messageId.length > 0 ? { messageId } : {}
56
- };
57
- }
58
60
  var DELEGATED_TOOL = /^(workflow|agent)-(.+)$/;
59
61
  /**
60
62
  * The workflow or sub-agent behind a tool name, if it is one. Agents expose each
@@ -111,11 +113,11 @@ function getSpanTools(span) {
111
113
  exports.asCoreSpan = asCoreSpan;
112
114
  exports.getDelegatedTool = getDelegatedTool;
113
115
  exports.getDelegatedToolHref = getDelegatedToolHref;
114
- exports.getProcessorRunContext = getProcessorRunContext;
115
116
  exports.getSpanOutputPayload = getSpanOutputPayload;
116
117
  exports.getSpanTools = getSpanTools;
117
118
  exports.hasItems = hasItems;
118
119
  exports.hasSpanInputPreview = hasSpanInputPreview;
120
+ exports.hasSpanOutputPreview = hasSpanOutputPreview;
119
121
  exports.pickRenderer = pickRenderer;
120
122
 
121
123
  //# sourceMappingURL=span-payload-registry.cjs.js.map