@mastra/server 1.79.0 → 1.80.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/_types/@internal_core/dist/storage/index.d.ts +243 -243
- package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/request-context/index.d.ts +13 -13
- package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/routes/index.d.ts +12 -12
- package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/types/index.d.ts +1 -2
- package/dist/{a2a-Uood_0DN.cjs → a2a-qQkFvE8f.cjs} +2 -2
- package/dist/{a2a-Uood_0DN.cjs.map → a2a-qQkFvE8f.cjs.map} +1 -1
- package/dist/{a2a-BqLB3McP.js → a2a-wv2WQ3IG.js} +2 -2
- package/dist/{a2a-BqLB3McP.js.map → a2a-wv2WQ3IG.js.map} +1 -1
- package/dist/{agent-builder-CuBD1tpv.cjs → agent-builder-C8F4tCwd.cjs} +4 -4
- package/dist/{agent-builder-CuBD1tpv.cjs.map → agent-builder-C8F4tCwd.cjs.map} +1 -1
- package/dist/{agent-builder-VhM8ADW-.js → agent-builder-DFZjeOkA.js} +4 -4
- package/dist/{agent-builder-VhM8ADW-.js.map → agent-builder-DFZjeOkA.js.map} +1 -1
- package/dist/{agents-BHLTMBff.js → agents-BjdJ-Tyf.js} +3 -2
- package/dist/agents-BjdJ-Tyf.js.map +1 -0
- package/dist/{agents-T-OIM9IK.cjs → agents-CPYFVJak.cjs} +8 -1
- package/dist/agents-CPYFVJak.cjs.map +1 -0
- package/dist/{agents-BOWEUKyV.cjs → agents-CcY0JTDF.cjs} +81 -9
- package/dist/agents-CcY0JTDF.cjs.map +1 -0
- package/dist/{agents-DRQ3ScbX.js → agents-DaLwtv9x.js} +76 -10
- package/dist/agents-DaLwtv9x.js.map +1 -0
- package/dist/{api-schema-manifest-CI90M4sX.js → api-schema-manifest-B1WyInlF.js} +2 -2
- package/dist/{api-schema-manifest-CI90M4sX.js.map → api-schema-manifest-B1WyInlF.js.map} +1 -1
- package/dist/{api-schema-manifest-DIlNfbyw.cjs → api-schema-manifest-CxrGchcx.cjs} +2 -2
- package/dist/{api-schema-manifest-DIlNfbyw.cjs.map → api-schema-manifest-CxrGchcx.cjs.map} +1 -1
- package/dist/{conversations-C5MkQBB8.cjs → conversations-B16oVu_1.cjs} +2 -2
- package/dist/{conversations-C5MkQBB8.cjs.map → conversations-B16oVu_1.cjs.map} +1 -1
- package/dist/{conversations-8BWryNlF.js → conversations-B5RJ2jcO.js} +2 -2
- package/dist/{conversations-8BWryNlF.js.map → conversations-B5RJ2jcO.js.map} +1 -1
- package/dist/{datasets-BUC5T-fd.cjs → datasets-Cgtczd13.cjs} +11 -1
- package/dist/datasets-Cgtczd13.cjs.map +1 -0
- package/dist/{datasets-CCWuznUu.js → datasets-FRp69Mwv.js} +11 -1
- package/dist/datasets-FRp69Mwv.js.map +1 -0
- package/dist/{dist-k77XQGUn.js → dist-6ZwWUUBQ.js} +40 -6
- package/dist/{dist-k77XQGUn.js.map → dist-6ZwWUUBQ.js.map} +1 -1
- package/dist/{dist-B-bEVWlJ.cjs → dist-U8ZBR8z5.cjs} +40 -6
- package/dist/{dist-B-bEVWlJ.cjs.map → dist-U8ZBR8z5.cjs.map} +1 -1
- package/dist/{dist-B3kC8Yd0.cjs → dist-bT2343kX.cjs} +1 -1
- package/dist/dist-qYC51DiT.js +1 -0
- package/dist/docs/SKILL.md +2 -2
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/docs-connections-a2a.md +1 -1
- package/dist/docs/references/docs-guides-mcp-authentication-authorization.md +2 -2
- package/dist/docs/references/docs-server-middleware.md +1 -1
- package/dist/docs/references/reference-observability-tracing-advanced-queries.md +92 -11
- package/dist/{editor-builder-BDtiWw0f.cjs → editor-builder-Bt26tVKI.cjs} +2 -2
- package/dist/{editor-builder-BDtiWw0f.cjs.map → editor-builder-Bt26tVKI.cjs.map} +1 -1
- package/dist/{editor-builder-DnLCfqnY.js → editor-builder-DWMgkYK-.js} +2 -2
- package/dist/{editor-builder-DnLCfqnY.js.map → editor-builder-DWMgkYK-.js.map} +1 -1
- package/dist/{editor-builder-DtpP1FtW.cjs → editor-builder-D_OUA9P6.cjs} +3 -3
- package/dist/{editor-builder-DtpP1FtW.cjs.map → editor-builder-D_OUA9P6.cjs.map} +1 -1
- package/dist/{editor-builder-ClFlGXoX.js → editor-builder-DzGLnYcJ.js} +3 -3
- package/dist/{editor-builder-ClFlGXoX.js.map → editor-builder-DzGLnYcJ.js.map} +1 -1
- package/dist/{helpers-CAcEhq38.cjs → helpers-DvzrUzqY.cjs} +2 -2
- package/dist/{helpers-CAcEhq38.cjs.map → helpers-DvzrUzqY.cjs.map} +1 -1
- package/dist/{helpers-vrqddDd5.js → helpers-gCkmhB9x.js} +2 -2
- package/dist/{helpers-vrqddDd5.js.map → helpers-gCkmhB9x.js.map} +1 -1
- package/dist/{observability-BBMCMeT-.cjs → observability-C2BZQ2jU.cjs} +3 -2
- package/dist/{observability-BBMCMeT-.cjs.map → observability-C2BZQ2jU.cjs.map} +1 -1
- package/dist/{observability-ZRgRcvoX.js → observability-Dz9jvMJ3.js} +3 -2
- package/dist/{observability-ZRgRcvoX.js.map → observability-Dz9jvMJ3.js.map} +1 -1
- package/dist/{observability-new-endpoints-fjoZzEtk.js → observability-new-endpoints-3DlTYf34.js} +117 -4
- package/dist/observability-new-endpoints-3DlTYf34.js.map +1 -0
- package/dist/{observability-new-endpoints-tG3-odLa.cjs → observability-new-endpoints-Drr7q2Dj.cjs} +121 -2
- package/dist/observability-new-endpoints-Drr7q2Dj.cjs.map +1 -0
- package/dist/{plans-CiPgWBhO.cjs → plans-DVzqRj-i.cjs} +3 -3
- package/dist/{plans-CiPgWBhO.cjs.map → plans-DVzqRj-i.cjs.map} +1 -1
- package/dist/{plans-DCepEY7n.js → plans-TpICqvFU.js} +3 -3
- package/dist/{plans-DCepEY7n.js.map → plans-TpICqvFU.js.map} +1 -1
- package/dist/{probe-image-size-BdfbUHxx.js → probe-image-size-BYv_-JV7.js} +2 -2
- package/dist/{probe-image-size-BdfbUHxx.js.map → probe-image-size-BYv_-JV7.js.map} +1 -1
- package/dist/{probe-image-size-Alv3gwKl.cjs → probe-image-size-mZ2ldE98.cjs} +2 -2
- package/dist/{probe-image-size-Alv3gwKl.cjs.map → probe-image-size-mZ2ldE98.cjs.map} +1 -1
- package/dist/{responses-CCRijwDF.cjs → responses-CP2UYT8z.cjs} +2 -2
- package/dist/{responses-CCRijwDF.cjs.map → responses-CP2UYT8z.cjs.map} +1 -1
- package/dist/{responses-4FwMNxoJ.js → responses-CnQoSpBc.js} +2 -2
- package/dist/{responses-4FwMNxoJ.js.map → responses-CnQoSpBc.js.map} +1 -1
- package/dist/{routes-BC20mdNN.js → routes-DZ2QfTnF.js} +17 -15
- package/dist/routes-DZ2QfTnF.js.map +1 -0
- package/dist/{routes-DGLJyqjD.cjs → routes-OsQV338J.cjs} +17 -15
- package/dist/routes-OsQV338J.cjs.map +1 -0
- package/dist/{scores-D9UgETt_.js → scores-DFFS3Zxo.js} +2 -2
- package/dist/{scores-D9UgETt_.js.map → scores-DFFS3Zxo.js.map} +1 -1
- package/dist/{scores-DRdtS7NT.cjs → scores-DwiL1Nk8.cjs} +2 -2
- package/dist/{scores-DRdtS7NT.cjs.map → scores-DwiL1Nk8.cjs.map} +1 -1
- package/dist/server/auth/helpers.d.ts.map +1 -1
- package/dist/server/auth/index.cjs +1 -1
- package/dist/server/auth/index.js +1 -1
- package/dist/server/handlers/a2a.cjs +1 -1
- package/dist/server/handlers/a2a.js +1 -1
- package/dist/server/handlers/agent-builder.cjs +1 -1
- package/dist/server/handlers/agent-builder.js +1 -1
- package/dist/server/handlers/agents.cjs +2 -1
- package/dist/server/handlers/agents.d.ts +31 -0
- package/dist/server/handlers/agents.d.ts.map +1 -1
- package/dist/server/handlers/agents.js +1 -1
- package/dist/server/handlers/auth.cjs +15 -1
- package/dist/server/handlers/auth.cjs.map +1 -1
- package/dist/server/handlers/auth.d.ts.map +1 -1
- package/dist/server/handlers/auth.js +15 -1
- package/dist/server/handlers/auth.js.map +1 -1
- package/dist/server/handlers/conversations.cjs +1 -1
- package/dist/server/handlers/conversations.js +1 -1
- package/dist/server/handlers/datasets.cjs +3 -2
- package/dist/server/handlers/datasets.cjs.map +1 -1
- package/dist/server/handlers/datasets.d.ts +8 -0
- package/dist/server/handlers/datasets.d.ts.map +1 -1
- package/dist/server/handlers/datasets.js +3 -2
- package/dist/server/handlers/datasets.js.map +1 -1
- package/dist/server/handlers/editor-builder.cjs +1 -1
- package/dist/server/handlers/editor-builder.js +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 +132 -0
- package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
- package/dist/server/handlers/observability-new-endpoints.js +1 -1
- package/dist/server/handlers/observability-shared.cjs +19 -0
- package/dist/server/handlers/observability-shared.cjs.map +1 -1
- package/dist/server/handlers/observability-shared.d.ts +10 -0
- package/dist/server/handlers/observability-shared.d.ts.map +1 -1
- package/dist/server/handlers/observability-shared.js +18 -1
- package/dist/server/handlers/observability-shared.js.map +1 -1
- package/dist/server/handlers/observability.cjs +3 -2
- package/dist/server/handlers/observability.js +3 -3
- package/dist/server/handlers/plans.cjs +1 -1
- package/dist/server/handlers/plans.js +1 -1
- package/dist/server/handlers/responses.cjs +1 -1
- package/dist/server/handlers/responses.js +1 -1
- package/dist/server/handlers/schedules-workflows-shim.cjs.map +1 -1
- package/dist/server/handlers/schedules-workflows-shim.js.map +1 -1
- package/dist/server/handlers/scores.cjs +1 -1
- package/dist/server/handlers/scores.js +1 -1
- package/dist/server/handlers/stored-agent-favorites.cjs +1 -1
- package/dist/server/handlers/stored-agent-favorites.js +1 -1
- package/dist/server/handlers/stored-agents.cjs +29 -11
- package/dist/server/handlers/stored-agents.cjs.map +1 -1
- package/dist/server/handlers/stored-agents.d.ts.map +1 -1
- package/dist/server/handlers/stored-agents.js +29 -11
- package/dist/server/handlers/stored-agents.js.map +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 +2 -2
- package/dist/server/handlers/system.d.ts +2 -0
- package/dist/server/handlers/system.d.ts.map +1 -1
- package/dist/server/handlers/system.js +2 -2
- package/dist/server/handlers/tools.cjs +1 -1
- package/dist/server/handlers/tools.d.ts.map +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/handlers/workspace.cjs +1 -1
- package/dist/server/handlers/workspace.d.ts +23 -23
- package/dist/server/handlers/workspace.js +1 -1
- package/dist/server/handlers.cjs +11 -11
- package/dist/server/handlers.js +11 -11
- package/dist/server/schemas/agents.d.ts +4 -0
- package/dist/server/schemas/agents.d.ts.map +1 -1
- package/dist/server/schemas/datasets.d.ts +4 -0
- package/dist/server/schemas/datasets.d.ts.map +1 -1
- package/dist/server/schemas/index.cjs +5 -4
- package/dist/server/schemas/index.js +5 -5
- package/dist/server/schemas/system.d.ts +2 -0
- package/dist/server/schemas/system.d.ts.map +1 -1
- package/dist/server/server-adapter/index.cjs +95 -3
- package/dist/server/server-adapter/index.cjs.map +1 -1
- package/dist/server/server-adapter/index.d.ts +28 -1
- package/dist/server/server-adapter/index.d.ts.map +1 -1
- package/dist/server/server-adapter/index.js +93 -4
- package/dist/server/server-adapter/index.js.map +1 -1
- package/dist/server/server-adapter/mcp-disconnect.d.ts +16 -0
- package/dist/server/server-adapter/mcp-disconnect.d.ts.map +1 -0
- package/dist/server/server-adapter/routes/agents.d.ts +2 -1
- package/dist/server/server-adapter/routes/agents.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/datasets.d.ts +8 -0
- package/dist/server/server-adapter/routes/datasets.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/observability.d.ts +129 -0
- package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/system.d.ts +2 -0
- package/dist/server/server-adapter/routes/system.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/workspace.d.ts +23 -23
- package/dist/{system-BvpFMIJB.cjs → system-B_Sod-Le.cjs} +2 -1
- package/dist/system-B_Sod-Le.cjs.map +1 -0
- package/dist/{system-CpzPxRRq.js → system-sSSmmt7I.js} +2 -1
- package/dist/system-sSSmmt7I.js.map +1 -0
- package/dist/{tools-SPJtxG9N.cjs → tools-B2fMQuwp.cjs} +3 -3
- package/dist/tools-B2fMQuwp.cjs.map +1 -0
- package/dist/{tools-CmFSfDMn.js → tools-BrO42c5i.js} +3 -3
- package/dist/tools-BrO42c5i.js.map +1 -0
- package/dist/{workflow-builder-CjlLoQvo.js → workflow-builder-D-YMkDHC.js} +3 -3
- package/dist/{workflow-builder-CjlLoQvo.js.map → workflow-builder-D-YMkDHC.js.map} +1 -1
- package/dist/{workflow-builder-C9-8ZOWF.cjs → workflow-builder-DtXcLQoG.cjs} +3 -3
- package/dist/{workflow-builder-C9-8ZOWF.cjs.map → workflow-builder-DtXcLQoG.cjs.map} +1 -1
- package/dist/{workflows-bb-otd2o.js → workflows-CF7e2ST9.js} +2 -2
- package/dist/{workflows-bb-otd2o.js.map → workflows-CF7e2ST9.js.map} +1 -1
- package/dist/{workflows-DjqeJcdJ.cjs → workflows-DN2axrmq.cjs} +2 -2
- package/dist/{workflows-DjqeJcdJ.cjs.map → workflows-DN2axrmq.cjs.map} +1 -1
- package/dist/{workspace-B6kzp-bo.js → workspace-BVHXoKmP.js} +2 -2
- package/dist/workspace-BVHXoKmP.js.map +1 -0
- package/dist/{workspace-COKR1SxH.cjs → workspace-d25MZ9dj.cjs} +2 -2
- package/dist/workspace-d25MZ9dj.cjs.map +1 -0
- package/package.json +10 -10
- package/dist/agents-BHLTMBff.js.map +0 -1
- package/dist/agents-BOWEUKyV.cjs.map +0 -1
- package/dist/agents-DRQ3ScbX.js.map +0 -1
- package/dist/agents-T-OIM9IK.cjs.map +0 -1
- package/dist/datasets-BUC5T-fd.cjs.map +0 -1
- package/dist/datasets-CCWuznUu.js.map +0 -1
- package/dist/dist-BM9J-PTK.js +0 -1
- package/dist/observability-new-endpoints-fjoZzEtk.js.map +0 -1
- package/dist/observability-new-endpoints-tG3-odLa.cjs.map +0 -1
- package/dist/routes-BC20mdNN.js.map +0 -1
- package/dist/routes-DGLJyqjD.cjs.map +0 -1
- package/dist/system-BvpFMIJB.cjs.map +0 -1
- package/dist/system-CpzPxRRq.js.map +0 -1
- package/dist/tools-CmFSfDMn.js.map +0 -1
- package/dist/tools-SPJtxG9N.cjs.map +0 -1
- package/dist/workspace-B6kzp-bo.js.map +0 -1
- package/dist/workspace-COKR1SxH.cjs.map +0 -1
|
@@ -391,6 +391,134 @@ export declare const AGGREGATE_TRACES: Omit<import("@mastra/core/server").ApiRou
|
|
|
391
391
|
} & {
|
|
392
392
|
readonly _mastraSchemaRoute: true;
|
|
393
393
|
};
|
|
394
|
+
export declare const AGGREGATE_SPANS: Omit<import("@mastra/core/server").ApiRoute, "createHandler" | "handler" | "method" | "openapi" | "path"> & {
|
|
395
|
+
method: string;
|
|
396
|
+
path: `/${string}`;
|
|
397
|
+
responseType: "json";
|
|
398
|
+
streamFormat?: 'sse' | 'stream';
|
|
399
|
+
sseFlushOnConnect?: boolean;
|
|
400
|
+
handler(params: {
|
|
401
|
+
timeRange: {
|
|
402
|
+
from: string;
|
|
403
|
+
to: string;
|
|
404
|
+
};
|
|
405
|
+
where?: coreStorage.TraceQueryScalarPredicate | undefined;
|
|
406
|
+
groupBy: string[];
|
|
407
|
+
interval?: "15m" | "1d" | "1h" | "1m" | "5m" | undefined;
|
|
408
|
+
measures: ("cost.avg" | "cost.sum" | "count" | "duration.avg" | "duration.max" | "duration.min" | "duration.p50" | "duration.p90" | "duration.p95" | "duration.p99" | "errorCount" | "errorRate" | "tokens.cached.avg" | "tokens.cached.sum" | "tokens.input.avg" | "tokens.input.sum" | "tokens.output.avg" | "tokens.output.sum" | "tokens.reasoning.avg" | "tokens.reasoning.sum" | "tokens.total.avg" | "tokens.total.sum" | `countDistinct.${string}`)[];
|
|
409
|
+
having?: coreStorage.TraceQueryScalarPredicate | undefined;
|
|
410
|
+
orderBy: {
|
|
411
|
+
field: string;
|
|
412
|
+
direction: "asc" | "desc";
|
|
413
|
+
};
|
|
414
|
+
limit: number;
|
|
415
|
+
} & ServerContext): Promise<{
|
|
416
|
+
rows: {
|
|
417
|
+
dimensions?: Record<string, string | null> | undefined;
|
|
418
|
+
bucket?: string | undefined;
|
|
419
|
+
measures: Record<"cost.avg" | "cost.sum" | "count" | "duration.avg" | "duration.max" | "duration.min" | "duration.p50" | "duration.p90" | "duration.p95" | "duration.p99" | "errorCount" | "errorRate" | "tokens.cached.avg" | "tokens.cached.sum" | "tokens.input.avg" | "tokens.input.sum" | "tokens.output.avg" | "tokens.output.sum" | "tokens.reasoning.avg" | "tokens.reasoning.sum" | "tokens.total.avg" | "tokens.total.sum" | `countDistinct.${string}`, number | null>;
|
|
420
|
+
cost?: {
|
|
421
|
+
coverage: number | null;
|
|
422
|
+
unit: string | null;
|
|
423
|
+
} | undefined;
|
|
424
|
+
}[];
|
|
425
|
+
truncated: boolean;
|
|
426
|
+
}>;
|
|
427
|
+
pathParamSchema?: z.ZodSchema;
|
|
428
|
+
queryParamSchema?: z.ZodSchema;
|
|
429
|
+
bodySchema?: z.ZodSchema;
|
|
430
|
+
responseSchema?: z.ZodSchema;
|
|
431
|
+
openapi?: import("../server-adapter/openapi-utils").OpenAPIRoute;
|
|
432
|
+
maxBodySize?: number;
|
|
433
|
+
deprecated?: boolean;
|
|
434
|
+
requiresPermission?: import("@mastra/core/auth").MastraFGAPermissionInput | import("@mastra/core/auth").MastraFGAPermissionInput[];
|
|
435
|
+
fga?: import("@mastra/core/auth").FGARouteConfig;
|
|
436
|
+
onValidationError?: ValidationErrorHook;
|
|
437
|
+
readonly __schemas?: import("../server-adapter").RouteSchemas<undefined, undefined, z.ZodPreprocess<z.ZodObject<{
|
|
438
|
+
timeRange: z.ZodObject<{
|
|
439
|
+
from: z.ZodString;
|
|
440
|
+
to: z.ZodString;
|
|
441
|
+
}, z.core.$strict>;
|
|
442
|
+
where: z.ZodOptional<z.ZodType<coreStorage.TraceQueryScalarPredicate, unknown, z.core.$ZodTypeInternals<coreStorage.TraceQueryScalarPredicate, unknown>>>;
|
|
443
|
+
groupBy: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
444
|
+
interval: z.ZodOptional<z.ZodEnum<{
|
|
445
|
+
"15m": "15m";
|
|
446
|
+
"1d": "1d";
|
|
447
|
+
"1h": "1h";
|
|
448
|
+
"1m": "1m";
|
|
449
|
+
"5m": "5m";
|
|
450
|
+
}>>;
|
|
451
|
+
measures: z.ZodArray<z.ZodUnion<readonly [z.ZodEnum<{
|
|
452
|
+
"cost.avg": "cost.avg";
|
|
453
|
+
"cost.sum": "cost.sum";
|
|
454
|
+
count: "count";
|
|
455
|
+
"duration.avg": "duration.avg";
|
|
456
|
+
"duration.max": "duration.max";
|
|
457
|
+
"duration.min": "duration.min";
|
|
458
|
+
"duration.p50": "duration.p50";
|
|
459
|
+
"duration.p90": "duration.p90";
|
|
460
|
+
"duration.p95": "duration.p95";
|
|
461
|
+
"duration.p99": "duration.p99";
|
|
462
|
+
errorCount: "errorCount";
|
|
463
|
+
errorRate: "errorRate";
|
|
464
|
+
"tokens.cached.avg": "tokens.cached.avg";
|
|
465
|
+
"tokens.cached.sum": "tokens.cached.sum";
|
|
466
|
+
"tokens.input.avg": "tokens.input.avg";
|
|
467
|
+
"tokens.input.sum": "tokens.input.sum";
|
|
468
|
+
"tokens.output.avg": "tokens.output.avg";
|
|
469
|
+
"tokens.output.sum": "tokens.output.sum";
|
|
470
|
+
"tokens.reasoning.avg": "tokens.reasoning.avg";
|
|
471
|
+
"tokens.reasoning.sum": "tokens.reasoning.sum";
|
|
472
|
+
"tokens.total.avg": "tokens.total.avg";
|
|
473
|
+
"tokens.total.sum": "tokens.total.sum";
|
|
474
|
+
}>, z.ZodTemplateLiteral<`countDistinct.${string}`>]>>;
|
|
475
|
+
having: z.ZodOptional<z.ZodType<coreStorage.TraceQueryScalarPredicate, unknown, z.core.$ZodTypeInternals<coreStorage.TraceQueryScalarPredicate, unknown>>>;
|
|
476
|
+
orderBy: z.ZodDefault<z.ZodObject<{
|
|
477
|
+
field: z.ZodString;
|
|
478
|
+
direction: z.ZodEnum<{
|
|
479
|
+
asc: "asc";
|
|
480
|
+
desc: "desc";
|
|
481
|
+
}>;
|
|
482
|
+
}, z.core.$strict>>;
|
|
483
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
484
|
+
}, z.core.$strict>, unknown>, z.ZodObject<{
|
|
485
|
+
rows: z.ZodArray<z.ZodObject<{
|
|
486
|
+
dimensions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodString>>>;
|
|
487
|
+
bucket: z.ZodOptional<z.ZodString>;
|
|
488
|
+
measures: z.ZodRecord<z.ZodUnion<readonly [z.ZodEnum<{
|
|
489
|
+
"cost.avg": "cost.avg";
|
|
490
|
+
"cost.sum": "cost.sum";
|
|
491
|
+
count: "count";
|
|
492
|
+
"duration.avg": "duration.avg";
|
|
493
|
+
"duration.max": "duration.max";
|
|
494
|
+
"duration.min": "duration.min";
|
|
495
|
+
"duration.p50": "duration.p50";
|
|
496
|
+
"duration.p90": "duration.p90";
|
|
497
|
+
"duration.p95": "duration.p95";
|
|
498
|
+
"duration.p99": "duration.p99";
|
|
499
|
+
errorCount: "errorCount";
|
|
500
|
+
errorRate: "errorRate";
|
|
501
|
+
"tokens.cached.avg": "tokens.cached.avg";
|
|
502
|
+
"tokens.cached.sum": "tokens.cached.sum";
|
|
503
|
+
"tokens.input.avg": "tokens.input.avg";
|
|
504
|
+
"tokens.input.sum": "tokens.input.sum";
|
|
505
|
+
"tokens.output.avg": "tokens.output.avg";
|
|
506
|
+
"tokens.output.sum": "tokens.output.sum";
|
|
507
|
+
"tokens.reasoning.avg": "tokens.reasoning.avg";
|
|
508
|
+
"tokens.reasoning.sum": "tokens.reasoning.sum";
|
|
509
|
+
"tokens.total.avg": "tokens.total.avg";
|
|
510
|
+
"tokens.total.sum": "tokens.total.sum";
|
|
511
|
+
}>, z.ZodTemplateLiteral<`countDistinct.${string}`>]>, z.ZodNullable<z.ZodNumber>>;
|
|
512
|
+
cost: z.ZodOptional<z.ZodObject<{
|
|
513
|
+
coverage: z.ZodNullable<z.ZodNumber>;
|
|
514
|
+
unit: z.ZodNullable<z.ZodString>;
|
|
515
|
+
}, z.core.$strict>>;
|
|
516
|
+
}, z.core.$strict>>;
|
|
517
|
+
truncated: z.ZodBoolean;
|
|
518
|
+
}, z.core.$strict>> | undefined;
|
|
519
|
+
} & {
|
|
520
|
+
readonly _mastraSchemaRoute: true;
|
|
521
|
+
};
|
|
394
522
|
export declare const QUERY_SPANS: Omit<import("@mastra/core/server").ApiRoute, "createHandler" | "handler" | "method" | "openapi" | "path"> & {
|
|
395
523
|
method: string;
|
|
396
524
|
path: `/${string}`;
|
|
@@ -3827,6 +3955,7 @@ export declare const GET_CAPABILITIES: Omit<import("@mastra/core/server").ApiRou
|
|
|
3827
3955
|
traceQueryDiscovery: boolean;
|
|
3828
3956
|
traceQueryTenantScope: boolean;
|
|
3829
3957
|
traceAggregate: boolean;
|
|
3958
|
+
spanAggregate: boolean;
|
|
3830
3959
|
threadQuery: boolean;
|
|
3831
3960
|
threadQueryRows: boolean;
|
|
3832
3961
|
spanQuery: boolean;
|
|
@@ -3869,6 +3998,7 @@ export declare const GET_CAPABILITIES: Omit<import("@mastra/core/server").ApiRou
|
|
|
3869
3998
|
traceQueryDiscovery: z.ZodBoolean;
|
|
3870
3999
|
traceQueryTenantScope: z.ZodBoolean;
|
|
3871
4000
|
traceAggregate: z.ZodBoolean;
|
|
4001
|
+
spanAggregate: z.ZodBoolean;
|
|
3872
4002
|
threadQuery: z.ZodBoolean;
|
|
3873
4003
|
threadQueryRows: z.ZodDefault<z.ZodBoolean>;
|
|
3874
4004
|
spanQuery: z.ZodBoolean;
|
|
@@ -7374,6 +7504,7 @@ export declare const NEW_ROUTES: {
|
|
|
7374
7504
|
traceQueryDiscovery: boolean;
|
|
7375
7505
|
traceQueryTenantScope: boolean;
|
|
7376
7506
|
traceAggregate: boolean;
|
|
7507
|
+
spanAggregate: boolean;
|
|
7377
7508
|
threadQuery: boolean;
|
|
7378
7509
|
threadQueryRows: boolean;
|
|
7379
7510
|
spanQuery: boolean;
|
|
@@ -7416,6 +7547,7 @@ export declare const NEW_ROUTES: {
|
|
|
7416
7547
|
traceQueryDiscovery: z.ZodBoolean;
|
|
7417
7548
|
traceQueryTenantScope: z.ZodBoolean;
|
|
7418
7549
|
traceAggregate: z.ZodBoolean;
|
|
7550
|
+
spanAggregate: z.ZodBoolean;
|
|
7419
7551
|
threadQuery: z.ZodBoolean;
|
|
7420
7552
|
threadQueryRows: z.ZodDefault<z.ZodBoolean>;
|
|
7421
7553
|
spanQuery: z.ZodBoolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability-new-endpoints.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/observability-new-endpoints.ts"],"names":[],"mappings":"AAqEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,WAAW,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAY3B,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAsB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"observability-new-endpoints.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/observability-new-endpoints.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCtB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as
|
|
1
|
+
export { t as AGGREGATE_SPANS, n as AGGREGATE_TRACES, r as CREATE_FEEDBACK, i as CREATE_SCORE, a as DELETE_FEEDBACK, o as DELETE_SCORES, s as GET_CAPABILITIES, c as GET_ENTITY_NAMES, l as GET_ENTITY_TYPES, u as GET_ENVIRONMENTS, d as GET_FEEDBACK_AGGREGATE, f as GET_FEEDBACK_BREAKDOWN, p as GET_FEEDBACK_PERCENTILES, m as GET_FEEDBACK_TIME_SERIES, h as GET_METRIC_AGGREGATE, g as GET_METRIC_BREAKDOWN, _ as GET_METRIC_LABEL_KEYS, v as GET_METRIC_LABEL_VALUES, y as GET_METRIC_NAMES, b as GET_METRIC_PERCENTILES, x as GET_METRIC_TIME_SERIES, S as GET_SCORE, C as GET_SCORE_AGGREGATE, w as GET_SCORE_BREAKDOWN, T as GET_SCORE_PERCENTILES, E as GET_SCORE_TIME_SERIES, D as GET_SERVICE_NAMES, O as GET_TAGS, k as GET_TRACE_QUERY_FIELDS, A as GET_TRACE_QUERY_VALUES, j as LIST_FEEDBACK, M as LIST_LOGS, N as LIST_METRICS, P as LIST_SCORES, F as NEW_ROUTES, I as QUERY_SPANS, L as QUERY_THREADS, R as QUERY_TRACES, z as UPDATE_FEEDBACK_REVIEW_STATUS } from "../../observability-new-endpoints-3DlTYf34.js";
|
|
@@ -13,6 +13,7 @@ const OBSERVABILITY_DELTA_POLLING_UPGRADE_MESSAGE = "Delta polling requires a ne
|
|
|
13
13
|
const OBSERVABILITY_TRACE_QUERY_STORAGE_FEATURE = "trace-query";
|
|
14
14
|
const OBSERVABILITY_TRACE_AGGREGATE_STORAGE_FEATURE = "trace-aggregate";
|
|
15
15
|
const OBSERVABILITY_SPAN_QUERY_STORAGE_FEATURE = "span-query";
|
|
16
|
+
const OBSERVABILITY_SPAN_AGGREGATE_STORAGE_FEATURE = "span-aggregate";
|
|
16
17
|
const SPAN_QUERY_CONTEXT_FIELDS = /* @__PURE__ */ new Set([
|
|
17
18
|
"traceId",
|
|
18
19
|
"spanId",
|
|
@@ -61,6 +62,9 @@ function supportsTraceQueryDiscoveryCore() {
|
|
|
61
62
|
function supportsTraceAggregateCore() {
|
|
62
63
|
return _mastra_core_storage.traceAggregateRequestSchema !== void 0 && _mastra_core_storage.traceAggregateResponseSchema !== void 0 && typeof _mastra_core_storage.planTraceAggregate === "function";
|
|
63
64
|
}
|
|
65
|
+
function supportsSpanAggregateCore() {
|
|
66
|
+
return _mastra_core_storage.spanAggregateRequestSchema !== void 0 && _mastra_core_storage.spanAggregateResponseSchema !== void 0 && typeof _mastra_core_storage.planSpanAggregate === "function";
|
|
67
|
+
}
|
|
64
68
|
function supportsSpanQueryCore() {
|
|
65
69
|
return _mastra_core_storage.spanQueryRequestSchema !== void 0 && _mastra_core_storage.spanQueryResponseSchema !== void 0 && typeof _mastra_core_storage.planSpanQuery === "function";
|
|
66
70
|
}
|
|
@@ -105,6 +109,10 @@ function assertObservabilityTraceAggregateSupported(observabilityStore) {
|
|
|
105
109
|
if (supportsObservabilityTraceAggregate(observabilityStore)) return;
|
|
106
110
|
throw new require_http_exception.HTTPException(501, { message: "Trace aggregation is not supported by the configured observability store" });
|
|
107
111
|
}
|
|
112
|
+
function assertObservabilitySpanAggregateSupported(observabilityStore) {
|
|
113
|
+
if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_SPAN_AGGREGATE_STORAGE_FEATURE)) return;
|
|
114
|
+
throw new require_http_exception.HTTPException(501, { message: "Span aggregation is not supported by the configured observability store" });
|
|
115
|
+
}
|
|
108
116
|
function assertObservabilitySpanQuerySupported(observabilityStore) {
|
|
109
117
|
if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_SPAN_QUERY_STORAGE_FEATURE)) return;
|
|
110
118
|
throw new require_http_exception.HTTPException(501, { message: "Span queries are not supported by the configured observability store" });
|
|
@@ -268,6 +276,7 @@ const NO_OBSERVABILITY_STORAGE_CAPABILITIES = {
|
|
|
268
276
|
threadQuery: false,
|
|
269
277
|
threadQueryRows: false,
|
|
270
278
|
spanQuery: false,
|
|
279
|
+
spanAggregate: false,
|
|
271
280
|
spanQueryContextFields: false,
|
|
272
281
|
feedback: false
|
|
273
282
|
};
|
|
@@ -333,6 +342,7 @@ function getObservabilityStorageCapabilities(observabilityStore) {
|
|
|
333
342
|
threadQueryRows: threadQuery && typeof _mastra_core_storage.planThreadRowsQuery === "function" && declares("thread-query-rows"),
|
|
334
343
|
spanQuery,
|
|
335
344
|
spanQueryContextFields: spanQuery && declares("span-query-context-fields"),
|
|
345
|
+
spanAggregate: newApiCore && supportsSpanAggregateCore() && declares(OBSERVABILITY_SPAN_AGGREGATE_STORAGE_FEATURE),
|
|
336
346
|
feedback: newApiCore && declares(OBSERVABILITY_FEEDBACK_STORAGE_FEATURE)
|
|
337
347
|
};
|
|
338
348
|
}
|
|
@@ -395,6 +405,13 @@ const NEW_ROUTE_DEFS = {
|
|
|
395
405
|
description: "Returns completed spans matching a span predicate, one row per span, with cursor pagination",
|
|
396
406
|
requiresPermission: "observability:read"
|
|
397
407
|
},
|
|
408
|
+
AGGREGATE_SPANS: {
|
|
409
|
+
method: "POST",
|
|
410
|
+
path: "/observability/spans/aggregate",
|
|
411
|
+
summary: "Aggregate spans",
|
|
412
|
+
description: "Returns grouped and optionally time-bucketed measures (counts, durations, error rates, tokens, cost) over completed spans matching a span predicate",
|
|
413
|
+
requiresPermission: "observability:read"
|
|
414
|
+
},
|
|
398
415
|
GET_TRACE_QUERY_FIELDS: {
|
|
399
416
|
method: "POST",
|
|
400
417
|
path: "/observability/traces/query/fields",
|
|
@@ -685,6 +702,7 @@ exports.OBSERVABILITY_LIST_ENDPOINTS = OBSERVABILITY_LIST_ENDPOINTS;
|
|
|
685
702
|
exports.OBSERVABILITY_TRACE_QUERY_TENANT_SCOPE_CORE_FEATURE = OBSERVABILITY_TRACE_QUERY_TENANT_SCOPE_CORE_FEATURE;
|
|
686
703
|
exports.OBSERVABILITY_TRACE_QUERY_TENANT_SCOPE_UPGRADE_MESSAGE = OBSERVABILITY_TRACE_QUERY_TENANT_SCOPE_UPGRADE_MESSAGE;
|
|
687
704
|
exports.assertObservabilityDeltaSupported = assertObservabilityDeltaSupported;
|
|
705
|
+
exports.assertObservabilitySpanAggregateSupported = assertObservabilitySpanAggregateSupported;
|
|
688
706
|
exports.assertObservabilitySpanQueryFieldsSupported = assertObservabilitySpanQueryFieldsSupported;
|
|
689
707
|
exports.assertObservabilitySpanQuerySupported = assertObservabilitySpanQuerySupported;
|
|
690
708
|
exports.assertObservabilityThreadQuerySupported = assertObservabilityThreadQuerySupported;
|
|
@@ -710,6 +728,7 @@ exports.supportsObservabilityTraceQueryRootDuration = supportsObservabilityTrace
|
|
|
710
728
|
exports.supportsObservabilityTraceQueryRootSpanField = supportsObservabilityTraceQueryRootSpanField;
|
|
711
729
|
exports.supportsObservabilityTraceQueryTimeToFirstChunk = supportsObservabilityTraceQueryTimeToFirstChunk;
|
|
712
730
|
exports.supportsObservabilityTraceQueryTimeToFirstChunkSort = supportsObservabilityTraceQueryTimeToFirstChunkSort;
|
|
731
|
+
exports.supportsSpanAggregateCore = supportsSpanAggregateCore;
|
|
713
732
|
exports.supportsSpanQueryCore = supportsSpanQueryCore;
|
|
714
733
|
exports.supportsTraceAggregateCore = supportsTraceAggregateCore;
|
|
715
734
|
exports.supportsTraceQueryDiscoveryCore = supportsTraceQueryDiscoveryCore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability-shared.cjs","names":["coreStorage","candidate","HTTPException","coreFeatures","z","paginationArgsSchema","wrapSchemaForQueryParams","listModeSchema","deltaCursorSchema","deltaLimitSchema"],"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 TraceQueryIssue,\n TrustedTraceQueryScalarPredicate,\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_AGGREGATE_STORAGE_FEATURE = 'trace-aggregate';\nconst OBSERVABILITY_SPAN_QUERY_STORAGE_FEATURE = 'span-query';\nconst SPAN_QUERY_CONTEXT_FIELDS = new Set([\n 'traceId',\n 'spanId',\n 'parentSpanId',\n 'threadId',\n 'resourceId',\n 'requestId',\n 'serviceName',\n 'experimentId',\n 'environment',\n 'executionSource',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n]);\nconst OBSERVABILITY_TRACE_QUERY_ROOT_DURATION_STORAGE_FEATURE = 'trace-query-root-duration';\nconst OBSERVABILITY_TRACE_QUERY_CONTEXT_IDS_STORAGE_FEATURE = 'trace-query-context-ids';\nconst TRACE_QUERY_CONTEXT_ID_FIELDS = new Set(['runId', 'sessionId', 'userId', 'organizationId']);\nconst OBSERVABILITY_TRACE_QUERY_TIME_TO_FIRST_CHUNK_STORAGE_FEATURE = 'trace-query-time-to-first-chunk';\nconst TRACE_QUERY_TIME_TO_FIRST_CHUNK_FIELDS = new Set(['timeToFirstChunkMs']);\nconst OBSERVABILITY_TRACE_QUERY_ROOT_SPAN_FIELDS_STORAGE_FEATURE = 'trace-query-root-span-fields';\nconst OBSERVABILITY_TRACE_QUERY_ROOT_ENTITY_ID_STORAGE_FEATURE = 'trace-query-root-entity-id';\n// Trace-scope fields read from the root span, keyed by the storage feature that added their SQL.\nconst TRACE_QUERY_ROOT_SPAN_FIELD_FEATURES = new Map([\n ['name', OBSERVABILITY_TRACE_QUERY_ROOT_SPAN_FIELDS_STORAGE_FEATURE],\n ['spanType', OBSERVABILITY_TRACE_QUERY_ROOT_SPAN_FIELDS_STORAGE_FEATURE],\n ['entityId', OBSERVABILITY_TRACE_QUERY_ROOT_ENTITY_ID_STORAGE_FEATURE],\n]);\nconst OBSERVABILITY_TRACE_QUERY_TIME_TO_FIRST_CHUNK_SORT_STORAGE_FEATURE = 'trace-query-time-to-first-chunk-sort';\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 function supportsTraceAggregateCore() {\n return (\n coreStorage.traceAggregateRequestSchema !== undefined &&\n coreStorage.traceAggregateResponseSchema !== undefined &&\n typeof coreStorage.planTraceAggregate === 'function'\n );\n}\n\nexport function supportsSpanQueryCore() {\n return (\n coreStorage.spanQueryRequestSchema !== undefined &&\n coreStorage.spanQueryResponseSchema !== undefined &&\n typeof coreStorage.planSpanQuery === '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\nexport function supportsObservabilityTraceAggregate(observabilityStore: ObservabilityStorage) {\n return getFeatures(observabilityStore)?.includes(OBSERVABILITY_TRACE_AGGREGATE_STORAGE_FEATURE) === true;\n}\n\nexport function assertObservabilityTraceAggregateSupported(observabilityStore: ObservabilityStorage) {\n if (supportsObservabilityTraceAggregate(observabilityStore)) return;\n\n throw new HTTPException(501, {\n message: 'Trace aggregation is not supported by the configured observability store',\n });\n}\n\nexport function assertObservabilitySpanQuerySupported(observabilityStore: ObservabilityStorage) {\n if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_SPAN_QUERY_STORAGE_FEATURE)) return;\n\n throw new HTTPException(501, {\n message: 'Span queries are not supported by the configured observability store',\n });\n}\n\nexport function assertObservabilitySpanQueryFieldsSupported(\n observabilityStore: ObservabilityStorage,\n predicate: TrustedTraceQueryScalarPredicate | undefined,\n) {\n if (!predicate || getFeatures(observabilityStore)?.includes('span-query-context-fields')) return;\n if (predicate.type === 'boolean') {\n for (const arg of predicate.args) assertObservabilitySpanQueryFieldsSupported(observabilityStore, arg);\n } else if (predicate.type === 'not') {\n assertObservabilitySpanQueryFieldsSupported(observabilityStore, predicate.arg);\n } else if (SPAN_QUERY_CONTEXT_FIELDS.has(predicate.field)) {\n throw new coreStorage.TraceQueryValidationError([\n {\n code: 'field_not_allowed',\n path: ['where'],\n message: `Filtering by ${predicate.field} requires an updated storage adapter with span query context-field support.`,\n },\n ]);\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\n/** Whether any scalar predicate, at any depth and inside any relation, names one of `fields`. */\nfunction usesField(\n predicate: TrustedTraceQueryPredicate | TrustedThreadPredicate | undefined,\n fields: ReadonlySet<string>,\n): boolean {\n if (!predicate) return false;\n if (predicate.type === 'boolean') return predicate.args.some(arg => usesField(arg, fields));\n if (predicate.type === 'not') return usesField(predicate.arg, fields);\n if (predicate.type === 'relation') return usesField(predicate.predicate, fields);\n return fields.has(predicate.field);\n}\n\nexport function supportsObservabilityTraceQueryContextIds(observabilityStore: ObservabilityStorage) {\n return getFeatures(observabilityStore)?.includes(OBSERVABILITY_TRACE_QUERY_CONTEXT_IDS_STORAGE_FEATURE) === true;\n}\n\nexport function isTraceQueryContextIdField(path: string): boolean {\n return TRACE_QUERY_CONTEXT_ID_FIELDS.has(path);\n}\n\nexport function assertObservabilityTraceQueryContextIdsSupported(\n observabilityStore: ObservabilityStorage,\n predicate: TrustedTraceQueryPredicate | TrustedThreadPredicate | undefined,\n) {\n if (\n !usesField(predicate, TRACE_QUERY_CONTEXT_ID_FIELDS) ||\n supportsObservabilityTraceQueryContextIds(observabilityStore)\n ) {\n return;\n }\n\n throw new HTTPException(501, {\n message: 'Context identifier predicates are not supported by the configured observability store',\n });\n}\n\nexport function supportsObservabilityTraceQueryTimeToFirstChunk(observabilityStore: ObservabilityStorage) {\n return (\n getFeatures(observabilityStore)?.includes(OBSERVABILITY_TRACE_QUERY_TIME_TO_FIRST_CHUNK_STORAGE_FEATURE) === true\n );\n}\n\n/** Covers trace, thread and span query predicates, including `spans` and `traces` relations. */\nexport function assertObservabilityTraceQueryTimeToFirstChunkSupported(\n observabilityStore: ObservabilityStorage,\n predicate: TrustedTraceQueryPredicate | TrustedThreadPredicate | undefined,\n) {\n if (\n !usesField(predicate, TRACE_QUERY_TIME_TO_FIRST_CHUNK_FIELDS) ||\n supportsObservabilityTraceQueryTimeToFirstChunk(observabilityStore)\n ) {\n return;\n }\n\n throw new HTTPException(501, {\n message: 'Time to first chunk predicates are not supported by the configured observability store',\n });\n}\n\nfunction rootSpanFieldIssues(\n observabilityStore: ObservabilityStorage,\n predicate: TrustedTraceQueryPredicate | TrustedThreadPredicate | undefined,\n): TraceQueryIssue[] {\n if (!predicate) return [];\n if (predicate.type === 'boolean') return predicate.args.flatMap(arg => rootSpanFieldIssues(observabilityStore, arg));\n if (predicate.type === 'not') return rootSpanFieldIssues(observabilityStore, predicate.arg);\n // Only trace-scope root span fields read the root; inside `spans.some` they are long-supported span fields.\n if (predicate.type === 'relation') {\n return predicate.collection === 'traces' ? rootSpanFieldIssues(observabilityStore, predicate.predicate) : [];\n }\n return supportsObservabilityTraceQueryRootSpanField(observabilityStore, predicate.field)\n ? []\n : [rootSpanFieldIssue(['where'], predicate.field)];\n}\n\nfunction rootSpanFieldIssue(path: Array<string | number>, field: string): TraceQueryIssue {\n return {\n code: 'field_not_allowed',\n path,\n message: `Root span ${field} requires an updated storage adapter with trace-query root span field support.`,\n };\n}\n\n/**\n * Whether the store can serve `path` at trace scope. Fields that don't read the root span are\n * always supported here; other gates cover them.\n */\nexport function supportsObservabilityTraceQueryRootSpanField(observabilityStore: ObservabilityStorage, path: string) {\n const feature = TRACE_QUERY_ROOT_SPAN_FIELD_FEATURES.get(path);\n return feature === undefined || getFeatures(observabilityStore)?.includes(feature) === true;\n}\n\n/**\n * Stores that predate a trace-scope root span field have no SQL for it and would fail with a\n * 500, so requests that use it are rejected as invalid instead.\n */\nexport function assertObservabilityTraceQueryRootSpanFieldsSupported(\n observabilityStore: ObservabilityStorage,\n plan: {\n where?: TrustedTraceQueryPredicate | TrustedThreadPredicate;\n dimensions?: readonly string[];\n measures?: ReadonlyArray<{ type: string; field?: string }>;\n },\n) {\n const supported = (field: string) => supportsObservabilityTraceQueryRootSpanField(observabilityStore, field);\n const issues = [\n ...rootSpanFieldIssues(observabilityStore, plan.where),\n ...(plan.dimensions ?? []).flatMap((dimension, index) =>\n supported(dimension) ? [] : [rootSpanFieldIssue(['groupBy', index], dimension)],\n ),\n ...(plan.measures ?? []).flatMap((measure, index) =>\n measure.type === 'countDistinct' && measure.field !== undefined && !supported(measure.field)\n ? [rootSpanFieldIssue(['measures', index], measure.field)]\n : [],\n ),\n ];\n if (issues.length > 0) throw new coreStorage.TraceQueryValidationError(issues);\n}\n\nexport function assertObservabilityTraceQueryRootSpanValuesSupported(\n observabilityStore: ObservabilityStorage,\n plan: { predicateScope: string; path: string },\n) {\n if (plan.predicateScope !== 'trace') return;\n if (supportsObservabilityTraceQueryRootSpanField(observabilityStore, plan.path)) return;\n throw new coreStorage.TraceQueryValidationError([rootSpanFieldIssue(['path'], plan.path)]);\n}\n\nexport function supportsObservabilityTraceQueryTimeToFirstChunkSort(observabilityStore: ObservabilityStorage) {\n return (\n getFeatures(observabilityStore)?.includes(OBSERVABILITY_TRACE_QUERY_TIME_TO_FIRST_CHUNK_SORT_STORAGE_FEATURE) ===\n true\n );\n}\n\n/** Covers the sort of trace and span queries. */\nexport function assertObservabilityTraceQueryTimeToFirstChunkSortSupported(\n observabilityStore: ObservabilityStorage,\n orderBy: { field: string },\n) {\n if (\n !TRACE_QUERY_TIME_TO_FIRST_CHUNK_FIELDS.has(orderBy.field) ||\n supportsObservabilityTraceQueryTimeToFirstChunkSort(observabilityStore)\n ) {\n return;\n }\n\n throw new HTTPException(501, {\n message: 'Sorting by time to first chunk is 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 traceQueryContextIds: boolean;\n traceQueryTimeToFirstChunk: boolean;\n traceQueryRootSpanFields: boolean;\n traceQueryRootEntityId: boolean;\n traceQueryTimeToFirstChunkSort: boolean;\n traceQueryDiscovery: boolean;\n traceQueryTenantScope: boolean;\n traceAggregate: boolean;\n threadQuery: boolean;\n threadQueryRows: boolean;\n spanQuery: boolean;\n spanQueryContextFields: boolean;\n /** Days of traces the store keeps. Omitted when the store does not report a limit. */\n traceRetentionDays?: number;\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 traceQueryContextIds: false,\n traceQueryTimeToFirstChunk: false,\n traceQueryRootSpanFields: false,\n traceQueryRootEntityId: false,\n traceQueryTimeToFirstChunkSort: false,\n traceQueryDiscovery: false,\n traceQueryTenantScope: false,\n traceAggregate: false,\n threadQuery: false,\n threadQueryRows: false,\n spanQuery: false,\n spanQueryContextFields: 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 const spanQuery = newApiCore && supportsSpanQueryCore() && declares(OBSERVABILITY_SPAN_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 traceQueryContextIds:\n (traceQuery || threadQuery) && declares(OBSERVABILITY_TRACE_QUERY_CONTEXT_IDS_STORAGE_FEATURE),\n traceQueryTimeToFirstChunk:\n (traceQuery || threadQuery || spanQuery) &&\n declares(OBSERVABILITY_TRACE_QUERY_TIME_TO_FIRST_CHUNK_STORAGE_FEATURE),\n traceQueryRootSpanFields:\n (traceQuery || threadQuery) && declares(OBSERVABILITY_TRACE_QUERY_ROOT_SPAN_FIELDS_STORAGE_FEATURE),\n traceQueryRootEntityId:\n (traceQuery || threadQuery) && declares(OBSERVABILITY_TRACE_QUERY_ROOT_ENTITY_ID_STORAGE_FEATURE),\n traceQueryTimeToFirstChunkSort:\n (traceQuery || spanQuery) && declares(OBSERVABILITY_TRACE_QUERY_TIME_TO_FIRST_CHUNK_SORT_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 traceAggregate:\n newApiCore && supportsTraceAggregateCore() && declares(OBSERVABILITY_TRACE_AGGREGATE_STORAGE_FEATURE),\n threadQuery,\n threadQueryRows:\n threadQuery && typeof coreStorage.planThreadRowsQuery === 'function' && declares('thread-query-rows'),\n spanQuery,\n spanQueryContextFields: spanQuery && declares('span-query-context-fields'),\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 AGGREGATE_TRACES: {\n method: 'POST',\n path: '/observability/traces/aggregate',\n summary: 'Aggregate traces',\n description:\n 'Returns grouped and optionally time-bucketed measures (counts, durations, error rates) over completed logical traces matching an advanced trace predicate',\n requiresPermission: 'observability:read',\n },\n\n QUERY_THREADS: {\n method: 'POST',\n path: '/observability/threads/query',\n summary: 'Query threads',\n description:\n 'Returns full-history thread rows with activity timestamps, first/last traces, previews and context fields',\n requiresPermission: 'observability:read',\n },\n\n QUERY_SPANS: {\n method: 'POST',\n path: '/observability/spans/query',\n summary: 'Query spans',\n description: 'Returns completed spans matching a span predicate, one row per span, with cursor pagination',\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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"}
|
|
1
|
+
{"version":3,"file":"observability-shared.cjs","names":["coreStorage","candidate","HTTPException","coreFeatures","z","paginationArgsSchema","wrapSchemaForQueryParams","listModeSchema","deltaCursorSchema","deltaLimitSchema"],"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 TraceQueryIssue,\n TrustedTraceQueryScalarPredicate,\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_AGGREGATE_STORAGE_FEATURE = 'trace-aggregate';\nconst OBSERVABILITY_SPAN_QUERY_STORAGE_FEATURE = 'span-query';\nconst OBSERVABILITY_SPAN_AGGREGATE_STORAGE_FEATURE = 'span-aggregate';\nconst SPAN_QUERY_CONTEXT_FIELDS = new Set([\n 'traceId',\n 'spanId',\n 'parentSpanId',\n 'threadId',\n 'resourceId',\n 'requestId',\n 'serviceName',\n 'experimentId',\n 'environment',\n 'executionSource',\n 'parentEntityType',\n 'parentEntityId',\n 'parentEntityName',\n 'rootEntityType',\n 'rootEntityId',\n 'rootEntityName',\n]);\nconst OBSERVABILITY_TRACE_QUERY_ROOT_DURATION_STORAGE_FEATURE = 'trace-query-root-duration';\nconst OBSERVABILITY_TRACE_QUERY_CONTEXT_IDS_STORAGE_FEATURE = 'trace-query-context-ids';\nconst TRACE_QUERY_CONTEXT_ID_FIELDS = new Set(['runId', 'sessionId', 'userId', 'organizationId']);\nconst OBSERVABILITY_TRACE_QUERY_TIME_TO_FIRST_CHUNK_STORAGE_FEATURE = 'trace-query-time-to-first-chunk';\nconst TRACE_QUERY_TIME_TO_FIRST_CHUNK_FIELDS = new Set(['timeToFirstChunkMs']);\nconst OBSERVABILITY_TRACE_QUERY_ROOT_SPAN_FIELDS_STORAGE_FEATURE = 'trace-query-root-span-fields';\nconst OBSERVABILITY_TRACE_QUERY_ROOT_ENTITY_ID_STORAGE_FEATURE = 'trace-query-root-entity-id';\n// Trace-scope fields read from the root span, keyed by the storage feature that added their SQL.\nconst TRACE_QUERY_ROOT_SPAN_FIELD_FEATURES = new Map([\n ['name', OBSERVABILITY_TRACE_QUERY_ROOT_SPAN_FIELDS_STORAGE_FEATURE],\n ['spanType', OBSERVABILITY_TRACE_QUERY_ROOT_SPAN_FIELDS_STORAGE_FEATURE],\n ['entityId', OBSERVABILITY_TRACE_QUERY_ROOT_ENTITY_ID_STORAGE_FEATURE],\n]);\nconst OBSERVABILITY_TRACE_QUERY_TIME_TO_FIRST_CHUNK_SORT_STORAGE_FEATURE = 'trace-query-time-to-first-chunk-sort';\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 function supportsTraceAggregateCore() {\n return (\n coreStorage.traceAggregateRequestSchema !== undefined &&\n coreStorage.traceAggregateResponseSchema !== undefined &&\n typeof coreStorage.planTraceAggregate === 'function'\n );\n}\n\nexport function supportsSpanAggregateCore() {\n return (\n coreStorage.spanAggregateRequestSchema !== undefined &&\n coreStorage.spanAggregateResponseSchema !== undefined &&\n typeof coreStorage.planSpanAggregate === 'function'\n );\n}\n\nexport function supportsSpanQueryCore() {\n return (\n coreStorage.spanQueryRequestSchema !== undefined &&\n coreStorage.spanQueryResponseSchema !== undefined &&\n typeof coreStorage.planSpanQuery === '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\nexport function supportsObservabilityTraceAggregate(observabilityStore: ObservabilityStorage) {\n return getFeatures(observabilityStore)?.includes(OBSERVABILITY_TRACE_AGGREGATE_STORAGE_FEATURE) === true;\n}\n\nexport function assertObservabilityTraceAggregateSupported(observabilityStore: ObservabilityStorage) {\n if (supportsObservabilityTraceAggregate(observabilityStore)) return;\n\n throw new HTTPException(501, {\n message: 'Trace aggregation is not supported by the configured observability store',\n });\n}\n\nexport function assertObservabilitySpanAggregateSupported(observabilityStore: ObservabilityStorage) {\n if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_SPAN_AGGREGATE_STORAGE_FEATURE)) return;\n\n throw new HTTPException(501, {\n message: 'Span aggregation is not supported by the configured observability store',\n });\n}\n\nexport function assertObservabilitySpanQuerySupported(observabilityStore: ObservabilityStorage) {\n if (getFeatures(observabilityStore)?.includes(OBSERVABILITY_SPAN_QUERY_STORAGE_FEATURE)) return;\n\n throw new HTTPException(501, {\n message: 'Span queries are not supported by the configured observability store',\n });\n}\n\nexport function assertObservabilitySpanQueryFieldsSupported(\n observabilityStore: ObservabilityStorage,\n predicate: TrustedTraceQueryScalarPredicate | undefined,\n) {\n if (!predicate || getFeatures(observabilityStore)?.includes('span-query-context-fields')) return;\n if (predicate.type === 'boolean') {\n for (const arg of predicate.args) assertObservabilitySpanQueryFieldsSupported(observabilityStore, arg);\n } else if (predicate.type === 'not') {\n assertObservabilitySpanQueryFieldsSupported(observabilityStore, predicate.arg);\n } else if (SPAN_QUERY_CONTEXT_FIELDS.has(predicate.field)) {\n throw new coreStorage.TraceQueryValidationError([\n {\n code: 'field_not_allowed',\n path: ['where'],\n message: `Filtering by ${predicate.field} requires an updated storage adapter with span query context-field support.`,\n },\n ]);\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\n/** Whether any scalar predicate, at any depth and inside any relation, names one of `fields`. */\nfunction usesField(\n predicate: TrustedTraceQueryPredicate | TrustedThreadPredicate | undefined,\n fields: ReadonlySet<string>,\n): boolean {\n if (!predicate) return false;\n if (predicate.type === 'boolean') return predicate.args.some(arg => usesField(arg, fields));\n if (predicate.type === 'not') return usesField(predicate.arg, fields);\n if (predicate.type === 'relation') return usesField(predicate.predicate, fields);\n return fields.has(predicate.field);\n}\n\nexport function supportsObservabilityTraceQueryContextIds(observabilityStore: ObservabilityStorage) {\n return getFeatures(observabilityStore)?.includes(OBSERVABILITY_TRACE_QUERY_CONTEXT_IDS_STORAGE_FEATURE) === true;\n}\n\nexport function isTraceQueryContextIdField(path: string): boolean {\n return TRACE_QUERY_CONTEXT_ID_FIELDS.has(path);\n}\n\nexport function assertObservabilityTraceQueryContextIdsSupported(\n observabilityStore: ObservabilityStorage,\n predicate: TrustedTraceQueryPredicate | TrustedThreadPredicate | undefined,\n) {\n if (\n !usesField(predicate, TRACE_QUERY_CONTEXT_ID_FIELDS) ||\n supportsObservabilityTraceQueryContextIds(observabilityStore)\n ) {\n return;\n }\n\n throw new HTTPException(501, {\n message: 'Context identifier predicates are not supported by the configured observability store',\n });\n}\n\nexport function supportsObservabilityTraceQueryTimeToFirstChunk(observabilityStore: ObservabilityStorage) {\n return (\n getFeatures(observabilityStore)?.includes(OBSERVABILITY_TRACE_QUERY_TIME_TO_FIRST_CHUNK_STORAGE_FEATURE) === true\n );\n}\n\n/** Covers trace, thread and span query predicates, including `spans` and `traces` relations. */\nexport function assertObservabilityTraceQueryTimeToFirstChunkSupported(\n observabilityStore: ObservabilityStorage,\n predicate: TrustedTraceQueryPredicate | TrustedThreadPredicate | undefined,\n) {\n if (\n !usesField(predicate, TRACE_QUERY_TIME_TO_FIRST_CHUNK_FIELDS) ||\n supportsObservabilityTraceQueryTimeToFirstChunk(observabilityStore)\n ) {\n return;\n }\n\n throw new HTTPException(501, {\n message: 'Time to first chunk predicates are not supported by the configured observability store',\n });\n}\n\nfunction rootSpanFieldIssues(\n observabilityStore: ObservabilityStorage,\n predicate: TrustedTraceQueryPredicate | TrustedThreadPredicate | undefined,\n): TraceQueryIssue[] {\n if (!predicate) return [];\n if (predicate.type === 'boolean') return predicate.args.flatMap(arg => rootSpanFieldIssues(observabilityStore, arg));\n if (predicate.type === 'not') return rootSpanFieldIssues(observabilityStore, predicate.arg);\n // Only trace-scope root span fields read the root; inside `spans.some` they are long-supported span fields.\n if (predicate.type === 'relation') {\n return predicate.collection === 'traces' ? rootSpanFieldIssues(observabilityStore, predicate.predicate) : [];\n }\n return supportsObservabilityTraceQueryRootSpanField(observabilityStore, predicate.field)\n ? []\n : [rootSpanFieldIssue(['where'], predicate.field)];\n}\n\nfunction rootSpanFieldIssue(path: Array<string | number>, field: string): TraceQueryIssue {\n return {\n code: 'field_not_allowed',\n path,\n message: `Root span ${field} requires an updated storage adapter with trace-query root span field support.`,\n };\n}\n\n/**\n * Whether the store can serve `path` at trace scope. Fields that don't read the root span are\n * always supported here; other gates cover them.\n */\nexport function supportsObservabilityTraceQueryRootSpanField(observabilityStore: ObservabilityStorage, path: string) {\n const feature = TRACE_QUERY_ROOT_SPAN_FIELD_FEATURES.get(path);\n return feature === undefined || getFeatures(observabilityStore)?.includes(feature) === true;\n}\n\n/**\n * Stores that predate a trace-scope root span field have no SQL for it and would fail with a\n * 500, so requests that use it are rejected as invalid instead.\n */\nexport function assertObservabilityTraceQueryRootSpanFieldsSupported(\n observabilityStore: ObservabilityStorage,\n plan: {\n where?: TrustedTraceQueryPredicate | TrustedThreadPredicate;\n dimensions?: readonly string[];\n measures?: ReadonlyArray<{ type: string; field?: string }>;\n },\n) {\n const supported = (field: string) => supportsObservabilityTraceQueryRootSpanField(observabilityStore, field);\n const issues = [\n ...rootSpanFieldIssues(observabilityStore, plan.where),\n ...(plan.dimensions ?? []).flatMap((dimension, index) =>\n supported(dimension) ? [] : [rootSpanFieldIssue(['groupBy', index], dimension)],\n ),\n ...(plan.measures ?? []).flatMap((measure, index) =>\n measure.type === 'countDistinct' && measure.field !== undefined && !supported(measure.field)\n ? [rootSpanFieldIssue(['measures', index], measure.field)]\n : [],\n ),\n ];\n if (issues.length > 0) throw new coreStorage.TraceQueryValidationError(issues);\n}\n\nexport function assertObservabilityTraceQueryRootSpanValuesSupported(\n observabilityStore: ObservabilityStorage,\n plan: { predicateScope: string; path: string },\n) {\n if (plan.predicateScope !== 'trace') return;\n if (supportsObservabilityTraceQueryRootSpanField(observabilityStore, plan.path)) return;\n throw new coreStorage.TraceQueryValidationError([rootSpanFieldIssue(['path'], plan.path)]);\n}\n\nexport function supportsObservabilityTraceQueryTimeToFirstChunkSort(observabilityStore: ObservabilityStorage) {\n return (\n getFeatures(observabilityStore)?.includes(OBSERVABILITY_TRACE_QUERY_TIME_TO_FIRST_CHUNK_SORT_STORAGE_FEATURE) ===\n true\n );\n}\n\n/** Covers the sort of trace and span queries. */\nexport function assertObservabilityTraceQueryTimeToFirstChunkSortSupported(\n observabilityStore: ObservabilityStorage,\n orderBy: { field: string },\n) {\n if (\n !TRACE_QUERY_TIME_TO_FIRST_CHUNK_FIELDS.has(orderBy.field) ||\n supportsObservabilityTraceQueryTimeToFirstChunkSort(observabilityStore)\n ) {\n return;\n }\n\n throw new HTTPException(501, {\n message: 'Sorting by time to first chunk is 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 traceQueryContextIds: boolean;\n traceQueryTimeToFirstChunk: boolean;\n traceQueryRootSpanFields: boolean;\n traceQueryRootEntityId: boolean;\n traceQueryTimeToFirstChunkSort: boolean;\n traceQueryDiscovery: boolean;\n traceQueryTenantScope: boolean;\n traceAggregate: boolean;\n threadQuery: boolean;\n threadQueryRows: boolean;\n spanQuery: boolean;\n spanQueryContextFields: boolean;\n spanAggregate: boolean;\n /** Days of traces the store keeps. Omitted when the store does not report a limit. */\n traceRetentionDays?: number;\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 traceQueryContextIds: false,\n traceQueryTimeToFirstChunk: false,\n traceQueryRootSpanFields: false,\n traceQueryRootEntityId: false,\n traceQueryTimeToFirstChunkSort: false,\n traceQueryDiscovery: false,\n traceQueryTenantScope: false,\n traceAggregate: false,\n threadQuery: false,\n threadQueryRows: false,\n spanQuery: false,\n spanAggregate: false,\n spanQueryContextFields: 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 const spanQuery = newApiCore && supportsSpanQueryCore() && declares(OBSERVABILITY_SPAN_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 traceQueryContextIds:\n (traceQuery || threadQuery) && declares(OBSERVABILITY_TRACE_QUERY_CONTEXT_IDS_STORAGE_FEATURE),\n traceQueryTimeToFirstChunk:\n (traceQuery || threadQuery || spanQuery) &&\n declares(OBSERVABILITY_TRACE_QUERY_TIME_TO_FIRST_CHUNK_STORAGE_FEATURE),\n traceQueryRootSpanFields:\n (traceQuery || threadQuery) && declares(OBSERVABILITY_TRACE_QUERY_ROOT_SPAN_FIELDS_STORAGE_FEATURE),\n traceQueryRootEntityId:\n (traceQuery || threadQuery) && declares(OBSERVABILITY_TRACE_QUERY_ROOT_ENTITY_ID_STORAGE_FEATURE),\n traceQueryTimeToFirstChunkSort:\n (traceQuery || spanQuery) && declares(OBSERVABILITY_TRACE_QUERY_TIME_TO_FIRST_CHUNK_SORT_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 traceAggregate:\n newApiCore && supportsTraceAggregateCore() && declares(OBSERVABILITY_TRACE_AGGREGATE_STORAGE_FEATURE),\n threadQuery,\n threadQueryRows:\n threadQuery && typeof coreStorage.planThreadRowsQuery === 'function' && declares('thread-query-rows'),\n spanQuery,\n spanQueryContextFields: spanQuery && declares('span-query-context-fields'),\n spanAggregate: newApiCore && supportsSpanAggregateCore() && declares(OBSERVABILITY_SPAN_AGGREGATE_STORAGE_FEATURE),\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 AGGREGATE_TRACES: {\n method: 'POST',\n path: '/observability/traces/aggregate',\n summary: 'Aggregate traces',\n description:\n 'Returns grouped and optionally time-bucketed measures (counts, durations, error rates) over completed logical traces matching an advanced trace predicate',\n requiresPermission: 'observability:read',\n },\n\n QUERY_THREADS: {\n method: 'POST',\n path: '/observability/threads/query',\n summary: 'Query threads',\n description:\n 'Returns full-history thread rows with activity timestamps, first/last traces, previews and context fields',\n requiresPermission: 'observability:read',\n },\n\n QUERY_SPANS: {\n method: 'POST',\n path: '/observability/spans/query',\n summary: 'Query spans',\n description: 'Returns completed spans matching a span predicate, one row per span, with cursor pagination',\n requiresPermission: 'observability:read',\n },\n\n AGGREGATE_SPANS: {\n method: 'POST',\n path: '/observability/spans/aggregate',\n summary: 'Aggregate spans',\n description:\n 'Returns grouped and optionally time-bucketed measures (counts, durations, error rates, tokens, cost) over completed spans matching a span predicate',\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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"}
|
|
@@ -9,6 +9,7 @@ export declare const OBSERVABILITY_TRACE_QUERY_TENANT_SCOPE_CORE_FEATURE = "obse
|
|
|
9
9
|
export declare const OBSERVABILITY_TRACE_QUERY_TENANT_SCOPE_UPGRADE_MESSAGE = "Trusted tenant scope requires a newer @mastra/core with trace-query tenant scope support. Please upgrade.";
|
|
10
10
|
export declare function supportsTraceQueryDiscoveryCore(): boolean;
|
|
11
11
|
export declare function supportsTraceAggregateCore(): boolean;
|
|
12
|
+
export declare function supportsSpanAggregateCore(): boolean;
|
|
12
13
|
export declare function supportsSpanQueryCore(): boolean;
|
|
13
14
|
export declare const OBSERVABILITY_LIST_ENDPOINTS: {
|
|
14
15
|
readonly traces: 'traces';
|
|
@@ -28,6 +29,7 @@ export declare function getScoresStore(mastra: Mastra): Promise<ScoresStorage>;
|
|
|
28
29
|
export declare function assertObservabilityTraceQuerySupported(observabilityStore: ObservabilityStorage): void;
|
|
29
30
|
export declare function supportsObservabilityTraceAggregate(observabilityStore: ObservabilityStorage): boolean;
|
|
30
31
|
export declare function assertObservabilityTraceAggregateSupported(observabilityStore: ObservabilityStorage): void;
|
|
32
|
+
export declare function assertObservabilitySpanAggregateSupported(observabilityStore: ObservabilityStorage): void;
|
|
31
33
|
export declare function assertObservabilitySpanQuerySupported(observabilityStore: ObservabilityStorage): void;
|
|
32
34
|
export declare function assertObservabilitySpanQueryFieldsSupported(observabilityStore: ObservabilityStorage, predicate: TrustedTraceQueryScalarPredicate | undefined): void;
|
|
33
35
|
export declare function supportsObservabilityTraceQueryRootDuration(observabilityStore: ObservabilityStorage): boolean;
|
|
@@ -99,6 +101,7 @@ export type ObservabilityStorageCapabilities = {
|
|
|
99
101
|
threadQueryRows: boolean;
|
|
100
102
|
spanQuery: boolean;
|
|
101
103
|
spanQueryContextFields: boolean;
|
|
104
|
+
spanAggregate: boolean;
|
|
102
105
|
/** Days of traces the store keeps. Omitted when the store does not report a limit. */
|
|
103
106
|
traceRetentionDays?: number;
|
|
104
107
|
feedback: boolean;
|
|
@@ -163,6 +166,13 @@ export declare const NEW_ROUTE_DEFS: {
|
|
|
163
166
|
readonly description: 'Returns completed spans matching a span predicate, one row per span, with cursor pagination';
|
|
164
167
|
readonly requiresPermission: 'observability:read';
|
|
165
168
|
};
|
|
169
|
+
readonly AGGREGATE_SPANS: {
|
|
170
|
+
readonly method: 'POST';
|
|
171
|
+
readonly path: '/observability/spans/aggregate';
|
|
172
|
+
readonly summary: 'Aggregate spans';
|
|
173
|
+
readonly description: 'Returns grouped and optionally time-bucketed measures (counts, durations, error rates, tokens, cost) over completed spans matching a span predicate';
|
|
174
|
+
readonly requiresPermission: 'observability:read';
|
|
175
|
+
};
|
|
166
176
|
readonly GET_TRACE_QUERY_FIELDS: {
|
|
167
177
|
readonly method: 'POST';
|
|
168
178
|
readonly path: '/observability/traces/query/fields';
|