@mastra/server 1.13.3-alpha.1 → 1.14.0-alpha.3
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/CHANGELOG.md +18 -0
- package/dist/_types/@internal_core/dist/index.d.ts +1333 -0
- package/dist/chunk-2UVJD67W.cjs +136 -0
- package/dist/chunk-2UVJD67W.cjs.map +1 -0
- package/dist/chunk-4VGZOVOI.js +656 -0
- package/dist/chunk-4VGZOVOI.js.map +1 -0
- package/dist/{chunk-A2443FGH.js → chunk-55AD3MAT.js} +24 -18
- package/dist/chunk-55AD3MAT.js.map +1 -0
- package/dist/{observational-memory-XXD6E2SO-RTIRYSYO.cjs → chunk-A6HL3JRC.cjs} +306 -130
- package/dist/chunk-A6HL3JRC.cjs.map +1 -0
- package/dist/{observational-memory-XXD6E2SO-TGAG7QCA.js → chunk-KZAB4IB3.js} +305 -131
- package/dist/chunk-KZAB4IB3.js.map +1 -0
- package/dist/{chunk-4AR4SH3H.cjs → chunk-L6ANZUEK.cjs} +7 -7
- package/dist/{chunk-4AR4SH3H.cjs.map → chunk-L6ANZUEK.cjs.map} +1 -1
- package/dist/{chunk-SFC2UJ2C.js → chunk-LE6IX2DD.js} +6 -6
- package/dist/{chunk-SFC2UJ2C.js.map → chunk-LE6IX2DD.js.map} +1 -1
- package/dist/chunk-LUHJDABR.cjs +675 -0
- package/dist/chunk-LUHJDABR.cjs.map +1 -0
- package/dist/{chunk-7P6XT5WB.cjs → chunk-OXZCCCIJ.cjs} +28 -22
- package/dist/chunk-OXZCCCIJ.cjs.map +1 -0
- package/dist/chunk-RSIZIEPW.js +131 -0
- package/dist/chunk-RSIZIEPW.js.map +1 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/observational-memory-UEDVTWS2-COV6JJZK.js +3 -0
- package/dist/observational-memory-UEDVTWS2-COV6JJZK.js.map +1 -0
- package/dist/observational-memory-UEDVTWS2-TU3KK4ZG.cjs +68 -0
- package/dist/observational-memory-UEDVTWS2-TU3KK4ZG.cjs.map +1 -0
- package/dist/server/handlers/agent-builder.cjs +16 -16
- package/dist/server/handlers/agent-builder.js +1 -1
- package/dist/server/handlers/observability-new-endpoints.cjs +80 -0
- package/dist/server/handlers/observability-new-endpoints.cjs.map +1 -0
- package/dist/server/handlers/observability-new-endpoints.d.ts +1212 -0
- package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -0
- package/dist/server/handlers/observability-new-endpoints.js +3 -0
- package/dist/server/handlers/observability-new-endpoints.js.map +1 -0
- package/dist/server/handlers/observability-shared.cjs +24 -0
- package/dist/server/handlers/observability-shared.cjs.map +1 -0
- package/dist/server/handlers/observability-shared.d.ts +126 -0
- package/dist/server/handlers/observability-shared.d.ts.map +1 -0
- package/dist/server/handlers/observability-shared.js +3 -0
- package/dist/server/handlers/observability-shared.js.map +1 -0
- package/dist/server/handlers/observability.cjs +78 -5
- package/dist/server/handlers/observability.d.ts +22 -20
- package/dist/server/handlers/observability.d.ts.map +1 -1
- package/dist/server/handlers/observability.js +2 -1
- package/dist/server/handlers.cjs +10 -10
- package/dist/server/handlers.js +3 -3
- package/dist/server/schemas/index.cjs +82 -82
- package/dist/server/schemas/index.js +2 -2
- package/dist/server/server-adapter/index.cjs +43 -24
- package/dist/server/server-adapter/index.cjs.map +1 -1
- package/dist/server/server-adapter/index.js +25 -6
- package/dist/server/server-adapter/index.js.map +1 -1
- package/dist/server/server-adapter/routes/observability.d.ts +531 -21
- package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
- package/package.json +6 -5
- package/dist/chunk-3NG2FRSI.js +0 -41
- package/dist/chunk-3NG2FRSI.js.map +0 -1
- package/dist/chunk-5ZBS3CWT.cjs +0 -43
- package/dist/chunk-5ZBS3CWT.cjs.map +0 -1
- package/dist/chunk-7P6XT5WB.cjs.map +0 -1
- package/dist/chunk-A2443FGH.js.map +0 -1
- package/dist/observational-memory-XXD6E2SO-RTIRYSYO.cjs.map +0 -1
- package/dist/observational-memory-XXD6E2SO-TGAG7QCA.js.map +0 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
|
|
4
|
+
|
|
5
|
+
// src/server/handlers/observability-shared.ts
|
|
6
|
+
var NEW_OBSERVABILITY_UPGRADE_MESSAGE = "New observability endpoints require a newer @mastra/core. Please upgrade.";
|
|
7
|
+
function getStorage(mastra) {
|
|
8
|
+
const storage = mastra.getStorage();
|
|
9
|
+
if (!storage) {
|
|
10
|
+
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not available" });
|
|
11
|
+
}
|
|
12
|
+
return storage;
|
|
13
|
+
}
|
|
14
|
+
async function getObservabilityStore(mastra) {
|
|
15
|
+
const storage = getStorage(mastra);
|
|
16
|
+
const observability = await storage.getStore("observability");
|
|
17
|
+
if (!observability) {
|
|
18
|
+
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Observability storage domain is not available" });
|
|
19
|
+
}
|
|
20
|
+
return observability;
|
|
21
|
+
}
|
|
22
|
+
var NEW_ROUTE_DEFS = {
|
|
23
|
+
LIST_LOGS: {
|
|
24
|
+
method: "GET",
|
|
25
|
+
path: "/observability/logs",
|
|
26
|
+
summary: "List logs",
|
|
27
|
+
description: "Returns a paginated list of logs with optional filtering and sorting"
|
|
28
|
+
},
|
|
29
|
+
LIST_SCORES: {
|
|
30
|
+
method: "GET",
|
|
31
|
+
path: "/observability/scores",
|
|
32
|
+
summary: "List scores",
|
|
33
|
+
description: "Returns a paginated list of scores with optional filtering and sorting"
|
|
34
|
+
},
|
|
35
|
+
CREATE_SCORE: {
|
|
36
|
+
method: "POST",
|
|
37
|
+
path: "/observability/scores",
|
|
38
|
+
summary: "Create a score",
|
|
39
|
+
description: "Creates a single score record in the observability store"
|
|
40
|
+
},
|
|
41
|
+
LIST_FEEDBACK: {
|
|
42
|
+
method: "GET",
|
|
43
|
+
path: "/observability/feedback",
|
|
44
|
+
summary: "List feedback",
|
|
45
|
+
description: "Returns a paginated list of feedback with optional filtering and sorting"
|
|
46
|
+
},
|
|
47
|
+
CREATE_FEEDBACK: {
|
|
48
|
+
method: "POST",
|
|
49
|
+
path: "/observability/feedback",
|
|
50
|
+
summary: "Create feedback",
|
|
51
|
+
description: "Creates a single feedback record in the observability store"
|
|
52
|
+
},
|
|
53
|
+
GET_METRIC_AGGREGATE: {
|
|
54
|
+
method: "POST",
|
|
55
|
+
path: "/observability/metrics/aggregate",
|
|
56
|
+
summary: "Get metric aggregate",
|
|
57
|
+
description: "Returns an aggregated metric value with optional period-over-period comparison",
|
|
58
|
+
requiresPermission: "observability:read"
|
|
59
|
+
},
|
|
60
|
+
GET_METRIC_BREAKDOWN: {
|
|
61
|
+
method: "POST",
|
|
62
|
+
path: "/observability/metrics/breakdown",
|
|
63
|
+
summary: "Get metric breakdown",
|
|
64
|
+
description: "Returns metric values grouped by specified dimensions",
|
|
65
|
+
requiresPermission: "observability:read"
|
|
66
|
+
},
|
|
67
|
+
GET_METRIC_TIME_SERIES: {
|
|
68
|
+
method: "POST",
|
|
69
|
+
path: "/observability/metrics/timeseries",
|
|
70
|
+
summary: "Get metric time series",
|
|
71
|
+
description: "Returns metric values bucketed by time interval with optional grouping",
|
|
72
|
+
requiresPermission: "observability:read"
|
|
73
|
+
},
|
|
74
|
+
GET_METRIC_PERCENTILES: {
|
|
75
|
+
method: "POST",
|
|
76
|
+
path: "/observability/metrics/percentiles",
|
|
77
|
+
summary: "Get metric percentiles",
|
|
78
|
+
description: "Returns percentile values for a metric bucketed by time interval",
|
|
79
|
+
requiresPermission: "observability:read"
|
|
80
|
+
},
|
|
81
|
+
GET_METRIC_NAMES: {
|
|
82
|
+
method: "GET",
|
|
83
|
+
path: "/observability/discovery/metric-names",
|
|
84
|
+
summary: "Get metric names",
|
|
85
|
+
description: "Returns distinct metric names with optional prefix filtering"
|
|
86
|
+
},
|
|
87
|
+
GET_METRIC_LABEL_KEYS: {
|
|
88
|
+
method: "GET",
|
|
89
|
+
path: "/observability/discovery/metric-label-keys",
|
|
90
|
+
summary: "Get metric label keys",
|
|
91
|
+
description: "Returns distinct label keys for a given metric"
|
|
92
|
+
},
|
|
93
|
+
GET_METRIC_LABEL_VALUES: {
|
|
94
|
+
method: "GET",
|
|
95
|
+
path: "/observability/discovery/metric-label-values",
|
|
96
|
+
summary: "Get label values",
|
|
97
|
+
description: "Returns distinct values for a given metric label key"
|
|
98
|
+
},
|
|
99
|
+
GET_ENTITY_TYPES: {
|
|
100
|
+
method: "GET",
|
|
101
|
+
path: "/observability/discovery/entity-types",
|
|
102
|
+
summary: "Get entity types",
|
|
103
|
+
description: "Returns distinct entity types from observability data"
|
|
104
|
+
},
|
|
105
|
+
GET_ENTITY_NAMES: {
|
|
106
|
+
method: "GET",
|
|
107
|
+
path: "/observability/discovery/entity-names",
|
|
108
|
+
summary: "Get entity names",
|
|
109
|
+
description: "Returns distinct entity names with optional type filtering"
|
|
110
|
+
},
|
|
111
|
+
GET_SERVICE_NAMES: {
|
|
112
|
+
method: "GET",
|
|
113
|
+
path: "/observability/discovery/service-names",
|
|
114
|
+
summary: "Get service names",
|
|
115
|
+
description: "Returns distinct service names from observability data"
|
|
116
|
+
},
|
|
117
|
+
GET_ENVIRONMENTS: {
|
|
118
|
+
method: "GET",
|
|
119
|
+
path: "/observability/discovery/environments",
|
|
120
|
+
summary: "Get environments",
|
|
121
|
+
description: "Returns distinct environments from observability data"
|
|
122
|
+
},
|
|
123
|
+
GET_TAGS: {
|
|
124
|
+
method: "GET",
|
|
125
|
+
path: "/observability/discovery/tags",
|
|
126
|
+
summary: "Get tags",
|
|
127
|
+
description: "Returns distinct tags with optional entity type filtering"
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
exports.NEW_OBSERVABILITY_UPGRADE_MESSAGE = NEW_OBSERVABILITY_UPGRADE_MESSAGE;
|
|
132
|
+
exports.NEW_ROUTE_DEFS = NEW_ROUTE_DEFS;
|
|
133
|
+
exports.getObservabilityStore = getObservabilityStore;
|
|
134
|
+
exports.getStorage = getStorage;
|
|
135
|
+
//# sourceMappingURL=chunk-2UVJD67W.cjs.map
|
|
136
|
+
//# sourceMappingURL=chunk-2UVJD67W.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/server/handlers/observability-shared.ts"],"names":["HTTPException"],"mappings":"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","file":"chunk-2UVJD67W.cjs","sourcesContent":["import type { Mastra } from '@mastra/core';\nimport type { MastraCompositeStore, ObservabilityStorage } from '@mastra/core/storage';\nimport { HTTPException } from '../http-exception';\nimport type { ServerRoute } from '../server-adapter/routes';\n\nexport const NEW_OBSERVABILITY_UPGRADE_MESSAGE =\n 'New observability endpoints require a newer @mastra/core. Please upgrade.';\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 500 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 throw new HTTPException(500, { message: 'Observability storage domain is not available' });\n }\n return observability;\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 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 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 GET_METRIC_AGGREGATE: {\n method: 'POST',\n path: '/observability/metrics/aggregate',\n summary: 'Get metric aggregate',\n description: 'Returns an aggregated metric value with optional period-over-period comparison',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_BREAKDOWN: {\n method: 'POST',\n path: '/observability/metrics/breakdown',\n summary: 'Get metric breakdown',\n description: 'Returns metric values grouped by specified dimensions',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_TIME_SERIES: {\n method: 'POST',\n path: '/observability/metrics/timeseries',\n summary: 'Get metric time series',\n description: 'Returns metric values bucketed by time interval with optional grouping',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_PERCENTILES: {\n method: 'POST',\n path: '/observability/metrics/percentiles',\n summary: 'Get metric percentiles',\n description: 'Returns percentile values for a metric bucketed by time interval',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_NAMES: {\n method: 'GET',\n path: '/observability/discovery/metric-names',\n summary: 'Get metric names',\n description: 'Returns distinct metric names with optional prefix filtering',\n },\n\n GET_METRIC_LABEL_KEYS: {\n method: 'GET',\n path: '/observability/discovery/metric-label-keys',\n summary: 'Get metric label keys',\n description: 'Returns distinct label keys for a given metric',\n },\n\n GET_METRIC_LABEL_VALUES: {\n method: 'GET',\n path: '/observability/discovery/metric-label-values',\n summary: 'Get label values',\n description: 'Returns distinct values for a given metric label key',\n },\n\n GET_ENTITY_TYPES: {\n method: 'GET',\n path: '/observability/discovery/entity-types',\n summary: 'Get entity types',\n description: 'Returns distinct entity types from observability data',\n },\n\n GET_ENTITY_NAMES: {\n method: 'GET',\n path: '/observability/discovery/entity-names',\n summary: 'Get entity names',\n description: 'Returns distinct entity names with optional type filtering',\n },\n\n GET_SERVICE_NAMES: {\n method: 'GET',\n path: '/observability/discovery/service-names',\n summary: 'Get service names',\n description: 'Returns distinct service names from observability data',\n },\n\n GET_ENVIRONMENTS: {\n method: 'GET',\n path: '/observability/discovery/environments',\n summary: 'Get environments',\n description: 'Returns distinct environments from observability data',\n },\n\n GET_TAGS: {\n method: 'GET',\n path: '/observability/discovery/tags',\n summary: 'Get tags',\n description: 'Returns distinct tags with optional entity type filtering',\n },\n} as const satisfies Record<string, RouteDetails>;\n\nexport type NewRoutesKey = keyof typeof NEW_ROUTE_DEFS;\nexport type NewRoutesDefinitions = (typeof NEW_ROUTE_DEFS)[NewRoutesKey];\n"]}
|