@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.
- package/dist/domains/traces/components/format-trace-thread-messages.cjs.js +52 -0
- package/dist/domains/traces/components/format-trace-thread-messages.cjs.js.map +1 -1
- package/dist/domains/traces/components/format-trace-thread-messages.es.js +51 -1
- package/dist/domains/traces/components/format-trace-thread-messages.es.js.map +1 -1
- package/dist/domains/traces/components/read-only-tool-call-provider.cjs.js +23 -0
- package/dist/domains/traces/components/read-only-tool-call-provider.cjs.js.map +1 -0
- package/dist/domains/traces/components/read-only-tool-call-provider.d.ts +1 -0
- package/dist/domains/traces/components/read-only-tool-call-provider.es.js +22 -0
- package/dist/domains/traces/components/read-only-tool-call-provider.es.js.map +1 -0
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +123 -67
- package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-data-panel-view.es.js +131 -75
- package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
- package/dist/domains/traces/components/span-details-view.cjs.js +19 -11
- package/dist/domains/traces/components/span-details-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-details-view.es.js +22 -14
- package/dist/domains/traces/components/span-details-view.es.js.map +1 -1
- package/dist/domains/traces/components/span-outcome.cjs.js +78 -0
- package/dist/domains/traces/components/span-outcome.cjs.js.map +1 -0
- package/dist/domains/traces/components/span-outcome.d.ts +1 -0
- package/dist/domains/traces/components/span-outcome.es.js +77 -0
- package/dist/domains/traces/components/span-outcome.es.js.map +1 -0
- package/dist/domains/traces/components/span-outcome.utils.cjs.js +360 -0
- package/dist/domains/traces/components/span-outcome.utils.cjs.js.map +1 -0
- package/dist/domains/traces/components/span-outcome.utils.d.ts +1 -0
- package/dist/domains/traces/components/span-outcome.utils.es.js +357 -0
- package/dist/domains/traces/components/span-outcome.utils.es.js.map +1 -0
- package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +32 -15
- package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +32 -16
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -10
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -10
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js +22 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.es.js +22 -1
- package/dist/domains/traces/components/span-payload/span-payload-json.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +4 -7
- package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +4 -7
- package/dist/domains/traces/components/span-payload/span-payload-processor.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-registry.cjs.js +21 -19
- package/dist/domains/traces/components/span-payload/span-payload-registry.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-registry.es.js +22 -20
- package/dist/domains/traces/components/span-payload/span-payload-registry.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +62 -19
- package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-section.es.js +62 -20
- package/dist/domains/traces/components/span-payload/span-payload-section.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +51 -140
- package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +54 -143
- package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js +99 -0
- package/dist/domains/traces/components/span-payload/span-processor-mutations.cjs.js.map +1 -0
- package/dist/domains/traces/components/span-payload/span-processor-mutations.d.ts +1 -0
- package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js +98 -0
- package/dist/domains/traces/components/span-payload/span-processor-mutations.es.js.map +1 -0
- package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js +48 -3
- package/dist/domains/traces/components/span-payload/span-tools-section.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-tools-section.es.js +48 -5
- package/dist/domains/traces/components/span-payload/span-tools-section.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload.cjs.js +6 -1
- package/dist/domains/traces/components/span-payload.es.js +5 -4
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.es.js +1 -1
- package/dist/domains/traces/components/trace-details-view.cjs.js +1 -1
- package/dist/domains/traces/components/trace-details-view.es.js +1 -1
- package/dist/domains/traces/components/trace-thread-item-view.cjs.js +26 -38
- package/dist/domains/traces/components/trace-thread-item-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-thread-item-view.es.js +26 -38
- package/dist/domains/traces/components/trace-thread-item-view.es.js.map +1 -1
- package/dist/domains/traces/components.cjs.js +7 -2
- package/dist/domains/traces/components.es.js +6 -5
- package/dist/domains/traces/hooks/use-trace-span-navigation.cjs.js +1 -1
- package/dist/domains/traces/hooks/use-trace-span-navigation.es.js +1 -1
- package/dist/domains/traces.cjs.js +7 -2
- package/dist/domains/traces.es.js +6 -5
- package/dist/{span-payload-primitives-Fi1kSYyM.js → span-payload-primitives-CNDSzk1Q.js} +2 -2
- package/dist/{span-payload-primitives-Fi1kSYyM.js.map → span-payload-primitives-CNDSzk1Q.js.map} +1 -1
- package/dist/{span-payload-primitives-rxerCV7Y.cjs → span-payload-primitives-DNhjpAtm.cjs} +2 -2
- package/dist/{span-payload-primitives-rxerCV7Y.cjs.map → span-payload-primitives-DNhjpAtm.cjs.map} +1 -1
- package/dist/src/domains/traces/components/format-trace-thread-messages.d.ts +14 -0
- package/dist/src/domains/traces/components/read-only-tool-call-provider.d.ts +5 -0
- package/dist/src/domains/traces/components/span-outcome.d.ts +15 -0
- package/dist/src/domains/traces/components/span-outcome.utils.d.ts +32 -0
- package/dist/src/domains/traces/components/span-payload/index.d.ts +4 -3
- package/dist/src/domains/traces/components/span-payload/span-error-renderer.d.ts +2 -0
- package/dist/src/domains/traces/components/span-payload/span-payload-json.d.ts +3 -1
- package/dist/src/domains/traces/components/span-payload/span-payload-processor.d.ts +1 -4
- package/dist/src/domains/traces/components/span-payload/span-payload-registry.d.ts +5 -14
- package/dist/src/domains/traces/components/span-payload/span-payload-section.d.ts +20 -1
- package/dist/src/domains/traces/components/span-payload/span-processor-attributes.d.ts +4 -4
- package/dist/src/domains/traces/components/span-payload/span-processor-mutations.d.ts +5 -0
- package/dist/src/domains/traces/components/span-payload/span-tools-section.d.ts +14 -2
- package/dist/style.css +22 -2
- 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 {
|
|
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
|
|
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 {
|
|
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":"
|
|
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":"
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
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:
|
|
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 {
|
|
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:
|
|
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
|