{"version":3,"sources":["../../_internal-core/src/storage/domains/shared.ts","../../_internal-core/src/storage/domains/observability/logs.ts","../../_internal-core/src/storage/domains/observability/scores.ts","../../_internal-core/src/storage/domains/observability/feedback.ts","../../_internal-core/src/storage/domains/observability/metrics.ts","../../_internal-core/src/storage/domains/observability/discovery.ts","../src/observability/types/tracing.ts","../src/observability/utils.ts"],"names":["EntityType","z","SpanType","InternalSpans","TracingEventType"],"mappings":"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","file":"chunk-LP4WZA6D.cjs","sourcesContent":["import { z } from 'zod/v4';\n\n/** Types of entities that can produce observability spans. */\nexport enum EntityType {\n /** Agent/Model execution */\n AGENT = 'agent',\n /** Scorer definition/execution */\n SCORER = 'scorer',\n /** RAG ingestion pipeline execution */\n RAG_INGESTION = 'rag_ingestion',\n /** Trajectory evaluation target */\n TRAJECTORY = 'trajectory',\n /** Input Processor */\n INPUT_PROCESSOR = 'input_processor',\n /** Input Step Processor */\n INPUT_STEP_PROCESSOR = 'input_step_processor',\n /** Output Processor */\n OUTPUT_PROCESSOR = 'output_processor',\n /** Output Step Processor */\n OUTPUT_STEP_PROCESSOR = 'output_step_processor',\n /** Workflow Step */\n WORKFLOW_STEP = 'workflow_step',\n /** Tool */\n TOOL = 'tool',\n /** Workflow */\n WORKFLOW_RUN = 'workflow_run',\n /** Memory */\n MEMORY = 'memory',\n}\n\n/**\n * Common DB fields\n */\nexport const createdAtField = z.date().describe('Database record creation time');\n\nexport const updatedAtField = z.date().describe('Database record last update time');\n\nexport const dbTimestamps = {\n createdAt: createdAtField,\n updatedAt: updatedAtField.nullable(),\n} as const satisfies z.ZodRawShape;\n\n/**\n * Pagination arguments for list queries (page and perPage only)\n * Uses z.coerce to handle string → number conversion from query params\n */\nexport const paginationArgsSchema = z\n .object({\n page: z.coerce.number().int().min(0).optional().default(0).describe('Zero-indexed page number'),\n perPage: z.coerce.number().int().min(1).max(100).optional().default(10).describe('Number of items per page'),\n })\n .describe('Pagination options for list queries');\n\n/** Input type for pagination arguments (page and perPage). */\nexport type PaginationArgs = z.input;\n\n/**\n * Pagination response info\n * Used across all paginated endpoints\n */\nexport const paginationInfoSchema = z.object({\n total: z.number().describe('Total number of items available'),\n page: z.number().describe('Current page'),\n perPage: z\n .union([z.number(), z.literal(false)])\n .describe('Number of items per page, or false if pagination is disabled'),\n hasMore: z.boolean().describe('True if more pages are available'),\n});\n\n/** Opaque cursor used to resume incremental polling for observability list endpoints. */\nexport const deltaCursorSchema = z.string().min(1).describe('Opaque cursor value for incremental polling');\n\n/** Public delta cursor type used across observability list endpoints. */\nexport type DeltaCursor = z.output;\n\n/** Explicit list mode selector for observability list endpoints. */\nexport const listModeSchema = z\n .enum(['page', 'delta'])\n .describe(\"List mode: 'page' | 'delta', defaults to 'page' when omitted.\");\n\n/** Max number of updates returned from a delta poll window. */\nexport const deltaLimitSchema = z.coerce\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe('Maximum number of updates to return in one delta poll');\n\n/** Default page-mode pagination used to preserve legacy list arg behavior. */\nexport const defaultPaginationArgs = {\n page: 0,\n perPage: 10,\n} as const satisfies z.output;\n\n/** Default number of updates returned when delta mode does not specify a limit. */\nexport const defaultDeltaLimit = 10;\n\ntype ObservabilityListModeValue = {\n mode?: z.output;\n filters?: TFilters;\n pagination?: { page: number; perPage: number };\n orderBy?: TOrderBy;\n after?: DeltaCursor;\n limit?: number;\n};\n\ntype ObservabilityListDefaults = {\n orderBy: TOrderBy;\n pagination?: { page: number; perPage: number };\n limit?: number;\n};\n\ntype NormalizedObservabilityListArgs = {\n mode: 'page' | 'delta';\n filters: TFilters | undefined;\n pagination: { page: number; perPage: number };\n orderBy: TOrderBy;\n after: DeltaCursor | undefined;\n limit: number;\n};\n\n/**\n * Enforces the shared page-vs-delta parameter rules for observability list endpoints.\n * Keeps validation centralized while allowing endpoints to keep their own filters and orderBy schemas.\n */\nexport function refineObservabilityListMode(\n value: ObservabilityListModeValue,\n ctx: z.core.$RefinementCtx,\n) {\n if (value.mode === 'delta') {\n if (value.pagination !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['pagination'], message: 'pagination is not allowed in delta mode' });\n }\n if (value.orderBy !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['orderBy'], message: 'orderBy is not allowed in delta mode' });\n }\n return;\n }\n\n if (value.after !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['after'], message: 'after is only allowed in delta mode' });\n }\n if (value.limit !== undefined) {\n ctx.addIssue({ code: 'custom', path: ['limit'], message: 'limit is only allowed in delta mode' });\n }\n}\n\n/**\n * Normalizes observability list args into the legacy-friendly shape expected by existing stores.\n * Page mode remains the default, and pagination/orderBy/limit are always populated.\n */\nexport function normalizeObservabilityListArgs(\n value: ObservabilityListModeValue,\n defaults: ObservabilityListDefaults,\n): NormalizedObservabilityListArgs {\n return {\n mode: value.mode === 'delta' ? 'delta' : 'page',\n filters: value.filters,\n pagination: value.pagination ?? defaults.pagination ?? defaultPaginationArgs,\n orderBy: value.orderBy ?? defaults.orderBy,\n after: value.after,\n limit: value.limit ?? defaults.limit ?? defaultDeltaLimit,\n };\n}\n\n/** Metadata returned for a delta poll window. */\nexport const deltaInfoSchema = z\n .object({\n limit: z.number().describe('Maximum number of updates requested for this delta poll'),\n hasMore: z.boolean().describe('True when more matching updates remain after this response'),\n })\n .describe('Incremental polling metadata');\n\n/**\n * Date range for filtering by time\n * Uses z.coerce to handle ISO string → Date conversion from query params\n */\nexport const dateRangeSchema = z\n .object({\n start: z.coerce.date().optional().describe('Start of date range (inclusive by default)'),\n end: z.coerce.date().optional().describe('End of date range (inclusive by default)'),\n startExclusive: z\n .boolean()\n .optional()\n .describe('When true, excludes the start date from results (uses > instead of >=)'),\n endExclusive: z\n .boolean()\n .optional()\n .describe('When true, excludes the end date from results (uses < instead of <=)'),\n })\n .describe('Date range filter for timestamps');\n\n/** Date range with optional inclusive/exclusive boundaries. */\nexport type DateRange = z.input;\n\nexport const sortDirectionSchema = z.enum(['ASC', 'DESC']).describe(\"Sort direction: 'ASC' | 'DESC'\");\n\n/** Aggregation type schema shared across OLAP-style observability queries. */\nexport const aggregationTypeSchema = z\n .enum(['sum', 'avg', 'min', 'max', 'count', 'count_distinct', 'last'])\n .describe('Aggregation function');\nexport type AggregationType = z.infer;\n\n/** Aggregation interval schema shared across OLAP-style observability queries. */\nexport const aggregationIntervalSchema = z.enum(['1m', '5m', '15m', '1h', '1d']).describe('Time bucket interval');\nexport type AggregationInterval = z.infer;\n\n/** Compare period for aggregate queries with period-over-period comparison. */\nexport const comparePeriodSchema = z\n .enum(['previous_period', 'previous_day', 'previous_week'])\n .describe('Comparison period for aggregate queries');\nexport type ComparePeriod = z.infer;\n\n/** Shared groupBy schema for OLAP-style breakdown and time-series queries. */\nexport const groupBySchema = z.array(z.string()).min(1).describe('Fields to group by');\nexport type GroupBy = z.infer;\n\n/** Shared percentiles schema for percentile queries. */\nexport const percentilesSchema = z.array(z.number().min(0).max(1)).min(1).describe('Percentile values (0-1)');\nexport type Percentiles = z.infer;\n\n/** Shared fields for aggregate OLAP responses across observability signals. */\nexport const aggregateResponseFields = {\n value: z.number().nullable().describe('Aggregated value'),\n previousValue: z.number().nullable().optional().describe('Value from comparison period'),\n changePercent: z.number().nullable().optional().describe('Percentage change from comparison period'),\n} as const;\n\n/** Shared field for OLAP breakdown dimension values. */\nexport const dimensionsField = z.record(z.string(), z.string().nullable()).describe('Dimension values for this group');\n\n/** Shared field for non-null OLAP aggregated values. */\nexport const aggregatedValueField = z.number().describe('Aggregated value');\n\n/** Shared field for OLAP bucket timestamps. */\nexport const bucketTimestampField = z.date().describe('Bucket timestamp');\n\n/** Shared field for percentile identifiers in OLAP responses. */\nexport const percentileField = z.number().describe('Percentile value');\n\n/** Shared field for percentile values within a time bucket. */\nexport const percentileBucketValueField = z.number().describe('Percentile value at this bucket');\n\nexport const entityTypeField = z\n .nativeEnum(EntityType)\n .describe(`Entity type (e.g., 'agent' | 'processor' | 'tool' | 'workflow')`);\n\nexport const entityIdField = z.string().describe('ID of the entity (e.g., \"weatherAgent\", \"orderWorkflow\")');\n\nexport const entityNameField = z.string().describe('Name of the entity');\n\nexport const userIdField = z.string().describe('Human end-user who triggered execution');\n\nexport const organizationIdField = z.string().describe('Multi-tenant organization/account');\n\nexport const resourceIdField = z.string().describe('Broader resource context (Mastra memory compatibility)');\n\nexport const runIdField = z.string().describe('Unique execution run identifier');\n\nexport const sessionIdField = z.string().describe('Session identifier for grouping traces');\n\nexport const threadIdField = z.string().describe('Conversation thread identifier');\n\nexport const requestIdField = z.string().describe('HTTP request ID for log correlation');\n\nexport const environmentField = z.string().describe(`Environment (e.g., \"production\" | \"staging\" | \"development\")`);\n\nexport const sourceField = z.string().describe(`Source of execution (e.g., \"local\" | \"cloud\" | \"ci\")`);\nexport const executionSourceField = z.string().describe(`Source of execution (e.g., \"local\" | \"cloud\" | \"ci\")`);\n\nexport const serviceNameField = z.string().describe('Name of the service');\n\n// Parent entity hierarchy fields\nexport const parentEntityTypeField = z.nativeEnum(EntityType).describe('Entity type of the parent entity');\nexport const parentEntityIdField = z.string().describe('ID of the parent entity');\nexport const parentEntityNameField = z.string().describe('Name of the parent entity');\n\n// Root entity hierarchy fields\nexport const rootEntityTypeField = z.nativeEnum(EntityType).describe('Entity type of the root entity');\nexport const rootEntityIdField = z.string().describe('ID of the root entity');\nexport const rootEntityNameField = z.string().describe('Name of the root entity');\n\n// Entity versioning\nexport const entityVersionIdField = z\n .string()\n .describe('Version ID of the entity that produced this signal (e.g., agent version, workflow version)');\nexport const parentEntityVersionIdField = z\n .string()\n .describe('Version ID of the parent entity that produced this signal');\nexport const rootEntityVersionIdField = z.string().describe('Version ID of the root entity that produced this signal');\n\n// Experimentation\nexport const experimentIdField = z.string().describe('Experiment or eval run identifier');\n\n// ============================================================================\n// Common observability fields (shared across tracing, metrics, logs)\n// ============================================================================\n\nexport const scopeField = z\n .record(z.string(), z.unknown())\n .describe('Arbitrary package/app version info (e.g., {\"core\": \"1.0.0\", \"memory\": \"1.0.0\", \"gitSha\": \"abcd1234\"})');\n\nexport const metadataField = z.record(z.string(), z.unknown()).describe('User-defined metadata for custom filtering');\n\nexport const tagsField = z.array(z.string()).describe('Labels for filtering');\n\n/**\n * Base context fields shared across tracing and non-tracing observability records.\n * Source/provenance is intentionally excluded because tracing uses `source`\n * while signals use `executionSource`.\n */\nconst contextFieldsBase = {\n // Entity identification\n entityType: entityTypeField.nullish(),\n entityId: entityIdField.nullish(),\n entityName: entityNameField.nullish(),\n\n // Parent entity hierarchy\n parentEntityType: parentEntityTypeField.nullish(),\n parentEntityId: parentEntityIdField.nullish(),\n parentEntityName: parentEntityNameField.nullish(),\n\n // Root entity hierarchy\n rootEntityType: rootEntityTypeField.nullish(),\n rootEntityId: rootEntityIdField.nullish(),\n rootEntityName: rootEntityNameField.nullish(),\n\n // Identity & tenancy\n userId: userIdField.nullish(),\n organizationId: organizationIdField.nullish(),\n resourceId: resourceIdField.nullish(),\n\n // Correlation IDs\n runId: runIdField.nullish(),\n sessionId: sessionIdField.nullish(),\n threadId: threadIdField.nullish(),\n requestId: requestIdField.nullish(),\n\n // Deployment context\n environment: environmentField.nullish(),\n serviceName: serviceNameField.nullish(),\n scope: scopeField.nullish(),\n\n // Entity versioning\n entityVersionId: entityVersionIdField.nullish(),\n parentEntityVersionId: parentEntityVersionIdField.nullish(),\n rootEntityVersionId: rootEntityVersionIdField.nullish(),\n\n // Experimentation\n experimentId: experimentIdField.nullish(),\n} as const;\n\n/**\n * Context fields shared across observability signals other than spans (metrics, logs, scores, feedback).\n * These use `executionSource` to avoid colliding with signal-specific provenance fields.\n */\nexport const contextFields = {\n ...contextFieldsBase,\n executionSource: executionSourceField.nullish(),\n tags: tagsField.nullish(),\n} as const;\n\n/**\n * Context fields used by tracing/span records.\n * Tracing continues to expose execution provenance as `source`.\n */\nexport const spanContextFields = {\n ...contextFieldsBase,\n source: sourceField.nullish(),\n} as const;\n\n/**\n * Common filter fields shared across observability signal filters (metrics, logs, scores, feedback).\n * All fields are optional — each signal extends this with signal-specific filters.\n */\nexport const commonFilterFields = {\n timestamp: dateRangeSchema.optional().describe('Filter by timestamp range'),\n traceId: z.string().optional().describe('Filter by trace ID'),\n spanId: z.string().optional().describe('Filter by span ID'),\n entityType: entityTypeField.optional(),\n entityName: entityNameField.optional(),\n entityVersionId: entityVersionIdField.optional(),\n parentEntityVersionId: parentEntityVersionIdField.optional(),\n rootEntityVersionId: rootEntityVersionIdField.optional(),\n userId: userIdField.optional(),\n organizationId: organizationIdField.optional(),\n experimentId: experimentIdField.optional(),\n serviceName: serviceNameField.optional(),\n environment: environmentField.optional(),\n parentEntityType: parentEntityTypeField.optional(),\n parentEntityName: parentEntityNameField.optional(),\n rootEntityType: rootEntityTypeField.optional(),\n rootEntityName: rootEntityNameField.optional(),\n resourceId: resourceIdField.optional(),\n runId: runIdField.optional(),\n sessionId: sessionIdField.optional(),\n threadId: threadIdField.optional(),\n requestId: requestIdField.optional(),\n executionSource: executionSourceField.optional(),\n tags: z.array(z.string()).optional().describe('Filter by tags (must have all specified tags)'),\n} as const;\n\n// ============================================================================\n// Tracing identifier fields (shared across scores, feedback, metrics)\n// ============================================================================\n\n/** Zod schema for trace ID field */\nexport const traceIdField = z.string().describe('Unique trace identifier');\n\n/** Zod schema for span ID field */\nexport const spanIdField = z.string().describe('Unique span identifier within a trace');\n","import { z } from 'zod/v4';\nimport {\n commonFilterFields,\n contextFields,\n deltaLimitSchema,\n deltaInfoSchema,\n listModeSchema,\n deltaCursorSchema,\n metadataField,\n normalizeObservabilityListArgs,\n paginationArgsSchema,\n paginationInfoSchema,\n refineObservabilityListMode,\n sortDirectionSchema,\n spanIdField,\n tagsField,\n traceIdField,\n} from '../shared';\n\n// ============================================================================\n// Field Schemas\n// ============================================================================\n\n/** Log level schema for validation */\nexport const logLevelSchema = z.enum(['debug', 'info', 'warn', 'error', 'fatal']);\n\nconst messageField = z.string().describe('Log message');\nconst logDataField = z.record(z.string(), z.unknown()).describe('Structured data attached to the log');\n\n// ============================================================================\n// LogRecord Schema (Storage Format)\n// ============================================================================\n\n/**\n * Schema for logs as stored in the database.\n * Includes all fields from ExportedLog plus storage-specific fields.\n */\nexport const logRecordSchema = z\n .object({\n logId: z.string().nullish().describe('Unique id for this log event'),\n timestamp: z.date().describe('When the log was created'),\n level: logLevelSchema.describe('Log severity level'),\n message: messageField,\n data: logDataField.nullish(),\n\n // Correlation\n traceId: traceIdField.nullish(),\n spanId: spanIdField.nullish(),\n\n // Context fields\n ...contextFields,\n /**\n * @deprecated Use `executionSource` instead.\n */\n source: z.string().nullish().describe('Execution source'),\n\n metadata: metadataField.nullish(),\n })\n .describe('Log record as stored in the database');\n\n/** Log record type for storage */\nexport type LogRecord = z.infer;\n\n// ============================================================================\n// LogRecordInput Schema (User-Facing API)\n// ============================================================================\n\n/**\n * Schema for user-provided log input (minimal required fields).\n * The logger enriches this with context before emitting ExportedLog.\n */\nexport const logRecordInputSchema = z\n .object({\n level: logLevelSchema,\n message: messageField,\n data: logDataField.optional(),\n tags: tagsField.optional(),\n })\n .describe('User-provided log input');\n\n/** User-facing log input type */\nexport type LogRecordInput = z.infer;\n\n// ============================================================================\n// Create Log Schemas\n// ============================================================================\n\n/** Schema for creating a log record */\nexport const createLogRecordSchema = logRecordSchema;\n\n/** Log record for creation (excludes db timestamps) */\nexport type CreateLogRecord = z.infer;\n\n/** Schema for batchCreateLogs operation arguments */\nexport const batchCreateLogsArgsSchema = z\n .object({\n logs: z.array(createLogRecordSchema),\n })\n .describe('Arguments for batch creating logs');\n\n/** Arguments for batch creating logs */\nexport type BatchCreateLogsArgs = z.infer;\n\n// ============================================================================\n// Log Filter Schema\n// ============================================================================\n\n/** Schema for filtering logs in list queries */\nexport const logsFilterSchema = z\n .object({\n ...commonFilterFields,\n\n // Log-specific filters\n /**\n * @deprecated Use `executionSource` instead.\n */\n source: z.string().optional().describe('Filter by execution source'),\n level: z\n .union([logLevelSchema, z.array(logLevelSchema)])\n .optional()\n .describe('Filter by log level(s)'),\n })\n .describe('Filters for querying logs');\n\n/** Filters for querying logs */\nexport type LogsFilter = z.infer;\n\n// ============================================================================\n// List Logs Schemas\n// ============================================================================\n\n/** Fields available for ordering log results */\nexport const logsOrderByFieldSchema = z.enum(['timestamp']).describe(\"Field to order by: 'timestamp'\");\n\n/** Order by configuration for log queries */\nexport const logsOrderBySchema = z\n .object({\n field: logsOrderByFieldSchema.default('timestamp').describe('Field to order by'),\n direction: sortDirectionSchema.default('DESC').describe('Sort direction'),\n })\n .describe('Order by configuration');\n\n/** Schema for listLogs operation arguments */\nexport const listLogsArgsSchema = z\n .object({\n mode: listModeSchema.optional(),\n filters: logsFilterSchema.optional().describe('Optional filters to apply'),\n pagination: paginationArgsSchema.optional(),\n orderBy: logsOrderBySchema.optional(),\n after: deltaCursorSchema.optional(),\n limit: deltaLimitSchema,\n })\n .strict()\n .superRefine(refineObservabilityListMode)\n .transform(value =>\n normalizeObservabilityListArgs>(value, {\n orderBy: { field: 'timestamp', direction: 'DESC' } as const,\n }),\n )\n .describe('Arguments for listing logs');\n\n/** Arguments for listing logs */\nexport type ListLogsArgs = z.input;\n\n/** Schema for listLogs operation response */\nexport const listLogsResponseSchema = z\n .object({\n pagination: paginationInfoSchema.optional(),\n delta: deltaInfoSchema.optional(),\n deltaCursor: deltaCursorSchema.optional(),\n logs: z.array(logRecordSchema),\n })\n .describe('Response from listing logs');\n\n/** Response containing paginated logs */\nexport type ListLogsResponse = z.infer;\n","import { z } from 'zod/v4';\nimport {\n aggregateResponseFields,\n aggregationIntervalSchema,\n aggregationTypeSchema,\n aggregatedValueField,\n bucketTimestampField,\n comparePeriodSchema,\n commonFilterFields,\n deltaLimitSchema,\n deltaInfoSchema,\n experimentIdField,\n contextFields,\n dimensionsField,\n entityTypeField,\n groupBySchema,\n deltaCursorSchema,\n listModeSchema,\n normalizeObservabilityListArgs,\n paginationArgsSchema,\n paginationInfoSchema,\n percentileField,\n percentileBucketValueField,\n percentilesSchema,\n refineObservabilityListMode,\n sortDirectionSchema,\n spanIdField,\n traceIdField,\n} from '../shared';\n\n// ============================================================================\n// Field Schemas\n// ============================================================================\n\nconst scorerIdField = z.string().describe('Identifier of the scorer (e.g., relevance, accuracy)');\nconst scorerNameField = z.string().describe('Display name of the scorer');\nconst scorerVersionField = z.string().describe('Version of the scorer');\nconst scoreSourceField = z.string().describe('How the score was produced (e.g., manual, automated, experiment)');\nconst scoreValueField = z.number().describe('Score value (range defined by scorer)');\nconst scoreReasonField = z.string().describe('Explanation for the score');\n\n// ============================================================================\n// ScoreRecord Schema (Storage Format)\n// ============================================================================\n\n/**\n * Schema for scores as stored in the database.\n * Includes all fields from ExportedScore plus storage-specific fields.\n */\nexport const scoreRecordSchema = z\n .object({\n scoreId: z.string().nullish().describe('Unique id for this score event'),\n timestamp: z.date().describe('When the score was recorded'),\n\n // Target\n traceId: traceIdField.nullish().describe('Trace that anchors the scored target when available'),\n spanId: spanIdField.nullish().describe('Span ID this score applies to'),\n\n // Score data\n scorerId: scorerIdField,\n scorerName: scorerNameField.nullish(),\n scorerVersion: scorerVersionField.nullish(),\n scoreSource: scoreSourceField.nullish(),\n /**\n * @deprecated Use `scoreSource` instead.\n */\n source: scoreSourceField.nullish(),\n score: scoreValueField,\n reason: scoreReasonField.nullish(),\n\n // Context (entity hierarchy, identity, correlation, deployment, experimentation)\n ...contextFields,\n\n /** Trace ID of the scoring run (links to trace that generated this score) */\n scoreTraceId: z.string().nullish().describe('Trace ID of the scoring run for debugging score generation'),\n\n // User-defined metadata (context fields stored here)\n metadata: z.record(z.string(), z.unknown()).nullish().describe('User-defined metadata'),\n })\n .describe('Score record as stored in the database');\n\n/** Score record type for storage */\nexport type ScoreRecord = z.infer;\n\n// ============================================================================\n// ScoreInput Schema (User-Facing API)\n// ============================================================================\n\n/**\n * Schema for user-provided score input (minimal required fields).\n * The span/trace context adds traceId/spanId before emitting ExportedScore.\n */\nexport const scoreInputSchema = z\n .object({\n scorerId: scorerIdField,\n scorerName: scorerNameField.optional(),\n scorerVersion: scorerVersionField.optional(),\n scoreSource: scoreSourceField.optional(),\n /**\n * @deprecated Use `scoreSource` instead.\n */\n source: scoreSourceField.optional(),\n score: scoreValueField,\n reason: scoreReasonField.optional(),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional scorer-specific metadata'),\n experimentId: experimentIdField.optional(),\n scoreTraceId: z.string().optional().describe('Trace ID of the scoring run for debugging score generation'),\n targetEntityType: entityTypeField.optional().describe('Entity type the scorer evaluated when known'),\n })\n .describe('User-provided score input');\n\n/** User-facing score input type */\nexport type ScoreInput = z.infer;\n\n// ============================================================================\n// Create Score Schemas\n// ============================================================================\n\n/** Schema for creating a score record */\nexport const createScoreRecordSchema = scoreRecordSchema;\n\n/** Score record for creation */\nexport type CreateScoreRecord = z.infer;\n\n/** Schema for createScore operation arguments */\nexport const createScoreArgsSchema = z\n .object({\n score: createScoreRecordSchema,\n })\n .describe('Arguments for creating a score');\n\n/** Arguments for creating a score */\nexport type CreateScoreArgs = z.infer;\n\n/** Schema for createScore operation body in client/server */\nexport const createScoreBodySchema = z\n .object({\n score: createScoreRecordSchema.omit({ timestamp: true }),\n })\n .describe('Arguments for creating a score');\n\n/** Body for creating a score in client/server */\nexport type CreateScoreBody = z.infer;\n\n/** Schema for createScore operation response */\nexport const createScoreResponseSchema = z.object({ success: z.boolean() }).describe('Response from creating a score');\n\n/** Response from creating a score */\nexport type CreateScoreResponse = z.infer;\n\n/** Schema for batchCreateScores operation arguments */\nexport const batchCreateScoresArgsSchema = z\n .object({\n scores: z.array(createScoreRecordSchema),\n })\n .describe('Arguments for batch recording scores');\n\n/** Arguments for batch creating scores */\nexport type BatchCreateScoresArgs = z.infer;\n\n// ============================================================================\n// Score Filter Schema\n// ============================================================================\n\n/** Schema for filtering scores in list queries */\nexport const scoresFilterSchema = z\n .object({\n ...commonFilterFields,\n\n // Score-specific filters\n scorerId: z\n .union([z.string(), z.array(z.string())])\n .optional()\n .describe('Filter by scorer ID(s)'),\n scoreSource: scoreSourceField.optional().describe('Filter by how the score was produced'),\n /**\n * @deprecated Use `scoreSource` instead.\n */\n source: scoreSourceField.optional().describe('Filter by how the score was produced'),\n })\n .describe('Filters for querying scores');\n\n/** Filters for querying scores */\nexport type ScoresFilter = z.infer;\n\n// ============================================================================\n// List Scores Schemas\n// ============================================================================\n\n/** Fields available for ordering score results */\nexport const scoresOrderByFieldSchema = z\n .enum(['timestamp', 'score'])\n .describe(\"Field to order by: 'timestamp' | 'score'\");\n\n/** Order by configuration for score queries */\nexport const scoresOrderBySchema = z\n .object({\n field: scoresOrderByFieldSchema.default('timestamp').describe('Field to order by'),\n direction: sortDirectionSchema.default('DESC').describe('Sort direction'),\n })\n .describe('Order by configuration');\n\nexport const listScoresArgsSchema = z\n .object({\n mode: listModeSchema.optional(),\n filters: scoresFilterSchema.optional(),\n pagination: paginationArgsSchema.optional(),\n orderBy: scoresOrderBySchema.optional(),\n after: deltaCursorSchema.optional(),\n limit: deltaLimitSchema,\n })\n .strict()\n .superRefine(refineObservabilityListMode)\n .transform(value =>\n normalizeObservabilityListArgs>(value, {\n orderBy: { field: 'timestamp', direction: 'DESC' } as const,\n }),\n )\n .describe('Arguments for listing scores');\n\n/** Arguments for listing scores */\nexport type ListScoresArgs = z.input;\n\n/** Schema for listScores operation response */\nexport const listScoresResponseSchema = z\n .object({\n pagination: paginationInfoSchema.optional(),\n delta: deltaInfoSchema.optional(),\n deltaCursor: deltaCursorSchema.optional(),\n scores: z.array(scoreRecordSchema),\n })\n .describe('Response from listing scores');\n\n/** Response containing paginated scores */\nexport type ListScoresResponse = z.infer;\n\n// ============================================================================\n// OLAP Query Schemas\n// ============================================================================\n\nexport const getScoreAggregateArgsSchema = z\n .object({\n scorerId: scorerIdField,\n scoreSource: scoreSourceField.optional(),\n aggregation: aggregationTypeSchema,\n filters: scoresFilterSchema.optional(),\n comparePeriod: comparePeriodSchema.optional(),\n })\n .describe('Arguments for getting a score aggregate');\n\nexport type GetScoreAggregateArgs = z.infer;\n\nexport const getScoreAggregateResponseSchema = z.object(aggregateResponseFields);\n\nexport type GetScoreAggregateResponse = z.infer;\n\nexport const getScoreBreakdownArgsSchema = z\n .object({\n scorerId: scorerIdField,\n scoreSource: scoreSourceField.optional(),\n groupBy: groupBySchema,\n aggregation: aggregationTypeSchema,\n filters: scoresFilterSchema.optional(),\n })\n .describe('Arguments for getting a score breakdown');\n\nexport type GetScoreBreakdownArgs = z.infer;\n\nexport const getScoreBreakdownResponseSchema = z.object({\n groups: z.array(\n z.object({\n dimensions: dimensionsField,\n value: aggregatedValueField,\n }),\n ),\n});\n\nexport type GetScoreBreakdownResponse = z.infer;\n\nexport const getScoreTimeSeriesArgsSchema = z\n .object({\n scorerId: scorerIdField,\n scoreSource: scoreSourceField.optional(),\n interval: aggregationIntervalSchema,\n aggregation: aggregationTypeSchema,\n filters: scoresFilterSchema.optional(),\n groupBy: groupBySchema.optional(),\n })\n .describe('Arguments for getting score time series');\n\nexport type GetScoreTimeSeriesArgs = z.infer;\n\nexport const getScoreTimeSeriesResponseSchema = z.object({\n series: z.array(\n z.object({\n name: z.string().describe('Series name (scorer ID or group key)'),\n points: z.array(\n z.object({\n timestamp: bucketTimestampField,\n value: aggregatedValueField,\n }),\n ),\n }),\n ),\n});\n\nexport type GetScoreTimeSeriesResponse = z.infer;\n\nexport const getScorePercentilesArgsSchema = z\n .object({\n scorerId: scorerIdField,\n scoreSource: scoreSourceField.optional(),\n percentiles: percentilesSchema,\n interval: aggregationIntervalSchema,\n filters: scoresFilterSchema.optional(),\n })\n .describe('Arguments for getting score percentiles');\n\nexport type GetScorePercentilesArgs = z.infer;\n\nexport const getScorePercentilesResponseSchema = z.object({\n series: z.array(\n z.object({\n percentile: percentileField,\n points: z.array(\n z.object({\n timestamp: bucketTimestampField,\n value: percentileBucketValueField,\n }),\n ),\n }),\n ),\n});\n\nexport type GetScorePercentilesResponse = z.infer;\n","import { z } from 'zod/v4';\nimport {\n aggregateResponseFields,\n aggregationIntervalSchema,\n aggregationTypeSchema,\n aggregatedValueField,\n bucketTimestampField,\n comparePeriodSchema,\n commonFilterFields,\n deltaLimitSchema,\n deltaInfoSchema,\n experimentIdField,\n contextFields,\n dimensionsField,\n groupBySchema,\n deltaCursorSchema,\n listModeSchema,\n normalizeObservabilityListArgs,\n paginationArgsSchema,\n paginationInfoSchema,\n percentileField,\n percentileBucketValueField,\n percentilesSchema,\n refineObservabilityListMode,\n sortDirectionSchema,\n spanIdField,\n traceIdField,\n} from '../shared';\n\n// ============================================================================\n// Field Schemas\n// ============================================================================\n\nconst feedbackSourceField = z.string().describe(\"Source of feedback (e.g., 'user', 'system', 'manual')\");\nconst feedbackTypeField = z.string().describe(\"Type of feedback (e.g., 'thumbs', 'rating', 'correction')\");\nconst feedbackValueField = z\n .union([z.number(), z.string()])\n .describe('Feedback value (rating number or correction text)');\nconst feedbackCommentField = z.string().describe('Additional comment or context');\nconst feedbackUserIdField = z.string().describe('User who provided the feedback');\n\nfunction normalizeLegacyFeedbackActor(input: T): T {\n if (!input || typeof input !== 'object' || Array.isArray(input)) {\n return input;\n }\n\n const record = { ...(input as Record) };\n if (typeof record.userId === 'string' && record.feedbackUserId == null) {\n record.feedbackUserId = record.userId;\n delete record.userId;\n }\n\n return record as T;\n}\n\n// ============================================================================\n// FeedbackRecord Schema (Storage Format)\n// ============================================================================\n\n/**\n * Schema for feedback as stored in the database.\n * Includes all fields from ExportedFeedback plus storage-specific fields.\n */\nconst feedbackRecordObjectSchema = z.object({\n feedbackId: z.string().nullish().describe('Unique id for this feedback event'),\n timestamp: z.date().describe('When the feedback was recorded'),\n\n // Target\n traceId: traceIdField.nullish().describe('Trace that anchors the feedback target when available'),\n spanId: spanIdField.nullish().describe('Span ID this feedback applies to'),\n\n // Feedback data\n feedbackSource: feedbackSourceField.nullish(),\n /**\n * @deprecated Use `feedbackSource` instead.\n */\n source: feedbackSourceField.nullish(),\n feedbackType: feedbackTypeField,\n value: feedbackValueField,\n comment: feedbackCommentField.nullish(),\n\n // Feedback actor identity\n feedbackUserId: feedbackUserIdField.nullish(),\n\n // Context (entity hierarchy, identity, correlation, deployment, experimentation)\n ...contextFields,\n\n // Source linkage (e.g. dataset item result ID)\n sourceId: z\n .string()\n .nullish()\n .describe('ID of the source record this feedback is linked to (e.g. experiment result ID)'),\n\n // User-defined metadata (context fields stored here)\n metadata: z.record(z.string(), z.unknown()).nullish().describe('User-defined metadata'),\n});\n\nexport const feedbackRecordSchema = z\n .object(feedbackRecordObjectSchema.shape)\n .describe('Feedback record as stored in the database');\n\n/** Feedback record type for storage */\nexport type FeedbackRecord = z.infer;\n\n// ============================================================================\n// FeedbackInput Schema (User-Facing API)\n// ============================================================================\n\n/**\n * Schema for user-provided feedback input (minimal required fields).\n * The span/trace context adds traceId/spanId before emitting ExportedFeedback.\n */\nconst feedbackInputObjectSchema = z.object({\n feedbackSource: feedbackSourceField.optional(),\n /**\n * @deprecated Use `feedbackSource` instead.\n */\n source: feedbackSourceField.optional(),\n feedbackType: feedbackTypeField,\n value: feedbackValueField,\n comment: feedbackCommentField.optional(),\n feedbackUserId: feedbackUserIdField.optional(),\n /**\n * @deprecated Use `feedbackUserId` instead.\n */\n userId: feedbackUserIdField.optional(),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional feedback-specific metadata'),\n experimentId: experimentIdField.optional(),\n sourceId: z.string().optional().describe('ID of the source record this feedback is linked to'),\n});\n\nexport const feedbackInputSchema = z.object(feedbackInputObjectSchema.shape).describe('User-provided feedback input');\n\n/** User-facing feedback input type */\nexport type FeedbackInput = z.infer;\n\n// ============================================================================\n// Create Feedback Schemas\n// ============================================================================\n\n/** Schema for creating a feedback record */\nexport const createFeedbackRecordSchema = feedbackRecordSchema;\n\n/** Feedback record for creation */\nexport type CreateFeedbackRecord = z.infer;\n\n/** Schema for createFeedback operation arguments */\nexport const createFeedbackArgsSchema = z\n .object({\n feedback: z.preprocess(normalizeLegacyFeedbackActor, feedbackRecordObjectSchema),\n })\n .describe('Arguments for creating feedback');\n\n/** Arguments for creating feedback */\nexport type CreateFeedbackArgs = z.infer;\n\n/** Schema for createFeedback operation body in client/server */\nexport const createFeedbackBodySchema = z\n .object({\n feedback: feedbackRecordObjectSchema.omit({ timestamp: true }),\n })\n .describe('Arguments for creating feedback');\n\n/** Body for creating feedback in client/server */\nexport type CreateFeedbackBody = z.infer;\n\n/** Schema for createFeedback operation response */\nexport const createFeedbackResponseSchema = z\n .object({ success: z.boolean() })\n .describe('Response from creating feedback');\n\n/** Response from creating feedback */\nexport type CreateFeedbackResponse = z.infer;\n\n/** Schema for batchCreateFeedback operation arguments */\nexport const batchCreateFeedbackArgsSchema = z\n .object({\n feedbacks: z.array(z.preprocess(normalizeLegacyFeedbackActor, feedbackRecordObjectSchema)),\n })\n .describe('Arguments for batch recording feedback');\n\n/** Arguments for batch creating feedback */\nexport type BatchCreateFeedbackArgs = z.infer;\n\n// ============================================================================\n// Feedback Filter Schema\n// ============================================================================\n\n/** Schema for filtering feedback in list queries */\nconst feedbackFilterObjectSchema = z.object({\n ...commonFilterFields,\n\n // Feedback-specific filters\n feedbackType: z\n .union([z.string(), z.array(z.string())])\n .optional()\n .describe('Filter by feedback type(s)'),\n feedbackSource: feedbackSourceField.optional(),\n /**\n * @deprecated Use `feedbackSource` instead.\n */\n source: feedbackSourceField.optional(),\n feedbackUserId: feedbackUserIdField.optional(),\n});\n\nexport const feedbackFilterSchema = z\n .object(feedbackFilterObjectSchema.shape)\n .describe('Filters for querying feedback');\n\n/** Filters for querying feedback */\nexport type FeedbackFilter = z.infer;\n\n// ============================================================================\n// List Feedback Schemas\n// ============================================================================\n\n/** Fields available for ordering feedback results */\nexport const feedbackOrderByFieldSchema = z.enum(['timestamp']).describe(\"Field to order by: 'timestamp'\");\n\n/** Order by configuration for feedback queries */\nexport const feedbackOrderBySchema = z\n .object({\n field: feedbackOrderByFieldSchema.default('timestamp').describe('Field to order by'),\n direction: sortDirectionSchema.default('DESC').describe('Sort direction'),\n })\n .describe('Order by configuration');\n\nexport const listFeedbackArgsSchema = z\n .object({\n mode: listModeSchema.optional(),\n filters: z.preprocess(normalizeLegacyFeedbackActor, feedbackFilterObjectSchema).optional(),\n pagination: paginationArgsSchema.optional(),\n orderBy: feedbackOrderBySchema.optional(),\n after: deltaCursorSchema.optional(),\n limit: deltaLimitSchema,\n })\n .strict()\n .superRefine(refineObservabilityListMode)\n .transform(value =>\n normalizeObservabilityListArgs>(value, {\n orderBy: { field: 'timestamp', direction: 'DESC' } as const,\n }),\n )\n .describe('Arguments for listing feedback');\n\n/** Arguments for listing feedback */\nexport type ListFeedbackArgs = z.input;\n\n/** Schema for listFeedback operation response */\nexport const listFeedbackResponseSchema = z\n .object({\n pagination: paginationInfoSchema.optional(),\n delta: deltaInfoSchema.optional(),\n deltaCursor: deltaCursorSchema.optional(),\n feedback: z.array(feedbackRecordSchema),\n })\n .describe('Response from listing feedback');\n\n/** Response containing paginated feedback */\nexport type ListFeedbackResponse = z.infer;\n\n// ============================================================================\n// OLAP Query Schemas\n// ============================================================================\n\nexport const getFeedbackAggregateArgsSchema = z\n .object({\n feedbackType: feedbackTypeField,\n feedbackSource: feedbackSourceField.optional(),\n aggregation: aggregationTypeSchema,\n filters: feedbackFilterSchema.optional(),\n comparePeriod: comparePeriodSchema.optional(),\n })\n .describe('Arguments for getting a feedback aggregate over numeric values');\n\nexport type GetFeedbackAggregateArgs = z.infer;\n\nexport const getFeedbackAggregateResponseSchema = z.object(aggregateResponseFields);\n\nexport type GetFeedbackAggregateResponse = z.infer;\n\nexport const getFeedbackBreakdownArgsSchema = z\n .object({\n feedbackType: feedbackTypeField,\n feedbackSource: feedbackSourceField.optional(),\n groupBy: groupBySchema,\n aggregation: aggregationTypeSchema,\n filters: feedbackFilterSchema.optional(),\n })\n .describe('Arguments for getting a feedback breakdown over numeric values');\n\nexport type GetFeedbackBreakdownArgs = z.infer;\n\nexport const getFeedbackBreakdownResponseSchema = z.object({\n groups: z.array(\n z.object({\n dimensions: dimensionsField,\n value: aggregatedValueField,\n }),\n ),\n});\n\nexport type GetFeedbackBreakdownResponse = z.infer;\n\nexport const getFeedbackTimeSeriesArgsSchema = z\n .object({\n feedbackType: feedbackTypeField,\n feedbackSource: feedbackSourceField.optional(),\n interval: aggregationIntervalSchema,\n aggregation: aggregationTypeSchema,\n filters: feedbackFilterSchema.optional(),\n groupBy: groupBySchema.optional(),\n })\n .describe('Arguments for getting feedback time series over numeric values');\n\nexport type GetFeedbackTimeSeriesArgs = z.infer;\n\nexport const getFeedbackTimeSeriesResponseSchema = z.object({\n series: z.array(\n z.object({\n name: z.string().describe('Series name (feedback type or group key)'),\n points: z.array(\n z.object({\n timestamp: bucketTimestampField,\n value: aggregatedValueField,\n }),\n ),\n }),\n ),\n});\n\nexport type GetFeedbackTimeSeriesResponse = z.infer;\n\nexport const getFeedbackPercentilesArgsSchema = z\n .object({\n feedbackType: feedbackTypeField,\n feedbackSource: feedbackSourceField.optional(),\n percentiles: percentilesSchema,\n interval: aggregationIntervalSchema,\n filters: feedbackFilterSchema.optional(),\n })\n .describe('Arguments for getting feedback percentiles over numeric values');\n\nexport type GetFeedbackPercentilesArgs = z.infer;\n\nexport const getFeedbackPercentilesResponseSchema = z.object({\n series: z.array(\n z.object({\n percentile: percentileField,\n points: z.array(\n z.object({\n timestamp: bucketTimestampField,\n value: percentileBucketValueField,\n }),\n ),\n }),\n ),\n});\n\nexport type GetFeedbackPercentilesResponse = z.infer;\n","import { z } from 'zod/v4';\nimport {\n aggregateResponseFields,\n aggregationIntervalSchema,\n aggregationTypeSchema,\n aggregatedValueField,\n bucketTimestampField,\n comparePeriodSchema,\n commonFilterFields,\n contextFields,\n deltaLimitSchema,\n deltaInfoSchema,\n dimensionsField,\n groupBySchema,\n deltaCursorSchema,\n listModeSchema,\n normalizeObservabilityListArgs,\n paginationArgsSchema,\n paginationInfoSchema,\n percentileField,\n percentileBucketValueField,\n percentilesSchema,\n refineObservabilityListMode,\n sortDirectionSchema,\n spanIdField,\n traceIdField,\n metadataField,\n} from '../shared';\nimport type { AggregationType } from '../shared';\n\n// ============================================================================\n// Field Schemas\n// ============================================================================\n\n/**\n * @deprecated MetricType is no longer stored. All metrics are raw events\n * with aggregation determined at query time.\n */\nexport const metricTypeSchema = z.enum(['counter', 'gauge', 'histogram']);\n\nconst metricNameField = z.string().describe('Metric name (e.g., mastra_agent_duration_ms)');\nconst metricValueField = z.number().describe('Metric value');\nconst labelsField = z.record(z.string(), z.string()).describe('Metric labels for dimensional filtering');\nconst providerField = z.string().describe('Model provider');\nconst modelField = z.string().describe('Model');\nconst estimatedCostField = z.number().describe('Estimated cost');\nconst costUnitField = z.string().describe('Unit for the estimated cost (e.g., usd)');\nconst costMetadField = z.record(z.string(), z.unknown()).nullish().describe('Structured costing metadata');\n\n// ============================================================================\n// MetricRecord Schema (Storage Format)\n// ============================================================================\n\n/**\n * Schema for metrics as stored in the database.\n * Each record is a single metric observation.\n */\nexport const metricRecordSchema = z\n .object({\n metricId: z.string().nullish().describe('Unique id for this metric event'),\n timestamp: z.date().describe('When the metric was recorded'),\n name: metricNameField,\n value: metricValueField,\n\n // Correlation\n traceId: traceIdField.nullish(),\n spanId: spanIdField.nullish(),\n\n // Context (entity hierarchy, identity, correlation, deployment, experimentation)\n ...contextFields,\n /**\n * @deprecated Use `executionSource` instead.\n */\n source: z.string().nullish().describe('Execution source'),\n\n // Canonical costing fields\n provider: providerField.nullish(),\n model: modelField.nullish(),\n\n // Estimated cost related fields\n estimatedCost: estimatedCostField.nullish(),\n costUnit: costUnitField.nullish(),\n costMetadata: costMetadField.nullish(),\n\n // User-defined labels used for filtering\n labels: labelsField.default({}),\n\n // User-defined metadata\n metadata: metadataField.nullish(),\n })\n .describe('Metric record as stored in the database');\n\n/** Metric record type for storage */\nexport type MetricRecord = z.infer;\n\n// ============================================================================\n// MetricInput Schema (User-Facing API)\n// ============================================================================\n\n/**\n * Schema for user-provided metric input (minimal required fields).\n * The metrics context enriches this with environment before emitting ExportedMetric.\n */\nexport const metricInputSchema = z\n .object({\n name: metricNameField,\n value: metricValueField,\n labels: labelsField.optional(),\n })\n .describe('User-provided metric input');\n\n/** User-facing metric input type */\nexport type MetricInput = z.infer;\n\n// ============================================================================\n// Create Metric Schemas\n// ============================================================================\n\n/** Schema for creating a metric record (without db timestamps) */\nexport const createMetricRecordSchema = metricRecordSchema;\n\n/** Metric record for creation (excludes db timestamps) */\nexport type CreateMetricRecord = z.infer;\n\n/** Schema for batchCreateMetrics operation arguments */\nexport const batchCreateMetricsArgsSchema = z\n .object({\n metrics: z.array(createMetricRecordSchema),\n })\n .describe('Arguments for batch recording metrics');\n\n/** Arguments for batch recording metrics */\nexport type BatchCreateMetricsArgs = z.infer;\n\n// ============================================================================\n// Metric Aggregation Schemas\n// ============================================================================\n\n/** Schema for metric aggregation configuration */\nexport const metricsAggregationSchema = z\n .object({\n type: aggregationTypeSchema,\n interval: aggregationIntervalSchema.optional(),\n groupBy: groupBySchema.optional(),\n })\n .describe('Metrics aggregation configuration');\n\n/** Metrics aggregation configuration type */\nexport type MetricsAggregation = z.infer;\n\n// ============================================================================\n// Metric Filter Schema\n// ============================================================================\n\n/** Schema for filtering metrics in queries */\nexport const metricsFilterSchema = z\n .object({\n ...commonFilterFields,\n\n // Metric identification\n name: z.array(z.string()).nonempty().optional().describe('Filter by metric name(s)'),\n\n /**\n * @deprecated Use `executionSource` instead.\n */\n source: z.string().optional().describe('Filter by execution source'),\n\n // Canonical costing filters\n provider: providerField.optional(),\n model: modelField.optional(),\n costUnit: costUnitField.optional(),\n\n // Label filters (exact match on label values)\n labels: z.record(z.string(), z.string()).optional().describe('Exact match on label key-value pairs'),\n })\n .describe('Filters for querying metrics');\n\n/** Filters for querying metrics */\nexport type MetricsFilter = z.infer;\n\n/** Fields available for ordering metric list results */\nexport const metricsOrderByFieldSchema = z.enum(['timestamp']).describe(\"Field to order by: 'timestamp'\");\n\n/** Order by configuration for metric list queries */\nexport const metricsOrderBySchema = z\n .object({\n field: metricsOrderByFieldSchema.default('timestamp').describe('Field to order by'),\n direction: sortDirectionSchema.default('DESC').describe('Sort direction'),\n })\n .describe('Order by configuration');\n\nexport const listMetricsArgsSchema = z\n .object({\n mode: listModeSchema.optional(),\n filters: metricsFilterSchema.optional(),\n pagination: paginationArgsSchema.optional(),\n orderBy: metricsOrderBySchema.optional(),\n after: deltaCursorSchema.optional(),\n limit: deltaLimitSchema,\n })\n .strict()\n .superRefine(refineObservabilityListMode)\n .transform(value =>\n normalizeObservabilityListArgs>(value, {\n orderBy: { field: 'timestamp', direction: 'DESC' } as const,\n }),\n )\n .describe('Arguments for listing metrics');\n\n/** Arguments for listing metrics */\nexport type ListMetricsArgs = z.input;\n\n/** Schema for listMetrics operation response */\nexport const listMetricsResponseSchema = z\n .object({\n pagination: paginationInfoSchema.optional(),\n delta: deltaInfoSchema.optional(),\n deltaCursor: deltaCursorSchema.optional(),\n metrics: z.array(metricRecordSchema),\n })\n .describe('Response from listing metrics');\n\n/** Response containing paginated metrics */\nexport type ListMetricsResponse = z.infer;\n\n// ============================================================================\n// OLAP Query Schemas\n// ============================================================================\n\n/**\n * Columns eligible for `count_distinct`.\n *\n * Restricted to low/medium-cardinality categorical attributes. ID columns are\n * intentionally excluded — approximate distinct count over near-unique values\n * converges to the row count and is rarely a useful KPI.\n */\nexport const METRIC_DISTINCT_COLUMNS = [\n 'entityType',\n 'entityName',\n 'parentEntityType',\n 'parentEntityName',\n 'rootEntityType',\n 'rootEntityName',\n 'name',\n 'provider',\n 'model',\n 'environment',\n 'executionSource',\n 'serviceName',\n 'threadId',\n 'resourceId',\n] as const;\n\nexport type MetricDistinctColumn = (typeof METRIC_DISTINCT_COLUMNS)[number];\n\nexport const distinctColumnSchema = z\n .enum(METRIC_DISTINCT_COLUMNS)\n .optional()\n .describe(\n \"Column to apply count_distinct over (required when aggregation is 'count_distinct'). Restricted to allowlisted metric dimensions.\",\n );\n\n// --- getMetricAggregate ---\n\nconst requireDistinctColumnRefinement = {\n check: (data: { aggregation: AggregationType; distinctColumn?: string | undefined }) =>\n data.aggregation !== 'count_distinct' || data.distinctColumn !== undefined,\n options: {\n message: \"distinctColumn is required when aggregation is 'count_distinct'\",\n path: ['distinctColumn'],\n },\n};\n\nexport const getMetricAggregateArgsSchema = z\n .object({\n name: z.array(z.string()).nonempty().describe('Metric name(s) to aggregate'),\n aggregation: aggregationTypeSchema,\n distinctColumn: distinctColumnSchema,\n filters: metricsFilterSchema.optional(),\n comparePeriod: comparePeriodSchema.optional(),\n })\n .refine(requireDistinctColumnRefinement.check, requireDistinctColumnRefinement.options)\n .describe('Arguments for getting a metric aggregate');\n\nexport type GetMetricAggregateArgs = z.infer;\n\nexport const getMetricAggregateResponseSchema = z.object({\n ...aggregateResponseFields,\n estimatedCost: z.number().nullable().optional().describe('Aggregated estimated cost from the same filtered row set'),\n costUnit: z\n .string()\n .nullable()\n .optional()\n .describe('Shared cost unit for the aggregated rows, or null when mixed/unknown'),\n previousEstimatedCost: z\n .number()\n .nullable()\n .optional()\n .describe('Aggregated estimated cost from the comparison period'),\n costChangePercent: z\n .number()\n .nullable()\n .optional()\n .describe('Percentage change in estimated cost from comparison period'),\n});\n\nexport type GetMetricAggregateResponse = z.infer;\n\n// --- getMetricBreakdown ---\n\nexport const getMetricBreakdownArgsSchema = z\n .object({\n name: z.array(z.string()).nonempty().describe('Metric name(s) to break down'),\n groupBy: groupBySchema,\n aggregation: aggregationTypeSchema,\n distinctColumn: distinctColumnSchema,\n filters: metricsFilterSchema.optional(),\n limit: z\n .number()\n .int()\n .positive()\n .max(1000)\n .optional()\n .describe('Maximum number of groups to return (server-side TopK). Required for high-cardinality groupBy.'),\n orderDirection: sortDirectionSchema\n .optional()\n .describe(\n \"Sort direction for the aggregated value (defaults to 'DESC' at the storage layer; pairs with limit for top/bottom-N).\",\n ),\n })\n .refine(requireDistinctColumnRefinement.check, requireDistinctColumnRefinement.options)\n .describe('Arguments for getting a metric breakdown');\n\nexport type GetMetricBreakdownArgs = z.infer;\n\nexport const getMetricBreakdownResponseSchema = z.object({\n groups: z.array(\n z.object({\n dimensions: dimensionsField,\n value: aggregatedValueField,\n estimatedCost: z.number().nullable().optional().describe('Summed estimated cost for this group'),\n costUnit: z\n .string()\n .nullable()\n .optional()\n .describe('Shared cost unit for this group, or null when mixed/unknown'),\n }),\n ),\n});\n\nexport type GetMetricBreakdownResponse = z.infer;\n\n// --- getMetricTimeSeries ---\n\nexport const getMetricTimeSeriesArgsSchema = z\n .object({\n name: z.array(z.string()).nonempty().describe('Metric name(s)'),\n interval: aggregationIntervalSchema,\n aggregation: aggregationTypeSchema,\n distinctColumn: distinctColumnSchema,\n filters: metricsFilterSchema.optional(),\n groupBy: groupBySchema.optional(),\n })\n .refine(requireDistinctColumnRefinement.check, requireDistinctColumnRefinement.options)\n .describe('Arguments for getting metric time series');\n\nexport type GetMetricTimeSeriesArgs = z.infer;\n\nexport const getMetricTimeSeriesResponseSchema = z.object({\n series: z.array(\n z.object({\n name: z.string().describe('Series name (metric name or group key)'),\n costUnit: z\n .string()\n .nullable()\n .optional()\n .describe('Shared cost unit for this series, or null when mixed/unknown'),\n points: z.array(\n z.object({\n timestamp: bucketTimestampField,\n value: aggregatedValueField,\n estimatedCost: z.number().nullable().optional().describe('Summed estimated cost in this bucket'),\n }),\n ),\n }),\n ),\n});\n\nexport type GetMetricTimeSeriesResponse = z.infer;\n\n// --- getMetricPercentiles ---\n\nexport const getMetricPercentilesArgsSchema = z\n .object({\n name: z.string().describe('Metric name'),\n percentiles: percentilesSchema,\n interval: aggregationIntervalSchema,\n filters: metricsFilterSchema.optional(),\n })\n .describe('Arguments for getting metric percentiles');\n\nexport type GetMetricPercentilesArgs = z.infer;\n\nexport const getMetricPercentilesResponseSchema = z.object({\n series: z.array(\n z.object({\n percentile: percentileField,\n points: z.array(\n z.object({\n timestamp: bucketTimestampField,\n value: percentileBucketValueField,\n }),\n ),\n }),\n ),\n});\n\nexport type GetMetricPercentilesResponse = z.infer;\n","import { z } from 'zod/v4';\nimport { entityTypeField } from '../shared';\n\n// ============================================================================\n// Metric Discovery\n// ============================================================================\n\n// --- getMetricNames ---\n\nexport const getMetricNamesArgsSchema = z\n .object({\n prefix: z.string().optional().describe('Filter metric names by prefix'),\n limit: z.coerce.number().int().min(1).optional().describe('Maximum number of names to return'),\n })\n .describe('Arguments for getting metric names');\n\nexport type GetMetricNamesArgs = z.infer;\n\nexport const getMetricNamesResponseSchema = z.object({\n names: z.array(z.string()).describe('Distinct metric names'),\n});\n\nexport type GetMetricNamesResponse = z.infer;\n\n// --- getMetricLabelKeys ---\n\nexport const getMetricLabelKeysArgsSchema = z\n .object({\n metricName: z.string().describe('Metric name to get label keys for'),\n })\n .describe('Arguments for getting metric label keys');\n\nexport type GetMetricLabelKeysArgs = z.infer;\n\nexport const getMetricLabelKeysResponseSchema = z.object({\n keys: z.array(z.string()).describe('Distinct label keys for the metric'),\n});\n\nexport type GetMetricLabelKeysResponse = z.infer;\n\n// --- getMetricLabelValues ---\n\nexport const getMetricLabelValuesArgsSchema = z\n .object({\n metricName: z.string().describe('Metric name'),\n labelKey: z.string().describe('Label key to get values for'),\n prefix: z.string().optional().describe('Filter values by prefix'),\n limit: z.coerce.number().int().min(1).optional().describe('Maximum number of values to return'),\n })\n .describe('Arguments for getting label values');\n\nexport type GetMetricLabelValuesArgs = z.infer;\n\nexport const getMetricLabelValuesResponseSchema = z.object({\n values: z.array(z.string()).describe('Distinct label values'),\n});\n\nexport type GetMetricLabelValuesResponse = z.infer;\n\n// ============================================================================\n// Entity & Environment Discovery\n// ============================================================================\n\n// --- getEntityTypes ---\n\nexport const getEntityTypesArgsSchema = z.object({}).describe('Arguments for getting entity types');\n\nexport type GetEntityTypesArgs = z.infer;\n\nexport const getEntityTypesResponseSchema = z.object({\n entityTypes: z.array(entityTypeField).describe('Distinct entity types'),\n});\n\nexport type GetEntityTypesResponse = z.infer;\n\n// --- getEntityNames ---\n\n// TODO(observability): Extend entity-name discovery with query/prefix and limit support.\n// The current UI autocomplete can only refine against a capped result set, which is\n// enough for \"take the top hit\" but not enough for globally-correct shell-style\n// completion. A richer discovery contract should support prefix filtering and bounded\n// result windows, and may also want a root-only mode for root-entity name UX.\nexport const getEntityNamesArgsSchema = z\n .object({\n entityType: entityTypeField.optional().describe('Optional entity type filter'),\n })\n .describe('Arguments for getting entity names');\n\nexport type GetEntityNamesArgs = z.infer;\n\nexport const getEntityNamesResponseSchema = z.object({\n names: z.array(z.string()).describe('Distinct entity names'),\n});\n\nexport type GetEntityNamesResponse = z.infer;\n\n// --- getServiceNames ---\n\nexport const getServiceNamesArgsSchema = z.object({}).describe('Arguments for getting service names');\n\nexport type GetServiceNamesArgs = z.infer;\n\nexport const getServiceNamesResponseSchema = z.object({\n serviceNames: z.array(z.string()).describe('Distinct service names'),\n});\n\nexport type GetServiceNamesResponse = z.infer;\n\n// --- getEnvironments ---\n\nexport const getEnvironmentsArgsSchema = z.object({}).describe('Arguments for getting environments');\n\nexport type GetEnvironmentsArgs = z.infer;\n\nexport const getEnvironmentsResponseSchema = z.object({\n environments: z.array(z.string()).describe('Distinct environments'),\n});\n\nexport type GetEnvironmentsResponse = z.infer;\n\n// --- getTags ---\n\nexport const getTagsArgsSchema = z\n .object({\n entityType: entityTypeField.optional().describe('Optional entity type filter'),\n })\n .describe('Arguments for getting tags');\n\nexport type GetTagsArgs = z.infer;\n\nexport const getTagsResponseSchema = z.object({\n tags: z.array(z.string()).describe('Distinct tags'),\n});\n\nexport type GetTagsResponse = z.infer;\n","/**\n * Tracing interfaces\n *\n * Span types, attributes, span lifecycle, and tracing-specific types.\n * For top-level observability infrastructure (instances, exporters, bridges, config),\n * see observability.ts.\n */\nimport { EntityType } from '@internal/core/storage';\n\nimport type { MastraError } from '../../error';\nimport type { Mastra } from '../../mastra';\nimport type { RequestContext } from '../../request-context';\nimport type { LanguageModelUsage, ProviderMetadata, StepStartPayload } from '../../stream/types';\nimport type { WorkflowRunStatus, WorkflowStepStatus } from '../../workflows';\nimport type {\n CustomSamplerOptions,\n ObservabilityInstance,\n CorrelationContext,\n DefinitionSource,\n ScorerScoreSource,\n ScorerStepType,\n ScorerTargetScope,\n} from './core';\nimport type { FeedbackInput } from './feedback';\nimport type { CostContext } from './metrics';\nimport type { ScoreInput } from './scores';\n\n// ============================================================================\n// Span Types\n// ============================================================================\n\n/**\n * AI-specific span types with their associated metadata\n */\nexport enum SpanType {\n /** Agent run - root span for agent processes */\n AGENT_RUN = 'agent_run',\n /** Scorer execution */\n SCORER_RUN = 'scorer_run',\n /** Individual scorer pipeline step */\n SCORER_STEP = 'scorer_step',\n /** Generic span for custom operations */\n GENERIC = 'generic',\n /** Model generation with model calls, token usage, prompts, completions */\n MODEL_GENERATION = 'model_generation',\n /** Single model execution step within a generation (one API call) */\n MODEL_STEP = 'model_step',\n /** Model provider call within a step - wraps only the inference, excluding processors and tool executions */\n MODEL_INFERENCE = 'model_inference',\n /** Individual model streaming chunk/event */\n MODEL_CHUNK = 'model_chunk',\n /** MCP (Model Context Protocol) tool execution */\n MCP_TOOL_CALL = 'mcp_tool_call',\n /** Input or Output Processor execution */\n PROCESSOR_RUN = 'processor_run',\n /** Function/tool execution with inputs, outputs, errors */\n TOOL_CALL = 'tool_call',\n /**\n * Client-side tool execution marker. The server creates this span\n * when the model emits a client tool call, injects its W3C carrier\n * into the outgoing tool-call chunk, then ends the span once tool\n * args are available. Child spans/logs from inside the client tool's\n * execute function flow back as OTLP/JSON via the ClientObservabilityProxy\n * interface in @mastra/observability and parent themselves under this\n * span via parentSpanId reference.\n */\n CLIENT_TOOL_CALL = 'client_tool_call',\n /** Workflow run - root span for workflow processes */\n WORKFLOW_RUN = 'workflow_run',\n /** Workflow step execution with step status, data flow */\n WORKFLOW_STEP = 'workflow_step',\n /** Workflow conditional execution with condition evaluation */\n WORKFLOW_CONDITIONAL = 'workflow_conditional',\n /** Individual condition evaluation within conditional */\n WORKFLOW_CONDITIONAL_EVAL = 'workflow_conditional_eval',\n /** Workflow parallel execution */\n WORKFLOW_PARALLEL = 'workflow_parallel',\n /** Workflow loop execution */\n WORKFLOW_LOOP = 'workflow_loop',\n /** Workflow sleep operation */\n WORKFLOW_SLEEP = 'workflow_sleep',\n /** Workflow wait for event operation */\n WORKFLOW_WAIT_EVENT = 'workflow_wait_event',\n /** Memory operation (recall, save, delete, update working memory) */\n MEMORY_OPERATION = 'memory_operation',\n /** Workspace action (filesystem, sandbox, search, skill, mount operations) */\n WORKSPACE_ACTION = 'workspace_action',\n /** RAG ingestion - root span for an ingestion pipeline run (load → chunk → extract → embed → upsert) */\n RAG_INGESTION = 'rag_ingestion',\n /** Embedding call (used by both RAG ingestion and query) */\n RAG_EMBEDDING = 'rag_embedding',\n /** Vector store I/O (query / upsert / delete / fetch) */\n RAG_VECTOR_OPERATION = 'rag_vector_operation',\n /** RAG-specific actions: chunk, extract_metadata, rerank */\n RAG_ACTION = 'rag_action',\n /** Graph operations (build / traverse) - not RAG-specific */\n GRAPH_ACTION = 'graph_action',\n /** Inline data mapping between pipeline stages (e.g. a tool's `toModelOutput` transform) */\n MAPPING = 'mapping',\n}\n\nexport { EntityType };\n\n// ============================================================================\n// Type-Specific Attributes Interfaces\n// ============================================================================\n\n/**\n * Base attributes that all spans can have\n */\nexport interface AIBaseAttributes {\n /**\n * Token usage rolled up from internal descendant spans whose own\n * MODEL_GENERATION spans are filtered from the exported trace (e.g.\n * Mastra-owned processors that run with `tracingPolicy.internal`).\n *\n * Accumulated on the closest exported ancestor at descendant-end time,\n * so cost / token attribution survives even when the descendant model\n * spans themselves are hidden. Token-usage metrics auto-extract from\n * this field on the ancestor when present.\n */\n internalUsage?: UsageStats;\n}\n\n/**\n * Agent Run attributes\n */\nexport interface AgentRunAttributes extends AIBaseAttributes {\n /** Conversation/thread/session identifier for multi-turn interactions */\n conversationId?: string;\n /** Agent Instructions **/\n instructions?: string;\n /** Agent Prompt **/\n prompt?: string;\n /** Available tools for this execution */\n availableTools?: string[];\n /** Maximum steps allowed */\n maxSteps?: number;\n /** The resolved agent version ID used for this execution */\n resolvedVersionId?: string;\n /** Tripwire abort details when a processor triggered a tripwire */\n tripwireAbort?: {\n /** Abort reason */\n reason?: string;\n /** Processor that triggered the tripwire */\n processorId?: string;\n /** Whether retry was requested */\n retry?: boolean;\n /** Additional metadata */\n metadata?: unknown;\n };\n}\n\n/**\n * Scorer Run attributes\n */\nexport interface ScorerRunAttributes extends AIBaseAttributes {\n scorerId?: string;\n scorerName?: string;\n scoreSource?: ScorerScoreSource;\n targetScope?: ScorerTargetScope;\n targetEntityType?: EntityType;\n scorerDefinition?: DefinitionSource;\n}\n\n/**\n * Scorer Step attributes\n */\nexport interface ScorerStepAttributes extends AIBaseAttributes {\n step?: string;\n stepType?: ScorerStepType;\n prompt?: string;\n judgeModel?: string;\n}\n\n/**\n * Detailed breakdown of input token usage by type.\n * Based on OpenInference semantic conventions.\n */\nexport interface InputTokenDetails {\n /** Regular text tokens (non-cached, non-audio, non-image) */\n text?: number;\n /** Tokens served from cache (cache hit/read) */\n cacheRead?: number;\n /** Tokens written to cache (cache creation - Anthropic only) */\n cacheWrite?: number;\n /** Audio input tokens */\n audio?: number;\n /** Image input tokens (includes PDF pages) */\n image?: number;\n}\n\n/**\n * Detailed breakdown of output token usage by type.\n * Based on OpenInference semantic conventions.\n */\nexport interface OutputTokenDetails {\n /** Regular text output tokens */\n text?: number;\n /** Reasoning/thinking tokens (o1, Claude thinking, Gemini thoughts) */\n reasoning?: number;\n /** Audio output tokens */\n audio?: number;\n /** Image output tokens (DALL-E, etc.) */\n image?: number;\n}\n\n/** Token usage statistics */\nexport interface UsageStats {\n /** Total input tokens (sum of all input details) */\n inputTokens?: number;\n /** Total output tokens (sum of all output details) */\n outputTokens?: number;\n /** Detailed breakdown of input token usage */\n inputDetails?: InputTokenDetails;\n /** Detailed breakdown of output token usage */\n outputDetails?: OutputTokenDetails;\n}\n\n/**\n * Model Generation attributes\n */\nexport interface ModelGenerationAttributes extends AIBaseAttributes {\n /** Model name (e.g., 'gpt-4', 'claude-3') */\n model?: string;\n /** Model provider (e.g., 'openai', 'anthropic') */\n provider?: string;\n /** Type of result/output this LLM call produced */\n resultType?: 'tool_selection' | 'response_generation' | 'reasoning' | 'planning';\n /** Token usage statistics */\n usage?: UsageStats;\n /** Estimated cost context, when provided directly by an SDK or provider */\n costContext?: CostContext;\n /** Model parameters */\n parameters?: {\n maxOutputTokens?: number;\n temperature?: number;\n topP?: number;\n topK?: number;\n presencePenalty?: number;\n frequencyPenalty?: number;\n stopSequences?: string[];\n seed?: number;\n maxRetries?: number;\n abortSignal?: any;\n headers?: Record;\n };\n /** Whether this was a streaming response */\n streaming?: boolean;\n /** Reason the generation finished */\n finishReason?: string;\n /**\n * When the first token/chunk of the completion was received.\n * Used to calculate time-to-first-token (TTFT) metrics.\n * Only applicable for streaming responses.\n */\n completionStartTime?: Date;\n /** Actual model used in the response (may differ from request model) */\n responseModel?: string;\n /** Unique identifier for the response */\n responseId?: string;\n /** Server address for the model endpoint */\n serverAddress?: string;\n /** Server port for the model endpoint */\n serverPort?: number;\n}\n\n/**\n * Model Step attributes - for a single model execution within a generation\n */\nexport interface ModelStepAttributes extends AIBaseAttributes {\n /** Index of this step in the generation (0, 1, 2, ...) */\n stepIndex?: number;\n /** Token usage statistics */\n usage?: UsageStats;\n /** Reason this step finished (stop, tool-calls, length, etc.) */\n finishReason?: string;\n /** Should execution continue */\n isContinued?: boolean;\n /** Result warnings */\n warnings?: Record;\n}\n\n/**\n * Model Inference attributes - for the provider call within a MODEL_STEP.\n *\n * Wraps only the model's inference (HTTP roundtrip / stream lifetime),\n * excluding input/output processors and tool executions. Use this span\n * to measure pure model latency.\n *\n * Fields are intentionally duplicated from ModelStepAttributes /\n * ModelGenerationAttributes so existing integrations that read those\n * attributes continue to work unchanged.\n */\nexport interface ModelInferenceAttributes extends AIBaseAttributes {\n /** Model name (e.g., 'gpt-4', 'claude-3') */\n model?: string;\n /** Model provider (e.g., 'openai', 'anthropic') */\n provider?: string;\n /** Index of the parent step in the generation (0, 1, 2, ...) */\n stepIndex?: number;\n /** Token usage statistics */\n usage?: UsageStats;\n /** Reason this inference finished (stop, tool-calls, length, etc.) */\n finishReason?: string;\n /** Whether this was a streaming response */\n streaming?: boolean;\n /**\n * When the first token/chunk of the completion was received.\n * Used to calculate time-to-first-token (TTFT) metrics.\n * Only applicable for streaming responses.\n */\n completionStartTime?: Date;\n /** Result warnings */\n warnings?: Record;\n /** Actual model used in the response (may differ from request model) */\n responseModel?: string;\n /** Unique identifier for the response */\n responseId?: string;\n /** Model parameters sent on the request (temperature, maxOutputTokens, topP, etc.) */\n parameters?: Record;\n /** Provider-specific options forwarded on the request */\n providerOptions?: Record;\n /** Names of tools made available to the model on this inference call */\n availableTools?: string[];\n /**\n * How the model was instructed to choose tools: 'auto', 'none', 'required',\n * or a specific tool selection. Distinguishes \"model could have called a\n * tool but didn't\" from \"model was blocked/forced\".\n */\n toolChoice?: 'auto' | 'none' | 'required' | { type: 'tool'; toolName: string };\n /**\n * Requested response format. Distinguishes plain text generation from\n * structured-output (JSON / JSON schema) runs.\n */\n responseFormat?: 'text' | 'json' | 'json_schema' | { type: string; name?: string };\n}\n\n/**\n * Model Chunk attributes - for individual streaming chunks/events\n */\nexport interface ModelChunkAttributes extends AIBaseAttributes {\n /** Type of chunk (text-delta, reasoning-delta, tool-call, etc.) */\n chunkType?: string;\n /** Sequence number of this chunk in the stream */\n sequenceNumber?: number;\n}\n\n/**\n * Tool Call attributes\n */\nexport interface ToolCallAttributes extends AIBaseAttributes {\n toolType?: string;\n toolDescription?: string;\n success?: boolean;\n}\n\n/**\n * Client Tool Call attributes.\n *\n * CLIENT_TOOL_CALL is a server-side marker span for a tool call that\n * will execute in the client SDK. It is created early so its W3C\n * carrier can be sent to the client, then ended once tool args are\n * available. Richer telemetry from inside the client tool's execute\n * function (child spans, logs) is forwarded back via the\n * ClientObservabilityProxy interface in @mastra/observability and\n * parented under this span via parentSpanId reference.\n */\nexport interface ClientToolCallAttributes extends AIBaseAttributes {\n /** Tool category, e.g. 'tool', 'function' */\n toolType?: string;\n /** Tool description from createTool */\n toolDescription?: string;\n /** Optional environment hint reported by the client (browser, node, deno, etc.) */\n clientEnvironment?: string;\n}\n\n/**\n * MCP Tool Call attributes\n */\nexport interface MCPToolCallAttributes extends AIBaseAttributes {\n /** MCP server identifier */\n mcpServer: string;\n /** MCP server version */\n serverVersion?: string;\n /** Tool description */\n toolDescription?: string;\n /** Whether tool execution was successful */\n success?: boolean;\n}\n\n/**\n * Mapping attributes — for inline data transforms between pipeline stages\n * (e.g. a tool's `toModelOutput` reshaping the tool result before the model sees it).\n */\nexport interface MappingAttributes extends AIBaseAttributes {\n /** Identifier of the mapping (e.g. `toModelOutput`) so UIs can group related mappings */\n mappingType?: string;\n /** Associated tool call id when the mapping operates on a tool result */\n toolCallId?: string;\n}\n\n/**\n * Processor attributes\n */\nexport interface ProcessorRunAttributes extends AIBaseAttributes {\n /** Processor executor type (workflow or legacy) */\n processorExecutor?: 'workflow' | 'legacy';\n /** Processor index in the agent */\n processorIndex?: number;\n /** MessageList mutations performed by this processor */\n messageListMutations?: Array<{\n type: 'add' | 'addSystem' | 'removeByIds' | 'clear';\n source?: string;\n count?: number;\n ids?: string[];\n text?: string;\n tag?: string;\n message?: any;\n }>;\n /** Tripwire abort details when a processor triggered a tripwire */\n tripwireAbort?: {\n /** Abort reason */\n reason?: string;\n /** Whether retry was requested */\n retry?: boolean;\n /** Additional metadata */\n metadata?: unknown;\n };\n}\n\n/**\n * Workflow Run attributes\n */\nexport interface WorkflowRunAttributes extends AIBaseAttributes {\n /** Workflow status */\n status?: WorkflowRunStatus;\n}\n\n/**\n * Workflow Step attributes\n */\nexport interface WorkflowStepAttributes extends AIBaseAttributes {\n /** Step status */\n status?: WorkflowStepStatus;\n}\n\n/**\n * Workflow Conditional attributes\n */\nexport interface WorkflowConditionalAttributes extends AIBaseAttributes {\n /** Number of conditions evaluated */\n conditionCount: number;\n /** Which condition indexes evaluated to true */\n truthyIndexes?: number[];\n /** Which steps will be executed */\n selectedSteps?: string[];\n}\n\n/**\n * Workflow Conditional Evaluation attributes\n */\nexport interface WorkflowConditionalEvalAttributes extends AIBaseAttributes {\n /** Index of this condition in the conditional */\n conditionIndex: number;\n /** Result of condition evaluation */\n result?: boolean;\n}\n\n/**\n * Workflow Parallel attributes\n */\nexport interface WorkflowParallelAttributes extends AIBaseAttributes {\n /** Number of parallel branches */\n branchCount: number;\n /** Step IDs being executed in parallel */\n parallelSteps?: string[];\n}\n\n/**\n * Workflow Loop attributes\n */\nexport interface WorkflowLoopAttributes extends AIBaseAttributes {\n /** Type of loop (foreach, dowhile, dountil) */\n loopType?: 'foreach' | 'dowhile' | 'dountil';\n /** Current iteration number (for individual iterations) */\n iteration?: number;\n /** Total iterations (if known) */\n totalIterations?: number;\n /** Number of steps to run concurrently in foreach loop */\n concurrency?: number;\n}\n\n/**\n * Workflow Sleep attributes\n */\nexport interface WorkflowSleepAttributes extends AIBaseAttributes {\n /** Sleep duration in milliseconds */\n durationMs?: number;\n /** Sleep until date */\n untilDate?: Date;\n /** Sleep type */\n sleepType?: 'fixed' | 'dynamic';\n}\n\n/**\n * Workflow Wait Event attributes\n */\nexport interface WorkflowWaitEventAttributes extends AIBaseAttributes {\n /** Event name being waited for */\n eventName?: string;\n /** Timeout in milliseconds */\n timeoutMs?: number;\n /** Whether event was received or timed out */\n eventReceived?: boolean;\n /** Wait duration in milliseconds */\n waitDurationMs?: number;\n}\n\n/**\n * Memory operation attributes\n */\nexport interface MemoryOperationAttributes extends AIBaseAttributes {\n operationType?: 'recall' | 'save' | 'delete' | 'update';\n messageCount?: number;\n embeddingTokens?: number;\n semanticRecallEnabled?: boolean;\n vectorResultCount?: number;\n workingMemoryEnabled?: boolean;\n lastMessages?: number | false;\n}\n\n/**\n * Workspace Action attributes — metadata about the span context.\n * Operation-specific inputs/outputs are recorded via span input/output,\n * not as attributes.\n */\nexport interface WorkspaceActionAttributes extends AIBaseAttributes {\n /** Workspace identifier */\n workspaceId?: string;\n /** Human-readable workspace name */\n workspaceName?: string;\n /** Action category */\n category: 'filesystem' | 'sandbox' | 'search' | 'skill' | 'mount';\n /** Sandbox provider name (e.g. 'e2b', 'docker', 'local') */\n sandboxProvider?: string;\n /** Filesystem provider name (e.g. 'local', 'agentfs', 's3') */\n filesystemProvider?: string;\n /** Whether the operation succeeded */\n success?: boolean;\n}\n\n/**\n * RAG Ingestion attributes (root span for an ingestion pipeline run).\n *\n * Attributes are stable, low-cardinality dimensions describing the run.\n * Per-run results (final chunk count, etc.) belong on the span's `output`.\n *\n * Note: token usage / cost lives ONLY on `RAG_EMBEDDING` child spans.\n * Aggregating at the root would double-count when an exporter sums child\n * spans. Mirrors how `AGENT_RUN` does not carry aggregated `MODEL_GENERATION`\n * usage.\n */\nexport interface RagIngestionAttributes extends AIBaseAttributes {\n /** User-supplied pipeline name */\n pipelineName?: string;\n /** Number of source documents being ingested */\n sourceCount?: number;\n /** Vector store name */\n vectorStore?: string;\n /** Index/collection name being written to */\n indexName?: string;\n /** Embedding model id */\n embeddingModel?: string;\n /** Embedding model provider */\n embeddingProvider?: string;\n}\n\n/**\n * RAG Embedding attributes (single embed call, batch).\n *\n * The texts being embedded belong on the span's `input`. Returned vectors\n * are summarized via `output` (count + dims) rather than dumped wholesale.\n * Token usage uses the same `UsageStats` shape as `MODEL_GENERATION` so\n * cost-extraction pipelines work uniformly across LLM and embedding spans.\n */\nexport interface RagEmbeddingAttributes extends AIBaseAttributes {\n /** Embedding model id */\n model?: string;\n /** Embedding model provider */\n provider?: string;\n /** Embedding vector dimensions */\n dimensions?: number;\n /** Number of inputs in this batch (cardinality of the input array) */\n inputCount?: number;\n /** Whether this embed call is part of ingestion or query */\n mode?: 'ingest' | 'query';\n /** Token usage for this embed call. Drives cost metrics. */\n usage?: UsageStats;\n}\n\n/**\n * RAG Vector Operation attributes (vector store I/O).\n *\n * Query vectors / filters belong on `input`. Result counts belong on\n * `output`.\n */\nexport interface RagVectorOperationAttributes extends AIBaseAttributes {\n /** Vector store operation kind */\n operation: 'query' | 'upsert' | 'delete' | 'fetch';\n /** Vector store name */\n store?: string;\n /** Index/collection name */\n indexName?: string;\n /** Top-K parameter (query) */\n topK?: number;\n /** Vector dimensions */\n dimensions?: number;\n}\n\n/**\n * RAG Action attributes - chunk / extract_metadata / rerank.\n *\n * Per-call result counts (chunk count, etc.) belong on `output`.\n */\nexport interface RagChunkAction extends AIBaseAttributes {\n /** RAG action kind */\n action: 'chunk';\n /** Chunking strategy / transformer name */\n strategy?: string;\n chunkSize?: number;\n chunkOverlap?: number;\n}\n\nexport interface RagExtractMetadataAction extends AIBaseAttributes {\n /** RAG action kind */\n action: 'extract_metadata';\n /** Metadata extractor name */\n extractor?: string;\n model?: string;\n provider?: string;\n}\n\nexport interface RagRerankAction extends AIBaseAttributes {\n /** RAG action kind */\n action: 'rerank';\n /** Number of candidates fed into rerank (input array length) */\n candidateCount?: number;\n /** Configured top-N to keep after reranking */\n topN?: number;\n /** Scorer/provider name */\n scorer?: string;\n}\n\nexport type RagActionAttributes = RagChunkAction | RagExtractMetadataAction | RagRerankAction;\n\n/**\n * Graph Action attributes - non-RAG, used for any graph operation.\n *\n * Per-call traversal results (visited count, returned count) belong on\n * `output`. `nodeCount` / `edgeCount` describe the graph itself.\n */\nexport interface GraphActionAttributes extends AIBaseAttributes {\n /** Graph action kind */\n action: 'build' | 'traverse' | 'update' | 'prune';\n /** Number of nodes in the graph */\n nodeCount?: number;\n /** Number of edges in the graph */\n edgeCount?: number;\n /** Threshold parameter (build) */\n threshold?: number;\n /** Number of starting nodes (traverse) */\n startNodes?: number;\n /** Maximum traversal depth */\n maxDepth?: number;\n}\n\n/**\n * AI-specific span types mapped to their attributes\n */\nexport interface SpanTypeMap {\n [SpanType.AGENT_RUN]: AgentRunAttributes;\n [SpanType.SCORER_RUN]: ScorerRunAttributes;\n [SpanType.SCORER_STEP]: ScorerStepAttributes;\n [SpanType.WORKFLOW_RUN]: WorkflowRunAttributes;\n [SpanType.MODEL_GENERATION]: ModelGenerationAttributes;\n [SpanType.MODEL_STEP]: ModelStepAttributes;\n [SpanType.MODEL_INFERENCE]: ModelInferenceAttributes;\n [SpanType.MODEL_CHUNK]: ModelChunkAttributes;\n [SpanType.TOOL_CALL]: ToolCallAttributes;\n [SpanType.CLIENT_TOOL_CALL]: ClientToolCallAttributes;\n [SpanType.MCP_TOOL_CALL]: MCPToolCallAttributes;\n [SpanType.PROCESSOR_RUN]: ProcessorRunAttributes;\n [SpanType.WORKFLOW_STEP]: WorkflowStepAttributes;\n [SpanType.WORKFLOW_CONDITIONAL]: WorkflowConditionalAttributes;\n [SpanType.WORKFLOW_CONDITIONAL_EVAL]: WorkflowConditionalEvalAttributes;\n [SpanType.WORKFLOW_PARALLEL]: WorkflowParallelAttributes;\n [SpanType.WORKFLOW_LOOP]: WorkflowLoopAttributes;\n [SpanType.WORKFLOW_SLEEP]: WorkflowSleepAttributes;\n [SpanType.WORKFLOW_WAIT_EVENT]: WorkflowWaitEventAttributes;\n [SpanType.WORKSPACE_ACTION]: WorkspaceActionAttributes;\n [SpanType.GENERIC]: AIBaseAttributes;\n [SpanType.MEMORY_OPERATION]: MemoryOperationAttributes;\n [SpanType.RAG_INGESTION]: RagIngestionAttributes;\n [SpanType.RAG_EMBEDDING]: RagEmbeddingAttributes;\n [SpanType.RAG_VECTOR_OPERATION]: RagVectorOperationAttributes;\n [SpanType.RAG_ACTION]: RagActionAttributes;\n [SpanType.GRAPH_ACTION]: GraphActionAttributes;\n [SpanType.MAPPING]: MappingAttributes;\n}\n\n/**\n * Union type for cases that need to handle any span type\n */\nexport type AnySpanAttributes = SpanTypeMap[keyof SpanTypeMap];\n\n// ============================================================================\n// Span Interfaces\n// ============================================================================\n\n/** Error information attached to a span when it fails. */\nexport interface SpanErrorInfo {\n message: string;\n id?: string;\n /** Error class name (e.g. \"TypeError\", \"ValidationError\") */\n name?: string;\n /** Stack trace string */\n stack?: string;\n domain?: string;\n category?: string;\n details?: Record;\n}\n\n/**\n * Base Span interface\n */\ninterface BaseSpan {\n /** Unique span identifier */\n id: string;\n /** OpenTelemetry-compatible trace ID (32 hex chars) - present on all spans */\n traceId: string;\n /** Name of the span */\n name: string;\n /** Type of the span */\n type: TType;\n /** Entity type that created the span */\n entityType?: EntityType;\n /** Entity id that created the span */\n entityId?: string;\n /** Entity name that created the span */\n entityName?: string;\n /** When span started */\n startTime: Date;\n /** When span ended */\n endTime?: Date;\n /** Span-type specific attributes */\n attributes?: SpanTypeMap[TType];\n /** User-defined metadata */\n metadata?: Record;\n /** Labels used to categorize and filter traces. Only valid on root spans. */\n tags?: string[];\n /** Input passed at the start of the span */\n input?: any;\n /** Output generated at the end of the span */\n output?: any;\n /** Error information if span failed */\n errorInfo?: SpanErrorInfo;\n /** Snapshot of the RequestContext */\n requestContext?: Record;\n /** Is an event span? (event occurs at startTime, has no endTime) */\n isEvent: boolean;\n}\n\n/**\n * Span interface, used internally for tracing\n */\nexport interface Span extends BaseSpan {\n /** Is an internal span? (spans internal to the operation of mastra) */\n isInternal: boolean;\n /** Tracing policy for this span (inherited from parent or explicitly set) */\n tracingPolicy?: TracingPolicy;\n /** Parent span reference (undefined for root spans) */\n parent?: AnySpan;\n /** Pointer to the ObservabilityInstance instance */\n observabilityInstance: ObservabilityInstance;\n /** Trace-level state shared across all spans in this trace */\n traceState?: TraceState;\n\n // Methods for span lifecycle\n /** End the span */\n end(options?: EndSpanOptions): void;\n\n /** Record an error for the span, optionally end the span as well */\n error(options: ErrorSpanOptions): void;\n\n /** Update span attributes */\n update(options: UpdateSpanOptions): void;\n\n /** Create child span - can be any span type independent of parent */\n createChildSpan(options: ChildSpanOptions): AIModelGenerationSpan;\n createChildSpan(options: ChildSpanOptions): Span;\n\n /** Create event span - can be any span type independent of parent */\n createEventSpan(options: ChildEventOptions): Span;\n\n /** Returns `TRUE` if the span is the root span of a trace */\n get isRootSpan(): boolean;\n\n /** Returns `TRUE` if the span is a valid span (not a NO-OP Span) */\n get isValid(): boolean;\n\n /** Get the closest parent spanId that isn't an internal span */\n getParentSpanId(includeInternalSpans?: boolean): string | undefined;\n\n /** Find the closest parent span of a specific type by walking up the parent chain */\n findParent(spanType: T): Span | undefined;\n\n /**\n * Optional hook for implementations that expose canonical correlation\n * context directly from the span instance.\n */\n getCorrelationContext?(): CorrelationContext;\n\n /** Returns a lightweight span ready for export */\n exportSpan(includeInternalSpans?: boolean): ExportedSpan | undefined;\n\n /** Returns the traceId on span, unless NoOpSpan, then undefined */\n get externalTraceId(): string | undefined;\n\n /**\n * Execute an async function within this span's tracing context.\n *\n * When a bridge is configured, this enables auto-instrumented operations\n * (HTTP requests, database queries, etc.) to be properly nested under this\n * span in the external tracing system.\n *\n * @param fn - The async function to execute within the span context\n * @returns The result of the function execution\n *\n * @example\n * ```typescript\n * const result = await modelSpan.executeInContext(async () => {\n * return model.generateText(...);\n * });\n * ```\n */\n executeInContext(fn: () => Promise): Promise;\n\n /**\n * Execute a synchronous function within this span's tracing context.\n *\n * When a bridge is configured, this enables auto-instrumented operations\n * (HTTP requests, database queries, etc.) to be properly nested under this\n * span in the external tracing system.\n *\n * @param fn - The synchronous function to execute within the span context\n * @returns The result of the function execution\n *\n * @example\n * ```typescript\n * const result = modelSpan.executeInContextSync(() => {\n * return model.streamText(...);\n * });\n * ```\n */\n executeInContextSync(fn: () => T): T;\n}\n\n/** Context for bridging Mastra spans with external tracing systems (e.g., OpenTelemetry). */\nexport interface BridgeSpanContext {\n /**\n * Execute an async function within this span's tracing context.\n *\n * When a bridge is configured, this enables auto-instrumented operations\n * (HTTP requests, database queries, etc.) to be properly nested under this\n * span in the external tracing system.\n *\n * @param fn - The async function to execute within the span context\n * @returns The result of the function execution\n *\n * @example\n * ```typescript\n * const result = await modelSpan.executeInContext(async () => {\n * return model.generateText(...);\n * });\n * ```\n */\n executeInContext(fn: () => Promise): Promise;\n\n /**\n * Execute a synchronous function within this span's tracing context.\n *\n * When a bridge is configured, this enables auto-instrumented operations\n * (HTTP requests, database queries, etc.) to be properly nested under this\n * span in the external tracing system.\n *\n * @param fn - The synchronous function to execute within the span context\n * @returns The result of the function execution\n *\n * @example\n * ```typescript\n * const result = modelSpan.executeInContextSync(() => {\n * return model.streamText(...);\n * });\n * ```\n */\n executeInContextSync(fn: () => T): T;\n}\n\n/**\n * Specialized span interface for MODEL_GENERATION spans\n * Provides access to creating a ModelSpanTracker for tracking MODEL_STEP and MODEL_CHUNK spans\n */\nexport interface AIModelGenerationSpan extends Span {\n /** Create a ModelSpanTracker for tracking model execution steps and chunks */\n createTracker(): IModelSpanTracker | undefined;\n}\n\n/**\n * Span data structure shared between exported and recorded spans.\n * Contains all span fields in a serializable format (no object references).\n *\n * This is the common base for:\n * - ExportedSpan: span data sent to exporters\n * - RecordedSpan: span data loaded from storage with annotation methods\n */\nexport interface SpanData extends BaseSpan {\n /** Parent span id reference (undefined for root spans) */\n parentSpanId?: string;\n /** `TRUE` if the span is the root span of a trace */\n isRootSpan: boolean;\n /**\n * Tags for this trace (only present on root spans).\n * Tags are string labels used to categorize and filter traces.\n */\n tags?: string[];\n}\n\n/**\n * Exported Span interface, used for tracing exporters.\n * This is the format sent to ObservabilityExporter implementations.\n */\nexport interface ExportedSpan extends SpanData {}\n\n/**\n * Options for ending a model generation span\n */\nexport interface EndGenerationOptions extends EndSpanOptions {\n /** Raw usage data from AI SDK - will be converted to UsageStats with cache token details */\n usage?: LanguageModelUsage;\n /** Provider-specific metadata for extracting cache tokens */\n providerMetadata?: ProviderMetadata;\n}\n\n/**\n * Static request-side context applied to every MODEL_INFERENCE span the\n * tracker creates. These fields describe what was sent to the model and\n * are constant across the steps of a single generation in the common case.\n */\nexport interface ModelInferenceContext {\n parameters?: ModelInferenceAttributes['parameters'];\n providerOptions?: ModelInferenceAttributes['providerOptions'];\n availableTools?: ModelInferenceAttributes['availableTools'];\n toolChoice?: ModelInferenceAttributes['toolChoice'];\n responseFormat?: ModelInferenceAttributes['responseFormat'];\n}\n\n/** Tracks model execution steps and streaming chunks within a MODEL_GENERATION span. */\nexport interface IModelSpanTracker {\n getTracingContext(): TracingContext;\n reportGenerationError(options: ErrorSpanOptions): void;\n endGeneration(options?: EndGenerationOptions): void;\n updateGeneration(options: UpdateSpanOptions): void;\n wrapStream(stream: T): T;\n startStep(payload?: StepStartPayload): void;\n updateStep?(payload?: StepStartPayload): void;\n\n /**\n * Open the MODEL_INFERENCE span for the current step. Call this immediately\n * before invoking the model so the span's startTime excludes input processor\n * work (and `setInferenceContext` reflects the post-processor tool set).\n * Falls back to auto-creation on first chunk if the caller forgets.\n */\n startInference?(payload?: StepStartPayload): void;\n\n /**\n * Set the request-side context applied to subsequent MODEL_INFERENCE spans\n * (parameters, providerOptions, availableTools, toolChoice, responseFormat).\n * Call after input processors have finalised the tool set, just before\n * `startInference()`; the next inference span snapshots this context.\n */\n setInferenceContext?(context: ModelInferenceContext): void;\n\n /**\n * Enable or disable deferred step closing for durable execution.\n * When enabled, step-finish chunks won't automatically close the step span.\n * Use exportCurrentStep() to get the span data, then endDeferredStep() to close later.\n */\n setDeferStepClose(defer: boolean): void;\n\n /**\n * Export the current step span for later rebuilding (durable execution).\n * Returns undefined if no step span is active.\n */\n exportCurrentStep(): ExportedSpan | undefined;\n\n /**\n * Get the pending step finish payload (captured when defer mode is enabled).\n * This contains usage, finishReason, etc. for closing the step later.\n */\n getPendingStepFinishPayload(): unknown;\n\n /**\n * Set the starting step index for durable execution.\n * Used when resuming across agentic loop iterations to maintain step continuity.\n */\n setStepIndex(index: number): void;\n\n /**\n * Get the current step index.\n */\n getStepIndex(): number;\n}\n\n/**\n * Union type for cases that need to handle any span\n */\nexport type AnySpan = Span;\n\n/**\n * Union type for cases that need to handle any exported span\n */\nexport type AnyExportedSpan = ExportedSpan;\n\n// ============================================================================\n// Recorded Span & Trace Interfaces\n// ============================================================================\n\n/**\n * A recorded span is span data that has been captured/persisted and can have\n * scores and feedback attached post-hoc. Unlike live Span objects, RecordedSpan\n * has immutable core data but supports annotation methods.\n *\n * Spans are organized in a tree structure via parent/children references,\n * with all references pointing to the same objects in memory.\n *\n * Use cases:\n * - Spans loaded from storage for evaluation\n * - Spans from completed traces being annotated\n * - Post-hoc quality scoring and user feedback\n *\n * RecordedSpan objects are hydrated runtime wrappers and should not be treated as\n * durable serialized state. Persist `traceId` / `spanId` and rehydrate, or use\n * top-level observability annotation APIs after resume.\n */\nexport interface RecordedSpan extends SpanData {\n /** Parent span reference (undefined for root spans) */\n readonly parent?: AnyRecordedSpan;\n\n /** Child spans in execution order */\n readonly children: ReadonlyArray;\n\n /**\n * Add a quality score to this recorded span.\n * Scores are emitted via the ObservabilityBus and can be persisted/exported.\n */\n addScore(score: ScoreInput): Promise;\n\n /**\n * Add user feedback to this recorded span.\n * Feedback is emitted via the ObservabilityBus and can be persisted/exported.\n */\n addFeedback(feedback: FeedbackInput): Promise;\n}\n\n/**\n * Union type for cases that need to handle any recorded span\n */\nexport type AnyRecordedSpan = RecordedSpan;\n\n/**\n * A recorded trace is a complete execution trace loaded from storage.\n * Provides both tree access (via rootSpan) and flat access (via spans).\n * All references point to the same span objects - no memory duplication.\n *\n * Obtained via mastra.observability.getRecordedTrace({ traceId }) for post-execution annotation.\n * RecordedTrace objects are hydrated runtime wrappers and should not be stored\n * across durable workflow serialization boundaries. Persist identifiers instead\n * and rehydrate, or use top-level observability annotation APIs after resume.\n */\nexport interface RecordedTrace {\n /** The trace identifier */\n readonly traceId: string;\n\n /** Root span of the trace tree (entry point for tree traversal) */\n readonly rootSpan: AnyRecordedSpan;\n\n /** All spans in flat array for iteration (same objects as in tree) */\n readonly spans: ReadonlyArray;\n\n /**\n * Get a specific recorded span by ID.\n * @param spanId - The span identifier\n * @returns The recorded span if found, null otherwise\n */\n getSpan(spanId: string): AnyRecordedSpan | null;\n\n /**\n * Add a score at the trace level.\n * Uses root span's metadata for context inheritance.\n */\n addScore(score: ScoreInput): Promise;\n\n /**\n * Add feedback at the trace level.\n * Uses root span's metadata for context inheritance.\n */\n addFeedback(feedback: FeedbackInput): Promise;\n}\n\n// ============================================================================\n// Tracing Interfaces\n// ============================================================================\n\n// ============================================================================\n// Span Create/Update/Error Option Types\n// ============================================================================\n\ninterface CreateBaseOptions {\n /** Span attributes */\n attributes?: SpanTypeMap[TType];\n /** Span metadata */\n metadata?: Record;\n /** Span name */\n name: string;\n /** Span type */\n type: TType;\n /** Entity type that created the span */\n entityType?: EntityType;\n /** Entity id that created the span */\n entityId?: string;\n /** Entity name that created the span */\n entityName?: string;\n /** Policy-level tracing configuration */\n tracingPolicy?: TracingPolicy;\n /** Request Context for metadata extraction */\n requestContext?: RequestContext;\n}\n\n/**\n * Options for creating new spans\n */\nexport interface CreateSpanOptions extends CreateBaseOptions {\n /** Input data */\n input?: any;\n /** Output data (for event spans) */\n output?: any;\n /** Labels used to categorize and filter traces. Only valid on root spans. */\n tags?: string[];\n /** Parent span */\n parent?: AnySpan;\n /** Is an event span? */\n isEvent?: boolean;\n /**\n * Trace ID to use for this span (1-32 hexadecimal characters).\n * Only used for root spans without a parent.\n */\n traceId?: string;\n /**\n * Span ID to use for this span (1-16 hexadecimal characters).\n * Only used when rebuilding a span from cached data.\n */\n spanId?: string;\n /**\n * Parent span ID to use for this span (1-16 hexadecimal characters).\n * Only used for root spans without a parent.\n */\n parentSpanId?: string;\n /**\n * Start time for this span.\n * Only used when rebuilding a span from cached data.\n */\n startTime?: Date;\n /** Trace-level state shared across all spans in this trace */\n traceState?: TraceState;\n}\n\n/**\n * Options for starting new spans\n */\nexport interface StartSpanOptions extends CreateSpanOptions {\n /**\n * Options passed when using a custom sampler strategy\n */\n customSamplerOptions?: CustomSamplerOptions;\n /** Tracing options for this execution */\n tracingOptions?: TracingOptions;\n}\n\n/**\n * Options for new child spans\n */\nexport interface ChildSpanOptions extends CreateBaseOptions {\n /** Input data */\n input?: any;\n}\n\n/**\n * Options for new child events\n * Event spans have no input, and no endTime\n */\nexport interface ChildEventOptions extends CreateBaseOptions {\n /** Output data */\n output?: any;\n}\n\ninterface UpdateBaseOptions {\n /** Span attributes */\n attributes?: Partial;\n /** Span metadata */\n metadata?: Record;\n}\n\n/** Options for ending a span, with optional final attributes and output. */\nexport interface EndSpanOptions extends UpdateBaseOptions {\n /** Output data */\n output?: any;\n}\n\n/** Options for updating a span's attributes, input, or output mid-flight. */\nexport interface UpdateSpanOptions extends UpdateBaseOptions {\n /** Span name override */\n name?: string;\n /** Input data */\n input?: any;\n /** Output data */\n output?: any;\n}\n\n/** Options for recording an error on a span. */\nexport interface ErrorSpanOptions extends UpdateBaseOptions {\n /** The error associated with the issue */\n error: MastraError | Error;\n /** End the span when true */\n endSpan?: boolean;\n}\n\n/** Options for retrieving an existing span or creating a new one from a tracing context. */\nexport interface GetOrCreateSpanOptions {\n type: TType;\n name: string;\n entityType?: EntityType;\n entityId?: string;\n entityName?: string;\n input?: any;\n attributes?: SpanTypeMap[TType];\n metadata?: Record;\n tracingPolicy?: TracingPolicy;\n tracingOptions?: TracingOptions;\n tracingContext?: TracingContext;\n requestContext?: RequestContext;\n mastra?: Mastra;\n}\n\n/**\n * Bitwise options to set different types of spans as internal in\n * a workflow or agent execution.\n */\nexport enum InternalSpans {\n /** No spans are marked internal */\n NONE = 0,\n /** Workflow spans are marked internal */\n WORKFLOW = 1 << 0, // 0001\n /** Agent spans are marked internal */\n AGENT = 1 << 1, // 0010\n /** Tool spans are marked internal */\n TOOL = 1 << 2, // 0100\n /** Model spans are marked internal */\n MODEL = 1 << 3, // 1000\n\n /** All spans are marked internal */\n ALL = (1 << 4) - 1, // 1111 (all bits set up to 3)\n}\n\n/**\n * Policy-level tracing configuration applied when creating\n * a workflow or agent. Unlike TracingOptions, which are\n * provided at execution time, policies define persistent rules\n * for how spans are treated across all executions of the\n * workflow/agent.\n */\nexport interface TracingPolicy {\n /**\n * Bitwise options to set different types of spans as Internal in\n * a workflow or agent execution. Internal spans are hidden by\n * default in exported traces.\n */\n internal?: InternalSpans;\n}\n\n/**\n * Trace-level state computed once at the start of a trace\n * and shared by all spans within that trace.\n */\nexport interface TraceState {\n /**\n * RequestContext keys to extract as metadata for all spans in this trace.\n * Computed by merging the tracing config's requestContextKeys\n * with the per-request requestContextKeys.\n */\n requestContextKeys: string[];\n /**\n * When true, input data will be hidden from all spans in this trace.\n */\n hideInput?: boolean;\n /**\n * When true, output data will be hidden from all spans in this trace.\n */\n hideOutput?: boolean;\n}\n\n/**\n * Options passed when starting a new agent or workflow execution\n */\nexport interface TracingOptions {\n /** Metadata to add to the root trace span */\n metadata?: Record;\n /**\n * Additional RequestContext keys to extract as metadata for this trace.\n * These keys are added to the requestContextKeys config.\n * Supports dot notation for nested values (e.g., 'user.id', 'session.data.experimentId').\n */\n requestContextKeys?: string[];\n /**\n * Trace ID to use for this execution (1-32 hexadecimal characters).\n * If provided, this trace will be part of the specified trace rather than starting a new one.\n */\n traceId?: string;\n /**\n * Parent span ID to use for this execution (1-16 hexadecimal characters).\n * If provided, the root span will be created as a child of this span.\n */\n parentSpanId?: string;\n /**\n * Tags to apply to this trace.\n * Tags are string labels that can be used to categorize and filter traces\n * Note: Tags are only applied to the root span of a trace.\n */\n tags?: string[];\n /**\n * When true, input data will be hidden from all spans in this trace.\n * Useful for protecting sensitive data from being logged.\n */\n hideInput?: boolean;\n /**\n * When true, output data will be hidden from all spans in this trace.\n * Useful for protecting sensitive data from being logged.\n */\n hideOutput?: boolean;\n}\n\n/** Trace and span identifiers for correlating spans across systems. */\nexport interface SpanIds {\n traceId: string;\n spanId: string;\n parentSpanId?: string;\n}\n\n/**\n * Context for tracing that flows through workflow and agent execution\n */\nexport interface TracingContext {\n /** Current Span for creating child spans and adding metadata */\n currentSpan?: AnySpan;\n}\n\n/**\n * Properties returned to the user for working with traces externally.\n */\nexport type TracingProperties = {\n /** Trace ID used on the execution (if the execution was traced). */\n traceId?: string;\n /** Root span ID used on the execution (if the execution was traced). */\n spanId?: string;\n};\n\n// ============================================================================\n// Exporter and Processor Interfaces\n// ============================================================================\n\n/**\n * Tracing event types\n */\nexport enum TracingEventType {\n SPAN_STARTED = 'span_started',\n SPAN_UPDATED = 'span_updated',\n SPAN_ENDED = 'span_ended',\n}\n\n/**\n * Tracing events that can be exported\n */\nexport type TracingEvent =\n | { type: TracingEventType.SPAN_STARTED; exportedSpan: AnyExportedSpan }\n | { type: TracingEventType.SPAN_UPDATED; exportedSpan: AnyExportedSpan }\n | { type: TracingEventType.SPAN_ENDED; exportedSpan: AnyExportedSpan };\n\n/**\n * Interface for span processors\n */\nexport interface SpanOutputProcessor {\n /** Processor name */\n name: string;\n /** Process span before export */\n process(span?: AnySpan): AnySpan | undefined;\n /** Shutdown processor */\n shutdown(): Promise;\n}\n\n/**\n * Function type for formatting exported spans at the exporter level.\n *\n * This allows customization of how spans appear in vendor-specific observability platforms\n * (e.g., Langfuse, Braintrust). Unlike SpanOutputProcessor which operates on the internal\n * Span object before export, this formatter operates on the ExportedSpan data structure\n * after the span has been prepared for export.\n *\n * Formatters can be synchronous or asynchronous, enabling use cases like:\n * - Extract plain text from structured AI SDK messages for better readability\n * - Transform input/output format for specific vendor requirements\n * - Add or remove fields based on the target platform\n * - Redact or transform sensitive data in a vendor-specific way\n * - Enrich spans with data from external APIs (async)\n * - Perform database lookups to add context (async)\n *\n * @param span - The exported span to format\n * @returns The formatted span (sync) or a Promise resolving to the formatted span (async)\n *\n * @example\n * ```typescript\n * // Synchronous formatter that extracts plain text from AI messages\n * const plainTextFormatter: CustomSpanFormatter = (span) => {\n * if (span.type === SpanType.AGENT_RUN && Array.isArray(span.input)) {\n * const userMessage = span.input.find(m => m.role === 'user');\n * return {\n * ...span,\n * input: userMessage?.content ?? span.input,\n * };\n * }\n * return span;\n * };\n *\n * // Async formatter that enriches spans with external data\n * const enrichmentFormatter: CustomSpanFormatter = async (span) => {\n * const userData = await fetchUserData(span.metadata?.userId);\n * return {\n * ...span,\n * metadata: { ...span.metadata, userName: userData.name },\n * };\n * };\n *\n * // Use with an exporter\n * new BraintrustExporter({\n * customSpanFormatter: plainTextFormatter,\n * });\n * ```\n */\nexport type CustomSpanFormatter = (span: AnyExportedSpan) => AnyExportedSpan | Promise;\n","/**\n * Browser-safe observability utilities.\n *\n * Functions that depend on AsyncLocalStorage (getCurrentSpan, executeWithContext,\n * executeWithContextSync) are in context-storage.ts and should only be imported\n * by server-side code.\n */\n\nimport { EntityType, SpanType } from './types';\nimport type { Span, GetOrCreateSpanOptions, AnySpan } from './types';\n\nconst entityTypeValues = new Set(Object.values(EntityType));\nlet currentSpanResolver: (() => AnySpan | undefined) | undefined;\n\nexport function setCurrentSpanResolver(resolver: (() => AnySpan | undefined) | undefined): void {\n currentSpanResolver = resolver;\n}\n\nexport function resolveCurrentSpan(): AnySpan | undefined {\n return currentSpanResolver?.();\n}\n\n/** Generate a unique id for an observability signal (log, metric, score, feedback). */\nexport function generateSignalId(): string {\n return crypto.randomUUID();\n}\n\n/**\n * Compute the names of tools the model can call on a single inference step,\n * applying `activeTools` filtering when present. Used to populate the\n * `availableTools` attribute on MODEL_INFERENCE spans so observers see the\n * post-processor tool set, which can differ per-step from the AGENT_RUN view.\n *\n * `activeTools` is treated by presence, not truthiness: an explicit empty\n * array means \"no tools enabled for this step\" and is honored as such.\n * Returns `[]` (not `undefined`) when `tools` is provided but empty, so a\n * tool-less agent still reports a definitive empty list to observers.\n */\nexport function getStepAvailableToolNames(\n tools?: Record | undefined,\n activeTools?: readonly string[] | undefined,\n): string[] | undefined {\n if (activeTools !== undefined) {\n return [...activeTools];\n }\n if (tools) {\n return Object.keys(tools);\n }\n return undefined;\n}\n\n// --- Lazy resolvers for executeWithContext / executeWithContextSync ---\n// The real implementations live in context-storage.ts (which imports AsyncLocalStorage).\n// context-storage.ts registers them at import time so that consumer code can call these\n// browser-safe wrappers without pulling async_hooks into shared chunks.\n\ntype ExecuteWithContextFn = (params: { span?: AnySpan; fn: () => Promise }) => Promise;\ntype ExecuteWithContextSyncFn = (params: { span?: AnySpan; fn: () => T }) => T;\n\nlet executeWithContextImpl: ExecuteWithContextFn | undefined;\nlet executeWithContextSyncImpl: ExecuteWithContextSyncFn | undefined;\n\nexport function setExecuteWithContext(impl: ExecuteWithContextFn): void {\n executeWithContextImpl = impl;\n}\n\nexport function setExecuteWithContextSync(impl: ExecuteWithContextSyncFn): void {\n executeWithContextSyncImpl = impl;\n}\n\n/**\n * Execute an async function within a span's tracing context.\n * Falls back to direct execution if no context-storage implementation is registered or no span exists.\n */\nexport async function executeWithContext(params: { span?: AnySpan; fn: () => Promise }): Promise {\n if (executeWithContextImpl) {\n return executeWithContextImpl(params);\n }\n const { span, fn } = params;\n if (span?.executeInContext) {\n return span.executeInContext(fn);\n }\n return fn();\n}\n\n/**\n * Execute a sync function within a span's tracing context.\n * Falls back to direct execution if no context-storage implementation is registered or no span exists.\n */\nexport function executeWithContextSync(params: { span?: AnySpan; fn: () => T }): T {\n if (executeWithContextSyncImpl) {\n return executeWithContextSyncImpl(params);\n }\n const { span, fn } = params;\n if (span?.executeInContextSync) {\n return span.executeInContextSync(fn);\n }\n return fn();\n}\n\n/**\n * Creates or gets a child span from existing tracing context or starts a new trace.\n * This helper consolidates the common pattern of creating spans that can either be:\n * 1. Children of an existing span (when tracingContext.currentSpan exists)\n * 2. New root spans (when no current span exists)\n *\n * @param options - Configuration object for span creation\n * @returns The created Span or undefined if tracing is disabled\n */\nexport function getOrCreateSpan(options: GetOrCreateSpanOptions): Span | undefined {\n const { type, attributes, tracingContext, requestContext, tracingOptions, ...rest } = options;\n\n const metadata = {\n ...(rest.metadata ?? {}),\n ...(tracingOptions?.metadata ?? {}),\n };\n\n // If we have a current span, create a child span\n if (tracingContext?.currentSpan) {\n return tracingContext.currentSpan.createChildSpan({\n type,\n attributes,\n ...rest,\n metadata,\n requestContext,\n });\n }\n\n // Otherwise, try to create a new root span\n const instance = options.mastra?.observability?.getSelectedInstance({ requestContext });\n\n return instance?.startSpan({\n type,\n attributes,\n ...rest,\n metadata,\n requestContext,\n tracingOptions,\n traceId: tracingOptions?.traceId,\n parentSpanId: tracingOptions?.parentSpanId,\n customSamplerOptions: {\n requestContext,\n metadata,\n },\n });\n}\n\n/**\n * Returns the top-most non-internal span that would appear in exported tracing output.\n *\n * Public API results should use this span for trace/span correlation because internal Mastra\n * workflow spans are omitted from external exporters.\n */\nexport function getRootExportSpan(span?: AnySpan): AnySpan | undefined {\n if (!span?.isValid) {\n return undefined;\n }\n\n let current: AnySpan | undefined = span;\n let rootExportSpan: AnySpan | undefined = span.isInternal ? undefined : span;\n\n while (current?.parent) {\n current = current.parent;\n\n if (!current.isInternal) {\n rootExportSpan = current;\n }\n }\n\n return rootExportSpan;\n}\n\n/**\n * Resolves the best available entity type for a span-like record.\n *\n * Prefers an explicit `entityType` when present and valid, then falls back to the\n * span type for common observability entities.\n */\nexport function getEntityTypeForSpan(span: {\n entityType?: string | null;\n spanType?: SpanType | string | null;\n}): EntityType | undefined {\n if (span.entityType && entityTypeValues.has(span.entityType as EntityType)) {\n return span.entityType as EntityType;\n }\n\n switch (span.spanType) {\n case SpanType.AGENT_RUN:\n return EntityType.AGENT;\n case SpanType.RAG_INGESTION:\n return EntityType.RAG_INGESTION;\n case SpanType.SCORER_RUN:\n case SpanType.SCORER_STEP:\n return EntityType.SCORER;\n case SpanType.WORKFLOW_RUN:\n return EntityType.WORKFLOW_RUN;\n case SpanType.WORKFLOW_STEP:\n return EntityType.WORKFLOW_STEP;\n case SpanType.TOOL_CALL:\n case SpanType.MCP_TOOL_CALL:\n return EntityType.TOOL;\n case SpanType.PROCESSOR_RUN:\n return EntityType.OUTPUT_PROCESSOR;\n default:\n return undefined;\n }\n}\n"]}