@mastra/server 1.70.0 → 1.71.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{agent-versions-D3PJ6_ax.js → agent-versions-BA8ug-Iy.js} +3 -3
- package/dist/{agent-versions-D3PJ6_ax.js.map → agent-versions-BA8ug-Iy.js.map} +1 -1
- package/dist/{agent-versions-DzIbaLyi.cjs → agent-versions-BNqDvnn0.cjs} +3 -3
- package/dist/{agent-versions-DzIbaLyi.cjs.map → agent-versions-BNqDvnn0.cjs.map} +1 -1
- package/dist/{agents-DBtumkdm.cjs → agents-CqEbqSrC.cjs} +2 -2
- package/dist/{agents-DBtumkdm.cjs.map → agents-CqEbqSrC.cjs.map} +1 -1
- package/dist/{agents-BmJNsjp6.js → agents-Dstk6Isf.js} +2 -2
- package/dist/{agents-BmJNsjp6.js.map → agents-Dstk6Isf.js.map} +1 -1
- package/dist/{api-schema-manifest-CE2lXPKH.cjs → api-schema-manifest-CHTg1Kb-.cjs} +2 -2
- package/dist/{api-schema-manifest-CE2lXPKH.cjs.map → api-schema-manifest-CHTg1Kb-.cjs.map} +1 -1
- package/dist/{api-schema-manifest-D0_Q8UhK.js → api-schema-manifest-wibRCXX8.js} +2 -2
- package/dist/{api-schema-manifest-D0_Q8UhK.js.map → api-schema-manifest-wibRCXX8.js.map} +1 -1
- package/dist/{default-options-C9HZGjYi.cjs → default-options-C7tykjLq.cjs} +3 -1
- package/dist/default-options-C7tykjLq.cjs.map +1 -0
- package/dist/{default-options-C9JVjlto.js → default-options-oSlrqpuP.js} +3 -1
- package/dist/{default-options-C9JVjlto.js.map → default-options-oSlrqpuP.js.map} +1 -1
- package/dist/{dist-B3wkDytS.js → dist-D19QgTH4.js} +289 -259
- package/dist/dist-D19QgTH4.js.map +1 -0
- package/dist/{dist-pojdOe9l.cjs → dist-unhwBKm6.cjs} +289 -259
- package/dist/dist-unhwBKm6.cjs.map +1 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/{editor-builder-hB7crH1A.js → editor-builder-BaIipd1y.js} +2 -2
- package/dist/{editor-builder-hB7crH1A.js.map → editor-builder-BaIipd1y.js.map} +1 -1
- package/dist/{editor-builder-BLW-4Sbg.cjs → editor-builder-BbdoWaL_.cjs} +2 -2
- package/dist/{editor-builder-BLW-4Sbg.cjs.map → editor-builder-BbdoWaL_.cjs.map} +1 -1
- package/dist/{editor-builder-DVuvlXR2.cjs → editor-builder-ByrOB5f8.cjs} +2 -2
- package/dist/{editor-builder-DVuvlXR2.cjs.map → editor-builder-ByrOB5f8.cjs.map} +1 -1
- package/dist/{editor-builder-D46tZA82.js → editor-builder-DRn7G0Mr.js} +2 -2
- package/dist/{editor-builder-D46tZA82.js.map → editor-builder-DRn7G0Mr.js.map} +1 -1
- package/dist/{observability-new-endpoints-DJYL-Y5A.cjs → observability-new-endpoints-Ct0CSLE4.cjs} +48 -12
- package/dist/observability-new-endpoints-Ct0CSLE4.cjs.map +1 -0
- package/dist/{observability-new-endpoints-DQHOnzNX.js → observability-new-endpoints-DqS6dcR5.js} +44 -14
- package/dist/observability-new-endpoints-DqS6dcR5.js.map +1 -0
- package/dist/{routes-CeJQfjk5.js → routes-BRIkKqTl.js} +6 -5
- package/dist/routes-BRIkKqTl.js.map +1 -0
- package/dist/{routes-l-SxuNkD.cjs → routes-CLtivVqs.cjs} +6 -5
- package/dist/routes-CLtivVqs.cjs.map +1 -0
- package/dist/{scorer-versions-8-YMrgNx.js → scorer-versions-CscApWzu.js} +2 -2
- package/dist/{scorer-versions-8-YMrgNx.js.map → scorer-versions-CscApWzu.js.map} +1 -1
- package/dist/{scorer-versions-K5H3xinO.cjs → scorer-versions-nip3xSwF.cjs} +2 -2
- package/dist/{scorer-versions-K5H3xinO.cjs.map → scorer-versions-nip3xSwF.cjs.map} +1 -1
- package/dist/server/handlers/agent-builder.cjs +2 -2
- package/dist/server/handlers/agent-builder.js +2 -2
- package/dist/server/handlers/agent-versions.cjs +1 -1
- package/dist/server/handlers/agent-versions.d.ts +16 -0
- package/dist/server/handlers/agent-versions.d.ts.map +1 -1
- package/dist/server/handlers/agent-versions.js +1 -1
- package/dist/server/handlers/agents.cjs +2 -2
- package/dist/server/handlers/agents.d.ts +8 -0
- package/dist/server/handlers/agents.d.ts.map +1 -1
- package/dist/server/handlers/agents.js +2 -2
- package/dist/server/handlers/editor-builder.cjs +1 -1
- package/dist/server/handlers/editor-builder.js +1 -1
- package/dist/server/handlers/error.cjs +15 -0
- package/dist/server/handlers/error.cjs.map +1 -1
- package/dist/server/handlers/error.d.ts.map +1 -1
- package/dist/server/handlers/error.js +15 -0
- package/dist/server/handlers/error.js.map +1 -1
- package/dist/server/handlers/favorites-enrichment.cjs +1 -1
- package/dist/server/handlers/favorites-enrichment.js +1 -1
- package/dist/server/handlers/observability-new-endpoints.cjs +2 -1
- package/dist/server/handlers/observability-new-endpoints.d.ts +126 -0
- package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
- package/dist/server/handlers/observability-new-endpoints.js +2 -2
- package/dist/server/handlers/observability-shared.cjs +127 -0
- package/dist/server/handlers/observability-shared.cjs.map +1 -1
- package/dist/server/handlers/observability-shared.d.ts +49 -0
- package/dist/server/handlers/observability-shared.d.ts.map +1 -1
- package/dist/server/handlers/observability-shared.js +125 -1
- package/dist/server/handlers/observability-shared.js.map +1 -1
- package/dist/server/handlers/observability.cjs +3 -1
- package/dist/server/handlers/observability.cjs.map +1 -1
- package/dist/server/handlers/observability.js +3 -2
- package/dist/server/handlers/observability.js.map +1 -1
- package/dist/server/handlers/plans.cjs +1 -1
- package/dist/server/handlers/plans.js +1 -1
- package/dist/server/handlers/responses.d.ts +11 -11
- package/dist/server/handlers/scorer-versions.cjs +1 -1
- package/dist/server/handlers/scorer-versions.js +1 -1
- package/dist/server/handlers/stored-agent-favorites.cjs +2 -2
- package/dist/server/handlers/stored-agent-favorites.js +2 -2
- package/dist/server/handlers/stored-agents.cjs +2 -2
- package/dist/server/handlers/stored-agents.d.ts +16 -0
- package/dist/server/handlers/stored-agents.d.ts.map +1 -1
- package/dist/server/handlers/stored-agents.js +2 -2
- package/dist/server/handlers/stored-scorers.cjs +1 -1
- package/dist/server/handlers/stored-scorers.js +1 -1
- package/dist/server/handlers/stored-skill-favorites.cjs +1 -1
- package/dist/server/handlers/stored-skill-favorites.js +1 -1
- package/dist/server/handlers/stored-skills.cjs +1 -1
- package/dist/server/handlers/stored-skills.js +1 -1
- package/dist/server/handlers/system.cjs +3 -8
- package/dist/server/handlers/system.cjs.map +1 -1
- package/dist/server/handlers/system.d.ts +28 -0
- package/dist/server/handlers/system.d.ts.map +1 -1
- package/dist/server/handlers/system.js +4 -9
- package/dist/server/handlers/system.js.map +1 -1
- package/dist/server/handlers/tools.cjs +1 -1
- package/dist/server/handlers/tools.js +1 -1
- package/dist/server/handlers/workflow-builder.cjs +1 -1
- package/dist/server/handlers/workflow-builder.js +1 -1
- package/dist/server/handlers/workflows.cjs +1 -1
- package/dist/server/handlers/workflows.js +1 -1
- package/dist/server/schemas/agent-versions.d.ts +10 -0
- package/dist/server/schemas/agent-versions.d.ts.map +1 -1
- package/dist/server/schemas/agents.d.ts +3 -0
- package/dist/server/schemas/agents.d.ts.map +1 -1
- package/dist/server/schemas/default-options.d.ts +1 -0
- package/dist/server/schemas/default-options.d.ts.map +1 -1
- package/dist/server/schemas/index.cjs +9 -8
- package/dist/server/schemas/index.js +9 -9
- package/dist/server/schemas/stored-agents.d.ts +20 -0
- package/dist/server/schemas/stored-agents.d.ts.map +1 -1
- package/dist/server/schemas/system.d.ts +40 -0
- package/dist/server/schemas/system.d.ts.map +1 -1
- package/dist/server/server-adapter/index.cjs +1 -1
- package/dist/server/server-adapter/index.js +1 -1
- package/dist/server/server-adapter/routes/conversations.d.ts +3 -3
- package/dist/server/server-adapter/routes/observability.d.ts +62 -0
- package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/system.d.ts +28 -0
- package/dist/server/server-adapter/routes/system.d.ts.map +1 -1
- package/dist/{stored-agents-50BO-sci.js → stored-agents-CIdYOdK0.js} +2 -2
- package/dist/{stored-agents-50BO-sci.js.map → stored-agents-CIdYOdK0.js.map} +1 -1
- package/dist/{stored-agents-BFT40viq.cjs → stored-agents-DTgigNRY.cjs} +2 -2
- package/dist/{stored-agents-BFT40viq.cjs.map → stored-agents-DTgigNRY.cjs.map} +1 -1
- package/dist/{stored-scorers-DBor7on7.cjs → stored-scorers-CziNmnC8.cjs} +2 -2
- package/dist/{stored-scorers-DBor7on7.cjs.map → stored-scorers-CziNmnC8.cjs.map} +1 -1
- package/dist/{stored-scorers-DLYUKdcQ.js → stored-scorers-DrkDvsU8.js} +2 -2
- package/dist/{stored-scorers-DLYUKdcQ.js.map → stored-scorers-DrkDvsU8.js.map} +1 -1
- package/dist/{system-DMAG21IT.js → system-BE5tDMHq.js} +24 -5
- package/dist/system-BE5tDMHq.js.map +1 -0
- package/dist/{system-D85p7-oz.cjs → system-BlGYb2fu.cjs} +29 -4
- package/dist/system-BlGYb2fu.cjs.map +1 -0
- package/dist/{workflow-builder-d_5P8lL1.cjs → workflow-builder-Cp9M5q2y.cjs} +3 -3
- package/dist/{workflow-builder-d_5P8lL1.cjs.map → workflow-builder-Cp9M5q2y.cjs.map} +1 -1
- package/dist/{workflow-builder-CO7uURIo.js → workflow-builder-JDAg-Yz7.js} +3 -3
- package/dist/{workflow-builder-CO7uURIo.js.map → workflow-builder-JDAg-Yz7.js.map} +1 -1
- package/package.json +6 -6
- package/dist/default-options-C9HZGjYi.cjs.map +0 -1
- package/dist/dist-B3wkDytS.js.map +0 -1
- package/dist/dist-pojdOe9l.cjs.map +0 -1
- package/dist/observability-new-endpoints-DJYL-Y5A.cjs.map +0 -1
- package/dist/observability-new-endpoints-DQHOnzNX.js.map +0 -1
- package/dist/routes-CeJQfjk5.js.map +0 -1
- package/dist/routes-l-SxuNkD.cjs.map +0 -1
- package/dist/system-D85p7-oz.cjs.map +0 -1
- package/dist/system-DMAG21IT.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability-shared.js","names":["candidate"],"sources":["../../../src/server/handlers/observability-shared.ts"],"sourcesContent":["import type { Mastra } from '@mastra/core';\nimport { coreFeatures } from '@mastra/core/features';\nimport type {\n MastraCompositeStore,\n ObservabilityStorage,\n ScoresStorage,\n TrustedThreadPredicate,\n TrustedTraceQueryPredicate,\n} from '@mastra/core/storage';\nimport * as coreStorage from '@mastra/core/storage';\nimport { z } from 'zod/v4';\nimport { HTTPException } from '../http-exception';\nimport type { ServerRoute } from '../server-adapter/routes';\nimport { wrapSchemaForQueryParams } from '../server-adapter/routes/route-builder';\nimport {\n deltaCursorSchema,\n deltaLimitSchema,\n listModeSchema,\n paginationArgsSchema,\n} from './observability-list-query-schemas';\n\nexport const OBSERVABILITY_DELTA_POLLING_FEATURE = 'observability-delta-polling';\nexport const OBSERVABILITY_DELTA_POLLING_UPGRADE_MESSAGE =\n 'Delta polling requires a newer @mastra/core with observability delta polling support. Please upgrade.';\nconst OBSERVABILITY_TRACE_QUERY_STORAGE_FEATURE = 'trace-query';\nconst OBSERVABILITY_TRACE_QUERY_ROOT_DURATION_STORAGE_FEATURE = 'trace-query-root-duration';\nconst OBSERVABILITY_TRACE_QUERY_DISCOVERY_STORAGE_FEATURE = 'trace-query-discovery';\nconst OBSERVABILITY_THREAD_QUERY_STORAGE_FEATURE = 'thread-query';\nconst OBSERVABILITY_TRACE_QUERY_TENANT_SCOPE_STORAGE_FEATURE = 'trace-query-tenant-scope';\nexport const OBSERVABILITY_TRACE_QUERY_TENANT_SCOPE_CORE_FEATURE = 'observability-trace-query-tenant-scope';\nexport const OBSERVABILITY_TRACE_QUERY_TENANT_SCOPE_UPGRADE_MESSAGE =\n 'Trusted tenant scope requires a newer @mastra/core with trace-query tenant scope support. Please upgrade.';\n\nexport function supportsTraceQueryDiscoveryCore() {\n return (\n coreStorage.getTraceQueryFieldsArgsSchema !== undefined &&\n coreStorage.getTraceQueryFieldsResponseSchema !== undefined &&\n coreStorage.getTraceQueryValuesArgsSchema !== undefined &&\n coreStorage.getTraceQueryValuesResponseSchema !== undefined &&\n typeof coreStorage.planTraceQueryObservedFields === 'function' &&\n typeof coreStorage.planTraceQueryValues === 'function' &&\n typeof coreStorage.getTraceQueryCanonicalFieldDescriptors === 'function' &&\n typeof coreStorage.TraceQueryResourceLimitError === 'function'\n );\n}\n\nexport const OBSERVABILITY_LIST_ENDPOINTS = {\n traces: 'traces',\n branches: 'branches',\n logs: 'logs',\n metrics: 'metrics',\n scores: 'scores',\n feedback: 'feedback',\n} as const;\n\nexport type ObservabilityListEndpoint =\n (typeof OBSERVABILITY_LIST_ENDPOINTS)[keyof typeof OBSERVABILITY_LIST_ENDPOINTS];\nconst OBSERVABILITY_DELTA_POLLING_STORAGE_FEATURE = 'delta-polling';\n\nfunction getFeatures(observabilityStore: ObservabilityStorage): readonly string[] | undefined {\n const candidate = observabilityStore as ObservabilityStorage & {\n getFeatures?: () => readonly string[] | undefined;\n };\n return candidate.getFeatures?.();\n}\n\n/** Retrieves MastraCompositeStore or throws 500 if unavailable. */\nexport function getStorage(mastra: Mastra): MastraCompositeStore {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not available' });\n }\n return storage;\n}\n\n/** Retrieves the observability storage domain or throws 501 if unavailable. */\nexport async function getObservabilityStore(mastra: Mastra): Promise<ObservabilityStorage> {\n const storage = getStorage(mastra);\n const observability = await storage.getStore('observability');\n if (!observability) {\n // 501, not 500: a missing or explicitly disabled observability domain\n // (e.g. `domains: { observability: false }`) is a capability gap, not a\n // server failure — matching the other 501s in this file.\n throw new HTTPException(501, { message: 'Observability storage domain is not available' });\n }\n return observability;\n}\n\n/** Retrieves the scores storage domain or throws 501 if unavailable. */\nexport async function getScoresStore(mastra: Mastra): Promise<ScoresStorage> {\n const storage = getStorage(mastra);\n const scores = await storage.getStore('scores');\n if (!scores) {\n throw new HTTPException(501, { message: 'Scores storage domain is not available' });\n }\n return scores;\n}\n\nexport function assertObservabilityTraceQuerySupported(observabilityStore: ObservabilityStorage) {\n if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_TRACE_QUERY_STORAGE_FEATURE)) return;\n\n throw new HTTPException(501, {\n message: 'Advanced trace queries are not supported by the configured observability store',\n });\n}\n\nfunction usesRootDuration(predicate: TrustedTraceQueryPredicate | TrustedThreadPredicate | undefined): boolean {\n if (!predicate) return false;\n if (predicate.type === 'boolean') return predicate.args.some(usesRootDuration);\n if (predicate.type === 'not') return usesRootDuration(predicate.arg);\n if (predicate.type === 'relation') {\n return predicate.collection === 'traces' && usesRootDuration(predicate.predicate);\n }\n return predicate.field === 'durationMs';\n}\n\nexport function supportsObservabilityTraceQueryRootDuration(observabilityStore: ObservabilityStorage) {\n return getFeatures(observabilityStore)?.includes(OBSERVABILITY_TRACE_QUERY_ROOT_DURATION_STORAGE_FEATURE) === true;\n}\n\nexport function assertObservabilityTraceQueryRootDurationSupported(\n observabilityStore: ObservabilityStorage,\n predicate: TrustedTraceQueryPredicate | TrustedThreadPredicate | undefined,\n) {\n if (!usesRootDuration(predicate) || supportsObservabilityTraceQueryRootDuration(observabilityStore)) return;\n\n throw new HTTPException(501, {\n message: 'Root duration predicates are not supported by the configured observability store',\n });\n}\n\nexport function assertObservabilityTraceQueryDiscoverySupported(observabilityStore: ObservabilityStorage) {\n if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_TRACE_QUERY_DISCOVERY_STORAGE_FEATURE)) return;\n\n throw new HTTPException(501, {\n message: 'Trace query discovery is not supported by the configured observability store',\n });\n}\n\n/**\n * A scoped request must never run unscoped: a store that predates tenant scope would\n * silently ignore `plan.scope` and return every tenant's rows, so it is rejected instead.\n * Unscoped requests are unaffected.\n */\nexport function assertObservabilityTraceQueryTenantScopeSupported(\n observabilityStore: ObservabilityStorage,\n scope: coreStorage.TraceQueryTenantScope | undefined,\n) {\n if (scope === undefined) return;\n if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_TRACE_QUERY_TENANT_SCOPE_STORAGE_FEATURE)) return;\n\n throw new HTTPException(501, {\n message: 'The configured observability store cannot enforce the trusted tenant scope',\n });\n}\n\nexport function assertObservabilityThreadQuerySupported(observabilityStore: ObservabilityStorage) {\n if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_THREAD_QUERY_STORAGE_FEATURE)) return;\n\n throw new HTTPException(501, {\n message: 'Advanced thread queries are not supported by the configured observability store',\n });\n}\n\nexport function assertObservabilityDeltaSupported(\n observabilityStore: ObservabilityStorage,\n endpoint: ObservabilityListEndpoint,\n) {\n if (!coreFeatures.has(OBSERVABILITY_DELTA_POLLING_FEATURE)) {\n throw new HTTPException(501, {\n message: `${OBSERVABILITY_DELTA_POLLING_UPGRADE_MESSAGE} (endpoint: ${endpoint})`,\n });\n }\n\n if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_DELTA_POLLING_STORAGE_FEATURE)) {\n return;\n }\n\n throw new HTTPException(501, {\n message: `Delta polling is not supported by the configured observability store for ${endpoint}`,\n });\n}\n\nexport interface RouteDetails {\n method: ServerRoute['method'];\n path: `/${string}`;\n summary: string;\n description: string;\n requiresPermission?: ServerRoute['requiresPermission'];\n}\n\nexport const NEW_ROUTE_DEFS = {\n QUERY_TRACES: {\n method: 'POST',\n path: '/observability/traces/query',\n summary: 'Query traces',\n description:\n 'Returns completed logical traces or distinct thread groups matching an advanced trace query. Thread grouping remains supported but is deprecated; use queryTraceThreads instead.',\n requiresPermission: 'observability:read',\n },\n\n QUERY_THREADS: {\n method: 'POST',\n path: '/observability/threads/query',\n summary: 'Query threads',\n description: 'Returns thread identities matching eligible trace and cross-trace predicates',\n requiresPermission: 'observability:read',\n },\n\n GET_TRACE_QUERY_FIELDS: {\n method: 'POST',\n path: '/observability/traces/query/fields',\n summary: 'Discover trace query fields',\n description: 'Returns canonical query fields and observed top-level string metadata fields',\n requiresPermission: 'observability:read',\n },\n\n GET_TRACE_QUERY_VALUES: {\n method: 'POST',\n path: '/observability/traces/query/values',\n summary: 'Discover trace query values',\n description: 'Returns bounded string value suggestions and occurrence counts for one eligible query field',\n requiresPermission: 'observability:read',\n },\n\n LIST_METRICS: {\n method: 'GET',\n path: '/observability/metrics',\n summary: 'List metrics',\n description: 'Returns a paginated list of metrics with optional filtering and sorting',\n },\n\n LIST_LOGS: {\n method: 'GET',\n path: '/observability/logs',\n summary: 'List logs',\n description: 'Returns a paginated list of logs with optional filtering and sorting',\n },\n\n LIST_SCORES: {\n method: 'GET',\n path: '/observability/scores',\n summary: 'List scores',\n description: 'Returns a paginated list of scores with optional filtering and sorting',\n },\n\n CREATE_SCORE: {\n method: 'POST',\n path: '/observability/scores',\n summary: 'Create a score',\n description: 'Creates a single score record in the observability store',\n },\n\n DELETE_SCORES: {\n method: 'DELETE',\n path: '/observability/scores',\n summary: 'Delete scores',\n description: 'Deletes score records by scoreId, optionally scoped to a tenant',\n requiresPermission: 'observability:delete',\n },\n\n GET_SCORE: {\n method: 'GET',\n path: '/observability/scores/:scoreId',\n summary: 'Get score',\n description: 'Returns a single score by scoreId',\n },\n\n GET_SCORE_AGGREGATE: {\n method: 'POST',\n path: '/observability/scores/aggregate',\n summary: 'Get score aggregate',\n description: 'Returns an aggregated score value with optional period-over-period comparison',\n requiresPermission: 'observability:read',\n },\n\n GET_SCORE_BREAKDOWN: {\n method: 'POST',\n path: '/observability/scores/breakdown',\n summary: 'Get score breakdown',\n description: 'Returns score values grouped by specified dimensions',\n requiresPermission: 'observability:read',\n },\n\n GET_SCORE_TIME_SERIES: {\n method: 'POST',\n path: '/observability/scores/timeseries',\n summary: 'Get score time series',\n description: 'Returns score values bucketed by time interval with optional grouping',\n requiresPermission: 'observability:read',\n },\n\n GET_SCORE_PERCENTILES: {\n method: 'POST',\n path: '/observability/scores/percentiles',\n summary: 'Get score percentiles',\n description: 'Returns percentile values for a score bucketed by time interval',\n requiresPermission: 'observability:read',\n },\n\n LIST_FEEDBACK: {\n method: 'GET',\n path: '/observability/feedback',\n summary: 'List feedback',\n description: 'Returns a paginated list of feedback with optional filtering and sorting',\n },\n\n CREATE_FEEDBACK: {\n method: 'POST',\n path: '/observability/feedback',\n summary: 'Create feedback',\n description: 'Creates a single feedback record in the observability store',\n },\n\n DELETE_FEEDBACK: {\n method: 'DELETE',\n path: '/observability/feedback',\n summary: 'Delete feedback',\n description: 'Deletes feedback records by feedbackId, optionally scoped to a tenant',\n requiresPermission: 'observability:delete',\n },\n\n UPDATE_FEEDBACK_REVIEW_STATUS: {\n method: 'PATCH',\n path: '/observability/feedback/:feedbackId/review-status',\n summary: 'Update feedback review status',\n description: \"Updates a feedback record's review workflow status\",\n requiresPermission: 'observability:write',\n },\n\n GET_FEEDBACK_AGGREGATE: {\n method: 'POST',\n path: '/observability/feedback/aggregate',\n summary: 'Get feedback aggregate',\n description: 'Returns an aggregated numeric feedback value with optional period-over-period comparison',\n requiresPermission: 'observability:read',\n },\n\n GET_FEEDBACK_BREAKDOWN: {\n method: 'POST',\n path: '/observability/feedback/breakdown',\n summary: 'Get feedback breakdown',\n description: 'Returns numeric feedback values grouped by specified dimensions',\n requiresPermission: 'observability:read',\n },\n\n GET_FEEDBACK_TIME_SERIES: {\n method: 'POST',\n path: '/observability/feedback/timeseries',\n summary: 'Get feedback time series',\n description: 'Returns numeric feedback values bucketed by time interval with optional grouping',\n requiresPermission: 'observability:read',\n },\n\n GET_FEEDBACK_PERCENTILES: {\n method: 'POST',\n path: '/observability/feedback/percentiles',\n summary: 'Get feedback percentiles',\n description: 'Returns percentile values for numeric feedback bucketed by time interval',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_AGGREGATE: {\n method: 'POST',\n path: '/observability/metrics/aggregate',\n summary: 'Get metric aggregate',\n description: 'Returns an aggregated metric value with optional period-over-period comparison',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_BREAKDOWN: {\n method: 'POST',\n path: '/observability/metrics/breakdown',\n summary: 'Get metric breakdown',\n description: 'Returns metric values grouped by specified dimensions',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_TIME_SERIES: {\n method: 'POST',\n path: '/observability/metrics/timeseries',\n summary: 'Get metric time series',\n description: 'Returns metric values bucketed by time interval with optional grouping',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_PERCENTILES: {\n method: 'POST',\n path: '/observability/metrics/percentiles',\n summary: 'Get metric percentiles',\n description: 'Returns percentile values for a metric bucketed by time interval',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_NAMES: {\n method: 'GET',\n path: '/observability/discovery/metric-names',\n summary: 'Get metric names',\n description: 'Returns distinct metric names with optional prefix filtering',\n },\n\n GET_METRIC_LABEL_KEYS: {\n method: 'GET',\n path: '/observability/discovery/metric-label-keys',\n summary: 'Get metric label keys',\n description: 'Returns distinct label keys for a given metric',\n },\n\n GET_METRIC_LABEL_VALUES: {\n method: 'GET',\n path: '/observability/discovery/metric-label-values',\n summary: 'Get label values',\n description: 'Returns distinct values for a given metric label key',\n },\n\n GET_ENTITY_TYPES: {\n method: 'GET',\n path: '/observability/discovery/entity-types',\n summary: 'Get entity types',\n description: 'Returns distinct entity types from observability data',\n },\n\n GET_ENTITY_NAMES: {\n method: 'GET',\n path: '/observability/discovery/entity-names',\n summary: 'Get entity names',\n description: 'Returns distinct entity names with optional type filtering',\n },\n\n GET_SERVICE_NAMES: {\n method: 'GET',\n path: '/observability/discovery/service-names',\n summary: 'Get service names',\n description: 'Returns distinct service names from observability data',\n },\n\n GET_ENVIRONMENTS: {\n method: 'GET',\n path: '/observability/discovery/environments',\n summary: 'Get environments',\n description: 'Returns distinct environments from observability data',\n },\n\n GET_TAGS: {\n method: 'GET',\n path: '/observability/discovery/tags',\n summary: 'Get tags',\n description: 'Returns distinct tags with optional entity type filtering',\n },\n} as const satisfies Record<string, RouteDetails>;\n\nexport type NewRoutesKey = keyof typeof NEW_ROUTE_DEFS;\nexport type NewRoutesDefinitions = (typeof NEW_ROUTE_DEFS)[NewRoutesKey];\n\nexport function createObservabilityListQuerySchema<\n TFilter extends z.ZodObject<z.ZodRawShape>,\n TOrderBy extends z.ZodObject<z.ZodRawShape>,\n>(filterSchema: TFilter, orderBySchema: TOrderBy) {\n const unwrapDefault = (schema: unknown) => {\n const zodSchema = schema as z.ZodTypeAny;\n return zodSchema instanceof z.ZodDefault ? zodSchema.unwrap() : zodSchema;\n };\n const paginationShape = paginationArgsSchema.shape as unknown as Record<string, z.ZodTypeAny>;\n const orderByShape = orderBySchema.shape as unknown as Record<string, z.ZodTypeAny>;\n\n const pageSchema = unwrapDefault(paginationShape.page);\n const perPageSchema = unwrapDefault(paginationShape.perPage);\n const fieldSchema = orderByShape.field ? unwrapDefault(orderByShape.field) : z.never().optional();\n const directionSchema = orderByShape.direction ? unwrapDefault(orderByShape.direction) : z.never().optional();\n\n return wrapSchemaForQueryParams(\n z\n .object({\n ...filterSchema.shape,\n page: pageSchema,\n perPage: perPageSchema,\n field: fieldSchema,\n direction: directionSchema,\n mode: listModeSchema.optional(),\n after: deltaCursorSchema.optional(),\n limit: deltaLimitSchema,\n })\n .partial(),\n ).superRefine((value, ctx) => {\n const isDelta = value.mode === 'delta';\n const hasPagination = value.page !== undefined || value.perPage !== undefined;\n const hasOrderBy = value.field !== undefined || value.direction !== undefined;\n const hasAfter = value.after !== undefined;\n const hasLimit = value.limit !== undefined;\n\n if (isDelta) {\n if (hasPagination) {\n if (value.page !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['page'],\n message: '`page` is not allowed when `mode=delta`',\n });\n }\n if (value.perPage !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['perPage'],\n message: '`perPage` is not allowed when `mode=delta`',\n });\n }\n }\n if (hasOrderBy) {\n if (value.field !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['field'],\n message: '`field` is not allowed when `mode=delta`',\n });\n }\n if (value.direction !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['direction'],\n message: '`direction` is not allowed when `mode=delta`',\n });\n }\n }\n return;\n }\n\n if (hasAfter) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['after'],\n message: '`after` is only allowed when `mode=delta`',\n });\n }\n if (hasLimit) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['limit'],\n message: '`limit` is only allowed when `mode=delta`',\n });\n }\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"observability-shared.js","names":["candidate"],"sources":["../../../src/server/handlers/observability-shared.ts"],"sourcesContent":["import type { Mastra } from '@mastra/core';\nimport { coreFeatures } from '@mastra/core/features';\nimport type {\n MastraCompositeStore,\n ObservabilityStorage,\n ScoresStorage,\n TrustedThreadPredicate,\n TrustedTraceQueryPredicate,\n} from '@mastra/core/storage';\nimport * as coreStorage from '@mastra/core/storage';\nimport { z } from 'zod/v4';\nimport { HTTPException } from '../http-exception';\nimport type { ServerRoute } from '../server-adapter/routes';\nimport { wrapSchemaForQueryParams } from '../server-adapter/routes/route-builder';\nimport {\n deltaCursorSchema,\n deltaLimitSchema,\n listModeSchema,\n paginationArgsSchema,\n} from './observability-list-query-schemas';\n\nexport const OBSERVABILITY_DELTA_POLLING_FEATURE = 'observability-delta-polling';\nexport const OBSERVABILITY_DELTA_POLLING_UPGRADE_MESSAGE =\n 'Delta polling requires a newer @mastra/core with observability delta polling support. Please upgrade.';\nconst OBSERVABILITY_TRACE_QUERY_STORAGE_FEATURE = 'trace-query';\nconst OBSERVABILITY_TRACE_QUERY_ROOT_DURATION_STORAGE_FEATURE = 'trace-query-root-duration';\nconst OBSERVABILITY_TRACE_QUERY_DISCOVERY_STORAGE_FEATURE = 'trace-query-discovery';\nconst OBSERVABILITY_THREAD_QUERY_STORAGE_FEATURE = 'thread-query';\nconst OBSERVABILITY_TRACE_QUERY_TENANT_SCOPE_STORAGE_FEATURE = 'trace-query-tenant-scope';\nconst OBSERVABILITY_FEEDBACK_STORAGE_FEATURE = 'feedback';\nexport const OBSERVABILITY_TRACE_QUERY_TENANT_SCOPE_CORE_FEATURE = 'observability-trace-query-tenant-scope';\nexport const OBSERVABILITY_TRACE_QUERY_TENANT_SCOPE_UPGRADE_MESSAGE =\n 'Trusted tenant scope requires a newer @mastra/core with trace-query tenant scope support. Please upgrade.';\n\nexport function supportsTraceQueryDiscoveryCore() {\n return (\n coreStorage.getTraceQueryFieldsArgsSchema !== undefined &&\n coreStorage.getTraceQueryFieldsResponseSchema !== undefined &&\n coreStorage.getTraceQueryValuesArgsSchema !== undefined &&\n coreStorage.getTraceQueryValuesResponseSchema !== undefined &&\n typeof coreStorage.planTraceQueryObservedFields === 'function' &&\n typeof coreStorage.planTraceQueryValues === 'function' &&\n typeof coreStorage.getTraceQueryCanonicalFieldDescriptors === 'function' &&\n typeof coreStorage.TraceQueryResourceLimitError === 'function'\n );\n}\n\nexport const OBSERVABILITY_LIST_ENDPOINTS = {\n traces: 'traces',\n branches: 'branches',\n logs: 'logs',\n metrics: 'metrics',\n scores: 'scores',\n feedback: 'feedback',\n} as const;\n\nexport type ObservabilityListEndpoint =\n (typeof OBSERVABILITY_LIST_ENDPOINTS)[keyof typeof OBSERVABILITY_LIST_ENDPOINTS];\nconst OBSERVABILITY_DELTA_POLLING_STORAGE_FEATURE = 'delta-polling';\n\nfunction getFeatures(observabilityStore: ObservabilityStorage): readonly string[] | undefined {\n const candidate = observabilityStore as ObservabilityStorage & {\n getFeatures?: () => readonly string[] | undefined;\n };\n return candidate.getFeatures?.();\n}\n\n/** Retrieves MastraCompositeStore or throws 500 if unavailable. */\nexport function getStorage(mastra: Mastra): MastraCompositeStore {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not available' });\n }\n return storage;\n}\n\n/** Retrieves the observability storage domain or throws 501 if unavailable. */\nexport async function getObservabilityStore(mastra: Mastra): Promise<ObservabilityStorage> {\n const storage = getStorage(mastra);\n const observability = await storage.getStore('observability');\n if (!observability) {\n // 501, not 500: a missing or explicitly disabled observability domain\n // (e.g. `domains: { observability: false }`) is a capability gap, not a\n // server failure — matching the other 501s in this file.\n throw new HTTPException(501, { message: 'Observability storage domain is not available' });\n }\n return observability;\n}\n\n/** Retrieves the scores storage domain or throws 501 if unavailable. */\nexport async function getScoresStore(mastra: Mastra): Promise<ScoresStorage> {\n const storage = getStorage(mastra);\n const scores = await storage.getStore('scores');\n if (!scores) {\n throw new HTTPException(501, { message: 'Scores storage domain is not available' });\n }\n return scores;\n}\n\nexport function assertObservabilityTraceQuerySupported(observabilityStore: ObservabilityStorage) {\n if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_TRACE_QUERY_STORAGE_FEATURE)) return;\n\n throw new HTTPException(501, {\n message: 'Advanced trace queries are not supported by the configured observability store',\n });\n}\n\nfunction usesRootDuration(predicate: TrustedTraceQueryPredicate | TrustedThreadPredicate | undefined): boolean {\n if (!predicate) return false;\n if (predicate.type === 'boolean') return predicate.args.some(usesRootDuration);\n if (predicate.type === 'not') return usesRootDuration(predicate.arg);\n if (predicate.type === 'relation') {\n return predicate.collection === 'traces' && usesRootDuration(predicate.predicate);\n }\n return predicate.field === 'durationMs';\n}\n\nexport function supportsObservabilityTraceQueryRootDuration(observabilityStore: ObservabilityStorage) {\n return getFeatures(observabilityStore)?.includes(OBSERVABILITY_TRACE_QUERY_ROOT_DURATION_STORAGE_FEATURE) === true;\n}\n\nexport function assertObservabilityTraceQueryRootDurationSupported(\n observabilityStore: ObservabilityStorage,\n predicate: TrustedTraceQueryPredicate | TrustedThreadPredicate | undefined,\n) {\n if (!usesRootDuration(predicate) || supportsObservabilityTraceQueryRootDuration(observabilityStore)) return;\n\n throw new HTTPException(501, {\n message: 'Root duration predicates are not supported by the configured observability store',\n });\n}\n\nexport function assertObservabilityTraceQueryDiscoverySupported(observabilityStore: ObservabilityStorage) {\n if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_TRACE_QUERY_DISCOVERY_STORAGE_FEATURE)) return;\n\n throw new HTTPException(501, {\n message: 'Trace query discovery is not supported by the configured observability store',\n });\n}\n\n/**\n * A scoped request must never run unscoped: a store that predates tenant scope would\n * silently ignore `plan.scope` and return every tenant's rows, so it is rejected instead.\n * Unscoped requests are unaffected.\n */\nexport function assertObservabilityTraceQueryTenantScopeSupported(\n observabilityStore: ObservabilityStorage,\n scope: coreStorage.TraceQueryTenantScope | undefined,\n) {\n if (scope === undefined) return;\n if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_TRACE_QUERY_TENANT_SCOPE_STORAGE_FEATURE)) return;\n\n throw new HTTPException(501, {\n message: 'The configured observability store cannot enforce the trusted tenant scope',\n });\n}\n\nexport function assertObservabilityThreadQuerySupported(observabilityStore: ObservabilityStorage) {\n if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_THREAD_QUERY_STORAGE_FEATURE)) return;\n\n throw new HTTPException(501, {\n message: 'Advanced thread queries are not supported by the configured observability store',\n });\n}\n\n/**\n * Returns true when the store's class chain overrides `method` below the class\n * that first declares it (the `ObservabilityStorage` base, whose default\n * throws `*_NOT_IMPLEMENTED`). Walks the store's own prototype chain instead of\n * comparing against this package's `ObservabilityStorage.prototype`, so it\n * works for stores built against older or duplicated `@mastra/core` installs\n * and for stores that predate {@link ObservabilityStorage.getFeatures}.\n */\nfunction implementsObservabilityStorageMethod(observabilityStore: object, method: string): boolean {\n if (Object.prototype.hasOwnProperty.call(observabilityStore, method)) return true;\n\n let resolvedOwner: object | undefined;\n let declaringBase: object | undefined;\n for (\n let proto: object | null = Object.getPrototypeOf(observabilityStore);\n proto && proto !== Object.prototype;\n proto = Object.getPrototypeOf(proto)\n ) {\n if (Object.prototype.hasOwnProperty.call(proto, method)) {\n resolvedOwner ??= proto;\n declaringBase = proto;\n }\n }\n return resolvedOwner !== undefined && resolvedOwner !== declaringBase;\n}\n\nexport type ObservabilityDiscoveryCapabilities = {\n entityTypes: boolean;\n entityNames: boolean;\n serviceNames: boolean;\n environments: boolean;\n tags: boolean;\n metrics: boolean;\n};\n\nexport type ObservabilityStorageCapabilities = {\n metrics: boolean;\n logs: boolean;\n discovery: ObservabilityDiscoveryCapabilities;\n deltaPolling: boolean;\n traceQuery: boolean;\n traceQueryRootDuration: boolean;\n traceQueryDiscovery: boolean;\n traceQueryTenantScope: boolean;\n threadQuery: boolean;\n feedback: boolean;\n};\n\nexport const NO_OBSERVABILITY_STORAGE_CAPABILITIES: ObservabilityStorageCapabilities = {\n metrics: false,\n logs: false,\n discovery: {\n entityTypes: false,\n entityNames: false,\n serviceNames: false,\n environments: false,\n tags: false,\n metrics: false,\n },\n deltaPolling: false,\n traceQuery: false,\n traceQueryRootDuration: false,\n traceQueryDiscovery: false,\n traceQueryTenantScope: false,\n threadQuery: false,\n feedback: false,\n};\n\n/**\n * Resolves which optional observability APIs the configured store can serve.\n *\n * Feature declarations (`getFeatures()`) are optional. When a store declares\n * a feature list, that list is final. Stores without `getFeatures()` predate\n * declarations: metrics, logs and filter discovery are detected by whether the\n * store implements the underlying method, so those packages report accurately\n * without being upgraded. Delta polling and the trace/thread query APIs depend\n * on runtime behavior a method check can't see, so they are only reported for\n * stores that declare them. Feedback is also declaration-only: Studio hides\n * the feedback UI behind this flag, and store versions that implement feedback\n * without declaring it simply don't advertise it until upgraded.\n */\nexport function getObservabilityStorageCapabilities(\n observabilityStore: ObservabilityStorage,\n): ObservabilityStorageCapabilities {\n const declaredFeatures = getFeatures(observabilityStore);\n const features = declaredFeatures ?? [];\n const newApiCore = coreFeatures.has('observability:v1.13.2');\n const declares = (feature: string) => features.includes(feature);\n // Undeclared stores must implement every method behind the feature.\n const supports = (feature: string, methods: readonly string[]) => {\n if (!newApiCore) return false;\n if (!declaredFeatures) {\n return methods.every(method => implementsObservabilityStorageMethod(observabilityStore, method));\n }\n return declares(feature);\n };\n // Stores released before the per-endpoint discovery features existed declare\n // `trace-query` and implement every discovery method, so treat it as implying discovery.\n const supportsDiscovery = (feature: string, methods: readonly string[]) =>\n supports(feature, methods) || (newApiCore && declares(OBSERVABILITY_TRACE_QUERY_STORAGE_FEATURE));\n const traceQuery =\n newApiCore &&\n typeof coreStorage.planTraceQuery === 'function' &&\n declares(OBSERVABILITY_TRACE_QUERY_STORAGE_FEATURE);\n const threadQuery =\n newApiCore &&\n typeof coreStorage.planThreadQuery === 'function' &&\n declares(OBSERVABILITY_THREAD_QUERY_STORAGE_FEATURE);\n\n return {\n // `listMetrics` is left out: it backs a newer route that metric dashboards don't use,\n // and older stores that implement the OLAP methods predate it.\n metrics: supports('metrics', [\n 'getMetricAggregate',\n 'getMetricBreakdown',\n 'getMetricTimeSeries',\n 'getMetricPercentiles',\n ]),\n logs: supports('logs', ['listLogs']),\n discovery: {\n entityTypes: supportsDiscovery('entity-type-discovery', ['getEntityTypes']),\n entityNames: supportsDiscovery('entity-name-discovery', ['getEntityNames']),\n serviceNames: supportsDiscovery('service-name-discovery', ['getServiceNames']),\n environments: supportsDiscovery('environment-discovery', ['getEnvironments']),\n tags: supportsDiscovery('tag-discovery', ['getTags']),\n metrics: supportsDiscovery('metric-discovery', ['getMetricNames', 'getMetricLabelKeys', 'getMetricLabelValues']),\n },\n deltaPolling:\n coreFeatures.has(OBSERVABILITY_DELTA_POLLING_FEATURE) && declares(OBSERVABILITY_DELTA_POLLING_STORAGE_FEATURE),\n traceQuery,\n traceQueryRootDuration:\n (traceQuery || threadQuery) && declares(OBSERVABILITY_TRACE_QUERY_ROOT_DURATION_STORAGE_FEATURE),\n traceQueryDiscovery:\n newApiCore && supportsTraceQueryDiscoveryCore() && declares(OBSERVABILITY_TRACE_QUERY_DISCOVERY_STORAGE_FEATURE),\n traceQueryTenantScope:\n (traceQuery || threadQuery) &&\n coreFeatures.has(OBSERVABILITY_TRACE_QUERY_TENANT_SCOPE_CORE_FEATURE) &&\n declares(OBSERVABILITY_TRACE_QUERY_TENANT_SCOPE_STORAGE_FEATURE),\n threadQuery,\n feedback: newApiCore && declares(OBSERVABILITY_FEEDBACK_STORAGE_FEATURE),\n };\n}\n\n/**\n * Matches the `OBSERVABILITY_STORAGE_*_NOT_IMPLEMENTED` MastraError the base\n * observability store throws for every optional method a store doesn't\n * implement. Checked by id (not `instanceof`) so it holds across duplicated\n * `@mastra/core` installs.\n */\nfunction isObservabilityStorageNotImplementedError(error: unknown): boolean {\n const id = error && typeof error === 'object' && 'id' in error ? error.id : undefined;\n return typeof id === 'string' && id.startsWith('OBSERVABILITY_STORAGE_') && id.endsWith('_NOT_IMPLEMENTED');\n}\n\n/**\n * Discovery is optional for observability stores. When the configured store\n * doesn't implement a discovery method, answer with an empty result instead of\n * a 500 so filter lookups degrade quietly on stores without discovery support.\n * Clients should check `observabilityStorageCapabilities.discovery` from\n * `GET /system/packages` before calling these routes.\n */\nexport async function withDiscoveryFallback<T>(run: () => Promise<T>, empty: T): Promise<T> {\n try {\n return await run();\n } catch (error) {\n if (isObservabilityStorageNotImplementedError(error)) return empty;\n throw error;\n }\n}\n\nexport function assertObservabilityDeltaSupported(\n observabilityStore: ObservabilityStorage,\n endpoint: ObservabilityListEndpoint,\n) {\n if (!coreFeatures.has(OBSERVABILITY_DELTA_POLLING_FEATURE)) {\n throw new HTTPException(501, {\n message: `${OBSERVABILITY_DELTA_POLLING_UPGRADE_MESSAGE} (endpoint: ${endpoint})`,\n });\n }\n\n if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_DELTA_POLLING_STORAGE_FEATURE)) {\n return;\n }\n\n throw new HTTPException(501, {\n message: `Delta polling is not supported by the configured observability store for ${endpoint}`,\n });\n}\n\nexport interface RouteDetails {\n method: ServerRoute['method'];\n path: `/${string}`;\n summary: string;\n description: string;\n requiresPermission?: ServerRoute['requiresPermission'];\n}\n\nexport const NEW_ROUTE_DEFS = {\n QUERY_TRACES: {\n method: 'POST',\n path: '/observability/traces/query',\n summary: 'Query traces',\n description:\n 'Returns completed logical traces or distinct thread groups matching an advanced trace query. Thread grouping remains supported but is deprecated; use queryTraceThreads instead.',\n requiresPermission: 'observability:read',\n },\n\n QUERY_THREADS: {\n method: 'POST',\n path: '/observability/threads/query',\n summary: 'Query threads',\n description: 'Returns thread identities matching eligible trace and cross-trace predicates',\n requiresPermission: 'observability:read',\n },\n\n GET_TRACE_QUERY_FIELDS: {\n method: 'POST',\n path: '/observability/traces/query/fields',\n summary: 'Discover trace query fields',\n description: 'Returns canonical query fields and observed top-level string metadata fields',\n requiresPermission: 'observability:read',\n },\n\n GET_TRACE_QUERY_VALUES: {\n method: 'POST',\n path: '/observability/traces/query/values',\n summary: 'Discover trace query values',\n description: 'Returns bounded string value suggestions and occurrence counts for one eligible query field',\n requiresPermission: 'observability:read',\n },\n\n LIST_METRICS: {\n method: 'GET',\n path: '/observability/metrics',\n summary: 'List metrics',\n description: 'Returns a paginated list of metrics with optional filtering and sorting',\n },\n\n LIST_LOGS: {\n method: 'GET',\n path: '/observability/logs',\n summary: 'List logs',\n description: 'Returns a paginated list of logs with optional filtering and sorting',\n },\n\n LIST_SCORES: {\n method: 'GET',\n path: '/observability/scores',\n summary: 'List scores',\n description: 'Returns a paginated list of scores with optional filtering and sorting',\n },\n\n CREATE_SCORE: {\n method: 'POST',\n path: '/observability/scores',\n summary: 'Create a score',\n description: 'Creates a single score record in the observability store',\n },\n\n DELETE_SCORES: {\n method: 'DELETE',\n path: '/observability/scores',\n summary: 'Delete scores',\n description: 'Deletes score records by scoreId, optionally scoped to a tenant',\n requiresPermission: 'observability:delete',\n },\n\n GET_SCORE: {\n method: 'GET',\n path: '/observability/scores/:scoreId',\n summary: 'Get score',\n description: 'Returns a single score by scoreId',\n },\n\n GET_SCORE_AGGREGATE: {\n method: 'POST',\n path: '/observability/scores/aggregate',\n summary: 'Get score aggregate',\n description: 'Returns an aggregated score value with optional period-over-period comparison',\n requiresPermission: 'observability:read',\n },\n\n GET_SCORE_BREAKDOWN: {\n method: 'POST',\n path: '/observability/scores/breakdown',\n summary: 'Get score breakdown',\n description: 'Returns score values grouped by specified dimensions',\n requiresPermission: 'observability:read',\n },\n\n GET_SCORE_TIME_SERIES: {\n method: 'POST',\n path: '/observability/scores/timeseries',\n summary: 'Get score time series',\n description: 'Returns score values bucketed by time interval with optional grouping',\n requiresPermission: 'observability:read',\n },\n\n GET_SCORE_PERCENTILES: {\n method: 'POST',\n path: '/observability/scores/percentiles',\n summary: 'Get score percentiles',\n description: 'Returns percentile values for a score bucketed by time interval',\n requiresPermission: 'observability:read',\n },\n\n LIST_FEEDBACK: {\n method: 'GET',\n path: '/observability/feedback',\n summary: 'List feedback',\n description: 'Returns a paginated list of feedback with optional filtering and sorting',\n },\n\n CREATE_FEEDBACK: {\n method: 'POST',\n path: '/observability/feedback',\n summary: 'Create feedback',\n description: 'Creates a single feedback record in the observability store',\n },\n\n DELETE_FEEDBACK: {\n method: 'DELETE',\n path: '/observability/feedback',\n summary: 'Delete feedback',\n description: 'Deletes feedback records by feedbackId, optionally scoped to a tenant',\n requiresPermission: 'observability:delete',\n },\n\n UPDATE_FEEDBACK_REVIEW_STATUS: {\n method: 'PATCH',\n path: '/observability/feedback/:feedbackId/review-status',\n summary: 'Update feedback review status',\n description: \"Updates a feedback record's review workflow status\",\n requiresPermission: 'observability:write',\n },\n\n GET_FEEDBACK_AGGREGATE: {\n method: 'POST',\n path: '/observability/feedback/aggregate',\n summary: 'Get feedback aggregate',\n description: 'Returns an aggregated numeric feedback value with optional period-over-period comparison',\n requiresPermission: 'observability:read',\n },\n\n GET_FEEDBACK_BREAKDOWN: {\n method: 'POST',\n path: '/observability/feedback/breakdown',\n summary: 'Get feedback breakdown',\n description: 'Returns numeric feedback values grouped by specified dimensions',\n requiresPermission: 'observability:read',\n },\n\n GET_FEEDBACK_TIME_SERIES: {\n method: 'POST',\n path: '/observability/feedback/timeseries',\n summary: 'Get feedback time series',\n description: 'Returns numeric feedback values bucketed by time interval with optional grouping',\n requiresPermission: 'observability:read',\n },\n\n GET_FEEDBACK_PERCENTILES: {\n method: 'POST',\n path: '/observability/feedback/percentiles',\n summary: 'Get feedback percentiles',\n description: 'Returns percentile values for numeric feedback bucketed by time interval',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_AGGREGATE: {\n method: 'POST',\n path: '/observability/metrics/aggregate',\n summary: 'Get metric aggregate',\n description: 'Returns an aggregated metric value with optional period-over-period comparison',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_BREAKDOWN: {\n method: 'POST',\n path: '/observability/metrics/breakdown',\n summary: 'Get metric breakdown',\n description: 'Returns metric values grouped by specified dimensions',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_TIME_SERIES: {\n method: 'POST',\n path: '/observability/metrics/timeseries',\n summary: 'Get metric time series',\n description: 'Returns metric values bucketed by time interval with optional grouping',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_PERCENTILES: {\n method: 'POST',\n path: '/observability/metrics/percentiles',\n summary: 'Get metric percentiles',\n description: 'Returns percentile values for a metric bucketed by time interval',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_NAMES: {\n method: 'GET',\n path: '/observability/discovery/metric-names',\n summary: 'Get metric names',\n description: 'Returns distinct metric names with optional prefix filtering',\n },\n\n GET_METRIC_LABEL_KEYS: {\n method: 'GET',\n path: '/observability/discovery/metric-label-keys',\n summary: 'Get metric label keys',\n description: 'Returns distinct label keys for a given metric',\n },\n\n GET_METRIC_LABEL_VALUES: {\n method: 'GET',\n path: '/observability/discovery/metric-label-values',\n summary: 'Get label values',\n description: 'Returns distinct values for a given metric label key',\n },\n\n GET_ENTITY_TYPES: {\n method: 'GET',\n path: '/observability/discovery/entity-types',\n summary: 'Get entity types',\n description: 'Returns distinct entity types from observability data',\n },\n\n GET_ENTITY_NAMES: {\n method: 'GET',\n path: '/observability/discovery/entity-names',\n summary: 'Get entity names',\n description: 'Returns distinct entity names with optional type filtering',\n },\n\n GET_SERVICE_NAMES: {\n method: 'GET',\n path: '/observability/discovery/service-names',\n summary: 'Get service names',\n description: 'Returns distinct service names from observability data',\n },\n\n GET_ENVIRONMENTS: {\n method: 'GET',\n path: '/observability/discovery/environments',\n summary: 'Get environments',\n description: 'Returns distinct environments from observability data',\n },\n\n GET_TAGS: {\n method: 'GET',\n path: '/observability/discovery/tags',\n summary: 'Get tags',\n description: 'Returns distinct tags with optional entity type filtering',\n },\n\n GET_CAPABILITIES: {\n method: 'GET',\n path: '/observability/capabilities',\n summary: 'Get observability capabilities',\n description:\n 'Returns which optional observability APIs the configured observability storage supports. Every flag is false when no observability storage is configured.',\n },\n} as const satisfies Record<string, RouteDetails>;\n\nexport type NewRoutesKey = keyof typeof NEW_ROUTE_DEFS;\nexport type NewRoutesDefinitions = (typeof NEW_ROUTE_DEFS)[NewRoutesKey];\n\nexport function createObservabilityListQuerySchema<\n TFilter extends z.ZodObject<z.ZodRawShape>,\n TOrderBy extends z.ZodObject<z.ZodRawShape>,\n>(filterSchema: TFilter, orderBySchema: TOrderBy) {\n const unwrapDefault = (schema: unknown) => {\n const zodSchema = schema as z.ZodTypeAny;\n return zodSchema instanceof z.ZodDefault ? zodSchema.unwrap() : zodSchema;\n };\n const paginationShape = paginationArgsSchema.shape as unknown as Record<string, z.ZodTypeAny>;\n const orderByShape = orderBySchema.shape as unknown as Record<string, z.ZodTypeAny>;\n\n const pageSchema = unwrapDefault(paginationShape.page);\n const perPageSchema = unwrapDefault(paginationShape.perPage);\n const fieldSchema = orderByShape.field ? unwrapDefault(orderByShape.field) : z.never().optional();\n const directionSchema = orderByShape.direction ? unwrapDefault(orderByShape.direction) : z.never().optional();\n\n return wrapSchemaForQueryParams(\n z\n .object({\n ...filterSchema.shape,\n page: pageSchema,\n perPage: perPageSchema,\n field: fieldSchema,\n direction: directionSchema,\n mode: listModeSchema.optional(),\n after: deltaCursorSchema.optional(),\n limit: deltaLimitSchema,\n })\n .partial(),\n ).superRefine((value, ctx) => {\n const isDelta = value.mode === 'delta';\n const hasPagination = value.page !== undefined || value.perPage !== undefined;\n const hasOrderBy = value.field !== undefined || value.direction !== undefined;\n const hasAfter = value.after !== undefined;\n const hasLimit = value.limit !== undefined;\n\n if (isDelta) {\n if (hasPagination) {\n if (value.page !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['page'],\n message: '`page` is not allowed when `mode=delta`',\n });\n }\n if (value.perPage !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['perPage'],\n message: '`perPage` is not allowed when `mode=delta`',\n });\n }\n }\n if (hasOrderBy) {\n if (value.field !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['field'],\n message: '`field` is not allowed when `mode=delta`',\n });\n }\n if (value.direction !== undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['direction'],\n message: '`direction` is not allowed when `mode=delta`',\n });\n }\n }\n return;\n }\n\n if (hasAfter) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['after'],\n message: '`after` is only allowed when `mode=delta`',\n });\n }\n if (hasLimit) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['limit'],\n message: '`limit` is only allowed when `mode=delta`',\n });\n }\n });\n}\n"],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ const require_server_handlers_error = require("./error.cjs");
|
|
|
6
6
|
const require_server_handlers_observability_list_query_schemas = require("./observability-list-query-schemas.cjs");
|
|
7
7
|
const require_server_handlers_observability_shared = require("./observability-shared.cjs");
|
|
8
8
|
const require_server_handlers_observability_storage_schemas = require("./observability-storage-schemas.cjs");
|
|
9
|
-
const require_observability_new_endpoints = require("../../observability-new-endpoints-
|
|
9
|
+
const require_observability_new_endpoints = require("../../observability-new-endpoints-Ct0CSLE4.cjs");
|
|
10
10
|
let zod_v4 = require("zod/v4");
|
|
11
11
|
let _mastra_core_evals = require("@mastra/core/evals");
|
|
12
12
|
let _mastra_core_evals_scoreTraces = require("@mastra/core/evals/scoreTraces");
|
|
@@ -19,6 +19,7 @@ var observability_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll
|
|
|
19
19
|
DELETE_SCORES: () => require_observability_new_endpoints.DELETE_SCORES,
|
|
20
20
|
DELETE_TRACES_ROUTE: () => DELETE_TRACES_ROUTE,
|
|
21
21
|
GET_BRANCH_ROUTE: () => GET_BRANCH_ROUTE,
|
|
22
|
+
GET_CAPABILITIES: () => require_observability_new_endpoints.GET_CAPABILITIES,
|
|
22
23
|
GET_ENTITY_NAMES: () => require_observability_new_endpoints.GET_ENTITY_NAMES,
|
|
23
24
|
GET_ENTITY_TYPES: () => require_observability_new_endpoints.GET_ENTITY_TYPES,
|
|
24
25
|
GET_ENVIRONMENTS: () => require_observability_new_endpoints.GET_ENVIRONMENTS,
|
|
@@ -428,6 +429,7 @@ exports.DELETE_FEEDBACK = require_observability_new_endpoints.DELETE_FEEDBACK;
|
|
|
428
429
|
exports.DELETE_SCORES = require_observability_new_endpoints.DELETE_SCORES;
|
|
429
430
|
exports.DELETE_TRACES_ROUTE = DELETE_TRACES_ROUTE;
|
|
430
431
|
exports.GET_BRANCH_ROUTE = GET_BRANCH_ROUTE;
|
|
432
|
+
exports.GET_CAPABILITIES = require_observability_new_endpoints.GET_CAPABILITIES;
|
|
431
433
|
exports.GET_ENTITY_NAMES = require_observability_new_endpoints.GET_ENTITY_NAMES;
|
|
432
434
|
exports.GET_ENTITY_TYPES = require_observability_new_endpoints.GET_ENTITY_TYPES;
|
|
433
435
|
exports.GET_ENVIRONMENTS = require_observability_new_endpoints.GET_ENVIRONMENTS;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability.cjs","names":["z","dateRangeSchema","createObservabilityListQuerySchema","tracesFilterSchema","tracesOrderBySchema","createRoute","listTracesResponseSchema","pickParams","getObservabilityStore","OBSERVABILITY_LIST_ENDPOINTS","paginationArgsSchema","handleError","listTracesLightResponseSchema","store","branchesFilterSchema","branchesOrderBySchema","listBranchesResponseSchema","getBranchArgsSchema","wrapSchemaForQueryParams","getBranchResponseSchema","HTTPException","getTraceArgsSchema","getTraceResponseSchema","traceSpanSchema","getTraceLightResponseSchema","getSpanArgsSchema","getSpanResponseSchema","batchDeleteTracesArgsSchema","batchDeleteTracesResponseSchema","scoreTracesRequestSchema","scoreTracesResponseSchema","spanIdsSchema","listScoresResponseSchema","getScoresStore"],"sources":["../../../src/server/handlers/observability.ts"],"sourcesContent":["import { extractTrajectoryFromTrace, listScoresResponseSchema } from '@mastra/core/evals';\nimport { scoreTraces } from '@mastra/core/evals/scoreTraces';\nimport {\n tracesFilterSchema,\n tracesOrderBySchema,\n spanIdsSchema,\n listTracesResponseSchema,\n scoreTracesRequestSchema,\n scoreTracesResponseSchema,\n getTraceArgsSchema,\n getTraceResponseSchema,\n getTraceLightResponseSchema,\n getSpanArgsSchema,\n getSpanResponseSchema,\n dateRangeSchema,\n toTraceSpans,\n traceSpanSchema,\n} from '@mastra/core/storage';\n// `branches*`, `listBranches*`, and `getBranch*` schemas are new in\n// @mastra/core@1.32.0; route them through a shim that tolerates older cores\n// (see ./observability-storage-schemas.ts for full rationale).\nimport { z } from 'zod/v4';\nimport { HTTPException } from '../http-exception';\nimport type { ServerRoute } from '../server-adapter/routes';\nimport { createRoute, pickParams, wrapSchemaForQueryParams } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\nimport { paginationArgsSchema } from './observability-list-query-schemas';\nimport {\n assertObservabilityDeltaSupported,\n createObservabilityListQuerySchema,\n getObservabilityStore,\n getScoresStore,\n getStorage,\n OBSERVABILITY_LIST_ENDPOINTS,\n} from './observability-shared';\nimport {\n branchesFilterSchema,\n branchesOrderBySchema,\n listBranchesResponseSchema,\n getBranchArgsSchema,\n getBranchResponseSchema,\n listTracesLightResponseSchema,\n batchDeleteTracesArgsSchema,\n batchDeleteTracesResponseSchema,\n} from './observability-storage-schemas';\n\nexport * from './observability-new-endpoints';\n\n// ============================================================================\n// Legacy Parameter Support (backward compatibility with main branch API)\n// ============================================================================\n\n/**\n * Legacy query parameters from the old API (main branch).\n * These are accepted for backward compatibility and transformed to new format.\n */\nconst legacyQueryParamsSchema = z.object({\n // Old: dateRange was in pagination, now it's startedAt in filters\n dateRange: dateRangeSchema.optional(),\n // Old: name matched span names like \"agent run: 'myAgent'\"\n name: z.string().optional(),\n // entityType needs preprocessing to handle legacy 'workflow' value\n entityType: z.preprocess(val => (val === 'workflow' ? 'workflow_run' : val), z.string().optional()),\n});\n\n/**\n * Transforms legacy query parameters to the new format.\n * - dateRange -> startedAt (if startedAt not already set)\n * - name=\"agent run: 'x'\" -> entityId='x', entityType='agent'\n * - name=\"workflow run: 'x'\" -> entityId='x', entityType='workflow_run'\n * - entityType='workflow' -> entityType='workflow_run' (enum value fix)\n */\nfunction transformLegacyParams(params: Record<string, unknown>): Record<string, unknown> {\n const result = { ...params };\n\n // Transform old entityType='workflow' -> 'workflow_run' to support direct handler usage in tests\n if (result.entityType === 'workflow') {\n result.entityType = 'workflow_run';\n }\n\n // Transform old dateRange -> new startedAt\n if (params.dateRange && !params.startedAt) {\n result.startedAt = params.dateRange;\n delete result.dateRange;\n }\n\n // Transform old name -> entityId + entityType\n // Old format: name matched span names like \"agent run: 'myAgent'\" or \"workflow run: 'myWorkflow'\"\n if (typeof params.name === 'string' && !params.entityId) {\n const agentMatch = params.name.match(/^agent run: '([^']+)'$/);\n const workflowMatch = params.name.match(/^workflow run: '([^']+)'$/);\n\n if (agentMatch) {\n result.entityId = agentMatch[1];\n result.entityType = 'agent';\n } else if (workflowMatch) {\n result.entityId = workflowMatch[1];\n result.entityType = 'workflow_run';\n }\n delete result.name;\n }\n\n return result;\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\n/** Filter shape shared by the full and lightweight trace list routes. */\nconst tracesListFilterSchema = tracesFilterSchema.extend({\n ...legacyQueryParamsSchema.shape, // Accept legacy params for backward compatibility\n entityType: z.preprocess(\n value => (value === 'workflow' ? 'workflow_run' : value),\n tracesFilterSchema.shape.entityType,\n ),\n});\n\nconst listTracesQueryParamSchema = createObservabilityListQuerySchema(tracesListFilterSchema, tracesOrderBySchema);\n\n/** Route: GET /observability/traces - paginated trace listing with filtering and sorting. */\nexport const LIST_TRACES_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces',\n responseType: 'json',\n queryParamSchema: listTracesQueryParamSchema,\n responseSchema: listTracesResponseSchema,\n summary: 'List traces',\n description:\n 'Returns a paginated list of traces with optional filtering and sorting. In delta mode, returns only newly listed traces matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n // Transform legacy params to new format before processing\n const transformedParams = transformLegacyParams(params);\n\n const filters = pickParams(tracesFilterSchema, transformedParams);\n const observabilityStore = await getObservabilityStore(mastra);\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.traces);\n return await observabilityStore.listTraces({\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n });\n }\n\n const pagination = pickParams(paginationArgsSchema, transformedParams);\n const orderBy = pickParams(tracesOrderBySchema, transformedParams);\n return await observabilityStore.listTraces({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing traces');\n }\n },\n});\n\n/** Route: GET /observability/traces/light - paginated lightweight trace listing with filtering and sorting. */\nexport const LIST_TRACES_LIGHT_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/light',\n responseType: 'json',\n queryParamSchema: listTracesQueryParamSchema,\n responseSchema: listTracesLightResponseSchema,\n summary: 'List lightweight traces',\n description:\n 'Returns a paginated list of lightweight traces with optional filtering and sorting. In delta mode, returns only newly listed traces matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n const transformedParams = transformLegacyParams(params);\n\n const filters = pickParams(tracesFilterSchema, transformedParams);\n const observabilityStore = await getObservabilityStore(mastra);\n\n // Every current store answers `listTracesLight` — stores without a dedicated\n // implementation inherit the base class's projection fallback. This guard is\n // only for an older `@mastra/core` whose base class predates the method, where\n // calling it would throw `TypeError: ... is not a function`; there we fall back\n // to `listTraces` so consumers still get a response.\n const store = observabilityStore as { listTracesLight?: unknown };\n const supportsLight = typeof store.listTracesLight === 'function';\n\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.traces);\n const deltaArgs = {\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n } as const;\n return supportsLight\n ? await observabilityStore.listTracesLight(deltaArgs)\n : await observabilityStore.listTraces(deltaArgs);\n }\n\n const pagination = pickParams(paginationArgsSchema, transformedParams);\n const orderBy = pickParams(tracesOrderBySchema, transformedParams);\n\n if (!supportsLight) {\n return await observabilityStore.listTraces({ filters, pagination, orderBy });\n }\n return await observabilityStore.listTracesLight({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing lightweight traces');\n }\n },\n});\n\n/** Route: GET /observability/branches - paginated branch-anchor span listing across all traces. */\nexport const LIST_BRANCHES_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/branches',\n responseType: 'json',\n queryParamSchema: createObservabilityListQuerySchema(branchesFilterSchema, branchesOrderBySchema),\n responseSchema: listBranchesResponseSchema,\n summary: 'List trace branches',\n description:\n 'Returns a paginated list of branch-anchor spans (e.g., AGENT_RUN, WORKFLOW_RUN, TOOL_CALL) across all traces. Unlike listTraces (one row per root-rooted trace), each row here is a single anchor span -- including ones nested under a different root entity. In delta mode, returns only newly listed branch rows matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n const filters = pickParams(branchesFilterSchema, params);\n const observabilityStore = await getObservabilityStore(mastra);\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.branches);\n return await observabilityStore.listBranches({\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n });\n }\n\n const pagination = pickParams(paginationArgsSchema, params);\n const orderBy = pickParams(branchesOrderBySchema, params);\n return await observabilityStore.listBranches({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing branches');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/branches/:spanId - retrieve the subtree rooted at a span. */\nexport const GET_BRANCH_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/branches/:spanId',\n responseType: 'json',\n pathParamSchema: getBranchArgsSchema.pick({ traceId: true, spanId: true }),\n queryParamSchema: wrapSchemaForQueryParams(getBranchArgsSchema.pick({ depth: true })),\n responseSchema: getBranchResponseSchema,\n summary: 'Get trace branch by span ID',\n description:\n 'Returns the subtree of spans rooted at the given span. The optional `depth` query param bounds descendant levels below the anchor (0 = anchor only; omitted = full subtree).',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId, spanId, depth }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const branch = await observabilityStore.getBranch({ traceId, spanId, depth });\n\n if (!branch) {\n throw new HTTPException(404, { message: `Branch not found for span '${spanId}' in trace '${traceId}'` });\n }\n\n return branch;\n } catch (error) {\n return handleError(error, 'Error getting branch');\n }\n },\n});\n/** Route: GET /observability/traces/:traceId - retrieve a single trace with all spans. */\nexport const GET_TRACE_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: getTraceResponseSchema.extend({ spans: z.array(traceSpanSchema) }),\n summary: 'Get AI trace by ID',\n description: 'Returns a complete AI trace with all spans by trace ID',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTrace({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n // Stored SpanRecords carry no status field; derive it from error/endedAt so\n // trace-detail spans match the status shown in trace list rows.\n return { ...trace, spans: toTraceSpans(trace.spans) };\n } catch (error) {\n return handleError(error, 'Error getting trace');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/light - lightweight trace for timeline rendering. */\nexport const GET_TRACE_LIGHT_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/light',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: getTraceLightResponseSchema,\n summary: 'Get lightweight AI trace by ID',\n description:\n 'Returns a trace with lightweight span data (timeline fields only, excludes input/output/attributes/metadata/tags/links)',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTraceLight({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n return trace;\n } catch (error) {\n return handleError(error, 'Error getting lightweight trace');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/spans/:spanId - get a single span with full details. */\nexport const GET_SPAN_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/spans/:spanId',\n responseType: 'json',\n pathParamSchema: getSpanArgsSchema,\n responseSchema: getSpanResponseSchema,\n summary: 'Get a single span by ID',\n description: 'Returns a complete span record with all details by trace ID and span ID',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId, spanId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const span = await observabilityStore.getSpan({ traceId, spanId });\n\n if (!span) {\n throw new HTTPException(404, { message: `Span not found` });\n }\n\n return span;\n } catch (error) {\n return handleError(error, 'Error getting span');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/trajectory - extract trajectory from a trace. */\nexport const GET_TRACE_TRAJECTORY_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/trajectory',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: z.object({\n steps: z.array(z.unknown()),\n totalDurationMs: z.number().optional(),\n rawOutput: z.unknown().optional(),\n rawWorkflowResult: z.unknown().optional(),\n }),\n summary: 'Extract trajectory from trace',\n description: 'Extracts a structured trajectory (ordered steps) from a trace by analyzing its spans',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTrace({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n const trajectory = extractTrajectoryFromTrace(trace.spans);\n return trajectory;\n } catch (error) {\n return handleError(error, 'Error extracting trajectory from trace');\n }\n },\n});\n\n/** Route: POST /observability/traces/delete - batch delete traces with cross-signal cascade. */\nexport const DELETE_TRACES_ROUTE: ServerRoute = createRoute({\n method: 'POST',\n path: '/observability/traces/delete',\n responseType: 'json',\n bodySchema: batchDeleteTracesArgsSchema.pick({ traceIds: true }),\n responseSchema: batchDeleteTracesResponseSchema,\n maxBodySize: 256 * 1024,\n summary: 'Delete traces',\n description:\n 'Deletes traces by ID, cascading to all associated data: spans, trace roots/branches, and signal events (scores, feedback, metrics, logs) that reference the deleted traces. Signals without a trace ID are untouched. Experiment traces are deleted like any other trace. On ClickHouse-backed stores, deletes are lightweight and reads may briefly return deleted rows until the delete is fully applied.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceIds }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n await observabilityStore.batchDeleteTraces({ traceIds });\n return { success: true as const };\n } catch (error) {\n return handleError(error, 'Error deleting traces');\n }\n },\n});\n\n/** Route: POST /observability/traces/score - score traces using a specified scorer (fire-and-forget). */\nexport const SCORE_TRACES_ROUTE = createRoute({\n method: 'POST',\n path: '/observability/traces/score',\n responseType: 'json',\n bodySchema: scoreTracesRequestSchema,\n responseSchema: scoreTracesResponseSchema,\n summary: 'Score traces',\n description: 'Scores one or more traces using a specified scorer (fire-and-forget)',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n // Validate storage exists before starting background task\n getStorage(mastra);\n\n const { scorerName, targets } = params;\n\n const scorer = mastra.getScorerById(scorerName);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer '${scorerName}' not found` });\n }\n\n scoreTraces({\n scorerId: scorer.config.id || scorer.config.name,\n targets,\n mastra,\n }).catch(error => {\n const logger = mastra.getLogger();\n logger?.error(`Background trace scoring failed: ${error.message}`, error);\n });\n\n return {\n status: 'success',\n message: `Scoring started for ${targets.length} ${targets.length === 1 ? 'trace' : 'traces'}`,\n traceCount: targets.length,\n };\n } catch (error) {\n return handleError(error, 'Error processing trace scoring');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SPAN_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/:spanId/scores',\n responseType: 'json',\n pathParamSchema: spanIdsSchema,\n // List endpoints accept optional query params; use partial() to allow empty queries.\n queryParamSchema: wrapSchemaForQueryParams(paginationArgsSchema.partial()),\n responseSchema: listScoresResponseSchema,\n summary: 'List scores by span',\n description: 'Returns all scores for a specific span within a trace',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const pagination = pickParams(paginationArgsSchema, params);\n const spanIds = pickParams(spanIdsSchema, params);\n\n const scoresStore = await getScoresStore(mastra);\n\n return await scoresStore.listScoresBySpan({\n ...spanIds,\n pagination,\n });\n } catch (error) {\n return handleError(error, 'Error getting scores by span');\n }\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"observability.cjs","names":["z","dateRangeSchema","createObservabilityListQuerySchema","tracesFilterSchema","tracesOrderBySchema","createRoute","listTracesResponseSchema","pickParams","getObservabilityStore","OBSERVABILITY_LIST_ENDPOINTS","paginationArgsSchema","handleError","listTracesLightResponseSchema","store","branchesFilterSchema","branchesOrderBySchema","listBranchesResponseSchema","getBranchArgsSchema","wrapSchemaForQueryParams","getBranchResponseSchema","HTTPException","getTraceArgsSchema","getTraceResponseSchema","traceSpanSchema","getTraceLightResponseSchema","getSpanArgsSchema","getSpanResponseSchema","batchDeleteTracesArgsSchema","batchDeleteTracesResponseSchema","scoreTracesRequestSchema","scoreTracesResponseSchema","spanIdsSchema","listScoresResponseSchema","getScoresStore"],"sources":["../../../src/server/handlers/observability.ts"],"sourcesContent":["import { extractTrajectoryFromTrace, listScoresResponseSchema } from '@mastra/core/evals';\nimport { scoreTraces } from '@mastra/core/evals/scoreTraces';\nimport {\n tracesFilterSchema,\n tracesOrderBySchema,\n spanIdsSchema,\n listTracesResponseSchema,\n scoreTracesRequestSchema,\n scoreTracesResponseSchema,\n getTraceArgsSchema,\n getTraceResponseSchema,\n getTraceLightResponseSchema,\n getSpanArgsSchema,\n getSpanResponseSchema,\n dateRangeSchema,\n toTraceSpans,\n traceSpanSchema,\n} from '@mastra/core/storage';\n// `branches*`, `listBranches*`, and `getBranch*` schemas are new in\n// @mastra/core@1.32.0; route them through a shim that tolerates older cores\n// (see ./observability-storage-schemas.ts for full rationale).\nimport { z } from 'zod/v4';\nimport { HTTPException } from '../http-exception';\nimport type { ServerRoute } from '../server-adapter/routes';\nimport { createRoute, pickParams, wrapSchemaForQueryParams } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\nimport { paginationArgsSchema } from './observability-list-query-schemas';\nimport {\n assertObservabilityDeltaSupported,\n createObservabilityListQuerySchema,\n getObservabilityStore,\n getScoresStore,\n getStorage,\n OBSERVABILITY_LIST_ENDPOINTS,\n} from './observability-shared';\nimport {\n branchesFilterSchema,\n branchesOrderBySchema,\n listBranchesResponseSchema,\n getBranchArgsSchema,\n getBranchResponseSchema,\n listTracesLightResponseSchema,\n batchDeleteTracesArgsSchema,\n batchDeleteTracesResponseSchema,\n} from './observability-storage-schemas';\n\nexport * from './observability-new-endpoints';\n\n// ============================================================================\n// Legacy Parameter Support (backward compatibility with main branch API)\n// ============================================================================\n\n/**\n * Legacy query parameters from the old API (main branch).\n * These are accepted for backward compatibility and transformed to new format.\n */\nconst legacyQueryParamsSchema = z.object({\n // Old: dateRange was in pagination, now it's startedAt in filters\n dateRange: dateRangeSchema.optional(),\n // Old: name matched span names like \"agent run: 'myAgent'\"\n name: z.string().optional(),\n // entityType needs preprocessing to handle legacy 'workflow' value\n entityType: z.preprocess(val => (val === 'workflow' ? 'workflow_run' : val), z.string().optional()),\n});\n\n/**\n * Transforms legacy query parameters to the new format.\n * - dateRange -> startedAt (if startedAt not already set)\n * - name=\"agent run: 'x'\" -> entityId='x', entityType='agent'\n * - name=\"workflow run: 'x'\" -> entityId='x', entityType='workflow_run'\n * - entityType='workflow' -> entityType='workflow_run' (enum value fix)\n */\nfunction transformLegacyParams(params: Record<string, unknown>): Record<string, unknown> {\n const result = { ...params };\n\n // Transform old entityType='workflow' -> 'workflow_run' to support direct handler usage in tests\n if (result.entityType === 'workflow') {\n result.entityType = 'workflow_run';\n }\n\n // Transform old dateRange -> new startedAt\n if (params.dateRange && !params.startedAt) {\n result.startedAt = params.dateRange;\n delete result.dateRange;\n }\n\n // Transform old name -> entityId + entityType\n // Old format: name matched span names like \"agent run: 'myAgent'\" or \"workflow run: 'myWorkflow'\"\n if (typeof params.name === 'string' && !params.entityId) {\n const agentMatch = params.name.match(/^agent run: '([^']+)'$/);\n const workflowMatch = params.name.match(/^workflow run: '([^']+)'$/);\n\n if (agentMatch) {\n result.entityId = agentMatch[1];\n result.entityType = 'agent';\n } else if (workflowMatch) {\n result.entityId = workflowMatch[1];\n result.entityType = 'workflow_run';\n }\n delete result.name;\n }\n\n return result;\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\n/** Filter shape shared by the full and lightweight trace list routes. */\nconst tracesListFilterSchema = tracesFilterSchema.extend({\n ...legacyQueryParamsSchema.shape, // Accept legacy params for backward compatibility\n entityType: z.preprocess(\n value => (value === 'workflow' ? 'workflow_run' : value),\n tracesFilterSchema.shape.entityType,\n ),\n});\n\nconst listTracesQueryParamSchema = createObservabilityListQuerySchema(tracesListFilterSchema, tracesOrderBySchema);\n\n/** Route: GET /observability/traces - paginated trace listing with filtering and sorting. */\nexport const LIST_TRACES_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces',\n responseType: 'json',\n queryParamSchema: listTracesQueryParamSchema,\n responseSchema: listTracesResponseSchema,\n summary: 'List traces',\n description:\n 'Returns a paginated list of traces with optional filtering and sorting. In delta mode, returns only newly listed traces matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n // Transform legacy params to new format before processing\n const transformedParams = transformLegacyParams(params);\n\n const filters = pickParams(tracesFilterSchema, transformedParams);\n const observabilityStore = await getObservabilityStore(mastra);\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.traces);\n return await observabilityStore.listTraces({\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n });\n }\n\n const pagination = pickParams(paginationArgsSchema, transformedParams);\n const orderBy = pickParams(tracesOrderBySchema, transformedParams);\n return await observabilityStore.listTraces({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing traces');\n }\n },\n});\n\n/** Route: GET /observability/traces/light - paginated lightweight trace listing with filtering and sorting. */\nexport const LIST_TRACES_LIGHT_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/light',\n responseType: 'json',\n queryParamSchema: listTracesQueryParamSchema,\n responseSchema: listTracesLightResponseSchema,\n summary: 'List lightweight traces',\n description:\n 'Returns a paginated list of lightweight traces with optional filtering and sorting. In delta mode, returns only newly listed traces matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n const transformedParams = transformLegacyParams(params);\n\n const filters = pickParams(tracesFilterSchema, transformedParams);\n const observabilityStore = await getObservabilityStore(mastra);\n\n // Every current store answers `listTracesLight` — stores without a dedicated\n // implementation inherit the base class's projection fallback. This guard is\n // only for an older `@mastra/core` whose base class predates the method, where\n // calling it would throw `TypeError: ... is not a function`; there we fall back\n // to `listTraces` so consumers still get a response.\n const store = observabilityStore as { listTracesLight?: unknown };\n const supportsLight = typeof store.listTracesLight === 'function';\n\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.traces);\n const deltaArgs = {\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n } as const;\n return supportsLight\n ? await observabilityStore.listTracesLight(deltaArgs)\n : await observabilityStore.listTraces(deltaArgs);\n }\n\n const pagination = pickParams(paginationArgsSchema, transformedParams);\n const orderBy = pickParams(tracesOrderBySchema, transformedParams);\n\n if (!supportsLight) {\n return await observabilityStore.listTraces({ filters, pagination, orderBy });\n }\n return await observabilityStore.listTracesLight({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing lightweight traces');\n }\n },\n});\n\n/** Route: GET /observability/branches - paginated branch-anchor span listing across all traces. */\nexport const LIST_BRANCHES_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/branches',\n responseType: 'json',\n queryParamSchema: createObservabilityListQuerySchema(branchesFilterSchema, branchesOrderBySchema),\n responseSchema: listBranchesResponseSchema,\n summary: 'List trace branches',\n description:\n 'Returns a paginated list of branch-anchor spans (e.g., AGENT_RUN, WORKFLOW_RUN, TOOL_CALL) across all traces. Unlike listTraces (one row per root-rooted trace), each row here is a single anchor span -- including ones nested under a different root entity. In delta mode, returns only newly listed branch rows matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n const filters = pickParams(branchesFilterSchema, params);\n const observabilityStore = await getObservabilityStore(mastra);\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.branches);\n return await observabilityStore.listBranches({\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n });\n }\n\n const pagination = pickParams(paginationArgsSchema, params);\n const orderBy = pickParams(branchesOrderBySchema, params);\n return await observabilityStore.listBranches({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing branches');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/branches/:spanId - retrieve the subtree rooted at a span. */\nexport const GET_BRANCH_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/branches/:spanId',\n responseType: 'json',\n pathParamSchema: getBranchArgsSchema.pick({ traceId: true, spanId: true }),\n queryParamSchema: wrapSchemaForQueryParams(getBranchArgsSchema.pick({ depth: true })),\n responseSchema: getBranchResponseSchema,\n summary: 'Get trace branch by span ID',\n description:\n 'Returns the subtree of spans rooted at the given span. The optional `depth` query param bounds descendant levels below the anchor (0 = anchor only; omitted = full subtree).',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId, spanId, depth }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const branch = await observabilityStore.getBranch({ traceId, spanId, depth });\n\n if (!branch) {\n throw new HTTPException(404, { message: `Branch not found for span '${spanId}' in trace '${traceId}'` });\n }\n\n return branch;\n } catch (error) {\n return handleError(error, 'Error getting branch');\n }\n },\n});\n/** Route: GET /observability/traces/:traceId - retrieve a single trace with all spans. */\nexport const GET_TRACE_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: getTraceResponseSchema.extend({ spans: z.array(traceSpanSchema) }),\n summary: 'Get AI trace by ID',\n description: 'Returns a complete AI trace with all spans by trace ID',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTrace({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n // Stored SpanRecords carry no status field; derive it from error/endedAt so\n // trace-detail spans match the status shown in trace list rows.\n return { ...trace, spans: toTraceSpans(trace.spans) };\n } catch (error) {\n return handleError(error, 'Error getting trace');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/light - lightweight trace for timeline rendering. */\nexport const GET_TRACE_LIGHT_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/light',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: getTraceLightResponseSchema,\n summary: 'Get lightweight AI trace by ID',\n description:\n 'Returns a trace with lightweight span data (timeline fields only, excludes input/output/attributes/metadata/tags/links)',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTraceLight({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n return trace;\n } catch (error) {\n return handleError(error, 'Error getting lightweight trace');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/spans/:spanId - get a single span with full details. */\nexport const GET_SPAN_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/spans/:spanId',\n responseType: 'json',\n pathParamSchema: getSpanArgsSchema,\n responseSchema: getSpanResponseSchema,\n summary: 'Get a single span by ID',\n description: 'Returns a complete span record with all details by trace ID and span ID',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId, spanId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const span = await observabilityStore.getSpan({ traceId, spanId });\n\n if (!span) {\n throw new HTTPException(404, { message: `Span not found` });\n }\n\n return span;\n } catch (error) {\n return handleError(error, 'Error getting span');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/trajectory - extract trajectory from a trace. */\nexport const GET_TRACE_TRAJECTORY_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/trajectory',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: z.object({\n steps: z.array(z.unknown()),\n totalDurationMs: z.number().optional(),\n rawOutput: z.unknown().optional(),\n rawWorkflowResult: z.unknown().optional(),\n }),\n summary: 'Extract trajectory from trace',\n description: 'Extracts a structured trajectory (ordered steps) from a trace by analyzing its spans',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTrace({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n const trajectory = extractTrajectoryFromTrace(trace.spans);\n return trajectory;\n } catch (error) {\n return handleError(error, 'Error extracting trajectory from trace');\n }\n },\n});\n\n/** Route: POST /observability/traces/delete - batch delete traces with cross-signal cascade. */\nexport const DELETE_TRACES_ROUTE: ServerRoute = createRoute({\n method: 'POST',\n path: '/observability/traces/delete',\n responseType: 'json',\n bodySchema: batchDeleteTracesArgsSchema.pick({ traceIds: true }),\n responseSchema: batchDeleteTracesResponseSchema,\n maxBodySize: 256 * 1024,\n summary: 'Delete traces',\n description:\n 'Deletes traces by ID, cascading to all associated data: spans, trace roots/branches, and signal events (scores, feedback, metrics, logs) that reference the deleted traces. Signals without a trace ID are untouched. Experiment traces are deleted like any other trace. On ClickHouse-backed stores, deletes are lightweight and reads may briefly return deleted rows until the delete is fully applied.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceIds }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n await observabilityStore.batchDeleteTraces({ traceIds });\n return { success: true as const };\n } catch (error) {\n return handleError(error, 'Error deleting traces');\n }\n },\n});\n\n/** Route: POST /observability/traces/score - score traces using a specified scorer (fire-and-forget). */\nexport const SCORE_TRACES_ROUTE = createRoute({\n method: 'POST',\n path: '/observability/traces/score',\n responseType: 'json',\n bodySchema: scoreTracesRequestSchema,\n responseSchema: scoreTracesResponseSchema,\n summary: 'Score traces',\n description: 'Scores one or more traces using a specified scorer (fire-and-forget)',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n // Validate storage exists before starting background task\n getStorage(mastra);\n\n const { scorerName, targets } = params;\n\n const scorer = mastra.getScorerById(scorerName);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer '${scorerName}' not found` });\n }\n\n scoreTraces({\n scorerId: scorer.config.id || scorer.config.name,\n targets,\n mastra,\n }).catch(error => {\n const logger = mastra.getLogger();\n logger?.error(`Background trace scoring failed: ${error.message}`, error);\n });\n\n return {\n status: 'success',\n message: `Scoring started for ${targets.length} ${targets.length === 1 ? 'trace' : 'traces'}`,\n traceCount: targets.length,\n };\n } catch (error) {\n return handleError(error, 'Error processing trace scoring');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SPAN_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/:spanId/scores',\n responseType: 'json',\n pathParamSchema: spanIdsSchema,\n // List endpoints accept optional query params; use partial() to allow empty queries.\n queryParamSchema: wrapSchemaForQueryParams(paginationArgsSchema.partial()),\n responseSchema: listScoresResponseSchema,\n summary: 'List scores by span',\n description: 'Returns all scores for a specific span within a trace',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const pagination = pickParams(paginationArgsSchema, params);\n const spanIds = pickParams(spanIdsSchema, params);\n\n const scoresStore = await getScoresStore(mastra);\n\n return await scoresStore.listScoresBySpan({\n ...spanIds,\n pagination,\n });\n } catch (error) {\n return handleError(error, 'Error getting scores by span');\n }\n },\n});\n"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { handleError } from "./error.js";
|
|
|
5
5
|
import { paginationArgsSchema } from "./observability-list-query-schemas.js";
|
|
6
6
|
import { OBSERVABILITY_LIST_ENDPOINTS, assertObservabilityDeltaSupported, createObservabilityListQuerySchema, getObservabilityStore, getScoresStore, getStorage } from "./observability-shared.js";
|
|
7
7
|
import { batchDeleteTracesArgsSchema, batchDeleteTracesResponseSchema, branchesFilterSchema, branchesOrderBySchema, getBranchArgsSchema, getBranchResponseSchema, listBranchesResponseSchema, listTracesLightResponseSchema } from "./observability-storage-schemas.js";
|
|
8
|
-
import { A as
|
|
8
|
+
import { A as LIST_LOGS, C as GET_SCORE_PERCENTILES, D as GET_TRACE_QUERY_FIELDS, E as GET_TAGS, F as QUERY_TRACES, I as UPDATE_FEEDBACK_REVIEW_STATUS, M as LIST_SCORES, N as NEW_ROUTES, O as GET_TRACE_QUERY_VALUES, P as QUERY_THREADS, S as GET_SCORE_BREAKDOWN, T as GET_SERVICE_NAMES, _ as GET_METRIC_NAMES, a as GET_CAPABILITIES, b as GET_SCORE, c as GET_ENVIRONMENTS, d as GET_FEEDBACK_PERCENTILES, f as GET_FEEDBACK_TIME_SERIES, g as GET_METRIC_LABEL_VALUES, h as GET_METRIC_LABEL_KEYS, i as DELETE_SCORES, j as LIST_METRICS, k as LIST_FEEDBACK, l as GET_FEEDBACK_AGGREGATE, m as GET_METRIC_BREAKDOWN, n as CREATE_SCORE, o as GET_ENTITY_NAMES, p as GET_METRIC_AGGREGATE, r as DELETE_FEEDBACK, s as GET_ENTITY_TYPES, t as CREATE_FEEDBACK, u as GET_FEEDBACK_BREAKDOWN, v as GET_METRIC_PERCENTILES, w as GET_SCORE_TIME_SERIES, x as GET_SCORE_AGGREGATE, y as GET_METRIC_TIME_SERIES } from "../../observability-new-endpoints-DqS6dcR5.js";
|
|
9
9
|
import { z } from "zod/v4";
|
|
10
10
|
import { extractTrajectoryFromTrace, listScoresResponseSchema } from "@mastra/core/evals";
|
|
11
11
|
import { scoreTraces } from "@mastra/core/evals/scoreTraces";
|
|
@@ -18,6 +18,7 @@ var observability_exports = /* @__PURE__ */ __exportAll({
|
|
|
18
18
|
DELETE_SCORES: () => DELETE_SCORES,
|
|
19
19
|
DELETE_TRACES_ROUTE: () => DELETE_TRACES_ROUTE,
|
|
20
20
|
GET_BRANCH_ROUTE: () => GET_BRANCH_ROUTE,
|
|
21
|
+
GET_CAPABILITIES: () => GET_CAPABILITIES,
|
|
21
22
|
GET_ENTITY_NAMES: () => GET_ENTITY_NAMES,
|
|
22
23
|
GET_ENTITY_TYPES: () => GET_ENTITY_TYPES,
|
|
23
24
|
GET_ENVIRONMENTS: () => GET_ENVIRONMENTS,
|
|
@@ -421,6 +422,6 @@ const LIST_SCORES_BY_SPAN_ROUTE = createRoute({
|
|
|
421
422
|
}
|
|
422
423
|
});
|
|
423
424
|
//#endregion
|
|
424
|
-
export { CREATE_FEEDBACK, CREATE_SCORE, DELETE_FEEDBACK, DELETE_SCORES, DELETE_TRACES_ROUTE, GET_BRANCH_ROUTE, GET_ENTITY_NAMES, GET_ENTITY_TYPES, GET_ENVIRONMENTS, GET_FEEDBACK_AGGREGATE, GET_FEEDBACK_BREAKDOWN, GET_FEEDBACK_PERCENTILES, GET_FEEDBACK_TIME_SERIES, GET_METRIC_AGGREGATE, GET_METRIC_BREAKDOWN, GET_METRIC_LABEL_KEYS, GET_METRIC_LABEL_VALUES, GET_METRIC_NAMES, GET_METRIC_PERCENTILES, GET_METRIC_TIME_SERIES, GET_SCORE, GET_SCORE_AGGREGATE, GET_SCORE_BREAKDOWN, GET_SCORE_PERCENTILES, GET_SCORE_TIME_SERIES, GET_SERVICE_NAMES, GET_SPAN_ROUTE, GET_TAGS, GET_TRACE_LIGHT_ROUTE, GET_TRACE_QUERY_FIELDS, GET_TRACE_QUERY_VALUES, GET_TRACE_ROUTE, GET_TRACE_TRAJECTORY_ROUTE, LIST_BRANCHES_ROUTE, LIST_FEEDBACK, LIST_LOGS, LIST_METRICS, LIST_SCORES, LIST_SCORES_BY_SPAN_ROUTE, LIST_TRACES_LIGHT_ROUTE, LIST_TRACES_ROUTE, NEW_ROUTES, QUERY_THREADS, QUERY_TRACES, SCORE_TRACES_ROUTE, UPDATE_FEEDBACK_REVIEW_STATUS, observability_exports as t };
|
|
425
|
+
export { CREATE_FEEDBACK, CREATE_SCORE, DELETE_FEEDBACK, DELETE_SCORES, DELETE_TRACES_ROUTE, GET_BRANCH_ROUTE, GET_CAPABILITIES, GET_ENTITY_NAMES, GET_ENTITY_TYPES, GET_ENVIRONMENTS, GET_FEEDBACK_AGGREGATE, GET_FEEDBACK_BREAKDOWN, GET_FEEDBACK_PERCENTILES, GET_FEEDBACK_TIME_SERIES, GET_METRIC_AGGREGATE, GET_METRIC_BREAKDOWN, GET_METRIC_LABEL_KEYS, GET_METRIC_LABEL_VALUES, GET_METRIC_NAMES, GET_METRIC_PERCENTILES, GET_METRIC_TIME_SERIES, GET_SCORE, GET_SCORE_AGGREGATE, GET_SCORE_BREAKDOWN, GET_SCORE_PERCENTILES, GET_SCORE_TIME_SERIES, GET_SERVICE_NAMES, GET_SPAN_ROUTE, GET_TAGS, GET_TRACE_LIGHT_ROUTE, GET_TRACE_QUERY_FIELDS, GET_TRACE_QUERY_VALUES, GET_TRACE_ROUTE, GET_TRACE_TRAJECTORY_ROUTE, LIST_BRANCHES_ROUTE, LIST_FEEDBACK, LIST_LOGS, LIST_METRICS, LIST_SCORES, LIST_SCORES_BY_SPAN_ROUTE, LIST_TRACES_LIGHT_ROUTE, LIST_TRACES_ROUTE, NEW_ROUTES, QUERY_THREADS, QUERY_TRACES, SCORE_TRACES_ROUTE, UPDATE_FEEDBACK_REVIEW_STATUS, observability_exports as t };
|
|
425
426
|
|
|
426
427
|
//# sourceMappingURL=observability.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability.js","names":["store"],"sources":["../../../src/server/handlers/observability.ts"],"sourcesContent":["import { extractTrajectoryFromTrace, listScoresResponseSchema } from '@mastra/core/evals';\nimport { scoreTraces } from '@mastra/core/evals/scoreTraces';\nimport {\n tracesFilterSchema,\n tracesOrderBySchema,\n spanIdsSchema,\n listTracesResponseSchema,\n scoreTracesRequestSchema,\n scoreTracesResponseSchema,\n getTraceArgsSchema,\n getTraceResponseSchema,\n getTraceLightResponseSchema,\n getSpanArgsSchema,\n getSpanResponseSchema,\n dateRangeSchema,\n toTraceSpans,\n traceSpanSchema,\n} from '@mastra/core/storage';\n// `branches*`, `listBranches*`, and `getBranch*` schemas are new in\n// @mastra/core@1.32.0; route them through a shim that tolerates older cores\n// (see ./observability-storage-schemas.ts for full rationale).\nimport { z } from 'zod/v4';\nimport { HTTPException } from '../http-exception';\nimport type { ServerRoute } from '../server-adapter/routes';\nimport { createRoute, pickParams, wrapSchemaForQueryParams } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\nimport { paginationArgsSchema } from './observability-list-query-schemas';\nimport {\n assertObservabilityDeltaSupported,\n createObservabilityListQuerySchema,\n getObservabilityStore,\n getScoresStore,\n getStorage,\n OBSERVABILITY_LIST_ENDPOINTS,\n} from './observability-shared';\nimport {\n branchesFilterSchema,\n branchesOrderBySchema,\n listBranchesResponseSchema,\n getBranchArgsSchema,\n getBranchResponseSchema,\n listTracesLightResponseSchema,\n batchDeleteTracesArgsSchema,\n batchDeleteTracesResponseSchema,\n} from './observability-storage-schemas';\n\nexport * from './observability-new-endpoints';\n\n// ============================================================================\n// Legacy Parameter Support (backward compatibility with main branch API)\n// ============================================================================\n\n/**\n * Legacy query parameters from the old API (main branch).\n * These are accepted for backward compatibility and transformed to new format.\n */\nconst legacyQueryParamsSchema = z.object({\n // Old: dateRange was in pagination, now it's startedAt in filters\n dateRange: dateRangeSchema.optional(),\n // Old: name matched span names like \"agent run: 'myAgent'\"\n name: z.string().optional(),\n // entityType needs preprocessing to handle legacy 'workflow' value\n entityType: z.preprocess(val => (val === 'workflow' ? 'workflow_run' : val), z.string().optional()),\n});\n\n/**\n * Transforms legacy query parameters to the new format.\n * - dateRange -> startedAt (if startedAt not already set)\n * - name=\"agent run: 'x'\" -> entityId='x', entityType='agent'\n * - name=\"workflow run: 'x'\" -> entityId='x', entityType='workflow_run'\n * - entityType='workflow' -> entityType='workflow_run' (enum value fix)\n */\nfunction transformLegacyParams(params: Record<string, unknown>): Record<string, unknown> {\n const result = { ...params };\n\n // Transform old entityType='workflow' -> 'workflow_run' to support direct handler usage in tests\n if (result.entityType === 'workflow') {\n result.entityType = 'workflow_run';\n }\n\n // Transform old dateRange -> new startedAt\n if (params.dateRange && !params.startedAt) {\n result.startedAt = params.dateRange;\n delete result.dateRange;\n }\n\n // Transform old name -> entityId + entityType\n // Old format: name matched span names like \"agent run: 'myAgent'\" or \"workflow run: 'myWorkflow'\"\n if (typeof params.name === 'string' && !params.entityId) {\n const agentMatch = params.name.match(/^agent run: '([^']+)'$/);\n const workflowMatch = params.name.match(/^workflow run: '([^']+)'$/);\n\n if (agentMatch) {\n result.entityId = agentMatch[1];\n result.entityType = 'agent';\n } else if (workflowMatch) {\n result.entityId = workflowMatch[1];\n result.entityType = 'workflow_run';\n }\n delete result.name;\n }\n\n return result;\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\n/** Filter shape shared by the full and lightweight trace list routes. */\nconst tracesListFilterSchema = tracesFilterSchema.extend({\n ...legacyQueryParamsSchema.shape, // Accept legacy params for backward compatibility\n entityType: z.preprocess(\n value => (value === 'workflow' ? 'workflow_run' : value),\n tracesFilterSchema.shape.entityType,\n ),\n});\n\nconst listTracesQueryParamSchema = createObservabilityListQuerySchema(tracesListFilterSchema, tracesOrderBySchema);\n\n/** Route: GET /observability/traces - paginated trace listing with filtering and sorting. */\nexport const LIST_TRACES_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces',\n responseType: 'json',\n queryParamSchema: listTracesQueryParamSchema,\n responseSchema: listTracesResponseSchema,\n summary: 'List traces',\n description:\n 'Returns a paginated list of traces with optional filtering and sorting. In delta mode, returns only newly listed traces matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n // Transform legacy params to new format before processing\n const transformedParams = transformLegacyParams(params);\n\n const filters = pickParams(tracesFilterSchema, transformedParams);\n const observabilityStore = await getObservabilityStore(mastra);\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.traces);\n return await observabilityStore.listTraces({\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n });\n }\n\n const pagination = pickParams(paginationArgsSchema, transformedParams);\n const orderBy = pickParams(tracesOrderBySchema, transformedParams);\n return await observabilityStore.listTraces({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing traces');\n }\n },\n});\n\n/** Route: GET /observability/traces/light - paginated lightweight trace listing with filtering and sorting. */\nexport const LIST_TRACES_LIGHT_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/light',\n responseType: 'json',\n queryParamSchema: listTracesQueryParamSchema,\n responseSchema: listTracesLightResponseSchema,\n summary: 'List lightweight traces',\n description:\n 'Returns a paginated list of lightweight traces with optional filtering and sorting. In delta mode, returns only newly listed traces matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n const transformedParams = transformLegacyParams(params);\n\n const filters = pickParams(tracesFilterSchema, transformedParams);\n const observabilityStore = await getObservabilityStore(mastra);\n\n // Every current store answers `listTracesLight` — stores without a dedicated\n // implementation inherit the base class's projection fallback. This guard is\n // only for an older `@mastra/core` whose base class predates the method, where\n // calling it would throw `TypeError: ... is not a function`; there we fall back\n // to `listTraces` so consumers still get a response.\n const store = observabilityStore as { listTracesLight?: unknown };\n const supportsLight = typeof store.listTracesLight === 'function';\n\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.traces);\n const deltaArgs = {\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n } as const;\n return supportsLight\n ? await observabilityStore.listTracesLight(deltaArgs)\n : await observabilityStore.listTraces(deltaArgs);\n }\n\n const pagination = pickParams(paginationArgsSchema, transformedParams);\n const orderBy = pickParams(tracesOrderBySchema, transformedParams);\n\n if (!supportsLight) {\n return await observabilityStore.listTraces({ filters, pagination, orderBy });\n }\n return await observabilityStore.listTracesLight({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing lightweight traces');\n }\n },\n});\n\n/** Route: GET /observability/branches - paginated branch-anchor span listing across all traces. */\nexport const LIST_BRANCHES_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/branches',\n responseType: 'json',\n queryParamSchema: createObservabilityListQuerySchema(branchesFilterSchema, branchesOrderBySchema),\n responseSchema: listBranchesResponseSchema,\n summary: 'List trace branches',\n description:\n 'Returns a paginated list of branch-anchor spans (e.g., AGENT_RUN, WORKFLOW_RUN, TOOL_CALL) across all traces. Unlike listTraces (one row per root-rooted trace), each row here is a single anchor span -- including ones nested under a different root entity. In delta mode, returns only newly listed branch rows matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n const filters = pickParams(branchesFilterSchema, params);\n const observabilityStore = await getObservabilityStore(mastra);\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.branches);\n return await observabilityStore.listBranches({\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n });\n }\n\n const pagination = pickParams(paginationArgsSchema, params);\n const orderBy = pickParams(branchesOrderBySchema, params);\n return await observabilityStore.listBranches({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing branches');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/branches/:spanId - retrieve the subtree rooted at a span. */\nexport const GET_BRANCH_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/branches/:spanId',\n responseType: 'json',\n pathParamSchema: getBranchArgsSchema.pick({ traceId: true, spanId: true }),\n queryParamSchema: wrapSchemaForQueryParams(getBranchArgsSchema.pick({ depth: true })),\n responseSchema: getBranchResponseSchema,\n summary: 'Get trace branch by span ID',\n description:\n 'Returns the subtree of spans rooted at the given span. The optional `depth` query param bounds descendant levels below the anchor (0 = anchor only; omitted = full subtree).',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId, spanId, depth }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const branch = await observabilityStore.getBranch({ traceId, spanId, depth });\n\n if (!branch) {\n throw new HTTPException(404, { message: `Branch not found for span '${spanId}' in trace '${traceId}'` });\n }\n\n return branch;\n } catch (error) {\n return handleError(error, 'Error getting branch');\n }\n },\n});\n/** Route: GET /observability/traces/:traceId - retrieve a single trace with all spans. */\nexport const GET_TRACE_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: getTraceResponseSchema.extend({ spans: z.array(traceSpanSchema) }),\n summary: 'Get AI trace by ID',\n description: 'Returns a complete AI trace with all spans by trace ID',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTrace({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n // Stored SpanRecords carry no status field; derive it from error/endedAt so\n // trace-detail spans match the status shown in trace list rows.\n return { ...trace, spans: toTraceSpans(trace.spans) };\n } catch (error) {\n return handleError(error, 'Error getting trace');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/light - lightweight trace for timeline rendering. */\nexport const GET_TRACE_LIGHT_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/light',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: getTraceLightResponseSchema,\n summary: 'Get lightweight AI trace by ID',\n description:\n 'Returns a trace with lightweight span data (timeline fields only, excludes input/output/attributes/metadata/tags/links)',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTraceLight({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n return trace;\n } catch (error) {\n return handleError(error, 'Error getting lightweight trace');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/spans/:spanId - get a single span with full details. */\nexport const GET_SPAN_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/spans/:spanId',\n responseType: 'json',\n pathParamSchema: getSpanArgsSchema,\n responseSchema: getSpanResponseSchema,\n summary: 'Get a single span by ID',\n description: 'Returns a complete span record with all details by trace ID and span ID',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId, spanId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const span = await observabilityStore.getSpan({ traceId, spanId });\n\n if (!span) {\n throw new HTTPException(404, { message: `Span not found` });\n }\n\n return span;\n } catch (error) {\n return handleError(error, 'Error getting span');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/trajectory - extract trajectory from a trace. */\nexport const GET_TRACE_TRAJECTORY_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/trajectory',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: z.object({\n steps: z.array(z.unknown()),\n totalDurationMs: z.number().optional(),\n rawOutput: z.unknown().optional(),\n rawWorkflowResult: z.unknown().optional(),\n }),\n summary: 'Extract trajectory from trace',\n description: 'Extracts a structured trajectory (ordered steps) from a trace by analyzing its spans',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTrace({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n const trajectory = extractTrajectoryFromTrace(trace.spans);\n return trajectory;\n } catch (error) {\n return handleError(error, 'Error extracting trajectory from trace');\n }\n },\n});\n\n/** Route: POST /observability/traces/delete - batch delete traces with cross-signal cascade. */\nexport const DELETE_TRACES_ROUTE: ServerRoute = createRoute({\n method: 'POST',\n path: '/observability/traces/delete',\n responseType: 'json',\n bodySchema: batchDeleteTracesArgsSchema.pick({ traceIds: true }),\n responseSchema: batchDeleteTracesResponseSchema,\n maxBodySize: 256 * 1024,\n summary: 'Delete traces',\n description:\n 'Deletes traces by ID, cascading to all associated data: spans, trace roots/branches, and signal events (scores, feedback, metrics, logs) that reference the deleted traces. Signals without a trace ID are untouched. Experiment traces are deleted like any other trace. On ClickHouse-backed stores, deletes are lightweight and reads may briefly return deleted rows until the delete is fully applied.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceIds }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n await observabilityStore.batchDeleteTraces({ traceIds });\n return { success: true as const };\n } catch (error) {\n return handleError(error, 'Error deleting traces');\n }\n },\n});\n\n/** Route: POST /observability/traces/score - score traces using a specified scorer (fire-and-forget). */\nexport const SCORE_TRACES_ROUTE = createRoute({\n method: 'POST',\n path: '/observability/traces/score',\n responseType: 'json',\n bodySchema: scoreTracesRequestSchema,\n responseSchema: scoreTracesResponseSchema,\n summary: 'Score traces',\n description: 'Scores one or more traces using a specified scorer (fire-and-forget)',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n // Validate storage exists before starting background task\n getStorage(mastra);\n\n const { scorerName, targets } = params;\n\n const scorer = mastra.getScorerById(scorerName);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer '${scorerName}' not found` });\n }\n\n scoreTraces({\n scorerId: scorer.config.id || scorer.config.name,\n targets,\n mastra,\n }).catch(error => {\n const logger = mastra.getLogger();\n logger?.error(`Background trace scoring failed: ${error.message}`, error);\n });\n\n return {\n status: 'success',\n message: `Scoring started for ${targets.length} ${targets.length === 1 ? 'trace' : 'traces'}`,\n traceCount: targets.length,\n };\n } catch (error) {\n return handleError(error, 'Error processing trace scoring');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SPAN_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/:spanId/scores',\n responseType: 'json',\n pathParamSchema: spanIdsSchema,\n // List endpoints accept optional query params; use partial() to allow empty queries.\n queryParamSchema: wrapSchemaForQueryParams(paginationArgsSchema.partial()),\n responseSchema: listScoresResponseSchema,\n summary: 'List scores by span',\n description: 'Returns all scores for a specific span within a trace',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const pagination = pickParams(paginationArgsSchema, params);\n const spanIds = pickParams(spanIdsSchema, params);\n\n const scoresStore = await getScoresStore(mastra);\n\n return await scoresStore.listScoresBySpan({\n ...spanIds,\n pagination,\n });\n } catch (error) {\n return handleError(error, 'Error getting scores by span');\n }\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"observability.js","names":["store"],"sources":["../../../src/server/handlers/observability.ts"],"sourcesContent":["import { extractTrajectoryFromTrace, listScoresResponseSchema } from '@mastra/core/evals';\nimport { scoreTraces } from '@mastra/core/evals/scoreTraces';\nimport {\n tracesFilterSchema,\n tracesOrderBySchema,\n spanIdsSchema,\n listTracesResponseSchema,\n scoreTracesRequestSchema,\n scoreTracesResponseSchema,\n getTraceArgsSchema,\n getTraceResponseSchema,\n getTraceLightResponseSchema,\n getSpanArgsSchema,\n getSpanResponseSchema,\n dateRangeSchema,\n toTraceSpans,\n traceSpanSchema,\n} from '@mastra/core/storage';\n// `branches*`, `listBranches*`, and `getBranch*` schemas are new in\n// @mastra/core@1.32.0; route them through a shim that tolerates older cores\n// (see ./observability-storage-schemas.ts for full rationale).\nimport { z } from 'zod/v4';\nimport { HTTPException } from '../http-exception';\nimport type { ServerRoute } from '../server-adapter/routes';\nimport { createRoute, pickParams, wrapSchemaForQueryParams } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\nimport { paginationArgsSchema } from './observability-list-query-schemas';\nimport {\n assertObservabilityDeltaSupported,\n createObservabilityListQuerySchema,\n getObservabilityStore,\n getScoresStore,\n getStorage,\n OBSERVABILITY_LIST_ENDPOINTS,\n} from './observability-shared';\nimport {\n branchesFilterSchema,\n branchesOrderBySchema,\n listBranchesResponseSchema,\n getBranchArgsSchema,\n getBranchResponseSchema,\n listTracesLightResponseSchema,\n batchDeleteTracesArgsSchema,\n batchDeleteTracesResponseSchema,\n} from './observability-storage-schemas';\n\nexport * from './observability-new-endpoints';\n\n// ============================================================================\n// Legacy Parameter Support (backward compatibility with main branch API)\n// ============================================================================\n\n/**\n * Legacy query parameters from the old API (main branch).\n * These are accepted for backward compatibility and transformed to new format.\n */\nconst legacyQueryParamsSchema = z.object({\n // Old: dateRange was in pagination, now it's startedAt in filters\n dateRange: dateRangeSchema.optional(),\n // Old: name matched span names like \"agent run: 'myAgent'\"\n name: z.string().optional(),\n // entityType needs preprocessing to handle legacy 'workflow' value\n entityType: z.preprocess(val => (val === 'workflow' ? 'workflow_run' : val), z.string().optional()),\n});\n\n/**\n * Transforms legacy query parameters to the new format.\n * - dateRange -> startedAt (if startedAt not already set)\n * - name=\"agent run: 'x'\" -> entityId='x', entityType='agent'\n * - name=\"workflow run: 'x'\" -> entityId='x', entityType='workflow_run'\n * - entityType='workflow' -> entityType='workflow_run' (enum value fix)\n */\nfunction transformLegacyParams(params: Record<string, unknown>): Record<string, unknown> {\n const result = { ...params };\n\n // Transform old entityType='workflow' -> 'workflow_run' to support direct handler usage in tests\n if (result.entityType === 'workflow') {\n result.entityType = 'workflow_run';\n }\n\n // Transform old dateRange -> new startedAt\n if (params.dateRange && !params.startedAt) {\n result.startedAt = params.dateRange;\n delete result.dateRange;\n }\n\n // Transform old name -> entityId + entityType\n // Old format: name matched span names like \"agent run: 'myAgent'\" or \"workflow run: 'myWorkflow'\"\n if (typeof params.name === 'string' && !params.entityId) {\n const agentMatch = params.name.match(/^agent run: '([^']+)'$/);\n const workflowMatch = params.name.match(/^workflow run: '([^']+)'$/);\n\n if (agentMatch) {\n result.entityId = agentMatch[1];\n result.entityType = 'agent';\n } else if (workflowMatch) {\n result.entityId = workflowMatch[1];\n result.entityType = 'workflow_run';\n }\n delete result.name;\n }\n\n return result;\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\n/** Filter shape shared by the full and lightweight trace list routes. */\nconst tracesListFilterSchema = tracesFilterSchema.extend({\n ...legacyQueryParamsSchema.shape, // Accept legacy params for backward compatibility\n entityType: z.preprocess(\n value => (value === 'workflow' ? 'workflow_run' : value),\n tracesFilterSchema.shape.entityType,\n ),\n});\n\nconst listTracesQueryParamSchema = createObservabilityListQuerySchema(tracesListFilterSchema, tracesOrderBySchema);\n\n/** Route: GET /observability/traces - paginated trace listing with filtering and sorting. */\nexport const LIST_TRACES_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces',\n responseType: 'json',\n queryParamSchema: listTracesQueryParamSchema,\n responseSchema: listTracesResponseSchema,\n summary: 'List traces',\n description:\n 'Returns a paginated list of traces with optional filtering and sorting. In delta mode, returns only newly listed traces matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n // Transform legacy params to new format before processing\n const transformedParams = transformLegacyParams(params);\n\n const filters = pickParams(tracesFilterSchema, transformedParams);\n const observabilityStore = await getObservabilityStore(mastra);\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.traces);\n return await observabilityStore.listTraces({\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n });\n }\n\n const pagination = pickParams(paginationArgsSchema, transformedParams);\n const orderBy = pickParams(tracesOrderBySchema, transformedParams);\n return await observabilityStore.listTraces({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing traces');\n }\n },\n});\n\n/** Route: GET /observability/traces/light - paginated lightweight trace listing with filtering and sorting. */\nexport const LIST_TRACES_LIGHT_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/light',\n responseType: 'json',\n queryParamSchema: listTracesQueryParamSchema,\n responseSchema: listTracesLightResponseSchema,\n summary: 'List lightweight traces',\n description:\n 'Returns a paginated list of lightweight traces with optional filtering and sorting. In delta mode, returns only newly listed traces matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n const transformedParams = transformLegacyParams(params);\n\n const filters = pickParams(tracesFilterSchema, transformedParams);\n const observabilityStore = await getObservabilityStore(mastra);\n\n // Every current store answers `listTracesLight` — stores without a dedicated\n // implementation inherit the base class's projection fallback. This guard is\n // only for an older `@mastra/core` whose base class predates the method, where\n // calling it would throw `TypeError: ... is not a function`; there we fall back\n // to `listTraces` so consumers still get a response.\n const store = observabilityStore as { listTracesLight?: unknown };\n const supportsLight = typeof store.listTracesLight === 'function';\n\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.traces);\n const deltaArgs = {\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n } as const;\n return supportsLight\n ? await observabilityStore.listTracesLight(deltaArgs)\n : await observabilityStore.listTraces(deltaArgs);\n }\n\n const pagination = pickParams(paginationArgsSchema, transformedParams);\n const orderBy = pickParams(tracesOrderBySchema, transformedParams);\n\n if (!supportsLight) {\n return await observabilityStore.listTraces({ filters, pagination, orderBy });\n }\n return await observabilityStore.listTracesLight({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing lightweight traces');\n }\n },\n});\n\n/** Route: GET /observability/branches - paginated branch-anchor span listing across all traces. */\nexport const LIST_BRANCHES_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/branches',\n responseType: 'json',\n queryParamSchema: createObservabilityListQuerySchema(branchesFilterSchema, branchesOrderBySchema),\n responseSchema: listBranchesResponseSchema,\n summary: 'List trace branches',\n description:\n 'Returns a paginated list of branch-anchor spans (e.g., AGENT_RUN, WORKFLOW_RUN, TOOL_CALL) across all traces. Unlike listTraces (one row per root-rooted trace), each row here is a single anchor span -- including ones nested under a different root entity. In delta mode, returns only newly listed branch rows matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n const filters = pickParams(branchesFilterSchema, params);\n const observabilityStore = await getObservabilityStore(mastra);\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.branches);\n return await observabilityStore.listBranches({\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n });\n }\n\n const pagination = pickParams(paginationArgsSchema, params);\n const orderBy = pickParams(branchesOrderBySchema, params);\n return await observabilityStore.listBranches({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing branches');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/branches/:spanId - retrieve the subtree rooted at a span. */\nexport const GET_BRANCH_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/branches/:spanId',\n responseType: 'json',\n pathParamSchema: getBranchArgsSchema.pick({ traceId: true, spanId: true }),\n queryParamSchema: wrapSchemaForQueryParams(getBranchArgsSchema.pick({ depth: true })),\n responseSchema: getBranchResponseSchema,\n summary: 'Get trace branch by span ID',\n description:\n 'Returns the subtree of spans rooted at the given span. The optional `depth` query param bounds descendant levels below the anchor (0 = anchor only; omitted = full subtree).',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId, spanId, depth }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const branch = await observabilityStore.getBranch({ traceId, spanId, depth });\n\n if (!branch) {\n throw new HTTPException(404, { message: `Branch not found for span '${spanId}' in trace '${traceId}'` });\n }\n\n return branch;\n } catch (error) {\n return handleError(error, 'Error getting branch');\n }\n },\n});\n/** Route: GET /observability/traces/:traceId - retrieve a single trace with all spans. */\nexport const GET_TRACE_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: getTraceResponseSchema.extend({ spans: z.array(traceSpanSchema) }),\n summary: 'Get AI trace by ID',\n description: 'Returns a complete AI trace with all spans by trace ID',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTrace({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n // Stored SpanRecords carry no status field; derive it from error/endedAt so\n // trace-detail spans match the status shown in trace list rows.\n return { ...trace, spans: toTraceSpans(trace.spans) };\n } catch (error) {\n return handleError(error, 'Error getting trace');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/light - lightweight trace for timeline rendering. */\nexport const GET_TRACE_LIGHT_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/light',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: getTraceLightResponseSchema,\n summary: 'Get lightweight AI trace by ID',\n description:\n 'Returns a trace with lightweight span data (timeline fields only, excludes input/output/attributes/metadata/tags/links)',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTraceLight({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n return trace;\n } catch (error) {\n return handleError(error, 'Error getting lightweight trace');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/spans/:spanId - get a single span with full details. */\nexport const GET_SPAN_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/spans/:spanId',\n responseType: 'json',\n pathParamSchema: getSpanArgsSchema,\n responseSchema: getSpanResponseSchema,\n summary: 'Get a single span by ID',\n description: 'Returns a complete span record with all details by trace ID and span ID',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId, spanId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const span = await observabilityStore.getSpan({ traceId, spanId });\n\n if (!span) {\n throw new HTTPException(404, { message: `Span not found` });\n }\n\n return span;\n } catch (error) {\n return handleError(error, 'Error getting span');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/trajectory - extract trajectory from a trace. */\nexport const GET_TRACE_TRAJECTORY_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/trajectory',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: z.object({\n steps: z.array(z.unknown()),\n totalDurationMs: z.number().optional(),\n rawOutput: z.unknown().optional(),\n rawWorkflowResult: z.unknown().optional(),\n }),\n summary: 'Extract trajectory from trace',\n description: 'Extracts a structured trajectory (ordered steps) from a trace by analyzing its spans',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTrace({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n const trajectory = extractTrajectoryFromTrace(trace.spans);\n return trajectory;\n } catch (error) {\n return handleError(error, 'Error extracting trajectory from trace');\n }\n },\n});\n\n/** Route: POST /observability/traces/delete - batch delete traces with cross-signal cascade. */\nexport const DELETE_TRACES_ROUTE: ServerRoute = createRoute({\n method: 'POST',\n path: '/observability/traces/delete',\n responseType: 'json',\n bodySchema: batchDeleteTracesArgsSchema.pick({ traceIds: true }),\n responseSchema: batchDeleteTracesResponseSchema,\n maxBodySize: 256 * 1024,\n summary: 'Delete traces',\n description:\n 'Deletes traces by ID, cascading to all associated data: spans, trace roots/branches, and signal events (scores, feedback, metrics, logs) that reference the deleted traces. Signals without a trace ID are untouched. Experiment traces are deleted like any other trace. On ClickHouse-backed stores, deletes are lightweight and reads may briefly return deleted rows until the delete is fully applied.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceIds }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n await observabilityStore.batchDeleteTraces({ traceIds });\n return { success: true as const };\n } catch (error) {\n return handleError(error, 'Error deleting traces');\n }\n },\n});\n\n/** Route: POST /observability/traces/score - score traces using a specified scorer (fire-and-forget). */\nexport const SCORE_TRACES_ROUTE = createRoute({\n method: 'POST',\n path: '/observability/traces/score',\n responseType: 'json',\n bodySchema: scoreTracesRequestSchema,\n responseSchema: scoreTracesResponseSchema,\n summary: 'Score traces',\n description: 'Scores one or more traces using a specified scorer (fire-and-forget)',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n // Validate storage exists before starting background task\n getStorage(mastra);\n\n const { scorerName, targets } = params;\n\n const scorer = mastra.getScorerById(scorerName);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer '${scorerName}' not found` });\n }\n\n scoreTraces({\n scorerId: scorer.config.id || scorer.config.name,\n targets,\n mastra,\n }).catch(error => {\n const logger = mastra.getLogger();\n logger?.error(`Background trace scoring failed: ${error.message}`, error);\n });\n\n return {\n status: 'success',\n message: `Scoring started for ${targets.length} ${targets.length === 1 ? 'trace' : 'traces'}`,\n traceCount: targets.length,\n };\n } catch (error) {\n return handleError(error, 'Error processing trace scoring');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SPAN_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/:spanId/scores',\n responseType: 'json',\n pathParamSchema: spanIdsSchema,\n // List endpoints accept optional query params; use partial() to allow empty queries.\n queryParamSchema: wrapSchemaForQueryParams(paginationArgsSchema.partial()),\n responseSchema: listScoresResponseSchema,\n summary: 'List scores by span',\n description: 'Returns all scores for a specific span within a trace',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const pagination = pickParams(paginationArgsSchema, params);\n const spanIds = pickParams(spanIdsSchema, params);\n\n const scoresStore = await getScoresStore(mastra);\n\n return await scoresStore.listScoresBySpan({\n ...spanIds,\n pagination,\n });\n } catch (error) {\n return handleError(error, 'Error getting scores by span');\n }\n },\n});\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_rolldown_runtime = require("../../rolldown-runtime-Bd6kNlEP.cjs");
|
|
3
3
|
const require_http_exception = require("../../http-exception-CKDHupKw.cjs");
|
|
4
|
-
const require_agents = require("../../agents-
|
|
4
|
+
const require_agents = require("../../agents-CqEbqSrC.cjs");
|
|
5
5
|
const require_route_builder = require("../../route-builder-2yrD15TL.cjs");
|
|
6
6
|
const require_server_handlers_error = require("./error.cjs");
|
|
7
7
|
const require_utils = require("../../utils-aIu3gkhJ.cjs");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as __exportAll } from "../../rolldown-runtime-maW3aOIk.js";
|
|
2
2
|
import { t as HTTPException } from "../../http-exception-CyfxZB6W.js";
|
|
3
|
-
import { a as agentIdPathParams, o as agentPlanQuerySchema, s as agentPlanResponseSchema } from "../../agents-
|
|
3
|
+
import { a as agentIdPathParams, o as agentPlanQuerySchema, s as agentPlanResponseSchema } from "../../agents-Dstk6Isf.js";
|
|
4
4
|
import { n as createRoute } from "../../route-builder-lBil8Cvo.js";
|
|
5
5
|
import { handleError } from "./error.js";
|
|
6
6
|
import { p as MastraFGAPermissions } from "../../utils-KsERfbhc.js";
|
|
@@ -187,6 +187,17 @@ export declare const GET_RESPONSE_ROUTE: Omit<import("@mastra/core/server").ApiR
|
|
|
187
187
|
model: string;
|
|
188
188
|
status: "completed" | "in_progress" | "incomplete";
|
|
189
189
|
output: ({
|
|
190
|
+
id: string;
|
|
191
|
+
type: "message";
|
|
192
|
+
role: "assistant";
|
|
193
|
+
status: "completed" | "in_progress" | "incomplete";
|
|
194
|
+
content: {
|
|
195
|
+
type: "output_text";
|
|
196
|
+
text: string;
|
|
197
|
+
annotations?: unknown[] | undefined;
|
|
198
|
+
logprobs?: unknown[] | undefined;
|
|
199
|
+
}[];
|
|
200
|
+
} | {
|
|
190
201
|
id: string;
|
|
191
202
|
type: "function_call";
|
|
192
203
|
call_id: string;
|
|
@@ -198,17 +209,6 @@ export declare const GET_RESPONSE_ROUTE: Omit<import("@mastra/core/server").ApiR
|
|
|
198
209
|
type: "function_call_output";
|
|
199
210
|
call_id: string;
|
|
200
211
|
output: string;
|
|
201
|
-
} | {
|
|
202
|
-
id: string;
|
|
203
|
-
type: "message";
|
|
204
|
-
role: "assistant";
|
|
205
|
-
status: "completed" | "in_progress" | "incomplete";
|
|
206
|
-
content: {
|
|
207
|
-
type: "output_text";
|
|
208
|
-
text: string;
|
|
209
|
-
annotations?: unknown[] | undefined;
|
|
210
|
-
logprobs?: unknown[] | undefined;
|
|
211
|
-
}[];
|
|
212
212
|
})[];
|
|
213
213
|
usage: {
|
|
214
214
|
input_tokens: number;
|
|
@@ -5,7 +5,7 @@ const require_route_builder = require("../../route-builder-2yrD15TL.cjs");
|
|
|
5
5
|
const require_utils = require("../../utils-DFQixxkO.cjs");
|
|
6
6
|
const require_server_handlers_error = require("./error.cjs");
|
|
7
7
|
const require_server_handlers_version_helpers = require("./version-helpers.cjs");
|
|
8
|
-
const require_scorer_versions = require("../../scorer-versions-
|
|
8
|
+
const require_scorer_versions = require("../../scorer-versions-nip3xSwF.cjs");
|
|
9
9
|
//#region src/server/handlers/scorer-versions.ts
|
|
10
10
|
const SNAPSHOT_CONFIG_FIELDS = [
|
|
11
11
|
"name",
|
|
@@ -3,7 +3,7 @@ import { n as createRoute } from "../../route-builder-lBil8Cvo.js";
|
|
|
3
3
|
import { i as getStoredResourceScope, n as assertStoredResourceScope } from "../../utils-BJm0ZYnM.js";
|
|
4
4
|
import { handleError } from "./error.js";
|
|
5
5
|
import { calculateChangedFields, computeVersionDiffs, createVersionWithRetry, enforceRetentionLimit, extractConfigFromVersion } from "./version-helpers.js";
|
|
6
|
-
import { a as createScorerVersionResponseSchema, c as listScorerVersionsQuerySchema, d as scorerVersionIdPathParams, f as scorerVersionPathParams, i as createScorerVersionBodySchema, l as listScorerVersionsResponseSchema, n as compareScorerVersionsQuerySchema, o as deleteScorerVersionResponseSchema, r as compareScorerVersionsResponseSchema, s as getScorerVersionResponseSchema, t as activateScorerVersionResponseSchema, u as restoreScorerVersionResponseSchema } from "../../scorer-versions-
|
|
6
|
+
import { a as createScorerVersionResponseSchema, c as listScorerVersionsQuerySchema, d as scorerVersionIdPathParams, f as scorerVersionPathParams, i as createScorerVersionBodySchema, l as listScorerVersionsResponseSchema, n as compareScorerVersionsQuerySchema, o as deleteScorerVersionResponseSchema, r as compareScorerVersionsResponseSchema, s as getScorerVersionResponseSchema, t as activateScorerVersionResponseSchema, u as restoreScorerVersionResponseSchema } from "../../scorer-versions-CscApWzu.js";
|
|
7
7
|
//#region src/server/handlers/scorer-versions.ts
|
|
8
8
|
const SNAPSHOT_CONFIG_FIELDS = [
|
|
9
9
|
"name",
|
|
@@ -4,9 +4,9 @@ const require_http_exception = require("../../http-exception-CKDHupKw.cjs");
|
|
|
4
4
|
const require_route_builder = require("../../route-builder-2yrD15TL.cjs");
|
|
5
5
|
const require_utils = require("../../utils-DFQixxkO.cjs");
|
|
6
6
|
const require_server_handlers_error = require("./error.cjs");
|
|
7
|
-
const require_stored_agents = require("../../stored-agents-
|
|
7
|
+
const require_stored_agents = require("../../stored-agents-DTgigNRY.cjs");
|
|
8
8
|
const require_server_handlers_authorship = require("./authorship.cjs");
|
|
9
|
-
const require_editor_builder = require("../../editor-builder-
|
|
9
|
+
const require_editor_builder = require("../../editor-builder-BbdoWaL_.cjs");
|
|
10
10
|
const require_favorites = require("../../favorites-D1-AzGsK.cjs");
|
|
11
11
|
//#region src/server/handlers/stored-agent-favorites.ts
|
|
12
12
|
/**
|