🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@mastra/server

Package Overview
Dependencies
Maintainers
7
Versions
1173
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@mastra/server - npm Package Compare versions

Comparing version
1.52.1
to
1.52.2-alpha.0
+56
dist/api-schema-manifest-AAUEOERA.js
import { SERVER_ROUTES } from './chunk-SDELLYAU.js';
import { schemaToJsonSchema } from './chunk-H5LXHGEJ.js';
// src/server/server-adapter/api-schema-manifest.ts
function convertSchema(schema) {
return schema ? schemaToJsonSchema(schema) : void 0;
}
function asJsonSchema(value) {
return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
}
function schemaType(schema) {
const type = schema?.type;
return Array.isArray(type) ? type.find(Boolean) : type;
}
function inferResponseShape(responseSchema) {
if (!responseSchema) return { kind: "unknown" };
const type = schemaType(responseSchema);
if (type === "array") return { kind: "array" };
if (type !== "object") return { kind: "single" };
const properties = responseSchema.properties && !Array.isArray(responseSchema.properties) ? responseSchema.properties : {};
const propertyNames = Object.keys(properties);
const paginationProperty = "page" in properties ? "page" : "pagination" in properties ? "pagination" : void 0;
const listProperty = Object.entries(properties).find(
([, property]) => schemaType(asJsonSchema(property)) === "array"
)?.[0];
if (listProperty && (paginationProperty || propertyNames.length <= 2)) {
return { kind: "object-property", listProperty, paginationProperty };
}
if (responseSchema.additionalProperties && propertyNames.length === 0) return { kind: "record" };
return { kind: "single" };
}
function isManifestRoute(route) {
return route.responseType === "json" && !route.deprecated;
}
function buildApiSchemaManifest(routes = SERVER_ROUTES) {
return {
version: 1,
routes: routes.filter(isManifestRoute).map((route) => {
const responseSchema = convertSchema(route.responseSchema);
return {
method: route.method,
path: route.path,
responseType: route.responseType,
pathParamSchema: convertSchema(route.pathParamSchema),
queryParamSchema: convertSchema(route.queryParamSchema),
bodySchema: convertSchema(route.bodySchema),
responseSchema,
responseShape: inferResponseShape(responseSchema)
};
})
};
}
export { buildApiSchemaManifest };
//# sourceMappingURL=api-schema-manifest-AAUEOERA.js.map
//# sourceMappingURL=api-schema-manifest-AAUEOERA.js.map
{"version":3,"sources":["../src/server/server-adapter/api-schema-manifest.ts"],"names":[],"mappings":";;;;AA2BA,SAAS,cAAc,MAAA,EAA4D;AACjF,EAAA,OAAO,MAAA,GAAS,kBAAA,CAAmB,MAAM,CAAA,GAAI,MAAA;AAC/C;AAEA,SAAS,aAAa,KAAA,EAAyC;AAC7D,EAAA,OAAO,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAK,KAAA,GAAwB,MAAA;AAChG;AAEA,SAAS,WAAW,MAAA,EAAkE;AACpF,EAAA,MAAM,OAAO,MAAA,EAAQ,IAAA;AACrB,EAAA,OAAO,MAAM,OAAA,CAAQ,IAAI,IAAI,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,GAAI,IAAA;AACpD;AAEA,SAAS,mBAAmB,cAAA,EAAiE;AAC3F,EAAA,IAAI,CAAC,cAAA,EAAgB,OAAO,EAAE,MAAM,SAAA,EAAU;AAE9C,EAAA,MAAM,IAAA,GAAO,WAAW,cAAc,CAAA;AACtC,EAAA,IAAI,IAAA,KAAS,OAAA,EAAS,OAAO,EAAE,MAAM,OAAA,EAAQ;AAC7C,EAAA,IAAI,IAAA,KAAS,QAAA,EAAU,OAAO,EAAE,MAAM,QAAA,EAAS;AAE/C,EAAA,MAAM,UAAA,GACJ,cAAA,CAAe,UAAA,IAAc,CAAC,KAAA,CAAM,OAAA,CAAQ,cAAA,CAAe,UAAU,CAAA,GAAI,cAAA,CAAe,UAAA,GAAa,EAAC;AACxG,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AAC5C,EAAA,MAAM,qBAAqB,MAAA,IAAU,UAAA,GAAa,MAAA,GAAS,YAAA,IAAgB,aAAa,YAAA,GAAe,MAAA;AACvG,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,CAAE,IAAA;AAAA,IAC9C,CAAC,GAAG,QAAQ,MAAM,UAAA,CAAW,YAAA,CAAa,QAAQ,CAAC,CAAA,KAAM;AAAA,MACvD,CAAC,CAAA;AAEL,EAAA,IAAI,YAAA,KAAiB,kBAAA,IAAsB,aAAA,CAAc,MAAA,IAAU,CAAA,CAAA,EAAI;AACrE,IAAA,OAAO,EAAE,IAAA,EAAM,iBAAA,EAAmB,YAAA,EAAc,kBAAA,EAAmB;AAAA,EACrE;AACA,EAAA,IAAI,cAAA,CAAe,wBAAwB,aAAA,CAAc,MAAA,KAAW,GAAG,OAAO,EAAE,MAAM,QAAA,EAAS;AAC/F,EAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAC1B;AAEA,SAAS,gBAAgB,KAAA,EAA6B;AACpD,EAAA,OAAO,KAAA,CAAM,YAAA,KAAiB,MAAA,IAAU,CAAC,KAAA,CAAM,UAAA;AACjD;AAEO,SAAS,sBAAA,CAAuB,SAAiC,aAAA,EAAkC;AACxG,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,QAAQ,MAAA,CAAO,MAAA,CAAO,eAAe,CAAA,CAAE,IAAI,CAAA,KAAA,KAAS;AAClD,MAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,KAAA,CAAM,cAAc,CAAA;AACzD,MAAA,OAAO;AAAA,QACL,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,eAAA,EAAiB,aAAA,CAAc,KAAA,CAAM,eAAe,CAAA;AAAA,QACpD,gBAAA,EAAkB,aAAA,CAAc,KAAA,CAAM,gBAAgB,CAAA;AAAA,QACtD,UAAA,EAAY,aAAA,CAAc,KAAA,CAAM,UAAU,CAAA;AAAA,QAC1C,cAAA;AAAA,QACA,aAAA,EAAe,mBAAmB,cAAc;AAAA,OAClD;AAAA,IACF,CAAC;AAAA,GACH;AACF","file":"api-schema-manifest-AAUEOERA.js","sourcesContent":["import type { JSONSchema7 } from '@mastra/schema-compat';\nimport { schemaToJsonSchema } from './openapi-utils';\nimport { SERVER_ROUTES } from './routes/index';\nimport type { ServerRoute } from './routes/index';\n\nexport interface ApiSchemaResponseShape {\n kind: 'array' | 'record' | 'object-property' | 'single' | 'unknown';\n listProperty?: string;\n paginationProperty?: string;\n}\n\nexport interface ApiSchemaManifestRoute {\n method: string;\n path: string;\n responseType: string;\n pathParamSchema?: JSONSchema7;\n queryParamSchema?: JSONSchema7;\n bodySchema?: JSONSchema7;\n responseSchema?: JSONSchema7;\n responseShape: ApiSchemaResponseShape;\n}\n\nexport interface ApiSchemaManifest {\n version: 1;\n routes: ApiSchemaManifestRoute[];\n}\n\nfunction convertSchema(schema: ServerRoute['bodySchema']): JSONSchema7 | undefined {\n return schema ? schemaToJsonSchema(schema) : undefined;\n}\n\nfunction asJsonSchema(value: unknown): JSONSchema7 | undefined {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as JSONSchema7) : undefined;\n}\n\nfunction schemaType(schema: JSONSchema7 | undefined): JSONSchema7['type'] | undefined {\n const type = schema?.type;\n return Array.isArray(type) ? type.find(Boolean) : type;\n}\n\nfunction inferResponseShape(responseSchema: JSONSchema7 | undefined): ApiSchemaResponseShape {\n if (!responseSchema) return { kind: 'unknown' };\n\n const type = schemaType(responseSchema);\n if (type === 'array') return { kind: 'array' };\n if (type !== 'object') return { kind: 'single' };\n\n const properties =\n responseSchema.properties && !Array.isArray(responseSchema.properties) ? responseSchema.properties : {};\n const propertyNames = Object.keys(properties);\n const paginationProperty = 'page' in properties ? 'page' : 'pagination' in properties ? 'pagination' : undefined;\n const listProperty = Object.entries(properties).find(\n ([, property]) => schemaType(asJsonSchema(property)) === 'array',\n )?.[0];\n\n if (listProperty && (paginationProperty || propertyNames.length <= 2)) {\n return { kind: 'object-property', listProperty, paginationProperty };\n }\n if (responseSchema.additionalProperties && propertyNames.length === 0) return { kind: 'record' };\n return { kind: 'single' };\n}\n\nfunction isManifestRoute(route: ServerRoute): boolean {\n return route.responseType === 'json' && !route.deprecated;\n}\n\nexport function buildApiSchemaManifest(routes: readonly ServerRoute[] = SERVER_ROUTES): ApiSchemaManifest {\n return {\n version: 1,\n routes: routes.filter(isManifestRoute).map(route => {\n const responseSchema = convertSchema(route.responseSchema);\n return {\n method: route.method,\n path: route.path,\n responseType: route.responseType,\n pathParamSchema: convertSchema(route.pathParamSchema),\n queryParamSchema: convertSchema(route.queryParamSchema),\n bodySchema: convertSchema(route.bodySchema),\n responseSchema,\n responseShape: inferResponseShape(responseSchema),\n };\n }),\n };\n}\n"]}
'use strict';
var chunkEGV5QBEA_cjs = require('./chunk-EGV5QBEA.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
// src/server/server-adapter/api-schema-manifest.ts
function convertSchema(schema) {
return schema ? chunkRTTQ6WVP_cjs.schemaToJsonSchema(schema) : void 0;
}
function asJsonSchema(value) {
return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
}
function schemaType(schema) {
const type = schema?.type;
return Array.isArray(type) ? type.find(Boolean) : type;
}
function inferResponseShape(responseSchema) {
if (!responseSchema) return { kind: "unknown" };
const type = schemaType(responseSchema);
if (type === "array") return { kind: "array" };
if (type !== "object") return { kind: "single" };
const properties = responseSchema.properties && !Array.isArray(responseSchema.properties) ? responseSchema.properties : {};
const propertyNames = Object.keys(properties);
const paginationProperty = "page" in properties ? "page" : "pagination" in properties ? "pagination" : void 0;
const listProperty = Object.entries(properties).find(
([, property]) => schemaType(asJsonSchema(property)) === "array"
)?.[0];
if (listProperty && (paginationProperty || propertyNames.length <= 2)) {
return { kind: "object-property", listProperty, paginationProperty };
}
if (responseSchema.additionalProperties && propertyNames.length === 0) return { kind: "record" };
return { kind: "single" };
}
function isManifestRoute(route) {
return route.responseType === "json" && !route.deprecated;
}
function buildApiSchemaManifest(routes = chunkEGV5QBEA_cjs.SERVER_ROUTES) {
return {
version: 1,
routes: routes.filter(isManifestRoute).map((route) => {
const responseSchema = convertSchema(route.responseSchema);
return {
method: route.method,
path: route.path,
responseType: route.responseType,
pathParamSchema: convertSchema(route.pathParamSchema),
queryParamSchema: convertSchema(route.queryParamSchema),
bodySchema: convertSchema(route.bodySchema),
responseSchema,
responseShape: inferResponseShape(responseSchema)
};
})
};
}
exports.buildApiSchemaManifest = buildApiSchemaManifest;
//# sourceMappingURL=api-schema-manifest-F5X4TCI3.cjs.map
//# sourceMappingURL=api-schema-manifest-F5X4TCI3.cjs.map
{"version":3,"sources":["../src/server/server-adapter/api-schema-manifest.ts"],"names":["schemaToJsonSchema","SERVER_ROUTES"],"mappings":";;;;;;AA2BA,SAAS,cAAc,MAAA,EAA4D;AACjF,EAAA,OAAO,MAAA,GAASA,oCAAA,CAAmB,MAAM,CAAA,GAAI,MAAA;AAC/C;AAEA,SAAS,aAAa,KAAA,EAAyC;AAC7D,EAAA,OAAO,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAK,KAAA,GAAwB,MAAA;AAChG;AAEA,SAAS,WAAW,MAAA,EAAkE;AACpF,EAAA,MAAM,OAAO,MAAA,EAAQ,IAAA;AACrB,EAAA,OAAO,MAAM,OAAA,CAAQ,IAAI,IAAI,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,GAAI,IAAA;AACpD;AAEA,SAAS,mBAAmB,cAAA,EAAiE;AAC3F,EAAA,IAAI,CAAC,cAAA,EAAgB,OAAO,EAAE,MAAM,SAAA,EAAU;AAE9C,EAAA,MAAM,IAAA,GAAO,WAAW,cAAc,CAAA;AACtC,EAAA,IAAI,IAAA,KAAS,OAAA,EAAS,OAAO,EAAE,MAAM,OAAA,EAAQ;AAC7C,EAAA,IAAI,IAAA,KAAS,QAAA,EAAU,OAAO,EAAE,MAAM,QAAA,EAAS;AAE/C,EAAA,MAAM,UAAA,GACJ,cAAA,CAAe,UAAA,IAAc,CAAC,KAAA,CAAM,OAAA,CAAQ,cAAA,CAAe,UAAU,CAAA,GAAI,cAAA,CAAe,UAAA,GAAa,EAAC;AACxG,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AAC5C,EAAA,MAAM,qBAAqB,MAAA,IAAU,UAAA,GAAa,MAAA,GAAS,YAAA,IAAgB,aAAa,YAAA,GAAe,MAAA;AACvG,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,CAAE,IAAA;AAAA,IAC9C,CAAC,GAAG,QAAQ,MAAM,UAAA,CAAW,YAAA,CAAa,QAAQ,CAAC,CAAA,KAAM;AAAA,MACvD,CAAC,CAAA;AAEL,EAAA,IAAI,YAAA,KAAiB,kBAAA,IAAsB,aAAA,CAAc,MAAA,IAAU,CAAA,CAAA,EAAI;AACrE,IAAA,OAAO,EAAE,IAAA,EAAM,iBAAA,EAAmB,YAAA,EAAc,kBAAA,EAAmB;AAAA,EACrE;AACA,EAAA,IAAI,cAAA,CAAe,wBAAwB,aAAA,CAAc,MAAA,KAAW,GAAG,OAAO,EAAE,MAAM,QAAA,EAAS;AAC/F,EAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAC1B;AAEA,SAAS,gBAAgB,KAAA,EAA6B;AACpD,EAAA,OAAO,KAAA,CAAM,YAAA,KAAiB,MAAA,IAAU,CAAC,KAAA,CAAM,UAAA;AACjD;AAEO,SAAS,sBAAA,CAAuB,SAAiCC,+BAAA,EAAkC;AACxG,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,QAAQ,MAAA,CAAO,MAAA,CAAO,eAAe,CAAA,CAAE,IAAI,CAAA,KAAA,KAAS;AAClD,MAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,KAAA,CAAM,cAAc,CAAA;AACzD,MAAA,OAAO;AAAA,QACL,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,eAAA,EAAiB,aAAA,CAAc,KAAA,CAAM,eAAe,CAAA;AAAA,QACpD,gBAAA,EAAkB,aAAA,CAAc,KAAA,CAAM,gBAAgB,CAAA;AAAA,QACtD,UAAA,EAAY,aAAA,CAAc,KAAA,CAAM,UAAU,CAAA;AAAA,QAC1C,cAAA;AAAA,QACA,aAAA,EAAe,mBAAmB,cAAc;AAAA,OAClD;AAAA,IACF,CAAC;AAAA,GACH;AACF","file":"api-schema-manifest-F5X4TCI3.cjs","sourcesContent":["import type { JSONSchema7 } from '@mastra/schema-compat';\nimport { schemaToJsonSchema } from './openapi-utils';\nimport { SERVER_ROUTES } from './routes/index';\nimport type { ServerRoute } from './routes/index';\n\nexport interface ApiSchemaResponseShape {\n kind: 'array' | 'record' | 'object-property' | 'single' | 'unknown';\n listProperty?: string;\n paginationProperty?: string;\n}\n\nexport interface ApiSchemaManifestRoute {\n method: string;\n path: string;\n responseType: string;\n pathParamSchema?: JSONSchema7;\n queryParamSchema?: JSONSchema7;\n bodySchema?: JSONSchema7;\n responseSchema?: JSONSchema7;\n responseShape: ApiSchemaResponseShape;\n}\n\nexport interface ApiSchemaManifest {\n version: 1;\n routes: ApiSchemaManifestRoute[];\n}\n\nfunction convertSchema(schema: ServerRoute['bodySchema']): JSONSchema7 | undefined {\n return schema ? schemaToJsonSchema(schema) : undefined;\n}\n\nfunction asJsonSchema(value: unknown): JSONSchema7 | undefined {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as JSONSchema7) : undefined;\n}\n\nfunction schemaType(schema: JSONSchema7 | undefined): JSONSchema7['type'] | undefined {\n const type = schema?.type;\n return Array.isArray(type) ? type.find(Boolean) : type;\n}\n\nfunction inferResponseShape(responseSchema: JSONSchema7 | undefined): ApiSchemaResponseShape {\n if (!responseSchema) return { kind: 'unknown' };\n\n const type = schemaType(responseSchema);\n if (type === 'array') return { kind: 'array' };\n if (type !== 'object') return { kind: 'single' };\n\n const properties =\n responseSchema.properties && !Array.isArray(responseSchema.properties) ? responseSchema.properties : {};\n const propertyNames = Object.keys(properties);\n const paginationProperty = 'page' in properties ? 'page' : 'pagination' in properties ? 'pagination' : undefined;\n const listProperty = Object.entries(properties).find(\n ([, property]) => schemaType(asJsonSchema(property)) === 'array',\n )?.[0];\n\n if (listProperty && (paginationProperty || propertyNames.length <= 2)) {\n return { kind: 'object-property', listProperty, paginationProperty };\n }\n if (responseSchema.additionalProperties && propertyNames.length === 0) return { kind: 'record' };\n return { kind: 'single' };\n}\n\nfunction isManifestRoute(route: ServerRoute): boolean {\n return route.responseType === 'json' && !route.deprecated;\n}\n\nexport function buildApiSchemaManifest(routes: readonly ServerRoute[] = SERVER_ROUTES): ApiSchemaManifest {\n return {\n version: 1,\n routes: routes.filter(isManifestRoute).map(route => {\n const responseSchema = convertSchema(route.responseSchema);\n return {\n method: route.method,\n path: route.path,\n responseType: route.responseType,\n pathParamSchema: convertSchema(route.pathParamSchema),\n queryParamSchema: convertSchema(route.queryParamSchema),\n bodySchema: convertSchema(route.bodySchema),\n responseSchema,\n responseShape: inferResponseShape(responseSchema),\n };\n }),\n };\n}\n"]}
import { favoriteToggleResponseSchema } from './chunk-SFPN7SHZ.js';
import { requireBuilderFeature } from './chunk-YN5ILIRE.js';
import { getCallerAuthorId, assertReadAccess } from './chunk-ETR4XOVD.js';
import { storedAgentIdPathParams } from './chunk-HCCTSODR.js';
import { assertStoredResourceScope, getStoredResourceScope } from './chunk-4GWTCVFL.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
// src/server/handlers/stored-agent-favorites.ts
async function getFavoritesContext(mastra) {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentStore = await storage.getStore("agents");
if (!agentStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) {
throw new HTTPException(500, { message: "Favorites storage domain is not available" });
}
return { agentStore, favoritesStore };
}
var FAVORITE_STORED_AGENT_ROUTE = createRoute({
method: "PUT",
path: "/stored/agents/:storedAgentId/favorite",
responseType: "json",
pathParamSchema: storedAgentIdPathParams,
responseSchema: favoriteToggleResponseSchema,
summary: "Favorite a stored agent",
description: "Marks the stored agent as favorited by the calling user. Idempotent.",
tags: ["Stored Agents"],
requiresAuth: true,
requiresPermission: "stored-agents:read",
handler: async ({ mastra, requestContext, storedAgentId }) => {
try {
await requireBuilderFeature(mastra, "favorites");
const callerId = getCallerAuthorId(requestContext);
if (!callerId) {
throw new HTTPException(401, { message: "Authentication required" });
}
const { agentStore, favoritesStore } = await getFavoritesContext(mastra);
const agent = await agentStore.getById(storedAgentId);
if (!agent) {
throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
const result = await favoritesStore.favorite({
userId: callerId,
entityType: "agent",
entityId: storedAgentId
});
return result;
} catch (error) {
return handleError(error, "Error favoriting stored agent");
}
}
});
var UNFAVORITE_STORED_AGENT_ROUTE = createRoute({
method: "DELETE",
path: "/stored/agents/:storedAgentId/favorite",
responseType: "json",
pathParamSchema: storedAgentIdPathParams,
responseSchema: favoriteToggleResponseSchema,
summary: "Unfavorite a stored agent",
description: "Removes the caller\u2019s favorite from the stored agent. Idempotent.",
tags: ["Stored Agents"],
requiresAuth: true,
requiresPermission: "stored-agents:read",
handler: async ({ mastra, requestContext, storedAgentId }) => {
try {
await requireBuilderFeature(mastra, "favorites");
const callerId = getCallerAuthorId(requestContext);
if (!callerId) {
throw new HTTPException(401, { message: "Authentication required" });
}
const { agentStore, favoritesStore } = await getFavoritesContext(mastra);
const agent = await agentStore.getById(storedAgentId);
if (!agent) {
throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
const result = await favoritesStore.unfavorite({
userId: callerId,
entityType: "agent",
entityId: storedAgentId
});
return result;
} catch (error) {
return handleError(error, "Error unfavoriting stored agent");
}
}
});
export { FAVORITE_STORED_AGENT_ROUTE, UNFAVORITE_STORED_AGENT_ROUTE };
//# sourceMappingURL=chunk-3WBNJWA4.js.map
//# sourceMappingURL=chunk-3WBNJWA4.js.map
{"version":3,"sources":["../src/server/handlers/stored-agent-favorites.ts"],"names":[],"mappings":"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","file":"chunk-3WBNJWA4.js","sourcesContent":["import { HTTPException } from '../http-exception';\nimport { favoriteToggleResponseSchema } from '../schemas/favorites';\nimport { storedAgentIdPathParams } from '../schemas/stored-agents';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { assertReadAccess, getCallerAuthorId } from './authorship';\nimport { requireBuilderFeature } from './editor-builder';\nimport { handleError } from './error';\n\n/**\n * Resolves the storage and favorites domains, throwing 500 if unavailable.\n */\nasync function getFavoritesContext(mastra: Parameters<typeof requireBuilderFeature>[0]) {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n const agentStore = await storage.getStore('agents');\n if (!agentStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) {\n throw new HTTPException(500, { message: 'Favorites storage domain is not available' });\n }\n return { agentStore, favoritesStore };\n}\n\n/**\n * PUT /stored/agents/:storedAgentId/favorite\n */\nexport const FAVORITE_STORED_AGENT_ROUTE = createRoute({\n method: 'PUT',\n path: '/stored/agents/:storedAgentId/favorite',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Favorite a stored agent',\n description: 'Marks the stored agent as favorited by the calling user. Idempotent.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra, requestContext, storedAgentId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { agentStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const agent = await agentStore.getById(storedAgentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller cannot read the agent (private + not owner/admin).\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: agent });\n\n const result = await favoritesStore.favorite({\n userId: callerId,\n entityType: 'agent',\n entityId: storedAgentId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error favoriting stored agent');\n }\n },\n});\n\n/**\n * DELETE /stored/agents/:storedAgentId/favorite\n */\nexport const UNFAVORITE_STORED_AGENT_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/agents/:storedAgentId/favorite',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Unfavorite a stored agent',\n description: 'Removes the caller’s favorite from the stored agent. Idempotent.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra, requestContext, storedAgentId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { agentStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const agent = await agentStore.getById(storedAgentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: agent });\n\n const result = await favoritesStore.unfavorite({\n userId: callerId,\n entityType: 'agent',\n entityId: storedAgentId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error unfavoriting stored agent');\n }\n },\n});\n"]}
'use strict';
var chunk4JAXFPYO_cjs = require('./chunk-4JAXFPYO.cjs');
var chunkI5JCLVTK_cjs = require('./chunk-I5JCLVTK.cjs');
var v4 = require('zod/v4');
var listScorerVersionsQuerySchema = chunk4JAXFPYO_cjs.listVersionsQuerySchema;
var compareScorerVersionsQuerySchema = chunk4JAXFPYO_cjs.compareVersionsQuerySchema;
var createScorerVersionBodySchema = chunk4JAXFPYO_cjs.createVersionBodySchema;
var scorerVersionPathParams = v4.z.object({
scorerId: v4.z.string().describe("Unique identifier for the stored scorer definition")
});
var scorerVersionIdPathParams = v4.z.object({
scorerId: v4.z.string().describe("Unique identifier for the stored scorer definition"),
versionId: v4.z.string().describe("Unique identifier for the version (UUID)")
});
var samplingConfigSchema = v4.z.union([
v4.z.object({ type: v4.z.literal("none") }),
v4.z.object({ type: v4.z.literal("ratio"), rate: v4.z.number().min(0).max(1) })
]);
var scorerTypeEnum = v4.z.enum([
"llm-judge",
"answer-relevancy",
"answer-similarity",
"bias",
"context-precision",
"context-relevance",
"faithfulness",
"hallucination",
"noise-sensitivity",
"prompt-alignment",
"tool-call-accuracy",
"toxicity"
]);
var scorerVersionSchema = v4.z.object({
id: v4.z.string().describe("Unique identifier for the version (UUID)"),
scorerDefinitionId: v4.z.string().describe("ID of the scorer this version belongs to"),
versionNumber: v4.z.number().describe("Sequential version number (1, 2, 3, ...)"),
// Snapshot config fields
name: v4.z.string().describe("Name of the scorer"),
description: v4.z.string().optional().describe("Description of the scorer"),
type: scorerTypeEnum,
model: chunkI5JCLVTK_cjs.modelConfigSchema.optional(),
instructions: v4.z.string().optional(),
scoreRange: v4.z.object({
min: v4.z.number().optional(),
max: v4.z.number().optional()
}).optional(),
presetConfig: v4.z.record(v4.z.string(), v4.z.unknown()).optional(),
defaultSampling: samplingConfigSchema.optional(),
// Version metadata
changedFields: v4.z.array(v4.z.string()).optional().describe("Array of field names that changed from the previous version"),
changeMessage: v4.z.string().optional().describe("Optional message describing the changes"),
createdAt: v4.z.coerce.date().describe("When this version was created")
});
var listScorerVersionsResponseSchema = chunk4JAXFPYO_cjs.createListVersionsResponseSchema(scorerVersionSchema);
var getScorerVersionResponseSchema = scorerVersionSchema;
var createScorerVersionResponseSchema = scorerVersionSchema.partial().merge(
v4.z.object({
id: v4.z.string(),
scorerDefinitionId: v4.z.string(),
versionNumber: v4.z.number(),
createdAt: v4.z.coerce.date()
})
);
var activateScorerVersionResponseSchema = chunk4JAXFPYO_cjs.activateVersionResponseSchema;
var restoreScorerVersionResponseSchema = scorerVersionSchema;
var deleteScorerVersionResponseSchema = chunk4JAXFPYO_cjs.deleteVersionResponseSchema;
var compareScorerVersionsResponseSchema = chunk4JAXFPYO_cjs.createCompareVersionsResponseSchema(scorerVersionSchema);
exports.activateScorerVersionResponseSchema = activateScorerVersionResponseSchema;
exports.compareScorerVersionsQuerySchema = compareScorerVersionsQuerySchema;
exports.compareScorerVersionsResponseSchema = compareScorerVersionsResponseSchema;
exports.createScorerVersionBodySchema = createScorerVersionBodySchema;
exports.createScorerVersionResponseSchema = createScorerVersionResponseSchema;
exports.deleteScorerVersionResponseSchema = deleteScorerVersionResponseSchema;
exports.getScorerVersionResponseSchema = getScorerVersionResponseSchema;
exports.listScorerVersionsQuerySchema = listScorerVersionsQuerySchema;
exports.listScorerVersionsResponseSchema = listScorerVersionsResponseSchema;
exports.restoreScorerVersionResponseSchema = restoreScorerVersionResponseSchema;
exports.scorerVersionIdPathParams = scorerVersionIdPathParams;
exports.scorerVersionPathParams = scorerVersionPathParams;
exports.scorerVersionSchema = scorerVersionSchema;
//# sourceMappingURL=chunk-43E6JEA5.cjs.map
//# sourceMappingURL=chunk-43E6JEA5.cjs.map
{"version":3,"sources":["../src/server/schemas/scorer-versions.ts"],"names":["listVersionsQuerySchema","compareVersionsQuerySchema","createVersionBodySchema","z","modelConfigSchema","createListVersionsResponseSchema","activateVersionResponseSchema","deleteVersionResponseSchema","createCompareVersionsResponseSchema"],"mappings":"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","file":"chunk-43E6JEA5.cjs","sourcesContent":["import { z } from 'zod/v4';\nimport { modelConfigSchema } from './stored-agents';\nimport {\n listVersionsQuerySchema,\n compareVersionsQuerySchema,\n createVersionBodySchema,\n activateVersionResponseSchema,\n deleteVersionResponseSchema,\n versionDiffEntrySchema,\n createListVersionsResponseSchema,\n createCompareVersionsResponseSchema,\n} from './version-common';\n\n// Re-export shared schemas under domain-specific names\nexport const listScorerVersionsQuerySchema = listVersionsQuerySchema;\nexport const compareScorerVersionsQuerySchema = compareVersionsQuerySchema;\nexport const createScorerVersionBodySchema = createVersionBodySchema;\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\nexport const scorerVersionPathParams = z.object({\n scorerId: z.string().describe('Unique identifier for the stored scorer definition'),\n});\n\nexport const scorerVersionIdPathParams = z.object({\n scorerId: z.string().describe('Unique identifier for the stored scorer definition'),\n versionId: z.string().describe('Unique identifier for the version (UUID)'),\n});\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\nconst samplingConfigSchema = z.union([\n z.object({ type: z.literal('none') }),\n z.object({ type: z.literal('ratio'), rate: z.number().min(0).max(1) }),\n]);\n\nconst scorerTypeEnum = z.enum([\n 'llm-judge',\n 'answer-relevancy',\n 'answer-similarity',\n 'bias',\n 'context-precision',\n 'context-relevance',\n 'faithfulness',\n 'hallucination',\n 'noise-sensitivity',\n 'prompt-alignment',\n 'tool-call-accuracy',\n 'toxicity',\n]);\n\nexport const scorerVersionSchema = z.object({\n id: z.string().describe('Unique identifier for the version (UUID)'),\n scorerDefinitionId: z.string().describe('ID of the scorer this version belongs to'),\n versionNumber: z.number().describe('Sequential version number (1, 2, 3, ...)'),\n // Snapshot config fields\n name: z.string().describe('Name of the scorer'),\n description: z.string().optional().describe('Description of the scorer'),\n type: scorerTypeEnum,\n model: modelConfigSchema.optional(),\n instructions: z.string().optional(),\n scoreRange: z\n .object({\n min: z.number().optional(),\n max: z.number().optional(),\n })\n .optional(),\n presetConfig: z.record(z.string(), z.unknown()).optional(),\n defaultSampling: samplingConfigSchema.optional(),\n // Version metadata\n changedFields: z.array(z.string()).optional().describe('Array of field names that changed from the previous version'),\n changeMessage: z.string().optional().describe('Optional message describing the changes'),\n createdAt: z.coerce.date().describe('When this version was created'),\n});\n\nexport const listScorerVersionsResponseSchema = createListVersionsResponseSchema(scorerVersionSchema);\n\nexport const getScorerVersionResponseSchema = scorerVersionSchema;\n\nexport const createScorerVersionResponseSchema = scorerVersionSchema.partial().merge(\n z.object({\n id: z.string(),\n scorerDefinitionId: z.string(),\n versionNumber: z.number(),\n createdAt: z.coerce.date(),\n }),\n);\n\nexport const activateScorerVersionResponseSchema = activateVersionResponseSchema;\n\nexport const restoreScorerVersionResponseSchema = scorerVersionSchema;\n\nexport const deleteScorerVersionResponseSchema = deleteVersionResponseSchema;\n\nexport const compareScorerVersionsResponseSchema = createCompareVersionsResponseSchema(scorerVersionSchema);\n\nexport { versionDiffEntrySchema };\n"]}

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

'use strict';
var chunkKI6RMI7A_cjs = require('./chunk-KI6RMI7A.cjs');
var chunkWMS7BOP7_cjs = require('./chunk-WMS7BOP7.cjs');
// src/server/handlers/favorites-enrichment.ts
async function prepareFavoritesEnrichment(mastra, requestContext, entityType, entityIds) {
if (!await chunkKI6RMI7A_cjs.isBuilderFeatureEnabled(mastra, "favorites")) return null;
const userId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext);
if (!userId) return null;
const storage = mastra.getStorage();
if (!storage) return null;
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) return null;
const starredIds = entityIds.length === 0 ? /* @__PURE__ */ new Set() : await favoritesStore.isFavoritedBatch({ userId, entityType, entityIds });
return { userId, starredIds, favoritesStore };
}
function stripFavoriteFields(record) {
if ("isFavorited" in record || "favoriteCount" in record) {
const copy = { ...record };
delete copy.isFavorited;
delete copy.favoriteCount;
return copy;
}
return record;
}
async function enrichOrStripFavorites(mastra, requestContext, entityType, record) {
const enrichment = await prepareFavoritesEnrichment(mastra, requestContext, entityType, [record.id]);
if (enrichment) {
return { ...record, isFavorited: enrichment.starredIds.has(record.id) };
}
return stripFavoriteFields(record);
}
exports.enrichOrStripFavorites = enrichOrStripFavorites;
exports.prepareFavoritesEnrichment = prepareFavoritesEnrichment;
exports.stripFavoriteFields = stripFavoriteFields;
//# sourceMappingURL=chunk-5UUIMMDB.cjs.map
//# sourceMappingURL=chunk-5UUIMMDB.cjs.map
{"version":3,"sources":["../src/server/handlers/favorites-enrichment.ts"],"names":["isBuilderFeatureEnabled","getCallerAuthorId"],"mappings":";;;;;;AAyBA,eAAsB,0BAAA,CACpB,MAAA,EACA,cAAA,EACA,UAAA,EACA,SAAA,EACqC;AACrC,EAAA,IAAI,CAAE,MAAMA,yCAAA,CAAwB,MAAA,EAAQ,WAAW,GAAI,OAAO,IAAA;AAElE,EAAA,MAAM,MAAA,GAASC,oCAAkB,cAAc,CAAA;AAC/C,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,EAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAClC,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,MAAM,cAAA,GAAiB,MAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA;AACzD,EAAA,IAAI,CAAC,gBAAgB,OAAO,IAAA;AAE5B,EAAA,MAAM,UAAA,GACJ,SAAA,CAAU,MAAA,KAAW,CAAA,uBACb,GAAA,EAAY,GAChB,MAAM,cAAA,CAAe,gBAAA,CAAiB,EAAE,MAAA,EAAQ,UAAA,EAAY,WAAW,CAAA;AAC7E,EAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,cAAA,EAAe;AAC9C;AAMO,SAAS,oBAAsC,MAAA,EAAc;AAClE,EAAA,IAAI,aAAA,IAAiB,MAAA,IAAU,eAAA,IAAmB,MAAA,EAAQ;AACxD,IAAA,MAAM,IAAA,GAAO,EAAE,GAAG,MAAA,EAAO;AACzB,IAAA,OAAO,IAAA,CAAK,WAAA;AACZ,IAAA,OAAO,IAAA,CAAK,aAAA;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AASA,eAAsB,sBAAA,CACpB,MAAA,EACA,cAAA,EACA,UAAA,EACA,MAAA,EACY;AACZ,EAAA,MAAM,UAAA,GAAa,MAAM,0BAAA,CAA2B,MAAA,EAAQ,gBAAgB,UAAA,EAAY,CAAC,MAAA,CAAO,EAAE,CAAC,CAAA;AACnG,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,WAAA,EAAa,WAAW,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,EAAE;AAAA,EACxE;AACA,EAAA,OAAO,oBAAoB,MAAM,CAAA;AACnC","file":"chunk-5UUIMMDB.cjs","sourcesContent":["import type { Mastra } from '@mastra/core';\nimport type { RequestContext } from '@mastra/core/di';\nimport type { FavoritesStorage, StorageFavoriteEntityType } from '@mastra/core/storage';\n\nimport { getCallerAuthorId } from './authorship';\nimport { isBuilderFeatureEnabled } from './editor-builder';\n\n/**\n * Result of `prepareFavoritesEnrichment` — `null` when the `favorites` EE feature is off.\n * When non-null the caller may use `starredIds` to set `isFavorited` on records\n * and may pass `userId` along to storage list paths for pin-favorited-first\n * sorting (`pinFavoritedFor`).\n */\nexport type FavoritesEnrichmentContext = {\n userId: string;\n starredIds: Set<string>;\n favoritesStore: FavoritesStorage;\n} | null;\n\n/**\n * Resolve the EE feature flag plus the caller's favorited set for a list of\n * candidate entity IDs in one shot. Soft-gated: returns `null` if the feature\n * is off or there's no caller — handlers should drop `isFavorited` / `favoriteCount`\n * fields and ignore `?favoritedOnly=true` in that case.\n */\nexport async function prepareFavoritesEnrichment(\n mastra: Mastra,\n requestContext: RequestContext,\n entityType: StorageFavoriteEntityType,\n entityIds: string[],\n): Promise<FavoritesEnrichmentContext> {\n if (!(await isBuilderFeatureEnabled(mastra, 'favorites'))) return null;\n\n const userId = getCallerAuthorId(requestContext);\n if (!userId) return null;\n\n const storage = mastra.getStorage();\n if (!storage) return null;\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) return null;\n\n const starredIds =\n entityIds.length === 0\n ? new Set<string>()\n : await favoritesStore.isFavoritedBatch({ userId, entityType, entityIds });\n return { userId, starredIds, favoritesStore };\n}\n\n/**\n * Strip the favorites EE fields from a record. Used when the feature is off so\n * stale values from storage do not leak through the API.\n */\nexport function stripFavoriteFields<T extends object>(record: T): T {\n if ('isFavorited' in record || 'favoriteCount' in record) {\n const copy = { ...record } as Record<string, unknown>;\n delete copy.isFavorited;\n delete copy.favoriteCount;\n return copy as T;\n }\n return record;\n}\n\n/**\n * Convenience for single-entity handlers (GET / POST / PATCH): annotate\n * `isFavorited` from the caller's favorites set when enrichment is available,\n * otherwise strip both favorite fields. `favoriteCount` is the canonical\n * mirrored counter and is left in place so callers can render share-count UI\n * (it's identical across viewers).\n */\nexport async function enrichOrStripFavorites<T extends { id: string }>(\n mastra: Mastra,\n requestContext: RequestContext,\n entityType: StorageFavoriteEntityType,\n record: T,\n): Promise<T> {\n const enrichment = await prepareFavoritesEnrichment(mastra, requestContext, entityType, [record.id]);\n if (enrichment) {\n return { ...record, isFavorited: enrichment.starredIds.has(record.id) };\n }\n return stripFavoriteFields(record);\n}\n"]}
import { createListVersionsResponseSchema, createCompareVersionsResponseSchema } from './chunk-FXXHWBF2.js';
import { toolConfigSchema, instructionsSchema, conditionalFieldSchema, scorerConfigSchema, serializedMemoryConfigSchema, storedProcessorGraphSchema, toolsConfigSchema, modelConfigSchema } from './chunk-HCCTSODR.js';
import { defaultOptionsSchema } from './chunk-TKP6FJQ3.js';
import { z } from 'zod/v4';
var mcpClientToolsConfigSchema = z.object({
tools: z.record(z.string(), toolConfigSchema).optional()
});
var agentVersionPathParams = z.object({
agentId: z.string().describe("Unique identifier for the stored agent")
});
var versionIdPathParams = z.object({
agentId: z.string().describe("Unique identifier for the stored agent"),
versionId: z.string().describe("Unique identifier for the version (UUID)")
});
var agentVersionSchema = z.object({
id: z.string().describe("Unique identifier for the version (UUID)"),
agentId: z.string().describe("ID of the agent this version belongs to"),
versionNumber: z.number().describe("Sequential version number (1, 2, 3, ...)"),
// Top-level config fields (from StorageAgentSnapshotType)
name: z.string().describe("Name of the agent"),
description: z.string().optional().describe("Description of the agent"),
instructions: instructionsSchema,
model: conditionalFieldSchema(modelConfigSchema).describe(
"Model configuration \u2014 static value or array of conditional variants"
),
tools: conditionalFieldSchema(toolsConfigSchema).optional().describe("Tool keys mapped to per-tool config \u2014 static or conditional"),
defaultOptions: conditionalFieldSchema(defaultOptionsSchema).optional().describe("Default options for generate/stream calls \u2014 static or conditional"),
workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema)).optional().describe("Workflow keys with optional per-workflow config \u2014 static or conditional"),
agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema)).optional().describe("Agent keys with optional per-agent config \u2014 static or conditional"),
integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of tool provider IDs to their tool configurations \u2014 static or conditional"),
mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of stored MCP client IDs to their tool configurations \u2014 static or conditional"),
inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Input processor graph \u2014 static or conditional"),
outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Output processor graph \u2014 static or conditional"),
memory: conditionalFieldSchema(serializedMemoryConfigSchema).optional().describe("Memory configuration \u2014 static or conditional"),
scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema)).optional().describe("Scorer keys with optional sampling config \u2014 static or conditional"),
requestContextSchema: z.record(z.string(), z.unknown()).optional().describe("JSON Schema defining valid request context variables"),
// Version metadata fields
changedFields: z.array(z.string()).optional().describe("Array of field names that changed from the previous version"),
changeMessage: z.string().optional().describe("Optional message describing the changes"),
createdAt: z.coerce.date().describe("When this version was created")
});
var listVersionsResponseSchema = createListVersionsResponseSchema(agentVersionSchema);
var getVersionResponseSchema = agentVersionSchema;
var createVersionResponseSchema = agentVersionSchema.partial().merge(
z.object({
// These fields are always present in a version response
id: z.string().describe("Unique identifier for the version (UUID)"),
agentId: z.string().describe("ID of the agent this version belongs to"),
versionNumber: z.number().describe("Sequential version number (1, 2, 3, ...)"),
createdAt: z.coerce.date().describe("When this version was created")
})
);
var restoreVersionResponseSchema = agentVersionSchema.describe(
"The newly created version from the restored configuration"
);
var compareVersionsResponseSchema = createCompareVersionsResponseSchema(agentVersionSchema);
export { agentVersionPathParams, agentVersionSchema, compareVersionsResponseSchema, createVersionResponseSchema, getVersionResponseSchema, listVersionsResponseSchema, restoreVersionResponseSchema, versionIdPathParams };
//# sourceMappingURL=chunk-6K5XWD5Q.js.map
//# sourceMappingURL=chunk-6K5XWD5Q.js.map
{"version":3,"sources":["../src/server/schemas/agent-versions.ts"],"names":[],"mappings":"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","file":"chunk-6K5XWD5Q.js","sourcesContent":["import { z } from 'zod/v4';\nimport { defaultOptionsSchema } from './default-options';\nimport { serializedMemoryConfigSchema } from './memory-config';\nimport {\n scorerConfigSchema,\n instructionsSchema,\n conditionalFieldSchema,\n modelConfigSchema,\n toolConfigSchema,\n toolsConfigSchema,\n storedProcessorGraphSchema,\n} from './stored-agents';\nimport {\n listVersionsQuerySchema,\n compareVersionsQuerySchema,\n createVersionBodySchema,\n activateVersionResponseSchema,\n deleteVersionResponseSchema,\n versionDiffEntrySchema,\n createListVersionsResponseSchema,\n createCompareVersionsResponseSchema,\n} from './version-common';\n\nconst mcpClientToolsConfigSchema = z.object({\n tools: z.record(z.string(), toolConfigSchema).optional(),\n});\n\n// Re-export shared schemas for backwards compat\nexport {\n listVersionsQuerySchema,\n compareVersionsQuerySchema,\n createVersionBodySchema,\n activateVersionResponseSchema,\n deleteVersionResponseSchema,\n versionDiffEntrySchema,\n};\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\n/**\n * Path parameters for agent version routes\n */\nexport const agentVersionPathParams = z.object({\n agentId: z.string().describe('Unique identifier for the stored agent'),\n});\n\n/**\n * Path parameters for specific version routes\n */\nexport const versionIdPathParams = z.object({\n agentId: z.string().describe('Unique identifier for the stored agent'),\n versionId: z.string().describe('Unique identifier for the version (UUID)'),\n});\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\n/**\n * Agent version object schema (full response)\n * Config fields are top-level on the version (no nested snapshot object).\n * Extends StorageAgentSnapshotType fields.\n */\nexport const agentVersionSchema = z.object({\n id: z.string().describe('Unique identifier for the version (UUID)'),\n agentId: z.string().describe('ID of the agent this version belongs to'),\n versionNumber: z.number().describe('Sequential version number (1, 2, 3, ...)'),\n // Top-level config fields (from StorageAgentSnapshotType)\n name: z.string().describe('Name of the agent'),\n description: z.string().optional().describe('Description of the agent'),\n instructions: instructionsSchema,\n model: conditionalFieldSchema(modelConfigSchema).describe(\n 'Model configuration — static value or array of conditional variants',\n ),\n tools: conditionalFieldSchema(toolsConfigSchema)\n .optional()\n .describe('Tool keys mapped to per-tool config — static or conditional'),\n defaultOptions: conditionalFieldSchema(defaultOptionsSchema)\n .optional()\n .describe('Default options for generate/stream calls — static or conditional'),\n workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Workflow keys with optional per-workflow config — static or conditional'),\n agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Agent keys with optional per-agent config — static or conditional'),\n integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of tool provider IDs to their tool configurations — static or conditional'),\n mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of stored MCP client IDs to their tool configurations — static or conditional'),\n inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Input processor graph — static or conditional'),\n outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Output processor graph — static or conditional'),\n memory: conditionalFieldSchema(serializedMemoryConfigSchema)\n .optional()\n .describe('Memory configuration — static or conditional'),\n scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema))\n .optional()\n .describe('Scorer keys with optional sampling config — static or conditional'),\n requestContextSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('JSON Schema defining valid request context variables'),\n // Version metadata fields\n changedFields: z.array(z.string()).optional().describe('Array of field names that changed from the previous version'),\n changeMessage: z.string().optional().describe('Optional message describing the changes'),\n createdAt: z.coerce.date().describe('When this version was created'),\n});\n\n/**\n * Response for GET /stored/agents/:agentId/versions\n */\nexport const listVersionsResponseSchema = createListVersionsResponseSchema(agentVersionSchema);\n\n/**\n * Response for GET /stored/agents/:agentId/versions/:versionId\n */\nexport const getVersionResponseSchema = agentVersionSchema;\n\n/**\n * Response for POST /stored/agents/:agentId/versions\n */\nexport const createVersionResponseSchema = agentVersionSchema.partial().merge(\n z.object({\n // These fields are always present in a version response\n id: z.string().describe('Unique identifier for the version (UUID)'),\n agentId: z.string().describe('ID of the agent this version belongs to'),\n versionNumber: z.number().describe('Sequential version number (1, 2, 3, ...)'),\n createdAt: z.coerce.date().describe('When this version was created'),\n }),\n);\n\n/**\n * Response for POST /stored/agents/:agentId/versions/:versionId/restore\n */\nexport const restoreVersionResponseSchema = agentVersionSchema.describe(\n 'The newly created version from the restored configuration',\n);\n\n/**\n * Response for GET /stored/agents/:agentId/versions/compare\n */\nexport const compareVersionsResponseSchema: ReturnType<\n typeof createCompareVersionsResponseSchema<typeof agentVersionSchema>\n> = createCompareVersionsResponseSchema(agentVersionSchema);\n"]}
import { conversationObjectSchema, createConversationBodySchema, conversationIdPathParams, conversationItemsListSchema, conversationDeletedSchema } from './chunk-JF6VE6ZA.js';
import { mapMastraMessagesToConversationItems } from './chunk-TLLV2JP5.js';
import { getAgentMemoryStore, findConversationThreadAcrossAgents } from './chunk-SPNWC52V.js';
import { getAgentFromSystem } from './chunk-4AGRNM7F.js';
import { MastraFGAPermissions, getEffectiveResourceId } from './chunk-A7APTIYJ.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
import { __export } from './chunk-PR4QN5HX.js';
import { randomUUID } from 'crypto';
// src/server/handlers/conversations.ts
var conversations_exports = {};
__export(conversations_exports, {
CREATE_CONVERSATION_ROUTE: () => CREATE_CONVERSATION_ROUTE,
DELETE_CONVERSATION_ROUTE: () => DELETE_CONVERSATION_ROUTE,
GET_CONVERSATION_ITEMS_ROUTE: () => GET_CONVERSATION_ITEMS_ROUTE,
GET_CONVERSATION_ROUTE: () => GET_CONVERSATION_ROUTE
});
function buildConversationObject({ thread }) {
return {
id: thread.id,
object: "conversation",
thread
};
}
function buildConversationItemsList(items) {
return {
object: "list",
data: items,
first_id: items[0]?.id ?? null,
last_id: items.at(-1)?.id ?? null,
has_more: false
};
}
function buildConversationDeleted(conversationId) {
return {
id: conversationId,
object: "conversation.deleted",
deleted: true
};
}
var CREATE_CONVERSATION_ROUTE = createRoute({
method: "POST",
path: "/v1/conversations",
responseType: "json",
bodySchema: createConversationBodySchema,
responseSchema: conversationObjectSchema,
summary: "Create a conversation",
description: "Creates a new thread-backed conversation for agent-backed Responses API requests",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: MastraFGAPermissions.AGENTS_CREATE,
handler: async ({ mastra, requestContext, agent_id, conversation_id, resource_id, title, metadata }) => {
try {
if (!mastra) {
throw new HTTPException(500, { message: "Mastra instance is required for conversations" });
}
const agent = await getAgentFromSystem({ mastra, agentId: agent_id });
const memory = await agent.getMemory({ requestContext });
if (!memory) {
throw new HTTPException(400, { message: `Agent "${agent.id}" does not have memory configured` });
}
if (!await getAgentMemoryStore({ agent, requestContext })) {
throw new HTTPException(400, { message: `Memory storage is not configured for agent "${agent.id}"` });
}
const threadId = conversation_id ?? randomUUID();
const resourceId = getEffectiveResourceId(requestContext, resource_id) ?? threadId;
const thread = await memory.createThread({
threadId,
resourceId,
title,
metadata
});
return buildConversationObject({ thread });
} catch (error) {
return handleError(error, "Error creating conversation");
}
}
});
var GET_CONVERSATION_ROUTE = createRoute({
method: "GET",
path: "/v1/conversations/:conversationId",
responseType: "json",
pathParamSchema: conversationIdPathParams,
responseSchema: conversationObjectSchema,
summary: "Retrieve a conversation",
description: "Returns a conversation object backed by a Mastra memory thread",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });
if (!match) {
throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });
}
return buildConversationObject({ thread: match.thread });
} catch (error) {
return handleError(error, "Error retrieving conversation");
}
}
});
var GET_CONVERSATION_ITEMS_ROUTE = createRoute({
method: "GET",
path: "/v1/conversations/:conversationId/items",
responseType: "json",
pathParamSchema: conversationIdPathParams,
responseSchema: conversationItemsListSchema,
summary: "List conversation items",
description: "Returns OpenAI-style conversation items derived from the stored thread messages",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });
if (!match) {
throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });
}
const { messages } = await match.memoryStore.listMessages({
threadId: conversationId,
page: 0,
perPage: 1e3
});
return buildConversationItemsList(mapMastraMessagesToConversationItems(messages));
} catch (error) {
return handleError(error, "Error retrieving conversation");
}
}
});
var DELETE_CONVERSATION_ROUTE = createRoute({
method: "DELETE",
path: "/v1/conversations/:conversationId",
responseType: "json",
pathParamSchema: conversationIdPathParams,
responseSchema: conversationDeletedSchema,
summary: "Delete a conversation",
description: "Deletes a thread-backed conversation and its stored items",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: MastraFGAPermissions.AGENTS_DELETE,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });
if (!match) {
throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });
}
await match.memoryStore.deleteThread({ threadId: conversationId });
return buildConversationDeleted(conversationId);
} catch (error) {
return handleError(error, "Error deleting conversation");
}
}
});
export { CREATE_CONVERSATION_ROUTE, DELETE_CONVERSATION_ROUTE, GET_CONVERSATION_ITEMS_ROUTE, GET_CONVERSATION_ROUTE, conversations_exports };
//# sourceMappingURL=chunk-6POMTBSS.js.map
//# sourceMappingURL=chunk-6POMTBSS.js.map
{"version":3,"sources":["../src/server/handlers/conversations.ts"],"names":[],"mappings":"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","file":"chunk-6POMTBSS.js","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n conversationDeletedSchema,\n conversationIdPathParams,\n conversationItemsListSchema,\n conversationObjectSchema,\n createConversationBodySchema,\n} from '../schemas/conversations';\nimport type { ConversationDeleted, ConversationItemsList, ConversationObject } from '../schemas/conversations';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\nimport { mapMastraMessagesToConversationItems } from './responses.adapter';\nimport { findConversationThreadAcrossAgents, getAgentMemoryStore } from './responses.storage';\nimport { getEffectiveResourceId } from './utils';\n\nfunction buildConversationObject({ thread }: { thread: ConversationObject['thread'] }): ConversationObject {\n return {\n id: thread.id,\n object: 'conversation',\n thread,\n };\n}\n\nfunction buildConversationItemsList(items: ConversationItemsList['data']): ConversationItemsList {\n return {\n object: 'list',\n data: items,\n first_id: items[0]?.id ?? null,\n last_id: items.at(-1)?.id ?? null,\n has_more: false,\n };\n}\n\nfunction buildConversationDeleted(conversationId: string): ConversationDeleted {\n return {\n id: conversationId,\n object: 'conversation.deleted',\n deleted: true,\n };\n}\n\nexport const CREATE_CONVERSATION_ROUTE = createRoute({\n method: 'POST',\n path: '/v1/conversations',\n responseType: 'json',\n bodySchema: createConversationBodySchema,\n responseSchema: conversationObjectSchema,\n summary: 'Create a conversation',\n description: 'Creates a new thread-backed conversation for agent-backed Responses API requests',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_CREATE,\n handler: async ({ mastra, requestContext, agent_id, conversation_id, resource_id, title, metadata }) => {\n try {\n if (!mastra) {\n throw new HTTPException(500, { message: 'Mastra instance is required for conversations' });\n }\n\n const agent = await getAgentFromSystem({ mastra, agentId: agent_id });\n const memory = await agent.getMemory({ requestContext });\n if (!memory) {\n throw new HTTPException(400, { message: `Agent \"${agent.id}\" does not have memory configured` });\n }\n if (!(await getAgentMemoryStore({ agent, requestContext }))) {\n throw new HTTPException(400, { message: `Memory storage is not configured for agent \"${agent.id}\"` });\n }\n\n const threadId = conversation_id ?? randomUUID();\n const resourceId = getEffectiveResourceId(requestContext, resource_id) ?? threadId;\n const thread = await memory.createThread({\n threadId,\n resourceId,\n title,\n metadata,\n });\n\n return buildConversationObject({ thread });\n } catch (error) {\n return handleError(error, 'Error creating conversation');\n }\n },\n});\n\nexport const GET_CONVERSATION_ROUTE = createRoute({\n method: 'GET',\n path: '/v1/conversations/:conversationId',\n responseType: 'json',\n pathParamSchema: conversationIdPathParams,\n responseSchema: conversationObjectSchema,\n summary: 'Retrieve a conversation',\n description: 'Returns a conversation object backed by a Mastra memory thread',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_READ,\n handler: async ({ mastra, requestContext, conversationId }) => {\n try {\n const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });\n if (!match) {\n throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });\n }\n\n return buildConversationObject({ thread: match.thread });\n } catch (error) {\n return handleError(error, 'Error retrieving conversation');\n }\n },\n});\n\nexport const GET_CONVERSATION_ITEMS_ROUTE = createRoute({\n method: 'GET',\n path: '/v1/conversations/:conversationId/items',\n responseType: 'json',\n pathParamSchema: conversationIdPathParams,\n responseSchema: conversationItemsListSchema,\n summary: 'List conversation items',\n description: 'Returns OpenAI-style conversation items derived from the stored thread messages',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_READ,\n handler: async ({ mastra, requestContext, conversationId }) => {\n try {\n const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });\n if (!match) {\n throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });\n }\n\n const { messages } = await match.memoryStore.listMessages({\n threadId: conversationId,\n page: 0,\n perPage: 1000,\n });\n\n return buildConversationItemsList(mapMastraMessagesToConversationItems(messages));\n } catch (error) {\n return handleError(error, 'Error retrieving conversation');\n }\n },\n});\n\nexport const DELETE_CONVERSATION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/v1/conversations/:conversationId',\n responseType: 'json',\n pathParamSchema: conversationIdPathParams,\n responseSchema: conversationDeletedSchema,\n summary: 'Delete a conversation',\n description: 'Deletes a thread-backed conversation and its stored items',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_DELETE,\n handler: async ({ mastra, requestContext, conversationId }) => {\n try {\n const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });\n if (!match) {\n throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });\n }\n\n await match.memoryStore.deleteThread({ threadId: conversationId });\n\n return buildConversationDeleted(conversationId);\n } catch (error) {\n return handleError(error, 'Error deleting conversation');\n }\n },\n});\n"]}
'use strict';
var chunkP2X2Q6N6_cjs = require('./chunk-P2X2Q6N6.cjs');
var chunk5UUIMMDB_cjs = require('./chunk-5UUIMMDB.cjs');
var chunkKI6RMI7A_cjs = require('./chunk-KI6RMI7A.cjs');
var chunkWMS7BOP7_cjs = require('./chunk-WMS7BOP7.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
var workspace = require('@mastra/core/workspace');
var INDEXED_FOLDERS = ["references", "scripts", "assets"];
function extractIndexedPathsFromFiles(files, existing) {
if (!files || files.length === 0) return {};
const root = files.find((n) => n.type === "folder");
if (!root?.children) return {};
const result = {};
for (const folderName of INDEXED_FOLDERS) {
const folder = root.children.find((n) => n.type === "folder" && n.name === folderName);
if (!folder?.children || folder.children.length === 0) continue;
const existingPaths = new Set(existing[folderName] ?? []);
const paths = [...existingPaths];
collectFilePaths(folder.children, folderName, existingPaths, paths);
if (paths.length > 0) {
result[folderName] = paths;
}
}
return result;
}
function collectFilePaths(nodes, prefix, existingPaths, out) {
for (const node of nodes) {
if (node.type === "file") {
const relativePath = `${prefix}/${node.name}`;
if (!existingPaths.has(relativePath)) {
out.push(relativePath);
}
} else if (node.type === "folder" && node.children) {
collectFilePaths(node.children, `${prefix}/${node.name}`, existingPaths, out);
}
}
}
var LIST_STORED_SKILLS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/skills",
responseType: "json",
queryParamSchema: chunkP2X2Q6N6_cjs.listStoredSkillsQuerySchema,
responseSchema: chunkP2X2Q6N6_cjs.listStoredSkillsResponseSchema,
summary: "List stored skills",
description: "Returns a paginated list of all skill configurations stored in the database",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
page,
perPage,
orderBy,
status,
authorId,
visibility,
metadata,
favoritedOnly,
pinFavoritedFor
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Skills storage domain is not available" });
}
const filter = chunkWMS7BOP7_cjs.resolveAuthorFilter({
requestContext,
resource: "stored-skills",
queryAuthorId: authorId,
queryVisibility: visibility
});
const scope = await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext);
const scopedMetadata = chunkEVOVAWN6_cjs.scopeStoredResourceMetadata(metadata, scope);
const callerId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext);
const favoritesEnabled = await chunkKI6RMI7A_cjs.isBuilderFeatureEnabled(mastra, "favorites");
const honoredStarredOnly = favoritesEnabled && favoritedOnly === true;
const favoriteSubjectId = pinFavoritedFor ?? callerId;
if (honoredStarredOnly) {
const effectivePerPage = perPage ?? 100;
if (!favoriteSubjectId) {
return { skills: [], total: 0, page, perPage: effectivePerPage, hasMore: false };
}
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Favorites storage domain is not available" });
}
const starredIds = await favoritesStore.listFavoritedIds({ userId: favoriteSubjectId, entityType: "skill" });
if (starredIds.length === 0) {
return { skills: [], total: 0, page, perPage: effectivePerPage, hasMore: false };
}
const allMatching = await skillStore.listResolved({
perPage: false,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata,
entityIds: starredIds
});
const visible = allMatching.skills.filter((record) => chunkWMS7BOP7_cjs.matchesAuthorFilter(record, filter));
const total = visible.length;
const startIdx = effectivePerPage === 0 ? 0 : page * effectivePerPage;
const endIdx = effectivePerPage === 0 ? 0 : startIdx + effectivePerPage;
const sliced = effectivePerPage === 0 ? [] : visible.slice(startIdx, endIdx);
const annotated2 = sliced.map((record) => ({ ...record, isFavorited: true }));
const hasMore = effectivePerPage > 0 && endIdx < total;
return {
skills: annotated2,
total,
page,
perPage: effectivePerPage,
hasMore
};
}
const result = await skillStore.listResolved({
page,
perPage,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata
});
const visibleSkills = result.skills.filter((record) => chunkWMS7BOP7_cjs.matchesAuthorFilter(record, filter));
if (!favoritesEnabled) {
return { ...result, skills: visibleSkills.map(chunk5UUIMMDB_cjs.stripFavoriteFields) };
}
const enrichment = await chunk5UUIMMDB_cjs.prepareFavoritesEnrichment(
mastra,
requestContext,
"skill",
visibleSkills.map((s) => s.id)
);
const annotated = enrichment ? visibleSkills.map((record) => ({ ...record, isFavorited: enrichment.starredIds.has(record.id) })) : visibleSkills.map(chunk5UUIMMDB_cjs.stripFavoriteFields);
return { ...result, skills: annotated };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing stored skills");
}
}
});
var GET_STORED_SKILL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: chunkP2X2Q6N6_cjs.storedSkillIdPathParams,
responseSchema: chunkP2X2Q6N6_cjs.getStoredSkillResponseSchema,
summary: "Get stored skill by ID",
description: "Returns a specific skill from storage by its unique identifier (resolved with active version config)",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedSkillId }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Skills storage domain is not available" });
}
const skill = await skillStore.getByIdResolved(storedSkillId);
if (!skill) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(skill, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-skills", resourceId: storedSkillId, record: skill });
return chunk5UUIMMDB_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", skill);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting stored skill");
}
}
});
var CREATE_STORED_SKILL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/skills",
responseType: "json",
bodySchema: chunkP2X2Q6N6_cjs.createStoredSkillBodySchema,
responseSchema: chunkP2X2Q6N6_cjs.createStoredSkillResponseSchema,
summary: "Create stored skill",
description: "Creates a new skill configuration in storage with the provided details",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
id: providedId,
name,
description,
instructions,
license,
compatibility,
source,
references,
scripts,
assets,
files,
metadata,
visibility: bodyVisibility
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Skills storage domain is not available" });
}
const id = providedId || chunkEVOVAWN6_cjs.toSlug(name);
if (!id) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "Could not derive skill ID from name. Please provide an explicit id."
});
}
const existing = await skillStore.getById(id);
if (existing) {
throw new chunk64ITUOXI_cjs.HTTPException(409, { message: `Skill with id ${id} already exists` });
}
const authorId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext) ?? void 0;
const visibility = authorId ? bodyVisibility ?? "private" : "public";
const indexedPaths = extractIndexedPathsFromFiles(files, { references, scripts, assets });
await skillStore.create({
skill: {
id,
authorId,
visibility,
name,
description,
instructions,
license,
compatibility,
source,
references: indexedPaths.references ?? references,
scripts: indexedPaths.scripts ?? scripts,
assets: indexedPaths.assets ?? assets,
files,
metadata: chunkEVOVAWN6_cjs.scopeStoredResourceMetadata(metadata, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext))
}
});
const resolved = await skillStore.getByIdResolved(id);
if (!resolved) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to resolve created skill" });
}
return chunk5UUIMMDB_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating stored skill");
}
}
});
var UPDATE_STORED_SKILL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "PATCH",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: chunkP2X2Q6N6_cjs.storedSkillIdPathParams,
bodySchema: chunkP2X2Q6N6_cjs.updateStoredSkillBodySchema,
responseSchema: chunkP2X2Q6N6_cjs.updateStoredSkillResponseSchema,
summary: "Update stored skill",
description: "Updates an existing skill in storage with the provided fields",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
storedSkillId,
// Entity-level fields
authorId,
visibility,
// Config fields (snapshot-level)
name,
description,
instructions,
license,
compatibility,
source,
references,
scripts,
assets,
files,
metadata
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Skills storage domain is not available" });
}
const existing = await skillStore.getByIdResolved(storedSkillId);
if (!existing) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
const scope = await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext);
chunkEVOVAWN6_cjs.assertStoredResourceScope(existing, scope);
chunkWMS7BOP7_cjs.assertWriteAccess({
requestContext,
resource: "stored-skills",
resourceId: storedSkillId,
action: "edit",
record: existing
});
const callerAuthorId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext) ?? void 0;
const resolvedVisibility = callerAuthorId ? visibility : visibility != null ? "public" : void 0;
const indexedPaths = files ? extractIndexedPathsFromFiles(files, { references, scripts, assets }) : {};
const update = { id: storedSkillId };
if (authorId !== void 0) update.authorId = authorId;
if (resolvedVisibility !== void 0) update.visibility = resolvedVisibility;
if (name !== void 0) update.name = name;
if (description !== void 0) update.description = description;
if (instructions !== void 0) update.instructions = instructions;
if (license !== void 0) update.license = license;
if (compatibility !== void 0) update.compatibility = compatibility;
if (source !== void 0) update.source = source;
const resolvedReferences = indexedPaths.references ?? references;
const resolvedScripts = indexedPaths.scripts ?? scripts;
const resolvedAssets = indexedPaths.assets ?? assets;
if (resolvedReferences !== void 0) update.references = resolvedReferences;
if (resolvedScripts !== void 0) update.scripts = resolvedScripts;
if (resolvedAssets !== void 0) update.assets = resolvedAssets;
if (files !== void 0) update.files = files;
if (metadata !== void 0) {
update.metadata = chunkEVOVAWN6_cjs.scopeStoredResourceMetadata({ ...existing.metadata ?? {}, ...metadata }, scope);
}
await skillStore.update(update);
const resolved = await skillStore.getByIdResolved(storedSkillId);
if (!resolved) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to resolve updated skill" });
}
return chunk5UUIMMDB_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error updating stored skill");
}
}
});
var DELETE_STORED_SKILL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: chunkP2X2Q6N6_cjs.storedSkillIdPathParams,
responseSchema: chunkP2X2Q6N6_cjs.deleteStoredSkillResponseSchema,
summary: "Delete stored skill",
description: "Deletes a skill from storage by its unique identifier",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedSkillId }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Skills storage domain is not available" });
}
const existing = await skillStore.getByIdResolved(storedSkillId);
if (!existing) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(existing, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertWriteAccess({
requestContext,
resource: "stored-skills",
resourceId: storedSkillId,
action: "delete",
record: existing
});
await skillStore.delete(storedSkillId);
try {
const favoritesStore = await storage.getStore("favorites");
await favoritesStore?.deleteFavoritesForEntity({ entityType: "skill", entityId: storedSkillId });
} catch (cascadeError) {
mastra.getLogger?.()?.warn?.("Failed to cascade-delete favorites for skill", { storedSkillId, error: cascadeError });
}
return {
success: true,
message: `Skill ${storedSkillId} deleted successfully`
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error deleting stored skill");
}
}
});
var PUBLISH_STORED_SKILL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/skills/:storedSkillId/publish",
responseType: "json",
pathParamSchema: chunkP2X2Q6N6_cjs.storedSkillIdPathParams,
bodySchema: chunkP2X2Q6N6_cjs.publishStoredSkillBodySchema,
responseSchema: chunkP2X2Q6N6_cjs.publishStoredSkillResponseSchema,
summary: "Publish stored skill",
description: "Snapshots the skill directory from the filesystem into content-addressable blob storage, creates a new version with a tree manifest, and marks the skill as published",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedSkillId, skillPath }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Skills storage domain is not available" });
}
const blobStore = await storage.getStore("blobs");
if (!blobStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Blob storage domain is not available" });
}
const existing = await skillStore.getByIdResolved(storedSkillId);
if (!existing) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(existing, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertWriteAccess({
requestContext,
resource: "stored-skills",
resourceId: storedSkillId,
action: "edit",
record: existing
});
const path = await import('path');
const fs = await import('fs/promises');
const resolvedPath = path.default.resolve(skillPath);
const allowedBase = path.default.resolve(process.env.SKILLS_BASE_DIR || process.cwd());
if (!resolvedPath.startsWith(allowedBase + path.default.sep) && resolvedPath !== allowedBase) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: `skillPath must be within the allowed directory: ${allowedBase}`
});
}
try {
const stat = await fs.stat(resolvedPath);
if (!stat.isDirectory()) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `skillPath is not a directory: ${resolvedPath}` });
}
} catch (err) {
if (err instanceof chunk64ITUOXI_cjs.HTTPException) throw err;
if (err?.code === "ENOENT") {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: `skillPath does not exist on the server filesystem: ${resolvedPath}. Create the skill directory (with a SKILL.md) before publishing, or use a skill that was materialized to disk.`
});
}
throw err;
}
try {
await fs.stat(path.default.join(resolvedPath, "SKILL.md"));
} catch (err) {
if (err?.code === "ENOENT") {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: `skillPath is missing SKILL.md: ${resolvedPath}`
});
}
throw err;
}
const source = new workspace.LocalSkillSource();
const { publishSkillFromSource } = await import('@mastra/core/workspace');
const { snapshot, tree, files } = await publishSkillFromSource(source, resolvedPath, blobStore);
const snapshotUpdate = {};
for (const [key, value] of Object.entries(snapshot)) {
if (value !== void 0) snapshotUpdate[key] = value;
}
await skillStore.update({
id: storedSkillId,
...snapshotUpdate,
tree,
files,
status: "published"
});
const latestVersion = await skillStore.getLatestVersion(storedSkillId);
if (latestVersion) {
await skillStore.update({
id: storedSkillId,
activeVersionId: latestVersion.id
});
}
const resolved = await skillStore.getByIdResolved(storedSkillId);
if (!resolved) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to resolve skill after publish" });
}
return chunk5UUIMMDB_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error publishing stored skill");
}
}
});
exports.CREATE_STORED_SKILL_ROUTE = CREATE_STORED_SKILL_ROUTE;
exports.DELETE_STORED_SKILL_ROUTE = DELETE_STORED_SKILL_ROUTE;
exports.GET_STORED_SKILL_ROUTE = GET_STORED_SKILL_ROUTE;
exports.LIST_STORED_SKILLS_ROUTE = LIST_STORED_SKILLS_ROUTE;
exports.PUBLISH_STORED_SKILL_ROUTE = PUBLISH_STORED_SKILL_ROUTE;
exports.UPDATE_STORED_SKILL_ROUTE = UPDATE_STORED_SKILL_ROUTE;
//# sourceMappingURL=chunk-7KFYDYFN.cjs.map
//# sourceMappingURL=chunk-7KFYDYFN.cjs.map
{"version":3,"sources":["../src/server/handlers/stored-skills.ts"],"names":["createRoute","listStoredSkillsQuerySchema","listStoredSkillsResponseSchema","HTTPException","resolveAuthorFilter","getStoredResourceScope","scopeStoredResourceMetadata","getCallerAuthorId","isBuilderFeatureEnabled","matchesAuthorFilter","annotated","stripFavoriteFields","prepareFavoritesEnrichment","handleError","storedSkillIdPathParams","getStoredSkillResponseSchema","assertStoredResourceScope","assertReadAccess","enrichOrStripFavorites","createStoredSkillBodySchema","createStoredSkillResponseSchema","toSlug","updateStoredSkillBodySchema","updateStoredSkillResponseSchema","assertWriteAccess","deleteStoredSkillResponseSchema","publishStoredSkillBodySchema","publishStoredSkillResponseSchema","LocalSkillSource"],"mappings":"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","file":"chunk-7KFYDYFN.cjs","sourcesContent":["import type { StorageSkillFileNode } from '@mastra/core/storage';\nimport { LocalSkillSource } from '@mastra/core/workspace';\n\nimport { HTTPException } from '../http-exception';\nimport {\n storedSkillIdPathParams,\n listStoredSkillsQuerySchema,\n createStoredSkillBodySchema,\n updateStoredSkillBodySchema,\n publishStoredSkillBodySchema,\n listStoredSkillsResponseSchema,\n getStoredSkillResponseSchema,\n createStoredSkillResponseSchema,\n updateStoredSkillResponseSchema,\n deleteStoredSkillResponseSchema,\n publishStoredSkillResponseSchema,\n} from '../schemas/stored-skills';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { toSlug, assertStoredResourceScope, getStoredResourceScope, scopeStoredResourceMetadata } from '../utils';\n\nimport {\n assertReadAccess,\n assertWriteAccess,\n getCallerAuthorId,\n matchesAuthorFilter,\n resolveAuthorFilter,\n} from './authorship';\nimport { isBuilderFeatureEnabled } from './editor-builder';\nimport { handleError } from './error';\nimport { enrichOrStripFavorites, prepareFavoritesEnrichment, stripFavoriteFields } from './favorites-enrichment';\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Well-known folder names in the skill file tree whose children represent\n * indexable path arrays (references, scripts, assets).\n */\nconst INDEXED_FOLDERS = ['references', 'scripts', 'assets'] as const;\n\n/**\n * Walks the `files` tree and collects relative file paths for each well-known\n * folder (references, scripts, assets). Returned arrays only include entries\n * that are not already present in any explicitly-provided arrays so callers\n * can pass both `files` and `references` without creating duplicates.\n */\nfunction extractIndexedPathsFromFiles(\n files: StorageSkillFileNode[] | undefined,\n existing: {\n references?: string[];\n scripts?: string[];\n assets?: string[];\n },\n): {\n references?: string[];\n scripts?: string[];\n assets?: string[];\n} {\n if (!files || files.length === 0) return {};\n\n // Find the root folder (first folder node, usually id=\"root\")\n const root = files.find(n => n.type === 'folder');\n if (!root?.children) return {};\n\n const result: Record<string, string[]> = {};\n\n for (const folderName of INDEXED_FOLDERS) {\n const folder = root.children.find(n => n.type === 'folder' && n.name === folderName);\n if (!folder?.children || folder.children.length === 0) continue;\n\n const existingPaths = new Set(existing[folderName] ?? []);\n const paths: string[] = [...existingPaths];\n\n collectFilePaths(folder.children, folderName, existingPaths, paths);\n\n if (paths.length > 0) {\n result[folderName] = paths;\n }\n }\n\n return result;\n}\n\n/** Recursively collects file paths from a subtree, building relative paths. */\nfunction collectFilePaths(\n nodes: StorageSkillFileNode[],\n prefix: string,\n existingPaths: Set<string>,\n out: string[],\n): void {\n for (const node of nodes) {\n if (node.type === 'file') {\n const relativePath = `${prefix}/${node.name}`;\n if (!existingPaths.has(relativePath)) {\n out.push(relativePath);\n }\n } else if (node.type === 'folder' && node.children) {\n collectFilePaths(node.children, `${prefix}/${node.name}`, existingPaths, out);\n }\n }\n}\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/skills - List all stored skills\n */\nexport const LIST_STORED_SKILLS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/skills',\n responseType: 'json',\n queryParamSchema: listStoredSkillsQuerySchema,\n responseSchema: listStoredSkillsResponseSchema,\n summary: 'List stored skills',\n description: 'Returns a paginated list of all skill configurations stored in the database',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n page,\n perPage,\n orderBy,\n status,\n authorId,\n visibility,\n metadata,\n favoritedOnly,\n pinFavoritedFor,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n const filter = resolveAuthorFilter({\n requestContext,\n resource: 'stored-skills',\n queryAuthorId: authorId,\n queryVisibility: visibility,\n });\n\n const scope = await getStoredResourceScope(mastra, requestContext);\n const scopedMetadata = scopeStoredResourceMetadata(metadata, scope);\n\n const callerId = getCallerAuthorId(requestContext);\n const favoritesEnabled = await isBuilderFeatureEnabled(mastra, 'favorites');\n const honoredStarredOnly = favoritesEnabled && favoritedOnly === true;\n const favoriteSubjectId = pinFavoritedFor ?? callerId;\n\n // `?favoritedOnly=true` flow: fetch caller's favorited IDs, restrict the list\n // to that set, then post-filter by visibility and recompute total/pages.\n if (honoredStarredOnly) {\n const effectivePerPage: number = perPage ?? 100;\n if (!favoriteSubjectId) {\n // Caller cannot have favorited anything without an identity.\n return { skills: [], total: 0, page, perPage: effectivePerPage, hasMore: false };\n }\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) {\n throw new HTTPException(500, { message: 'Favorites storage domain is not available' });\n }\n const starredIds = await favoritesStore.listFavoritedIds({ userId: favoriteSubjectId, entityType: 'skill' });\n if (starredIds.length === 0) {\n return { skills: [], total: 0, page, perPage: effectivePerPage, hasMore: false };\n }\n const allMatching = await skillStore.listResolved({\n perPage: false,\n orderBy,\n status,\n authorId: filter.kind === 'exact' ? filter.authorId : undefined,\n metadata: scopedMetadata,\n entityIds: starredIds,\n });\n const visible = allMatching.skills.filter(record => matchesAuthorFilter(record, filter));\n const total = visible.length;\n const startIdx = effectivePerPage === 0 ? 0 : page * effectivePerPage;\n const endIdx = effectivePerPage === 0 ? 0 : startIdx + effectivePerPage;\n const sliced = effectivePerPage === 0 ? [] : visible.slice(startIdx, endIdx);\n const annotated = sliced.map(record => ({ ...record, isFavorited: true }));\n const hasMore = effectivePerPage > 0 && endIdx < total;\n return {\n skills: annotated,\n total,\n page,\n perPage: effectivePerPage,\n hasMore,\n };\n }\n\n const result = await skillStore.listResolved({\n page,\n perPage,\n orderBy,\n status,\n authorId: filter.kind === 'exact' ? filter.authorId : undefined,\n metadata: scopedMetadata,\n });\n\n // Post-filter to enforce ownership + visibility rules across all backends.\n // Storage adapters can only do an equality filter on authorId, so we apply\n // the ownedOrPublic / publicOnly logic here.\n // Note: `result.total` / `result.hasMore` reflect the storage-reported\n // count before this post-filter. For `unrestricted` / `exact` filters\n // nothing is removed; for `ownedOrPublic` / `publicOnly`, downstream UIs\n // should treat the filter as a view over the caller's scope — an\n // approximation is OK and preserves pagination math.\n const visibleSkills = result.skills.filter(record => matchesAuthorFilter(record, filter));\n\n if (!favoritesEnabled) {\n return { ...result, skills: visibleSkills.map(stripFavoriteFields) };\n }\n\n const enrichment = await prepareFavoritesEnrichment(\n mastra,\n requestContext,\n 'skill',\n visibleSkills.map(s => s.id),\n );\n const annotated = enrichment\n ? visibleSkills.map(record => ({ ...record, isFavorited: enrichment.starredIds.has(record.id) }))\n : visibleSkills.map(stripFavoriteFields);\n\n return { ...result, skills: annotated };\n } catch (error) {\n return handleError(error, 'Error listing stored skills');\n }\n },\n});\n\n/**\n * GET /stored/skills/:storedSkillId - Get a stored skill by ID\n */\nexport const GET_STORED_SKILL_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/skills/:storedSkillId',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: getStoredSkillResponseSchema,\n summary: 'Get stored skill by ID',\n description: 'Returns a specific skill from storage by its unique identifier (resolved with active version config)',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n const skill = await skillStore.getByIdResolved(storedSkillId);\n\n if (!skill) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));\n\n assertReadAccess({ requestContext, resource: 'stored-skills', resourceId: storedSkillId, record: skill });\n\n return enrichOrStripFavorites(mastra, requestContext, 'skill', skill);\n } catch (error) {\n return handleError(error, 'Error getting stored skill');\n }\n },\n});\n\n/**\n * POST /stored/skills - Create a new stored skill\n */\nexport const CREATE_STORED_SKILL_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/skills',\n responseType: 'json',\n bodySchema: createStoredSkillBodySchema,\n responseSchema: createStoredSkillResponseSchema,\n summary: 'Create stored skill',\n description: 'Creates a new skill configuration in storage with the provided details',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n id: providedId,\n name,\n description,\n instructions,\n license,\n compatibility,\n source,\n references,\n scripts,\n assets,\n files,\n metadata,\n visibility: bodyVisibility,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n // Derive ID from name if not explicitly provided\n const id = providedId || toSlug(name);\n\n if (!id) {\n throw new HTTPException(400, {\n message: 'Could not derive skill ID from name. Please provide an explicit id.',\n });\n }\n\n // Check if skill with this ID already exists\n const existing = await skillStore.getById(id);\n if (existing) {\n throw new HTTPException(409, { message: `Skill with id ${id} already exists` });\n }\n\n // Force authorId from the authenticated caller; ignore any body-provided value.\n // No owner = always public (no auth / no user context).\n // With an owner, respect the client's choice, defaulting to 'private'.\n const authorId = getCallerAuthorId(requestContext) ?? undefined;\n const visibility: 'private' | 'public' = authorId ? (bodyVisibility ?? 'private') : 'public';\n\n // Derive references/scripts/assets path arrays from the files tree\n // so agents can discover them via skill_read even when only `files` is provided.\n const indexedPaths = extractIndexedPathsFromFiles(files, { references, scripts, assets });\n\n await skillStore.create({\n skill: {\n id,\n authorId,\n visibility,\n name,\n description,\n instructions,\n license,\n compatibility,\n source,\n references: indexedPaths.references ?? references,\n scripts: indexedPaths.scripts ?? scripts,\n assets: indexedPaths.assets ?? assets,\n files,\n metadata: scopeStoredResourceMetadata(metadata, await getStoredResourceScope(mastra, requestContext)),\n },\n });\n\n // Return the resolved skill (thin record + version config)\n const resolved = await skillStore.getByIdResolved(id);\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve created skill' });\n }\n\n return enrichOrStripFavorites(mastra, requestContext, 'skill', resolved);\n } catch (error) {\n return handleError(error, 'Error creating stored skill');\n }\n },\n});\n\n/**\n * PATCH /stored/skills/:storedSkillId - Update a stored skill\n */\nexport const UPDATE_STORED_SKILL_ROUTE = createRoute({\n method: 'PATCH',\n path: '/stored/skills/:storedSkillId',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n bodySchema: updateStoredSkillBodySchema,\n responseSchema: updateStoredSkillResponseSchema,\n summary: 'Update stored skill',\n description: 'Updates an existing skill in storage with the provided fields',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n storedSkillId,\n // Entity-level fields\n authorId,\n visibility,\n // Config fields (snapshot-level)\n name,\n description,\n instructions,\n license,\n compatibility,\n source,\n references,\n scripts,\n assets,\n files,\n metadata,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n // Check if skill exists. Skill metadata lives on the resolved snapshot.\n const existing = await skillStore.getByIdResolved(storedSkillId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n const scope = await getStoredResourceScope(mastra, requestContext);\n assertStoredResourceScope(existing, scope);\n\n // Throws 404 if the caller isn't the owner, admin, or `stored-skills:write[:<id>]` holder.\n assertWriteAccess({\n requestContext,\n resource: 'stored-skills',\n resourceId: storedSkillId,\n action: 'edit',\n record: existing,\n });\n\n // No owner = always public, regardless of what the client sent.\n const callerAuthorId = getCallerAuthorId(requestContext) ?? undefined;\n const resolvedVisibility = callerAuthorId ? visibility : visibility != null ? 'public' : undefined;\n\n // Derive references/scripts/assets path arrays from the files tree\n const indexedPaths = files ? extractIndexedPathsFromFiles(files, { references, scripts, assets }) : {};\n\n // Update the skill with both entity-level and config-level fields.\n // The storage layer handles separating these into record updates vs\n // new-version creation, but it uses `field in updates` to detect config\n // changes — so we must only include fields the caller actually sent.\n // Forwarding `undefined` keys would trigger a spurious version create\n // and pass `undefined` into the database driver.\n const update: Record<string, unknown> = { id: storedSkillId };\n if (authorId !== undefined) update.authorId = authorId;\n if (resolvedVisibility !== undefined) update.visibility = resolvedVisibility;\n if (name !== undefined) update.name = name;\n if (description !== undefined) update.description = description;\n if (instructions !== undefined) update.instructions = instructions;\n if (license !== undefined) update.license = license;\n if (compatibility !== undefined) update.compatibility = compatibility;\n if (source !== undefined) update.source = source;\n const resolvedReferences = indexedPaths.references ?? references;\n const resolvedScripts = indexedPaths.scripts ?? scripts;\n const resolvedAssets = indexedPaths.assets ?? assets;\n if (resolvedReferences !== undefined) update.references = resolvedReferences;\n if (resolvedScripts !== undefined) update.scripts = resolvedScripts;\n if (resolvedAssets !== undefined) update.assets = resolvedAssets;\n if (files !== undefined) update.files = files;\n if (metadata !== undefined) {\n update.metadata = scopeStoredResourceMetadata({ ...(existing.metadata ?? {}), ...metadata }, scope);\n }\n\n await skillStore.update(update as Parameters<typeof skillStore.update>[0]);\n\n // Return the resolved skill with the updated config\n const resolved = await skillStore.getByIdResolved(storedSkillId);\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve updated skill' });\n }\n\n return enrichOrStripFavorites(mastra, requestContext, 'skill', resolved);\n } catch (error) {\n return handleError(error, 'Error updating stored skill');\n }\n },\n});\n\n/**\n * DELETE /stored/skills/:storedSkillId - Delete a stored skill\n */\nexport const DELETE_STORED_SKILL_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/skills/:storedSkillId',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: deleteStoredSkillResponseSchema,\n summary: 'Delete stored skill',\n description: 'Deletes a skill from storage by its unique identifier',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n // Check if skill exists. Skill metadata lives on the resolved snapshot.\n const existing = await skillStore.getByIdResolved(storedSkillId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller isn't the owner, admin, or `skills:delete[:<id>]` holder.\n assertWriteAccess({\n requestContext,\n resource: 'stored-skills',\n resourceId: storedSkillId,\n action: 'delete',\n record: existing,\n });\n\n await skillStore.delete(storedSkillId);\n\n // Cascade: drop any favorite rows referencing this skill. Failure must not\n // abort the delete.\n try {\n const favoritesStore = await storage.getStore('favorites');\n await favoritesStore?.deleteFavoritesForEntity({ entityType: 'skill', entityId: storedSkillId });\n } catch (cascadeError) {\n mastra\n .getLogger?.()\n ?.warn?.('Failed to cascade-delete favorites for skill', { storedSkillId, error: cascadeError });\n }\n\n return {\n success: true,\n message: `Skill ${storedSkillId} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting stored skill');\n }\n },\n});\n\n/**\n * POST /stored/skills/:storedSkillId/publish - Publish a skill from filesystem\n * Walks the skill directory, hashes files into blob store, creates a new version\n * with the tree manifest, and sets activeVersionId.\n */\nexport const PUBLISH_STORED_SKILL_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/skills/:storedSkillId/publish',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n bodySchema: publishStoredSkillBodySchema,\n responseSchema: publishStoredSkillResponseSchema,\n summary: 'Publish stored skill',\n description:\n 'Snapshots the skill directory from the filesystem into content-addressable blob storage, creates a new version with a tree manifest, and marks the skill as published',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedSkillId, skillPath }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n const blobStore = await storage.getStore('blobs');\n if (!blobStore) {\n throw new HTTPException(500, { message: 'Blob storage domain is not available' });\n }\n\n // Verify skill exists. Skill metadata lives on the resolved snapshot.\n const existing = await skillStore.getByIdResolved(storedSkillId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller isn't the owner, admin, or `stored-skills:write[:<id>]` holder.\n assertWriteAccess({\n requestContext,\n resource: 'stored-skills',\n resourceId: storedSkillId,\n action: 'edit',\n record: existing,\n });\n\n // Validate skillPath to prevent path traversal\n const path = await import('node:path');\n const fs = await import('node:fs/promises');\n const resolvedPath = path.default.resolve(skillPath);\n const allowedBase = path.default.resolve(process.env.SKILLS_BASE_DIR || process.cwd());\n if (!resolvedPath.startsWith(allowedBase + path.default.sep) && resolvedPath !== allowedBase) {\n throw new HTTPException(400, {\n message: `skillPath must be within the allowed directory: ${allowedBase}`,\n });\n }\n\n // Verify the source directory exists and contains a SKILL.md before attempting\n // to publish, so callers get a 400 with context instead of a raw 500/ENOENT.\n try {\n const stat = await fs.stat(resolvedPath);\n if (!stat.isDirectory()) {\n throw new HTTPException(400, { message: `skillPath is not a directory: ${resolvedPath}` });\n }\n } catch (err) {\n if (err instanceof HTTPException) throw err;\n if ((err as NodeJS.ErrnoException)?.code === 'ENOENT') {\n throw new HTTPException(400, {\n message: `skillPath does not exist on the server filesystem: ${resolvedPath}. Create the skill directory (with a SKILL.md) before publishing, or use a skill that was materialized to disk.`,\n });\n }\n throw err;\n }\n try {\n await fs.stat(path.default.join(resolvedPath, 'SKILL.md'));\n } catch (err) {\n if ((err as NodeJS.ErrnoException)?.code === 'ENOENT') {\n throw new HTTPException(400, {\n message: `skillPath is missing SKILL.md: ${resolvedPath}`,\n });\n }\n throw err;\n }\n\n // Use LocalSkillSource to read from the server filesystem\n const source = new LocalSkillSource();\n const { publishSkillFromSource } = await import('@mastra/core/workspace');\n\n const { snapshot, tree, files } = await publishSkillFromSource(source, resolvedPath, blobStore);\n\n // Strip undefined keys from the snapshot before passing to update(). The\n // storage layer treats \"field present\" as \"field changed\"; forwarding\n // undefined would overwrite populated columns with undefined and trip\n // NOT NULL / \"undefined cannot be passed as argument\" errors in\n // adapters that bind args raw (libsql, pg).\n const snapshotUpdate: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(snapshot)) {\n if (value !== undefined) snapshotUpdate[key] = value;\n }\n\n // Update the skill with new version data + tree + UI-facing file tree.\n // `files` is the nested folder/file structure shown in the editor; without\n // it the column would stay null and the UI would render an empty tree.\n await skillStore.update({\n id: storedSkillId,\n ...snapshotUpdate,\n tree,\n files,\n status: 'published',\n });\n\n // Point activeVersionId to the newly created version\n const latestVersion = await skillStore.getLatestVersion(storedSkillId);\n if (latestVersion) {\n await skillStore.update({\n id: storedSkillId,\n activeVersionId: latestVersion.id,\n });\n }\n\n const resolved = await skillStore.getByIdResolved(storedSkillId);\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve skill after publish' });\n }\n\n return enrichOrStripFavorites(mastra, requestContext, 'skill', resolved);\n } catch (error) {\n return handleError(error, 'Error publishing stored skill');\n }\n },\n});\n"]}
import { listVersionsResponseSchema, agentVersionPathParams, createVersionResponseSchema, getVersionResponseSchema, versionIdPathParams, restoreVersionResponseSchema, compareVersionsResponseSchema } from './chunk-6K5XWD5Q.js';
import { listVersionsQuerySchema, createVersionBodySchema, activateVersionResponseSchema, deleteVersionResponseSchema, compareVersionsQuerySchema } from './chunk-FXXHWBF2.js';
import { extractConfigFromVersion, calculateChangedFields, createVersionWithRetry, enforceRetentionLimit, computeVersionDiffs } from './chunk-33QPJPK4.js';
import { assertStoredResourceScope, getStoredResourceScope } from './chunk-4GWTCVFL.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
// src/server/handlers/agent-versions.ts
var SNAPSHOT_CONFIG_FIELDS = [
"name",
"description",
"instructions",
"model",
"tools",
"defaultOptions",
"workflows",
"agents",
"integrationTools",
"inputProcessors",
"outputProcessors",
"memory",
"scorers",
"requestContextSchema",
"mcpClients"
];
var LIST_AGENT_VERSIONS_ROUTE = createRoute({
method: "GET",
path: "/stored/agents/:agentId/versions",
requiresAuth: true,
responseType: "json",
pathParamSchema: agentVersionPathParams,
queryParamSchema: listVersionsQuerySchema,
responseSchema: listVersionsResponseSchema,
summary: "List agent versions",
description: "Returns a paginated list of all versions for a stored agent",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, page, perPage, orderBy, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const storedAgent = await agentsStore.getById(agentId);
let codeAgentExists = false;
try {
mastra.getAgentById(agentId);
codeAgentExists = true;
} catch {
}
if (!storedAgent && !codeAgentExists) {
throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
assertStoredResourceScope(storedAgent, await getStoredResourceScope(mastra, requestContext));
const result = await agentsStore.listVersions({
agentId,
page,
perPage,
orderBy
});
return result;
} catch (error) {
return handleError(error, "Error listing agent versions");
}
}
});
var CREATE_AGENT_VERSION_ROUTE = createRoute({
method: "POST",
path: "/stored/agents/:agentId/versions",
requiresAuth: true,
responseType: "json",
pathParamSchema: agentVersionPathParams,
bodySchema: createVersionBodySchema,
responseSchema: createVersionResponseSchema,
summary: "Create agent version",
description: "Creates a new version snapshot of the current agent configuration",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, changeMessage, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
if (!agent) {
throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
let currentConfig = {};
if (agent.activeVersionId) {
const activeVersion = await agentsStore.getVersion(agent.activeVersionId);
if (activeVersion) {
currentConfig = extractConfigFromVersion(
activeVersion,
SNAPSHOT_CONFIG_FIELDS
);
}
}
const latestVersion = await agentsStore.getLatestVersion(agentId);
if (!agent.activeVersionId && latestVersion) {
currentConfig = extractConfigFromVersion(
latestVersion,
SNAPSHOT_CONFIG_FIELDS
);
}
const previousConfig = latestVersion ? extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
const changedFields = calculateChangedFields(previousConfig, currentConfig);
const { versionId } = await createVersionWithRetry(
agentsStore,
agentId,
"agentId",
currentConfig,
changedFields,
{ changeMessage }
);
const version = await agentsStore.getVersion(versionId);
if (!version) {
throw new HTTPException(500, { message: "Failed to retrieve created version" });
}
await enforceRetentionLimit(
agentsStore,
agentId,
"agentId",
agent.activeVersionId
);
return version;
} catch (error) {
return handleError(error, "Error creating agent version");
}
}
});
var GET_AGENT_VERSION_ROUTE = createRoute({
method: "GET",
path: "/stored/agents/:agentId/versions/:versionId",
requiresAuth: true,
responseType: "json",
pathParamSchema: versionIdPathParams,
responseSchema: getVersionResponseSchema,
summary: "Get agent version",
description: "Returns a specific version of an agent by its version ID",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const version = await agentsStore.getVersion(versionId);
if (!version) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.agentId !== agentId) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
}
const agent = await agentsStore.getById(agentId);
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
return version;
} catch (error) {
return handleError(error, "Error getting agent version");
}
}
});
var ACTIVATE_AGENT_VERSION_ROUTE = createRoute({
method: "POST",
path: "/stored/agents/:agentId/versions/:versionId/activate",
requiresAuth: true,
responseType: "json",
pathParamSchema: versionIdPathParams,
responseSchema: activateVersionResponseSchema,
summary: "Activate agent version",
description: "Sets a specific version as the active version for the agent",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
if (!agent) {
throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
const version = await agentsStore.getVersion(versionId);
if (!version) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.agentId !== agentId) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
}
await agentsStore.update({
id: agentId,
activeVersionId: versionId,
status: "published"
});
mastra.getEditor()?.agent.clearCache(agentId);
return {
success: true,
message: `Version ${version.versionNumber} is now active`,
activeVersionId: versionId
};
} catch (error) {
return handleError(error, "Error activating agent version");
}
}
});
var RESTORE_AGENT_VERSION_ROUTE = createRoute({
method: "POST",
path: "/stored/agents/:agentId/versions/:versionId/restore",
requiresAuth: true,
responseType: "json",
pathParamSchema: versionIdPathParams,
responseSchema: restoreVersionResponseSchema,
summary: "Restore agent version",
description: "Restores the agent configuration from a version, creating a new version",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
if (!agent) {
throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
const versionToRestore = await agentsStore.getVersion(versionId);
if (!versionToRestore) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (versionToRestore.agentId !== agentId) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
}
const restoredConfig = extractConfigFromVersion(
versionToRestore,
SNAPSHOT_CONFIG_FIELDS
);
await agentsStore.update({
id: agentId,
...restoredConfig
});
const latestVersion = await agentsStore.getLatestVersion(agentId);
const previousConfig = latestVersion ? extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
const changedFields = calculateChangedFields(previousConfig, restoredConfig);
const { versionId: newVersionId } = await createVersionWithRetry(
agentsStore,
agentId,
"agentId",
restoredConfig,
changedFields,
{
changeMessage: `Restored from version ${versionToRestore.versionNumber}`
}
);
const newVersion = await agentsStore.getVersion(newVersionId);
if (!newVersion) {
throw new HTTPException(500, { message: "Failed to retrieve created version" });
}
await enforceRetentionLimit(
agentsStore,
agentId,
"agentId",
agent.activeVersionId
);
mastra.getEditor()?.agent.clearCache(agentId);
return newVersion;
} catch (error) {
return handleError(error, "Error restoring agent version");
}
}
});
var DELETE_AGENT_VERSION_ROUTE = createRoute({
method: "DELETE",
path: "/stored/agents/:agentId/versions/:versionId",
requiresAuth: true,
responseType: "json",
pathParamSchema: versionIdPathParams,
responseSchema: deleteVersionResponseSchema,
summary: "Delete agent version",
description: "Deletes a specific version (cannot delete the active version)",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
if (!agent) {
throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
const version = await agentsStore.getVersion(versionId);
if (!version) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.agentId !== agentId) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
}
if (agent.activeVersionId === versionId) {
throw new HTTPException(400, {
message: "Cannot delete the active version. Activate a different version first."
});
}
await agentsStore.deleteVersion(versionId);
mastra.getEditor()?.agent.clearCache(agentId);
return {
success: true,
message: `Version ${version.versionNumber} deleted successfully`
};
} catch (error) {
return handleError(error, "Error deleting agent version");
}
}
});
var COMPARE_AGENT_VERSIONS_ROUTE = createRoute({
method: "GET",
path: "/stored/agents/:agentId/versions/compare",
requiresAuth: true,
responseType: "json",
pathParamSchema: agentVersionPathParams,
queryParamSchema: compareVersionsQuerySchema,
responseSchema: compareVersionsResponseSchema,
summary: "Compare agent versions",
description: "Compares two versions and returns the differences between them",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, from, to, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
const fromVersion = await agentsStore.getVersion(from);
if (!fromVersion) {
throw new HTTPException(404, { message: `Version with id ${from} not found` });
}
if (fromVersion.agentId !== agentId) {
throw new HTTPException(404, { message: `Version with id ${from} not found for agent ${agentId}` });
}
const toVersion = await agentsStore.getVersion(to);
if (!toVersion) {
throw new HTTPException(404, { message: `Version with id ${to} not found` });
}
if (toVersion.agentId !== agentId) {
throw new HTTPException(404, { message: `Version with id ${to} not found for agent ${agentId}` });
}
const fromConfig = extractConfigFromVersion(
fromVersion,
SNAPSHOT_CONFIG_FIELDS
);
const toConfig = extractConfigFromVersion(
toVersion,
SNAPSHOT_CONFIG_FIELDS
);
const diffs = computeVersionDiffs(fromConfig, toConfig);
return {
diffs,
fromVersion,
toVersion
};
} catch (error) {
return handleError(error, "Error comparing agent versions");
}
}
});
export { ACTIVATE_AGENT_VERSION_ROUTE, COMPARE_AGENT_VERSIONS_ROUTE, CREATE_AGENT_VERSION_ROUTE, DELETE_AGENT_VERSION_ROUTE, GET_AGENT_VERSION_ROUTE, LIST_AGENT_VERSIONS_ROUTE, RESTORE_AGENT_VERSION_ROUTE };
//# sourceMappingURL=chunk-7OY3AGJJ.js.map
//# sourceMappingURL=chunk-7OY3AGJJ.js.map
{"version":3,"sources":["../src/server/handlers/agent-versions.ts"],"names":[],"mappings":";;;;;;;;;AAmCA,IAAM,sBAAA,GAAyB;AAAA,EAC7B,MAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF,CAAA;AASO,IAAM,4BAA4B,WAAA,CAAY;AAAA,EACnD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,kCAAA;AAAA,EACN,YAAA,EAAc,IAAA;AAAA,EACd,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,sBAAA;AAAA,EACjB,gBAAA,EAAkB,uBAAA;AAAA,EAClB,cAAA,EAAgB,0BAAA;AAAA,EAChB,OAAA,EAAS,qBAAA;AAAA,EACT,WAAA,EAAa,6DAAA;AAAA,EACb,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,EACvB,OAAA,EAAS,OAAO,EAAE,MAAA,EAAQ,SAAS,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,cAAA,EAAe,KAAM;AAC9E,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AACnD,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0CAA0C,CAAA;AAAA,MACpF;AAGA,MAAA,MAAM,WAAA,GAAc,MAAM,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AACrD,MAAA,IAAI,eAAA,GAAkB,KAAA;AACtB,MAAA,IAAI;AACF,QAAA,MAAA,CAAO,aAAa,OAAO,CAAA;AAC3B,QAAA,eAAA,GAAkB,IAAA;AAAA,MACpB,CAAA,CAAA,MAAQ;AAAA,MAER;AAEA,MAAA,IAAI,CAAC,WAAA,IAAe,CAAC,eAAA,EAAiB;AACpC,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,cAAA,EAAiB,OAAO,cAAc,CAAA;AAAA,MAChF;AACA,MAAA,yBAAA,CAA0B,WAAA,EAAa,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAC,CAAA;AAE3F,MAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,YAAA,CAAa;AAAA,QAC5C,OAAA;AAAA,QACA,IAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,8BAA8B,CAAA;AAAA,IAC1D;AAAA,EACF;AACF,CAAC;AAKM,IAAM,6BAA6B,WAAA,CAAY;AAAA,EACpD,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,kCAAA;AAAA,EACN,YAAA,EAAc,IAAA;AAAA,EACd,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,sBAAA;AAAA,EACjB,UAAA,EAAY,uBAAA;AAAA,EACZ,cAAA,EAAgB,2BAAA;AAAA,EAChB,OAAA,EAAS,sBAAA;AAAA,EACT,WAAA,EAAa,mEAAA;AAAA,EACb,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,EACvB,SAAS,OAAO,EAAE,QAAQ,OAAA,EAAS,aAAA,EAAe,gBAAe,KAAM;AACrE,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AACnD,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0CAA0C,CAAA;AAAA,MACpF;AAGA,MAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AAC/C,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,cAAA,EAAiB,OAAO,cAAc,CAAA;AAAA,MAChF;AACA,MAAA,yBAAA,CAA0B,KAAA,EAAO,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAC,CAAA;AAGrF,MAAA,IAAI,gBAAyC,EAAC;AAC9C,MAAA,IAAI,MAAM,eAAA,EAAiB;AACzB,QAAA,MAAM,aAAA,GAAgB,MAAM,WAAA,CAAY,UAAA,CAAW,MAAM,eAAe,CAAA;AACxE,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,aAAA,GAAgB,wBAAA;AAAA,YACd,aAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF;AAAA,MACF;AAGA,MAAA,MAAM,aAAA,GAAgB,MAAM,WAAA,CAAY,gBAAA,CAAiB,OAAO,CAAA;AAGhE,MAAA,IAAI,CAAC,KAAA,CAAM,eAAA,IAAmB,aAAA,EAAe;AAC3C,QAAA,aAAA,GAAgB,wBAAA;AAAA,UACd,aAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AACA,MAAA,MAAM,cAAA,GAAiB,aAAA,GACnB,wBAAA,CAAyB,aAAA,EAAqD,sBAAsB,CAAA,GACpG,IAAA;AAEJ,MAAA,MAAM,aAAA,GAAgB,sBAAA,CAAuB,cAAA,EAAgB,aAAa,CAAA;AAI1E,MAAA,MAAM,EAAE,SAAA,EAAU,GAAI,MAAM,sBAAA;AAAA,QAC1B,WAAA;AAAA,QACA,OAAA;AAAA,QACA,SAAA;AAAA,QACA,aAAA;AAAA,QACA,aAAA;AAAA,QACA,EAAE,aAAA;AAAc,OAClB;AAGA,MAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,UAAA,CAAW,SAAS,CAAA;AACtD,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,sCAAsC,CAAA;AAAA,MAChF;AAGA,MAAA,MAAM,qBAAA;AAAA,QACJ,WAAA;AAAA,QACA,OAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA,CAAM;AAAA,OACR;AAEA,MAAA,OAAO,OAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,8BAA8B,CAAA;AAAA,IAC1D;AAAA,EACF;AACF,CAAC;AAKM,IAAM,0BAA0B,WAAA,CAAY;AAAA,EACjD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,6CAAA;AAAA,EACN,YAAA,EAAc,IAAA;AAAA,EACd,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,mBAAA;AAAA,EACjB,cAAA,EAAgB,wBAAA;AAAA,EAChB,OAAA,EAAS,mBAAA;AAAA,EACT,WAAA,EAAa,0DAAA;AAAA,EACb,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,EACvB,SAAS,OAAO,EAAE,QAAQ,OAAA,EAAS,SAAA,EAAW,gBAAe,KAAM;AACjE,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AACnD,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0CAA0C,CAAA;AAAA,MACpF;AAEA,MAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,UAAA,CAAW,SAAS,CAAA;AAEtD,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,gBAAA,EAAmB,SAAS,cAAc,CAAA;AAAA,MACpF;AAGA,MAAA,IAAI,OAAA,CAAQ,YAAY,OAAA,EAAS;AAC/B,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,mBAAmB,SAAS,CAAA,qBAAA,EAAwB,OAAO,CAAA,CAAA,EAAI,CAAA;AAAA,MACzG;AACA,MAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AAC/C,MAAA,yBAAA,CAA0B,KAAA,EAAO,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAC,CAAA;AAErF,MAAA,OAAO,OAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,6BAA6B,CAAA;AAAA,IACzD;AAAA,EACF;AACF,CAAC;AAKM,IAAM,+BAA+B,WAAA,CAAY;AAAA,EACtD,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,sDAAA;AAAA,EACN,YAAA,EAAc,IAAA;AAAA,EACd,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,mBAAA;AAAA,EACjB,cAAA,EAAgB,6BAAA;AAAA,EAChB,OAAA,EAAS,wBAAA;AAAA,EACT,WAAA,EAAa,6DAAA;AAAA,EACb,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,EACvB,SAAS,OAAO,EAAE,QAAQ,OAAA,EAAS,SAAA,EAAW,gBAAe,KAAM;AACjE,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AACnD,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0CAA0C,CAAA;AAAA,MACpF;AAGA,MAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AAC/C,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,cAAA,EAAiB,OAAO,cAAc,CAAA;AAAA,MAChF;AACA,MAAA,yBAAA,CAA0B,KAAA,EAAO,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAC,CAAA;AAGrF,MAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,UAAA,CAAW,SAAS,CAAA;AACtD,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,gBAAA,EAAmB,SAAS,cAAc,CAAA;AAAA,MACpF;AACA,MAAA,IAAI,OAAA,CAAQ,YAAY,OAAA,EAAS;AAC/B,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,mBAAmB,SAAS,CAAA,qBAAA,EAAwB,OAAO,CAAA,CAAA,EAAI,CAAA;AAAA,MACzG;AAGA,MAAA,MAAM,YAAY,MAAA,CAAO;AAAA,QACvB,EAAA,EAAI,OAAA;AAAA,QACJ,eAAA,EAAiB,SAAA;AAAA,QACjB,MAAA,EAAQ;AAAA,OACT,CAAA;AAGD,MAAA,MAAA,CAAO,SAAA,EAAU,EAAG,KAAA,CAAM,UAAA,CAAW,OAAO,CAAA;AAE5C,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,OAAA,EAAS,CAAA,QAAA,EAAW,OAAA,CAAQ,aAAa,CAAA,cAAA,CAAA;AAAA,QACzC,eAAA,EAAiB;AAAA,OACnB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,gCAAgC,CAAA;AAAA,IAC5D;AAAA,EACF;AACF,CAAC;AAKM,IAAM,8BAA8B,WAAA,CAAY;AAAA,EACrD,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,qDAAA;AAAA,EACN,YAAA,EAAc,IAAA;AAAA,EACd,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,mBAAA;AAAA,EACjB,cAAA,EAAgB,4BAAA;AAAA,EAChB,OAAA,EAAS,uBAAA;AAAA,EACT,WAAA,EAAa,yEAAA;AAAA,EACb,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,EACvB,SAAS,OAAO,EAAE,QAAQ,OAAA,EAAS,SAAA,EAAW,gBAAe,KAAM;AACjE,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AACnD,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0CAA0C,CAAA;AAAA,MACpF;AAGA,MAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AAC/C,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,cAAA,EAAiB,OAAO,cAAc,CAAA;AAAA,MAChF;AACA,MAAA,yBAAA,CAA0B,KAAA,EAAO,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAC,CAAA;AAGrF,MAAA,MAAM,gBAAA,GAAmB,MAAM,WAAA,CAAY,UAAA,CAAW,SAAS,CAAA;AAC/D,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,gBAAA,EAAmB,SAAS,cAAc,CAAA;AAAA,MACpF;AACA,MAAA,IAAI,gBAAA,CAAiB,YAAY,OAAA,EAAS;AACxC,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,mBAAmB,SAAS,CAAA,qBAAA,EAAwB,OAAO,CAAA,CAAA,EAAI,CAAA;AAAA,MACzG;AAGA,MAAA,MAAM,cAAA,GAAiB,wBAAA;AAAA,QACrB,gBAAA;AAAA,QACA;AAAA,OACF;AAGA,MAAA,MAAM,YAAY,MAAA,CAAO;AAAA,QACvB,EAAA,EAAI,OAAA;AAAA,QACJ,GAAG;AAAA,OACJ,CAAA;AAGD,MAAA,MAAM,aAAA,GAAgB,MAAM,WAAA,CAAY,gBAAA,CAAiB,OAAO,CAAA;AAChE,MAAA,MAAM,cAAA,GAAiB,aAAA,GACnB,wBAAA,CAAyB,aAAA,EAAqD,sBAAsB,CAAA,GACpG,IAAA;AAEJ,MAAA,MAAM,aAAA,GAAgB,sBAAA,CAAuB,cAAA,EAAgB,cAAc,CAAA;AAI3E,MAAA,MAAM,EAAE,SAAA,EAAW,YAAA,EAAa,GAAI,MAAM,sBAAA;AAAA,QACxC,WAAA;AAAA,QACA,OAAA;AAAA,QACA,SAAA;AAAA,QACA,cAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA,UACE,aAAA,EAAe,CAAA,sBAAA,EAAyB,gBAAA,CAAiB,aAAa,CAAA;AAAA;AACxE,OACF;AAKA,MAAA,MAAM,UAAA,GAAa,MAAM,WAAA,CAAY,UAAA,CAAW,YAAY,CAAA;AAC5D,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,sCAAsC,CAAA;AAAA,MAChF;AAIA,MAAA,MAAM,qBAAA;AAAA,QACJ,WAAA;AAAA,QACA,OAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA,CAAM;AAAA,OACR;AAGA,MAAA,MAAA,CAAO,SAAA,EAAU,EAAG,KAAA,CAAM,UAAA,CAAW,OAAO,CAAA;AAE5C,MAAA,OAAO,UAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,+BAA+B,CAAA;AAAA,IAC3D;AAAA,EACF;AACF,CAAC;AAKM,IAAM,6BAA6B,WAAA,CAAY;AAAA,EACpD,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,6CAAA;AAAA,EACN,YAAA,EAAc,IAAA;AAAA,EACd,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,mBAAA;AAAA,EACjB,cAAA,EAAgB,2BAAA;AAAA,EAChB,OAAA,EAAS,sBAAA;AAAA,EACT,WAAA,EAAa,+DAAA;AAAA,EACb,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,EACvB,SAAS,OAAO,EAAE,QAAQ,OAAA,EAAS,SAAA,EAAW,gBAAe,KAAM;AACjE,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AACnD,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0CAA0C,CAAA;AAAA,MACpF;AAGA,MAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AAC/C,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,cAAA,EAAiB,OAAO,cAAc,CAAA;AAAA,MAChF;AACA,MAAA,yBAAA,CAA0B,KAAA,EAAO,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAC,CAAA;AAGrF,MAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,UAAA,CAAW,SAAS,CAAA;AACtD,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,gBAAA,EAAmB,SAAS,cAAc,CAAA;AAAA,MACpF;AACA,MAAA,IAAI,OAAA,CAAQ,YAAY,OAAA,EAAS;AAC/B,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,mBAAmB,SAAS,CAAA,qBAAA,EAAwB,OAAO,CAAA,CAAA,EAAI,CAAA;AAAA,MACzG;AAGA,MAAA,IAAI,KAAA,CAAM,oBAAoB,SAAA,EAAW;AACvC,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK;AAAA,UAC3B,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAEA,MAAA,MAAM,WAAA,CAAY,cAAc,SAAS,CAAA;AAGzC,MAAA,MAAA,CAAO,SAAA,EAAU,EAAG,KAAA,CAAM,UAAA,CAAW,OAAO,CAAA;AAE5C,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,OAAA,EAAS,CAAA,QAAA,EAAW,OAAA,CAAQ,aAAa,CAAA,qBAAA;AAAA,OAC3C;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,8BAA8B,CAAA;AAAA,IAC1D;AAAA,EACF;AACF,CAAC;AAKM,IAAM,+BAYT,WAAA,CAAY;AAAA,EACd,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,0CAAA;AAAA,EACN,YAAA,EAAc,IAAA;AAAA,EACd,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,sBAAA;AAAA,EACjB,gBAAA,EAAkB,0BAAA;AAAA,EAClB,cAAA,EAAgB,6BAAA;AAAA,EAChB,OAAA,EAAS,wBAAA;AAAA,EACT,WAAA,EAAa,gEAAA;AAAA,EACb,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,EACvB,OAAA,EAAS,OAAO,EAAE,MAAA,EAAQ,SAAS,IAAA,EAAM,EAAA,EAAI,gBAAe,KAAM;AAChE,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AACnD,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0CAA0C,CAAA;AAAA,MACpF;AACA,MAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,OAAA,CAAQ,OAAO,CAAA;AAC/C,MAAA,yBAAA,CAA0B,KAAA,EAAO,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAC,CAAA;AAGrF,MAAA,MAAM,WAAA,GAAc,MAAM,WAAA,CAAY,UAAA,CAAW,IAAI,CAAA;AACrD,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,gBAAA,EAAmB,IAAI,cAAc,CAAA;AAAA,MAC/E;AACA,MAAA,IAAI,WAAA,CAAY,YAAY,OAAA,EAAS;AACnC,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,mBAAmB,IAAI,CAAA,qBAAA,EAAwB,OAAO,CAAA,CAAA,EAAI,CAAA;AAAA,MACpG;AAEA,MAAA,MAAM,SAAA,GAAY,MAAM,WAAA,CAAY,UAAA,CAAW,EAAE,CAAA;AACjD,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,gBAAA,EAAmB,EAAE,cAAc,CAAA;AAAA,MAC7E;AACA,MAAA,IAAI,SAAA,CAAU,YAAY,OAAA,EAAS;AACjC,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,mBAAmB,EAAE,CAAA,qBAAA,EAAwB,OAAO,CAAA,CAAA,EAAI,CAAA;AAAA,MAClG;AAGA,MAAA,MAAM,UAAA,GAAa,wBAAA;AAAA,QACjB,WAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,MAAM,QAAA,GAAW,wBAAA;AAAA,QACf,SAAA;AAAA,QACA;AAAA,OACF;AAGA,MAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,UAAA,EAAY,QAAQ,CAAA;AAEtD,MAAA,OAAO;AAAA,QACL,KAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,gCAAgC,CAAA;AAAA,IAC5D;AAAA,EACF;AACF,CAAC","file":"chunk-7OY3AGJJ.js","sourcesContent":["import type { z } from 'zod/v4';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentVersionPathParams,\n versionIdPathParams,\n listVersionsQuerySchema,\n createVersionBodySchema,\n compareVersionsQuerySchema,\n listVersionsResponseSchema,\n getVersionResponseSchema,\n createVersionResponseSchema,\n activateVersionResponseSchema,\n restoreVersionResponseSchema,\n deleteVersionResponseSchema,\n compareVersionsResponseSchema,\n} from '../schemas/agent-versions';\nimport type { ServerRoute, RouteSchemas, InferParams } from '../server-adapter/routes';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { handleError } from './error';\nimport {\n extractConfigFromVersion,\n calculateChangedFields,\n computeVersionDiffs,\n createVersionWithRetry,\n enforceRetentionLimit,\n} from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\n/**\n * The config field names that live on version rows (StorageAgentSnapshotType fields).\n * Used to extract config from a version record for comparison and restoration.\n */\nconst SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'instructions',\n 'model',\n 'tools',\n 'defaultOptions',\n 'workflows',\n 'agents',\n 'integrationTools',\n 'inputProcessors',\n 'outputProcessors',\n 'memory',\n 'scorers',\n 'requestContextSchema',\n 'mcpClients',\n] as const;\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/agents/:agentId/versions - List all versions for an agent\n */\nexport const LIST_AGENT_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: listVersionsQuerySchema,\n responseSchema: listVersionsResponseSchema,\n summary: 'List agent versions',\n description: 'Returns a paginated list of all versions for a stored agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, page, perPage, orderBy, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists in code or storage\n const storedAgent = await agentsStore.getById(agentId);\n let codeAgentExists = false;\n try {\n mastra.getAgentById(agentId);\n codeAgentExists = true;\n } catch {\n // Agent not registered in code\n }\n\n if (!storedAgent && !codeAgentExists) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(storedAgent, await getStoredResourceScope(mastra, requestContext));\n\n const result = await agentsStore.listVersions({\n agentId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing agent versions');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions - Create a new version snapshot\n */\nexport const CREATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n bodySchema: createVersionBodySchema,\n responseSchema: createVersionResponseSchema,\n summary: 'Create agent version',\n description: 'Creates a new version snapshot of the current agent configuration',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, changeMessage, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Get the current agent to find its active version\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the current active version to snapshot its config\n let currentConfig: Record<string, unknown> = {};\n if (agent.activeVersionId) {\n const activeVersion = await agentsStore.getVersion(agent.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n\n // If no activeVersionId, fall back to latest version config\n if (!agent.activeVersionId && latestVersion) {\n currentConfig = extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, currentConfig);\n\n // Create the new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n // Get the created version to return\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/:versionId - Get a specific version\n */\nexport const GET_AGENT_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: getVersionResponseSchema,\n summary: 'Get agent version',\n description: 'Returns a specific version of an agent by its version ID',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n const version = await agentsStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n // Verify the version belongs to the specified agent\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: activateVersionResponseSchema,\n summary: 'Activate agent version',\n description: 'Sets a specific version as the active version for the agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Update the agent's activeVersionId AND status to 'published'\n await agentsStore.update({\n id: agentId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} is now active`,\n activeVersionId: versionId,\n };\n } catch (error) {\n return handleError(error, 'Error activating agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/restore - Restore agent to a version\n */\nexport const RESTORE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: restoreVersionResponseSchema,\n summary: 'Restore agent version',\n description: 'Restores the agent configuration from a version, creating a new version',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the version to restore\n const versionToRestore = await agentsStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Extract the config fields from the version to restore (top-level, no .snapshot)\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Update the agent with the config from the version to restore\n await agentsStore.update({\n id: agentId,\n ...restoredConfig,\n });\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, restoredConfig);\n\n // Create a new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId: newVersionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n // Do NOT auto-activate the restored version - user must explicitly activate it\n\n // Get the created version to return\n const newVersion = await agentsStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n // Use the agent's existing activeVersionId\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the restored config\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring agent version');\n }\n },\n});\n\n/**\n * DELETE /stored/agents/:agentId/versions/:versionId - Delete a version\n */\nexport const DELETE_AGENT_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: deleteVersionResponseSchema,\n summary: 'Delete agent version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Check if this is the active version\n if (agent.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await agentsStore.deleteVersion(versionId);\n\n // Clear the editor cache in case the deleted version affected resolution\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/compare - Compare two versions\n */\nexport const COMPARE_AGENT_VERSIONS_ROUTE: ServerRoute<\n InferParams<typeof agentVersionPathParams, typeof compareVersionsQuerySchema, undefined>,\n z.infer<typeof compareVersionsResponseSchema>,\n 'json',\n RouteSchemas<\n typeof agentVersionPathParams,\n typeof compareVersionsQuerySchema,\n undefined,\n typeof compareVersionsResponseSchema\n >,\n 'GET',\n '/stored/agents/:agentId/versions/compare'\n> = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: compareVersionsQuerySchema,\n responseSchema: compareVersionsResponseSchema,\n summary: 'Compare agent versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, from, to, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get both versions\n const fromVersion = await agentsStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${from} not found for agent ${agentId}` });\n }\n\n const toVersion = await agentsStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${to} not found for agent ${agentId}` });\n }\n\n // Extract config fields from both versions (top-level, no .snapshot)\n const fromConfig = extractConfigFromVersion(\n fromVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n const toConfig = extractConfigFromVersion(\n toVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Compute diffs on the config fields\n const diffs = computeVersionDiffs(fromConfig, toConfig);\n\n return {\n diffs,\n fromVersion,\n toVersion,\n };\n } catch (error) {\n return handleError(error, 'Error comparing agent versions');\n }\n },\n});\n"]}
import { validateMetadataAvatarUrl } from './chunk-HMJL3C3H.js';
import { stripFavoriteFields, prepareFavoritesEnrichment, enrichOrStripFavorites } from './chunk-DVBKBUY7.js';
import { isBuilderFeatureEnabled } from './chunk-YN5ILIRE.js';
import { handleAutoVersioning } from './chunk-33QPJPK4.js';
import { prepareAuthorEnrichment, attachAuthor } from './chunk-4W5AVWZH.js';
import { resolveAuthorFilter, getCallerAuthorId, matchesAuthorFilter, assertReadAccess, assertWriteAccess } from './chunk-ETR4XOVD.js';
import { listStoredAgentsResponseSchema, listStoredAgentsQuerySchema, exportStoredAgentResponseSchema, exportStoredAgentBodySchema, storedAgentIdPathParams, openStoredAgentChangeRequestResponseSchema, openStoredAgentChangeRequestBodySchema, getStoredAgentResponseSchema, createStoredAgentResponseSchema, createStoredAgentBodySchema, updateStoredAgentResponseSchema, updateStoredAgentBodySchema, deleteStoredAgentResponseSchema, getStoredAgentDependentsResponseSchema, previewInstructionsResponseSchema, previewInstructionsBodySchema } from './chunk-HCCTSODR.js';
import { statusQuerySchema } from './chunk-6VTOGOS2.js';
import { getStoredResourceScope, scopeStoredResourceMetadata, assertStoredResourceScope, toSlug } from './chunk-4GWTCVFL.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
// src/server/handlers/stored-agents.ts
async function resolveBrowserField(browser, mastra) {
if (browser === true) {
const editor = mastra.getEditor?.();
const builder = await editor?.resolveBuilder?.();
const defaultBrowser = builder?.getConfiguration?.()?.agent?.browser;
if (!defaultBrowser) {
console.warn(
"[mastra:server] Browser enabled (browser: true) but no default browser config found in builder configuration. The agent will be created/updated without browser access. Set `editor.builder.configuration.agent.browser` to fix this."
);
}
return defaultBrowser ?? void 0;
}
if (browser === false) {
return null;
}
return browser;
}
var AGENT_SNAPSHOT_CONFIG_FIELDS = [
"name",
"description",
"instructions",
"model",
"tools",
"defaultOptions",
"workflows",
"agents",
"integrationTools",
"toolProviders",
"inputProcessors",
"outputProcessors",
"memory",
"scorers",
"requestContextSchema",
"mcpClients",
"skills",
"workspace",
"browser"
];
var CODE_AGENT_OVERRIDE_FIELDS = [
"instructions",
"tools",
"integrationTools",
"mcpClients",
"requestContextSchema"
];
function getCodeAgentOwnership(editorConfig) {
if (editorConfig === false) {
return { ownsInstructions: false, ownsTools: false, ownsToolDescriptionsOnly: false };
}
if (editorConfig === void 0 || editorConfig === null) {
return { ownsInstructions: true, ownsTools: true, ownsToolDescriptionsOnly: false };
}
if (typeof editorConfig !== "object") {
return { ownsInstructions: false, ownsTools: false, ownsToolDescriptionsOnly: false };
}
const cfg = editorConfig;
const ownsInstructions = cfg.instructions === true;
const toolsCfg = cfg.tools;
const ownsTools = toolsCfg === true;
const ownsToolDescriptionsOnly = typeof toolsCfg === "object" && toolsCfg !== null && toolsCfg.description === true;
return { ownsInstructions, ownsTools, ownsToolDescriptionsOnly };
}
function hasNonEmptyInstructions(value) {
if (typeof value === "string") {
return value.trim().length > 0;
}
if (!Array.isArray(value)) {
return false;
}
return value.some((block) => {
if (!block || typeof block !== "object") {
return false;
}
const typedBlock = block;
if (typedBlock.type === "prompt_block_ref") {
return typeof typedBlock.id === "string" && typedBlock.id.length > 0;
}
return typeof typedBlock.content === "string" && typedBlock.content.trim().length > 0;
});
}
function assertOwnedInstructionsNotEmpty(instructions) {
if (!hasNonEmptyInstructions(instructions)) {
throw new HTTPException(400, { message: "Instructions are required" });
}
}
function sortForStableJson(value) {
if (Array.isArray(value)) {
return value.map(sortForStableJson);
}
if (value && typeof value === "object" && !(value instanceof Date)) {
return Object.fromEntries(
Object.entries(value).filter(([, entry]) => entry !== void 0).sort(([left], [right]) => left.localeCompare(right)).map(([key, entry]) => [key, sortForStableJson(entry)])
);
}
return value;
}
function buildExportConfig(input, agent) {
const editorConfig = agent?.__getEditorConfig?.();
const isCodeAgent = agent?.source === "code";
const allowedFields = isCodeAgent ? CODE_AGENT_OVERRIDE_FIELDS : AGENT_SNAPSHOT_CONFIG_FIELDS;
const ownership = isCodeAgent ? getCodeAgentOwnership(editorConfig) : null;
const config = {};
for (const field of allowedFields) {
if (input[field] === void 0) continue;
if (ownership) {
if (field === "instructions" && !ownership.ownsInstructions) continue;
if ((field === "tools" || field === "integrationTools" || field === "mcpClients") && !ownership.ownsTools && !ownership.ownsToolDescriptionsOnly) {
continue;
}
}
config[field] = input[field];
}
return sortForStableJson(config);
}
function agentExportFilename(agentId) {
return `agents/${encodeURIComponent(agentId)}.json`;
}
function sourceChangeRequestHeadRef(agentId) {
const safeAgentId = agentId.replace(/[^a-zA-Z0-9._-]+/g, "-").replace(/^-+|-+$/g, "") || "agent";
return `mastra/${safeAgentId}`;
}
function sourceChangeRequestMessage(agentId, userName, changeMessage) {
const normalizedUserName = userName?.replace(/\s+/g, " ").trim();
const normalizedMessage = changeMessage?.replace(/\s+/g, " ").trim();
const message = normalizedMessage || `Update ${agentId} agent override`;
return normalizedUserName ? `${message} by ${normalizedUserName}` : message;
}
var LIST_STORED_AGENTS_ROUTE = createRoute({
method: "GET",
path: "/stored/agents",
responseType: "json",
queryParamSchema: listStoredAgentsQuerySchema,
responseSchema: listStoredAgentsResponseSchema,
summary: "List stored agents",
description: "Returns a paginated list of all agents stored in the database",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
page,
perPage,
orderBy,
status,
authorId,
visibility,
metadata,
favoritedOnly,
pinFavoritedFor
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const filter = resolveAuthorFilter({
requestContext,
resource: "stored-agents",
queryAuthorId: authorId,
queryVisibility: visibility === "public" ? "public" : void 0
});
const scope = await getStoredResourceScope(mastra, requestContext);
const scopedMetadata = scopeStoredResourceMetadata(metadata, scope);
const callerId = getCallerAuthorId(requestContext);
const favoritesEnabled = await isBuilderFeatureEnabled(mastra, "favorites");
const honoredStarredOnly = favoritesEnabled && favoritedOnly === true;
const favoriteSubjectId = pinFavoritedFor ?? callerId;
if (honoredStarredOnly) {
const effectivePerPage = perPage ?? 100;
if (!favoriteSubjectId) {
return { agents: [], total: 0, page, perPage: effectivePerPage, hasMore: false };
}
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) {
throw new HTTPException(500, { message: "Favorites storage domain is not available" });
}
const starredIds = await favoritesStore.listFavoritedIds({ userId: favoriteSubjectId, entityType: "agent" });
if (starredIds.length === 0) {
return { agents: [], total: 0, page, perPage: effectivePerPage, hasMore: false };
}
const allMatching = await agentsStore.listResolved({
perPage: false,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata,
entityIds: starredIds
});
const visible = allMatching.agents.filter((record) => matchesAuthorFilter(record, filter));
const total = visible.length;
const startIdx = effectivePerPage === 0 ? 0 : page * effectivePerPage;
const endIdx = effectivePerPage === 0 ? 0 : startIdx + effectivePerPage;
const sliced = effectivePerPage === 0 ? [] : visible.slice(startIdx, endIdx);
const annotated2 = sliced.map((record) => ({ ...record, isFavorited: true }));
const authors2 = await prepareAuthorEnrichment(
mastra,
requestContext,
annotated2.map((a) => a.authorId)
);
const withAuthors2 = authors2 ? annotated2.map((record) => attachAuthor(record, authors2)) : annotated2;
const hasMore = effectivePerPage > 0 && endIdx < total;
return { agents: withAuthors2, total, page, perPage: effectivePerPage, hasMore };
}
const result = await agentsStore.listResolved({
page,
perPage,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata
});
const visibleAgents = result.agents.filter((record) => matchesAuthorFilter(record, filter));
const authors = await prepareAuthorEnrichment(
mastra,
requestContext,
visibleAgents.map((a) => a.authorId)
);
if (!favoritesEnabled) {
const stripped = visibleAgents.map(stripFavoriteFields);
const withAuthors2 = authors ? stripped.map((record) => attachAuthor(record, authors)) : stripped;
return { ...result, agents: withAuthors2 };
}
const enrichment = await prepareFavoritesEnrichment(
mastra,
requestContext,
"agent",
visibleAgents.map((a) => a.id)
);
const annotated = enrichment ? visibleAgents.map((record) => ({ ...record, isFavorited: enrichment.starredIds.has(record.id) })) : visibleAgents.map(stripFavoriteFields);
const withAuthors = authors ? annotated.map((record) => attachAuthor(record, authors)) : annotated;
return { ...result, agents: withAuthors };
} catch (error) {
return handleError(error, "Error listing stored agents");
}
}
});
async function buildStoredAgentExport({
mastra,
requestContext,
storedAgentId,
body
}) {
const storage = mastra.getStorage();
const agentsStore = storage ? await storage.getStore("agents") : void 0;
const storedAgent = await agentsStore?.getByIdResolved(storedAgentId, { status: "draft" });
if (storedAgent) {
assertStoredResourceScope(storedAgent, await getStoredResourceScope(mastra, requestContext));
assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: storedAgent });
}
let codeAgent;
try {
codeAgent = mastra.getAgentById?.(storedAgentId);
} catch {
codeAgent = void 0;
}
if (!storedAgent && !codeAgent) {
throw new HTTPException(404, { message: `Agent with id ${storedAgentId} not found` });
}
const config = buildExportConfig(body, codeAgent);
const content = `${JSON.stringify(config, null, 2)}
`;
return {
agentId: storedAgentId,
fileName: agentExportFilename(storedAgentId),
content,
config
};
}
var EXPORT_STORED_AGENT_ROUTE = createRoute({
method: "POST",
path: "/stored/agents/:storedAgentId/export",
responseType: "json",
pathParamSchema: storedAgentIdPathParams,
bodySchema: exportStoredAgentBodySchema,
responseSchema: exportStoredAgentResponseSchema,
summary: "Export stored agent override JSON",
description: "Returns deterministic JSON for an agent configuration or code-agent override without mutating storage",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId, ...body }) => {
try {
return await buildStoredAgentExport({ mastra, requestContext, storedAgentId, body });
} catch (error) {
return handleError(error, "Error exporting stored agent");
}
}
});
var OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE = createRoute({
method: "POST",
path: "/stored/agents/:storedAgentId/change-request",
responseType: "json",
pathParamSchema: storedAgentIdPathParams,
bodySchema: openStoredAgentChangeRequestBodySchema,
responseSchema: openStoredAgentChangeRequestResponseSchema,
summary: "Open stored agent source change request",
description: "Opens a source-provider change request for deterministic agent override JSON without mutating storage",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId, ...body }) => {
try {
const provider = mastra.getEditor?.()?.getSourceControlProvider?.();
if (!provider?.openChangeRequest) {
throw new HTTPException(400, { message: "Source control provider cannot open change requests" });
}
const openChangeRequest = provider.openChangeRequest.bind(provider);
const { changeMessage, userName, inspectOnly, ...exportBody } = body;
const headRef = sourceChangeRequestHeadRef(storedAgentId);
const title = `Update ${storedAgentId} agent override`;
const result = inspectOnly ? await openChangeRequest({
title,
headRef,
files: []
}) : await (async () => {
const response = await buildStoredAgentExport({ mastra, requestContext, storedAgentId, body: exportBody });
const message = sourceChangeRequestMessage(storedAgentId, userName, changeMessage);
return openChangeRequest({
title,
body: `Updates ${response.fileName} from Mastra Studio.`,
headRef,
files: [
{
path: response.fileName,
content: response.content,
message
}
]
});
})();
const storage = mastra.getStorage();
const agentsStore = storage ? await storage.getStore("agents") : void 0;
await agentsStore?.useProviderRef?.(storedAgentId, result.ref ?? headRef);
mastra.getEditor?.()?.agent?.clearCache?.(storedAgentId);
return result;
} catch (error) {
return handleError(error, "Error opening stored agent change request");
}
}
});
var GET_STORED_AGENT_ROUTE = createRoute({
method: "GET",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: storedAgentIdPathParams,
queryParamSchema: statusQuerySchema,
responseSchema: getStoredAgentResponseSchema,
summary: "Get stored agent by ID",
description: "Returns a specific agent from storage by its unique identifier. Use ?status=draft to resolve with the latest (draft) version, or ?status=published (default) for the active published version.",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId, status }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getByIdResolved(storedAgentId, { status });
if (!agent) {
throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
const authors = await prepareAuthorEnrichment(mastra, requestContext, [agent.authorId]);
const withFavorite = await enrichOrStripFavorites(mastra, requestContext, "agent", agent);
return attachAuthor(withFavorite, authors);
} catch (error) {
return handleError(error, "Error getting stored agent");
}
}
});
var CREATE_STORED_AGENT_ROUTE = createRoute({
method: "POST",
path: "/stored/agents",
responseType: "json",
bodySchema: createStoredAgentBodySchema,
responseSchema: createStoredAgentResponseSchema,
summary: "Create stored agent",
description: "Creates a new agent in storage with the provided configuration",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
id: providedId,
metadata,
visibility: bodyVisibility,
name,
description,
instructions,
model,
tools,
defaultOptions,
workflows,
agents,
integrationTools,
toolProviders,
mcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser,
requestContextSchema
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const id = providedId || toSlug(name);
if (!id) {
throw new HTTPException(400, {
message: "Could not derive agent ID from name. Please provide an explicit id."
});
}
const existing = await agentsStore.getById(id);
if (existing) {
throw new HTTPException(409, { message: `Agent with id ${id} already exists` });
}
const authorId = getCallerAuthorId(requestContext) ?? void 0;
const visibility = authorId ? bodyVisibility ?? "private" : "public";
validateMetadataAvatarUrl(metadata);
const resolvedBrowser = await resolveBrowserField(browser, mastra);
let createInstructions = instructions;
let createTools = tools;
let createIntegrationTools = integrationTools;
let createMcpClients = mcpClients;
let codeAgentForCreate;
try {
codeAgentForCreate = mastra.getAgentById?.(id);
} catch {
codeAgentForCreate = void 0;
}
if (codeAgentForCreate?.source === "code") {
const ownership = getCodeAgentOwnership(codeAgentForCreate.__getEditorConfig?.());
if (ownership.ownsInstructions) {
assertOwnedInstructionsNotEmpty(createInstructions);
} else {
createInstructions = void 0;
}
if (!ownership.ownsTools && !ownership.ownsToolDescriptionsOnly) {
createTools = void 0;
createIntegrationTools = void 0;
createMcpClients = void 0;
}
}
const input = {
id,
authorId,
visibility,
metadata: scopeStoredResourceMetadata(metadata, await getStoredResourceScope(mastra, requestContext)),
name,
description,
instructions: createInstructions,
model,
tools: createTools,
defaultOptions,
workflows,
agents,
integrationTools: createIntegrationTools,
toolProviders,
mcpClients: createMcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser: resolvedBrowser,
requestContextSchema
};
const editor = mastra.getEditor?.();
if (editor) {
await editor.agent.create(input);
} else {
await agentsStore.create({ agent: input });
}
const { versions } = await agentsStore.listVersions({ agentId: id, perPage: 1 });
const initialVersion = versions[0];
if (initialVersion) {
await agentsStore.update({
id,
activeVersionId: initialVersion.id,
status: "published"
});
editor?.agent.clearCache(id);
}
const resolved = await agentsStore.getByIdResolved(id, { status: "published" });
if (!resolved) {
throw new HTTPException(500, { message: "Failed to resolve created agent" });
}
return enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
} catch (error) {
return handleError(error, "Error creating stored agent");
}
}
});
var UPDATE_STORED_AGENT_ROUTE = createRoute({
method: "PATCH",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: storedAgentIdPathParams,
bodySchema: updateStoredAgentBodySchema,
responseSchema: updateStoredAgentResponseSchema,
summary: "Update stored agent",
description: "Updates an existing agent in storage with the provided fields",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
storedAgentId,
// Metadata-level fields
authorId,
metadata,
visibility,
// Config fields (snapshot-level)
name,
description,
instructions,
model,
tools,
defaultOptions,
workflows,
agents,
integrationTools,
toolProviders,
mcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser,
requestContextSchema,
// Version options
changeMessage,
autoPublish = false
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const existing = await agentsStore.getById(storedAgentId);
if (!existing) {
throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
const scope = await getStoredResourceScope(mastra, requestContext);
assertStoredResourceScope(existing, scope);
assertWriteAccess({
requestContext,
resource: "stored-agents",
resourceId: storedAgentId,
action: "edit",
record: existing
});
validateMetadataAvatarUrl(metadata);
const callerAuthorId = getCallerAuthorId(requestContext) ?? void 0;
const resolvedVisibility = callerAuthorId ? visibility : visibility != null ? "public" : void 0;
const resolvedBrowser = await resolveBrowserField(browser, mastra);
let codeAgentForUpdate;
try {
codeAgentForUpdate = mastra.getAgentById?.(storedAgentId);
} catch {
codeAgentForUpdate = void 0;
}
if (codeAgentForUpdate?.source === "code") {
const ownership = getCodeAgentOwnership(codeAgentForUpdate.__getEditorConfig?.());
if (ownership.ownsInstructions) {
if (instructions !== void 0) {
assertOwnedInstructionsNotEmpty(instructions);
}
} else {
instructions = void 0;
}
if (!ownership.ownsTools && !ownership.ownsToolDescriptionsOnly) {
tools = void 0;
integrationTools = void 0;
mcpClients = void 0;
}
}
const mergedMetadata = { ...existing.metadata ?? {}, ...metadata ?? {} };
const scopedMetadata = scopeStoredResourceMetadata(mergedMetadata, scope);
const updatedAgent = await agentsStore.update({
id: storedAgentId,
authorId,
metadata: scopedMetadata,
visibility: resolvedVisibility,
name,
description,
instructions,
model,
tools,
defaultOptions,
workflows,
agents,
integrationTools,
toolProviders,
mcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser: resolvedBrowser,
requestContextSchema
});
const configFields = {
name,
description,
instructions,
model,
tools,
defaultOptions,
workflows,
agents,
integrationTools,
toolProviders,
mcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser: resolvedBrowser,
requestContextSchema
};
const providedConfigFields = Object.fromEntries(Object.entries(configFields).filter(([_, v]) => v !== void 0));
const autoVersionResult = await handleAutoVersioning(
agentsStore,
storedAgentId,
"agentId",
AGENT_SNAPSHOT_CONFIG_FIELDS,
existing,
updatedAgent,
providedConfigFields,
changeMessage ? { changeMessage } : void 0
);
if (!autoVersionResult) {
throw new Error("handleAutoVersioning returned undefined");
}
const isCodeSource = mastra.getEditor?.()?.getSource?.() === "code";
if (isCodeSource && autoVersionResult.versionCreated && !changeMessage) {
const { versions } = await agentsStore.listVersions({ agentId: storedAgentId, perPage: 2 });
const previousVersion = versions[1];
const isPublishedVersion = previousVersion?.id === existing.activeVersionId;
if (previousVersion && !isPublishedVersion) {
await agentsStore.deleteVersion(previousVersion.id);
}
}
if (autoVersionResult.versionCreated && autoPublish) {
const { versions } = await agentsStore.listVersions({ agentId: storedAgentId, perPage: 1 });
const latestVersion = versions[0];
if (latestVersion) {
await agentsStore.update({
id: storedAgentId,
activeVersionId: latestVersion.id
});
}
}
const editor = mastra.getEditor();
if (editor) {
editor.agent.clearCache(storedAgentId);
}
const resolved = await agentsStore.getByIdResolved(storedAgentId, { status: "draft" });
if (!resolved) {
throw new HTTPException(500, { message: "Failed to resolve updated agent" });
}
return enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
} catch (error) {
return handleError(error, "Error updating stored agent");
}
}
});
var DELETE_STORED_AGENT_ROUTE = createRoute({
method: "DELETE",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: storedAgentIdPathParams,
responseSchema: deleteStoredAgentResponseSchema,
summary: "Delete stored agent",
description: "Deletes an agent from storage by its unique identifier",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const existing = await agentsStore.getById(storedAgentId);
if (!existing) {
throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));
assertWriteAccess({
requestContext,
resource: "stored-agents",
resourceId: storedAgentId,
action: "delete",
record: existing
});
await agentsStore.delete(storedAgentId);
try {
const favoritesStore = await storage.getStore("favorites");
await favoritesStore?.deleteFavoritesForEntity({ entityType: "agent", entityId: storedAgentId });
} catch (cascadeError) {
mastra.getLogger?.()?.warn?.("Failed to cascade-delete favorites for agent", { storedAgentId, error: cascadeError });
}
mastra.getEditor()?.agent.clearCache(storedAgentId);
return { success: true, message: `Agent ${storedAgentId} deleted successfully` };
} catch (error) {
return handleError(error, "Error deleting stored agent");
}
}
});
var GET_STORED_AGENT_DEPENDENTS_ROUTE = createRoute({
method: "GET",
path: "/stored/agents/:storedAgentId/dependents",
responseType: "json",
pathParamSchema: storedAgentIdPathParams,
responseSchema: getStoredAgentDependentsResponseSchema,
summary: "List dependents of a stored agent",
description: "Returns agents that reference the target as a sub-agent. Used to warn before deleting or unsharing. Caller-readable references appear in `dependents` (id + name); cross-workspace references the caller cannot read are aggregated in `hiddenCount` and only surfaced when the target is public.",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const target = await agentsStore.getById(storedAgentId);
if (!target) {
throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
assertStoredResourceScope(target, await getStoredResourceScope(mastra, requestContext));
assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: target });
const filter = resolveAuthorFilter({ requestContext, resource: "stored-agents" });
const all = await agentsStore.listResolved({
perPage: false,
status: "published"
});
const targetIsPublic = target.visibility === "public";
const dependents = [];
let hiddenCount = 0;
for (const record of all.agents) {
if (record.id === storedAgentId) continue;
if (!referencesTarget(record.agents, storedAgentId)) continue;
if (matchesAuthorFilter(record, filter)) {
dependents.push({
id: record.id,
name: record.name ?? record.id
});
} else if (targetIsPublic) {
hiddenCount += 1;
}
}
return { dependents, hiddenCount };
} catch (error) {
return handleError(error, "Error listing stored agent dependents");
}
}
});
function referencesTarget(subAgents, targetId) {
if (!subAgents) return false;
if (Array.isArray(subAgents)) {
return subAgents.some((variant) => {
const value = variant?.value;
return Boolean(value && typeof value === "object" && Object.prototype.hasOwnProperty.call(value, targetId));
});
}
if (typeof subAgents === "object") {
return Object.prototype.hasOwnProperty.call(subAgents, targetId);
}
return false;
}
var PREVIEW_INSTRUCTIONS_ROUTE = createRoute({
method: "POST",
path: "/stored/agents/preview-instructions",
responseType: "json",
bodySchema: previewInstructionsBodySchema,
responseSchema: previewInstructionsResponseSchema,
summary: "Preview resolved instructions",
description: "Resolves an array of instruction blocks against a request context, evaluating rules, fetching prompt block references, and rendering template variables. Returns the final concatenated instruction string.",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, blocks, context }) => {
try {
const editor = mastra.getEditor();
if (!editor) {
throw new HTTPException(500, { message: "Editor is not configured" });
}
const result = await editor.prompt.preview(blocks, context ?? {});
return { result };
} catch (error) {
return handleError(error, "Error previewing instructions");
}
}
});
export { CREATE_STORED_AGENT_ROUTE, DELETE_STORED_AGENT_ROUTE, EXPORT_STORED_AGENT_ROUTE, GET_STORED_AGENT_DEPENDENTS_ROUTE, GET_STORED_AGENT_ROUTE, LIST_STORED_AGENTS_ROUTE, OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE, PREVIEW_INSTRUCTIONS_ROUTE, UPDATE_STORED_AGENT_ROUTE };
//# sourceMappingURL=chunk-7RPGRDSC.js.map
//# sourceMappingURL=chunk-7RPGRDSC.js.map

Sorry, the diff of this file is too big to display

'use strict';
var chunkKK6BI6UL_cjs = require('./chunk-KK6BI6UL.cjs');
var chunkF3HP5HM6_cjs = require('./chunk-F3HP5HM6.cjs');
var chunkOFF7L43B_cjs = require('./chunk-OFF7L43B.cjs');
var chunkBPREBJ3Z_cjs = require('./chunk-BPREBJ3Z.cjs');
var chunkQQJHGSB2_cjs = require('./chunk-QQJHGSB2.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
var crypto = require('crypto');
// src/server/handlers/conversations.ts
var conversations_exports = {};
chunkO7I5CWRX_cjs.__export(conversations_exports, {
CREATE_CONVERSATION_ROUTE: () => CREATE_CONVERSATION_ROUTE,
DELETE_CONVERSATION_ROUTE: () => DELETE_CONVERSATION_ROUTE,
GET_CONVERSATION_ITEMS_ROUTE: () => GET_CONVERSATION_ITEMS_ROUTE,
GET_CONVERSATION_ROUTE: () => GET_CONVERSATION_ROUTE
});
function buildConversationObject({ thread }) {
return {
id: thread.id,
object: "conversation",
thread
};
}
function buildConversationItemsList(items) {
return {
object: "list",
data: items,
first_id: items[0]?.id ?? null,
last_id: items.at(-1)?.id ?? null,
has_more: false
};
}
function buildConversationDeleted(conversationId) {
return {
id: conversationId,
object: "conversation.deleted",
deleted: true
};
}
var CREATE_CONVERSATION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/v1/conversations",
responseType: "json",
bodySchema: chunkKK6BI6UL_cjs.createConversationBodySchema,
responseSchema: chunkKK6BI6UL_cjs.conversationObjectSchema,
summary: "Create a conversation",
description: "Creates a new thread-backed conversation for agent-backed Responses API requests",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunkQQJHGSB2_cjs.MastraFGAPermissions.AGENTS_CREATE,
handler: async ({ mastra, requestContext, agent_id, conversation_id, resource_id, title, metadata }) => {
try {
if (!mastra) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Mastra instance is required for conversations" });
}
const agent = await chunkBPREBJ3Z_cjs.getAgentFromSystem({ mastra, agentId: agent_id });
const memory = await agent.getMemory({ requestContext });
if (!memory) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Agent "${agent.id}" does not have memory configured` });
}
if (!await chunkOFF7L43B_cjs.getAgentMemoryStore({ agent, requestContext })) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Memory storage is not configured for agent "${agent.id}"` });
}
const threadId = conversation_id ?? crypto.randomUUID();
const resourceId = chunkQQJHGSB2_cjs.getEffectiveResourceId(requestContext, resource_id) ?? threadId;
const thread = await memory.createThread({
threadId,
resourceId,
title,
metadata
});
return buildConversationObject({ thread });
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating conversation");
}
}
});
var GET_CONVERSATION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/v1/conversations/:conversationId",
responseType: "json",
pathParamSchema: chunkKK6BI6UL_cjs.conversationIdPathParams,
responseSchema: chunkKK6BI6UL_cjs.conversationObjectSchema,
summary: "Retrieve a conversation",
description: "Returns a conversation object backed by a Mastra memory thread",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunkQQJHGSB2_cjs.MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await chunkOFF7L43B_cjs.findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });
if (!match) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Conversation ${conversationId} was not found` });
}
return buildConversationObject({ thread: match.thread });
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error retrieving conversation");
}
}
});
var GET_CONVERSATION_ITEMS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/v1/conversations/:conversationId/items",
responseType: "json",
pathParamSchema: chunkKK6BI6UL_cjs.conversationIdPathParams,
responseSchema: chunkKK6BI6UL_cjs.conversationItemsListSchema,
summary: "List conversation items",
description: "Returns OpenAI-style conversation items derived from the stored thread messages",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunkQQJHGSB2_cjs.MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await chunkOFF7L43B_cjs.findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });
if (!match) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Conversation ${conversationId} was not found` });
}
const { messages } = await match.memoryStore.listMessages({
threadId: conversationId,
page: 0,
perPage: 1e3
});
return buildConversationItemsList(chunkF3HP5HM6_cjs.mapMastraMessagesToConversationItems(messages));
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error retrieving conversation");
}
}
});
var DELETE_CONVERSATION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/v1/conversations/:conversationId",
responseType: "json",
pathParamSchema: chunkKK6BI6UL_cjs.conversationIdPathParams,
responseSchema: chunkKK6BI6UL_cjs.conversationDeletedSchema,
summary: "Delete a conversation",
description: "Deletes a thread-backed conversation and its stored items",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunkQQJHGSB2_cjs.MastraFGAPermissions.AGENTS_DELETE,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await chunkOFF7L43B_cjs.findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });
if (!match) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Conversation ${conversationId} was not found` });
}
await match.memoryStore.deleteThread({ threadId: conversationId });
return buildConversationDeleted(conversationId);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error deleting conversation");
}
}
});
exports.CREATE_CONVERSATION_ROUTE = CREATE_CONVERSATION_ROUTE;
exports.DELETE_CONVERSATION_ROUTE = DELETE_CONVERSATION_ROUTE;
exports.GET_CONVERSATION_ITEMS_ROUTE = GET_CONVERSATION_ITEMS_ROUTE;
exports.GET_CONVERSATION_ROUTE = GET_CONVERSATION_ROUTE;
exports.conversations_exports = conversations_exports;
//# sourceMappingURL=chunk-7WMI6EAV.cjs.map
//# sourceMappingURL=chunk-7WMI6EAV.cjs.map
{"version":3,"sources":["../src/server/handlers/conversations.ts"],"names":["__export","createRoute","createConversationBodySchema","conversationObjectSchema","MastraFGAPermissions","HTTPException","getAgentFromSystem","getAgentMemoryStore","randomUUID","getEffectiveResourceId","handleError","conversationIdPathParams","findConversationThreadAcrossAgents","conversationItemsListSchema","mapMastraMessagesToConversationItems","conversationDeletedSchema"],"mappings":"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","file":"chunk-7WMI6EAV.cjs","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n conversationDeletedSchema,\n conversationIdPathParams,\n conversationItemsListSchema,\n conversationObjectSchema,\n createConversationBodySchema,\n} from '../schemas/conversations';\nimport type { ConversationDeleted, ConversationItemsList, ConversationObject } from '../schemas/conversations';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\nimport { mapMastraMessagesToConversationItems } from './responses.adapter';\nimport { findConversationThreadAcrossAgents, getAgentMemoryStore } from './responses.storage';\nimport { getEffectiveResourceId } from './utils';\n\nfunction buildConversationObject({ thread }: { thread: ConversationObject['thread'] }): ConversationObject {\n return {\n id: thread.id,\n object: 'conversation',\n thread,\n };\n}\n\nfunction buildConversationItemsList(items: ConversationItemsList['data']): ConversationItemsList {\n return {\n object: 'list',\n data: items,\n first_id: items[0]?.id ?? null,\n last_id: items.at(-1)?.id ?? null,\n has_more: false,\n };\n}\n\nfunction buildConversationDeleted(conversationId: string): ConversationDeleted {\n return {\n id: conversationId,\n object: 'conversation.deleted',\n deleted: true,\n };\n}\n\nexport const CREATE_CONVERSATION_ROUTE = createRoute({\n method: 'POST',\n path: '/v1/conversations',\n responseType: 'json',\n bodySchema: createConversationBodySchema,\n responseSchema: conversationObjectSchema,\n summary: 'Create a conversation',\n description: 'Creates a new thread-backed conversation for agent-backed Responses API requests',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_CREATE,\n handler: async ({ mastra, requestContext, agent_id, conversation_id, resource_id, title, metadata }) => {\n try {\n if (!mastra) {\n throw new HTTPException(500, { message: 'Mastra instance is required for conversations' });\n }\n\n const agent = await getAgentFromSystem({ mastra, agentId: agent_id });\n const memory = await agent.getMemory({ requestContext });\n if (!memory) {\n throw new HTTPException(400, { message: `Agent \"${agent.id}\" does not have memory configured` });\n }\n if (!(await getAgentMemoryStore({ agent, requestContext }))) {\n throw new HTTPException(400, { message: `Memory storage is not configured for agent \"${agent.id}\"` });\n }\n\n const threadId = conversation_id ?? randomUUID();\n const resourceId = getEffectiveResourceId(requestContext, resource_id) ?? threadId;\n const thread = await memory.createThread({\n threadId,\n resourceId,\n title,\n metadata,\n });\n\n return buildConversationObject({ thread });\n } catch (error) {\n return handleError(error, 'Error creating conversation');\n }\n },\n});\n\nexport const GET_CONVERSATION_ROUTE = createRoute({\n method: 'GET',\n path: '/v1/conversations/:conversationId',\n responseType: 'json',\n pathParamSchema: conversationIdPathParams,\n responseSchema: conversationObjectSchema,\n summary: 'Retrieve a conversation',\n description: 'Returns a conversation object backed by a Mastra memory thread',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_READ,\n handler: async ({ mastra, requestContext, conversationId }) => {\n try {\n const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });\n if (!match) {\n throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });\n }\n\n return buildConversationObject({ thread: match.thread });\n } catch (error) {\n return handleError(error, 'Error retrieving conversation');\n }\n },\n});\n\nexport const GET_CONVERSATION_ITEMS_ROUTE = createRoute({\n method: 'GET',\n path: '/v1/conversations/:conversationId/items',\n responseType: 'json',\n pathParamSchema: conversationIdPathParams,\n responseSchema: conversationItemsListSchema,\n summary: 'List conversation items',\n description: 'Returns OpenAI-style conversation items derived from the stored thread messages',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_READ,\n handler: async ({ mastra, requestContext, conversationId }) => {\n try {\n const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });\n if (!match) {\n throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });\n }\n\n const { messages } = await match.memoryStore.listMessages({\n threadId: conversationId,\n page: 0,\n perPage: 1000,\n });\n\n return buildConversationItemsList(mapMastraMessagesToConversationItems(messages));\n } catch (error) {\n return handleError(error, 'Error retrieving conversation');\n }\n },\n});\n\nexport const DELETE_CONVERSATION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/v1/conversations/:conversationId',\n responseType: 'json',\n pathParamSchema: conversationIdPathParams,\n responseSchema: conversationDeletedSchema,\n summary: 'Delete a conversation',\n description: 'Deletes a thread-backed conversation and its stored items',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_DELETE,\n handler: async ({ mastra, requestContext, conversationId }) => {\n try {\n const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });\n if (!match) {\n throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });\n }\n\n await match.memoryStore.deleteThread({ threadId: conversationId });\n\n return buildConversationDeleted(conversationId);\n } catch (error) {\n return handleError(error, 'Error deleting conversation');\n }\n },\n});\n"]}
'use strict';
var chunkP2X2Q6N6_cjs = require('./chunk-P2X2Q6N6.cjs');
var chunkO4O2EJF7_cjs = require('./chunk-O4O2EJF7.cjs');
var chunkKI6RMI7A_cjs = require('./chunk-KI6RMI7A.cjs');
var chunkWMS7BOP7_cjs = require('./chunk-WMS7BOP7.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
// src/server/handlers/stored-skill-favorites.ts
async function getFavoritesContext(mastra) {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Skills storage domain is not available" });
}
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Favorites storage domain is not available" });
}
return { skillStore, favoritesStore };
}
var FAVORITE_STORED_SKILL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "PUT",
path: "/stored/skills/:storedSkillId/favorite",
responseType: "json",
pathParamSchema: chunkP2X2Q6N6_cjs.storedSkillIdPathParams,
responseSchema: chunkO4O2EJF7_cjs.favoriteToggleResponseSchema,
summary: "Favorite a stored skill",
description: "Marks the stored skill as favorited by the calling user. Idempotent.",
tags: ["Stored Skills"],
requiresAuth: true,
requiresPermission: "stored-skills:read",
handler: async ({ mastra, requestContext, storedSkillId }) => {
try {
await chunkKI6RMI7A_cjs.requireBuilderFeature(mastra, "favorites");
const callerId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext);
if (!callerId) {
throw new chunk64ITUOXI_cjs.HTTPException(401, { message: "Authentication required" });
}
const { skillStore, favoritesStore } = await getFavoritesContext(mastra);
const skill = await skillStore.getByIdResolved(storedSkillId);
if (!skill) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(skill, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-skills", resourceId: storedSkillId, record: skill });
const result = await favoritesStore.favorite({
userId: callerId,
entityType: "skill",
entityId: storedSkillId
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error favoriting stored skill");
}
}
});
var UNFAVORITE_STORED_SKILL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/stored/skills/:storedSkillId/favorite",
responseType: "json",
pathParamSchema: chunkP2X2Q6N6_cjs.storedSkillIdPathParams,
responseSchema: chunkO4O2EJF7_cjs.favoriteToggleResponseSchema,
summary: "Unfavorite a stored skill",
description: "Removes the caller\u2019s favorite from the stored skill. Idempotent.",
tags: ["Stored Skills"],
requiresAuth: true,
requiresPermission: "stored-skills:read",
handler: async ({ mastra, requestContext, storedSkillId }) => {
try {
await chunkKI6RMI7A_cjs.requireBuilderFeature(mastra, "favorites");
const callerId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext);
if (!callerId) {
throw new chunk64ITUOXI_cjs.HTTPException(401, { message: "Authentication required" });
}
const { skillStore, favoritesStore } = await getFavoritesContext(mastra);
const skill = await skillStore.getByIdResolved(storedSkillId);
if (!skill) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(skill, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-skills", resourceId: storedSkillId, record: skill });
const result = await favoritesStore.unfavorite({
userId: callerId,
entityType: "skill",
entityId: storedSkillId
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error unfavoriting stored skill");
}
}
});
exports.FAVORITE_STORED_SKILL_ROUTE = FAVORITE_STORED_SKILL_ROUTE;
exports.UNFAVORITE_STORED_SKILL_ROUTE = UNFAVORITE_STORED_SKILL_ROUTE;
//# sourceMappingURL=chunk-BHYWGD5O.cjs.map
//# sourceMappingURL=chunk-BHYWGD5O.cjs.map
{"version":3,"sources":["../src/server/handlers/stored-skill-favorites.ts"],"names":["HTTPException","createRoute","storedSkillIdPathParams","favoriteToggleResponseSchema","requireBuilderFeature","getCallerAuthorId","assertStoredResourceScope","getStoredResourceScope","assertReadAccess","handleError"],"mappings":"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","file":"chunk-BHYWGD5O.cjs","sourcesContent":["import { HTTPException } from '../http-exception';\nimport { favoriteToggleResponseSchema } from '../schemas/favorites';\nimport { storedSkillIdPathParams } from '../schemas/stored-skills';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { assertReadAccess, getCallerAuthorId } from './authorship';\nimport { requireBuilderFeature } from './editor-builder';\nimport { handleError } from './error';\n\n/**\n * Resolves the storage and favorites domains, throwing 500 if unavailable.\n */\nasync function getFavoritesContext(mastra: Parameters<typeof requireBuilderFeature>[0]) {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) {\n throw new HTTPException(500, { message: 'Favorites storage domain is not available' });\n }\n return { skillStore, favoritesStore };\n}\n\n/**\n * PUT /stored/skills/:storedSkillId/favorite\n */\nexport const FAVORITE_STORED_SKILL_ROUTE = createRoute({\n method: 'PUT',\n path: '/stored/skills/:storedSkillId/favorite',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Favorite a stored skill',\n description: 'Marks the stored skill as favorited by the calling user. Idempotent.',\n tags: ['Stored Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { skillStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const skill = await skillStore.getByIdResolved(storedSkillId);\n if (!skill) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller cannot read the skill (private + not owner/admin).\n assertReadAccess({ requestContext, resource: 'stored-skills', resourceId: storedSkillId, record: skill });\n\n const result = await favoritesStore.favorite({\n userId: callerId,\n entityType: 'skill',\n entityId: storedSkillId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error favoriting stored skill');\n }\n },\n});\n\n/**\n * DELETE /stored/skills/:storedSkillId/favorite\n */\nexport const UNFAVORITE_STORED_SKILL_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/skills/:storedSkillId/favorite',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Unfavorite a stored skill',\n description: 'Removes the caller’s favorite from the stored skill. Idempotent.',\n tags: ['Stored Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { skillStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const skill = await skillStore.getByIdResolved(storedSkillId);\n if (!skill) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));\n\n assertReadAccess({ requestContext, resource: 'stored-skills', resourceId: storedSkillId, record: skill });\n\n const result = await favoritesStore.unfavorite({\n userId: callerId,\n entityType: 'skill',\n entityId: storedSkillId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error unfavoriting stored skill');\n }\n },\n});\n"]}

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

'use strict';
var chunkHHTDYBRJ_cjs = require('./chunk-HHTDYBRJ.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var fs = require('fs');
var SOURCE_PROVIDER_CAPABILITIES_TIMEOUT_MS = 3e3;
async function getSourceProviderCapabilities(getCapabilities) {
let timeout;
try {
return await Promise.race([
getCapabilities(),
new Promise((_, reject) => {
timeout = setTimeout(
() => reject(new Error("Source provider capabilities timed out")),
SOURCE_PROVIDER_CAPABILITIES_TIMEOUT_MS
);
})
]);
} finally {
if (timeout) clearTimeout(timeout);
}
}
async function getEditorSourceCapabilities(editor) {
const editorSource = editor.getSource?.();
if (!editorSource) return void 0;
if (editorSource === "db") {
return {
source: editorSource,
storage: "database",
canSave: true,
canOpenChangeRequest: false
};
}
const configuredProvider = editor.getSourceControlProvider?.();
if (configuredProvider) {
const provider = {
id: configuredProvider.id,
displayName: configuredProvider.displayName
};
try {
const capabilities = await getSourceProviderCapabilities(() => configuredProvider.getCapabilities());
return {
source: editorSource,
storage: "source-provider",
provider,
canSave: capabilities.canWrite,
canOpenChangeRequest: capabilities.canOpenChangeRequest,
unavailableReason: capabilities.canWrite ? void 0 : capabilities.reason
};
} catch {
return {
source: editorSource,
storage: "source-provider",
provider,
canSave: false,
canOpenChangeRequest: false,
unavailableReason: "Unable to load source provider capabilities."
};
}
}
const sourceProvider = process.env.MASTRA_SOURCE_PROVIDER;
if (sourceProvider) {
return {
source: editorSource,
storage: "source-provider",
provider: {
id: sourceProvider,
displayName: process.env.MASTRA_SOURCE_PROVIDER_NAME || sourceProvider
},
canSave: process.env.MASTRA_SOURCE_STORAGE_CAN_WRITE !== "false",
canOpenChangeRequest: process.env.MASTRA_SOURCE_STORAGE_CAN_OPEN_CHANGE_REQUEST === "true"
};
}
const isHosted = process.env.MASTRA_DEPLOYMENT_ID || process.env.MASTRA_CLOUD_API_ENDPOINT || process.env.MASTRA_PLATFORM_PROJECT_ID;
if (isHosted) {
return {
source: editorSource,
storage: "unavailable",
canSave: false,
canOpenChangeRequest: false,
unavailableReason: "Code-source editing requires a source provider in hosted Studio."
};
}
return {
source: editorSource,
storage: "filesystem",
canSave: true,
canOpenChangeRequest: false
};
}
var GET_API_SCHEMA_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/system/api-schema",
responseType: "json",
responseSchema: chunkHHTDYBRJ_cjs.apiSchemaManifestResponseSchema,
summary: "Get API schema manifest",
description: "Returns the route-contract-derived API schema manifest for the machine-readable CLI",
tags: ["System"],
requiresAuth: true,
handler: async () => {
const { buildApiSchemaManifest } = await import('./api-schema-manifest-F5X4TCI3.cjs');
return buildApiSchemaManifest();
}
});
var GET_SYSTEM_PACKAGES_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/system/packages",
responseType: "json",
responseSchema: chunkHHTDYBRJ_cjs.systemPackagesResponseSchema,
summary: "Get installed Mastra packages",
description: "Returns a list of all installed Mastra packages and their versions from the project",
tags: ["System"],
requiresAuth: true,
handler: async ({ mastra }) => {
try {
const packagesFilePath = process.env.MASTRA_PACKAGES_FILE;
let packages = [];
if (packagesFilePath) {
try {
const fileContent = fs.readFileSync(packagesFilePath, "utf-8");
packages = JSON.parse(fileContent);
} catch {
packages = [];
}
}
const storage = mastra.getStorage();
const storageType = storage?.name;
const observabilityStorage = storage?.stores?.observability;
const observabilityStorageType = observabilityStorage?.constructor.name;
const observabilityStorageFeatures = observabilityStorage?.getFeatures?.();
const observabilityStorageCapabilities = observabilityStorageFeatures?.some(
(feature) => feature === "metrics" || feature === "logs"
) ? {
metrics: observabilityStorageFeatures.includes("metrics"),
logs: observabilityStorageFeatures.includes("logs")
} : void 0;
const observabilityRuntimeStrategy = observabilityStorage?.runtimeTracingStrategy;
const observabilityEnabled = !!mastra.observability.getDefaultInstance();
const editor = mastra.getEditor();
const editorSource = editor?.getSource?.();
const editorSourceCapabilities = editor ? await getEditorSourceCapabilities(editor) : void 0;
return {
packages,
isDev: process.env.MASTRA_DEV === "true",
cmsEnabled: !!editor,
editorSource,
editorSourceCapabilities,
observabilityEnabled,
storageType,
observabilityStorageType,
...observabilityStorageCapabilities ? { observabilityStorageCapabilities } : {},
observabilityRuntimeStrategy
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting system packages");
}
}
});
exports.GET_API_SCHEMA_ROUTE = GET_API_SCHEMA_ROUTE;
exports.GET_SYSTEM_PACKAGES_ROUTE = GET_SYSTEM_PACKAGES_ROUTE;
//# sourceMappingURL=chunk-DL6MIA5S.cjs.map
//# sourceMappingURL=chunk-DL6MIA5S.cjs.map
{"version":3,"sources":["../src/server/handlers/system.ts"],"names":["createRoute","apiSchemaManifestResponseSchema","systemPackagesResponseSchema","readFileSync","handleError"],"mappings":"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","file":"chunk-DL6MIA5S.cjs","sourcesContent":["import { readFileSync } from 'node:fs';\n\nimport type { MastraPackage } from '../schemas/system';\nimport { apiSchemaManifestResponseSchema, systemPackagesResponseSchema } from '../schemas/system';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\n\nconst SOURCE_PROVIDER_CAPABILITIES_TIMEOUT_MS = 3000;\n\nasync function getSourceProviderCapabilities(\n getCapabilities: () => Promise<{\n canWrite: boolean;\n canOpenChangeRequest: boolean;\n reason?: string;\n }>,\n) {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n try {\n return await Promise.race([\n getCapabilities(),\n new Promise<never>((_, reject) => {\n timeout = setTimeout(\n () => reject(new Error('Source provider capabilities timed out')),\n SOURCE_PROVIDER_CAPABILITIES_TIMEOUT_MS,\n );\n }),\n ]);\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n}\n\nasync function getEditorSourceCapabilities(editor: {\n getSource?: () => 'code' | 'db' | undefined;\n getSourceControlProvider?: () =>\n | {\n id: string;\n displayName: string;\n getCapabilities: () => Promise<{\n canWrite: boolean;\n canOpenChangeRequest: boolean;\n reason?: string;\n }>;\n }\n | undefined;\n}) {\n const editorSource = editor.getSource?.();\n if (!editorSource) return undefined;\n\n if (editorSource === 'db') {\n return {\n source: editorSource,\n storage: 'database' as const,\n canSave: true,\n canOpenChangeRequest: false,\n };\n }\n\n const configuredProvider = editor.getSourceControlProvider?.();\n if (configuredProvider) {\n const provider = {\n id: configuredProvider.id,\n displayName: configuredProvider.displayName,\n };\n try {\n const capabilities = await getSourceProviderCapabilities(() => configuredProvider.getCapabilities());\n return {\n source: editorSource,\n storage: 'source-provider' as const,\n provider,\n canSave: capabilities.canWrite,\n canOpenChangeRequest: capabilities.canOpenChangeRequest,\n unavailableReason: capabilities.canWrite ? undefined : capabilities.reason,\n };\n } catch {\n return {\n source: editorSource,\n storage: 'source-provider' as const,\n provider,\n canSave: false,\n canOpenChangeRequest: false,\n unavailableReason: 'Unable to load source provider capabilities.',\n };\n }\n }\n\n const sourceProvider = process.env.MASTRA_SOURCE_PROVIDER;\n\n if (sourceProvider) {\n return {\n source: editorSource,\n storage: 'source-provider' as const,\n provider: {\n id: sourceProvider,\n displayName: process.env.MASTRA_SOURCE_PROVIDER_NAME || sourceProvider,\n },\n canSave: process.env.MASTRA_SOURCE_STORAGE_CAN_WRITE !== 'false',\n canOpenChangeRequest: process.env.MASTRA_SOURCE_STORAGE_CAN_OPEN_CHANGE_REQUEST === 'true',\n };\n }\n\n const isHosted =\n process.env.MASTRA_DEPLOYMENT_ID || process.env.MASTRA_CLOUD_API_ENDPOINT || process.env.MASTRA_PLATFORM_PROJECT_ID;\n\n if (isHosted) {\n return {\n source: editorSource,\n storage: 'unavailable' as const,\n canSave: false,\n canOpenChangeRequest: false,\n unavailableReason: 'Code-source editing requires a source provider in hosted Studio.',\n };\n }\n\n return {\n source: editorSource,\n storage: 'filesystem' as const,\n canSave: true,\n canOpenChangeRequest: false,\n };\n}\n\nexport const GET_API_SCHEMA_ROUTE = createRoute({\n method: 'GET',\n path: '/system/api-schema',\n responseType: 'json',\n responseSchema: apiSchemaManifestResponseSchema,\n summary: 'Get API schema manifest',\n description: 'Returns the route-contract-derived API schema manifest for the machine-readable CLI',\n tags: ['System'],\n requiresAuth: true,\n handler: async () => {\n // Dynamic import to avoid circular dependency issues\n const { buildApiSchemaManifest } = await import('../server-adapter/api-schema-manifest');\n return buildApiSchemaManifest();\n },\n});\n\nexport const GET_SYSTEM_PACKAGES_ROUTE = createRoute({\n method: 'GET',\n path: '/system/packages',\n responseType: 'json',\n responseSchema: systemPackagesResponseSchema,\n summary: 'Get installed Mastra packages',\n description: 'Returns a list of all installed Mastra packages and their versions from the project',\n tags: ['System'],\n requiresAuth: true,\n handler: async ({ mastra }) => {\n try {\n const packagesFilePath = process.env.MASTRA_PACKAGES_FILE;\n\n let packages: MastraPackage[] = [];\n\n if (packagesFilePath) {\n try {\n const fileContent = readFileSync(packagesFilePath, 'utf-8');\n packages = JSON.parse(fileContent);\n } catch {\n packages = [];\n }\n }\n\n const storage = mastra.getStorage();\n const storageType = storage?.name;\n const observabilityStorage = storage?.stores?.observability;\n const observabilityStorageType = observabilityStorage?.constructor.name;\n const observabilityStorageFeatures = observabilityStorage?.getFeatures?.();\n const observabilityStorageCapabilities = observabilityStorageFeatures?.some(\n feature => feature === 'metrics' || feature === 'logs',\n )\n ? {\n metrics: observabilityStorageFeatures.includes('metrics'),\n logs: observabilityStorageFeatures.includes('logs'),\n }\n : undefined;\n const observabilityRuntimeStrategy = observabilityStorage?.runtimeTracingStrategy;\n const observabilityEnabled = !!mastra.observability.getDefaultInstance();\n\n const editor = mastra.getEditor();\n const editorSource = editor?.getSource?.();\n const editorSourceCapabilities = editor ? await getEditorSourceCapabilities(editor) : undefined;\n\n return {\n packages,\n isDev: process.env.MASTRA_DEV === 'true',\n cmsEnabled: !!editor,\n editorSource,\n editorSourceCapabilities,\n observabilityEnabled,\n storageType,\n observabilityStorageType,\n ...(observabilityStorageCapabilities ? { observabilityStorageCapabilities } : {}),\n observabilityRuntimeStrategy,\n };\n } catch (error) {\n return handleError(error, 'Error getting system packages');\n }\n },\n});\n"]}
import { isBuilderFeatureEnabled } from './chunk-YN5ILIRE.js';
import { getCallerAuthorId } from './chunk-ETR4XOVD.js';
// src/server/handlers/favorites-enrichment.ts
async function prepareFavoritesEnrichment(mastra, requestContext, entityType, entityIds) {
if (!await isBuilderFeatureEnabled(mastra, "favorites")) return null;
const userId = getCallerAuthorId(requestContext);
if (!userId) return null;
const storage = mastra.getStorage();
if (!storage) return null;
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) return null;
const starredIds = entityIds.length === 0 ? /* @__PURE__ */ new Set() : await favoritesStore.isFavoritedBatch({ userId, entityType, entityIds });
return { userId, starredIds, favoritesStore };
}
function stripFavoriteFields(record) {
if ("isFavorited" in record || "favoriteCount" in record) {
const copy = { ...record };
delete copy.isFavorited;
delete copy.favoriteCount;
return copy;
}
return record;
}
async function enrichOrStripFavorites(mastra, requestContext, entityType, record) {
const enrichment = await prepareFavoritesEnrichment(mastra, requestContext, entityType, [record.id]);
if (enrichment) {
return { ...record, isFavorited: enrichment.starredIds.has(record.id) };
}
return stripFavoriteFields(record);
}
export { enrichOrStripFavorites, prepareFavoritesEnrichment, stripFavoriteFields };
//# sourceMappingURL=chunk-DVBKBUY7.js.map
//# sourceMappingURL=chunk-DVBKBUY7.js.map
{"version":3,"sources":["../src/server/handlers/favorites-enrichment.ts"],"names":[],"mappings":";;;;AAyBA,eAAsB,0BAAA,CACpB,MAAA,EACA,cAAA,EACA,UAAA,EACA,SAAA,EACqC;AACrC,EAAA,IAAI,CAAE,MAAM,uBAAA,CAAwB,MAAA,EAAQ,WAAW,GAAI,OAAO,IAAA;AAElE,EAAA,MAAM,MAAA,GAAS,kBAAkB,cAAc,CAAA;AAC/C,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,EAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAClC,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,MAAM,cAAA,GAAiB,MAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA;AACzD,EAAA,IAAI,CAAC,gBAAgB,OAAO,IAAA;AAE5B,EAAA,MAAM,UAAA,GACJ,SAAA,CAAU,MAAA,KAAW,CAAA,uBACb,GAAA,EAAY,GAChB,MAAM,cAAA,CAAe,gBAAA,CAAiB,EAAE,MAAA,EAAQ,UAAA,EAAY,WAAW,CAAA;AAC7E,EAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,cAAA,EAAe;AAC9C;AAMO,SAAS,oBAAsC,MAAA,EAAc;AAClE,EAAA,IAAI,aAAA,IAAiB,MAAA,IAAU,eAAA,IAAmB,MAAA,EAAQ;AACxD,IAAA,MAAM,IAAA,GAAO,EAAE,GAAG,MAAA,EAAO;AACzB,IAAA,OAAO,IAAA,CAAK,WAAA;AACZ,IAAA,OAAO,IAAA,CAAK,aAAA;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AASA,eAAsB,sBAAA,CACpB,MAAA,EACA,cAAA,EACA,UAAA,EACA,MAAA,EACY;AACZ,EAAA,MAAM,UAAA,GAAa,MAAM,0BAAA,CAA2B,MAAA,EAAQ,gBAAgB,UAAA,EAAY,CAAC,MAAA,CAAO,EAAE,CAAC,CAAA;AACnG,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,WAAA,EAAa,WAAW,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,EAAE;AAAA,EACxE;AACA,EAAA,OAAO,oBAAoB,MAAM,CAAA;AACnC","file":"chunk-DVBKBUY7.js","sourcesContent":["import type { Mastra } from '@mastra/core';\nimport type { RequestContext } from '@mastra/core/di';\nimport type { FavoritesStorage, StorageFavoriteEntityType } from '@mastra/core/storage';\n\nimport { getCallerAuthorId } from './authorship';\nimport { isBuilderFeatureEnabled } from './editor-builder';\n\n/**\n * Result of `prepareFavoritesEnrichment` — `null` when the `favorites` EE feature is off.\n * When non-null the caller may use `starredIds` to set `isFavorited` on records\n * and may pass `userId` along to storage list paths for pin-favorited-first\n * sorting (`pinFavoritedFor`).\n */\nexport type FavoritesEnrichmentContext = {\n userId: string;\n starredIds: Set<string>;\n favoritesStore: FavoritesStorage;\n} | null;\n\n/**\n * Resolve the EE feature flag plus the caller's favorited set for a list of\n * candidate entity IDs in one shot. Soft-gated: returns `null` if the feature\n * is off or there's no caller — handlers should drop `isFavorited` / `favoriteCount`\n * fields and ignore `?favoritedOnly=true` in that case.\n */\nexport async function prepareFavoritesEnrichment(\n mastra: Mastra,\n requestContext: RequestContext,\n entityType: StorageFavoriteEntityType,\n entityIds: string[],\n): Promise<FavoritesEnrichmentContext> {\n if (!(await isBuilderFeatureEnabled(mastra, 'favorites'))) return null;\n\n const userId = getCallerAuthorId(requestContext);\n if (!userId) return null;\n\n const storage = mastra.getStorage();\n if (!storage) return null;\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) return null;\n\n const starredIds =\n entityIds.length === 0\n ? new Set<string>()\n : await favoritesStore.isFavoritedBatch({ userId, entityType, entityIds });\n return { userId, starredIds, favoritesStore };\n}\n\n/**\n * Strip the favorites EE fields from a record. Used when the feature is off so\n * stale values from storage do not leak through the API.\n */\nexport function stripFavoriteFields<T extends object>(record: T): T {\n if ('isFavorited' in record || 'favoriteCount' in record) {\n const copy = { ...record } as Record<string, unknown>;\n delete copy.isFavorited;\n delete copy.favoriteCount;\n return copy as T;\n }\n return record;\n}\n\n/**\n * Convenience for single-entity handlers (GET / POST / PATCH): annotate\n * `isFavorited` from the caller's favorites set when enrichment is available,\n * otherwise strip both favorite fields. `favoriteCount` is the canonical\n * mirrored counter and is left in place so callers can render share-count UI\n * (it's identical across viewers).\n */\nexport async function enrichOrStripFavorites<T extends { id: string }>(\n mastra: Mastra,\n requestContext: RequestContext,\n entityType: StorageFavoriteEntityType,\n record: T,\n): Promise<T> {\n const enrichment = await prepareFavoritesEnrichment(mastra, requestContext, entityType, [record.id]);\n if (enrichment) {\n return { ...record, isFavorited: enrichment.starredIds.has(record.id) };\n }\n return stripFavoriteFields(record);\n}\n"]}
'use strict';
var chunk7KFYDYFN_cjs = require('./chunk-7KFYDYFN.cjs');
var chunk7X3YWKHD_cjs = require('./chunk-7X3YWKHD.cjs');
var chunkDL6MIA5S_cjs = require('./chunk-DL6MIA5S.cjs');
var chunkOCDUNF52_cjs = require('./chunk-OCDUNF52.cjs');
var chunkJKTLOG4J_cjs = require('./chunk-JKTLOG4J.cjs');
var chunkJGQYJ3ZU_cjs = require('./chunk-JGQYJ3ZU.cjs');
var chunkW543ZJQB_cjs = require('./chunk-W543ZJQB.cjs');
var chunkNTS3DORC_cjs = require('./chunk-NTS3DORC.cjs');
var chunkLJNTC2CX_cjs = require('./chunk-LJNTC2CX.cjs');
var chunkBHYWGD5O_cjs = require('./chunk-BHYWGD5O.cjs');
var chunkG7VOOYJX_cjs = require('./chunk-G7VOOYJX.cjs');
var chunkGHTMFCWF_cjs = require('./chunk-GHTMFCWF.cjs');
var chunkHWACFNNH_cjs = require('./chunk-HWACFNNH.cjs');
var chunkLYZLM7TQ_cjs = require('./chunk-LYZLM7TQ.cjs');
var chunkABAQRIVF_cjs = require('./chunk-ABAQRIVF.cjs');
var chunkS7Y6AP64_cjs = require('./chunk-S7Y6AP64.cjs');
var chunkKI6RMI7A_cjs = require('./chunk-KI6RMI7A.cjs');
var chunkUL3UXUNU_cjs = require('./chunk-UL3UXUNU.cjs');
var chunkO4PNIMVX_cjs = require('./chunk-O4PNIMVX.cjs');
var chunkIUYVKYLU_cjs = require('./chunk-IUYVKYLU.cjs');
var chunkA7MIAAKW_cjs = require('./chunk-A7MIAAKW.cjs');
var chunkPPJXCZCX_cjs = require('./chunk-PPJXCZCX.cjs');
var chunkH5LNJS3E_cjs = require('./chunk-H5LNJS3E.cjs');
var chunk2CMAB3SO_cjs = require('./chunk-2CMAB3SO.cjs');
var chunkN752ZCPA_cjs = require('./chunk-N752ZCPA.cjs');
var chunkUGQH3IIT_cjs = require('./chunk-UGQH3IIT.cjs');
var chunkY4O5EGAC_cjs = require('./chunk-Y4O5EGAC.cjs');
var chunkIDCO7C4M_cjs = require('./chunk-IDCO7C4M.cjs');
var chunkT2P7FDNG_cjs = require('./chunk-T2P7FDNG.cjs');
var chunkLERI4STI_cjs = require('./chunk-LERI4STI.cjs');
var chunkWCTXV424_cjs = require('./chunk-WCTXV424.cjs');
var chunkTH7EIZLU_cjs = require('./chunk-TH7EIZLU.cjs');
var chunk7WMI6EAV_cjs = require('./chunk-7WMI6EAV.cjs');
var chunkUSKSOKOS_cjs = require('./chunk-USKSOKOS.cjs');
var chunkVUQNCTOR_cjs = require('./chunk-VUQNCTOR.cjs');
var chunkBPREBJ3Z_cjs = require('./chunk-BPREBJ3Z.cjs');
var chunkSOCH5SNI_cjs = require('./chunk-SOCH5SNI.cjs');
var chunk55DF3BIU_cjs = require('./chunk-55DF3BIU.cjs');
var chunkNKG3PCTS_cjs = require('./chunk-NKG3PCTS.cjs');
var chunk52QOAXPM_cjs = require('./chunk-52QOAXPM.cjs');
// src/server/server-adapter/routes/permissions.ts
var METHOD_TO_ACTION = {
GET: "read",
POST: "write",
// Default for POST, may be overridden to 'execute'
PUT: "write",
PATCH: "write",
DELETE: "delete"
};
var EXECUTE_PATTERNS = [
"/generate",
"/stream",
"/execute",
"/start",
"/resume",
"/restart",
"/cancel",
"/approve",
"/decline",
"/speak",
"/listen",
"/query",
"/search",
"/observe",
"/time-travel",
"/enhance",
"/clone"
];
var PUBLISH_PATTERNS = ["/publish", "/activate", "/restore"];
var STORED_RESOURCE_SEGMENTS = {
agents: "stored-agents",
"mcp-clients": "stored-mcp-clients",
"prompt-blocks": "stored-prompt-blocks",
scorers: "stored-scorers",
skills: "stored-skills",
workspaces: "stored-workspaces"
};
function extractResource(path) {
const segments = path.replace(/^\//, "").split("/");
if (segments.length === 0) {
return null;
}
const firstSegment = segments[0];
if (firstSegment === "stored" && segments[1]) {
return STORED_RESOURCE_SEGMENTS[segments[1]] ?? null;
}
if (firstSegment === ".well-known") {
return "a2a";
}
return firstSegment || null;
}
function deriveAction(method, path) {
const upperMethod = method.toUpperCase();
if (upperMethod === "POST") {
if (path.startsWith("/stored/")) {
const isPublishOperation = PUBLISH_PATTERNS.some((pattern) => path.endsWith(pattern));
if (isPublishOperation) {
return "publish";
}
}
const isExecuteOperation = EXECUTE_PATTERNS.some((pattern) => path.includes(pattern));
return isExecuteOperation ? "execute" : "write";
}
return METHOD_TO_ACTION[upperMethod] || "read";
}
function derivePermission(route) {
if (route.method === "ALL") {
return null;
}
const resource = extractResource(route.path);
if (!resource) {
return null;
}
const action = deriveAction(route.method, route.path);
return `${resource}:${action}`;
}
function getEffectivePermission(route) {
if (route.requiresAuth === false) {
return null;
}
if (route.requiresPermission) {
return route.requiresPermission;
}
return derivePermission(route);
}
// src/server/server-adapter/routes/a2a.ts
var A2A_ROUTES = [chunkVUQNCTOR_cjs.GET_AGENT_CARD_ROUTE, chunkVUQNCTOR_cjs.AGENT_EXECUTION_ROUTE];
// src/server/server-adapter/routes/agent-builder.ts
var AGENT_BUILDER_ROUTES = [
chunk55DF3BIU_cjs.LIST_AGENT_BUILDER_ACTIONS_ROUTE,
chunk55DF3BIU_cjs.GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,
chunk55DF3BIU_cjs.LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,
chunk55DF3BIU_cjs.GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,
chunk55DF3BIU_cjs.CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,
chunk55DF3BIU_cjs.STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.START_AGENT_BUILDER_ACTION_RUN_ROUTE,
chunk55DF3BIU_cjs.OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.RESUME_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE
];
// src/server/server-adapter/routes/agent-controller.ts
var AGENT_CONTROLLER_ROUTES = [
chunk52QOAXPM_cjs.LIST_AGENT_CONTROLLERS_ROUTE,
chunk52QOAXPM_cjs.LIST_AGENT_CONTROLLER_MODES_ROUTE,
chunk52QOAXPM_cjs.LIST_AGENT_CONTROLLER_MODELS_ROUTE,
chunk52QOAXPM_cjs.CREATE_AGENT_CONTROLLER_SESSION_ROUTE,
chunk52QOAXPM_cjs.GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE,
chunk52QOAXPM_cjs.LIST_AGENT_CONTROLLER_THREADS_ROUTE,
chunk52QOAXPM_cjs.CREATE_AGENT_CONTROLLER_THREAD_ROUTE,
chunk52QOAXPM_cjs.DELETE_AGENT_CONTROLLER_THREAD_ROUTE,
chunk52QOAXPM_cjs.RENAME_AGENT_CONTROLLER_THREAD_ROUTE,
chunk52QOAXPM_cjs.CLONE_AGENT_CONTROLLER_THREAD_ROUTE,
chunk52QOAXPM_cjs.LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE,
chunk52QOAXPM_cjs.STREAM_AGENT_CONTROLLER_SESSION_ROUTE,
chunk52QOAXPM_cjs.SEND_AGENT_CONTROLLER_MESSAGE_ROUTE,
chunk52QOAXPM_cjs.STEER_AGENT_CONTROLLER_SESSION_ROUTE,
chunk52QOAXPM_cjs.FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE,
chunk52QOAXPM_cjs.ABORT_AGENT_CONTROLLER_SESSION_ROUTE,
chunk52QOAXPM_cjs.AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE,
chunk52QOAXPM_cjs.AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE,
chunk52QOAXPM_cjs.SWITCH_AGENT_CONTROLLER_MODE_ROUTE,
chunk52QOAXPM_cjs.SWITCH_AGENT_CONTROLLER_MODEL_ROUTE,
chunk52QOAXPM_cjs.SWITCH_AGENT_CONTROLLER_THREAD_ROUTE,
chunk52QOAXPM_cjs.SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE,
chunk52QOAXPM_cjs.GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE,
chunk52QOAXPM_cjs.GET_AGENT_CONTROLLER_OM_RECORD_ROUTE,
chunk52QOAXPM_cjs.SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE,
chunk52QOAXPM_cjs.GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE,
chunk52QOAXPM_cjs.GET_AGENT_CONTROLLER_GOAL_ROUTE,
chunk52QOAXPM_cjs.SET_AGENT_CONTROLLER_GOAL_ROUTE,
chunk52QOAXPM_cjs.UPDATE_AGENT_CONTROLLER_GOAL_ROUTE,
chunk52QOAXPM_cjs.CLEAR_AGENT_CONTROLLER_GOAL_ROUTE,
chunk52QOAXPM_cjs.GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE,
chunk52QOAXPM_cjs.SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE,
chunk52QOAXPM_cjs.SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE,
chunk52QOAXPM_cjs.SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE
];
// src/server/server-adapter/routes/agents.ts
var AGENTS_ROUTES = [
// ============================================================================
// Agent Core Routes
// ============================================================================
chunkBPREBJ3Z_cjs.LIST_AGENTS_ROUTE,
chunkBPREBJ3Z_cjs.GET_PROVIDERS_ROUTE,
chunkBPREBJ3Z_cjs.GET_AGENT_BY_ID_ROUTE,
chunkBPREBJ3Z_cjs.CLONE_AGENT_ROUTE,
// ============================================================================
// Voice Routes
// ============================================================================
chunk2CMAB3SO_cjs.GET_SPEAKERS_ROUTE,
chunk2CMAB3SO_cjs.GET_SPEAKERS_DEPRECATED_ROUTE,
// ============================================================================
// Agent Execution Routes
// ============================================================================
chunkBPREBJ3Z_cjs.GENERATE_AGENT_ROUTE,
chunkBPREBJ3Z_cjs.GENERATE_AGENT_VNEXT_ROUTE,
chunkBPREBJ3Z_cjs.STREAM_GENERATE_ROUTE,
chunkBPREBJ3Z_cjs.STREAM_UNTIL_IDLE_GENERATE_ROUTE,
chunkBPREBJ3Z_cjs.STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,
// ============================================================================
// Resumable Stream Routes
// ============================================================================
chunkBPREBJ3Z_cjs.OBSERVE_AGENT_STREAM_ROUTE,
chunkBPREBJ3Z_cjs.SEND_AGENT_MESSAGE_ROUTE,
chunkBPREBJ3Z_cjs.QUEUE_AGENT_MESSAGE_ROUTE,
chunkBPREBJ3Z_cjs.SEND_AGENT_SIGNAL_ROUTE,
chunkBPREBJ3Z_cjs.ABORT_AGENT_THREAD_ROUTE,
chunkBPREBJ3Z_cjs.SUBSCRIBE_AGENT_THREAD_ROUTE,
// ============================================================================
// Tool Routes
// ============================================================================
chunkUGQH3IIT_cjs.EXECUTE_AGENT_TOOL_ROUTE,
chunkBPREBJ3Z_cjs.APPROVE_TOOL_CALL_ROUTE,
chunkBPREBJ3Z_cjs.SEND_TOOL_APPROVAL_ROUTE,
chunkBPREBJ3Z_cjs.LIST_SUSPENDED_RUNS_ROUTE,
chunkBPREBJ3Z_cjs.DECLINE_TOOL_CALL_ROUTE,
chunkBPREBJ3Z_cjs.RESUME_STREAM_ROUTE,
chunkBPREBJ3Z_cjs.RECOVER_ROUTE,
chunkBPREBJ3Z_cjs.APPROVE_TOOL_CALL_GENERATE_ROUTE,
chunkBPREBJ3Z_cjs.DECLINE_TOOL_CALL_GENERATE_ROUTE,
chunkBPREBJ3Z_cjs.APPROVE_NETWORK_TOOL_CALL_ROUTE,
chunkBPREBJ3Z_cjs.DECLINE_NETWORK_TOOL_CALL_ROUTE,
chunkBPREBJ3Z_cjs.RESUME_STREAM_UNTIL_IDLE_ROUTE,
// ============================================================================
// Network Routes
// ============================================================================
chunkBPREBJ3Z_cjs.STREAM_NETWORK_ROUTE,
// ============================================================================
// Model Management Routes
// ============================================================================
chunkBPREBJ3Z_cjs.UPDATE_AGENT_MODEL_ROUTE,
chunkBPREBJ3Z_cjs.RESET_AGENT_MODEL_ROUTE,
chunkBPREBJ3Z_cjs.REORDER_AGENT_MODEL_LIST_ROUTE,
chunkBPREBJ3Z_cjs.UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,
// ============================================================================
// Instruction Enhancement Routes
// ============================================================================
chunkBPREBJ3Z_cjs.ENHANCE_INSTRUCTIONS_ROUTE,
// ============================================================================
// Agent Tool Routes
// ============================================================================
chunkUGQH3IIT_cjs.GET_AGENT_TOOL_ROUTE,
// ============================================================================
// Agent Skill Routes
// ============================================================================
chunkBPREBJ3Z_cjs.GET_AGENT_SKILL_ROUTE,
// ============================================================================
// Voice/Speech Routes
// ============================================================================
chunk2CMAB3SO_cjs.GENERATE_SPEECH_ROUTE,
chunk2CMAB3SO_cjs.GENERATE_SPEECH_DEPRECATED_ROUTE,
chunk2CMAB3SO_cjs.TRANSCRIBE_SPEECH_ROUTE,
chunk2CMAB3SO_cjs.TRANSCRIBE_SPEECH_DEPRECATED_ROUTE,
chunk2CMAB3SO_cjs.GET_LISTENER_ROUTE,
// ============================================================================
// Deprecated Routes
// ============================================================================
chunkBPREBJ3Z_cjs.STREAM_VNEXT_DEPRECATED_ROUTE,
chunkBPREBJ3Z_cjs.STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,
chunkBPREBJ3Z_cjs.STREAM_UI_MESSAGE_DEPRECATED_ROUTE
];
// src/server/server-adapter/routes/background-tasks.ts
var BACKGROUND_TASK_ROUTES = [
chunkIUYVKYLU_cjs.BACKGROUND_TASK_STREAM_ROUTE,
chunkIUYVKYLU_cjs.LIST_BACKGROUND_TASKS_ROUTE,
chunkIUYVKYLU_cjs.GET_BACKGROUND_TASK_ROUTE
];
// src/server/server-adapter/routes/channels.ts
var CHANNELS_ROUTES = [
chunkPPJXCZCX_cjs.LIST_CHANNEL_PLATFORMS_ROUTE,
chunkPPJXCZCX_cjs.LIST_CHANNEL_INSTALLATIONS_ROUTE,
chunkPPJXCZCX_cjs.CONNECT_CHANNEL_ROUTE,
chunkPPJXCZCX_cjs.DISCONNECT_CHANNEL_ROUTE
];
// src/server/server-adapter/routes/conversations.ts
var CONVERSATIONS_ROUTES = [
chunk7WMI6EAV_cjs.CREATE_CONVERSATION_ROUTE,
chunk7WMI6EAV_cjs.GET_CONVERSATION_ROUTE,
chunk7WMI6EAV_cjs.GET_CONVERSATION_ITEMS_ROUTE,
chunk7WMI6EAV_cjs.DELETE_CONVERSATION_ROUTE
];
// src/server/server-adapter/routes/datasets.ts
var DATASETS_ROUTES = [
// Dataset CRUD
chunkS7Y6AP64_cjs.LIST_DATASETS_ROUTE,
chunkS7Y6AP64_cjs.CREATE_DATASET_ROUTE,
chunkS7Y6AP64_cjs.GET_DATASET_ROUTE,
chunkS7Y6AP64_cjs.UPDATE_DATASET_ROUTE,
chunkS7Y6AP64_cjs.DELETE_DATASET_ROUTE,
// Item list and add
chunkS7Y6AP64_cjs.LIST_ITEMS_ROUTE,
chunkS7Y6AP64_cjs.ADD_ITEM_ROUTE,
// Batch operations - MUST come before item-specific routes to avoid /items/batch matching /items/:itemId
chunkS7Y6AP64_cjs.BATCH_INSERT_ITEMS_ROUTE,
chunkS7Y6AP64_cjs.BATCH_DELETE_ITEMS_ROUTE,
// Item-specific CRUD (uses :itemId param)
chunkS7Y6AP64_cjs.GET_ITEM_ROUTE,
chunkS7Y6AP64_cjs.UPDATE_ITEM_ROUTE,
chunkS7Y6AP64_cjs.DELETE_ITEM_ROUTE,
// Version operations
chunkS7Y6AP64_cjs.LIST_DATASET_VERSIONS_ROUTE,
chunkS7Y6AP64_cjs.LIST_ITEM_VERSIONS_ROUTE,
chunkS7Y6AP64_cjs.GET_ITEM_VERSION_ROUTE,
// All experiments (cross-dataset) - MUST come before dataset-scoped experiments
chunkS7Y6AP64_cjs.LIST_ALL_EXPERIMENTS_ROUTE,
// Experiment review summary (cross-dataset) - MUST come before dataset-scoped experiments
chunkS7Y6AP64_cjs.EXPERIMENT_REVIEW_SUMMARY_ROUTE,
// Experiment operations (dataset-scoped)
chunkS7Y6AP64_cjs.LIST_EXPERIMENTS_ROUTE,
chunkS7Y6AP64_cjs.TRIGGER_EXPERIMENT_ROUTE,
chunkS7Y6AP64_cjs.GET_EXPERIMENT_ROUTE,
chunkS7Y6AP64_cjs.LIST_EXPERIMENT_RESULTS_ROUTE,
chunkS7Y6AP64_cjs.UPDATE_EXPERIMENT_RESULT_ROUTE,
// Analytics
chunkS7Y6AP64_cjs.COMPARE_EXPERIMENTS_ROUTE,
// AI generation
chunkS7Y6AP64_cjs.GENERATE_ITEMS_ROUTE,
// Failure analysis
chunkS7Y6AP64_cjs.CLUSTER_FAILURES_ROUTE
];
// src/server/server-adapter/routes/editor-builder.ts
var EDITOR_BUILDER_ROUTES = [
chunkKI6RMI7A_cjs.GET_EDITOR_BUILDER_SETTINGS_ROUTE,
chunkKI6RMI7A_cjs.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE,
chunkKI6RMI7A_cjs.GET_INFRASTRUCTURE_STATUS_ROUTE,
chunkA7MIAAKW_cjs.LIST_BUILDER_REGISTRIES_ROUTE,
chunkA7MIAAKW_cjs.BUILDER_REGISTRY_SEARCH_ROUTE,
chunkA7MIAAKW_cjs.BUILDER_REGISTRY_POPULAR_ROUTE,
chunkA7MIAAKW_cjs.BUILDER_REGISTRY_PREVIEW_ROUTE,
chunkA7MIAAKW_cjs.BUILDER_REGISTRY_INSTALL_ROUTE
];
// src/server/server-adapter/routes/legacy.ts
var LEGACY_ROUTES = [
// ============================================================================
// Legacy Agent Routes
// ============================================================================
chunkBPREBJ3Z_cjs.GENERATE_LEGACY_ROUTE,
chunkBPREBJ3Z_cjs.STREAM_GENERATE_LEGACY_ROUTE,
// ============================================================================
// Legacy Workflow Routes
// ============================================================================
chunkNKG3PCTS_cjs.STREAM_LEGACY_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE
];
// src/server/server-adapter/routes/logs.ts
var LOGS_ROUTES = [chunkUSKSOKOS_cjs.LIST_LOG_TRANSPORTS_ROUTE, chunkUSKSOKOS_cjs.LIST_LOGS_ROUTE, chunkUSKSOKOS_cjs.LIST_LOGS_BY_RUN_ID_ROUTE];
// src/server/server-adapter/routes/mcp.ts
var MCP_ROUTES = [
// ============================================================================
// MCP Server Registry Routes
// ============================================================================
chunkT2P7FDNG_cjs.LIST_MCP_SERVERS_ROUTE,
chunkT2P7FDNG_cjs.GET_MCP_SERVER_DETAIL_ROUTE,
// ============================================================================
// MCP Server Tool Routes
// ============================================================================
chunkT2P7FDNG_cjs.LIST_MCP_SERVER_TOOLS_ROUTE,
chunkT2P7FDNG_cjs.GET_MCP_SERVER_TOOL_DETAIL_ROUTE,
chunkT2P7FDNG_cjs.EXECUTE_MCP_SERVER_TOOL_ROUTE,
// ============================================================================
// MCP Server Resource Routes
// ============================================================================
chunkT2P7FDNG_cjs.LIST_MCP_SERVER_RESOURCES_ROUTE,
chunkT2P7FDNG_cjs.READ_MCP_SERVER_RESOURCE_ROUTE,
// ============================================================================
// MCP Transport Routes (handled by adapters)
// ============================================================================
chunkT2P7FDNG_cjs.MCP_HTTP_TRANSPORT_ROUTE,
chunkT2P7FDNG_cjs.MCP_SSE_TRANSPORT_ROUTE,
chunkT2P7FDNG_cjs.MCP_SSE_MESSAGES_ROUTE
];
// src/server/server-adapter/routes/memory.ts
var MEMORY_ROUTES = [
chunkLERI4STI_cjs.GET_MEMORY_STATUS_ROUTE,
chunkLERI4STI_cjs.GET_MEMORY_CONFIG_ROUTE,
chunkLERI4STI_cjs.GET_OBSERVATIONAL_MEMORY_ROUTE,
chunkLERI4STI_cjs.AWAIT_BUFFER_STATUS_ROUTE,
chunkLERI4STI_cjs.LIST_THREADS_ROUTE,
chunkLERI4STI_cjs.GET_THREAD_BY_ID_ROUTE,
chunkLERI4STI_cjs.LIST_MESSAGES_ROUTE,
chunkLERI4STI_cjs.GET_WORKING_MEMORY_ROUTE,
chunkLERI4STI_cjs.SAVE_MESSAGES_ROUTE,
chunkLERI4STI_cjs.CREATE_THREAD_ROUTE,
chunkLERI4STI_cjs.UPDATE_THREAD_ROUTE,
chunkLERI4STI_cjs.DELETE_THREAD_ROUTE,
chunkLERI4STI_cjs.CLONE_THREAD_ROUTE,
chunkLERI4STI_cjs.UPDATE_WORKING_MEMORY_ROUTE,
chunkLERI4STI_cjs.DELETE_MESSAGES_ROUTE,
chunkLERI4STI_cjs.SEARCH_MEMORY_ROUTE,
chunkLERI4STI_cjs.GET_MEMORY_STATUS_NETWORK_ROUTE,
chunkLERI4STI_cjs.LIST_THREADS_NETWORK_ROUTE,
chunkLERI4STI_cjs.GET_THREAD_BY_ID_NETWORK_ROUTE,
chunkLERI4STI_cjs.LIST_MESSAGES_NETWORK_ROUTE,
chunkLERI4STI_cjs.SAVE_MESSAGES_NETWORK_ROUTE,
chunkLERI4STI_cjs.CREATE_THREAD_NETWORK_ROUTE,
chunkLERI4STI_cjs.UPDATE_THREAD_NETWORK_ROUTE,
chunkLERI4STI_cjs.DELETE_THREAD_NETWORK_ROUTE,
chunkLERI4STI_cjs.DELETE_MESSAGES_NETWORK_ROUTE
];
// src/server/server-adapter/routes/observability.ts
var OBSERVABILITY_ROUTES = [
// Legacy
chunkWCTXV424_cjs.LIST_TRACES_ROUTE,
chunkWCTXV424_cjs.LIST_TRACES_LIGHT_ROUTE,
chunkWCTXV424_cjs.LIST_BRANCHES_ROUTE,
chunkWCTXV424_cjs.GET_BRANCH_ROUTE,
chunkWCTXV424_cjs.GET_TRACE_ROUTE,
chunkWCTXV424_cjs.GET_TRACE_LIGHT_ROUTE,
chunkWCTXV424_cjs.GET_SPAN_ROUTE,
chunkWCTXV424_cjs.GET_TRACE_TRAJECTORY_ROUTE,
chunkWCTXV424_cjs.SCORE_TRACES_ROUTE,
chunkWCTXV424_cjs.LIST_SCORES_BY_SPAN_ROUTE,
// New observability routes
chunkTH7EIZLU_cjs.LIST_METRICS,
chunkTH7EIZLU_cjs.LIST_LOGS,
chunkTH7EIZLU_cjs.LIST_SCORES,
chunkTH7EIZLU_cjs.CREATE_SCORE,
chunkTH7EIZLU_cjs.GET_SCORE,
chunkTH7EIZLU_cjs.GET_SCORE_AGGREGATE,
chunkTH7EIZLU_cjs.GET_SCORE_BREAKDOWN,
chunkTH7EIZLU_cjs.GET_SCORE_TIME_SERIES,
chunkTH7EIZLU_cjs.GET_SCORE_PERCENTILES,
chunkTH7EIZLU_cjs.LIST_FEEDBACK,
chunkTH7EIZLU_cjs.CREATE_FEEDBACK,
chunkTH7EIZLU_cjs.GET_FEEDBACK_AGGREGATE,
chunkTH7EIZLU_cjs.GET_FEEDBACK_BREAKDOWN,
chunkTH7EIZLU_cjs.GET_FEEDBACK_TIME_SERIES,
chunkTH7EIZLU_cjs.GET_FEEDBACK_PERCENTILES,
chunkTH7EIZLU_cjs.GET_METRIC_AGGREGATE,
chunkTH7EIZLU_cjs.GET_METRIC_BREAKDOWN,
chunkTH7EIZLU_cjs.GET_METRIC_TIME_SERIES,
chunkTH7EIZLU_cjs.GET_METRIC_PERCENTILES,
chunkTH7EIZLU_cjs.GET_METRIC_NAMES,
chunkTH7EIZLU_cjs.GET_METRIC_LABEL_KEYS,
chunkTH7EIZLU_cjs.GET_METRIC_LABEL_VALUES,
chunkTH7EIZLU_cjs.GET_ENTITY_TYPES,
chunkTH7EIZLU_cjs.GET_ENTITY_NAMES,
chunkTH7EIZLU_cjs.GET_SERVICE_NAMES,
chunkTH7EIZLU_cjs.GET_ENVIRONMENTS,
chunkTH7EIZLU_cjs.GET_TAGS
];
// src/server/server-adapter/routes/processor-providers.ts
var PROCESSOR_PROVIDER_ROUTES = [chunkABAQRIVF_cjs.LIST_PROCESSOR_PROVIDERS_ROUTE, chunkABAQRIVF_cjs.GET_PROCESSOR_PROVIDER_ROUTE];
// src/server/server-adapter/routes/processors.ts
var PROCESSORS_ROUTES = [chunkG7VOOYJX_cjs.LIST_PROCESSORS_ROUTE, chunkG7VOOYJX_cjs.GET_PROCESSOR_BY_ID_ROUTE, chunkG7VOOYJX_cjs.EXECUTE_PROCESSOR_ROUTE];
// src/server/server-adapter/routes/responses.ts
var RESPONSES_ROUTES = [chunkIDCO7C4M_cjs.CREATE_RESPONSE_ROUTE, chunkIDCO7C4M_cjs.GET_RESPONSE_ROUTE, chunkIDCO7C4M_cjs.DELETE_RESPONSE_ROUTE];
// src/server/server-adapter/routes/schedules.ts
var SCHEDULES_ROUTES = [
chunkHWACFNNH_cjs.LIST_SCHEDULES_ROUTE,
chunkHWACFNNH_cjs.GET_SCHEDULE_ROUTE,
chunkHWACFNNH_cjs.CREATE_SCHEDULE_ROUTE,
chunkHWACFNNH_cjs.UPDATE_SCHEDULE_ROUTE,
chunkHWACFNNH_cjs.DELETE_SCHEDULE_ROUTE,
chunkHWACFNNH_cjs.LIST_SCHEDULE_TRIGGERS_ROUTE,
chunkHWACFNNH_cjs.PAUSE_SCHEDULE_ROUTE,
chunkHWACFNNH_cjs.RESUME_SCHEDULE_ROUTE,
chunkHWACFNNH_cjs.RUN_SCHEDULE_ROUTE
];
// src/server/server-adapter/routes/scorers.ts
var SCORES_ROUTES = [
chunkY4O5EGAC_cjs.LIST_SCORERS_ROUTE,
chunkY4O5EGAC_cjs.GET_SCORER_ROUTE,
chunkY4O5EGAC_cjs.LIST_SCORES_BY_RUN_ID_ROUTE,
chunkY4O5EGAC_cjs.LIST_SCORES_BY_SCORER_ID_ROUTE,
chunkY4O5EGAC_cjs.LIST_SCORES_BY_ENTITY_ID_ROUTE,
chunkY4O5EGAC_cjs.SAVE_SCORE_ROUTE
];
// src/server/server-adapter/routes/stored-agents.ts
var STORED_AGENTS_ROUTES = [
// ============================================================================
// Stored Agents CRUD Routes
// IMPORTANT: Routes with literal paths (e.g., /preview-instructions) must come
// BEFORE routes with path parameters (e.g., /:storedAgentId) to ensure correct matching.
// ============================================================================
chunkJGQYJ3ZU_cjs.LIST_STORED_AGENTS_ROUTE,
chunkJGQYJ3ZU_cjs.PREVIEW_INSTRUCTIONS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkJGQYJ3ZU_cjs.GET_STORED_AGENT_DEPENDENTS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE (longer literal)
chunkJGQYJ3ZU_cjs.EXPORT_STORED_AGENT_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkJGQYJ3ZU_cjs.OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkJGQYJ3ZU_cjs.GET_STORED_AGENT_ROUTE,
chunkJGQYJ3ZU_cjs.CREATE_STORED_AGENT_ROUTE,
chunkJGQYJ3ZU_cjs.UPDATE_STORED_AGENT_ROUTE,
chunkJGQYJ3ZU_cjs.DELETE_STORED_AGENT_ROUTE,
// ============================================================================
// Agent Versions Routes
// IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE
// routes with path parameters (e.g., /:versionId) to ensure correct matching.
// ============================================================================
chunkO4PNIMVX_cjs.LIST_AGENT_VERSIONS_ROUTE,
chunkO4PNIMVX_cjs.CREATE_AGENT_VERSION_ROUTE,
chunkO4PNIMVX_cjs.COMPARE_AGENT_VERSIONS_ROUTE,
// Must be before GET_AGENT_VERSION_ROUTE
chunkO4PNIMVX_cjs.GET_AGENT_VERSION_ROUTE,
chunkO4PNIMVX_cjs.ACTIVATE_AGENT_VERSION_ROUTE,
chunkO4PNIMVX_cjs.RESTORE_AGENT_VERSION_ROUTE,
chunkO4PNIMVX_cjs.DELETE_AGENT_VERSION_ROUTE,
// ============================================================================
// Favorites (EE)
// ============================================================================
chunkJKTLOG4J_cjs.FAVORITE_STORED_AGENT_ROUTE,
chunkJKTLOG4J_cjs.UNFAVORITE_STORED_AGENT_ROUTE
];
// src/server/server-adapter/routes/stored-mcp-clients.ts
var STORED_MCP_CLIENTS_ROUTES = [
// Stored MCP Clients CRUD Routes
chunkW543ZJQB_cjs.LIST_STORED_MCP_CLIENTS_ROUTE,
chunkW543ZJQB_cjs.GET_STORED_MCP_CLIENT_ROUTE,
chunkW543ZJQB_cjs.CREATE_STORED_MCP_CLIENT_ROUTE,
chunkW543ZJQB_cjs.UPDATE_STORED_MCP_CLIENT_ROUTE,
chunkW543ZJQB_cjs.DELETE_STORED_MCP_CLIENT_ROUTE,
// MCP Client Versions Routes
// IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE
// routes with path parameters (e.g., /:versionId) to ensure correct matching.
chunkUL3UXUNU_cjs.LIST_MCP_CLIENT_VERSIONS_ROUTE,
chunkUL3UXUNU_cjs.CREATE_MCP_CLIENT_VERSION_ROUTE,
chunkUL3UXUNU_cjs.COMPARE_MCP_CLIENT_VERSIONS_ROUTE,
chunkUL3UXUNU_cjs.GET_MCP_CLIENT_VERSION_ROUTE,
chunkUL3UXUNU_cjs.ACTIVATE_MCP_CLIENT_VERSION_ROUTE,
chunkUL3UXUNU_cjs.RESTORE_MCP_CLIENT_VERSION_ROUTE,
chunkUL3UXUNU_cjs.DELETE_MCP_CLIENT_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-prompt-blocks.ts
var STORED_PROMPT_BLOCKS_ROUTES = [
// Stored Prompt Blocks CRUD Routes
chunkNTS3DORC_cjs.LIST_STORED_PROMPT_BLOCKS_ROUTE,
chunkNTS3DORC_cjs.GET_STORED_PROMPT_BLOCK_ROUTE,
chunkNTS3DORC_cjs.CREATE_STORED_PROMPT_BLOCK_ROUTE,
chunkNTS3DORC_cjs.UPDATE_STORED_PROMPT_BLOCK_ROUTE,
chunkNTS3DORC_cjs.DELETE_STORED_PROMPT_BLOCK_ROUTE,
// Prompt Block Versions Routes
// IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE
// routes with path parameters (e.g., /:versionId) to ensure correct matching.
chunkGHTMFCWF_cjs.LIST_PROMPT_BLOCK_VERSIONS_ROUTE,
chunkGHTMFCWF_cjs.CREATE_PROMPT_BLOCK_VERSION_ROUTE,
chunkGHTMFCWF_cjs.COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE,
chunkGHTMFCWF_cjs.GET_PROMPT_BLOCK_VERSION_ROUTE,
chunkGHTMFCWF_cjs.ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE,
chunkGHTMFCWF_cjs.RESTORE_PROMPT_BLOCK_VERSION_ROUTE,
chunkGHTMFCWF_cjs.DELETE_PROMPT_BLOCK_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-scorers.ts
var STORED_SCORERS_ROUTES = [
// Stored Scorers CRUD Routes
chunkLJNTC2CX_cjs.LIST_STORED_SCORERS_ROUTE,
chunkLJNTC2CX_cjs.GET_STORED_SCORER_ROUTE,
chunkLJNTC2CX_cjs.CREATE_STORED_SCORER_ROUTE,
chunkLJNTC2CX_cjs.UPDATE_STORED_SCORER_ROUTE,
chunkLJNTC2CX_cjs.DELETE_STORED_SCORER_ROUTE,
// Scorer Versions Routes
// IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE
// routes with path parameters (e.g., /:versionId) to ensure correct matching.
chunkLYZLM7TQ_cjs.LIST_SCORER_VERSIONS_ROUTE,
chunkLYZLM7TQ_cjs.CREATE_SCORER_VERSION_ROUTE,
chunkLYZLM7TQ_cjs.COMPARE_SCORER_VERSIONS_ROUTE,
chunkLYZLM7TQ_cjs.GET_SCORER_VERSION_ROUTE,
chunkLYZLM7TQ_cjs.ACTIVATE_SCORER_VERSION_ROUTE,
chunkLYZLM7TQ_cjs.RESTORE_SCORER_VERSION_ROUTE,
chunkLYZLM7TQ_cjs.DELETE_SCORER_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-skills.ts
var STORED_SKILLS_ROUTES = [
// Stored Skills CRUD Routes
chunk7KFYDYFN_cjs.LIST_STORED_SKILLS_ROUTE,
chunk7KFYDYFN_cjs.GET_STORED_SKILL_ROUTE,
chunk7KFYDYFN_cjs.CREATE_STORED_SKILL_ROUTE,
chunk7KFYDYFN_cjs.UPDATE_STORED_SKILL_ROUTE,
chunk7KFYDYFN_cjs.DELETE_STORED_SKILL_ROUTE,
// Publish
chunk7KFYDYFN_cjs.PUBLISH_STORED_SKILL_ROUTE,
// Favorites (EE)
chunkBHYWGD5O_cjs.FAVORITE_STORED_SKILL_ROUTE,
chunkBHYWGD5O_cjs.UNFAVORITE_STORED_SKILL_ROUTE
];
// src/server/server-adapter/routes/stored-workspaces.ts
var STORED_WORKSPACES_ROUTES = [
// Stored Workspaces CRUD Routes
chunk7X3YWKHD_cjs.LIST_STORED_WORKSPACES_ROUTE,
chunk7X3YWKHD_cjs.GET_STORED_WORKSPACE_ROUTE,
chunk7X3YWKHD_cjs.CREATE_STORED_WORKSPACE_ROUTE,
chunk7X3YWKHD_cjs.UPDATE_STORED_WORKSPACE_ROUTE,
chunk7X3YWKHD_cjs.DELETE_STORED_WORKSPACE_ROUTE
];
// src/server/server-adapter/routes/system.ts
var SYSTEM_ROUTES = [chunkDL6MIA5S_cjs.GET_SYSTEM_PACKAGES_ROUTE, chunkDL6MIA5S_cjs.GET_API_SCHEMA_ROUTE];
// src/server/server-adapter/routes/tool-providers.ts
var TOOL_PROVIDER_ROUTES = [
chunkOCDUNF52_cjs.LIST_TOOL_PROVIDERS_ROUTE,
chunkOCDUNF52_cjs.LIST_TOOL_PROVIDER_TOOLKITS_ROUTE,
chunkOCDUNF52_cjs.LIST_TOOL_PROVIDER_TOOLS_ROUTE,
chunkOCDUNF52_cjs.GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE,
chunkOCDUNF52_cjs.AUTHORIZE_TOOL_PROVIDER_ROUTE,
chunkOCDUNF52_cjs.GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE,
chunkOCDUNF52_cjs.TOOL_PROVIDER_CONNECTION_STATUS_ROUTE,
chunkOCDUNF52_cjs.LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE,
chunkOCDUNF52_cjs.LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE,
chunkOCDUNF52_cjs.DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE,
chunkOCDUNF52_cjs.UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE,
chunkOCDUNF52_cjs.GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE,
chunkOCDUNF52_cjs.GET_TOOL_PROVIDER_HEALTH_ROUTE
];
// src/server/server-adapter/routes/tools.ts
var TOOLS_ROUTES = [chunkUGQH3IIT_cjs.LIST_TOOLS_ROUTE, chunkUGQH3IIT_cjs.GET_TOOL_BY_ID_ROUTE, chunkUGQH3IIT_cjs.EXECUTE_TOOL_ROUTE];
// src/server/server-adapter/routes/vectors.ts
var VECTORS_ROUTES = [
chunkH5LNJS3E_cjs.UPSERT_VECTORS_ROUTE,
chunkH5LNJS3E_cjs.CREATE_INDEX_ROUTE,
chunkH5LNJS3E_cjs.QUERY_VECTORS_ROUTE,
chunkH5LNJS3E_cjs.LIST_INDEXES_ROUTE,
chunkH5LNJS3E_cjs.DESCRIBE_INDEX_ROUTE,
chunkH5LNJS3E_cjs.DELETE_INDEX_ROUTE,
chunkH5LNJS3E_cjs.LIST_VECTORS_ROUTE,
chunkH5LNJS3E_cjs.LIST_EMBEDDERS_ROUTE
];
// src/server/server-adapter/routes/workflows.ts
var WORKFLOWS_ROUTES = [
chunkNKG3PCTS_cjs.LIST_WORKFLOWS_ROUTE,
chunkNKG3PCTS_cjs.GET_WORKFLOW_BY_ID_ROUTE,
chunkNKG3PCTS_cjs.LIST_WORKFLOW_RUNS_ROUTE,
chunkNKG3PCTS_cjs.GET_WORKFLOW_RUN_BY_ID_ROUTE,
chunkNKG3PCTS_cjs.DELETE_WORKFLOW_RUN_BY_ID_ROUTE,
chunkNKG3PCTS_cjs.CREATE_WORKFLOW_RUN_ROUTE,
chunkNKG3PCTS_cjs.STREAM_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.RESUME_STREAM_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.START_ASYNC_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.START_WORKFLOW_RUN_ROUTE,
chunkNKG3PCTS_cjs.OBSERVE_STREAM_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.RESUME_ASYNC_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.RESUME_NO_WAIT_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.RESUME_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.CANCEL_WORKFLOW_RUN_ROUTE,
chunkNKG3PCTS_cjs.TIME_TRAVEL_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.RESTART_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.RESTART_ASYNC_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,
chunkNKG3PCTS_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,
chunkNKG3PCTS_cjs.EXECUTE_WORKFLOW_STEP_ROUTE,
chunkNKG3PCTS_cjs.RECEIVE_WORKFLOW_EVENT_ROUTE
];
// src/server/server-adapter/routes/workspace.ts
var WORKSPACE_ROUTES = [
// List all workspaces route (at /api/workspaces)
chunkN752ZCPA_cjs.LIST_WORKSPACES_ROUTE,
// Get workspace route (at /api/workspaces/:workspaceId)
chunkN752ZCPA_cjs.GET_WORKSPACE_ROUTE,
// Filesystem routes (at /api/workspaces/:workspaceId/fs/*)
...chunkN752ZCPA_cjs.WORKSPACE_FS_ROUTES,
// Search routes (at /api/workspaces/:workspaceId/search, /api/workspaces/:workspaceId/index)
...chunkN752ZCPA_cjs.WORKSPACE_SEARCH_ROUTES,
// Skills routes (search must come before parameterized routes)
...chunkN752ZCPA_cjs.WORKSPACE_SKILLS_ROUTES,
// skills.sh proxy routes (at /api/workspaces/:workspaceId/skills-sh/*)
...chunkN752ZCPA_cjs.WORKSPACE_SKILLS_SH_ROUTES
];
// src/server/server-adapter/routes/index.ts
var SERVER_ROUTES = [
...AGENTS_ROUTES,
...chunkSOCH5SNI_cjs.AUTH_ROUTES,
...WORKFLOWS_ROUTES,
...TOOLS_ROUTES,
...PROCESSORS_ROUTES,
...RESPONSES_ROUTES,
...CONVERSATIONS_ROUTES,
...MEMORY_ROUTES,
...SCORES_ROUTES,
...OBSERVABILITY_ROUTES,
...LOGS_ROUTES,
...VECTORS_ROUTES,
...A2A_ROUTES,
...WORKSPACE_ROUTES,
...LEGACY_ROUTES,
...MCP_ROUTES,
...STORED_AGENTS_ROUTES,
...STORED_MCP_CLIENTS_ROUTES,
...STORED_PROMPT_BLOCKS_ROUTES,
...STORED_SCORERS_ROUTES,
...STORED_WORKSPACES_ROUTES,
...STORED_SKILLS_ROUTES,
...TOOL_PROVIDER_ROUTES,
...PROCESSOR_PROVIDER_ROUTES,
...SYSTEM_ROUTES,
...DATASETS_ROUTES,
...BACKGROUND_TASK_ROUTES,
...EDITOR_BUILDER_ROUTES,
...AGENT_BUILDER_ROUTES,
...SCHEDULES_ROUTES,
...CHANNELS_ROUTES,
...AGENT_CONTROLLER_ROUTES
];
exports.SERVER_ROUTES = SERVER_ROUTES;
exports.deriveAction = deriveAction;
exports.derivePermission = derivePermission;
exports.extractResource = extractResource;
exports.getEffectivePermission = getEffectivePermission;
//# sourceMappingURL=chunk-EGV5QBEA.cjs.map
//# sourceMappingURL=chunk-EGV5QBEA.cjs.map

Sorry, the diff of this file is too big to display

import { getAgentFromSystem } from './chunk-4AGRNM7F.js';
import { listToolsResponseSchema, serializedToolSchema, toolIdPathParams, executeToolResponseSchema, executeToolContextBodySchema, agentToolPathParams, executeToolBodySchema } from './chunk-QGKHU5OX.js';
import { MastraFGAPermissions, validateBody } from './chunk-A7APTIYJ.js';
import { optionalRunIdSchema } from './chunk-6VTOGOS2.js';
import { stringify } from './chunk-4GWTCVFL.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { standardSchemaToJSONSchema, toStandardSchema5 } from './chunk-7YKQI63H.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
import { __export } from './chunk-PR4QN5HX.js';
import { isVercelTool, isProviderDefinedTool } from '@mastra/core/tools';
// src/server/handlers/tools.ts
var tools_exports = {};
__export(tools_exports, {
EXECUTE_AGENT_TOOL_ROUTE: () => EXECUTE_AGENT_TOOL_ROUTE,
EXECUTE_TOOL_ROUTE: () => EXECUTE_TOOL_ROUTE,
GET_AGENT_TOOL_ROUTE: () => GET_AGENT_TOOL_ROUTE,
GET_TOOL_BY_ID_ROUTE: () => GET_TOOL_BY_ID_ROUTE,
LIST_TOOLS_ROUTE: () => LIST_TOOLS_ROUTE
});
function resolveLazySchema(schema) {
if (typeof schema === "function" && !("~standard" in schema)) {
return resolveLazySchema(schema());
}
return schema;
}
function schemaToJsonSchema(schema) {
if (!schema) {
return void 0;
}
return standardSchemaToJSONSchema(toStandardSchema5(schema), { target: "draft-2020-12" });
}
function serializeSchema(schema) {
const jsonSchema = schemaToJsonSchema(resolveLazySchema(schema));
if (jsonSchema === void 0) return void 0;
return stringify(jsonSchema);
}
async function findToolInAgents(mastra, toolId, requestContext) {
const agents = mastra.listAgents() || {};
for (const agent of Object.values(agents)) {
try {
const agentTools = await agent.listTools({ requestContext });
const found = Object.values(agentTools || {}).find((t) => t.id === toolId);
if (found) return found;
} catch (error) {
mastra.getLogger?.()?.warn?.("Failed to list tools for agent while resolving tool by id", {
agentId: agent?.id,
toolId,
error: error instanceof Error ? error.message : String(error)
});
}
}
return void 0;
}
function serializeTool(tool) {
if (isProviderDefinedTool(tool)) {
const resolvedInput = resolveLazySchema(tool.inputSchema);
const resolvedOutput = resolveLazySchema(tool.outputSchema);
return {
...tool,
inputSchema: resolvedInput && typeof resolvedInput === "object" && "jsonSchema" in resolvedInput ? stringify(resolvedInput.jsonSchema) : void 0,
outputSchema: resolvedOutput && typeof resolvedOutput === "object" && "jsonSchema" in resolvedOutput ? stringify(resolvedOutput.jsonSchema) : void 0
};
}
return {
...tool,
inputSchema: serializeSchema(tool.inputSchema),
outputSchema: serializeSchema(tool.outputSchema),
requestContextSchema: serializeSchema(tool.requestContextSchema)
};
}
var LIST_TOOLS_ROUTE = createRoute({
method: "GET",
path: "/tools",
responseType: "json",
responseSchema: listToolsResponseSchema,
summary: "List all tools",
description: "Returns a list of all available tools in the system",
tags: ["Tools"],
requiresAuth: true,
handler: async ({ mastra, registeredTools, requestContext }) => {
try {
const registered = registeredTools && Object.keys(registeredTools).length > 0 ? registeredTools : {};
const allTools = {};
const seenToolIds = /* @__PURE__ */ new Map();
for (const [key, tool] of Object.entries(registered)) {
const toolId = typeof tool?.id === "string" ? tool.id : void 0;
if (toolId !== void 0) seenToolIds.set(toolId, key);
allTools[key] = tool;
}
for (const [key, tool] of Object.entries(mastra.listTools() ?? {})) {
const toolId = typeof tool?.id === "string" ? tool.id : void 0;
if (toolId !== void 0 && seenToolIds.has(toolId)) continue;
if (toolId !== void 0) seenToolIds.set(toolId, key);
allTools[key] = tool;
}
const serializedTools = Object.entries(allTools).reduce(
(acc, [id, _tool]) => {
acc[id] = serializeTool(_tool);
return acc;
},
{}
);
const fgaProvider = mastra.getServer?.()?.fga;
const user = requestContext?.get("user");
if (fgaProvider && user) {
const toolList = Object.entries(serializedTools).map(([id, t]) => ({ id, ...t }));
const accessible = await fgaProvider.filterAccessible(user, toolList, "tool", MastraFGAPermissions.TOOLS_READ);
const accessibleSet = new Set(accessible.map((t) => t.id));
for (const id of Object.keys(serializedTools)) {
if (!accessibleSet.has(id)) {
delete serializedTools[id];
}
}
}
return serializedTools;
} catch (error) {
return handleError(error, "Error getting tools");
}
}
});
var GET_TOOL_BY_ID_ROUTE = createRoute({
method: "GET",
path: "/tools/:toolId",
responseType: "json",
pathParamSchema: toolIdPathParams,
responseSchema: serializedToolSchema,
summary: "Get tool by ID",
description: "Returns details for a specific tool including its schema and configuration",
tags: ["Tools"],
requiresAuth: true,
handler: async ({ mastra, registeredTools, toolId, requestContext }) => {
try {
let tool;
if (registeredTools && Object.keys(registeredTools).length > 0) {
tool = Object.values(registeredTools).find((t) => t.id === toolId);
}
if (!tool) {
try {
tool = mastra.getToolById(toolId);
} catch {
}
}
if (!tool) {
tool = await findToolInAgents(mastra, toolId, requestContext);
}
if (!tool) {
throw new HTTPException(404, { message: "Tool not found" });
}
return serializeTool(tool);
} catch (error) {
return handleError(error, "Error getting tool");
}
}
});
var EXECUTE_TOOL_ROUTE = createRoute({
method: "POST",
path: "/tools/:toolId/execute",
responseType: "json",
pathParamSchema: toolIdPathParams,
queryParamSchema: optionalRunIdSchema,
bodySchema: executeToolContextBodySchema,
responseSchema: executeToolResponseSchema,
summary: "Execute tool",
description: "Executes a specific tool with the provided input data",
tags: ["Tools"],
requiresAuth: true,
handler: async ({ mastra, runId, toolId, registeredTools, requestContext, ...bodyParams }) => {
try {
if (!toolId) {
throw new HTTPException(400, { message: "Tool ID is required" });
}
let tool;
if (registeredTools && Object.keys(registeredTools).length > 0) {
tool = Object.values(registeredTools).find((t) => t.id === toolId);
}
if (!tool) {
try {
tool = mastra.getToolById(toolId);
} catch {
}
}
if (!tool) {
tool = await findToolInAgents(mastra, toolId, requestContext);
}
if (!tool) {
throw new HTTPException(404, { message: "Tool not found" });
}
if (!tool?.execute) {
throw new HTTPException(400, { message: "Tool is not executable" });
}
const { data } = bodyParams;
validateBody({ data });
let result;
if (isVercelTool(tool)) {
result = await tool.execute(data);
} else {
result = await tool.execute(data, {
mastra,
requestContext,
// TODO: Pass proper tracing context when server API supports tracing
tracingContext: { currentSpan: void 0 },
...runId ? {
workflow: {
runId,
suspend: async () => {
}
}
} : {}
});
}
return result;
} catch (error) {
return handleError(error, "Error executing tool");
}
}
});
var GET_AGENT_TOOL_ROUTE = createRoute({
method: "GET",
path: "/agents/:agentId/tools/:toolId",
responseType: "json",
pathParamSchema: agentToolPathParams,
responseSchema: serializedToolSchema,
summary: "Get agent tool",
description: "Returns details for a specific tool assigned to the agent",
tags: ["Agents", "Tools"],
requiresAuth: true,
handler: async ({ mastra, agentId, toolId, requestContext }) => {
try {
if (!agentId) {
throw new HTTPException(400, { message: "Agent ID is required" });
}
const agent = await getAgentFromSystem({ mastra, agentId });
const agentTools = await agent.listTools({ requestContext });
const tool = Object.values(agentTools || {}).find((tool2) => tool2.id === toolId);
if (!tool) {
throw new HTTPException(404, { message: "Tool not found" });
}
return serializeTool(tool);
} catch (error) {
return handleError(error, "Error getting agent tool");
}
}
});
var EXECUTE_AGENT_TOOL_ROUTE = createRoute({
method: "POST",
path: "/agents/:agentId/tools/:toolId/execute",
responseType: "json",
pathParamSchema: agentToolPathParams,
bodySchema: executeToolBodySchema,
responseSchema: executeToolResponseSchema,
summary: "Execute agent tool",
description: "Executes a specific tool assigned to the agent with the provided input data",
tags: ["Agents", "Tools"],
requiresAuth: true,
handler: async ({ mastra, agentId, toolId, data, requestContext }) => {
try {
if (!agentId) {
throw new HTTPException(400, { message: "Agent ID is required" });
}
const agent = await getAgentFromSystem({ mastra, agentId });
const agentTools = await agent.listTools({ requestContext });
const tool = Object.values(agentTools || {}).find((tool2) => tool2.id === toolId);
if (!tool) {
throw new HTTPException(404, { message: "Tool not found" });
}
if (!tool?.execute) {
throw new HTTPException(400, { message: "Tool is not executable" });
}
const result = await tool.execute(data, {
mastra,
requestContext,
// TODO: Pass proper tracing context when server API supports tracing
tracingContext: { currentSpan: void 0 }
});
return result;
} catch (error) {
return handleError(error, "Error executing agent tool");
}
}
});
export { EXECUTE_AGENT_TOOL_ROUTE, EXECUTE_TOOL_ROUTE, GET_AGENT_TOOL_ROUTE, GET_TOOL_BY_ID_ROUTE, LIST_TOOLS_ROUTE, tools_exports };
//# sourceMappingURL=chunk-EJFNGIUY.js.map
//# sourceMappingURL=chunk-EJFNGIUY.js.map
{"version":3,"sources":["../src/server/handlers/tools.ts"],"names":["tool"],"mappings":"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","file":"chunk-EJFNGIUY.js","sourcesContent":["import { isVercelTool, isProviderDefinedTool } from '@mastra/core/tools';\nimport { toStandardSchema, standardSchemaToJSONSchema } from '@mastra/schema-compat/schema';\nimport type { PublicSchema } from '@mastra/schema-compat/schema';\nimport { stringify } from 'superjson';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n executeToolContextBodySchema,\n executeToolResponseSchema,\n listToolsResponseSchema,\n serializedToolSchema,\n toolIdPathParams,\n agentToolPathParams,\n executeToolBodySchema,\n} from '../schemas/agents';\nimport { optionalRunIdSchema } from '../schemas/common';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\nimport { validateBody } from './utils';\n\n/**\n * Resolves a schema that may be a lazy function (e.g. AI SDK provider tools).\n * Recursively resolves until a non-function value is returned.\n * Skips functions that are themselves valid schemas (e.g. ArkType types are\n * callable but also implement StandardSchema via ~standard).\n */\nfunction resolveLazySchema(schema: unknown): unknown {\n if (typeof schema === 'function' && !('~standard' in schema)) {\n return resolveLazySchema(schema());\n }\n return schema;\n}\n\nfunction schemaToJsonSchema(schema: PublicSchema<unknown> | undefined) {\n if (!schema) {\n return undefined;\n }\n\n return standardSchemaToJSONSchema(toStandardSchema(schema), { target: 'draft-2020-12' });\n}\n\nfunction serializeSchema(schema: unknown): string | undefined {\n const jsonSchema = schemaToJsonSchema(resolveLazySchema(schema) as PublicSchema<unknown> | undefined);\n if (jsonSchema === undefined) return undefined;\n return stringify(jsonSchema);\n}\n\n/**\n * Searches dynamically-resolved agent tools (provided via `toolsResolver` /\n * function-based `tools`) for a tool with the given id. Used as a fallback\n * after the static tool registry (`registeredTools` + `mastra.getToolById`)\n * misses, so global tool routes can resolve tools that only exist on agents.\n *\n * Errors thrown by an individual agent's `listTools()` are logged and\n * skipped so a single broken resolver doesn't take down the whole lookup.\n */\nasync function findToolInAgents(mastra: any, toolId: string, requestContext: any): Promise<any | undefined> {\n const agents = mastra.listAgents() || {};\n for (const agent of Object.values(agents) as any[]) {\n try {\n const agentTools = await agent.listTools({ requestContext });\n const found = Object.values(agentTools || {}).find((t: any) => t.id === toolId);\n if (found) return found;\n } catch (error) {\n mastra.getLogger?.()?.warn?.('Failed to list tools for agent while resolving tool by id', {\n agentId: agent?.id,\n toolId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return undefined;\n}\n\n/**\n * Serializes a tool for API responses, handling both regular tools (with Zod schemas)\n * and provider-defined tools (with AI SDK lazy schemas).\n */\nfunction serializeTool(tool: any): any {\n // Provider-defined tools (e.g. google.tools.googleSearch(), openai.tools.webSearch())\n // have lazy inputSchema functions that return AI SDK Schema objects, not Zod schemas.\n // We resolve them and use the jsonSchema property directly.\n if (isProviderDefinedTool(tool)) {\n const resolvedInput = resolveLazySchema(tool.inputSchema);\n const resolvedOutput = resolveLazySchema(tool.outputSchema);\n return {\n ...tool,\n inputSchema:\n resolvedInput && typeof resolvedInput === 'object' && 'jsonSchema' in resolvedInput\n ? stringify(resolvedInput.jsonSchema)\n : undefined,\n outputSchema:\n resolvedOutput && typeof resolvedOutput === 'object' && 'jsonSchema' in resolvedOutput\n ? stringify(resolvedOutput.jsonSchema)\n : undefined,\n };\n }\n\n return {\n ...tool,\n inputSchema: serializeSchema(tool.inputSchema),\n outputSchema: serializeSchema(tool.outputSchema),\n requestContextSchema: serializeSchema(tool.requestContextSchema),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_TOOLS_ROUTE = createRoute({\n method: 'GET',\n path: '/tools',\n responseType: 'json',\n responseSchema: listToolsResponseSchema,\n summary: 'List all tools',\n description: 'Returns a list of all available tools in the system',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, registeredTools, requestContext }) => {\n try {\n // Merge tools from two sources: mastra.listTools() includes dynamically created tools\n // (e.g. MCP tools, or agent tools registered by their intrinsic id), while registeredTools\n // includes tools discovered by the CLI bundler (keyed by export name).\n //\n // The same tool instance can appear in both maps under different keys (e.g. an agent\n // registers it by `tool.id` while the bundler registers it by export name). Dedupe by\n // `tool.id`, preferring the registeredTools (bundler) key, so each tool appears once.\n const registered = registeredTools && Object.keys(registeredTools).length > 0 ? registeredTools : {};\n\n const allTools: Record<string, any> = {};\n const seenToolIds = new Map<string, string>();\n\n // registeredTools first so their key wins for a given tool.id.\n for (const [key, tool] of Object.entries(registered)) {\n const toolId = typeof (tool as any)?.id === 'string' ? (tool as any).id : undefined;\n if (toolId !== undefined) seenToolIds.set(toolId, key);\n allTools[key] = tool;\n }\n\n for (const [key, tool] of Object.entries(mastra.listTools() ?? {})) {\n const toolId = typeof (tool as any)?.id === 'string' ? (tool as any).id : undefined;\n // Skip if this exact tool.id was already registered (under any key) by registeredTools.\n if (toolId !== undefined && seenToolIds.has(toolId)) continue;\n if (toolId !== undefined) seenToolIds.set(toolId, key);\n allTools[key] = tool;\n }\n\n const serializedTools = Object.entries(allTools).reduce(\n (acc, [id, _tool]) => {\n acc[id] = serializeTool(_tool);\n return acc;\n },\n {} as Record<string, any>,\n );\n\n // Filter tools by FGA if configured\n const fgaProvider = mastra.getServer?.()?.fga;\n const user = requestContext?.get('user');\n if (fgaProvider && user) {\n const toolList = Object.entries(serializedTools).map(([id, t]) => ({ id, ...t }));\n const accessible = await fgaProvider.filterAccessible(user, toolList, 'tool', MastraFGAPermissions.TOOLS_READ);\n const accessibleSet = new Set(accessible.map((t: any) => t.id));\n for (const id of Object.keys(serializedTools)) {\n if (!accessibleSet.has(id)) {\n delete serializedTools[id];\n }\n }\n }\n\n return serializedTools;\n } catch (error) {\n return handleError(error, 'Error getting tools');\n }\n },\n});\n\nexport const GET_TOOL_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/tools/:toolId',\n responseType: 'json',\n pathParamSchema: toolIdPathParams,\n responseSchema: serializedToolSchema,\n summary: 'Get tool by ID',\n description: 'Returns details for a specific tool including its schema and configuration',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, registeredTools, toolId, requestContext }) => {\n try {\n let tool: any;\n\n // Try explicit registeredTools first, then fallback to mastra\n if (registeredTools && Object.keys(registeredTools).length > 0) {\n tool = Object.values(registeredTools).find((t: any) => t.id === toolId);\n }\n if (!tool) {\n try {\n tool = mastra.getToolById(toolId);\n } catch {\n // tool not found in global registry, continue to agent fallback\n }\n }\n\n // Fallback: search dynamically-resolved agent tools (toolsResolver)\n if (!tool) {\n tool = await findToolInAgents(mastra, toolId, requestContext);\n }\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n return serializeTool(tool);\n } catch (error) {\n return handleError(error, 'Error getting tool');\n }\n },\n});\n\nexport const EXECUTE_TOOL_ROUTE = createRoute({\n method: 'POST',\n path: '/tools/:toolId/execute',\n responseType: 'json',\n pathParamSchema: toolIdPathParams,\n queryParamSchema: optionalRunIdSchema,\n bodySchema: executeToolContextBodySchema,\n responseSchema: executeToolResponseSchema,\n summary: 'Execute tool',\n description: 'Executes a specific tool with the provided input data',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, runId, toolId, registeredTools, requestContext, ...bodyParams }) => {\n try {\n if (!toolId) {\n throw new HTTPException(400, { message: 'Tool ID is required' });\n }\n\n let tool: any;\n\n // Try explicit registeredTools first, then fallback to mastra\n if (registeredTools && Object.keys(registeredTools).length > 0) {\n tool = Object.values(registeredTools).find((t: any) => t.id === toolId);\n }\n if (!tool) {\n try {\n tool = mastra.getToolById(toolId);\n } catch {\n // tool not found in global registry, continue to agent fallback\n }\n }\n\n // Fallback: search dynamically-resolved agent tools (toolsResolver)\n if (!tool) {\n tool = await findToolInAgents(mastra, toolId, requestContext);\n }\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n if (!tool?.execute) {\n throw new HTTPException(400, { message: 'Tool is not executable' });\n }\n\n const { data } = bodyParams;\n\n validateBody({ data });\n\n let result;\n if (isVercelTool(tool)) {\n result = await (tool as any).execute(data);\n } else {\n result = await tool.execute(data!, {\n mastra,\n requestContext,\n // TODO: Pass proper tracing context when server API supports tracing\n tracingContext: { currentSpan: undefined },\n ...(runId\n ? {\n workflow: {\n runId,\n suspend: async () => {},\n },\n }\n : {}),\n });\n }\n\n return result;\n } catch (error) {\n return handleError(error, 'Error executing tool');\n }\n },\n});\n\n// ============================================================================\n// Agent Tool Routes\n// ============================================================================\n\nexport const GET_AGENT_TOOL_ROUTE = createRoute({\n method: 'GET',\n path: '/agents/:agentId/tools/:toolId',\n responseType: 'json',\n pathParamSchema: agentToolPathParams,\n responseSchema: serializedToolSchema,\n summary: 'Get agent tool',\n description: 'Returns details for a specific tool assigned to the agent',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, toolId, requestContext }) => {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const agentTools = await agent.listTools({ requestContext });\n\n const tool = Object.values(agentTools || {}).find((tool: any) => tool.id === toolId) as any;\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n return serializeTool(tool);\n } catch (error) {\n return handleError(error, 'Error getting agent tool');\n }\n },\n});\n\nexport const EXECUTE_AGENT_TOOL_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/tools/:toolId/execute',\n responseType: 'json',\n pathParamSchema: agentToolPathParams,\n bodySchema: executeToolBodySchema,\n responseSchema: executeToolResponseSchema,\n summary: 'Execute agent tool',\n description: 'Executes a specific tool assigned to the agent with the provided input data',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, toolId, data, requestContext }) => {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const agentTools = await agent.listTools({ requestContext });\n\n const tool = Object.values(agentTools || {}).find((tool: any) => tool.id === toolId) as any;\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n if (!tool?.execute) {\n throw new HTTPException(400, { message: 'Tool is not executable' });\n }\n\n const result = await tool.execute(data, {\n mastra,\n requestContext,\n // TODO: Pass proper tracing context when server API supports tracing\n tracingContext: { currentSpan: undefined },\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error executing agent tool');\n }\n },\n});\n"]}
'use strict';
var chunkI5JCLVTK_cjs = require('./chunk-I5JCLVTK.cjs');
var chunk3JVOIOO6_cjs = require('./chunk-3JVOIOO6.cjs');
var v4 = require('zod/v4');
var storedScorerIdPathParams = v4.z.object({
storedScorerId: v4.z.string().describe("Unique identifier for the stored scorer definition")
});
var storageOrderBySchema = v4.z.object({
field: v4.z.enum(["createdAt", "updatedAt"]).optional(),
direction: v4.z.enum(["ASC", "DESC"]).optional()
});
var listStoredScorersQuerySchema = chunk3JVOIOO6_cjs.createPagePaginationSchema(100).extend({
orderBy: storageOrderBySchema.optional(),
status: v4.z.enum(["draft", "published", "archived"]).optional().default("published").describe("Filter scorers by status (defaults to published)"),
authorId: v4.z.string().optional().describe("Filter scorers by author identifier"),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Filter scorers by metadata key-value pairs")
});
var samplingConfigSchema = v4.z.union([
v4.z.object({ type: v4.z.literal("none") }),
v4.z.object({ type: v4.z.literal("ratio"), rate: v4.z.number().min(0).max(1) })
]);
var scorerTypeEnum = v4.z.enum([
"llm-judge",
"answer-relevancy",
"answer-similarity",
"bias",
"context-precision",
"context-relevance",
"faithfulness",
"hallucination",
"noise-sensitivity",
"prompt-alignment",
"tool-call-accuracy",
"toxicity"
]).describe("Scorer type: llm-judge for custom, or a preset type name");
var snapshotConfigSchema = v4.z.object({
name: v4.z.string().describe("Name of the scorer"),
description: v4.z.string().optional().describe("Description of the scorer"),
type: scorerTypeEnum,
model: chunkI5JCLVTK_cjs.modelConfigSchema.optional().describe("Model configuration for LLM judge"),
instructions: v4.z.string().optional().describe("System instructions for the judge LLM (used when type is llm-judge)"),
scoreRange: v4.z.object({
min: v4.z.number().optional().describe("Minimum score value (default: 0)"),
max: v4.z.number().optional().describe("Maximum score value (default: 1)")
}).optional().describe("Score range configuration (used when type is llm-judge)"),
presetConfig: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Serializable config options for preset scorers"),
defaultSampling: samplingConfigSchema.optional().describe("Default sampling configuration")
});
var createStoredScorerBodySchema = v4.z.object({
id: v4.z.string().optional().describe("Unique identifier. If not provided, derived from name."),
authorId: v4.z.string().optional().describe("Author identifier for multi-tenant filtering"),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Additional metadata for the scorer")
}).merge(snapshotConfigSchema);
var updateStoredScorerBodySchema = v4.z.object({
authorId: v4.z.string().optional(),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional()
}).partial().merge(snapshotConfigSchema.partial());
var storedScorerSchema = v4.z.object({
id: v4.z.string(),
status: v4.z.string().describe("Scorer status: draft, published, or archived"),
activeVersionId: v4.z.string().optional(),
authorId: v4.z.string().optional(),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional(),
createdAt: v4.z.coerce.date(),
updatedAt: v4.z.coerce.date(),
name: v4.z.string().describe("Name of the scorer"),
description: v4.z.string().optional().describe("Description of the scorer"),
type: scorerTypeEnum,
model: chunkI5JCLVTK_cjs.modelConfigSchema.optional(),
instructions: v4.z.string().optional().describe("System instructions for the judge LLM"),
scoreRange: v4.z.object({
min: v4.z.number().optional(),
max: v4.z.number().optional()
}).optional(),
presetConfig: v4.z.record(v4.z.string(), v4.z.unknown()).optional(),
defaultSampling: samplingConfigSchema.optional()
});
var listStoredScorersResponseSchema = chunk3JVOIOO6_cjs.paginationInfoSchema.extend({
scorerDefinitions: v4.z.array(storedScorerSchema)
});
var getStoredScorerResponseSchema = storedScorerSchema;
var createStoredScorerResponseSchema = storedScorerSchema;
var updateStoredScorerResponseSchema = v4.z.union([
v4.z.object({
id: v4.z.string(),
status: v4.z.string(),
activeVersionId: v4.z.string().optional(),
authorId: v4.z.string().optional(),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional(),
createdAt: v4.z.coerce.date(),
updatedAt: v4.z.coerce.date()
}),
storedScorerSchema
]);
var deleteStoredScorerResponseSchema = v4.z.object({
success: v4.z.boolean(),
message: v4.z.string()
});
exports.createStoredScorerBodySchema = createStoredScorerBodySchema;
exports.createStoredScorerResponseSchema = createStoredScorerResponseSchema;
exports.deleteStoredScorerResponseSchema = deleteStoredScorerResponseSchema;
exports.getStoredScorerResponseSchema = getStoredScorerResponseSchema;
exports.listStoredScorersQuerySchema = listStoredScorersQuerySchema;
exports.listStoredScorersResponseSchema = listStoredScorersResponseSchema;
exports.storedScorerIdPathParams = storedScorerIdPathParams;
exports.storedScorerSchema = storedScorerSchema;
exports.updateStoredScorerBodySchema = updateStoredScorerBodySchema;
exports.updateStoredScorerResponseSchema = updateStoredScorerResponseSchema;
//# sourceMappingURL=chunk-GOX5ZFQP.cjs.map
//# sourceMappingURL=chunk-GOX5ZFQP.cjs.map
{"version":3,"sources":["../src/server/schemas/stored-scorers.ts"],"names":["z","createPagePaginationSchema","modelConfigSchema","paginationInfoSchema"],"mappings":"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","file":"chunk-GOX5ZFQP.cjs","sourcesContent":["import { z } from 'zod/v4';\n\nimport { paginationInfoSchema, createPagePaginationSchema, statusQuerySchema } from './common';\nimport { modelConfigSchema } from './stored-agents';\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\nexport const storedScorerIdPathParams = z.object({\n storedScorerId: z.string().describe('Unique identifier for the stored scorer definition'),\n});\n\n// ============================================================================\n// Query Parameter Schemas\n// ============================================================================\n\nconst storageOrderBySchema = z.object({\n field: z.enum(['createdAt', 'updatedAt']).optional(),\n direction: z.enum(['ASC', 'DESC']).optional(),\n});\n\nexport { statusQuerySchema };\n\nexport const listStoredScorersQuerySchema = createPagePaginationSchema(100).extend({\n orderBy: storageOrderBySchema.optional(),\n status: z\n .enum(['draft', 'published', 'archived'])\n .optional()\n .default('published')\n .describe('Filter scorers by status (defaults to published)'),\n authorId: z.string().optional().describe('Filter scorers by author identifier'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Filter scorers by metadata key-value pairs'),\n});\n\n// ============================================================================\n// Body Parameter Schemas\n// ============================================================================\n\nconst samplingConfigSchema = z.union([\n z.object({ type: z.literal('none') }),\n z.object({ type: z.literal('ratio'), rate: z.number().min(0).max(1) }),\n]);\n\nconst scorerTypeEnum = z\n .enum([\n 'llm-judge',\n 'answer-relevancy',\n 'answer-similarity',\n 'bias',\n 'context-precision',\n 'context-relevance',\n 'faithfulness',\n 'hallucination',\n 'noise-sensitivity',\n 'prompt-alignment',\n 'tool-call-accuracy',\n 'toxicity',\n ])\n .describe('Scorer type: llm-judge for custom, or a preset type name');\n\nconst snapshotConfigSchema = z.object({\n name: z.string().describe('Name of the scorer'),\n description: z.string().optional().describe('Description of the scorer'),\n type: scorerTypeEnum,\n model: modelConfigSchema.optional().describe('Model configuration for LLM judge'),\n instructions: z.string().optional().describe('System instructions for the judge LLM (used when type is llm-judge)'),\n scoreRange: z\n .object({\n min: z.number().optional().describe('Minimum score value (default: 0)'),\n max: z.number().optional().describe('Maximum score value (default: 1)'),\n })\n .optional()\n .describe('Score range configuration (used when type is llm-judge)'),\n presetConfig: z.record(z.string(), z.unknown()).optional().describe('Serializable config options for preset scorers'),\n defaultSampling: samplingConfigSchema.optional().describe('Default sampling configuration'),\n});\n\nexport const createStoredScorerBodySchema = z\n .object({\n id: z.string().optional().describe('Unique identifier. If not provided, derived from name.'),\n authorId: z.string().optional().describe('Author identifier for multi-tenant filtering'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata for the scorer'),\n })\n .merge(snapshotConfigSchema);\n\nexport const updateStoredScorerBodySchema = z\n .object({\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .partial()\n .merge(snapshotConfigSchema.partial());\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\nexport const storedScorerSchema = z.object({\n id: z.string(),\n status: z.string().describe('Scorer status: draft, published, or archived'),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n name: z.string().describe('Name of the scorer'),\n description: z.string().optional().describe('Description of the scorer'),\n type: scorerTypeEnum,\n model: modelConfigSchema.optional(),\n instructions: z.string().optional().describe('System instructions for the judge LLM'),\n scoreRange: z\n .object({\n min: z.number().optional(),\n max: z.number().optional(),\n })\n .optional(),\n presetConfig: z.record(z.string(), z.unknown()).optional(),\n defaultSampling: samplingConfigSchema.optional(),\n});\n\nexport const listStoredScorersResponseSchema = paginationInfoSchema.extend({\n scorerDefinitions: z.array(storedScorerSchema),\n});\n\nexport const getStoredScorerResponseSchema = storedScorerSchema;\nexport const createStoredScorerResponseSchema = storedScorerSchema;\n\nexport const updateStoredScorerResponseSchema = z.union([\n z.object({\n id: z.string(),\n status: z.string(),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n }),\n storedScorerSchema,\n]);\n\nexport const deleteStoredScorerResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n});\n"]}
import { snapshotConfigSchema } from './chunk-YTLTMMB7.js';
import { toolProvidersSchema } from './chunk-SFAWHLOX.js';
import { ruleGroupSchema } from './chunk-JA4UAHWP.js';
import { defaultOptionsSchema } from './chunk-TKP6FJQ3.js';
import { createPagePaginationSchema, paginationInfoSchema } from './chunk-6VTOGOS2.js';
import { z } from 'zod/v4';
var semanticRecallSchema = z.object({
topK: z.number().describe("Number of semantically similar messages to retrieve"),
messageRange: z.union([
z.number(),
z.object({
before: z.number(),
after: z.number()
})
]).describe("Amount of surrounding context to include with each retrieved message"),
scope: z.enum(["thread", "resource"]).optional().describe("Scope for semantic search queries"),
threshold: z.number().min(0).max(1).optional().describe("Minimum similarity score threshold"),
indexName: z.string().optional().describe("Index name for the vector store")
});
var titleGenerationSchema = z.union([
z.boolean(),
z.object({
model: z.string().describe("Model ID in format provider/model-name (ModelRouterModelId)"),
instructions: z.string().optional().describe("Custom instructions for title generation")
})
]);
var serializedObservationConfigSchema = z.object({
model: z.string().optional().describe("Observer model ID"),
messageTokens: z.number().optional().describe("Token threshold that triggers observation"),
modelSettings: z.record(z.string(), z.unknown()).optional().describe("Model settings (temperature, etc.)"),
providerOptions: z.record(z.string(), z.record(z.string(), z.unknown()).optional()).optional().describe("Provider-specific options"),
maxTokensPerBatch: z.number().optional().describe("Maximum tokens per batch"),
bufferTokens: z.union([z.number(), z.literal(false)]).optional().describe("Async buffering interval or false"),
bufferActivation: z.number().optional().describe("Ratio of buffered observations to activate"),
blockAfter: z.number().optional().describe("Token threshold for synchronous blocking")
});
var serializedReflectionConfigSchema = z.object({
model: z.string().optional().describe("Reflector model ID"),
observationTokens: z.number().optional().describe("Token threshold that triggers reflection"),
modelSettings: z.record(z.string(), z.unknown()).optional().describe("Model settings (temperature, etc.)"),
providerOptions: z.record(z.string(), z.record(z.string(), z.unknown()).optional()).optional().describe("Provider-specific options"),
blockAfter: z.number().optional().describe("Token threshold for synchronous blocking"),
bufferActivation: z.number().optional().describe("Ratio for async reflection buffering")
});
var serializedObservationalMemoryConfigObjectSchema = z.object({
model: z.string().optional().describe("Model ID for both Observer and Reflector"),
scope: z.enum(["resource", "thread"]).optional().describe("Memory scope"),
shareTokenBudget: z.boolean().optional().describe("Share token budget between messages and observations"),
observation: serializedObservationConfigSchema.optional().describe("Observation step configuration"),
reflection: serializedReflectionConfigSchema.optional().describe("Reflection step configuration")
});
var serializedObservationalMemoryConfigSchema = z.union([
z.boolean(),
serializedObservationalMemoryConfigObjectSchema
]);
var serializedMemoryConfigSchema = z.object({
vector: z.union([z.string(), z.literal(false)]).optional().describe("Vector database identifier or false to disable"),
options: z.object({
readOnly: z.boolean().optional(),
lastMessages: z.union([z.number(), z.literal(false)]).optional(),
semanticRecall: z.union([z.boolean(), semanticRecallSchema]).optional(),
generateTitle: titleGenerationSchema.optional()
}).optional().describe("Memory behavior configuration, excluding workingMemory and threads"),
embedder: z.string().optional().describe('Embedding model ID in the format "provider/model" (e.g., "openai/text-embedding-3-small")'),
embedderOptions: z.record(z.string(), z.unknown()).optional().describe("Options to pass to the embedder, omitting telemetry"),
observationalMemory: serializedObservationalMemoryConfigSchema.optional().describe("Serialized observational memory configuration")
}).refine(
(data) => {
const semanticRecall = data.options?.semanticRecall;
const semanticRecallEnabled = semanticRecall === true || typeof semanticRecall === "object" && semanticRecall !== null;
if (semanticRecallEnabled) {
const hasVector = typeof data.vector === "string" && data.vector.length > 0;
const hasEmbedder = typeof data.embedder === "string" && data.embedder.length > 0;
return hasVector && hasEmbedder;
}
return true;
},
{
message: "Semantic recall requires both vector and embedder to be configured",
path: ["options", "semanticRecall"]
}
);
var storedAgentIdPathParams = z.object({
storedAgentId: z.string().describe("Unique identifier for the stored agent")
});
var storageOrderBySchema = z.object({
field: z.enum(["createdAt", "updatedAt"]).optional(),
direction: z.enum(["ASC", "DESC"]).optional()
});
var listStoredAgentsQuerySchema = createPagePaginationSchema(100).extend({
orderBy: storageOrderBySchema.optional(),
status: z.enum(["draft", "published", "archived"]).optional().default("published").describe("Filter agents by status (defaults to published)"),
authorId: z.string().optional().describe("Filter agents by author identifier"),
visibility: z.enum(["public"]).optional().describe("Filter to only public agents"),
metadata: z.record(z.string(), z.unknown()).optional().describe("Filter agents by metadata key-value pairs"),
favoritedOnly: z.stringbool().optional().describe("When true, return only agents favorited by the caller (requires the `favorites` EE feature)"),
pinFavoritedFor: z.string().optional().describe(
"When set, treat the given subject (user/role) as the favoriting principal for `favoritedOnly` instead of the caller"
)
});
var scorerConfigSchema = z.object({
description: z.string().optional(),
sampling: z.union([
z.object({ type: z.literal("none") }),
z.object({ type: z.literal("ratio"), rate: z.number().min(0).max(1) })
]).optional(),
rules: ruleGroupSchema.optional()
});
var agentInstructionBlockSchema = z.discriminatedUnion("type", [
z.object({ type: z.literal("text"), content: z.string() }),
z.object({ type: z.literal("prompt_block_ref"), id: z.string() }),
z.object({ type: z.literal("prompt_block"), content: z.string(), rules: ruleGroupSchema.optional() })
]);
function conditionalFieldSchema(valueSchema) {
const variantSchema = z.object({
value: valueSchema,
rules: ruleGroupSchema.optional()
});
return z.union([valueSchema, z.array(variantSchema)]);
}
var instructionsSchema = z.union([z.string(), z.array(agentInstructionBlockSchema)]).describe("System instructions for the agent (string or array of instruction blocks)");
var modelConfigSchema = z.object({
provider: z.string().describe("Model provider (e.g., openai, anthropic)"),
name: z.string().describe("Model name (e.g., gpt-4o, claude-3-opus)")
}).passthrough();
var toolConfigSchema = z.object({ description: z.string().optional(), rules: ruleGroupSchema.optional() });
var toolsConfigSchema = z.record(z.string(), toolConfigSchema);
var mcpClientToolsConfigSchema = z.object({
tools: z.record(z.string(), toolConfigSchema).optional()
});
var skillConfigSchema = z.object({
description: z.string().optional(),
instructions: z.string().optional(),
pin: z.string().optional(),
strategy: z.enum(["latest", "live"]).optional()
});
var skillsConfigSchema = z.record(z.string(), skillConfigSchema);
var workspaceRefSchema = z.discriminatedUnion("type", [
z.object({ type: z.literal("id"), workspaceId: z.string() }),
z.object({ type: z.literal("inline"), config: snapshotConfigSchema }),
z.object({
type: z.literal("provider"),
provider: z.string().describe("Workspace provider identifier"),
config: z.record(z.string(), z.unknown()).describe("Provider-specific configuration")
})
]);
var screencastOptionsSchema = z.object({
format: z.enum(["jpeg", "png"]).optional().describe("Image format (default: jpeg)"),
quality: z.number().min(0).max(100).optional().describe("JPEG quality 0-100 (default: 80)"),
maxWidth: z.number().optional().describe("Max width in pixels (default: 1280)"),
maxHeight: z.number().optional().describe("Max height in pixels (default: 720)"),
everyNthFrame: z.number().optional().describe("Capture every Nth frame (default: 1)")
});
var browserConfigSchema = z.object({
provider: z.string().describe("Browser provider type (e.g., stagehand, playwright)"),
headless: z.boolean().optional().describe("Run browser in headless mode (default: true)"),
viewport: z.object({
width: z.number().describe("Viewport width in pixels"),
height: z.number().describe("Viewport height in pixels")
}).optional().describe("Browser viewport dimensions"),
timeout: z.number().optional().describe("Default timeout in milliseconds (default: 10000)"),
screencast: screencastOptionsSchema.optional().describe("Screencast options for streaming browser frames")
});
var browserRefSchema = z.object({
type: z.literal("inline"),
config: browserConfigSchema
});
var processorPhaseSchema = z.enum([
"processInput",
"processInputStep",
"processOutputStream",
"processOutputResult",
"processOutputStep"
]);
var processorGraphStepSchema = z.object({
id: z.string().describe("Unique ID for this step within the graph"),
providerId: z.string().describe("ProcessorProvider ID that creates this processor"),
config: z.record(z.string(), z.unknown()).describe("Configuration matching the provider configSchema"),
enabledPhases: z.array(processorPhaseSchema).min(1).describe("Which processor phases to enable")
});
var processorGraphEntryDepth3 = z.discriminatedUnion("type", [
z.object({ type: z.literal("step"), step: processorGraphStepSchema })
]);
var processorGraphEntryDepth2 = z.discriminatedUnion("type", [
z.object({ type: z.literal("step"), step: processorGraphStepSchema }),
z.object({ type: z.literal("parallel"), branches: z.array(z.array(processorGraphEntryDepth3)) }),
z.object({
type: z.literal("conditional"),
conditions: z.array(
z.object({
steps: z.array(processorGraphEntryDepth3),
rules: ruleGroupSchema.optional()
})
)
})
]);
var processorGraphEntrySchema = z.discriminatedUnion("type", [
z.object({ type: z.literal("step"), step: processorGraphStepSchema }),
z.object({ type: z.literal("parallel"), branches: z.array(z.array(processorGraphEntryDepth2)) }),
z.object({
type: z.literal("conditional"),
conditions: z.array(
z.object({
steps: z.array(processorGraphEntryDepth2),
rules: ruleGroupSchema.optional()
})
)
})
]);
var storedProcessorGraphSchema = z.object({
steps: z.array(processorGraphEntrySchema).describe("Ordered list of processor graph entries")
});
var snapshotConfigSchema2 = z.object({
name: z.string().describe("Name of the agent"),
description: z.string().optional().describe("Description of the agent"),
instructions: instructionsSchema,
model: conditionalFieldSchema(modelConfigSchema).describe(
"Model configuration \u2014 static value or array of conditional variants"
),
tools: conditionalFieldSchema(toolsConfigSchema).optional().describe("Tool keys mapped to per-tool config \u2014 static or conditional"),
defaultOptions: conditionalFieldSchema(defaultOptionsSchema).optional().describe("Default options for generate/stream calls \u2014 static or conditional"),
workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema)).optional().describe("Workflow keys with optional per-workflow config \u2014 static or conditional"),
agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema)).optional().describe("Agent keys with optional per-agent config \u2014 static or conditional"),
integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of tool provider IDs to their tool configurations \u2014 static or conditional"),
toolProviders: conditionalFieldSchema(toolProvidersSchema).optional().describe(
"Tool provider connections and per-tool config (provider-agnostic). Coexists with the deprecated `integrationTools` field."
),
mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of stored MCP client IDs to their tool configurations \u2014 static or conditional"),
inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Input processor graph \u2014 static or conditional"),
outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Output processor graph \u2014 static or conditional"),
memory: conditionalFieldSchema(serializedMemoryConfigSchema).optional().describe("Memory configuration \u2014 static or conditional"),
scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema)).optional().describe("Scorer keys with optional sampling config \u2014 static or conditional"),
skills: conditionalFieldSchema(skillsConfigSchema).optional().describe("Skill IDs mapped to per-skill config \u2014 static or conditional"),
workspace: conditionalFieldSchema(workspaceRefSchema).optional().describe("Workspace reference (stored ID or inline config) \u2014 static or conditional"),
browser: z.union([conditionalFieldSchema(browserRefSchema), z.boolean(), z.null()]).optional().describe("Browser configuration \u2014 object config, true (apply default), false/null (disable)"),
requestContextSchema: z.record(z.string(), z.unknown()).optional().describe("JSON Schema defining valid request context variables for conditional rule evaluation")
});
var agentMetadataSchema = z.object({
authorId: z.string().optional().describe("Author identifier for multi-tenant filtering"),
metadata: z.record(z.string(), z.unknown()).optional().describe("Additional metadata for the agent"),
visibility: z.enum(["private", "public"]).optional().describe("Agent visibility: private (owner/admin only) or public (any reader)")
});
var snapshotConfigCreateSchema = snapshotConfigSchema2.extend({
model: conditionalFieldSchema(modelConfigSchema).optional().describe(
"Model configuration \u2014 static value or array of conditional variants. When omitted, the builder default model is applied server-side."
)
});
var createStoredAgentBodySchema = z.object({
id: z.string().optional().describe("Unique identifier for the agent. If not provided, derived from name."),
authorId: z.string().optional().describe("Author identifier for multi-tenant filtering"),
metadata: z.record(z.string(), z.unknown()).optional().describe("Additional metadata for the agent"),
visibility: z.enum(["private", "public"]).optional().describe("Agent visibility: private (owner/admin only) or public (any reader)")
}).merge(snapshotConfigCreateSchema);
var snapshotConfigUpdateSchema = snapshotConfigSchema2.extend({
memory: z.union([conditionalFieldSchema(serializedMemoryConfigSchema), z.null()]).optional().describe("Memory configuration \u2014 static, conditional, or null to disable memory")
});
var updateStoredAgentBodySchema = agentMetadataSchema.partial().merge(snapshotConfigUpdateSchema.partial()).extend({
changeMessage: z.string().trim().max(500).optional().describe("Optional message describing the changes for the auto-created version"),
autoPublish: z.boolean().optional().describe("Immediately activate the auto-created version. Defaults to false when omitted.")
});
var exportStoredAgentBodySchema = snapshotConfigUpdateSchema.partial();
var openStoredAgentChangeRequestBodySchema = exportStoredAgentBodySchema.extend({
changeMessage: z.string().trim().max(500).optional(),
userName: z.string().trim().min(1).max(120).optional(),
inspectOnly: z.boolean().optional()
});
var resolvedAuthorSchema = z.object({
id: z.string(),
name: z.string().optional(),
email: z.string().optional(),
avatarUrl: z.string().optional()
});
var storedAgentSchema = z.object({
// Thin agent record fields
id: z.string(),
status: z.string().describe("Agent status: draft or published"),
activeVersionId: z.string().optional(),
authorId: z.string().optional(),
author: resolvedAuthorSchema.optional().describe("Resolved author identity (when an auth provider is configured)"),
metadata: z.record(z.string(), z.unknown()).optional(),
visibility: z.enum(["private", "public"]).optional(),
favoriteCount: z.number().int().nonnegative().optional().describe("Number of users who have favorited this agent"),
isFavorited: z.boolean().optional().describe("Whether the requesting user has favorited this agent"),
createdAt: z.coerce.date(),
updatedAt: z.coerce.date(),
// Version snapshot config fields (resolved from active version)
name: z.string().describe("Name of the agent"),
description: z.string().optional().describe("Description of the agent"),
instructions: instructionsSchema,
model: conditionalFieldSchema(modelConfigSchema).describe(
"Model configuration \u2014 static value or array of conditional variants"
),
tools: conditionalFieldSchema(toolsConfigSchema).optional().describe("Tool keys mapped to per-tool config \u2014 static or conditional"),
defaultOptions: conditionalFieldSchema(defaultOptionsSchema).optional().describe("Default options for generate/stream calls \u2014 static or conditional"),
workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema)).optional().describe("Workflow keys with optional per-workflow config \u2014 static or conditional"),
agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema)).optional().describe("Agent keys with optional per-agent config \u2014 static or conditional"),
integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of tool provider IDs to their tool configurations \u2014 static or conditional"),
toolProviders: conditionalFieldSchema(toolProvidersSchema).optional().describe(
"Tool provider connections and per-tool config (provider-agnostic). Coexists with the deprecated `integrationTools` field."
),
mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of stored MCP client IDs to their tool configurations \u2014 static or conditional"),
inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Input processor graph \u2014 static or conditional"),
outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Output processor graph \u2014 static or conditional"),
memory: conditionalFieldSchema(serializedMemoryConfigSchema).optional().describe("Memory configuration \u2014 static or conditional"),
scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema)).optional().describe("Scorer keys with optional sampling config \u2014 static or conditional"),
skills: conditionalFieldSchema(skillsConfigSchema).optional().describe("Skill IDs mapped to per-skill config \u2014 static or conditional"),
workspace: conditionalFieldSchema(workspaceRefSchema).optional().describe("Workspace reference (stored ID or inline config) \u2014 static or conditional"),
browser: z.union([conditionalFieldSchema(browserRefSchema), z.boolean(), z.null()]).optional().describe("Browser configuration \u2014 object config, true (apply default), false/null (disable)"),
requestContextSchema: z.record(z.string(), z.unknown()).optional().describe("JSON Schema defining valid request context variables")
});
var listStoredAgentsResponseSchema = paginationInfoSchema.extend({
agents: z.array(storedAgentSchema)
});
var getStoredAgentResponseSchema = storedAgentSchema;
var createStoredAgentResponseSchema = storedAgentSchema;
var updateStoredAgentResponseSchema = z.union([
// Thin agent record (no version config)
z.object({
id: z.string(),
status: z.string(),
activeVersionId: z.string().optional(),
authorId: z.string().optional(),
metadata: z.record(z.string(), z.unknown()).optional(),
visibility: z.enum(["private", "public"]).optional(),
createdAt: z.coerce.date(),
updatedAt: z.coerce.date()
}),
// Resolved agent (thin record + version config)
storedAgentSchema
]);
var deleteStoredAgentResponseSchema = z.object({
success: z.boolean(),
message: z.string()
});
var getStoredAgentDependentsResponseSchema = z.object({
dependents: z.array(
z.object({
id: z.string(),
name: z.string()
})
),
hiddenCount: z.number().int().nonnegative()
});
var exportStoredAgentResponseSchema = z.object({
agentId: z.string(),
fileName: z.string(),
content: z.string(),
config: z.record(z.string(), z.unknown())
});
var openStoredAgentChangeRequestResponseSchema = z.object({
id: z.union([z.string(), z.number()]).optional(),
url: z.string(),
ref: z.string().optional()
});
var previewInstructionsBodySchema = z.object({
blocks: z.array(agentInstructionBlockSchema).describe("Array of instruction blocks to resolve"),
context: z.record(z.string(), z.unknown()).optional().default({}).describe("Request context for variable interpolation and rule evaluation")
});
var previewInstructionsResponseSchema = z.object({
result: z.string().describe("The resolved instructions string")
});
export { conditionalFieldSchema, createStoredAgentBodySchema, createStoredAgentResponseSchema, deleteStoredAgentResponseSchema, exportStoredAgentBodySchema, exportStoredAgentResponseSchema, getStoredAgentDependentsResponseSchema, getStoredAgentResponseSchema, instructionsSchema, listStoredAgentsQuerySchema, listStoredAgentsResponseSchema, modelConfigSchema, openStoredAgentChangeRequestBodySchema, openStoredAgentChangeRequestResponseSchema, previewInstructionsBodySchema, previewInstructionsResponseSchema, processorGraphEntrySchema, processorGraphStepSchema, processorPhaseSchema, resolvedAuthorSchema, scorerConfigSchema, semanticRecallSchema, serializedMemoryConfigSchema, serializedObservationConfigSchema, serializedObservationalMemoryConfigObjectSchema, serializedObservationalMemoryConfigSchema, serializedReflectionConfigSchema, snapshotConfigSchema2 as snapshotConfigSchema, storedAgentIdPathParams, storedAgentSchema, storedProcessorGraphSchema, titleGenerationSchema, toolConfigSchema, toolsConfigSchema, updateStoredAgentBodySchema, updateStoredAgentResponseSchema };
//# sourceMappingURL=chunk-HCCTSODR.js.map
//# sourceMappingURL=chunk-HCCTSODR.js.map
{"version":3,"sources":["../src/server/schemas/memory-config.ts","../src/server/schemas/stored-agents.ts"],"names":["z","snapshotConfigSchema"],"mappings":"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","file":"chunk-HCCTSODR.js","sourcesContent":["import { z } from 'zod/v4';\n\n/**\n * Shared memory configuration schemas for agent storage\n * These schemas match the SerializedMemoryConfig type from @mastra/core\n */\n\n/**\n * Semantic recall configuration for vector-based memory retrieval\n */\nexport const semanticRecallSchema = z.object({\n topK: z.number().describe('Number of semantically similar messages to retrieve'),\n messageRange: z\n .union([\n z.number(),\n z.object({\n before: z.number(),\n after: z.number(),\n }),\n ])\n .describe('Amount of surrounding context to include with each retrieved message'),\n scope: z.enum(['thread', 'resource']).optional().describe('Scope for semantic search queries'),\n threshold: z.number().min(0).max(1).optional().describe('Minimum similarity score threshold'),\n indexName: z.string().optional().describe('Index name for the vector store'),\n});\n\n/**\n * Title generation configuration\n * When stored, the model is serialized as a ModelRouterModelId string (provider/model-name format)\n */\nexport const titleGenerationSchema = z.union([\n z.boolean(),\n z.object({\n model: z.string().describe('Model ID in format provider/model-name (ModelRouterModelId)'),\n instructions: z.string().optional().describe('Custom instructions for title generation'),\n }),\n]);\n\n/**\n * Observation step configuration for observational memory\n */\nexport const serializedObservationConfigSchema = z.object({\n model: z.string().optional().describe('Observer model ID'),\n messageTokens: z.number().optional().describe('Token threshold that triggers observation'),\n modelSettings: z.record(z.string(), z.unknown()).optional().describe('Model settings (temperature, etc.)'),\n providerOptions: z\n .record(z.string(), z.record(z.string(), z.unknown()).optional())\n .optional()\n .describe('Provider-specific options'),\n maxTokensPerBatch: z.number().optional().describe('Maximum tokens per batch'),\n bufferTokens: z\n .union([z.number(), z.literal(false)])\n .optional()\n .describe('Async buffering interval or false'),\n bufferActivation: z.number().optional().describe('Ratio of buffered observations to activate'),\n blockAfter: z.number().optional().describe('Token threshold for synchronous blocking'),\n});\n\n/**\n * Reflection step configuration for observational memory\n */\nexport const serializedReflectionConfigSchema = z.object({\n model: z.string().optional().describe('Reflector model ID'),\n observationTokens: z.number().optional().describe('Token threshold that triggers reflection'),\n modelSettings: z.record(z.string(), z.unknown()).optional().describe('Model settings (temperature, etc.)'),\n providerOptions: z\n .record(z.string(), z.record(z.string(), z.unknown()).optional())\n .optional()\n .describe('Provider-specific options'),\n blockAfter: z.number().optional().describe('Token threshold for synchronous blocking'),\n bufferActivation: z.number().optional().describe('Ratio for async reflection buffering'),\n});\n\n/**\n * Serialized observational memory configuration\n */\nexport const serializedObservationalMemoryConfigObjectSchema = z.object({\n model: z.string().optional().describe('Model ID for both Observer and Reflector'),\n scope: z.enum(['resource', 'thread']).optional().describe('Memory scope'),\n shareTokenBudget: z.boolean().optional().describe('Share token budget between messages and observations'),\n observation: serializedObservationConfigSchema.optional().describe('Observation step configuration'),\n reflection: serializedReflectionConfigSchema.optional().describe('Reflection step configuration'),\n});\n\nexport const serializedObservationalMemoryConfigSchema = z.union([\n z.boolean(),\n serializedObservationalMemoryConfigObjectSchema,\n]);\n\n/**\n * Serialized memory configuration matching SerializedMemoryConfig from @mastra/core\n *\n * Note: workingMemory and threads are omitted as they are not part of SerializedMemoryConfig\n * @see packages/core/src/memory/types.ts\n */\nexport const serializedMemoryConfigSchema = z\n .object({\n vector: z\n .union([z.string(), z.literal(false)])\n .optional()\n .describe('Vector database identifier or false to disable'),\n options: z\n .object({\n readOnly: z.boolean().optional(),\n lastMessages: z.union([z.number(), z.literal(false)]).optional(),\n semanticRecall: z.union([z.boolean(), semanticRecallSchema]).optional(),\n generateTitle: titleGenerationSchema.optional(),\n })\n .optional()\n .describe('Memory behavior configuration, excluding workingMemory and threads'),\n embedder: z\n .string()\n .optional()\n .describe('Embedding model ID in the format \"provider/model\" (e.g., \"openai/text-embedding-3-small\")'),\n embedderOptions: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('Options to pass to the embedder, omitting telemetry'),\n observationalMemory: serializedObservationalMemoryConfigSchema\n .optional()\n .describe('Serialized observational memory configuration'),\n })\n .refine(\n data => {\n // If semanticRecall is enabled (true or object), both vector and embedder are required\n const semanticRecall = data.options?.semanticRecall;\n const semanticRecallEnabled =\n semanticRecall === true || (typeof semanticRecall === 'object' && semanticRecall !== null);\n\n if (semanticRecallEnabled) {\n // vector must be a string (not false or undefined)\n const hasVector = typeof data.vector === 'string' && data.vector.length > 0;\n // embedder must be defined\n const hasEmbedder = typeof data.embedder === 'string' && data.embedder.length > 0;\n\n return hasVector && hasEmbedder;\n }\n return true;\n },\n {\n message: 'Semantic recall requires both vector and embedder to be configured',\n path: ['options', 'semanticRecall'],\n },\n );\n","import { z } from 'zod/v4';\nimport { paginationInfoSchema, createPagePaginationSchema, statusQuerySchema } from './common';\nimport { defaultOptionsSchema } from './default-options';\nimport { serializedMemoryConfigSchema } from './memory-config';\nimport { ruleGroupSchema } from './rule-group';\nimport { workspaceSnapshotConfigSchema } from './stored-workspaces';\nimport { toolProvidersSchema } from './tool-providers';\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\n/**\n * Path parameter for stored agent ID\n */\nexport const storedAgentIdPathParams = z.object({\n storedAgentId: z.string().describe('Unique identifier for the stored agent'),\n});\n\n// ============================================================================\n// Query Parameter Schemas\n// ============================================================================\n\n/**\n * Storage order by configuration\n */\nconst storageOrderBySchema = z.object({\n field: z.enum(['createdAt', 'updatedAt']).optional(),\n direction: z.enum(['ASC', 'DESC']).optional(),\n});\n\nexport { statusQuerySchema };\n\n/**\n * GET /stored/agents - List stored agents\n */\nexport const listStoredAgentsQuerySchema = createPagePaginationSchema(100).extend({\n orderBy: storageOrderBySchema.optional(),\n status: z\n .enum(['draft', 'published', 'archived'])\n .optional()\n .default('published')\n .describe('Filter agents by status (defaults to published)'),\n authorId: z.string().optional().describe('Filter agents by author identifier'),\n visibility: z.enum(['public']).optional().describe('Filter to only public agents'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Filter agents by metadata key-value pairs'),\n favoritedOnly: z\n .stringbool()\n .optional()\n .describe('When true, return only agents favorited by the caller (requires the `favorites` EE feature)'),\n pinFavoritedFor: z\n .string()\n .optional()\n .describe(\n 'When set, treat the given subject (user/role) as the favoriting principal for `favoritedOnly` instead of the caller',\n ),\n});\n\n// ============================================================================\n// Body Parameter Schemas\n// ============================================================================\n\n/**\n * Scorer config schema with optional sampling and rules\n */\nconst scorerConfigSchema = z.object({\n description: z.string().optional(),\n sampling: z\n .union([\n z.object({ type: z.literal('none') }),\n z.object({ type: z.literal('ratio'), rate: z.number().min(0).max(1) }),\n ])\n .optional(),\n rules: ruleGroupSchema.optional(),\n});\n\n/**\n * Agent instruction block schema for prompt-block-based instructions.\n */\nconst agentInstructionBlockSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('text'), content: z.string() }),\n z.object({ type: z.literal('prompt_block_ref'), id: z.string() }),\n z.object({ type: z.literal('prompt_block'), content: z.string(), rules: ruleGroupSchema.optional() }),\n]);\n\n/**\n * Creates a schema for a field that can be either a static value or an array of conditional variants.\n * Each variant has a `value` and an optional `rules` (RuleGroup) that determines when it applies.\n */\nfunction conditionalFieldSchema<T extends z.ZodTypeAny>(valueSchema: T) {\n const variantSchema = z.object({\n value: valueSchema,\n rules: ruleGroupSchema.optional(),\n });\n return z.union([valueSchema, z.array(variantSchema)]);\n}\n\n/**\n * Instructions can be a plain string or an array of instruction blocks (text + prompt_block references).\n */\nexport const instructionsSchema = z\n .union([z.string(), z.array(agentInstructionBlockSchema)])\n .describe('System instructions for the agent (string or array of instruction blocks)');\n\n/** Base model config schema (reused across snapshot and response schemas) */\nconst modelConfigSchema = z\n .object({\n provider: z.string().describe('Model provider (e.g., openai, anthropic)'),\n name: z.string().describe('Model name (e.g., gpt-4o, claude-3-opus)'),\n })\n .passthrough();\n\n/** Per-tool config schema */\nconst toolConfigSchema = z.object({ description: z.string().optional(), rules: ruleGroupSchema.optional() });\n\n/** Base tools config schema */\nconst toolsConfigSchema = z.record(z.string(), toolConfigSchema);\n\n/** MCP client tools config schema — specifies which tools to use from an MCP client/server */\nconst mcpClientToolsConfigSchema = z.object({\n tools: z.record(z.string(), toolConfigSchema).optional(),\n});\n\n/** Per-skill config schema */\nconst skillConfigSchema = z.object({\n description: z.string().optional(),\n instructions: z.string().optional(),\n pin: z.string().optional(),\n strategy: z.enum(['latest', 'live']).optional(),\n});\n\n/** Skills config: skill IDs mapped to per-skill config */\nconst skillsConfigSchema = z.record(z.string(), skillConfigSchema);\n\n/** Workspace reference: a stored workspace ID, inline config, or a registered workspace provider */\nconst workspaceRefSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('id'), workspaceId: z.string() }),\n z.object({ type: z.literal('inline'), config: workspaceSnapshotConfigSchema }),\n z.object({\n type: z.literal('provider'),\n provider: z.string().describe('Workspace provider identifier'),\n config: z.record(z.string(), z.unknown()).describe('Provider-specific configuration'),\n }),\n]);\n\n/** Screencast options for streaming browser frames */\nconst screencastOptionsSchema = z.object({\n format: z.enum(['jpeg', 'png']).optional().describe('Image format (default: jpeg)'),\n quality: z.number().min(0).max(100).optional().describe('JPEG quality 0-100 (default: 80)'),\n maxWidth: z.number().optional().describe('Max width in pixels (default: 1280)'),\n maxHeight: z.number().optional().describe('Max height in pixels (default: 720)'),\n everyNthFrame: z.number().optional().describe('Capture every Nth frame (default: 1)'),\n});\n\n/** Browser config: serializable browser configuration for stored agents */\nconst browserConfigSchema = z.object({\n provider: z.string().describe('Browser provider type (e.g., stagehand, playwright)'),\n headless: z.boolean().optional().describe('Run browser in headless mode (default: true)'),\n viewport: z\n .object({\n width: z.number().describe('Viewport width in pixels'),\n height: z.number().describe('Viewport height in pixels'),\n })\n .optional()\n .describe('Browser viewport dimensions'),\n timeout: z.number().optional().describe('Default timeout in milliseconds (default: 10000)'),\n screencast: screencastOptionsSchema.optional().describe('Screencast options for streaming browser frames'),\n});\n\n/** Browser reference: inline browser configuration */\nconst browserRefSchema = z.object({\n type: z.literal('inline'),\n config: browserConfigSchema,\n});\n\n/**\n * Processor phase enum matching ProcessorPhase type\n */\nconst processorPhaseSchema = z.enum([\n 'processInput',\n 'processInputStep',\n 'processOutputStream',\n 'processOutputResult',\n 'processOutputStep',\n]);\n\n/**\n * A single processor step in a stored processor graph.\n */\nconst processorGraphStepSchema = z.object({\n id: z.string().describe('Unique ID for this step within the graph'),\n providerId: z.string().describe('ProcessorProvider ID that creates this processor'),\n config: z.record(z.string(), z.unknown()).describe('Configuration matching the provider configSchema'),\n enabledPhases: z.array(processorPhaseSchema).min(1).describe('Which processor phases to enable'),\n});\n\n/**\n * Processor graph entry schema.\n * Simplified version of SerializedStepFlowEntry, supporting step, parallel, and conditional.\n *\n * Uses a fixed nesting depth (3 levels) to avoid infinite recursion\n * when converting to JSON Schema / OpenAPI.\n */\n\n/** Depth 3 (leaf): only step entries allowed */\nconst processorGraphEntryDepth3 = z.discriminatedUnion('type', [\n z.object({ type: z.literal('step'), step: processorGraphStepSchema }),\n]);\n\n/** Depth 2: step, parallel, and conditional — children limited to depth 3 */\nconst processorGraphEntryDepth2 = z.discriminatedUnion('type', [\n z.object({ type: z.literal('step'), step: processorGraphStepSchema }),\n z.object({ type: z.literal('parallel'), branches: z.array(z.array(processorGraphEntryDepth3)) }),\n z.object({\n type: z.literal('conditional'),\n conditions: z.array(\n z.object({\n steps: z.array(processorGraphEntryDepth3),\n rules: ruleGroupSchema.optional(),\n }),\n ),\n }),\n]);\n\n/** Depth 1 (top-level): step, parallel, and conditional — children limited to depth 2 */\nconst processorGraphEntrySchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('step'), step: processorGraphStepSchema }),\n z.object({ type: z.literal('parallel'), branches: z.array(z.array(processorGraphEntryDepth2)) }),\n z.object({\n type: z.literal('conditional'),\n conditions: z.array(\n z.object({\n steps: z.array(processorGraphEntryDepth2),\n rules: ruleGroupSchema.optional(),\n }),\n ),\n }),\n]);\n\n/**\n * A stored processor graph representing a pipeline of processors.\n */\nconst storedProcessorGraphSchema = z.object({\n steps: z.array(processorGraphEntrySchema).describe('Ordered list of processor graph entries'),\n});\n\n/**\n * Agent snapshot config fields (name, description, instructions, model, tools, etc.)\n * These live in version snapshots, not on the thin agent record.\n *\n * Fields that support conditional variants (StorageConditionalField) can be either\n * a static value OR an array of { value, rules? } variants evaluated at request time.\n */\nconst snapshotConfigSchema = z.object({\n name: z.string().describe('Name of the agent'),\n description: z.string().optional().describe('Description of the agent'),\n instructions: instructionsSchema,\n model: conditionalFieldSchema(modelConfigSchema).describe(\n 'Model configuration — static value or array of conditional variants',\n ),\n tools: conditionalFieldSchema(toolsConfigSchema)\n .optional()\n .describe('Tool keys mapped to per-tool config — static or conditional'),\n defaultOptions: conditionalFieldSchema(defaultOptionsSchema)\n .optional()\n .describe('Default options for generate/stream calls — static or conditional'),\n workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Workflow keys with optional per-workflow config — static or conditional'),\n agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Agent keys with optional per-agent config — static or conditional'),\n integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of tool provider IDs to their tool configurations — static or conditional'),\n toolProviders: conditionalFieldSchema(toolProvidersSchema)\n .optional()\n .describe(\n 'Tool provider connections and per-tool config (provider-agnostic). Coexists with the deprecated `integrationTools` field.',\n ),\n mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of stored MCP client IDs to their tool configurations — static or conditional'),\n inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Input processor graph — static or conditional'),\n outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Output processor graph — static or conditional'),\n memory: conditionalFieldSchema(serializedMemoryConfigSchema)\n .optional()\n .describe('Memory configuration — static or conditional'),\n scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema))\n .optional()\n .describe('Scorer keys with optional sampling config — static or conditional'),\n skills: conditionalFieldSchema(skillsConfigSchema)\n .optional()\n .describe('Skill IDs mapped to per-skill config — static or conditional'),\n workspace: conditionalFieldSchema(workspaceRefSchema)\n .optional()\n .describe('Workspace reference (stored ID or inline config) — static or conditional'),\n browser: z\n .union([conditionalFieldSchema(browserRefSchema), z.boolean(), z.null()])\n .optional()\n .describe('Browser configuration — object config, true (apply default), false/null (disable)'),\n requestContextSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('JSON Schema defining valid request context variables for conditional rule evaluation'),\n});\n\n/**\n * Agent metadata fields (authorId, metadata, visibility) that live on the thin agent record.\n */\nconst agentMetadataSchema = z.object({\n authorId: z.string().optional().describe('Author identifier for multi-tenant filtering'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata for the agent'),\n visibility: z\n .enum(['private', 'public'])\n .optional()\n .describe('Agent visibility: private (owner/admin only) or public (any reader)'),\n});\n\n/**\n * Snapshot config schema for create where `model` is optional. When omitted, the\n * builder applies `defaults.model` from `/editor/builder/settings` server-side.\n */\nconst snapshotConfigCreateSchema = snapshotConfigSchema.extend({\n model: conditionalFieldSchema(modelConfigSchema)\n .optional()\n .describe(\n 'Model configuration — static value or array of conditional variants. ' +\n 'When omitted, the builder default model is applied server-side.',\n ),\n});\n\n/**\n * POST /stored/agents - Create stored agent body\n * Flat union of agent-record fields + config fields\n * The id is optional — if not provided, it will be derived from the agent name via slugify.\n */\nexport const createStoredAgentBodySchema = z\n .object({\n id: z.string().optional().describe('Unique identifier for the agent. If not provided, derived from name.'),\n authorId: z.string().optional().describe('Author identifier for multi-tenant filtering'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata for the agent'),\n visibility: z\n .enum(['private', 'public'])\n .optional()\n .describe('Agent visibility: private (owner/admin only) or public (any reader)'),\n })\n .merge(snapshotConfigCreateSchema);\n\n/**\n * Snapshot config schema for updates where nullable fields (like memory) can be set to null to clear them.\n */\nconst snapshotConfigUpdateSchema = snapshotConfigSchema.extend({\n memory: z\n .union([conditionalFieldSchema(serializedMemoryConfigSchema), z.null()])\n .optional()\n .describe('Memory configuration — static, conditional, or null to disable memory'),\n});\n\n/**\n * PATCH /stored/agents/:storedAgentId - Update stored agent body\n * Optional metadata-level fields + optional config fields\n */\nexport const updateStoredAgentBodySchema = agentMetadataSchema\n .partial()\n .merge(snapshotConfigUpdateSchema.partial())\n .extend({\n changeMessage: z\n .string()\n .trim()\n .max(500)\n .optional()\n .describe('Optional message describing the changes for the auto-created version'),\n autoPublish: z\n .boolean()\n .optional()\n .describe('Immediately activate the auto-created version. Defaults to false when omitted.'),\n });\n\nexport const exportStoredAgentBodySchema = snapshotConfigUpdateSchema.partial();\n\nexport const openStoredAgentChangeRequestBodySchema = exportStoredAgentBodySchema.extend({\n changeMessage: z.string().trim().max(500).optional(),\n userName: z.string().trim().min(1).max(120).optional(),\n inspectOnly: z.boolean().optional(),\n});\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\n/**\n * Resolved author object — server-side enrichment of `authorId` against the\n * configured auth provider. Only `id` is required; the other fields mirror\n * what `/auth/me` exposes and are optional because providers may not return\n * every field.\n */\nexport const resolvedAuthorSchema = z.object({\n id: z.string(),\n name: z.string().optional(),\n email: z.string().optional(),\n avatarUrl: z.string().optional(),\n});\n\n/**\n * Stored agent object schema (resolved response: thin record + version config)\n * Represents StorageResolvedAgentType\n */\nexport const storedAgentSchema = z.object({\n // Thin agent record fields\n id: z.string(),\n status: z.string().describe('Agent status: draft or published'),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n author: resolvedAuthorSchema.optional().describe('Resolved author identity (when an auth provider is configured)'),\n metadata: z.record(z.string(), z.unknown()).optional(),\n visibility: z.enum(['private', 'public']).optional(),\n favoriteCount: z.number().int().nonnegative().optional().describe('Number of users who have favorited this agent'),\n isFavorited: z.boolean().optional().describe('Whether the requesting user has favorited this agent'),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n // Version snapshot config fields (resolved from active version)\n name: z.string().describe('Name of the agent'),\n description: z.string().optional().describe('Description of the agent'),\n instructions: instructionsSchema,\n model: conditionalFieldSchema(modelConfigSchema).describe(\n 'Model configuration — static value or array of conditional variants',\n ),\n tools: conditionalFieldSchema(toolsConfigSchema)\n .optional()\n .describe('Tool keys mapped to per-tool config — static or conditional'),\n defaultOptions: conditionalFieldSchema(defaultOptionsSchema)\n .optional()\n .describe('Default options for generate/stream calls — static or conditional'),\n workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Workflow keys with optional per-workflow config — static or conditional'),\n agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Agent keys with optional per-agent config — static or conditional'),\n integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of tool provider IDs to their tool configurations — static or conditional'),\n toolProviders: conditionalFieldSchema(toolProvidersSchema)\n .optional()\n .describe(\n 'Tool provider connections and per-tool config (provider-agnostic). Coexists with the deprecated `integrationTools` field.',\n ),\n mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of stored MCP client IDs to their tool configurations — static or conditional'),\n inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Input processor graph — static or conditional'),\n outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Output processor graph — static or conditional'),\n memory: conditionalFieldSchema(serializedMemoryConfigSchema)\n .optional()\n .describe('Memory configuration — static or conditional'),\n scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema))\n .optional()\n .describe('Scorer keys with optional sampling config — static or conditional'),\n skills: conditionalFieldSchema(skillsConfigSchema)\n .optional()\n .describe('Skill IDs mapped to per-skill config — static or conditional'),\n workspace: conditionalFieldSchema(workspaceRefSchema)\n .optional()\n .describe('Workspace reference (stored ID or inline config) — static or conditional'),\n browser: z\n .union([conditionalFieldSchema(browserRefSchema), z.boolean(), z.null()])\n .optional()\n .describe('Browser configuration — object config, true (apply default), false/null (disable)'),\n requestContextSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('JSON Schema defining valid request context variables'),\n});\n\n/**\n * Response for GET /stored/agents\n */\nexport const listStoredAgentsResponseSchema = paginationInfoSchema.extend({\n agents: z.array(storedAgentSchema),\n});\n\n/**\n * Response for GET /stored/agents/:storedAgentId\n */\nexport const getStoredAgentResponseSchema = storedAgentSchema;\n\n/**\n * Response for POST /stored/agents\n */\nexport const createStoredAgentResponseSchema = storedAgentSchema;\n\n/**\n * Response for PATCH /stored/agents/:storedAgentId\n *\n * The response can be either:\n * 1. A thin agent record (no version) - only has id, status, dates, etc.\n * 2. A resolved agent (with version) - has all config fields from the version\n *\n * We use a union to handle both cases properly.\n */\nexport const updateStoredAgentResponseSchema = z.union([\n // Thin agent record (no version config)\n z.object({\n id: z.string(),\n status: z.string(),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n visibility: z.enum(['private', 'public']).optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n }),\n // Resolved agent (thin record + version config)\n storedAgentSchema,\n]);\n\n/**\n * Response for DELETE /stored/agents/:storedAgentId\n */\nexport const deleteStoredAgentResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n});\n\n/**\n * Response for GET /stored/agents/:storedAgentId/dependents\n *\n * `dependents` lists caller-readable stored agents whose resolved `agents` map\n * references the target. Includes both public and the caller's own private\n * agents — anything the caller already has read access to.\n * `hiddenCount` aggregates references from agents the caller cannot read\n * (cross-workspace private agents). Only populated when the target agent is\n * public, to avoid leaking cross-workspace structure for private targets.\n */\nexport const getStoredAgentDependentsResponseSchema = z.object({\n dependents: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n }),\n ),\n hiddenCount: z.number().int().nonnegative(),\n});\n\nexport const exportStoredAgentResponseSchema = z.object({\n agentId: z.string(),\n fileName: z.string(),\n content: z.string(),\n config: z.record(z.string(), z.unknown()),\n});\n\nexport const openStoredAgentChangeRequestResponseSchema = z.object({\n id: z.union([z.string(), z.number()]).optional(),\n url: z.string(),\n ref: z.string().optional(),\n});\n\n// ============================================================================\n// Preview Instructions Schemas\n// ============================================================================\n\n/**\n * POST /stored/agents/preview-instructions - Preview resolved instructions\n */\nexport const previewInstructionsBodySchema = z.object({\n blocks: z.array(agentInstructionBlockSchema).describe('Array of instruction blocks to resolve'),\n context: z\n .record(z.string(), z.unknown())\n .optional()\n .default({})\n .describe('Request context for variable interpolation and rule evaluation'),\n});\n\n/**\n * Response for POST /stored/agents/preview-instructions\n */\nexport const previewInstructionsResponseSchema = z.object({\n result: z.string().describe('The resolved instructions string'),\n});\n\n/**\n * Exported for use in agent-versions.ts schemas\n */\nexport {\n snapshotConfigSchema,\n scorerConfigSchema,\n conditionalFieldSchema,\n modelConfigSchema,\n storedProcessorGraphSchema,\n processorGraphStepSchema,\n processorGraphEntrySchema,\n processorPhaseSchema,\n toolConfigSchema,\n toolsConfigSchema,\n};\n"]}
'use strict';
var chunkGKIWZDPL_cjs = require('./chunk-GKIWZDPL.cjs');
var chunkPXLC5SNM_cjs = require('./chunk-PXLC5SNM.cjs');
var chunk24YYB3J7_cjs = require('./chunk-24YYB3J7.cjs');
var chunkPFKYMKIH_cjs = require('./chunk-PFKYMKIH.cjs');
var chunk3JVOIOO6_cjs = require('./chunk-3JVOIOO6.cjs');
var v4 = require('zod/v4');
var semanticRecallSchema = v4.z.object({
topK: v4.z.number().describe("Number of semantically similar messages to retrieve"),
messageRange: v4.z.union([
v4.z.number(),
v4.z.object({
before: v4.z.number(),
after: v4.z.number()
})
]).describe("Amount of surrounding context to include with each retrieved message"),
scope: v4.z.enum(["thread", "resource"]).optional().describe("Scope for semantic search queries"),
threshold: v4.z.number().min(0).max(1).optional().describe("Minimum similarity score threshold"),
indexName: v4.z.string().optional().describe("Index name for the vector store")
});
var titleGenerationSchema = v4.z.union([
v4.z.boolean(),
v4.z.object({
model: v4.z.string().describe("Model ID in format provider/model-name (ModelRouterModelId)"),
instructions: v4.z.string().optional().describe("Custom instructions for title generation")
})
]);
var serializedObservationConfigSchema = v4.z.object({
model: v4.z.string().optional().describe("Observer model ID"),
messageTokens: v4.z.number().optional().describe("Token threshold that triggers observation"),
modelSettings: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Model settings (temperature, etc.)"),
providerOptions: v4.z.record(v4.z.string(), v4.z.record(v4.z.string(), v4.z.unknown()).optional()).optional().describe("Provider-specific options"),
maxTokensPerBatch: v4.z.number().optional().describe("Maximum tokens per batch"),
bufferTokens: v4.z.union([v4.z.number(), v4.z.literal(false)]).optional().describe("Async buffering interval or false"),
bufferActivation: v4.z.number().optional().describe("Ratio of buffered observations to activate"),
blockAfter: v4.z.number().optional().describe("Token threshold for synchronous blocking")
});
var serializedReflectionConfigSchema = v4.z.object({
model: v4.z.string().optional().describe("Reflector model ID"),
observationTokens: v4.z.number().optional().describe("Token threshold that triggers reflection"),
modelSettings: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Model settings (temperature, etc.)"),
providerOptions: v4.z.record(v4.z.string(), v4.z.record(v4.z.string(), v4.z.unknown()).optional()).optional().describe("Provider-specific options"),
blockAfter: v4.z.number().optional().describe("Token threshold for synchronous blocking"),
bufferActivation: v4.z.number().optional().describe("Ratio for async reflection buffering")
});
var serializedObservationalMemoryConfigObjectSchema = v4.z.object({
model: v4.z.string().optional().describe("Model ID for both Observer and Reflector"),
scope: v4.z.enum(["resource", "thread"]).optional().describe("Memory scope"),
shareTokenBudget: v4.z.boolean().optional().describe("Share token budget between messages and observations"),
observation: serializedObservationConfigSchema.optional().describe("Observation step configuration"),
reflection: serializedReflectionConfigSchema.optional().describe("Reflection step configuration")
});
var serializedObservationalMemoryConfigSchema = v4.z.union([
v4.z.boolean(),
serializedObservationalMemoryConfigObjectSchema
]);
var serializedMemoryConfigSchema = v4.z.object({
vector: v4.z.union([v4.z.string(), v4.z.literal(false)]).optional().describe("Vector database identifier or false to disable"),
options: v4.z.object({
readOnly: v4.z.boolean().optional(),
lastMessages: v4.z.union([v4.z.number(), v4.z.literal(false)]).optional(),
semanticRecall: v4.z.union([v4.z.boolean(), semanticRecallSchema]).optional(),
generateTitle: titleGenerationSchema.optional()
}).optional().describe("Memory behavior configuration, excluding workingMemory and threads"),
embedder: v4.z.string().optional().describe('Embedding model ID in the format "provider/model" (e.g., "openai/text-embedding-3-small")'),
embedderOptions: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Options to pass to the embedder, omitting telemetry"),
observationalMemory: serializedObservationalMemoryConfigSchema.optional().describe("Serialized observational memory configuration")
}).refine(
(data) => {
const semanticRecall = data.options?.semanticRecall;
const semanticRecallEnabled = semanticRecall === true || typeof semanticRecall === "object" && semanticRecall !== null;
if (semanticRecallEnabled) {
const hasVector = typeof data.vector === "string" && data.vector.length > 0;
const hasEmbedder = typeof data.embedder === "string" && data.embedder.length > 0;
return hasVector && hasEmbedder;
}
return true;
},
{
message: "Semantic recall requires both vector and embedder to be configured",
path: ["options", "semanticRecall"]
}
);
var storedAgentIdPathParams = v4.z.object({
storedAgentId: v4.z.string().describe("Unique identifier for the stored agent")
});
var storageOrderBySchema = v4.z.object({
field: v4.z.enum(["createdAt", "updatedAt"]).optional(),
direction: v4.z.enum(["ASC", "DESC"]).optional()
});
var listStoredAgentsQuerySchema = chunk3JVOIOO6_cjs.createPagePaginationSchema(100).extend({
orderBy: storageOrderBySchema.optional(),
status: v4.z.enum(["draft", "published", "archived"]).optional().default("published").describe("Filter agents by status (defaults to published)"),
authorId: v4.z.string().optional().describe("Filter agents by author identifier"),
visibility: v4.z.enum(["public"]).optional().describe("Filter to only public agents"),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Filter agents by metadata key-value pairs"),
favoritedOnly: v4.z.stringbool().optional().describe("When true, return only agents favorited by the caller (requires the `favorites` EE feature)"),
pinFavoritedFor: v4.z.string().optional().describe(
"When set, treat the given subject (user/role) as the favoriting principal for `favoritedOnly` instead of the caller"
)
});
var scorerConfigSchema = v4.z.object({
description: v4.z.string().optional(),
sampling: v4.z.union([
v4.z.object({ type: v4.z.literal("none") }),
v4.z.object({ type: v4.z.literal("ratio"), rate: v4.z.number().min(0).max(1) })
]).optional(),
rules: chunk24YYB3J7_cjs.ruleGroupSchema.optional()
});
var agentInstructionBlockSchema = v4.z.discriminatedUnion("type", [
v4.z.object({ type: v4.z.literal("text"), content: v4.z.string() }),
v4.z.object({ type: v4.z.literal("prompt_block_ref"), id: v4.z.string() }),
v4.z.object({ type: v4.z.literal("prompt_block"), content: v4.z.string(), rules: chunk24YYB3J7_cjs.ruleGroupSchema.optional() })
]);
function conditionalFieldSchema(valueSchema) {
const variantSchema = v4.z.object({
value: valueSchema,
rules: chunk24YYB3J7_cjs.ruleGroupSchema.optional()
});
return v4.z.union([valueSchema, v4.z.array(variantSchema)]);
}
var instructionsSchema = v4.z.union([v4.z.string(), v4.z.array(agentInstructionBlockSchema)]).describe("System instructions for the agent (string or array of instruction blocks)");
var modelConfigSchema = v4.z.object({
provider: v4.z.string().describe("Model provider (e.g., openai, anthropic)"),
name: v4.z.string().describe("Model name (e.g., gpt-4o, claude-3-opus)")
}).passthrough();
var toolConfigSchema = v4.z.object({ description: v4.z.string().optional(), rules: chunk24YYB3J7_cjs.ruleGroupSchema.optional() });
var toolsConfigSchema = v4.z.record(v4.z.string(), toolConfigSchema);
var mcpClientToolsConfigSchema = v4.z.object({
tools: v4.z.record(v4.z.string(), toolConfigSchema).optional()
});
var skillConfigSchema = v4.z.object({
description: v4.z.string().optional(),
instructions: v4.z.string().optional(),
pin: v4.z.string().optional(),
strategy: v4.z.enum(["latest", "live"]).optional()
});
var skillsConfigSchema = v4.z.record(v4.z.string(), skillConfigSchema);
var workspaceRefSchema = v4.z.discriminatedUnion("type", [
v4.z.object({ type: v4.z.literal("id"), workspaceId: v4.z.string() }),
v4.z.object({ type: v4.z.literal("inline"), config: chunkGKIWZDPL_cjs.snapshotConfigSchema }),
v4.z.object({
type: v4.z.literal("provider"),
provider: v4.z.string().describe("Workspace provider identifier"),
config: v4.z.record(v4.z.string(), v4.z.unknown()).describe("Provider-specific configuration")
})
]);
var screencastOptionsSchema = v4.z.object({
format: v4.z.enum(["jpeg", "png"]).optional().describe("Image format (default: jpeg)"),
quality: v4.z.number().min(0).max(100).optional().describe("JPEG quality 0-100 (default: 80)"),
maxWidth: v4.z.number().optional().describe("Max width in pixels (default: 1280)"),
maxHeight: v4.z.number().optional().describe("Max height in pixels (default: 720)"),
everyNthFrame: v4.z.number().optional().describe("Capture every Nth frame (default: 1)")
});
var browserConfigSchema = v4.z.object({
provider: v4.z.string().describe("Browser provider type (e.g., stagehand, playwright)"),
headless: v4.z.boolean().optional().describe("Run browser in headless mode (default: true)"),
viewport: v4.z.object({
width: v4.z.number().describe("Viewport width in pixels"),
height: v4.z.number().describe("Viewport height in pixels")
}).optional().describe("Browser viewport dimensions"),
timeout: v4.z.number().optional().describe("Default timeout in milliseconds (default: 10000)"),
screencast: screencastOptionsSchema.optional().describe("Screencast options for streaming browser frames")
});
var browserRefSchema = v4.z.object({
type: v4.z.literal("inline"),
config: browserConfigSchema
});
var processorPhaseSchema = v4.z.enum([
"processInput",
"processInputStep",
"processOutputStream",
"processOutputResult",
"processOutputStep"
]);
var processorGraphStepSchema = v4.z.object({
id: v4.z.string().describe("Unique ID for this step within the graph"),
providerId: v4.z.string().describe("ProcessorProvider ID that creates this processor"),
config: v4.z.record(v4.z.string(), v4.z.unknown()).describe("Configuration matching the provider configSchema"),
enabledPhases: v4.z.array(processorPhaseSchema).min(1).describe("Which processor phases to enable")
});
var processorGraphEntryDepth3 = v4.z.discriminatedUnion("type", [
v4.z.object({ type: v4.z.literal("step"), step: processorGraphStepSchema })
]);
var processorGraphEntryDepth2 = v4.z.discriminatedUnion("type", [
v4.z.object({ type: v4.z.literal("step"), step: processorGraphStepSchema }),
v4.z.object({ type: v4.z.literal("parallel"), branches: v4.z.array(v4.z.array(processorGraphEntryDepth3)) }),
v4.z.object({
type: v4.z.literal("conditional"),
conditions: v4.z.array(
v4.z.object({
steps: v4.z.array(processorGraphEntryDepth3),
rules: chunk24YYB3J7_cjs.ruleGroupSchema.optional()
})
)
})
]);
var processorGraphEntrySchema = v4.z.discriminatedUnion("type", [
v4.z.object({ type: v4.z.literal("step"), step: processorGraphStepSchema }),
v4.z.object({ type: v4.z.literal("parallel"), branches: v4.z.array(v4.z.array(processorGraphEntryDepth2)) }),
v4.z.object({
type: v4.z.literal("conditional"),
conditions: v4.z.array(
v4.z.object({
steps: v4.z.array(processorGraphEntryDepth2),
rules: chunk24YYB3J7_cjs.ruleGroupSchema.optional()
})
)
})
]);
var storedProcessorGraphSchema = v4.z.object({
steps: v4.z.array(processorGraphEntrySchema).describe("Ordered list of processor graph entries")
});
var snapshotConfigSchema2 = v4.z.object({
name: v4.z.string().describe("Name of the agent"),
description: v4.z.string().optional().describe("Description of the agent"),
instructions: instructionsSchema,
model: conditionalFieldSchema(modelConfigSchema).describe(
"Model configuration \u2014 static value or array of conditional variants"
),
tools: conditionalFieldSchema(toolsConfigSchema).optional().describe("Tool keys mapped to per-tool config \u2014 static or conditional"),
defaultOptions: conditionalFieldSchema(chunkPFKYMKIH_cjs.defaultOptionsSchema).optional().describe("Default options for generate/stream calls \u2014 static or conditional"),
workflows: conditionalFieldSchema(v4.z.record(v4.z.string(), toolConfigSchema)).optional().describe("Workflow keys with optional per-workflow config \u2014 static or conditional"),
agents: conditionalFieldSchema(v4.z.record(v4.z.string(), toolConfigSchema)).optional().describe("Agent keys with optional per-agent config \u2014 static or conditional"),
integrationTools: conditionalFieldSchema(v4.z.record(v4.z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of tool provider IDs to their tool configurations \u2014 static or conditional"),
toolProviders: conditionalFieldSchema(chunkPXLC5SNM_cjs.toolProvidersSchema).optional().describe(
"Tool provider connections and per-tool config (provider-agnostic). Coexists with the deprecated `integrationTools` field."
),
mcpClients: conditionalFieldSchema(v4.z.record(v4.z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of stored MCP client IDs to their tool configurations \u2014 static or conditional"),
inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Input processor graph \u2014 static or conditional"),
outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Output processor graph \u2014 static or conditional"),
memory: conditionalFieldSchema(serializedMemoryConfigSchema).optional().describe("Memory configuration \u2014 static or conditional"),
scorers: conditionalFieldSchema(v4.z.record(v4.z.string(), scorerConfigSchema)).optional().describe("Scorer keys with optional sampling config \u2014 static or conditional"),
skills: conditionalFieldSchema(skillsConfigSchema).optional().describe("Skill IDs mapped to per-skill config \u2014 static or conditional"),
workspace: conditionalFieldSchema(workspaceRefSchema).optional().describe("Workspace reference (stored ID or inline config) \u2014 static or conditional"),
browser: v4.z.union([conditionalFieldSchema(browserRefSchema), v4.z.boolean(), v4.z.null()]).optional().describe("Browser configuration \u2014 object config, true (apply default), false/null (disable)"),
requestContextSchema: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("JSON Schema defining valid request context variables for conditional rule evaluation")
});
var agentMetadataSchema = v4.z.object({
authorId: v4.z.string().optional().describe("Author identifier for multi-tenant filtering"),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Additional metadata for the agent"),
visibility: v4.z.enum(["private", "public"]).optional().describe("Agent visibility: private (owner/admin only) or public (any reader)")
});
var snapshotConfigCreateSchema = snapshotConfigSchema2.extend({
model: conditionalFieldSchema(modelConfigSchema).optional().describe(
"Model configuration \u2014 static value or array of conditional variants. When omitted, the builder default model is applied server-side."
)
});
var createStoredAgentBodySchema = v4.z.object({
id: v4.z.string().optional().describe("Unique identifier for the agent. If not provided, derived from name."),
authorId: v4.z.string().optional().describe("Author identifier for multi-tenant filtering"),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Additional metadata for the agent"),
visibility: v4.z.enum(["private", "public"]).optional().describe("Agent visibility: private (owner/admin only) or public (any reader)")
}).merge(snapshotConfigCreateSchema);
var snapshotConfigUpdateSchema = snapshotConfigSchema2.extend({
memory: v4.z.union([conditionalFieldSchema(serializedMemoryConfigSchema), v4.z.null()]).optional().describe("Memory configuration \u2014 static, conditional, or null to disable memory")
});
var updateStoredAgentBodySchema = agentMetadataSchema.partial().merge(snapshotConfigUpdateSchema.partial()).extend({
changeMessage: v4.z.string().trim().max(500).optional().describe("Optional message describing the changes for the auto-created version"),
autoPublish: v4.z.boolean().optional().describe("Immediately activate the auto-created version. Defaults to false when omitted.")
});
var exportStoredAgentBodySchema = snapshotConfigUpdateSchema.partial();
var openStoredAgentChangeRequestBodySchema = exportStoredAgentBodySchema.extend({
changeMessage: v4.z.string().trim().max(500).optional(),
userName: v4.z.string().trim().min(1).max(120).optional(),
inspectOnly: v4.z.boolean().optional()
});
var resolvedAuthorSchema = v4.z.object({
id: v4.z.string(),
name: v4.z.string().optional(),
email: v4.z.string().optional(),
avatarUrl: v4.z.string().optional()
});
var storedAgentSchema = v4.z.object({
// Thin agent record fields
id: v4.z.string(),
status: v4.z.string().describe("Agent status: draft or published"),
activeVersionId: v4.z.string().optional(),
authorId: v4.z.string().optional(),
author: resolvedAuthorSchema.optional().describe("Resolved author identity (when an auth provider is configured)"),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional(),
visibility: v4.z.enum(["private", "public"]).optional(),
favoriteCount: v4.z.number().int().nonnegative().optional().describe("Number of users who have favorited this agent"),
isFavorited: v4.z.boolean().optional().describe("Whether the requesting user has favorited this agent"),
createdAt: v4.z.coerce.date(),
updatedAt: v4.z.coerce.date(),
// Version snapshot config fields (resolved from active version)
name: v4.z.string().describe("Name of the agent"),
description: v4.z.string().optional().describe("Description of the agent"),
instructions: instructionsSchema,
model: conditionalFieldSchema(modelConfigSchema).describe(
"Model configuration \u2014 static value or array of conditional variants"
),
tools: conditionalFieldSchema(toolsConfigSchema).optional().describe("Tool keys mapped to per-tool config \u2014 static or conditional"),
defaultOptions: conditionalFieldSchema(chunkPFKYMKIH_cjs.defaultOptionsSchema).optional().describe("Default options for generate/stream calls \u2014 static or conditional"),
workflows: conditionalFieldSchema(v4.z.record(v4.z.string(), toolConfigSchema)).optional().describe("Workflow keys with optional per-workflow config \u2014 static or conditional"),
agents: conditionalFieldSchema(v4.z.record(v4.z.string(), toolConfigSchema)).optional().describe("Agent keys with optional per-agent config \u2014 static or conditional"),
integrationTools: conditionalFieldSchema(v4.z.record(v4.z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of tool provider IDs to their tool configurations \u2014 static or conditional"),
toolProviders: conditionalFieldSchema(chunkPXLC5SNM_cjs.toolProvidersSchema).optional().describe(
"Tool provider connections and per-tool config (provider-agnostic). Coexists with the deprecated `integrationTools` field."
),
mcpClients: conditionalFieldSchema(v4.z.record(v4.z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of stored MCP client IDs to their tool configurations \u2014 static or conditional"),
inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Input processor graph \u2014 static or conditional"),
outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Output processor graph \u2014 static or conditional"),
memory: conditionalFieldSchema(serializedMemoryConfigSchema).optional().describe("Memory configuration \u2014 static or conditional"),
scorers: conditionalFieldSchema(v4.z.record(v4.z.string(), scorerConfigSchema)).optional().describe("Scorer keys with optional sampling config \u2014 static or conditional"),
skills: conditionalFieldSchema(skillsConfigSchema).optional().describe("Skill IDs mapped to per-skill config \u2014 static or conditional"),
workspace: conditionalFieldSchema(workspaceRefSchema).optional().describe("Workspace reference (stored ID or inline config) \u2014 static or conditional"),
browser: v4.z.union([conditionalFieldSchema(browserRefSchema), v4.z.boolean(), v4.z.null()]).optional().describe("Browser configuration \u2014 object config, true (apply default), false/null (disable)"),
requestContextSchema: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("JSON Schema defining valid request context variables")
});
var listStoredAgentsResponseSchema = chunk3JVOIOO6_cjs.paginationInfoSchema.extend({
agents: v4.z.array(storedAgentSchema)
});
var getStoredAgentResponseSchema = storedAgentSchema;
var createStoredAgentResponseSchema = storedAgentSchema;
var updateStoredAgentResponseSchema = v4.z.union([
// Thin agent record (no version config)
v4.z.object({
id: v4.z.string(),
status: v4.z.string(),
activeVersionId: v4.z.string().optional(),
authorId: v4.z.string().optional(),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional(),
visibility: v4.z.enum(["private", "public"]).optional(),
createdAt: v4.z.coerce.date(),
updatedAt: v4.z.coerce.date()
}),
// Resolved agent (thin record + version config)
storedAgentSchema
]);
var deleteStoredAgentResponseSchema = v4.z.object({
success: v4.z.boolean(),
message: v4.z.string()
});
var getStoredAgentDependentsResponseSchema = v4.z.object({
dependents: v4.z.array(
v4.z.object({
id: v4.z.string(),
name: v4.z.string()
})
),
hiddenCount: v4.z.number().int().nonnegative()
});
var exportStoredAgentResponseSchema = v4.z.object({
agentId: v4.z.string(),
fileName: v4.z.string(),
content: v4.z.string(),
config: v4.z.record(v4.z.string(), v4.z.unknown())
});
var openStoredAgentChangeRequestResponseSchema = v4.z.object({
id: v4.z.union([v4.z.string(), v4.z.number()]).optional(),
url: v4.z.string(),
ref: v4.z.string().optional()
});
var previewInstructionsBodySchema = v4.z.object({
blocks: v4.z.array(agentInstructionBlockSchema).describe("Array of instruction blocks to resolve"),
context: v4.z.record(v4.z.string(), v4.z.unknown()).optional().default({}).describe("Request context for variable interpolation and rule evaluation")
});
var previewInstructionsResponseSchema = v4.z.object({
result: v4.z.string().describe("The resolved instructions string")
});
exports.conditionalFieldSchema = conditionalFieldSchema;
exports.createStoredAgentBodySchema = createStoredAgentBodySchema;
exports.createStoredAgentResponseSchema = createStoredAgentResponseSchema;
exports.deleteStoredAgentResponseSchema = deleteStoredAgentResponseSchema;
exports.exportStoredAgentBodySchema = exportStoredAgentBodySchema;
exports.exportStoredAgentResponseSchema = exportStoredAgentResponseSchema;
exports.getStoredAgentDependentsResponseSchema = getStoredAgentDependentsResponseSchema;
exports.getStoredAgentResponseSchema = getStoredAgentResponseSchema;
exports.instructionsSchema = instructionsSchema;
exports.listStoredAgentsQuerySchema = listStoredAgentsQuerySchema;
exports.listStoredAgentsResponseSchema = listStoredAgentsResponseSchema;
exports.modelConfigSchema = modelConfigSchema;
exports.openStoredAgentChangeRequestBodySchema = openStoredAgentChangeRequestBodySchema;
exports.openStoredAgentChangeRequestResponseSchema = openStoredAgentChangeRequestResponseSchema;
exports.previewInstructionsBodySchema = previewInstructionsBodySchema;
exports.previewInstructionsResponseSchema = previewInstructionsResponseSchema;
exports.processorGraphEntrySchema = processorGraphEntrySchema;
exports.processorGraphStepSchema = processorGraphStepSchema;
exports.processorPhaseSchema = processorPhaseSchema;
exports.resolvedAuthorSchema = resolvedAuthorSchema;
exports.scorerConfigSchema = scorerConfigSchema;
exports.semanticRecallSchema = semanticRecallSchema;
exports.serializedMemoryConfigSchema = serializedMemoryConfigSchema;
exports.serializedObservationConfigSchema = serializedObservationConfigSchema;
exports.serializedObservationalMemoryConfigObjectSchema = serializedObservationalMemoryConfigObjectSchema;
exports.serializedObservationalMemoryConfigSchema = serializedObservationalMemoryConfigSchema;
exports.serializedReflectionConfigSchema = serializedReflectionConfigSchema;
exports.snapshotConfigSchema = snapshotConfigSchema2;
exports.storedAgentIdPathParams = storedAgentIdPathParams;
exports.storedAgentSchema = storedAgentSchema;
exports.storedProcessorGraphSchema = storedProcessorGraphSchema;
exports.titleGenerationSchema = titleGenerationSchema;
exports.toolConfigSchema = toolConfigSchema;
exports.toolsConfigSchema = toolsConfigSchema;
exports.updateStoredAgentBodySchema = updateStoredAgentBodySchema;
exports.updateStoredAgentResponseSchema = updateStoredAgentResponseSchema;
//# sourceMappingURL=chunk-I5JCLVTK.cjs.map
//# sourceMappingURL=chunk-I5JCLVTK.cjs.map
{"version":3,"sources":["../src/server/schemas/memory-config.ts","../src/server/schemas/stored-agents.ts"],"names":["z","createPagePaginationSchema","ruleGroupSchema","snapshotConfigSchema","defaultOptionsSchema","toolProvidersSchema","paginationInfoSchema"],"mappings":"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","file":"chunk-I5JCLVTK.cjs","sourcesContent":["import { z } from 'zod/v4';\n\n/**\n * Shared memory configuration schemas for agent storage\n * These schemas match the SerializedMemoryConfig type from @mastra/core\n */\n\n/**\n * Semantic recall configuration for vector-based memory retrieval\n */\nexport const semanticRecallSchema = z.object({\n topK: z.number().describe('Number of semantically similar messages to retrieve'),\n messageRange: z\n .union([\n z.number(),\n z.object({\n before: z.number(),\n after: z.number(),\n }),\n ])\n .describe('Amount of surrounding context to include with each retrieved message'),\n scope: z.enum(['thread', 'resource']).optional().describe('Scope for semantic search queries'),\n threshold: z.number().min(0).max(1).optional().describe('Minimum similarity score threshold'),\n indexName: z.string().optional().describe('Index name for the vector store'),\n});\n\n/**\n * Title generation configuration\n * When stored, the model is serialized as a ModelRouterModelId string (provider/model-name format)\n */\nexport const titleGenerationSchema = z.union([\n z.boolean(),\n z.object({\n model: z.string().describe('Model ID in format provider/model-name (ModelRouterModelId)'),\n instructions: z.string().optional().describe('Custom instructions for title generation'),\n }),\n]);\n\n/**\n * Observation step configuration for observational memory\n */\nexport const serializedObservationConfigSchema = z.object({\n model: z.string().optional().describe('Observer model ID'),\n messageTokens: z.number().optional().describe('Token threshold that triggers observation'),\n modelSettings: z.record(z.string(), z.unknown()).optional().describe('Model settings (temperature, etc.)'),\n providerOptions: z\n .record(z.string(), z.record(z.string(), z.unknown()).optional())\n .optional()\n .describe('Provider-specific options'),\n maxTokensPerBatch: z.number().optional().describe('Maximum tokens per batch'),\n bufferTokens: z\n .union([z.number(), z.literal(false)])\n .optional()\n .describe('Async buffering interval or false'),\n bufferActivation: z.number().optional().describe('Ratio of buffered observations to activate'),\n blockAfter: z.number().optional().describe('Token threshold for synchronous blocking'),\n});\n\n/**\n * Reflection step configuration for observational memory\n */\nexport const serializedReflectionConfigSchema = z.object({\n model: z.string().optional().describe('Reflector model ID'),\n observationTokens: z.number().optional().describe('Token threshold that triggers reflection'),\n modelSettings: z.record(z.string(), z.unknown()).optional().describe('Model settings (temperature, etc.)'),\n providerOptions: z\n .record(z.string(), z.record(z.string(), z.unknown()).optional())\n .optional()\n .describe('Provider-specific options'),\n blockAfter: z.number().optional().describe('Token threshold for synchronous blocking'),\n bufferActivation: z.number().optional().describe('Ratio for async reflection buffering'),\n});\n\n/**\n * Serialized observational memory configuration\n */\nexport const serializedObservationalMemoryConfigObjectSchema = z.object({\n model: z.string().optional().describe('Model ID for both Observer and Reflector'),\n scope: z.enum(['resource', 'thread']).optional().describe('Memory scope'),\n shareTokenBudget: z.boolean().optional().describe('Share token budget between messages and observations'),\n observation: serializedObservationConfigSchema.optional().describe('Observation step configuration'),\n reflection: serializedReflectionConfigSchema.optional().describe('Reflection step configuration'),\n});\n\nexport const serializedObservationalMemoryConfigSchema = z.union([\n z.boolean(),\n serializedObservationalMemoryConfigObjectSchema,\n]);\n\n/**\n * Serialized memory configuration matching SerializedMemoryConfig from @mastra/core\n *\n * Note: workingMemory and threads are omitted as they are not part of SerializedMemoryConfig\n * @see packages/core/src/memory/types.ts\n */\nexport const serializedMemoryConfigSchema = z\n .object({\n vector: z\n .union([z.string(), z.literal(false)])\n .optional()\n .describe('Vector database identifier or false to disable'),\n options: z\n .object({\n readOnly: z.boolean().optional(),\n lastMessages: z.union([z.number(), z.literal(false)]).optional(),\n semanticRecall: z.union([z.boolean(), semanticRecallSchema]).optional(),\n generateTitle: titleGenerationSchema.optional(),\n })\n .optional()\n .describe('Memory behavior configuration, excluding workingMemory and threads'),\n embedder: z\n .string()\n .optional()\n .describe('Embedding model ID in the format \"provider/model\" (e.g., \"openai/text-embedding-3-small\")'),\n embedderOptions: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('Options to pass to the embedder, omitting telemetry'),\n observationalMemory: serializedObservationalMemoryConfigSchema\n .optional()\n .describe('Serialized observational memory configuration'),\n })\n .refine(\n data => {\n // If semanticRecall is enabled (true or object), both vector and embedder are required\n const semanticRecall = data.options?.semanticRecall;\n const semanticRecallEnabled =\n semanticRecall === true || (typeof semanticRecall === 'object' && semanticRecall !== null);\n\n if (semanticRecallEnabled) {\n // vector must be a string (not false or undefined)\n const hasVector = typeof data.vector === 'string' && data.vector.length > 0;\n // embedder must be defined\n const hasEmbedder = typeof data.embedder === 'string' && data.embedder.length > 0;\n\n return hasVector && hasEmbedder;\n }\n return true;\n },\n {\n message: 'Semantic recall requires both vector and embedder to be configured',\n path: ['options', 'semanticRecall'],\n },\n );\n","import { z } from 'zod/v4';\nimport { paginationInfoSchema, createPagePaginationSchema, statusQuerySchema } from './common';\nimport { defaultOptionsSchema } from './default-options';\nimport { serializedMemoryConfigSchema } from './memory-config';\nimport { ruleGroupSchema } from './rule-group';\nimport { workspaceSnapshotConfigSchema } from './stored-workspaces';\nimport { toolProvidersSchema } from './tool-providers';\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\n/**\n * Path parameter for stored agent ID\n */\nexport const storedAgentIdPathParams = z.object({\n storedAgentId: z.string().describe('Unique identifier for the stored agent'),\n});\n\n// ============================================================================\n// Query Parameter Schemas\n// ============================================================================\n\n/**\n * Storage order by configuration\n */\nconst storageOrderBySchema = z.object({\n field: z.enum(['createdAt', 'updatedAt']).optional(),\n direction: z.enum(['ASC', 'DESC']).optional(),\n});\n\nexport { statusQuerySchema };\n\n/**\n * GET /stored/agents - List stored agents\n */\nexport const listStoredAgentsQuerySchema = createPagePaginationSchema(100).extend({\n orderBy: storageOrderBySchema.optional(),\n status: z\n .enum(['draft', 'published', 'archived'])\n .optional()\n .default('published')\n .describe('Filter agents by status (defaults to published)'),\n authorId: z.string().optional().describe('Filter agents by author identifier'),\n visibility: z.enum(['public']).optional().describe('Filter to only public agents'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Filter agents by metadata key-value pairs'),\n favoritedOnly: z\n .stringbool()\n .optional()\n .describe('When true, return only agents favorited by the caller (requires the `favorites` EE feature)'),\n pinFavoritedFor: z\n .string()\n .optional()\n .describe(\n 'When set, treat the given subject (user/role) as the favoriting principal for `favoritedOnly` instead of the caller',\n ),\n});\n\n// ============================================================================\n// Body Parameter Schemas\n// ============================================================================\n\n/**\n * Scorer config schema with optional sampling and rules\n */\nconst scorerConfigSchema = z.object({\n description: z.string().optional(),\n sampling: z\n .union([\n z.object({ type: z.literal('none') }),\n z.object({ type: z.literal('ratio'), rate: z.number().min(0).max(1) }),\n ])\n .optional(),\n rules: ruleGroupSchema.optional(),\n});\n\n/**\n * Agent instruction block schema for prompt-block-based instructions.\n */\nconst agentInstructionBlockSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('text'), content: z.string() }),\n z.object({ type: z.literal('prompt_block_ref'), id: z.string() }),\n z.object({ type: z.literal('prompt_block'), content: z.string(), rules: ruleGroupSchema.optional() }),\n]);\n\n/**\n * Creates a schema for a field that can be either a static value or an array of conditional variants.\n * Each variant has a `value` and an optional `rules` (RuleGroup) that determines when it applies.\n */\nfunction conditionalFieldSchema<T extends z.ZodTypeAny>(valueSchema: T) {\n const variantSchema = z.object({\n value: valueSchema,\n rules: ruleGroupSchema.optional(),\n });\n return z.union([valueSchema, z.array(variantSchema)]);\n}\n\n/**\n * Instructions can be a plain string or an array of instruction blocks (text + prompt_block references).\n */\nexport const instructionsSchema = z\n .union([z.string(), z.array(agentInstructionBlockSchema)])\n .describe('System instructions for the agent (string or array of instruction blocks)');\n\n/** Base model config schema (reused across snapshot and response schemas) */\nconst modelConfigSchema = z\n .object({\n provider: z.string().describe('Model provider (e.g., openai, anthropic)'),\n name: z.string().describe('Model name (e.g., gpt-4o, claude-3-opus)'),\n })\n .passthrough();\n\n/** Per-tool config schema */\nconst toolConfigSchema = z.object({ description: z.string().optional(), rules: ruleGroupSchema.optional() });\n\n/** Base tools config schema */\nconst toolsConfigSchema = z.record(z.string(), toolConfigSchema);\n\n/** MCP client tools config schema — specifies which tools to use from an MCP client/server */\nconst mcpClientToolsConfigSchema = z.object({\n tools: z.record(z.string(), toolConfigSchema).optional(),\n});\n\n/** Per-skill config schema */\nconst skillConfigSchema = z.object({\n description: z.string().optional(),\n instructions: z.string().optional(),\n pin: z.string().optional(),\n strategy: z.enum(['latest', 'live']).optional(),\n});\n\n/** Skills config: skill IDs mapped to per-skill config */\nconst skillsConfigSchema = z.record(z.string(), skillConfigSchema);\n\n/** Workspace reference: a stored workspace ID, inline config, or a registered workspace provider */\nconst workspaceRefSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('id'), workspaceId: z.string() }),\n z.object({ type: z.literal('inline'), config: workspaceSnapshotConfigSchema }),\n z.object({\n type: z.literal('provider'),\n provider: z.string().describe('Workspace provider identifier'),\n config: z.record(z.string(), z.unknown()).describe('Provider-specific configuration'),\n }),\n]);\n\n/** Screencast options for streaming browser frames */\nconst screencastOptionsSchema = z.object({\n format: z.enum(['jpeg', 'png']).optional().describe('Image format (default: jpeg)'),\n quality: z.number().min(0).max(100).optional().describe('JPEG quality 0-100 (default: 80)'),\n maxWidth: z.number().optional().describe('Max width in pixels (default: 1280)'),\n maxHeight: z.number().optional().describe('Max height in pixels (default: 720)'),\n everyNthFrame: z.number().optional().describe('Capture every Nth frame (default: 1)'),\n});\n\n/** Browser config: serializable browser configuration for stored agents */\nconst browserConfigSchema = z.object({\n provider: z.string().describe('Browser provider type (e.g., stagehand, playwright)'),\n headless: z.boolean().optional().describe('Run browser in headless mode (default: true)'),\n viewport: z\n .object({\n width: z.number().describe('Viewport width in pixels'),\n height: z.number().describe('Viewport height in pixels'),\n })\n .optional()\n .describe('Browser viewport dimensions'),\n timeout: z.number().optional().describe('Default timeout in milliseconds (default: 10000)'),\n screencast: screencastOptionsSchema.optional().describe('Screencast options for streaming browser frames'),\n});\n\n/** Browser reference: inline browser configuration */\nconst browserRefSchema = z.object({\n type: z.literal('inline'),\n config: browserConfigSchema,\n});\n\n/**\n * Processor phase enum matching ProcessorPhase type\n */\nconst processorPhaseSchema = z.enum([\n 'processInput',\n 'processInputStep',\n 'processOutputStream',\n 'processOutputResult',\n 'processOutputStep',\n]);\n\n/**\n * A single processor step in a stored processor graph.\n */\nconst processorGraphStepSchema = z.object({\n id: z.string().describe('Unique ID for this step within the graph'),\n providerId: z.string().describe('ProcessorProvider ID that creates this processor'),\n config: z.record(z.string(), z.unknown()).describe('Configuration matching the provider configSchema'),\n enabledPhases: z.array(processorPhaseSchema).min(1).describe('Which processor phases to enable'),\n});\n\n/**\n * Processor graph entry schema.\n * Simplified version of SerializedStepFlowEntry, supporting step, parallel, and conditional.\n *\n * Uses a fixed nesting depth (3 levels) to avoid infinite recursion\n * when converting to JSON Schema / OpenAPI.\n */\n\n/** Depth 3 (leaf): only step entries allowed */\nconst processorGraphEntryDepth3 = z.discriminatedUnion('type', [\n z.object({ type: z.literal('step'), step: processorGraphStepSchema }),\n]);\n\n/** Depth 2: step, parallel, and conditional — children limited to depth 3 */\nconst processorGraphEntryDepth2 = z.discriminatedUnion('type', [\n z.object({ type: z.literal('step'), step: processorGraphStepSchema }),\n z.object({ type: z.literal('parallel'), branches: z.array(z.array(processorGraphEntryDepth3)) }),\n z.object({\n type: z.literal('conditional'),\n conditions: z.array(\n z.object({\n steps: z.array(processorGraphEntryDepth3),\n rules: ruleGroupSchema.optional(),\n }),\n ),\n }),\n]);\n\n/** Depth 1 (top-level): step, parallel, and conditional — children limited to depth 2 */\nconst processorGraphEntrySchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('step'), step: processorGraphStepSchema }),\n z.object({ type: z.literal('parallel'), branches: z.array(z.array(processorGraphEntryDepth2)) }),\n z.object({\n type: z.literal('conditional'),\n conditions: z.array(\n z.object({\n steps: z.array(processorGraphEntryDepth2),\n rules: ruleGroupSchema.optional(),\n }),\n ),\n }),\n]);\n\n/**\n * A stored processor graph representing a pipeline of processors.\n */\nconst storedProcessorGraphSchema = z.object({\n steps: z.array(processorGraphEntrySchema).describe('Ordered list of processor graph entries'),\n});\n\n/**\n * Agent snapshot config fields (name, description, instructions, model, tools, etc.)\n * These live in version snapshots, not on the thin agent record.\n *\n * Fields that support conditional variants (StorageConditionalField) can be either\n * a static value OR an array of { value, rules? } variants evaluated at request time.\n */\nconst snapshotConfigSchema = z.object({\n name: z.string().describe('Name of the agent'),\n description: z.string().optional().describe('Description of the agent'),\n instructions: instructionsSchema,\n model: conditionalFieldSchema(modelConfigSchema).describe(\n 'Model configuration — static value or array of conditional variants',\n ),\n tools: conditionalFieldSchema(toolsConfigSchema)\n .optional()\n .describe('Tool keys mapped to per-tool config — static or conditional'),\n defaultOptions: conditionalFieldSchema(defaultOptionsSchema)\n .optional()\n .describe('Default options for generate/stream calls — static or conditional'),\n workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Workflow keys with optional per-workflow config — static or conditional'),\n agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Agent keys with optional per-agent config — static or conditional'),\n integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of tool provider IDs to their tool configurations — static or conditional'),\n toolProviders: conditionalFieldSchema(toolProvidersSchema)\n .optional()\n .describe(\n 'Tool provider connections and per-tool config (provider-agnostic). Coexists with the deprecated `integrationTools` field.',\n ),\n mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of stored MCP client IDs to their tool configurations — static or conditional'),\n inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Input processor graph — static or conditional'),\n outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Output processor graph — static or conditional'),\n memory: conditionalFieldSchema(serializedMemoryConfigSchema)\n .optional()\n .describe('Memory configuration — static or conditional'),\n scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema))\n .optional()\n .describe('Scorer keys with optional sampling config — static or conditional'),\n skills: conditionalFieldSchema(skillsConfigSchema)\n .optional()\n .describe('Skill IDs mapped to per-skill config — static or conditional'),\n workspace: conditionalFieldSchema(workspaceRefSchema)\n .optional()\n .describe('Workspace reference (stored ID or inline config) — static or conditional'),\n browser: z\n .union([conditionalFieldSchema(browserRefSchema), z.boolean(), z.null()])\n .optional()\n .describe('Browser configuration — object config, true (apply default), false/null (disable)'),\n requestContextSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('JSON Schema defining valid request context variables for conditional rule evaluation'),\n});\n\n/**\n * Agent metadata fields (authorId, metadata, visibility) that live on the thin agent record.\n */\nconst agentMetadataSchema = z.object({\n authorId: z.string().optional().describe('Author identifier for multi-tenant filtering'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata for the agent'),\n visibility: z\n .enum(['private', 'public'])\n .optional()\n .describe('Agent visibility: private (owner/admin only) or public (any reader)'),\n});\n\n/**\n * Snapshot config schema for create where `model` is optional. When omitted, the\n * builder applies `defaults.model` from `/editor/builder/settings` server-side.\n */\nconst snapshotConfigCreateSchema = snapshotConfigSchema.extend({\n model: conditionalFieldSchema(modelConfigSchema)\n .optional()\n .describe(\n 'Model configuration — static value or array of conditional variants. ' +\n 'When omitted, the builder default model is applied server-side.',\n ),\n});\n\n/**\n * POST /stored/agents - Create stored agent body\n * Flat union of agent-record fields + config fields\n * The id is optional — if not provided, it will be derived from the agent name via slugify.\n */\nexport const createStoredAgentBodySchema = z\n .object({\n id: z.string().optional().describe('Unique identifier for the agent. If not provided, derived from name.'),\n authorId: z.string().optional().describe('Author identifier for multi-tenant filtering'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata for the agent'),\n visibility: z\n .enum(['private', 'public'])\n .optional()\n .describe('Agent visibility: private (owner/admin only) or public (any reader)'),\n })\n .merge(snapshotConfigCreateSchema);\n\n/**\n * Snapshot config schema for updates where nullable fields (like memory) can be set to null to clear them.\n */\nconst snapshotConfigUpdateSchema = snapshotConfigSchema.extend({\n memory: z\n .union([conditionalFieldSchema(serializedMemoryConfigSchema), z.null()])\n .optional()\n .describe('Memory configuration — static, conditional, or null to disable memory'),\n});\n\n/**\n * PATCH /stored/agents/:storedAgentId - Update stored agent body\n * Optional metadata-level fields + optional config fields\n */\nexport const updateStoredAgentBodySchema = agentMetadataSchema\n .partial()\n .merge(snapshotConfigUpdateSchema.partial())\n .extend({\n changeMessage: z\n .string()\n .trim()\n .max(500)\n .optional()\n .describe('Optional message describing the changes for the auto-created version'),\n autoPublish: z\n .boolean()\n .optional()\n .describe('Immediately activate the auto-created version. Defaults to false when omitted.'),\n });\n\nexport const exportStoredAgentBodySchema = snapshotConfigUpdateSchema.partial();\n\nexport const openStoredAgentChangeRequestBodySchema = exportStoredAgentBodySchema.extend({\n changeMessage: z.string().trim().max(500).optional(),\n userName: z.string().trim().min(1).max(120).optional(),\n inspectOnly: z.boolean().optional(),\n});\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\n/**\n * Resolved author object — server-side enrichment of `authorId` against the\n * configured auth provider. Only `id` is required; the other fields mirror\n * what `/auth/me` exposes and are optional because providers may not return\n * every field.\n */\nexport const resolvedAuthorSchema = z.object({\n id: z.string(),\n name: z.string().optional(),\n email: z.string().optional(),\n avatarUrl: z.string().optional(),\n});\n\n/**\n * Stored agent object schema (resolved response: thin record + version config)\n * Represents StorageResolvedAgentType\n */\nexport const storedAgentSchema = z.object({\n // Thin agent record fields\n id: z.string(),\n status: z.string().describe('Agent status: draft or published'),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n author: resolvedAuthorSchema.optional().describe('Resolved author identity (when an auth provider is configured)'),\n metadata: z.record(z.string(), z.unknown()).optional(),\n visibility: z.enum(['private', 'public']).optional(),\n favoriteCount: z.number().int().nonnegative().optional().describe('Number of users who have favorited this agent'),\n isFavorited: z.boolean().optional().describe('Whether the requesting user has favorited this agent'),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n // Version snapshot config fields (resolved from active version)\n name: z.string().describe('Name of the agent'),\n description: z.string().optional().describe('Description of the agent'),\n instructions: instructionsSchema,\n model: conditionalFieldSchema(modelConfigSchema).describe(\n 'Model configuration — static value or array of conditional variants',\n ),\n tools: conditionalFieldSchema(toolsConfigSchema)\n .optional()\n .describe('Tool keys mapped to per-tool config — static or conditional'),\n defaultOptions: conditionalFieldSchema(defaultOptionsSchema)\n .optional()\n .describe('Default options for generate/stream calls — static or conditional'),\n workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Workflow keys with optional per-workflow config — static or conditional'),\n agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Agent keys with optional per-agent config — static or conditional'),\n integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of tool provider IDs to their tool configurations — static or conditional'),\n toolProviders: conditionalFieldSchema(toolProvidersSchema)\n .optional()\n .describe(\n 'Tool provider connections and per-tool config (provider-agnostic). Coexists with the deprecated `integrationTools` field.',\n ),\n mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of stored MCP client IDs to their tool configurations — static or conditional'),\n inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Input processor graph — static or conditional'),\n outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Output processor graph — static or conditional'),\n memory: conditionalFieldSchema(serializedMemoryConfigSchema)\n .optional()\n .describe('Memory configuration — static or conditional'),\n scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema))\n .optional()\n .describe('Scorer keys with optional sampling config — static or conditional'),\n skills: conditionalFieldSchema(skillsConfigSchema)\n .optional()\n .describe('Skill IDs mapped to per-skill config — static or conditional'),\n workspace: conditionalFieldSchema(workspaceRefSchema)\n .optional()\n .describe('Workspace reference (stored ID or inline config) — static or conditional'),\n browser: z\n .union([conditionalFieldSchema(browserRefSchema), z.boolean(), z.null()])\n .optional()\n .describe('Browser configuration — object config, true (apply default), false/null (disable)'),\n requestContextSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('JSON Schema defining valid request context variables'),\n});\n\n/**\n * Response for GET /stored/agents\n */\nexport const listStoredAgentsResponseSchema = paginationInfoSchema.extend({\n agents: z.array(storedAgentSchema),\n});\n\n/**\n * Response for GET /stored/agents/:storedAgentId\n */\nexport const getStoredAgentResponseSchema = storedAgentSchema;\n\n/**\n * Response for POST /stored/agents\n */\nexport const createStoredAgentResponseSchema = storedAgentSchema;\n\n/**\n * Response for PATCH /stored/agents/:storedAgentId\n *\n * The response can be either:\n * 1. A thin agent record (no version) - only has id, status, dates, etc.\n * 2. A resolved agent (with version) - has all config fields from the version\n *\n * We use a union to handle both cases properly.\n */\nexport const updateStoredAgentResponseSchema = z.union([\n // Thin agent record (no version config)\n z.object({\n id: z.string(),\n status: z.string(),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n visibility: z.enum(['private', 'public']).optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n }),\n // Resolved agent (thin record + version config)\n storedAgentSchema,\n]);\n\n/**\n * Response for DELETE /stored/agents/:storedAgentId\n */\nexport const deleteStoredAgentResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n});\n\n/**\n * Response for GET /stored/agents/:storedAgentId/dependents\n *\n * `dependents` lists caller-readable stored agents whose resolved `agents` map\n * references the target. Includes both public and the caller's own private\n * agents — anything the caller already has read access to.\n * `hiddenCount` aggregates references from agents the caller cannot read\n * (cross-workspace private agents). Only populated when the target agent is\n * public, to avoid leaking cross-workspace structure for private targets.\n */\nexport const getStoredAgentDependentsResponseSchema = z.object({\n dependents: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n }),\n ),\n hiddenCount: z.number().int().nonnegative(),\n});\n\nexport const exportStoredAgentResponseSchema = z.object({\n agentId: z.string(),\n fileName: z.string(),\n content: z.string(),\n config: z.record(z.string(), z.unknown()),\n});\n\nexport const openStoredAgentChangeRequestResponseSchema = z.object({\n id: z.union([z.string(), z.number()]).optional(),\n url: z.string(),\n ref: z.string().optional(),\n});\n\n// ============================================================================\n// Preview Instructions Schemas\n// ============================================================================\n\n/**\n * POST /stored/agents/preview-instructions - Preview resolved instructions\n */\nexport const previewInstructionsBodySchema = z.object({\n blocks: z.array(agentInstructionBlockSchema).describe('Array of instruction blocks to resolve'),\n context: z\n .record(z.string(), z.unknown())\n .optional()\n .default({})\n .describe('Request context for variable interpolation and rule evaluation'),\n});\n\n/**\n * Response for POST /stored/agents/preview-instructions\n */\nexport const previewInstructionsResponseSchema = z.object({\n result: z.string().describe('The resolved instructions string'),\n});\n\n/**\n * Exported for use in agent-versions.ts schemas\n */\nexport {\n snapshotConfigSchema,\n scorerConfigSchema,\n conditionalFieldSchema,\n modelConfigSchema,\n storedProcessorGraphSchema,\n processorGraphStepSchema,\n processorGraphEntrySchema,\n processorPhaseSchema,\n toolConfigSchema,\n toolsConfigSchema,\n};\n"]}
'use strict';
var chunk42WZN6MM_cjs = require('./chunk-42WZN6MM.cjs');
var chunkF3HP5HM6_cjs = require('./chunk-F3HP5HM6.cjs');
var chunkOFF7L43B_cjs = require('./chunk-OFF7L43B.cjs');
var chunkBPREBJ3Z_cjs = require('./chunk-BPREBJ3Z.cjs');
var chunkQQJHGSB2_cjs = require('./chunk-QQJHGSB2.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
var crypto = require('crypto');
// src/server/handlers/responses.ts
var responses_exports = {};
chunkO7I5CWRX_cjs.__export(responses_exports, {
CREATE_RESPONSE_ROUTE: () => CREATE_RESPONSE_ROUTE,
DELETE_RESPONSE_ROUTE: () => DELETE_RESPONSE_ROUTE,
GET_RESPONSE_ROUTE: () => GET_RESPONSE_ROUTE
});
var JSON_OBJECT_RESPONSE_SCHEMA = {
type: "object",
additionalProperties: true
};
function jsonResponse(data, status = 200) {
return new Response(JSON.stringify(data), {
status,
headers: {
"Content-Type": "application/json"
}
});
}
function createStructuredOutput(text) {
if (!text) {
return void 0;
}
switch (text.format.type) {
case "json_object":
return {
schema: JSON_OBJECT_RESPONSE_SCHEMA,
jsonPromptInjection: true
};
case "json_schema":
return {
schema: text.format.schema
};
default:
return void 0;
}
}
function getStreamedMessageOutputItem(response, responseId) {
return response.output.find(
(item) => item.type === "message" && item.id === responseId
) ?? null;
}
async function resolveThreadExecutionContext({
agent,
store,
conversationId,
previousResponseTurnRecord,
requestContext
}) {
if (conversationId && previousResponseTurnRecord && previousResponseTurnRecord.thread.id !== conversationId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "conversation_id and previous_response_id must reference the same conversation thread when both are provided"
});
}
if (previousResponseTurnRecord) {
return {
threadId: previousResponseTurnRecord.thread.id,
resourceId: previousResponseTurnRecord.thread.resourceId
};
}
const effectiveThreadId = chunkQQJHGSB2_cjs.getEffectiveThreadId(requestContext, void 0);
const effectiveResourceId = chunkQQJHGSB2_cjs.getEffectiveResourceId(requestContext, void 0);
if (!store && !conversationId && !effectiveThreadId) {
return null;
}
const memory = await agent.getMemory({ requestContext });
if (!memory) {
if (conversationId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "conversation_id requires the target agent to have memory configured"
});
}
return null;
}
if (conversationId) {
const existingThread2 = await memory.getThreadById({ threadId: conversationId });
if (!existingThread2) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Conversation ${conversationId} was not found` });
}
await chunkQQJHGSB2_cjs.enforceThreadAccess({
mastra: agent.getMastraInstance(),
requestContext,
threadId: conversationId,
thread: existingThread2,
effectiveResourceId
});
return {
threadId: existingThread2.id,
resourceId: effectiveResourceId ?? existingThread2.resourceId
};
}
if (!effectiveThreadId) {
if (!store) {
return null;
}
const threadId2 = crypto.randomUUID();
const createdThread2 = await memory.createThread({
threadId: threadId2,
resourceId: effectiveResourceId ?? threadId2
});
return {
threadId: createdThread2.id,
resourceId: createdThread2.resourceId
};
}
const threadId = effectiveThreadId;
const existingThread = await memory.getThreadById({ threadId });
if (existingThread) {
await chunkQQJHGSB2_cjs.enforceThreadAccess({
mastra: agent.getMastraInstance(),
requestContext,
threadId,
thread: existingThread,
effectiveResourceId
});
return {
threadId: existingThread.id,
resourceId: effectiveResourceId ?? existingThread.resourceId
};
}
if (!store) {
return null;
}
const resourceId = effectiveResourceId ?? threadId;
const createdThread = await memory.createThread({
threadId,
resourceId
});
return {
threadId: createdThread.id,
resourceId: createdThread.resourceId
};
}
function createExecutionMemory(threadContext) {
if (!threadContext) {
return void 0;
}
return {
memory: {
thread: threadContext.threadId,
resource: threadContext.resourceId
}
};
}
async function resolveResponseAgent({
mastra,
agentId
}) {
if (!agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "Responses requests require an agent_id"
});
}
if (!mastra) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Mastra instance is required for agent-backed responses" });
}
return chunkBPREBJ3Z_cjs.getAgentFromSystem({ mastra, agentId });
}
async function resolveAgentMemoryStore({
agent,
requestContext,
errorMessage
}) {
const agentMemoryStore = await chunkOFF7L43B_cjs.getAgentMemoryStore({ agent, requestContext });
if (!agentMemoryStore) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: errorMessage });
}
return agentMemoryStore;
}
async function executeGenerate({
agent,
resolvedModel,
modelOverride,
instructions,
text,
providerOptions,
input,
requestContext,
abortSignal,
threadContext
}) {
const executionMemory = createExecutionMemory(threadContext);
const structuredOutput = createStructuredOutput(text);
const modelOption = modelOverride ? { model: modelOverride } : {};
const commonOptions = {
instructions,
requestContext,
abortSignal,
...modelOption,
structuredOutput,
providerOptions,
...executionMemory ?? {}
};
if (resolvedModel.specificationVersion === "v1") {
if (threadContext) {
return await agent.generateLegacy(input, {
instructions,
requestContext,
abortSignal,
...modelOption,
output: structuredOutput?.schema,
providerOptions,
resourceId: threadContext.resourceId,
threadId: threadContext.threadId
});
}
return await agent.generateLegacy(input, {
instructions,
requestContext,
abortSignal,
...modelOption,
output: structuredOutput?.schema,
providerOptions
});
}
return await agent.generate(input, commonOptions);
}
async function executeStream({
agent,
resolvedModel,
modelOverride,
instructions,
text,
providerOptions,
input,
requestContext,
abortSignal,
threadContext
}) {
const executionMemory = createExecutionMemory(threadContext);
const structuredOutput = createStructuredOutput(text);
const modelOption = modelOverride ? { model: modelOverride } : {};
const commonOptions = {
instructions,
requestContext,
abortSignal,
...modelOption,
structuredOutput,
providerOptions,
...executionMemory ?? {}
};
if (resolvedModel.specificationVersion === "v1") {
if (threadContext) {
return await agent.streamLegacy(input, {
instructions,
requestContext,
abortSignal,
...modelOption,
output: structuredOutput?.schema,
providerOptions,
resourceId: threadContext.resourceId,
threadId: threadContext.threadId
});
}
return await agent.streamLegacy(input, {
instructions,
requestContext,
abortSignal,
...modelOption,
output: structuredOutput?.schema,
providerOptions
});
}
return await agent.stream(input, commonOptions);
}
async function resolveUsage(result) {
return await (result.totalUsage ?? result.usage ?? null);
}
async function resolveProviderMetadata(result) {
return await (result.providerMetadata ?? void 0);
}
async function resolveFinishReason(result) {
return await result.finishReason ?? void 0;
}
async function resolveText(result) {
return await result.text ?? "";
}
async function resolveCompletedResponseState(result, fallbackText) {
const usage = await resolveUsage(result);
return {
completedAt: Math.floor(Date.now() / 1e3),
status: chunkF3HP5HM6_cjs.toResponseStatus(await resolveFinishReason(result)),
text: await resolveText(result) || fallbackText,
usage,
usageDetails: chunkF3HP5HM6_cjs.toResponseUsage(usage),
providerOptions: await resolveProviderMetadata(result)
};
}
async function storeCompletedResponse({
agentMemoryStore,
didStore,
threadContext,
responseId,
metadata,
completedState,
messages,
outputItems
}) {
if (!didStore || !threadContext) {
return;
}
await chunkOFF7L43B_cjs.persistResponseTurnRecord({
memoryStore: agentMemoryStore,
responseId,
metadata: {
...metadata,
completedAt: completedState.completedAt,
status: completedState.status,
usage: completedState.usageDetails,
providerOptions: completedState.providerOptions,
messageIds: [],
outputItems
},
threadContext,
messages
});
}
async function finalizeResponse({
agentMemoryStore,
didStore,
threadContext,
result,
responseId,
createdAt,
model,
instructions,
previousResponseId,
conversationId,
configuredTools,
responseMetadata,
fallbackText,
fallbackOutputItems
}) {
const completedState = await resolveCompletedResponseState(result, fallbackText);
const fallbackItems = fallbackOutputItems?.(completedState);
const responseMessages = await chunkOFF7L43B_cjs.resolveResponseTurnMessagesForStorage({
result,
responseId,
text: completedState.text,
threadContext,
fallbackOutputItems: threadContext ? fallbackItems : void 0
});
const response = chunkF3HP5HM6_cjs.buildCompletedResponse({
responseId,
outputMessageId: responseId,
model,
createdAt,
completedAt: completedState.completedAt,
status: completedState.status,
text: completedState.text,
usage: completedState.usage,
instructions,
textConfig: responseMetadata.text,
previousResponseId,
conversationId,
providerOptions: completedState.providerOptions,
tools: configuredTools,
messages: responseMessages,
fallbackOutputItems: fallbackItems,
store: didStore
});
await storeCompletedResponse({
agentMemoryStore,
didStore,
threadContext,
responseId,
metadata: responseMetadata,
completedState,
messages: responseMessages,
outputItems: response.output
});
return { completedState, response, responseMessages };
}
async function prepareCreateResponseRequest({
body,
mastra,
requestContext
}) {
const executionInput = chunkF3HP5HM6_cjs.mapResponseInputToExecutionMessages(body.input);
let previousResponseTurnRecord = null;
let resolvedAgent = null;
if (body.previous_response_id) {
if (body.agent_id) {
resolvedAgent = await resolveResponseAgent({ mastra, agentId: body.agent_id });
previousResponseTurnRecord = await chunkOFF7L43B_cjs.findResponseTurnRecord({
agent: resolvedAgent,
responseId: body.previous_response_id,
requestContext
});
if (!previousResponseTurnRecord) {
const owningResponseTurnRecord = await chunkOFF7L43B_cjs.findResponseTurnRecordAcrossAgents({
mastra,
responseId: body.previous_response_id,
requestContext
});
if (owningResponseTurnRecord) {
if (owningResponseTurnRecord.metadata.agentId === body.agent_id) {
previousResponseTurnRecord = owningResponseTurnRecord;
} else {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: `Stored response ${body.previous_response_id} belongs to agent ${owningResponseTurnRecord.metadata.agentId}, not ${body.agent_id}`
});
}
}
if (!previousResponseTurnRecord) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored response ${body.previous_response_id} was not found` });
}
}
} else {
if (!mastra) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Mastra instance is required for agent-backed responses" });
}
previousResponseTurnRecord = await chunkOFF7L43B_cjs.findResponseTurnRecordAcrossAgents({
mastra,
responseId: body.previous_response_id,
requestContext
});
if (!previousResponseTurnRecord) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored response ${body.previous_response_id} was not found` });
}
}
}
const agent = resolvedAgent ?? await resolveResponseAgent({
mastra,
agentId: body.agent_id ?? previousResponseTurnRecord?.metadata.agentId
});
const resolvedModel = await agent.getModel({
requestContext,
modelConfig: body.model
});
const responseModel = body.model ?? (() => {
if (resolvedModel.provider && resolvedModel.modelId) {
const publicProviderId = resolvedModel.provider.includes(".") ? resolvedModel.provider.split(".")[0] : resolvedModel.provider;
return `${publicProviderId}/${resolvedModel.modelId}`;
}
if (resolvedModel.modelId) {
return resolvedModel.modelId;
}
throw new chunk64ITUOXI_cjs.HTTPException(500, {
message: "Responses route could not determine the effective model for this request"
});
})();
const shouldStore = body.store ?? false;
const needsMemoryStore = shouldStore || Boolean(body.conversation_id) || Boolean(body.previous_response_id);
const agentMemoryStore = needsMemoryStore ? await resolveAgentMemoryStore({
agent,
requestContext,
errorMessage: body.previous_response_id ? "previous_response_id requires the target agent to have memory storage configured" : shouldStore ? "Stored responses require the target agent to have memory storage configured" : "conversation_id requires the target agent to have memory storage configured"
}) : null;
const configuredTools = chunkF3HP5HM6_cjs.mapMastraToolsToResponseTools(
await Promise.resolve(agent.listTools({ requestContext }))
);
const responseId = chunkF3HP5HM6_cjs.createMessageId();
const createdAt = Math.floor(Date.now() / 1e3);
const threadContext = await resolveThreadExecutionContext({
agent,
store: shouldStore,
conversationId: body.conversation_id,
previousResponseTurnRecord,
requestContext
});
if (shouldStore && !threadContext) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "Stored responses require the target agent to have memory configured"
});
}
const didStore = shouldStore && Boolean(threadContext);
return {
agent,
agentMemoryStore,
configuredTools,
createdAt,
didStore,
executionInput,
previousResponseTurnRecord,
resolvedModel,
responseId,
responseModel,
responseMetadata: {
agentId: agent.id,
model: responseModel,
createdAt,
instructions: body.instructions,
text: body.text,
previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,
tools: configuredTools,
store: didStore
},
threadContext
};
}
function createResponseEventStream({
agentMemoryStore,
body,
configuredTools,
createdAt,
didStore,
previousResponseTurnRecord,
responseId,
responseModel,
responseMetadata,
streamResult,
threadContext
}) {
const createdResponse = chunkF3HP5HM6_cjs.buildInProgressResponse({
responseId,
model: responseModel,
createdAt,
instructions: body.instructions,
textConfig: body.text,
previousResponseId: body.previous_response_id,
conversationId: threadContext?.threadId ?? body.conversation_id,
tools: configuredTools,
store: didStore
});
return new ReadableStream({
async start(controller) {
let sequenceNumber = 1;
const enqueueEvent = (eventName, payload) => {
controller.enqueue(
chunkF3HP5HM6_cjs.formatSseEvent(eventName, {
...payload,
sequence_number: sequenceNumber++
})
);
};
enqueueEvent("response.created", {
type: "response.created",
response: createdResponse
});
enqueueEvent("response.in_progress", {
type: "response.in_progress",
response: createdResponse
});
const streamEvents = chunkF3HP5HM6_cjs.createResponseStreamEventTranslator(responseId);
const fullStream = await streamResult.fullStream;
const reader = fullStream.getReader();
try {
while (true) {
const { done, value } = await reader.read();
if (done) {
break;
}
for (const event of streamEvents.consume(value)) {
enqueueEvent(event.event, event.payload);
}
}
for (const event of streamEvents.flushPendingToolResults()) {
enqueueEvent(event.event, event.payload);
}
const { completedState, response } = await finalizeResponse({
agentMemoryStore,
didStore,
threadContext,
result: streamResult,
responseId,
createdAt,
model: responseModel,
instructions: body.instructions,
previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,
conversationId: threadContext?.threadId ?? body.conversation_id,
configuredTools,
responseMetadata,
fallbackText: streamEvents.text,
fallbackOutputItems: (completedState2) => streamEvents.getOutputItems({
text: completedState2.text,
status: completedState2.status
})
});
const completedItem = getStreamedMessageOutputItem(response, responseId);
if (completedItem || completedState.text) {
for (const event of streamEvents.completeText(
completedState.text,
completedItem ?? {
id: responseId,
type: "message",
role: "assistant",
status: "completed",
content: [chunkF3HP5HM6_cjs.createOutputTextPart(completedState.text)]
}
)) {
enqueueEvent(event.event, event.payload);
}
}
enqueueEvent("response.completed", {
type: "response.completed",
response
});
controller.close();
} catch (error) {
controller.error(error);
} finally {
reader.releaseLock();
}
}
});
}
var CREATE_RESPONSE_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/v1/responses",
responseType: "datastream-response",
bodySchema: chunk42WZN6MM_cjs.createResponseBodySchema,
responseSchema: chunk42WZN6MM_cjs.responseObjectSchema,
summary: "Create a response",
description: "Creates a response through a Mastra-hosted Responses API-compatible route",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunkQQJHGSB2_cjs.MastraFGAPermissions.AGENTS_EXECUTE,
handler: async ({ mastra, requestContext, abortSignal, ...body }) => {
try {
const {
agent,
agentMemoryStore,
configuredTools,
createdAt,
didStore,
executionInput,
previousResponseTurnRecord,
resolvedModel,
responseId,
responseModel,
responseMetadata,
threadContext
} = await prepareCreateResponseRequest({ body, mastra, requestContext });
if (!body.stream) {
const result = await executeGenerate({
agent,
resolvedModel,
modelOverride: body.model,
instructions: body.instructions,
text: body.text,
providerOptions: body.providerOptions,
input: executionInput,
requestContext,
abortSignal,
threadContext
});
const { response } = await finalizeResponse({
agentMemoryStore,
didStore,
threadContext,
result,
responseId,
createdAt,
model: responseModel,
instructions: body.instructions,
previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,
conversationId: threadContext?.threadId ?? body.conversation_id,
configuredTools,
responseMetadata,
fallbackText: ""
});
return jsonResponse(response);
}
const streamResult = await executeStream({
agent,
resolvedModel,
modelOverride: body.model,
instructions: body.instructions,
text: body.text,
providerOptions: body.providerOptions,
input: executionInput,
requestContext,
abortSignal,
threadContext
});
const stream = createResponseEventStream({
agentMemoryStore,
body,
configuredTools,
createdAt,
didStore,
previousResponseTurnRecord,
responseId,
responseModel,
responseMetadata,
streamResult,
threadContext
});
return new Response(stream, {
headers: {
"Content-Type": "text/event-stream; charset=utf-8",
"Cache-Control": "no-cache",
Connection: "keep-alive",
"X-Accel-Buffering": "no"
}
});
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating response");
}
}
});
var GET_RESPONSE_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/v1/responses/:responseId",
responseType: "json",
pathParamSchema: chunk42WZN6MM_cjs.responseIdPathParams,
responseSchema: chunk42WZN6MM_cjs.responseObjectSchema,
summary: "Retrieve a stored response",
description: "Returns a previously stored response object",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunkQQJHGSB2_cjs.MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, responseId }) => {
try {
const responseTurnRecord = await chunkOFF7L43B_cjs.findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });
if (!responseTurnRecord) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored response ${responseId} was not found` });
}
return chunkF3HP5HM6_cjs.mapResponseTurnRecordToResponse(responseTurnRecord);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error retrieving response");
}
}
});
var DELETE_RESPONSE_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/v1/responses/:responseId",
responseType: "json",
pathParamSchema: chunk42WZN6MM_cjs.responseIdPathParams,
responseSchema: chunk42WZN6MM_cjs.deleteResponseSchema,
summary: "Delete a stored response",
description: "Deletes a stored response so it can no longer be retrieved or chained",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunkQQJHGSB2_cjs.MastraFGAPermissions.AGENTS_DELETE,
handler: async ({ mastra, requestContext, responseId }) => {
try {
const responseTurnRecord = await chunkOFF7L43B_cjs.findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });
if (!responseTurnRecord) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored response ${responseId} was not found` });
}
await chunkOFF7L43B_cjs.deleteResponseTurnRecord({ responseTurnRecord });
const response = {
id: responseId,
object: "response",
deleted: true
};
return response;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error deleting response");
}
}
});
exports.CREATE_RESPONSE_ROUTE = CREATE_RESPONSE_ROUTE;
exports.DELETE_RESPONSE_ROUTE = DELETE_RESPONSE_ROUTE;
exports.GET_RESPONSE_ROUTE = GET_RESPONSE_ROUTE;
exports.responses_exports = responses_exports;
//# sourceMappingURL=chunk-IDCO7C4M.cjs.map
//# sourceMappingURL=chunk-IDCO7C4M.cjs.map
{"version":3,"sources":["../src/server/handlers/responses.ts"],"names":["__export","HTTPException","getEffectiveThreadId","getEffectiveResourceId","existingThread","enforceThreadAccess","threadId","randomUUID","createdThread","getAgentFromSystem","getAgentMemoryStore","toResponseStatus","toResponseUsage","persistResponseTurnRecord","resolveResponseTurnMessagesForStorage","buildCompletedResponse","mapResponseInputToExecutionMessages","findResponseTurnRecord","findResponseTurnRecordAcrossAgents","mapMastraToolsToResponseTools","createMessageId","buildInProgressResponse","formatSseEvent","createResponseStreamEventTranslator","completedState","createOutputTextPart","createRoute","createResponseBodySchema","responseObjectSchema","MastraFGAPermissions","handleError","responseIdPathParams","mapResponseTurnRecordToResponse","deleteResponseSchema","deleteResponseTurnRecord"],"mappings":"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","file":"chunk-IDCO7C4M.cjs","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { Agent, MastraDBMessage } from '@mastra/core/agent';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { MemoryStorage } from '@mastra/core/storage';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n createResponseBodySchema,\n deleteResponseSchema,\n responseIdPathParams,\n responseObjectSchema,\n} from '../schemas/responses';\nimport type { CreateResponseBody, DeleteResponse, ResponseObject } from '../schemas/responses';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\nimport {\n buildCompletedResponse,\n buildInProgressResponse,\n createResponseStreamEventTranslator,\n createMessageId,\n createOutputTextPart,\n formatSseEvent,\n mapMastraToolsToResponseTools,\n mapResponseInputToExecutionMessages,\n mapResponseTurnRecordToResponse,\n toResponseStatus,\n toResponseUsage,\n} from './responses.adapter';\nimport {\n deleteResponseTurnRecord,\n findResponseTurnRecord,\n findResponseTurnRecordAcrossAgents,\n getAgentMemoryStore,\n persistResponseTurnRecord,\n resolveResponseTurnMessagesForStorage,\n} from './responses.storage';\nimport type {\n ProviderMetadataLike,\n ResponseTurnRecord,\n ResponseTurnRecordMetadata,\n ThreadExecutionContext,\n UsageLike,\n} from './responses.storage';\nimport { enforceThreadAccess, getEffectiveResourceId, getEffectiveThreadId } from './utils';\n\ntype AgentExecutionInput = Parameters<Agent['generate']>[0];\ntype ResolvedAgentModel = Awaited<ReturnType<Agent['getModel']>>;\n\ntype ResponseExecutionResult = {\n text?: string;\n finishReason?: string;\n totalUsage?: UsageLike | Promise<UsageLike>;\n usage?: UsageLike | Promise<UsageLike>;\n providerMetadata?: ProviderMetadataLike | Promise<ProviderMetadataLike>;\n response?: {\n id?: string;\n dbMessages?: MastraDBMessage[];\n };\n};\n\ntype ResponseStreamResult = {\n fullStream: ReadableStream<unknown> | Promise<ReadableStream<unknown>>;\n text: Promise<string> | string;\n finishReason: Promise<string | undefined> | string | undefined;\n totalUsage?: Promise<UsageLike> | UsageLike;\n usage?: Promise<UsageLike> | UsageLike;\n providerMetadata?: Promise<ProviderMetadataLike> | ProviderMetadataLike;\n response?:\n | Promise<{\n id?: string;\n dbMessages?: MastraDBMessage[];\n }>\n | {\n id?: string;\n dbMessages?: MastraDBMessage[];\n };\n};\n\ntype CompletedResponseState = {\n completedAt: number;\n status: ResponseObject['status'];\n text: string;\n usage: UsageLike;\n usageDetails: ResponseObject['usage'];\n providerOptions: ProviderMetadataLike;\n};\n\ntype FinalizedResponse = {\n completedState: CompletedResponseState;\n response: ResponseObject;\n responseMessages: MastraDBMessage[];\n};\n\ntype PreparedCreateResponseRequest = {\n agent: Agent<any, any, any, any>;\n agentMemoryStore: MemoryStorage | null;\n configuredTools: ReturnType<typeof mapMastraToolsToResponseTools>;\n createdAt: number;\n didStore: boolean;\n executionInput: AgentExecutionInput;\n previousResponseTurnRecord: ResponseTurnRecord | null;\n resolvedModel: ResolvedAgentModel;\n responseId: string;\n responseModel: string;\n responseMetadata: Omit<\n ResponseTurnRecordMetadata,\n 'completedAt' | 'status' | 'usage' | 'providerOptions' | 'messageIds'\n >;\n threadContext: ThreadExecutionContext | null;\n};\n\nconst JSON_OBJECT_RESPONSE_SCHEMA = {\n type: 'object',\n additionalProperties: true,\n} as const;\n\nfunction jsonResponse(data: ResponseObject, status: number = 200): Response {\n return new Response(JSON.stringify(data), {\n status,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n}\n\nfunction createStructuredOutput(text: CreateResponseBody['text']) {\n if (!text) {\n return undefined;\n }\n\n switch (text.format.type) {\n case 'json_object':\n return {\n schema: JSON_OBJECT_RESPONSE_SCHEMA,\n jsonPromptInjection: true,\n };\n case 'json_schema':\n return {\n schema: text.format.schema,\n };\n default:\n return undefined;\n }\n}\n\nfunction getStreamedMessageOutputItem(response: ResponseObject, responseId: string) {\n return (\n response.output.find(\n (item): item is Extract<ResponseObject['output'][number], { type: 'message' }> =>\n item.type === 'message' && item.id === responseId,\n ) ?? null\n );\n}\n\n/**\n * Resolves the memory thread that should back the current response request.\n *\n * If `previous_response_id` is present, the request continues on that stored thread.\n * Otherwise, the route only creates or reuses a thread when the caller asked to store\n * the response and the resolved agent actually has memory configured.\n */\nasync function resolveThreadExecutionContext({\n agent,\n store,\n conversationId,\n previousResponseTurnRecord,\n requestContext,\n}: {\n agent: Agent<any, any, any, any>;\n store: boolean;\n conversationId?: string;\n previousResponseTurnRecord: ResponseTurnRecord | null;\n requestContext: RequestContext;\n}): Promise<ThreadExecutionContext | null> {\n if (conversationId && previousResponseTurnRecord && previousResponseTurnRecord.thread.id !== conversationId) {\n throw new HTTPException(400, {\n message:\n 'conversation_id and previous_response_id must reference the same conversation thread when both are provided',\n });\n }\n\n if (previousResponseTurnRecord) {\n return {\n threadId: previousResponseTurnRecord.thread.id,\n resourceId: previousResponseTurnRecord.thread.resourceId,\n };\n }\n\n const effectiveThreadId = getEffectiveThreadId(requestContext, undefined);\n const effectiveResourceId = getEffectiveResourceId(requestContext, undefined);\n\n if (!store && !conversationId && !effectiveThreadId) {\n return null;\n }\n\n const memory = await agent.getMemory({ requestContext });\n if (!memory) {\n if (conversationId) {\n throw new HTTPException(400, {\n message: 'conversation_id requires the target agent to have memory configured',\n });\n }\n\n return null;\n }\n\n if (conversationId) {\n const existingThread = await memory.getThreadById({ threadId: conversationId });\n if (!existingThread) {\n throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });\n }\n\n await enforceThreadAccess({\n mastra: agent.getMastraInstance(),\n requestContext,\n threadId: conversationId,\n thread: existingThread,\n effectiveResourceId,\n });\n return {\n threadId: existingThread.id,\n resourceId: effectiveResourceId ?? existingThread.resourceId,\n };\n }\n\n if (!effectiveThreadId) {\n if (!store) {\n return null;\n }\n\n const threadId = randomUUID();\n const createdThread = await memory.createThread({\n threadId,\n resourceId: effectiveResourceId ?? threadId,\n });\n\n return {\n threadId: createdThread.id,\n resourceId: createdThread.resourceId,\n };\n }\n\n const threadId = effectiveThreadId;\n const existingThread = await memory.getThreadById({ threadId });\n if (existingThread) {\n await enforceThreadAccess({\n mastra: agent.getMastraInstance(),\n requestContext,\n threadId,\n thread: existingThread,\n effectiveResourceId,\n });\n return {\n threadId: existingThread.id,\n resourceId: effectiveResourceId ?? existingThread.resourceId,\n };\n }\n\n if (!store) {\n return null;\n }\n\n const resourceId = effectiveResourceId ?? threadId;\n const createdThread = await memory.createThread({\n threadId,\n resourceId,\n });\n\n return {\n threadId: createdThread.id,\n resourceId: createdThread.resourceId,\n };\n}\n\nfunction createExecutionMemory(threadContext: ThreadExecutionContext | null) {\n if (!threadContext) {\n return undefined;\n }\n\n return {\n memory: {\n thread: threadContext.threadId,\n resource: threadContext.resourceId,\n },\n } as const;\n}\n\n/**\n * Resolves the registered Mastra agent that owns the response request.\n */\nasync function resolveResponseAgent({\n mastra,\n agentId,\n}: {\n mastra: Mastra | undefined;\n agentId?: string;\n}): Promise<Agent<any, any, any, any>> {\n if (!agentId) {\n throw new HTTPException(400, {\n message: 'Responses requests require an agent_id',\n });\n }\n\n if (!mastra) {\n throw new HTTPException(500, { message: 'Mastra instance is required for agent-backed responses' });\n }\n\n return getAgentFromSystem({ mastra, agentId });\n}\n\nasync function resolveAgentMemoryStore({\n agent,\n requestContext,\n errorMessage,\n}: {\n agent: Agent<any, any, any, any>;\n requestContext: RequestContext;\n errorMessage: string;\n}): Promise<MemoryStorage> {\n const agentMemoryStore = await getAgentMemoryStore({ agent, requestContext });\n if (!agentMemoryStore) {\n throw new HTTPException(400, { message: errorMessage });\n }\n\n return agentMemoryStore;\n}\n\n/**\n * Executes a non-streaming Responses API request through the resolved Mastra agent.\n */\nasync function executeGenerate({\n agent,\n resolvedModel,\n modelOverride,\n instructions,\n text,\n providerOptions,\n input,\n requestContext,\n abortSignal,\n threadContext,\n}: {\n agent: Agent;\n resolvedModel: ResolvedAgentModel;\n modelOverride?: string;\n instructions: string | undefined;\n text: CreateResponseBody['text'];\n providerOptions: CreateResponseBody['providerOptions'];\n input: AgentExecutionInput;\n requestContext: RequestContext;\n abortSignal: AbortSignal;\n threadContext: ThreadExecutionContext | null;\n}) {\n const executionMemory = createExecutionMemory(threadContext);\n const structuredOutput = createStructuredOutput(text);\n const modelOption = modelOverride ? { model: modelOverride } : {};\n const commonOptions = {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n structuredOutput,\n providerOptions,\n ...(executionMemory ?? {}),\n };\n\n if (resolvedModel.specificationVersion === 'v1') {\n if (threadContext) {\n return (await agent.generateLegacy(input, {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n output: structuredOutput?.schema,\n providerOptions,\n resourceId: threadContext.resourceId,\n threadId: threadContext.threadId,\n } as never)) as ResponseExecutionResult;\n }\n\n return (await agent.generateLegacy(input, {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n output: structuredOutput?.schema,\n providerOptions,\n } as never)) as ResponseExecutionResult;\n }\n\n return (await agent.generate(input, commonOptions as never)) as ResponseExecutionResult;\n}\n\n/**\n * Executes a streaming Responses API request through the resolved Mastra agent.\n */\nasync function executeStream({\n agent,\n resolvedModel,\n modelOverride,\n instructions,\n text,\n providerOptions,\n input,\n requestContext,\n abortSignal,\n threadContext,\n}: {\n agent: Agent;\n resolvedModel: ResolvedAgentModel;\n modelOverride?: string;\n instructions: string | undefined;\n text: CreateResponseBody['text'];\n providerOptions: CreateResponseBody['providerOptions'];\n input: AgentExecutionInput;\n requestContext: RequestContext;\n abortSignal: AbortSignal;\n threadContext: ThreadExecutionContext | null;\n}) {\n const executionMemory = createExecutionMemory(threadContext);\n const structuredOutput = createStructuredOutput(text);\n const modelOption = modelOverride ? { model: modelOverride } : {};\n const commonOptions = {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n structuredOutput,\n providerOptions,\n ...(executionMemory ?? {}),\n };\n\n if (resolvedModel.specificationVersion === 'v1') {\n if (threadContext) {\n return (await agent.streamLegacy(input, {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n output: structuredOutput?.schema,\n providerOptions,\n resourceId: threadContext.resourceId,\n threadId: threadContext.threadId,\n } as never)) as ResponseStreamResult;\n }\n\n return (await agent.streamLegacy(input, {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n output: structuredOutput?.schema,\n providerOptions,\n } as never)) as ResponseStreamResult;\n }\n\n return (await agent.stream(input, commonOptions as never)) as ResponseStreamResult;\n}\n\nasync function resolveUsage(result: ResponseExecutionResult | ResponseStreamResult): Promise<UsageLike> {\n return (await (result.totalUsage ?? result.usage ?? null)) as UsageLike;\n}\n\nasync function resolveProviderMetadata(\n result: ResponseExecutionResult | ResponseStreamResult,\n): Promise<ProviderMetadataLike> {\n return (await (result.providerMetadata ?? undefined)) as ProviderMetadataLike;\n}\n\nasync function resolveFinishReason(\n result: ResponseExecutionResult | ResponseStreamResult,\n): Promise<string | undefined> {\n return (await result.finishReason) ?? undefined;\n}\n\nasync function resolveText(result: ResponseExecutionResult | ResponseStreamResult): Promise<string> {\n return (await result.text) ?? '';\n}\n\n/**\n * Resolves the final response state shared by streaming and non-streaming flows.\n */\nasync function resolveCompletedResponseState(\n result: ResponseExecutionResult | ResponseStreamResult,\n fallbackText: string,\n): Promise<CompletedResponseState> {\n const usage = await resolveUsage(result);\n\n return {\n completedAt: Math.floor(Date.now() / 1000),\n status: toResponseStatus(await resolveFinishReason(result)),\n text: (await resolveText(result)) || fallbackText,\n usage,\n usageDetails: toResponseUsage(usage),\n providerOptions: await resolveProviderMetadata(result),\n };\n}\n\n/**\n * Stores the completed response when the request opted into memory-backed persistence.\n */\nasync function storeCompletedResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n responseId,\n metadata,\n completedState,\n messages,\n outputItems,\n}: {\n agentMemoryStore: MemoryStorage | null;\n didStore: boolean;\n threadContext: ThreadExecutionContext | null;\n responseId: string;\n metadata: Omit<ResponseTurnRecordMetadata, 'completedAt' | 'status' | 'usage' | 'providerOptions' | 'messageIds'>;\n completedState: CompletedResponseState;\n messages: MastraDBMessage[];\n outputItems: ResponseObject['output'];\n}): Promise<void> {\n if (!didStore || !threadContext) {\n return;\n }\n\n await persistResponseTurnRecord({\n memoryStore: agentMemoryStore,\n responseId,\n metadata: {\n ...metadata,\n completedAt: completedState.completedAt,\n status: completedState.status,\n usage: completedState.usageDetails,\n providerOptions: completedState.providerOptions,\n messageIds: [],\n outputItems,\n },\n threadContext,\n messages,\n });\n}\n\n/**\n * Resolves the final response object and persists the stored response turn when needed.\n */\nasync function finalizeResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n result,\n responseId,\n createdAt,\n model,\n instructions,\n previousResponseId,\n conversationId,\n configuredTools,\n responseMetadata,\n fallbackText,\n fallbackOutputItems,\n}: {\n agentMemoryStore: MemoryStorage | null;\n didStore: boolean;\n threadContext: ThreadExecutionContext | null;\n result: ResponseExecutionResult | ResponseStreamResult;\n responseId: string;\n createdAt: number;\n model: string;\n instructions: string | undefined;\n previousResponseId?: string;\n conversationId?: string;\n configuredTools: ReturnType<typeof mapMastraToolsToResponseTools>;\n responseMetadata: Omit<\n ResponseTurnRecordMetadata,\n 'completedAt' | 'status' | 'usage' | 'providerOptions' | 'messageIds'\n >;\n fallbackText: string;\n fallbackOutputItems?: (completedState: CompletedResponseState) => ResponseObject['output'];\n}): Promise<FinalizedResponse> {\n const completedState = await resolveCompletedResponseState(result, fallbackText);\n const fallbackItems = fallbackOutputItems?.(completedState);\n const responseMessages = await resolveResponseTurnMessagesForStorage({\n result,\n responseId,\n text: completedState.text,\n threadContext,\n fallbackOutputItems: threadContext ? fallbackItems : undefined,\n });\n const response = buildCompletedResponse({\n responseId,\n outputMessageId: responseId,\n model,\n createdAt,\n completedAt: completedState.completedAt,\n status: completedState.status,\n text: completedState.text,\n usage: completedState.usage,\n instructions,\n textConfig: responseMetadata.text,\n previousResponseId,\n conversationId,\n providerOptions: completedState.providerOptions,\n tools: configuredTools,\n messages: responseMessages,\n fallbackOutputItems: fallbackItems,\n store: didStore,\n });\n\n await storeCompletedResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n responseId,\n metadata: responseMetadata,\n completedState,\n messages: responseMessages,\n outputItems: response.output,\n });\n\n return { completedState, response, responseMessages };\n}\n\n/**\n * Resolves all request-scoped Mastra primitives needed to execute a Responses create\n * call: the owning agent, the memory thread context, the normalized execution input,\n * and the response-turn metadata that may be persisted later.\n */\nasync function prepareCreateResponseRequest({\n body,\n mastra,\n requestContext,\n}: {\n body: CreateResponseBody;\n mastra: Mastra | undefined;\n requestContext: RequestContext;\n}): Promise<PreparedCreateResponseRequest> {\n const executionInput = mapResponseInputToExecutionMessages(body.input) as AgentExecutionInput;\n let previousResponseTurnRecord: ResponseTurnRecord | null = null;\n let resolvedAgent: Agent<any, any, any, any> | null = null;\n\n if (body.previous_response_id) {\n if (body.agent_id) {\n resolvedAgent = await resolveResponseAgent({ mastra, agentId: body.agent_id });\n previousResponseTurnRecord = await findResponseTurnRecord({\n agent: resolvedAgent,\n responseId: body.previous_response_id,\n requestContext,\n });\n\n if (!previousResponseTurnRecord) {\n const owningResponseTurnRecord = await findResponseTurnRecordAcrossAgents({\n mastra,\n responseId: body.previous_response_id,\n requestContext,\n });\n\n if (owningResponseTurnRecord) {\n if (owningResponseTurnRecord.metadata.agentId === body.agent_id) {\n previousResponseTurnRecord = owningResponseTurnRecord;\n } else {\n throw new HTTPException(400, {\n message: `Stored response ${body.previous_response_id} belongs to agent ${owningResponseTurnRecord.metadata.agentId}, not ${body.agent_id}`,\n });\n }\n }\n\n if (!previousResponseTurnRecord) {\n throw new HTTPException(404, { message: `Stored response ${body.previous_response_id} was not found` });\n }\n }\n } else {\n if (!mastra) {\n throw new HTTPException(500, { message: 'Mastra instance is required for agent-backed responses' });\n }\n\n previousResponseTurnRecord = await findResponseTurnRecordAcrossAgents({\n mastra,\n responseId: body.previous_response_id,\n requestContext,\n });\n\n if (!previousResponseTurnRecord) {\n throw new HTTPException(404, { message: `Stored response ${body.previous_response_id} was not found` });\n }\n }\n }\n\n const agent =\n resolvedAgent ??\n (await resolveResponseAgent({\n mastra,\n agentId: body.agent_id ?? previousResponseTurnRecord?.metadata.agentId,\n }));\n const resolvedModel = await agent.getModel({\n requestContext,\n modelConfig: body.model,\n });\n const responseModel =\n body.model ??\n (() => {\n if (resolvedModel.provider && resolvedModel.modelId) {\n const publicProviderId = resolvedModel.provider.includes('.')\n ? resolvedModel.provider.split('.')[0]!\n : resolvedModel.provider;\n return `${publicProviderId}/${resolvedModel.modelId}`;\n }\n\n if (resolvedModel.modelId) {\n return resolvedModel.modelId;\n }\n\n throw new HTTPException(500, {\n message: 'Responses route could not determine the effective model for this request',\n });\n })();\n const shouldStore = body.store ?? false;\n const needsMemoryStore = shouldStore || Boolean(body.conversation_id) || Boolean(body.previous_response_id);\n const agentMemoryStore = needsMemoryStore\n ? await resolveAgentMemoryStore({\n agent,\n requestContext,\n errorMessage: body.previous_response_id\n ? 'previous_response_id requires the target agent to have memory storage configured'\n : shouldStore\n ? 'Stored responses require the target agent to have memory storage configured'\n : 'conversation_id requires the target agent to have memory storage configured',\n })\n : null;\n const configuredTools = mapMastraToolsToResponseTools(\n (await Promise.resolve(agent.listTools({ requestContext }))) as Record<string, unknown>,\n );\n\n const responseId = createMessageId();\n const createdAt = Math.floor(Date.now() / 1000);\n const threadContext = await resolveThreadExecutionContext({\n agent,\n store: shouldStore,\n conversationId: body.conversation_id,\n previousResponseTurnRecord,\n requestContext,\n });\n\n if (shouldStore && !threadContext) {\n throw new HTTPException(400, {\n message: 'Stored responses require the target agent to have memory configured',\n });\n }\n\n const didStore = shouldStore && Boolean(threadContext);\n\n return {\n agent,\n agentMemoryStore,\n configuredTools,\n createdAt,\n didStore,\n executionInput,\n previousResponseTurnRecord,\n resolvedModel,\n responseId,\n responseModel,\n responseMetadata: {\n agentId: agent.id,\n model: responseModel,\n createdAt,\n instructions: body.instructions,\n text: body.text,\n previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,\n tools: configuredTools,\n store: didStore,\n },\n threadContext,\n };\n}\n\n/**\n * Bridges a Mastra agent stream into OpenAI-style Responses SSE events and completes\n * the stored response-turn record when the stream finishes.\n */\nfunction createResponseEventStream({\n agentMemoryStore,\n body,\n configuredTools,\n createdAt,\n didStore,\n previousResponseTurnRecord,\n responseId,\n responseModel,\n responseMetadata,\n streamResult,\n threadContext,\n}: {\n agentMemoryStore: MemoryStorage | null;\n body: CreateResponseBody;\n configuredTools: ReturnType<typeof mapMastraToolsToResponseTools>;\n createdAt: number;\n didStore: boolean;\n previousResponseTurnRecord: ResponseTurnRecord | null;\n responseId: string;\n responseModel: string;\n responseMetadata: Omit<\n ResponseTurnRecordMetadata,\n 'completedAt' | 'status' | 'usage' | 'providerOptions' | 'messageIds'\n >;\n streamResult: ResponseStreamResult;\n threadContext: ThreadExecutionContext | null;\n}) {\n const createdResponse = buildInProgressResponse({\n responseId,\n model: responseModel,\n createdAt,\n instructions: body.instructions,\n textConfig: body.text,\n previousResponseId: body.previous_response_id,\n conversationId: threadContext?.threadId ?? body.conversation_id,\n tools: configuredTools,\n store: didStore,\n });\n\n return new ReadableStream<Uint8Array>({\n async start(controller) {\n let sequenceNumber = 1;\n const enqueueEvent = (eventName: string, payload: Record<string, unknown>) => {\n controller.enqueue(\n formatSseEvent(eventName, {\n ...payload,\n sequence_number: sequenceNumber++,\n }),\n );\n };\n\n enqueueEvent('response.created', {\n type: 'response.created',\n response: createdResponse,\n });\n enqueueEvent('response.in_progress', {\n type: 'response.in_progress',\n response: createdResponse,\n });\n\n const streamEvents = createResponseStreamEventTranslator(responseId);\n const fullStream = await streamResult.fullStream;\n const reader = fullStream.getReader();\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n\n for (const event of streamEvents.consume(value)) {\n enqueueEvent(event.event, event.payload);\n }\n }\n\n for (const event of streamEvents.flushPendingToolResults()) {\n enqueueEvent(event.event, event.payload);\n }\n\n const { completedState, response } = await finalizeResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n result: streamResult,\n responseId,\n createdAt,\n model: responseModel,\n instructions: body.instructions,\n previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,\n conversationId: threadContext?.threadId ?? body.conversation_id,\n configuredTools,\n responseMetadata,\n fallbackText: streamEvents.text,\n fallbackOutputItems: completedState =>\n streamEvents.getOutputItems({\n text: completedState.text,\n status: completedState.status,\n }),\n });\n\n const completedItem = getStreamedMessageOutputItem(response, responseId);\n if (completedItem || completedState.text) {\n for (const event of streamEvents.completeText(\n completedState.text,\n completedItem ?? {\n id: responseId,\n type: 'message' as const,\n role: 'assistant' as const,\n status: 'completed' as const,\n content: [createOutputTextPart(completedState.text)],\n },\n )) {\n enqueueEvent(event.event, event.payload);\n }\n }\n enqueueEvent('response.completed', {\n type: 'response.completed',\n response,\n });\n controller.close();\n } catch (error) {\n controller.error(error);\n } finally {\n reader.releaseLock();\n }\n },\n });\n}\n\nexport const CREATE_RESPONSE_ROUTE = createRoute({\n method: 'POST',\n path: '/v1/responses',\n responseType: 'datastream-response',\n bodySchema: createResponseBodySchema,\n responseSchema: responseObjectSchema,\n summary: 'Create a response',\n description: 'Creates a response through a Mastra-hosted Responses API-compatible route',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_EXECUTE,\n handler: async ({ mastra, requestContext, abortSignal, ...body }) => {\n try {\n const {\n agent,\n agentMemoryStore,\n configuredTools,\n createdAt,\n didStore,\n executionInput,\n previousResponseTurnRecord,\n resolvedModel,\n responseId,\n responseModel,\n responseMetadata,\n threadContext,\n } = await prepareCreateResponseRequest({ body, mastra, requestContext });\n\n if (!body.stream) {\n const result = await executeGenerate({\n agent,\n resolvedModel,\n modelOverride: body.model,\n instructions: body.instructions,\n text: body.text,\n providerOptions: body.providerOptions,\n input: executionInput,\n requestContext,\n abortSignal,\n threadContext,\n });\n\n const { response } = await finalizeResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n result,\n responseId,\n createdAt,\n model: responseModel,\n instructions: body.instructions,\n previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,\n conversationId: threadContext?.threadId ?? body.conversation_id,\n configuredTools,\n responseMetadata,\n fallbackText: '',\n });\n\n return jsonResponse(response);\n }\n\n const streamResult = await executeStream({\n agent,\n resolvedModel,\n modelOverride: body.model,\n instructions: body.instructions,\n text: body.text,\n providerOptions: body.providerOptions,\n input: executionInput,\n requestContext,\n abortSignal,\n threadContext,\n });\n\n const stream = createResponseEventStream({\n agentMemoryStore,\n body,\n configuredTools,\n createdAt,\n didStore,\n previousResponseTurnRecord,\n responseId,\n responseModel,\n responseMetadata,\n streamResult,\n threadContext,\n });\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream; charset=utf-8',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n 'X-Accel-Buffering': 'no',\n },\n });\n } catch (error) {\n return handleError(error, 'Error creating response');\n }\n },\n});\n\nexport const GET_RESPONSE_ROUTE = createRoute({\n method: 'GET',\n path: '/v1/responses/:responseId',\n responseType: 'json',\n pathParamSchema: responseIdPathParams,\n responseSchema: responseObjectSchema,\n summary: 'Retrieve a stored response',\n description: 'Returns a previously stored response object',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_READ,\n handler: async ({ mastra, requestContext, responseId }) => {\n try {\n const responseTurnRecord = await findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });\n if (!responseTurnRecord) {\n throw new HTTPException(404, { message: `Stored response ${responseId} was not found` });\n }\n\n return mapResponseTurnRecordToResponse(responseTurnRecord);\n } catch (error) {\n return handleError(error, 'Error retrieving response');\n }\n },\n});\n\nexport const DELETE_RESPONSE_ROUTE = createRoute({\n method: 'DELETE',\n path: '/v1/responses/:responseId',\n responseType: 'json',\n pathParamSchema: responseIdPathParams,\n responseSchema: deleteResponseSchema,\n summary: 'Delete a stored response',\n description: 'Deletes a stored response so it can no longer be retrieved or chained',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_DELETE,\n handler: async ({ mastra, requestContext, responseId }) => {\n try {\n const responseTurnRecord = await findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });\n if (!responseTurnRecord) {\n throw new HTTPException(404, { message: `Stored response ${responseId} was not found` });\n }\n\n await deleteResponseTurnRecord({ responseTurnRecord });\n\n const response: DeleteResponse = {\n id: responseId,\n object: 'response',\n deleted: true,\n };\n\n return response;\n } catch (error) {\n return handleError(error, 'Error deleting response');\n }\n },\n});\n"]}
import { modelConfigSchema } from './chunk-HCCTSODR.js';
import { createPagePaginationSchema, paginationInfoSchema } from './chunk-6VTOGOS2.js';
import { z } from 'zod/v4';
var storedScorerIdPathParams = z.object({
storedScorerId: z.string().describe("Unique identifier for the stored scorer definition")
});
var storageOrderBySchema = z.object({
field: z.enum(["createdAt", "updatedAt"]).optional(),
direction: z.enum(["ASC", "DESC"]).optional()
});
var listStoredScorersQuerySchema = createPagePaginationSchema(100).extend({
orderBy: storageOrderBySchema.optional(),
status: z.enum(["draft", "published", "archived"]).optional().default("published").describe("Filter scorers by status (defaults to published)"),
authorId: z.string().optional().describe("Filter scorers by author identifier"),
metadata: z.record(z.string(), z.unknown()).optional().describe("Filter scorers by metadata key-value pairs")
});
var samplingConfigSchema = z.union([
z.object({ type: z.literal("none") }),
z.object({ type: z.literal("ratio"), rate: z.number().min(0).max(1) })
]);
var scorerTypeEnum = z.enum([
"llm-judge",
"answer-relevancy",
"answer-similarity",
"bias",
"context-precision",
"context-relevance",
"faithfulness",
"hallucination",
"noise-sensitivity",
"prompt-alignment",
"tool-call-accuracy",
"toxicity"
]).describe("Scorer type: llm-judge for custom, or a preset type name");
var snapshotConfigSchema = z.object({
name: z.string().describe("Name of the scorer"),
description: z.string().optional().describe("Description of the scorer"),
type: scorerTypeEnum,
model: modelConfigSchema.optional().describe("Model configuration for LLM judge"),
instructions: z.string().optional().describe("System instructions for the judge LLM (used when type is llm-judge)"),
scoreRange: z.object({
min: z.number().optional().describe("Minimum score value (default: 0)"),
max: z.number().optional().describe("Maximum score value (default: 1)")
}).optional().describe("Score range configuration (used when type is llm-judge)"),
presetConfig: z.record(z.string(), z.unknown()).optional().describe("Serializable config options for preset scorers"),
defaultSampling: samplingConfigSchema.optional().describe("Default sampling configuration")
});
var createStoredScorerBodySchema = z.object({
id: z.string().optional().describe("Unique identifier. If not provided, derived from name."),
authorId: z.string().optional().describe("Author identifier for multi-tenant filtering"),
metadata: z.record(z.string(), z.unknown()).optional().describe("Additional metadata for the scorer")
}).merge(snapshotConfigSchema);
var updateStoredScorerBodySchema = z.object({
authorId: z.string().optional(),
metadata: z.record(z.string(), z.unknown()).optional()
}).partial().merge(snapshotConfigSchema.partial());
var storedScorerSchema = z.object({
id: z.string(),
status: z.string().describe("Scorer status: draft, published, or archived"),
activeVersionId: z.string().optional(),
authorId: z.string().optional(),
metadata: z.record(z.string(), z.unknown()).optional(),
createdAt: z.coerce.date(),
updatedAt: z.coerce.date(),
name: z.string().describe("Name of the scorer"),
description: z.string().optional().describe("Description of the scorer"),
type: scorerTypeEnum,
model: modelConfigSchema.optional(),
instructions: z.string().optional().describe("System instructions for the judge LLM"),
scoreRange: z.object({
min: z.number().optional(),
max: z.number().optional()
}).optional(),
presetConfig: z.record(z.string(), z.unknown()).optional(),
defaultSampling: samplingConfigSchema.optional()
});
var listStoredScorersResponseSchema = paginationInfoSchema.extend({
scorerDefinitions: z.array(storedScorerSchema)
});
var getStoredScorerResponseSchema = storedScorerSchema;
var createStoredScorerResponseSchema = storedScorerSchema;
var updateStoredScorerResponseSchema = z.union([
z.object({
id: z.string(),
status: z.string(),
activeVersionId: z.string().optional(),
authorId: z.string().optional(),
metadata: z.record(z.string(), z.unknown()).optional(),
createdAt: z.coerce.date(),
updatedAt: z.coerce.date()
}),
storedScorerSchema
]);
var deleteStoredScorerResponseSchema = z.object({
success: z.boolean(),
message: z.string()
});
export { createStoredScorerBodySchema, createStoredScorerResponseSchema, deleteStoredScorerResponseSchema, getStoredScorerResponseSchema, listStoredScorersQuerySchema, listStoredScorersResponseSchema, storedScorerIdPathParams, storedScorerSchema, updateStoredScorerBodySchema, updateStoredScorerResponseSchema };
//# sourceMappingURL=chunk-IYRXXIKZ.js.map
//# sourceMappingURL=chunk-IYRXXIKZ.js.map
{"version":3,"sources":["../src/server/schemas/stored-scorers.ts"],"names":[],"mappings":"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","file":"chunk-IYRXXIKZ.js","sourcesContent":["import { z } from 'zod/v4';\n\nimport { paginationInfoSchema, createPagePaginationSchema, statusQuerySchema } from './common';\nimport { modelConfigSchema } from './stored-agents';\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\nexport const storedScorerIdPathParams = z.object({\n storedScorerId: z.string().describe('Unique identifier for the stored scorer definition'),\n});\n\n// ============================================================================\n// Query Parameter Schemas\n// ============================================================================\n\nconst storageOrderBySchema = z.object({\n field: z.enum(['createdAt', 'updatedAt']).optional(),\n direction: z.enum(['ASC', 'DESC']).optional(),\n});\n\nexport { statusQuerySchema };\n\nexport const listStoredScorersQuerySchema = createPagePaginationSchema(100).extend({\n orderBy: storageOrderBySchema.optional(),\n status: z\n .enum(['draft', 'published', 'archived'])\n .optional()\n .default('published')\n .describe('Filter scorers by status (defaults to published)'),\n authorId: z.string().optional().describe('Filter scorers by author identifier'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Filter scorers by metadata key-value pairs'),\n});\n\n// ============================================================================\n// Body Parameter Schemas\n// ============================================================================\n\nconst samplingConfigSchema = z.union([\n z.object({ type: z.literal('none') }),\n z.object({ type: z.literal('ratio'), rate: z.number().min(0).max(1) }),\n]);\n\nconst scorerTypeEnum = z\n .enum([\n 'llm-judge',\n 'answer-relevancy',\n 'answer-similarity',\n 'bias',\n 'context-precision',\n 'context-relevance',\n 'faithfulness',\n 'hallucination',\n 'noise-sensitivity',\n 'prompt-alignment',\n 'tool-call-accuracy',\n 'toxicity',\n ])\n .describe('Scorer type: llm-judge for custom, or a preset type name');\n\nconst snapshotConfigSchema = z.object({\n name: z.string().describe('Name of the scorer'),\n description: z.string().optional().describe('Description of the scorer'),\n type: scorerTypeEnum,\n model: modelConfigSchema.optional().describe('Model configuration for LLM judge'),\n instructions: z.string().optional().describe('System instructions for the judge LLM (used when type is llm-judge)'),\n scoreRange: z\n .object({\n min: z.number().optional().describe('Minimum score value (default: 0)'),\n max: z.number().optional().describe('Maximum score value (default: 1)'),\n })\n .optional()\n .describe('Score range configuration (used when type is llm-judge)'),\n presetConfig: z.record(z.string(), z.unknown()).optional().describe('Serializable config options for preset scorers'),\n defaultSampling: samplingConfigSchema.optional().describe('Default sampling configuration'),\n});\n\nexport const createStoredScorerBodySchema = z\n .object({\n id: z.string().optional().describe('Unique identifier. If not provided, derived from name.'),\n authorId: z.string().optional().describe('Author identifier for multi-tenant filtering'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata for the scorer'),\n })\n .merge(snapshotConfigSchema);\n\nexport const updateStoredScorerBodySchema = z\n .object({\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .partial()\n .merge(snapshotConfigSchema.partial());\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\nexport const storedScorerSchema = z.object({\n id: z.string(),\n status: z.string().describe('Scorer status: draft, published, or archived'),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n name: z.string().describe('Name of the scorer'),\n description: z.string().optional().describe('Description of the scorer'),\n type: scorerTypeEnum,\n model: modelConfigSchema.optional(),\n instructions: z.string().optional().describe('System instructions for the judge LLM'),\n scoreRange: z\n .object({\n min: z.number().optional(),\n max: z.number().optional(),\n })\n .optional(),\n presetConfig: z.record(z.string(), z.unknown()).optional(),\n defaultSampling: samplingConfigSchema.optional(),\n});\n\nexport const listStoredScorersResponseSchema = paginationInfoSchema.extend({\n scorerDefinitions: z.array(storedScorerSchema),\n});\n\nexport const getStoredScorerResponseSchema = storedScorerSchema;\nexport const createStoredScorerResponseSchema = storedScorerSchema;\n\nexport const updateStoredScorerResponseSchema = z.union([\n z.object({\n id: z.string(),\n status: z.string(),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n }),\n storedScorerSchema,\n]);\n\nexport const deleteStoredScorerResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n});\n"]}
import { createListVersionsResponseSchema, createCompareVersionsResponseSchema, activateVersionResponseSchema, compareVersionsQuerySchema, createVersionBodySchema, deleteVersionResponseSchema, listVersionsQuerySchema } from './chunk-FXXHWBF2.js';
import { modelConfigSchema } from './chunk-HCCTSODR.js';
import { z } from 'zod/v4';
var listScorerVersionsQuerySchema = listVersionsQuerySchema;
var compareScorerVersionsQuerySchema = compareVersionsQuerySchema;
var createScorerVersionBodySchema = createVersionBodySchema;
var scorerVersionPathParams = z.object({
scorerId: z.string().describe("Unique identifier for the stored scorer definition")
});
var scorerVersionIdPathParams = z.object({
scorerId: z.string().describe("Unique identifier for the stored scorer definition"),
versionId: z.string().describe("Unique identifier for the version (UUID)")
});
var samplingConfigSchema = z.union([
z.object({ type: z.literal("none") }),
z.object({ type: z.literal("ratio"), rate: z.number().min(0).max(1) })
]);
var scorerTypeEnum = z.enum([
"llm-judge",
"answer-relevancy",
"answer-similarity",
"bias",
"context-precision",
"context-relevance",
"faithfulness",
"hallucination",
"noise-sensitivity",
"prompt-alignment",
"tool-call-accuracy",
"toxicity"
]);
var scorerVersionSchema = z.object({
id: z.string().describe("Unique identifier for the version (UUID)"),
scorerDefinitionId: z.string().describe("ID of the scorer this version belongs to"),
versionNumber: z.number().describe("Sequential version number (1, 2, 3, ...)"),
// Snapshot config fields
name: z.string().describe("Name of the scorer"),
description: z.string().optional().describe("Description of the scorer"),
type: scorerTypeEnum,
model: modelConfigSchema.optional(),
instructions: z.string().optional(),
scoreRange: z.object({
min: z.number().optional(),
max: z.number().optional()
}).optional(),
presetConfig: z.record(z.string(), z.unknown()).optional(),
defaultSampling: samplingConfigSchema.optional(),
// Version metadata
changedFields: z.array(z.string()).optional().describe("Array of field names that changed from the previous version"),
changeMessage: z.string().optional().describe("Optional message describing the changes"),
createdAt: z.coerce.date().describe("When this version was created")
});
var listScorerVersionsResponseSchema = createListVersionsResponseSchema(scorerVersionSchema);
var getScorerVersionResponseSchema = scorerVersionSchema;
var createScorerVersionResponseSchema = scorerVersionSchema.partial().merge(
z.object({
id: z.string(),
scorerDefinitionId: z.string(),
versionNumber: z.number(),
createdAt: z.coerce.date()
})
);
var activateScorerVersionResponseSchema = activateVersionResponseSchema;
var restoreScorerVersionResponseSchema = scorerVersionSchema;
var deleteScorerVersionResponseSchema = deleteVersionResponseSchema;
var compareScorerVersionsResponseSchema = createCompareVersionsResponseSchema(scorerVersionSchema);
export { activateScorerVersionResponseSchema, compareScorerVersionsQuerySchema, compareScorerVersionsResponseSchema, createScorerVersionBodySchema, createScorerVersionResponseSchema, deleteScorerVersionResponseSchema, getScorerVersionResponseSchema, listScorerVersionsQuerySchema, listScorerVersionsResponseSchema, restoreScorerVersionResponseSchema, scorerVersionIdPathParams, scorerVersionPathParams, scorerVersionSchema };
//# sourceMappingURL=chunk-JGNE4R5G.js.map
//# sourceMappingURL=chunk-JGNE4R5G.js.map
{"version":3,"sources":["../src/server/schemas/scorer-versions.ts"],"names":[],"mappings":"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","file":"chunk-JGNE4R5G.js","sourcesContent":["import { z } from 'zod/v4';\nimport { modelConfigSchema } from './stored-agents';\nimport {\n listVersionsQuerySchema,\n compareVersionsQuerySchema,\n createVersionBodySchema,\n activateVersionResponseSchema,\n deleteVersionResponseSchema,\n versionDiffEntrySchema,\n createListVersionsResponseSchema,\n createCompareVersionsResponseSchema,\n} from './version-common';\n\n// Re-export shared schemas under domain-specific names\nexport const listScorerVersionsQuerySchema = listVersionsQuerySchema;\nexport const compareScorerVersionsQuerySchema = compareVersionsQuerySchema;\nexport const createScorerVersionBodySchema = createVersionBodySchema;\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\nexport const scorerVersionPathParams = z.object({\n scorerId: z.string().describe('Unique identifier for the stored scorer definition'),\n});\n\nexport const scorerVersionIdPathParams = z.object({\n scorerId: z.string().describe('Unique identifier for the stored scorer definition'),\n versionId: z.string().describe('Unique identifier for the version (UUID)'),\n});\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\nconst samplingConfigSchema = z.union([\n z.object({ type: z.literal('none') }),\n z.object({ type: z.literal('ratio'), rate: z.number().min(0).max(1) }),\n]);\n\nconst scorerTypeEnum = z.enum([\n 'llm-judge',\n 'answer-relevancy',\n 'answer-similarity',\n 'bias',\n 'context-precision',\n 'context-relevance',\n 'faithfulness',\n 'hallucination',\n 'noise-sensitivity',\n 'prompt-alignment',\n 'tool-call-accuracy',\n 'toxicity',\n]);\n\nexport const scorerVersionSchema = z.object({\n id: z.string().describe('Unique identifier for the version (UUID)'),\n scorerDefinitionId: z.string().describe('ID of the scorer this version belongs to'),\n versionNumber: z.number().describe('Sequential version number (1, 2, 3, ...)'),\n // Snapshot config fields\n name: z.string().describe('Name of the scorer'),\n description: z.string().optional().describe('Description of the scorer'),\n type: scorerTypeEnum,\n model: modelConfigSchema.optional(),\n instructions: z.string().optional(),\n scoreRange: z\n .object({\n min: z.number().optional(),\n max: z.number().optional(),\n })\n .optional(),\n presetConfig: z.record(z.string(), z.unknown()).optional(),\n defaultSampling: samplingConfigSchema.optional(),\n // Version metadata\n changedFields: z.array(z.string()).optional().describe('Array of field names that changed from the previous version'),\n changeMessage: z.string().optional().describe('Optional message describing the changes'),\n createdAt: z.coerce.date().describe('When this version was created'),\n});\n\nexport const listScorerVersionsResponseSchema = createListVersionsResponseSchema(scorerVersionSchema);\n\nexport const getScorerVersionResponseSchema = scorerVersionSchema;\n\nexport const createScorerVersionResponseSchema = scorerVersionSchema.partial().merge(\n z.object({\n id: z.string(),\n scorerDefinitionId: z.string(),\n versionNumber: z.number(),\n createdAt: z.coerce.date(),\n }),\n);\n\nexport const activateScorerVersionResponseSchema = activateVersionResponseSchema;\n\nexport const restoreScorerVersionResponseSchema = scorerVersionSchema;\n\nexport const deleteScorerVersionResponseSchema = deleteVersionResponseSchema;\n\nexport const compareScorerVersionsResponseSchema = createCompareVersionsResponseSchema(scorerVersionSchema);\n\nexport { versionDiffEntrySchema };\n"]}
'use strict';
var chunkZCX2J552_cjs = require('./chunk-ZCX2J552.cjs');
var chunk5UUIMMDB_cjs = require('./chunk-5UUIMMDB.cjs');
var chunkKI6RMI7A_cjs = require('./chunk-KI6RMI7A.cjs');
var chunk2XZ2466F_cjs = require('./chunk-2XZ2466F.cjs');
var chunk5SY2ZQ3R_cjs = require('./chunk-5SY2ZQ3R.cjs');
var chunkWMS7BOP7_cjs = require('./chunk-WMS7BOP7.cjs');
var chunkI5JCLVTK_cjs = require('./chunk-I5JCLVTK.cjs');
var chunk3JVOIOO6_cjs = require('./chunk-3JVOIOO6.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
// src/server/handlers/stored-agents.ts
async function resolveBrowserField(browser, mastra) {
if (browser === true) {
const editor = mastra.getEditor?.();
const builder = await editor?.resolveBuilder?.();
const defaultBrowser = builder?.getConfiguration?.()?.agent?.browser;
if (!defaultBrowser) {
console.warn(
"[mastra:server] Browser enabled (browser: true) but no default browser config found in builder configuration. The agent will be created/updated without browser access. Set `editor.builder.configuration.agent.browser` to fix this."
);
}
return defaultBrowser ?? void 0;
}
if (browser === false) {
return null;
}
return browser;
}
var AGENT_SNAPSHOT_CONFIG_FIELDS = [
"name",
"description",
"instructions",
"model",
"tools",
"defaultOptions",
"workflows",
"agents",
"integrationTools",
"toolProviders",
"inputProcessors",
"outputProcessors",
"memory",
"scorers",
"requestContextSchema",
"mcpClients",
"skills",
"workspace",
"browser"
];
var CODE_AGENT_OVERRIDE_FIELDS = [
"instructions",
"tools",
"integrationTools",
"mcpClients",
"requestContextSchema"
];
function getCodeAgentOwnership(editorConfig) {
if (editorConfig === false) {
return { ownsInstructions: false, ownsTools: false, ownsToolDescriptionsOnly: false };
}
if (editorConfig === void 0 || editorConfig === null) {
return { ownsInstructions: true, ownsTools: true, ownsToolDescriptionsOnly: false };
}
if (typeof editorConfig !== "object") {
return { ownsInstructions: false, ownsTools: false, ownsToolDescriptionsOnly: false };
}
const cfg = editorConfig;
const ownsInstructions = cfg.instructions === true;
const toolsCfg = cfg.tools;
const ownsTools = toolsCfg === true;
const ownsToolDescriptionsOnly = typeof toolsCfg === "object" && toolsCfg !== null && toolsCfg.description === true;
return { ownsInstructions, ownsTools, ownsToolDescriptionsOnly };
}
function hasNonEmptyInstructions(value) {
if (typeof value === "string") {
return value.trim().length > 0;
}
if (!Array.isArray(value)) {
return false;
}
return value.some((block) => {
if (!block || typeof block !== "object") {
return false;
}
const typedBlock = block;
if (typedBlock.type === "prompt_block_ref") {
return typeof typedBlock.id === "string" && typedBlock.id.length > 0;
}
return typeof typedBlock.content === "string" && typedBlock.content.trim().length > 0;
});
}
function assertOwnedInstructionsNotEmpty(instructions) {
if (!hasNonEmptyInstructions(instructions)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Instructions are required" });
}
}
function sortForStableJson(value) {
if (Array.isArray(value)) {
return value.map(sortForStableJson);
}
if (value && typeof value === "object" && !(value instanceof Date)) {
return Object.fromEntries(
Object.entries(value).filter(([, entry]) => entry !== void 0).sort(([left], [right]) => left.localeCompare(right)).map(([key, entry]) => [key, sortForStableJson(entry)])
);
}
return value;
}
function buildExportConfig(input, agent) {
const editorConfig = agent?.__getEditorConfig?.();
const isCodeAgent = agent?.source === "code";
const allowedFields = isCodeAgent ? CODE_AGENT_OVERRIDE_FIELDS : AGENT_SNAPSHOT_CONFIG_FIELDS;
const ownership = isCodeAgent ? getCodeAgentOwnership(editorConfig) : null;
const config = {};
for (const field of allowedFields) {
if (input[field] === void 0) continue;
if (ownership) {
if (field === "instructions" && !ownership.ownsInstructions) continue;
if ((field === "tools" || field === "integrationTools" || field === "mcpClients") && !ownership.ownsTools && !ownership.ownsToolDescriptionsOnly) {
continue;
}
}
config[field] = input[field];
}
return sortForStableJson(config);
}
function agentExportFilename(agentId) {
return `agents/${encodeURIComponent(agentId)}.json`;
}
function sourceChangeRequestHeadRef(agentId) {
const safeAgentId = agentId.replace(/[^a-zA-Z0-9._-]+/g, "-").replace(/^-+|-+$/g, "") || "agent";
return `mastra/${safeAgentId}`;
}
function sourceChangeRequestMessage(agentId, userName, changeMessage) {
const normalizedUserName = userName?.replace(/\s+/g, " ").trim();
const normalizedMessage = changeMessage?.replace(/\s+/g, " ").trim();
const message = normalizedMessage || `Update ${agentId} agent override`;
return normalizedUserName ? `${message} by ${normalizedUserName}` : message;
}
var LIST_STORED_AGENTS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/agents",
responseType: "json",
queryParamSchema: chunkI5JCLVTK_cjs.listStoredAgentsQuerySchema,
responseSchema: chunkI5JCLVTK_cjs.listStoredAgentsResponseSchema,
summary: "List stored agents",
description: "Returns a paginated list of all agents stored in the database",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
page,
perPage,
orderBy,
status,
authorId,
visibility,
metadata,
favoritedOnly,
pinFavoritedFor
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const filter = chunkWMS7BOP7_cjs.resolveAuthorFilter({
requestContext,
resource: "stored-agents",
queryAuthorId: authorId,
queryVisibility: visibility === "public" ? "public" : void 0
});
const scope = await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext);
const scopedMetadata = chunkEVOVAWN6_cjs.scopeStoredResourceMetadata(metadata, scope);
const callerId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext);
const favoritesEnabled = await chunkKI6RMI7A_cjs.isBuilderFeatureEnabled(mastra, "favorites");
const honoredStarredOnly = favoritesEnabled && favoritedOnly === true;
const favoriteSubjectId = pinFavoritedFor ?? callerId;
if (honoredStarredOnly) {
const effectivePerPage = perPage ?? 100;
if (!favoriteSubjectId) {
return { agents: [], total: 0, page, perPage: effectivePerPage, hasMore: false };
}
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Favorites storage domain is not available" });
}
const starredIds = await favoritesStore.listFavoritedIds({ userId: favoriteSubjectId, entityType: "agent" });
if (starredIds.length === 0) {
return { agents: [], total: 0, page, perPage: effectivePerPage, hasMore: false };
}
const allMatching = await agentsStore.listResolved({
perPage: false,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata,
entityIds: starredIds
});
const visible = allMatching.agents.filter((record) => chunkWMS7BOP7_cjs.matchesAuthorFilter(record, filter));
const total = visible.length;
const startIdx = effectivePerPage === 0 ? 0 : page * effectivePerPage;
const endIdx = effectivePerPage === 0 ? 0 : startIdx + effectivePerPage;
const sliced = effectivePerPage === 0 ? [] : visible.slice(startIdx, endIdx);
const annotated2 = sliced.map((record) => ({ ...record, isFavorited: true }));
const authors2 = await chunk5SY2ZQ3R_cjs.prepareAuthorEnrichment(
mastra,
requestContext,
annotated2.map((a) => a.authorId)
);
const withAuthors2 = authors2 ? annotated2.map((record) => chunk5SY2ZQ3R_cjs.attachAuthor(record, authors2)) : annotated2;
const hasMore = effectivePerPage > 0 && endIdx < total;
return { agents: withAuthors2, total, page, perPage: effectivePerPage, hasMore };
}
const result = await agentsStore.listResolved({
page,
perPage,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata
});
const visibleAgents = result.agents.filter((record) => chunkWMS7BOP7_cjs.matchesAuthorFilter(record, filter));
const authors = await chunk5SY2ZQ3R_cjs.prepareAuthorEnrichment(
mastra,
requestContext,
visibleAgents.map((a) => a.authorId)
);
if (!favoritesEnabled) {
const stripped = visibleAgents.map(chunk5UUIMMDB_cjs.stripFavoriteFields);
const withAuthors2 = authors ? stripped.map((record) => chunk5SY2ZQ3R_cjs.attachAuthor(record, authors)) : stripped;
return { ...result, agents: withAuthors2 };
}
const enrichment = await chunk5UUIMMDB_cjs.prepareFavoritesEnrichment(
mastra,
requestContext,
"agent",
visibleAgents.map((a) => a.id)
);
const annotated = enrichment ? visibleAgents.map((record) => ({ ...record, isFavorited: enrichment.starredIds.has(record.id) })) : visibleAgents.map(chunk5UUIMMDB_cjs.stripFavoriteFields);
const withAuthors = authors ? annotated.map((record) => chunk5SY2ZQ3R_cjs.attachAuthor(record, authors)) : annotated;
return { ...result, agents: withAuthors };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing stored agents");
}
}
});
async function buildStoredAgentExport({
mastra,
requestContext,
storedAgentId,
body
}) {
const storage = mastra.getStorage();
const agentsStore = storage ? await storage.getStore("agents") : void 0;
const storedAgent = await agentsStore?.getByIdResolved(storedAgentId, { status: "draft" });
if (storedAgent) {
chunkEVOVAWN6_cjs.assertStoredResourceScope(storedAgent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: storedAgent });
}
let codeAgent;
try {
codeAgent = mastra.getAgentById?.(storedAgentId);
} catch {
codeAgent = void 0;
}
if (!storedAgent && !codeAgent) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Agent with id ${storedAgentId} not found` });
}
const config = buildExportConfig(body, codeAgent);
const content = `${JSON.stringify(config, null, 2)}
`;
return {
agentId: storedAgentId,
fileName: agentExportFilename(storedAgentId),
content,
config
};
}
var EXPORT_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/agents/:storedAgentId/export",
responseType: "json",
pathParamSchema: chunkI5JCLVTK_cjs.storedAgentIdPathParams,
bodySchema: chunkI5JCLVTK_cjs.exportStoredAgentBodySchema,
responseSchema: chunkI5JCLVTK_cjs.exportStoredAgentResponseSchema,
summary: "Export stored agent override JSON",
description: "Returns deterministic JSON for an agent configuration or code-agent override without mutating storage",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId, ...body }) => {
try {
return await buildStoredAgentExport({ mastra, requestContext, storedAgentId, body });
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error exporting stored agent");
}
}
});
var OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/agents/:storedAgentId/change-request",
responseType: "json",
pathParamSchema: chunkI5JCLVTK_cjs.storedAgentIdPathParams,
bodySchema: chunkI5JCLVTK_cjs.openStoredAgentChangeRequestBodySchema,
responseSchema: chunkI5JCLVTK_cjs.openStoredAgentChangeRequestResponseSchema,
summary: "Open stored agent source change request",
description: "Opens a source-provider change request for deterministic agent override JSON without mutating storage",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId, ...body }) => {
try {
const provider = mastra.getEditor?.()?.getSourceControlProvider?.();
if (!provider?.openChangeRequest) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Source control provider cannot open change requests" });
}
const openChangeRequest = provider.openChangeRequest.bind(provider);
const { changeMessage, userName, inspectOnly, ...exportBody } = body;
const headRef = sourceChangeRequestHeadRef(storedAgentId);
const title = `Update ${storedAgentId} agent override`;
const result = inspectOnly ? await openChangeRequest({
title,
headRef,
files: []
}) : await (async () => {
const response = await buildStoredAgentExport({ mastra, requestContext, storedAgentId, body: exportBody });
const message = sourceChangeRequestMessage(storedAgentId, userName, changeMessage);
return openChangeRequest({
title,
body: `Updates ${response.fileName} from Mastra Studio.`,
headRef,
files: [
{
path: response.fileName,
content: response.content,
message
}
]
});
})();
const storage = mastra.getStorage();
const agentsStore = storage ? await storage.getStore("agents") : void 0;
await agentsStore?.useProviderRef?.(storedAgentId, result.ref ?? headRef);
mastra.getEditor?.()?.agent?.clearCache?.(storedAgentId);
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error opening stored agent change request");
}
}
});
var GET_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkI5JCLVTK_cjs.storedAgentIdPathParams,
queryParamSchema: chunk3JVOIOO6_cjs.statusQuerySchema,
responseSchema: chunkI5JCLVTK_cjs.getStoredAgentResponseSchema,
summary: "Get stored agent by ID",
description: "Returns a specific agent from storage by its unique identifier. Use ?status=draft to resolve with the latest (draft) version, or ?status=published (default) for the active published version.",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId, status }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getByIdResolved(storedAgentId, { status });
if (!agent) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
const authors = await chunk5SY2ZQ3R_cjs.prepareAuthorEnrichment(mastra, requestContext, [agent.authorId]);
const withFavorite = await chunk5UUIMMDB_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", agent);
return chunk5SY2ZQ3R_cjs.attachAuthor(withFavorite, authors);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting stored agent");
}
}
});
var CREATE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/agents",
responseType: "json",
bodySchema: chunkI5JCLVTK_cjs.createStoredAgentBodySchema,
responseSchema: chunkI5JCLVTK_cjs.createStoredAgentResponseSchema,
summary: "Create stored agent",
description: "Creates a new agent in storage with the provided configuration",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
id: providedId,
metadata,
visibility: bodyVisibility,
name,
description,
instructions,
model,
tools,
defaultOptions,
workflows,
agents,
integrationTools,
toolProviders,
mcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser,
requestContextSchema
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const id = providedId || chunkEVOVAWN6_cjs.toSlug(name);
if (!id) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "Could not derive agent ID from name. Please provide an explicit id."
});
}
const existing = await agentsStore.getById(id);
if (existing) {
throw new chunk64ITUOXI_cjs.HTTPException(409, { message: `Agent with id ${id} already exists` });
}
const authorId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext) ?? void 0;
const visibility = authorId ? bodyVisibility ?? "private" : "public";
chunkZCX2J552_cjs.validateMetadataAvatarUrl(metadata);
const resolvedBrowser = await resolveBrowserField(browser, mastra);
let createInstructions = instructions;
let createTools = tools;
let createIntegrationTools = integrationTools;
let createMcpClients = mcpClients;
let codeAgentForCreate;
try {
codeAgentForCreate = mastra.getAgentById?.(id);
} catch {
codeAgentForCreate = void 0;
}
if (codeAgentForCreate?.source === "code") {
const ownership = getCodeAgentOwnership(codeAgentForCreate.__getEditorConfig?.());
if (ownership.ownsInstructions) {
assertOwnedInstructionsNotEmpty(createInstructions);
} else {
createInstructions = void 0;
}
if (!ownership.ownsTools && !ownership.ownsToolDescriptionsOnly) {
createTools = void 0;
createIntegrationTools = void 0;
createMcpClients = void 0;
}
}
const input = {
id,
authorId,
visibility,
metadata: chunkEVOVAWN6_cjs.scopeStoredResourceMetadata(metadata, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext)),
name,
description,
instructions: createInstructions,
model,
tools: createTools,
defaultOptions,
workflows,
agents,
integrationTools: createIntegrationTools,
toolProviders,
mcpClients: createMcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser: resolvedBrowser,
requestContextSchema
};
const editor = mastra.getEditor?.();
if (editor) {
await editor.agent.create(input);
} else {
await agentsStore.create({ agent: input });
}
const { versions } = await agentsStore.listVersions({ agentId: id, perPage: 1 });
const initialVersion = versions[0];
if (initialVersion) {
await agentsStore.update({
id,
activeVersionId: initialVersion.id,
status: "published"
});
editor?.agent.clearCache(id);
}
const resolved = await agentsStore.getByIdResolved(id, { status: "published" });
if (!resolved) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to resolve created agent" });
}
return chunk5UUIMMDB_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating stored agent");
}
}
});
var UPDATE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "PATCH",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkI5JCLVTK_cjs.storedAgentIdPathParams,
bodySchema: chunkI5JCLVTK_cjs.updateStoredAgentBodySchema,
responseSchema: chunkI5JCLVTK_cjs.updateStoredAgentResponseSchema,
summary: "Update stored agent",
description: "Updates an existing agent in storage with the provided fields",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
storedAgentId,
// Metadata-level fields
authorId,
metadata,
visibility,
// Config fields (snapshot-level)
name,
description,
instructions,
model,
tools,
defaultOptions,
workflows,
agents,
integrationTools,
toolProviders,
mcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser,
requestContextSchema,
// Version options
changeMessage,
autoPublish = false
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const existing = await agentsStore.getById(storedAgentId);
if (!existing) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
const scope = await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext);
chunkEVOVAWN6_cjs.assertStoredResourceScope(existing, scope);
chunkWMS7BOP7_cjs.assertWriteAccess({
requestContext,
resource: "stored-agents",
resourceId: storedAgentId,
action: "edit",
record: existing
});
chunkZCX2J552_cjs.validateMetadataAvatarUrl(metadata);
const callerAuthorId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext) ?? void 0;
const resolvedVisibility = callerAuthorId ? visibility : visibility != null ? "public" : void 0;
const resolvedBrowser = await resolveBrowserField(browser, mastra);
let codeAgentForUpdate;
try {
codeAgentForUpdate = mastra.getAgentById?.(storedAgentId);
} catch {
codeAgentForUpdate = void 0;
}
if (codeAgentForUpdate?.source === "code") {
const ownership = getCodeAgentOwnership(codeAgentForUpdate.__getEditorConfig?.());
if (ownership.ownsInstructions) {
if (instructions !== void 0) {
assertOwnedInstructionsNotEmpty(instructions);
}
} else {
instructions = void 0;
}
if (!ownership.ownsTools && !ownership.ownsToolDescriptionsOnly) {
tools = void 0;
integrationTools = void 0;
mcpClients = void 0;
}
}
const mergedMetadata = { ...existing.metadata ?? {}, ...metadata ?? {} };
const scopedMetadata = chunkEVOVAWN6_cjs.scopeStoredResourceMetadata(mergedMetadata, scope);
const updatedAgent = await agentsStore.update({
id: storedAgentId,
authorId,
metadata: scopedMetadata,
visibility: resolvedVisibility,
name,
description,
instructions,
model,
tools,
defaultOptions,
workflows,
agents,
integrationTools,
toolProviders,
mcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser: resolvedBrowser,
requestContextSchema
});
const configFields = {
name,
description,
instructions,
model,
tools,
defaultOptions,
workflows,
agents,
integrationTools,
toolProviders,
mcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser: resolvedBrowser,
requestContextSchema
};
const providedConfigFields = Object.fromEntries(Object.entries(configFields).filter(([_, v]) => v !== void 0));
const autoVersionResult = await chunk2XZ2466F_cjs.handleAutoVersioning(
agentsStore,
storedAgentId,
"agentId",
AGENT_SNAPSHOT_CONFIG_FIELDS,
existing,
updatedAgent,
providedConfigFields,
changeMessage ? { changeMessage } : void 0
);
if (!autoVersionResult) {
throw new Error("handleAutoVersioning returned undefined");
}
const isCodeSource = mastra.getEditor?.()?.getSource?.() === "code";
if (isCodeSource && autoVersionResult.versionCreated && !changeMessage) {
const { versions } = await agentsStore.listVersions({ agentId: storedAgentId, perPage: 2 });
const previousVersion = versions[1];
const isPublishedVersion = previousVersion?.id === existing.activeVersionId;
if (previousVersion && !isPublishedVersion) {
await agentsStore.deleteVersion(previousVersion.id);
}
}
if (autoVersionResult.versionCreated && autoPublish) {
const { versions } = await agentsStore.listVersions({ agentId: storedAgentId, perPage: 1 });
const latestVersion = versions[0];
if (latestVersion) {
await agentsStore.update({
id: storedAgentId,
activeVersionId: latestVersion.id
});
}
}
const editor = mastra.getEditor();
if (editor) {
editor.agent.clearCache(storedAgentId);
}
const resolved = await agentsStore.getByIdResolved(storedAgentId, { status: "draft" });
if (!resolved) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to resolve updated agent" });
}
return chunk5UUIMMDB_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error updating stored agent");
}
}
});
var DELETE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkI5JCLVTK_cjs.storedAgentIdPathParams,
responseSchema: chunkI5JCLVTK_cjs.deleteStoredAgentResponseSchema,
summary: "Delete stored agent",
description: "Deletes an agent from storage by its unique identifier",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const existing = await agentsStore.getById(storedAgentId);
if (!existing) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(existing, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertWriteAccess({
requestContext,
resource: "stored-agents",
resourceId: storedAgentId,
action: "delete",
record: existing
});
await agentsStore.delete(storedAgentId);
try {
const favoritesStore = await storage.getStore("favorites");
await favoritesStore?.deleteFavoritesForEntity({ entityType: "agent", entityId: storedAgentId });
} catch (cascadeError) {
mastra.getLogger?.()?.warn?.("Failed to cascade-delete favorites for agent", { storedAgentId, error: cascadeError });
}
mastra.getEditor()?.agent.clearCache(storedAgentId);
return { success: true, message: `Agent ${storedAgentId} deleted successfully` };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error deleting stored agent");
}
}
});
var GET_STORED_AGENT_DEPENDENTS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/agents/:storedAgentId/dependents",
responseType: "json",
pathParamSchema: chunkI5JCLVTK_cjs.storedAgentIdPathParams,
responseSchema: chunkI5JCLVTK_cjs.getStoredAgentDependentsResponseSchema,
summary: "List dependents of a stored agent",
description: "Returns agents that reference the target as a sub-agent. Used to warn before deleting or unsharing. Caller-readable references appear in `dependents` (id + name); cross-workspace references the caller cannot read are aggregated in `hiddenCount` and only surfaced when the target is public.",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const target = await agentsStore.getById(storedAgentId);
if (!target) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(target, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: target });
const filter = chunkWMS7BOP7_cjs.resolveAuthorFilter({ requestContext, resource: "stored-agents" });
const all = await agentsStore.listResolved({
perPage: false,
status: "published"
});
const targetIsPublic = target.visibility === "public";
const dependents = [];
let hiddenCount = 0;
for (const record of all.agents) {
if (record.id === storedAgentId) continue;
if (!referencesTarget(record.agents, storedAgentId)) continue;
if (chunkWMS7BOP7_cjs.matchesAuthorFilter(record, filter)) {
dependents.push({
id: record.id,
name: record.name ?? record.id
});
} else if (targetIsPublic) {
hiddenCount += 1;
}
}
return { dependents, hiddenCount };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing stored agent dependents");
}
}
});
function referencesTarget(subAgents, targetId) {
if (!subAgents) return false;
if (Array.isArray(subAgents)) {
return subAgents.some((variant) => {
const value = variant?.value;
return Boolean(value && typeof value === "object" && Object.prototype.hasOwnProperty.call(value, targetId));
});
}
if (typeof subAgents === "object") {
return Object.prototype.hasOwnProperty.call(subAgents, targetId);
}
return false;
}
var PREVIEW_INSTRUCTIONS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/agents/preview-instructions",
responseType: "json",
bodySchema: chunkI5JCLVTK_cjs.previewInstructionsBodySchema,
responseSchema: chunkI5JCLVTK_cjs.previewInstructionsResponseSchema,
summary: "Preview resolved instructions",
description: "Resolves an array of instruction blocks against a request context, evaluating rules, fetching prompt block references, and rendering template variables. Returns the final concatenated instruction string.",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, blocks, context }) => {
try {
const editor = mastra.getEditor();
if (!editor) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Editor is not configured" });
}
const result = await editor.prompt.preview(blocks, context ?? {});
return { result };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error previewing instructions");
}
}
});
exports.CREATE_STORED_AGENT_ROUTE = CREATE_STORED_AGENT_ROUTE;
exports.DELETE_STORED_AGENT_ROUTE = DELETE_STORED_AGENT_ROUTE;
exports.EXPORT_STORED_AGENT_ROUTE = EXPORT_STORED_AGENT_ROUTE;
exports.GET_STORED_AGENT_DEPENDENTS_ROUTE = GET_STORED_AGENT_DEPENDENTS_ROUTE;
exports.GET_STORED_AGENT_ROUTE = GET_STORED_AGENT_ROUTE;
exports.LIST_STORED_AGENTS_ROUTE = LIST_STORED_AGENTS_ROUTE;
exports.OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE = OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE;
exports.PREVIEW_INSTRUCTIONS_ROUTE = PREVIEW_INSTRUCTIONS_ROUTE;
exports.UPDATE_STORED_AGENT_ROUTE = UPDATE_STORED_AGENT_ROUTE;
//# sourceMappingURL=chunk-JGQYJ3ZU.cjs.map
//# sourceMappingURL=chunk-JGQYJ3ZU.cjs.map

Sorry, the diff of this file is too big to display

'use strict';
var chunkO4O2EJF7_cjs = require('./chunk-O4O2EJF7.cjs');
var chunkKI6RMI7A_cjs = require('./chunk-KI6RMI7A.cjs');
var chunkWMS7BOP7_cjs = require('./chunk-WMS7BOP7.cjs');
var chunkI5JCLVTK_cjs = require('./chunk-I5JCLVTK.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
// src/server/handlers/stored-agent-favorites.ts
async function getFavoritesContext(mastra) {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentStore = await storage.getStore("agents");
if (!agentStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Favorites storage domain is not available" });
}
return { agentStore, favoritesStore };
}
var FAVORITE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "PUT",
path: "/stored/agents/:storedAgentId/favorite",
responseType: "json",
pathParamSchema: chunkI5JCLVTK_cjs.storedAgentIdPathParams,
responseSchema: chunkO4O2EJF7_cjs.favoriteToggleResponseSchema,
summary: "Favorite a stored agent",
description: "Marks the stored agent as favorited by the calling user. Idempotent.",
tags: ["Stored Agents"],
requiresAuth: true,
requiresPermission: "stored-agents:read",
handler: async ({ mastra, requestContext, storedAgentId }) => {
try {
await chunkKI6RMI7A_cjs.requireBuilderFeature(mastra, "favorites");
const callerId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext);
if (!callerId) {
throw new chunk64ITUOXI_cjs.HTTPException(401, { message: "Authentication required" });
}
const { agentStore, favoritesStore } = await getFavoritesContext(mastra);
const agent = await agentStore.getById(storedAgentId);
if (!agent) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
const result = await favoritesStore.favorite({
userId: callerId,
entityType: "agent",
entityId: storedAgentId
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error favoriting stored agent");
}
}
});
var UNFAVORITE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/stored/agents/:storedAgentId/favorite",
responseType: "json",
pathParamSchema: chunkI5JCLVTK_cjs.storedAgentIdPathParams,
responseSchema: chunkO4O2EJF7_cjs.favoriteToggleResponseSchema,
summary: "Unfavorite a stored agent",
description: "Removes the caller\u2019s favorite from the stored agent. Idempotent.",
tags: ["Stored Agents"],
requiresAuth: true,
requiresPermission: "stored-agents:read",
handler: async ({ mastra, requestContext, storedAgentId }) => {
try {
await chunkKI6RMI7A_cjs.requireBuilderFeature(mastra, "favorites");
const callerId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext);
if (!callerId) {
throw new chunk64ITUOXI_cjs.HTTPException(401, { message: "Authentication required" });
}
const { agentStore, favoritesStore } = await getFavoritesContext(mastra);
const agent = await agentStore.getById(storedAgentId);
if (!agent) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
const result = await favoritesStore.unfavorite({
userId: callerId,
entityType: "agent",
entityId: storedAgentId
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error unfavoriting stored agent");
}
}
});
exports.FAVORITE_STORED_AGENT_ROUTE = FAVORITE_STORED_AGENT_ROUTE;
exports.UNFAVORITE_STORED_AGENT_ROUTE = UNFAVORITE_STORED_AGENT_ROUTE;
//# sourceMappingURL=chunk-JKTLOG4J.cjs.map
//# sourceMappingURL=chunk-JKTLOG4J.cjs.map
{"version":3,"sources":["../src/server/handlers/stored-agent-favorites.ts"],"names":["HTTPException","createRoute","storedAgentIdPathParams","favoriteToggleResponseSchema","requireBuilderFeature","getCallerAuthorId","assertStoredResourceScope","getStoredResourceScope","assertReadAccess","handleError"],"mappings":"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","file":"chunk-JKTLOG4J.cjs","sourcesContent":["import { HTTPException } from '../http-exception';\nimport { favoriteToggleResponseSchema } from '../schemas/favorites';\nimport { storedAgentIdPathParams } from '../schemas/stored-agents';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { assertReadAccess, getCallerAuthorId } from './authorship';\nimport { requireBuilderFeature } from './editor-builder';\nimport { handleError } from './error';\n\n/**\n * Resolves the storage and favorites domains, throwing 500 if unavailable.\n */\nasync function getFavoritesContext(mastra: Parameters<typeof requireBuilderFeature>[0]) {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n const agentStore = await storage.getStore('agents');\n if (!agentStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) {\n throw new HTTPException(500, { message: 'Favorites storage domain is not available' });\n }\n return { agentStore, favoritesStore };\n}\n\n/**\n * PUT /stored/agents/:storedAgentId/favorite\n */\nexport const FAVORITE_STORED_AGENT_ROUTE = createRoute({\n method: 'PUT',\n path: '/stored/agents/:storedAgentId/favorite',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Favorite a stored agent',\n description: 'Marks the stored agent as favorited by the calling user. Idempotent.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra, requestContext, storedAgentId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { agentStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const agent = await agentStore.getById(storedAgentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller cannot read the agent (private + not owner/admin).\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: agent });\n\n const result = await favoritesStore.favorite({\n userId: callerId,\n entityType: 'agent',\n entityId: storedAgentId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error favoriting stored agent');\n }\n },\n});\n\n/**\n * DELETE /stored/agents/:storedAgentId/favorite\n */\nexport const UNFAVORITE_STORED_AGENT_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/agents/:storedAgentId/favorite',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Unfavorite a stored agent',\n description: 'Removes the caller’s favorite from the stored agent. Idempotent.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra, requestContext, storedAgentId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { agentStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const agent = await agentStore.getById(storedAgentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: agent });\n\n const result = await favoritesStore.unfavorite({\n userId: callerId,\n entityType: 'agent',\n entityId: storedAgentId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error unfavoriting stored agent');\n }\n },\n});\n"]}
import { responseObjectSchema, createResponseBodySchema, responseIdPathParams, deleteResponseSchema } from './chunk-BIUL4Y6W.js';
import { mapResponseTurnRecordToResponse, mapResponseInputToExecutionMessages, mapMastraToolsToResponseTools, createMessageId, buildCompletedResponse, buildInProgressResponse, createResponseStreamEventTranslator, createOutputTextPart, toResponseUsage, toResponseStatus, formatSseEvent } from './chunk-TLLV2JP5.js';
import { findResponseTurnRecordAcrossAgents, deleteResponseTurnRecord, findResponseTurnRecord, resolveResponseTurnMessagesForStorage, getAgentMemoryStore, persistResponseTurnRecord } from './chunk-SPNWC52V.js';
import { getAgentFromSystem } from './chunk-4AGRNM7F.js';
import { MastraFGAPermissions, getEffectiveThreadId, getEffectiveResourceId, enforceThreadAccess } from './chunk-A7APTIYJ.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
import { __export } from './chunk-PR4QN5HX.js';
import { randomUUID } from 'crypto';
// src/server/handlers/responses.ts
var responses_exports = {};
__export(responses_exports, {
CREATE_RESPONSE_ROUTE: () => CREATE_RESPONSE_ROUTE,
DELETE_RESPONSE_ROUTE: () => DELETE_RESPONSE_ROUTE,
GET_RESPONSE_ROUTE: () => GET_RESPONSE_ROUTE
});
var JSON_OBJECT_RESPONSE_SCHEMA = {
type: "object",
additionalProperties: true
};
function jsonResponse(data, status = 200) {
return new Response(JSON.stringify(data), {
status,
headers: {
"Content-Type": "application/json"
}
});
}
function createStructuredOutput(text) {
if (!text) {
return void 0;
}
switch (text.format.type) {
case "json_object":
return {
schema: JSON_OBJECT_RESPONSE_SCHEMA,
jsonPromptInjection: true
};
case "json_schema":
return {
schema: text.format.schema
};
default:
return void 0;
}
}
function getStreamedMessageOutputItem(response, responseId) {
return response.output.find(
(item) => item.type === "message" && item.id === responseId
) ?? null;
}
async function resolveThreadExecutionContext({
agent,
store,
conversationId,
previousResponseTurnRecord,
requestContext
}) {
if (conversationId && previousResponseTurnRecord && previousResponseTurnRecord.thread.id !== conversationId) {
throw new HTTPException(400, {
message: "conversation_id and previous_response_id must reference the same conversation thread when both are provided"
});
}
if (previousResponseTurnRecord) {
return {
threadId: previousResponseTurnRecord.thread.id,
resourceId: previousResponseTurnRecord.thread.resourceId
};
}
const effectiveThreadId = getEffectiveThreadId(requestContext, void 0);
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!store && !conversationId && !effectiveThreadId) {
return null;
}
const memory = await agent.getMemory({ requestContext });
if (!memory) {
if (conversationId) {
throw new HTTPException(400, {
message: "conversation_id requires the target agent to have memory configured"
});
}
return null;
}
if (conversationId) {
const existingThread2 = await memory.getThreadById({ threadId: conversationId });
if (!existingThread2) {
throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });
}
await enforceThreadAccess({
mastra: agent.getMastraInstance(),
requestContext,
threadId: conversationId,
thread: existingThread2,
effectiveResourceId
});
return {
threadId: existingThread2.id,
resourceId: effectiveResourceId ?? existingThread2.resourceId
};
}
if (!effectiveThreadId) {
if (!store) {
return null;
}
const threadId2 = randomUUID();
const createdThread2 = await memory.createThread({
threadId: threadId2,
resourceId: effectiveResourceId ?? threadId2
});
return {
threadId: createdThread2.id,
resourceId: createdThread2.resourceId
};
}
const threadId = effectiveThreadId;
const existingThread = await memory.getThreadById({ threadId });
if (existingThread) {
await enforceThreadAccess({
mastra: agent.getMastraInstance(),
requestContext,
threadId,
thread: existingThread,
effectiveResourceId
});
return {
threadId: existingThread.id,
resourceId: effectiveResourceId ?? existingThread.resourceId
};
}
if (!store) {
return null;
}
const resourceId = effectiveResourceId ?? threadId;
const createdThread = await memory.createThread({
threadId,
resourceId
});
return {
threadId: createdThread.id,
resourceId: createdThread.resourceId
};
}
function createExecutionMemory(threadContext) {
if (!threadContext) {
return void 0;
}
return {
memory: {
thread: threadContext.threadId,
resource: threadContext.resourceId
}
};
}
async function resolveResponseAgent({
mastra,
agentId
}) {
if (!agentId) {
throw new HTTPException(400, {
message: "Responses requests require an agent_id"
});
}
if (!mastra) {
throw new HTTPException(500, { message: "Mastra instance is required for agent-backed responses" });
}
return getAgentFromSystem({ mastra, agentId });
}
async function resolveAgentMemoryStore({
agent,
requestContext,
errorMessage
}) {
const agentMemoryStore = await getAgentMemoryStore({ agent, requestContext });
if (!agentMemoryStore) {
throw new HTTPException(400, { message: errorMessage });
}
return agentMemoryStore;
}
async function executeGenerate({
agent,
resolvedModel,
modelOverride,
instructions,
text,
providerOptions,
input,
requestContext,
abortSignal,
threadContext
}) {
const executionMemory = createExecutionMemory(threadContext);
const structuredOutput = createStructuredOutput(text);
const modelOption = modelOverride ? { model: modelOverride } : {};
const commonOptions = {
instructions,
requestContext,
abortSignal,
...modelOption,
structuredOutput,
providerOptions,
...executionMemory ?? {}
};
if (resolvedModel.specificationVersion === "v1") {
if (threadContext) {
return await agent.generateLegacy(input, {
instructions,
requestContext,
abortSignal,
...modelOption,
output: structuredOutput?.schema,
providerOptions,
resourceId: threadContext.resourceId,
threadId: threadContext.threadId
});
}
return await agent.generateLegacy(input, {
instructions,
requestContext,
abortSignal,
...modelOption,
output: structuredOutput?.schema,
providerOptions
});
}
return await agent.generate(input, commonOptions);
}
async function executeStream({
agent,
resolvedModel,
modelOverride,
instructions,
text,
providerOptions,
input,
requestContext,
abortSignal,
threadContext
}) {
const executionMemory = createExecutionMemory(threadContext);
const structuredOutput = createStructuredOutput(text);
const modelOption = modelOverride ? { model: modelOverride } : {};
const commonOptions = {
instructions,
requestContext,
abortSignal,
...modelOption,
structuredOutput,
providerOptions,
...executionMemory ?? {}
};
if (resolvedModel.specificationVersion === "v1") {
if (threadContext) {
return await agent.streamLegacy(input, {
instructions,
requestContext,
abortSignal,
...modelOption,
output: structuredOutput?.schema,
providerOptions,
resourceId: threadContext.resourceId,
threadId: threadContext.threadId
});
}
return await agent.streamLegacy(input, {
instructions,
requestContext,
abortSignal,
...modelOption,
output: structuredOutput?.schema,
providerOptions
});
}
return await agent.stream(input, commonOptions);
}
async function resolveUsage(result) {
return await (result.totalUsage ?? result.usage ?? null);
}
async function resolveProviderMetadata(result) {
return await (result.providerMetadata ?? void 0);
}
async function resolveFinishReason(result) {
return await result.finishReason ?? void 0;
}
async function resolveText(result) {
return await result.text ?? "";
}
async function resolveCompletedResponseState(result, fallbackText) {
const usage = await resolveUsage(result);
return {
completedAt: Math.floor(Date.now() / 1e3),
status: toResponseStatus(await resolveFinishReason(result)),
text: await resolveText(result) || fallbackText,
usage,
usageDetails: toResponseUsage(usage),
providerOptions: await resolveProviderMetadata(result)
};
}
async function storeCompletedResponse({
agentMemoryStore,
didStore,
threadContext,
responseId,
metadata,
completedState,
messages,
outputItems
}) {
if (!didStore || !threadContext) {
return;
}
await persistResponseTurnRecord({
memoryStore: agentMemoryStore,
responseId,
metadata: {
...metadata,
completedAt: completedState.completedAt,
status: completedState.status,
usage: completedState.usageDetails,
providerOptions: completedState.providerOptions,
messageIds: [],
outputItems
},
threadContext,
messages
});
}
async function finalizeResponse({
agentMemoryStore,
didStore,
threadContext,
result,
responseId,
createdAt,
model,
instructions,
previousResponseId,
conversationId,
configuredTools,
responseMetadata,
fallbackText,
fallbackOutputItems
}) {
const completedState = await resolveCompletedResponseState(result, fallbackText);
const fallbackItems = fallbackOutputItems?.(completedState);
const responseMessages = await resolveResponseTurnMessagesForStorage({
result,
responseId,
text: completedState.text,
threadContext,
fallbackOutputItems: threadContext ? fallbackItems : void 0
});
const response = buildCompletedResponse({
responseId,
outputMessageId: responseId,
model,
createdAt,
completedAt: completedState.completedAt,
status: completedState.status,
text: completedState.text,
usage: completedState.usage,
instructions,
textConfig: responseMetadata.text,
previousResponseId,
conversationId,
providerOptions: completedState.providerOptions,
tools: configuredTools,
messages: responseMessages,
fallbackOutputItems: fallbackItems,
store: didStore
});
await storeCompletedResponse({
agentMemoryStore,
didStore,
threadContext,
responseId,
metadata: responseMetadata,
completedState,
messages: responseMessages,
outputItems: response.output
});
return { completedState, response, responseMessages };
}
async function prepareCreateResponseRequest({
body,
mastra,
requestContext
}) {
const executionInput = mapResponseInputToExecutionMessages(body.input);
let previousResponseTurnRecord = null;
let resolvedAgent = null;
if (body.previous_response_id) {
if (body.agent_id) {
resolvedAgent = await resolveResponseAgent({ mastra, agentId: body.agent_id });
previousResponseTurnRecord = await findResponseTurnRecord({
agent: resolvedAgent,
responseId: body.previous_response_id,
requestContext
});
if (!previousResponseTurnRecord) {
const owningResponseTurnRecord = await findResponseTurnRecordAcrossAgents({
mastra,
responseId: body.previous_response_id,
requestContext
});
if (owningResponseTurnRecord) {
if (owningResponseTurnRecord.metadata.agentId === body.agent_id) {
previousResponseTurnRecord = owningResponseTurnRecord;
} else {
throw new HTTPException(400, {
message: `Stored response ${body.previous_response_id} belongs to agent ${owningResponseTurnRecord.metadata.agentId}, not ${body.agent_id}`
});
}
}
if (!previousResponseTurnRecord) {
throw new HTTPException(404, { message: `Stored response ${body.previous_response_id} was not found` });
}
}
} else {
if (!mastra) {
throw new HTTPException(500, { message: "Mastra instance is required for agent-backed responses" });
}
previousResponseTurnRecord = await findResponseTurnRecordAcrossAgents({
mastra,
responseId: body.previous_response_id,
requestContext
});
if (!previousResponseTurnRecord) {
throw new HTTPException(404, { message: `Stored response ${body.previous_response_id} was not found` });
}
}
}
const agent = resolvedAgent ?? await resolveResponseAgent({
mastra,
agentId: body.agent_id ?? previousResponseTurnRecord?.metadata.agentId
});
const resolvedModel = await agent.getModel({
requestContext,
modelConfig: body.model
});
const responseModel = body.model ?? (() => {
if (resolvedModel.provider && resolvedModel.modelId) {
const publicProviderId = resolvedModel.provider.includes(".") ? resolvedModel.provider.split(".")[0] : resolvedModel.provider;
return `${publicProviderId}/${resolvedModel.modelId}`;
}
if (resolvedModel.modelId) {
return resolvedModel.modelId;
}
throw new HTTPException(500, {
message: "Responses route could not determine the effective model for this request"
});
})();
const shouldStore = body.store ?? false;
const needsMemoryStore = shouldStore || Boolean(body.conversation_id) || Boolean(body.previous_response_id);
const agentMemoryStore = needsMemoryStore ? await resolveAgentMemoryStore({
agent,
requestContext,
errorMessage: body.previous_response_id ? "previous_response_id requires the target agent to have memory storage configured" : shouldStore ? "Stored responses require the target agent to have memory storage configured" : "conversation_id requires the target agent to have memory storage configured"
}) : null;
const configuredTools = mapMastraToolsToResponseTools(
await Promise.resolve(agent.listTools({ requestContext }))
);
const responseId = createMessageId();
const createdAt = Math.floor(Date.now() / 1e3);
const threadContext = await resolveThreadExecutionContext({
agent,
store: shouldStore,
conversationId: body.conversation_id,
previousResponseTurnRecord,
requestContext
});
if (shouldStore && !threadContext) {
throw new HTTPException(400, {
message: "Stored responses require the target agent to have memory configured"
});
}
const didStore = shouldStore && Boolean(threadContext);
return {
agent,
agentMemoryStore,
configuredTools,
createdAt,
didStore,
executionInput,
previousResponseTurnRecord,
resolvedModel,
responseId,
responseModel,
responseMetadata: {
agentId: agent.id,
model: responseModel,
createdAt,
instructions: body.instructions,
text: body.text,
previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,
tools: configuredTools,
store: didStore
},
threadContext
};
}
function createResponseEventStream({
agentMemoryStore,
body,
configuredTools,
createdAt,
didStore,
previousResponseTurnRecord,
responseId,
responseModel,
responseMetadata,
streamResult,
threadContext
}) {
const createdResponse = buildInProgressResponse({
responseId,
model: responseModel,
createdAt,
instructions: body.instructions,
textConfig: body.text,
previousResponseId: body.previous_response_id,
conversationId: threadContext?.threadId ?? body.conversation_id,
tools: configuredTools,
store: didStore
});
return new ReadableStream({
async start(controller) {
let sequenceNumber = 1;
const enqueueEvent = (eventName, payload) => {
controller.enqueue(
formatSseEvent(eventName, {
...payload,
sequence_number: sequenceNumber++
})
);
};
enqueueEvent("response.created", {
type: "response.created",
response: createdResponse
});
enqueueEvent("response.in_progress", {
type: "response.in_progress",
response: createdResponse
});
const streamEvents = createResponseStreamEventTranslator(responseId);
const fullStream = await streamResult.fullStream;
const reader = fullStream.getReader();
try {
while (true) {
const { done, value } = await reader.read();
if (done) {
break;
}
for (const event of streamEvents.consume(value)) {
enqueueEvent(event.event, event.payload);
}
}
for (const event of streamEvents.flushPendingToolResults()) {
enqueueEvent(event.event, event.payload);
}
const { completedState, response } = await finalizeResponse({
agentMemoryStore,
didStore,
threadContext,
result: streamResult,
responseId,
createdAt,
model: responseModel,
instructions: body.instructions,
previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,
conversationId: threadContext?.threadId ?? body.conversation_id,
configuredTools,
responseMetadata,
fallbackText: streamEvents.text,
fallbackOutputItems: (completedState2) => streamEvents.getOutputItems({
text: completedState2.text,
status: completedState2.status
})
});
const completedItem = getStreamedMessageOutputItem(response, responseId);
if (completedItem || completedState.text) {
for (const event of streamEvents.completeText(
completedState.text,
completedItem ?? {
id: responseId,
type: "message",
role: "assistant",
status: "completed",
content: [createOutputTextPart(completedState.text)]
}
)) {
enqueueEvent(event.event, event.payload);
}
}
enqueueEvent("response.completed", {
type: "response.completed",
response
});
controller.close();
} catch (error) {
controller.error(error);
} finally {
reader.releaseLock();
}
}
});
}
var CREATE_RESPONSE_ROUTE = createRoute({
method: "POST",
path: "/v1/responses",
responseType: "datastream-response",
bodySchema: createResponseBodySchema,
responseSchema: responseObjectSchema,
summary: "Create a response",
description: "Creates a response through a Mastra-hosted Responses API-compatible route",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: MastraFGAPermissions.AGENTS_EXECUTE,
handler: async ({ mastra, requestContext, abortSignal, ...body }) => {
try {
const {
agent,
agentMemoryStore,
configuredTools,
createdAt,
didStore,
executionInput,
previousResponseTurnRecord,
resolvedModel,
responseId,
responseModel,
responseMetadata,
threadContext
} = await prepareCreateResponseRequest({ body, mastra, requestContext });
if (!body.stream) {
const result = await executeGenerate({
agent,
resolvedModel,
modelOverride: body.model,
instructions: body.instructions,
text: body.text,
providerOptions: body.providerOptions,
input: executionInput,
requestContext,
abortSignal,
threadContext
});
const { response } = await finalizeResponse({
agentMemoryStore,
didStore,
threadContext,
result,
responseId,
createdAt,
model: responseModel,
instructions: body.instructions,
previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,
conversationId: threadContext?.threadId ?? body.conversation_id,
configuredTools,
responseMetadata,
fallbackText: ""
});
return jsonResponse(response);
}
const streamResult = await executeStream({
agent,
resolvedModel,
modelOverride: body.model,
instructions: body.instructions,
text: body.text,
providerOptions: body.providerOptions,
input: executionInput,
requestContext,
abortSignal,
threadContext
});
const stream = createResponseEventStream({
agentMemoryStore,
body,
configuredTools,
createdAt,
didStore,
previousResponseTurnRecord,
responseId,
responseModel,
responseMetadata,
streamResult,
threadContext
});
return new Response(stream, {
headers: {
"Content-Type": "text/event-stream; charset=utf-8",
"Cache-Control": "no-cache",
Connection: "keep-alive",
"X-Accel-Buffering": "no"
}
});
} catch (error) {
return handleError(error, "Error creating response");
}
}
});
var GET_RESPONSE_ROUTE = createRoute({
method: "GET",
path: "/v1/responses/:responseId",
responseType: "json",
pathParamSchema: responseIdPathParams,
responseSchema: responseObjectSchema,
summary: "Retrieve a stored response",
description: "Returns a previously stored response object",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, responseId }) => {
try {
const responseTurnRecord = await findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });
if (!responseTurnRecord) {
throw new HTTPException(404, { message: `Stored response ${responseId} was not found` });
}
return mapResponseTurnRecordToResponse(responseTurnRecord);
} catch (error) {
return handleError(error, "Error retrieving response");
}
}
});
var DELETE_RESPONSE_ROUTE = createRoute({
method: "DELETE",
path: "/v1/responses/:responseId",
responseType: "json",
pathParamSchema: responseIdPathParams,
responseSchema: deleteResponseSchema,
summary: "Delete a stored response",
description: "Deletes a stored response so it can no longer be retrieved or chained",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: MastraFGAPermissions.AGENTS_DELETE,
handler: async ({ mastra, requestContext, responseId }) => {
try {
const responseTurnRecord = await findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });
if (!responseTurnRecord) {
throw new HTTPException(404, { message: `Stored response ${responseId} was not found` });
}
await deleteResponseTurnRecord({ responseTurnRecord });
const response = {
id: responseId,
object: "response",
deleted: true
};
return response;
} catch (error) {
return handleError(error, "Error deleting response");
}
}
});
export { CREATE_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE, responses_exports };
//# sourceMappingURL=chunk-JQRNW7TI.js.map
//# sourceMappingURL=chunk-JQRNW7TI.js.map
{"version":3,"sources":["../src/server/handlers/responses.ts"],"names":["existingThread","threadId","createdThread","completedState"],"mappings":"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","file":"chunk-JQRNW7TI.js","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { Agent, MastraDBMessage } from '@mastra/core/agent';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { MemoryStorage } from '@mastra/core/storage';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n createResponseBodySchema,\n deleteResponseSchema,\n responseIdPathParams,\n responseObjectSchema,\n} from '../schemas/responses';\nimport type { CreateResponseBody, DeleteResponse, ResponseObject } from '../schemas/responses';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\nimport {\n buildCompletedResponse,\n buildInProgressResponse,\n createResponseStreamEventTranslator,\n createMessageId,\n createOutputTextPart,\n formatSseEvent,\n mapMastraToolsToResponseTools,\n mapResponseInputToExecutionMessages,\n mapResponseTurnRecordToResponse,\n toResponseStatus,\n toResponseUsage,\n} from './responses.adapter';\nimport {\n deleteResponseTurnRecord,\n findResponseTurnRecord,\n findResponseTurnRecordAcrossAgents,\n getAgentMemoryStore,\n persistResponseTurnRecord,\n resolveResponseTurnMessagesForStorage,\n} from './responses.storage';\nimport type {\n ProviderMetadataLike,\n ResponseTurnRecord,\n ResponseTurnRecordMetadata,\n ThreadExecutionContext,\n UsageLike,\n} from './responses.storage';\nimport { enforceThreadAccess, getEffectiveResourceId, getEffectiveThreadId } from './utils';\n\ntype AgentExecutionInput = Parameters<Agent['generate']>[0];\ntype ResolvedAgentModel = Awaited<ReturnType<Agent['getModel']>>;\n\ntype ResponseExecutionResult = {\n text?: string;\n finishReason?: string;\n totalUsage?: UsageLike | Promise<UsageLike>;\n usage?: UsageLike | Promise<UsageLike>;\n providerMetadata?: ProviderMetadataLike | Promise<ProviderMetadataLike>;\n response?: {\n id?: string;\n dbMessages?: MastraDBMessage[];\n };\n};\n\ntype ResponseStreamResult = {\n fullStream: ReadableStream<unknown> | Promise<ReadableStream<unknown>>;\n text: Promise<string> | string;\n finishReason: Promise<string | undefined> | string | undefined;\n totalUsage?: Promise<UsageLike> | UsageLike;\n usage?: Promise<UsageLike> | UsageLike;\n providerMetadata?: Promise<ProviderMetadataLike> | ProviderMetadataLike;\n response?:\n | Promise<{\n id?: string;\n dbMessages?: MastraDBMessage[];\n }>\n | {\n id?: string;\n dbMessages?: MastraDBMessage[];\n };\n};\n\ntype CompletedResponseState = {\n completedAt: number;\n status: ResponseObject['status'];\n text: string;\n usage: UsageLike;\n usageDetails: ResponseObject['usage'];\n providerOptions: ProviderMetadataLike;\n};\n\ntype FinalizedResponse = {\n completedState: CompletedResponseState;\n response: ResponseObject;\n responseMessages: MastraDBMessage[];\n};\n\ntype PreparedCreateResponseRequest = {\n agent: Agent<any, any, any, any>;\n agentMemoryStore: MemoryStorage | null;\n configuredTools: ReturnType<typeof mapMastraToolsToResponseTools>;\n createdAt: number;\n didStore: boolean;\n executionInput: AgentExecutionInput;\n previousResponseTurnRecord: ResponseTurnRecord | null;\n resolvedModel: ResolvedAgentModel;\n responseId: string;\n responseModel: string;\n responseMetadata: Omit<\n ResponseTurnRecordMetadata,\n 'completedAt' | 'status' | 'usage' | 'providerOptions' | 'messageIds'\n >;\n threadContext: ThreadExecutionContext | null;\n};\n\nconst JSON_OBJECT_RESPONSE_SCHEMA = {\n type: 'object',\n additionalProperties: true,\n} as const;\n\nfunction jsonResponse(data: ResponseObject, status: number = 200): Response {\n return new Response(JSON.stringify(data), {\n status,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n}\n\nfunction createStructuredOutput(text: CreateResponseBody['text']) {\n if (!text) {\n return undefined;\n }\n\n switch (text.format.type) {\n case 'json_object':\n return {\n schema: JSON_OBJECT_RESPONSE_SCHEMA,\n jsonPromptInjection: true,\n };\n case 'json_schema':\n return {\n schema: text.format.schema,\n };\n default:\n return undefined;\n }\n}\n\nfunction getStreamedMessageOutputItem(response: ResponseObject, responseId: string) {\n return (\n response.output.find(\n (item): item is Extract<ResponseObject['output'][number], { type: 'message' }> =>\n item.type === 'message' && item.id === responseId,\n ) ?? null\n );\n}\n\n/**\n * Resolves the memory thread that should back the current response request.\n *\n * If `previous_response_id` is present, the request continues on that stored thread.\n * Otherwise, the route only creates or reuses a thread when the caller asked to store\n * the response and the resolved agent actually has memory configured.\n */\nasync function resolveThreadExecutionContext({\n agent,\n store,\n conversationId,\n previousResponseTurnRecord,\n requestContext,\n}: {\n agent: Agent<any, any, any, any>;\n store: boolean;\n conversationId?: string;\n previousResponseTurnRecord: ResponseTurnRecord | null;\n requestContext: RequestContext;\n}): Promise<ThreadExecutionContext | null> {\n if (conversationId && previousResponseTurnRecord && previousResponseTurnRecord.thread.id !== conversationId) {\n throw new HTTPException(400, {\n message:\n 'conversation_id and previous_response_id must reference the same conversation thread when both are provided',\n });\n }\n\n if (previousResponseTurnRecord) {\n return {\n threadId: previousResponseTurnRecord.thread.id,\n resourceId: previousResponseTurnRecord.thread.resourceId,\n };\n }\n\n const effectiveThreadId = getEffectiveThreadId(requestContext, undefined);\n const effectiveResourceId = getEffectiveResourceId(requestContext, undefined);\n\n if (!store && !conversationId && !effectiveThreadId) {\n return null;\n }\n\n const memory = await agent.getMemory({ requestContext });\n if (!memory) {\n if (conversationId) {\n throw new HTTPException(400, {\n message: 'conversation_id requires the target agent to have memory configured',\n });\n }\n\n return null;\n }\n\n if (conversationId) {\n const existingThread = await memory.getThreadById({ threadId: conversationId });\n if (!existingThread) {\n throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });\n }\n\n await enforceThreadAccess({\n mastra: agent.getMastraInstance(),\n requestContext,\n threadId: conversationId,\n thread: existingThread,\n effectiveResourceId,\n });\n return {\n threadId: existingThread.id,\n resourceId: effectiveResourceId ?? existingThread.resourceId,\n };\n }\n\n if (!effectiveThreadId) {\n if (!store) {\n return null;\n }\n\n const threadId = randomUUID();\n const createdThread = await memory.createThread({\n threadId,\n resourceId: effectiveResourceId ?? threadId,\n });\n\n return {\n threadId: createdThread.id,\n resourceId: createdThread.resourceId,\n };\n }\n\n const threadId = effectiveThreadId;\n const existingThread = await memory.getThreadById({ threadId });\n if (existingThread) {\n await enforceThreadAccess({\n mastra: agent.getMastraInstance(),\n requestContext,\n threadId,\n thread: existingThread,\n effectiveResourceId,\n });\n return {\n threadId: existingThread.id,\n resourceId: effectiveResourceId ?? existingThread.resourceId,\n };\n }\n\n if (!store) {\n return null;\n }\n\n const resourceId = effectiveResourceId ?? threadId;\n const createdThread = await memory.createThread({\n threadId,\n resourceId,\n });\n\n return {\n threadId: createdThread.id,\n resourceId: createdThread.resourceId,\n };\n}\n\nfunction createExecutionMemory(threadContext: ThreadExecutionContext | null) {\n if (!threadContext) {\n return undefined;\n }\n\n return {\n memory: {\n thread: threadContext.threadId,\n resource: threadContext.resourceId,\n },\n } as const;\n}\n\n/**\n * Resolves the registered Mastra agent that owns the response request.\n */\nasync function resolveResponseAgent({\n mastra,\n agentId,\n}: {\n mastra: Mastra | undefined;\n agentId?: string;\n}): Promise<Agent<any, any, any, any>> {\n if (!agentId) {\n throw new HTTPException(400, {\n message: 'Responses requests require an agent_id',\n });\n }\n\n if (!mastra) {\n throw new HTTPException(500, { message: 'Mastra instance is required for agent-backed responses' });\n }\n\n return getAgentFromSystem({ mastra, agentId });\n}\n\nasync function resolveAgentMemoryStore({\n agent,\n requestContext,\n errorMessage,\n}: {\n agent: Agent<any, any, any, any>;\n requestContext: RequestContext;\n errorMessage: string;\n}): Promise<MemoryStorage> {\n const agentMemoryStore = await getAgentMemoryStore({ agent, requestContext });\n if (!agentMemoryStore) {\n throw new HTTPException(400, { message: errorMessage });\n }\n\n return agentMemoryStore;\n}\n\n/**\n * Executes a non-streaming Responses API request through the resolved Mastra agent.\n */\nasync function executeGenerate({\n agent,\n resolvedModel,\n modelOverride,\n instructions,\n text,\n providerOptions,\n input,\n requestContext,\n abortSignal,\n threadContext,\n}: {\n agent: Agent;\n resolvedModel: ResolvedAgentModel;\n modelOverride?: string;\n instructions: string | undefined;\n text: CreateResponseBody['text'];\n providerOptions: CreateResponseBody['providerOptions'];\n input: AgentExecutionInput;\n requestContext: RequestContext;\n abortSignal: AbortSignal;\n threadContext: ThreadExecutionContext | null;\n}) {\n const executionMemory = createExecutionMemory(threadContext);\n const structuredOutput = createStructuredOutput(text);\n const modelOption = modelOverride ? { model: modelOverride } : {};\n const commonOptions = {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n structuredOutput,\n providerOptions,\n ...(executionMemory ?? {}),\n };\n\n if (resolvedModel.specificationVersion === 'v1') {\n if (threadContext) {\n return (await agent.generateLegacy(input, {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n output: structuredOutput?.schema,\n providerOptions,\n resourceId: threadContext.resourceId,\n threadId: threadContext.threadId,\n } as never)) as ResponseExecutionResult;\n }\n\n return (await agent.generateLegacy(input, {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n output: structuredOutput?.schema,\n providerOptions,\n } as never)) as ResponseExecutionResult;\n }\n\n return (await agent.generate(input, commonOptions as never)) as ResponseExecutionResult;\n}\n\n/**\n * Executes a streaming Responses API request through the resolved Mastra agent.\n */\nasync function executeStream({\n agent,\n resolvedModel,\n modelOverride,\n instructions,\n text,\n providerOptions,\n input,\n requestContext,\n abortSignal,\n threadContext,\n}: {\n agent: Agent;\n resolvedModel: ResolvedAgentModel;\n modelOverride?: string;\n instructions: string | undefined;\n text: CreateResponseBody['text'];\n providerOptions: CreateResponseBody['providerOptions'];\n input: AgentExecutionInput;\n requestContext: RequestContext;\n abortSignal: AbortSignal;\n threadContext: ThreadExecutionContext | null;\n}) {\n const executionMemory = createExecutionMemory(threadContext);\n const structuredOutput = createStructuredOutput(text);\n const modelOption = modelOverride ? { model: modelOverride } : {};\n const commonOptions = {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n structuredOutput,\n providerOptions,\n ...(executionMemory ?? {}),\n };\n\n if (resolvedModel.specificationVersion === 'v1') {\n if (threadContext) {\n return (await agent.streamLegacy(input, {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n output: structuredOutput?.schema,\n providerOptions,\n resourceId: threadContext.resourceId,\n threadId: threadContext.threadId,\n } as never)) as ResponseStreamResult;\n }\n\n return (await agent.streamLegacy(input, {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n output: structuredOutput?.schema,\n providerOptions,\n } as never)) as ResponseStreamResult;\n }\n\n return (await agent.stream(input, commonOptions as never)) as ResponseStreamResult;\n}\n\nasync function resolveUsage(result: ResponseExecutionResult | ResponseStreamResult): Promise<UsageLike> {\n return (await (result.totalUsage ?? result.usage ?? null)) as UsageLike;\n}\n\nasync function resolveProviderMetadata(\n result: ResponseExecutionResult | ResponseStreamResult,\n): Promise<ProviderMetadataLike> {\n return (await (result.providerMetadata ?? undefined)) as ProviderMetadataLike;\n}\n\nasync function resolveFinishReason(\n result: ResponseExecutionResult | ResponseStreamResult,\n): Promise<string | undefined> {\n return (await result.finishReason) ?? undefined;\n}\n\nasync function resolveText(result: ResponseExecutionResult | ResponseStreamResult): Promise<string> {\n return (await result.text) ?? '';\n}\n\n/**\n * Resolves the final response state shared by streaming and non-streaming flows.\n */\nasync function resolveCompletedResponseState(\n result: ResponseExecutionResult | ResponseStreamResult,\n fallbackText: string,\n): Promise<CompletedResponseState> {\n const usage = await resolveUsage(result);\n\n return {\n completedAt: Math.floor(Date.now() / 1000),\n status: toResponseStatus(await resolveFinishReason(result)),\n text: (await resolveText(result)) || fallbackText,\n usage,\n usageDetails: toResponseUsage(usage),\n providerOptions: await resolveProviderMetadata(result),\n };\n}\n\n/**\n * Stores the completed response when the request opted into memory-backed persistence.\n */\nasync function storeCompletedResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n responseId,\n metadata,\n completedState,\n messages,\n outputItems,\n}: {\n agentMemoryStore: MemoryStorage | null;\n didStore: boolean;\n threadContext: ThreadExecutionContext | null;\n responseId: string;\n metadata: Omit<ResponseTurnRecordMetadata, 'completedAt' | 'status' | 'usage' | 'providerOptions' | 'messageIds'>;\n completedState: CompletedResponseState;\n messages: MastraDBMessage[];\n outputItems: ResponseObject['output'];\n}): Promise<void> {\n if (!didStore || !threadContext) {\n return;\n }\n\n await persistResponseTurnRecord({\n memoryStore: agentMemoryStore,\n responseId,\n metadata: {\n ...metadata,\n completedAt: completedState.completedAt,\n status: completedState.status,\n usage: completedState.usageDetails,\n providerOptions: completedState.providerOptions,\n messageIds: [],\n outputItems,\n },\n threadContext,\n messages,\n });\n}\n\n/**\n * Resolves the final response object and persists the stored response turn when needed.\n */\nasync function finalizeResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n result,\n responseId,\n createdAt,\n model,\n instructions,\n previousResponseId,\n conversationId,\n configuredTools,\n responseMetadata,\n fallbackText,\n fallbackOutputItems,\n}: {\n agentMemoryStore: MemoryStorage | null;\n didStore: boolean;\n threadContext: ThreadExecutionContext | null;\n result: ResponseExecutionResult | ResponseStreamResult;\n responseId: string;\n createdAt: number;\n model: string;\n instructions: string | undefined;\n previousResponseId?: string;\n conversationId?: string;\n configuredTools: ReturnType<typeof mapMastraToolsToResponseTools>;\n responseMetadata: Omit<\n ResponseTurnRecordMetadata,\n 'completedAt' | 'status' | 'usage' | 'providerOptions' | 'messageIds'\n >;\n fallbackText: string;\n fallbackOutputItems?: (completedState: CompletedResponseState) => ResponseObject['output'];\n}): Promise<FinalizedResponse> {\n const completedState = await resolveCompletedResponseState(result, fallbackText);\n const fallbackItems = fallbackOutputItems?.(completedState);\n const responseMessages = await resolveResponseTurnMessagesForStorage({\n result,\n responseId,\n text: completedState.text,\n threadContext,\n fallbackOutputItems: threadContext ? fallbackItems : undefined,\n });\n const response = buildCompletedResponse({\n responseId,\n outputMessageId: responseId,\n model,\n createdAt,\n completedAt: completedState.completedAt,\n status: completedState.status,\n text: completedState.text,\n usage: completedState.usage,\n instructions,\n textConfig: responseMetadata.text,\n previousResponseId,\n conversationId,\n providerOptions: completedState.providerOptions,\n tools: configuredTools,\n messages: responseMessages,\n fallbackOutputItems: fallbackItems,\n store: didStore,\n });\n\n await storeCompletedResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n responseId,\n metadata: responseMetadata,\n completedState,\n messages: responseMessages,\n outputItems: response.output,\n });\n\n return { completedState, response, responseMessages };\n}\n\n/**\n * Resolves all request-scoped Mastra primitives needed to execute a Responses create\n * call: the owning agent, the memory thread context, the normalized execution input,\n * and the response-turn metadata that may be persisted later.\n */\nasync function prepareCreateResponseRequest({\n body,\n mastra,\n requestContext,\n}: {\n body: CreateResponseBody;\n mastra: Mastra | undefined;\n requestContext: RequestContext;\n}): Promise<PreparedCreateResponseRequest> {\n const executionInput = mapResponseInputToExecutionMessages(body.input) as AgentExecutionInput;\n let previousResponseTurnRecord: ResponseTurnRecord | null = null;\n let resolvedAgent: Agent<any, any, any, any> | null = null;\n\n if (body.previous_response_id) {\n if (body.agent_id) {\n resolvedAgent = await resolveResponseAgent({ mastra, agentId: body.agent_id });\n previousResponseTurnRecord = await findResponseTurnRecord({\n agent: resolvedAgent,\n responseId: body.previous_response_id,\n requestContext,\n });\n\n if (!previousResponseTurnRecord) {\n const owningResponseTurnRecord = await findResponseTurnRecordAcrossAgents({\n mastra,\n responseId: body.previous_response_id,\n requestContext,\n });\n\n if (owningResponseTurnRecord) {\n if (owningResponseTurnRecord.metadata.agentId === body.agent_id) {\n previousResponseTurnRecord = owningResponseTurnRecord;\n } else {\n throw new HTTPException(400, {\n message: `Stored response ${body.previous_response_id} belongs to agent ${owningResponseTurnRecord.metadata.agentId}, not ${body.agent_id}`,\n });\n }\n }\n\n if (!previousResponseTurnRecord) {\n throw new HTTPException(404, { message: `Stored response ${body.previous_response_id} was not found` });\n }\n }\n } else {\n if (!mastra) {\n throw new HTTPException(500, { message: 'Mastra instance is required for agent-backed responses' });\n }\n\n previousResponseTurnRecord = await findResponseTurnRecordAcrossAgents({\n mastra,\n responseId: body.previous_response_id,\n requestContext,\n });\n\n if (!previousResponseTurnRecord) {\n throw new HTTPException(404, { message: `Stored response ${body.previous_response_id} was not found` });\n }\n }\n }\n\n const agent =\n resolvedAgent ??\n (await resolveResponseAgent({\n mastra,\n agentId: body.agent_id ?? previousResponseTurnRecord?.metadata.agentId,\n }));\n const resolvedModel = await agent.getModel({\n requestContext,\n modelConfig: body.model,\n });\n const responseModel =\n body.model ??\n (() => {\n if (resolvedModel.provider && resolvedModel.modelId) {\n const publicProviderId = resolvedModel.provider.includes('.')\n ? resolvedModel.provider.split('.')[0]!\n : resolvedModel.provider;\n return `${publicProviderId}/${resolvedModel.modelId}`;\n }\n\n if (resolvedModel.modelId) {\n return resolvedModel.modelId;\n }\n\n throw new HTTPException(500, {\n message: 'Responses route could not determine the effective model for this request',\n });\n })();\n const shouldStore = body.store ?? false;\n const needsMemoryStore = shouldStore || Boolean(body.conversation_id) || Boolean(body.previous_response_id);\n const agentMemoryStore = needsMemoryStore\n ? await resolveAgentMemoryStore({\n agent,\n requestContext,\n errorMessage: body.previous_response_id\n ? 'previous_response_id requires the target agent to have memory storage configured'\n : shouldStore\n ? 'Stored responses require the target agent to have memory storage configured'\n : 'conversation_id requires the target agent to have memory storage configured',\n })\n : null;\n const configuredTools = mapMastraToolsToResponseTools(\n (await Promise.resolve(agent.listTools({ requestContext }))) as Record<string, unknown>,\n );\n\n const responseId = createMessageId();\n const createdAt = Math.floor(Date.now() / 1000);\n const threadContext = await resolveThreadExecutionContext({\n agent,\n store: shouldStore,\n conversationId: body.conversation_id,\n previousResponseTurnRecord,\n requestContext,\n });\n\n if (shouldStore && !threadContext) {\n throw new HTTPException(400, {\n message: 'Stored responses require the target agent to have memory configured',\n });\n }\n\n const didStore = shouldStore && Boolean(threadContext);\n\n return {\n agent,\n agentMemoryStore,\n configuredTools,\n createdAt,\n didStore,\n executionInput,\n previousResponseTurnRecord,\n resolvedModel,\n responseId,\n responseModel,\n responseMetadata: {\n agentId: agent.id,\n model: responseModel,\n createdAt,\n instructions: body.instructions,\n text: body.text,\n previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,\n tools: configuredTools,\n store: didStore,\n },\n threadContext,\n };\n}\n\n/**\n * Bridges a Mastra agent stream into OpenAI-style Responses SSE events and completes\n * the stored response-turn record when the stream finishes.\n */\nfunction createResponseEventStream({\n agentMemoryStore,\n body,\n configuredTools,\n createdAt,\n didStore,\n previousResponseTurnRecord,\n responseId,\n responseModel,\n responseMetadata,\n streamResult,\n threadContext,\n}: {\n agentMemoryStore: MemoryStorage | null;\n body: CreateResponseBody;\n configuredTools: ReturnType<typeof mapMastraToolsToResponseTools>;\n createdAt: number;\n didStore: boolean;\n previousResponseTurnRecord: ResponseTurnRecord | null;\n responseId: string;\n responseModel: string;\n responseMetadata: Omit<\n ResponseTurnRecordMetadata,\n 'completedAt' | 'status' | 'usage' | 'providerOptions' | 'messageIds'\n >;\n streamResult: ResponseStreamResult;\n threadContext: ThreadExecutionContext | null;\n}) {\n const createdResponse = buildInProgressResponse({\n responseId,\n model: responseModel,\n createdAt,\n instructions: body.instructions,\n textConfig: body.text,\n previousResponseId: body.previous_response_id,\n conversationId: threadContext?.threadId ?? body.conversation_id,\n tools: configuredTools,\n store: didStore,\n });\n\n return new ReadableStream<Uint8Array>({\n async start(controller) {\n let sequenceNumber = 1;\n const enqueueEvent = (eventName: string, payload: Record<string, unknown>) => {\n controller.enqueue(\n formatSseEvent(eventName, {\n ...payload,\n sequence_number: sequenceNumber++,\n }),\n );\n };\n\n enqueueEvent('response.created', {\n type: 'response.created',\n response: createdResponse,\n });\n enqueueEvent('response.in_progress', {\n type: 'response.in_progress',\n response: createdResponse,\n });\n\n const streamEvents = createResponseStreamEventTranslator(responseId);\n const fullStream = await streamResult.fullStream;\n const reader = fullStream.getReader();\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n\n for (const event of streamEvents.consume(value)) {\n enqueueEvent(event.event, event.payload);\n }\n }\n\n for (const event of streamEvents.flushPendingToolResults()) {\n enqueueEvent(event.event, event.payload);\n }\n\n const { completedState, response } = await finalizeResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n result: streamResult,\n responseId,\n createdAt,\n model: responseModel,\n instructions: body.instructions,\n previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,\n conversationId: threadContext?.threadId ?? body.conversation_id,\n configuredTools,\n responseMetadata,\n fallbackText: streamEvents.text,\n fallbackOutputItems: completedState =>\n streamEvents.getOutputItems({\n text: completedState.text,\n status: completedState.status,\n }),\n });\n\n const completedItem = getStreamedMessageOutputItem(response, responseId);\n if (completedItem || completedState.text) {\n for (const event of streamEvents.completeText(\n completedState.text,\n completedItem ?? {\n id: responseId,\n type: 'message' as const,\n role: 'assistant' as const,\n status: 'completed' as const,\n content: [createOutputTextPart(completedState.text)],\n },\n )) {\n enqueueEvent(event.event, event.payload);\n }\n }\n enqueueEvent('response.completed', {\n type: 'response.completed',\n response,\n });\n controller.close();\n } catch (error) {\n controller.error(error);\n } finally {\n reader.releaseLock();\n }\n },\n });\n}\n\nexport const CREATE_RESPONSE_ROUTE = createRoute({\n method: 'POST',\n path: '/v1/responses',\n responseType: 'datastream-response',\n bodySchema: createResponseBodySchema,\n responseSchema: responseObjectSchema,\n summary: 'Create a response',\n description: 'Creates a response through a Mastra-hosted Responses API-compatible route',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_EXECUTE,\n handler: async ({ mastra, requestContext, abortSignal, ...body }) => {\n try {\n const {\n agent,\n agentMemoryStore,\n configuredTools,\n createdAt,\n didStore,\n executionInput,\n previousResponseTurnRecord,\n resolvedModel,\n responseId,\n responseModel,\n responseMetadata,\n threadContext,\n } = await prepareCreateResponseRequest({ body, mastra, requestContext });\n\n if (!body.stream) {\n const result = await executeGenerate({\n agent,\n resolvedModel,\n modelOverride: body.model,\n instructions: body.instructions,\n text: body.text,\n providerOptions: body.providerOptions,\n input: executionInput,\n requestContext,\n abortSignal,\n threadContext,\n });\n\n const { response } = await finalizeResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n result,\n responseId,\n createdAt,\n model: responseModel,\n instructions: body.instructions,\n previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,\n conversationId: threadContext?.threadId ?? body.conversation_id,\n configuredTools,\n responseMetadata,\n fallbackText: '',\n });\n\n return jsonResponse(response);\n }\n\n const streamResult = await executeStream({\n agent,\n resolvedModel,\n modelOverride: body.model,\n instructions: body.instructions,\n text: body.text,\n providerOptions: body.providerOptions,\n input: executionInput,\n requestContext,\n abortSignal,\n threadContext,\n });\n\n const stream = createResponseEventStream({\n agentMemoryStore,\n body,\n configuredTools,\n createdAt,\n didStore,\n previousResponseTurnRecord,\n responseId,\n responseModel,\n responseMetadata,\n streamResult,\n threadContext,\n });\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream; charset=utf-8',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n 'X-Accel-Buffering': 'no',\n },\n });\n } catch (error) {\n return handleError(error, 'Error creating response');\n }\n },\n});\n\nexport const GET_RESPONSE_ROUTE = createRoute({\n method: 'GET',\n path: '/v1/responses/:responseId',\n responseType: 'json',\n pathParamSchema: responseIdPathParams,\n responseSchema: responseObjectSchema,\n summary: 'Retrieve a stored response',\n description: 'Returns a previously stored response object',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_READ,\n handler: async ({ mastra, requestContext, responseId }) => {\n try {\n const responseTurnRecord = await findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });\n if (!responseTurnRecord) {\n throw new HTTPException(404, { message: `Stored response ${responseId} was not found` });\n }\n\n return mapResponseTurnRecordToResponse(responseTurnRecord);\n } catch (error) {\n return handleError(error, 'Error retrieving response');\n }\n },\n});\n\nexport const DELETE_RESPONSE_ROUTE = createRoute({\n method: 'DELETE',\n path: '/v1/responses/:responseId',\n responseType: 'json',\n pathParamSchema: responseIdPathParams,\n responseSchema: deleteResponseSchema,\n summary: 'Delete a stored response',\n description: 'Deletes a stored response so it can no longer be retrieved or chained',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_DELETE,\n handler: async ({ mastra, requestContext, responseId }) => {\n try {\n const responseTurnRecord = await findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });\n if (!responseTurnRecord) {\n throw new HTTPException(404, { message: `Stored response ${responseId} was not found` });\n }\n\n await deleteResponseTurnRecord({ responseTurnRecord });\n\n const response: DeleteResponse = {\n id: responseId,\n object: 'response',\n deleted: true,\n };\n\n return response;\n } catch (error) {\n return handleError(error, 'Error deleting response');\n }\n },\n});\n"]}
'use strict';
var chunkMN7K3ZEC_cjs = require('./chunk-MN7K3ZEC.cjs');
var chunkBPREBJ3Z_cjs = require('./chunk-BPREBJ3Z.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
// src/server/utils/resolve-builder-model-policy.ts
async function resolveBuilderModelPolicy(editor) {
if (!editor) return { active: false };
if (typeof editor.resolveBuilder !== "function") return { active: false };
if (typeof editor.hasEnabledBuilderConfig === "function" && !editor.hasEnabledBuilderConfig()) {
return { active: false };
}
try {
const builder = await editor.resolveBuilder();
const { builderToModelPolicy } = await import('@mastra/core/agent-builder/ee');
return builderToModelPolicy(builder);
} catch {
return { active: false };
}
}
// src/server/handlers/editor-builder.ts
async function resolveBuilderFeatures(mastra) {
const editor = mastra.getEditor();
if (!editor || typeof editor.resolveBuilder !== "function") return null;
if (!editor.hasEnabledBuilderConfig?.()) return null;
const builder = await editor.resolveBuilder();
if (!builder || !builder.enabled) return null;
const features = builder.getFeatures?.()?.agent;
if (!features) return null;
const parsed = chunkMN7K3ZEC_cjs.agentFeaturesSchema.safeParse(features);
return parsed.success ? parsed.data : null;
}
async function isBuilderFeatureEnabled(mastra, feature) {
const features = await resolveBuilderFeatures(mastra);
return features?.[feature] === true;
}
async function requireBuilderFeature(mastra, feature) {
if (!await isBuilderFeatureEnabled(mastra, feature)) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Not Found" });
}
}
var GET_EDITOR_BUILDER_SETTINGS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/editor/builder/settings",
responseType: "json",
responseSchema: chunkMN7K3ZEC_cjs.builderSettingsResponseSchema,
summary: "Get agent builder settings",
description: "Returns the agent builder feature flags and configuration for UI gating",
tags: ["Editor"],
requiresAuth: true,
requiresPermission: "stored-agents:read",
handler: async ({ mastra }) => {
try {
const editor = mastra.getEditor();
if (!editor) {
return { enabled: false, modelPolicy: { active: false } };
}
if (typeof editor.resolveBuilder !== "function") {
return { enabled: false, modelPolicy: { active: false } };
}
if (!editor.hasEnabledBuilderConfig?.()) {
return { enabled: false, modelPolicy: { active: false } };
}
const builder = await editor.resolveBuilder();
if (!builder || !builder.enabled) {
return { enabled: false, modelPolicy: { active: false } };
}
const baseWarnings = builder.getModelPolicyWarnings?.() ?? [];
const configuration = builder.getConfiguration();
const collectAliases = (registry) => Object.entries(registry).map(([key, entity]) => ({
id: entity.id || key,
key
}));
const toolAliases = collectAliases(mastra.listTools() ?? {});
const agentAliases = collectAliases(mastra.listAgents() ?? {});
const workflowAliases = collectAliases(mastra.listWorkflows() ?? {});
const toResponseKey = (aliases, byId) => {
const map = /* @__PURE__ */ new Map();
for (const a of aliases) {
map.set(a.id, byId === "id" ? a.id : a.key);
map.set(a.key, byId === "id" ? a.id : a.key);
}
return map;
};
const toolKeyMap = toResponseKey(toolAliases, "key");
const agentKeyMap = toResponseKey(agentAliases, "id");
const workflowKeyMap = toResponseKey(workflowAliases, "key");
const { builderToModelPolicy, resolvePickerVisibility } = await import('@mastra/core/agent-builder/ee');
const picker = resolvePickerVisibility({
config: configuration?.agent,
registeredToolIds: toolAliases.flatMap((a) => [a.id, a.key]),
registeredAgentIds: agentAliases.flatMap((a) => [a.id, a.key]),
registeredWorkflowIds: workflowAliases.flatMap((a) => [a.id, a.key])
});
const normalize = (visible, map) => {
if (visible === null) return null;
const out = [];
const seen = /* @__PURE__ */ new Set();
for (const id of visible) {
const mapped = map.get(id);
if (mapped && !seen.has(mapped)) {
seen.add(mapped);
out.push(mapped);
}
}
return out;
};
const modelPolicyWarnings = [...baseWarnings, ...picker.warnings];
return {
enabled: true,
features: builder.getFeatures(),
configuration,
modelPolicy: builderToModelPolicy(builder),
picker: {
visibleTools: normalize(picker.visibleTools, toolKeyMap),
visibleAgents: normalize(picker.visibleAgents, agentKeyMap),
visibleWorkflows: normalize(picker.visibleWorkflows, workflowKeyMap)
},
...modelPolicyWarnings.length > 0 ? { modelPolicyWarnings } : {}
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting builder settings");
}
}
});
var GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/editor/builder/models/available",
responseType: "json",
responseSchema: chunkMN7K3ZEC_cjs.builderAvailableModelsResponseSchema,
summary: "List builder-available AI models",
description: "Returns AI providers/models filtered by the active agent-builder model policy.",
tags: ["Editor"],
requiresAuth: true,
requiresPermission: "stored-agents:read",
handler: async ({ mastra }) => {
try {
const providers = (await chunkBPREBJ3Z_cjs.buildProvidersList(mastra)).filter((provider) => provider.connected);
const policy = await resolveBuilderModelPolicy(mastra.getEditor());
if (!policy.active || !policy.allowed || policy.allowed.length === 0) {
return { providers };
}
const { isModelAllowed } = await import('@mastra/core/agent-builder/ee');
const filtered = providers.map((provider) => ({
...provider,
models: provider.models.filter((modelId) => isModelAllowed(policy.allowed, { provider: provider.id, modelId }))
})).filter((provider) => provider.models.length > 0);
return { providers: filtered };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error fetching available models");
}
}
});
var GET_INFRASTRUCTURE_STATUS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/editor/builder/infrastructure",
responseType: "json",
responseSchema: chunkMN7K3ZEC_cjs.infrastructureStatusResponseSchema,
summary: "Get infrastructure status",
description: "Agent Builder infrastructure configuration and lightweight runtime status.",
tags: ["Editor"],
requiresAuth: true,
requiresPermission: "infrastructure:read",
handler: async ({ mastra }) => {
try {
const formatConfigValue = (value) => {
if (value === null || value === void 0) return "not set";
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return String(value);
if (Array.isArray(value)) return `${value.length} item${value.length === 1 ? "" : "s"}`;
return value.constructor?.name && value.constructor.name !== "Object" ? value.constructor.name : "configured";
};
const getProviderName = (value) => {
if (!value) return null;
if (typeof value === "object" && "provider" in value && typeof value.provider === "string")
return value.provider;
if (typeof value === "object" && "constructor" in value) {
const name = value.constructor?.name;
return name && name !== "Object" ? name : "configured";
}
return null;
};
const getConfigEntries = (config, omittedKeys = []) => Object.entries(config).filter(([key, value]) => !omittedKeys.includes(key) && value !== void 0 && value !== null).map(([key, value]) => ({ key, value: formatConfigValue(value) }));
const channelProviders = mastra.getChannelProviders() ?? {};
const channels = {
providers: Object.entries(channelProviders).map(([id, provider]) => {
const info = provider.getInfo?.();
const routes = provider.getRoutes?.() ?? [];
return {
id: info?.id ?? id,
name: info?.name ?? id,
isConfigured: info?.isConfigured ?? false,
routeCount: routes.length
};
}).filter((provider) => provider.isConfigured)
};
const editor = mastra.getEditor();
let browser = {
type: null,
provider: null,
env: null,
registered: false,
availableProviders: [],
config: []
};
let workspace = {
type: null,
workspaceId: null,
name: null,
source: null,
registered: false,
hasFilesystem: false,
hasSandbox: false,
filesystemProvider: null,
sandboxProvider: null,
config: []
};
let registries = {
skillsSh: { enabled: false }
};
if (editor?.resolveBuilder) {
const browsers = editor.__browsers;
const builder = await editor.resolveBuilder();
const builderRegistries = builder?.getRegistries?.();
registries = {
skillsSh: { enabled: builderRegistries?.skillsSh?.enabled === true }
};
const configuration = builder?.getConfiguration?.()?.agent;
const browserRef = configuration?.browser;
const browserConfig = browserRef?.config ?? {};
const providerId = browserConfig.provider ?? null;
browser = {
type: browserRef?.type ?? null,
provider: providerId,
env: browserConfig.env ?? null,
registered: providerId ? !!browsers?.has(providerId) : false,
availableProviders: browsers ? Array.from(browsers.keys()) : [],
config: getConfigEntries(browserConfig, ["provider", "env"])
};
const workspaceRef = configuration?.workspace;
const workspaceConfig = workspaceRef?.config ?? {};
const registeredWorkspaces = mastra.listWorkspaces();
const registeredWorkspace = workspaceRef?.workspaceId ? registeredWorkspaces[workspaceRef.workspaceId] : void 0;
const filesystem = registeredWorkspace?.workspace.filesystem ?? workspaceConfig.filesystem;
const sandbox = registeredWorkspace?.workspace.sandbox ?? workspaceConfig.sandbox;
const filesystemConfig = typeof workspaceConfig.filesystem === "object" && workspaceConfig.filesystem && "config" in workspaceConfig.filesystem ? workspaceConfig.filesystem.config : {};
const sandboxConfig = typeof workspaceConfig.sandbox === "object" && workspaceConfig.sandbox && "config" in workspaceConfig.sandbox ? workspaceConfig.sandbox.config : {};
workspace = {
type: workspaceRef?.type ?? null,
workspaceId: workspaceRef?.workspaceId ?? null,
name: workspaceConfig.name ?? registeredWorkspace?.workspace.name ?? null,
source: registeredWorkspace?.source ?? null,
registered: !!registeredWorkspace,
hasFilesystem: !!filesystem,
hasSandbox: !!sandbox,
filesystemProvider: getProviderName(filesystem),
sandboxProvider: getProviderName(sandbox),
config: [
...getConfigEntries(filesystemConfig).map((entry) => ({ ...entry, key: `filesystem.${entry.key}` })),
...getConfigEntries(sandboxConfig).map((entry) => ({ ...entry, key: `sandbox.${entry.key}` }))
]
};
}
return { channels, browser, workspace, registries };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting infrastructure status");
}
}
});
exports.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE = GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE;
exports.GET_EDITOR_BUILDER_SETTINGS_ROUTE = GET_EDITOR_BUILDER_SETTINGS_ROUTE;
exports.GET_INFRASTRUCTURE_STATUS_ROUTE = GET_INFRASTRUCTURE_STATUS_ROUTE;
exports.isBuilderFeatureEnabled = isBuilderFeatureEnabled;
exports.requireBuilderFeature = requireBuilderFeature;
//# sourceMappingURL=chunk-KI6RMI7A.cjs.map
//# sourceMappingURL=chunk-KI6RMI7A.cjs.map
{"version":3,"sources":["../src/server/utils/resolve-builder-model-policy.ts","../src/server/handlers/editor-builder.ts"],"names":["agentFeaturesSchema","HTTPException","createRoute","builderSettingsResponseSchema","handleError","builderAvailableModelsResponseSchema","buildProvidersList","infrastructureStatusResponseSchema"],"mappings":"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","file":"chunk-KI6RMI7A.cjs","sourcesContent":["import type { BuilderModelPolicy } from '@mastra/core/agent-builder/ee';\nimport type { IMastraEditor } from '@mastra/core/editor';\n\n/**\n * Server-side wrapper around `builderToModelPolicy`.\n *\n * Handles the optional `IMastraEditor` builder API surface (older / OSS editors\n * may not implement `hasEnabledBuilderConfig` / `resolveBuilder`) and returns\n * a uniform `BuilderModelPolicy` to every call site.\n *\n * Returns `{ active: false }` whenever:\n * - no editor is configured,\n * - the editor doesn't expose builder methods,\n * - the builder config is disabled, or\n * - resolving the builder fails / yields nothing.\n *\n * The `@mastra/core/agent-builder/ee` subpath is loaded lazily so this module\n * remains importable on `@mastra/core` versions that pre-date the subpath\n * (the subpath was added in core 1.34.0). The dynamic import is only reached\n * once an editor is actually configured, by which point a compatible core is\n * guaranteed.\n */\nexport async function resolveBuilderModelPolicy(editor: IMastraEditor | undefined): Promise<BuilderModelPolicy> {\n if (!editor) return { active: false };\n if (typeof editor.resolveBuilder !== 'function') return { active: false };\n if (typeof editor.hasEnabledBuilderConfig === 'function' && !editor.hasEnabledBuilderConfig()) {\n return { active: false };\n }\n\n // Degrade to inactive on builder-resolution failure rather than letting the\n // rejection escape: agent execution routes seed this on every request, so a\n // transient failure must not 500 the entire route.\n try {\n const builder = await editor.resolveBuilder();\n const { builderToModelPolicy } = await import('@mastra/core/agent-builder/ee');\n return builderToModelPolicy(builder);\n } catch {\n return { active: false };\n }\n}\n","import type { Mastra } from '@mastra/core';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentFeaturesSchema,\n builderAvailableModelsResponseSchema,\n builderSettingsResponseSchema,\n infrastructureStatusResponseSchema,\n} from '../schemas/editor-builder';\nimport type { AgentFeatures, InfrastructureStatus } from '../schemas/editor-builder';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { resolveBuilderModelPolicy } from '../utils/resolve-builder-model-policy';\nimport { buildProvidersList } from './agents';\nimport { handleError } from './error';\n\n/**\n * Resolve the active builder feature flags. Returns `null` when the editor is\n * absent, the builder is disabled, or no features are configured.\n */\nasync function resolveBuilderFeatures(mastra: Mastra): Promise<AgentFeatures | null> {\n const editor = mastra.getEditor();\n if (!editor || typeof editor.resolveBuilder !== 'function') return null;\n if (!editor.hasEnabledBuilderConfig?.()) return null;\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) return null;\n const features = builder.getFeatures?.()?.agent;\n if (!features) return null;\n // Validate the shape so unknown keys cannot smuggle through.\n const parsed = agentFeaturesSchema.safeParse(features);\n return parsed.success ? parsed.data : null;\n}\n\n/**\n * Returns whether a given agent-builder feature is enabled. Used by list /\n * get-by-id handlers to soft-gate response enrichment (omit fields, ignore\n * favoritedOnly / pinFavoritedFor params) when the feature is off.\n */\nexport async function isBuilderFeatureEnabled(mastra: Mastra, feature: keyof AgentFeatures): Promise<boolean> {\n const features = await resolveBuilderFeatures(mastra);\n return features?.[feature] === true;\n}\n\n/**\n * Hard-gate helper for mutation routes that must not exist when the feature\n * is off. Throws `HTTPException(404)` so we don't leak the existence of the\n * feature surface (matches behavior of unregistered routes).\n */\nexport async function requireBuilderFeature(mastra: Mastra, feature: keyof AgentFeatures): Promise<void> {\n if (!(await isBuilderFeatureEnabled(mastra, feature))) {\n throw new HTTPException(404, { message: 'Not Found' });\n }\n}\n\n/**\n * GET /editor/builder/settings\n *\n * Returns the agent builder settings configured by the admin.\n * Used by frontend to determine which features to display.\n */\nexport const GET_EDITOR_BUILDER_SETTINGS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/settings',\n responseType: 'json',\n responseSchema: builderSettingsResponseSchema,\n summary: 'Get agent builder settings',\n description: 'Returns the agent builder feature flags and configuration for UI gating',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n const editor = mastra.getEditor();\n\n // No editor configured\n if (!editor) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Editor doesn't support builder (older version or OSS)\n if (typeof editor.resolveBuilder !== 'function') {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Check if builder is enabled in config\n if (!editor.hasEnabledBuilderConfig?.()) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Resolve the builder instance\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n const baseWarnings = builder.getModelPolicyWarnings?.() ?? [];\n const configuration = builder.getConfiguration();\n\n // Picker allowlists are written against entity `.id` (what users see in\n // the UI, URLs, traces). The client filters list responses by their\n // response keys, which are not always `.id`:\n // - GET /agents keys by `agent.id`\n // - GET /tools keys by registration key (values include `id`)\n // - GET /workflows keys by registration key (values omit `id`)\n // To keep the client filter simple, we accept `.id` (fallback to\n // registration key) for matching, but emit visible IDs as response keys\n // so `Object.keys(data)` lines up.\n type AliasPair = { id: string; key: string };\n const collectAliases = (registry: Record<string, unknown>): AliasPair[] =>\n Object.entries(registry).map(([key, entity]) => ({\n id: (entity as { id?: string }).id || key,\n key,\n }));\n\n const toolAliases = collectAliases(mastra.listTools() ?? {});\n const agentAliases = collectAliases(mastra.listAgents() ?? {});\n const workflowAliases = collectAliases(mastra.listWorkflows() ?? {});\n\n // Tools/workflows responses are keyed by registration key. Agents\n // response is keyed by `.id`.\n const toResponseKey = (aliases: AliasPair[], byId: 'id' | 'key') => {\n const map = new Map<string, string>();\n for (const a of aliases) {\n map.set(a.id, byId === 'id' ? a.id : a.key);\n map.set(a.key, byId === 'id' ? a.id : a.key);\n }\n return map;\n };\n const toolKeyMap = toResponseKey(toolAliases, 'key');\n const agentKeyMap = toResponseKey(agentAliases, 'id');\n const workflowKeyMap = toResponseKey(workflowAliases, 'key');\n\n // Lazy-load the EE subpath so this module remains importable on\n // `@mastra/core` versions that pre-date it (added in core 1.34.0).\n // We only reach here after `builder.enabled` is true, which guarantees\n // a compatible core.\n const { builderToModelPolicy, resolvePickerVisibility } = await import('@mastra/core/agent-builder/ee');\n\n const picker = resolvePickerVisibility({\n config: configuration?.agent,\n registeredToolIds: toolAliases.flatMap(a => [a.id, a.key]),\n registeredAgentIds: agentAliases.flatMap(a => [a.id, a.key]),\n registeredWorkflowIds: workflowAliases.flatMap(a => [a.id, a.key]),\n });\n\n const normalize = (visible: string[] | null, map: Map<string, string>): string[] | null => {\n if (visible === null) return null;\n const out: string[] = [];\n const seen = new Set<string>();\n for (const id of visible) {\n const mapped = map.get(id);\n if (mapped && !seen.has(mapped)) {\n seen.add(mapped);\n out.push(mapped);\n }\n }\n return out;\n };\n\n const modelPolicyWarnings = [...baseWarnings, ...picker.warnings];\n\n return {\n enabled: true,\n features: builder.getFeatures(),\n configuration,\n modelPolicy: builderToModelPolicy(builder),\n picker: {\n visibleTools: normalize(picker.visibleTools, toolKeyMap),\n visibleAgents: normalize(picker.visibleAgents, agentKeyMap),\n visibleWorkflows: normalize(picker.visibleWorkflows, workflowKeyMap),\n },\n ...(modelPolicyWarnings.length > 0 ? { modelPolicyWarnings } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error getting builder settings');\n }\n },\n});\n\n/**\n * GET /editor/builder/models/available\n *\n * Returns the configured AI providers/models the agent builder may use. The\n * server is the single authority: it scopes the list to providers with a\n * configured API key (`connected`) and applies the active builder model\n * policy via `isModelAllowed`, so the Studio surfaces can render the response\n * verbatim without importing any EE matcher into the browser.\n *\n * - Providers without a configured API key are always omitted — the builder\n * decides the agent's model from this list, so an unconnected provider would\n * produce an agent that can never run.\n * - Policy inactive (or no allowlist) ⇒ all connected providers are returned.\n * - Policy active with an allowlist ⇒ each connected provider's models are\n * filtered, and providers left with no allowed models are omitted entirely.\n */\nexport const GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/models/available',\n responseType: 'json',\n responseSchema: builderAvailableModelsResponseSchema,\n summary: 'List builder-available AI models',\n description: 'Returns AI providers/models filtered by the active agent-builder model policy.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n // Only surface providers whose API key is configured (`connected`). The\n // agent builder decides the agent's model from this list, so including\n // providers without a key lets it pick a model that can never run. We\n // scope to connected providers so every choice is actually usable.\n const providers = (await buildProvidersList(mastra)).filter(provider => provider.connected);\n const policy = await resolveBuilderModelPolicy(mastra.getEditor());\n\n // Inactive policy (or no allowlist) ⇒ no allowlist filtering to apply.\n if (!policy.active || !policy.allowed || policy.allowed.length === 0) {\n return { providers };\n }\n\n // Lazy-load the EE matcher (server-only); mirrors the convention used by\n // resolve-builder-model-policy and the settings handler.\n const { isModelAllowed } = await import('@mastra/core/agent-builder/ee');\n\n const filtered = providers\n .map(provider => ({\n ...provider,\n models: provider.models.filter(modelId => isModelAllowed(policy.allowed, { provider: provider.id, modelId })),\n }))\n .filter(provider => provider.models.length > 0);\n\n return { providers: filtered };\n } catch (error) {\n return handleError(error, 'Error fetching available models');\n }\n },\n});\n\n/**\n * GET /editor/builder/infrastructure\n *\n * Returns the runtime status of Mastra-opinionated primitives (channels,\n * browser providers, workspaces). Admin-only; surfaced in Studio Settings so\n * admins can sanity-check what's wired up to the running server.\n */\nexport const GET_INFRASTRUCTURE_STATUS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/infrastructure',\n responseType: 'json',\n responseSchema: infrastructureStatusResponseSchema,\n summary: 'Get infrastructure status',\n description: 'Agent Builder infrastructure configuration and lightweight runtime status.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'infrastructure:read',\n handler: async ({ mastra }) => {\n try {\n const formatConfigValue = (value: unknown): string => {\n if (value === null || value === undefined) return 'not set';\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (Array.isArray(value)) return `${value.length} item${value.length === 1 ? '' : 's'}`;\n return value.constructor?.name && value.constructor.name !== 'Object' ? value.constructor.name : 'configured';\n };\n\n const getProviderName = (value: unknown): string | null => {\n if (!value) return null;\n if (typeof value === 'object' && 'provider' in value && typeof value.provider === 'string')\n return value.provider;\n if (typeof value === 'object' && 'constructor' in value) {\n const name = (value as { constructor?: { name?: string } }).constructor?.name;\n return name && name !== 'Object' ? name : 'configured';\n }\n return null;\n };\n\n const getConfigEntries = (config: Record<string, unknown>, omittedKeys: string[] = []) =>\n Object.entries(config)\n .filter(([key, value]) => !omittedKeys.includes(key) && value !== undefined && value !== null)\n .map(([key, value]) => ({ key, value: formatConfigValue(value) }));\n\n const channelProviders = mastra.getChannelProviders() ?? {};\n const channels: InfrastructureStatus['channels'] = {\n providers: Object.entries(channelProviders)\n .map(([id, provider]) => {\n const info = provider.getInfo?.();\n const routes = provider.getRoutes?.() ?? [];\n return {\n id: info?.id ?? id,\n name: info?.name ?? id,\n isConfigured: info?.isConfigured ?? false,\n routeCount: routes.length,\n };\n })\n .filter(provider => provider.isConfigured),\n };\n\n const editor = mastra.getEditor();\n let browser: InfrastructureStatus['browser'] = {\n type: null,\n provider: null,\n env: null,\n registered: false,\n availableProviders: [],\n config: [],\n };\n let workspace: InfrastructureStatus['workspace'] = {\n type: null,\n workspaceId: null,\n name: null,\n source: null,\n registered: false,\n hasFilesystem: false,\n hasSandbox: false,\n filesystemProvider: null,\n sandboxProvider: null,\n config: [],\n };\n let registries: InfrastructureStatus['registries'] = {\n skillsSh: { enabled: false },\n };\n\n if (editor?.resolveBuilder) {\n const browsers = (editor as unknown as { __browsers?: Map<string, unknown> }).__browsers;\n const builder = await editor.resolveBuilder();\n const builderRegistries = builder?.getRegistries?.();\n registries = {\n skillsSh: { enabled: builderRegistries?.skillsSh?.enabled === true },\n };\n const configuration = builder?.getConfiguration?.()?.agent as\n | {\n browser?: { type?: string; config?: { provider?: string; env?: string } };\n workspace?: {\n type?: string;\n workspaceId?: string;\n config?: { name?: string; filesystem?: unknown; sandbox?: unknown };\n };\n }\n | undefined;\n\n const browserRef = configuration?.browser;\n const browserConfig = browserRef?.config ?? {};\n const providerId = browserConfig.provider ?? null;\n browser = {\n type: browserRef?.type ?? null,\n provider: providerId,\n env: browserConfig.env ?? null,\n registered: providerId ? !!browsers?.has(providerId) : false,\n availableProviders: browsers ? Array.from(browsers.keys()) : [],\n config: getConfigEntries(browserConfig, ['provider', 'env']),\n };\n\n const workspaceRef = configuration?.workspace;\n const workspaceConfig = workspaceRef?.config ?? {};\n const registeredWorkspaces = mastra.listWorkspaces();\n const registeredWorkspace = workspaceRef?.workspaceId\n ? registeredWorkspaces[workspaceRef.workspaceId]\n : undefined;\n const filesystem = registeredWorkspace?.workspace.filesystem ?? workspaceConfig.filesystem;\n const sandbox = registeredWorkspace?.workspace.sandbox ?? workspaceConfig.sandbox;\n const filesystemConfig =\n typeof workspaceConfig.filesystem === 'object' &&\n workspaceConfig.filesystem &&\n 'config' in workspaceConfig.filesystem\n ? (workspaceConfig.filesystem.config as Record<string, unknown>)\n : {};\n const sandboxConfig =\n typeof workspaceConfig.sandbox === 'object' && workspaceConfig.sandbox && 'config' in workspaceConfig.sandbox\n ? (workspaceConfig.sandbox.config as Record<string, unknown>)\n : {};\n workspace = {\n type: workspaceRef?.type ?? null,\n workspaceId: workspaceRef?.workspaceId ?? null,\n name: workspaceConfig.name ?? registeredWorkspace?.workspace.name ?? null,\n source: registeredWorkspace?.source ?? null,\n registered: !!registeredWorkspace,\n hasFilesystem: !!filesystem,\n hasSandbox: !!sandbox,\n filesystemProvider: getProviderName(filesystem),\n sandboxProvider: getProviderName(sandbox),\n config: [\n ...getConfigEntries(filesystemConfig).map(entry => ({ ...entry, key: `filesystem.${entry.key}` })),\n ...getConfigEntries(sandboxConfig).map(entry => ({ ...entry, key: `sandbox.${entry.key}` })),\n ],\n };\n }\n\n return { channels, browser, workspace, registries };\n } catch (error) {\n return handleError(error, 'Error getting infrastructure status');\n }\n },\n});\n"]}
'use strict';
var chunkGOX5ZFQP_cjs = require('./chunk-GOX5ZFQP.cjs');
var chunk2XZ2466F_cjs = require('./chunk-2XZ2466F.cjs');
var chunk3JVOIOO6_cjs = require('./chunk-3JVOIOO6.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
// src/server/handlers/stored-scorers.ts
var SCORER_SNAPSHOT_CONFIG_FIELDS = [
"name",
"description",
"type",
"model",
"instructions",
"scoreRange",
"presetConfig",
"defaultSampling"
];
var LIST_STORED_SCORERS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/scorers",
responseType: "json",
queryParamSchema: chunkGOX5ZFQP_cjs.listStoredScorersQuerySchema,
responseSchema: chunkGOX5ZFQP_cjs.listStoredScorersResponseSchema,
summary: "List stored scorer definitions",
description: "Returns a paginated list of all scorer definitions stored in the database",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({ mastra, page, perPage, orderBy, status, authorId, metadata, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scope = await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext);
const result = await scorerStore.listResolved({
page,
perPage,
orderBy,
status,
authorId,
metadata: chunkEVOVAWN6_cjs.scopeStoredResourceMetadata(metadata, scope)
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing stored scorer definitions");
}
}
});
var GET_STORED_SCORER_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/scorers/:storedScorerId",
responseType: "json",
pathParamSchema: chunkGOX5ZFQP_cjs.storedScorerIdPathParams,
queryParamSchema: chunk3JVOIOO6_cjs.statusQuerySchema,
responseSchema: chunkGOX5ZFQP_cjs.getStoredScorerResponseSchema,
summary: "Get stored scorer definition by ID",
description: "Returns a specific scorer definition from storage by its unique identifier. Use ?status=draft to resolve with the latest (draft) version, or ?status=published (default) for the active published version.",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({ mastra, storedScorerId, status, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getByIdResolved(storedScorerId, { status });
if (!scorer) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(scorer, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
return scorer;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting stored scorer definition");
}
}
});
var CREATE_STORED_SCORER_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/scorers",
responseType: "json",
bodySchema: chunkGOX5ZFQP_cjs.createStoredScorerBodySchema,
responseSchema: chunkGOX5ZFQP_cjs.createStoredScorerResponseSchema,
summary: "Create stored scorer definition",
description: "Creates a new scorer definition in storage with the provided configuration",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({
mastra,
id: providedId,
authorId,
metadata,
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling,
requestContext
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const id = providedId || chunkEVOVAWN6_cjs.toSlug(name);
if (!id) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "Could not derive scorer definition ID from name. Please provide an explicit id."
});
}
const existing = await scorerStore.getById(id);
if (existing) {
throw new chunk64ITUOXI_cjs.HTTPException(409, { message: `Scorer definition with id ${id} already exists` });
}
await scorerStore.create({
scorerDefinition: {
id,
authorId,
metadata: chunkEVOVAWN6_cjs.scopeStoredResourceMetadata(metadata, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext)),
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling
}
});
const resolved = await scorerStore.getByIdResolved(id, { status: "draft" });
if (!resolved) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to resolve created scorer definition" });
}
return resolved;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating stored scorer definition");
}
}
});
var UPDATE_STORED_SCORER_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "PATCH",
path: "/stored/scorers/:storedScorerId",
responseType: "json",
pathParamSchema: chunkGOX5ZFQP_cjs.storedScorerIdPathParams,
bodySchema: chunkGOX5ZFQP_cjs.updateStoredScorerBodySchema,
responseSchema: chunkGOX5ZFQP_cjs.updateStoredScorerResponseSchema,
summary: "Update stored scorer definition",
description: "Updates an existing scorer definition in storage with the provided fields",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({
mastra,
storedScorerId,
// Metadata-level fields
authorId,
metadata,
// Config fields (snapshot-level)
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling,
requestContext
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const existing = await scorerStore.getById(storedScorerId);
if (!existing) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });
}
const scope = await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext);
chunkEVOVAWN6_cjs.assertStoredResourceScope(existing, scope);
const scopedMetadata = metadata !== void 0 ? chunkEVOVAWN6_cjs.scopeStoredResourceMetadata({ ...existing.metadata ?? {}, ...metadata }, scope) : void 0;
const updatedScorer = await scorerStore.update({
id: storedScorerId,
authorId,
...scopedMetadata !== void 0 ? { metadata: scopedMetadata } : {},
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling
});
const configFields = {
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling
};
const providedConfigFields = Object.fromEntries(Object.entries(configFields).filter(([_, v]) => v !== void 0));
await chunk2XZ2466F_cjs.handleAutoVersioning(
scorerStore,
storedScorerId,
"scorerDefinitionId",
SCORER_SNAPSHOT_CONFIG_FIELDS,
existing,
updatedScorer,
providedConfigFields
);
const editor = mastra.getEditor();
if (editor) {
editor.scorer.clearCache(storedScorerId);
}
const resolved = await scorerStore.getByIdResolved(storedScorerId, { status: "draft" });
if (!resolved) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to resolve updated scorer definition" });
}
return resolved;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error updating stored scorer definition");
}
}
});
var DELETE_STORED_SCORER_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/stored/scorers/:storedScorerId",
responseType: "json",
pathParamSchema: chunkGOX5ZFQP_cjs.storedScorerIdPathParams,
responseSchema: chunkGOX5ZFQP_cjs.deleteStoredScorerResponseSchema,
summary: "Delete stored scorer definition",
description: "Deletes a scorer definition from storage by its unique identifier",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({ mastra, storedScorerId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const existing = await scorerStore.getById(storedScorerId);
if (!existing) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(existing, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
await scorerStore.delete(storedScorerId);
mastra.getEditor()?.scorer.clearCache(storedScorerId);
return { success: true, message: `Scorer definition ${storedScorerId} deleted successfully` };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error deleting stored scorer definition");
}
}
});
exports.CREATE_STORED_SCORER_ROUTE = CREATE_STORED_SCORER_ROUTE;
exports.DELETE_STORED_SCORER_ROUTE = DELETE_STORED_SCORER_ROUTE;
exports.GET_STORED_SCORER_ROUTE = GET_STORED_SCORER_ROUTE;
exports.LIST_STORED_SCORERS_ROUTE = LIST_STORED_SCORERS_ROUTE;
exports.UPDATE_STORED_SCORER_ROUTE = UPDATE_STORED_SCORER_ROUTE;
//# sourceMappingURL=chunk-LJNTC2CX.cjs.map
//# sourceMappingURL=chunk-LJNTC2CX.cjs.map
{"version":3,"sources":["../src/server/handlers/stored-scorers.ts"],"names":["createRoute","listStoredScorersQuerySchema","listStoredScorersResponseSchema","HTTPException","getStoredResourceScope","scopeStoredResourceMetadata","handleError","storedScorerIdPathParams","statusQuerySchema","getStoredScorerResponseSchema","assertStoredResourceScope","createStoredScorerBodySchema","createStoredScorerResponseSchema","toSlug","updateStoredScorerBodySchema","updateStoredScorerResponseSchema","handleAutoVersioning","deleteStoredScorerResponseSchema"],"mappings":"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","file":"chunk-LJNTC2CX.cjs","sourcesContent":["import { HTTPException } from '../http-exception';\nimport {\n storedScorerIdPathParams,\n statusQuerySchema,\n listStoredScorersQuerySchema,\n createStoredScorerBodySchema,\n updateStoredScorerBodySchema,\n listStoredScorersResponseSchema,\n getStoredScorerResponseSchema,\n createStoredScorerResponseSchema,\n updateStoredScorerResponseSchema,\n deleteStoredScorerResponseSchema,\n} from '../schemas/stored-scorers';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope, scopeStoredResourceMetadata, toSlug } from '../utils';\n\nimport { handleError } from './error';\nimport { handleAutoVersioning } from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\nconst SCORER_SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'type',\n 'model',\n 'instructions',\n 'scoreRange',\n 'presetConfig',\n 'defaultSampling',\n] as const;\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/scorers - List all stored scorer definitions\n */\nexport const LIST_STORED_SCORERS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers',\n responseType: 'json',\n queryParamSchema: listStoredScorersQuerySchema,\n responseSchema: listStoredScorersResponseSchema,\n summary: 'List stored scorer definitions',\n description: 'Returns a paginated list of all scorer definitions stored in the database',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, page, perPage, orderBy, status, authorId, metadata, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scope = await getStoredResourceScope(mastra, requestContext);\n const result = await scorerStore.listResolved({\n page,\n perPage,\n orderBy,\n status,\n authorId,\n metadata: scopeStoredResourceMetadata(metadata, scope),\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing stored scorer definitions');\n }\n },\n});\n\n/**\n * GET /stored/scorers/:storedScorerId - Get a stored scorer definition by ID\n */\nexport const GET_STORED_SCORER_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n queryParamSchema: statusQuerySchema,\n responseSchema: getStoredScorerResponseSchema,\n summary: 'Get stored scorer definition by ID',\n description:\n 'Returns a specific scorer definition from storage by its unique identifier. Use ?status=draft to resolve with the latest (draft) version, or ?status=published (default) for the active published version.',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, storedScorerId, status, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getByIdResolved(storedScorerId, { status });\n\n if (!scorer) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n return scorer;\n } catch (error) {\n return handleError(error, 'Error getting stored scorer definition');\n }\n },\n});\n\n/**\n * POST /stored/scorers - Create a new stored scorer definition\n */\nexport const CREATE_STORED_SCORER_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers',\n responseType: 'json',\n bodySchema: createStoredScorerBodySchema,\n responseSchema: createStoredScorerResponseSchema,\n summary: 'Create stored scorer definition',\n description: 'Creates a new scorer definition in storage with the provided configuration',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({\n mastra,\n id: providedId,\n authorId,\n metadata,\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n requestContext,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Derive ID from name if not explicitly provided\n const id = providedId || toSlug(name);\n\n if (!id) {\n throw new HTTPException(400, {\n message: 'Could not derive scorer definition ID from name. Please provide an explicit id.',\n });\n }\n\n // Check if scorer definition with this ID already exists\n const existing = await scorerStore.getById(id);\n if (existing) {\n throw new HTTPException(409, { message: `Scorer definition with id ${id} already exists` });\n }\n\n await scorerStore.create({\n scorerDefinition: {\n id,\n authorId,\n metadata: scopeStoredResourceMetadata(metadata, await getStoredResourceScope(mastra, requestContext)),\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n },\n });\n\n // Return the resolved scorer definition (thin record + version config)\n // Use draft status since newly created entities start as drafts\n const resolved = await scorerStore.getByIdResolved(id, { status: 'draft' });\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve created scorer definition' });\n }\n\n return resolved;\n } catch (error) {\n return handleError(error, 'Error creating stored scorer definition');\n }\n },\n});\n\n/**\n * PATCH /stored/scorers/:storedScorerId - Update a stored scorer definition\n */\nexport const UPDATE_STORED_SCORER_ROUTE = createRoute({\n method: 'PATCH',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n bodySchema: updateStoredScorerBodySchema,\n responseSchema: updateStoredScorerResponseSchema,\n summary: 'Update stored scorer definition',\n description: 'Updates an existing scorer definition in storage with the provided fields',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({\n mastra,\n storedScorerId,\n // Metadata-level fields\n authorId,\n metadata,\n // Config fields (snapshot-level)\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n requestContext,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Check if scorer definition exists\n const existing = await scorerStore.getById(storedScorerId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n const scope = await getStoredResourceScope(mastra, requestContext);\n assertStoredResourceScope(existing, scope);\n const scopedMetadata =\n metadata !== undefined\n ? scopeStoredResourceMetadata({ ...(existing.metadata ?? {}), ...metadata }, scope)\n : undefined;\n\n // Update the scorer definition with both metadata-level and config-level fields\n const updatedScorer = await scorerStore.update({\n id: storedScorerId,\n authorId,\n ...(scopedMetadata !== undefined ? { metadata: scopedMetadata } : {}),\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n });\n\n // Build the snapshot config for auto-versioning comparison\n const configFields = {\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n };\n\n // Filter out undefined values to get only the config fields that were provided\n const providedConfigFields = Object.fromEntries(Object.entries(configFields).filter(([_, v]) => v !== undefined));\n\n // Handle auto-versioning with retry logic for race conditions\n // This creates a new version if there are meaningful config changes.\n // It does NOT update activeVersionId — the version stays as a draft until explicitly published.\n await handleAutoVersioning(\n scorerStore as unknown as VersionedStoreInterface,\n storedScorerId,\n 'scorerDefinitionId',\n SCORER_SNAPSHOT_CONFIG_FIELDS,\n existing,\n updatedScorer,\n providedConfigFields,\n );\n\n // Clear the cached scorer instance so the next request gets the updated config\n const editor = mastra.getEditor();\n if (editor) {\n editor.scorer.clearCache(storedScorerId);\n }\n\n // Return the resolved scorer definition with the latest (draft) version so the UI sees its edits\n const resolved = await scorerStore.getByIdResolved(storedScorerId, { status: 'draft' });\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve updated scorer definition' });\n }\n\n return resolved;\n } catch (error) {\n return handleError(error, 'Error updating stored scorer definition');\n }\n },\n});\n\n/**\n * DELETE /stored/scorers/:storedScorerId - Delete a stored scorer definition\n */\nexport const DELETE_STORED_SCORER_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n responseSchema: deleteStoredScorerResponseSchema,\n summary: 'Delete stored scorer definition',\n description: 'Deletes a scorer definition from storage by its unique identifier',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, storedScorerId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Check if scorer definition exists\n const existing = await scorerStore.getById(storedScorerId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));\n\n await scorerStore.delete(storedScorerId);\n\n // Clear the cached scorer instance\n mastra.getEditor()?.scorer.clearCache(storedScorerId);\n\n return { success: true, message: `Scorer definition ${storedScorerId} deleted successfully` };\n } catch (error) {\n return handleError(error, 'Error deleting stored scorer definition');\n }\n },\n});\n"]}
import { apiSchemaManifestResponseSchema, systemPackagesResponseSchema } from './chunk-KXKAQQMV.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { readFileSync } from 'fs';
var SOURCE_PROVIDER_CAPABILITIES_TIMEOUT_MS = 3e3;
async function getSourceProviderCapabilities(getCapabilities) {
let timeout;
try {
return await Promise.race([
getCapabilities(),
new Promise((_, reject) => {
timeout = setTimeout(
() => reject(new Error("Source provider capabilities timed out")),
SOURCE_PROVIDER_CAPABILITIES_TIMEOUT_MS
);
})
]);
} finally {
if (timeout) clearTimeout(timeout);
}
}
async function getEditorSourceCapabilities(editor) {
const editorSource = editor.getSource?.();
if (!editorSource) return void 0;
if (editorSource === "db") {
return {
source: editorSource,
storage: "database",
canSave: true,
canOpenChangeRequest: false
};
}
const configuredProvider = editor.getSourceControlProvider?.();
if (configuredProvider) {
const provider = {
id: configuredProvider.id,
displayName: configuredProvider.displayName
};
try {
const capabilities = await getSourceProviderCapabilities(() => configuredProvider.getCapabilities());
return {
source: editorSource,
storage: "source-provider",
provider,
canSave: capabilities.canWrite,
canOpenChangeRequest: capabilities.canOpenChangeRequest,
unavailableReason: capabilities.canWrite ? void 0 : capabilities.reason
};
} catch {
return {
source: editorSource,
storage: "source-provider",
provider,
canSave: false,
canOpenChangeRequest: false,
unavailableReason: "Unable to load source provider capabilities."
};
}
}
const sourceProvider = process.env.MASTRA_SOURCE_PROVIDER;
if (sourceProvider) {
return {
source: editorSource,
storage: "source-provider",
provider: {
id: sourceProvider,
displayName: process.env.MASTRA_SOURCE_PROVIDER_NAME || sourceProvider
},
canSave: process.env.MASTRA_SOURCE_STORAGE_CAN_WRITE !== "false",
canOpenChangeRequest: process.env.MASTRA_SOURCE_STORAGE_CAN_OPEN_CHANGE_REQUEST === "true"
};
}
const isHosted = process.env.MASTRA_DEPLOYMENT_ID || process.env.MASTRA_CLOUD_API_ENDPOINT || process.env.MASTRA_PLATFORM_PROJECT_ID;
if (isHosted) {
return {
source: editorSource,
storage: "unavailable",
canSave: false,
canOpenChangeRequest: false,
unavailableReason: "Code-source editing requires a source provider in hosted Studio."
};
}
return {
source: editorSource,
storage: "filesystem",
canSave: true,
canOpenChangeRequest: false
};
}
var GET_API_SCHEMA_ROUTE = createRoute({
method: "GET",
path: "/system/api-schema",
responseType: "json",
responseSchema: apiSchemaManifestResponseSchema,
summary: "Get API schema manifest",
description: "Returns the route-contract-derived API schema manifest for the machine-readable CLI",
tags: ["System"],
requiresAuth: true,
handler: async () => {
const { buildApiSchemaManifest } = await import('./api-schema-manifest-AAUEOERA.js');
return buildApiSchemaManifest();
}
});
var GET_SYSTEM_PACKAGES_ROUTE = createRoute({
method: "GET",
path: "/system/packages",
responseType: "json",
responseSchema: systemPackagesResponseSchema,
summary: "Get installed Mastra packages",
description: "Returns a list of all installed Mastra packages and their versions from the project",
tags: ["System"],
requiresAuth: true,
handler: async ({ mastra }) => {
try {
const packagesFilePath = process.env.MASTRA_PACKAGES_FILE;
let packages = [];
if (packagesFilePath) {
try {
const fileContent = readFileSync(packagesFilePath, "utf-8");
packages = JSON.parse(fileContent);
} catch {
packages = [];
}
}
const storage = mastra.getStorage();
const storageType = storage?.name;
const observabilityStorage = storage?.stores?.observability;
const observabilityStorageType = observabilityStorage?.constructor.name;
const observabilityStorageFeatures = observabilityStorage?.getFeatures?.();
const observabilityStorageCapabilities = observabilityStorageFeatures?.some(
(feature) => feature === "metrics" || feature === "logs"
) ? {
metrics: observabilityStorageFeatures.includes("metrics"),
logs: observabilityStorageFeatures.includes("logs")
} : void 0;
const observabilityRuntimeStrategy = observabilityStorage?.runtimeTracingStrategy;
const observabilityEnabled = !!mastra.observability.getDefaultInstance();
const editor = mastra.getEditor();
const editorSource = editor?.getSource?.();
const editorSourceCapabilities = editor ? await getEditorSourceCapabilities(editor) : void 0;
return {
packages,
isDev: process.env.MASTRA_DEV === "true",
cmsEnabled: !!editor,
editorSource,
editorSourceCapabilities,
observabilityEnabled,
storageType,
observabilityStorageType,
...observabilityStorageCapabilities ? { observabilityStorageCapabilities } : {},
observabilityRuntimeStrategy
};
} catch (error) {
return handleError(error, "Error getting system packages");
}
}
});
export { GET_API_SCHEMA_ROUTE, GET_SYSTEM_PACKAGES_ROUTE };
//# sourceMappingURL=chunk-LWKCKC57.js.map
//# sourceMappingURL=chunk-LWKCKC57.js.map
{"version":3,"sources":["../src/server/handlers/system.ts"],"names":[],"mappings":"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","file":"chunk-LWKCKC57.js","sourcesContent":["import { readFileSync } from 'node:fs';\n\nimport type { MastraPackage } from '../schemas/system';\nimport { apiSchemaManifestResponseSchema, systemPackagesResponseSchema } from '../schemas/system';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\n\nconst SOURCE_PROVIDER_CAPABILITIES_TIMEOUT_MS = 3000;\n\nasync function getSourceProviderCapabilities(\n getCapabilities: () => Promise<{\n canWrite: boolean;\n canOpenChangeRequest: boolean;\n reason?: string;\n }>,\n) {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n try {\n return await Promise.race([\n getCapabilities(),\n new Promise<never>((_, reject) => {\n timeout = setTimeout(\n () => reject(new Error('Source provider capabilities timed out')),\n SOURCE_PROVIDER_CAPABILITIES_TIMEOUT_MS,\n );\n }),\n ]);\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n}\n\nasync function getEditorSourceCapabilities(editor: {\n getSource?: () => 'code' | 'db' | undefined;\n getSourceControlProvider?: () =>\n | {\n id: string;\n displayName: string;\n getCapabilities: () => Promise<{\n canWrite: boolean;\n canOpenChangeRequest: boolean;\n reason?: string;\n }>;\n }\n | undefined;\n}) {\n const editorSource = editor.getSource?.();\n if (!editorSource) return undefined;\n\n if (editorSource === 'db') {\n return {\n source: editorSource,\n storage: 'database' as const,\n canSave: true,\n canOpenChangeRequest: false,\n };\n }\n\n const configuredProvider = editor.getSourceControlProvider?.();\n if (configuredProvider) {\n const provider = {\n id: configuredProvider.id,\n displayName: configuredProvider.displayName,\n };\n try {\n const capabilities = await getSourceProviderCapabilities(() => configuredProvider.getCapabilities());\n return {\n source: editorSource,\n storage: 'source-provider' as const,\n provider,\n canSave: capabilities.canWrite,\n canOpenChangeRequest: capabilities.canOpenChangeRequest,\n unavailableReason: capabilities.canWrite ? undefined : capabilities.reason,\n };\n } catch {\n return {\n source: editorSource,\n storage: 'source-provider' as const,\n provider,\n canSave: false,\n canOpenChangeRequest: false,\n unavailableReason: 'Unable to load source provider capabilities.',\n };\n }\n }\n\n const sourceProvider = process.env.MASTRA_SOURCE_PROVIDER;\n\n if (sourceProvider) {\n return {\n source: editorSource,\n storage: 'source-provider' as const,\n provider: {\n id: sourceProvider,\n displayName: process.env.MASTRA_SOURCE_PROVIDER_NAME || sourceProvider,\n },\n canSave: process.env.MASTRA_SOURCE_STORAGE_CAN_WRITE !== 'false',\n canOpenChangeRequest: process.env.MASTRA_SOURCE_STORAGE_CAN_OPEN_CHANGE_REQUEST === 'true',\n };\n }\n\n const isHosted =\n process.env.MASTRA_DEPLOYMENT_ID || process.env.MASTRA_CLOUD_API_ENDPOINT || process.env.MASTRA_PLATFORM_PROJECT_ID;\n\n if (isHosted) {\n return {\n source: editorSource,\n storage: 'unavailable' as const,\n canSave: false,\n canOpenChangeRequest: false,\n unavailableReason: 'Code-source editing requires a source provider in hosted Studio.',\n };\n }\n\n return {\n source: editorSource,\n storage: 'filesystem' as const,\n canSave: true,\n canOpenChangeRequest: false,\n };\n}\n\nexport const GET_API_SCHEMA_ROUTE = createRoute({\n method: 'GET',\n path: '/system/api-schema',\n responseType: 'json',\n responseSchema: apiSchemaManifestResponseSchema,\n summary: 'Get API schema manifest',\n description: 'Returns the route-contract-derived API schema manifest for the machine-readable CLI',\n tags: ['System'],\n requiresAuth: true,\n handler: async () => {\n // Dynamic import to avoid circular dependency issues\n const { buildApiSchemaManifest } = await import('../server-adapter/api-schema-manifest');\n return buildApiSchemaManifest();\n },\n});\n\nexport const GET_SYSTEM_PACKAGES_ROUTE = createRoute({\n method: 'GET',\n path: '/system/packages',\n responseType: 'json',\n responseSchema: systemPackagesResponseSchema,\n summary: 'Get installed Mastra packages',\n description: 'Returns a list of all installed Mastra packages and their versions from the project',\n tags: ['System'],\n requiresAuth: true,\n handler: async ({ mastra }) => {\n try {\n const packagesFilePath = process.env.MASTRA_PACKAGES_FILE;\n\n let packages: MastraPackage[] = [];\n\n if (packagesFilePath) {\n try {\n const fileContent = readFileSync(packagesFilePath, 'utf-8');\n packages = JSON.parse(fileContent);\n } catch {\n packages = [];\n }\n }\n\n const storage = mastra.getStorage();\n const storageType = storage?.name;\n const observabilityStorage = storage?.stores?.observability;\n const observabilityStorageType = observabilityStorage?.constructor.name;\n const observabilityStorageFeatures = observabilityStorage?.getFeatures?.();\n const observabilityStorageCapabilities = observabilityStorageFeatures?.some(\n feature => feature === 'metrics' || feature === 'logs',\n )\n ? {\n metrics: observabilityStorageFeatures.includes('metrics'),\n logs: observabilityStorageFeatures.includes('logs'),\n }\n : undefined;\n const observabilityRuntimeStrategy = observabilityStorage?.runtimeTracingStrategy;\n const observabilityEnabled = !!mastra.observability.getDefaultInstance();\n\n const editor = mastra.getEditor();\n const editorSource = editor?.getSource?.();\n const editorSourceCapabilities = editor ? await getEditorSourceCapabilities(editor) : undefined;\n\n return {\n packages,\n isDev: process.env.MASTRA_DEV === 'true',\n cmsEnabled: !!editor,\n editorSource,\n editorSourceCapabilities,\n observabilityEnabled,\n storageType,\n observabilityStorageType,\n ...(observabilityStorageCapabilities ? { observabilityStorageCapabilities } : {}),\n observabilityRuntimeStrategy,\n };\n } catch (error) {\n return handleError(error, 'Error getting system packages');\n }\n },\n});\n"]}
'use strict';
var chunk43E6JEA5_cjs = require('./chunk-43E6JEA5.cjs');
var chunk2XZ2466F_cjs = require('./chunk-2XZ2466F.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
// src/server/handlers/scorer-versions.ts
var SNAPSHOT_CONFIG_FIELDS = [
"name",
"description",
"type",
"model",
"instructions",
"scoreRange",
"presetConfig",
"defaultSampling"
];
var LIST_SCORER_VERSIONS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/scorers/:scorerId/versions",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunk43E6JEA5_cjs.scorerVersionPathParams,
queryParamSchema: chunk43E6JEA5_cjs.listScorerVersionsQuerySchema,
responseSchema: chunk43E6JEA5_cjs.listScorerVersionsResponseSchema,
summary: "List scorer versions",
description: "Returns a paginated list of all versions for a stored scorer",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, page, perPage, orderBy, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(scorer, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const result = await scorerStore.listVersions({
scorerDefinitionId: scorerId,
page,
perPage,
orderBy
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing scorer versions");
}
}
});
var CREATE_SCORER_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/scorers/:scorerId/versions",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunk43E6JEA5_cjs.scorerVersionPathParams,
bodySchema: chunk43E6JEA5_cjs.createScorerVersionBodySchema,
responseSchema: chunk43E6JEA5_cjs.createScorerVersionResponseSchema,
summary: "Create scorer version",
description: "Creates a new version snapshot of the current scorer configuration",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, changeMessage, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(scorer, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
let currentConfig = {};
if (scorer.activeVersionId) {
const activeVersion = await scorerStore.getVersion(scorer.activeVersionId);
if (activeVersion) {
currentConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
activeVersion,
SNAPSHOT_CONFIG_FIELDS
);
}
}
const latestVersion = await scorerStore.getLatestVersion(scorerId);
if (!scorer.activeVersionId && latestVersion) {
currentConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
latestVersion,
SNAPSHOT_CONFIG_FIELDS
);
}
const previousConfig = latestVersion ? chunk2XZ2466F_cjs.extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
const changedFields = chunk2XZ2466F_cjs.calculateChangedFields(previousConfig, currentConfig);
const { versionId } = await chunk2XZ2466F_cjs.createVersionWithRetry(
scorerStore,
scorerId,
"scorerDefinitionId",
currentConfig,
changedFields,
{ changeMessage }
);
const version = await scorerStore.getVersion(versionId);
if (!version) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to retrieve created version" });
}
await chunk2XZ2466F_cjs.enforceRetentionLimit(
scorerStore,
scorerId,
"scorerDefinitionId",
scorer.activeVersionId
);
return version;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating scorer version");
}
}
});
var GET_SCORER_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/scorers/:scorerId/versions/:versionId",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunk43E6JEA5_cjs.scorerVersionIdPathParams,
responseSchema: chunk43E6JEA5_cjs.getScorerVersionResponseSchema,
summary: "Get scorer version",
description: "Returns a specific version of a scorer by its version ID",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const version = await scorerStore.getVersion(versionId);
if (!version) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.scorerDefinitionId !== scorerId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, {
message: `Version with id ${versionId} not found for scorer ${scorerId}`
});
}
const scorer = await scorerStore.getById(scorerId);
chunkEVOVAWN6_cjs.assertStoredResourceScope(scorer, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
return version;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting scorer version");
}
}
});
var ACTIVATE_SCORER_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/scorers/:scorerId/versions/:versionId/activate",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunk43E6JEA5_cjs.scorerVersionIdPathParams,
responseSchema: chunk43E6JEA5_cjs.activateScorerVersionResponseSchema,
summary: "Activate scorer version",
description: "Sets a specific version as the active version for the scorer",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(scorer, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const version = await scorerStore.getVersion(versionId);
if (!version) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.scorerDefinitionId !== scorerId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, {
message: `Version with id ${versionId} not found for scorer ${scorerId}`
});
}
await scorerStore.update({
id: scorerId,
activeVersionId: versionId,
status: "published"
});
mastra.getEditor()?.scorer.clearCache(scorerId);
return {
success: true,
message: `Version ${version.versionNumber} is now active`,
activeVersionId: versionId
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error activating scorer version");
}
}
});
var RESTORE_SCORER_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/scorers/:scorerId/versions/:versionId/restore",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunk43E6JEA5_cjs.scorerVersionIdPathParams,
responseSchema: chunk43E6JEA5_cjs.restoreScorerVersionResponseSchema,
summary: "Restore scorer version",
description: "Restores the scorer configuration from a version, creating a new version",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(scorer, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const versionToRestore = await scorerStore.getVersion(versionId);
if (!versionToRestore) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (versionToRestore.scorerDefinitionId !== scorerId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, {
message: `Version with id ${versionId} not found for scorer ${scorerId}`
});
}
const restoredConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
versionToRestore,
SNAPSHOT_CONFIG_FIELDS
);
await scorerStore.update({
id: scorerId,
...restoredConfig
});
const latestVersion = await scorerStore.getLatestVersion(scorerId);
const previousConfig = latestVersion ? chunk2XZ2466F_cjs.extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
const changedFields = chunk2XZ2466F_cjs.calculateChangedFields(previousConfig, restoredConfig);
const { versionId: newVersionId } = await chunk2XZ2466F_cjs.createVersionWithRetry(
scorerStore,
scorerId,
"scorerDefinitionId",
restoredConfig,
changedFields,
{
changeMessage: `Restored from version ${versionToRestore.versionNumber}`
}
);
const newVersion = await scorerStore.getVersion(newVersionId);
if (!newVersion) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to retrieve created version" });
}
await chunk2XZ2466F_cjs.enforceRetentionLimit(
scorerStore,
scorerId,
"scorerDefinitionId",
scorer.activeVersionId
);
mastra.getEditor()?.scorer.clearCache(scorerId);
return newVersion;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error restoring scorer version");
}
}
});
var DELETE_SCORER_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/stored/scorers/:scorerId/versions/:versionId",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunk43E6JEA5_cjs.scorerVersionIdPathParams,
responseSchema: chunk43E6JEA5_cjs.deleteScorerVersionResponseSchema,
summary: "Delete scorer version",
description: "Deletes a specific version (cannot delete the active version)",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(scorer, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const version = await scorerStore.getVersion(versionId);
if (!version) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.scorerDefinitionId !== scorerId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, {
message: `Version with id ${versionId} not found for scorer ${scorerId}`
});
}
if (scorer.activeVersionId === versionId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "Cannot delete the active version. Activate a different version first."
});
}
await scorerStore.deleteVersion(versionId);
mastra.getEditor()?.scorer.clearCache(scorerId);
return {
success: true,
message: `Version ${version.versionNumber} deleted successfully`
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error deleting scorer version");
}
}
});
var COMPARE_SCORER_VERSIONS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/scorers/:scorerId/versions/compare",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunk43E6JEA5_cjs.scorerVersionPathParams,
queryParamSchema: chunk43E6JEA5_cjs.compareScorerVersionsQuerySchema,
responseSchema: chunk43E6JEA5_cjs.compareScorerVersionsResponseSchema,
summary: "Compare scorer versions",
description: "Compares two versions and returns the differences between them",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, from, to, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
chunkEVOVAWN6_cjs.assertStoredResourceScope(scorer, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const fromVersion = await scorerStore.getVersion(from);
if (!fromVersion) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${from} not found` });
}
if (fromVersion.scorerDefinitionId !== scorerId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, {
message: `Version with id ${from} not found for scorer ${scorerId}`
});
}
const toVersion = await scorerStore.getVersion(to);
if (!toVersion) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${to} not found` });
}
if (toVersion.scorerDefinitionId !== scorerId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, {
message: `Version with id ${to} not found for scorer ${scorerId}`
});
}
const fromConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
fromVersion,
SNAPSHOT_CONFIG_FIELDS
);
const toConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
toVersion,
SNAPSHOT_CONFIG_FIELDS
);
const diffs = chunk2XZ2466F_cjs.computeVersionDiffs(fromConfig, toConfig);
return {
diffs,
fromVersion,
toVersion
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error comparing scorer versions");
}
}
});
exports.ACTIVATE_SCORER_VERSION_ROUTE = ACTIVATE_SCORER_VERSION_ROUTE;
exports.COMPARE_SCORER_VERSIONS_ROUTE = COMPARE_SCORER_VERSIONS_ROUTE;
exports.CREATE_SCORER_VERSION_ROUTE = CREATE_SCORER_VERSION_ROUTE;
exports.DELETE_SCORER_VERSION_ROUTE = DELETE_SCORER_VERSION_ROUTE;
exports.GET_SCORER_VERSION_ROUTE = GET_SCORER_VERSION_ROUTE;
exports.LIST_SCORER_VERSIONS_ROUTE = LIST_SCORER_VERSIONS_ROUTE;
exports.RESTORE_SCORER_VERSION_ROUTE = RESTORE_SCORER_VERSION_ROUTE;
//# sourceMappingURL=chunk-LYZLM7TQ.cjs.map
//# sourceMappingURL=chunk-LYZLM7TQ.cjs.map
{"version":3,"sources":["../src/server/handlers/scorer-versions.ts"],"names":["createRoute","scorerVersionPathParams","listScorerVersionsQuerySchema","listScorerVersionsResponseSchema","HTTPException","assertStoredResourceScope","getStoredResourceScope","handleError","createScorerVersionBodySchema","createScorerVersionResponseSchema","extractConfigFromVersion","calculateChangedFields","createVersionWithRetry","enforceRetentionLimit","scorerVersionIdPathParams","getScorerVersionResponseSchema","activateScorerVersionResponseSchema","restoreScorerVersionResponseSchema","deleteScorerVersionResponseSchema","compareScorerVersionsQuerySchema","compareScorerVersionsResponseSchema","computeVersionDiffs"],"mappings":"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","file":"chunk-LYZLM7TQ.cjs","sourcesContent":["import { HTTPException } from '../http-exception';\nimport {\n scorerVersionPathParams,\n scorerVersionIdPathParams,\n listScorerVersionsQuerySchema,\n createScorerVersionBodySchema,\n compareScorerVersionsQuerySchema,\n listScorerVersionsResponseSchema,\n getScorerVersionResponseSchema,\n createScorerVersionResponseSchema,\n activateScorerVersionResponseSchema,\n restoreScorerVersionResponseSchema,\n deleteScorerVersionResponseSchema,\n compareScorerVersionsResponseSchema,\n} from '../schemas/scorer-versions';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { handleError } from './error';\nimport {\n extractConfigFromVersion,\n calculateChangedFields,\n computeVersionDiffs,\n createVersionWithRetry,\n enforceRetentionLimit,\n} from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\nconst SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'type',\n 'model',\n 'instructions',\n 'scoreRange',\n 'presetConfig',\n 'defaultSampling',\n] as const;\n\n/**\n * GET /stored/scorers/:scorerId/versions - List all versions for a scorer\n */\nexport const LIST_SCORER_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:scorerId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionPathParams,\n queryParamSchema: listScorerVersionsQuerySchema,\n responseSchema: listScorerVersionsResponseSchema,\n summary: 'List scorer versions',\n description: 'Returns a paginated list of all versions for a stored scorer',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, page, perPage, orderBy, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const result = await scorerStore.listVersions({\n scorerDefinitionId: scorerId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing scorer versions');\n }\n },\n});\n\n/**\n * POST /stored/scorers/:scorerId/versions - Create a new version snapshot\n */\nexport const CREATE_SCORER_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers/:scorerId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionPathParams,\n bodySchema: createScorerVersionBodySchema,\n responseSchema: createScorerVersionResponseSchema,\n summary: 'Create scorer version',\n description: 'Creates a new version snapshot of the current scorer configuration',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, changeMessage, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n let currentConfig: Record<string, unknown> = {};\n if (scorer.activeVersionId) {\n const activeVersion = await scorerStore.getVersion(scorer.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n const latestVersion = await scorerStore.getLatestVersion(scorerId);\n\n // If no activeVersionId, fall back to latest version config\n if (!scorer.activeVersionId && latestVersion) {\n currentConfig = extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, currentConfig);\n\n const { versionId } = await createVersionWithRetry(\n scorerStore as unknown as VersionedStoreInterface,\n scorerId,\n 'scorerDefinitionId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n const version = await scorerStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n scorerStore as unknown as VersionedStoreInterface,\n scorerId,\n 'scorerDefinitionId',\n scorer.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating scorer version');\n }\n },\n});\n\n/**\n * GET /stored/scorers/:scorerId/versions/:versionId - Get a specific version\n */\nexport const GET_SCORER_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:scorerId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionIdPathParams,\n responseSchema: getScorerVersionResponseSchema,\n summary: 'Get scorer version',\n description: 'Returns a specific version of a scorer by its version ID',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const version = await scorerStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n if (version.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for scorer ${scorerId}`,\n });\n }\n const scorer = await scorerStore.getById(scorerId);\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting scorer version');\n }\n },\n});\n\n/**\n * POST /stored/scorers/:scorerId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_SCORER_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers/:scorerId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionIdPathParams,\n responseSchema: activateScorerVersionResponseSchema,\n summary: 'Activate scorer version',\n description: 'Sets a specific version as the active version for the scorer',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const version = await scorerStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for scorer ${scorerId}`,\n });\n }\n\n await scorerStore.update({\n id: scorerId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.scorer.clearCache(scorerId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} is now active`,\n activeVersionId: versionId,\n };\n } catch (error) {\n return handleError(error, 'Error activating scorer version');\n }\n },\n});\n\n/**\n * POST /stored/scorers/:scorerId/versions/:versionId/restore - Restore scorer to a version\n */\nexport const RESTORE_SCORER_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers/:scorerId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionIdPathParams,\n responseSchema: restoreScorerVersionResponseSchema,\n summary: 'Restore scorer version',\n description: 'Restores the scorer configuration from a version, creating a new version',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const versionToRestore = await scorerStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for scorer ${scorerId}`,\n });\n }\n\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n await scorerStore.update({\n id: scorerId,\n ...restoredConfig,\n });\n\n const latestVersion = await scorerStore.getLatestVersion(scorerId);\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, restoredConfig);\n\n const { versionId: newVersionId } = await createVersionWithRetry(\n scorerStore as unknown as VersionedStoreInterface,\n scorerId,\n 'scorerDefinitionId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n const newVersion = await scorerStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n scorerStore as unknown as VersionedStoreInterface,\n scorerId,\n 'scorerDefinitionId',\n scorer.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.scorer.clearCache(scorerId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring scorer version');\n }\n },\n});\n\n/**\n * DELETE /stored/scorers/:scorerId/versions/:versionId - Delete a version\n */\nexport const DELETE_SCORER_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/scorers/:scorerId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionIdPathParams,\n responseSchema: deleteScorerVersionResponseSchema,\n summary: 'Delete scorer version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const version = await scorerStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for scorer ${scorerId}`,\n });\n }\n\n if (scorer.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await scorerStore.deleteVersion(versionId);\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.scorer.clearCache(scorerId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting scorer version');\n }\n },\n});\n\n/**\n * GET /stored/scorers/:scorerId/versions/compare - Compare two versions\n */\nexport const COMPARE_SCORER_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:scorerId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionPathParams,\n queryParamSchema: compareScorerVersionsQuerySchema,\n responseSchema: compareScorerVersionsResponseSchema,\n summary: 'Compare scorer versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, from, to, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n const scorer = await scorerStore.getById(scorerId);\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const fromVersion = await scorerStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${from} not found for scorer ${scorerId}`,\n });\n }\n\n const toVersion = await scorerStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${to} not found for scorer ${scorerId}`,\n });\n }\n\n const fromConfig = extractConfigFromVersion(\n fromVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n const toConfig = extractConfigFromVersion(\n toVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n const diffs = computeVersionDiffs(fromConfig, toConfig);\n\n return {\n diffs,\n fromVersion,\n toVersion,\n };\n } catch (error) {\n return handleError(error, 'Error comparing scorer versions');\n }\n },\n});\n"]}
'use strict';
var chunkPEXHI73J_cjs = require('./chunk-PEXHI73J.cjs');
var chunk4JAXFPYO_cjs = require('./chunk-4JAXFPYO.cjs');
var chunk2XZ2466F_cjs = require('./chunk-2XZ2466F.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
// src/server/handlers/agent-versions.ts
var SNAPSHOT_CONFIG_FIELDS = [
"name",
"description",
"instructions",
"model",
"tools",
"defaultOptions",
"workflows",
"agents",
"integrationTools",
"inputProcessors",
"outputProcessors",
"memory",
"scorers",
"requestContextSchema",
"mcpClients"
];
var LIST_AGENT_VERSIONS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/agents/:agentId/versions",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkPEXHI73J_cjs.agentVersionPathParams,
queryParamSchema: chunk4JAXFPYO_cjs.listVersionsQuerySchema,
responseSchema: chunkPEXHI73J_cjs.listVersionsResponseSchema,
summary: "List agent versions",
description: "Returns a paginated list of all versions for a stored agent",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, page, perPage, orderBy, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const storedAgent = await agentsStore.getById(agentId);
let codeAgentExists = false;
try {
mastra.getAgentById(agentId);
codeAgentExists = true;
} catch {
}
if (!storedAgent && !codeAgentExists) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(storedAgent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const result = await agentsStore.listVersions({
agentId,
page,
perPage,
orderBy
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing agent versions");
}
}
});
var CREATE_AGENT_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/agents/:agentId/versions",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkPEXHI73J_cjs.agentVersionPathParams,
bodySchema: chunk4JAXFPYO_cjs.createVersionBodySchema,
responseSchema: chunkPEXHI73J_cjs.createVersionResponseSchema,
summary: "Create agent version",
description: "Creates a new version snapshot of the current agent configuration",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, changeMessage, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
if (!agent) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
let currentConfig = {};
if (agent.activeVersionId) {
const activeVersion = await agentsStore.getVersion(agent.activeVersionId);
if (activeVersion) {
currentConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
activeVersion,
SNAPSHOT_CONFIG_FIELDS
);
}
}
const latestVersion = await agentsStore.getLatestVersion(agentId);
if (!agent.activeVersionId && latestVersion) {
currentConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
latestVersion,
SNAPSHOT_CONFIG_FIELDS
);
}
const previousConfig = latestVersion ? chunk2XZ2466F_cjs.extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
const changedFields = chunk2XZ2466F_cjs.calculateChangedFields(previousConfig, currentConfig);
const { versionId } = await chunk2XZ2466F_cjs.createVersionWithRetry(
agentsStore,
agentId,
"agentId",
currentConfig,
changedFields,
{ changeMessage }
);
const version = await agentsStore.getVersion(versionId);
if (!version) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to retrieve created version" });
}
await chunk2XZ2466F_cjs.enforceRetentionLimit(
agentsStore,
agentId,
"agentId",
agent.activeVersionId
);
return version;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating agent version");
}
}
});
var GET_AGENT_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/agents/:agentId/versions/:versionId",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkPEXHI73J_cjs.versionIdPathParams,
responseSchema: chunkPEXHI73J_cjs.getVersionResponseSchema,
summary: "Get agent version",
description: "Returns a specific version of an agent by its version ID",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const version = await agentsStore.getVersion(versionId);
if (!version) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.agentId !== agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
}
const agent = await agentsStore.getById(agentId);
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
return version;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting agent version");
}
}
});
var ACTIVATE_AGENT_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/agents/:agentId/versions/:versionId/activate",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkPEXHI73J_cjs.versionIdPathParams,
responseSchema: chunk4JAXFPYO_cjs.activateVersionResponseSchema,
summary: "Activate agent version",
description: "Sets a specific version as the active version for the agent",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
if (!agent) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const version = await agentsStore.getVersion(versionId);
if (!version) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.agentId !== agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
}
await agentsStore.update({
id: agentId,
activeVersionId: versionId,
status: "published"
});
mastra.getEditor()?.agent.clearCache(agentId);
return {
success: true,
message: `Version ${version.versionNumber} is now active`,
activeVersionId: versionId
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error activating agent version");
}
}
});
var RESTORE_AGENT_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/agents/:agentId/versions/:versionId/restore",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkPEXHI73J_cjs.versionIdPathParams,
responseSchema: chunkPEXHI73J_cjs.restoreVersionResponseSchema,
summary: "Restore agent version",
description: "Restores the agent configuration from a version, creating a new version",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
if (!agent) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const versionToRestore = await agentsStore.getVersion(versionId);
if (!versionToRestore) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (versionToRestore.agentId !== agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
}
const restoredConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
versionToRestore,
SNAPSHOT_CONFIG_FIELDS
);
await agentsStore.update({
id: agentId,
...restoredConfig
});
const latestVersion = await agentsStore.getLatestVersion(agentId);
const previousConfig = latestVersion ? chunk2XZ2466F_cjs.extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
const changedFields = chunk2XZ2466F_cjs.calculateChangedFields(previousConfig, restoredConfig);
const { versionId: newVersionId } = await chunk2XZ2466F_cjs.createVersionWithRetry(
agentsStore,
agentId,
"agentId",
restoredConfig,
changedFields,
{
changeMessage: `Restored from version ${versionToRestore.versionNumber}`
}
);
const newVersion = await agentsStore.getVersion(newVersionId);
if (!newVersion) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to retrieve created version" });
}
await chunk2XZ2466F_cjs.enforceRetentionLimit(
agentsStore,
agentId,
"agentId",
agent.activeVersionId
);
mastra.getEditor()?.agent.clearCache(agentId);
return newVersion;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error restoring agent version");
}
}
});
var DELETE_AGENT_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/stored/agents/:agentId/versions/:versionId",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkPEXHI73J_cjs.versionIdPathParams,
responseSchema: chunk4JAXFPYO_cjs.deleteVersionResponseSchema,
summary: "Delete agent version",
description: "Deletes a specific version (cannot delete the active version)",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
if (!agent) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const version = await agentsStore.getVersion(versionId);
if (!version) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.agentId !== agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
}
if (agent.activeVersionId === versionId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "Cannot delete the active version. Activate a different version first."
});
}
await agentsStore.deleteVersion(versionId);
mastra.getEditor()?.agent.clearCache(agentId);
return {
success: true,
message: `Version ${version.versionNumber} deleted successfully`
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error deleting agent version");
}
}
});
var COMPARE_AGENT_VERSIONS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/agents/:agentId/versions/compare",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkPEXHI73J_cjs.agentVersionPathParams,
queryParamSchema: chunk4JAXFPYO_cjs.compareVersionsQuerySchema,
responseSchema: chunkPEXHI73J_cjs.compareVersionsResponseSchema,
summary: "Compare agent versions",
description: "Compares two versions and returns the differences between them",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, from, to, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const fromVersion = await agentsStore.getVersion(from);
if (!fromVersion) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${from} not found` });
}
if (fromVersion.agentId !== agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${from} not found for agent ${agentId}` });
}
const toVersion = await agentsStore.getVersion(to);
if (!toVersion) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${to} not found` });
}
if (toVersion.agentId !== agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${to} not found for agent ${agentId}` });
}
const fromConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
fromVersion,
SNAPSHOT_CONFIG_FIELDS
);
const toConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
toVersion,
SNAPSHOT_CONFIG_FIELDS
);
const diffs = chunk2XZ2466F_cjs.computeVersionDiffs(fromConfig, toConfig);
return {
diffs,
fromVersion,
toVersion
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error comparing agent versions");
}
}
});
exports.ACTIVATE_AGENT_VERSION_ROUTE = ACTIVATE_AGENT_VERSION_ROUTE;
exports.COMPARE_AGENT_VERSIONS_ROUTE = COMPARE_AGENT_VERSIONS_ROUTE;
exports.CREATE_AGENT_VERSION_ROUTE = CREATE_AGENT_VERSION_ROUTE;
exports.DELETE_AGENT_VERSION_ROUTE = DELETE_AGENT_VERSION_ROUTE;
exports.GET_AGENT_VERSION_ROUTE = GET_AGENT_VERSION_ROUTE;
exports.LIST_AGENT_VERSIONS_ROUTE = LIST_AGENT_VERSIONS_ROUTE;
exports.RESTORE_AGENT_VERSION_ROUTE = RESTORE_AGENT_VERSION_ROUTE;
//# sourceMappingURL=chunk-O4PNIMVX.cjs.map
//# sourceMappingURL=chunk-O4PNIMVX.cjs.map
{"version":3,"sources":["../src/server/handlers/agent-versions.ts"],"names":["createRoute","agentVersionPathParams","listVersionsQuerySchema","listVersionsResponseSchema","HTTPException","assertStoredResourceScope","getStoredResourceScope","handleError","createVersionBodySchema","createVersionResponseSchema","extractConfigFromVersion","calculateChangedFields","createVersionWithRetry","enforceRetentionLimit","versionIdPathParams","getVersionResponseSchema","activateVersionResponseSchema","restoreVersionResponseSchema","deleteVersionResponseSchema","compareVersionsQuerySchema","compareVersionsResponseSchema","computeVersionDiffs"],"mappings":"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","file":"chunk-O4PNIMVX.cjs","sourcesContent":["import type { z } from 'zod/v4';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentVersionPathParams,\n versionIdPathParams,\n listVersionsQuerySchema,\n createVersionBodySchema,\n compareVersionsQuerySchema,\n listVersionsResponseSchema,\n getVersionResponseSchema,\n createVersionResponseSchema,\n activateVersionResponseSchema,\n restoreVersionResponseSchema,\n deleteVersionResponseSchema,\n compareVersionsResponseSchema,\n} from '../schemas/agent-versions';\nimport type { ServerRoute, RouteSchemas, InferParams } from '../server-adapter/routes';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { handleError } from './error';\nimport {\n extractConfigFromVersion,\n calculateChangedFields,\n computeVersionDiffs,\n createVersionWithRetry,\n enforceRetentionLimit,\n} from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\n/**\n * The config field names that live on version rows (StorageAgentSnapshotType fields).\n * Used to extract config from a version record for comparison and restoration.\n */\nconst SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'instructions',\n 'model',\n 'tools',\n 'defaultOptions',\n 'workflows',\n 'agents',\n 'integrationTools',\n 'inputProcessors',\n 'outputProcessors',\n 'memory',\n 'scorers',\n 'requestContextSchema',\n 'mcpClients',\n] as const;\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/agents/:agentId/versions - List all versions for an agent\n */\nexport const LIST_AGENT_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: listVersionsQuerySchema,\n responseSchema: listVersionsResponseSchema,\n summary: 'List agent versions',\n description: 'Returns a paginated list of all versions for a stored agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, page, perPage, orderBy, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists in code or storage\n const storedAgent = await agentsStore.getById(agentId);\n let codeAgentExists = false;\n try {\n mastra.getAgentById(agentId);\n codeAgentExists = true;\n } catch {\n // Agent not registered in code\n }\n\n if (!storedAgent && !codeAgentExists) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(storedAgent, await getStoredResourceScope(mastra, requestContext));\n\n const result = await agentsStore.listVersions({\n agentId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing agent versions');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions - Create a new version snapshot\n */\nexport const CREATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n bodySchema: createVersionBodySchema,\n responseSchema: createVersionResponseSchema,\n summary: 'Create agent version',\n description: 'Creates a new version snapshot of the current agent configuration',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, changeMessage, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Get the current agent to find its active version\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the current active version to snapshot its config\n let currentConfig: Record<string, unknown> = {};\n if (agent.activeVersionId) {\n const activeVersion = await agentsStore.getVersion(agent.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n\n // If no activeVersionId, fall back to latest version config\n if (!agent.activeVersionId && latestVersion) {\n currentConfig = extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, currentConfig);\n\n // Create the new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n // Get the created version to return\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/:versionId - Get a specific version\n */\nexport const GET_AGENT_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: getVersionResponseSchema,\n summary: 'Get agent version',\n description: 'Returns a specific version of an agent by its version ID',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n const version = await agentsStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n // Verify the version belongs to the specified agent\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: activateVersionResponseSchema,\n summary: 'Activate agent version',\n description: 'Sets a specific version as the active version for the agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Update the agent's activeVersionId AND status to 'published'\n await agentsStore.update({\n id: agentId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} is now active`,\n activeVersionId: versionId,\n };\n } catch (error) {\n return handleError(error, 'Error activating agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/restore - Restore agent to a version\n */\nexport const RESTORE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: restoreVersionResponseSchema,\n summary: 'Restore agent version',\n description: 'Restores the agent configuration from a version, creating a new version',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the version to restore\n const versionToRestore = await agentsStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Extract the config fields from the version to restore (top-level, no .snapshot)\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Update the agent with the config from the version to restore\n await agentsStore.update({\n id: agentId,\n ...restoredConfig,\n });\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, restoredConfig);\n\n // Create a new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId: newVersionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n // Do NOT auto-activate the restored version - user must explicitly activate it\n\n // Get the created version to return\n const newVersion = await agentsStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n // Use the agent's existing activeVersionId\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the restored config\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring agent version');\n }\n },\n});\n\n/**\n * DELETE /stored/agents/:agentId/versions/:versionId - Delete a version\n */\nexport const DELETE_AGENT_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: deleteVersionResponseSchema,\n summary: 'Delete agent version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Check if this is the active version\n if (agent.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await agentsStore.deleteVersion(versionId);\n\n // Clear the editor cache in case the deleted version affected resolution\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/compare - Compare two versions\n */\nexport const COMPARE_AGENT_VERSIONS_ROUTE: ServerRoute<\n InferParams<typeof agentVersionPathParams, typeof compareVersionsQuerySchema, undefined>,\n z.infer<typeof compareVersionsResponseSchema>,\n 'json',\n RouteSchemas<\n typeof agentVersionPathParams,\n typeof compareVersionsQuerySchema,\n undefined,\n typeof compareVersionsResponseSchema\n >,\n 'GET',\n '/stored/agents/:agentId/versions/compare'\n> = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: compareVersionsQuerySchema,\n responseSchema: compareVersionsResponseSchema,\n summary: 'Compare agent versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, from, to, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get both versions\n const fromVersion = await agentsStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${from} not found for agent ${agentId}` });\n }\n\n const toVersion = await agentsStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${to} not found for agent ${agentId}` });\n }\n\n // Extract config fields from both versions (top-level, no .snapshot)\n const fromConfig = extractConfigFromVersion(\n fromVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n const toConfig = extractConfigFromVersion(\n toVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Compute diffs on the config fields\n const diffs = computeVersionDiffs(fromConfig, toConfig);\n\n return {\n diffs,\n fromVersion,\n toVersion,\n };\n } catch (error) {\n return handleError(error, 'Error comparing agent versions');\n }\n },\n});\n"]}
'use strict';
var chunk4JAXFPYO_cjs = require('./chunk-4JAXFPYO.cjs');
var chunkI5JCLVTK_cjs = require('./chunk-I5JCLVTK.cjs');
var chunkPFKYMKIH_cjs = require('./chunk-PFKYMKIH.cjs');
var v4 = require('zod/v4');
var mcpClientToolsConfigSchema = v4.z.object({
tools: v4.z.record(v4.z.string(), chunkI5JCLVTK_cjs.toolConfigSchema).optional()
});
var agentVersionPathParams = v4.z.object({
agentId: v4.z.string().describe("Unique identifier for the stored agent")
});
var versionIdPathParams = v4.z.object({
agentId: v4.z.string().describe("Unique identifier for the stored agent"),
versionId: v4.z.string().describe("Unique identifier for the version (UUID)")
});
var agentVersionSchema = v4.z.object({
id: v4.z.string().describe("Unique identifier for the version (UUID)"),
agentId: v4.z.string().describe("ID of the agent this version belongs to"),
versionNumber: v4.z.number().describe("Sequential version number (1, 2, 3, ...)"),
// Top-level config fields (from StorageAgentSnapshotType)
name: v4.z.string().describe("Name of the agent"),
description: v4.z.string().optional().describe("Description of the agent"),
instructions: chunkI5JCLVTK_cjs.instructionsSchema,
model: chunkI5JCLVTK_cjs.conditionalFieldSchema(chunkI5JCLVTK_cjs.modelConfigSchema).describe(
"Model configuration \u2014 static value or array of conditional variants"
),
tools: chunkI5JCLVTK_cjs.conditionalFieldSchema(chunkI5JCLVTK_cjs.toolsConfigSchema).optional().describe("Tool keys mapped to per-tool config \u2014 static or conditional"),
defaultOptions: chunkI5JCLVTK_cjs.conditionalFieldSchema(chunkPFKYMKIH_cjs.defaultOptionsSchema).optional().describe("Default options for generate/stream calls \u2014 static or conditional"),
workflows: chunkI5JCLVTK_cjs.conditionalFieldSchema(v4.z.record(v4.z.string(), chunkI5JCLVTK_cjs.toolConfigSchema)).optional().describe("Workflow keys with optional per-workflow config \u2014 static or conditional"),
agents: chunkI5JCLVTK_cjs.conditionalFieldSchema(v4.z.record(v4.z.string(), chunkI5JCLVTK_cjs.toolConfigSchema)).optional().describe("Agent keys with optional per-agent config \u2014 static or conditional"),
integrationTools: chunkI5JCLVTK_cjs.conditionalFieldSchema(v4.z.record(v4.z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of tool provider IDs to their tool configurations \u2014 static or conditional"),
mcpClients: chunkI5JCLVTK_cjs.conditionalFieldSchema(v4.z.record(v4.z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of stored MCP client IDs to their tool configurations \u2014 static or conditional"),
inputProcessors: chunkI5JCLVTK_cjs.conditionalFieldSchema(chunkI5JCLVTK_cjs.storedProcessorGraphSchema).optional().describe("Input processor graph \u2014 static or conditional"),
outputProcessors: chunkI5JCLVTK_cjs.conditionalFieldSchema(chunkI5JCLVTK_cjs.storedProcessorGraphSchema).optional().describe("Output processor graph \u2014 static or conditional"),
memory: chunkI5JCLVTK_cjs.conditionalFieldSchema(chunkI5JCLVTK_cjs.serializedMemoryConfigSchema).optional().describe("Memory configuration \u2014 static or conditional"),
scorers: chunkI5JCLVTK_cjs.conditionalFieldSchema(v4.z.record(v4.z.string(), chunkI5JCLVTK_cjs.scorerConfigSchema)).optional().describe("Scorer keys with optional sampling config \u2014 static or conditional"),
requestContextSchema: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("JSON Schema defining valid request context variables"),
// Version metadata fields
changedFields: v4.z.array(v4.z.string()).optional().describe("Array of field names that changed from the previous version"),
changeMessage: v4.z.string().optional().describe("Optional message describing the changes"),
createdAt: v4.z.coerce.date().describe("When this version was created")
});
var listVersionsResponseSchema = chunk4JAXFPYO_cjs.createListVersionsResponseSchema(agentVersionSchema);
var getVersionResponseSchema = agentVersionSchema;
var createVersionResponseSchema = agentVersionSchema.partial().merge(
v4.z.object({
// These fields are always present in a version response
id: v4.z.string().describe("Unique identifier for the version (UUID)"),
agentId: v4.z.string().describe("ID of the agent this version belongs to"),
versionNumber: v4.z.number().describe("Sequential version number (1, 2, 3, ...)"),
createdAt: v4.z.coerce.date().describe("When this version was created")
})
);
var restoreVersionResponseSchema = agentVersionSchema.describe(
"The newly created version from the restored configuration"
);
var compareVersionsResponseSchema = chunk4JAXFPYO_cjs.createCompareVersionsResponseSchema(agentVersionSchema);
exports.agentVersionPathParams = agentVersionPathParams;
exports.agentVersionSchema = agentVersionSchema;
exports.compareVersionsResponseSchema = compareVersionsResponseSchema;
exports.createVersionResponseSchema = createVersionResponseSchema;
exports.getVersionResponseSchema = getVersionResponseSchema;
exports.listVersionsResponseSchema = listVersionsResponseSchema;
exports.restoreVersionResponseSchema = restoreVersionResponseSchema;
exports.versionIdPathParams = versionIdPathParams;
//# sourceMappingURL=chunk-PEXHI73J.cjs.map
//# sourceMappingURL=chunk-PEXHI73J.cjs.map
{"version":3,"sources":["../src/server/schemas/agent-versions.ts"],"names":["z","toolConfigSchema","instructionsSchema","conditionalFieldSchema","modelConfigSchema","toolsConfigSchema","defaultOptionsSchema","storedProcessorGraphSchema","serializedMemoryConfigSchema","scorerConfigSchema","createListVersionsResponseSchema","createCompareVersionsResponseSchema"],"mappings":"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","file":"chunk-PEXHI73J.cjs","sourcesContent":["import { z } from 'zod/v4';\nimport { defaultOptionsSchema } from './default-options';\nimport { serializedMemoryConfigSchema } from './memory-config';\nimport {\n scorerConfigSchema,\n instructionsSchema,\n conditionalFieldSchema,\n modelConfigSchema,\n toolConfigSchema,\n toolsConfigSchema,\n storedProcessorGraphSchema,\n} from './stored-agents';\nimport {\n listVersionsQuerySchema,\n compareVersionsQuerySchema,\n createVersionBodySchema,\n activateVersionResponseSchema,\n deleteVersionResponseSchema,\n versionDiffEntrySchema,\n createListVersionsResponseSchema,\n createCompareVersionsResponseSchema,\n} from './version-common';\n\nconst mcpClientToolsConfigSchema = z.object({\n tools: z.record(z.string(), toolConfigSchema).optional(),\n});\n\n// Re-export shared schemas for backwards compat\nexport {\n listVersionsQuerySchema,\n compareVersionsQuerySchema,\n createVersionBodySchema,\n activateVersionResponseSchema,\n deleteVersionResponseSchema,\n versionDiffEntrySchema,\n};\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\n/**\n * Path parameters for agent version routes\n */\nexport const agentVersionPathParams = z.object({\n agentId: z.string().describe('Unique identifier for the stored agent'),\n});\n\n/**\n * Path parameters for specific version routes\n */\nexport const versionIdPathParams = z.object({\n agentId: z.string().describe('Unique identifier for the stored agent'),\n versionId: z.string().describe('Unique identifier for the version (UUID)'),\n});\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\n/**\n * Agent version object schema (full response)\n * Config fields are top-level on the version (no nested snapshot object).\n * Extends StorageAgentSnapshotType fields.\n */\nexport const agentVersionSchema = z.object({\n id: z.string().describe('Unique identifier for the version (UUID)'),\n agentId: z.string().describe('ID of the agent this version belongs to'),\n versionNumber: z.number().describe('Sequential version number (1, 2, 3, ...)'),\n // Top-level config fields (from StorageAgentSnapshotType)\n name: z.string().describe('Name of the agent'),\n description: z.string().optional().describe('Description of the agent'),\n instructions: instructionsSchema,\n model: conditionalFieldSchema(modelConfigSchema).describe(\n 'Model configuration — static value or array of conditional variants',\n ),\n tools: conditionalFieldSchema(toolsConfigSchema)\n .optional()\n .describe('Tool keys mapped to per-tool config — static or conditional'),\n defaultOptions: conditionalFieldSchema(defaultOptionsSchema)\n .optional()\n .describe('Default options for generate/stream calls — static or conditional'),\n workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Workflow keys with optional per-workflow config — static or conditional'),\n agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Agent keys with optional per-agent config — static or conditional'),\n integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of tool provider IDs to their tool configurations — static or conditional'),\n mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of stored MCP client IDs to their tool configurations — static or conditional'),\n inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Input processor graph — static or conditional'),\n outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Output processor graph — static or conditional'),\n memory: conditionalFieldSchema(serializedMemoryConfigSchema)\n .optional()\n .describe('Memory configuration — static or conditional'),\n scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema))\n .optional()\n .describe('Scorer keys with optional sampling config — static or conditional'),\n requestContextSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('JSON Schema defining valid request context variables'),\n // Version metadata fields\n changedFields: z.array(z.string()).optional().describe('Array of field names that changed from the previous version'),\n changeMessage: z.string().optional().describe('Optional message describing the changes'),\n createdAt: z.coerce.date().describe('When this version was created'),\n});\n\n/**\n * Response for GET /stored/agents/:agentId/versions\n */\nexport const listVersionsResponseSchema = createListVersionsResponseSchema(agentVersionSchema);\n\n/**\n * Response for GET /stored/agents/:agentId/versions/:versionId\n */\nexport const getVersionResponseSchema = agentVersionSchema;\n\n/**\n * Response for POST /stored/agents/:agentId/versions\n */\nexport const createVersionResponseSchema = agentVersionSchema.partial().merge(\n z.object({\n // These fields are always present in a version response\n id: z.string().describe('Unique identifier for the version (UUID)'),\n agentId: z.string().describe('ID of the agent this version belongs to'),\n versionNumber: z.number().describe('Sequential version number (1, 2, 3, ...)'),\n createdAt: z.coerce.date().describe('When this version was created'),\n }),\n);\n\n/**\n * Response for POST /stored/agents/:agentId/versions/:versionId/restore\n */\nexport const restoreVersionResponseSchema = agentVersionSchema.describe(\n 'The newly created version from the restored configuration',\n);\n\n/**\n * Response for GET /stored/agents/:agentId/versions/compare\n */\nexport const compareVersionsResponseSchema: ReturnType<\n typeof createCompareVersionsResponseSchema<typeof agentVersionSchema>\n> = createCompareVersionsResponseSchema(agentVersionSchema);\n"]}
import { storedSkillIdPathParams } from './chunk-FBI32AWY.js';
import { favoriteToggleResponseSchema } from './chunk-SFPN7SHZ.js';
import { requireBuilderFeature } from './chunk-YN5ILIRE.js';
import { getCallerAuthorId, assertReadAccess } from './chunk-ETR4XOVD.js';
import { assertStoredResourceScope, getStoredResourceScope } from './chunk-4GWTCVFL.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
// src/server/handlers/stored-skill-favorites.ts
async function getFavoritesContext(mastra) {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new HTTPException(500, { message: "Skills storage domain is not available" });
}
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) {
throw new HTTPException(500, { message: "Favorites storage domain is not available" });
}
return { skillStore, favoritesStore };
}
var FAVORITE_STORED_SKILL_ROUTE = createRoute({
method: "PUT",
path: "/stored/skills/:storedSkillId/favorite",
responseType: "json",
pathParamSchema: storedSkillIdPathParams,
responseSchema: favoriteToggleResponseSchema,
summary: "Favorite a stored skill",
description: "Marks the stored skill as favorited by the calling user. Idempotent.",
tags: ["Stored Skills"],
requiresAuth: true,
requiresPermission: "stored-skills:read",
handler: async ({ mastra, requestContext, storedSkillId }) => {
try {
await requireBuilderFeature(mastra, "favorites");
const callerId = getCallerAuthorId(requestContext);
if (!callerId) {
throw new HTTPException(401, { message: "Authentication required" });
}
const { skillStore, favoritesStore } = await getFavoritesContext(mastra);
const skill = await skillStore.getByIdResolved(storedSkillId);
if (!skill) {
throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));
assertReadAccess({ requestContext, resource: "stored-skills", resourceId: storedSkillId, record: skill });
const result = await favoritesStore.favorite({
userId: callerId,
entityType: "skill",
entityId: storedSkillId
});
return result;
} catch (error) {
return handleError(error, "Error favoriting stored skill");
}
}
});
var UNFAVORITE_STORED_SKILL_ROUTE = createRoute({
method: "DELETE",
path: "/stored/skills/:storedSkillId/favorite",
responseType: "json",
pathParamSchema: storedSkillIdPathParams,
responseSchema: favoriteToggleResponseSchema,
summary: "Unfavorite a stored skill",
description: "Removes the caller\u2019s favorite from the stored skill. Idempotent.",
tags: ["Stored Skills"],
requiresAuth: true,
requiresPermission: "stored-skills:read",
handler: async ({ mastra, requestContext, storedSkillId }) => {
try {
await requireBuilderFeature(mastra, "favorites");
const callerId = getCallerAuthorId(requestContext);
if (!callerId) {
throw new HTTPException(401, { message: "Authentication required" });
}
const { skillStore, favoritesStore } = await getFavoritesContext(mastra);
const skill = await skillStore.getByIdResolved(storedSkillId);
if (!skill) {
throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));
assertReadAccess({ requestContext, resource: "stored-skills", resourceId: storedSkillId, record: skill });
const result = await favoritesStore.unfavorite({
userId: callerId,
entityType: "skill",
entityId: storedSkillId
});
return result;
} catch (error) {
return handleError(error, "Error unfavoriting stored skill");
}
}
});
export { FAVORITE_STORED_SKILL_ROUTE, UNFAVORITE_STORED_SKILL_ROUTE };
//# sourceMappingURL=chunk-PTOMNQ6N.js.map
//# sourceMappingURL=chunk-PTOMNQ6N.js.map
{"version":3,"sources":["../src/server/handlers/stored-skill-favorites.ts"],"names":[],"mappings":"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","file":"chunk-PTOMNQ6N.js","sourcesContent":["import { HTTPException } from '../http-exception';\nimport { favoriteToggleResponseSchema } from '../schemas/favorites';\nimport { storedSkillIdPathParams } from '../schemas/stored-skills';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { assertReadAccess, getCallerAuthorId } from './authorship';\nimport { requireBuilderFeature } from './editor-builder';\nimport { handleError } from './error';\n\n/**\n * Resolves the storage and favorites domains, throwing 500 if unavailable.\n */\nasync function getFavoritesContext(mastra: Parameters<typeof requireBuilderFeature>[0]) {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) {\n throw new HTTPException(500, { message: 'Favorites storage domain is not available' });\n }\n return { skillStore, favoritesStore };\n}\n\n/**\n * PUT /stored/skills/:storedSkillId/favorite\n */\nexport const FAVORITE_STORED_SKILL_ROUTE = createRoute({\n method: 'PUT',\n path: '/stored/skills/:storedSkillId/favorite',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Favorite a stored skill',\n description: 'Marks the stored skill as favorited by the calling user. Idempotent.',\n tags: ['Stored Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { skillStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const skill = await skillStore.getByIdResolved(storedSkillId);\n if (!skill) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller cannot read the skill (private + not owner/admin).\n assertReadAccess({ requestContext, resource: 'stored-skills', resourceId: storedSkillId, record: skill });\n\n const result = await favoritesStore.favorite({\n userId: callerId,\n entityType: 'skill',\n entityId: storedSkillId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error favoriting stored skill');\n }\n },\n});\n\n/**\n * DELETE /stored/skills/:storedSkillId/favorite\n */\nexport const UNFAVORITE_STORED_SKILL_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/skills/:storedSkillId/favorite',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Unfavorite a stored skill',\n description: 'Removes the caller’s favorite from the stored skill. Idempotent.',\n tags: ['Stored Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { skillStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const skill = await skillStore.getByIdResolved(storedSkillId);\n if (!skill) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));\n\n assertReadAccess({ requestContext, resource: 'stored-skills', resourceId: storedSkillId, record: skill });\n\n const result = await favoritesStore.unfavorite({\n userId: callerId,\n entityType: 'skill',\n entityId: storedSkillId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error unfavoriting stored skill');\n }\n },\n});\n"]}
import { listScorerVersionsResponseSchema, listScorerVersionsQuerySchema, scorerVersionPathParams, createScorerVersionResponseSchema, createScorerVersionBodySchema, getScorerVersionResponseSchema, scorerVersionIdPathParams, activateScorerVersionResponseSchema, restoreScorerVersionResponseSchema, deleteScorerVersionResponseSchema, compareScorerVersionsResponseSchema, compareScorerVersionsQuerySchema } from './chunk-JGNE4R5G.js';
import { extractConfigFromVersion, calculateChangedFields, createVersionWithRetry, enforceRetentionLimit, computeVersionDiffs } from './chunk-33QPJPK4.js';
import { assertStoredResourceScope, getStoredResourceScope } from './chunk-4GWTCVFL.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
// src/server/handlers/scorer-versions.ts
var SNAPSHOT_CONFIG_FIELDS = [
"name",
"description",
"type",
"model",
"instructions",
"scoreRange",
"presetConfig",
"defaultSampling"
];
var LIST_SCORER_VERSIONS_ROUTE = createRoute({
method: "GET",
path: "/stored/scorers/:scorerId/versions",
requiresAuth: true,
responseType: "json",
pathParamSchema: scorerVersionPathParams,
queryParamSchema: listScorerVersionsQuerySchema,
responseSchema: listScorerVersionsResponseSchema,
summary: "List scorer versions",
description: "Returns a paginated list of all versions for a stored scorer",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, page, perPage, orderBy, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));
const result = await scorerStore.listVersions({
scorerDefinitionId: scorerId,
page,
perPage,
orderBy
});
return result;
} catch (error) {
return handleError(error, "Error listing scorer versions");
}
}
});
var CREATE_SCORER_VERSION_ROUTE = createRoute({
method: "POST",
path: "/stored/scorers/:scorerId/versions",
requiresAuth: true,
responseType: "json",
pathParamSchema: scorerVersionPathParams,
bodySchema: createScorerVersionBodySchema,
responseSchema: createScorerVersionResponseSchema,
summary: "Create scorer version",
description: "Creates a new version snapshot of the current scorer configuration",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, changeMessage, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));
let currentConfig = {};
if (scorer.activeVersionId) {
const activeVersion = await scorerStore.getVersion(scorer.activeVersionId);
if (activeVersion) {
currentConfig = extractConfigFromVersion(
activeVersion,
SNAPSHOT_CONFIG_FIELDS
);
}
}
const latestVersion = await scorerStore.getLatestVersion(scorerId);
if (!scorer.activeVersionId && latestVersion) {
currentConfig = extractConfigFromVersion(
latestVersion,
SNAPSHOT_CONFIG_FIELDS
);
}
const previousConfig = latestVersion ? extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
const changedFields = calculateChangedFields(previousConfig, currentConfig);
const { versionId } = await createVersionWithRetry(
scorerStore,
scorerId,
"scorerDefinitionId",
currentConfig,
changedFields,
{ changeMessage }
);
const version = await scorerStore.getVersion(versionId);
if (!version) {
throw new HTTPException(500, { message: "Failed to retrieve created version" });
}
await enforceRetentionLimit(
scorerStore,
scorerId,
"scorerDefinitionId",
scorer.activeVersionId
);
return version;
} catch (error) {
return handleError(error, "Error creating scorer version");
}
}
});
var GET_SCORER_VERSION_ROUTE = createRoute({
method: "GET",
path: "/stored/scorers/:scorerId/versions/:versionId",
requiresAuth: true,
responseType: "json",
pathParamSchema: scorerVersionIdPathParams,
responseSchema: getScorerVersionResponseSchema,
summary: "Get scorer version",
description: "Returns a specific version of a scorer by its version ID",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const version = await scorerStore.getVersion(versionId);
if (!version) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.scorerDefinitionId !== scorerId) {
throw new HTTPException(404, {
message: `Version with id ${versionId} not found for scorer ${scorerId}`
});
}
const scorer = await scorerStore.getById(scorerId);
assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));
return version;
} catch (error) {
return handleError(error, "Error getting scorer version");
}
}
});
var ACTIVATE_SCORER_VERSION_ROUTE = createRoute({
method: "POST",
path: "/stored/scorers/:scorerId/versions/:versionId/activate",
requiresAuth: true,
responseType: "json",
pathParamSchema: scorerVersionIdPathParams,
responseSchema: activateScorerVersionResponseSchema,
summary: "Activate scorer version",
description: "Sets a specific version as the active version for the scorer",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));
const version = await scorerStore.getVersion(versionId);
if (!version) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.scorerDefinitionId !== scorerId) {
throw new HTTPException(404, {
message: `Version with id ${versionId} not found for scorer ${scorerId}`
});
}
await scorerStore.update({
id: scorerId,
activeVersionId: versionId,
status: "published"
});
mastra.getEditor()?.scorer.clearCache(scorerId);
return {
success: true,
message: `Version ${version.versionNumber} is now active`,
activeVersionId: versionId
};
} catch (error) {
return handleError(error, "Error activating scorer version");
}
}
});
var RESTORE_SCORER_VERSION_ROUTE = createRoute({
method: "POST",
path: "/stored/scorers/:scorerId/versions/:versionId/restore",
requiresAuth: true,
responseType: "json",
pathParamSchema: scorerVersionIdPathParams,
responseSchema: restoreScorerVersionResponseSchema,
summary: "Restore scorer version",
description: "Restores the scorer configuration from a version, creating a new version",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));
const versionToRestore = await scorerStore.getVersion(versionId);
if (!versionToRestore) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (versionToRestore.scorerDefinitionId !== scorerId) {
throw new HTTPException(404, {
message: `Version with id ${versionId} not found for scorer ${scorerId}`
});
}
const restoredConfig = extractConfigFromVersion(
versionToRestore,
SNAPSHOT_CONFIG_FIELDS
);
await scorerStore.update({
id: scorerId,
...restoredConfig
});
const latestVersion = await scorerStore.getLatestVersion(scorerId);
const previousConfig = latestVersion ? extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
const changedFields = calculateChangedFields(previousConfig, restoredConfig);
const { versionId: newVersionId } = await createVersionWithRetry(
scorerStore,
scorerId,
"scorerDefinitionId",
restoredConfig,
changedFields,
{
changeMessage: `Restored from version ${versionToRestore.versionNumber}`
}
);
const newVersion = await scorerStore.getVersion(newVersionId);
if (!newVersion) {
throw new HTTPException(500, { message: "Failed to retrieve created version" });
}
await enforceRetentionLimit(
scorerStore,
scorerId,
"scorerDefinitionId",
scorer.activeVersionId
);
mastra.getEditor()?.scorer.clearCache(scorerId);
return newVersion;
} catch (error) {
return handleError(error, "Error restoring scorer version");
}
}
});
var DELETE_SCORER_VERSION_ROUTE = createRoute({
method: "DELETE",
path: "/stored/scorers/:scorerId/versions/:versionId",
requiresAuth: true,
responseType: "json",
pathParamSchema: scorerVersionIdPathParams,
responseSchema: deleteScorerVersionResponseSchema,
summary: "Delete scorer version",
description: "Deletes a specific version (cannot delete the active version)",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));
const version = await scorerStore.getVersion(versionId);
if (!version) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.scorerDefinitionId !== scorerId) {
throw new HTTPException(404, {
message: `Version with id ${versionId} not found for scorer ${scorerId}`
});
}
if (scorer.activeVersionId === versionId) {
throw new HTTPException(400, {
message: "Cannot delete the active version. Activate a different version first."
});
}
await scorerStore.deleteVersion(versionId);
mastra.getEditor()?.scorer.clearCache(scorerId);
return {
success: true,
message: `Version ${version.versionNumber} deleted successfully`
};
} catch (error) {
return handleError(error, "Error deleting scorer version");
}
}
});
var COMPARE_SCORER_VERSIONS_ROUTE = createRoute({
method: "GET",
path: "/stored/scorers/:scorerId/versions/compare",
requiresAuth: true,
responseType: "json",
pathParamSchema: scorerVersionPathParams,
queryParamSchema: compareScorerVersionsQuerySchema,
responseSchema: compareScorerVersionsResponseSchema,
summary: "Compare scorer versions",
description: "Compares two versions and returns the differences between them",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, from, to, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));
const fromVersion = await scorerStore.getVersion(from);
if (!fromVersion) {
throw new HTTPException(404, { message: `Version with id ${from} not found` });
}
if (fromVersion.scorerDefinitionId !== scorerId) {
throw new HTTPException(404, {
message: `Version with id ${from} not found for scorer ${scorerId}`
});
}
const toVersion = await scorerStore.getVersion(to);
if (!toVersion) {
throw new HTTPException(404, { message: `Version with id ${to} not found` });
}
if (toVersion.scorerDefinitionId !== scorerId) {
throw new HTTPException(404, {
message: `Version with id ${to} not found for scorer ${scorerId}`
});
}
const fromConfig = extractConfigFromVersion(
fromVersion,
SNAPSHOT_CONFIG_FIELDS
);
const toConfig = extractConfigFromVersion(
toVersion,
SNAPSHOT_CONFIG_FIELDS
);
const diffs = computeVersionDiffs(fromConfig, toConfig);
return {
diffs,
fromVersion,
toVersion
};
} catch (error) {
return handleError(error, "Error comparing scorer versions");
}
}
});
export { ACTIVATE_SCORER_VERSION_ROUTE, COMPARE_SCORER_VERSIONS_ROUTE, CREATE_SCORER_VERSION_ROUTE, DELETE_SCORER_VERSION_ROUTE, GET_SCORER_VERSION_ROUTE, LIST_SCORER_VERSIONS_ROUTE, RESTORE_SCORER_VERSION_ROUTE };
//# sourceMappingURL=chunk-RPPHTS6D.js.map
//# sourceMappingURL=chunk-RPPHTS6D.js.map
{"version":3,"sources":["../src/server/handlers/scorer-versions.ts"],"names":[],"mappings":"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","file":"chunk-RPPHTS6D.js","sourcesContent":["import { HTTPException } from '../http-exception';\nimport {\n scorerVersionPathParams,\n scorerVersionIdPathParams,\n listScorerVersionsQuerySchema,\n createScorerVersionBodySchema,\n compareScorerVersionsQuerySchema,\n listScorerVersionsResponseSchema,\n getScorerVersionResponseSchema,\n createScorerVersionResponseSchema,\n activateScorerVersionResponseSchema,\n restoreScorerVersionResponseSchema,\n deleteScorerVersionResponseSchema,\n compareScorerVersionsResponseSchema,\n} from '../schemas/scorer-versions';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { handleError } from './error';\nimport {\n extractConfigFromVersion,\n calculateChangedFields,\n computeVersionDiffs,\n createVersionWithRetry,\n enforceRetentionLimit,\n} from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\nconst SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'type',\n 'model',\n 'instructions',\n 'scoreRange',\n 'presetConfig',\n 'defaultSampling',\n] as const;\n\n/**\n * GET /stored/scorers/:scorerId/versions - List all versions for a scorer\n */\nexport const LIST_SCORER_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:scorerId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionPathParams,\n queryParamSchema: listScorerVersionsQuerySchema,\n responseSchema: listScorerVersionsResponseSchema,\n summary: 'List scorer versions',\n description: 'Returns a paginated list of all versions for a stored scorer',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, page, perPage, orderBy, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const result = await scorerStore.listVersions({\n scorerDefinitionId: scorerId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing scorer versions');\n }\n },\n});\n\n/**\n * POST /stored/scorers/:scorerId/versions - Create a new version snapshot\n */\nexport const CREATE_SCORER_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers/:scorerId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionPathParams,\n bodySchema: createScorerVersionBodySchema,\n responseSchema: createScorerVersionResponseSchema,\n summary: 'Create scorer version',\n description: 'Creates a new version snapshot of the current scorer configuration',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, changeMessage, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n let currentConfig: Record<string, unknown> = {};\n if (scorer.activeVersionId) {\n const activeVersion = await scorerStore.getVersion(scorer.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n const latestVersion = await scorerStore.getLatestVersion(scorerId);\n\n // If no activeVersionId, fall back to latest version config\n if (!scorer.activeVersionId && latestVersion) {\n currentConfig = extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, currentConfig);\n\n const { versionId } = await createVersionWithRetry(\n scorerStore as unknown as VersionedStoreInterface,\n scorerId,\n 'scorerDefinitionId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n const version = await scorerStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n scorerStore as unknown as VersionedStoreInterface,\n scorerId,\n 'scorerDefinitionId',\n scorer.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating scorer version');\n }\n },\n});\n\n/**\n * GET /stored/scorers/:scorerId/versions/:versionId - Get a specific version\n */\nexport const GET_SCORER_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:scorerId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionIdPathParams,\n responseSchema: getScorerVersionResponseSchema,\n summary: 'Get scorer version',\n description: 'Returns a specific version of a scorer by its version ID',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const version = await scorerStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n if (version.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for scorer ${scorerId}`,\n });\n }\n const scorer = await scorerStore.getById(scorerId);\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting scorer version');\n }\n },\n});\n\n/**\n * POST /stored/scorers/:scorerId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_SCORER_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers/:scorerId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionIdPathParams,\n responseSchema: activateScorerVersionResponseSchema,\n summary: 'Activate scorer version',\n description: 'Sets a specific version as the active version for the scorer',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const version = await scorerStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for scorer ${scorerId}`,\n });\n }\n\n await scorerStore.update({\n id: scorerId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.scorer.clearCache(scorerId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} is now active`,\n activeVersionId: versionId,\n };\n } catch (error) {\n return handleError(error, 'Error activating scorer version');\n }\n },\n});\n\n/**\n * POST /stored/scorers/:scorerId/versions/:versionId/restore - Restore scorer to a version\n */\nexport const RESTORE_SCORER_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers/:scorerId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionIdPathParams,\n responseSchema: restoreScorerVersionResponseSchema,\n summary: 'Restore scorer version',\n description: 'Restores the scorer configuration from a version, creating a new version',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const versionToRestore = await scorerStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for scorer ${scorerId}`,\n });\n }\n\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n await scorerStore.update({\n id: scorerId,\n ...restoredConfig,\n });\n\n const latestVersion = await scorerStore.getLatestVersion(scorerId);\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, restoredConfig);\n\n const { versionId: newVersionId } = await createVersionWithRetry(\n scorerStore as unknown as VersionedStoreInterface,\n scorerId,\n 'scorerDefinitionId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n const newVersion = await scorerStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n scorerStore as unknown as VersionedStoreInterface,\n scorerId,\n 'scorerDefinitionId',\n scorer.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.scorer.clearCache(scorerId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring scorer version');\n }\n },\n});\n\n/**\n * DELETE /stored/scorers/:scorerId/versions/:versionId - Delete a version\n */\nexport const DELETE_SCORER_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/scorers/:scorerId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionIdPathParams,\n responseSchema: deleteScorerVersionResponseSchema,\n summary: 'Delete scorer version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const version = await scorerStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for scorer ${scorerId}`,\n });\n }\n\n if (scorer.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await scorerStore.deleteVersion(versionId);\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.scorer.clearCache(scorerId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting scorer version');\n }\n },\n});\n\n/**\n * GET /stored/scorers/:scorerId/versions/compare - Compare two versions\n */\nexport const COMPARE_SCORER_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:scorerId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionPathParams,\n queryParamSchema: compareScorerVersionsQuerySchema,\n responseSchema: compareScorerVersionsResponseSchema,\n summary: 'Compare scorer versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, from, to, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n const scorer = await scorerStore.getById(scorerId);\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const fromVersion = await scorerStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${from} not found for scorer ${scorerId}`,\n });\n }\n\n const toVersion = await scorerStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${to} not found for scorer ${scorerId}`,\n });\n }\n\n const fromConfig = extractConfigFromVersion(\n fromVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n const toConfig = extractConfigFromVersion(\n toVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n const diffs = computeVersionDiffs(fromConfig, toConfig);\n\n return {\n diffs,\n fromVersion,\n toVersion,\n };\n } catch (error) {\n return handleError(error, 'Error comparing scorer versions');\n }\n },\n});\n"]}
import { listStoredScorersResponseSchema, listStoredScorersQuerySchema, getStoredScorerResponseSchema, storedScorerIdPathParams, createStoredScorerResponseSchema, createStoredScorerBodySchema, updateStoredScorerResponseSchema, updateStoredScorerBodySchema, deleteStoredScorerResponseSchema } from './chunk-IYRXXIKZ.js';
import { handleAutoVersioning } from './chunk-33QPJPK4.js';
import { statusQuerySchema } from './chunk-6VTOGOS2.js';
import { getStoredResourceScope, scopeStoredResourceMetadata, assertStoredResourceScope, toSlug } from './chunk-4GWTCVFL.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
// src/server/handlers/stored-scorers.ts
var SCORER_SNAPSHOT_CONFIG_FIELDS = [
"name",
"description",
"type",
"model",
"instructions",
"scoreRange",
"presetConfig",
"defaultSampling"
];
var LIST_STORED_SCORERS_ROUTE = createRoute({
method: "GET",
path: "/stored/scorers",
responseType: "json",
queryParamSchema: listStoredScorersQuerySchema,
responseSchema: listStoredScorersResponseSchema,
summary: "List stored scorer definitions",
description: "Returns a paginated list of all scorer definitions stored in the database",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({ mastra, page, perPage, orderBy, status, authorId, metadata, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scope = await getStoredResourceScope(mastra, requestContext);
const result = await scorerStore.listResolved({
page,
perPage,
orderBy,
status,
authorId,
metadata: scopeStoredResourceMetadata(metadata, scope)
});
return result;
} catch (error) {
return handleError(error, "Error listing stored scorer definitions");
}
}
});
var GET_STORED_SCORER_ROUTE = createRoute({
method: "GET",
path: "/stored/scorers/:storedScorerId",
responseType: "json",
pathParamSchema: storedScorerIdPathParams,
queryParamSchema: statusQuerySchema,
responseSchema: getStoredScorerResponseSchema,
summary: "Get stored scorer definition by ID",
description: "Returns a specific scorer definition from storage by its unique identifier. Use ?status=draft to resolve with the latest (draft) version, or ?status=published (default) for the active published version.",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({ mastra, storedScorerId, status, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getByIdResolved(storedScorerId, { status });
if (!scorer) {
throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });
}
assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));
return scorer;
} catch (error) {
return handleError(error, "Error getting stored scorer definition");
}
}
});
var CREATE_STORED_SCORER_ROUTE = createRoute({
method: "POST",
path: "/stored/scorers",
responseType: "json",
bodySchema: createStoredScorerBodySchema,
responseSchema: createStoredScorerResponseSchema,
summary: "Create stored scorer definition",
description: "Creates a new scorer definition in storage with the provided configuration",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({
mastra,
id: providedId,
authorId,
metadata,
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling,
requestContext
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const id = providedId || toSlug(name);
if (!id) {
throw new HTTPException(400, {
message: "Could not derive scorer definition ID from name. Please provide an explicit id."
});
}
const existing = await scorerStore.getById(id);
if (existing) {
throw new HTTPException(409, { message: `Scorer definition with id ${id} already exists` });
}
await scorerStore.create({
scorerDefinition: {
id,
authorId,
metadata: scopeStoredResourceMetadata(metadata, await getStoredResourceScope(mastra, requestContext)),
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling
}
});
const resolved = await scorerStore.getByIdResolved(id, { status: "draft" });
if (!resolved) {
throw new HTTPException(500, { message: "Failed to resolve created scorer definition" });
}
return resolved;
} catch (error) {
return handleError(error, "Error creating stored scorer definition");
}
}
});
var UPDATE_STORED_SCORER_ROUTE = createRoute({
method: "PATCH",
path: "/stored/scorers/:storedScorerId",
responseType: "json",
pathParamSchema: storedScorerIdPathParams,
bodySchema: updateStoredScorerBodySchema,
responseSchema: updateStoredScorerResponseSchema,
summary: "Update stored scorer definition",
description: "Updates an existing scorer definition in storage with the provided fields",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({
mastra,
storedScorerId,
// Metadata-level fields
authorId,
metadata,
// Config fields (snapshot-level)
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling,
requestContext
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const existing = await scorerStore.getById(storedScorerId);
if (!existing) {
throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });
}
const scope = await getStoredResourceScope(mastra, requestContext);
assertStoredResourceScope(existing, scope);
const scopedMetadata = metadata !== void 0 ? scopeStoredResourceMetadata({ ...existing.metadata ?? {}, ...metadata }, scope) : void 0;
const updatedScorer = await scorerStore.update({
id: storedScorerId,
authorId,
...scopedMetadata !== void 0 ? { metadata: scopedMetadata } : {},
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling
});
const configFields = {
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling
};
const providedConfigFields = Object.fromEntries(Object.entries(configFields).filter(([_, v]) => v !== void 0));
await handleAutoVersioning(
scorerStore,
storedScorerId,
"scorerDefinitionId",
SCORER_SNAPSHOT_CONFIG_FIELDS,
existing,
updatedScorer,
providedConfigFields
);
const editor = mastra.getEditor();
if (editor) {
editor.scorer.clearCache(storedScorerId);
}
const resolved = await scorerStore.getByIdResolved(storedScorerId, { status: "draft" });
if (!resolved) {
throw new HTTPException(500, { message: "Failed to resolve updated scorer definition" });
}
return resolved;
} catch (error) {
return handleError(error, "Error updating stored scorer definition");
}
}
});
var DELETE_STORED_SCORER_ROUTE = createRoute({
method: "DELETE",
path: "/stored/scorers/:storedScorerId",
responseType: "json",
pathParamSchema: storedScorerIdPathParams,
responseSchema: deleteStoredScorerResponseSchema,
summary: "Delete stored scorer definition",
description: "Deletes a scorer definition from storage by its unique identifier",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({ mastra, storedScorerId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const existing = await scorerStore.getById(storedScorerId);
if (!existing) {
throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });
}
assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));
await scorerStore.delete(storedScorerId);
mastra.getEditor()?.scorer.clearCache(storedScorerId);
return { success: true, message: `Scorer definition ${storedScorerId} deleted successfully` };
} catch (error) {
return handleError(error, "Error deleting stored scorer definition");
}
}
});
export { CREATE_STORED_SCORER_ROUTE, DELETE_STORED_SCORER_ROUTE, GET_STORED_SCORER_ROUTE, LIST_STORED_SCORERS_ROUTE, UPDATE_STORED_SCORER_ROUTE };
//# sourceMappingURL=chunk-RWL3CJF7.js.map
//# sourceMappingURL=chunk-RWL3CJF7.js.map
{"version":3,"sources":["../src/server/handlers/stored-scorers.ts"],"names":[],"mappings":"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","file":"chunk-RWL3CJF7.js","sourcesContent":["import { HTTPException } from '../http-exception';\nimport {\n storedScorerIdPathParams,\n statusQuerySchema,\n listStoredScorersQuerySchema,\n createStoredScorerBodySchema,\n updateStoredScorerBodySchema,\n listStoredScorersResponseSchema,\n getStoredScorerResponseSchema,\n createStoredScorerResponseSchema,\n updateStoredScorerResponseSchema,\n deleteStoredScorerResponseSchema,\n} from '../schemas/stored-scorers';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope, scopeStoredResourceMetadata, toSlug } from '../utils';\n\nimport { handleError } from './error';\nimport { handleAutoVersioning } from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\nconst SCORER_SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'type',\n 'model',\n 'instructions',\n 'scoreRange',\n 'presetConfig',\n 'defaultSampling',\n] as const;\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/scorers - List all stored scorer definitions\n */\nexport const LIST_STORED_SCORERS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers',\n responseType: 'json',\n queryParamSchema: listStoredScorersQuerySchema,\n responseSchema: listStoredScorersResponseSchema,\n summary: 'List stored scorer definitions',\n description: 'Returns a paginated list of all scorer definitions stored in the database',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, page, perPage, orderBy, status, authorId, metadata, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scope = await getStoredResourceScope(mastra, requestContext);\n const result = await scorerStore.listResolved({\n page,\n perPage,\n orderBy,\n status,\n authorId,\n metadata: scopeStoredResourceMetadata(metadata, scope),\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing stored scorer definitions');\n }\n },\n});\n\n/**\n * GET /stored/scorers/:storedScorerId - Get a stored scorer definition by ID\n */\nexport const GET_STORED_SCORER_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n queryParamSchema: statusQuerySchema,\n responseSchema: getStoredScorerResponseSchema,\n summary: 'Get stored scorer definition by ID',\n description:\n 'Returns a specific scorer definition from storage by its unique identifier. Use ?status=draft to resolve with the latest (draft) version, or ?status=published (default) for the active published version.',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, storedScorerId, status, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getByIdResolved(storedScorerId, { status });\n\n if (!scorer) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n return scorer;\n } catch (error) {\n return handleError(error, 'Error getting stored scorer definition');\n }\n },\n});\n\n/**\n * POST /stored/scorers - Create a new stored scorer definition\n */\nexport const CREATE_STORED_SCORER_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers',\n responseType: 'json',\n bodySchema: createStoredScorerBodySchema,\n responseSchema: createStoredScorerResponseSchema,\n summary: 'Create stored scorer definition',\n description: 'Creates a new scorer definition in storage with the provided configuration',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({\n mastra,\n id: providedId,\n authorId,\n metadata,\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n requestContext,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Derive ID from name if not explicitly provided\n const id = providedId || toSlug(name);\n\n if (!id) {\n throw new HTTPException(400, {\n message: 'Could not derive scorer definition ID from name. Please provide an explicit id.',\n });\n }\n\n // Check if scorer definition with this ID already exists\n const existing = await scorerStore.getById(id);\n if (existing) {\n throw new HTTPException(409, { message: `Scorer definition with id ${id} already exists` });\n }\n\n await scorerStore.create({\n scorerDefinition: {\n id,\n authorId,\n metadata: scopeStoredResourceMetadata(metadata, await getStoredResourceScope(mastra, requestContext)),\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n },\n });\n\n // Return the resolved scorer definition (thin record + version config)\n // Use draft status since newly created entities start as drafts\n const resolved = await scorerStore.getByIdResolved(id, { status: 'draft' });\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve created scorer definition' });\n }\n\n return resolved;\n } catch (error) {\n return handleError(error, 'Error creating stored scorer definition');\n }\n },\n});\n\n/**\n * PATCH /stored/scorers/:storedScorerId - Update a stored scorer definition\n */\nexport const UPDATE_STORED_SCORER_ROUTE = createRoute({\n method: 'PATCH',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n bodySchema: updateStoredScorerBodySchema,\n responseSchema: updateStoredScorerResponseSchema,\n summary: 'Update stored scorer definition',\n description: 'Updates an existing scorer definition in storage with the provided fields',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({\n mastra,\n storedScorerId,\n // Metadata-level fields\n authorId,\n metadata,\n // Config fields (snapshot-level)\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n requestContext,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Check if scorer definition exists\n const existing = await scorerStore.getById(storedScorerId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n const scope = await getStoredResourceScope(mastra, requestContext);\n assertStoredResourceScope(existing, scope);\n const scopedMetadata =\n metadata !== undefined\n ? scopeStoredResourceMetadata({ ...(existing.metadata ?? {}), ...metadata }, scope)\n : undefined;\n\n // Update the scorer definition with both metadata-level and config-level fields\n const updatedScorer = await scorerStore.update({\n id: storedScorerId,\n authorId,\n ...(scopedMetadata !== undefined ? { metadata: scopedMetadata } : {}),\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n });\n\n // Build the snapshot config for auto-versioning comparison\n const configFields = {\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n };\n\n // Filter out undefined values to get only the config fields that were provided\n const providedConfigFields = Object.fromEntries(Object.entries(configFields).filter(([_, v]) => v !== undefined));\n\n // Handle auto-versioning with retry logic for race conditions\n // This creates a new version if there are meaningful config changes.\n // It does NOT update activeVersionId — the version stays as a draft until explicitly published.\n await handleAutoVersioning(\n scorerStore as unknown as VersionedStoreInterface,\n storedScorerId,\n 'scorerDefinitionId',\n SCORER_SNAPSHOT_CONFIG_FIELDS,\n existing,\n updatedScorer,\n providedConfigFields,\n );\n\n // Clear the cached scorer instance so the next request gets the updated config\n const editor = mastra.getEditor();\n if (editor) {\n editor.scorer.clearCache(storedScorerId);\n }\n\n // Return the resolved scorer definition with the latest (draft) version so the UI sees its edits\n const resolved = await scorerStore.getByIdResolved(storedScorerId, { status: 'draft' });\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve updated scorer definition' });\n }\n\n return resolved;\n } catch (error) {\n return handleError(error, 'Error updating stored scorer definition');\n }\n },\n});\n\n/**\n * DELETE /stored/scorers/:storedScorerId - Delete a stored scorer definition\n */\nexport const DELETE_STORED_SCORER_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n responseSchema: deleteStoredScorerResponseSchema,\n summary: 'Delete stored scorer definition',\n description: 'Deletes a scorer definition from storage by its unique identifier',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, storedScorerId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Check if scorer definition exists\n const existing = await scorerStore.getById(storedScorerId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));\n\n await scorerStore.delete(storedScorerId);\n\n // Clear the cached scorer instance\n mastra.getEditor()?.scorer.clearCache(storedScorerId);\n\n return { success: true, message: `Scorer definition ${storedScorerId} deleted successfully` };\n } catch (error) {\n return handleError(error, 'Error deleting stored scorer definition');\n }\n },\n});\n"]}
import { LIST_STORED_SKILLS_ROUTE, GET_STORED_SKILL_ROUTE, CREATE_STORED_SKILL_ROUTE, UPDATE_STORED_SKILL_ROUTE, DELETE_STORED_SKILL_ROUTE, PUBLISH_STORED_SKILL_ROUTE } from './chunk-VE2FUYFD.js';
import { LIST_STORED_WORKSPACES_ROUTE, GET_STORED_WORKSPACE_ROUTE, CREATE_STORED_WORKSPACE_ROUTE, UPDATE_STORED_WORKSPACE_ROUTE, DELETE_STORED_WORKSPACE_ROUTE } from './chunk-CLZVCJJX.js';
import { GET_SYSTEM_PACKAGES_ROUTE, GET_API_SCHEMA_ROUTE } from './chunk-LWKCKC57.js';
import { LIST_TOOL_PROVIDERS_ROUTE, LIST_TOOL_PROVIDER_TOOLKITS_ROUTE, LIST_TOOL_PROVIDER_TOOLS_ROUTE, GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE, AUTHORIZE_TOOL_PROVIDER_ROUTE, GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE, TOOL_PROVIDER_CONNECTION_STATUS_ROUTE, LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE, LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE, DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE, UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE, GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE, GET_TOOL_PROVIDER_HEALTH_ROUTE } from './chunk-ODT3BA2T.js';
import { FAVORITE_STORED_AGENT_ROUTE, UNFAVORITE_STORED_AGENT_ROUTE } from './chunk-3WBNJWA4.js';
import { LIST_STORED_AGENTS_ROUTE, PREVIEW_INSTRUCTIONS_ROUTE, GET_STORED_AGENT_DEPENDENTS_ROUTE, EXPORT_STORED_AGENT_ROUTE, OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE, GET_STORED_AGENT_ROUTE, CREATE_STORED_AGENT_ROUTE, UPDATE_STORED_AGENT_ROUTE, DELETE_STORED_AGENT_ROUTE } from './chunk-7RPGRDSC.js';
import { LIST_STORED_MCP_CLIENTS_ROUTE, GET_STORED_MCP_CLIENT_ROUTE, CREATE_STORED_MCP_CLIENT_ROUTE, UPDATE_STORED_MCP_CLIENT_ROUTE, DELETE_STORED_MCP_CLIENT_ROUTE } from './chunk-RZZJ4L32.js';
import { LIST_STORED_PROMPT_BLOCKS_ROUTE, GET_STORED_PROMPT_BLOCK_ROUTE, CREATE_STORED_PROMPT_BLOCK_ROUTE, UPDATE_STORED_PROMPT_BLOCK_ROUTE, DELETE_STORED_PROMPT_BLOCK_ROUTE } from './chunk-4ESLXJ4G.js';
import { LIST_STORED_SCORERS_ROUTE, GET_STORED_SCORER_ROUTE, CREATE_STORED_SCORER_ROUTE, UPDATE_STORED_SCORER_ROUTE, DELETE_STORED_SCORER_ROUTE } from './chunk-RWL3CJF7.js';
import { FAVORITE_STORED_SKILL_ROUTE, UNFAVORITE_STORED_SKILL_ROUTE } from './chunk-PTOMNQ6N.js';
import { LIST_PROCESSORS_ROUTE, GET_PROCESSOR_BY_ID_ROUTE, EXECUTE_PROCESSOR_ROUTE } from './chunk-QWBZYM2G.js';
import { LIST_PROMPT_BLOCK_VERSIONS_ROUTE, CREATE_PROMPT_BLOCK_VERSION_ROUTE, COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE, GET_PROMPT_BLOCK_VERSION_ROUTE, ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE, RESTORE_PROMPT_BLOCK_VERSION_ROUTE, DELETE_PROMPT_BLOCK_VERSION_ROUTE } from './chunk-HVMCICMF.js';
import { LIST_SCHEDULES_ROUTE, GET_SCHEDULE_ROUTE, CREATE_SCHEDULE_ROUTE, UPDATE_SCHEDULE_ROUTE, DELETE_SCHEDULE_ROUTE, LIST_SCHEDULE_TRIGGERS_ROUTE, PAUSE_SCHEDULE_ROUTE, RESUME_SCHEDULE_ROUTE, RUN_SCHEDULE_ROUTE } from './chunk-HYBDPQZ4.js';
import { LIST_SCORER_VERSIONS_ROUTE, CREATE_SCORER_VERSION_ROUTE, COMPARE_SCORER_VERSIONS_ROUTE, GET_SCORER_VERSION_ROUTE, ACTIVATE_SCORER_VERSION_ROUTE, RESTORE_SCORER_VERSION_ROUTE, DELETE_SCORER_VERSION_ROUTE } from './chunk-RPPHTS6D.js';
import { LIST_PROCESSOR_PROVIDERS_ROUTE, GET_PROCESSOR_PROVIDER_ROUTE } from './chunk-ULJ6JC5K.js';
import { LIST_DATASETS_ROUTE, CREATE_DATASET_ROUTE, GET_DATASET_ROUTE, UPDATE_DATASET_ROUTE, DELETE_DATASET_ROUTE, LIST_ITEMS_ROUTE, ADD_ITEM_ROUTE, BATCH_INSERT_ITEMS_ROUTE, BATCH_DELETE_ITEMS_ROUTE, GET_ITEM_ROUTE, UPDATE_ITEM_ROUTE, DELETE_ITEM_ROUTE, LIST_DATASET_VERSIONS_ROUTE, LIST_ITEM_VERSIONS_ROUTE, GET_ITEM_VERSION_ROUTE, LIST_ALL_EXPERIMENTS_ROUTE, EXPERIMENT_REVIEW_SUMMARY_ROUTE, LIST_EXPERIMENTS_ROUTE, TRIGGER_EXPERIMENT_ROUTE, GET_EXPERIMENT_ROUTE, LIST_EXPERIMENT_RESULTS_ROUTE, UPDATE_EXPERIMENT_RESULT_ROUTE, COMPARE_EXPERIMENTS_ROUTE, GENERATE_ITEMS_ROUTE, CLUSTER_FAILURES_ROUTE } from './chunk-5AM2O3JF.js';
import { GET_EDITOR_BUILDER_SETTINGS_ROUTE, GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE, GET_INFRASTRUCTURE_STATUS_ROUTE } from './chunk-YN5ILIRE.js';
import { LIST_MCP_CLIENT_VERSIONS_ROUTE, CREATE_MCP_CLIENT_VERSION_ROUTE, COMPARE_MCP_CLIENT_VERSIONS_ROUTE, GET_MCP_CLIENT_VERSION_ROUTE, ACTIVATE_MCP_CLIENT_VERSION_ROUTE, RESTORE_MCP_CLIENT_VERSION_ROUTE, DELETE_MCP_CLIENT_VERSION_ROUTE } from './chunk-DTJXVPYD.js';
import { LIST_AGENT_VERSIONS_ROUTE, CREATE_AGENT_VERSION_ROUTE, COMPARE_AGENT_VERSIONS_ROUTE, GET_AGENT_VERSION_ROUTE, ACTIVATE_AGENT_VERSION_ROUTE, RESTORE_AGENT_VERSION_ROUTE, DELETE_AGENT_VERSION_ROUTE } from './chunk-7OY3AGJJ.js';
import { BACKGROUND_TASK_STREAM_ROUTE, LIST_BACKGROUND_TASKS_ROUTE, GET_BACKGROUND_TASK_ROUTE } from './chunk-UKDD2I3O.js';
import { LIST_BUILDER_REGISTRIES_ROUTE, BUILDER_REGISTRY_SEARCH_ROUTE, BUILDER_REGISTRY_POPULAR_ROUTE, BUILDER_REGISTRY_PREVIEW_ROUTE, BUILDER_REGISTRY_INSTALL_ROUTE } from './chunk-COBVX6FO.js';
import { LIST_CHANNEL_PLATFORMS_ROUTE, LIST_CHANNEL_INSTALLATIONS_ROUTE, CONNECT_CHANNEL_ROUTE, DISCONNECT_CHANNEL_ROUTE } from './chunk-2A4R6GSR.js';
import { UPSERT_VECTORS_ROUTE, CREATE_INDEX_ROUTE, QUERY_VECTORS_ROUTE, LIST_INDEXES_ROUTE, DESCRIBE_INDEX_ROUTE, DELETE_INDEX_ROUTE, LIST_VECTORS_ROUTE, LIST_EMBEDDERS_ROUTE } from './chunk-HP7234Q6.js';
import { GET_SPEAKERS_ROUTE, GET_SPEAKERS_DEPRECATED_ROUTE, GENERATE_SPEECH_ROUTE, GENERATE_SPEECH_DEPRECATED_ROUTE, TRANSCRIBE_SPEECH_ROUTE, TRANSCRIBE_SPEECH_DEPRECATED_ROUTE, GET_LISTENER_ROUTE } from './chunk-2YL7Z4BF.js';
import { LIST_WORKSPACES_ROUTE, GET_WORKSPACE_ROUTE, WORKSPACE_FS_ROUTES, WORKSPACE_SEARCH_ROUTES, WORKSPACE_SKILLS_ROUTES, WORKSPACE_SKILLS_SH_ROUTES } from './chunk-3H36PZH5.js';
import { EXECUTE_AGENT_TOOL_ROUTE, GET_AGENT_TOOL_ROUTE, LIST_TOOLS_ROUTE, GET_TOOL_BY_ID_ROUTE, EXECUTE_TOOL_ROUTE } from './chunk-EJFNGIUY.js';
import { LIST_SCORERS_ROUTE, GET_SCORER_ROUTE, LIST_SCORES_BY_RUN_ID_ROUTE, LIST_SCORES_BY_SCORER_ID_ROUTE, LIST_SCORES_BY_ENTITY_ID_ROUTE, SAVE_SCORE_ROUTE } from './chunk-UWFWR77Y.js';
import { CREATE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE } from './chunk-JQRNW7TI.js';
import { LIST_MCP_SERVERS_ROUTE, GET_MCP_SERVER_DETAIL_ROUTE, LIST_MCP_SERVER_TOOLS_ROUTE, GET_MCP_SERVER_TOOL_DETAIL_ROUTE, EXECUTE_MCP_SERVER_TOOL_ROUTE, LIST_MCP_SERVER_RESOURCES_ROUTE, READ_MCP_SERVER_RESOURCE_ROUTE, MCP_HTTP_TRANSPORT_ROUTE, MCP_SSE_TRANSPORT_ROUTE, MCP_SSE_MESSAGES_ROUTE } from './chunk-T272I2ME.js';
import { GET_MEMORY_STATUS_ROUTE, GET_MEMORY_CONFIG_ROUTE, GET_OBSERVATIONAL_MEMORY_ROUTE, AWAIT_BUFFER_STATUS_ROUTE, LIST_THREADS_ROUTE, GET_THREAD_BY_ID_ROUTE, LIST_MESSAGES_ROUTE, GET_WORKING_MEMORY_ROUTE, SAVE_MESSAGES_ROUTE, CREATE_THREAD_ROUTE, UPDATE_THREAD_ROUTE, DELETE_THREAD_ROUTE, CLONE_THREAD_ROUTE, UPDATE_WORKING_MEMORY_ROUTE, DELETE_MESSAGES_ROUTE, SEARCH_MEMORY_ROUTE, GET_MEMORY_STATUS_NETWORK_ROUTE, LIST_THREADS_NETWORK_ROUTE, GET_THREAD_BY_ID_NETWORK_ROUTE, LIST_MESSAGES_NETWORK_ROUTE, SAVE_MESSAGES_NETWORK_ROUTE, CREATE_THREAD_NETWORK_ROUTE, UPDATE_THREAD_NETWORK_ROUTE, DELETE_THREAD_NETWORK_ROUTE, DELETE_MESSAGES_NETWORK_ROUTE } from './chunk-AJXH4AOX.js';
import { LIST_TRACES_ROUTE, LIST_TRACES_LIGHT_ROUTE, LIST_BRANCHES_ROUTE, GET_BRANCH_ROUTE, GET_TRACE_ROUTE, GET_TRACE_LIGHT_ROUTE, GET_SPAN_ROUTE, GET_TRACE_TRAJECTORY_ROUTE, SCORE_TRACES_ROUTE, LIST_SCORES_BY_SPAN_ROUTE } from './chunk-ZVTNACHY.js';
import { LIST_METRICS, LIST_LOGS, LIST_SCORES, CREATE_SCORE, GET_SCORE, GET_SCORE_AGGREGATE, GET_SCORE_BREAKDOWN, GET_SCORE_TIME_SERIES, GET_SCORE_PERCENTILES, LIST_FEEDBACK, CREATE_FEEDBACK, GET_FEEDBACK_AGGREGATE, GET_FEEDBACK_BREAKDOWN, GET_FEEDBACK_TIME_SERIES, GET_FEEDBACK_PERCENTILES, GET_METRIC_AGGREGATE, GET_METRIC_BREAKDOWN, GET_METRIC_TIME_SERIES, GET_METRIC_PERCENTILES, GET_METRIC_NAMES, GET_METRIC_LABEL_KEYS, GET_METRIC_LABEL_VALUES, GET_ENTITY_TYPES, GET_ENTITY_NAMES, GET_SERVICE_NAMES, GET_ENVIRONMENTS, GET_TAGS } from './chunk-NZZLZSVD.js';
import { CREATE_CONVERSATION_ROUTE, GET_CONVERSATION_ROUTE, GET_CONVERSATION_ITEMS_ROUTE, DELETE_CONVERSATION_ROUTE } from './chunk-6POMTBSS.js';
import { LIST_LOG_TRANSPORTS_ROUTE, LIST_LOGS_ROUTE, LIST_LOGS_BY_RUN_ID_ROUTE } from './chunk-5ZFBQKCW.js';
import { GET_AGENT_CARD_ROUTE, AGENT_EXECUTION_ROUTE } from './chunk-YCO7GF33.js';
import { LIST_AGENTS_ROUTE, GET_PROVIDERS_ROUTE, GET_AGENT_BY_ID_ROUTE, CLONE_AGENT_ROUTE, GENERATE_AGENT_ROUTE, GENERATE_AGENT_VNEXT_ROUTE, STREAM_GENERATE_ROUTE, STREAM_UNTIL_IDLE_GENERATE_ROUTE, STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE, OBSERVE_AGENT_STREAM_ROUTE, SEND_AGENT_MESSAGE_ROUTE, QUEUE_AGENT_MESSAGE_ROUTE, SEND_AGENT_SIGNAL_ROUTE, ABORT_AGENT_THREAD_ROUTE, SUBSCRIBE_AGENT_THREAD_ROUTE, APPROVE_TOOL_CALL_ROUTE, SEND_TOOL_APPROVAL_ROUTE, LIST_SUSPENDED_RUNS_ROUTE, DECLINE_TOOL_CALL_ROUTE, RESUME_STREAM_ROUTE, RECOVER_ROUTE, APPROVE_TOOL_CALL_GENERATE_ROUTE, DECLINE_TOOL_CALL_GENERATE_ROUTE, APPROVE_NETWORK_TOOL_CALL_ROUTE, DECLINE_NETWORK_TOOL_CALL_ROUTE, RESUME_STREAM_UNTIL_IDLE_ROUTE, STREAM_NETWORK_ROUTE, UPDATE_AGENT_MODEL_ROUTE, RESET_AGENT_MODEL_ROUTE, REORDER_AGENT_MODEL_LIST_ROUTE, UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE, ENHANCE_INSTRUCTIONS_ROUTE, GET_AGENT_SKILL_ROUTE, STREAM_VNEXT_DEPRECATED_ROUTE, STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE, STREAM_UI_MESSAGE_DEPRECATED_ROUTE, GENERATE_LEGACY_ROUTE, STREAM_GENERATE_LEGACY_ROUTE } from './chunk-4AGRNM7F.js';
import { AUTH_ROUTES } from './chunk-JF7G5FSK.js';
import { LIST_AGENT_BUILDER_ACTIONS_ROUTE, GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE, LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE, GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE, CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE, STREAM_AGENT_BUILDER_ACTION_ROUTE, STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE, START_ASYNC_AGENT_BUILDER_ACTION_ROUTE, START_AGENT_BUILDER_ACTION_RUN_ROUTE, OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE, OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE, RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE, RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE, RESUME_AGENT_BUILDER_ACTION_ROUTE, RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE, CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE } from './chunk-TRLQF6DU.js';
import { LIST_WORKFLOWS_ROUTE, GET_WORKFLOW_BY_ID_ROUTE, LIST_WORKFLOW_RUNS_ROUTE, GET_WORKFLOW_RUN_BY_ID_ROUTE, DELETE_WORKFLOW_RUN_BY_ID_ROUTE, CREATE_WORKFLOW_RUN_ROUTE, STREAM_WORKFLOW_ROUTE, RESUME_STREAM_WORKFLOW_ROUTE, START_ASYNC_WORKFLOW_ROUTE, START_WORKFLOW_RUN_ROUTE, OBSERVE_STREAM_WORKFLOW_ROUTE, RESUME_ASYNC_WORKFLOW_ROUTE, RESUME_NO_WAIT_WORKFLOW_ROUTE, RESUME_WORKFLOW_ROUTE, CANCEL_WORKFLOW_RUN_ROUTE, TIME_TRAVEL_WORKFLOW_ROUTE, TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE, TIME_TRAVEL_STREAM_WORKFLOW_ROUTE, RESTART_WORKFLOW_ROUTE, RESTART_ASYNC_WORKFLOW_ROUTE, RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE, RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE, EXECUTE_WORKFLOW_STEP_ROUTE, RECEIVE_WORKFLOW_EVENT_ROUTE, STREAM_LEGACY_WORKFLOW_ROUTE, OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE } from './chunk-TKOUI25C.js';
import { LIST_AGENT_CONTROLLERS_ROUTE, LIST_AGENT_CONTROLLER_MODES_ROUTE, LIST_AGENT_CONTROLLER_MODELS_ROUTE, CREATE_AGENT_CONTROLLER_SESSION_ROUTE, GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE, LIST_AGENT_CONTROLLER_THREADS_ROUTE, CREATE_AGENT_CONTROLLER_THREAD_ROUTE, DELETE_AGENT_CONTROLLER_THREAD_ROUTE, RENAME_AGENT_CONTROLLER_THREAD_ROUTE, CLONE_AGENT_CONTROLLER_THREAD_ROUTE, LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE, STREAM_AGENT_CONTROLLER_SESSION_ROUTE, SEND_AGENT_CONTROLLER_MESSAGE_ROUTE, STEER_AGENT_CONTROLLER_SESSION_ROUTE, FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE, ABORT_AGENT_CONTROLLER_SESSION_ROUTE, AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE, AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE, SWITCH_AGENT_CONTROLLER_MODE_ROUTE, SWITCH_AGENT_CONTROLLER_MODEL_ROUTE, SWITCH_AGENT_CONTROLLER_THREAD_ROUTE, SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE, GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE, GET_AGENT_CONTROLLER_OM_RECORD_ROUTE, SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE, GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE, GET_AGENT_CONTROLLER_GOAL_ROUTE, SET_AGENT_CONTROLLER_GOAL_ROUTE, UPDATE_AGENT_CONTROLLER_GOAL_ROUTE, CLEAR_AGENT_CONTROLLER_GOAL_ROUTE, GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE, SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE, SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE, SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE } from './chunk-GQESDOVN.js';
// src/server/server-adapter/routes/permissions.ts
var METHOD_TO_ACTION = {
GET: "read",
POST: "write",
// Default for POST, may be overridden to 'execute'
PUT: "write",
PATCH: "write",
DELETE: "delete"
};
var EXECUTE_PATTERNS = [
"/generate",
"/stream",
"/execute",
"/start",
"/resume",
"/restart",
"/cancel",
"/approve",
"/decline",
"/speak",
"/listen",
"/query",
"/search",
"/observe",
"/time-travel",
"/enhance",
"/clone"
];
var PUBLISH_PATTERNS = ["/publish", "/activate", "/restore"];
var STORED_RESOURCE_SEGMENTS = {
agents: "stored-agents",
"mcp-clients": "stored-mcp-clients",
"prompt-blocks": "stored-prompt-blocks",
scorers: "stored-scorers",
skills: "stored-skills",
workspaces: "stored-workspaces"
};
function extractResource(path) {
const segments = path.replace(/^\//, "").split("/");
if (segments.length === 0) {
return null;
}
const firstSegment = segments[0];
if (firstSegment === "stored" && segments[1]) {
return STORED_RESOURCE_SEGMENTS[segments[1]] ?? null;
}
if (firstSegment === ".well-known") {
return "a2a";
}
return firstSegment || null;
}
function deriveAction(method, path) {
const upperMethod = method.toUpperCase();
if (upperMethod === "POST") {
if (path.startsWith("/stored/")) {
const isPublishOperation = PUBLISH_PATTERNS.some((pattern) => path.endsWith(pattern));
if (isPublishOperation) {
return "publish";
}
}
const isExecuteOperation = EXECUTE_PATTERNS.some((pattern) => path.includes(pattern));
return isExecuteOperation ? "execute" : "write";
}
return METHOD_TO_ACTION[upperMethod] || "read";
}
function derivePermission(route) {
if (route.method === "ALL") {
return null;
}
const resource = extractResource(route.path);
if (!resource) {
return null;
}
const action = deriveAction(route.method, route.path);
return `${resource}:${action}`;
}
function getEffectivePermission(route) {
if (route.requiresAuth === false) {
return null;
}
if (route.requiresPermission) {
return route.requiresPermission;
}
return derivePermission(route);
}
// src/server/server-adapter/routes/a2a.ts
var A2A_ROUTES = [GET_AGENT_CARD_ROUTE, AGENT_EXECUTION_ROUTE];
// src/server/server-adapter/routes/agent-builder.ts
var AGENT_BUILDER_ROUTES = [
LIST_AGENT_BUILDER_ACTIONS_ROUTE,
GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,
LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,
GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,
CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,
STREAM_AGENT_BUILDER_ACTION_ROUTE,
STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
START_AGENT_BUILDER_ACTION_RUN_ROUTE,
OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,
OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,
RESUME_AGENT_BUILDER_ACTION_ROUTE,
RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,
CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE
];
// src/server/server-adapter/routes/agent-controller.ts
var AGENT_CONTROLLER_ROUTES = [
LIST_AGENT_CONTROLLERS_ROUTE,
LIST_AGENT_CONTROLLER_MODES_ROUTE,
LIST_AGENT_CONTROLLER_MODELS_ROUTE,
CREATE_AGENT_CONTROLLER_SESSION_ROUTE,
GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE,
LIST_AGENT_CONTROLLER_THREADS_ROUTE,
CREATE_AGENT_CONTROLLER_THREAD_ROUTE,
DELETE_AGENT_CONTROLLER_THREAD_ROUTE,
RENAME_AGENT_CONTROLLER_THREAD_ROUTE,
CLONE_AGENT_CONTROLLER_THREAD_ROUTE,
LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE,
STREAM_AGENT_CONTROLLER_SESSION_ROUTE,
SEND_AGENT_CONTROLLER_MESSAGE_ROUTE,
STEER_AGENT_CONTROLLER_SESSION_ROUTE,
FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE,
ABORT_AGENT_CONTROLLER_SESSION_ROUTE,
AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE,
AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE,
SWITCH_AGENT_CONTROLLER_MODE_ROUTE,
SWITCH_AGENT_CONTROLLER_MODEL_ROUTE,
SWITCH_AGENT_CONTROLLER_THREAD_ROUTE,
SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE,
GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE,
GET_AGENT_CONTROLLER_OM_RECORD_ROUTE,
SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE,
GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE,
GET_AGENT_CONTROLLER_GOAL_ROUTE,
SET_AGENT_CONTROLLER_GOAL_ROUTE,
UPDATE_AGENT_CONTROLLER_GOAL_ROUTE,
CLEAR_AGENT_CONTROLLER_GOAL_ROUTE,
GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE,
SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE,
SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE,
SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE
];
// src/server/server-adapter/routes/agents.ts
var AGENTS_ROUTES = [
// ============================================================================
// Agent Core Routes
// ============================================================================
LIST_AGENTS_ROUTE,
GET_PROVIDERS_ROUTE,
GET_AGENT_BY_ID_ROUTE,
CLONE_AGENT_ROUTE,
// ============================================================================
// Voice Routes
// ============================================================================
GET_SPEAKERS_ROUTE,
GET_SPEAKERS_DEPRECATED_ROUTE,
// ============================================================================
// Agent Execution Routes
// ============================================================================
GENERATE_AGENT_ROUTE,
GENERATE_AGENT_VNEXT_ROUTE,
STREAM_GENERATE_ROUTE,
STREAM_UNTIL_IDLE_GENERATE_ROUTE,
STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,
// ============================================================================
// Resumable Stream Routes
// ============================================================================
OBSERVE_AGENT_STREAM_ROUTE,
SEND_AGENT_MESSAGE_ROUTE,
QUEUE_AGENT_MESSAGE_ROUTE,
SEND_AGENT_SIGNAL_ROUTE,
ABORT_AGENT_THREAD_ROUTE,
SUBSCRIBE_AGENT_THREAD_ROUTE,
// ============================================================================
// Tool Routes
// ============================================================================
EXECUTE_AGENT_TOOL_ROUTE,
APPROVE_TOOL_CALL_ROUTE,
SEND_TOOL_APPROVAL_ROUTE,
LIST_SUSPENDED_RUNS_ROUTE,
DECLINE_TOOL_CALL_ROUTE,
RESUME_STREAM_ROUTE,
RECOVER_ROUTE,
APPROVE_TOOL_CALL_GENERATE_ROUTE,
DECLINE_TOOL_CALL_GENERATE_ROUTE,
APPROVE_NETWORK_TOOL_CALL_ROUTE,
DECLINE_NETWORK_TOOL_CALL_ROUTE,
RESUME_STREAM_UNTIL_IDLE_ROUTE,
// ============================================================================
// Network Routes
// ============================================================================
STREAM_NETWORK_ROUTE,
// ============================================================================
// Model Management Routes
// ============================================================================
UPDATE_AGENT_MODEL_ROUTE,
RESET_AGENT_MODEL_ROUTE,
REORDER_AGENT_MODEL_LIST_ROUTE,
UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,
// ============================================================================
// Instruction Enhancement Routes
// ============================================================================
ENHANCE_INSTRUCTIONS_ROUTE,
// ============================================================================
// Agent Tool Routes
// ============================================================================
GET_AGENT_TOOL_ROUTE,
// ============================================================================
// Agent Skill Routes
// ============================================================================
GET_AGENT_SKILL_ROUTE,
// ============================================================================
// Voice/Speech Routes
// ============================================================================
GENERATE_SPEECH_ROUTE,
GENERATE_SPEECH_DEPRECATED_ROUTE,
TRANSCRIBE_SPEECH_ROUTE,
TRANSCRIBE_SPEECH_DEPRECATED_ROUTE,
GET_LISTENER_ROUTE,
// ============================================================================
// Deprecated Routes
// ============================================================================
STREAM_VNEXT_DEPRECATED_ROUTE,
STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,
STREAM_UI_MESSAGE_DEPRECATED_ROUTE
];
// src/server/server-adapter/routes/background-tasks.ts
var BACKGROUND_TASK_ROUTES = [
BACKGROUND_TASK_STREAM_ROUTE,
LIST_BACKGROUND_TASKS_ROUTE,
GET_BACKGROUND_TASK_ROUTE
];
// src/server/server-adapter/routes/channels.ts
var CHANNELS_ROUTES = [
LIST_CHANNEL_PLATFORMS_ROUTE,
LIST_CHANNEL_INSTALLATIONS_ROUTE,
CONNECT_CHANNEL_ROUTE,
DISCONNECT_CHANNEL_ROUTE
];
// src/server/server-adapter/routes/conversations.ts
var CONVERSATIONS_ROUTES = [
CREATE_CONVERSATION_ROUTE,
GET_CONVERSATION_ROUTE,
GET_CONVERSATION_ITEMS_ROUTE,
DELETE_CONVERSATION_ROUTE
];
// src/server/server-adapter/routes/datasets.ts
var DATASETS_ROUTES = [
// Dataset CRUD
LIST_DATASETS_ROUTE,
CREATE_DATASET_ROUTE,
GET_DATASET_ROUTE,
UPDATE_DATASET_ROUTE,
DELETE_DATASET_ROUTE,
// Item list and add
LIST_ITEMS_ROUTE,
ADD_ITEM_ROUTE,
// Batch operations - MUST come before item-specific routes to avoid /items/batch matching /items/:itemId
BATCH_INSERT_ITEMS_ROUTE,
BATCH_DELETE_ITEMS_ROUTE,
// Item-specific CRUD (uses :itemId param)
GET_ITEM_ROUTE,
UPDATE_ITEM_ROUTE,
DELETE_ITEM_ROUTE,
// Version operations
LIST_DATASET_VERSIONS_ROUTE,
LIST_ITEM_VERSIONS_ROUTE,
GET_ITEM_VERSION_ROUTE,
// All experiments (cross-dataset) - MUST come before dataset-scoped experiments
LIST_ALL_EXPERIMENTS_ROUTE,
// Experiment review summary (cross-dataset) - MUST come before dataset-scoped experiments
EXPERIMENT_REVIEW_SUMMARY_ROUTE,
// Experiment operations (dataset-scoped)
LIST_EXPERIMENTS_ROUTE,
TRIGGER_EXPERIMENT_ROUTE,
GET_EXPERIMENT_ROUTE,
LIST_EXPERIMENT_RESULTS_ROUTE,
UPDATE_EXPERIMENT_RESULT_ROUTE,
// Analytics
COMPARE_EXPERIMENTS_ROUTE,
// AI generation
GENERATE_ITEMS_ROUTE,
// Failure analysis
CLUSTER_FAILURES_ROUTE
];
// src/server/server-adapter/routes/editor-builder.ts
var EDITOR_BUILDER_ROUTES = [
GET_EDITOR_BUILDER_SETTINGS_ROUTE,
GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE,
GET_INFRASTRUCTURE_STATUS_ROUTE,
LIST_BUILDER_REGISTRIES_ROUTE,
BUILDER_REGISTRY_SEARCH_ROUTE,
BUILDER_REGISTRY_POPULAR_ROUTE,
BUILDER_REGISTRY_PREVIEW_ROUTE,
BUILDER_REGISTRY_INSTALL_ROUTE
];
// src/server/server-adapter/routes/legacy.ts
var LEGACY_ROUTES = [
// ============================================================================
// Legacy Agent Routes
// ============================================================================
GENERATE_LEGACY_ROUTE,
STREAM_GENERATE_LEGACY_ROUTE,
// ============================================================================
// Legacy Workflow Routes
// ============================================================================
STREAM_LEGACY_WORKFLOW_ROUTE,
OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE
];
// src/server/server-adapter/routes/logs.ts
var LOGS_ROUTES = [LIST_LOG_TRANSPORTS_ROUTE, LIST_LOGS_ROUTE, LIST_LOGS_BY_RUN_ID_ROUTE];
// src/server/server-adapter/routes/mcp.ts
var MCP_ROUTES = [
// ============================================================================
// MCP Server Registry Routes
// ============================================================================
LIST_MCP_SERVERS_ROUTE,
GET_MCP_SERVER_DETAIL_ROUTE,
// ============================================================================
// MCP Server Tool Routes
// ============================================================================
LIST_MCP_SERVER_TOOLS_ROUTE,
GET_MCP_SERVER_TOOL_DETAIL_ROUTE,
EXECUTE_MCP_SERVER_TOOL_ROUTE,
// ============================================================================
// MCP Server Resource Routes
// ============================================================================
LIST_MCP_SERVER_RESOURCES_ROUTE,
READ_MCP_SERVER_RESOURCE_ROUTE,
// ============================================================================
// MCP Transport Routes (handled by adapters)
// ============================================================================
MCP_HTTP_TRANSPORT_ROUTE,
MCP_SSE_TRANSPORT_ROUTE,
MCP_SSE_MESSAGES_ROUTE
];
// src/server/server-adapter/routes/memory.ts
var MEMORY_ROUTES = [
GET_MEMORY_STATUS_ROUTE,
GET_MEMORY_CONFIG_ROUTE,
GET_OBSERVATIONAL_MEMORY_ROUTE,
AWAIT_BUFFER_STATUS_ROUTE,
LIST_THREADS_ROUTE,
GET_THREAD_BY_ID_ROUTE,
LIST_MESSAGES_ROUTE,
GET_WORKING_MEMORY_ROUTE,
SAVE_MESSAGES_ROUTE,
CREATE_THREAD_ROUTE,
UPDATE_THREAD_ROUTE,
DELETE_THREAD_ROUTE,
CLONE_THREAD_ROUTE,
UPDATE_WORKING_MEMORY_ROUTE,
DELETE_MESSAGES_ROUTE,
SEARCH_MEMORY_ROUTE,
GET_MEMORY_STATUS_NETWORK_ROUTE,
LIST_THREADS_NETWORK_ROUTE,
GET_THREAD_BY_ID_NETWORK_ROUTE,
LIST_MESSAGES_NETWORK_ROUTE,
SAVE_MESSAGES_NETWORK_ROUTE,
CREATE_THREAD_NETWORK_ROUTE,
UPDATE_THREAD_NETWORK_ROUTE,
DELETE_THREAD_NETWORK_ROUTE,
DELETE_MESSAGES_NETWORK_ROUTE
];
// src/server/server-adapter/routes/observability.ts
var OBSERVABILITY_ROUTES = [
// Legacy
LIST_TRACES_ROUTE,
LIST_TRACES_LIGHT_ROUTE,
LIST_BRANCHES_ROUTE,
GET_BRANCH_ROUTE,
GET_TRACE_ROUTE,
GET_TRACE_LIGHT_ROUTE,
GET_SPAN_ROUTE,
GET_TRACE_TRAJECTORY_ROUTE,
SCORE_TRACES_ROUTE,
LIST_SCORES_BY_SPAN_ROUTE,
// New observability routes
LIST_METRICS,
LIST_LOGS,
LIST_SCORES,
CREATE_SCORE,
GET_SCORE,
GET_SCORE_AGGREGATE,
GET_SCORE_BREAKDOWN,
GET_SCORE_TIME_SERIES,
GET_SCORE_PERCENTILES,
LIST_FEEDBACK,
CREATE_FEEDBACK,
GET_FEEDBACK_AGGREGATE,
GET_FEEDBACK_BREAKDOWN,
GET_FEEDBACK_TIME_SERIES,
GET_FEEDBACK_PERCENTILES,
GET_METRIC_AGGREGATE,
GET_METRIC_BREAKDOWN,
GET_METRIC_TIME_SERIES,
GET_METRIC_PERCENTILES,
GET_METRIC_NAMES,
GET_METRIC_LABEL_KEYS,
GET_METRIC_LABEL_VALUES,
GET_ENTITY_TYPES,
GET_ENTITY_NAMES,
GET_SERVICE_NAMES,
GET_ENVIRONMENTS,
GET_TAGS
];
// src/server/server-adapter/routes/processor-providers.ts
var PROCESSOR_PROVIDER_ROUTES = [LIST_PROCESSOR_PROVIDERS_ROUTE, GET_PROCESSOR_PROVIDER_ROUTE];
// src/server/server-adapter/routes/processors.ts
var PROCESSORS_ROUTES = [LIST_PROCESSORS_ROUTE, GET_PROCESSOR_BY_ID_ROUTE, EXECUTE_PROCESSOR_ROUTE];
// src/server/server-adapter/routes/responses.ts
var RESPONSES_ROUTES = [CREATE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE];
// src/server/server-adapter/routes/schedules.ts
var SCHEDULES_ROUTES = [
LIST_SCHEDULES_ROUTE,
GET_SCHEDULE_ROUTE,
CREATE_SCHEDULE_ROUTE,
UPDATE_SCHEDULE_ROUTE,
DELETE_SCHEDULE_ROUTE,
LIST_SCHEDULE_TRIGGERS_ROUTE,
PAUSE_SCHEDULE_ROUTE,
RESUME_SCHEDULE_ROUTE,
RUN_SCHEDULE_ROUTE
];
// src/server/server-adapter/routes/scorers.ts
var SCORES_ROUTES = [
LIST_SCORERS_ROUTE,
GET_SCORER_ROUTE,
LIST_SCORES_BY_RUN_ID_ROUTE,
LIST_SCORES_BY_SCORER_ID_ROUTE,
LIST_SCORES_BY_ENTITY_ID_ROUTE,
SAVE_SCORE_ROUTE
];
// src/server/server-adapter/routes/stored-agents.ts
var STORED_AGENTS_ROUTES = [
// ============================================================================
// Stored Agents CRUD Routes
// IMPORTANT: Routes with literal paths (e.g., /preview-instructions) must come
// BEFORE routes with path parameters (e.g., /:storedAgentId) to ensure correct matching.
// ============================================================================
LIST_STORED_AGENTS_ROUTE,
PREVIEW_INSTRUCTIONS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
GET_STORED_AGENT_DEPENDENTS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE (longer literal)
EXPORT_STORED_AGENT_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
GET_STORED_AGENT_ROUTE,
CREATE_STORED_AGENT_ROUTE,
UPDATE_STORED_AGENT_ROUTE,
DELETE_STORED_AGENT_ROUTE,
// ============================================================================
// Agent Versions Routes
// IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE
// routes with path parameters (e.g., /:versionId) to ensure correct matching.
// ============================================================================
LIST_AGENT_VERSIONS_ROUTE,
CREATE_AGENT_VERSION_ROUTE,
COMPARE_AGENT_VERSIONS_ROUTE,
// Must be before GET_AGENT_VERSION_ROUTE
GET_AGENT_VERSION_ROUTE,
ACTIVATE_AGENT_VERSION_ROUTE,
RESTORE_AGENT_VERSION_ROUTE,
DELETE_AGENT_VERSION_ROUTE,
// ============================================================================
// Favorites (EE)
// ============================================================================
FAVORITE_STORED_AGENT_ROUTE,
UNFAVORITE_STORED_AGENT_ROUTE
];
// src/server/server-adapter/routes/stored-mcp-clients.ts
var STORED_MCP_CLIENTS_ROUTES = [
// Stored MCP Clients CRUD Routes
LIST_STORED_MCP_CLIENTS_ROUTE,
GET_STORED_MCP_CLIENT_ROUTE,
CREATE_STORED_MCP_CLIENT_ROUTE,
UPDATE_STORED_MCP_CLIENT_ROUTE,
DELETE_STORED_MCP_CLIENT_ROUTE,
// MCP Client Versions Routes
// IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE
// routes with path parameters (e.g., /:versionId) to ensure correct matching.
LIST_MCP_CLIENT_VERSIONS_ROUTE,
CREATE_MCP_CLIENT_VERSION_ROUTE,
COMPARE_MCP_CLIENT_VERSIONS_ROUTE,
GET_MCP_CLIENT_VERSION_ROUTE,
ACTIVATE_MCP_CLIENT_VERSION_ROUTE,
RESTORE_MCP_CLIENT_VERSION_ROUTE,
DELETE_MCP_CLIENT_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-prompt-blocks.ts
var STORED_PROMPT_BLOCKS_ROUTES = [
// Stored Prompt Blocks CRUD Routes
LIST_STORED_PROMPT_BLOCKS_ROUTE,
GET_STORED_PROMPT_BLOCK_ROUTE,
CREATE_STORED_PROMPT_BLOCK_ROUTE,
UPDATE_STORED_PROMPT_BLOCK_ROUTE,
DELETE_STORED_PROMPT_BLOCK_ROUTE,
// Prompt Block Versions Routes
// IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE
// routes with path parameters (e.g., /:versionId) to ensure correct matching.
LIST_PROMPT_BLOCK_VERSIONS_ROUTE,
CREATE_PROMPT_BLOCK_VERSION_ROUTE,
COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE,
GET_PROMPT_BLOCK_VERSION_ROUTE,
ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE,
RESTORE_PROMPT_BLOCK_VERSION_ROUTE,
DELETE_PROMPT_BLOCK_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-scorers.ts
var STORED_SCORERS_ROUTES = [
// Stored Scorers CRUD Routes
LIST_STORED_SCORERS_ROUTE,
GET_STORED_SCORER_ROUTE,
CREATE_STORED_SCORER_ROUTE,
UPDATE_STORED_SCORER_ROUTE,
DELETE_STORED_SCORER_ROUTE,
// Scorer Versions Routes
// IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE
// routes with path parameters (e.g., /:versionId) to ensure correct matching.
LIST_SCORER_VERSIONS_ROUTE,
CREATE_SCORER_VERSION_ROUTE,
COMPARE_SCORER_VERSIONS_ROUTE,
GET_SCORER_VERSION_ROUTE,
ACTIVATE_SCORER_VERSION_ROUTE,
RESTORE_SCORER_VERSION_ROUTE,
DELETE_SCORER_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-skills.ts
var STORED_SKILLS_ROUTES = [
// Stored Skills CRUD Routes
LIST_STORED_SKILLS_ROUTE,
GET_STORED_SKILL_ROUTE,
CREATE_STORED_SKILL_ROUTE,
UPDATE_STORED_SKILL_ROUTE,
DELETE_STORED_SKILL_ROUTE,
// Publish
PUBLISH_STORED_SKILL_ROUTE,
// Favorites (EE)
FAVORITE_STORED_SKILL_ROUTE,
UNFAVORITE_STORED_SKILL_ROUTE
];
// src/server/server-adapter/routes/stored-workspaces.ts
var STORED_WORKSPACES_ROUTES = [
// Stored Workspaces CRUD Routes
LIST_STORED_WORKSPACES_ROUTE,
GET_STORED_WORKSPACE_ROUTE,
CREATE_STORED_WORKSPACE_ROUTE,
UPDATE_STORED_WORKSPACE_ROUTE,
DELETE_STORED_WORKSPACE_ROUTE
];
// src/server/server-adapter/routes/system.ts
var SYSTEM_ROUTES = [GET_SYSTEM_PACKAGES_ROUTE, GET_API_SCHEMA_ROUTE];
// src/server/server-adapter/routes/tool-providers.ts
var TOOL_PROVIDER_ROUTES = [
LIST_TOOL_PROVIDERS_ROUTE,
LIST_TOOL_PROVIDER_TOOLKITS_ROUTE,
LIST_TOOL_PROVIDER_TOOLS_ROUTE,
GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE,
AUTHORIZE_TOOL_PROVIDER_ROUTE,
GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE,
TOOL_PROVIDER_CONNECTION_STATUS_ROUTE,
LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE,
LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE,
DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE,
UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE,
GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE,
GET_TOOL_PROVIDER_HEALTH_ROUTE
];
// src/server/server-adapter/routes/tools.ts
var TOOLS_ROUTES = [LIST_TOOLS_ROUTE, GET_TOOL_BY_ID_ROUTE, EXECUTE_TOOL_ROUTE];
// src/server/server-adapter/routes/vectors.ts
var VECTORS_ROUTES = [
UPSERT_VECTORS_ROUTE,
CREATE_INDEX_ROUTE,
QUERY_VECTORS_ROUTE,
LIST_INDEXES_ROUTE,
DESCRIBE_INDEX_ROUTE,
DELETE_INDEX_ROUTE,
LIST_VECTORS_ROUTE,
LIST_EMBEDDERS_ROUTE
];
// src/server/server-adapter/routes/workflows.ts
var WORKFLOWS_ROUTES = [
LIST_WORKFLOWS_ROUTE,
GET_WORKFLOW_BY_ID_ROUTE,
LIST_WORKFLOW_RUNS_ROUTE,
GET_WORKFLOW_RUN_BY_ID_ROUTE,
DELETE_WORKFLOW_RUN_BY_ID_ROUTE,
CREATE_WORKFLOW_RUN_ROUTE,
STREAM_WORKFLOW_ROUTE,
RESUME_STREAM_WORKFLOW_ROUTE,
START_ASYNC_WORKFLOW_ROUTE,
START_WORKFLOW_RUN_ROUTE,
OBSERVE_STREAM_WORKFLOW_ROUTE,
RESUME_ASYNC_WORKFLOW_ROUTE,
RESUME_NO_WAIT_WORKFLOW_ROUTE,
RESUME_WORKFLOW_ROUTE,
CANCEL_WORKFLOW_RUN_ROUTE,
TIME_TRAVEL_WORKFLOW_ROUTE,
TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,
TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,
RESTART_WORKFLOW_ROUTE,
RESTART_ASYNC_WORKFLOW_ROUTE,
RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,
RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,
EXECUTE_WORKFLOW_STEP_ROUTE,
RECEIVE_WORKFLOW_EVENT_ROUTE
];
// src/server/server-adapter/routes/workspace.ts
var WORKSPACE_ROUTES = [
// List all workspaces route (at /api/workspaces)
LIST_WORKSPACES_ROUTE,
// Get workspace route (at /api/workspaces/:workspaceId)
GET_WORKSPACE_ROUTE,
// Filesystem routes (at /api/workspaces/:workspaceId/fs/*)
...WORKSPACE_FS_ROUTES,
// Search routes (at /api/workspaces/:workspaceId/search, /api/workspaces/:workspaceId/index)
...WORKSPACE_SEARCH_ROUTES,
// Skills routes (search must come before parameterized routes)
...WORKSPACE_SKILLS_ROUTES,
// skills.sh proxy routes (at /api/workspaces/:workspaceId/skills-sh/*)
...WORKSPACE_SKILLS_SH_ROUTES
];
// src/server/server-adapter/routes/index.ts
var SERVER_ROUTES = [
...AGENTS_ROUTES,
...AUTH_ROUTES,
...WORKFLOWS_ROUTES,
...TOOLS_ROUTES,
...PROCESSORS_ROUTES,
...RESPONSES_ROUTES,
...CONVERSATIONS_ROUTES,
...MEMORY_ROUTES,
...SCORES_ROUTES,
...OBSERVABILITY_ROUTES,
...LOGS_ROUTES,
...VECTORS_ROUTES,
...A2A_ROUTES,
...WORKSPACE_ROUTES,
...LEGACY_ROUTES,
...MCP_ROUTES,
...STORED_AGENTS_ROUTES,
...STORED_MCP_CLIENTS_ROUTES,
...STORED_PROMPT_BLOCKS_ROUTES,
...STORED_SCORERS_ROUTES,
...STORED_WORKSPACES_ROUTES,
...STORED_SKILLS_ROUTES,
...TOOL_PROVIDER_ROUTES,
...PROCESSOR_PROVIDER_ROUTES,
...SYSTEM_ROUTES,
...DATASETS_ROUTES,
...BACKGROUND_TASK_ROUTES,
...EDITOR_BUILDER_ROUTES,
...AGENT_BUILDER_ROUTES,
...SCHEDULES_ROUTES,
...CHANNELS_ROUTES,
...AGENT_CONTROLLER_ROUTES
];
export { SERVER_ROUTES, deriveAction, derivePermission, extractResource, getEffectivePermission };
//# sourceMappingURL=chunk-SDELLYAU.js.map
//# sourceMappingURL=chunk-SDELLYAU.js.map

Sorry, the diff of this file is too big to display

'use strict';
var chunkBPREBJ3Z_cjs = require('./chunk-BPREBJ3Z.cjs');
var chunkYBLFY24F_cjs = require('./chunk-YBLFY24F.cjs');
var chunkQQJHGSB2_cjs = require('./chunk-QQJHGSB2.cjs');
var chunk3JVOIOO6_cjs = require('./chunk-3JVOIOO6.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunkEJX6WSR6_cjs = require('./chunk-EJX6WSR6.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
var tools = require('@mastra/core/tools');
// src/server/handlers/tools.ts
var tools_exports = {};
chunkO7I5CWRX_cjs.__export(tools_exports, {
EXECUTE_AGENT_TOOL_ROUTE: () => EXECUTE_AGENT_TOOL_ROUTE,
EXECUTE_TOOL_ROUTE: () => EXECUTE_TOOL_ROUTE,
GET_AGENT_TOOL_ROUTE: () => GET_AGENT_TOOL_ROUTE,
GET_TOOL_BY_ID_ROUTE: () => GET_TOOL_BY_ID_ROUTE,
LIST_TOOLS_ROUTE: () => LIST_TOOLS_ROUTE
});
function resolveLazySchema(schema) {
if (typeof schema === "function" && !("~standard" in schema)) {
return resolveLazySchema(schema());
}
return schema;
}
function schemaToJsonSchema(schema) {
if (!schema) {
return void 0;
}
return chunkEJX6WSR6_cjs.standardSchemaToJSONSchema(chunkEJX6WSR6_cjs.toStandardSchema5(schema), { target: "draft-2020-12" });
}
function serializeSchema(schema) {
const jsonSchema = schemaToJsonSchema(resolveLazySchema(schema));
if (jsonSchema === void 0) return void 0;
return chunkEVOVAWN6_cjs.stringify(jsonSchema);
}
async function findToolInAgents(mastra, toolId, requestContext) {
const agents = mastra.listAgents() || {};
for (const agent of Object.values(agents)) {
try {
const agentTools = await agent.listTools({ requestContext });
const found = Object.values(agentTools || {}).find((t) => t.id === toolId);
if (found) return found;
} catch (error) {
mastra.getLogger?.()?.warn?.("Failed to list tools for agent while resolving tool by id", {
agentId: agent?.id,
toolId,
error: error instanceof Error ? error.message : String(error)
});
}
}
return void 0;
}
function serializeTool(tool) {
if (tools.isProviderDefinedTool(tool)) {
const resolvedInput = resolveLazySchema(tool.inputSchema);
const resolvedOutput = resolveLazySchema(tool.outputSchema);
return {
...tool,
inputSchema: resolvedInput && typeof resolvedInput === "object" && "jsonSchema" in resolvedInput ? chunkEVOVAWN6_cjs.stringify(resolvedInput.jsonSchema) : void 0,
outputSchema: resolvedOutput && typeof resolvedOutput === "object" && "jsonSchema" in resolvedOutput ? chunkEVOVAWN6_cjs.stringify(resolvedOutput.jsonSchema) : void 0
};
}
return {
...tool,
inputSchema: serializeSchema(tool.inputSchema),
outputSchema: serializeSchema(tool.outputSchema),
requestContextSchema: serializeSchema(tool.requestContextSchema)
};
}
var LIST_TOOLS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/tools",
responseType: "json",
responseSchema: chunkYBLFY24F_cjs.listToolsResponseSchema,
summary: "List all tools",
description: "Returns a list of all available tools in the system",
tags: ["Tools"],
requiresAuth: true,
handler: async ({ mastra, registeredTools, requestContext }) => {
try {
const registered = registeredTools && Object.keys(registeredTools).length > 0 ? registeredTools : {};
const allTools = {};
const seenToolIds = /* @__PURE__ */ new Map();
for (const [key, tool] of Object.entries(registered)) {
const toolId = typeof tool?.id === "string" ? tool.id : void 0;
if (toolId !== void 0) seenToolIds.set(toolId, key);
allTools[key] = tool;
}
for (const [key, tool] of Object.entries(mastra.listTools() ?? {})) {
const toolId = typeof tool?.id === "string" ? tool.id : void 0;
if (toolId !== void 0 && seenToolIds.has(toolId)) continue;
if (toolId !== void 0) seenToolIds.set(toolId, key);
allTools[key] = tool;
}
const serializedTools = Object.entries(allTools).reduce(
(acc, [id, _tool]) => {
acc[id] = serializeTool(_tool);
return acc;
},
{}
);
const fgaProvider = mastra.getServer?.()?.fga;
const user = requestContext?.get("user");
if (fgaProvider && user) {
const toolList = Object.entries(serializedTools).map(([id, t]) => ({ id, ...t }));
const accessible = await fgaProvider.filterAccessible(user, toolList, "tool", chunkQQJHGSB2_cjs.MastraFGAPermissions.TOOLS_READ);
const accessibleSet = new Set(accessible.map((t) => t.id));
for (const id of Object.keys(serializedTools)) {
if (!accessibleSet.has(id)) {
delete serializedTools[id];
}
}
}
return serializedTools;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting tools");
}
}
});
var GET_TOOL_BY_ID_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/tools/:toolId",
responseType: "json",
pathParamSchema: chunkYBLFY24F_cjs.toolIdPathParams,
responseSchema: chunkYBLFY24F_cjs.serializedToolSchema,
summary: "Get tool by ID",
description: "Returns details for a specific tool including its schema and configuration",
tags: ["Tools"],
requiresAuth: true,
handler: async ({ mastra, registeredTools, toolId, requestContext }) => {
try {
let tool;
if (registeredTools && Object.keys(registeredTools).length > 0) {
tool = Object.values(registeredTools).find((t) => t.id === toolId);
}
if (!tool) {
try {
tool = mastra.getToolById(toolId);
} catch {
}
}
if (!tool) {
tool = await findToolInAgents(mastra, toolId, requestContext);
}
if (!tool) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Tool not found" });
}
return serializeTool(tool);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting tool");
}
}
});
var EXECUTE_TOOL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/tools/:toolId/execute",
responseType: "json",
pathParamSchema: chunkYBLFY24F_cjs.toolIdPathParams,
queryParamSchema: chunk3JVOIOO6_cjs.optionalRunIdSchema,
bodySchema: chunkYBLFY24F_cjs.executeToolContextBodySchema,
responseSchema: chunkYBLFY24F_cjs.executeToolResponseSchema,
summary: "Execute tool",
description: "Executes a specific tool with the provided input data",
tags: ["Tools"],
requiresAuth: true,
handler: async ({ mastra, runId, toolId, registeredTools, requestContext, ...bodyParams }) => {
try {
if (!toolId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Tool ID is required" });
}
let tool;
if (registeredTools && Object.keys(registeredTools).length > 0) {
tool = Object.values(registeredTools).find((t) => t.id === toolId);
}
if (!tool) {
try {
tool = mastra.getToolById(toolId);
} catch {
}
}
if (!tool) {
tool = await findToolInAgents(mastra, toolId, requestContext);
}
if (!tool) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Tool not found" });
}
if (!tool?.execute) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Tool is not executable" });
}
const { data } = bodyParams;
chunkQQJHGSB2_cjs.validateBody({ data });
let result;
if (tools.isVercelTool(tool)) {
result = await tool.execute(data);
} else {
result = await tool.execute(data, {
mastra,
requestContext,
// TODO: Pass proper tracing context when server API supports tracing
tracingContext: { currentSpan: void 0 },
...runId ? {
workflow: {
runId,
suspend: async () => {
}
}
} : {}
});
}
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error executing tool");
}
}
});
var GET_AGENT_TOOL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/agents/:agentId/tools/:toolId",
responseType: "json",
pathParamSchema: chunkYBLFY24F_cjs.agentToolPathParams,
responseSchema: chunkYBLFY24F_cjs.serializedToolSchema,
summary: "Get agent tool",
description: "Returns details for a specific tool assigned to the agent",
tags: ["Agents", "Tools"],
requiresAuth: true,
handler: async ({ mastra, agentId, toolId, requestContext }) => {
try {
if (!agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Agent ID is required" });
}
const agent = await chunkBPREBJ3Z_cjs.getAgentFromSystem({ mastra, agentId });
const agentTools = await agent.listTools({ requestContext });
const tool = Object.values(agentTools || {}).find((tool2) => tool2.id === toolId);
if (!tool) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Tool not found" });
}
return serializeTool(tool);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting agent tool");
}
}
});
var EXECUTE_AGENT_TOOL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/agents/:agentId/tools/:toolId/execute",
responseType: "json",
pathParamSchema: chunkYBLFY24F_cjs.agentToolPathParams,
bodySchema: chunkYBLFY24F_cjs.executeToolBodySchema,
responseSchema: chunkYBLFY24F_cjs.executeToolResponseSchema,
summary: "Execute agent tool",
description: "Executes a specific tool assigned to the agent with the provided input data",
tags: ["Agents", "Tools"],
requiresAuth: true,
handler: async ({ mastra, agentId, toolId, data, requestContext }) => {
try {
if (!agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Agent ID is required" });
}
const agent = await chunkBPREBJ3Z_cjs.getAgentFromSystem({ mastra, agentId });
const agentTools = await agent.listTools({ requestContext });
const tool = Object.values(agentTools || {}).find((tool2) => tool2.id === toolId);
if (!tool) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Tool not found" });
}
if (!tool?.execute) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Tool is not executable" });
}
const result = await tool.execute(data, {
mastra,
requestContext,
// TODO: Pass proper tracing context when server API supports tracing
tracingContext: { currentSpan: void 0 }
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error executing agent tool");
}
}
});
exports.EXECUTE_AGENT_TOOL_ROUTE = EXECUTE_AGENT_TOOL_ROUTE;
exports.EXECUTE_TOOL_ROUTE = EXECUTE_TOOL_ROUTE;
exports.GET_AGENT_TOOL_ROUTE = GET_AGENT_TOOL_ROUTE;
exports.GET_TOOL_BY_ID_ROUTE = GET_TOOL_BY_ID_ROUTE;
exports.LIST_TOOLS_ROUTE = LIST_TOOLS_ROUTE;
exports.tools_exports = tools_exports;
//# sourceMappingURL=chunk-UGQH3IIT.cjs.map
//# sourceMappingURL=chunk-UGQH3IIT.cjs.map
{"version":3,"sources":["../src/server/handlers/tools.ts"],"names":["__export","standardSchemaToJSONSchema","toStandardSchema5","stringify","isProviderDefinedTool","createRoute","listToolsResponseSchema","MastraFGAPermissions","handleError","toolIdPathParams","serializedToolSchema","HTTPException","optionalRunIdSchema","executeToolContextBodySchema","executeToolResponseSchema","validateBody","isVercelTool","agentToolPathParams","getAgentFromSystem","tool","executeToolBodySchema"],"mappings":"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","file":"chunk-UGQH3IIT.cjs","sourcesContent":["import { isVercelTool, isProviderDefinedTool } from '@mastra/core/tools';\nimport { toStandardSchema, standardSchemaToJSONSchema } from '@mastra/schema-compat/schema';\nimport type { PublicSchema } from '@mastra/schema-compat/schema';\nimport { stringify } from 'superjson';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n executeToolContextBodySchema,\n executeToolResponseSchema,\n listToolsResponseSchema,\n serializedToolSchema,\n toolIdPathParams,\n agentToolPathParams,\n executeToolBodySchema,\n} from '../schemas/agents';\nimport { optionalRunIdSchema } from '../schemas/common';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\nimport { validateBody } from './utils';\n\n/**\n * Resolves a schema that may be a lazy function (e.g. AI SDK provider tools).\n * Recursively resolves until a non-function value is returned.\n * Skips functions that are themselves valid schemas (e.g. ArkType types are\n * callable but also implement StandardSchema via ~standard).\n */\nfunction resolveLazySchema(schema: unknown): unknown {\n if (typeof schema === 'function' && !('~standard' in schema)) {\n return resolveLazySchema(schema());\n }\n return schema;\n}\n\nfunction schemaToJsonSchema(schema: PublicSchema<unknown> | undefined) {\n if (!schema) {\n return undefined;\n }\n\n return standardSchemaToJSONSchema(toStandardSchema(schema), { target: 'draft-2020-12' });\n}\n\nfunction serializeSchema(schema: unknown): string | undefined {\n const jsonSchema = schemaToJsonSchema(resolveLazySchema(schema) as PublicSchema<unknown> | undefined);\n if (jsonSchema === undefined) return undefined;\n return stringify(jsonSchema);\n}\n\n/**\n * Searches dynamically-resolved agent tools (provided via `toolsResolver` /\n * function-based `tools`) for a tool with the given id. Used as a fallback\n * after the static tool registry (`registeredTools` + `mastra.getToolById`)\n * misses, so global tool routes can resolve tools that only exist on agents.\n *\n * Errors thrown by an individual agent's `listTools()` are logged and\n * skipped so a single broken resolver doesn't take down the whole lookup.\n */\nasync function findToolInAgents(mastra: any, toolId: string, requestContext: any): Promise<any | undefined> {\n const agents = mastra.listAgents() || {};\n for (const agent of Object.values(agents) as any[]) {\n try {\n const agentTools = await agent.listTools({ requestContext });\n const found = Object.values(agentTools || {}).find((t: any) => t.id === toolId);\n if (found) return found;\n } catch (error) {\n mastra.getLogger?.()?.warn?.('Failed to list tools for agent while resolving tool by id', {\n agentId: agent?.id,\n toolId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return undefined;\n}\n\n/**\n * Serializes a tool for API responses, handling both regular tools (with Zod schemas)\n * and provider-defined tools (with AI SDK lazy schemas).\n */\nfunction serializeTool(tool: any): any {\n // Provider-defined tools (e.g. google.tools.googleSearch(), openai.tools.webSearch())\n // have lazy inputSchema functions that return AI SDK Schema objects, not Zod schemas.\n // We resolve them and use the jsonSchema property directly.\n if (isProviderDefinedTool(tool)) {\n const resolvedInput = resolveLazySchema(tool.inputSchema);\n const resolvedOutput = resolveLazySchema(tool.outputSchema);\n return {\n ...tool,\n inputSchema:\n resolvedInput && typeof resolvedInput === 'object' && 'jsonSchema' in resolvedInput\n ? stringify(resolvedInput.jsonSchema)\n : undefined,\n outputSchema:\n resolvedOutput && typeof resolvedOutput === 'object' && 'jsonSchema' in resolvedOutput\n ? stringify(resolvedOutput.jsonSchema)\n : undefined,\n };\n }\n\n return {\n ...tool,\n inputSchema: serializeSchema(tool.inputSchema),\n outputSchema: serializeSchema(tool.outputSchema),\n requestContextSchema: serializeSchema(tool.requestContextSchema),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_TOOLS_ROUTE = createRoute({\n method: 'GET',\n path: '/tools',\n responseType: 'json',\n responseSchema: listToolsResponseSchema,\n summary: 'List all tools',\n description: 'Returns a list of all available tools in the system',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, registeredTools, requestContext }) => {\n try {\n // Merge tools from two sources: mastra.listTools() includes dynamically created tools\n // (e.g. MCP tools, or agent tools registered by their intrinsic id), while registeredTools\n // includes tools discovered by the CLI bundler (keyed by export name).\n //\n // The same tool instance can appear in both maps under different keys (e.g. an agent\n // registers it by `tool.id` while the bundler registers it by export name). Dedupe by\n // `tool.id`, preferring the registeredTools (bundler) key, so each tool appears once.\n const registered = registeredTools && Object.keys(registeredTools).length > 0 ? registeredTools : {};\n\n const allTools: Record<string, any> = {};\n const seenToolIds = new Map<string, string>();\n\n // registeredTools first so their key wins for a given tool.id.\n for (const [key, tool] of Object.entries(registered)) {\n const toolId = typeof (tool as any)?.id === 'string' ? (tool as any).id : undefined;\n if (toolId !== undefined) seenToolIds.set(toolId, key);\n allTools[key] = tool;\n }\n\n for (const [key, tool] of Object.entries(mastra.listTools() ?? {})) {\n const toolId = typeof (tool as any)?.id === 'string' ? (tool as any).id : undefined;\n // Skip if this exact tool.id was already registered (under any key) by registeredTools.\n if (toolId !== undefined && seenToolIds.has(toolId)) continue;\n if (toolId !== undefined) seenToolIds.set(toolId, key);\n allTools[key] = tool;\n }\n\n const serializedTools = Object.entries(allTools).reduce(\n (acc, [id, _tool]) => {\n acc[id] = serializeTool(_tool);\n return acc;\n },\n {} as Record<string, any>,\n );\n\n // Filter tools by FGA if configured\n const fgaProvider = mastra.getServer?.()?.fga;\n const user = requestContext?.get('user');\n if (fgaProvider && user) {\n const toolList = Object.entries(serializedTools).map(([id, t]) => ({ id, ...t }));\n const accessible = await fgaProvider.filterAccessible(user, toolList, 'tool', MastraFGAPermissions.TOOLS_READ);\n const accessibleSet = new Set(accessible.map((t: any) => t.id));\n for (const id of Object.keys(serializedTools)) {\n if (!accessibleSet.has(id)) {\n delete serializedTools[id];\n }\n }\n }\n\n return serializedTools;\n } catch (error) {\n return handleError(error, 'Error getting tools');\n }\n },\n});\n\nexport const GET_TOOL_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/tools/:toolId',\n responseType: 'json',\n pathParamSchema: toolIdPathParams,\n responseSchema: serializedToolSchema,\n summary: 'Get tool by ID',\n description: 'Returns details for a specific tool including its schema and configuration',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, registeredTools, toolId, requestContext }) => {\n try {\n let tool: any;\n\n // Try explicit registeredTools first, then fallback to mastra\n if (registeredTools && Object.keys(registeredTools).length > 0) {\n tool = Object.values(registeredTools).find((t: any) => t.id === toolId);\n }\n if (!tool) {\n try {\n tool = mastra.getToolById(toolId);\n } catch {\n // tool not found in global registry, continue to agent fallback\n }\n }\n\n // Fallback: search dynamically-resolved agent tools (toolsResolver)\n if (!tool) {\n tool = await findToolInAgents(mastra, toolId, requestContext);\n }\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n return serializeTool(tool);\n } catch (error) {\n return handleError(error, 'Error getting tool');\n }\n },\n});\n\nexport const EXECUTE_TOOL_ROUTE = createRoute({\n method: 'POST',\n path: '/tools/:toolId/execute',\n responseType: 'json',\n pathParamSchema: toolIdPathParams,\n queryParamSchema: optionalRunIdSchema,\n bodySchema: executeToolContextBodySchema,\n responseSchema: executeToolResponseSchema,\n summary: 'Execute tool',\n description: 'Executes a specific tool with the provided input data',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, runId, toolId, registeredTools, requestContext, ...bodyParams }) => {\n try {\n if (!toolId) {\n throw new HTTPException(400, { message: 'Tool ID is required' });\n }\n\n let tool: any;\n\n // Try explicit registeredTools first, then fallback to mastra\n if (registeredTools && Object.keys(registeredTools).length > 0) {\n tool = Object.values(registeredTools).find((t: any) => t.id === toolId);\n }\n if (!tool) {\n try {\n tool = mastra.getToolById(toolId);\n } catch {\n // tool not found in global registry, continue to agent fallback\n }\n }\n\n // Fallback: search dynamically-resolved agent tools (toolsResolver)\n if (!tool) {\n tool = await findToolInAgents(mastra, toolId, requestContext);\n }\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n if (!tool?.execute) {\n throw new HTTPException(400, { message: 'Tool is not executable' });\n }\n\n const { data } = bodyParams;\n\n validateBody({ data });\n\n let result;\n if (isVercelTool(tool)) {\n result = await (tool as any).execute(data);\n } else {\n result = await tool.execute(data!, {\n mastra,\n requestContext,\n // TODO: Pass proper tracing context when server API supports tracing\n tracingContext: { currentSpan: undefined },\n ...(runId\n ? {\n workflow: {\n runId,\n suspend: async () => {},\n },\n }\n : {}),\n });\n }\n\n return result;\n } catch (error) {\n return handleError(error, 'Error executing tool');\n }\n },\n});\n\n// ============================================================================\n// Agent Tool Routes\n// ============================================================================\n\nexport const GET_AGENT_TOOL_ROUTE = createRoute({\n method: 'GET',\n path: '/agents/:agentId/tools/:toolId',\n responseType: 'json',\n pathParamSchema: agentToolPathParams,\n responseSchema: serializedToolSchema,\n summary: 'Get agent tool',\n description: 'Returns details for a specific tool assigned to the agent',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, toolId, requestContext }) => {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const agentTools = await agent.listTools({ requestContext });\n\n const tool = Object.values(agentTools || {}).find((tool: any) => tool.id === toolId) as any;\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n return serializeTool(tool);\n } catch (error) {\n return handleError(error, 'Error getting agent tool');\n }\n },\n});\n\nexport const EXECUTE_AGENT_TOOL_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/tools/:toolId/execute',\n responseType: 'json',\n pathParamSchema: agentToolPathParams,\n bodySchema: executeToolBodySchema,\n responseSchema: executeToolResponseSchema,\n summary: 'Execute agent tool',\n description: 'Executes a specific tool assigned to the agent with the provided input data',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, toolId, data, requestContext }) => {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const agentTools = await agent.listTools({ requestContext });\n\n const tool = Object.values(agentTools || {}).find((tool: any) => tool.id === toolId) as any;\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n if (!tool?.execute) {\n throw new HTTPException(400, { message: 'Tool is not executable' });\n }\n\n const result = await tool.execute(data, {\n mastra,\n requestContext,\n // TODO: Pass proper tracing context when server API supports tracing\n tracingContext: { currentSpan: undefined },\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error executing agent tool');\n }\n },\n});\n"]}
import { listScorersResponseSchema, scorerIdPathParams, scorerEntrySchema, scoresWithPaginationResponseSchema, listScoresByRunIdQuerySchema, listScoresByScorerIdQuerySchema, listScoresByEntityIdQuerySchema, entityPathParams, saveScoreResponseSchema, saveScoreBodySchema } from './chunk-BZUNERBP.js';
import { getAgentFromSystem } from './chunk-4AGRNM7F.js';
import { runIdSchema } from './chunk-6VTOGOS2.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
import { __export } from './chunk-PR4QN5HX.js';
// src/server/handlers/scores.ts
var scores_exports = {};
__export(scores_exports, {
GET_SCORER_ROUTE: () => GET_SCORER_ROUTE,
LIST_SCORERS_ROUTE: () => LIST_SCORERS_ROUTE,
LIST_SCORES_BY_ENTITY_ID_ROUTE: () => LIST_SCORES_BY_ENTITY_ID_ROUTE,
LIST_SCORES_BY_RUN_ID_ROUTE: () => LIST_SCORES_BY_RUN_ID_ROUTE,
LIST_SCORES_BY_SCORER_ID_ROUTE: () => LIST_SCORES_BY_SCORER_ID_ROUTE,
SAVE_SCORE_ROUTE: () => SAVE_SCORE_ROUTE
});
async function listScorersFromSystem({
mastra,
requestContext
}) {
const agents = mastra.listAgents();
const workflows = mastra.listWorkflows();
const scorersMap = /* @__PURE__ */ new Map();
const processAgentScorers = async (agent) => {
const scorers = await agent.listScorers({
requestContext
}) || {};
if (Object.keys(scorers).length > 0) {
for (const [_scorerId, scorer] of Object.entries(scorers)) {
const scorerId = scorer.scorer.id;
if (scorersMap.has(scorerId)) {
scorersMap.get(scorerId)?.agentIds.push(agent.id);
scorersMap.get(scorerId)?.agentNames.push(agent.name);
} else {
scorersMap.set(scorerId, {
workflowIds: [],
...scorer,
agentNames: [agent.name],
agentIds: [agent.id],
isRegistered: false,
source: scorer.scorer.source ?? "code"
});
}
}
}
};
for (const [_, agent] of Object.entries(agents)) {
await processAgentScorers(agent);
}
try {
const editor = mastra.getEditor();
const storedAgentsResult = await editor?.agent.list();
if (storedAgentsResult?.agents) {
for (const storedAgentConfig of storedAgentsResult.agents) {
try {
const agent = await editor?.agent.getById(storedAgentConfig.id);
if (agent) {
await processAgentScorers(agent);
}
} catch {
}
}
}
} catch {
}
try {
const editor = mastra.getEditor();
const storedScorersResult = await editor?.scorer.list();
if (storedScorersResult?.scorerDefinitions) {
for (const storedScorerConfig of storedScorersResult.scorerDefinitions) {
try {
await editor?.scorer.getById(storedScorerConfig.id);
} catch {
}
}
}
} catch {
}
for (const [workflowId, workflow] of Object.entries(workflows)) {
const scorers = await workflow.listScorers({
requestContext
}) || {};
if (Object.keys(scorers).length > 0) {
for (const [_scorerId, scorer] of Object.entries(scorers)) {
const scorerName = scorer.scorer.name;
if (scorersMap.has(scorerName)) {
scorersMap.get(scorerName)?.workflowIds.push(workflowId);
} else {
scorersMap.set(scorerName, {
agentIds: [],
agentNames: [],
...scorer,
workflowIds: [workflowId],
isRegistered: false,
source: scorer.scorer.source ?? "code"
});
}
}
}
}
const registeredScorers = await mastra.listScorers();
for (const [_scorerId, scorer] of Object.entries(registeredScorers || {})) {
const scorerId = scorer.id;
if (scorersMap.has(scorerId)) {
scorersMap.get(scorerId).isRegistered = true;
} else {
scorersMap.set(scorerId, {
scorer,
agentIds: [],
agentNames: [],
workflowIds: [],
isRegistered: true,
source: scorer.source ?? "code"
});
}
}
return Object.fromEntries(scorersMap.entries());
}
function getTraceDetails(traceIdWithSpanId) {
if (!traceIdWithSpanId) {
return {};
}
const [traceId, spanId] = traceIdWithSpanId.split("-");
return {
...traceId ? { traceId } : {},
...spanId ? { spanId } : {}
};
}
var LIST_SCORERS_ROUTE = createRoute({
method: "GET",
path: "/scores/scorers",
responseType: "json",
responseSchema: listScorersResponseSchema,
summary: "List all scorers",
description: "Returns a list of all registered scorers with their configuration and associated agents and workflows",
tags: ["Scoring"],
requiresAuth: true,
handler: (async ({ mastra, requestContext }) => {
const scorers = await listScorersFromSystem({
mastra,
requestContext
});
return scorers;
})
});
var GET_SCORER_ROUTE = createRoute({
method: "GET",
path: "/scores/scorers/:scorerId",
responseType: "json",
pathParamSchema: scorerIdPathParams,
responseSchema: scorerEntrySchema.nullable(),
summary: "Get scorer by ID",
description: "Returns details for a specific scorer including its configuration and associations",
tags: ["Scoring"],
requiresAuth: true,
handler: (async ({ mastra, scorerId, requestContext }) => {
const scorers = await listScorersFromSystem({
mastra,
requestContext
});
const scorer = scorers[scorerId];
if (!scorer) {
return null;
}
return scorer;
})
});
var LIST_SCORES_BY_RUN_ID_ROUTE = createRoute({
method: "GET",
path: "/scores/run/:runId",
responseType: "json",
pathParamSchema: runIdSchema,
queryParamSchema: listScoresByRunIdQuerySchema,
responseSchema: scoresWithPaginationResponseSchema,
summary: "List scores by run ID",
description: "Returns all scores for a specific execution run",
tags: ["Scoring"],
requiresAuth: true,
handler: async ({ mastra, runId, ...params }) => {
try {
const { page, perPage } = params;
const pagination = {
page: page ?? 0,
perPage: perPage ?? 10
};
const scores = await mastra.getStorage()?.getStore("scores");
const scoreResults = await scores?.listScoresByRunId?.({
runId,
pagination
}) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };
return {
pagination: scoreResults.pagination,
scores: scoreResults.scores.map((score) => ({ ...score, ...getTraceDetails(score.traceId) }))
};
} catch (error) {
return handleError(error, "Error getting scores by run id");
}
}
});
var LIST_SCORES_BY_SCORER_ID_ROUTE = createRoute({
method: "GET",
path: "/scores/scorer/:scorerId",
responseType: "json",
pathParamSchema: scorerIdPathParams,
queryParamSchema: listScoresByScorerIdQuerySchema,
responseSchema: scoresWithPaginationResponseSchema,
summary: "List scores by scorer ID",
description: "Returns all scores generated by a specific scorer",
tags: ["Scoring"],
requiresAuth: true,
handler: async ({ mastra, scorerId, ...params }) => {
try {
const { page, perPage, entityId, entityType } = params;
const filters = Object.fromEntries(Object.entries({ entityId, entityType }).filter(([_, v]) => v !== void 0));
const scores = await mastra.getStorage()?.getStore("scores");
const scoreResults = await scores?.listScoresByScorerId?.({
scorerId,
pagination: { page: page ?? 0, perPage: perPage ?? 10 },
...filters
}) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };
return {
pagination: scoreResults.pagination,
scores: scoreResults.scores.map((score) => ({ ...score, ...getTraceDetails(score.traceId) }))
};
} catch (error) {
return handleError(error, "Error getting scores by scorer id");
}
}
});
var LIST_SCORES_BY_ENTITY_ID_ROUTE = createRoute({
method: "GET",
path: "/scores/entity/:entityType/:entityId",
responseType: "json",
pathParamSchema: entityPathParams,
queryParamSchema: listScoresByEntityIdQuerySchema,
responseSchema: scoresWithPaginationResponseSchema,
summary: "List scores by entity ID",
description: "Returns all scores for a specific entity (agent or workflow)",
tags: ["Scoring"],
requiresAuth: true,
handler: async ({ mastra, entityId, entityType, ...params }) => {
try {
const { page, perPage } = params;
let entityIdToUse = entityId;
if (entityType === "AGENT") {
const agent = await getAgentFromSystem({ mastra, agentId: entityId });
entityIdToUse = agent.id;
} else if (entityType === "WORKFLOW") {
const workflow = mastra.getWorkflowById(entityId);
entityIdToUse = workflow.id;
}
const pagination = {
page: page ?? 0,
perPage: perPage ?? 10
};
const scoresStore = await mastra.getStorage()?.getStore("scores");
const scoreResults = await scoresStore?.listScoresByEntityId?.({
entityId: entityIdToUse,
entityType,
pagination
}) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };
return {
pagination: scoreResults.pagination,
scores: scoreResults.scores.map((score) => ({ ...score, ...getTraceDetails(score.traceId) }))
};
} catch (error) {
return handleError(error, "Error getting scores by entity id");
}
}
});
var SAVE_SCORE_ROUTE = createRoute({
method: "POST",
path: "/scores",
responseType: "json",
bodySchema: saveScoreBodySchema,
responseSchema: saveScoreResponseSchema,
summary: "Save score",
description: "Saves a new score record to storage",
tags: ["Scoring"],
requiresAuth: true,
handler: async ({ mastra, ...params }) => {
try {
const { score } = params;
const scoresStore = await mastra.getStorage()?.getStore("scores");
const result = await scoresStore?.saveScore?.(score);
if (!result) {
throw new HTTPException(500, { message: "Storage not configured" });
}
return result;
} catch (error) {
return handleError(error, "Error saving score");
}
}
});
export { GET_SCORER_ROUTE, LIST_SCORERS_ROUTE, LIST_SCORES_BY_ENTITY_ID_ROUTE, LIST_SCORES_BY_RUN_ID_ROUTE, LIST_SCORES_BY_SCORER_ID_ROUTE, SAVE_SCORE_ROUTE, scores_exports };
//# sourceMappingURL=chunk-UWFWR77Y.js.map
//# sourceMappingURL=chunk-UWFWR77Y.js.map
{"version":3,"sources":["../src/server/handlers/scores.ts"],"names":[],"mappings":"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","file":"chunk-UWFWR77Y.js","sourcesContent":["import type { MastraScorerEntry, ScoreRowData } from '@mastra/core/evals';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { StoragePagination } from '@mastra/core/storage';\nimport { HTTPException } from '../http-exception';\nimport { runIdSchema } from '../schemas/common';\nimport {\n listScorersResponseSchema,\n scorerEntrySchema,\n scorerIdPathParams,\n entityPathParams,\n listScoresByRunIdQuerySchema,\n listScoresByScorerIdQuerySchema,\n listScoresByEntityIdQuerySchema,\n saveScoreBodySchema,\n scoresWithPaginationResponseSchema,\n saveScoreResponseSchema,\n} from '../schemas/scores';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport type { Context } from '../types';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\n\nasync function listScorersFromSystem({\n mastra,\n requestContext,\n}: Context & {\n requestContext: RequestContext;\n}) {\n const agents = mastra.listAgents();\n const workflows = mastra.listWorkflows();\n\n const scorersMap = new Map<\n string,\n MastraScorerEntry & {\n agentIds: string[];\n agentNames: string[];\n workflowIds: string[];\n isRegistered: boolean;\n source: 'code' | 'stored' | 'fs';\n }\n >();\n\n // Helper function to process an agent's scorers\n const processAgentScorers = async (agent: {\n id: string;\n name: string;\n listScorers: (typeof agents)[string]['listScorers'];\n }) => {\n const scorers =\n (await agent.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerId = scorer.scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)?.agentIds.push(agent.id);\n scorersMap.get(scorerId)?.agentNames.push(agent.name);\n } else {\n scorersMap.set(scorerId, {\n workflowIds: [],\n ...scorer,\n agentNames: [agent.name],\n agentIds: [agent.id],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n };\n\n // Process code-defined agents\n for (const [_, agent] of Object.entries(agents)) {\n await processAgentScorers(agent);\n }\n\n // Process stored agents (database-backed agents)\n try {\n const editor = mastra.getEditor();\n const storedAgentsResult = await editor?.agent.list();\n if (storedAgentsResult?.agents) {\n for (const storedAgentConfig of storedAgentsResult.agents) {\n try {\n const agent = await editor?.agent.getById(storedAgentConfig.id);\n if (agent) {\n await processAgentScorers(agent);\n }\n } catch {\n // Skip individual agents that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured - not all setups have storage\n }\n\n // Process stored scorers (standalone CMS-created scorers)\n try {\n const editor = mastra.getEditor();\n const storedScorersResult = await editor?.scorer.list();\n if (storedScorersResult?.scorerDefinitions) {\n for (const storedScorerConfig of storedScorersResult.scorerDefinitions) {\n try {\n await editor?.scorer.getById(storedScorerConfig.id);\n } catch {\n // Skip individual scorers that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured\n }\n\n for (const [workflowId, workflow] of Object.entries(workflows)) {\n const scorers =\n (await workflow.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerName = scorer.scorer.name;\n if (scorersMap.has(scorerName)) {\n scorersMap.get(scorerName)?.workflowIds.push(workflowId);\n } else {\n scorersMap.set(scorerName, {\n agentIds: [],\n agentNames: [],\n ...scorer,\n workflowIds: [workflowId],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n }\n\n const registeredScorers = await mastra.listScorers();\n for (const [_scorerId, scorer] of Object.entries(registeredScorers || {})) {\n const scorerId = scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)!.isRegistered = true;\n } else {\n scorersMap.set(scorerId, {\n scorer: scorer,\n agentIds: [],\n agentNames: [],\n workflowIds: [],\n isRegistered: true,\n source: scorer.source ?? 'code',\n });\n }\n }\n\n return Object.fromEntries(scorersMap.entries());\n}\n\n// Legacy function to get trace and span details\nfunction getTraceDetails(traceIdWithSpanId?: string) {\n if (!traceIdWithSpanId) {\n return {};\n }\n\n const [traceId, spanId] = traceIdWithSpanId.split('-');\n\n return {\n ...(traceId ? { traceId } : {}),\n ...(spanId ? { spanId } : {}),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_SCORERS_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers',\n responseType: 'json',\n responseSchema: listScorersResponseSchema,\n summary: 'List all scorers',\n description: 'Returns a list of all registered scorers with their configuration and associated agents and workflows',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n return scorers;\n }) as any,\n});\n\nexport const GET_SCORER_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n responseSchema: scorerEntrySchema.nullable(),\n summary: 'Get scorer by ID',\n description: 'Returns details for a specific scorer including its configuration and associations',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, scorerId, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n\n const scorer = scorers[scorerId];\n\n if (!scorer) {\n return null;\n }\n\n return scorer;\n }) as any,\n});\n\nexport const LIST_SCORES_BY_RUN_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/run/:runId',\n responseType: 'json',\n pathParamSchema: runIdSchema,\n queryParamSchema: listScoresByRunIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by run ID',\n description: 'Returns all scores for a specific execution run',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, runId, ...params }) => {\n try {\n const { page, perPage } = params;\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByRunId?.({\n runId,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by run id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SCORER_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorer/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n queryParamSchema: listScoresByScorerIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by scorer ID',\n description: 'Returns all scores generated by a specific scorer',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, scorerId, ...params }) => {\n try {\n const { page, perPage, entityId, entityType } = params;\n const filters = Object.fromEntries(Object.entries({ entityId, entityType }).filter(([_, v]) => v !== undefined));\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByScorerId?.({\n scorerId,\n pagination: { page: page ?? 0, perPage: perPage ?? 10 },\n ...filters,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by scorer id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_ENTITY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/entity/:entityType/:entityId',\n responseType: 'json',\n pathParamSchema: entityPathParams,\n queryParamSchema: listScoresByEntityIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by entity ID',\n description: 'Returns all scores for a specific entity (agent or workflow)',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, entityId, entityType, ...params }) => {\n try {\n const { page, perPage } = params;\n let entityIdToUse = entityId;\n\n if (entityType === 'AGENT') {\n const agent = await getAgentFromSystem({ mastra, agentId: entityId });\n entityIdToUse = agent.id;\n } else if (entityType === 'WORKFLOW') {\n const workflow = mastra.getWorkflowById(entityId);\n entityIdToUse = workflow.id;\n }\n\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scoresStore?.listScoresByEntityId?.({\n entityId: entityIdToUse,\n entityType,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by entity id');\n }\n },\n});\n\nexport const SAVE_SCORE_ROUTE = createRoute({\n method: 'POST',\n path: '/scores',\n responseType: 'json',\n bodySchema: saveScoreBodySchema,\n responseSchema: saveScoreResponseSchema,\n summary: 'Save score',\n description: 'Saves a new score record to storage',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const { score } = params as { score: ScoreRowData };\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const result = await scoresStore?.saveScore?.(score);\n if (!result) {\n throw new HTTPException(500, { message: 'Storage not configured' });\n }\n return result;\n } catch (error) {\n return handleError(error, 'Error saving score');\n }\n },\n});\n"]}
import { listStoredSkillsResponseSchema, listStoredSkillsQuerySchema, getStoredSkillResponseSchema, storedSkillIdPathParams, createStoredSkillResponseSchema, createStoredSkillBodySchema, updateStoredSkillResponseSchema, updateStoredSkillBodySchema, deleteStoredSkillResponseSchema, publishStoredSkillResponseSchema, publishStoredSkillBodySchema } from './chunk-FBI32AWY.js';
import { stripFavoriteFields, prepareFavoritesEnrichment, enrichOrStripFavorites } from './chunk-DVBKBUY7.js';
import { isBuilderFeatureEnabled } from './chunk-YN5ILIRE.js';
import { resolveAuthorFilter, getCallerAuthorId, matchesAuthorFilter, assertReadAccess, assertWriteAccess } from './chunk-ETR4XOVD.js';
import { getStoredResourceScope, scopeStoredResourceMetadata, assertStoredResourceScope, toSlug } from './chunk-4GWTCVFL.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
import { LocalSkillSource } from '@mastra/core/workspace';
var INDEXED_FOLDERS = ["references", "scripts", "assets"];
function extractIndexedPathsFromFiles(files, existing) {
if (!files || files.length === 0) return {};
const root = files.find((n) => n.type === "folder");
if (!root?.children) return {};
const result = {};
for (const folderName of INDEXED_FOLDERS) {
const folder = root.children.find((n) => n.type === "folder" && n.name === folderName);
if (!folder?.children || folder.children.length === 0) continue;
const existingPaths = new Set(existing[folderName] ?? []);
const paths = [...existingPaths];
collectFilePaths(folder.children, folderName, existingPaths, paths);
if (paths.length > 0) {
result[folderName] = paths;
}
}
return result;
}
function collectFilePaths(nodes, prefix, existingPaths, out) {
for (const node of nodes) {
if (node.type === "file") {
const relativePath = `${prefix}/${node.name}`;
if (!existingPaths.has(relativePath)) {
out.push(relativePath);
}
} else if (node.type === "folder" && node.children) {
collectFilePaths(node.children, `${prefix}/${node.name}`, existingPaths, out);
}
}
}
var LIST_STORED_SKILLS_ROUTE = createRoute({
method: "GET",
path: "/stored/skills",
responseType: "json",
queryParamSchema: listStoredSkillsQuerySchema,
responseSchema: listStoredSkillsResponseSchema,
summary: "List stored skills",
description: "Returns a paginated list of all skill configurations stored in the database",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
page,
perPage,
orderBy,
status,
authorId,
visibility,
metadata,
favoritedOnly,
pinFavoritedFor
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new HTTPException(500, { message: "Skills storage domain is not available" });
}
const filter = resolveAuthorFilter({
requestContext,
resource: "stored-skills",
queryAuthorId: authorId,
queryVisibility: visibility
});
const scope = await getStoredResourceScope(mastra, requestContext);
const scopedMetadata = scopeStoredResourceMetadata(metadata, scope);
const callerId = getCallerAuthorId(requestContext);
const favoritesEnabled = await isBuilderFeatureEnabled(mastra, "favorites");
const honoredStarredOnly = favoritesEnabled && favoritedOnly === true;
const favoriteSubjectId = pinFavoritedFor ?? callerId;
if (honoredStarredOnly) {
const effectivePerPage = perPage ?? 100;
if (!favoriteSubjectId) {
return { skills: [], total: 0, page, perPage: effectivePerPage, hasMore: false };
}
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) {
throw new HTTPException(500, { message: "Favorites storage domain is not available" });
}
const starredIds = await favoritesStore.listFavoritedIds({ userId: favoriteSubjectId, entityType: "skill" });
if (starredIds.length === 0) {
return { skills: [], total: 0, page, perPage: effectivePerPage, hasMore: false };
}
const allMatching = await skillStore.listResolved({
perPage: false,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata,
entityIds: starredIds
});
const visible = allMatching.skills.filter((record) => matchesAuthorFilter(record, filter));
const total = visible.length;
const startIdx = effectivePerPage === 0 ? 0 : page * effectivePerPage;
const endIdx = effectivePerPage === 0 ? 0 : startIdx + effectivePerPage;
const sliced = effectivePerPage === 0 ? [] : visible.slice(startIdx, endIdx);
const annotated2 = sliced.map((record) => ({ ...record, isFavorited: true }));
const hasMore = effectivePerPage > 0 && endIdx < total;
return {
skills: annotated2,
total,
page,
perPage: effectivePerPage,
hasMore
};
}
const result = await skillStore.listResolved({
page,
perPage,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata
});
const visibleSkills = result.skills.filter((record) => matchesAuthorFilter(record, filter));
if (!favoritesEnabled) {
return { ...result, skills: visibleSkills.map(stripFavoriteFields) };
}
const enrichment = await prepareFavoritesEnrichment(
mastra,
requestContext,
"skill",
visibleSkills.map((s) => s.id)
);
const annotated = enrichment ? visibleSkills.map((record) => ({ ...record, isFavorited: enrichment.starredIds.has(record.id) })) : visibleSkills.map(stripFavoriteFields);
return { ...result, skills: annotated };
} catch (error) {
return handleError(error, "Error listing stored skills");
}
}
});
var GET_STORED_SKILL_ROUTE = createRoute({
method: "GET",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: storedSkillIdPathParams,
responseSchema: getStoredSkillResponseSchema,
summary: "Get stored skill by ID",
description: "Returns a specific skill from storage by its unique identifier (resolved with active version config)",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedSkillId }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new HTTPException(500, { message: "Skills storage domain is not available" });
}
const skill = await skillStore.getByIdResolved(storedSkillId);
if (!skill) {
throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));
assertReadAccess({ requestContext, resource: "stored-skills", resourceId: storedSkillId, record: skill });
return enrichOrStripFavorites(mastra, requestContext, "skill", skill);
} catch (error) {
return handleError(error, "Error getting stored skill");
}
}
});
var CREATE_STORED_SKILL_ROUTE = createRoute({
method: "POST",
path: "/stored/skills",
responseType: "json",
bodySchema: createStoredSkillBodySchema,
responseSchema: createStoredSkillResponseSchema,
summary: "Create stored skill",
description: "Creates a new skill configuration in storage with the provided details",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
id: providedId,
name,
description,
instructions,
license,
compatibility,
source,
references,
scripts,
assets,
files,
metadata,
visibility: bodyVisibility
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new HTTPException(500, { message: "Skills storage domain is not available" });
}
const id = providedId || toSlug(name);
if (!id) {
throw new HTTPException(400, {
message: "Could not derive skill ID from name. Please provide an explicit id."
});
}
const existing = await skillStore.getById(id);
if (existing) {
throw new HTTPException(409, { message: `Skill with id ${id} already exists` });
}
const authorId = getCallerAuthorId(requestContext) ?? void 0;
const visibility = authorId ? bodyVisibility ?? "private" : "public";
const indexedPaths = extractIndexedPathsFromFiles(files, { references, scripts, assets });
await skillStore.create({
skill: {
id,
authorId,
visibility,
name,
description,
instructions,
license,
compatibility,
source,
references: indexedPaths.references ?? references,
scripts: indexedPaths.scripts ?? scripts,
assets: indexedPaths.assets ?? assets,
files,
metadata: scopeStoredResourceMetadata(metadata, await getStoredResourceScope(mastra, requestContext))
}
});
const resolved = await skillStore.getByIdResolved(id);
if (!resolved) {
throw new HTTPException(500, { message: "Failed to resolve created skill" });
}
return enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return handleError(error, "Error creating stored skill");
}
}
});
var UPDATE_STORED_SKILL_ROUTE = createRoute({
method: "PATCH",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: storedSkillIdPathParams,
bodySchema: updateStoredSkillBodySchema,
responseSchema: updateStoredSkillResponseSchema,
summary: "Update stored skill",
description: "Updates an existing skill in storage with the provided fields",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
storedSkillId,
// Entity-level fields
authorId,
visibility,
// Config fields (snapshot-level)
name,
description,
instructions,
license,
compatibility,
source,
references,
scripts,
assets,
files,
metadata
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new HTTPException(500, { message: "Skills storage domain is not available" });
}
const existing = await skillStore.getByIdResolved(storedSkillId);
if (!existing) {
throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
const scope = await getStoredResourceScope(mastra, requestContext);
assertStoredResourceScope(existing, scope);
assertWriteAccess({
requestContext,
resource: "stored-skills",
resourceId: storedSkillId,
action: "edit",
record: existing
});
const callerAuthorId = getCallerAuthorId(requestContext) ?? void 0;
const resolvedVisibility = callerAuthorId ? visibility : visibility != null ? "public" : void 0;
const indexedPaths = files ? extractIndexedPathsFromFiles(files, { references, scripts, assets }) : {};
const update = { id: storedSkillId };
if (authorId !== void 0) update.authorId = authorId;
if (resolvedVisibility !== void 0) update.visibility = resolvedVisibility;
if (name !== void 0) update.name = name;
if (description !== void 0) update.description = description;
if (instructions !== void 0) update.instructions = instructions;
if (license !== void 0) update.license = license;
if (compatibility !== void 0) update.compatibility = compatibility;
if (source !== void 0) update.source = source;
const resolvedReferences = indexedPaths.references ?? references;
const resolvedScripts = indexedPaths.scripts ?? scripts;
const resolvedAssets = indexedPaths.assets ?? assets;
if (resolvedReferences !== void 0) update.references = resolvedReferences;
if (resolvedScripts !== void 0) update.scripts = resolvedScripts;
if (resolvedAssets !== void 0) update.assets = resolvedAssets;
if (files !== void 0) update.files = files;
if (metadata !== void 0) {
update.metadata = scopeStoredResourceMetadata({ ...existing.metadata ?? {}, ...metadata }, scope);
}
await skillStore.update(update);
const resolved = await skillStore.getByIdResolved(storedSkillId);
if (!resolved) {
throw new HTTPException(500, { message: "Failed to resolve updated skill" });
}
return enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return handleError(error, "Error updating stored skill");
}
}
});
var DELETE_STORED_SKILL_ROUTE = createRoute({
method: "DELETE",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: storedSkillIdPathParams,
responseSchema: deleteStoredSkillResponseSchema,
summary: "Delete stored skill",
description: "Deletes a skill from storage by its unique identifier",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedSkillId }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new HTTPException(500, { message: "Skills storage domain is not available" });
}
const existing = await skillStore.getByIdResolved(storedSkillId);
if (!existing) {
throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));
assertWriteAccess({
requestContext,
resource: "stored-skills",
resourceId: storedSkillId,
action: "delete",
record: existing
});
await skillStore.delete(storedSkillId);
try {
const favoritesStore = await storage.getStore("favorites");
await favoritesStore?.deleteFavoritesForEntity({ entityType: "skill", entityId: storedSkillId });
} catch (cascadeError) {
mastra.getLogger?.()?.warn?.("Failed to cascade-delete favorites for skill", { storedSkillId, error: cascadeError });
}
return {
success: true,
message: `Skill ${storedSkillId} deleted successfully`
};
} catch (error) {
return handleError(error, "Error deleting stored skill");
}
}
});
var PUBLISH_STORED_SKILL_ROUTE = createRoute({
method: "POST",
path: "/stored/skills/:storedSkillId/publish",
responseType: "json",
pathParamSchema: storedSkillIdPathParams,
bodySchema: publishStoredSkillBodySchema,
responseSchema: publishStoredSkillResponseSchema,
summary: "Publish stored skill",
description: "Snapshots the skill directory from the filesystem into content-addressable blob storage, creates a new version with a tree manifest, and marks the skill as published",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedSkillId, skillPath }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new HTTPException(500, { message: "Skills storage domain is not available" });
}
const blobStore = await storage.getStore("blobs");
if (!blobStore) {
throw new HTTPException(500, { message: "Blob storage domain is not available" });
}
const existing = await skillStore.getByIdResolved(storedSkillId);
if (!existing) {
throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));
assertWriteAccess({
requestContext,
resource: "stored-skills",
resourceId: storedSkillId,
action: "edit",
record: existing
});
const path = await import('path');
const fs = await import('fs/promises');
const resolvedPath = path.default.resolve(skillPath);
const allowedBase = path.default.resolve(process.env.SKILLS_BASE_DIR || process.cwd());
if (!resolvedPath.startsWith(allowedBase + path.default.sep) && resolvedPath !== allowedBase) {
throw new HTTPException(400, {
message: `skillPath must be within the allowed directory: ${allowedBase}`
});
}
try {
const stat = await fs.stat(resolvedPath);
if (!stat.isDirectory()) {
throw new HTTPException(400, { message: `skillPath is not a directory: ${resolvedPath}` });
}
} catch (err) {
if (err instanceof HTTPException) throw err;
if (err?.code === "ENOENT") {
throw new HTTPException(400, {
message: `skillPath does not exist on the server filesystem: ${resolvedPath}. Create the skill directory (with a SKILL.md) before publishing, or use a skill that was materialized to disk.`
});
}
throw err;
}
try {
await fs.stat(path.default.join(resolvedPath, "SKILL.md"));
} catch (err) {
if (err?.code === "ENOENT") {
throw new HTTPException(400, {
message: `skillPath is missing SKILL.md: ${resolvedPath}`
});
}
throw err;
}
const source = new LocalSkillSource();
const { publishSkillFromSource } = await import('@mastra/core/workspace');
const { snapshot, tree, files } = await publishSkillFromSource(source, resolvedPath, blobStore);
const snapshotUpdate = {};
for (const [key, value] of Object.entries(snapshot)) {
if (value !== void 0) snapshotUpdate[key] = value;
}
await skillStore.update({
id: storedSkillId,
...snapshotUpdate,
tree,
files,
status: "published"
});
const latestVersion = await skillStore.getLatestVersion(storedSkillId);
if (latestVersion) {
await skillStore.update({
id: storedSkillId,
activeVersionId: latestVersion.id
});
}
const resolved = await skillStore.getByIdResolved(storedSkillId);
if (!resolved) {
throw new HTTPException(500, { message: "Failed to resolve skill after publish" });
}
return enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return handleError(error, "Error publishing stored skill");
}
}
});
export { CREATE_STORED_SKILL_ROUTE, DELETE_STORED_SKILL_ROUTE, GET_STORED_SKILL_ROUTE, LIST_STORED_SKILLS_ROUTE, PUBLISH_STORED_SKILL_ROUTE, UPDATE_STORED_SKILL_ROUTE };
//# sourceMappingURL=chunk-VE2FUYFD.js.map
//# sourceMappingURL=chunk-VE2FUYFD.js.map
{"version":3,"sources":["../src/server/handlers/stored-skills.ts"],"names":["annotated"],"mappings":";;;;;;;;;;AAuCA,IAAM,eAAA,GAAkB,CAAC,YAAA,EAAc,SAAA,EAAW,QAAQ,CAAA;AAQ1D,SAAS,4BAAA,CACP,OACA,QAAA,EASA;AACA,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,SAAU,EAAC;AAG1C,EAAA,MAAM,OAAO,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,QAAQ,CAAA;AAChD,EAAA,IAAI,CAAC,IAAA,EAAM,QAAA,EAAU,OAAO,EAAC;AAE7B,EAAA,MAAM,SAAmC,EAAC;AAE1C,EAAA,KAAA,MAAW,cAAc,eAAA,EAAiB;AACxC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,IAAA,KAAS,QAAA,IAAY,CAAA,CAAE,IAAA,KAAS,UAAU,CAAA;AACnF,IAAA,IAAI,CAAC,MAAA,EAAQ,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA,EAAG;AAEvD,IAAA,MAAM,gBAAgB,IAAI,GAAA,CAAI,SAAS,UAAU,CAAA,IAAK,EAAE,CAAA;AACxD,IAAA,MAAM,KAAA,GAAkB,CAAC,GAAG,aAAa,CAAA;AAEzC,IAAA,gBAAA,CAAiB,MAAA,CAAO,QAAA,EAAU,UAAA,EAAY,aAAA,EAAe,KAAK,CAAA;AAElE,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,MAAA,CAAO,UAAU,CAAA,GAAI,KAAA;AAAA,IACvB;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAGA,SAAS,gBAAA,CACP,KAAA,EACA,MAAA,EACA,aAAA,EACA,GAAA,EACM;AACN,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,MAAA,MAAM,YAAA,GAAe,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,KAAK,IAAI,CAAA,CAAA;AAC3C,MAAA,IAAI,CAAC,aAAA,CAAc,GAAA,CAAI,YAAY,CAAA,EAAG;AACpC,QAAA,GAAA,CAAI,KAAK,YAAY,CAAA;AAAA,MACvB;AAAA,IACF,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,QAAA,IAAY,KAAK,QAAA,EAAU;AAClD,MAAA,gBAAA,CAAiB,IAAA,CAAK,UAAU,CAAA,EAAG,MAAM,IAAI,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,aAAA,EAAe,GAAG,CAAA;AAAA,IAC9E;AAAA,EACF;AACF;AASO,IAAM,2BAA2B,WAAA,CAAY;AAAA,EAClD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,gBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,gBAAA,EAAkB,2BAAA;AAAA,EAClB,cAAA,EAAgB,8BAAA;AAAA,EAChB,OAAA,EAAS,oBAAA;AAAA,EACT,WAAA,EAAa,6EAAA;AAAA,EACb,IAAA,EAAM,CAAC,eAAe,CAAA;AAAA,EACtB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO;AAAA,IACd,MAAA;AAAA,IACA,cAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF,KAAM;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AAClD,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0CAA0C,CAAA;AAAA,MACpF;AAEA,MAAA,MAAM,SAAS,mBAAA,CAAoB;AAAA,QACjC,cAAA;AAAA,QACA,QAAA,EAAU,eAAA;AAAA,QACV,aAAA,EAAe,QAAA;AAAA,QACf,eAAA,EAAiB;AAAA,OAClB,CAAA;AAED,MAAA,MAAM,KAAA,GAAQ,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAA;AACjE,MAAA,MAAM,cAAA,GAAiB,2BAAA,CAA4B,QAAA,EAAU,KAAK,CAAA;AAElE,MAAA,MAAM,QAAA,GAAW,kBAAkB,cAAc,CAAA;AACjD,MAAA,MAAM,gBAAA,GAAmB,MAAM,uBAAA,CAAwB,MAAA,EAAQ,WAAW,CAAA;AAC1E,MAAA,MAAM,kBAAA,GAAqB,oBAAoB,aAAA,KAAkB,IAAA;AACjE,MAAA,MAAM,oBAAoB,eAAA,IAAmB,QAAA;AAI7C,MAAA,IAAI,kBAAA,EAAoB;AACtB,QAAA,MAAM,mBAA2B,OAAA,IAAW,GAAA;AAC5C,QAAA,IAAI,CAAC,iBAAA,EAAmB;AAEtB,UAAA,OAAO,EAAE,MAAA,EAAQ,EAAC,EAAG,KAAA,EAAO,GAAG,IAAA,EAAM,OAAA,EAAS,gBAAA,EAAkB,OAAA,EAAS,KAAA,EAAM;AAAA,QACjF;AACA,QAAA,MAAM,cAAA,GAAiB,MAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA;AACzD,QAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,UAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6CAA6C,CAAA;AAAA,QACvF;AACA,QAAA,MAAM,UAAA,GAAa,MAAM,cAAA,CAAe,gBAAA,CAAiB,EAAE,MAAA,EAAQ,iBAAA,EAAmB,UAAA,EAAY,OAAA,EAAS,CAAA;AAC3G,QAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,UAAA,OAAO,EAAE,MAAA,EAAQ,EAAC,EAAG,KAAA,EAAO,GAAG,IAAA,EAAM,OAAA,EAAS,gBAAA,EAAkB,OAAA,EAAS,KAAA,EAAM;AAAA,QACjF;AACA,QAAA,MAAM,WAAA,GAAc,MAAM,UAAA,CAAW,YAAA,CAAa;AAAA,UAChD,OAAA,EAAS,KAAA;AAAA,UACT,OAAA;AAAA,UACA,MAAA;AAAA,UACA,QAAA,EAAU,MAAA,CAAO,IAAA,KAAS,OAAA,GAAU,OAAO,QAAA,GAAW,MAAA;AAAA,UACtD,QAAA,EAAU,cAAA;AAAA,UACV,SAAA,EAAW;AAAA,SACZ,CAAA;AACD,QAAA,MAAM,OAAA,GAAU,YAAY,MAAA,CAAO,MAAA,CAAO,YAAU,mBAAA,CAAoB,MAAA,EAAQ,MAAM,CAAC,CAAA;AACvF,QAAA,MAAM,QAAQ,OAAA,CAAQ,MAAA;AACtB,QAAA,MAAM,QAAA,GAAW,gBAAA,KAAqB,CAAA,GAAI,CAAA,GAAI,IAAA,GAAO,gBAAA;AACrD,QAAA,MAAM,MAAA,GAAS,gBAAA,KAAqB,CAAA,GAAI,CAAA,GAAI,QAAA,GAAW,gBAAA;AACvD,QAAA,MAAM,MAAA,GAAS,qBAAqB,CAAA,GAAI,KAAK,OAAA,CAAQ,KAAA,CAAM,UAAU,MAAM,CAAA;AAC3E,QAAA,MAAMA,UAAAA,GAAY,OAAO,GAAA,CAAI,CAAA,MAAA,MAAW,EAAE,GAAG,MAAA,EAAQ,WAAA,EAAa,IAAA,EAAK,CAAE,CAAA;AACzE,QAAA,MAAM,OAAA,GAAU,gBAAA,GAAmB,CAAA,IAAK,MAAA,GAAS,KAAA;AACjD,QAAA,OAAO;AAAA,UACL,MAAA,EAAQA,UAAAA;AAAA,UACR,KAAA;AAAA,UACA,IAAA;AAAA,UACA,OAAA,EAAS,gBAAA;AAAA,UACT;AAAA,SACF;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,YAAA,CAAa;AAAA,QAC3C,IAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA,EAAU,MAAA,CAAO,IAAA,KAAS,OAAA,GAAU,OAAO,QAAA,GAAW,MAAA;AAAA,QACtD,QAAA,EAAU;AAAA,OACX,CAAA;AAUD,MAAA,MAAM,aAAA,GAAgB,OAAO,MAAA,CAAO,MAAA,CAAO,YAAU,mBAAA,CAAoB,MAAA,EAAQ,MAAM,CAAC,CAAA;AAExF,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,QAAQ,aAAA,CAAc,GAAA,CAAI,mBAAmB,CAAA,EAAE;AAAA,MACrE;AAEA,MAAA,MAAM,aAAa,MAAM,0BAAA;AAAA,QACvB,MAAA;AAAA,QACA,cAAA;AAAA,QACA,OAAA;AAAA,QACA,aAAA,CAAc,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,EAAE;AAAA,OAC7B;AACA,MAAA,MAAM,YAAY,UAAA,GACd,aAAA,CAAc,IAAI,CAAA,MAAA,MAAW,EAAE,GAAG,MAAA,EAAQ,WAAA,EAAa,WAAW,UAAA,CAAW,GAAA,CAAI,OAAO,EAAE,CAAA,GAAI,CAAA,GAC9F,aAAA,CAAc,IAAI,mBAAmB,CAAA;AAEzC,MAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAU;AAAA,IACxC,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,6BAA6B,CAAA;AAAA,IACzD;AAAA,EACF;AACF,CAAC;AAKM,IAAM,yBAAyB,WAAA,CAAY;AAAA,EAChD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,+BAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,uBAAA;AAAA,EACjB,cAAA,EAAgB,4BAAA;AAAA,EAChB,OAAA,EAAS,wBAAA;AAAA,EACT,WAAA,EAAa,sGAAA;AAAA,EACb,IAAA,EAAM,CAAC,eAAe,CAAA;AAAA,EACtB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO,EAAE,MAAA,EAAQ,cAAA,EAAgB,eAAc,KAAM;AAC5D,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AAClD,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0CAA0C,CAAA;AAAA,MACpF;AAEA,MAAA,MAAM,KAAA,GAAQ,MAAM,UAAA,CAAW,eAAA,CAAgB,aAAa,CAAA;AAE5D,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,qBAAA,EAAwB,aAAa,cAAc,CAAA;AAAA,MAC7F;AACA,MAAA,yBAAA,CAA0B,KAAA,EAAO,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAC,CAAA;AAErF,MAAA,gBAAA,CAAiB,EAAE,gBAAgB,QAAA,EAAU,eAAA,EAAiB,YAAY,aAAA,EAAe,MAAA,EAAQ,OAAO,CAAA;AAExG,MAAA,OAAO,sBAAA,CAAuB,MAAA,EAAQ,cAAA,EAAgB,OAAA,EAAS,KAAK,CAAA;AAAA,IACtE,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,4BAA4B,CAAA;AAAA,IACxD;AAAA,EACF;AACF,CAAC;AAKM,IAAM,4BAA4B,WAAA,CAAY;AAAA,EACnD,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,gBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,UAAA,EAAY,2BAAA;AAAA,EACZ,cAAA,EAAgB,+BAAA;AAAA,EAChB,OAAA,EAAS,qBAAA;AAAA,EACT,WAAA,EAAa,wEAAA;AAAA,EACb,IAAA,EAAM,CAAC,eAAe,CAAA;AAAA,EACtB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO;AAAA,IACd,MAAA;AAAA,IACA,cAAA;AAAA,IACA,EAAA,EAAI,UAAA;AAAA,IACJ,IAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA,EAAY;AAAA,GACd,KAAM;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AAClD,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0CAA0C,CAAA;AAAA,MACpF;AAGA,MAAA,MAAM,EAAA,GAAK,UAAA,IAAc,MAAA,CAAO,IAAI,CAAA;AAEpC,MAAA,IAAI,CAAC,EAAA,EAAI;AACP,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK;AAAA,UAC3B,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAGA,MAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAW,OAAA,CAAQ,EAAE,CAAA;AAC5C,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,cAAA,EAAiB,EAAE,mBAAmB,CAAA;AAAA,MAChF;AAKA,MAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,cAAc,CAAA,IAAK,MAAA;AACtD,MAAA,MAAM,UAAA,GAAmC,QAAA,GAAY,cAAA,IAAkB,SAAA,GAAa,QAAA;AAIpF,MAAA,MAAM,eAAe,4BAAA,CAA6B,KAAA,EAAO,EAAE,UAAA,EAAY,OAAA,EAAS,QAAQ,CAAA;AAExF,MAAA,MAAM,WAAW,MAAA,CAAO;AAAA,QACtB,KAAA,EAAO;AAAA,UACL,EAAA;AAAA,UACA,QAAA;AAAA,UACA,UAAA;AAAA,UACA,IAAA;AAAA,UACA,WAAA;AAAA,UACA,YAAA;AAAA,UACA,OAAA;AAAA,UACA,aAAA;AAAA,UACA,MAAA;AAAA,UACA,UAAA,EAAY,aAAa,UAAA,IAAc,UAAA;AAAA,UACvC,OAAA,EAAS,aAAa,OAAA,IAAW,OAAA;AAAA,UACjC,MAAA,EAAQ,aAAa,MAAA,IAAU,MAAA;AAAA,UAC/B,KAAA;AAAA,UACA,UAAU,2BAAA,CAA4B,QAAA,EAAU,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAC;AAAA;AACtG,OACD,CAAA;AAGD,MAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAW,eAAA,CAAgB,EAAE,CAAA;AACpD,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,mCAAmC,CAAA;AAAA,MAC7E;AAEA,MAAA,OAAO,sBAAA,CAAuB,MAAA,EAAQ,cAAA,EAAgB,OAAA,EAAS,QAAQ,CAAA;AAAA,IACzE,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,6BAA6B,CAAA;AAAA,IACzD;AAAA,EACF;AACF,CAAC;AAKM,IAAM,4BAA4B,WAAA,CAAY;AAAA,EACnD,MAAA,EAAQ,OAAA;AAAA,EACR,IAAA,EAAM,+BAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,uBAAA;AAAA,EACjB,UAAA,EAAY,2BAAA;AAAA,EACZ,cAAA,EAAgB,+BAAA;AAAA,EAChB,OAAA,EAAS,qBAAA;AAAA,EACT,WAAA,EAAa,+DAAA;AAAA,EACb,IAAA,EAAM,CAAC,eAAe,CAAA;AAAA,EACtB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO;AAAA,IACd,MAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA;AAAA,IAEA,QAAA;AAAA,IACA,UAAA;AAAA;AAAA,IAEA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF,KAAM;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AAClD,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0CAA0C,CAAA;AAAA,MACpF;AAGA,MAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAW,eAAA,CAAgB,aAAa,CAAA;AAC/D,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,qBAAA,EAAwB,aAAa,cAAc,CAAA;AAAA,MAC7F;AACA,MAAA,MAAM,KAAA,GAAQ,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAA;AACjE,MAAA,yBAAA,CAA0B,UAAU,KAAK,CAAA;AAGzC,MAAA,iBAAA,CAAkB;AAAA,QAChB,cAAA;AAAA,QACA,QAAA,EAAU,eAAA;AAAA,QACV,UAAA,EAAY,aAAA;AAAA,QACZ,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACT,CAAA;AAGD,MAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,cAAc,CAAA,IAAK,MAAA;AAC5D,MAAA,MAAM,kBAAA,GAAqB,cAAA,GAAiB,UAAA,GAAa,UAAA,IAAc,OAAO,QAAA,GAAW,MAAA;AAGzF,MAAA,MAAM,YAAA,GAAe,KAAA,GAAQ,4BAAA,CAA6B,KAAA,EAAO,EAAE,YAAY,OAAA,EAAS,MAAA,EAAQ,CAAA,GAAI,EAAC;AAQrG,MAAA,MAAM,MAAA,GAAkC,EAAE,EAAA,EAAI,aAAA,EAAc;AAC5D,MAAA,IAAI,QAAA,KAAa,MAAA,EAAW,MAAA,CAAO,QAAA,GAAW,QAAA;AAC9C,MAAA,IAAI,kBAAA,KAAuB,MAAA,EAAW,MAAA,CAAO,UAAA,GAAa,kBAAA;AAC1D,MAAA,IAAI,IAAA,KAAS,MAAA,EAAW,MAAA,CAAO,IAAA,GAAO,IAAA;AACtC,MAAA,IAAI,WAAA,KAAgB,MAAA,EAAW,MAAA,CAAO,WAAA,GAAc,WAAA;AACpD,MAAA,IAAI,YAAA,KAAiB,MAAA,EAAW,MAAA,CAAO,YAAA,GAAe,YAAA;AACtD,MAAA,IAAI,OAAA,KAAY,MAAA,EAAW,MAAA,CAAO,OAAA,GAAU,OAAA;AAC5C,MAAA,IAAI,aAAA,KAAkB,MAAA,EAAW,MAAA,CAAO,aAAA,GAAgB,aAAA;AACxD,MAAA,IAAI,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,MAAA,GAAS,MAAA;AAC1C,MAAA,MAAM,kBAAA,GAAqB,aAAa,UAAA,IAAc,UAAA;AACtD,MAAA,MAAM,eAAA,GAAkB,aAAa,OAAA,IAAW,OAAA;AAChD,MAAA,MAAM,cAAA,GAAiB,aAAa,MAAA,IAAU,MAAA;AAC9C,MAAA,IAAI,kBAAA,KAAuB,MAAA,EAAW,MAAA,CAAO,UAAA,GAAa,kBAAA;AAC1D,MAAA,IAAI,eAAA,KAAoB,MAAA,EAAW,MAAA,CAAO,OAAA,GAAU,eAAA;AACpD,MAAA,IAAI,cAAA,KAAmB,MAAA,EAAW,MAAA,CAAO,MAAA,GAAS,cAAA;AAClD,MAAA,IAAI,KAAA,KAAU,MAAA,EAAW,MAAA,CAAO,KAAA,GAAQ,KAAA;AACxC,MAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,QAAA,MAAA,CAAO,QAAA,GAAW,2BAAA,CAA4B,EAAE,GAAI,QAAA,CAAS,QAAA,IAAY,EAAC,EAAI,GAAG,QAAA,EAAS,EAAG,KAAK,CAAA;AAAA,MACpG;AAEA,MAAA,MAAM,UAAA,CAAW,OAAO,MAAiD,CAAA;AAGzE,MAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAW,eAAA,CAAgB,aAAa,CAAA;AAC/D,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,mCAAmC,CAAA;AAAA,MAC7E;AAEA,MAAA,OAAO,sBAAA,CAAuB,MAAA,EAAQ,cAAA,EAAgB,OAAA,EAAS,QAAQ,CAAA;AAAA,IACzE,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,6BAA6B,CAAA;AAAA,IACzD;AAAA,EACF;AACF,CAAC;AAKM,IAAM,4BAA4B,WAAA,CAAY;AAAA,EACnD,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,+BAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,uBAAA;AAAA,EACjB,cAAA,EAAgB,+BAAA;AAAA,EAChB,OAAA,EAAS,qBAAA;AAAA,EACT,WAAA,EAAa,uDAAA;AAAA,EACb,IAAA,EAAM,CAAC,eAAe,CAAA;AAAA,EACtB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO,EAAE,MAAA,EAAQ,cAAA,EAAgB,eAAc,KAAM;AAC5D,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AAClD,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0CAA0C,CAAA;AAAA,MACpF;AAGA,MAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAW,eAAA,CAAgB,aAAa,CAAA;AAC/D,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,qBAAA,EAAwB,aAAa,cAAc,CAAA;AAAA,MAC7F;AACA,MAAA,yBAAA,CAA0B,QAAA,EAAU,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAC,CAAA;AAGxF,MAAA,iBAAA,CAAkB;AAAA,QAChB,cAAA;AAAA,QACA,QAAA,EAAU,eAAA;AAAA,QACV,UAAA,EAAY,aAAA;AAAA,QACZ,MAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACT,CAAA;AAED,MAAA,MAAM,UAAA,CAAW,OAAO,aAAa,CAAA;AAIrC,MAAA,IAAI;AACF,QAAA,MAAM,cAAA,GAAiB,MAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA;AACzD,QAAA,MAAM,gBAAgB,wBAAA,CAAyB,EAAE,YAAY,OAAA,EAAS,QAAA,EAAU,eAAe,CAAA;AAAA,MACjG,SAAS,YAAA,EAAc;AACrB,QAAA,MAAA,CACG,SAAA,MACC,IAAA,GAAO,8CAAA,EAAgD,EAAE,aAAA,EAAe,KAAA,EAAO,cAAc,CAAA;AAAA,MACnG;AAEA,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,OAAA,EAAS,SAAS,aAAa,CAAA,qBAAA;AAAA,OACjC;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,6BAA6B,CAAA;AAAA,IACzD;AAAA,EACF;AACF,CAAC;AAOM,IAAM,6BAA6B,WAAA,CAAY;AAAA,EACpD,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,uCAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,uBAAA;AAAA,EACjB,UAAA,EAAY,4BAAA;AAAA,EACZ,cAAA,EAAgB,gCAAA;AAAA,EAChB,OAAA,EAAS,sBAAA;AAAA,EACT,WAAA,EACE,uKAAA;AAAA,EACF,IAAA,EAAM,CAAC,eAAe,CAAA;AAAA,EACtB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO,EAAE,QAAQ,cAAA,EAAgB,aAAA,EAAe,WAAU,KAAM;AACvE,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AAClD,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0CAA0C,CAAA;AAAA,MACpF;AAEA,MAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA;AAChD,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,wCAAwC,CAAA;AAAA,MAClF;AAGA,MAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAW,eAAA,CAAgB,aAAa,CAAA;AAC/D,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,qBAAA,EAAwB,aAAa,cAAc,CAAA;AAAA,MAC7F;AACA,MAAA,yBAAA,CAA0B,QAAA,EAAU,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAC,CAAA;AAGxF,MAAA,iBAAA,CAAkB;AAAA,QAChB,cAAA;AAAA,QACA,QAAA,EAAU,eAAA;AAAA,QACV,UAAA,EAAY,aAAA;AAAA,QACZ,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACT,CAAA;AAGD,MAAA,MAAM,IAAA,GAAO,MAAM,OAAO,MAAW,CAAA;AACrC,MAAA,MAAM,EAAA,GAAK,MAAM,OAAO,aAAkB,CAAA;AAC1C,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA;AACnD,MAAA,MAAM,WAAA,GAAc,KAAK,OAAA,CAAQ,OAAA,CAAQ,QAAQ,GAAA,CAAI,eAAA,IAAmB,OAAA,CAAQ,GAAA,EAAK,CAAA;AACrF,MAAA,IAAI,CAAC,aAAa,UAAA,CAAW,WAAA,GAAc,KAAK,OAAA,CAAQ,GAAG,CAAA,IAAK,YAAA,KAAiB,WAAA,EAAa;AAC5F,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK;AAAA,UAC3B,OAAA,EAAS,mDAAmD,WAAW,CAAA;AAAA,SACxE,CAAA;AAAA,MACH;AAIA,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,MAAM,EAAA,CAAG,IAAA,CAAK,YAAY,CAAA;AACvC,QAAA,IAAI,CAAC,IAAA,CAAK,WAAA,EAAY,EAAG;AACvB,UAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,8BAAA,EAAiC,YAAY,IAAI,CAAA;AAAA,QAC3F;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,GAAA,YAAe,eAAe,MAAM,GAAA;AACxC,QAAA,IAAK,GAAA,EAA+B,SAAS,QAAA,EAAU;AACrD,UAAA,MAAM,IAAI,cAAc,GAAA,EAAK;AAAA,YAC3B,OAAA,EAAS,sDAAsD,YAAY,CAAA,+GAAA;AAAA,WAC5E,CAAA;AAAA,QACH;AACA,QAAA,MAAM,GAAA;AAAA,MACR;AACA,MAAA,IAAI;AACF,QAAA,MAAM,GAAG,IAAA,CAAK,IAAA,CAAK,QAAQ,IAAA,CAAK,YAAA,EAAc,UAAU,CAAC,CAAA;AAAA,MAC3D,SAAS,GAAA,EAAK;AACZ,QAAA,IAAK,GAAA,EAA+B,SAAS,QAAA,EAAU;AACrD,UAAA,MAAM,IAAI,cAAc,GAAA,EAAK;AAAA,YAC3B,OAAA,EAAS,kCAAkC,YAAY,CAAA;AAAA,WACxD,CAAA;AAAA,QACH;AACA,QAAA,MAAM,GAAA;AAAA,MACR;AAGA,MAAA,MAAM,MAAA,GAAS,IAAI,gBAAA,EAAiB;AACpC,MAAA,MAAM,EAAE,sBAAA,EAAuB,GAAI,MAAM,OAAO,wBAAwB,CAAA;AAExE,MAAA,MAAM,EAAE,UAAU,IAAA,EAAM,KAAA,KAAU,MAAM,sBAAA,CAAuB,MAAA,EAAQ,YAAA,EAAc,SAAS,CAAA;AAO9F,MAAA,MAAM,iBAA0C,EAAC;AACjD,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACnD,QAAA,IAAI,KAAA,KAAU,MAAA,EAAW,cAAA,CAAe,GAAG,CAAA,GAAI,KAAA;AAAA,MACjD;AAKA,MAAA,MAAM,WAAW,MAAA,CAAO;AAAA,QACtB,EAAA,EAAI,aAAA;AAAA,QACJ,GAAG,cAAA;AAAA,QACH,IAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA,EAAQ;AAAA,OACT,CAAA;AAGD,MAAA,MAAM,aAAA,GAAgB,MAAM,UAAA,CAAW,gBAAA,CAAiB,aAAa,CAAA;AACrE,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,MAAM,WAAW,MAAA,CAAO;AAAA,UACtB,EAAA,EAAI,aAAA;AAAA,UACJ,iBAAiB,aAAA,CAAc;AAAA,SAChC,CAAA;AAAA,MACH;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAW,eAAA,CAAgB,aAAa,CAAA;AAC/D,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,yCAAyC,CAAA;AAAA,MACnF;AAEA,MAAA,OAAO,sBAAA,CAAuB,MAAA,EAAQ,cAAA,EAAgB,OAAA,EAAS,QAAQ,CAAA;AAAA,IACzE,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,+BAA+B,CAAA;AAAA,IAC3D;AAAA,EACF;AACF,CAAC","file":"chunk-VE2FUYFD.js","sourcesContent":["import type { StorageSkillFileNode } from '@mastra/core/storage';\nimport { LocalSkillSource } from '@mastra/core/workspace';\n\nimport { HTTPException } from '../http-exception';\nimport {\n storedSkillIdPathParams,\n listStoredSkillsQuerySchema,\n createStoredSkillBodySchema,\n updateStoredSkillBodySchema,\n publishStoredSkillBodySchema,\n listStoredSkillsResponseSchema,\n getStoredSkillResponseSchema,\n createStoredSkillResponseSchema,\n updateStoredSkillResponseSchema,\n deleteStoredSkillResponseSchema,\n publishStoredSkillResponseSchema,\n} from '../schemas/stored-skills';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { toSlug, assertStoredResourceScope, getStoredResourceScope, scopeStoredResourceMetadata } from '../utils';\n\nimport {\n assertReadAccess,\n assertWriteAccess,\n getCallerAuthorId,\n matchesAuthorFilter,\n resolveAuthorFilter,\n} from './authorship';\nimport { isBuilderFeatureEnabled } from './editor-builder';\nimport { handleError } from './error';\nimport { enrichOrStripFavorites, prepareFavoritesEnrichment, stripFavoriteFields } from './favorites-enrichment';\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Well-known folder names in the skill file tree whose children represent\n * indexable path arrays (references, scripts, assets).\n */\nconst INDEXED_FOLDERS = ['references', 'scripts', 'assets'] as const;\n\n/**\n * Walks the `files` tree and collects relative file paths for each well-known\n * folder (references, scripts, assets). Returned arrays only include entries\n * that are not already present in any explicitly-provided arrays so callers\n * can pass both `files` and `references` without creating duplicates.\n */\nfunction extractIndexedPathsFromFiles(\n files: StorageSkillFileNode[] | undefined,\n existing: {\n references?: string[];\n scripts?: string[];\n assets?: string[];\n },\n): {\n references?: string[];\n scripts?: string[];\n assets?: string[];\n} {\n if (!files || files.length === 0) return {};\n\n // Find the root folder (first folder node, usually id=\"root\")\n const root = files.find(n => n.type === 'folder');\n if (!root?.children) return {};\n\n const result: Record<string, string[]> = {};\n\n for (const folderName of INDEXED_FOLDERS) {\n const folder = root.children.find(n => n.type === 'folder' && n.name === folderName);\n if (!folder?.children || folder.children.length === 0) continue;\n\n const existingPaths = new Set(existing[folderName] ?? []);\n const paths: string[] = [...existingPaths];\n\n collectFilePaths(folder.children, folderName, existingPaths, paths);\n\n if (paths.length > 0) {\n result[folderName] = paths;\n }\n }\n\n return result;\n}\n\n/** Recursively collects file paths from a subtree, building relative paths. */\nfunction collectFilePaths(\n nodes: StorageSkillFileNode[],\n prefix: string,\n existingPaths: Set<string>,\n out: string[],\n): void {\n for (const node of nodes) {\n if (node.type === 'file') {\n const relativePath = `${prefix}/${node.name}`;\n if (!existingPaths.has(relativePath)) {\n out.push(relativePath);\n }\n } else if (node.type === 'folder' && node.children) {\n collectFilePaths(node.children, `${prefix}/${node.name}`, existingPaths, out);\n }\n }\n}\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/skills - List all stored skills\n */\nexport const LIST_STORED_SKILLS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/skills',\n responseType: 'json',\n queryParamSchema: listStoredSkillsQuerySchema,\n responseSchema: listStoredSkillsResponseSchema,\n summary: 'List stored skills',\n description: 'Returns a paginated list of all skill configurations stored in the database',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n page,\n perPage,\n orderBy,\n status,\n authorId,\n visibility,\n metadata,\n favoritedOnly,\n pinFavoritedFor,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n const filter = resolveAuthorFilter({\n requestContext,\n resource: 'stored-skills',\n queryAuthorId: authorId,\n queryVisibility: visibility,\n });\n\n const scope = await getStoredResourceScope(mastra, requestContext);\n const scopedMetadata = scopeStoredResourceMetadata(metadata, scope);\n\n const callerId = getCallerAuthorId(requestContext);\n const favoritesEnabled = await isBuilderFeatureEnabled(mastra, 'favorites');\n const honoredStarredOnly = favoritesEnabled && favoritedOnly === true;\n const favoriteSubjectId = pinFavoritedFor ?? callerId;\n\n // `?favoritedOnly=true` flow: fetch caller's favorited IDs, restrict the list\n // to that set, then post-filter by visibility and recompute total/pages.\n if (honoredStarredOnly) {\n const effectivePerPage: number = perPage ?? 100;\n if (!favoriteSubjectId) {\n // Caller cannot have favorited anything without an identity.\n return { skills: [], total: 0, page, perPage: effectivePerPage, hasMore: false };\n }\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) {\n throw new HTTPException(500, { message: 'Favorites storage domain is not available' });\n }\n const starredIds = await favoritesStore.listFavoritedIds({ userId: favoriteSubjectId, entityType: 'skill' });\n if (starredIds.length === 0) {\n return { skills: [], total: 0, page, perPage: effectivePerPage, hasMore: false };\n }\n const allMatching = await skillStore.listResolved({\n perPage: false,\n orderBy,\n status,\n authorId: filter.kind === 'exact' ? filter.authorId : undefined,\n metadata: scopedMetadata,\n entityIds: starredIds,\n });\n const visible = allMatching.skills.filter(record => matchesAuthorFilter(record, filter));\n const total = visible.length;\n const startIdx = effectivePerPage === 0 ? 0 : page * effectivePerPage;\n const endIdx = effectivePerPage === 0 ? 0 : startIdx + effectivePerPage;\n const sliced = effectivePerPage === 0 ? [] : visible.slice(startIdx, endIdx);\n const annotated = sliced.map(record => ({ ...record, isFavorited: true }));\n const hasMore = effectivePerPage > 0 && endIdx < total;\n return {\n skills: annotated,\n total,\n page,\n perPage: effectivePerPage,\n hasMore,\n };\n }\n\n const result = await skillStore.listResolved({\n page,\n perPage,\n orderBy,\n status,\n authorId: filter.kind === 'exact' ? filter.authorId : undefined,\n metadata: scopedMetadata,\n });\n\n // Post-filter to enforce ownership + visibility rules across all backends.\n // Storage adapters can only do an equality filter on authorId, so we apply\n // the ownedOrPublic / publicOnly logic here.\n // Note: `result.total` / `result.hasMore` reflect the storage-reported\n // count before this post-filter. For `unrestricted` / `exact` filters\n // nothing is removed; for `ownedOrPublic` / `publicOnly`, downstream UIs\n // should treat the filter as a view over the caller's scope — an\n // approximation is OK and preserves pagination math.\n const visibleSkills = result.skills.filter(record => matchesAuthorFilter(record, filter));\n\n if (!favoritesEnabled) {\n return { ...result, skills: visibleSkills.map(stripFavoriteFields) };\n }\n\n const enrichment = await prepareFavoritesEnrichment(\n mastra,\n requestContext,\n 'skill',\n visibleSkills.map(s => s.id),\n );\n const annotated = enrichment\n ? visibleSkills.map(record => ({ ...record, isFavorited: enrichment.starredIds.has(record.id) }))\n : visibleSkills.map(stripFavoriteFields);\n\n return { ...result, skills: annotated };\n } catch (error) {\n return handleError(error, 'Error listing stored skills');\n }\n },\n});\n\n/**\n * GET /stored/skills/:storedSkillId - Get a stored skill by ID\n */\nexport const GET_STORED_SKILL_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/skills/:storedSkillId',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: getStoredSkillResponseSchema,\n summary: 'Get stored skill by ID',\n description: 'Returns a specific skill from storage by its unique identifier (resolved with active version config)',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n const skill = await skillStore.getByIdResolved(storedSkillId);\n\n if (!skill) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));\n\n assertReadAccess({ requestContext, resource: 'stored-skills', resourceId: storedSkillId, record: skill });\n\n return enrichOrStripFavorites(mastra, requestContext, 'skill', skill);\n } catch (error) {\n return handleError(error, 'Error getting stored skill');\n }\n },\n});\n\n/**\n * POST /stored/skills - Create a new stored skill\n */\nexport const CREATE_STORED_SKILL_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/skills',\n responseType: 'json',\n bodySchema: createStoredSkillBodySchema,\n responseSchema: createStoredSkillResponseSchema,\n summary: 'Create stored skill',\n description: 'Creates a new skill configuration in storage with the provided details',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n id: providedId,\n name,\n description,\n instructions,\n license,\n compatibility,\n source,\n references,\n scripts,\n assets,\n files,\n metadata,\n visibility: bodyVisibility,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n // Derive ID from name if not explicitly provided\n const id = providedId || toSlug(name);\n\n if (!id) {\n throw new HTTPException(400, {\n message: 'Could not derive skill ID from name. Please provide an explicit id.',\n });\n }\n\n // Check if skill with this ID already exists\n const existing = await skillStore.getById(id);\n if (existing) {\n throw new HTTPException(409, { message: `Skill with id ${id} already exists` });\n }\n\n // Force authorId from the authenticated caller; ignore any body-provided value.\n // No owner = always public (no auth / no user context).\n // With an owner, respect the client's choice, defaulting to 'private'.\n const authorId = getCallerAuthorId(requestContext) ?? undefined;\n const visibility: 'private' | 'public' = authorId ? (bodyVisibility ?? 'private') : 'public';\n\n // Derive references/scripts/assets path arrays from the files tree\n // so agents can discover them via skill_read even when only `files` is provided.\n const indexedPaths = extractIndexedPathsFromFiles(files, { references, scripts, assets });\n\n await skillStore.create({\n skill: {\n id,\n authorId,\n visibility,\n name,\n description,\n instructions,\n license,\n compatibility,\n source,\n references: indexedPaths.references ?? references,\n scripts: indexedPaths.scripts ?? scripts,\n assets: indexedPaths.assets ?? assets,\n files,\n metadata: scopeStoredResourceMetadata(metadata, await getStoredResourceScope(mastra, requestContext)),\n },\n });\n\n // Return the resolved skill (thin record + version config)\n const resolved = await skillStore.getByIdResolved(id);\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve created skill' });\n }\n\n return enrichOrStripFavorites(mastra, requestContext, 'skill', resolved);\n } catch (error) {\n return handleError(error, 'Error creating stored skill');\n }\n },\n});\n\n/**\n * PATCH /stored/skills/:storedSkillId - Update a stored skill\n */\nexport const UPDATE_STORED_SKILL_ROUTE = createRoute({\n method: 'PATCH',\n path: '/stored/skills/:storedSkillId',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n bodySchema: updateStoredSkillBodySchema,\n responseSchema: updateStoredSkillResponseSchema,\n summary: 'Update stored skill',\n description: 'Updates an existing skill in storage with the provided fields',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n storedSkillId,\n // Entity-level fields\n authorId,\n visibility,\n // Config fields (snapshot-level)\n name,\n description,\n instructions,\n license,\n compatibility,\n source,\n references,\n scripts,\n assets,\n files,\n metadata,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n // Check if skill exists. Skill metadata lives on the resolved snapshot.\n const existing = await skillStore.getByIdResolved(storedSkillId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n const scope = await getStoredResourceScope(mastra, requestContext);\n assertStoredResourceScope(existing, scope);\n\n // Throws 404 if the caller isn't the owner, admin, or `stored-skills:write[:<id>]` holder.\n assertWriteAccess({\n requestContext,\n resource: 'stored-skills',\n resourceId: storedSkillId,\n action: 'edit',\n record: existing,\n });\n\n // No owner = always public, regardless of what the client sent.\n const callerAuthorId = getCallerAuthorId(requestContext) ?? undefined;\n const resolvedVisibility = callerAuthorId ? visibility : visibility != null ? 'public' : undefined;\n\n // Derive references/scripts/assets path arrays from the files tree\n const indexedPaths = files ? extractIndexedPathsFromFiles(files, { references, scripts, assets }) : {};\n\n // Update the skill with both entity-level and config-level fields.\n // The storage layer handles separating these into record updates vs\n // new-version creation, but it uses `field in updates` to detect config\n // changes — so we must only include fields the caller actually sent.\n // Forwarding `undefined` keys would trigger a spurious version create\n // and pass `undefined` into the database driver.\n const update: Record<string, unknown> = { id: storedSkillId };\n if (authorId !== undefined) update.authorId = authorId;\n if (resolvedVisibility !== undefined) update.visibility = resolvedVisibility;\n if (name !== undefined) update.name = name;\n if (description !== undefined) update.description = description;\n if (instructions !== undefined) update.instructions = instructions;\n if (license !== undefined) update.license = license;\n if (compatibility !== undefined) update.compatibility = compatibility;\n if (source !== undefined) update.source = source;\n const resolvedReferences = indexedPaths.references ?? references;\n const resolvedScripts = indexedPaths.scripts ?? scripts;\n const resolvedAssets = indexedPaths.assets ?? assets;\n if (resolvedReferences !== undefined) update.references = resolvedReferences;\n if (resolvedScripts !== undefined) update.scripts = resolvedScripts;\n if (resolvedAssets !== undefined) update.assets = resolvedAssets;\n if (files !== undefined) update.files = files;\n if (metadata !== undefined) {\n update.metadata = scopeStoredResourceMetadata({ ...(existing.metadata ?? {}), ...metadata }, scope);\n }\n\n await skillStore.update(update as Parameters<typeof skillStore.update>[0]);\n\n // Return the resolved skill with the updated config\n const resolved = await skillStore.getByIdResolved(storedSkillId);\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve updated skill' });\n }\n\n return enrichOrStripFavorites(mastra, requestContext, 'skill', resolved);\n } catch (error) {\n return handleError(error, 'Error updating stored skill');\n }\n },\n});\n\n/**\n * DELETE /stored/skills/:storedSkillId - Delete a stored skill\n */\nexport const DELETE_STORED_SKILL_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/skills/:storedSkillId',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: deleteStoredSkillResponseSchema,\n summary: 'Delete stored skill',\n description: 'Deletes a skill from storage by its unique identifier',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n // Check if skill exists. Skill metadata lives on the resolved snapshot.\n const existing = await skillStore.getByIdResolved(storedSkillId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller isn't the owner, admin, or `skills:delete[:<id>]` holder.\n assertWriteAccess({\n requestContext,\n resource: 'stored-skills',\n resourceId: storedSkillId,\n action: 'delete',\n record: existing,\n });\n\n await skillStore.delete(storedSkillId);\n\n // Cascade: drop any favorite rows referencing this skill. Failure must not\n // abort the delete.\n try {\n const favoritesStore = await storage.getStore('favorites');\n await favoritesStore?.deleteFavoritesForEntity({ entityType: 'skill', entityId: storedSkillId });\n } catch (cascadeError) {\n mastra\n .getLogger?.()\n ?.warn?.('Failed to cascade-delete favorites for skill', { storedSkillId, error: cascadeError });\n }\n\n return {\n success: true,\n message: `Skill ${storedSkillId} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting stored skill');\n }\n },\n});\n\n/**\n * POST /stored/skills/:storedSkillId/publish - Publish a skill from filesystem\n * Walks the skill directory, hashes files into blob store, creates a new version\n * with the tree manifest, and sets activeVersionId.\n */\nexport const PUBLISH_STORED_SKILL_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/skills/:storedSkillId/publish',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n bodySchema: publishStoredSkillBodySchema,\n responseSchema: publishStoredSkillResponseSchema,\n summary: 'Publish stored skill',\n description:\n 'Snapshots the skill directory from the filesystem into content-addressable blob storage, creates a new version with a tree manifest, and marks the skill as published',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedSkillId, skillPath }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n const blobStore = await storage.getStore('blobs');\n if (!blobStore) {\n throw new HTTPException(500, { message: 'Blob storage domain is not available' });\n }\n\n // Verify skill exists. Skill metadata lives on the resolved snapshot.\n const existing = await skillStore.getByIdResolved(storedSkillId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller isn't the owner, admin, or `stored-skills:write[:<id>]` holder.\n assertWriteAccess({\n requestContext,\n resource: 'stored-skills',\n resourceId: storedSkillId,\n action: 'edit',\n record: existing,\n });\n\n // Validate skillPath to prevent path traversal\n const path = await import('node:path');\n const fs = await import('node:fs/promises');\n const resolvedPath = path.default.resolve(skillPath);\n const allowedBase = path.default.resolve(process.env.SKILLS_BASE_DIR || process.cwd());\n if (!resolvedPath.startsWith(allowedBase + path.default.sep) && resolvedPath !== allowedBase) {\n throw new HTTPException(400, {\n message: `skillPath must be within the allowed directory: ${allowedBase}`,\n });\n }\n\n // Verify the source directory exists and contains a SKILL.md before attempting\n // to publish, so callers get a 400 with context instead of a raw 500/ENOENT.\n try {\n const stat = await fs.stat(resolvedPath);\n if (!stat.isDirectory()) {\n throw new HTTPException(400, { message: `skillPath is not a directory: ${resolvedPath}` });\n }\n } catch (err) {\n if (err instanceof HTTPException) throw err;\n if ((err as NodeJS.ErrnoException)?.code === 'ENOENT') {\n throw new HTTPException(400, {\n message: `skillPath does not exist on the server filesystem: ${resolvedPath}. Create the skill directory (with a SKILL.md) before publishing, or use a skill that was materialized to disk.`,\n });\n }\n throw err;\n }\n try {\n await fs.stat(path.default.join(resolvedPath, 'SKILL.md'));\n } catch (err) {\n if ((err as NodeJS.ErrnoException)?.code === 'ENOENT') {\n throw new HTTPException(400, {\n message: `skillPath is missing SKILL.md: ${resolvedPath}`,\n });\n }\n throw err;\n }\n\n // Use LocalSkillSource to read from the server filesystem\n const source = new LocalSkillSource();\n const { publishSkillFromSource } = await import('@mastra/core/workspace');\n\n const { snapshot, tree, files } = await publishSkillFromSource(source, resolvedPath, blobStore);\n\n // Strip undefined keys from the snapshot before passing to update(). The\n // storage layer treats \"field present\" as \"field changed\"; forwarding\n // undefined would overwrite populated columns with undefined and trip\n // NOT NULL / \"undefined cannot be passed as argument\" errors in\n // adapters that bind args raw (libsql, pg).\n const snapshotUpdate: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(snapshot)) {\n if (value !== undefined) snapshotUpdate[key] = value;\n }\n\n // Update the skill with new version data + tree + UI-facing file tree.\n // `files` is the nested folder/file structure shown in the editor; without\n // it the column would stay null and the UI would render an empty tree.\n await skillStore.update({\n id: storedSkillId,\n ...snapshotUpdate,\n tree,\n files,\n status: 'published',\n });\n\n // Point activeVersionId to the newly created version\n const latestVersion = await skillStore.getLatestVersion(storedSkillId);\n if (latestVersion) {\n await skillStore.update({\n id: storedSkillId,\n activeVersionId: latestVersion.id,\n });\n }\n\n const resolved = await skillStore.getByIdResolved(storedSkillId);\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve skill after publish' });\n }\n\n return enrichOrStripFavorites(mastra, requestContext, 'skill', resolved);\n } catch (error) {\n return handleError(error, 'Error publishing stored skill');\n }\n },\n});\n"]}
'use strict';
var chunkWE6BWC6H_cjs = require('./chunk-WE6BWC6H.cjs');
var chunkBPREBJ3Z_cjs = require('./chunk-BPREBJ3Z.cjs');
var chunkSOCH5SNI_cjs = require('./chunk-SOCH5SNI.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
var util = require('util');
var a2a = require('@mastra/core/a2a');
var v4 = require('zod/v4');
var crypto2 = require('crypto');
var promises = require('dns/promises');
var http = require('http');
var https = require('https');
var net = require('net');
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var crypto2__namespace = /*#__PURE__*/_interopNamespace(crypto2);
// ../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/canonicalize/1.0.8/8d710dcf19a48d178b2fc853e16c59951fde29eb27b6037da6c3f4dbb968b03d/node_modules/canonicalize/lib/canonicalize.js
var require_canonicalize = chunkO7I5CWRX_cjs.__commonJS({
"../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/canonicalize/1.0.8/8d710dcf19a48d178b2fc853e16c59951fde29eb27b6037da6c3f4dbb968b03d/node_modules/canonicalize/lib/canonicalize.js"(exports, module) {
module.exports = function serialize(object) {
if (object === null || typeof object !== "object" || object.toJSON != null) {
return JSON.stringify(object);
}
if (Array.isArray(object)) {
return "[" + object.reduce((t, cv, ci) => {
const comma = ci === 0 ? "" : ",";
const value = cv === void 0 || typeof cv === "symbol" ? null : cv;
return t + comma + serialize(value);
}, "") + "]";
}
return "{" + Object.keys(object).sort().reduce((t, cv, ci) => {
if (object[cv] === void 0 || typeof object[cv] === "symbol") {
return t;
}
const comma = t.length === 0 ? "" : ",";
return t + comma + serialize(cv) + ":" + serialize(object[cv]);
}, "") + "}";
};
}
});
// src/server/handlers/a2a.ts
var a2a_exports = {};
chunkO7I5CWRX_cjs.__export(a2a_exports, {
AGENT_EXECUTION_ROUTE: () => AGENT_EXECUTION_ROUTE,
GET_AGENT_CARD_ROUTE: () => GET_AGENT_CARD_ROUTE,
getAgentCardByIdHandler: () => getAgentCardByIdHandler,
getAgentExecutionHandler: () => getAgentExecutionHandler,
handleDeleteTaskPushNotificationConfig: () => handleDeleteTaskPushNotificationConfig,
handleGetTaskPushNotificationConfig: () => handleGetTaskPushNotificationConfig,
handleListTaskPushNotificationConfig: () => handleListTaskPushNotificationConfig,
handleMessageSend: () => handleMessageSend,
handleMessageStream: () => handleMessageStream,
handleSetTaskPushNotificationConfig: () => handleSetTaskPushNotificationConfig,
handleTaskCancel: () => handleTaskCancel,
handleTaskGet: () => handleTaskGet,
handleTaskResubscribe: () => handleTaskResubscribe
});
// src/server/a2a/agent-card-signing.ts
var import_canonicalize = chunkO7I5CWRX_cjs.__toESM(require_canonicalize(), 1);
var SUPPORTED_JWS_ALGORITHMS = /* @__PURE__ */ new Set([
"ES256",
"ES384",
"ES512",
"RS256",
"RS384",
"RS512",
"PS256",
"PS384",
"PS512"
]);
function stripAgentCardSignatures(agentCard) {
const unsignedCard = structuredClone(agentCard);
delete unsignedCard.signatures;
return unsignedCard;
}
function importSigningKey(signing) {
const { privateKey } = signing;
if (typeof privateKey === "string") {
return crypto2__namespace.createPrivateKey(privateKey);
}
return crypto2__namespace.createPrivateKey({
key: privateKey,
format: "jwk"
});
}
function getProtectedHeader(signing) {
const { alg, ...rest } = signing.protectedHeader;
if (!SUPPORTED_JWS_ALGORITHMS.has(alg)) {
throw new Error(`Unsupported JWS algorithm for A2A Agent Card signing: ${alg}`);
}
return {
...rest,
alg
};
}
function getSignatureOptions(algorithm) {
if (algorithm.startsWith("ES")) {
return { dsaEncoding: "ieee-p1363" };
}
if (algorithm.startsWith("PS")) {
return {
padding: crypto2__namespace.constants.RSA_PKCS1_PSS_PADDING,
saltLength: crypto2__namespace.constants.RSA_PSS_SALTLEN_DIGEST
};
}
return {};
}
function getDigestAlgorithm(algorithm) {
if (algorithm.endsWith("256")) return "sha256";
if (algorithm.endsWith("384")) return "sha384";
if (algorithm.endsWith("512")) return "sha512";
throw new Error(`Unsupported JWS algorithm for A2A Agent Card signing: ${algorithm}`);
}
async function signAgentCard({
agentCard,
signing
}) {
const canonicalPayload = (0, import_canonicalize.default)(stripAgentCardSignatures(agentCard));
if (!canonicalPayload) {
throw new Error("Failed to canonicalize A2A Agent Card for signing");
}
const key = importSigningKey(signing);
const protectedHeader = getProtectedHeader(signing);
const encodedHeader = Buffer.from(JSON.stringify(protectedHeader), "utf8").toString("base64url");
const encodedPayload = Buffer.from(canonicalPayload, "utf8").toString("base64url");
const signingInput = `${encodedHeader}.${encodedPayload}`;
const signatureBuffer = crypto2__namespace.sign(
getDigestAlgorithm(String(protectedHeader.alg)),
Buffer.from(signingInput, "utf8"),
{
key,
...getSignatureOptions(String(protectedHeader.alg))
}
);
const signatureValue = signatureBuffer.toString("base64url");
if (!encodedHeader || !signatureValue) {
throw new Error("Failed to create compact JWS for A2A Agent Card");
}
const signature = {
protected: encodedHeader,
signature: signatureValue,
header: signing.header
};
return {
...agentCard,
signatures: [...agentCard.signatures ?? [], signature]
};
}
function normalizeError(error, reqId, taskId, logger) {
let a2aError;
if (error instanceof a2a.MastraA2AError) {
a2aError = error;
} else if (error instanceof Error) {
a2aError = a2a.MastraA2AError.internalError(error.message, { stack: error.stack });
} else {
a2aError = a2a.MastraA2AError.internalError("An unknown error occurred.", error);
}
if (taskId && !a2aError.taskId) {
a2aError.taskId = taskId;
}
logger?.error(`Error processing request (Task: ${a2aError.taskId ?? "N/A"}, ReqID: ${reqId ?? "N/A"}):`, a2aError);
return createErrorResponse(reqId, a2aError.toJSONRPCError());
}
function createErrorResponse(id, error) {
return {
jsonrpc: "2.0",
id,
// Can be null if request ID was invalid/missing
error
};
}
function createSuccessResponse(id, result) {
if (!id) {
throw a2a.MastraA2AError.internalError("Cannot create success response for null ID.");
}
return {
jsonrpc: "2.0",
id,
result
};
}
function convertToCoreMessage(message) {
return {
role: message.role === "user" ? "user" : "assistant",
content: message.parts.map((msg) => convertToCoreMessagePart(msg))
};
}
function convertToCoreMessagePart(part) {
switch (part.kind) {
case "text":
return {
type: "text",
text: part.text
};
case "file":
return {
type: "file",
data: "uri" in part.file ? new URL(part.file.uri) : part.file.bytes,
mimeType: part.file.mimeType
};
case "data":
throw new Error("Data parts are not supported in core messages");
}
}
var DEFAULT_PUSH_NOTIFICATION_TOKEN_HEADER = "X-A2A-Notification-Token";
function isDisallowedHostname(hostname) {
const normalized = hostname.toLowerCase();
return normalized === "localhost" || normalized.endsWith(".localhost") || normalized.endsWith(".local") || normalized.endsWith(".internal") || !normalized.includes(".");
}
function isDisallowedIpv4(address) {
const [first = -1, second = -1] = address.split(".").map(Number);
return first === 10 || first === 127 || first === 169 && second === 254 || first === 172 && second >= 16 && second <= 31 || first === 192 && second === 168;
}
function isDisallowedIpv6(address) {
const normalized = address.toLowerCase();
return normalized === "::1" || normalized.startsWith("fe8") || normalized.startsWith("fe9") || normalized.startsWith("fea") || normalized.startsWith("feb") || normalized.startsWith("fc") || normalized.startsWith("fd");
}
function isDisallowedIpAddress(address) {
const version = net.isIP(address);
if (version === 4) {
return isDisallowedIpv4(address);
}
if (version === 6) {
return isDisallowedIpv6(address);
}
return false;
}
var DefaultPushNotificationSender = class {
constructor(pushNotificationStore, options = {}) {
this.pushNotificationStore = pushNotificationStore;
this.options = options;
}
pushNotificationStore;
options;
getStore() {
return this.pushNotificationStore;
}
async resolveValidatedDestination(rawUrl) {
const url = new URL(rawUrl);
if (url.protocol !== "https:" && url.protocol !== "http:") {
throw new Error(`Push notification URL must use http or https: ${url.protocol}`);
}
const hostname = url.hostname.toLowerCase();
if (this.options.allowedHosts && !this.options.allowedHosts.includes(hostname)) {
throw new Error(`Push notification host is not allowed: ${hostname}`);
}
if (isDisallowedHostname(hostname)) {
throw new Error(`Push notification URL must not target local or internal hosts: ${hostname}`);
}
if (isDisallowedIpAddress(hostname)) {
throw new Error(`Push notification URL must not target local or private IPs: ${hostname}`);
}
const resolvedAddresses = net.isIP(hostname) === 0 ? await (this.options.lookup ?? promises.lookup)(hostname, { all: true, verbatim: true }) : [{ address: hostname, family: net.isIP(hostname) }];
if (resolvedAddresses.some((result) => isDisallowedIpAddress(result.address))) {
throw new Error(`Push notification URL resolved to a local or private IP: ${hostname}`);
}
const requestUrl = new URL(url.toString());
requestUrl.hostname = resolvedAddresses[0].address;
return {
originalUrl: url,
requestUrl,
hostHeader: url.host,
servername: net.isIP(hostname) === 0 ? hostname : void 0
};
}
async postTaskSnapshot({
requestUrl,
hostHeader,
servername,
headers,
body,
timeout
}) {
headers.set("host", hostHeader);
const signal = typeof AbortSignal.timeout === "function" ? AbortSignal.timeout(timeout) : void 0;
if (this.options.fetch) {
return this.options.fetch(requestUrl.toString(), {
method: "POST",
headers,
body,
signal
});
}
const transport = requestUrl.protocol === "https:" ? https.request : http.request;
return await new Promise((resolve, reject) => {
const request = transport(
{
protocol: requestUrl.protocol,
hostname: requestUrl.hostname,
port: requestUrl.port || void 0,
path: `${requestUrl.pathname}${requestUrl.search}`,
method: "POST",
headers: Object.fromEntries(headers.entries()),
servername
},
(response) => {
response.resume();
response.on("end", () => {
resolve({
ok: !!response.statusCode && response.statusCode >= 200 && response.statusCode < 300,
status: response.statusCode ?? 0,
statusText: response.statusMessage ?? ""
});
});
}
);
request.on("error", reject);
if (signal) {
signal.addEventListener(
"abort",
() => {
request.destroy(signal.reason instanceof Error ? signal.reason : new Error("Push notification timed out"));
},
{ once: true }
);
}
request.end(body);
});
}
async sendNotifications({
agentId,
task,
logger
}) {
const configs = this.pushNotificationStore.list({
agentId,
params: { id: task.id }
});
if (configs.length === 0) {
return;
}
await Promise.allSettled(
configs.map(async (config) => {
const headers = new Headers({
"content-type": "application/json"
});
if (config.pushNotificationConfig.token) {
headers.set(
this.options.tokenHeaderName ?? DEFAULT_PUSH_NOTIFICATION_TOKEN_HEADER,
config.pushNotificationConfig.token
);
}
const auth = config.pushNotificationConfig.authentication;
if (auth?.credentials) {
if (auth.schemes.includes("Bearer")) {
headers.set("authorization", `Bearer ${auth.credentials}`);
} else if (auth.schemes.includes("Basic")) {
headers.set("authorization", `Basic ${auth.credentials}`);
}
}
const { requestUrl, hostHeader, servername } = await this.resolveValidatedDestination(
config.pushNotificationConfig.url
);
const response = await this.postTaskSnapshot({
requestUrl,
hostHeader,
servername,
headers,
body: JSON.stringify(task),
timeout: this.options.timeout ?? 5e3
});
if (!response.ok) {
throw new Error(
`Push notification failed with status ${response.status} ${response.statusText ?? ""}`.trim()
);
}
})
).then((results) => {
for (const result of results) {
if (result.status === "rejected") {
logger?.error("Failed to deliver A2A push notification", result.reason);
}
}
});
}
};
// src/server/a2a/push-notification-store.ts
function normalizeConfigId(taskId, configId) {
return configId || taskId;
}
var InMemoryPushNotificationStore = class {
store = /* @__PURE__ */ new Map();
getKey(agentId, taskId) {
return JSON.stringify([agentId, taskId]);
}
set({ agentId, config }) {
const key = this.getKey(agentId, config.taskId);
const configs = this.store.get(key) ?? /* @__PURE__ */ new Map();
const normalizedConfig = {
taskId: config.taskId,
pushNotificationConfig: {
...config.pushNotificationConfig,
id: normalizeConfigId(config.taskId, config.pushNotificationConfig.id)
}
};
configs.set(normalizedConfig.pushNotificationConfig.id, structuredClone(normalizedConfig));
this.store.set(key, configs);
return structuredClone(normalizedConfig);
}
get({
agentId,
params
}) {
const key = this.getKey(agentId, params.id);
const configId = normalizeConfigId(params.id, params.pushNotificationConfigId);
const config = this.store.get(key)?.get(configId);
return config ? structuredClone(config) : null;
}
list({
agentId,
params
}) {
const key = this.getKey(agentId, params.id);
return Array.from(this.store.get(key)?.values() ?? []).map((config) => structuredClone(config));
}
delete({ agentId, params }) {
const key = this.getKey(agentId, params.id);
const configs = this.store.get(key);
if (!configs) {
return false;
}
const deleted = configs.delete(params.pushNotificationConfigId);
if (configs.size === 0) {
this.store.delete(key);
}
return deleted;
}
};
// src/server/a2a/tasks.ts
function isTaskStatusUpdate(update) {
return "state" in update && !("parts" in update);
}
function isArtifactUpdate(update) {
return "kind" in update && update.kind === "artifact-update";
}
function applyUpdateToTask(current, update) {
let newTask = structuredClone(current);
if (isTaskStatusUpdate(update)) {
newTask.status = {
...newTask.status,
// Keep existing properties if not overwritten
...update,
// Apply updates
timestamp: (/* @__PURE__ */ new Date()).toISOString()
};
} else if (isArtifactUpdate(update)) {
if (!newTask.artifacts) {
newTask.artifacts = [];
} else {
newTask.artifacts = [...newTask.artifacts];
}
const artifact = update.artifact;
const existingIndex = newTask.artifacts.findIndex((a) => a.name === artifact.name);
const existingArtifact = newTask.artifacts[existingIndex];
if (existingArtifact) {
if (update.append) {
const appendedArtifact = JSON.parse(JSON.stringify(existingArtifact));
appendedArtifact.parts.push(...artifact.parts);
if (artifact.metadata) {
appendedArtifact.metadata = {
...appendedArtifact.metadata || {},
...artifact.metadata
};
}
if (artifact.description) appendedArtifact.description = artifact.description;
newTask.artifacts[existingIndex] = appendedArtifact;
} else {
newTask.artifacts[existingIndex] = { ...artifact };
}
} else {
newTask.artifacts.push({ ...artifact });
}
}
return newTask;
}
async function loadOrCreateTask({
agentId,
taskId,
taskStore,
message,
contextId,
metadata,
logger
}) {
const data = await taskStore.load({ agentId, taskId });
if (!data) {
const initialTask = {
id: taskId,
contextId: contextId || crypto.randomUUID(),
status: {
state: "submitted",
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
message: void 0
},
artifacts: [],
history: [message],
metadata,
kind: "task"
};
logger?.info(`[Task ${taskId}] Created new task.`);
await taskStore.save({ agentId, data: initialTask });
return initialTask;
}
logger?.info(`[Task ${taskId}] Loaded existing task.`);
let updatedData = data;
updatedData.history = [...data.history || [], message];
const { status } = data;
const finalStates = ["completed", "failed", "canceled"];
if (finalStates.includes(status.state)) {
logger?.warn(`[Task ${taskId}] Received message for task in final state ${status.state}. Restarting.`);
updatedData = applyUpdateToTask(updatedData, {
state: "submitted",
message: void 0
});
} else if (status.state === "input-required") {
logger?.info(`[Task ${taskId}] Changing state from 'input-required' to 'working'.`);
updatedData = applyUpdateToTask(updatedData, { state: "working" });
} else if (status.state === "working") {
logger?.warn(`[Task ${taskId}] Received message while already 'working'. Proceeding.`);
}
await taskStore.save({ agentId, data: updatedData });
return updatedData;
}
function createTaskContext({
task,
userMessage,
history,
activeCancellations
}) {
return {
task: structuredClone(task),
userMessage,
history: structuredClone(history),
isCancelled: () => activeCancellations.has(task.id)
};
}
// src/server/handlers/a2a.ts
var messagePartSchema = v4.z.discriminatedUnion("kind", [
v4.z.object({
kind: v4.z.literal("text"),
text: v4.z.string(),
metadata: v4.z.record(v4.z.string(), v4.z.any()).optional()
}),
v4.z.object({
kind: v4.z.literal("file"),
file: v4.z.union([
v4.z.object({
bytes: v4.z.string(),
mimeType: v4.z.string().optional(),
name: v4.z.string().optional()
}),
v4.z.object({
uri: v4.z.string(),
mimeType: v4.z.string().optional(),
name: v4.z.string().optional()
})
]),
metadata: v4.z.record(v4.z.string(), v4.z.any()).optional()
}),
v4.z.object({
kind: v4.z.literal("data"),
data: v4.z.record(v4.z.string(), v4.z.any()),
metadata: v4.z.record(v4.z.string(), v4.z.any()).optional()
})
]);
var messageSendParamsSchema = v4.z.object({
message: v4.z.object({
role: v4.z.enum(["user", "agent"]),
parts: v4.z.array(messagePartSchema),
kind: v4.z.literal("message"),
messageId: v4.z.string(),
contextId: v4.z.string().optional(),
taskId: v4.z.string().optional(),
referenceTaskIds: v4.z.array(v4.z.string()).optional(),
extensions: v4.z.array(v4.z.string()).optional(),
metadata: v4.z.record(v4.z.string(), v4.z.any()).optional()
}),
configuration: v4.z.object({
acceptedOutputModes: v4.z.array(v4.z.string()).optional(),
blocking: v4.z.boolean().optional(),
historyLength: v4.z.number().optional(),
pushNotificationConfig: v4.z.object({
url: v4.z.string(),
id: v4.z.string().optional(),
token: v4.z.string().optional(),
authentication: v4.z.object({
schemes: v4.z.array(v4.z.string()),
credentials: v4.z.string().optional()
}).optional()
}).optional()
}).optional()
});
var defaultPushNotificationStore = new InMemoryPushNotificationStore();
var defaultPushNotificationSender = new DefaultPushNotificationSender(defaultPushNotificationStore);
function createAgentCardDefaults({
pushNotifications = false
} = {}) {
return {
protocolVersion: "0.3.0",
additionalInterfaces: [],
supportsAuthenticatedExtendedCard: false,
security: [],
securitySchemes: {},
capabilities: {
streaming: true,
pushNotifications,
stateTransitionHistory: false,
extensions: []
},
defaultInputModes: ["text/plain"],
defaultOutputModes: ["text/plain"]
};
}
async function getAgentCardByIdHandler({
mastra,
agentId,
executionUrl = `/a2a/${agentId}`,
provider = {
organization: "Mastra",
url: "https://mastra.ai"
},
version = "1.0",
pushNotifications = false,
requestContext
}) {
const agent = await chunkBPREBJ3Z_cjs.getAgentFromSystem({ mastra, agentId });
const [instructions, tools] = await Promise.all([agent.getInstructions({ requestContext }), agent.listTools({ requestContext })]);
const agentCard = {
name: agent.id || agentId,
description: chunkEVOVAWN6_cjs.convertInstructionsToString(instructions),
url: executionUrl,
provider,
version,
...createAgentCardDefaults({ pushNotifications }),
// Convert agent tools to skills format for A2A protocol
skills: Object.entries(tools).map(([toolId, tool]) => ({
id: toolId,
name: toolId,
description: tool.description || `Tool: ${toolId}`,
// Optional fields
tags: ["tool"]
}))
};
const signing = mastra.getServer?.()?.a2a?.agentCardSigning;
if (!signing) {
return agentCard;
}
return signAgentCard({
agentCard,
signing
});
}
function getA2AExecutionUrl({
agentId,
request,
routePrefix
}) {
const executionPath = `${routePrefix ?? ""}/a2a/${agentId}`;
if (!request) {
return executionPath;
}
return `${chunkSOCH5SNI_cjs.getPublicOrigin(request)}${executionPath}`;
}
function validateMessageSendParams(params) {
try {
messageSendParamsSchema.parse(params);
} catch (error) {
if (error instanceof v4.z.ZodError) {
throw a2a.MastraA2AError.invalidParams(error.issues[0].message);
}
throw error;
}
}
function createArtifactUpdate({
taskId,
contextId,
text,
data
}) {
const parts = [
...text ? [{ kind: "text", text }] : [],
...data ? [{ kind: "data", data }] : []
];
if (parts.length === 0) {
return void 0;
}
return {
kind: "artifact-update",
taskId,
contextId,
lastChunk: true,
artifact: {
artifactId: `${taskId}:response`,
name: data ? "response.json" : "response.txt",
parts
}
};
}
function createTextChunkArtifactUpdate({
taskId,
contextId,
text,
append,
lastChunk
}) {
return {
kind: "artifact-update",
taskId,
contextId,
...append ? { append: true } : {},
...lastChunk !== void 0 ? { lastChunk } : {},
artifact: {
artifactId: `${taskId}:response:text`,
name: "response.txt",
parts: [{ kind: "text", text }]
}
};
}
function createDataArtifactUpdate({
taskId,
contextId,
data,
lastChunk
}) {
return {
kind: "artifact-update",
taskId,
contextId,
...{ lastChunk } ,
artifact: {
artifactId: `${taskId}:response:data`,
name: "response.json",
parts: [{ kind: "data", data }]
}
};
}
function resolvePushNotificationPair({
pushNotificationStore,
pushNotificationSender
}) {
if (pushNotificationSender) {
return {
pushNotificationStore: pushNotificationSender.getStore(),
pushNotificationSender
};
}
if (pushNotificationStore) {
return {
pushNotificationStore,
pushNotificationSender: new DefaultPushNotificationSender(pushNotificationStore)
};
}
return {
pushNotificationStore: defaultPushNotificationStore,
pushNotificationSender: defaultPushNotificationSender
};
}
function createTaskPushNotificationConfig(taskId, pushNotificationConfig) {
return {
taskId,
pushNotificationConfig: {
...pushNotificationConfig,
id: pushNotificationConfig.id ?? taskId
}
};
}
function shouldSendPushNotification(previousTask, nextTask) {
const pushTriggerStates = ["completed", "failed", "canceled", "input-required"];
if (!pushTriggerStates.includes(nextTask.status.state)) {
return false;
}
return previousTask?.status.state !== nextTask.status.state;
}
async function saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender,
previousTask,
nextTask,
agentId,
logger
}) {
await taskStore.save({ agentId, data: nextTask });
if (!shouldSendPushNotification(previousTask, nextTask)) {
return;
}
void pushNotificationSender.sendNotifications({
agentId,
task: nextTask,
logger
}).catch((error) => {
logger?.error("Failed to schedule A2A push notification", error);
});
}
function extractFullStreamTextDelta(value) {
if (typeof value !== "object" || value === null || !("type" in value)) {
return null;
}
const chunk = value;
switch (chunk.type) {
case "text-delta":
if (typeof chunk.payload?.text === "string") {
return chunk.payload.text;
}
if (typeof chunk.payload?.delta === "string") {
return chunk.payload.delta;
}
if (typeof chunk.textDelta === "string") {
return chunk.textDelta;
}
if (typeof chunk.delta === "string") {
return chunk.delta;
}
if (typeof chunk.text === "string") {
return chunk.text;
}
return null;
default:
return null;
}
}
function extractFinalStructuredObject(value) {
if (typeof value !== "object" || value === null || !("type" in value)) {
return void 0;
}
const chunk = value;
if (chunk.type !== "object-result") {
return void 0;
}
const objectValue = chunk.payload?.object ?? chunk.object;
return objectValue && typeof objectValue === "object" ? objectValue : void 0;
}
function isTerminalTaskState(state) {
return ["completed", "failed", "canceled"].includes(state);
}
function artifactIdentity(artifact) {
return artifact.artifactId || artifact.name;
}
function areArtifactPartsEqual(left, right) {
if (left === right) {
return true;
}
if (left.length !== right.length) {
return false;
}
return left.every((part, index) => {
const other = right[index];
if (!other || part.kind !== other.kind) {
return false;
}
if (part.kind === "text" && other.kind === "text") {
return part.text === other.text;
}
return part === other;
});
}
function areArtifactsEqual(left, right) {
if (left === right) {
return true;
}
if (!left || !right) {
return left === right;
}
return left.artifactId === right.artifactId && left.name === right.name && left.description === right.description && left.metadata === right.metadata && areArtifactPartsEqual(left.parts, right.parts);
}
function areStatusMessagePartsEqual(left, right) {
return left === right || util.isDeepStrictEqual(left, right);
}
function areStatusMessagesEqual(left, right) {
if (left === right) {
return true;
}
if (!left || !right) {
return left === right;
}
return left.messageId === right.messageId && left.kind === right.kind && left.role === right.role && left.contextId === right.contextId && left.taskId === right.taskId && util.isDeepStrictEqual(left.referenceTaskIds, right.referenceTaskIds) && util.isDeepStrictEqual(left.extensions, right.extensions) && util.isDeepStrictEqual(left.metadata, right.metadata) && areStatusMessagePartsEqual(left.parts, right.parts);
}
function didTaskStatusChange(previous, next) {
return previous.status.state !== next.status.state || previous.status.timestamp !== next.status.timestamp || !areStatusMessagesEqual(previous.status.message, next.status.message);
}
function getTaskArtifactUpdates({ previous, next }) {
const previousArtifacts = new Map((previous.artifacts ?? []).map((artifact) => [artifactIdentity(artifact), artifact]));
const changedArtifacts = (next.artifacts ?? []).filter((artifact) => {
const priorArtifact = previousArtifacts.get(artifactIdentity(artifact));
return !priorArtifact || !areArtifactsEqual(priorArtifact, artifact);
});
return changedArtifacts.map((artifact, index) => ({
kind: "artifact-update",
taskId: next.id,
contextId: next.contextId,
lastChunk: isTerminalTaskState(next.status.state) && index === changedArtifacts.length - 1,
artifact: structuredClone(artifact)
}));
}
async function handleMessageSend({
requestId,
params,
taskStore,
pushNotificationStore,
pushNotificationSender,
agent,
agentId,
logger,
requestContext
}) {
validateMessageSendParams(params);
const { message, metadata } = params;
const { contextId } = message;
const taskId = message.taskId || crypto.randomUUID();
const {
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender
} = resolvePushNotificationPair({
pushNotificationStore,
pushNotificationSender
});
let currentData = await loadOrCreateTask({
taskId,
taskStore,
agentId,
message,
contextId,
metadata
});
if (params.configuration?.pushNotificationConfig) {
resolvedPushNotificationStore.set({
agentId,
config: createTaskPushNotificationConfig(taskId, params.configuration.pushNotificationConfig)
});
}
const context = createTaskContext({
task: currentData,
userMessage: message,
history: currentData.history || [],
activeCancellations: taskStore.activeCancellations
});
try {
const resourceId = metadata?.resourceId ?? message.metadata?.resourceId ?? agentId;
const result = await agent.generate([convertToCoreMessage(message)], {
runId: taskId,
requestContext,
...contextId ? { threadId: contextId, resourceId } : {}
});
const artifactUpdate = createArtifactUpdate({
taskId: currentData.id,
contextId: currentData.contextId,
text: result.text,
data: result.object
});
if (artifactUpdate) {
currentData = applyUpdateToTask(currentData, artifactUpdate);
}
currentData = applyUpdateToTask(currentData, {
state: "completed",
message: void 0
});
currentData.metadata = {
...currentData.metadata,
execution: {
toolCalls: result.toolCalls,
toolResults: result.toolResults,
usage: result.usage,
finishReason: result.finishReason
}
};
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
previousTask: context.task,
nextTask: currentData,
agentId,
logger
});
context.task = currentData;
} catch (handlerError) {
const failureStatusUpdate = {
state: "failed",
message: {
messageId: crypto.randomUUID(),
role: "agent",
parts: [
{
kind: "text",
text: `Handler failed: ${handlerError instanceof Error ? handlerError.message : String(handlerError)}`
}
],
kind: "message"
}
};
currentData = applyUpdateToTask(currentData, failureStatusUpdate);
try {
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
previousTask: context.task,
nextTask: currentData,
agentId,
logger
});
} catch (saveError) {
logger?.error(`Failed to save task ${currentData.id} after handler error:`, saveError?.message);
}
return normalizeError(handlerError, requestId, currentData.id, logger);
}
return createSuccessResponse(requestId, currentData);
}
async function handleTaskGet({
requestId,
taskStore,
agentId,
taskId
}) {
const task = await taskStore.load({ agentId, taskId });
if (!task) {
throw a2a.MastraA2AError.taskNotFound(taskId);
}
return createSuccessResponse(requestId, task);
}
async function loadTaskOrThrow({
taskStore,
agentId,
taskId
}) {
const task = await taskStore.load({ agentId, taskId });
if (!task) {
throw a2a.MastraA2AError.taskNotFound(taskId);
}
return task;
}
async function handleSetTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore,
agentId,
params
}) {
await loadTaskOrThrow({
taskStore,
agentId,
taskId: params.taskId
});
const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({
pushNotificationStore
});
const config = resolvedPushNotificationStore.set({
agentId,
config: createTaskPushNotificationConfig(params.taskId, params.pushNotificationConfig)
});
return createSuccessResponse(requestId, config);
}
async function handleGetTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore,
agentId,
params
}) {
await loadTaskOrThrow({
taskStore,
agentId,
taskId: params.id
});
const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({
pushNotificationStore
});
const config = resolvedPushNotificationStore.get({
agentId,
params
});
if (!config) {
throw a2a.MastraA2AError.invalidParams(
`Push notification config not found: ${params.pushNotificationConfigId ?? params.id}`
);
}
return createSuccessResponse(requestId, config);
}
async function handleListTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore,
agentId,
params
}) {
await loadTaskOrThrow({
taskStore,
agentId,
taskId: params.id
});
const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({
pushNotificationStore
});
const configs = resolvedPushNotificationStore.list({
agentId,
params
});
return createSuccessResponse(requestId, configs);
}
async function handleDeleteTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore,
agentId,
params
}) {
await loadTaskOrThrow({
taskStore,
agentId,
taskId: params.id
});
const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({
pushNotificationStore
});
const deleted = resolvedPushNotificationStore.delete({
agentId,
params
});
if (!deleted) {
throw a2a.MastraA2AError.invalidParams(`Push notification config not found: ${params.pushNotificationConfigId}`);
}
return createSuccessResponse(requestId, null);
}
async function* handleMessageStream({
requestId,
params,
taskStore,
pushNotificationStore,
pushNotificationSender,
agent,
agentId,
logger,
requestContext
}) {
validateMessageSendParams(params);
const { message, metadata } = params;
const { contextId } = message;
const taskId = message.taskId || crypto.randomUUID();
const {
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender
} = resolvePushNotificationPair({
pushNotificationStore,
pushNotificationSender
});
let currentData = await loadOrCreateTask({
taskId,
taskStore,
agentId,
message,
contextId,
metadata
});
if (params.configuration?.pushNotificationConfig) {
resolvedPushNotificationStore.set({
agentId,
config: createTaskPushNotificationConfig(taskId, params.configuration.pushNotificationConfig)
});
}
currentData = applyUpdateToTask(currentData, {
state: "working",
message: {
messageId: crypto.randomUUID(),
kind: "message",
role: "agent",
parts: [{ kind: "text", text: "Generating response..." }]
}
});
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
nextTask: currentData,
agentId,
logger
});
yield createSuccessResponse(requestId, currentData);
try {
const resourceId = metadata?.resourceId ?? message.metadata?.resourceId ?? agentId;
const result = await agent.stream([convertToCoreMessage(message)], {
runId: taskId,
requestContext,
...contextId ? { threadId: contextId, resourceId } : {}
});
let sawTextArtifact = false;
let pendingTextChunk;
let structuredData;
for await (const chunk of result.fullStream) {
const textDelta = extractFullStreamTextDelta(chunk);
if (textDelta !== null) {
if (!pendingTextChunk) {
pendingTextChunk = textDelta;
continue;
}
const textUpdate = createTextChunkArtifactUpdate({
taskId: currentData.id,
contextId: currentData.contextId,
text: pendingTextChunk,
append: sawTextArtifact,
lastChunk: false
});
currentData = applyUpdateToTask(currentData, textUpdate);
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
nextTask: currentData,
agentId,
logger
});
yield createSuccessResponse(requestId, textUpdate);
sawTextArtifact = true;
pendingTextChunk = textDelta;
continue;
}
const finalStructuredObject = extractFinalStructuredObject(chunk);
if (finalStructuredObject) {
structuredData = finalStructuredObject;
}
}
structuredData ??= await result.object;
if (!pendingTextChunk && !sawTextArtifact) {
const finalText = await result.text;
if (finalText) {
pendingTextChunk = finalText;
}
}
if (pendingTextChunk) {
const textUpdate = createTextChunkArtifactUpdate({
taskId: currentData.id,
contextId: currentData.contextId,
text: pendingTextChunk,
append: sawTextArtifact,
lastChunk: !structuredData
});
currentData = applyUpdateToTask(currentData, textUpdate);
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
nextTask: currentData,
agentId,
logger
});
yield createSuccessResponse(requestId, textUpdate);
sawTextArtifact = true;
pendingTextChunk = void 0;
}
if (structuredData) {
const dataUpdate = createDataArtifactUpdate({
taskId: currentData.id,
contextId: currentData.contextId,
data: structuredData,
lastChunk: true
});
currentData = applyUpdateToTask(currentData, dataUpdate);
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
nextTask: currentData,
agentId,
logger
});
yield createSuccessResponse(requestId, dataUpdate);
}
const previousTask = currentData;
const completedTask = applyUpdateToTask(currentData, {
state: "completed",
message: void 0
});
completedTask.metadata = {
...completedTask.metadata,
execution: {
toolCalls: await result.toolCalls,
toolResults: await result.toolResults,
usage: await result.usage,
finishReason: await result.finishReason
}
};
currentData = completedTask;
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
previousTask,
nextTask: currentData,
agentId,
logger
});
} catch (handlerError) {
const previousTask = currentData;
currentData = applyUpdateToTask(currentData, {
state: "failed",
message: {
messageId: crypto.randomUUID(),
role: "agent",
parts: [
{
kind: "text",
text: `Handler failed: ${handlerError instanceof Error ? handlerError.message : String(handlerError)}`
}
],
kind: "message"
}
});
try {
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
previousTask,
nextTask: currentData,
agentId,
logger
});
} catch (saveError) {
logger?.error(`Failed to save task ${currentData.id} after handler error:`, saveError?.message);
}
}
yield createSuccessResponse(requestId, {
kind: "status-update",
taskId: currentData.id,
contextId: currentData.contextId,
status: currentData.status,
final: true
});
}
async function* handleTaskResubscribe({
requestId,
taskStore,
agentId,
taskId,
abortSignal
}) {
let snapshot = taskStore.loadWithVersion({ agentId, taskId });
if (!snapshot) {
throw a2a.MastraA2AError.taskNotFound(taskId);
}
yield createSuccessResponse(requestId, snapshot.task);
if (isTerminalTaskState(snapshot.task.status.state)) {
return;
}
while (true) {
const { task, version } = snapshot;
const nextUpdate = await taskStore.waitForNextUpdate({
agentId,
taskId,
afterVersion: version,
signal: abortSignal
});
for (const artifactUpdate of getTaskArtifactUpdates({ previous: task, next: nextUpdate.task })) {
yield createSuccessResponse(requestId, artifactUpdate);
}
if (didTaskStatusChange(task, nextUpdate.task)) {
yield createSuccessResponse(requestId, {
kind: "status-update",
taskId: nextUpdate.task.id,
contextId: nextUpdate.task.contextId,
status: nextUpdate.task.status,
final: isTerminalTaskState(nextUpdate.task.status.state)
});
}
if (isTerminalTaskState(nextUpdate.task.status.state)) {
return;
}
snapshot = nextUpdate;
}
}
function getTaskIdFromParams(params) {
if (!params || typeof params !== "object") {
return void 0;
}
if ("id" in params && typeof params.id === "string") {
return params.id;
}
if ("taskId" in params && typeof params.taskId === "string") {
return params.taskId;
}
if ("message" in params && params.message && typeof params.message === "object" && "taskId" in params.message) {
return typeof params.message.taskId === "string" ? params.message.taskId : void 0;
}
return void 0;
}
function isAsyncIterable(value) {
return !!value && typeof value === "object" && Symbol.asyncIterator in value;
}
function createA2AJsonResponse(payload) {
return Response.json(payload);
}
function createA2ASSEResponse(payload) {
const encoder = new TextEncoder();
const iterable = isAsyncIterable(payload) ? payload : (async function* () {
yield payload;
})();
const stream = new ReadableStream({
async start(controller) {
try {
for await (const chunk of iterable) {
controller.enqueue(encoder.encode(`data: ${JSON.stringify(chunk)}
`));
}
} catch (error) {
controller.error(error);
return;
}
controller.close();
}
});
return new Response(stream, {
headers: {
"Content-Type": "text/event-stream; charset=utf-8",
"Cache-Control": "no-cache",
Connection: "keep-alive",
"X-Accel-Buffering": "no"
}
});
}
async function handleTaskCancel({
requestId,
taskStore,
pushNotificationSender,
agentId,
taskId,
logger
}) {
let data = await taskStore.load({
agentId,
taskId
});
if (!data) {
throw a2a.MastraA2AError.taskNotFound(taskId);
}
const finalStates = ["completed", "failed", "canceled"];
if (finalStates.includes(data.status.state)) {
logger?.info(`Task ${taskId} already in final state ${data.status.state}, cannot cancel.`);
return createSuccessResponse(requestId, data);
}
taskStore.activeCancellations.add(taskId);
const cancelUpdate = {
state: "canceled",
message: {
role: "agent",
parts: [{ kind: "text", text: "Task cancelled by request." }],
kind: "message",
messageId: crypto.randomUUID()
}
};
const previousTask = data;
data = applyUpdateToTask(data, cancelUpdate);
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvePushNotificationPair({ pushNotificationSender }).pushNotificationSender,
previousTask,
nextTask: data,
agentId,
logger
});
taskStore.activeCancellations.delete(taskId);
return createSuccessResponse(requestId, data);
}
async function getAgentExecutionHandler({
requestId,
mastra,
agentId,
requestContext,
method,
params,
taskStore,
pushNotificationStore,
pushNotificationSender,
logger,
abortSignal
}) {
const agent = await chunkBPREBJ3Z_cjs.getAgentFromSystem({ mastra, agentId });
const {
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender
} = resolvePushNotificationPair({
pushNotificationStore,
pushNotificationSender
});
let taskId;
try {
taskId = getTaskIdFromParams(params);
switch (method) {
case "message/send": {
const result = await handleMessageSend({
requestId,
params,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender,
agent,
agentId,
logger,
requestContext
});
return result;
}
case "message/stream": {
const result = await handleMessageStream({
requestId,
taskStore,
params,
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender,
agent,
agentId,
logger,
requestContext
});
return result;
}
case "tasks/get": {
const result = await handleTaskGet({
requestId,
taskStore,
agentId,
taskId: taskId || "No task ID provided"
});
return result;
}
case "tasks/cancel": {
const result = await handleTaskCancel({
requestId,
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
agentId,
taskId: taskId || "No task ID provided",
logger
});
return result;
}
case "tasks/resubscribe":
return await handleTaskResubscribe({
requestId,
taskStore,
agentId,
taskId: taskId || "No task ID provided",
abortSignal
});
case "tasks/pushNotificationConfig/set":
return await handleSetTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
agentId,
params
});
case "tasks/pushNotificationConfig/get":
return await handleGetTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
agentId,
params
});
case "tasks/pushNotificationConfig/list":
return await handleListTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
agentId,
params
});
case "tasks/pushNotificationConfig/delete":
return await handleDeleteTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
agentId,
params
});
case "agent/getAuthenticatedExtendedCard":
throw a2a.MastraA2AError.extendedAgentCardNotConfigured();
default:
throw a2a.MastraA2AError.methodNotFound(method);
}
} catch (error) {
if (error instanceof a2a.MastraA2AError && taskId && !error.taskId) {
error.taskId = taskId;
}
return normalizeError(error, requestId, taskId, logger);
}
}
var GET_AGENT_CARD_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/.well-known/:agentId/agent-card.json",
responseType: "json",
pathParamSchema: chunkWE6BWC6H_cjs.a2aAgentIdPathParams,
responseSchema: chunkWE6BWC6H_cjs.agentCardResponseSchema,
summary: "Get agent card",
description: "Returns the agent card information for A2A protocol discovery",
tags: ["Agent-to-Agent"],
requiresAuth: true,
handler: async (ctx) => {
const executionUrl = getA2AExecutionUrl({
agentId: ctx.agentId,
request: ctx.request,
routePrefix: ctx.routePrefix
});
return getAgentCardByIdHandler({
mastra: ctx.mastra,
requestContext: ctx.requestContext,
agentId: ctx.agentId,
executionUrl,
pushNotifications: true
});
}
});
var AGENT_EXECUTION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/a2a/:agentId",
responseType: "datastream-response",
pathParamSchema: chunkWE6BWC6H_cjs.a2aAgentIdPathParams,
bodySchema: chunkWE6BWC6H_cjs.agentExecutionBodySchema,
responseSchema: chunkWE6BWC6H_cjs.agentExecutionResponseSchema,
summary: "Execute agent",
description: "Executes an agent action via JSON-RPC 2.0 over A2A protocol",
tags: ["Agent-to-Agent"],
requiresAuth: true,
handler: async ({ mastra, agentId, requestContext, taskStore, abortSignal, ...bodyParams }) => {
const { id: requestId, method } = bodyParams;
const params = "params" in bodyParams ? bodyParams.params : void 0;
const result = await getAgentExecutionHandler({
requestId,
mastra,
agentId,
requestContext,
method,
params,
taskStore,
abortSignal
});
if (method === "message/stream" || method === "tasks/resubscribe") {
return createA2ASSEResponse(result);
}
return createA2AJsonResponse(result);
}
});
exports.AGENT_EXECUTION_ROUTE = AGENT_EXECUTION_ROUTE;
exports.GET_AGENT_CARD_ROUTE = GET_AGENT_CARD_ROUTE;
exports.a2a_exports = a2a_exports;
exports.getAgentCardByIdHandler = getAgentCardByIdHandler;
exports.getAgentExecutionHandler = getAgentExecutionHandler;
exports.handleDeleteTaskPushNotificationConfig = handleDeleteTaskPushNotificationConfig;
exports.handleGetTaskPushNotificationConfig = handleGetTaskPushNotificationConfig;
exports.handleListTaskPushNotificationConfig = handleListTaskPushNotificationConfig;
exports.handleMessageSend = handleMessageSend;
exports.handleMessageStream = handleMessageStream;
exports.handleSetTaskPushNotificationConfig = handleSetTaskPushNotificationConfig;
exports.handleTaskCancel = handleTaskCancel;
exports.handleTaskGet = handleTaskGet;
exports.handleTaskResubscribe = handleTaskResubscribe;
//# sourceMappingURL=chunk-VUQNCTOR.cjs.map
//# sourceMappingURL=chunk-VUQNCTOR.cjs.map

Sorry, the diff of this file is too big to display

'use strict';
var chunk33C4F4LV_cjs = require('./chunk-33C4F4LV.cjs');
var chunkBPREBJ3Z_cjs = require('./chunk-BPREBJ3Z.cjs');
var chunk3JVOIOO6_cjs = require('./chunk-3JVOIOO6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
// src/server/handlers/scores.ts
var scores_exports = {};
chunkO7I5CWRX_cjs.__export(scores_exports, {
GET_SCORER_ROUTE: () => GET_SCORER_ROUTE,
LIST_SCORERS_ROUTE: () => LIST_SCORERS_ROUTE,
LIST_SCORES_BY_ENTITY_ID_ROUTE: () => LIST_SCORES_BY_ENTITY_ID_ROUTE,
LIST_SCORES_BY_RUN_ID_ROUTE: () => LIST_SCORES_BY_RUN_ID_ROUTE,
LIST_SCORES_BY_SCORER_ID_ROUTE: () => LIST_SCORES_BY_SCORER_ID_ROUTE,
SAVE_SCORE_ROUTE: () => SAVE_SCORE_ROUTE
});
async function listScorersFromSystem({
mastra,
requestContext
}) {
const agents = mastra.listAgents();
const workflows = mastra.listWorkflows();
const scorersMap = /* @__PURE__ */ new Map();
const processAgentScorers = async (agent) => {
const scorers = await agent.listScorers({
requestContext
}) || {};
if (Object.keys(scorers).length > 0) {
for (const [_scorerId, scorer] of Object.entries(scorers)) {
const scorerId = scorer.scorer.id;
if (scorersMap.has(scorerId)) {
scorersMap.get(scorerId)?.agentIds.push(agent.id);
scorersMap.get(scorerId)?.agentNames.push(agent.name);
} else {
scorersMap.set(scorerId, {
workflowIds: [],
...scorer,
agentNames: [agent.name],
agentIds: [agent.id],
isRegistered: false,
source: scorer.scorer.source ?? "code"
});
}
}
}
};
for (const [_, agent] of Object.entries(agents)) {
await processAgentScorers(agent);
}
try {
const editor = mastra.getEditor();
const storedAgentsResult = await editor?.agent.list();
if (storedAgentsResult?.agents) {
for (const storedAgentConfig of storedAgentsResult.agents) {
try {
const agent = await editor?.agent.getById(storedAgentConfig.id);
if (agent) {
await processAgentScorers(agent);
}
} catch {
}
}
}
} catch {
}
try {
const editor = mastra.getEditor();
const storedScorersResult = await editor?.scorer.list();
if (storedScorersResult?.scorerDefinitions) {
for (const storedScorerConfig of storedScorersResult.scorerDefinitions) {
try {
await editor?.scorer.getById(storedScorerConfig.id);
} catch {
}
}
}
} catch {
}
for (const [workflowId, workflow] of Object.entries(workflows)) {
const scorers = await workflow.listScorers({
requestContext
}) || {};
if (Object.keys(scorers).length > 0) {
for (const [_scorerId, scorer] of Object.entries(scorers)) {
const scorerName = scorer.scorer.name;
if (scorersMap.has(scorerName)) {
scorersMap.get(scorerName)?.workflowIds.push(workflowId);
} else {
scorersMap.set(scorerName, {
agentIds: [],
agentNames: [],
...scorer,
workflowIds: [workflowId],
isRegistered: false,
source: scorer.scorer.source ?? "code"
});
}
}
}
}
const registeredScorers = await mastra.listScorers();
for (const [_scorerId, scorer] of Object.entries(registeredScorers || {})) {
const scorerId = scorer.id;
if (scorersMap.has(scorerId)) {
scorersMap.get(scorerId).isRegistered = true;
} else {
scorersMap.set(scorerId, {
scorer,
agentIds: [],
agentNames: [],
workflowIds: [],
isRegistered: true,
source: scorer.source ?? "code"
});
}
}
return Object.fromEntries(scorersMap.entries());
}
function getTraceDetails(traceIdWithSpanId) {
if (!traceIdWithSpanId) {
return {};
}
const [traceId, spanId] = traceIdWithSpanId.split("-");
return {
...traceId ? { traceId } : {},
...spanId ? { spanId } : {}
};
}
var LIST_SCORERS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/scores/scorers",
responseType: "json",
responseSchema: chunk33C4F4LV_cjs.listScorersResponseSchema,
summary: "List all scorers",
description: "Returns a list of all registered scorers with their configuration and associated agents and workflows",
tags: ["Scoring"],
requiresAuth: true,
handler: (async ({ mastra, requestContext }) => {
const scorers = await listScorersFromSystem({
mastra,
requestContext
});
return scorers;
})
});
var GET_SCORER_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/scores/scorers/:scorerId",
responseType: "json",
pathParamSchema: chunk33C4F4LV_cjs.scorerIdPathParams,
responseSchema: chunk33C4F4LV_cjs.scorerEntrySchema.nullable(),
summary: "Get scorer by ID",
description: "Returns details for a specific scorer including its configuration and associations",
tags: ["Scoring"],
requiresAuth: true,
handler: (async ({ mastra, scorerId, requestContext }) => {
const scorers = await listScorersFromSystem({
mastra,
requestContext
});
const scorer = scorers[scorerId];
if (!scorer) {
return null;
}
return scorer;
})
});
var LIST_SCORES_BY_RUN_ID_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/scores/run/:runId",
responseType: "json",
pathParamSchema: chunk3JVOIOO6_cjs.runIdSchema,
queryParamSchema: chunk33C4F4LV_cjs.listScoresByRunIdQuerySchema,
responseSchema: chunk33C4F4LV_cjs.scoresWithPaginationResponseSchema,
summary: "List scores by run ID",
description: "Returns all scores for a specific execution run",
tags: ["Scoring"],
requiresAuth: true,
handler: async ({ mastra, runId, ...params }) => {
try {
const { page, perPage } = params;
const pagination = {
page: page ?? 0,
perPage: perPage ?? 10
};
const scores = await mastra.getStorage()?.getStore("scores");
const scoreResults = await scores?.listScoresByRunId?.({
runId,
pagination
}) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };
return {
pagination: scoreResults.pagination,
scores: scoreResults.scores.map((score) => ({ ...score, ...getTraceDetails(score.traceId) }))
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting scores by run id");
}
}
});
var LIST_SCORES_BY_SCORER_ID_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/scores/scorer/:scorerId",
responseType: "json",
pathParamSchema: chunk33C4F4LV_cjs.scorerIdPathParams,
queryParamSchema: chunk33C4F4LV_cjs.listScoresByScorerIdQuerySchema,
responseSchema: chunk33C4F4LV_cjs.scoresWithPaginationResponseSchema,
summary: "List scores by scorer ID",
description: "Returns all scores generated by a specific scorer",
tags: ["Scoring"],
requiresAuth: true,
handler: async ({ mastra, scorerId, ...params }) => {
try {
const { page, perPage, entityId, entityType } = params;
const filters = Object.fromEntries(Object.entries({ entityId, entityType }).filter(([_, v]) => v !== void 0));
const scores = await mastra.getStorage()?.getStore("scores");
const scoreResults = await scores?.listScoresByScorerId?.({
scorerId,
pagination: { page: page ?? 0, perPage: perPage ?? 10 },
...filters
}) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };
return {
pagination: scoreResults.pagination,
scores: scoreResults.scores.map((score) => ({ ...score, ...getTraceDetails(score.traceId) }))
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting scores by scorer id");
}
}
});
var LIST_SCORES_BY_ENTITY_ID_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/scores/entity/:entityType/:entityId",
responseType: "json",
pathParamSchema: chunk33C4F4LV_cjs.entityPathParams,
queryParamSchema: chunk33C4F4LV_cjs.listScoresByEntityIdQuerySchema,
responseSchema: chunk33C4F4LV_cjs.scoresWithPaginationResponseSchema,
summary: "List scores by entity ID",
description: "Returns all scores for a specific entity (agent or workflow)",
tags: ["Scoring"],
requiresAuth: true,
handler: async ({ mastra, entityId, entityType, ...params }) => {
try {
const { page, perPage } = params;
let entityIdToUse = entityId;
if (entityType === "AGENT") {
const agent = await chunkBPREBJ3Z_cjs.getAgentFromSystem({ mastra, agentId: entityId });
entityIdToUse = agent.id;
} else if (entityType === "WORKFLOW") {
const workflow = mastra.getWorkflowById(entityId);
entityIdToUse = workflow.id;
}
const pagination = {
page: page ?? 0,
perPage: perPage ?? 10
};
const scoresStore = await mastra.getStorage()?.getStore("scores");
const scoreResults = await scoresStore?.listScoresByEntityId?.({
entityId: entityIdToUse,
entityType,
pagination
}) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };
return {
pagination: scoreResults.pagination,
scores: scoreResults.scores.map((score) => ({ ...score, ...getTraceDetails(score.traceId) }))
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting scores by entity id");
}
}
});
var SAVE_SCORE_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/scores",
responseType: "json",
bodySchema: chunk33C4F4LV_cjs.saveScoreBodySchema,
responseSchema: chunk33C4F4LV_cjs.saveScoreResponseSchema,
summary: "Save score",
description: "Saves a new score record to storage",
tags: ["Scoring"],
requiresAuth: true,
handler: async ({ mastra, ...params }) => {
try {
const { score } = params;
const scoresStore = await mastra.getStorage()?.getStore("scores");
const result = await scoresStore?.saveScore?.(score);
if (!result) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage not configured" });
}
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error saving score");
}
}
});
exports.GET_SCORER_ROUTE = GET_SCORER_ROUTE;
exports.LIST_SCORERS_ROUTE = LIST_SCORERS_ROUTE;
exports.LIST_SCORES_BY_ENTITY_ID_ROUTE = LIST_SCORES_BY_ENTITY_ID_ROUTE;
exports.LIST_SCORES_BY_RUN_ID_ROUTE = LIST_SCORES_BY_RUN_ID_ROUTE;
exports.LIST_SCORES_BY_SCORER_ID_ROUTE = LIST_SCORES_BY_SCORER_ID_ROUTE;
exports.SAVE_SCORE_ROUTE = SAVE_SCORE_ROUTE;
exports.scores_exports = scores_exports;
//# sourceMappingURL=chunk-Y4O5EGAC.cjs.map
//# sourceMappingURL=chunk-Y4O5EGAC.cjs.map
{"version":3,"sources":["../src/server/handlers/scores.ts"],"names":["__export","createRoute","listScorersResponseSchema","scorerIdPathParams","scorerEntrySchema","runIdSchema","listScoresByRunIdQuerySchema","scoresWithPaginationResponseSchema","handleError","listScoresByScorerIdQuerySchema","entityPathParams","listScoresByEntityIdQuerySchema","getAgentFromSystem","saveScoreBodySchema","saveScoreResponseSchema","HTTPException"],"mappings":";;;;;;;;;;;AAAA,IAAA,cAAA,GAAA;AAAAA,0BAAA,CAAA,cAAA,EAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,8BAAA,EAAA,MAAA,8BAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,8BAAA,EAAA,MAAA,8BAAA;AAAA,EAAA,gBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAsBA,eAAe,qBAAA,CAAsB;AAAA,EACnC,MAAA;AAAA,EACA;AACF,CAAA,EAEG;AACD,EAAA,MAAM,MAAA,GAAS,OAAO,UAAA,EAAW;AACjC,EAAA,MAAM,SAAA,GAAY,OAAO,aAAA,EAAc;AAEvC,EAAA,MAAM,UAAA,uBAAiB,GAAA,EASrB;AAGF,EAAA,MAAM,mBAAA,GAAsB,OAAO,KAAA,KAI7B;AACJ,IAAA,MAAM,OAAA,GACH,MAAM,KAAA,CAAM,WAAA,CAAY;AAAA,MACvB;AAAA,KACD,KAAM,EAAC;AAEV,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,SAAS,CAAA,EAAG;AACnC,MAAA,KAAA,MAAW,CAAC,SAAA,EAAW,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AACzD,QAAA,MAAM,QAAA,GAAW,OAAO,MAAA,CAAO,EAAA;AAC/B,QAAA,IAAI,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC5B,UAAA,UAAA,CAAW,IAAI,QAAQ,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,MAAM,EAAE,CAAA;AAChD,UAAA,UAAA,CAAW,IAAI,QAAQ,CAAA,EAAG,UAAA,CAAW,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,QACtD,CAAA,MAAO;AACL,UAAA,UAAA,CAAW,IAAI,QAAA,EAAU;AAAA,YACvB,aAAa,EAAC;AAAA,YACd,GAAG,MAAA;AAAA,YACH,UAAA,EAAY,CAAC,KAAA,CAAM,IAAI,CAAA;AAAA,YACvB,QAAA,EAAU,CAAC,KAAA,CAAM,EAAE,CAAA;AAAA,YACnB,YAAA,EAAc,KAAA;AAAA,YACd,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,MAAA,IAAU;AAAA,WACjC,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AAGA,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC/C,IAAA,MAAM,oBAAoB,KAAK,CAAA;AAAA,EACjC;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,IAAA,MAAM,kBAAA,GAAqB,MAAM,MAAA,EAAQ,KAAA,CAAM,IAAA,EAAK;AACpD,IAAA,IAAI,oBAAoB,MAAA,EAAQ;AAC9B,MAAA,KAAA,MAAW,iBAAA,IAAqB,mBAAmB,MAAA,EAAQ;AACzD,QAAA,IAAI;AACF,UAAA,MAAM,QAAQ,MAAM,MAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,kBAAkB,EAAE,CAAA;AAC9D,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,MAAM,oBAAoB,KAAK,CAAA;AAAA,UACjC;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,IAAA,MAAM,mBAAA,GAAsB,MAAM,MAAA,EAAQ,MAAA,CAAO,IAAA,EAAK;AACtD,IAAA,IAAI,qBAAqB,iBAAA,EAAmB;AAC1C,MAAA,KAAA,MAAW,kBAAA,IAAsB,oBAAoB,iBAAA,EAAmB;AACtE,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,EAAQ,MAAA,CAAO,OAAA,CAAQ,kBAAA,CAAmB,EAAE,CAAA;AAAA,QACpD,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,KAAA,MAAW,CAAC,UAAA,EAAY,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC9D,IAAA,MAAM,OAAA,GACH,MAAM,QAAA,CAAS,WAAA,CAAY;AAAA,MAC1B;AAAA,KACD,KAAM,EAAC;AAEV,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,SAAS,CAAA,EAAG;AACnC,MAAA,KAAA,MAAW,CAAC,SAAA,EAAW,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AACzD,QAAA,MAAM,UAAA,GAAa,OAAO,MAAA,CAAO,IAAA;AACjC,QAAA,IAAI,UAAA,CAAW,GAAA,CAAI,UAAU,CAAA,EAAG;AAC9B,UAAA,UAAA,CAAW,GAAA,CAAI,UAAU,CAAA,EAAG,WAAA,CAAY,KAAK,UAAU,CAAA;AAAA,QACzD,CAAA,MAAO;AACL,UAAA,UAAA,CAAW,IAAI,UAAA,EAAY;AAAA,YACzB,UAAU,EAAC;AAAA,YACX,YAAY,EAAC;AAAA,YACb,GAAG,MAAA;AAAA,YACH,WAAA,EAAa,CAAC,UAAU,CAAA;AAAA,YACxB,YAAA,EAAc,KAAA;AAAA,YACd,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,MAAA,IAAU;AAAA,WACjC,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,iBAAA,GAAoB,MAAM,MAAA,CAAO,WAAA,EAAY;AACnD,EAAA,KAAA,MAAW,CAAC,WAAW,MAAM,CAAA,IAAK,OAAO,OAAA,CAAQ,iBAAA,IAAqB,EAAE,CAAA,EAAG;AACzE,IAAA,MAAM,WAAW,MAAA,CAAO,EAAA;AACxB,IAAA,IAAI,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC5B,MAAA,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA,CAAG,YAAA,GAAe,IAAA;AAAA,IAC3C,CAAA,MAAO;AACL,MAAA,UAAA,CAAW,IAAI,QAAA,EAAU;AAAA,QACvB,MAAA;AAAA,QACA,UAAU,EAAC;AAAA,QACX,YAAY,EAAC;AAAA,QACb,aAAa,EAAC;AAAA,QACd,YAAA,EAAc,IAAA;AAAA,QACd,MAAA,EAAQ,OAAO,MAAA,IAAU;AAAA,OAC1B,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,MAAA,CAAO,WAAA,CAAY,UAAA,CAAW,OAAA,EAAS,CAAA;AAChD;AAGA,SAAS,gBAAgB,iBAAA,EAA4B;AACnD,EAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,CAAC,OAAA,EAAS,MAAM,CAAA,GAAI,iBAAA,CAAkB,MAAM,GAAG,CAAA;AAErD,EAAA,OAAO;AAAA,IACL,GAAI,OAAA,GAAU,EAAE,OAAA,KAAY,EAAC;AAAA,IAC7B,GAAI,MAAA,GAAS,EAAE,MAAA,KAAW;AAAC,GAC7B;AACF;AAMO,IAAM,qBAAqBC,6BAAA,CAAY;AAAA,EAC5C,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,iBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,cAAA,EAAgBC,2CAAA;AAAA,EAChB,OAAA,EAAS,kBAAA;AAAA,EACT,WAAA,EAAa,uGAAA;AAAA,EACb,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,EAChB,YAAA,EAAc,IAAA;AAAA,EACd,OAAA,GAAU,OAAO,EAAE,MAAA,EAAQ,gBAAe,KAAW;AACnD,IAAA,MAAM,OAAA,GAAU,MAAM,qBAAA,CAAsB;AAAA,MAC1C,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AACF,CAAC;AAEM,IAAM,mBAAmBD,6BAAA,CAAY;AAAA,EAC1C,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,2BAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiBE,oCAAA;AAAA,EACjB,cAAA,EAAgBC,oCAAkB,QAAA,EAAS;AAAA,EAC3C,OAAA,EAAS,kBAAA;AAAA,EACT,WAAA,EAAa,oFAAA;AAAA,EACb,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,EAChB,YAAA,EAAc,IAAA;AAAA,EACd,UAAU,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,gBAAe,KAAW;AAC7D,IAAA,MAAM,OAAA,GAAU,MAAM,qBAAA,CAAsB;AAAA,MAC1C,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,QAAQ,QAAQ,CAAA;AAE/B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF,CAAC;AAEM,IAAM,8BAA8BH,6BAAA,CAAY;AAAA,EACrD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,oBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiBI,6BAAA;AAAA,EACjB,gBAAA,EAAkBC,8CAAA;AAAA,EAClB,cAAA,EAAgBC,oDAAA;AAAA,EAChB,OAAA,EAAS,uBAAA;AAAA,EACT,WAAA,EAAa,iDAAA;AAAA,EACb,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,EAChB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO,EAAE,QAAQ,KAAA,EAAO,GAAG,QAAO,KAAM;AAC/C,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,MAAA;AAC1B,MAAA,MAAM,UAAA,GAAgC;AAAA,QACpC,MAAM,IAAA,IAAQ,CAAA;AAAA,QACd,SAAS,OAAA,IAAW;AAAA,OACtB;AACA,MAAA,MAAM,SAAS,MAAM,MAAA,CAAO,UAAA,EAAW,EAAG,SAAS,QAAQ,CAAA;AAC3D,MAAA,MAAM,YAAA,GAAgB,MAAM,MAAA,EAAQ,iBAAA,GAAoB;AAAA,QACtD,KAAA;AAAA,QACA;AAAA,OACD,CAAA,IAAM,EAAE,UAAA,EAAY,EAAE,OAAO,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,OAAA,EAAS,GAAG,OAAA,EAAS,KAAA,EAAM,EAAG,MAAA,EAAQ,EAAC,EAAE;AACnF,MAAA,OAAO;AAAA,QACL,YAAY,YAAA,CAAa,UAAA;AAAA,QACzB,MAAA,EAAQ,YAAA,CAAa,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAyB,EAAE,GAAG,KAAA,EAAO,GAAG,eAAA,CAAgB,KAAA,CAAM,OAAO,GAAE,CAAE;AAAA,OAC5G;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAOC,6BAAA,CAAY,OAAO,gCAAgC,CAAA;AAAA,IAC5D;AAAA,EACF;AACF,CAAC;AAEM,IAAM,iCAAiCP,6BAAA,CAAY;AAAA,EACxD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,0BAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiBE,oCAAA;AAAA,EACjB,gBAAA,EAAkBM,iDAAA;AAAA,EAClB,cAAA,EAAgBF,oDAAA;AAAA,EAChB,OAAA,EAAS,0BAAA;AAAA,EACT,WAAA,EAAa,mDAAA;AAAA,EACb,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,EAChB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO,EAAE,QAAQ,QAAA,EAAU,GAAG,QAAO,KAAM;AAClD,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,YAAW,GAAI,MAAA;AAChD,MAAA,MAAM,UAAU,MAAA,CAAO,WAAA,CAAY,OAAO,OAAA,CAAQ,EAAE,UAAU,UAAA,EAAY,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,KAAM,MAAS,CAAC,CAAA;AAC/G,MAAA,MAAM,SAAS,MAAM,MAAA,CAAO,UAAA,EAAW,EAAG,SAAS,QAAQ,CAAA;AAC3D,MAAA,MAAM,YAAA,GAAgB,MAAM,MAAA,EAAQ,oBAAA,GAAuB;AAAA,QACzD,QAAA;AAAA,QACA,YAAY,EAAE,IAAA,EAAM,QAAQ,CAAA,EAAG,OAAA,EAAS,WAAW,EAAA,EAAG;AAAA,QACtD,GAAG;AAAA,OACJ,CAAA,IAAM,EAAE,UAAA,EAAY,EAAE,OAAO,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,OAAA,EAAS,GAAG,OAAA,EAAS,KAAA,EAAM,EAAG,MAAA,EAAQ,EAAC,EAAE;AACnF,MAAA,OAAO;AAAA,QACL,YAAY,YAAA,CAAa,UAAA;AAAA,QACzB,MAAA,EAAQ,YAAA,CAAa,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAyB,EAAE,GAAG,KAAA,EAAO,GAAG,eAAA,CAAgB,KAAA,CAAM,OAAO,GAAE,CAAE;AAAA,OAC5G;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAOC,6BAAA,CAAY,OAAO,mCAAmC,CAAA;AAAA,IAC/D;AAAA,EACF;AACF,CAAC;AAEM,IAAM,iCAAiCP,6BAAA,CAAY;AAAA,EACxD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,sCAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiBS,kCAAA;AAAA,EACjB,gBAAA,EAAkBC,iDAAA;AAAA,EAClB,cAAA,EAAgBJ,oDAAA;AAAA,EAChB,OAAA,EAAS,0BAAA;AAAA,EACT,WAAA,EAAa,8DAAA;AAAA,EACb,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,EAChB,YAAA,EAAc,IAAA;AAAA,EACd,OAAA,EAAS,OAAO,EAAE,MAAA,EAAQ,UAAU,UAAA,EAAY,GAAG,QAAO,KAAM;AAC9D,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,MAAA;AAC1B,MAAA,IAAI,aAAA,GAAgB,QAAA;AAEpB,MAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,QAAA,MAAM,QAAQ,MAAMK,oCAAA,CAAmB,EAAE,MAAA,EAAQ,OAAA,EAAS,UAAU,CAAA;AACpE,QAAA,aAAA,GAAgB,KAAA,CAAM,EAAA;AAAA,MACxB,CAAA,MAAA,IAAW,eAAe,UAAA,EAAY;AACpC,QAAA,MAAM,QAAA,GAAW,MAAA,CAAO,eAAA,CAAgB,QAAQ,CAAA;AAChD,QAAA,aAAA,GAAgB,QAAA,CAAS,EAAA;AAAA,MAC3B;AAEA,MAAA,MAAM,UAAA,GAAgC;AAAA,QACpC,MAAM,IAAA,IAAQ,CAAA;AAAA,QACd,SAAS,OAAA,IAAW;AAAA,OACtB;AAEA,MAAA,MAAM,cAAc,MAAM,MAAA,CAAO,UAAA,EAAW,EAAG,SAAS,QAAQ,CAAA;AAChE,MAAA,MAAM,YAAA,GAAgB,MAAM,WAAA,EAAa,oBAAA,GAAuB;AAAA,QAC9D,QAAA,EAAU,aAAA;AAAA,QACV,UAAA;AAAA,QACA;AAAA,OACD,CAAA,IAAM,EAAE,UAAA,EAAY,EAAE,OAAO,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,OAAA,EAAS,GAAG,OAAA,EAAS,KAAA,EAAM,EAAG,MAAA,EAAQ,EAAC,EAAE;AAEnF,MAAA,OAAO;AAAA,QACL,YAAY,YAAA,CAAa,UAAA;AAAA,QACzB,MAAA,EAAQ,YAAA,CAAa,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAyB,EAAE,GAAG,KAAA,EAAO,GAAG,eAAA,CAAgB,KAAA,CAAM,OAAO,GAAE,CAAE;AAAA,OAC5G;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAOJ,6BAAA,CAAY,OAAO,mCAAmC,CAAA;AAAA,IAC/D;AAAA,EACF;AACF,CAAC;AAEM,IAAM,mBAAmBP,6BAAA,CAAY;AAAA,EAC1C,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,SAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,UAAA,EAAYY,qCAAA;AAAA,EACZ,cAAA,EAAgBC,yCAAA;AAAA,EAChB,OAAA,EAAS,YAAA;AAAA,EACT,WAAA,EAAa,qCAAA;AAAA,EACb,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,EAChB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO,EAAE,MAAA,EAAQ,GAAG,QAAO,KAAM;AACxC,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,OAAM,GAAI,MAAA;AAClB,MAAA,MAAM,cAAc,MAAM,MAAA,CAAO,UAAA,EAAW,EAAG,SAAS,QAAQ,CAAA;AAChE,MAAA,MAAM,MAAA,GAAS,MAAM,WAAA,EAAa,SAAA,GAAY,KAAK,CAAA;AACnD,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAIC,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0BAA0B,CAAA;AAAA,MACpE;AACA,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAOP,6BAAA,CAAY,OAAO,oBAAoB,CAAA;AAAA,IAChD;AAAA,EACF;AACF,CAAC","file":"chunk-Y4O5EGAC.cjs","sourcesContent":["import type { MastraScorerEntry, ScoreRowData } from '@mastra/core/evals';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { StoragePagination } from '@mastra/core/storage';\nimport { HTTPException } from '../http-exception';\nimport { runIdSchema } from '../schemas/common';\nimport {\n listScorersResponseSchema,\n scorerEntrySchema,\n scorerIdPathParams,\n entityPathParams,\n listScoresByRunIdQuerySchema,\n listScoresByScorerIdQuerySchema,\n listScoresByEntityIdQuerySchema,\n saveScoreBodySchema,\n scoresWithPaginationResponseSchema,\n saveScoreResponseSchema,\n} from '../schemas/scores';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport type { Context } from '../types';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\n\nasync function listScorersFromSystem({\n mastra,\n requestContext,\n}: Context & {\n requestContext: RequestContext;\n}) {\n const agents = mastra.listAgents();\n const workflows = mastra.listWorkflows();\n\n const scorersMap = new Map<\n string,\n MastraScorerEntry & {\n agentIds: string[];\n agentNames: string[];\n workflowIds: string[];\n isRegistered: boolean;\n source: 'code' | 'stored' | 'fs';\n }\n >();\n\n // Helper function to process an agent's scorers\n const processAgentScorers = async (agent: {\n id: string;\n name: string;\n listScorers: (typeof agents)[string]['listScorers'];\n }) => {\n const scorers =\n (await agent.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerId = scorer.scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)?.agentIds.push(agent.id);\n scorersMap.get(scorerId)?.agentNames.push(agent.name);\n } else {\n scorersMap.set(scorerId, {\n workflowIds: [],\n ...scorer,\n agentNames: [agent.name],\n agentIds: [agent.id],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n };\n\n // Process code-defined agents\n for (const [_, agent] of Object.entries(agents)) {\n await processAgentScorers(agent);\n }\n\n // Process stored agents (database-backed agents)\n try {\n const editor = mastra.getEditor();\n const storedAgentsResult = await editor?.agent.list();\n if (storedAgentsResult?.agents) {\n for (const storedAgentConfig of storedAgentsResult.agents) {\n try {\n const agent = await editor?.agent.getById(storedAgentConfig.id);\n if (agent) {\n await processAgentScorers(agent);\n }\n } catch {\n // Skip individual agents that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured - not all setups have storage\n }\n\n // Process stored scorers (standalone CMS-created scorers)\n try {\n const editor = mastra.getEditor();\n const storedScorersResult = await editor?.scorer.list();\n if (storedScorersResult?.scorerDefinitions) {\n for (const storedScorerConfig of storedScorersResult.scorerDefinitions) {\n try {\n await editor?.scorer.getById(storedScorerConfig.id);\n } catch {\n // Skip individual scorers that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured\n }\n\n for (const [workflowId, workflow] of Object.entries(workflows)) {\n const scorers =\n (await workflow.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerName = scorer.scorer.name;\n if (scorersMap.has(scorerName)) {\n scorersMap.get(scorerName)?.workflowIds.push(workflowId);\n } else {\n scorersMap.set(scorerName, {\n agentIds: [],\n agentNames: [],\n ...scorer,\n workflowIds: [workflowId],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n }\n\n const registeredScorers = await mastra.listScorers();\n for (const [_scorerId, scorer] of Object.entries(registeredScorers || {})) {\n const scorerId = scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)!.isRegistered = true;\n } else {\n scorersMap.set(scorerId, {\n scorer: scorer,\n agentIds: [],\n agentNames: [],\n workflowIds: [],\n isRegistered: true,\n source: scorer.source ?? 'code',\n });\n }\n }\n\n return Object.fromEntries(scorersMap.entries());\n}\n\n// Legacy function to get trace and span details\nfunction getTraceDetails(traceIdWithSpanId?: string) {\n if (!traceIdWithSpanId) {\n return {};\n }\n\n const [traceId, spanId] = traceIdWithSpanId.split('-');\n\n return {\n ...(traceId ? { traceId } : {}),\n ...(spanId ? { spanId } : {}),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_SCORERS_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers',\n responseType: 'json',\n responseSchema: listScorersResponseSchema,\n summary: 'List all scorers',\n description: 'Returns a list of all registered scorers with their configuration and associated agents and workflows',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n return scorers;\n }) as any,\n});\n\nexport const GET_SCORER_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n responseSchema: scorerEntrySchema.nullable(),\n summary: 'Get scorer by ID',\n description: 'Returns details for a specific scorer including its configuration and associations',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, scorerId, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n\n const scorer = scorers[scorerId];\n\n if (!scorer) {\n return null;\n }\n\n return scorer;\n }) as any,\n});\n\nexport const LIST_SCORES_BY_RUN_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/run/:runId',\n responseType: 'json',\n pathParamSchema: runIdSchema,\n queryParamSchema: listScoresByRunIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by run ID',\n description: 'Returns all scores for a specific execution run',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, runId, ...params }) => {\n try {\n const { page, perPage } = params;\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByRunId?.({\n runId,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by run id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SCORER_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorer/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n queryParamSchema: listScoresByScorerIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by scorer ID',\n description: 'Returns all scores generated by a specific scorer',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, scorerId, ...params }) => {\n try {\n const { page, perPage, entityId, entityType } = params;\n const filters = Object.fromEntries(Object.entries({ entityId, entityType }).filter(([_, v]) => v !== undefined));\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByScorerId?.({\n scorerId,\n pagination: { page: page ?? 0, perPage: perPage ?? 10 },\n ...filters,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by scorer id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_ENTITY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/entity/:entityType/:entityId',\n responseType: 'json',\n pathParamSchema: entityPathParams,\n queryParamSchema: listScoresByEntityIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by entity ID',\n description: 'Returns all scores for a specific entity (agent or workflow)',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, entityId, entityType, ...params }) => {\n try {\n const { page, perPage } = params;\n let entityIdToUse = entityId;\n\n if (entityType === 'AGENT') {\n const agent = await getAgentFromSystem({ mastra, agentId: entityId });\n entityIdToUse = agent.id;\n } else if (entityType === 'WORKFLOW') {\n const workflow = mastra.getWorkflowById(entityId);\n entityIdToUse = workflow.id;\n }\n\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scoresStore?.listScoresByEntityId?.({\n entityId: entityIdToUse,\n entityType,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by entity id');\n }\n },\n});\n\nexport const SAVE_SCORE_ROUTE = createRoute({\n method: 'POST',\n path: '/scores',\n responseType: 'json',\n bodySchema: saveScoreBodySchema,\n responseSchema: saveScoreResponseSchema,\n summary: 'Save score',\n description: 'Saves a new score record to storage',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const { score } = params as { score: ScoreRowData };\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const result = await scoresStore?.saveScore?.(score);\n if (!result) {\n throw new HTTPException(500, { message: 'Storage not configured' });\n }\n return result;\n } catch (error) {\n return handleError(error, 'Error saving score');\n }\n },\n});\n"]}
import { agentCardResponseSchema, a2aAgentIdPathParams, agentExecutionResponseSchema, agentExecutionBodySchema } from './chunk-J62MSX2P.js';
import { getAgentFromSystem } from './chunk-4AGRNM7F.js';
import { getPublicOrigin } from './chunk-JF7G5FSK.js';
import { convertInstructionsToString } from './chunk-4GWTCVFL.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { __commonJS, __export, __toESM } from './chunk-PR4QN5HX.js';
import { isDeepStrictEqual } from 'util';
import { MastraA2AError } from '@mastra/core/a2a';
import { z } from 'zod/v4';
import * as crypto2 from 'crypto';
import { lookup } from 'dns/promises';
import { request as request$1 } from 'http';
import { request } from 'https';
import { isIP } from 'net';
// ../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/canonicalize/1.0.8/8d710dcf19a48d178b2fc853e16c59951fde29eb27b6037da6c3f4dbb968b03d/node_modules/canonicalize/lib/canonicalize.js
var require_canonicalize = __commonJS({
"../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/canonicalize/1.0.8/8d710dcf19a48d178b2fc853e16c59951fde29eb27b6037da6c3f4dbb968b03d/node_modules/canonicalize/lib/canonicalize.js"(exports, module) {
module.exports = function serialize(object) {
if (object === null || typeof object !== "object" || object.toJSON != null) {
return JSON.stringify(object);
}
if (Array.isArray(object)) {
return "[" + object.reduce((t, cv, ci) => {
const comma = ci === 0 ? "" : ",";
const value = cv === void 0 || typeof cv === "symbol" ? null : cv;
return t + comma + serialize(value);
}, "") + "]";
}
return "{" + Object.keys(object).sort().reduce((t, cv, ci) => {
if (object[cv] === void 0 || typeof object[cv] === "symbol") {
return t;
}
const comma = t.length === 0 ? "" : ",";
return t + comma + serialize(cv) + ":" + serialize(object[cv]);
}, "") + "}";
};
}
});
// src/server/handlers/a2a.ts
var a2a_exports = {};
__export(a2a_exports, {
AGENT_EXECUTION_ROUTE: () => AGENT_EXECUTION_ROUTE,
GET_AGENT_CARD_ROUTE: () => GET_AGENT_CARD_ROUTE,
getAgentCardByIdHandler: () => getAgentCardByIdHandler,
getAgentExecutionHandler: () => getAgentExecutionHandler,
handleDeleteTaskPushNotificationConfig: () => handleDeleteTaskPushNotificationConfig,
handleGetTaskPushNotificationConfig: () => handleGetTaskPushNotificationConfig,
handleListTaskPushNotificationConfig: () => handleListTaskPushNotificationConfig,
handleMessageSend: () => handleMessageSend,
handleMessageStream: () => handleMessageStream,
handleSetTaskPushNotificationConfig: () => handleSetTaskPushNotificationConfig,
handleTaskCancel: () => handleTaskCancel,
handleTaskGet: () => handleTaskGet,
handleTaskResubscribe: () => handleTaskResubscribe
});
// src/server/a2a/agent-card-signing.ts
var import_canonicalize = __toESM(require_canonicalize(), 1);
var SUPPORTED_JWS_ALGORITHMS = /* @__PURE__ */ new Set([
"ES256",
"ES384",
"ES512",
"RS256",
"RS384",
"RS512",
"PS256",
"PS384",
"PS512"
]);
function stripAgentCardSignatures(agentCard) {
const unsignedCard = structuredClone(agentCard);
delete unsignedCard.signatures;
return unsignedCard;
}
function importSigningKey(signing) {
const { privateKey } = signing;
if (typeof privateKey === "string") {
return crypto2.createPrivateKey(privateKey);
}
return crypto2.createPrivateKey({
key: privateKey,
format: "jwk"
});
}
function getProtectedHeader(signing) {
const { alg, ...rest } = signing.protectedHeader;
if (!SUPPORTED_JWS_ALGORITHMS.has(alg)) {
throw new Error(`Unsupported JWS algorithm for A2A Agent Card signing: ${alg}`);
}
return {
...rest,
alg
};
}
function getSignatureOptions(algorithm) {
if (algorithm.startsWith("ES")) {
return { dsaEncoding: "ieee-p1363" };
}
if (algorithm.startsWith("PS")) {
return {
padding: crypto2.constants.RSA_PKCS1_PSS_PADDING,
saltLength: crypto2.constants.RSA_PSS_SALTLEN_DIGEST
};
}
return {};
}
function getDigestAlgorithm(algorithm) {
if (algorithm.endsWith("256")) return "sha256";
if (algorithm.endsWith("384")) return "sha384";
if (algorithm.endsWith("512")) return "sha512";
throw new Error(`Unsupported JWS algorithm for A2A Agent Card signing: ${algorithm}`);
}
async function signAgentCard({
agentCard,
signing
}) {
const canonicalPayload = (0, import_canonicalize.default)(stripAgentCardSignatures(agentCard));
if (!canonicalPayload) {
throw new Error("Failed to canonicalize A2A Agent Card for signing");
}
const key = importSigningKey(signing);
const protectedHeader = getProtectedHeader(signing);
const encodedHeader = Buffer.from(JSON.stringify(protectedHeader), "utf8").toString("base64url");
const encodedPayload = Buffer.from(canonicalPayload, "utf8").toString("base64url");
const signingInput = `${encodedHeader}.${encodedPayload}`;
const signatureBuffer = crypto2.sign(
getDigestAlgorithm(String(protectedHeader.alg)),
Buffer.from(signingInput, "utf8"),
{
key,
...getSignatureOptions(String(protectedHeader.alg))
}
);
const signatureValue = signatureBuffer.toString("base64url");
if (!encodedHeader || !signatureValue) {
throw new Error("Failed to create compact JWS for A2A Agent Card");
}
const signature = {
protected: encodedHeader,
signature: signatureValue,
header: signing.header
};
return {
...agentCard,
signatures: [...agentCard.signatures ?? [], signature]
};
}
function normalizeError(error, reqId, taskId, logger) {
let a2aError;
if (error instanceof MastraA2AError) {
a2aError = error;
} else if (error instanceof Error) {
a2aError = MastraA2AError.internalError(error.message, { stack: error.stack });
} else {
a2aError = MastraA2AError.internalError("An unknown error occurred.", error);
}
if (taskId && !a2aError.taskId) {
a2aError.taskId = taskId;
}
logger?.error(`Error processing request (Task: ${a2aError.taskId ?? "N/A"}, ReqID: ${reqId ?? "N/A"}):`, a2aError);
return createErrorResponse(reqId, a2aError.toJSONRPCError());
}
function createErrorResponse(id, error) {
return {
jsonrpc: "2.0",
id,
// Can be null if request ID was invalid/missing
error
};
}
function createSuccessResponse(id, result) {
if (!id) {
throw MastraA2AError.internalError("Cannot create success response for null ID.");
}
return {
jsonrpc: "2.0",
id,
result
};
}
function convertToCoreMessage(message) {
return {
role: message.role === "user" ? "user" : "assistant",
content: message.parts.map((msg) => convertToCoreMessagePart(msg))
};
}
function convertToCoreMessagePart(part) {
switch (part.kind) {
case "text":
return {
type: "text",
text: part.text
};
case "file":
return {
type: "file",
data: "uri" in part.file ? new URL(part.file.uri) : part.file.bytes,
mimeType: part.file.mimeType
};
case "data":
throw new Error("Data parts are not supported in core messages");
}
}
var DEFAULT_PUSH_NOTIFICATION_TOKEN_HEADER = "X-A2A-Notification-Token";
function isDisallowedHostname(hostname) {
const normalized = hostname.toLowerCase();
return normalized === "localhost" || normalized.endsWith(".localhost") || normalized.endsWith(".local") || normalized.endsWith(".internal") || !normalized.includes(".");
}
function isDisallowedIpv4(address) {
const [first = -1, second = -1] = address.split(".").map(Number);
return first === 10 || first === 127 || first === 169 && second === 254 || first === 172 && second >= 16 && second <= 31 || first === 192 && second === 168;
}
function isDisallowedIpv6(address) {
const normalized = address.toLowerCase();
return normalized === "::1" || normalized.startsWith("fe8") || normalized.startsWith("fe9") || normalized.startsWith("fea") || normalized.startsWith("feb") || normalized.startsWith("fc") || normalized.startsWith("fd");
}
function isDisallowedIpAddress(address) {
const version = isIP(address);
if (version === 4) {
return isDisallowedIpv4(address);
}
if (version === 6) {
return isDisallowedIpv6(address);
}
return false;
}
var DefaultPushNotificationSender = class {
constructor(pushNotificationStore, options = {}) {
this.pushNotificationStore = pushNotificationStore;
this.options = options;
}
pushNotificationStore;
options;
getStore() {
return this.pushNotificationStore;
}
async resolveValidatedDestination(rawUrl) {
const url = new URL(rawUrl);
if (url.protocol !== "https:" && url.protocol !== "http:") {
throw new Error(`Push notification URL must use http or https: ${url.protocol}`);
}
const hostname = url.hostname.toLowerCase();
if (this.options.allowedHosts && !this.options.allowedHosts.includes(hostname)) {
throw new Error(`Push notification host is not allowed: ${hostname}`);
}
if (isDisallowedHostname(hostname)) {
throw new Error(`Push notification URL must not target local or internal hosts: ${hostname}`);
}
if (isDisallowedIpAddress(hostname)) {
throw new Error(`Push notification URL must not target local or private IPs: ${hostname}`);
}
const resolvedAddresses = isIP(hostname) === 0 ? await (this.options.lookup ?? lookup)(hostname, { all: true, verbatim: true }) : [{ address: hostname, family: isIP(hostname) }];
if (resolvedAddresses.some((result) => isDisallowedIpAddress(result.address))) {
throw new Error(`Push notification URL resolved to a local or private IP: ${hostname}`);
}
const requestUrl = new URL(url.toString());
requestUrl.hostname = resolvedAddresses[0].address;
return {
originalUrl: url,
requestUrl,
hostHeader: url.host,
servername: isIP(hostname) === 0 ? hostname : void 0
};
}
async postTaskSnapshot({
requestUrl,
hostHeader,
servername,
headers,
body,
timeout
}) {
headers.set("host", hostHeader);
const signal = typeof AbortSignal.timeout === "function" ? AbortSignal.timeout(timeout) : void 0;
if (this.options.fetch) {
return this.options.fetch(requestUrl.toString(), {
method: "POST",
headers,
body,
signal
});
}
const transport = requestUrl.protocol === "https:" ? request : request$1;
return await new Promise((resolve, reject) => {
const request = transport(
{
protocol: requestUrl.protocol,
hostname: requestUrl.hostname,
port: requestUrl.port || void 0,
path: `${requestUrl.pathname}${requestUrl.search}`,
method: "POST",
headers: Object.fromEntries(headers.entries()),
servername
},
(response) => {
response.resume();
response.on("end", () => {
resolve({
ok: !!response.statusCode && response.statusCode >= 200 && response.statusCode < 300,
status: response.statusCode ?? 0,
statusText: response.statusMessage ?? ""
});
});
}
);
request.on("error", reject);
if (signal) {
signal.addEventListener(
"abort",
() => {
request.destroy(signal.reason instanceof Error ? signal.reason : new Error("Push notification timed out"));
},
{ once: true }
);
}
request.end(body);
});
}
async sendNotifications({
agentId,
task,
logger
}) {
const configs = this.pushNotificationStore.list({
agentId,
params: { id: task.id }
});
if (configs.length === 0) {
return;
}
await Promise.allSettled(
configs.map(async (config) => {
const headers = new Headers({
"content-type": "application/json"
});
if (config.pushNotificationConfig.token) {
headers.set(
this.options.tokenHeaderName ?? DEFAULT_PUSH_NOTIFICATION_TOKEN_HEADER,
config.pushNotificationConfig.token
);
}
const auth = config.pushNotificationConfig.authentication;
if (auth?.credentials) {
if (auth.schemes.includes("Bearer")) {
headers.set("authorization", `Bearer ${auth.credentials}`);
} else if (auth.schemes.includes("Basic")) {
headers.set("authorization", `Basic ${auth.credentials}`);
}
}
const { requestUrl, hostHeader, servername } = await this.resolveValidatedDestination(
config.pushNotificationConfig.url
);
const response = await this.postTaskSnapshot({
requestUrl,
hostHeader,
servername,
headers,
body: JSON.stringify(task),
timeout: this.options.timeout ?? 5e3
});
if (!response.ok) {
throw new Error(
`Push notification failed with status ${response.status} ${response.statusText ?? ""}`.trim()
);
}
})
).then((results) => {
for (const result of results) {
if (result.status === "rejected") {
logger?.error("Failed to deliver A2A push notification", result.reason);
}
}
});
}
};
// src/server/a2a/push-notification-store.ts
function normalizeConfigId(taskId, configId) {
return configId || taskId;
}
var InMemoryPushNotificationStore = class {
store = /* @__PURE__ */ new Map();
getKey(agentId, taskId) {
return JSON.stringify([agentId, taskId]);
}
set({ agentId, config }) {
const key = this.getKey(agentId, config.taskId);
const configs = this.store.get(key) ?? /* @__PURE__ */ new Map();
const normalizedConfig = {
taskId: config.taskId,
pushNotificationConfig: {
...config.pushNotificationConfig,
id: normalizeConfigId(config.taskId, config.pushNotificationConfig.id)
}
};
configs.set(normalizedConfig.pushNotificationConfig.id, structuredClone(normalizedConfig));
this.store.set(key, configs);
return structuredClone(normalizedConfig);
}
get({
agentId,
params
}) {
const key = this.getKey(agentId, params.id);
const configId = normalizeConfigId(params.id, params.pushNotificationConfigId);
const config = this.store.get(key)?.get(configId);
return config ? structuredClone(config) : null;
}
list({
agentId,
params
}) {
const key = this.getKey(agentId, params.id);
return Array.from(this.store.get(key)?.values() ?? []).map((config) => structuredClone(config));
}
delete({ agentId, params }) {
const key = this.getKey(agentId, params.id);
const configs = this.store.get(key);
if (!configs) {
return false;
}
const deleted = configs.delete(params.pushNotificationConfigId);
if (configs.size === 0) {
this.store.delete(key);
}
return deleted;
}
};
// src/server/a2a/tasks.ts
function isTaskStatusUpdate(update) {
return "state" in update && !("parts" in update);
}
function isArtifactUpdate(update) {
return "kind" in update && update.kind === "artifact-update";
}
function applyUpdateToTask(current, update) {
let newTask = structuredClone(current);
if (isTaskStatusUpdate(update)) {
newTask.status = {
...newTask.status,
// Keep existing properties if not overwritten
...update,
// Apply updates
timestamp: (/* @__PURE__ */ new Date()).toISOString()
};
} else if (isArtifactUpdate(update)) {
if (!newTask.artifacts) {
newTask.artifacts = [];
} else {
newTask.artifacts = [...newTask.artifacts];
}
const artifact = update.artifact;
const existingIndex = newTask.artifacts.findIndex((a) => a.name === artifact.name);
const existingArtifact = newTask.artifacts[existingIndex];
if (existingArtifact) {
if (update.append) {
const appendedArtifact = JSON.parse(JSON.stringify(existingArtifact));
appendedArtifact.parts.push(...artifact.parts);
if (artifact.metadata) {
appendedArtifact.metadata = {
...appendedArtifact.metadata || {},
...artifact.metadata
};
}
if (artifact.description) appendedArtifact.description = artifact.description;
newTask.artifacts[existingIndex] = appendedArtifact;
} else {
newTask.artifacts[existingIndex] = { ...artifact };
}
} else {
newTask.artifacts.push({ ...artifact });
}
}
return newTask;
}
async function loadOrCreateTask({
agentId,
taskId,
taskStore,
message,
contextId,
metadata,
logger
}) {
const data = await taskStore.load({ agentId, taskId });
if (!data) {
const initialTask = {
id: taskId,
contextId: contextId || crypto.randomUUID(),
status: {
state: "submitted",
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
message: void 0
},
artifacts: [],
history: [message],
metadata,
kind: "task"
};
logger?.info(`[Task ${taskId}] Created new task.`);
await taskStore.save({ agentId, data: initialTask });
return initialTask;
}
logger?.info(`[Task ${taskId}] Loaded existing task.`);
let updatedData = data;
updatedData.history = [...data.history || [], message];
const { status } = data;
const finalStates = ["completed", "failed", "canceled"];
if (finalStates.includes(status.state)) {
logger?.warn(`[Task ${taskId}] Received message for task in final state ${status.state}. Restarting.`);
updatedData = applyUpdateToTask(updatedData, {
state: "submitted",
message: void 0
});
} else if (status.state === "input-required") {
logger?.info(`[Task ${taskId}] Changing state from 'input-required' to 'working'.`);
updatedData = applyUpdateToTask(updatedData, { state: "working" });
} else if (status.state === "working") {
logger?.warn(`[Task ${taskId}] Received message while already 'working'. Proceeding.`);
}
await taskStore.save({ agentId, data: updatedData });
return updatedData;
}
function createTaskContext({
task,
userMessage,
history,
activeCancellations
}) {
return {
task: structuredClone(task),
userMessage,
history: structuredClone(history),
isCancelled: () => activeCancellations.has(task.id)
};
}
// src/server/handlers/a2a.ts
var messagePartSchema = z.discriminatedUnion("kind", [
z.object({
kind: z.literal("text"),
text: z.string(),
metadata: z.record(z.string(), z.any()).optional()
}),
z.object({
kind: z.literal("file"),
file: z.union([
z.object({
bytes: z.string(),
mimeType: z.string().optional(),
name: z.string().optional()
}),
z.object({
uri: z.string(),
mimeType: z.string().optional(),
name: z.string().optional()
})
]),
metadata: z.record(z.string(), z.any()).optional()
}),
z.object({
kind: z.literal("data"),
data: z.record(z.string(), z.any()),
metadata: z.record(z.string(), z.any()).optional()
})
]);
var messageSendParamsSchema = z.object({
message: z.object({
role: z.enum(["user", "agent"]),
parts: z.array(messagePartSchema),
kind: z.literal("message"),
messageId: z.string(),
contextId: z.string().optional(),
taskId: z.string().optional(),
referenceTaskIds: z.array(z.string()).optional(),
extensions: z.array(z.string()).optional(),
metadata: z.record(z.string(), z.any()).optional()
}),
configuration: z.object({
acceptedOutputModes: z.array(z.string()).optional(),
blocking: z.boolean().optional(),
historyLength: z.number().optional(),
pushNotificationConfig: z.object({
url: z.string(),
id: z.string().optional(),
token: z.string().optional(),
authentication: z.object({
schemes: z.array(z.string()),
credentials: z.string().optional()
}).optional()
}).optional()
}).optional()
});
var defaultPushNotificationStore = new InMemoryPushNotificationStore();
var defaultPushNotificationSender = new DefaultPushNotificationSender(defaultPushNotificationStore);
function createAgentCardDefaults({
pushNotifications = false
} = {}) {
return {
protocolVersion: "0.3.0",
additionalInterfaces: [],
supportsAuthenticatedExtendedCard: false,
security: [],
securitySchemes: {},
capabilities: {
streaming: true,
pushNotifications,
stateTransitionHistory: false,
extensions: []
},
defaultInputModes: ["text/plain"],
defaultOutputModes: ["text/plain"]
};
}
async function getAgentCardByIdHandler({
mastra,
agentId,
executionUrl = `/a2a/${agentId}`,
provider = {
organization: "Mastra",
url: "https://mastra.ai"
},
version = "1.0",
pushNotifications = false,
requestContext
}) {
const agent = await getAgentFromSystem({ mastra, agentId });
const [instructions, tools] = await Promise.all([agent.getInstructions({ requestContext }), agent.listTools({ requestContext })]);
const agentCard = {
name: agent.id || agentId,
description: convertInstructionsToString(instructions),
url: executionUrl,
provider,
version,
...createAgentCardDefaults({ pushNotifications }),
// Convert agent tools to skills format for A2A protocol
skills: Object.entries(tools).map(([toolId, tool]) => ({
id: toolId,
name: toolId,
description: tool.description || `Tool: ${toolId}`,
// Optional fields
tags: ["tool"]
}))
};
const signing = mastra.getServer?.()?.a2a?.agentCardSigning;
if (!signing) {
return agentCard;
}
return signAgentCard({
agentCard,
signing
});
}
function getA2AExecutionUrl({
agentId,
request,
routePrefix
}) {
const executionPath = `${routePrefix ?? ""}/a2a/${agentId}`;
if (!request) {
return executionPath;
}
return `${getPublicOrigin(request)}${executionPath}`;
}
function validateMessageSendParams(params) {
try {
messageSendParamsSchema.parse(params);
} catch (error) {
if (error instanceof z.ZodError) {
throw MastraA2AError.invalidParams(error.issues[0].message);
}
throw error;
}
}
function createArtifactUpdate({
taskId,
contextId,
text,
data
}) {
const parts = [
...text ? [{ kind: "text", text }] : [],
...data ? [{ kind: "data", data }] : []
];
if (parts.length === 0) {
return void 0;
}
return {
kind: "artifact-update",
taskId,
contextId,
lastChunk: true,
artifact: {
artifactId: `${taskId}:response`,
name: data ? "response.json" : "response.txt",
parts
}
};
}
function createTextChunkArtifactUpdate({
taskId,
contextId,
text,
append,
lastChunk
}) {
return {
kind: "artifact-update",
taskId,
contextId,
...append ? { append: true } : {},
...lastChunk !== void 0 ? { lastChunk } : {},
artifact: {
artifactId: `${taskId}:response:text`,
name: "response.txt",
parts: [{ kind: "text", text }]
}
};
}
function createDataArtifactUpdate({
taskId,
contextId,
data,
lastChunk
}) {
return {
kind: "artifact-update",
taskId,
contextId,
...{ lastChunk } ,
artifact: {
artifactId: `${taskId}:response:data`,
name: "response.json",
parts: [{ kind: "data", data }]
}
};
}
function resolvePushNotificationPair({
pushNotificationStore,
pushNotificationSender
}) {
if (pushNotificationSender) {
return {
pushNotificationStore: pushNotificationSender.getStore(),
pushNotificationSender
};
}
if (pushNotificationStore) {
return {
pushNotificationStore,
pushNotificationSender: new DefaultPushNotificationSender(pushNotificationStore)
};
}
return {
pushNotificationStore: defaultPushNotificationStore,
pushNotificationSender: defaultPushNotificationSender
};
}
function createTaskPushNotificationConfig(taskId, pushNotificationConfig) {
return {
taskId,
pushNotificationConfig: {
...pushNotificationConfig,
id: pushNotificationConfig.id ?? taskId
}
};
}
function shouldSendPushNotification(previousTask, nextTask) {
const pushTriggerStates = ["completed", "failed", "canceled", "input-required"];
if (!pushTriggerStates.includes(nextTask.status.state)) {
return false;
}
return previousTask?.status.state !== nextTask.status.state;
}
async function saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender,
previousTask,
nextTask,
agentId,
logger
}) {
await taskStore.save({ agentId, data: nextTask });
if (!shouldSendPushNotification(previousTask, nextTask)) {
return;
}
void pushNotificationSender.sendNotifications({
agentId,
task: nextTask,
logger
}).catch((error) => {
logger?.error("Failed to schedule A2A push notification", error);
});
}
function extractFullStreamTextDelta(value) {
if (typeof value !== "object" || value === null || !("type" in value)) {
return null;
}
const chunk = value;
switch (chunk.type) {
case "text-delta":
if (typeof chunk.payload?.text === "string") {
return chunk.payload.text;
}
if (typeof chunk.payload?.delta === "string") {
return chunk.payload.delta;
}
if (typeof chunk.textDelta === "string") {
return chunk.textDelta;
}
if (typeof chunk.delta === "string") {
return chunk.delta;
}
if (typeof chunk.text === "string") {
return chunk.text;
}
return null;
default:
return null;
}
}
function extractFinalStructuredObject(value) {
if (typeof value !== "object" || value === null || !("type" in value)) {
return void 0;
}
const chunk = value;
if (chunk.type !== "object-result") {
return void 0;
}
const objectValue = chunk.payload?.object ?? chunk.object;
return objectValue && typeof objectValue === "object" ? objectValue : void 0;
}
function isTerminalTaskState(state) {
return ["completed", "failed", "canceled"].includes(state);
}
function artifactIdentity(artifact) {
return artifact.artifactId || artifact.name;
}
function areArtifactPartsEqual(left, right) {
if (left === right) {
return true;
}
if (left.length !== right.length) {
return false;
}
return left.every((part, index) => {
const other = right[index];
if (!other || part.kind !== other.kind) {
return false;
}
if (part.kind === "text" && other.kind === "text") {
return part.text === other.text;
}
return part === other;
});
}
function areArtifactsEqual(left, right) {
if (left === right) {
return true;
}
if (!left || !right) {
return left === right;
}
return left.artifactId === right.artifactId && left.name === right.name && left.description === right.description && left.metadata === right.metadata && areArtifactPartsEqual(left.parts, right.parts);
}
function areStatusMessagePartsEqual(left, right) {
return left === right || isDeepStrictEqual(left, right);
}
function areStatusMessagesEqual(left, right) {
if (left === right) {
return true;
}
if (!left || !right) {
return left === right;
}
return left.messageId === right.messageId && left.kind === right.kind && left.role === right.role && left.contextId === right.contextId && left.taskId === right.taskId && isDeepStrictEqual(left.referenceTaskIds, right.referenceTaskIds) && isDeepStrictEqual(left.extensions, right.extensions) && isDeepStrictEqual(left.metadata, right.metadata) && areStatusMessagePartsEqual(left.parts, right.parts);
}
function didTaskStatusChange(previous, next) {
return previous.status.state !== next.status.state || previous.status.timestamp !== next.status.timestamp || !areStatusMessagesEqual(previous.status.message, next.status.message);
}
function getTaskArtifactUpdates({ previous, next }) {
const previousArtifacts = new Map((previous.artifacts ?? []).map((artifact) => [artifactIdentity(artifact), artifact]));
const changedArtifacts = (next.artifacts ?? []).filter((artifact) => {
const priorArtifact = previousArtifacts.get(artifactIdentity(artifact));
return !priorArtifact || !areArtifactsEqual(priorArtifact, artifact);
});
return changedArtifacts.map((artifact, index) => ({
kind: "artifact-update",
taskId: next.id,
contextId: next.contextId,
lastChunk: isTerminalTaskState(next.status.state) && index === changedArtifacts.length - 1,
artifact: structuredClone(artifact)
}));
}
async function handleMessageSend({
requestId,
params,
taskStore,
pushNotificationStore,
pushNotificationSender,
agent,
agentId,
logger,
requestContext
}) {
validateMessageSendParams(params);
const { message, metadata } = params;
const { contextId } = message;
const taskId = message.taskId || crypto.randomUUID();
const {
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender
} = resolvePushNotificationPair({
pushNotificationStore,
pushNotificationSender
});
let currentData = await loadOrCreateTask({
taskId,
taskStore,
agentId,
message,
contextId,
metadata
});
if (params.configuration?.pushNotificationConfig) {
resolvedPushNotificationStore.set({
agentId,
config: createTaskPushNotificationConfig(taskId, params.configuration.pushNotificationConfig)
});
}
const context = createTaskContext({
task: currentData,
userMessage: message,
history: currentData.history || [],
activeCancellations: taskStore.activeCancellations
});
try {
const resourceId = metadata?.resourceId ?? message.metadata?.resourceId ?? agentId;
const result = await agent.generate([convertToCoreMessage(message)], {
runId: taskId,
requestContext,
...contextId ? { threadId: contextId, resourceId } : {}
});
const artifactUpdate = createArtifactUpdate({
taskId: currentData.id,
contextId: currentData.contextId,
text: result.text,
data: result.object
});
if (artifactUpdate) {
currentData = applyUpdateToTask(currentData, artifactUpdate);
}
currentData = applyUpdateToTask(currentData, {
state: "completed",
message: void 0
});
currentData.metadata = {
...currentData.metadata,
execution: {
toolCalls: result.toolCalls,
toolResults: result.toolResults,
usage: result.usage,
finishReason: result.finishReason
}
};
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
previousTask: context.task,
nextTask: currentData,
agentId,
logger
});
context.task = currentData;
} catch (handlerError) {
const failureStatusUpdate = {
state: "failed",
message: {
messageId: crypto.randomUUID(),
role: "agent",
parts: [
{
kind: "text",
text: `Handler failed: ${handlerError instanceof Error ? handlerError.message : String(handlerError)}`
}
],
kind: "message"
}
};
currentData = applyUpdateToTask(currentData, failureStatusUpdate);
try {
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
previousTask: context.task,
nextTask: currentData,
agentId,
logger
});
} catch (saveError) {
logger?.error(`Failed to save task ${currentData.id} after handler error:`, saveError?.message);
}
return normalizeError(handlerError, requestId, currentData.id, logger);
}
return createSuccessResponse(requestId, currentData);
}
async function handleTaskGet({
requestId,
taskStore,
agentId,
taskId
}) {
const task = await taskStore.load({ agentId, taskId });
if (!task) {
throw MastraA2AError.taskNotFound(taskId);
}
return createSuccessResponse(requestId, task);
}
async function loadTaskOrThrow({
taskStore,
agentId,
taskId
}) {
const task = await taskStore.load({ agentId, taskId });
if (!task) {
throw MastraA2AError.taskNotFound(taskId);
}
return task;
}
async function handleSetTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore,
agentId,
params
}) {
await loadTaskOrThrow({
taskStore,
agentId,
taskId: params.taskId
});
const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({
pushNotificationStore
});
const config = resolvedPushNotificationStore.set({
agentId,
config: createTaskPushNotificationConfig(params.taskId, params.pushNotificationConfig)
});
return createSuccessResponse(requestId, config);
}
async function handleGetTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore,
agentId,
params
}) {
await loadTaskOrThrow({
taskStore,
agentId,
taskId: params.id
});
const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({
pushNotificationStore
});
const config = resolvedPushNotificationStore.get({
agentId,
params
});
if (!config) {
throw MastraA2AError.invalidParams(
`Push notification config not found: ${params.pushNotificationConfigId ?? params.id}`
);
}
return createSuccessResponse(requestId, config);
}
async function handleListTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore,
agentId,
params
}) {
await loadTaskOrThrow({
taskStore,
agentId,
taskId: params.id
});
const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({
pushNotificationStore
});
const configs = resolvedPushNotificationStore.list({
agentId,
params
});
return createSuccessResponse(requestId, configs);
}
async function handleDeleteTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore,
agentId,
params
}) {
await loadTaskOrThrow({
taskStore,
agentId,
taskId: params.id
});
const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({
pushNotificationStore
});
const deleted = resolvedPushNotificationStore.delete({
agentId,
params
});
if (!deleted) {
throw MastraA2AError.invalidParams(`Push notification config not found: ${params.pushNotificationConfigId}`);
}
return createSuccessResponse(requestId, null);
}
async function* handleMessageStream({
requestId,
params,
taskStore,
pushNotificationStore,
pushNotificationSender,
agent,
agentId,
logger,
requestContext
}) {
validateMessageSendParams(params);
const { message, metadata } = params;
const { contextId } = message;
const taskId = message.taskId || crypto.randomUUID();
const {
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender
} = resolvePushNotificationPair({
pushNotificationStore,
pushNotificationSender
});
let currentData = await loadOrCreateTask({
taskId,
taskStore,
agentId,
message,
contextId,
metadata
});
if (params.configuration?.pushNotificationConfig) {
resolvedPushNotificationStore.set({
agentId,
config: createTaskPushNotificationConfig(taskId, params.configuration.pushNotificationConfig)
});
}
currentData = applyUpdateToTask(currentData, {
state: "working",
message: {
messageId: crypto.randomUUID(),
kind: "message",
role: "agent",
parts: [{ kind: "text", text: "Generating response..." }]
}
});
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
nextTask: currentData,
agentId,
logger
});
yield createSuccessResponse(requestId, currentData);
try {
const resourceId = metadata?.resourceId ?? message.metadata?.resourceId ?? agentId;
const result = await agent.stream([convertToCoreMessage(message)], {
runId: taskId,
requestContext,
...contextId ? { threadId: contextId, resourceId } : {}
});
let sawTextArtifact = false;
let pendingTextChunk;
let structuredData;
for await (const chunk of result.fullStream) {
const textDelta = extractFullStreamTextDelta(chunk);
if (textDelta !== null) {
if (!pendingTextChunk) {
pendingTextChunk = textDelta;
continue;
}
const textUpdate = createTextChunkArtifactUpdate({
taskId: currentData.id,
contextId: currentData.contextId,
text: pendingTextChunk,
append: sawTextArtifact,
lastChunk: false
});
currentData = applyUpdateToTask(currentData, textUpdate);
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
nextTask: currentData,
agentId,
logger
});
yield createSuccessResponse(requestId, textUpdate);
sawTextArtifact = true;
pendingTextChunk = textDelta;
continue;
}
const finalStructuredObject = extractFinalStructuredObject(chunk);
if (finalStructuredObject) {
structuredData = finalStructuredObject;
}
}
structuredData ??= await result.object;
if (!pendingTextChunk && !sawTextArtifact) {
const finalText = await result.text;
if (finalText) {
pendingTextChunk = finalText;
}
}
if (pendingTextChunk) {
const textUpdate = createTextChunkArtifactUpdate({
taskId: currentData.id,
contextId: currentData.contextId,
text: pendingTextChunk,
append: sawTextArtifact,
lastChunk: !structuredData
});
currentData = applyUpdateToTask(currentData, textUpdate);
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
nextTask: currentData,
agentId,
logger
});
yield createSuccessResponse(requestId, textUpdate);
sawTextArtifact = true;
pendingTextChunk = void 0;
}
if (structuredData) {
const dataUpdate = createDataArtifactUpdate({
taskId: currentData.id,
contextId: currentData.contextId,
data: structuredData,
lastChunk: true
});
currentData = applyUpdateToTask(currentData, dataUpdate);
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
nextTask: currentData,
agentId,
logger
});
yield createSuccessResponse(requestId, dataUpdate);
}
const previousTask = currentData;
const completedTask = applyUpdateToTask(currentData, {
state: "completed",
message: void 0
});
completedTask.metadata = {
...completedTask.metadata,
execution: {
toolCalls: await result.toolCalls,
toolResults: await result.toolResults,
usage: await result.usage,
finishReason: await result.finishReason
}
};
currentData = completedTask;
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
previousTask,
nextTask: currentData,
agentId,
logger
});
} catch (handlerError) {
const previousTask = currentData;
currentData = applyUpdateToTask(currentData, {
state: "failed",
message: {
messageId: crypto.randomUUID(),
role: "agent",
parts: [
{
kind: "text",
text: `Handler failed: ${handlerError instanceof Error ? handlerError.message : String(handlerError)}`
}
],
kind: "message"
}
});
try {
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
previousTask,
nextTask: currentData,
agentId,
logger
});
} catch (saveError) {
logger?.error(`Failed to save task ${currentData.id} after handler error:`, saveError?.message);
}
}
yield createSuccessResponse(requestId, {
kind: "status-update",
taskId: currentData.id,
contextId: currentData.contextId,
status: currentData.status,
final: true
});
}
async function* handleTaskResubscribe({
requestId,
taskStore,
agentId,
taskId,
abortSignal
}) {
let snapshot = taskStore.loadWithVersion({ agentId, taskId });
if (!snapshot) {
throw MastraA2AError.taskNotFound(taskId);
}
yield createSuccessResponse(requestId, snapshot.task);
if (isTerminalTaskState(snapshot.task.status.state)) {
return;
}
while (true) {
const { task, version } = snapshot;
const nextUpdate = await taskStore.waitForNextUpdate({
agentId,
taskId,
afterVersion: version,
signal: abortSignal
});
for (const artifactUpdate of getTaskArtifactUpdates({ previous: task, next: nextUpdate.task })) {
yield createSuccessResponse(requestId, artifactUpdate);
}
if (didTaskStatusChange(task, nextUpdate.task)) {
yield createSuccessResponse(requestId, {
kind: "status-update",
taskId: nextUpdate.task.id,
contextId: nextUpdate.task.contextId,
status: nextUpdate.task.status,
final: isTerminalTaskState(nextUpdate.task.status.state)
});
}
if (isTerminalTaskState(nextUpdate.task.status.state)) {
return;
}
snapshot = nextUpdate;
}
}
function getTaskIdFromParams(params) {
if (!params || typeof params !== "object") {
return void 0;
}
if ("id" in params && typeof params.id === "string") {
return params.id;
}
if ("taskId" in params && typeof params.taskId === "string") {
return params.taskId;
}
if ("message" in params && params.message && typeof params.message === "object" && "taskId" in params.message) {
return typeof params.message.taskId === "string" ? params.message.taskId : void 0;
}
return void 0;
}
function isAsyncIterable(value) {
return !!value && typeof value === "object" && Symbol.asyncIterator in value;
}
function createA2AJsonResponse(payload) {
return Response.json(payload);
}
function createA2ASSEResponse(payload) {
const encoder = new TextEncoder();
const iterable = isAsyncIterable(payload) ? payload : (async function* () {
yield payload;
})();
const stream = new ReadableStream({
async start(controller) {
try {
for await (const chunk of iterable) {
controller.enqueue(encoder.encode(`data: ${JSON.stringify(chunk)}
`));
}
} catch (error) {
controller.error(error);
return;
}
controller.close();
}
});
return new Response(stream, {
headers: {
"Content-Type": "text/event-stream; charset=utf-8",
"Cache-Control": "no-cache",
Connection: "keep-alive",
"X-Accel-Buffering": "no"
}
});
}
async function handleTaskCancel({
requestId,
taskStore,
pushNotificationSender,
agentId,
taskId,
logger
}) {
let data = await taskStore.load({
agentId,
taskId
});
if (!data) {
throw MastraA2AError.taskNotFound(taskId);
}
const finalStates = ["completed", "failed", "canceled"];
if (finalStates.includes(data.status.state)) {
logger?.info(`Task ${taskId} already in final state ${data.status.state}, cannot cancel.`);
return createSuccessResponse(requestId, data);
}
taskStore.activeCancellations.add(taskId);
const cancelUpdate = {
state: "canceled",
message: {
role: "agent",
parts: [{ kind: "text", text: "Task cancelled by request." }],
kind: "message",
messageId: crypto.randomUUID()
}
};
const previousTask = data;
data = applyUpdateToTask(data, cancelUpdate);
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvePushNotificationPair({ pushNotificationSender }).pushNotificationSender,
previousTask,
nextTask: data,
agentId,
logger
});
taskStore.activeCancellations.delete(taskId);
return createSuccessResponse(requestId, data);
}
async function getAgentExecutionHandler({
requestId,
mastra,
agentId,
requestContext,
method,
params,
taskStore,
pushNotificationStore,
pushNotificationSender,
logger,
abortSignal
}) {
const agent = await getAgentFromSystem({ mastra, agentId });
const {
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender
} = resolvePushNotificationPair({
pushNotificationStore,
pushNotificationSender
});
let taskId;
try {
taskId = getTaskIdFromParams(params);
switch (method) {
case "message/send": {
const result = await handleMessageSend({
requestId,
params,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender,
agent,
agentId,
logger,
requestContext
});
return result;
}
case "message/stream": {
const result = await handleMessageStream({
requestId,
taskStore,
params,
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender,
agent,
agentId,
logger,
requestContext
});
return result;
}
case "tasks/get": {
const result = await handleTaskGet({
requestId,
taskStore,
agentId,
taskId: taskId || "No task ID provided"
});
return result;
}
case "tasks/cancel": {
const result = await handleTaskCancel({
requestId,
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
agentId,
taskId: taskId || "No task ID provided",
logger
});
return result;
}
case "tasks/resubscribe":
return await handleTaskResubscribe({
requestId,
taskStore,
agentId,
taskId: taskId || "No task ID provided",
abortSignal
});
case "tasks/pushNotificationConfig/set":
return await handleSetTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
agentId,
params
});
case "tasks/pushNotificationConfig/get":
return await handleGetTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
agentId,
params
});
case "tasks/pushNotificationConfig/list":
return await handleListTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
agentId,
params
});
case "tasks/pushNotificationConfig/delete":
return await handleDeleteTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
agentId,
params
});
case "agent/getAuthenticatedExtendedCard":
throw MastraA2AError.extendedAgentCardNotConfigured();
default:
throw MastraA2AError.methodNotFound(method);
}
} catch (error) {
if (error instanceof MastraA2AError && taskId && !error.taskId) {
error.taskId = taskId;
}
return normalizeError(error, requestId, taskId, logger);
}
}
var GET_AGENT_CARD_ROUTE = createRoute({
method: "GET",
path: "/.well-known/:agentId/agent-card.json",
responseType: "json",
pathParamSchema: a2aAgentIdPathParams,
responseSchema: agentCardResponseSchema,
summary: "Get agent card",
description: "Returns the agent card information for A2A protocol discovery",
tags: ["Agent-to-Agent"],
requiresAuth: true,
handler: async (ctx) => {
const executionUrl = getA2AExecutionUrl({
agentId: ctx.agentId,
request: ctx.request,
routePrefix: ctx.routePrefix
});
return getAgentCardByIdHandler({
mastra: ctx.mastra,
requestContext: ctx.requestContext,
agentId: ctx.agentId,
executionUrl,
pushNotifications: true
});
}
});
var AGENT_EXECUTION_ROUTE = createRoute({
method: "POST",
path: "/a2a/:agentId",
responseType: "datastream-response",
pathParamSchema: a2aAgentIdPathParams,
bodySchema: agentExecutionBodySchema,
responseSchema: agentExecutionResponseSchema,
summary: "Execute agent",
description: "Executes an agent action via JSON-RPC 2.0 over A2A protocol",
tags: ["Agent-to-Agent"],
requiresAuth: true,
handler: async ({ mastra, agentId, requestContext, taskStore, abortSignal, ...bodyParams }) => {
const { id: requestId, method } = bodyParams;
const params = "params" in bodyParams ? bodyParams.params : void 0;
const result = await getAgentExecutionHandler({
requestId,
mastra,
agentId,
requestContext,
method,
params,
taskStore,
abortSignal
});
if (method === "message/stream" || method === "tasks/resubscribe") {
return createA2ASSEResponse(result);
}
return createA2AJsonResponse(result);
}
});
export { AGENT_EXECUTION_ROUTE, GET_AGENT_CARD_ROUTE, a2a_exports, getAgentCardByIdHandler, getAgentExecutionHandler, handleDeleteTaskPushNotificationConfig, handleGetTaskPushNotificationConfig, handleListTaskPushNotificationConfig, handleMessageSend, handleMessageStream, handleSetTaskPushNotificationConfig, handleTaskCancel, handleTaskGet, handleTaskResubscribe };
//# sourceMappingURL=chunk-YCO7GF33.js.map
//# sourceMappingURL=chunk-YCO7GF33.js.map

Sorry, the diff of this file is too big to display

import { builderSettingsResponseSchema, builderAvailableModelsResponseSchema, infrastructureStatusResponseSchema, agentFeaturesSchema } from './chunk-2PFISG5R.js';
import { buildProvidersList } from './chunk-4AGRNM7F.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
// src/server/utils/resolve-builder-model-policy.ts
async function resolveBuilderModelPolicy(editor) {
if (!editor) return { active: false };
if (typeof editor.resolveBuilder !== "function") return { active: false };
if (typeof editor.hasEnabledBuilderConfig === "function" && !editor.hasEnabledBuilderConfig()) {
return { active: false };
}
try {
const builder = await editor.resolveBuilder();
const { builderToModelPolicy } = await import('@mastra/core/agent-builder/ee');
return builderToModelPolicy(builder);
} catch {
return { active: false };
}
}
// src/server/handlers/editor-builder.ts
async function resolveBuilderFeatures(mastra) {
const editor = mastra.getEditor();
if (!editor || typeof editor.resolveBuilder !== "function") return null;
if (!editor.hasEnabledBuilderConfig?.()) return null;
const builder = await editor.resolveBuilder();
if (!builder || !builder.enabled) return null;
const features = builder.getFeatures?.()?.agent;
if (!features) return null;
const parsed = agentFeaturesSchema.safeParse(features);
return parsed.success ? parsed.data : null;
}
async function isBuilderFeatureEnabled(mastra, feature) {
const features = await resolveBuilderFeatures(mastra);
return features?.[feature] === true;
}
async function requireBuilderFeature(mastra, feature) {
if (!await isBuilderFeatureEnabled(mastra, feature)) {
throw new HTTPException(404, { message: "Not Found" });
}
}
var GET_EDITOR_BUILDER_SETTINGS_ROUTE = createRoute({
method: "GET",
path: "/editor/builder/settings",
responseType: "json",
responseSchema: builderSettingsResponseSchema,
summary: "Get agent builder settings",
description: "Returns the agent builder feature flags and configuration for UI gating",
tags: ["Editor"],
requiresAuth: true,
requiresPermission: "stored-agents:read",
handler: async ({ mastra }) => {
try {
const editor = mastra.getEditor();
if (!editor) {
return { enabled: false, modelPolicy: { active: false } };
}
if (typeof editor.resolveBuilder !== "function") {
return { enabled: false, modelPolicy: { active: false } };
}
if (!editor.hasEnabledBuilderConfig?.()) {
return { enabled: false, modelPolicy: { active: false } };
}
const builder = await editor.resolveBuilder();
if (!builder || !builder.enabled) {
return { enabled: false, modelPolicy: { active: false } };
}
const baseWarnings = builder.getModelPolicyWarnings?.() ?? [];
const configuration = builder.getConfiguration();
const collectAliases = (registry) => Object.entries(registry).map(([key, entity]) => ({
id: entity.id || key,
key
}));
const toolAliases = collectAliases(mastra.listTools() ?? {});
const agentAliases = collectAliases(mastra.listAgents() ?? {});
const workflowAliases = collectAliases(mastra.listWorkflows() ?? {});
const toResponseKey = (aliases, byId) => {
const map = /* @__PURE__ */ new Map();
for (const a of aliases) {
map.set(a.id, byId === "id" ? a.id : a.key);
map.set(a.key, byId === "id" ? a.id : a.key);
}
return map;
};
const toolKeyMap = toResponseKey(toolAliases, "key");
const agentKeyMap = toResponseKey(agentAliases, "id");
const workflowKeyMap = toResponseKey(workflowAliases, "key");
const { builderToModelPolicy, resolvePickerVisibility } = await import('@mastra/core/agent-builder/ee');
const picker = resolvePickerVisibility({
config: configuration?.agent,
registeredToolIds: toolAliases.flatMap((a) => [a.id, a.key]),
registeredAgentIds: agentAliases.flatMap((a) => [a.id, a.key]),
registeredWorkflowIds: workflowAliases.flatMap((a) => [a.id, a.key])
});
const normalize = (visible, map) => {
if (visible === null) return null;
const out = [];
const seen = /* @__PURE__ */ new Set();
for (const id of visible) {
const mapped = map.get(id);
if (mapped && !seen.has(mapped)) {
seen.add(mapped);
out.push(mapped);
}
}
return out;
};
const modelPolicyWarnings = [...baseWarnings, ...picker.warnings];
return {
enabled: true,
features: builder.getFeatures(),
configuration,
modelPolicy: builderToModelPolicy(builder),
picker: {
visibleTools: normalize(picker.visibleTools, toolKeyMap),
visibleAgents: normalize(picker.visibleAgents, agentKeyMap),
visibleWorkflows: normalize(picker.visibleWorkflows, workflowKeyMap)
},
...modelPolicyWarnings.length > 0 ? { modelPolicyWarnings } : {}
};
} catch (error) {
return handleError(error, "Error getting builder settings");
}
}
});
var GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE = createRoute({
method: "GET",
path: "/editor/builder/models/available",
responseType: "json",
responseSchema: builderAvailableModelsResponseSchema,
summary: "List builder-available AI models",
description: "Returns AI providers/models filtered by the active agent-builder model policy.",
tags: ["Editor"],
requiresAuth: true,
requiresPermission: "stored-agents:read",
handler: async ({ mastra }) => {
try {
const providers = (await buildProvidersList(mastra)).filter((provider) => provider.connected);
const policy = await resolveBuilderModelPolicy(mastra.getEditor());
if (!policy.active || !policy.allowed || policy.allowed.length === 0) {
return { providers };
}
const { isModelAllowed } = await import('@mastra/core/agent-builder/ee');
const filtered = providers.map((provider) => ({
...provider,
models: provider.models.filter((modelId) => isModelAllowed(policy.allowed, { provider: provider.id, modelId }))
})).filter((provider) => provider.models.length > 0);
return { providers: filtered };
} catch (error) {
return handleError(error, "Error fetching available models");
}
}
});
var GET_INFRASTRUCTURE_STATUS_ROUTE = createRoute({
method: "GET",
path: "/editor/builder/infrastructure",
responseType: "json",
responseSchema: infrastructureStatusResponseSchema,
summary: "Get infrastructure status",
description: "Agent Builder infrastructure configuration and lightweight runtime status.",
tags: ["Editor"],
requiresAuth: true,
requiresPermission: "infrastructure:read",
handler: async ({ mastra }) => {
try {
const formatConfigValue = (value) => {
if (value === null || value === void 0) return "not set";
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return String(value);
if (Array.isArray(value)) return `${value.length} item${value.length === 1 ? "" : "s"}`;
return value.constructor?.name && value.constructor.name !== "Object" ? value.constructor.name : "configured";
};
const getProviderName = (value) => {
if (!value) return null;
if (typeof value === "object" && "provider" in value && typeof value.provider === "string")
return value.provider;
if (typeof value === "object" && "constructor" in value) {
const name = value.constructor?.name;
return name && name !== "Object" ? name : "configured";
}
return null;
};
const getConfigEntries = (config, omittedKeys = []) => Object.entries(config).filter(([key, value]) => !omittedKeys.includes(key) && value !== void 0 && value !== null).map(([key, value]) => ({ key, value: formatConfigValue(value) }));
const channelProviders = mastra.getChannelProviders() ?? {};
const channels = {
providers: Object.entries(channelProviders).map(([id, provider]) => {
const info = provider.getInfo?.();
const routes = provider.getRoutes?.() ?? [];
return {
id: info?.id ?? id,
name: info?.name ?? id,
isConfigured: info?.isConfigured ?? false,
routeCount: routes.length
};
}).filter((provider) => provider.isConfigured)
};
const editor = mastra.getEditor();
let browser = {
type: null,
provider: null,
env: null,
registered: false,
availableProviders: [],
config: []
};
let workspace = {
type: null,
workspaceId: null,
name: null,
source: null,
registered: false,
hasFilesystem: false,
hasSandbox: false,
filesystemProvider: null,
sandboxProvider: null,
config: []
};
let registries = {
skillsSh: { enabled: false }
};
if (editor?.resolveBuilder) {
const browsers = editor.__browsers;
const builder = await editor.resolveBuilder();
const builderRegistries = builder?.getRegistries?.();
registries = {
skillsSh: { enabled: builderRegistries?.skillsSh?.enabled === true }
};
const configuration = builder?.getConfiguration?.()?.agent;
const browserRef = configuration?.browser;
const browserConfig = browserRef?.config ?? {};
const providerId = browserConfig.provider ?? null;
browser = {
type: browserRef?.type ?? null,
provider: providerId,
env: browserConfig.env ?? null,
registered: providerId ? !!browsers?.has(providerId) : false,
availableProviders: browsers ? Array.from(browsers.keys()) : [],
config: getConfigEntries(browserConfig, ["provider", "env"])
};
const workspaceRef = configuration?.workspace;
const workspaceConfig = workspaceRef?.config ?? {};
const registeredWorkspaces = mastra.listWorkspaces();
const registeredWorkspace = workspaceRef?.workspaceId ? registeredWorkspaces[workspaceRef.workspaceId] : void 0;
const filesystem = registeredWorkspace?.workspace.filesystem ?? workspaceConfig.filesystem;
const sandbox = registeredWorkspace?.workspace.sandbox ?? workspaceConfig.sandbox;
const filesystemConfig = typeof workspaceConfig.filesystem === "object" && workspaceConfig.filesystem && "config" in workspaceConfig.filesystem ? workspaceConfig.filesystem.config : {};
const sandboxConfig = typeof workspaceConfig.sandbox === "object" && workspaceConfig.sandbox && "config" in workspaceConfig.sandbox ? workspaceConfig.sandbox.config : {};
workspace = {
type: workspaceRef?.type ?? null,
workspaceId: workspaceRef?.workspaceId ?? null,
name: workspaceConfig.name ?? registeredWorkspace?.workspace.name ?? null,
source: registeredWorkspace?.source ?? null,
registered: !!registeredWorkspace,
hasFilesystem: !!filesystem,
hasSandbox: !!sandbox,
filesystemProvider: getProviderName(filesystem),
sandboxProvider: getProviderName(sandbox),
config: [
...getConfigEntries(filesystemConfig).map((entry) => ({ ...entry, key: `filesystem.${entry.key}` })),
...getConfigEntries(sandboxConfig).map((entry) => ({ ...entry, key: `sandbox.${entry.key}` }))
]
};
}
return { channels, browser, workspace, registries };
} catch (error) {
return handleError(error, "Error getting infrastructure status");
}
}
});
export { GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE, GET_EDITOR_BUILDER_SETTINGS_ROUTE, GET_INFRASTRUCTURE_STATUS_ROUTE, isBuilderFeatureEnabled, requireBuilderFeature };
//# sourceMappingURL=chunk-YN5ILIRE.js.map
//# sourceMappingURL=chunk-YN5ILIRE.js.map
{"version":3,"sources":["../src/server/utils/resolve-builder-model-policy.ts","../src/server/handlers/editor-builder.ts"],"names":[],"mappings":"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","file":"chunk-YN5ILIRE.js","sourcesContent":["import type { BuilderModelPolicy } from '@mastra/core/agent-builder/ee';\nimport type { IMastraEditor } from '@mastra/core/editor';\n\n/**\n * Server-side wrapper around `builderToModelPolicy`.\n *\n * Handles the optional `IMastraEditor` builder API surface (older / OSS editors\n * may not implement `hasEnabledBuilderConfig` / `resolveBuilder`) and returns\n * a uniform `BuilderModelPolicy` to every call site.\n *\n * Returns `{ active: false }` whenever:\n * - no editor is configured,\n * - the editor doesn't expose builder methods,\n * - the builder config is disabled, or\n * - resolving the builder fails / yields nothing.\n *\n * The `@mastra/core/agent-builder/ee` subpath is loaded lazily so this module\n * remains importable on `@mastra/core` versions that pre-date the subpath\n * (the subpath was added in core 1.34.0). The dynamic import is only reached\n * once an editor is actually configured, by which point a compatible core is\n * guaranteed.\n */\nexport async function resolveBuilderModelPolicy(editor: IMastraEditor | undefined): Promise<BuilderModelPolicy> {\n if (!editor) return { active: false };\n if (typeof editor.resolveBuilder !== 'function') return { active: false };\n if (typeof editor.hasEnabledBuilderConfig === 'function' && !editor.hasEnabledBuilderConfig()) {\n return { active: false };\n }\n\n // Degrade to inactive on builder-resolution failure rather than letting the\n // rejection escape: agent execution routes seed this on every request, so a\n // transient failure must not 500 the entire route.\n try {\n const builder = await editor.resolveBuilder();\n const { builderToModelPolicy } = await import('@mastra/core/agent-builder/ee');\n return builderToModelPolicy(builder);\n } catch {\n return { active: false };\n }\n}\n","import type { Mastra } from '@mastra/core';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentFeaturesSchema,\n builderAvailableModelsResponseSchema,\n builderSettingsResponseSchema,\n infrastructureStatusResponseSchema,\n} from '../schemas/editor-builder';\nimport type { AgentFeatures, InfrastructureStatus } from '../schemas/editor-builder';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { resolveBuilderModelPolicy } from '../utils/resolve-builder-model-policy';\nimport { buildProvidersList } from './agents';\nimport { handleError } from './error';\n\n/**\n * Resolve the active builder feature flags. Returns `null` when the editor is\n * absent, the builder is disabled, or no features are configured.\n */\nasync function resolveBuilderFeatures(mastra: Mastra): Promise<AgentFeatures | null> {\n const editor = mastra.getEditor();\n if (!editor || typeof editor.resolveBuilder !== 'function') return null;\n if (!editor.hasEnabledBuilderConfig?.()) return null;\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) return null;\n const features = builder.getFeatures?.()?.agent;\n if (!features) return null;\n // Validate the shape so unknown keys cannot smuggle through.\n const parsed = agentFeaturesSchema.safeParse(features);\n return parsed.success ? parsed.data : null;\n}\n\n/**\n * Returns whether a given agent-builder feature is enabled. Used by list /\n * get-by-id handlers to soft-gate response enrichment (omit fields, ignore\n * favoritedOnly / pinFavoritedFor params) when the feature is off.\n */\nexport async function isBuilderFeatureEnabled(mastra: Mastra, feature: keyof AgentFeatures): Promise<boolean> {\n const features = await resolveBuilderFeatures(mastra);\n return features?.[feature] === true;\n}\n\n/**\n * Hard-gate helper for mutation routes that must not exist when the feature\n * is off. Throws `HTTPException(404)` so we don't leak the existence of the\n * feature surface (matches behavior of unregistered routes).\n */\nexport async function requireBuilderFeature(mastra: Mastra, feature: keyof AgentFeatures): Promise<void> {\n if (!(await isBuilderFeatureEnabled(mastra, feature))) {\n throw new HTTPException(404, { message: 'Not Found' });\n }\n}\n\n/**\n * GET /editor/builder/settings\n *\n * Returns the agent builder settings configured by the admin.\n * Used by frontend to determine which features to display.\n */\nexport const GET_EDITOR_BUILDER_SETTINGS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/settings',\n responseType: 'json',\n responseSchema: builderSettingsResponseSchema,\n summary: 'Get agent builder settings',\n description: 'Returns the agent builder feature flags and configuration for UI gating',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n const editor = mastra.getEditor();\n\n // No editor configured\n if (!editor) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Editor doesn't support builder (older version or OSS)\n if (typeof editor.resolveBuilder !== 'function') {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Check if builder is enabled in config\n if (!editor.hasEnabledBuilderConfig?.()) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Resolve the builder instance\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n const baseWarnings = builder.getModelPolicyWarnings?.() ?? [];\n const configuration = builder.getConfiguration();\n\n // Picker allowlists are written against entity `.id` (what users see in\n // the UI, URLs, traces). The client filters list responses by their\n // response keys, which are not always `.id`:\n // - GET /agents keys by `agent.id`\n // - GET /tools keys by registration key (values include `id`)\n // - GET /workflows keys by registration key (values omit `id`)\n // To keep the client filter simple, we accept `.id` (fallback to\n // registration key) for matching, but emit visible IDs as response keys\n // so `Object.keys(data)` lines up.\n type AliasPair = { id: string; key: string };\n const collectAliases = (registry: Record<string, unknown>): AliasPair[] =>\n Object.entries(registry).map(([key, entity]) => ({\n id: (entity as { id?: string }).id || key,\n key,\n }));\n\n const toolAliases = collectAliases(mastra.listTools() ?? {});\n const agentAliases = collectAliases(mastra.listAgents() ?? {});\n const workflowAliases = collectAliases(mastra.listWorkflows() ?? {});\n\n // Tools/workflows responses are keyed by registration key. Agents\n // response is keyed by `.id`.\n const toResponseKey = (aliases: AliasPair[], byId: 'id' | 'key') => {\n const map = new Map<string, string>();\n for (const a of aliases) {\n map.set(a.id, byId === 'id' ? a.id : a.key);\n map.set(a.key, byId === 'id' ? a.id : a.key);\n }\n return map;\n };\n const toolKeyMap = toResponseKey(toolAliases, 'key');\n const agentKeyMap = toResponseKey(agentAliases, 'id');\n const workflowKeyMap = toResponseKey(workflowAliases, 'key');\n\n // Lazy-load the EE subpath so this module remains importable on\n // `@mastra/core` versions that pre-date it (added in core 1.34.0).\n // We only reach here after `builder.enabled` is true, which guarantees\n // a compatible core.\n const { builderToModelPolicy, resolvePickerVisibility } = await import('@mastra/core/agent-builder/ee');\n\n const picker = resolvePickerVisibility({\n config: configuration?.agent,\n registeredToolIds: toolAliases.flatMap(a => [a.id, a.key]),\n registeredAgentIds: agentAliases.flatMap(a => [a.id, a.key]),\n registeredWorkflowIds: workflowAliases.flatMap(a => [a.id, a.key]),\n });\n\n const normalize = (visible: string[] | null, map: Map<string, string>): string[] | null => {\n if (visible === null) return null;\n const out: string[] = [];\n const seen = new Set<string>();\n for (const id of visible) {\n const mapped = map.get(id);\n if (mapped && !seen.has(mapped)) {\n seen.add(mapped);\n out.push(mapped);\n }\n }\n return out;\n };\n\n const modelPolicyWarnings = [...baseWarnings, ...picker.warnings];\n\n return {\n enabled: true,\n features: builder.getFeatures(),\n configuration,\n modelPolicy: builderToModelPolicy(builder),\n picker: {\n visibleTools: normalize(picker.visibleTools, toolKeyMap),\n visibleAgents: normalize(picker.visibleAgents, agentKeyMap),\n visibleWorkflows: normalize(picker.visibleWorkflows, workflowKeyMap),\n },\n ...(modelPolicyWarnings.length > 0 ? { modelPolicyWarnings } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error getting builder settings');\n }\n },\n});\n\n/**\n * GET /editor/builder/models/available\n *\n * Returns the configured AI providers/models the agent builder may use. The\n * server is the single authority: it scopes the list to providers with a\n * configured API key (`connected`) and applies the active builder model\n * policy via `isModelAllowed`, so the Studio surfaces can render the response\n * verbatim without importing any EE matcher into the browser.\n *\n * - Providers without a configured API key are always omitted — the builder\n * decides the agent's model from this list, so an unconnected provider would\n * produce an agent that can never run.\n * - Policy inactive (or no allowlist) ⇒ all connected providers are returned.\n * - Policy active with an allowlist ⇒ each connected provider's models are\n * filtered, and providers left with no allowed models are omitted entirely.\n */\nexport const GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/models/available',\n responseType: 'json',\n responseSchema: builderAvailableModelsResponseSchema,\n summary: 'List builder-available AI models',\n description: 'Returns AI providers/models filtered by the active agent-builder model policy.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n // Only surface providers whose API key is configured (`connected`). The\n // agent builder decides the agent's model from this list, so including\n // providers without a key lets it pick a model that can never run. We\n // scope to connected providers so every choice is actually usable.\n const providers = (await buildProvidersList(mastra)).filter(provider => provider.connected);\n const policy = await resolveBuilderModelPolicy(mastra.getEditor());\n\n // Inactive policy (or no allowlist) ⇒ no allowlist filtering to apply.\n if (!policy.active || !policy.allowed || policy.allowed.length === 0) {\n return { providers };\n }\n\n // Lazy-load the EE matcher (server-only); mirrors the convention used by\n // resolve-builder-model-policy and the settings handler.\n const { isModelAllowed } = await import('@mastra/core/agent-builder/ee');\n\n const filtered = providers\n .map(provider => ({\n ...provider,\n models: provider.models.filter(modelId => isModelAllowed(policy.allowed, { provider: provider.id, modelId })),\n }))\n .filter(provider => provider.models.length > 0);\n\n return { providers: filtered };\n } catch (error) {\n return handleError(error, 'Error fetching available models');\n }\n },\n});\n\n/**\n * GET /editor/builder/infrastructure\n *\n * Returns the runtime status of Mastra-opinionated primitives (channels,\n * browser providers, workspaces). Admin-only; surfaced in Studio Settings so\n * admins can sanity-check what's wired up to the running server.\n */\nexport const GET_INFRASTRUCTURE_STATUS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/infrastructure',\n responseType: 'json',\n responseSchema: infrastructureStatusResponseSchema,\n summary: 'Get infrastructure status',\n description: 'Agent Builder infrastructure configuration and lightweight runtime status.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'infrastructure:read',\n handler: async ({ mastra }) => {\n try {\n const formatConfigValue = (value: unknown): string => {\n if (value === null || value === undefined) return 'not set';\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (Array.isArray(value)) return `${value.length} item${value.length === 1 ? '' : 's'}`;\n return value.constructor?.name && value.constructor.name !== 'Object' ? value.constructor.name : 'configured';\n };\n\n const getProviderName = (value: unknown): string | null => {\n if (!value) return null;\n if (typeof value === 'object' && 'provider' in value && typeof value.provider === 'string')\n return value.provider;\n if (typeof value === 'object' && 'constructor' in value) {\n const name = (value as { constructor?: { name?: string } }).constructor?.name;\n return name && name !== 'Object' ? name : 'configured';\n }\n return null;\n };\n\n const getConfigEntries = (config: Record<string, unknown>, omittedKeys: string[] = []) =>\n Object.entries(config)\n .filter(([key, value]) => !omittedKeys.includes(key) && value !== undefined && value !== null)\n .map(([key, value]) => ({ key, value: formatConfigValue(value) }));\n\n const channelProviders = mastra.getChannelProviders() ?? {};\n const channels: InfrastructureStatus['channels'] = {\n providers: Object.entries(channelProviders)\n .map(([id, provider]) => {\n const info = provider.getInfo?.();\n const routes = provider.getRoutes?.() ?? [];\n return {\n id: info?.id ?? id,\n name: info?.name ?? id,\n isConfigured: info?.isConfigured ?? false,\n routeCount: routes.length,\n };\n })\n .filter(provider => provider.isConfigured),\n };\n\n const editor = mastra.getEditor();\n let browser: InfrastructureStatus['browser'] = {\n type: null,\n provider: null,\n env: null,\n registered: false,\n availableProviders: [],\n config: [],\n };\n let workspace: InfrastructureStatus['workspace'] = {\n type: null,\n workspaceId: null,\n name: null,\n source: null,\n registered: false,\n hasFilesystem: false,\n hasSandbox: false,\n filesystemProvider: null,\n sandboxProvider: null,\n config: [],\n };\n let registries: InfrastructureStatus['registries'] = {\n skillsSh: { enabled: false },\n };\n\n if (editor?.resolveBuilder) {\n const browsers = (editor as unknown as { __browsers?: Map<string, unknown> }).__browsers;\n const builder = await editor.resolveBuilder();\n const builderRegistries = builder?.getRegistries?.();\n registries = {\n skillsSh: { enabled: builderRegistries?.skillsSh?.enabled === true },\n };\n const configuration = builder?.getConfiguration?.()?.agent as\n | {\n browser?: { type?: string; config?: { provider?: string; env?: string } };\n workspace?: {\n type?: string;\n workspaceId?: string;\n config?: { name?: string; filesystem?: unknown; sandbox?: unknown };\n };\n }\n | undefined;\n\n const browserRef = configuration?.browser;\n const browserConfig = browserRef?.config ?? {};\n const providerId = browserConfig.provider ?? null;\n browser = {\n type: browserRef?.type ?? null,\n provider: providerId,\n env: browserConfig.env ?? null,\n registered: providerId ? !!browsers?.has(providerId) : false,\n availableProviders: browsers ? Array.from(browsers.keys()) : [],\n config: getConfigEntries(browserConfig, ['provider', 'env']),\n };\n\n const workspaceRef = configuration?.workspace;\n const workspaceConfig = workspaceRef?.config ?? {};\n const registeredWorkspaces = mastra.listWorkspaces();\n const registeredWorkspace = workspaceRef?.workspaceId\n ? registeredWorkspaces[workspaceRef.workspaceId]\n : undefined;\n const filesystem = registeredWorkspace?.workspace.filesystem ?? workspaceConfig.filesystem;\n const sandbox = registeredWorkspace?.workspace.sandbox ?? workspaceConfig.sandbox;\n const filesystemConfig =\n typeof workspaceConfig.filesystem === 'object' &&\n workspaceConfig.filesystem &&\n 'config' in workspaceConfig.filesystem\n ? (workspaceConfig.filesystem.config as Record<string, unknown>)\n : {};\n const sandboxConfig =\n typeof workspaceConfig.sandbox === 'object' && workspaceConfig.sandbox && 'config' in workspaceConfig.sandbox\n ? (workspaceConfig.sandbox.config as Record<string, unknown>)\n : {};\n workspace = {\n type: workspaceRef?.type ?? null,\n workspaceId: workspaceRef?.workspaceId ?? null,\n name: workspaceConfig.name ?? registeredWorkspace?.workspace.name ?? null,\n source: registeredWorkspace?.source ?? null,\n registered: !!registeredWorkspace,\n hasFilesystem: !!filesystem,\n hasSandbox: !!sandbox,\n filesystemProvider: getProviderName(filesystem),\n sandboxProvider: getProviderName(sandbox),\n config: [\n ...getConfigEntries(filesystemConfig).map(entry => ({ ...entry, key: `filesystem.${entry.key}` })),\n ...getConfigEntries(sandboxConfig).map(entry => ({ ...entry, key: `sandbox.${entry.key}` })),\n ],\n };\n }\n\n return { channels, browser, workspace, registries };\n } catch (error) {\n return handleError(error, 'Error getting infrastructure status');\n }\n },\n});\n"]}
+1
-1
{
"version": "1.52.1",
"version": "1.52.2-alpha.0",
"package": "@mastra/server",

@@ -4,0 +4,0 @@ "exports": {},

@@ -6,3 +6,3 @@ ---

package: "@mastra/server"
version: "1.52.1"
version: "1.52.2-alpha.0"
---

@@ -9,0 +9,0 @@

@@ -6,12 +6,12 @@ 'use strict';

var chunkN752ZCPA_cjs = require('../chunk-N752ZCPA.cjs');
var chunkOLYSNWQP_cjs = require('../chunk-OLYSNWQP.cjs');
var chunkD3NGCHN4_cjs = require('../chunk-D3NGCHN4.cjs');
var chunkXOBJYUKX_cjs = require('../chunk-XOBJYUKX.cjs');
var chunkUGQH3IIT_cjs = require('../chunk-UGQH3IIT.cjs');
var chunkY4O5EGAC_cjs = require('../chunk-Y4O5EGAC.cjs');
var chunkIDCO7C4M_cjs = require('../chunk-IDCO7C4M.cjs');
var chunkT2P7FDNG_cjs = require('../chunk-T2P7FDNG.cjs');
var chunkLERI4STI_cjs = require('../chunk-LERI4STI.cjs');
var chunkWCTXV424_cjs = require('../chunk-WCTXV424.cjs');
var chunkJ4B6JVWR_cjs = require('../chunk-J4B6JVWR.cjs');
var chunk7WMI6EAV_cjs = require('../chunk-7WMI6EAV.cjs');
var chunkUSKSOKOS_cjs = require('../chunk-USKSOKOS.cjs');
var chunkLVCJ4W5T_cjs = require('../chunk-LVCJ4W5T.cjs');
var chunkW243A6ZK_cjs = require('../chunk-W243A6ZK.cjs');
var chunkVUQNCTOR_cjs = require('../chunk-VUQNCTOR.cjs');
var chunkBPREBJ3Z_cjs = require('../chunk-BPREBJ3Z.cjs');
var chunk55DF3BIU_cjs = require('../chunk-55DF3BIU.cjs');

@@ -37,11 +37,11 @@ var chunkNKG3PCTS_cjs = require('../chunk-NKG3PCTS.cjs');

enumerable: true,
get: function () { return chunkOLYSNWQP_cjs.tools_exports; }
get: function () { return chunkUGQH3IIT_cjs.tools_exports; }
});
Object.defineProperty(exports, "scores", {
enumerable: true,
get: function () { return chunkD3NGCHN4_cjs.scores_exports; }
get: function () { return chunkY4O5EGAC_cjs.scores_exports; }
});
Object.defineProperty(exports, "responses", {
enumerable: true,
get: function () { return chunkXOBJYUKX_cjs.responses_exports; }
get: function () { return chunkIDCO7C4M_cjs.responses_exports; }
});

@@ -62,3 +62,3 @@ Object.defineProperty(exports, "mcp", {

enumerable: true,
get: function () { return chunkJ4B6JVWR_cjs.conversations_exports; }
get: function () { return chunk7WMI6EAV_cjs.conversations_exports; }
});

@@ -71,7 +71,7 @@ Object.defineProperty(exports, "logs", {

enumerable: true,
get: function () { return chunkLVCJ4W5T_cjs.a2a_exports; }
get: function () { return chunkVUQNCTOR_cjs.a2a_exports; }
});
Object.defineProperty(exports, "agents", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.agents_exports; }
get: function () { return chunkBPREBJ3Z_cjs.agents_exports; }
});

@@ -78,0 +78,0 @@ Object.defineProperty(exports, "agentBuilder", {

export { vector_exports as vector } from '../chunk-HP7234Q6.js';
export { voice_exports as voice } from '../chunk-2YL7Z4BF.js';
export { workspace_exports as workspace } from '../chunk-3H36PZH5.js';
export { tools_exports as tools } from '../chunk-QHALAWTW.js';
export { scores_exports as scores } from '../chunk-SHQ5UYM7.js';
export { responses_exports as responses } from '../chunk-6LKY2RDJ.js';
export { tools_exports as tools } from '../chunk-EJFNGIUY.js';
export { scores_exports as scores } from '../chunk-UWFWR77Y.js';
export { responses_exports as responses } from '../chunk-JQRNW7TI.js';
export { mcp_exports as mcp } from '../chunk-T272I2ME.js';
export { memory_exports as memory } from '../chunk-AJXH4AOX.js';
export { observability_exports as observability } from '../chunk-ZVTNACHY.js';
export { conversations_exports as conversations } from '../chunk-2FNOQ5EO.js';
export { conversations_exports as conversations } from '../chunk-6POMTBSS.js';
export { logs_exports as logs } from '../chunk-5ZFBQKCW.js';
export { a2a_exports as a2a } from '../chunk-5GOTSBKU.js';
export { agents_exports as agents } from '../chunk-XORQIQXT.js';
export { a2a_exports as a2a } from '../chunk-YCO7GF33.js';
export { agents_exports as agents } from '../chunk-4AGRNM7F.js';
export { agent_builder_exports as agentBuilder } from '../chunk-TRLQF6DU.js';

@@ -15,0 +15,0 @@ export { workflows_exports as workflows } from '../chunk-TKOUI25C.js';

'use strict';
var chunkLVCJ4W5T_cjs = require('../../chunk-LVCJ4W5T.cjs');
var chunkVUQNCTOR_cjs = require('../../chunk-VUQNCTOR.cjs');

@@ -9,53 +9,53 @@

enumerable: true,
get: function () { return chunkLVCJ4W5T_cjs.AGENT_EXECUTION_ROUTE; }
get: function () { return chunkVUQNCTOR_cjs.AGENT_EXECUTION_ROUTE; }
});
Object.defineProperty(exports, "GET_AGENT_CARD_ROUTE", {
enumerable: true,
get: function () { return chunkLVCJ4W5T_cjs.GET_AGENT_CARD_ROUTE; }
get: function () { return chunkVUQNCTOR_cjs.GET_AGENT_CARD_ROUTE; }
});
Object.defineProperty(exports, "getAgentCardByIdHandler", {
enumerable: true,
get: function () { return chunkLVCJ4W5T_cjs.getAgentCardByIdHandler; }
get: function () { return chunkVUQNCTOR_cjs.getAgentCardByIdHandler; }
});
Object.defineProperty(exports, "getAgentExecutionHandler", {
enumerable: true,
get: function () { return chunkLVCJ4W5T_cjs.getAgentExecutionHandler; }
get: function () { return chunkVUQNCTOR_cjs.getAgentExecutionHandler; }
});
Object.defineProperty(exports, "handleDeleteTaskPushNotificationConfig", {
enumerable: true,
get: function () { return chunkLVCJ4W5T_cjs.handleDeleteTaskPushNotificationConfig; }
get: function () { return chunkVUQNCTOR_cjs.handleDeleteTaskPushNotificationConfig; }
});
Object.defineProperty(exports, "handleGetTaskPushNotificationConfig", {
enumerable: true,
get: function () { return chunkLVCJ4W5T_cjs.handleGetTaskPushNotificationConfig; }
get: function () { return chunkVUQNCTOR_cjs.handleGetTaskPushNotificationConfig; }
});
Object.defineProperty(exports, "handleListTaskPushNotificationConfig", {
enumerable: true,
get: function () { return chunkLVCJ4W5T_cjs.handleListTaskPushNotificationConfig; }
get: function () { return chunkVUQNCTOR_cjs.handleListTaskPushNotificationConfig; }
});
Object.defineProperty(exports, "handleMessageSend", {
enumerable: true,
get: function () { return chunkLVCJ4W5T_cjs.handleMessageSend; }
get: function () { return chunkVUQNCTOR_cjs.handleMessageSend; }
});
Object.defineProperty(exports, "handleMessageStream", {
enumerable: true,
get: function () { return chunkLVCJ4W5T_cjs.handleMessageStream; }
get: function () { return chunkVUQNCTOR_cjs.handleMessageStream; }
});
Object.defineProperty(exports, "handleSetTaskPushNotificationConfig", {
enumerable: true,
get: function () { return chunkLVCJ4W5T_cjs.handleSetTaskPushNotificationConfig; }
get: function () { return chunkVUQNCTOR_cjs.handleSetTaskPushNotificationConfig; }
});
Object.defineProperty(exports, "handleTaskCancel", {
enumerable: true,
get: function () { return chunkLVCJ4W5T_cjs.handleTaskCancel; }
get: function () { return chunkVUQNCTOR_cjs.handleTaskCancel; }
});
Object.defineProperty(exports, "handleTaskGet", {
enumerable: true,
get: function () { return chunkLVCJ4W5T_cjs.handleTaskGet; }
get: function () { return chunkVUQNCTOR_cjs.handleTaskGet; }
});
Object.defineProperty(exports, "handleTaskResubscribe", {
enumerable: true,
get: function () { return chunkLVCJ4W5T_cjs.handleTaskResubscribe; }
get: function () { return chunkVUQNCTOR_cjs.handleTaskResubscribe; }
});
//# sourceMappingURL=a2a.cjs.map
//# sourceMappingURL=a2a.cjs.map

@@ -1,3 +0,3 @@

export { AGENT_EXECUTION_ROUTE, GET_AGENT_CARD_ROUTE, getAgentCardByIdHandler, getAgentExecutionHandler, handleDeleteTaskPushNotificationConfig, handleGetTaskPushNotificationConfig, handleListTaskPushNotificationConfig, handleMessageSend, handleMessageStream, handleSetTaskPushNotificationConfig, handleTaskCancel, handleTaskGet, handleTaskResubscribe } from '../../chunk-5GOTSBKU.js';
export { AGENT_EXECUTION_ROUTE, GET_AGENT_CARD_ROUTE, getAgentCardByIdHandler, getAgentExecutionHandler, handleDeleteTaskPushNotificationConfig, handleGetTaskPushNotificationConfig, handleListTaskPushNotificationConfig, handleMessageSend, handleMessageStream, handleSetTaskPushNotificationConfig, handleTaskCancel, handleTaskGet, handleTaskResubscribe } from '../../chunk-YCO7GF33.js';
//# sourceMappingURL=a2a.js.map
//# sourceMappingURL=a2a.js.map
'use strict';
var chunkYQIMII7K_cjs = require('../../chunk-YQIMII7K.cjs');
var chunkO4PNIMVX_cjs = require('../../chunk-O4PNIMVX.cjs');

@@ -9,29 +9,29 @@

enumerable: true,
get: function () { return chunkYQIMII7K_cjs.ACTIVATE_AGENT_VERSION_ROUTE; }
get: function () { return chunkO4PNIMVX_cjs.ACTIVATE_AGENT_VERSION_ROUTE; }
});
Object.defineProperty(exports, "COMPARE_AGENT_VERSIONS_ROUTE", {
enumerable: true,
get: function () { return chunkYQIMII7K_cjs.COMPARE_AGENT_VERSIONS_ROUTE; }
get: function () { return chunkO4PNIMVX_cjs.COMPARE_AGENT_VERSIONS_ROUTE; }
});
Object.defineProperty(exports, "CREATE_AGENT_VERSION_ROUTE", {
enumerable: true,
get: function () { return chunkYQIMII7K_cjs.CREATE_AGENT_VERSION_ROUTE; }
get: function () { return chunkO4PNIMVX_cjs.CREATE_AGENT_VERSION_ROUTE; }
});
Object.defineProperty(exports, "DELETE_AGENT_VERSION_ROUTE", {
enumerable: true,
get: function () { return chunkYQIMII7K_cjs.DELETE_AGENT_VERSION_ROUTE; }
get: function () { return chunkO4PNIMVX_cjs.DELETE_AGENT_VERSION_ROUTE; }
});
Object.defineProperty(exports, "GET_AGENT_VERSION_ROUTE", {
enumerable: true,
get: function () { return chunkYQIMII7K_cjs.GET_AGENT_VERSION_ROUTE; }
get: function () { return chunkO4PNIMVX_cjs.GET_AGENT_VERSION_ROUTE; }
});
Object.defineProperty(exports, "LIST_AGENT_VERSIONS_ROUTE", {
enumerable: true,
get: function () { return chunkYQIMII7K_cjs.LIST_AGENT_VERSIONS_ROUTE; }
get: function () { return chunkO4PNIMVX_cjs.LIST_AGENT_VERSIONS_ROUTE; }
});
Object.defineProperty(exports, "RESTORE_AGENT_VERSION_ROUTE", {
enumerable: true,
get: function () { return chunkYQIMII7K_cjs.RESTORE_AGENT_VERSION_ROUTE; }
get: function () { return chunkO4PNIMVX_cjs.RESTORE_AGENT_VERSION_ROUTE; }
});
//# sourceMappingURL=agent-versions.cjs.map
//# sourceMappingURL=agent-versions.cjs.map

@@ -1,3 +0,3 @@

export { ACTIVATE_AGENT_VERSION_ROUTE, COMPARE_AGENT_VERSIONS_ROUTE, CREATE_AGENT_VERSION_ROUTE, DELETE_AGENT_VERSION_ROUTE, GET_AGENT_VERSION_ROUTE, LIST_AGENT_VERSIONS_ROUTE, RESTORE_AGENT_VERSION_ROUTE } from '../../chunk-YZNPRVOK.js';
export { ACTIVATE_AGENT_VERSION_ROUTE, COMPARE_AGENT_VERSIONS_ROUTE, CREATE_AGENT_VERSION_ROUTE, DELETE_AGENT_VERSION_ROUTE, GET_AGENT_VERSION_ROUTE, LIST_AGENT_VERSIONS_ROUTE, RESTORE_AGENT_VERSION_ROUTE } from '../../chunk-7OY3AGJJ.js';
//# sourceMappingURL=agent-versions.js.map
//# sourceMappingURL=agent-versions.js.map
'use strict';
var chunkW243A6ZK_cjs = require('../../chunk-W243A6ZK.cjs');
var chunkBPREBJ3Z_cjs = require('../../chunk-BPREBJ3Z.cjs');

@@ -9,189 +9,189 @@

enumerable: true,
get: function () { return chunkW243A6ZK_cjs.ABORT_AGENT_THREAD_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.ABORT_AGENT_THREAD_ROUTE; }
});
Object.defineProperty(exports, "APPROVE_NETWORK_TOOL_CALL_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.APPROVE_NETWORK_TOOL_CALL_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.APPROVE_NETWORK_TOOL_CALL_ROUTE; }
});
Object.defineProperty(exports, "APPROVE_TOOL_CALL_GENERATE_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.APPROVE_TOOL_CALL_GENERATE_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.APPROVE_TOOL_CALL_GENERATE_ROUTE; }
});
Object.defineProperty(exports, "APPROVE_TOOL_CALL_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.APPROVE_TOOL_CALL_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.APPROVE_TOOL_CALL_ROUTE; }
});
Object.defineProperty(exports, "CLONE_AGENT_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.CLONE_AGENT_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.CLONE_AGENT_ROUTE; }
});
Object.defineProperty(exports, "DECLINE_NETWORK_TOOL_CALL_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.DECLINE_NETWORK_TOOL_CALL_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.DECLINE_NETWORK_TOOL_CALL_ROUTE; }
});
Object.defineProperty(exports, "DECLINE_TOOL_CALL_GENERATE_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.DECLINE_TOOL_CALL_GENERATE_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.DECLINE_TOOL_CALL_GENERATE_ROUTE; }
});
Object.defineProperty(exports, "DECLINE_TOOL_CALL_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.DECLINE_TOOL_CALL_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.DECLINE_TOOL_CALL_ROUTE; }
});
Object.defineProperty(exports, "ENHANCE_INSTRUCTIONS_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.ENHANCE_INSTRUCTIONS_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.ENHANCE_INSTRUCTIONS_ROUTE; }
});
Object.defineProperty(exports, "GENERATE_AGENT_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.GENERATE_AGENT_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.GENERATE_AGENT_ROUTE; }
});
Object.defineProperty(exports, "GENERATE_AGENT_VNEXT_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.GENERATE_AGENT_VNEXT_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.GENERATE_AGENT_VNEXT_ROUTE; }
});
Object.defineProperty(exports, "GENERATE_LEGACY_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.GENERATE_LEGACY_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.GENERATE_LEGACY_ROUTE; }
});
Object.defineProperty(exports, "GET_AGENT_BY_ID_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.GET_AGENT_BY_ID_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.GET_AGENT_BY_ID_ROUTE; }
});
Object.defineProperty(exports, "GET_AGENT_SKILL_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.GET_AGENT_SKILL_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.GET_AGENT_SKILL_ROUTE; }
});
Object.defineProperty(exports, "GET_PROVIDERS_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.GET_PROVIDERS_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.GET_PROVIDERS_ROUTE; }
});
Object.defineProperty(exports, "LIST_AGENTS_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.LIST_AGENTS_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.LIST_AGENTS_ROUTE; }
});
Object.defineProperty(exports, "LIST_SUSPENDED_RUNS_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.LIST_SUSPENDED_RUNS_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.LIST_SUSPENDED_RUNS_ROUTE; }
});
Object.defineProperty(exports, "OBSERVE_AGENT_STREAM_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.OBSERVE_AGENT_STREAM_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.OBSERVE_AGENT_STREAM_ROUTE; }
});
Object.defineProperty(exports, "QUEUE_AGENT_MESSAGE_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.QUEUE_AGENT_MESSAGE_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.QUEUE_AGENT_MESSAGE_ROUTE; }
});
Object.defineProperty(exports, "RECOVER_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.RECOVER_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.RECOVER_ROUTE; }
});
Object.defineProperty(exports, "REORDER_AGENT_MODEL_LIST_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.REORDER_AGENT_MODEL_LIST_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.REORDER_AGENT_MODEL_LIST_ROUTE; }
});
Object.defineProperty(exports, "RESET_AGENT_MODEL_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.RESET_AGENT_MODEL_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.RESET_AGENT_MODEL_ROUTE; }
});
Object.defineProperty(exports, "RESUME_STREAM_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.RESUME_STREAM_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.RESUME_STREAM_ROUTE; }
});
Object.defineProperty(exports, "RESUME_STREAM_UNTIL_IDLE_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.RESUME_STREAM_UNTIL_IDLE_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.RESUME_STREAM_UNTIL_IDLE_ROUTE; }
});
Object.defineProperty(exports, "SEND_AGENT_MESSAGE_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.SEND_AGENT_MESSAGE_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.SEND_AGENT_MESSAGE_ROUTE; }
});
Object.defineProperty(exports, "SEND_AGENT_SIGNAL_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.SEND_AGENT_SIGNAL_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.SEND_AGENT_SIGNAL_ROUTE; }
});
Object.defineProperty(exports, "SEND_TOOL_APPROVAL_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.SEND_TOOL_APPROVAL_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.SEND_TOOL_APPROVAL_ROUTE; }
});
Object.defineProperty(exports, "STREAM_GENERATE_LEGACY_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.STREAM_GENERATE_LEGACY_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.STREAM_GENERATE_LEGACY_ROUTE; }
});
Object.defineProperty(exports, "STREAM_GENERATE_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.STREAM_GENERATE_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.STREAM_GENERATE_ROUTE; }
});
Object.defineProperty(exports, "STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE; }
});
Object.defineProperty(exports, "STREAM_NETWORK_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.STREAM_NETWORK_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.STREAM_NETWORK_ROUTE; }
});
Object.defineProperty(exports, "STREAM_UI_MESSAGE_DEPRECATED_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.STREAM_UI_MESSAGE_DEPRECATED_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.STREAM_UI_MESSAGE_DEPRECATED_ROUTE; }
});
Object.defineProperty(exports, "STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE; }
});
Object.defineProperty(exports, "STREAM_UNTIL_IDLE_GENERATE_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.STREAM_UNTIL_IDLE_GENERATE_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.STREAM_UNTIL_IDLE_GENERATE_ROUTE; }
});
Object.defineProperty(exports, "STREAM_VNEXT_DEPRECATED_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.STREAM_VNEXT_DEPRECATED_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.STREAM_VNEXT_DEPRECATED_ROUTE; }
});
Object.defineProperty(exports, "SUBSCRIBE_AGENT_THREAD_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.SUBSCRIBE_AGENT_THREAD_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.SUBSCRIBE_AGENT_THREAD_ROUTE; }
});
Object.defineProperty(exports, "UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE; }
});
Object.defineProperty(exports, "UPDATE_AGENT_MODEL_ROUTE", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.UPDATE_AGENT_MODEL_ROUTE; }
get: function () { return chunkBPREBJ3Z_cjs.UPDATE_AGENT_MODEL_ROUTE; }
});
Object.defineProperty(exports, "buildProvidersList", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.buildProvidersList; }
get: function () { return chunkBPREBJ3Z_cjs.buildProvidersList; }
});
Object.defineProperty(exports, "extractVersionOptions", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.extractVersionOptions; }
get: function () { return chunkBPREBJ3Z_cjs.extractVersionOptions; }
});
Object.defineProperty(exports, "getAgentFromSystem", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.getAgentFromSystem; }
get: function () { return chunkBPREBJ3Z_cjs.getAgentFromSystem; }
});
Object.defineProperty(exports, "getBrowserToolsFromAgent", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.getBrowserToolsFromAgent; }
get: function () { return chunkBPREBJ3Z_cjs.getBrowserToolsFromAgent; }
});
Object.defineProperty(exports, "getSerializedAgentTools", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.getSerializedAgentTools; }
get: function () { return chunkBPREBJ3Z_cjs.getSerializedAgentTools; }
});
Object.defineProperty(exports, "getSerializedProcessors", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.getSerializedProcessors; }
get: function () { return chunkBPREBJ3Z_cjs.getSerializedProcessors; }
});
Object.defineProperty(exports, "getSerializedSkillsFromAgent", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.getSerializedSkillsFromAgent; }
get: function () { return chunkBPREBJ3Z_cjs.getSerializedSkillsFromAgent; }
});
Object.defineProperty(exports, "getWorkspaceToolsFromAgent", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.getWorkspaceToolsFromAgent; }
get: function () { return chunkBPREBJ3Z_cjs.getWorkspaceToolsFromAgent; }
});
Object.defineProperty(exports, "isProviderConnected", {
enumerable: true,
get: function () { return chunkW243A6ZK_cjs.isProviderConnected; }
get: function () { return chunkBPREBJ3Z_cjs.isProviderConnected; }
});
//# sourceMappingURL=agents.cjs.map
//# sourceMappingURL=agents.cjs.map

@@ -1,3 +0,3 @@

export { ABORT_AGENT_THREAD_ROUTE, APPROVE_NETWORK_TOOL_CALL_ROUTE, APPROVE_TOOL_CALL_GENERATE_ROUTE, APPROVE_TOOL_CALL_ROUTE, CLONE_AGENT_ROUTE, DECLINE_NETWORK_TOOL_CALL_ROUTE, DECLINE_TOOL_CALL_GENERATE_ROUTE, DECLINE_TOOL_CALL_ROUTE, ENHANCE_INSTRUCTIONS_ROUTE, GENERATE_AGENT_ROUTE, GENERATE_AGENT_VNEXT_ROUTE, GENERATE_LEGACY_ROUTE, GET_AGENT_BY_ID_ROUTE, GET_AGENT_SKILL_ROUTE, GET_PROVIDERS_ROUTE, LIST_AGENTS_ROUTE, LIST_SUSPENDED_RUNS_ROUTE, OBSERVE_AGENT_STREAM_ROUTE, QUEUE_AGENT_MESSAGE_ROUTE, RECOVER_ROUTE, REORDER_AGENT_MODEL_LIST_ROUTE, RESET_AGENT_MODEL_ROUTE, RESUME_STREAM_ROUTE, RESUME_STREAM_UNTIL_IDLE_ROUTE, SEND_AGENT_MESSAGE_ROUTE, SEND_AGENT_SIGNAL_ROUTE, SEND_TOOL_APPROVAL_ROUTE, STREAM_GENERATE_LEGACY_ROUTE, STREAM_GENERATE_ROUTE, STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE, STREAM_NETWORK_ROUTE, STREAM_UI_MESSAGE_DEPRECATED_ROUTE, STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE, STREAM_UNTIL_IDLE_GENERATE_ROUTE, STREAM_VNEXT_DEPRECATED_ROUTE, SUBSCRIBE_AGENT_THREAD_ROUTE, UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE, UPDATE_AGENT_MODEL_ROUTE, buildProvidersList, extractVersionOptions, getAgentFromSystem, getBrowserToolsFromAgent, getSerializedAgentTools, getSerializedProcessors, getSerializedSkillsFromAgent, getWorkspaceToolsFromAgent, isProviderConnected } from '../../chunk-XORQIQXT.js';
export { ABORT_AGENT_THREAD_ROUTE, APPROVE_NETWORK_TOOL_CALL_ROUTE, APPROVE_TOOL_CALL_GENERATE_ROUTE, APPROVE_TOOL_CALL_ROUTE, CLONE_AGENT_ROUTE, DECLINE_NETWORK_TOOL_CALL_ROUTE, DECLINE_TOOL_CALL_GENERATE_ROUTE, DECLINE_TOOL_CALL_ROUTE, ENHANCE_INSTRUCTIONS_ROUTE, GENERATE_AGENT_ROUTE, GENERATE_AGENT_VNEXT_ROUTE, GENERATE_LEGACY_ROUTE, GET_AGENT_BY_ID_ROUTE, GET_AGENT_SKILL_ROUTE, GET_PROVIDERS_ROUTE, LIST_AGENTS_ROUTE, LIST_SUSPENDED_RUNS_ROUTE, OBSERVE_AGENT_STREAM_ROUTE, QUEUE_AGENT_MESSAGE_ROUTE, RECOVER_ROUTE, REORDER_AGENT_MODEL_LIST_ROUTE, RESET_AGENT_MODEL_ROUTE, RESUME_STREAM_ROUTE, RESUME_STREAM_UNTIL_IDLE_ROUTE, SEND_AGENT_MESSAGE_ROUTE, SEND_AGENT_SIGNAL_ROUTE, SEND_TOOL_APPROVAL_ROUTE, STREAM_GENERATE_LEGACY_ROUTE, STREAM_GENERATE_ROUTE, STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE, STREAM_NETWORK_ROUTE, STREAM_UI_MESSAGE_DEPRECATED_ROUTE, STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE, STREAM_UNTIL_IDLE_GENERATE_ROUTE, STREAM_VNEXT_DEPRECATED_ROUTE, SUBSCRIBE_AGENT_THREAD_ROUTE, UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE, UPDATE_AGENT_MODEL_ROUTE, buildProvidersList, extractVersionOptions, getAgentFromSystem, getBrowserToolsFromAgent, getSerializedAgentTools, getSerializedProcessors, getSerializedSkillsFromAgent, getWorkspaceToolsFromAgent, isProviderConnected } from '../../chunk-4AGRNM7F.js';
//# sourceMappingURL=agents.js.map
//# sourceMappingURL=agents.js.map
'use strict';
var chunkJ4B6JVWR_cjs = require('../../chunk-J4B6JVWR.cjs');
var chunk7WMI6EAV_cjs = require('../../chunk-7WMI6EAV.cjs');

@@ -9,17 +9,17 @@

enumerable: true,
get: function () { return chunkJ4B6JVWR_cjs.CREATE_CONVERSATION_ROUTE; }
get: function () { return chunk7WMI6EAV_cjs.CREATE_CONVERSATION_ROUTE; }
});
Object.defineProperty(exports, "DELETE_CONVERSATION_ROUTE", {
enumerable: true,
get: function () { return chunkJ4B6JVWR_cjs.DELETE_CONVERSATION_ROUTE; }
get: function () { return chunk7WMI6EAV_cjs.DELETE_CONVERSATION_ROUTE; }
});
Object.defineProperty(exports, "GET_CONVERSATION_ITEMS_ROUTE", {
enumerable: true,
get: function () { return chunkJ4B6JVWR_cjs.GET_CONVERSATION_ITEMS_ROUTE; }
get: function () { return chunk7WMI6EAV_cjs.GET_CONVERSATION_ITEMS_ROUTE; }
});
Object.defineProperty(exports, "GET_CONVERSATION_ROUTE", {
enumerable: true,
get: function () { return chunkJ4B6JVWR_cjs.GET_CONVERSATION_ROUTE; }
get: function () { return chunk7WMI6EAV_cjs.GET_CONVERSATION_ROUTE; }
});
//# sourceMappingURL=conversations.cjs.map
//# sourceMappingURL=conversations.cjs.map

@@ -1,3 +0,3 @@

export { CREATE_CONVERSATION_ROUTE, DELETE_CONVERSATION_ROUTE, GET_CONVERSATION_ITEMS_ROUTE, GET_CONVERSATION_ROUTE } from '../../chunk-2FNOQ5EO.js';
export { CREATE_CONVERSATION_ROUTE, DELETE_CONVERSATION_ROUTE, GET_CONVERSATION_ITEMS_ROUTE, GET_CONVERSATION_ROUTE } from '../../chunk-6POMTBSS.js';
//# sourceMappingURL=conversations.js.map
//# sourceMappingURL=conversations.js.map
'use strict';
var chunkJ5RVSM7H_cjs = require('../../chunk-J5RVSM7H.cjs');
var chunkKI6RMI7A_cjs = require('../../chunk-KI6RMI7A.cjs');

@@ -9,21 +9,21 @@

enumerable: true,
get: function () { return chunkJ5RVSM7H_cjs.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE; }
get: function () { return chunkKI6RMI7A_cjs.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE; }
});
Object.defineProperty(exports, "GET_EDITOR_BUILDER_SETTINGS_ROUTE", {
enumerable: true,
get: function () { return chunkJ5RVSM7H_cjs.GET_EDITOR_BUILDER_SETTINGS_ROUTE; }
get: function () { return chunkKI6RMI7A_cjs.GET_EDITOR_BUILDER_SETTINGS_ROUTE; }
});
Object.defineProperty(exports, "GET_INFRASTRUCTURE_STATUS_ROUTE", {
enumerable: true,
get: function () { return chunkJ5RVSM7H_cjs.GET_INFRASTRUCTURE_STATUS_ROUTE; }
get: function () { return chunkKI6RMI7A_cjs.GET_INFRASTRUCTURE_STATUS_ROUTE; }
});
Object.defineProperty(exports, "isBuilderFeatureEnabled", {
enumerable: true,
get: function () { return chunkJ5RVSM7H_cjs.isBuilderFeatureEnabled; }
get: function () { return chunkKI6RMI7A_cjs.isBuilderFeatureEnabled; }
});
Object.defineProperty(exports, "requireBuilderFeature", {
enumerable: true,
get: function () { return chunkJ5RVSM7H_cjs.requireBuilderFeature; }
get: function () { return chunkKI6RMI7A_cjs.requireBuilderFeature; }
});
//# sourceMappingURL=editor-builder.cjs.map
//# sourceMappingURL=editor-builder.cjs.map

@@ -1,3 +0,3 @@

export { GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE, GET_EDITOR_BUILDER_SETTINGS_ROUTE, GET_INFRASTRUCTURE_STATUS_ROUTE, isBuilderFeatureEnabled, requireBuilderFeature } from '../../chunk-IKIPMMHL.js';
export { GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE, GET_EDITOR_BUILDER_SETTINGS_ROUTE, GET_INFRASTRUCTURE_STATUS_ROUTE, isBuilderFeatureEnabled, requireBuilderFeature } from '../../chunk-YN5ILIRE.js';
//# sourceMappingURL=editor-builder.js.map
//# sourceMappingURL=editor-builder.js.map
'use strict';
var chunkYUDME6CN_cjs = require('../../chunk-YUDME6CN.cjs');
var chunk5UUIMMDB_cjs = require('../../chunk-5UUIMMDB.cjs');

@@ -9,13 +9,13 @@

enumerable: true,
get: function () { return chunkYUDME6CN_cjs.enrichOrStripFavorites; }
get: function () { return chunk5UUIMMDB_cjs.enrichOrStripFavorites; }
});
Object.defineProperty(exports, "prepareFavoritesEnrichment", {
enumerable: true,
get: function () { return chunkYUDME6CN_cjs.prepareFavoritesEnrichment; }
get: function () { return chunk5UUIMMDB_cjs.prepareFavoritesEnrichment; }
});
Object.defineProperty(exports, "stripFavoriteFields", {
enumerable: true,
get: function () { return chunkYUDME6CN_cjs.stripFavoriteFields; }
get: function () { return chunk5UUIMMDB_cjs.stripFavoriteFields; }
});
//# sourceMappingURL=favorites-enrichment.cjs.map
//# sourceMappingURL=favorites-enrichment.cjs.map

@@ -1,3 +0,3 @@

export { enrichOrStripFavorites, prepareFavoritesEnrichment, stripFavoriteFields } from '../../chunk-VFIZ45BL.js';
export { enrichOrStripFavorites, prepareFavoritesEnrichment, stripFavoriteFields } from '../../chunk-DVBKBUY7.js';
//# sourceMappingURL=favorites-enrichment.js.map
//# sourceMappingURL=favorites-enrichment.js.map
'use strict';
var chunkXOBJYUKX_cjs = require('../../chunk-XOBJYUKX.cjs');
var chunkIDCO7C4M_cjs = require('../../chunk-IDCO7C4M.cjs');

@@ -9,13 +9,13 @@

enumerable: true,
get: function () { return chunkXOBJYUKX_cjs.CREATE_RESPONSE_ROUTE; }
get: function () { return chunkIDCO7C4M_cjs.CREATE_RESPONSE_ROUTE; }
});
Object.defineProperty(exports, "DELETE_RESPONSE_ROUTE", {
enumerable: true,
get: function () { return chunkXOBJYUKX_cjs.DELETE_RESPONSE_ROUTE; }
get: function () { return chunkIDCO7C4M_cjs.DELETE_RESPONSE_ROUTE; }
});
Object.defineProperty(exports, "GET_RESPONSE_ROUTE", {
enumerable: true,
get: function () { return chunkXOBJYUKX_cjs.GET_RESPONSE_ROUTE; }
get: function () { return chunkIDCO7C4M_cjs.GET_RESPONSE_ROUTE; }
});
//# sourceMappingURL=responses.cjs.map
//# sourceMappingURL=responses.cjs.map

@@ -1,3 +0,3 @@

export { CREATE_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE } from '../../chunk-6LKY2RDJ.js';
export { CREATE_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE } from '../../chunk-JQRNW7TI.js';
//# sourceMappingURL=responses.js.map
//# sourceMappingURL=responses.js.map
'use strict';
var chunkONVWPSQD_cjs = require('../../chunk-ONVWPSQD.cjs');
var chunkLYZLM7TQ_cjs = require('../../chunk-LYZLM7TQ.cjs');

@@ -9,29 +9,29 @@

enumerable: true,
get: function () { return chunkONVWPSQD_cjs.ACTIVATE_SCORER_VERSION_ROUTE; }
get: function () { return chunkLYZLM7TQ_cjs.ACTIVATE_SCORER_VERSION_ROUTE; }
});
Object.defineProperty(exports, "COMPARE_SCORER_VERSIONS_ROUTE", {
enumerable: true,
get: function () { return chunkONVWPSQD_cjs.COMPARE_SCORER_VERSIONS_ROUTE; }
get: function () { return chunkLYZLM7TQ_cjs.COMPARE_SCORER_VERSIONS_ROUTE; }
});
Object.defineProperty(exports, "CREATE_SCORER_VERSION_ROUTE", {
enumerable: true,
get: function () { return chunkONVWPSQD_cjs.CREATE_SCORER_VERSION_ROUTE; }
get: function () { return chunkLYZLM7TQ_cjs.CREATE_SCORER_VERSION_ROUTE; }
});
Object.defineProperty(exports, "DELETE_SCORER_VERSION_ROUTE", {
enumerable: true,
get: function () { return chunkONVWPSQD_cjs.DELETE_SCORER_VERSION_ROUTE; }
get: function () { return chunkLYZLM7TQ_cjs.DELETE_SCORER_VERSION_ROUTE; }
});
Object.defineProperty(exports, "GET_SCORER_VERSION_ROUTE", {
enumerable: true,
get: function () { return chunkONVWPSQD_cjs.GET_SCORER_VERSION_ROUTE; }
get: function () { return chunkLYZLM7TQ_cjs.GET_SCORER_VERSION_ROUTE; }
});
Object.defineProperty(exports, "LIST_SCORER_VERSIONS_ROUTE", {
enumerable: true,
get: function () { return chunkONVWPSQD_cjs.LIST_SCORER_VERSIONS_ROUTE; }
get: function () { return chunkLYZLM7TQ_cjs.LIST_SCORER_VERSIONS_ROUTE; }
});
Object.defineProperty(exports, "RESTORE_SCORER_VERSION_ROUTE", {
enumerable: true,
get: function () { return chunkONVWPSQD_cjs.RESTORE_SCORER_VERSION_ROUTE; }
get: function () { return chunkLYZLM7TQ_cjs.RESTORE_SCORER_VERSION_ROUTE; }
});
//# sourceMappingURL=scorer-versions.cjs.map
//# sourceMappingURL=scorer-versions.cjs.map

@@ -1,3 +0,3 @@

export { ACTIVATE_SCORER_VERSION_ROUTE, COMPARE_SCORER_VERSIONS_ROUTE, CREATE_SCORER_VERSION_ROUTE, DELETE_SCORER_VERSION_ROUTE, GET_SCORER_VERSION_ROUTE, LIST_SCORER_VERSIONS_ROUTE, RESTORE_SCORER_VERSION_ROUTE } from '../../chunk-3SQNEUDQ.js';
export { ACTIVATE_SCORER_VERSION_ROUTE, COMPARE_SCORER_VERSIONS_ROUTE, CREATE_SCORER_VERSION_ROUTE, DELETE_SCORER_VERSION_ROUTE, GET_SCORER_VERSION_ROUTE, LIST_SCORER_VERSIONS_ROUTE, RESTORE_SCORER_VERSION_ROUTE } from '../../chunk-RPPHTS6D.js';
//# sourceMappingURL=scorer-versions.js.map
//# sourceMappingURL=scorer-versions.js.map
'use strict';
var chunkD3NGCHN4_cjs = require('../../chunk-D3NGCHN4.cjs');
var chunkY4O5EGAC_cjs = require('../../chunk-Y4O5EGAC.cjs');

@@ -9,25 +9,25 @@

enumerable: true,
get: function () { return chunkD3NGCHN4_cjs.GET_SCORER_ROUTE; }
get: function () { return chunkY4O5EGAC_cjs.GET_SCORER_ROUTE; }
});
Object.defineProperty(exports, "LIST_SCORERS_ROUTE", {
enumerable: true,
get: function () { return chunkD3NGCHN4_cjs.LIST_SCORERS_ROUTE; }
get: function () { return chunkY4O5EGAC_cjs.LIST_SCORERS_ROUTE; }
});
Object.defineProperty(exports, "LIST_SCORES_BY_ENTITY_ID_ROUTE", {
enumerable: true,
get: function () { return chunkD3NGCHN4_cjs.LIST_SCORES_BY_ENTITY_ID_ROUTE; }
get: function () { return chunkY4O5EGAC_cjs.LIST_SCORES_BY_ENTITY_ID_ROUTE; }
});
Object.defineProperty(exports, "LIST_SCORES_BY_RUN_ID_ROUTE", {
enumerable: true,
get: function () { return chunkD3NGCHN4_cjs.LIST_SCORES_BY_RUN_ID_ROUTE; }
get: function () { return chunkY4O5EGAC_cjs.LIST_SCORES_BY_RUN_ID_ROUTE; }
});
Object.defineProperty(exports, "LIST_SCORES_BY_SCORER_ID_ROUTE", {
enumerable: true,
get: function () { return chunkD3NGCHN4_cjs.LIST_SCORES_BY_SCORER_ID_ROUTE; }
get: function () { return chunkY4O5EGAC_cjs.LIST_SCORES_BY_SCORER_ID_ROUTE; }
});
Object.defineProperty(exports, "SAVE_SCORE_ROUTE", {
enumerable: true,
get: function () { return chunkD3NGCHN4_cjs.SAVE_SCORE_ROUTE; }
get: function () { return chunkY4O5EGAC_cjs.SAVE_SCORE_ROUTE; }
});
//# sourceMappingURL=scores.cjs.map
//# sourceMappingURL=scores.cjs.map

@@ -1,3 +0,3 @@

export { GET_SCORER_ROUTE, LIST_SCORERS_ROUTE, LIST_SCORES_BY_ENTITY_ID_ROUTE, LIST_SCORES_BY_RUN_ID_ROUTE, LIST_SCORES_BY_SCORER_ID_ROUTE, SAVE_SCORE_ROUTE } from '../../chunk-SHQ5UYM7.js';
export { GET_SCORER_ROUTE, LIST_SCORERS_ROUTE, LIST_SCORES_BY_ENTITY_ID_ROUTE, LIST_SCORES_BY_RUN_ID_ROUTE, LIST_SCORES_BY_SCORER_ID_ROUTE, SAVE_SCORE_ROUTE } from '../../chunk-UWFWR77Y.js';
//# sourceMappingURL=scores.js.map
//# sourceMappingURL=scores.js.map
'use strict';
var chunkJBH7K7YB_cjs = require('../../chunk-JBH7K7YB.cjs');
var chunkJKTLOG4J_cjs = require('../../chunk-JKTLOG4J.cjs');

@@ -9,9 +9,9 @@

enumerable: true,
get: function () { return chunkJBH7K7YB_cjs.FAVORITE_STORED_AGENT_ROUTE; }
get: function () { return chunkJKTLOG4J_cjs.FAVORITE_STORED_AGENT_ROUTE; }
});
Object.defineProperty(exports, "UNFAVORITE_STORED_AGENT_ROUTE", {
enumerable: true,
get: function () { return chunkJBH7K7YB_cjs.UNFAVORITE_STORED_AGENT_ROUTE; }
get: function () { return chunkJKTLOG4J_cjs.UNFAVORITE_STORED_AGENT_ROUTE; }
});
//# sourceMappingURL=stored-agent-favorites.cjs.map
//# sourceMappingURL=stored-agent-favorites.cjs.map

@@ -1,3 +0,3 @@

export { FAVORITE_STORED_AGENT_ROUTE, UNFAVORITE_STORED_AGENT_ROUTE } from '../../chunk-C46XF6AU.js';
export { FAVORITE_STORED_AGENT_ROUTE, UNFAVORITE_STORED_AGENT_ROUTE } from '../../chunk-3WBNJWA4.js';
//# sourceMappingURL=stored-agent-favorites.js.map
//# sourceMappingURL=stored-agent-favorites.js.map
'use strict';
var chunkERJ75YLP_cjs = require('../../chunk-ERJ75YLP.cjs');
var chunkJGQYJ3ZU_cjs = require('../../chunk-JGQYJ3ZU.cjs');

@@ -9,37 +9,37 @@

enumerable: true,
get: function () { return chunkERJ75YLP_cjs.CREATE_STORED_AGENT_ROUTE; }
get: function () { return chunkJGQYJ3ZU_cjs.CREATE_STORED_AGENT_ROUTE; }
});
Object.defineProperty(exports, "DELETE_STORED_AGENT_ROUTE", {
enumerable: true,
get: function () { return chunkERJ75YLP_cjs.DELETE_STORED_AGENT_ROUTE; }
get: function () { return chunkJGQYJ3ZU_cjs.DELETE_STORED_AGENT_ROUTE; }
});
Object.defineProperty(exports, "EXPORT_STORED_AGENT_ROUTE", {
enumerable: true,
get: function () { return chunkERJ75YLP_cjs.EXPORT_STORED_AGENT_ROUTE; }
get: function () { return chunkJGQYJ3ZU_cjs.EXPORT_STORED_AGENT_ROUTE; }
});
Object.defineProperty(exports, "GET_STORED_AGENT_DEPENDENTS_ROUTE", {
enumerable: true,
get: function () { return chunkERJ75YLP_cjs.GET_STORED_AGENT_DEPENDENTS_ROUTE; }
get: function () { return chunkJGQYJ3ZU_cjs.GET_STORED_AGENT_DEPENDENTS_ROUTE; }
});
Object.defineProperty(exports, "GET_STORED_AGENT_ROUTE", {
enumerable: true,
get: function () { return chunkERJ75YLP_cjs.GET_STORED_AGENT_ROUTE; }
get: function () { return chunkJGQYJ3ZU_cjs.GET_STORED_AGENT_ROUTE; }
});
Object.defineProperty(exports, "LIST_STORED_AGENTS_ROUTE", {
enumerable: true,
get: function () { return chunkERJ75YLP_cjs.LIST_STORED_AGENTS_ROUTE; }
get: function () { return chunkJGQYJ3ZU_cjs.LIST_STORED_AGENTS_ROUTE; }
});
Object.defineProperty(exports, "OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE", {
enumerable: true,
get: function () { return chunkERJ75YLP_cjs.OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE; }
get: function () { return chunkJGQYJ3ZU_cjs.OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE; }
});
Object.defineProperty(exports, "PREVIEW_INSTRUCTIONS_ROUTE", {
enumerable: true,
get: function () { return chunkERJ75YLP_cjs.PREVIEW_INSTRUCTIONS_ROUTE; }
get: function () { return chunkJGQYJ3ZU_cjs.PREVIEW_INSTRUCTIONS_ROUTE; }
});
Object.defineProperty(exports, "UPDATE_STORED_AGENT_ROUTE", {
enumerable: true,
get: function () { return chunkERJ75YLP_cjs.UPDATE_STORED_AGENT_ROUTE; }
get: function () { return chunkJGQYJ3ZU_cjs.UPDATE_STORED_AGENT_ROUTE; }
});
//# sourceMappingURL=stored-agents.cjs.map
//# sourceMappingURL=stored-agents.cjs.map

@@ -1,3 +0,3 @@

export { CREATE_STORED_AGENT_ROUTE, DELETE_STORED_AGENT_ROUTE, EXPORT_STORED_AGENT_ROUTE, GET_STORED_AGENT_DEPENDENTS_ROUTE, GET_STORED_AGENT_ROUTE, LIST_STORED_AGENTS_ROUTE, OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE, PREVIEW_INSTRUCTIONS_ROUTE, UPDATE_STORED_AGENT_ROUTE } from '../../chunk-RSDPTA3U.js';
export { CREATE_STORED_AGENT_ROUTE, DELETE_STORED_AGENT_ROUTE, EXPORT_STORED_AGENT_ROUTE, GET_STORED_AGENT_DEPENDENTS_ROUTE, GET_STORED_AGENT_ROUTE, LIST_STORED_AGENTS_ROUTE, OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE, PREVIEW_INSTRUCTIONS_ROUTE, UPDATE_STORED_AGENT_ROUTE } from '../../chunk-7RPGRDSC.js';
//# sourceMappingURL=stored-agents.js.map
//# sourceMappingURL=stored-agents.js.map
'use strict';
var chunkV3HBNBLU_cjs = require('../../chunk-V3HBNBLU.cjs');
var chunkLJNTC2CX_cjs = require('../../chunk-LJNTC2CX.cjs');

@@ -9,21 +9,21 @@

enumerable: true,
get: function () { return chunkV3HBNBLU_cjs.CREATE_STORED_SCORER_ROUTE; }
get: function () { return chunkLJNTC2CX_cjs.CREATE_STORED_SCORER_ROUTE; }
});
Object.defineProperty(exports, "DELETE_STORED_SCORER_ROUTE", {
enumerable: true,
get: function () { return chunkV3HBNBLU_cjs.DELETE_STORED_SCORER_ROUTE; }
get: function () { return chunkLJNTC2CX_cjs.DELETE_STORED_SCORER_ROUTE; }
});
Object.defineProperty(exports, "GET_STORED_SCORER_ROUTE", {
enumerable: true,
get: function () { return chunkV3HBNBLU_cjs.GET_STORED_SCORER_ROUTE; }
get: function () { return chunkLJNTC2CX_cjs.GET_STORED_SCORER_ROUTE; }
});
Object.defineProperty(exports, "LIST_STORED_SCORERS_ROUTE", {
enumerable: true,
get: function () { return chunkV3HBNBLU_cjs.LIST_STORED_SCORERS_ROUTE; }
get: function () { return chunkLJNTC2CX_cjs.LIST_STORED_SCORERS_ROUTE; }
});
Object.defineProperty(exports, "UPDATE_STORED_SCORER_ROUTE", {
enumerable: true,
get: function () { return chunkV3HBNBLU_cjs.UPDATE_STORED_SCORER_ROUTE; }
get: function () { return chunkLJNTC2CX_cjs.UPDATE_STORED_SCORER_ROUTE; }
});
//# sourceMappingURL=stored-scorers.cjs.map
//# sourceMappingURL=stored-scorers.cjs.map

@@ -1,3 +0,3 @@

export { CREATE_STORED_SCORER_ROUTE, DELETE_STORED_SCORER_ROUTE, GET_STORED_SCORER_ROUTE, LIST_STORED_SCORERS_ROUTE, UPDATE_STORED_SCORER_ROUTE } from '../../chunk-R5VL3YAW.js';
export { CREATE_STORED_SCORER_ROUTE, DELETE_STORED_SCORER_ROUTE, GET_STORED_SCORER_ROUTE, LIST_STORED_SCORERS_ROUTE, UPDATE_STORED_SCORER_ROUTE } from '../../chunk-RWL3CJF7.js';
//# sourceMappingURL=stored-scorers.js.map
//# sourceMappingURL=stored-scorers.js.map
'use strict';
var chunkO4DW75OM_cjs = require('../../chunk-O4DW75OM.cjs');
var chunkBHYWGD5O_cjs = require('../../chunk-BHYWGD5O.cjs');

@@ -9,9 +9,9 @@

enumerable: true,
get: function () { return chunkO4DW75OM_cjs.FAVORITE_STORED_SKILL_ROUTE; }
get: function () { return chunkBHYWGD5O_cjs.FAVORITE_STORED_SKILL_ROUTE; }
});
Object.defineProperty(exports, "UNFAVORITE_STORED_SKILL_ROUTE", {
enumerable: true,
get: function () { return chunkO4DW75OM_cjs.UNFAVORITE_STORED_SKILL_ROUTE; }
get: function () { return chunkBHYWGD5O_cjs.UNFAVORITE_STORED_SKILL_ROUTE; }
});
//# sourceMappingURL=stored-skill-favorites.cjs.map
//# sourceMappingURL=stored-skill-favorites.cjs.map

@@ -1,3 +0,3 @@

export { FAVORITE_STORED_SKILL_ROUTE, UNFAVORITE_STORED_SKILL_ROUTE } from '../../chunk-F2YOTPSJ.js';
export { FAVORITE_STORED_SKILL_ROUTE, UNFAVORITE_STORED_SKILL_ROUTE } from '../../chunk-PTOMNQ6N.js';
//# sourceMappingURL=stored-skill-favorites.js.map
//# sourceMappingURL=stored-skill-favorites.js.map
'use strict';
var chunkALPAZYZR_cjs = require('../../chunk-ALPAZYZR.cjs');
var chunk7KFYDYFN_cjs = require('../../chunk-7KFYDYFN.cjs');

@@ -9,25 +9,25 @@

enumerable: true,
get: function () { return chunkALPAZYZR_cjs.CREATE_STORED_SKILL_ROUTE; }
get: function () { return chunk7KFYDYFN_cjs.CREATE_STORED_SKILL_ROUTE; }
});
Object.defineProperty(exports, "DELETE_STORED_SKILL_ROUTE", {
enumerable: true,
get: function () { return chunkALPAZYZR_cjs.DELETE_STORED_SKILL_ROUTE; }
get: function () { return chunk7KFYDYFN_cjs.DELETE_STORED_SKILL_ROUTE; }
});
Object.defineProperty(exports, "GET_STORED_SKILL_ROUTE", {
enumerable: true,
get: function () { return chunkALPAZYZR_cjs.GET_STORED_SKILL_ROUTE; }
get: function () { return chunk7KFYDYFN_cjs.GET_STORED_SKILL_ROUTE; }
});
Object.defineProperty(exports, "LIST_STORED_SKILLS_ROUTE", {
enumerable: true,
get: function () { return chunkALPAZYZR_cjs.LIST_STORED_SKILLS_ROUTE; }
get: function () { return chunk7KFYDYFN_cjs.LIST_STORED_SKILLS_ROUTE; }
});
Object.defineProperty(exports, "PUBLISH_STORED_SKILL_ROUTE", {
enumerable: true,
get: function () { return chunkALPAZYZR_cjs.PUBLISH_STORED_SKILL_ROUTE; }
get: function () { return chunk7KFYDYFN_cjs.PUBLISH_STORED_SKILL_ROUTE; }
});
Object.defineProperty(exports, "UPDATE_STORED_SKILL_ROUTE", {
enumerable: true,
get: function () { return chunkALPAZYZR_cjs.UPDATE_STORED_SKILL_ROUTE; }
get: function () { return chunk7KFYDYFN_cjs.UPDATE_STORED_SKILL_ROUTE; }
});
//# sourceMappingURL=stored-skills.cjs.map
//# sourceMappingURL=stored-skills.cjs.map

@@ -1,3 +0,3 @@

export { CREATE_STORED_SKILL_ROUTE, DELETE_STORED_SKILL_ROUTE, GET_STORED_SKILL_ROUTE, LIST_STORED_SKILLS_ROUTE, PUBLISH_STORED_SKILL_ROUTE, UPDATE_STORED_SKILL_ROUTE } from '../../chunk-QRXUWF3U.js';
export { CREATE_STORED_SKILL_ROUTE, DELETE_STORED_SKILL_ROUTE, GET_STORED_SKILL_ROUTE, LIST_STORED_SKILLS_ROUTE, PUBLISH_STORED_SKILL_ROUTE, UPDATE_STORED_SKILL_ROUTE } from '../../chunk-VE2FUYFD.js';
//# sourceMappingURL=stored-skills.js.map
//# sourceMappingURL=stored-skills.js.map
'use strict';
var chunkS7XHYPBN_cjs = require('../../chunk-S7XHYPBN.cjs');
var chunkDL6MIA5S_cjs = require('../../chunk-DL6MIA5S.cjs');

@@ -9,9 +9,9 @@

enumerable: true,
get: function () { return chunkS7XHYPBN_cjs.GET_API_SCHEMA_ROUTE; }
get: function () { return chunkDL6MIA5S_cjs.GET_API_SCHEMA_ROUTE; }
});
Object.defineProperty(exports, "GET_SYSTEM_PACKAGES_ROUTE", {
enumerable: true,
get: function () { return chunkS7XHYPBN_cjs.GET_SYSTEM_PACKAGES_ROUTE; }
get: function () { return chunkDL6MIA5S_cjs.GET_SYSTEM_PACKAGES_ROUTE; }
});
//# sourceMappingURL=system.cjs.map
//# sourceMappingURL=system.cjs.map

@@ -1,3 +0,3 @@

export { GET_API_SCHEMA_ROUTE, GET_SYSTEM_PACKAGES_ROUTE } from '../../chunk-I6TYCL4H.js';
export { GET_API_SCHEMA_ROUTE, GET_SYSTEM_PACKAGES_ROUTE } from '../../chunk-LWKCKC57.js';
//# sourceMappingURL=system.js.map
//# sourceMappingURL=system.js.map
'use strict';
var chunkOLYSNWQP_cjs = require('../../chunk-OLYSNWQP.cjs');
var chunkUGQH3IIT_cjs = require('../../chunk-UGQH3IIT.cjs');

@@ -9,21 +9,21 @@

enumerable: true,
get: function () { return chunkOLYSNWQP_cjs.EXECUTE_AGENT_TOOL_ROUTE; }
get: function () { return chunkUGQH3IIT_cjs.EXECUTE_AGENT_TOOL_ROUTE; }
});
Object.defineProperty(exports, "EXECUTE_TOOL_ROUTE", {
enumerable: true,
get: function () { return chunkOLYSNWQP_cjs.EXECUTE_TOOL_ROUTE; }
get: function () { return chunkUGQH3IIT_cjs.EXECUTE_TOOL_ROUTE; }
});
Object.defineProperty(exports, "GET_AGENT_TOOL_ROUTE", {
enumerable: true,
get: function () { return chunkOLYSNWQP_cjs.GET_AGENT_TOOL_ROUTE; }
get: function () { return chunkUGQH3IIT_cjs.GET_AGENT_TOOL_ROUTE; }
});
Object.defineProperty(exports, "GET_TOOL_BY_ID_ROUTE", {
enumerable: true,
get: function () { return chunkOLYSNWQP_cjs.GET_TOOL_BY_ID_ROUTE; }
get: function () { return chunkUGQH3IIT_cjs.GET_TOOL_BY_ID_ROUTE; }
});
Object.defineProperty(exports, "LIST_TOOLS_ROUTE", {
enumerable: true,
get: function () { return chunkOLYSNWQP_cjs.LIST_TOOLS_ROUTE; }
get: function () { return chunkUGQH3IIT_cjs.LIST_TOOLS_ROUTE; }
});
//# sourceMappingURL=tools.cjs.map
//# sourceMappingURL=tools.cjs.map

@@ -1,3 +0,3 @@

export { EXECUTE_AGENT_TOOL_ROUTE, EXECUTE_TOOL_ROUTE, GET_AGENT_TOOL_ROUTE, GET_TOOL_BY_ID_ROUTE, LIST_TOOLS_ROUTE } from '../../chunk-QHALAWTW.js';
export { EXECUTE_AGENT_TOOL_ROUTE, EXECUTE_TOOL_ROUTE, GET_AGENT_TOOL_ROUTE, GET_TOOL_BY_ID_ROUTE, LIST_TOOLS_ROUTE } from '../../chunk-EJFNGIUY.js';
//# sourceMappingURL=tools.js.map
//# sourceMappingURL=tools.js.map
export { apiSchemaManifestResponseSchema, apiSchemaManifestRouteSchema, apiSchemaResponseShapeSchema, editorSourceCapabilitiesSchema, editorSourceSchema, mastraPackageSchema, observabilityRuntimeStrategySchema, observabilityStorageCapabilitiesSchema, systemPackagesResponseSchema } from '../../chunk-KXKAQQMV.js';
export { createStoredMCPClientBodySchema, createStoredMCPClientResponseSchema, deleteStoredMCPClientResponseSchema, getStoredMCPClientResponseSchema, listStoredMCPClientsQuerySchema, listStoredMCPClientsResponseSchema, storedMCPClientIdPathParams, storedMCPClientSchema, updateStoredMCPClientBodySchema, updateStoredMCPClientResponseSchema } from '../../chunk-CPWPKQUC.js';
export { createStoredPromptBlockBodySchema, createStoredPromptBlockResponseSchema, deleteStoredPromptBlockResponseSchema, getStoredPromptBlockResponseSchema, listStoredPromptBlocksQuerySchema, listStoredPromptBlocksResponseSchema, storedPromptBlockIdPathParams, storedPromptBlockSchema, updateStoredPromptBlockBodySchema, updateStoredPromptBlockResponseSchema } from '../../chunk-G54EXH45.js';
export { createStoredScorerBodySchema, createStoredScorerResponseSchema, deleteStoredScorerResponseSchema, getStoredScorerResponseSchema, listStoredScorersQuerySchema, listStoredScorersResponseSchema, storedScorerIdPathParams, storedScorerSchema, updateStoredScorerBodySchema, updateStoredScorerResponseSchema } from '../../chunk-3G43R5VJ.js';
export { createStoredScorerBodySchema, createStoredScorerResponseSchema, deleteStoredScorerResponseSchema, getStoredScorerResponseSchema, listStoredScorersQuerySchema, listStoredScorersResponseSchema, storedScorerIdPathParams, storedScorerSchema, updateStoredScorerBodySchema, updateStoredScorerResponseSchema } from '../../chunk-IYRXXIKZ.js';
export { SKILL_ORIGIN_METADATA_KEY, buildOriginMetadata, createStoredSkillBodySchema, createStoredSkillResponseSchema, deleteStoredSkillResponseSchema, getStoredSkillResponseSchema, listStoredSkillsQuerySchema, listStoredSkillsResponseSchema, publishStoredSkillBodySchema, publishStoredSkillResponseSchema, readSkillOrigin, skillOriginSchema, storedSkillIdPathParams, storedSkillSchema, updateStoredSkillBodySchema, updateStoredSkillResponseSchema } from '../../chunk-FBI32AWY.js';
export { executeProcessorBodySchema, executeProcessorResponseSchema, listProcessorsResponseSchema, processorConfigurationSchema, processorIdPathParams, serializedProcessorSchema as processorSerializedSchema, serializedProcessorDetailSchema } from '../../chunk-O2PSL6W6.js';
export { activatePromptBlockVersionResponseSchema, comparePromptBlockVersionsQuerySchema, comparePromptBlockVersionsResponseSchema, createPromptBlockVersionBodySchema, createPromptBlockVersionResponseSchema, deletePromptBlockVersionResponseSchema, getPromptBlockVersionResponseSchema, listPromptBlockVersionsQuerySchema, listPromptBlockVersionsResponseSchema, promptBlockVersionIdPathParams, promptBlockVersionPathParams, promptBlockVersionSchema, restorePromptBlockVersionResponseSchema } from '../../chunk-TQARCQ7L.js';
export { activateScorerVersionResponseSchema, compareScorerVersionsQuerySchema, compareScorerVersionsResponseSchema, createScorerVersionBodySchema, createScorerVersionResponseSchema, deleteScorerVersionResponseSchema, getScorerVersionResponseSchema, listScorerVersionsQuerySchema, listScorerVersionsResponseSchema, restoreScorerVersionResponseSchema, scorerVersionIdPathParams, scorerVersionPathParams, scorerVersionSchema } from '../../chunk-VTD4AE3B.js';
export { activateScorerVersionResponseSchema, compareScorerVersionsQuerySchema, compareScorerVersionsResponseSchema, createScorerVersionBodySchema, createScorerVersionResponseSchema, deleteScorerVersionResponseSchema, getScorerVersionResponseSchema, listScorerVersionsQuerySchema, listScorerVersionsResponseSchema, restoreScorerVersionResponseSchema, scorerVersionIdPathParams, scorerVersionPathParams, scorerVersionSchema } from '../../chunk-JGNE4R5G.js';
export { getProcessorProviderResponseSchema, getProcessorProvidersResponseSchema, processorProviderIdPathParams } from '../../chunk-SJOVDYRT.js';

@@ -13,3 +13,3 @@ export { addItemBodySchema, batchDeleteItemsBodySchema, batchDeleteItemsResponseSchema, batchInsertItemsBodySchema, batchInsertItemsResponseSchema, clusterFailuresBodySchema, clusterFailuresResponseSchema, compareExperimentsBodySchema, comparisonResponseSchema, createDatasetBodySchema, datasetAndExperimentIdPathParams, datasetAndItemIdPathParams, datasetIdPathParams, datasetItemResponseSchema, datasetItemVersionPathParams, datasetResponseSchema, datasetVersionResponseSchema, experimentIdPathParams, experimentResponseSchema, experimentResultIdPathParams, experimentResultResponseSchema, experimentReviewCountsSchema, experimentSummaryResponseSchema, generateItemsBodySchema, generateItemsResponseSchema, itemIdPathParams, itemVersionResponseSchema, listDatasetVersionsResponseSchema, listDatasetsResponseSchema, listExperimentResultsResponseSchema, listExperimentsResponseSchema, listItemVersionsResponseSchema, listItemsQuerySchema, listItemsResponseSchema, paginationQuerySchema, reviewSummaryResponseSchema, scorerResultSchema, tenancyQuerySchema, triggerExperimentBodySchema, updateDatasetBodySchema, updateExperimentResultBodySchema, updateItemBodySchema } from '../../chunk-IJ2EU3PK.js';

export { activateMCPClientVersionResponseSchema, compareMCPClientVersionsQuerySchema, compareMCPClientVersionsResponseSchema, createMCPClientVersionBodySchema, createMCPClientVersionResponseSchema, deleteMCPClientVersionResponseSchema, getMCPClientVersionResponseSchema, listMCPClientVersionsQuerySchema, listMCPClientVersionsResponseSchema, mcpClientVersionIdPathParams, mcpClientVersionPathParams, mcpClientVersionSchema, restoreMCPClientVersionResponseSchema } from '../../chunk-4JVPQKUQ.js';
export { agentVersionPathParams, agentVersionSchema, compareVersionsResponseSchema, createVersionResponseSchema, getVersionResponseSchema, listVersionsResponseSchema, restoreVersionResponseSchema, versionIdPathParams } from '../../chunk-F6ANJJFG.js';
export { agentVersionPathParams, agentVersionSchema, compareVersionsResponseSchema, createVersionResponseSchema, getVersionResponseSchema, listVersionsResponseSchema, restoreVersionResponseSchema, versionIdPathParams } from '../../chunk-6K5XWD5Q.js';
export { activateVersionResponseSchema, compareVersionsQuerySchema, createCompareVersionsResponseSchema, createListVersionsResponseSchema, createVersionBodySchema, deleteVersionResponseSchema, listVersionsQuerySchema, versionDiffEntrySchema, versionOrderBySchema } from '../../chunk-FXXHWBF2.js';

@@ -24,3 +24,3 @@ export { createIndexBodySchema, createIndexResponseSchema, deleteIndexResponseSchema, describeIndexResponseSchema, listEmbeddersResponseSchema, listIndexesResponseSchema, listVectorsResponseSchema, queryVectorsBodySchema, queryVectorsResponseSchema, upsertVectorsBodySchema, upsertVectorsResponseSchema, vectorIndexPathParams, vectorNamePathParams } from '../../chunk-MTIYMK4E.js';

export { agentExecutionBodySchema as a2aAgentExecutionBodySchema, a2aAgentIdPathParams, a2aTaskPathParams, agentCardResponseSchema, agentExecutionResponseSchema, messageSendBodySchema, taskQueryBodySchema, taskResponseSchema } from '../../chunk-J62MSX2P.js';
export { conditionalFieldSchema, createStoredAgentBodySchema, createStoredAgentResponseSchema, deleteStoredAgentResponseSchema, exportStoredAgentBodySchema, exportStoredAgentResponseSchema, getStoredAgentDependentsResponseSchema, getStoredAgentResponseSchema, instructionsSchema, listStoredAgentsQuerySchema, listStoredAgentsResponseSchema, modelConfigSchema, openStoredAgentChangeRequestBodySchema, openStoredAgentChangeRequestResponseSchema, previewInstructionsBodySchema, previewInstructionsResponseSchema, processorGraphEntrySchema, processorGraphStepSchema, processorPhaseSchema, resolvedAuthorSchema, scorerConfigSchema, semanticRecallSchema, serializedMemoryConfigSchema, serializedObservationConfigSchema, serializedObservationalMemoryConfigObjectSchema, serializedObservationalMemoryConfigSchema, serializedReflectionConfigSchema, snapshotConfigSchema, storedAgentIdPathParams, storedAgentSchema, storedProcessorGraphSchema, titleGenerationSchema, toolConfigSchema, toolsConfigSchema, updateStoredAgentBodySchema, updateStoredAgentResponseSchema } from '../../chunk-5HBR27TT.js';
export { conditionalFieldSchema, createStoredAgentBodySchema, createStoredAgentResponseSchema, deleteStoredAgentResponseSchema, exportStoredAgentBodySchema, exportStoredAgentResponseSchema, getStoredAgentDependentsResponseSchema, getStoredAgentResponseSchema, instructionsSchema, listStoredAgentsQuerySchema, listStoredAgentsResponseSchema, modelConfigSchema, openStoredAgentChangeRequestBodySchema, openStoredAgentChangeRequestResponseSchema, previewInstructionsBodySchema, previewInstructionsResponseSchema, processorGraphEntrySchema, processorGraphStepSchema, processorPhaseSchema, resolvedAuthorSchema, scorerConfigSchema, semanticRecallSchema, serializedMemoryConfigSchema, serializedObservationConfigSchema, serializedObservationalMemoryConfigObjectSchema, serializedObservationalMemoryConfigSchema, serializedReflectionConfigSchema, snapshotConfigSchema, storedAgentIdPathParams, storedAgentSchema, storedProcessorGraphSchema, titleGenerationSchema, toolConfigSchema, toolsConfigSchema, updateStoredAgentBodySchema, updateStoredAgentResponseSchema } from '../../chunk-HCCTSODR.js';
export { createStoredWorkspaceBodySchema, createStoredWorkspaceResponseSchema, deleteStoredWorkspaceResponseSchema, getStoredWorkspaceResponseSchema, listStoredWorkspacesQuerySchema, listStoredWorkspacesResponseSchema, storedWorkspaceIdPathParams, storedWorkspaceSchema, updateStoredWorkspaceBodySchema, updateStoredWorkspaceResponseSchema, snapshotConfigSchema as workspaceSnapshotConfigSchema } from '../../chunk-YTLTMMB7.js';

@@ -27,0 +27,0 @@ export { authStatusToolProviderResponseSchema, authorizeToolProviderBodySchema, authorizeToolProviderResponseSchema, connectionSchema, connectionScopeSchema, connectionStatusToolProviderBodySchema, connectionStatusToolProviderResponseSchema, connectionUsageQuerySchema, connectionUsageResponseSchema, disconnectConnectionQuerySchema, disconnectConnectionResponseSchema, getToolProviderToolSchemaResponseSchema, listConnectionFieldsQuerySchema, listConnectionFieldsResponseSchema, listConnectionsQuerySchema, listConnectionsResponseSchema, listToolProviderToolkitsResponseSchema, listToolProviderToolsQuerySchema, listToolProviderToolsResponseSchema, listToolProvidersResponseSchema, toolProviderAuthStatusPathParams, toolProviderConfigSchema, toolProviderConnectionPathParams, toolProviderHealthResponseSchema, toolProviderIdPathParams, toolProvidersSchema, toolSlugPathParams, updateConnectionBodySchema, updateConnectionResponseSchema } from '../../chunk-SFAWHLOX.js';

@@ -1,1 +0,1 @@

{"version":3,"file":"stored-agents.d.ts","sourceRoot":"","sources":["../../../src/server/schemas/stored-agents.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwDxB,CAAC;AA2BH;;;;GAIG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAUJ,CAAC;AAYrC;;;GAGG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAUpC,CAAC;AAEL,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAuC,CAAC;AAEhF,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAIjD,CAAC;AAMH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;iBAK/B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqE5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAEzC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAoB,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAoB,CAAC;AAEjE;;;;;;;;GAQG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAc1C,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,+BAA+B;;;iBAG1C,CAAC;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,sCAAsC;;;;;;iBAQjD,CAAC;AAEH,eAAO,MAAM,+BAA+B;;;;;iBAK1C,CAAC;AAEH,eAAO,MAAM,0CAA0C;;;;iBAIrD,CAAC;AAMH;;GAEG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAOxC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iCAAiC;;iBAE5C,CAAC;AAEH;;GAEG;AACH,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,GAClB,CAAC"}
{"version":3,"file":"stored-agents.d.ts","sourceRoot":"","sources":["../../../src/server/schemas/stored-agents.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwDxB,CAAC;AA2BH;;;;GAIG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAUJ,CAAC;AAYrC;;;GAGG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAcpC,CAAC;AAEL,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAuC,CAAC;AAEhF,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAIjD,CAAC;AAMH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;iBAK/B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqE5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAEzC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAoB,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAoB,CAAC;AAEjE;;;;;;;;GAQG;AACH,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAc1C,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,+BAA+B;;;iBAG1C,CAAC;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,sCAAsC;;;;;;iBAQjD,CAAC;AAEH,eAAO,MAAM,+BAA+B;;;;;iBAK1C,CAAC;AAEH,eAAO,MAAM,0CAA0C;;;;iBAIrD,CAAC;AAMH;;GAEG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAOxC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iCAAiC;;iBAE5C,CAAC;AAEH;;GAEG;AACH,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,GAClB,CAAC"}
'use strict';
var chunkFGH4I6PE_cjs = require('../../chunk-FGH4I6PE.cjs');
var chunkEGV5QBEA_cjs = require('../../chunk-EGV5QBEA.cjs');
var chunkC6CSDVSE_cjs = require('../../chunk-C6CSDVSE.cjs');

@@ -66,3 +66,3 @@ var chunkEVOVAWN6_cjs = require('../../chunk-EVOVAWN6.cjs');

}
const permission = chunkFGH4I6PE_cjs.getEffectivePermission(route);
const permission = chunkEGV5QBEA_cjs.getEffectivePermission(route);
if (!permission) {

@@ -281,3 +281,3 @@ return null;

function getRoutePermissions(route) {
return [chunkFGH4I6PE_cjs.getEffectivePermission(route), route.fga?.permission].flatMap((value) => Array.isArray(value) ? value : [value]).filter((permission) => Boolean(permission));
return [chunkEGV5QBEA_cjs.getEffectivePermission(route), route.fga?.permission].flatMap((value) => Array.isArray(value) ? value : [value]).filter((permission) => Boolean(permission));
}

@@ -616,3 +616,3 @@ async function resolveRouteFGAConfig(fgaProvider, route, requestContext, params) {

}
const requiredPermission = chunkFGH4I6PE_cjs.getEffectivePermission(route);
const requiredPermission = chunkEGV5QBEA_cjs.getEffectivePermission(route);
if (!requiredPermission) {

@@ -710,3 +710,3 @@ return null;

);
const routes = [...chunkFGH4I6PE_cjs.SERVER_ROUTES, ...customRoutes];
const routes = [...chunkEGV5QBEA_cjs.SERVER_ROUTES, ...customRoutes];
if (fgaProvider.validatePermissions) {

@@ -888,3 +888,3 @@ const permissions = [...new Set(routes.flatMap((route) => getRoutePermissions(route)))];

buildOpenAPISpec(config, prefix) {
const openApiSpec = chunkRTTQ6WVP_cjs.generateOpenAPIDocument(chunkFGH4I6PE_cjs.SERVER_ROUTES, config);
const openApiSpec = chunkRTTQ6WVP_cjs.generateOpenAPIDocument(chunkEGV5QBEA_cjs.SERVER_ROUTES, config);
if (prefix) {

@@ -924,3 +924,3 @@ openApiSpec.servers = [{ url: prefix }];

async registerRoutes() {
for (const route of chunkFGH4I6PE_cjs.SERVER_ROUTES) {
for (const route of chunkEGV5QBEA_cjs.SERVER_ROUTES) {
await this.registerRoute(this.app, route, { prefix: this.prefix });

@@ -1014,3 +1014,3 @@ }

}
const effectivePermission = route.path ? chunkFGH4I6PE_cjs.getEffectivePermission(route) : null;
const effectivePermission = route.path ? chunkEGV5QBEA_cjs.getEffectivePermission(route) : null;
const permission = fgaConfig.permission || effectivePermission || `${getFGAResourcePermissionSlug(fgaConfig.resourceType)}:${deriveFGAAction(route.method)}`;

@@ -1057,19 +1057,19 @@ const authorized = await fgaProvider.check(user, {

enumerable: true,
get: function () { return chunkFGH4I6PE_cjs.SERVER_ROUTES; }
get: function () { return chunkEGV5QBEA_cjs.SERVER_ROUTES; }
});
Object.defineProperty(exports, "deriveAction", {
enumerable: true,
get: function () { return chunkFGH4I6PE_cjs.deriveAction; }
get: function () { return chunkEGV5QBEA_cjs.deriveAction; }
});
Object.defineProperty(exports, "derivePermission", {
enumerable: true,
get: function () { return chunkFGH4I6PE_cjs.derivePermission; }
get: function () { return chunkEGV5QBEA_cjs.derivePermission; }
});
Object.defineProperty(exports, "extractResource", {
enumerable: true,
get: function () { return chunkFGH4I6PE_cjs.extractResource; }
get: function () { return chunkEGV5QBEA_cjs.extractResource; }
});
Object.defineProperty(exports, "getEffectivePermission", {
enumerable: true,
get: function () { return chunkFGH4I6PE_cjs.getEffectivePermission; }
get: function () { return chunkEGV5QBEA_cjs.getEffectivePermission; }
});

@@ -1076,0 +1076,0 @@ Object.defineProperty(exports, "WorkflowRegistry", {

@@ -1,3 +0,3 @@

import { getEffectivePermission, SERVER_ROUTES } from '../../chunk-UOOEGODJ.js';
export { SERVER_ROUTES, deriveAction, derivePermission, extractResource, getEffectivePermission } from '../../chunk-UOOEGODJ.js';
import { getEffectivePermission, SERVER_ROUTES } from '../../chunk-SDELLYAU.js';
export { SERVER_ROUTES, deriveAction, derivePermission, extractResource, getEffectivePermission } from '../../chunk-SDELLYAU.js';
import { coreAuthMiddleware } from '../../chunk-W54JQ2AA.js';

@@ -4,0 +4,0 @@ import { normalizeRoutePath } from '../../chunk-4GWTCVFL.js';

{
"name": "@mastra/server",
"version": "1.52.1",
"version": "1.52.2-alpha.0",
"description": "",

@@ -120,9 +120,9 @@ "type": "module",

"@internal/storage-test-utils": "0.0.112",
"@internal/lint": "0.0.116",
"@internal/test-utils": "0.0.52",
"@mastra/agent-builder": "1.1.7",
"@internal/voice": "0.0.16",
"@internal/types-builder": "0.0.91",
"@internal/voice": "0.0.16",
"@mastra/agent-builder": "1.1.7",
"@internal/lint": "0.0.116",
"@mastra/schema-compat": "1.3.4",
"@mastra/core": "1.52.1"
"@mastra/core": "1.52.2-alpha.0"
},

@@ -129,0 +129,0 @@ "homepage": "https://mastra.ai",

'use strict';
var chunkFGH4I6PE_cjs = require('./chunk-FGH4I6PE.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
// src/server/server-adapter/api-schema-manifest.ts
function convertSchema(schema) {
return schema ? chunkRTTQ6WVP_cjs.schemaToJsonSchema(schema) : void 0;
}
function asJsonSchema(value) {
return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
}
function schemaType(schema) {
const type = schema?.type;
return Array.isArray(type) ? type.find(Boolean) : type;
}
function inferResponseShape(responseSchema) {
if (!responseSchema) return { kind: "unknown" };
const type = schemaType(responseSchema);
if (type === "array") return { kind: "array" };
if (type !== "object") return { kind: "single" };
const properties = responseSchema.properties && !Array.isArray(responseSchema.properties) ? responseSchema.properties : {};
const propertyNames = Object.keys(properties);
const paginationProperty = "page" in properties ? "page" : "pagination" in properties ? "pagination" : void 0;
const listProperty = Object.entries(properties).find(
([, property]) => schemaType(asJsonSchema(property)) === "array"
)?.[0];
if (listProperty && (paginationProperty || propertyNames.length <= 2)) {
return { kind: "object-property", listProperty, paginationProperty };
}
if (responseSchema.additionalProperties && propertyNames.length === 0) return { kind: "record" };
return { kind: "single" };
}
function isManifestRoute(route) {
return route.responseType === "json" && !route.deprecated;
}
function buildApiSchemaManifest(routes = chunkFGH4I6PE_cjs.SERVER_ROUTES) {
return {
version: 1,
routes: routes.filter(isManifestRoute).map((route) => {
const responseSchema = convertSchema(route.responseSchema);
return {
method: route.method,
path: route.path,
responseType: route.responseType,
pathParamSchema: convertSchema(route.pathParamSchema),
queryParamSchema: convertSchema(route.queryParamSchema),
bodySchema: convertSchema(route.bodySchema),
responseSchema,
responseShape: inferResponseShape(responseSchema)
};
})
};
}
exports.buildApiSchemaManifest = buildApiSchemaManifest;
//# sourceMappingURL=api-schema-manifest-GJZKV32J.cjs.map
//# sourceMappingURL=api-schema-manifest-GJZKV32J.cjs.map
{"version":3,"sources":["../src/server/server-adapter/api-schema-manifest.ts"],"names":["schemaToJsonSchema","SERVER_ROUTES"],"mappings":";;;;;;AA2BA,SAAS,cAAc,MAAA,EAA4D;AACjF,EAAA,OAAO,MAAA,GAASA,oCAAA,CAAmB,MAAM,CAAA,GAAI,MAAA;AAC/C;AAEA,SAAS,aAAa,KAAA,EAAyC;AAC7D,EAAA,OAAO,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAK,KAAA,GAAwB,MAAA;AAChG;AAEA,SAAS,WAAW,MAAA,EAAkE;AACpF,EAAA,MAAM,OAAO,MAAA,EAAQ,IAAA;AACrB,EAAA,OAAO,MAAM,OAAA,CAAQ,IAAI,IAAI,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,GAAI,IAAA;AACpD;AAEA,SAAS,mBAAmB,cAAA,EAAiE;AAC3F,EAAA,IAAI,CAAC,cAAA,EAAgB,OAAO,EAAE,MAAM,SAAA,EAAU;AAE9C,EAAA,MAAM,IAAA,GAAO,WAAW,cAAc,CAAA;AACtC,EAAA,IAAI,IAAA,KAAS,OAAA,EAAS,OAAO,EAAE,MAAM,OAAA,EAAQ;AAC7C,EAAA,IAAI,IAAA,KAAS,QAAA,EAAU,OAAO,EAAE,MAAM,QAAA,EAAS;AAE/C,EAAA,MAAM,UAAA,GACJ,cAAA,CAAe,UAAA,IAAc,CAAC,KAAA,CAAM,OAAA,CAAQ,cAAA,CAAe,UAAU,CAAA,GAAI,cAAA,CAAe,UAAA,GAAa,EAAC;AACxG,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AAC5C,EAAA,MAAM,qBAAqB,MAAA,IAAU,UAAA,GAAa,MAAA,GAAS,YAAA,IAAgB,aAAa,YAAA,GAAe,MAAA;AACvG,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,CAAE,IAAA;AAAA,IAC9C,CAAC,GAAG,QAAQ,MAAM,UAAA,CAAW,YAAA,CAAa,QAAQ,CAAC,CAAA,KAAM;AAAA,MACvD,CAAC,CAAA;AAEL,EAAA,IAAI,YAAA,KAAiB,kBAAA,IAAsB,aAAA,CAAc,MAAA,IAAU,CAAA,CAAA,EAAI;AACrE,IAAA,OAAO,EAAE,IAAA,EAAM,iBAAA,EAAmB,YAAA,EAAc,kBAAA,EAAmB;AAAA,EACrE;AACA,EAAA,IAAI,cAAA,CAAe,wBAAwB,aAAA,CAAc,MAAA,KAAW,GAAG,OAAO,EAAE,MAAM,QAAA,EAAS;AAC/F,EAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAC1B;AAEA,SAAS,gBAAgB,KAAA,EAA6B;AACpD,EAAA,OAAO,KAAA,CAAM,YAAA,KAAiB,MAAA,IAAU,CAAC,KAAA,CAAM,UAAA;AACjD;AAEO,SAAS,sBAAA,CAAuB,SAAiCC,+BAAA,EAAkC;AACxG,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,QAAQ,MAAA,CAAO,MAAA,CAAO,eAAe,CAAA,CAAE,IAAI,CAAA,KAAA,KAAS;AAClD,MAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,KAAA,CAAM,cAAc,CAAA;AACzD,MAAA,OAAO;AAAA,QACL,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,eAAA,EAAiB,aAAA,CAAc,KAAA,CAAM,eAAe,CAAA;AAAA,QACpD,gBAAA,EAAkB,aAAA,CAAc,KAAA,CAAM,gBAAgB,CAAA;AAAA,QACtD,UAAA,EAAY,aAAA,CAAc,KAAA,CAAM,UAAU,CAAA;AAAA,QAC1C,cAAA;AAAA,QACA,aAAA,EAAe,mBAAmB,cAAc;AAAA,OAClD;AAAA,IACF,CAAC;AAAA,GACH;AACF","file":"api-schema-manifest-GJZKV32J.cjs","sourcesContent":["import type { JSONSchema7 } from '@mastra/schema-compat';\nimport { schemaToJsonSchema } from './openapi-utils';\nimport { SERVER_ROUTES } from './routes/index';\nimport type { ServerRoute } from './routes/index';\n\nexport interface ApiSchemaResponseShape {\n kind: 'array' | 'record' | 'object-property' | 'single' | 'unknown';\n listProperty?: string;\n paginationProperty?: string;\n}\n\nexport interface ApiSchemaManifestRoute {\n method: string;\n path: string;\n responseType: string;\n pathParamSchema?: JSONSchema7;\n queryParamSchema?: JSONSchema7;\n bodySchema?: JSONSchema7;\n responseSchema?: JSONSchema7;\n responseShape: ApiSchemaResponseShape;\n}\n\nexport interface ApiSchemaManifest {\n version: 1;\n routes: ApiSchemaManifestRoute[];\n}\n\nfunction convertSchema(schema: ServerRoute['bodySchema']): JSONSchema7 | undefined {\n return schema ? schemaToJsonSchema(schema) : undefined;\n}\n\nfunction asJsonSchema(value: unknown): JSONSchema7 | undefined {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as JSONSchema7) : undefined;\n}\n\nfunction schemaType(schema: JSONSchema7 | undefined): JSONSchema7['type'] | undefined {\n const type = schema?.type;\n return Array.isArray(type) ? type.find(Boolean) : type;\n}\n\nfunction inferResponseShape(responseSchema: JSONSchema7 | undefined): ApiSchemaResponseShape {\n if (!responseSchema) return { kind: 'unknown' };\n\n const type = schemaType(responseSchema);\n if (type === 'array') return { kind: 'array' };\n if (type !== 'object') return { kind: 'single' };\n\n const properties =\n responseSchema.properties && !Array.isArray(responseSchema.properties) ? responseSchema.properties : {};\n const propertyNames = Object.keys(properties);\n const paginationProperty = 'page' in properties ? 'page' : 'pagination' in properties ? 'pagination' : undefined;\n const listProperty = Object.entries(properties).find(\n ([, property]) => schemaType(asJsonSchema(property)) === 'array',\n )?.[0];\n\n if (listProperty && (paginationProperty || propertyNames.length <= 2)) {\n return { kind: 'object-property', listProperty, paginationProperty };\n }\n if (responseSchema.additionalProperties && propertyNames.length === 0) return { kind: 'record' };\n return { kind: 'single' };\n}\n\nfunction isManifestRoute(route: ServerRoute): boolean {\n return route.responseType === 'json' && !route.deprecated;\n}\n\nexport function buildApiSchemaManifest(routes: readonly ServerRoute[] = SERVER_ROUTES): ApiSchemaManifest {\n return {\n version: 1,\n routes: routes.filter(isManifestRoute).map(route => {\n const responseSchema = convertSchema(route.responseSchema);\n return {\n method: route.method,\n path: route.path,\n responseType: route.responseType,\n pathParamSchema: convertSchema(route.pathParamSchema),\n queryParamSchema: convertSchema(route.queryParamSchema),\n bodySchema: convertSchema(route.bodySchema),\n responseSchema,\n responseShape: inferResponseShape(responseSchema),\n };\n }),\n };\n}\n"]}
import { SERVER_ROUTES } from './chunk-UOOEGODJ.js';
import { schemaToJsonSchema } from './chunk-H5LXHGEJ.js';
// src/server/server-adapter/api-schema-manifest.ts
function convertSchema(schema) {
return schema ? schemaToJsonSchema(schema) : void 0;
}
function asJsonSchema(value) {
return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
}
function schemaType(schema) {
const type = schema?.type;
return Array.isArray(type) ? type.find(Boolean) : type;
}
function inferResponseShape(responseSchema) {
if (!responseSchema) return { kind: "unknown" };
const type = schemaType(responseSchema);
if (type === "array") return { kind: "array" };
if (type !== "object") return { kind: "single" };
const properties = responseSchema.properties && !Array.isArray(responseSchema.properties) ? responseSchema.properties : {};
const propertyNames = Object.keys(properties);
const paginationProperty = "page" in properties ? "page" : "pagination" in properties ? "pagination" : void 0;
const listProperty = Object.entries(properties).find(
([, property]) => schemaType(asJsonSchema(property)) === "array"
)?.[0];
if (listProperty && (paginationProperty || propertyNames.length <= 2)) {
return { kind: "object-property", listProperty, paginationProperty };
}
if (responseSchema.additionalProperties && propertyNames.length === 0) return { kind: "record" };
return { kind: "single" };
}
function isManifestRoute(route) {
return route.responseType === "json" && !route.deprecated;
}
function buildApiSchemaManifest(routes = SERVER_ROUTES) {
return {
version: 1,
routes: routes.filter(isManifestRoute).map((route) => {
const responseSchema = convertSchema(route.responseSchema);
return {
method: route.method,
path: route.path,
responseType: route.responseType,
pathParamSchema: convertSchema(route.pathParamSchema),
queryParamSchema: convertSchema(route.queryParamSchema),
bodySchema: convertSchema(route.bodySchema),
responseSchema,
responseShape: inferResponseShape(responseSchema)
};
})
};
}
export { buildApiSchemaManifest };
//# sourceMappingURL=api-schema-manifest-RV6AS2KM.js.map
//# sourceMappingURL=api-schema-manifest-RV6AS2KM.js.map
{"version":3,"sources":["../src/server/server-adapter/api-schema-manifest.ts"],"names":[],"mappings":";;;;AA2BA,SAAS,cAAc,MAAA,EAA4D;AACjF,EAAA,OAAO,MAAA,GAAS,kBAAA,CAAmB,MAAM,CAAA,GAAI,MAAA;AAC/C;AAEA,SAAS,aAAa,KAAA,EAAyC;AAC7D,EAAA,OAAO,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAK,KAAA,GAAwB,MAAA;AAChG;AAEA,SAAS,WAAW,MAAA,EAAkE;AACpF,EAAA,MAAM,OAAO,MAAA,EAAQ,IAAA;AACrB,EAAA,OAAO,MAAM,OAAA,CAAQ,IAAI,IAAI,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,GAAI,IAAA;AACpD;AAEA,SAAS,mBAAmB,cAAA,EAAiE;AAC3F,EAAA,IAAI,CAAC,cAAA,EAAgB,OAAO,EAAE,MAAM,SAAA,EAAU;AAE9C,EAAA,MAAM,IAAA,GAAO,WAAW,cAAc,CAAA;AACtC,EAAA,IAAI,IAAA,KAAS,OAAA,EAAS,OAAO,EAAE,MAAM,OAAA,EAAQ;AAC7C,EAAA,IAAI,IAAA,KAAS,QAAA,EAAU,OAAO,EAAE,MAAM,QAAA,EAAS;AAE/C,EAAA,MAAM,UAAA,GACJ,cAAA,CAAe,UAAA,IAAc,CAAC,KAAA,CAAM,OAAA,CAAQ,cAAA,CAAe,UAAU,CAAA,GAAI,cAAA,CAAe,UAAA,GAAa,EAAC;AACxG,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AAC5C,EAAA,MAAM,qBAAqB,MAAA,IAAU,UAAA,GAAa,MAAA,GAAS,YAAA,IAAgB,aAAa,YAAA,GAAe,MAAA;AACvG,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,CAAE,IAAA;AAAA,IAC9C,CAAC,GAAG,QAAQ,MAAM,UAAA,CAAW,YAAA,CAAa,QAAQ,CAAC,CAAA,KAAM;AAAA,MACvD,CAAC,CAAA;AAEL,EAAA,IAAI,YAAA,KAAiB,kBAAA,IAAsB,aAAA,CAAc,MAAA,IAAU,CAAA,CAAA,EAAI;AACrE,IAAA,OAAO,EAAE,IAAA,EAAM,iBAAA,EAAmB,YAAA,EAAc,kBAAA,EAAmB;AAAA,EACrE;AACA,EAAA,IAAI,cAAA,CAAe,wBAAwB,aAAA,CAAc,MAAA,KAAW,GAAG,OAAO,EAAE,MAAM,QAAA,EAAS;AAC/F,EAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAC1B;AAEA,SAAS,gBAAgB,KAAA,EAA6B;AACpD,EAAA,OAAO,KAAA,CAAM,YAAA,KAAiB,MAAA,IAAU,CAAC,KAAA,CAAM,UAAA;AACjD;AAEO,SAAS,sBAAA,CAAuB,SAAiC,aAAA,EAAkC;AACxG,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,QAAQ,MAAA,CAAO,MAAA,CAAO,eAAe,CAAA,CAAE,IAAI,CAAA,KAAA,KAAS;AAClD,MAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,KAAA,CAAM,cAAc,CAAA;AACzD,MAAA,OAAO;AAAA,QACL,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,eAAA,EAAiB,aAAA,CAAc,KAAA,CAAM,eAAe,CAAA;AAAA,QACpD,gBAAA,EAAkB,aAAA,CAAc,KAAA,CAAM,gBAAgB,CAAA;AAAA,QACtD,UAAA,EAAY,aAAA,CAAc,KAAA,CAAM,UAAU,CAAA;AAAA,QAC1C,cAAA;AAAA,QACA,aAAA,EAAe,mBAAmB,cAAc;AAAA,OAClD;AAAA,IACF,CAAC;AAAA,GACH;AACF","file":"api-schema-manifest-RV6AS2KM.js","sourcesContent":["import type { JSONSchema7 } from '@mastra/schema-compat';\nimport { schemaToJsonSchema } from './openapi-utils';\nimport { SERVER_ROUTES } from './routes/index';\nimport type { ServerRoute } from './routes/index';\n\nexport interface ApiSchemaResponseShape {\n kind: 'array' | 'record' | 'object-property' | 'single' | 'unknown';\n listProperty?: string;\n paginationProperty?: string;\n}\n\nexport interface ApiSchemaManifestRoute {\n method: string;\n path: string;\n responseType: string;\n pathParamSchema?: JSONSchema7;\n queryParamSchema?: JSONSchema7;\n bodySchema?: JSONSchema7;\n responseSchema?: JSONSchema7;\n responseShape: ApiSchemaResponseShape;\n}\n\nexport interface ApiSchemaManifest {\n version: 1;\n routes: ApiSchemaManifestRoute[];\n}\n\nfunction convertSchema(schema: ServerRoute['bodySchema']): JSONSchema7 | undefined {\n return schema ? schemaToJsonSchema(schema) : undefined;\n}\n\nfunction asJsonSchema(value: unknown): JSONSchema7 | undefined {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as JSONSchema7) : undefined;\n}\n\nfunction schemaType(schema: JSONSchema7 | undefined): JSONSchema7['type'] | undefined {\n const type = schema?.type;\n return Array.isArray(type) ? type.find(Boolean) : type;\n}\n\nfunction inferResponseShape(responseSchema: JSONSchema7 | undefined): ApiSchemaResponseShape {\n if (!responseSchema) return { kind: 'unknown' };\n\n const type = schemaType(responseSchema);\n if (type === 'array') return { kind: 'array' };\n if (type !== 'object') return { kind: 'single' };\n\n const properties =\n responseSchema.properties && !Array.isArray(responseSchema.properties) ? responseSchema.properties : {};\n const propertyNames = Object.keys(properties);\n const paginationProperty = 'page' in properties ? 'page' : 'pagination' in properties ? 'pagination' : undefined;\n const listProperty = Object.entries(properties).find(\n ([, property]) => schemaType(asJsonSchema(property)) === 'array',\n )?.[0];\n\n if (listProperty && (paginationProperty || propertyNames.length <= 2)) {\n return { kind: 'object-property', listProperty, paginationProperty };\n }\n if (responseSchema.additionalProperties && propertyNames.length === 0) return { kind: 'record' };\n return { kind: 'single' };\n}\n\nfunction isManifestRoute(route: ServerRoute): boolean {\n return route.responseType === 'json' && !route.deprecated;\n}\n\nexport function buildApiSchemaManifest(routes: readonly ServerRoute[] = SERVER_ROUTES): ApiSchemaManifest {\n return {\n version: 1,\n routes: routes.filter(isManifestRoute).map(route => {\n const responseSchema = convertSchema(route.responseSchema);\n return {\n method: route.method,\n path: route.path,\n responseType: route.responseType,\n pathParamSchema: convertSchema(route.pathParamSchema),\n queryParamSchema: convertSchema(route.queryParamSchema),\n bodySchema: convertSchema(route.bodySchema),\n responseSchema,\n responseShape: inferResponseShape(responseSchema),\n };\n }),\n };\n}\n"]}
import { conversationObjectSchema, createConversationBodySchema, conversationIdPathParams, conversationItemsListSchema, conversationDeletedSchema } from './chunk-JF6VE6ZA.js';
import { mapMastraMessagesToConversationItems } from './chunk-TLLV2JP5.js';
import { getAgentMemoryStore, findConversationThreadAcrossAgents } from './chunk-SPNWC52V.js';
import { getAgentFromSystem } from './chunk-XORQIQXT.js';
import { MastraFGAPermissions, getEffectiveResourceId } from './chunk-A7APTIYJ.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
import { __export } from './chunk-PR4QN5HX.js';
import { randomUUID } from 'crypto';
// src/server/handlers/conversations.ts
var conversations_exports = {};
__export(conversations_exports, {
CREATE_CONVERSATION_ROUTE: () => CREATE_CONVERSATION_ROUTE,
DELETE_CONVERSATION_ROUTE: () => DELETE_CONVERSATION_ROUTE,
GET_CONVERSATION_ITEMS_ROUTE: () => GET_CONVERSATION_ITEMS_ROUTE,
GET_CONVERSATION_ROUTE: () => GET_CONVERSATION_ROUTE
});
function buildConversationObject({ thread }) {
return {
id: thread.id,
object: "conversation",
thread
};
}
function buildConversationItemsList(items) {
return {
object: "list",
data: items,
first_id: items[0]?.id ?? null,
last_id: items.at(-1)?.id ?? null,
has_more: false
};
}
function buildConversationDeleted(conversationId) {
return {
id: conversationId,
object: "conversation.deleted",
deleted: true
};
}
var CREATE_CONVERSATION_ROUTE = createRoute({
method: "POST",
path: "/v1/conversations",
responseType: "json",
bodySchema: createConversationBodySchema,
responseSchema: conversationObjectSchema,
summary: "Create a conversation",
description: "Creates a new thread-backed conversation for agent-backed Responses API requests",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: MastraFGAPermissions.AGENTS_CREATE,
handler: async ({ mastra, requestContext, agent_id, conversation_id, resource_id, title, metadata }) => {
try {
if (!mastra) {
throw new HTTPException(500, { message: "Mastra instance is required for conversations" });
}
const agent = await getAgentFromSystem({ mastra, agentId: agent_id });
const memory = await agent.getMemory({ requestContext });
if (!memory) {
throw new HTTPException(400, { message: `Agent "${agent.id}" does not have memory configured` });
}
if (!await getAgentMemoryStore({ agent, requestContext })) {
throw new HTTPException(400, { message: `Memory storage is not configured for agent "${agent.id}"` });
}
const threadId = conversation_id ?? randomUUID();
const resourceId = getEffectiveResourceId(requestContext, resource_id) ?? threadId;
const thread = await memory.createThread({
threadId,
resourceId,
title,
metadata
});
return buildConversationObject({ thread });
} catch (error) {
return handleError(error, "Error creating conversation");
}
}
});
var GET_CONVERSATION_ROUTE = createRoute({
method: "GET",
path: "/v1/conversations/:conversationId",
responseType: "json",
pathParamSchema: conversationIdPathParams,
responseSchema: conversationObjectSchema,
summary: "Retrieve a conversation",
description: "Returns a conversation object backed by a Mastra memory thread",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });
if (!match) {
throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });
}
return buildConversationObject({ thread: match.thread });
} catch (error) {
return handleError(error, "Error retrieving conversation");
}
}
});
var GET_CONVERSATION_ITEMS_ROUTE = createRoute({
method: "GET",
path: "/v1/conversations/:conversationId/items",
responseType: "json",
pathParamSchema: conversationIdPathParams,
responseSchema: conversationItemsListSchema,
summary: "List conversation items",
description: "Returns OpenAI-style conversation items derived from the stored thread messages",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });
if (!match) {
throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });
}
const { messages } = await match.memoryStore.listMessages({
threadId: conversationId,
page: 0,
perPage: 1e3
});
return buildConversationItemsList(mapMastraMessagesToConversationItems(messages));
} catch (error) {
return handleError(error, "Error retrieving conversation");
}
}
});
var DELETE_CONVERSATION_ROUTE = createRoute({
method: "DELETE",
path: "/v1/conversations/:conversationId",
responseType: "json",
pathParamSchema: conversationIdPathParams,
responseSchema: conversationDeletedSchema,
summary: "Delete a conversation",
description: "Deletes a thread-backed conversation and its stored items",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: MastraFGAPermissions.AGENTS_DELETE,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });
if (!match) {
throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });
}
await match.memoryStore.deleteThread({ threadId: conversationId });
return buildConversationDeleted(conversationId);
} catch (error) {
return handleError(error, "Error deleting conversation");
}
}
});
export { CREATE_CONVERSATION_ROUTE, DELETE_CONVERSATION_ROUTE, GET_CONVERSATION_ITEMS_ROUTE, GET_CONVERSATION_ROUTE, conversations_exports };
//# sourceMappingURL=chunk-2FNOQ5EO.js.map
//# sourceMappingURL=chunk-2FNOQ5EO.js.map
{"version":3,"sources":["../src/server/handlers/conversations.ts"],"names":[],"mappings":"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","file":"chunk-2FNOQ5EO.js","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n conversationDeletedSchema,\n conversationIdPathParams,\n conversationItemsListSchema,\n conversationObjectSchema,\n createConversationBodySchema,\n} from '../schemas/conversations';\nimport type { ConversationDeleted, ConversationItemsList, ConversationObject } from '../schemas/conversations';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\nimport { mapMastraMessagesToConversationItems } from './responses.adapter';\nimport { findConversationThreadAcrossAgents, getAgentMemoryStore } from './responses.storage';\nimport { getEffectiveResourceId } from './utils';\n\nfunction buildConversationObject({ thread }: { thread: ConversationObject['thread'] }): ConversationObject {\n return {\n id: thread.id,\n object: 'conversation',\n thread,\n };\n}\n\nfunction buildConversationItemsList(items: ConversationItemsList['data']): ConversationItemsList {\n return {\n object: 'list',\n data: items,\n first_id: items[0]?.id ?? null,\n last_id: items.at(-1)?.id ?? null,\n has_more: false,\n };\n}\n\nfunction buildConversationDeleted(conversationId: string): ConversationDeleted {\n return {\n id: conversationId,\n object: 'conversation.deleted',\n deleted: true,\n };\n}\n\nexport const CREATE_CONVERSATION_ROUTE = createRoute({\n method: 'POST',\n path: '/v1/conversations',\n responseType: 'json',\n bodySchema: createConversationBodySchema,\n responseSchema: conversationObjectSchema,\n summary: 'Create a conversation',\n description: 'Creates a new thread-backed conversation for agent-backed Responses API requests',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_CREATE,\n handler: async ({ mastra, requestContext, agent_id, conversation_id, resource_id, title, metadata }) => {\n try {\n if (!mastra) {\n throw new HTTPException(500, { message: 'Mastra instance is required for conversations' });\n }\n\n const agent = await getAgentFromSystem({ mastra, agentId: agent_id });\n const memory = await agent.getMemory({ requestContext });\n if (!memory) {\n throw new HTTPException(400, { message: `Agent \"${agent.id}\" does not have memory configured` });\n }\n if (!(await getAgentMemoryStore({ agent, requestContext }))) {\n throw new HTTPException(400, { message: `Memory storage is not configured for agent \"${agent.id}\"` });\n }\n\n const threadId = conversation_id ?? randomUUID();\n const resourceId = getEffectiveResourceId(requestContext, resource_id) ?? threadId;\n const thread = await memory.createThread({\n threadId,\n resourceId,\n title,\n metadata,\n });\n\n return buildConversationObject({ thread });\n } catch (error) {\n return handleError(error, 'Error creating conversation');\n }\n },\n});\n\nexport const GET_CONVERSATION_ROUTE = createRoute({\n method: 'GET',\n path: '/v1/conversations/:conversationId',\n responseType: 'json',\n pathParamSchema: conversationIdPathParams,\n responseSchema: conversationObjectSchema,\n summary: 'Retrieve a conversation',\n description: 'Returns a conversation object backed by a Mastra memory thread',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_READ,\n handler: async ({ mastra, requestContext, conversationId }) => {\n try {\n const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });\n if (!match) {\n throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });\n }\n\n return buildConversationObject({ thread: match.thread });\n } catch (error) {\n return handleError(error, 'Error retrieving conversation');\n }\n },\n});\n\nexport const GET_CONVERSATION_ITEMS_ROUTE = createRoute({\n method: 'GET',\n path: '/v1/conversations/:conversationId/items',\n responseType: 'json',\n pathParamSchema: conversationIdPathParams,\n responseSchema: conversationItemsListSchema,\n summary: 'List conversation items',\n description: 'Returns OpenAI-style conversation items derived from the stored thread messages',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_READ,\n handler: async ({ mastra, requestContext, conversationId }) => {\n try {\n const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });\n if (!match) {\n throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });\n }\n\n const { messages } = await match.memoryStore.listMessages({\n threadId: conversationId,\n page: 0,\n perPage: 1000,\n });\n\n return buildConversationItemsList(mapMastraMessagesToConversationItems(messages));\n } catch (error) {\n return handleError(error, 'Error retrieving conversation');\n }\n },\n});\n\nexport const DELETE_CONVERSATION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/v1/conversations/:conversationId',\n responseType: 'json',\n pathParamSchema: conversationIdPathParams,\n responseSchema: conversationDeletedSchema,\n summary: 'Delete a conversation',\n description: 'Deletes a thread-backed conversation and its stored items',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_DELETE,\n handler: async ({ mastra, requestContext, conversationId }) => {\n try {\n const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });\n if (!match) {\n throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });\n }\n\n await match.memoryStore.deleteThread({ threadId: conversationId });\n\n return buildConversationDeleted(conversationId);\n } catch (error) {\n return handleError(error, 'Error deleting conversation');\n }\n },\n});\n"]}
import { modelConfigSchema } from './chunk-5HBR27TT.js';
import { createPagePaginationSchema, paginationInfoSchema } from './chunk-6VTOGOS2.js';
import { z } from 'zod/v4';
var storedScorerIdPathParams = z.object({
storedScorerId: z.string().describe("Unique identifier for the stored scorer definition")
});
var storageOrderBySchema = z.object({
field: z.enum(["createdAt", "updatedAt"]).optional(),
direction: z.enum(["ASC", "DESC"]).optional()
});
var listStoredScorersQuerySchema = createPagePaginationSchema(100).extend({
orderBy: storageOrderBySchema.optional(),
status: z.enum(["draft", "published", "archived"]).optional().default("published").describe("Filter scorers by status (defaults to published)"),
authorId: z.string().optional().describe("Filter scorers by author identifier"),
metadata: z.record(z.string(), z.unknown()).optional().describe("Filter scorers by metadata key-value pairs")
});
var samplingConfigSchema = z.union([
z.object({ type: z.literal("none") }),
z.object({ type: z.literal("ratio"), rate: z.number().min(0).max(1) })
]);
var scorerTypeEnum = z.enum([
"llm-judge",
"answer-relevancy",
"answer-similarity",
"bias",
"context-precision",
"context-relevance",
"faithfulness",
"hallucination",
"noise-sensitivity",
"prompt-alignment",
"tool-call-accuracy",
"toxicity"
]).describe("Scorer type: llm-judge for custom, or a preset type name");
var snapshotConfigSchema = z.object({
name: z.string().describe("Name of the scorer"),
description: z.string().optional().describe("Description of the scorer"),
type: scorerTypeEnum,
model: modelConfigSchema.optional().describe("Model configuration for LLM judge"),
instructions: z.string().optional().describe("System instructions for the judge LLM (used when type is llm-judge)"),
scoreRange: z.object({
min: z.number().optional().describe("Minimum score value (default: 0)"),
max: z.number().optional().describe("Maximum score value (default: 1)")
}).optional().describe("Score range configuration (used when type is llm-judge)"),
presetConfig: z.record(z.string(), z.unknown()).optional().describe("Serializable config options for preset scorers"),
defaultSampling: samplingConfigSchema.optional().describe("Default sampling configuration")
});
var createStoredScorerBodySchema = z.object({
id: z.string().optional().describe("Unique identifier. If not provided, derived from name."),
authorId: z.string().optional().describe("Author identifier for multi-tenant filtering"),
metadata: z.record(z.string(), z.unknown()).optional().describe("Additional metadata for the scorer")
}).merge(snapshotConfigSchema);
var updateStoredScorerBodySchema = z.object({
authorId: z.string().optional(),
metadata: z.record(z.string(), z.unknown()).optional()
}).partial().merge(snapshotConfigSchema.partial());
var storedScorerSchema = z.object({
id: z.string(),
status: z.string().describe("Scorer status: draft, published, or archived"),
activeVersionId: z.string().optional(),
authorId: z.string().optional(),
metadata: z.record(z.string(), z.unknown()).optional(),
createdAt: z.coerce.date(),
updatedAt: z.coerce.date(),
name: z.string().describe("Name of the scorer"),
description: z.string().optional().describe("Description of the scorer"),
type: scorerTypeEnum,
model: modelConfigSchema.optional(),
instructions: z.string().optional().describe("System instructions for the judge LLM"),
scoreRange: z.object({
min: z.number().optional(),
max: z.number().optional()
}).optional(),
presetConfig: z.record(z.string(), z.unknown()).optional(),
defaultSampling: samplingConfigSchema.optional()
});
var listStoredScorersResponseSchema = paginationInfoSchema.extend({
scorerDefinitions: z.array(storedScorerSchema)
});
var getStoredScorerResponseSchema = storedScorerSchema;
var createStoredScorerResponseSchema = storedScorerSchema;
var updateStoredScorerResponseSchema = z.union([
z.object({
id: z.string(),
status: z.string(),
activeVersionId: z.string().optional(),
authorId: z.string().optional(),
metadata: z.record(z.string(), z.unknown()).optional(),
createdAt: z.coerce.date(),
updatedAt: z.coerce.date()
}),
storedScorerSchema
]);
var deleteStoredScorerResponseSchema = z.object({
success: z.boolean(),
message: z.string()
});
export { createStoredScorerBodySchema, createStoredScorerResponseSchema, deleteStoredScorerResponseSchema, getStoredScorerResponseSchema, listStoredScorersQuerySchema, listStoredScorersResponseSchema, storedScorerIdPathParams, storedScorerSchema, updateStoredScorerBodySchema, updateStoredScorerResponseSchema };
//# sourceMappingURL=chunk-3G43R5VJ.js.map
//# sourceMappingURL=chunk-3G43R5VJ.js.map
{"version":3,"sources":["../src/server/schemas/stored-scorers.ts"],"names":[],"mappings":"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","file":"chunk-3G43R5VJ.js","sourcesContent":["import { z } from 'zod/v4';\n\nimport { paginationInfoSchema, createPagePaginationSchema, statusQuerySchema } from './common';\nimport { modelConfigSchema } from './stored-agents';\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\nexport const storedScorerIdPathParams = z.object({\n storedScorerId: z.string().describe('Unique identifier for the stored scorer definition'),\n});\n\n// ============================================================================\n// Query Parameter Schemas\n// ============================================================================\n\nconst storageOrderBySchema = z.object({\n field: z.enum(['createdAt', 'updatedAt']).optional(),\n direction: z.enum(['ASC', 'DESC']).optional(),\n});\n\nexport { statusQuerySchema };\n\nexport const listStoredScorersQuerySchema = createPagePaginationSchema(100).extend({\n orderBy: storageOrderBySchema.optional(),\n status: z\n .enum(['draft', 'published', 'archived'])\n .optional()\n .default('published')\n .describe('Filter scorers by status (defaults to published)'),\n authorId: z.string().optional().describe('Filter scorers by author identifier'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Filter scorers by metadata key-value pairs'),\n});\n\n// ============================================================================\n// Body Parameter Schemas\n// ============================================================================\n\nconst samplingConfigSchema = z.union([\n z.object({ type: z.literal('none') }),\n z.object({ type: z.literal('ratio'), rate: z.number().min(0).max(1) }),\n]);\n\nconst scorerTypeEnum = z\n .enum([\n 'llm-judge',\n 'answer-relevancy',\n 'answer-similarity',\n 'bias',\n 'context-precision',\n 'context-relevance',\n 'faithfulness',\n 'hallucination',\n 'noise-sensitivity',\n 'prompt-alignment',\n 'tool-call-accuracy',\n 'toxicity',\n ])\n .describe('Scorer type: llm-judge for custom, or a preset type name');\n\nconst snapshotConfigSchema = z.object({\n name: z.string().describe('Name of the scorer'),\n description: z.string().optional().describe('Description of the scorer'),\n type: scorerTypeEnum,\n model: modelConfigSchema.optional().describe('Model configuration for LLM judge'),\n instructions: z.string().optional().describe('System instructions for the judge LLM (used when type is llm-judge)'),\n scoreRange: z\n .object({\n min: z.number().optional().describe('Minimum score value (default: 0)'),\n max: z.number().optional().describe('Maximum score value (default: 1)'),\n })\n .optional()\n .describe('Score range configuration (used when type is llm-judge)'),\n presetConfig: z.record(z.string(), z.unknown()).optional().describe('Serializable config options for preset scorers'),\n defaultSampling: samplingConfigSchema.optional().describe('Default sampling configuration'),\n});\n\nexport const createStoredScorerBodySchema = z\n .object({\n id: z.string().optional().describe('Unique identifier. If not provided, derived from name.'),\n authorId: z.string().optional().describe('Author identifier for multi-tenant filtering'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata for the scorer'),\n })\n .merge(snapshotConfigSchema);\n\nexport const updateStoredScorerBodySchema = z\n .object({\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .partial()\n .merge(snapshotConfigSchema.partial());\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\nexport const storedScorerSchema = z.object({\n id: z.string(),\n status: z.string().describe('Scorer status: draft, published, or archived'),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n name: z.string().describe('Name of the scorer'),\n description: z.string().optional().describe('Description of the scorer'),\n type: scorerTypeEnum,\n model: modelConfigSchema.optional(),\n instructions: z.string().optional().describe('System instructions for the judge LLM'),\n scoreRange: z\n .object({\n min: z.number().optional(),\n max: z.number().optional(),\n })\n .optional(),\n presetConfig: z.record(z.string(), z.unknown()).optional(),\n defaultSampling: samplingConfigSchema.optional(),\n});\n\nexport const listStoredScorersResponseSchema = paginationInfoSchema.extend({\n scorerDefinitions: z.array(storedScorerSchema),\n});\n\nexport const getStoredScorerResponseSchema = storedScorerSchema;\nexport const createStoredScorerResponseSchema = storedScorerSchema;\n\nexport const updateStoredScorerResponseSchema = z.union([\n z.object({\n id: z.string(),\n status: z.string(),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n }),\n storedScorerSchema,\n]);\n\nexport const deleteStoredScorerResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n});\n"]}
import { listScorerVersionsResponseSchema, listScorerVersionsQuerySchema, scorerVersionPathParams, createScorerVersionResponseSchema, createScorerVersionBodySchema, getScorerVersionResponseSchema, scorerVersionIdPathParams, activateScorerVersionResponseSchema, restoreScorerVersionResponseSchema, deleteScorerVersionResponseSchema, compareScorerVersionsResponseSchema, compareScorerVersionsQuerySchema } from './chunk-VTD4AE3B.js';
import { extractConfigFromVersion, calculateChangedFields, createVersionWithRetry, enforceRetentionLimit, computeVersionDiffs } from './chunk-33QPJPK4.js';
import { assertStoredResourceScope, getStoredResourceScope } from './chunk-4GWTCVFL.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
// src/server/handlers/scorer-versions.ts
var SNAPSHOT_CONFIG_FIELDS = [
"name",
"description",
"type",
"model",
"instructions",
"scoreRange",
"presetConfig",
"defaultSampling"
];
var LIST_SCORER_VERSIONS_ROUTE = createRoute({
method: "GET",
path: "/stored/scorers/:scorerId/versions",
requiresAuth: true,
responseType: "json",
pathParamSchema: scorerVersionPathParams,
queryParamSchema: listScorerVersionsQuerySchema,
responseSchema: listScorerVersionsResponseSchema,
summary: "List scorer versions",
description: "Returns a paginated list of all versions for a stored scorer",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, page, perPage, orderBy, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));
const result = await scorerStore.listVersions({
scorerDefinitionId: scorerId,
page,
perPage,
orderBy
});
return result;
} catch (error) {
return handleError(error, "Error listing scorer versions");
}
}
});
var CREATE_SCORER_VERSION_ROUTE = createRoute({
method: "POST",
path: "/stored/scorers/:scorerId/versions",
requiresAuth: true,
responseType: "json",
pathParamSchema: scorerVersionPathParams,
bodySchema: createScorerVersionBodySchema,
responseSchema: createScorerVersionResponseSchema,
summary: "Create scorer version",
description: "Creates a new version snapshot of the current scorer configuration",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, changeMessage, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));
let currentConfig = {};
if (scorer.activeVersionId) {
const activeVersion = await scorerStore.getVersion(scorer.activeVersionId);
if (activeVersion) {
currentConfig = extractConfigFromVersion(
activeVersion,
SNAPSHOT_CONFIG_FIELDS
);
}
}
const latestVersion = await scorerStore.getLatestVersion(scorerId);
if (!scorer.activeVersionId && latestVersion) {
currentConfig = extractConfigFromVersion(
latestVersion,
SNAPSHOT_CONFIG_FIELDS
);
}
const previousConfig = latestVersion ? extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
const changedFields = calculateChangedFields(previousConfig, currentConfig);
const { versionId } = await createVersionWithRetry(
scorerStore,
scorerId,
"scorerDefinitionId",
currentConfig,
changedFields,
{ changeMessage }
);
const version = await scorerStore.getVersion(versionId);
if (!version) {
throw new HTTPException(500, { message: "Failed to retrieve created version" });
}
await enforceRetentionLimit(
scorerStore,
scorerId,
"scorerDefinitionId",
scorer.activeVersionId
);
return version;
} catch (error) {
return handleError(error, "Error creating scorer version");
}
}
});
var GET_SCORER_VERSION_ROUTE = createRoute({
method: "GET",
path: "/stored/scorers/:scorerId/versions/:versionId",
requiresAuth: true,
responseType: "json",
pathParamSchema: scorerVersionIdPathParams,
responseSchema: getScorerVersionResponseSchema,
summary: "Get scorer version",
description: "Returns a specific version of a scorer by its version ID",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const version = await scorerStore.getVersion(versionId);
if (!version) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.scorerDefinitionId !== scorerId) {
throw new HTTPException(404, {
message: `Version with id ${versionId} not found for scorer ${scorerId}`
});
}
const scorer = await scorerStore.getById(scorerId);
assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));
return version;
} catch (error) {
return handleError(error, "Error getting scorer version");
}
}
});
var ACTIVATE_SCORER_VERSION_ROUTE = createRoute({
method: "POST",
path: "/stored/scorers/:scorerId/versions/:versionId/activate",
requiresAuth: true,
responseType: "json",
pathParamSchema: scorerVersionIdPathParams,
responseSchema: activateScorerVersionResponseSchema,
summary: "Activate scorer version",
description: "Sets a specific version as the active version for the scorer",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));
const version = await scorerStore.getVersion(versionId);
if (!version) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.scorerDefinitionId !== scorerId) {
throw new HTTPException(404, {
message: `Version with id ${versionId} not found for scorer ${scorerId}`
});
}
await scorerStore.update({
id: scorerId,
activeVersionId: versionId,
status: "published"
});
mastra.getEditor()?.scorer.clearCache(scorerId);
return {
success: true,
message: `Version ${version.versionNumber} is now active`,
activeVersionId: versionId
};
} catch (error) {
return handleError(error, "Error activating scorer version");
}
}
});
var RESTORE_SCORER_VERSION_ROUTE = createRoute({
method: "POST",
path: "/stored/scorers/:scorerId/versions/:versionId/restore",
requiresAuth: true,
responseType: "json",
pathParamSchema: scorerVersionIdPathParams,
responseSchema: restoreScorerVersionResponseSchema,
summary: "Restore scorer version",
description: "Restores the scorer configuration from a version, creating a new version",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));
const versionToRestore = await scorerStore.getVersion(versionId);
if (!versionToRestore) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (versionToRestore.scorerDefinitionId !== scorerId) {
throw new HTTPException(404, {
message: `Version with id ${versionId} not found for scorer ${scorerId}`
});
}
const restoredConfig = extractConfigFromVersion(
versionToRestore,
SNAPSHOT_CONFIG_FIELDS
);
await scorerStore.update({
id: scorerId,
...restoredConfig
});
const latestVersion = await scorerStore.getLatestVersion(scorerId);
const previousConfig = latestVersion ? extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
const changedFields = calculateChangedFields(previousConfig, restoredConfig);
const { versionId: newVersionId } = await createVersionWithRetry(
scorerStore,
scorerId,
"scorerDefinitionId",
restoredConfig,
changedFields,
{
changeMessage: `Restored from version ${versionToRestore.versionNumber}`
}
);
const newVersion = await scorerStore.getVersion(newVersionId);
if (!newVersion) {
throw new HTTPException(500, { message: "Failed to retrieve created version" });
}
await enforceRetentionLimit(
scorerStore,
scorerId,
"scorerDefinitionId",
scorer.activeVersionId
);
mastra.getEditor()?.scorer.clearCache(scorerId);
return newVersion;
} catch (error) {
return handleError(error, "Error restoring scorer version");
}
}
});
var DELETE_SCORER_VERSION_ROUTE = createRoute({
method: "DELETE",
path: "/stored/scorers/:scorerId/versions/:versionId",
requiresAuth: true,
responseType: "json",
pathParamSchema: scorerVersionIdPathParams,
responseSchema: deleteScorerVersionResponseSchema,
summary: "Delete scorer version",
description: "Deletes a specific version (cannot delete the active version)",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));
const version = await scorerStore.getVersion(versionId);
if (!version) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.scorerDefinitionId !== scorerId) {
throw new HTTPException(404, {
message: `Version with id ${versionId} not found for scorer ${scorerId}`
});
}
if (scorer.activeVersionId === versionId) {
throw new HTTPException(400, {
message: "Cannot delete the active version. Activate a different version first."
});
}
await scorerStore.deleteVersion(versionId);
mastra.getEditor()?.scorer.clearCache(scorerId);
return {
success: true,
message: `Version ${version.versionNumber} deleted successfully`
};
} catch (error) {
return handleError(error, "Error deleting scorer version");
}
}
});
var COMPARE_SCORER_VERSIONS_ROUTE = createRoute({
method: "GET",
path: "/stored/scorers/:scorerId/versions/compare",
requiresAuth: true,
responseType: "json",
pathParamSchema: scorerVersionPathParams,
queryParamSchema: compareScorerVersionsQuerySchema,
responseSchema: compareScorerVersionsResponseSchema,
summary: "Compare scorer versions",
description: "Compares two versions and returns the differences between them",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, from, to, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));
const fromVersion = await scorerStore.getVersion(from);
if (!fromVersion) {
throw new HTTPException(404, { message: `Version with id ${from} not found` });
}
if (fromVersion.scorerDefinitionId !== scorerId) {
throw new HTTPException(404, {
message: `Version with id ${from} not found for scorer ${scorerId}`
});
}
const toVersion = await scorerStore.getVersion(to);
if (!toVersion) {
throw new HTTPException(404, { message: `Version with id ${to} not found` });
}
if (toVersion.scorerDefinitionId !== scorerId) {
throw new HTTPException(404, {
message: `Version with id ${to} not found for scorer ${scorerId}`
});
}
const fromConfig = extractConfigFromVersion(
fromVersion,
SNAPSHOT_CONFIG_FIELDS
);
const toConfig = extractConfigFromVersion(
toVersion,
SNAPSHOT_CONFIG_FIELDS
);
const diffs = computeVersionDiffs(fromConfig, toConfig);
return {
diffs,
fromVersion,
toVersion
};
} catch (error) {
return handleError(error, "Error comparing scorer versions");
}
}
});
export { ACTIVATE_SCORER_VERSION_ROUTE, COMPARE_SCORER_VERSIONS_ROUTE, CREATE_SCORER_VERSION_ROUTE, DELETE_SCORER_VERSION_ROUTE, GET_SCORER_VERSION_ROUTE, LIST_SCORER_VERSIONS_ROUTE, RESTORE_SCORER_VERSION_ROUTE };
//# sourceMappingURL=chunk-3SQNEUDQ.js.map
//# sourceMappingURL=chunk-3SQNEUDQ.js.map
{"version":3,"sources":["../src/server/handlers/scorer-versions.ts"],"names":[],"mappings":"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","file":"chunk-3SQNEUDQ.js","sourcesContent":["import { HTTPException } from '../http-exception';\nimport {\n scorerVersionPathParams,\n scorerVersionIdPathParams,\n listScorerVersionsQuerySchema,\n createScorerVersionBodySchema,\n compareScorerVersionsQuerySchema,\n listScorerVersionsResponseSchema,\n getScorerVersionResponseSchema,\n createScorerVersionResponseSchema,\n activateScorerVersionResponseSchema,\n restoreScorerVersionResponseSchema,\n deleteScorerVersionResponseSchema,\n compareScorerVersionsResponseSchema,\n} from '../schemas/scorer-versions';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { handleError } from './error';\nimport {\n extractConfigFromVersion,\n calculateChangedFields,\n computeVersionDiffs,\n createVersionWithRetry,\n enforceRetentionLimit,\n} from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\nconst SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'type',\n 'model',\n 'instructions',\n 'scoreRange',\n 'presetConfig',\n 'defaultSampling',\n] as const;\n\n/**\n * GET /stored/scorers/:scorerId/versions - List all versions for a scorer\n */\nexport const LIST_SCORER_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:scorerId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionPathParams,\n queryParamSchema: listScorerVersionsQuerySchema,\n responseSchema: listScorerVersionsResponseSchema,\n summary: 'List scorer versions',\n description: 'Returns a paginated list of all versions for a stored scorer',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, page, perPage, orderBy, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const result = await scorerStore.listVersions({\n scorerDefinitionId: scorerId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing scorer versions');\n }\n },\n});\n\n/**\n * POST /stored/scorers/:scorerId/versions - Create a new version snapshot\n */\nexport const CREATE_SCORER_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers/:scorerId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionPathParams,\n bodySchema: createScorerVersionBodySchema,\n responseSchema: createScorerVersionResponseSchema,\n summary: 'Create scorer version',\n description: 'Creates a new version snapshot of the current scorer configuration',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, changeMessage, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n let currentConfig: Record<string, unknown> = {};\n if (scorer.activeVersionId) {\n const activeVersion = await scorerStore.getVersion(scorer.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n const latestVersion = await scorerStore.getLatestVersion(scorerId);\n\n // If no activeVersionId, fall back to latest version config\n if (!scorer.activeVersionId && latestVersion) {\n currentConfig = extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, currentConfig);\n\n const { versionId } = await createVersionWithRetry(\n scorerStore as unknown as VersionedStoreInterface,\n scorerId,\n 'scorerDefinitionId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n const version = await scorerStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n scorerStore as unknown as VersionedStoreInterface,\n scorerId,\n 'scorerDefinitionId',\n scorer.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating scorer version');\n }\n },\n});\n\n/**\n * GET /stored/scorers/:scorerId/versions/:versionId - Get a specific version\n */\nexport const GET_SCORER_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:scorerId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionIdPathParams,\n responseSchema: getScorerVersionResponseSchema,\n summary: 'Get scorer version',\n description: 'Returns a specific version of a scorer by its version ID',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const version = await scorerStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n if (version.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for scorer ${scorerId}`,\n });\n }\n const scorer = await scorerStore.getById(scorerId);\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting scorer version');\n }\n },\n});\n\n/**\n * POST /stored/scorers/:scorerId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_SCORER_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers/:scorerId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionIdPathParams,\n responseSchema: activateScorerVersionResponseSchema,\n summary: 'Activate scorer version',\n description: 'Sets a specific version as the active version for the scorer',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const version = await scorerStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for scorer ${scorerId}`,\n });\n }\n\n await scorerStore.update({\n id: scorerId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.scorer.clearCache(scorerId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} is now active`,\n activeVersionId: versionId,\n };\n } catch (error) {\n return handleError(error, 'Error activating scorer version');\n }\n },\n});\n\n/**\n * POST /stored/scorers/:scorerId/versions/:versionId/restore - Restore scorer to a version\n */\nexport const RESTORE_SCORER_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers/:scorerId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionIdPathParams,\n responseSchema: restoreScorerVersionResponseSchema,\n summary: 'Restore scorer version',\n description: 'Restores the scorer configuration from a version, creating a new version',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const versionToRestore = await scorerStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for scorer ${scorerId}`,\n });\n }\n\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n await scorerStore.update({\n id: scorerId,\n ...restoredConfig,\n });\n\n const latestVersion = await scorerStore.getLatestVersion(scorerId);\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, restoredConfig);\n\n const { versionId: newVersionId } = await createVersionWithRetry(\n scorerStore as unknown as VersionedStoreInterface,\n scorerId,\n 'scorerDefinitionId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n const newVersion = await scorerStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n scorerStore as unknown as VersionedStoreInterface,\n scorerId,\n 'scorerDefinitionId',\n scorer.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.scorer.clearCache(scorerId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring scorer version');\n }\n },\n});\n\n/**\n * DELETE /stored/scorers/:scorerId/versions/:versionId - Delete a version\n */\nexport const DELETE_SCORER_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/scorers/:scorerId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionIdPathParams,\n responseSchema: deleteScorerVersionResponseSchema,\n summary: 'Delete scorer version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const version = await scorerStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for scorer ${scorerId}`,\n });\n }\n\n if (scorer.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await scorerStore.deleteVersion(versionId);\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.scorer.clearCache(scorerId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting scorer version');\n }\n },\n});\n\n/**\n * GET /stored/scorers/:scorerId/versions/compare - Compare two versions\n */\nexport const COMPARE_SCORER_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:scorerId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionPathParams,\n queryParamSchema: compareScorerVersionsQuerySchema,\n responseSchema: compareScorerVersionsResponseSchema,\n summary: 'Compare scorer versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, from, to, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n const scorer = await scorerStore.getById(scorerId);\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const fromVersion = await scorerStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${from} not found for scorer ${scorerId}`,\n });\n }\n\n const toVersion = await scorerStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${to} not found for scorer ${scorerId}`,\n });\n }\n\n const fromConfig = extractConfigFromVersion(\n fromVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n const toConfig = extractConfigFromVersion(\n toVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n const diffs = computeVersionDiffs(fromConfig, toConfig);\n\n return {\n diffs,\n fromVersion,\n toVersion,\n };\n } catch (error) {\n return handleError(error, 'Error comparing scorer versions');\n }\n },\n});\n"]}
import { agentCardResponseSchema, a2aAgentIdPathParams, agentExecutionResponseSchema, agentExecutionBodySchema } from './chunk-J62MSX2P.js';
import { getAgentFromSystem } from './chunk-XORQIQXT.js';
import { getPublicOrigin } from './chunk-JF7G5FSK.js';
import { convertInstructionsToString } from './chunk-4GWTCVFL.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { __commonJS, __export, __toESM } from './chunk-PR4QN5HX.js';
import { isDeepStrictEqual } from 'util';
import { MastraA2AError } from '@mastra/core/a2a';
import { z } from 'zod/v4';
import * as crypto2 from 'crypto';
import { lookup } from 'dns/promises';
import { request as request$1 } from 'http';
import { request } from 'https';
import { isIP } from 'net';
// ../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/canonicalize/1.0.8/8d710dcf19a48d178b2fc853e16c59951fde29eb27b6037da6c3f4dbb968b03d/node_modules/canonicalize/lib/canonicalize.js
var require_canonicalize = __commonJS({
"../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/canonicalize/1.0.8/8d710dcf19a48d178b2fc853e16c59951fde29eb27b6037da6c3f4dbb968b03d/node_modules/canonicalize/lib/canonicalize.js"(exports, module) {
module.exports = function serialize(object) {
if (object === null || typeof object !== "object" || object.toJSON != null) {
return JSON.stringify(object);
}
if (Array.isArray(object)) {
return "[" + object.reduce((t, cv, ci) => {
const comma = ci === 0 ? "" : ",";
const value = cv === void 0 || typeof cv === "symbol" ? null : cv;
return t + comma + serialize(value);
}, "") + "]";
}
return "{" + Object.keys(object).sort().reduce((t, cv, ci) => {
if (object[cv] === void 0 || typeof object[cv] === "symbol") {
return t;
}
const comma = t.length === 0 ? "" : ",";
return t + comma + serialize(cv) + ":" + serialize(object[cv]);
}, "") + "}";
};
}
});
// src/server/handlers/a2a.ts
var a2a_exports = {};
__export(a2a_exports, {
AGENT_EXECUTION_ROUTE: () => AGENT_EXECUTION_ROUTE,
GET_AGENT_CARD_ROUTE: () => GET_AGENT_CARD_ROUTE,
getAgentCardByIdHandler: () => getAgentCardByIdHandler,
getAgentExecutionHandler: () => getAgentExecutionHandler,
handleDeleteTaskPushNotificationConfig: () => handleDeleteTaskPushNotificationConfig,
handleGetTaskPushNotificationConfig: () => handleGetTaskPushNotificationConfig,
handleListTaskPushNotificationConfig: () => handleListTaskPushNotificationConfig,
handleMessageSend: () => handleMessageSend,
handleMessageStream: () => handleMessageStream,
handleSetTaskPushNotificationConfig: () => handleSetTaskPushNotificationConfig,
handleTaskCancel: () => handleTaskCancel,
handleTaskGet: () => handleTaskGet,
handleTaskResubscribe: () => handleTaskResubscribe
});
// src/server/a2a/agent-card-signing.ts
var import_canonicalize = __toESM(require_canonicalize(), 1);
var SUPPORTED_JWS_ALGORITHMS = /* @__PURE__ */ new Set([
"ES256",
"ES384",
"ES512",
"RS256",
"RS384",
"RS512",
"PS256",
"PS384",
"PS512"
]);
function stripAgentCardSignatures(agentCard) {
const unsignedCard = structuredClone(agentCard);
delete unsignedCard.signatures;
return unsignedCard;
}
function importSigningKey(signing) {
const { privateKey } = signing;
if (typeof privateKey === "string") {
return crypto2.createPrivateKey(privateKey);
}
return crypto2.createPrivateKey({
key: privateKey,
format: "jwk"
});
}
function getProtectedHeader(signing) {
const { alg, ...rest } = signing.protectedHeader;
if (!SUPPORTED_JWS_ALGORITHMS.has(alg)) {
throw new Error(`Unsupported JWS algorithm for A2A Agent Card signing: ${alg}`);
}
return {
...rest,
alg
};
}
function getSignatureOptions(algorithm) {
if (algorithm.startsWith("ES")) {
return { dsaEncoding: "ieee-p1363" };
}
if (algorithm.startsWith("PS")) {
return {
padding: crypto2.constants.RSA_PKCS1_PSS_PADDING,
saltLength: crypto2.constants.RSA_PSS_SALTLEN_DIGEST
};
}
return {};
}
function getDigestAlgorithm(algorithm) {
if (algorithm.endsWith("256")) return "sha256";
if (algorithm.endsWith("384")) return "sha384";
if (algorithm.endsWith("512")) return "sha512";
throw new Error(`Unsupported JWS algorithm for A2A Agent Card signing: ${algorithm}`);
}
async function signAgentCard({
agentCard,
signing
}) {
const canonicalPayload = (0, import_canonicalize.default)(stripAgentCardSignatures(agentCard));
if (!canonicalPayload) {
throw new Error("Failed to canonicalize A2A Agent Card for signing");
}
const key = importSigningKey(signing);
const protectedHeader = getProtectedHeader(signing);
const encodedHeader = Buffer.from(JSON.stringify(protectedHeader), "utf8").toString("base64url");
const encodedPayload = Buffer.from(canonicalPayload, "utf8").toString("base64url");
const signingInput = `${encodedHeader}.${encodedPayload}`;
const signatureBuffer = crypto2.sign(
getDigestAlgorithm(String(protectedHeader.alg)),
Buffer.from(signingInput, "utf8"),
{
key,
...getSignatureOptions(String(protectedHeader.alg))
}
);
const signatureValue = signatureBuffer.toString("base64url");
if (!encodedHeader || !signatureValue) {
throw new Error("Failed to create compact JWS for A2A Agent Card");
}
const signature = {
protected: encodedHeader,
signature: signatureValue,
header: signing.header
};
return {
...agentCard,
signatures: [...agentCard.signatures ?? [], signature]
};
}
function normalizeError(error, reqId, taskId, logger) {
let a2aError;
if (error instanceof MastraA2AError) {
a2aError = error;
} else if (error instanceof Error) {
a2aError = MastraA2AError.internalError(error.message, { stack: error.stack });
} else {
a2aError = MastraA2AError.internalError("An unknown error occurred.", error);
}
if (taskId && !a2aError.taskId) {
a2aError.taskId = taskId;
}
logger?.error(`Error processing request (Task: ${a2aError.taskId ?? "N/A"}, ReqID: ${reqId ?? "N/A"}):`, a2aError);
return createErrorResponse(reqId, a2aError.toJSONRPCError());
}
function createErrorResponse(id, error) {
return {
jsonrpc: "2.0",
id,
// Can be null if request ID was invalid/missing
error
};
}
function createSuccessResponse(id, result) {
if (!id) {
throw MastraA2AError.internalError("Cannot create success response for null ID.");
}
return {
jsonrpc: "2.0",
id,
result
};
}
function convertToCoreMessage(message) {
return {
role: message.role === "user" ? "user" : "assistant",
content: message.parts.map((msg) => convertToCoreMessagePart(msg))
};
}
function convertToCoreMessagePart(part) {
switch (part.kind) {
case "text":
return {
type: "text",
text: part.text
};
case "file":
return {
type: "file",
data: "uri" in part.file ? new URL(part.file.uri) : part.file.bytes,
mimeType: part.file.mimeType
};
case "data":
throw new Error("Data parts are not supported in core messages");
}
}
var DEFAULT_PUSH_NOTIFICATION_TOKEN_HEADER = "X-A2A-Notification-Token";
function isDisallowedHostname(hostname) {
const normalized = hostname.toLowerCase();
return normalized === "localhost" || normalized.endsWith(".localhost") || normalized.endsWith(".local") || normalized.endsWith(".internal") || !normalized.includes(".");
}
function isDisallowedIpv4(address) {
const [first = -1, second = -1] = address.split(".").map(Number);
return first === 10 || first === 127 || first === 169 && second === 254 || first === 172 && second >= 16 && second <= 31 || first === 192 && second === 168;
}
function isDisallowedIpv6(address) {
const normalized = address.toLowerCase();
return normalized === "::1" || normalized.startsWith("fe8") || normalized.startsWith("fe9") || normalized.startsWith("fea") || normalized.startsWith("feb") || normalized.startsWith("fc") || normalized.startsWith("fd");
}
function isDisallowedIpAddress(address) {
const version = isIP(address);
if (version === 4) {
return isDisallowedIpv4(address);
}
if (version === 6) {
return isDisallowedIpv6(address);
}
return false;
}
var DefaultPushNotificationSender = class {
constructor(pushNotificationStore, options = {}) {
this.pushNotificationStore = pushNotificationStore;
this.options = options;
}
pushNotificationStore;
options;
getStore() {
return this.pushNotificationStore;
}
async resolveValidatedDestination(rawUrl) {
const url = new URL(rawUrl);
if (url.protocol !== "https:" && url.protocol !== "http:") {
throw new Error(`Push notification URL must use http or https: ${url.protocol}`);
}
const hostname = url.hostname.toLowerCase();
if (this.options.allowedHosts && !this.options.allowedHosts.includes(hostname)) {
throw new Error(`Push notification host is not allowed: ${hostname}`);
}
if (isDisallowedHostname(hostname)) {
throw new Error(`Push notification URL must not target local or internal hosts: ${hostname}`);
}
if (isDisallowedIpAddress(hostname)) {
throw new Error(`Push notification URL must not target local or private IPs: ${hostname}`);
}
const resolvedAddresses = isIP(hostname) === 0 ? await (this.options.lookup ?? lookup)(hostname, { all: true, verbatim: true }) : [{ address: hostname, family: isIP(hostname) }];
if (resolvedAddresses.some((result) => isDisallowedIpAddress(result.address))) {
throw new Error(`Push notification URL resolved to a local or private IP: ${hostname}`);
}
const requestUrl = new URL(url.toString());
requestUrl.hostname = resolvedAddresses[0].address;
return {
originalUrl: url,
requestUrl,
hostHeader: url.host,
servername: isIP(hostname) === 0 ? hostname : void 0
};
}
async postTaskSnapshot({
requestUrl,
hostHeader,
servername,
headers,
body,
timeout
}) {
headers.set("host", hostHeader);
const signal = typeof AbortSignal.timeout === "function" ? AbortSignal.timeout(timeout) : void 0;
if (this.options.fetch) {
return this.options.fetch(requestUrl.toString(), {
method: "POST",
headers,
body,
signal
});
}
const transport = requestUrl.protocol === "https:" ? request : request$1;
return await new Promise((resolve, reject) => {
const request = transport(
{
protocol: requestUrl.protocol,
hostname: requestUrl.hostname,
port: requestUrl.port || void 0,
path: `${requestUrl.pathname}${requestUrl.search}`,
method: "POST",
headers: Object.fromEntries(headers.entries()),
servername
},
(response) => {
response.resume();
response.on("end", () => {
resolve({
ok: !!response.statusCode && response.statusCode >= 200 && response.statusCode < 300,
status: response.statusCode ?? 0,
statusText: response.statusMessage ?? ""
});
});
}
);
request.on("error", reject);
if (signal) {
signal.addEventListener(
"abort",
() => {
request.destroy(signal.reason instanceof Error ? signal.reason : new Error("Push notification timed out"));
},
{ once: true }
);
}
request.end(body);
});
}
async sendNotifications({
agentId,
task,
logger
}) {
const configs = this.pushNotificationStore.list({
agentId,
params: { id: task.id }
});
if (configs.length === 0) {
return;
}
await Promise.allSettled(
configs.map(async (config) => {
const headers = new Headers({
"content-type": "application/json"
});
if (config.pushNotificationConfig.token) {
headers.set(
this.options.tokenHeaderName ?? DEFAULT_PUSH_NOTIFICATION_TOKEN_HEADER,
config.pushNotificationConfig.token
);
}
const auth = config.pushNotificationConfig.authentication;
if (auth?.credentials) {
if (auth.schemes.includes("Bearer")) {
headers.set("authorization", `Bearer ${auth.credentials}`);
} else if (auth.schemes.includes("Basic")) {
headers.set("authorization", `Basic ${auth.credentials}`);
}
}
const { requestUrl, hostHeader, servername } = await this.resolveValidatedDestination(
config.pushNotificationConfig.url
);
const response = await this.postTaskSnapshot({
requestUrl,
hostHeader,
servername,
headers,
body: JSON.stringify(task),
timeout: this.options.timeout ?? 5e3
});
if (!response.ok) {
throw new Error(
`Push notification failed with status ${response.status} ${response.statusText ?? ""}`.trim()
);
}
})
).then((results) => {
for (const result of results) {
if (result.status === "rejected") {
logger?.error("Failed to deliver A2A push notification", result.reason);
}
}
});
}
};
// src/server/a2a/push-notification-store.ts
function normalizeConfigId(taskId, configId) {
return configId || taskId;
}
var InMemoryPushNotificationStore = class {
store = /* @__PURE__ */ new Map();
getKey(agentId, taskId) {
return JSON.stringify([agentId, taskId]);
}
set({ agentId, config }) {
const key = this.getKey(agentId, config.taskId);
const configs = this.store.get(key) ?? /* @__PURE__ */ new Map();
const normalizedConfig = {
taskId: config.taskId,
pushNotificationConfig: {
...config.pushNotificationConfig,
id: normalizeConfigId(config.taskId, config.pushNotificationConfig.id)
}
};
configs.set(normalizedConfig.pushNotificationConfig.id, structuredClone(normalizedConfig));
this.store.set(key, configs);
return structuredClone(normalizedConfig);
}
get({
agentId,
params
}) {
const key = this.getKey(agentId, params.id);
const configId = normalizeConfigId(params.id, params.pushNotificationConfigId);
const config = this.store.get(key)?.get(configId);
return config ? structuredClone(config) : null;
}
list({
agentId,
params
}) {
const key = this.getKey(agentId, params.id);
return Array.from(this.store.get(key)?.values() ?? []).map((config) => structuredClone(config));
}
delete({ agentId, params }) {
const key = this.getKey(agentId, params.id);
const configs = this.store.get(key);
if (!configs) {
return false;
}
const deleted = configs.delete(params.pushNotificationConfigId);
if (configs.size === 0) {
this.store.delete(key);
}
return deleted;
}
};
// src/server/a2a/tasks.ts
function isTaskStatusUpdate(update) {
return "state" in update && !("parts" in update);
}
function isArtifactUpdate(update) {
return "kind" in update && update.kind === "artifact-update";
}
function applyUpdateToTask(current, update) {
let newTask = structuredClone(current);
if (isTaskStatusUpdate(update)) {
newTask.status = {
...newTask.status,
// Keep existing properties if not overwritten
...update,
// Apply updates
timestamp: (/* @__PURE__ */ new Date()).toISOString()
};
} else if (isArtifactUpdate(update)) {
if (!newTask.artifacts) {
newTask.artifacts = [];
} else {
newTask.artifacts = [...newTask.artifacts];
}
const artifact = update.artifact;
const existingIndex = newTask.artifacts.findIndex((a) => a.name === artifact.name);
const existingArtifact = newTask.artifacts[existingIndex];
if (existingArtifact) {
if (update.append) {
const appendedArtifact = JSON.parse(JSON.stringify(existingArtifact));
appendedArtifact.parts.push(...artifact.parts);
if (artifact.metadata) {
appendedArtifact.metadata = {
...appendedArtifact.metadata || {},
...artifact.metadata
};
}
if (artifact.description) appendedArtifact.description = artifact.description;
newTask.artifacts[existingIndex] = appendedArtifact;
} else {
newTask.artifacts[existingIndex] = { ...artifact };
}
} else {
newTask.artifacts.push({ ...artifact });
}
}
return newTask;
}
async function loadOrCreateTask({
agentId,
taskId,
taskStore,
message,
contextId,
metadata,
logger
}) {
const data = await taskStore.load({ agentId, taskId });
if (!data) {
const initialTask = {
id: taskId,
contextId: contextId || crypto.randomUUID(),
status: {
state: "submitted",
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
message: void 0
},
artifacts: [],
history: [message],
metadata,
kind: "task"
};
logger?.info(`[Task ${taskId}] Created new task.`);
await taskStore.save({ agentId, data: initialTask });
return initialTask;
}
logger?.info(`[Task ${taskId}] Loaded existing task.`);
let updatedData = data;
updatedData.history = [...data.history || [], message];
const { status } = data;
const finalStates = ["completed", "failed", "canceled"];
if (finalStates.includes(status.state)) {
logger?.warn(`[Task ${taskId}] Received message for task in final state ${status.state}. Restarting.`);
updatedData = applyUpdateToTask(updatedData, {
state: "submitted",
message: void 0
});
} else if (status.state === "input-required") {
logger?.info(`[Task ${taskId}] Changing state from 'input-required' to 'working'.`);
updatedData = applyUpdateToTask(updatedData, { state: "working" });
} else if (status.state === "working") {
logger?.warn(`[Task ${taskId}] Received message while already 'working'. Proceeding.`);
}
await taskStore.save({ agentId, data: updatedData });
return updatedData;
}
function createTaskContext({
task,
userMessage,
history,
activeCancellations
}) {
return {
task: structuredClone(task),
userMessage,
history: structuredClone(history),
isCancelled: () => activeCancellations.has(task.id)
};
}
// src/server/handlers/a2a.ts
var messagePartSchema = z.discriminatedUnion("kind", [
z.object({
kind: z.literal("text"),
text: z.string(),
metadata: z.record(z.string(), z.any()).optional()
}),
z.object({
kind: z.literal("file"),
file: z.union([
z.object({
bytes: z.string(),
mimeType: z.string().optional(),
name: z.string().optional()
}),
z.object({
uri: z.string(),
mimeType: z.string().optional(),
name: z.string().optional()
})
]),
metadata: z.record(z.string(), z.any()).optional()
}),
z.object({
kind: z.literal("data"),
data: z.record(z.string(), z.any()),
metadata: z.record(z.string(), z.any()).optional()
})
]);
var messageSendParamsSchema = z.object({
message: z.object({
role: z.enum(["user", "agent"]),
parts: z.array(messagePartSchema),
kind: z.literal("message"),
messageId: z.string(),
contextId: z.string().optional(),
taskId: z.string().optional(),
referenceTaskIds: z.array(z.string()).optional(),
extensions: z.array(z.string()).optional(),
metadata: z.record(z.string(), z.any()).optional()
}),
configuration: z.object({
acceptedOutputModes: z.array(z.string()).optional(),
blocking: z.boolean().optional(),
historyLength: z.number().optional(),
pushNotificationConfig: z.object({
url: z.string(),
id: z.string().optional(),
token: z.string().optional(),
authentication: z.object({
schemes: z.array(z.string()),
credentials: z.string().optional()
}).optional()
}).optional()
}).optional()
});
var defaultPushNotificationStore = new InMemoryPushNotificationStore();
var defaultPushNotificationSender = new DefaultPushNotificationSender(defaultPushNotificationStore);
function createAgentCardDefaults({
pushNotifications = false
} = {}) {
return {
protocolVersion: "0.3.0",
additionalInterfaces: [],
supportsAuthenticatedExtendedCard: false,
security: [],
securitySchemes: {},
capabilities: {
streaming: true,
pushNotifications,
stateTransitionHistory: false,
extensions: []
},
defaultInputModes: ["text/plain"],
defaultOutputModes: ["text/plain"]
};
}
async function getAgentCardByIdHandler({
mastra,
agentId,
executionUrl = `/a2a/${agentId}`,
provider = {
organization: "Mastra",
url: "https://mastra.ai"
},
version = "1.0",
pushNotifications = false,
requestContext
}) {
const agent = await getAgentFromSystem({ mastra, agentId });
const [instructions, tools] = await Promise.all([agent.getInstructions({ requestContext }), agent.listTools({ requestContext })]);
const agentCard = {
name: agent.id || agentId,
description: convertInstructionsToString(instructions),
url: executionUrl,
provider,
version,
...createAgentCardDefaults({ pushNotifications }),
// Convert agent tools to skills format for A2A protocol
skills: Object.entries(tools).map(([toolId, tool]) => ({
id: toolId,
name: toolId,
description: tool.description || `Tool: ${toolId}`,
// Optional fields
tags: ["tool"]
}))
};
const signing = mastra.getServer?.()?.a2a?.agentCardSigning;
if (!signing) {
return agentCard;
}
return signAgentCard({
agentCard,
signing
});
}
function getA2AExecutionUrl({
agentId,
request,
routePrefix
}) {
const executionPath = `${routePrefix ?? ""}/a2a/${agentId}`;
if (!request) {
return executionPath;
}
return `${getPublicOrigin(request)}${executionPath}`;
}
function validateMessageSendParams(params) {
try {
messageSendParamsSchema.parse(params);
} catch (error) {
if (error instanceof z.ZodError) {
throw MastraA2AError.invalidParams(error.issues[0].message);
}
throw error;
}
}
function createArtifactUpdate({
taskId,
contextId,
text,
data
}) {
const parts = [
...text ? [{ kind: "text", text }] : [],
...data ? [{ kind: "data", data }] : []
];
if (parts.length === 0) {
return void 0;
}
return {
kind: "artifact-update",
taskId,
contextId,
lastChunk: true,
artifact: {
artifactId: `${taskId}:response`,
name: data ? "response.json" : "response.txt",
parts
}
};
}
function createTextChunkArtifactUpdate({
taskId,
contextId,
text,
append,
lastChunk
}) {
return {
kind: "artifact-update",
taskId,
contextId,
...append ? { append: true } : {},
...lastChunk !== void 0 ? { lastChunk } : {},
artifact: {
artifactId: `${taskId}:response:text`,
name: "response.txt",
parts: [{ kind: "text", text }]
}
};
}
function createDataArtifactUpdate({
taskId,
contextId,
data,
lastChunk
}) {
return {
kind: "artifact-update",
taskId,
contextId,
...{ lastChunk } ,
artifact: {
artifactId: `${taskId}:response:data`,
name: "response.json",
parts: [{ kind: "data", data }]
}
};
}
function resolvePushNotificationPair({
pushNotificationStore,
pushNotificationSender
}) {
if (pushNotificationSender) {
return {
pushNotificationStore: pushNotificationSender.getStore(),
pushNotificationSender
};
}
if (pushNotificationStore) {
return {
pushNotificationStore,
pushNotificationSender: new DefaultPushNotificationSender(pushNotificationStore)
};
}
return {
pushNotificationStore: defaultPushNotificationStore,
pushNotificationSender: defaultPushNotificationSender
};
}
function createTaskPushNotificationConfig(taskId, pushNotificationConfig) {
return {
taskId,
pushNotificationConfig: {
...pushNotificationConfig,
id: pushNotificationConfig.id ?? taskId
}
};
}
function shouldSendPushNotification(previousTask, nextTask) {
const pushTriggerStates = ["completed", "failed", "canceled", "input-required"];
if (!pushTriggerStates.includes(nextTask.status.state)) {
return false;
}
return previousTask?.status.state !== nextTask.status.state;
}
async function saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender,
previousTask,
nextTask,
agentId,
logger
}) {
await taskStore.save({ agentId, data: nextTask });
if (!shouldSendPushNotification(previousTask, nextTask)) {
return;
}
void pushNotificationSender.sendNotifications({
agentId,
task: nextTask,
logger
}).catch((error) => {
logger?.error("Failed to schedule A2A push notification", error);
});
}
function extractFullStreamTextDelta(value) {
if (typeof value !== "object" || value === null || !("type" in value)) {
return null;
}
const chunk = value;
switch (chunk.type) {
case "text-delta":
if (typeof chunk.payload?.text === "string") {
return chunk.payload.text;
}
if (typeof chunk.payload?.delta === "string") {
return chunk.payload.delta;
}
if (typeof chunk.textDelta === "string") {
return chunk.textDelta;
}
if (typeof chunk.delta === "string") {
return chunk.delta;
}
if (typeof chunk.text === "string") {
return chunk.text;
}
return null;
default:
return null;
}
}
function extractFinalStructuredObject(value) {
if (typeof value !== "object" || value === null || !("type" in value)) {
return void 0;
}
const chunk = value;
if (chunk.type !== "object-result") {
return void 0;
}
const objectValue = chunk.payload?.object ?? chunk.object;
return objectValue && typeof objectValue === "object" ? objectValue : void 0;
}
function isTerminalTaskState(state) {
return ["completed", "failed", "canceled"].includes(state);
}
function artifactIdentity(artifact) {
return artifact.artifactId || artifact.name;
}
function areArtifactPartsEqual(left, right) {
if (left === right) {
return true;
}
if (left.length !== right.length) {
return false;
}
return left.every((part, index) => {
const other = right[index];
if (!other || part.kind !== other.kind) {
return false;
}
if (part.kind === "text" && other.kind === "text") {
return part.text === other.text;
}
return part === other;
});
}
function areArtifactsEqual(left, right) {
if (left === right) {
return true;
}
if (!left || !right) {
return left === right;
}
return left.artifactId === right.artifactId && left.name === right.name && left.description === right.description && left.metadata === right.metadata && areArtifactPartsEqual(left.parts, right.parts);
}
function areStatusMessagePartsEqual(left, right) {
return left === right || isDeepStrictEqual(left, right);
}
function areStatusMessagesEqual(left, right) {
if (left === right) {
return true;
}
if (!left || !right) {
return left === right;
}
return left.messageId === right.messageId && left.kind === right.kind && left.role === right.role && left.contextId === right.contextId && left.taskId === right.taskId && isDeepStrictEqual(left.referenceTaskIds, right.referenceTaskIds) && isDeepStrictEqual(left.extensions, right.extensions) && isDeepStrictEqual(left.metadata, right.metadata) && areStatusMessagePartsEqual(left.parts, right.parts);
}
function didTaskStatusChange(previous, next) {
return previous.status.state !== next.status.state || previous.status.timestamp !== next.status.timestamp || !areStatusMessagesEqual(previous.status.message, next.status.message);
}
function getTaskArtifactUpdates({ previous, next }) {
const previousArtifacts = new Map((previous.artifacts ?? []).map((artifact) => [artifactIdentity(artifact), artifact]));
const changedArtifacts = (next.artifacts ?? []).filter((artifact) => {
const priorArtifact = previousArtifacts.get(artifactIdentity(artifact));
return !priorArtifact || !areArtifactsEqual(priorArtifact, artifact);
});
return changedArtifacts.map((artifact, index) => ({
kind: "artifact-update",
taskId: next.id,
contextId: next.contextId,
lastChunk: isTerminalTaskState(next.status.state) && index === changedArtifacts.length - 1,
artifact: structuredClone(artifact)
}));
}
async function handleMessageSend({
requestId,
params,
taskStore,
pushNotificationStore,
pushNotificationSender,
agent,
agentId,
logger,
requestContext
}) {
validateMessageSendParams(params);
const { message, metadata } = params;
const { contextId } = message;
const taskId = message.taskId || crypto.randomUUID();
const {
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender
} = resolvePushNotificationPair({
pushNotificationStore,
pushNotificationSender
});
let currentData = await loadOrCreateTask({
taskId,
taskStore,
agentId,
message,
contextId,
metadata
});
if (params.configuration?.pushNotificationConfig) {
resolvedPushNotificationStore.set({
agentId,
config: createTaskPushNotificationConfig(taskId, params.configuration.pushNotificationConfig)
});
}
const context = createTaskContext({
task: currentData,
userMessage: message,
history: currentData.history || [],
activeCancellations: taskStore.activeCancellations
});
try {
const resourceId = metadata?.resourceId ?? message.metadata?.resourceId ?? agentId;
const result = await agent.generate([convertToCoreMessage(message)], {
runId: taskId,
requestContext,
...contextId ? { threadId: contextId, resourceId } : {}
});
const artifactUpdate = createArtifactUpdate({
taskId: currentData.id,
contextId: currentData.contextId,
text: result.text,
data: result.object
});
if (artifactUpdate) {
currentData = applyUpdateToTask(currentData, artifactUpdate);
}
currentData = applyUpdateToTask(currentData, {
state: "completed",
message: void 0
});
currentData.metadata = {
...currentData.metadata,
execution: {
toolCalls: result.toolCalls,
toolResults: result.toolResults,
usage: result.usage,
finishReason: result.finishReason
}
};
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
previousTask: context.task,
nextTask: currentData,
agentId,
logger
});
context.task = currentData;
} catch (handlerError) {
const failureStatusUpdate = {
state: "failed",
message: {
messageId: crypto.randomUUID(),
role: "agent",
parts: [
{
kind: "text",
text: `Handler failed: ${handlerError instanceof Error ? handlerError.message : String(handlerError)}`
}
],
kind: "message"
}
};
currentData = applyUpdateToTask(currentData, failureStatusUpdate);
try {
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
previousTask: context.task,
nextTask: currentData,
agentId,
logger
});
} catch (saveError) {
logger?.error(`Failed to save task ${currentData.id} after handler error:`, saveError?.message);
}
return normalizeError(handlerError, requestId, currentData.id, logger);
}
return createSuccessResponse(requestId, currentData);
}
async function handleTaskGet({
requestId,
taskStore,
agentId,
taskId
}) {
const task = await taskStore.load({ agentId, taskId });
if (!task) {
throw MastraA2AError.taskNotFound(taskId);
}
return createSuccessResponse(requestId, task);
}
async function loadTaskOrThrow({
taskStore,
agentId,
taskId
}) {
const task = await taskStore.load({ agentId, taskId });
if (!task) {
throw MastraA2AError.taskNotFound(taskId);
}
return task;
}
async function handleSetTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore,
agentId,
params
}) {
await loadTaskOrThrow({
taskStore,
agentId,
taskId: params.taskId
});
const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({
pushNotificationStore
});
const config = resolvedPushNotificationStore.set({
agentId,
config: createTaskPushNotificationConfig(params.taskId, params.pushNotificationConfig)
});
return createSuccessResponse(requestId, config);
}
async function handleGetTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore,
agentId,
params
}) {
await loadTaskOrThrow({
taskStore,
agentId,
taskId: params.id
});
const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({
pushNotificationStore
});
const config = resolvedPushNotificationStore.get({
agentId,
params
});
if (!config) {
throw MastraA2AError.invalidParams(
`Push notification config not found: ${params.pushNotificationConfigId ?? params.id}`
);
}
return createSuccessResponse(requestId, config);
}
async function handleListTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore,
agentId,
params
}) {
await loadTaskOrThrow({
taskStore,
agentId,
taskId: params.id
});
const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({
pushNotificationStore
});
const configs = resolvedPushNotificationStore.list({
agentId,
params
});
return createSuccessResponse(requestId, configs);
}
async function handleDeleteTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore,
agentId,
params
}) {
await loadTaskOrThrow({
taskStore,
agentId,
taskId: params.id
});
const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({
pushNotificationStore
});
const deleted = resolvedPushNotificationStore.delete({
agentId,
params
});
if (!deleted) {
throw MastraA2AError.invalidParams(`Push notification config not found: ${params.pushNotificationConfigId}`);
}
return createSuccessResponse(requestId, null);
}
async function* handleMessageStream({
requestId,
params,
taskStore,
pushNotificationStore,
pushNotificationSender,
agent,
agentId,
logger,
requestContext
}) {
validateMessageSendParams(params);
const { message, metadata } = params;
const { contextId } = message;
const taskId = message.taskId || crypto.randomUUID();
const {
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender
} = resolvePushNotificationPair({
pushNotificationStore,
pushNotificationSender
});
let currentData = await loadOrCreateTask({
taskId,
taskStore,
agentId,
message,
contextId,
metadata
});
if (params.configuration?.pushNotificationConfig) {
resolvedPushNotificationStore.set({
agentId,
config: createTaskPushNotificationConfig(taskId, params.configuration.pushNotificationConfig)
});
}
currentData = applyUpdateToTask(currentData, {
state: "working",
message: {
messageId: crypto.randomUUID(),
kind: "message",
role: "agent",
parts: [{ kind: "text", text: "Generating response..." }]
}
});
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
nextTask: currentData,
agentId,
logger
});
yield createSuccessResponse(requestId, currentData);
try {
const resourceId = metadata?.resourceId ?? message.metadata?.resourceId ?? agentId;
const result = await agent.stream([convertToCoreMessage(message)], {
runId: taskId,
requestContext,
...contextId ? { threadId: contextId, resourceId } : {}
});
let sawTextArtifact = false;
let pendingTextChunk;
let structuredData;
for await (const chunk of result.fullStream) {
const textDelta = extractFullStreamTextDelta(chunk);
if (textDelta !== null) {
if (!pendingTextChunk) {
pendingTextChunk = textDelta;
continue;
}
const textUpdate = createTextChunkArtifactUpdate({
taskId: currentData.id,
contextId: currentData.contextId,
text: pendingTextChunk,
append: sawTextArtifact,
lastChunk: false
});
currentData = applyUpdateToTask(currentData, textUpdate);
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
nextTask: currentData,
agentId,
logger
});
yield createSuccessResponse(requestId, textUpdate);
sawTextArtifact = true;
pendingTextChunk = textDelta;
continue;
}
const finalStructuredObject = extractFinalStructuredObject(chunk);
if (finalStructuredObject) {
structuredData = finalStructuredObject;
}
}
structuredData ??= await result.object;
if (!pendingTextChunk && !sawTextArtifact) {
const finalText = await result.text;
if (finalText) {
pendingTextChunk = finalText;
}
}
if (pendingTextChunk) {
const textUpdate = createTextChunkArtifactUpdate({
taskId: currentData.id,
contextId: currentData.contextId,
text: pendingTextChunk,
append: sawTextArtifact,
lastChunk: !structuredData
});
currentData = applyUpdateToTask(currentData, textUpdate);
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
nextTask: currentData,
agentId,
logger
});
yield createSuccessResponse(requestId, textUpdate);
sawTextArtifact = true;
pendingTextChunk = void 0;
}
if (structuredData) {
const dataUpdate = createDataArtifactUpdate({
taskId: currentData.id,
contextId: currentData.contextId,
data: structuredData,
lastChunk: true
});
currentData = applyUpdateToTask(currentData, dataUpdate);
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
nextTask: currentData,
agentId,
logger
});
yield createSuccessResponse(requestId, dataUpdate);
}
const previousTask = currentData;
const completedTask = applyUpdateToTask(currentData, {
state: "completed",
message: void 0
});
completedTask.metadata = {
...completedTask.metadata,
execution: {
toolCalls: await result.toolCalls,
toolResults: await result.toolResults,
usage: await result.usage,
finishReason: await result.finishReason
}
};
currentData = completedTask;
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
previousTask,
nextTask: currentData,
agentId,
logger
});
} catch (handlerError) {
const previousTask = currentData;
currentData = applyUpdateToTask(currentData, {
state: "failed",
message: {
messageId: crypto.randomUUID(),
role: "agent",
parts: [
{
kind: "text",
text: `Handler failed: ${handlerError instanceof Error ? handlerError.message : String(handlerError)}`
}
],
kind: "message"
}
});
try {
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
previousTask,
nextTask: currentData,
agentId,
logger
});
} catch (saveError) {
logger?.error(`Failed to save task ${currentData.id} after handler error:`, saveError?.message);
}
}
yield createSuccessResponse(requestId, {
kind: "status-update",
taskId: currentData.id,
contextId: currentData.contextId,
status: currentData.status,
final: true
});
}
async function* handleTaskResubscribe({
requestId,
taskStore,
agentId,
taskId,
abortSignal
}) {
let snapshot = taskStore.loadWithVersion({ agentId, taskId });
if (!snapshot) {
throw MastraA2AError.taskNotFound(taskId);
}
yield createSuccessResponse(requestId, snapshot.task);
if (isTerminalTaskState(snapshot.task.status.state)) {
return;
}
while (true) {
const { task, version } = snapshot;
const nextUpdate = await taskStore.waitForNextUpdate({
agentId,
taskId,
afterVersion: version,
signal: abortSignal
});
for (const artifactUpdate of getTaskArtifactUpdates({ previous: task, next: nextUpdate.task })) {
yield createSuccessResponse(requestId, artifactUpdate);
}
if (didTaskStatusChange(task, nextUpdate.task)) {
yield createSuccessResponse(requestId, {
kind: "status-update",
taskId: nextUpdate.task.id,
contextId: nextUpdate.task.contextId,
status: nextUpdate.task.status,
final: isTerminalTaskState(nextUpdate.task.status.state)
});
}
if (isTerminalTaskState(nextUpdate.task.status.state)) {
return;
}
snapshot = nextUpdate;
}
}
function getTaskIdFromParams(params) {
if (!params || typeof params !== "object") {
return void 0;
}
if ("id" in params && typeof params.id === "string") {
return params.id;
}
if ("taskId" in params && typeof params.taskId === "string") {
return params.taskId;
}
if ("message" in params && params.message && typeof params.message === "object" && "taskId" in params.message) {
return typeof params.message.taskId === "string" ? params.message.taskId : void 0;
}
return void 0;
}
function isAsyncIterable(value) {
return !!value && typeof value === "object" && Symbol.asyncIterator in value;
}
function createA2AJsonResponse(payload) {
return Response.json(payload);
}
function createA2ASSEResponse(payload) {
const encoder = new TextEncoder();
const iterable = isAsyncIterable(payload) ? payload : (async function* () {
yield payload;
})();
const stream = new ReadableStream({
async start(controller) {
try {
for await (const chunk of iterable) {
controller.enqueue(encoder.encode(`data: ${JSON.stringify(chunk)}
`));
}
} catch (error) {
controller.error(error);
return;
}
controller.close();
}
});
return new Response(stream, {
headers: {
"Content-Type": "text/event-stream; charset=utf-8",
"Cache-Control": "no-cache",
Connection: "keep-alive",
"X-Accel-Buffering": "no"
}
});
}
async function handleTaskCancel({
requestId,
taskStore,
pushNotificationSender,
agentId,
taskId,
logger
}) {
let data = await taskStore.load({
agentId,
taskId
});
if (!data) {
throw MastraA2AError.taskNotFound(taskId);
}
const finalStates = ["completed", "failed", "canceled"];
if (finalStates.includes(data.status.state)) {
logger?.info(`Task ${taskId} already in final state ${data.status.state}, cannot cancel.`);
return createSuccessResponse(requestId, data);
}
taskStore.activeCancellations.add(taskId);
const cancelUpdate = {
state: "canceled",
message: {
role: "agent",
parts: [{ kind: "text", text: "Task cancelled by request." }],
kind: "message",
messageId: crypto.randomUUID()
}
};
const previousTask = data;
data = applyUpdateToTask(data, cancelUpdate);
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvePushNotificationPair({ pushNotificationSender }).pushNotificationSender,
previousTask,
nextTask: data,
agentId,
logger
});
taskStore.activeCancellations.delete(taskId);
return createSuccessResponse(requestId, data);
}
async function getAgentExecutionHandler({
requestId,
mastra,
agentId,
requestContext,
method,
params,
taskStore,
pushNotificationStore,
pushNotificationSender,
logger,
abortSignal
}) {
const agent = await getAgentFromSystem({ mastra, agentId });
const {
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender
} = resolvePushNotificationPair({
pushNotificationStore,
pushNotificationSender
});
let taskId;
try {
taskId = getTaskIdFromParams(params);
switch (method) {
case "message/send": {
const result = await handleMessageSend({
requestId,
params,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender,
agent,
agentId,
logger,
requestContext
});
return result;
}
case "message/stream": {
const result = await handleMessageStream({
requestId,
taskStore,
params,
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender,
agent,
agentId,
logger,
requestContext
});
return result;
}
case "tasks/get": {
const result = await handleTaskGet({
requestId,
taskStore,
agentId,
taskId: taskId || "No task ID provided"
});
return result;
}
case "tasks/cancel": {
const result = await handleTaskCancel({
requestId,
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
agentId,
taskId: taskId || "No task ID provided",
logger
});
return result;
}
case "tasks/resubscribe":
return await handleTaskResubscribe({
requestId,
taskStore,
agentId,
taskId: taskId || "No task ID provided",
abortSignal
});
case "tasks/pushNotificationConfig/set":
return await handleSetTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
agentId,
params
});
case "tasks/pushNotificationConfig/get":
return await handleGetTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
agentId,
params
});
case "tasks/pushNotificationConfig/list":
return await handleListTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
agentId,
params
});
case "tasks/pushNotificationConfig/delete":
return await handleDeleteTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
agentId,
params
});
case "agent/getAuthenticatedExtendedCard":
throw MastraA2AError.extendedAgentCardNotConfigured();
default:
throw MastraA2AError.methodNotFound(method);
}
} catch (error) {
if (error instanceof MastraA2AError && taskId && !error.taskId) {
error.taskId = taskId;
}
return normalizeError(error, requestId, taskId, logger);
}
}
var GET_AGENT_CARD_ROUTE = createRoute({
method: "GET",
path: "/.well-known/:agentId/agent-card.json",
responseType: "json",
pathParamSchema: a2aAgentIdPathParams,
responseSchema: agentCardResponseSchema,
summary: "Get agent card",
description: "Returns the agent card information for A2A protocol discovery",
tags: ["Agent-to-Agent"],
requiresAuth: true,
handler: async (ctx) => {
const executionUrl = getA2AExecutionUrl({
agentId: ctx.agentId,
request: ctx.request,
routePrefix: ctx.routePrefix
});
return getAgentCardByIdHandler({
mastra: ctx.mastra,
requestContext: ctx.requestContext,
agentId: ctx.agentId,
executionUrl,
pushNotifications: true
});
}
});
var AGENT_EXECUTION_ROUTE = createRoute({
method: "POST",
path: "/a2a/:agentId",
responseType: "datastream-response",
pathParamSchema: a2aAgentIdPathParams,
bodySchema: agentExecutionBodySchema,
responseSchema: agentExecutionResponseSchema,
summary: "Execute agent",
description: "Executes an agent action via JSON-RPC 2.0 over A2A protocol",
tags: ["Agent-to-Agent"],
requiresAuth: true,
handler: async ({ mastra, agentId, requestContext, taskStore, abortSignal, ...bodyParams }) => {
const { id: requestId, method } = bodyParams;
const params = "params" in bodyParams ? bodyParams.params : void 0;
const result = await getAgentExecutionHandler({
requestId,
mastra,
agentId,
requestContext,
method,
params,
taskStore,
abortSignal
});
if (method === "message/stream" || method === "tasks/resubscribe") {
return createA2ASSEResponse(result);
}
return createA2AJsonResponse(result);
}
});
export { AGENT_EXECUTION_ROUTE, GET_AGENT_CARD_ROUTE, a2a_exports, getAgentCardByIdHandler, getAgentExecutionHandler, handleDeleteTaskPushNotificationConfig, handleGetTaskPushNotificationConfig, handleListTaskPushNotificationConfig, handleMessageSend, handleMessageStream, handleSetTaskPushNotificationConfig, handleTaskCancel, handleTaskGet, handleTaskResubscribe };
//# sourceMappingURL=chunk-5GOTSBKU.js.map
//# sourceMappingURL=chunk-5GOTSBKU.js.map

Sorry, the diff of this file is too big to display

import { snapshotConfigSchema } from './chunk-YTLTMMB7.js';
import { toolProvidersSchema } from './chunk-SFAWHLOX.js';
import { ruleGroupSchema } from './chunk-JA4UAHWP.js';
import { defaultOptionsSchema } from './chunk-TKP6FJQ3.js';
import { createPagePaginationSchema, paginationInfoSchema } from './chunk-6VTOGOS2.js';
import { z } from 'zod/v4';
var semanticRecallSchema = z.object({
topK: z.number().describe("Number of semantically similar messages to retrieve"),
messageRange: z.union([
z.number(),
z.object({
before: z.number(),
after: z.number()
})
]).describe("Amount of surrounding context to include with each retrieved message"),
scope: z.enum(["thread", "resource"]).optional().describe("Scope for semantic search queries"),
threshold: z.number().min(0).max(1).optional().describe("Minimum similarity score threshold"),
indexName: z.string().optional().describe("Index name for the vector store")
});
var titleGenerationSchema = z.union([
z.boolean(),
z.object({
model: z.string().describe("Model ID in format provider/model-name (ModelRouterModelId)"),
instructions: z.string().optional().describe("Custom instructions for title generation")
})
]);
var serializedObservationConfigSchema = z.object({
model: z.string().optional().describe("Observer model ID"),
messageTokens: z.number().optional().describe("Token threshold that triggers observation"),
modelSettings: z.record(z.string(), z.unknown()).optional().describe("Model settings (temperature, etc.)"),
providerOptions: z.record(z.string(), z.record(z.string(), z.unknown()).optional()).optional().describe("Provider-specific options"),
maxTokensPerBatch: z.number().optional().describe("Maximum tokens per batch"),
bufferTokens: z.union([z.number(), z.literal(false)]).optional().describe("Async buffering interval or false"),
bufferActivation: z.number().optional().describe("Ratio of buffered observations to activate"),
blockAfter: z.number().optional().describe("Token threshold for synchronous blocking")
});
var serializedReflectionConfigSchema = z.object({
model: z.string().optional().describe("Reflector model ID"),
observationTokens: z.number().optional().describe("Token threshold that triggers reflection"),
modelSettings: z.record(z.string(), z.unknown()).optional().describe("Model settings (temperature, etc.)"),
providerOptions: z.record(z.string(), z.record(z.string(), z.unknown()).optional()).optional().describe("Provider-specific options"),
blockAfter: z.number().optional().describe("Token threshold for synchronous blocking"),
bufferActivation: z.number().optional().describe("Ratio for async reflection buffering")
});
var serializedObservationalMemoryConfigObjectSchema = z.object({
model: z.string().optional().describe("Model ID for both Observer and Reflector"),
scope: z.enum(["resource", "thread"]).optional().describe("Memory scope"),
shareTokenBudget: z.boolean().optional().describe("Share token budget between messages and observations"),
observation: serializedObservationConfigSchema.optional().describe("Observation step configuration"),
reflection: serializedReflectionConfigSchema.optional().describe("Reflection step configuration")
});
var serializedObservationalMemoryConfigSchema = z.union([
z.boolean(),
serializedObservationalMemoryConfigObjectSchema
]);
var serializedMemoryConfigSchema = z.object({
vector: z.union([z.string(), z.literal(false)]).optional().describe("Vector database identifier or false to disable"),
options: z.object({
readOnly: z.boolean().optional(),
lastMessages: z.union([z.number(), z.literal(false)]).optional(),
semanticRecall: z.union([z.boolean(), semanticRecallSchema]).optional(),
generateTitle: titleGenerationSchema.optional()
}).optional().describe("Memory behavior configuration, excluding workingMemory and threads"),
embedder: z.string().optional().describe('Embedding model ID in the format "provider/model" (e.g., "openai/text-embedding-3-small")'),
embedderOptions: z.record(z.string(), z.unknown()).optional().describe("Options to pass to the embedder, omitting telemetry"),
observationalMemory: serializedObservationalMemoryConfigSchema.optional().describe("Serialized observational memory configuration")
}).refine(
(data) => {
const semanticRecall = data.options?.semanticRecall;
const semanticRecallEnabled = semanticRecall === true || typeof semanticRecall === "object" && semanticRecall !== null;
if (semanticRecallEnabled) {
const hasVector = typeof data.vector === "string" && data.vector.length > 0;
const hasEmbedder = typeof data.embedder === "string" && data.embedder.length > 0;
return hasVector && hasEmbedder;
}
return true;
},
{
message: "Semantic recall requires both vector and embedder to be configured",
path: ["options", "semanticRecall"]
}
);
var storedAgentIdPathParams = z.object({
storedAgentId: z.string().describe("Unique identifier for the stored agent")
});
var storageOrderBySchema = z.object({
field: z.enum(["createdAt", "updatedAt"]).optional(),
direction: z.enum(["ASC", "DESC"]).optional()
});
var listStoredAgentsQuerySchema = createPagePaginationSchema(100).extend({
orderBy: storageOrderBySchema.optional(),
status: z.enum(["draft", "published", "archived"]).optional().default("published").describe("Filter agents by status (defaults to published)"),
authorId: z.string().optional().describe("Filter agents by author identifier"),
visibility: z.enum(["public"]).optional().describe("Filter to only public agents"),
metadata: z.record(z.string(), z.unknown()).optional().describe("Filter agents by metadata key-value pairs"),
favoritedOnly: z.stringbool().optional().describe("When true, return only agents favorited by the caller (requires the `favorites` EE feature)"),
pinFavoritedFor: z.string().optional().describe(
"When set, treat the given subject (user/role) as the favoriting principal for `favoritedOnly` instead of the caller"
)
});
var scorerConfigSchema = z.object({
description: z.string().optional(),
sampling: z.union([
z.object({ type: z.literal("none") }),
z.object({ type: z.literal("ratio"), rate: z.number().min(0).max(1) })
]).optional(),
rules: ruleGroupSchema.optional()
});
var agentInstructionBlockSchema = z.discriminatedUnion("type", [
z.object({ type: z.literal("text"), content: z.string() }),
z.object({ type: z.literal("prompt_block_ref"), id: z.string() }),
z.object({ type: z.literal("prompt_block"), content: z.string(), rules: ruleGroupSchema.optional() })
]);
function conditionalFieldSchema(valueSchema) {
const variantSchema = z.object({
value: valueSchema,
rules: ruleGroupSchema.optional()
});
return z.union([valueSchema, z.array(variantSchema)]);
}
var instructionsSchema = z.union([z.string(), z.array(agentInstructionBlockSchema)]).describe("System instructions for the agent (string or array of instruction blocks)");
var modelConfigSchema = z.object({
provider: z.string().describe("Model provider (e.g., openai, anthropic)"),
name: z.string().describe("Model name (e.g., gpt-4o, claude-3-opus)")
}).passthrough();
var toolConfigSchema = z.object({ description: z.string().optional(), rules: ruleGroupSchema.optional() });
var toolsConfigSchema = z.record(z.string(), toolConfigSchema);
var mcpClientToolsConfigSchema = z.object({
tools: z.record(z.string(), toolConfigSchema).optional()
});
var skillConfigSchema = z.object({
description: z.string().optional(),
instructions: z.string().optional(),
pin: z.string().optional(),
strategy: z.enum(["latest", "live"]).optional()
});
var skillsConfigSchema = z.record(z.string(), skillConfigSchema);
var workspaceRefSchema = z.discriminatedUnion("type", [
z.object({ type: z.literal("id"), workspaceId: z.string() }),
z.object({ type: z.literal("inline"), config: snapshotConfigSchema }),
z.object({
type: z.literal("provider"),
provider: z.string().describe("Workspace provider identifier"),
config: z.record(z.string(), z.unknown()).describe("Provider-specific configuration")
})
]);
var screencastOptionsSchema = z.object({
format: z.enum(["jpeg", "png"]).optional().describe("Image format (default: jpeg)"),
quality: z.number().min(0).max(100).optional().describe("JPEG quality 0-100 (default: 80)"),
maxWidth: z.number().optional().describe("Max width in pixels (default: 1280)"),
maxHeight: z.number().optional().describe("Max height in pixels (default: 720)"),
everyNthFrame: z.number().optional().describe("Capture every Nth frame (default: 1)")
});
var browserConfigSchema = z.object({
provider: z.string().describe("Browser provider type (e.g., stagehand, playwright)"),
headless: z.boolean().optional().describe("Run browser in headless mode (default: true)"),
viewport: z.object({
width: z.number().describe("Viewport width in pixels"),
height: z.number().describe("Viewport height in pixels")
}).optional().describe("Browser viewport dimensions"),
timeout: z.number().optional().describe("Default timeout in milliseconds (default: 10000)"),
screencast: screencastOptionsSchema.optional().describe("Screencast options for streaming browser frames")
});
var browserRefSchema = z.object({
type: z.literal("inline"),
config: browserConfigSchema
});
var processorPhaseSchema = z.enum([
"processInput",
"processInputStep",
"processOutputStream",
"processOutputResult",
"processOutputStep"
]);
var processorGraphStepSchema = z.object({
id: z.string().describe("Unique ID for this step within the graph"),
providerId: z.string().describe("ProcessorProvider ID that creates this processor"),
config: z.record(z.string(), z.unknown()).describe("Configuration matching the provider configSchema"),
enabledPhases: z.array(processorPhaseSchema).min(1).describe("Which processor phases to enable")
});
var processorGraphEntryDepth3 = z.discriminatedUnion("type", [
z.object({ type: z.literal("step"), step: processorGraphStepSchema })
]);
var processorGraphEntryDepth2 = z.discriminatedUnion("type", [
z.object({ type: z.literal("step"), step: processorGraphStepSchema }),
z.object({ type: z.literal("parallel"), branches: z.array(z.array(processorGraphEntryDepth3)) }),
z.object({
type: z.literal("conditional"),
conditions: z.array(
z.object({
steps: z.array(processorGraphEntryDepth3),
rules: ruleGroupSchema.optional()
})
)
})
]);
var processorGraphEntrySchema = z.discriminatedUnion("type", [
z.object({ type: z.literal("step"), step: processorGraphStepSchema }),
z.object({ type: z.literal("parallel"), branches: z.array(z.array(processorGraphEntryDepth2)) }),
z.object({
type: z.literal("conditional"),
conditions: z.array(
z.object({
steps: z.array(processorGraphEntryDepth2),
rules: ruleGroupSchema.optional()
})
)
})
]);
var storedProcessorGraphSchema = z.object({
steps: z.array(processorGraphEntrySchema).describe("Ordered list of processor graph entries")
});
var snapshotConfigSchema2 = z.object({
name: z.string().describe("Name of the agent"),
description: z.string().optional().describe("Description of the agent"),
instructions: instructionsSchema,
model: conditionalFieldSchema(modelConfigSchema).describe(
"Model configuration \u2014 static value or array of conditional variants"
),
tools: conditionalFieldSchema(toolsConfigSchema).optional().describe("Tool keys mapped to per-tool config \u2014 static or conditional"),
defaultOptions: conditionalFieldSchema(defaultOptionsSchema).optional().describe("Default options for generate/stream calls \u2014 static or conditional"),
workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema)).optional().describe("Workflow keys with optional per-workflow config \u2014 static or conditional"),
agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema)).optional().describe("Agent keys with optional per-agent config \u2014 static or conditional"),
integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of tool provider IDs to their tool configurations \u2014 static or conditional"),
toolProviders: conditionalFieldSchema(toolProvidersSchema).optional().describe(
"Tool provider connections and per-tool config (provider-agnostic). Coexists with the deprecated `integrationTools` field."
),
mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of stored MCP client IDs to their tool configurations \u2014 static or conditional"),
inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Input processor graph \u2014 static or conditional"),
outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Output processor graph \u2014 static or conditional"),
memory: conditionalFieldSchema(serializedMemoryConfigSchema).optional().describe("Memory configuration \u2014 static or conditional"),
scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema)).optional().describe("Scorer keys with optional sampling config \u2014 static or conditional"),
skills: conditionalFieldSchema(skillsConfigSchema).optional().describe("Skill IDs mapped to per-skill config \u2014 static or conditional"),
workspace: conditionalFieldSchema(workspaceRefSchema).optional().describe("Workspace reference (stored ID or inline config) \u2014 static or conditional"),
browser: z.union([conditionalFieldSchema(browserRefSchema), z.boolean(), z.null()]).optional().describe("Browser configuration \u2014 object config, true (apply default), false/null (disable)"),
requestContextSchema: z.record(z.string(), z.unknown()).optional().describe("JSON Schema defining valid request context variables for conditional rule evaluation")
});
var agentMetadataSchema = z.object({
authorId: z.string().optional().describe("Author identifier for multi-tenant filtering"),
metadata: z.record(z.string(), z.unknown()).optional().describe("Additional metadata for the agent"),
visibility: z.enum(["private", "public"]).optional().describe("Agent visibility: private (owner/admin only) or public (any reader)")
});
var snapshotConfigCreateSchema = snapshotConfigSchema2.extend({
model: conditionalFieldSchema(modelConfigSchema).optional().describe(
"Model configuration \u2014 static value or array of conditional variants. When omitted, the builder default model is applied server-side."
)
});
var createStoredAgentBodySchema = z.object({
id: z.string().optional().describe("Unique identifier for the agent. If not provided, derived from name."),
authorId: z.string().optional().describe("Author identifier for multi-tenant filtering"),
metadata: z.record(z.string(), z.unknown()).optional().describe("Additional metadata for the agent"),
visibility: z.enum(["private", "public"]).optional().describe("Agent visibility: private (owner/admin only) or public (any reader)")
}).merge(snapshotConfigCreateSchema);
var snapshotConfigUpdateSchema = snapshotConfigSchema2.extend({
memory: z.union([conditionalFieldSchema(serializedMemoryConfigSchema), z.null()]).optional().describe("Memory configuration \u2014 static, conditional, or null to disable memory")
});
var updateStoredAgentBodySchema = agentMetadataSchema.partial().merge(snapshotConfigUpdateSchema.partial()).extend({
changeMessage: z.string().trim().max(500).optional().describe("Optional message describing the changes for the auto-created version")
});
var exportStoredAgentBodySchema = snapshotConfigUpdateSchema.partial();
var openStoredAgentChangeRequestBodySchema = exportStoredAgentBodySchema.extend({
changeMessage: z.string().trim().max(500).optional(),
userName: z.string().trim().min(1).max(120).optional(),
inspectOnly: z.boolean().optional()
});
var resolvedAuthorSchema = z.object({
id: z.string(),
name: z.string().optional(),
email: z.string().optional(),
avatarUrl: z.string().optional()
});
var storedAgentSchema = z.object({
// Thin agent record fields
id: z.string(),
status: z.string().describe("Agent status: draft or published"),
activeVersionId: z.string().optional(),
authorId: z.string().optional(),
author: resolvedAuthorSchema.optional().describe("Resolved author identity (when an auth provider is configured)"),
metadata: z.record(z.string(), z.unknown()).optional(),
visibility: z.enum(["private", "public"]).optional(),
favoriteCount: z.number().int().nonnegative().optional().describe("Number of users who have favorited this agent"),
isFavorited: z.boolean().optional().describe("Whether the requesting user has favorited this agent"),
createdAt: z.coerce.date(),
updatedAt: z.coerce.date(),
// Version snapshot config fields (resolved from active version)
name: z.string().describe("Name of the agent"),
description: z.string().optional().describe("Description of the agent"),
instructions: instructionsSchema,
model: conditionalFieldSchema(modelConfigSchema).describe(
"Model configuration \u2014 static value or array of conditional variants"
),
tools: conditionalFieldSchema(toolsConfigSchema).optional().describe("Tool keys mapped to per-tool config \u2014 static or conditional"),
defaultOptions: conditionalFieldSchema(defaultOptionsSchema).optional().describe("Default options for generate/stream calls \u2014 static or conditional"),
workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema)).optional().describe("Workflow keys with optional per-workflow config \u2014 static or conditional"),
agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema)).optional().describe("Agent keys with optional per-agent config \u2014 static or conditional"),
integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of tool provider IDs to their tool configurations \u2014 static or conditional"),
toolProviders: conditionalFieldSchema(toolProvidersSchema).optional().describe(
"Tool provider connections and per-tool config (provider-agnostic). Coexists with the deprecated `integrationTools` field."
),
mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of stored MCP client IDs to their tool configurations \u2014 static or conditional"),
inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Input processor graph \u2014 static or conditional"),
outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Output processor graph \u2014 static or conditional"),
memory: conditionalFieldSchema(serializedMemoryConfigSchema).optional().describe("Memory configuration \u2014 static or conditional"),
scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema)).optional().describe("Scorer keys with optional sampling config \u2014 static or conditional"),
skills: conditionalFieldSchema(skillsConfigSchema).optional().describe("Skill IDs mapped to per-skill config \u2014 static or conditional"),
workspace: conditionalFieldSchema(workspaceRefSchema).optional().describe("Workspace reference (stored ID or inline config) \u2014 static or conditional"),
browser: z.union([conditionalFieldSchema(browserRefSchema), z.boolean(), z.null()]).optional().describe("Browser configuration \u2014 object config, true (apply default), false/null (disable)"),
requestContextSchema: z.record(z.string(), z.unknown()).optional().describe("JSON Schema defining valid request context variables")
});
var listStoredAgentsResponseSchema = paginationInfoSchema.extend({
agents: z.array(storedAgentSchema)
});
var getStoredAgentResponseSchema = storedAgentSchema;
var createStoredAgentResponseSchema = storedAgentSchema;
var updateStoredAgentResponseSchema = z.union([
// Thin agent record (no version config)
z.object({
id: z.string(),
status: z.string(),
activeVersionId: z.string().optional(),
authorId: z.string().optional(),
metadata: z.record(z.string(), z.unknown()).optional(),
visibility: z.enum(["private", "public"]).optional(),
createdAt: z.coerce.date(),
updatedAt: z.coerce.date()
}),
// Resolved agent (thin record + version config)
storedAgentSchema
]);
var deleteStoredAgentResponseSchema = z.object({
success: z.boolean(),
message: z.string()
});
var getStoredAgentDependentsResponseSchema = z.object({
dependents: z.array(
z.object({
id: z.string(),
name: z.string()
})
),
hiddenCount: z.number().int().nonnegative()
});
var exportStoredAgentResponseSchema = z.object({
agentId: z.string(),
fileName: z.string(),
content: z.string(),
config: z.record(z.string(), z.unknown())
});
var openStoredAgentChangeRequestResponseSchema = z.object({
id: z.union([z.string(), z.number()]).optional(),
url: z.string(),
ref: z.string().optional()
});
var previewInstructionsBodySchema = z.object({
blocks: z.array(agentInstructionBlockSchema).describe("Array of instruction blocks to resolve"),
context: z.record(z.string(), z.unknown()).optional().default({}).describe("Request context for variable interpolation and rule evaluation")
});
var previewInstructionsResponseSchema = z.object({
result: z.string().describe("The resolved instructions string")
});
export { conditionalFieldSchema, createStoredAgentBodySchema, createStoredAgentResponseSchema, deleteStoredAgentResponseSchema, exportStoredAgentBodySchema, exportStoredAgentResponseSchema, getStoredAgentDependentsResponseSchema, getStoredAgentResponseSchema, instructionsSchema, listStoredAgentsQuerySchema, listStoredAgentsResponseSchema, modelConfigSchema, openStoredAgentChangeRequestBodySchema, openStoredAgentChangeRequestResponseSchema, previewInstructionsBodySchema, previewInstructionsResponseSchema, processorGraphEntrySchema, processorGraphStepSchema, processorPhaseSchema, resolvedAuthorSchema, scorerConfigSchema, semanticRecallSchema, serializedMemoryConfigSchema, serializedObservationConfigSchema, serializedObservationalMemoryConfigObjectSchema, serializedObservationalMemoryConfigSchema, serializedReflectionConfigSchema, snapshotConfigSchema2 as snapshotConfigSchema, storedAgentIdPathParams, storedAgentSchema, storedProcessorGraphSchema, titleGenerationSchema, toolConfigSchema, toolsConfigSchema, updateStoredAgentBodySchema, updateStoredAgentResponseSchema };
//# sourceMappingURL=chunk-5HBR27TT.js.map
//# sourceMappingURL=chunk-5HBR27TT.js.map
{"version":3,"sources":["../src/server/schemas/memory-config.ts","../src/server/schemas/stored-agents.ts"],"names":["z","snapshotConfigSchema"],"mappings":"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","file":"chunk-5HBR27TT.js","sourcesContent":["import { z } from 'zod/v4';\n\n/**\n * Shared memory configuration schemas for agent storage\n * These schemas match the SerializedMemoryConfig type from @mastra/core\n */\n\n/**\n * Semantic recall configuration for vector-based memory retrieval\n */\nexport const semanticRecallSchema = z.object({\n topK: z.number().describe('Number of semantically similar messages to retrieve'),\n messageRange: z\n .union([\n z.number(),\n z.object({\n before: z.number(),\n after: z.number(),\n }),\n ])\n .describe('Amount of surrounding context to include with each retrieved message'),\n scope: z.enum(['thread', 'resource']).optional().describe('Scope for semantic search queries'),\n threshold: z.number().min(0).max(1).optional().describe('Minimum similarity score threshold'),\n indexName: z.string().optional().describe('Index name for the vector store'),\n});\n\n/**\n * Title generation configuration\n * When stored, the model is serialized as a ModelRouterModelId string (provider/model-name format)\n */\nexport const titleGenerationSchema = z.union([\n z.boolean(),\n z.object({\n model: z.string().describe('Model ID in format provider/model-name (ModelRouterModelId)'),\n instructions: z.string().optional().describe('Custom instructions for title generation'),\n }),\n]);\n\n/**\n * Observation step configuration for observational memory\n */\nexport const serializedObservationConfigSchema = z.object({\n model: z.string().optional().describe('Observer model ID'),\n messageTokens: z.number().optional().describe('Token threshold that triggers observation'),\n modelSettings: z.record(z.string(), z.unknown()).optional().describe('Model settings (temperature, etc.)'),\n providerOptions: z\n .record(z.string(), z.record(z.string(), z.unknown()).optional())\n .optional()\n .describe('Provider-specific options'),\n maxTokensPerBatch: z.number().optional().describe('Maximum tokens per batch'),\n bufferTokens: z\n .union([z.number(), z.literal(false)])\n .optional()\n .describe('Async buffering interval or false'),\n bufferActivation: z.number().optional().describe('Ratio of buffered observations to activate'),\n blockAfter: z.number().optional().describe('Token threshold for synchronous blocking'),\n});\n\n/**\n * Reflection step configuration for observational memory\n */\nexport const serializedReflectionConfigSchema = z.object({\n model: z.string().optional().describe('Reflector model ID'),\n observationTokens: z.number().optional().describe('Token threshold that triggers reflection'),\n modelSettings: z.record(z.string(), z.unknown()).optional().describe('Model settings (temperature, etc.)'),\n providerOptions: z\n .record(z.string(), z.record(z.string(), z.unknown()).optional())\n .optional()\n .describe('Provider-specific options'),\n blockAfter: z.number().optional().describe('Token threshold for synchronous blocking'),\n bufferActivation: z.number().optional().describe('Ratio for async reflection buffering'),\n});\n\n/**\n * Serialized observational memory configuration\n */\nexport const serializedObservationalMemoryConfigObjectSchema = z.object({\n model: z.string().optional().describe('Model ID for both Observer and Reflector'),\n scope: z.enum(['resource', 'thread']).optional().describe('Memory scope'),\n shareTokenBudget: z.boolean().optional().describe('Share token budget between messages and observations'),\n observation: serializedObservationConfigSchema.optional().describe('Observation step configuration'),\n reflection: serializedReflectionConfigSchema.optional().describe('Reflection step configuration'),\n});\n\nexport const serializedObservationalMemoryConfigSchema = z.union([\n z.boolean(),\n serializedObservationalMemoryConfigObjectSchema,\n]);\n\n/**\n * Serialized memory configuration matching SerializedMemoryConfig from @mastra/core\n *\n * Note: workingMemory and threads are omitted as they are not part of SerializedMemoryConfig\n * @see packages/core/src/memory/types.ts\n */\nexport const serializedMemoryConfigSchema = z\n .object({\n vector: z\n .union([z.string(), z.literal(false)])\n .optional()\n .describe('Vector database identifier or false to disable'),\n options: z\n .object({\n readOnly: z.boolean().optional(),\n lastMessages: z.union([z.number(), z.literal(false)]).optional(),\n semanticRecall: z.union([z.boolean(), semanticRecallSchema]).optional(),\n generateTitle: titleGenerationSchema.optional(),\n })\n .optional()\n .describe('Memory behavior configuration, excluding workingMemory and threads'),\n embedder: z\n .string()\n .optional()\n .describe('Embedding model ID in the format \"provider/model\" (e.g., \"openai/text-embedding-3-small\")'),\n embedderOptions: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('Options to pass to the embedder, omitting telemetry'),\n observationalMemory: serializedObservationalMemoryConfigSchema\n .optional()\n .describe('Serialized observational memory configuration'),\n })\n .refine(\n data => {\n // If semanticRecall is enabled (true or object), both vector and embedder are required\n const semanticRecall = data.options?.semanticRecall;\n const semanticRecallEnabled =\n semanticRecall === true || (typeof semanticRecall === 'object' && semanticRecall !== null);\n\n if (semanticRecallEnabled) {\n // vector must be a string (not false or undefined)\n const hasVector = typeof data.vector === 'string' && data.vector.length > 0;\n // embedder must be defined\n const hasEmbedder = typeof data.embedder === 'string' && data.embedder.length > 0;\n\n return hasVector && hasEmbedder;\n }\n return true;\n },\n {\n message: 'Semantic recall requires both vector and embedder to be configured',\n path: ['options', 'semanticRecall'],\n },\n );\n","import { z } from 'zod/v4';\nimport { paginationInfoSchema, createPagePaginationSchema, statusQuerySchema } from './common';\nimport { defaultOptionsSchema } from './default-options';\nimport { serializedMemoryConfigSchema } from './memory-config';\nimport { ruleGroupSchema } from './rule-group';\nimport { workspaceSnapshotConfigSchema } from './stored-workspaces';\nimport { toolProvidersSchema } from './tool-providers';\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\n/**\n * Path parameter for stored agent ID\n */\nexport const storedAgentIdPathParams = z.object({\n storedAgentId: z.string().describe('Unique identifier for the stored agent'),\n});\n\n// ============================================================================\n// Query Parameter Schemas\n// ============================================================================\n\n/**\n * Storage order by configuration\n */\nconst storageOrderBySchema = z.object({\n field: z.enum(['createdAt', 'updatedAt']).optional(),\n direction: z.enum(['ASC', 'DESC']).optional(),\n});\n\nexport { statusQuerySchema };\n\n/**\n * GET /stored/agents - List stored agents\n */\nexport const listStoredAgentsQuerySchema = createPagePaginationSchema(100).extend({\n orderBy: storageOrderBySchema.optional(),\n status: z\n .enum(['draft', 'published', 'archived'])\n .optional()\n .default('published')\n .describe('Filter agents by status (defaults to published)'),\n authorId: z.string().optional().describe('Filter agents by author identifier'),\n visibility: z.enum(['public']).optional().describe('Filter to only public agents'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Filter agents by metadata key-value pairs'),\n favoritedOnly: z\n .stringbool()\n .optional()\n .describe('When true, return only agents favorited by the caller (requires the `favorites` EE feature)'),\n pinFavoritedFor: z\n .string()\n .optional()\n .describe(\n 'When set, treat the given subject (user/role) as the favoriting principal for `favoritedOnly` instead of the caller',\n ),\n});\n\n// ============================================================================\n// Body Parameter Schemas\n// ============================================================================\n\n/**\n * Scorer config schema with optional sampling and rules\n */\nconst scorerConfigSchema = z.object({\n description: z.string().optional(),\n sampling: z\n .union([\n z.object({ type: z.literal('none') }),\n z.object({ type: z.literal('ratio'), rate: z.number().min(0).max(1) }),\n ])\n .optional(),\n rules: ruleGroupSchema.optional(),\n});\n\n/**\n * Agent instruction block schema for prompt-block-based instructions.\n */\nconst agentInstructionBlockSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('text'), content: z.string() }),\n z.object({ type: z.literal('prompt_block_ref'), id: z.string() }),\n z.object({ type: z.literal('prompt_block'), content: z.string(), rules: ruleGroupSchema.optional() }),\n]);\n\n/**\n * Creates a schema for a field that can be either a static value or an array of conditional variants.\n * Each variant has a `value` and an optional `rules` (RuleGroup) that determines when it applies.\n */\nfunction conditionalFieldSchema<T extends z.ZodTypeAny>(valueSchema: T) {\n const variantSchema = z.object({\n value: valueSchema,\n rules: ruleGroupSchema.optional(),\n });\n return z.union([valueSchema, z.array(variantSchema)]);\n}\n\n/**\n * Instructions can be a plain string or an array of instruction blocks (text + prompt_block references).\n */\nexport const instructionsSchema = z\n .union([z.string(), z.array(agentInstructionBlockSchema)])\n .describe('System instructions for the agent (string or array of instruction blocks)');\n\n/** Base model config schema (reused across snapshot and response schemas) */\nconst modelConfigSchema = z\n .object({\n provider: z.string().describe('Model provider (e.g., openai, anthropic)'),\n name: z.string().describe('Model name (e.g., gpt-4o, claude-3-opus)'),\n })\n .passthrough();\n\n/** Per-tool config schema */\nconst toolConfigSchema = z.object({ description: z.string().optional(), rules: ruleGroupSchema.optional() });\n\n/** Base tools config schema */\nconst toolsConfigSchema = z.record(z.string(), toolConfigSchema);\n\n/** MCP client tools config schema — specifies which tools to use from an MCP client/server */\nconst mcpClientToolsConfigSchema = z.object({\n tools: z.record(z.string(), toolConfigSchema).optional(),\n});\n\n/** Per-skill config schema */\nconst skillConfigSchema = z.object({\n description: z.string().optional(),\n instructions: z.string().optional(),\n pin: z.string().optional(),\n strategy: z.enum(['latest', 'live']).optional(),\n});\n\n/** Skills config: skill IDs mapped to per-skill config */\nconst skillsConfigSchema = z.record(z.string(), skillConfigSchema);\n\n/** Workspace reference: a stored workspace ID, inline config, or a registered workspace provider */\nconst workspaceRefSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('id'), workspaceId: z.string() }),\n z.object({ type: z.literal('inline'), config: workspaceSnapshotConfigSchema }),\n z.object({\n type: z.literal('provider'),\n provider: z.string().describe('Workspace provider identifier'),\n config: z.record(z.string(), z.unknown()).describe('Provider-specific configuration'),\n }),\n]);\n\n/** Screencast options for streaming browser frames */\nconst screencastOptionsSchema = z.object({\n format: z.enum(['jpeg', 'png']).optional().describe('Image format (default: jpeg)'),\n quality: z.number().min(0).max(100).optional().describe('JPEG quality 0-100 (default: 80)'),\n maxWidth: z.number().optional().describe('Max width in pixels (default: 1280)'),\n maxHeight: z.number().optional().describe('Max height in pixels (default: 720)'),\n everyNthFrame: z.number().optional().describe('Capture every Nth frame (default: 1)'),\n});\n\n/** Browser config: serializable browser configuration for stored agents */\nconst browserConfigSchema = z.object({\n provider: z.string().describe('Browser provider type (e.g., stagehand, playwright)'),\n headless: z.boolean().optional().describe('Run browser in headless mode (default: true)'),\n viewport: z\n .object({\n width: z.number().describe('Viewport width in pixels'),\n height: z.number().describe('Viewport height in pixels'),\n })\n .optional()\n .describe('Browser viewport dimensions'),\n timeout: z.number().optional().describe('Default timeout in milliseconds (default: 10000)'),\n screencast: screencastOptionsSchema.optional().describe('Screencast options for streaming browser frames'),\n});\n\n/** Browser reference: inline browser configuration */\nconst browserRefSchema = z.object({\n type: z.literal('inline'),\n config: browserConfigSchema,\n});\n\n/**\n * Processor phase enum matching ProcessorPhase type\n */\nconst processorPhaseSchema = z.enum([\n 'processInput',\n 'processInputStep',\n 'processOutputStream',\n 'processOutputResult',\n 'processOutputStep',\n]);\n\n/**\n * A single processor step in a stored processor graph.\n */\nconst processorGraphStepSchema = z.object({\n id: z.string().describe('Unique ID for this step within the graph'),\n providerId: z.string().describe('ProcessorProvider ID that creates this processor'),\n config: z.record(z.string(), z.unknown()).describe('Configuration matching the provider configSchema'),\n enabledPhases: z.array(processorPhaseSchema).min(1).describe('Which processor phases to enable'),\n});\n\n/**\n * Processor graph entry schema.\n * Simplified version of SerializedStepFlowEntry, supporting step, parallel, and conditional.\n *\n * Uses a fixed nesting depth (3 levels) to avoid infinite recursion\n * when converting to JSON Schema / OpenAPI.\n */\n\n/** Depth 3 (leaf): only step entries allowed */\nconst processorGraphEntryDepth3 = z.discriminatedUnion('type', [\n z.object({ type: z.literal('step'), step: processorGraphStepSchema }),\n]);\n\n/** Depth 2: step, parallel, and conditional — children limited to depth 3 */\nconst processorGraphEntryDepth2 = z.discriminatedUnion('type', [\n z.object({ type: z.literal('step'), step: processorGraphStepSchema }),\n z.object({ type: z.literal('parallel'), branches: z.array(z.array(processorGraphEntryDepth3)) }),\n z.object({\n type: z.literal('conditional'),\n conditions: z.array(\n z.object({\n steps: z.array(processorGraphEntryDepth3),\n rules: ruleGroupSchema.optional(),\n }),\n ),\n }),\n]);\n\n/** Depth 1 (top-level): step, parallel, and conditional — children limited to depth 2 */\nconst processorGraphEntrySchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('step'), step: processorGraphStepSchema }),\n z.object({ type: z.literal('parallel'), branches: z.array(z.array(processorGraphEntryDepth2)) }),\n z.object({\n type: z.literal('conditional'),\n conditions: z.array(\n z.object({\n steps: z.array(processorGraphEntryDepth2),\n rules: ruleGroupSchema.optional(),\n }),\n ),\n }),\n]);\n\n/**\n * A stored processor graph representing a pipeline of processors.\n */\nconst storedProcessorGraphSchema = z.object({\n steps: z.array(processorGraphEntrySchema).describe('Ordered list of processor graph entries'),\n});\n\n/**\n * Agent snapshot config fields (name, description, instructions, model, tools, etc.)\n * These live in version snapshots, not on the thin agent record.\n *\n * Fields that support conditional variants (StorageConditionalField) can be either\n * a static value OR an array of { value, rules? } variants evaluated at request time.\n */\nconst snapshotConfigSchema = z.object({\n name: z.string().describe('Name of the agent'),\n description: z.string().optional().describe('Description of the agent'),\n instructions: instructionsSchema,\n model: conditionalFieldSchema(modelConfigSchema).describe(\n 'Model configuration — static value or array of conditional variants',\n ),\n tools: conditionalFieldSchema(toolsConfigSchema)\n .optional()\n .describe('Tool keys mapped to per-tool config — static or conditional'),\n defaultOptions: conditionalFieldSchema(defaultOptionsSchema)\n .optional()\n .describe('Default options for generate/stream calls — static or conditional'),\n workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Workflow keys with optional per-workflow config — static or conditional'),\n agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Agent keys with optional per-agent config — static or conditional'),\n integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of tool provider IDs to their tool configurations — static or conditional'),\n toolProviders: conditionalFieldSchema(toolProvidersSchema)\n .optional()\n .describe(\n 'Tool provider connections and per-tool config (provider-agnostic). Coexists with the deprecated `integrationTools` field.',\n ),\n mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of stored MCP client IDs to their tool configurations — static or conditional'),\n inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Input processor graph — static or conditional'),\n outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Output processor graph — static or conditional'),\n memory: conditionalFieldSchema(serializedMemoryConfigSchema)\n .optional()\n .describe('Memory configuration — static or conditional'),\n scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema))\n .optional()\n .describe('Scorer keys with optional sampling config — static or conditional'),\n skills: conditionalFieldSchema(skillsConfigSchema)\n .optional()\n .describe('Skill IDs mapped to per-skill config — static or conditional'),\n workspace: conditionalFieldSchema(workspaceRefSchema)\n .optional()\n .describe('Workspace reference (stored ID or inline config) — static or conditional'),\n browser: z\n .union([conditionalFieldSchema(browserRefSchema), z.boolean(), z.null()])\n .optional()\n .describe('Browser configuration — object config, true (apply default), false/null (disable)'),\n requestContextSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('JSON Schema defining valid request context variables for conditional rule evaluation'),\n});\n\n/**\n * Agent metadata fields (authorId, metadata, visibility) that live on the thin agent record.\n */\nconst agentMetadataSchema = z.object({\n authorId: z.string().optional().describe('Author identifier for multi-tenant filtering'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata for the agent'),\n visibility: z\n .enum(['private', 'public'])\n .optional()\n .describe('Agent visibility: private (owner/admin only) or public (any reader)'),\n});\n\n/**\n * Snapshot config schema for create where `model` is optional. When omitted, the\n * builder applies `defaults.model` from `/editor/builder/settings` server-side.\n */\nconst snapshotConfigCreateSchema = snapshotConfigSchema.extend({\n model: conditionalFieldSchema(modelConfigSchema)\n .optional()\n .describe(\n 'Model configuration — static value or array of conditional variants. ' +\n 'When omitted, the builder default model is applied server-side.',\n ),\n});\n\n/**\n * POST /stored/agents - Create stored agent body\n * Flat union of agent-record fields + config fields\n * The id is optional — if not provided, it will be derived from the agent name via slugify.\n */\nexport const createStoredAgentBodySchema = z\n .object({\n id: z.string().optional().describe('Unique identifier for the agent. If not provided, derived from name.'),\n authorId: z.string().optional().describe('Author identifier for multi-tenant filtering'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata for the agent'),\n visibility: z\n .enum(['private', 'public'])\n .optional()\n .describe('Agent visibility: private (owner/admin only) or public (any reader)'),\n })\n .merge(snapshotConfigCreateSchema);\n\n/**\n * Snapshot config schema for updates where nullable fields (like memory) can be set to null to clear them.\n */\nconst snapshotConfigUpdateSchema = snapshotConfigSchema.extend({\n memory: z\n .union([conditionalFieldSchema(serializedMemoryConfigSchema), z.null()])\n .optional()\n .describe('Memory configuration — static, conditional, or null to disable memory'),\n});\n\n/**\n * PATCH /stored/agents/:storedAgentId - Update stored agent body\n * Optional metadata-level fields + optional config fields\n */\nexport const updateStoredAgentBodySchema = agentMetadataSchema\n .partial()\n .merge(snapshotConfigUpdateSchema.partial())\n .extend({\n changeMessage: z\n .string()\n .trim()\n .max(500)\n .optional()\n .describe('Optional message describing the changes for the auto-created version'),\n });\n\nexport const exportStoredAgentBodySchema = snapshotConfigUpdateSchema.partial();\n\nexport const openStoredAgentChangeRequestBodySchema = exportStoredAgentBodySchema.extend({\n changeMessage: z.string().trim().max(500).optional(),\n userName: z.string().trim().min(1).max(120).optional(),\n inspectOnly: z.boolean().optional(),\n});\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\n/**\n * Resolved author object — server-side enrichment of `authorId` against the\n * configured auth provider. Only `id` is required; the other fields mirror\n * what `/auth/me` exposes and are optional because providers may not return\n * every field.\n */\nexport const resolvedAuthorSchema = z.object({\n id: z.string(),\n name: z.string().optional(),\n email: z.string().optional(),\n avatarUrl: z.string().optional(),\n});\n\n/**\n * Stored agent object schema (resolved response: thin record + version config)\n * Represents StorageResolvedAgentType\n */\nexport const storedAgentSchema = z.object({\n // Thin agent record fields\n id: z.string(),\n status: z.string().describe('Agent status: draft or published'),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n author: resolvedAuthorSchema.optional().describe('Resolved author identity (when an auth provider is configured)'),\n metadata: z.record(z.string(), z.unknown()).optional(),\n visibility: z.enum(['private', 'public']).optional(),\n favoriteCount: z.number().int().nonnegative().optional().describe('Number of users who have favorited this agent'),\n isFavorited: z.boolean().optional().describe('Whether the requesting user has favorited this agent'),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n // Version snapshot config fields (resolved from active version)\n name: z.string().describe('Name of the agent'),\n description: z.string().optional().describe('Description of the agent'),\n instructions: instructionsSchema,\n model: conditionalFieldSchema(modelConfigSchema).describe(\n 'Model configuration — static value or array of conditional variants',\n ),\n tools: conditionalFieldSchema(toolsConfigSchema)\n .optional()\n .describe('Tool keys mapped to per-tool config — static or conditional'),\n defaultOptions: conditionalFieldSchema(defaultOptionsSchema)\n .optional()\n .describe('Default options for generate/stream calls — static or conditional'),\n workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Workflow keys with optional per-workflow config — static or conditional'),\n agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Agent keys with optional per-agent config — static or conditional'),\n integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of tool provider IDs to their tool configurations — static or conditional'),\n toolProviders: conditionalFieldSchema(toolProvidersSchema)\n .optional()\n .describe(\n 'Tool provider connections and per-tool config (provider-agnostic). Coexists with the deprecated `integrationTools` field.',\n ),\n mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of stored MCP client IDs to their tool configurations — static or conditional'),\n inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Input processor graph — static or conditional'),\n outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Output processor graph — static or conditional'),\n memory: conditionalFieldSchema(serializedMemoryConfigSchema)\n .optional()\n .describe('Memory configuration — static or conditional'),\n scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema))\n .optional()\n .describe('Scorer keys with optional sampling config — static or conditional'),\n skills: conditionalFieldSchema(skillsConfigSchema)\n .optional()\n .describe('Skill IDs mapped to per-skill config — static or conditional'),\n workspace: conditionalFieldSchema(workspaceRefSchema)\n .optional()\n .describe('Workspace reference (stored ID or inline config) — static or conditional'),\n browser: z\n .union([conditionalFieldSchema(browserRefSchema), z.boolean(), z.null()])\n .optional()\n .describe('Browser configuration — object config, true (apply default), false/null (disable)'),\n requestContextSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('JSON Schema defining valid request context variables'),\n});\n\n/**\n * Response for GET /stored/agents\n */\nexport const listStoredAgentsResponseSchema = paginationInfoSchema.extend({\n agents: z.array(storedAgentSchema),\n});\n\n/**\n * Response for GET /stored/agents/:storedAgentId\n */\nexport const getStoredAgentResponseSchema = storedAgentSchema;\n\n/**\n * Response for POST /stored/agents\n */\nexport const createStoredAgentResponseSchema = storedAgentSchema;\n\n/**\n * Response for PATCH /stored/agents/:storedAgentId\n *\n * The response can be either:\n * 1. A thin agent record (no version) - only has id, status, dates, etc.\n * 2. A resolved agent (with version) - has all config fields from the version\n *\n * We use a union to handle both cases properly.\n */\nexport const updateStoredAgentResponseSchema = z.union([\n // Thin agent record (no version config)\n z.object({\n id: z.string(),\n status: z.string(),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n visibility: z.enum(['private', 'public']).optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n }),\n // Resolved agent (thin record + version config)\n storedAgentSchema,\n]);\n\n/**\n * Response for DELETE /stored/agents/:storedAgentId\n */\nexport const deleteStoredAgentResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n});\n\n/**\n * Response for GET /stored/agents/:storedAgentId/dependents\n *\n * `dependents` lists caller-readable stored agents whose resolved `agents` map\n * references the target. Includes both public and the caller's own private\n * agents — anything the caller already has read access to.\n * `hiddenCount` aggregates references from agents the caller cannot read\n * (cross-workspace private agents). Only populated when the target agent is\n * public, to avoid leaking cross-workspace structure for private targets.\n */\nexport const getStoredAgentDependentsResponseSchema = z.object({\n dependents: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n }),\n ),\n hiddenCount: z.number().int().nonnegative(),\n});\n\nexport const exportStoredAgentResponseSchema = z.object({\n agentId: z.string(),\n fileName: z.string(),\n content: z.string(),\n config: z.record(z.string(), z.unknown()),\n});\n\nexport const openStoredAgentChangeRequestResponseSchema = z.object({\n id: z.union([z.string(), z.number()]).optional(),\n url: z.string(),\n ref: z.string().optional(),\n});\n\n// ============================================================================\n// Preview Instructions Schemas\n// ============================================================================\n\n/**\n * POST /stored/agents/preview-instructions - Preview resolved instructions\n */\nexport const previewInstructionsBodySchema = z.object({\n blocks: z.array(agentInstructionBlockSchema).describe('Array of instruction blocks to resolve'),\n context: z\n .record(z.string(), z.unknown())\n .optional()\n .default({})\n .describe('Request context for variable interpolation and rule evaluation'),\n});\n\n/**\n * Response for POST /stored/agents/preview-instructions\n */\nexport const previewInstructionsResponseSchema = z.object({\n result: z.string().describe('The resolved instructions string'),\n});\n\n/**\n * Exported for use in agent-versions.ts schemas\n */\nexport {\n snapshotConfigSchema,\n scorerConfigSchema,\n conditionalFieldSchema,\n modelConfigSchema,\n storedProcessorGraphSchema,\n processorGraphStepSchema,\n processorGraphEntrySchema,\n processorPhaseSchema,\n toolConfigSchema,\n toolsConfigSchema,\n};\n"]}
import { responseObjectSchema, createResponseBodySchema, responseIdPathParams, deleteResponseSchema } from './chunk-BIUL4Y6W.js';
import { mapResponseTurnRecordToResponse, mapResponseInputToExecutionMessages, mapMastraToolsToResponseTools, createMessageId, buildCompletedResponse, buildInProgressResponse, createResponseStreamEventTranslator, createOutputTextPart, toResponseUsage, toResponseStatus, formatSseEvent } from './chunk-TLLV2JP5.js';
import { findResponseTurnRecordAcrossAgents, deleteResponseTurnRecord, findResponseTurnRecord, resolveResponseTurnMessagesForStorage, getAgentMemoryStore, persistResponseTurnRecord } from './chunk-SPNWC52V.js';
import { getAgentFromSystem } from './chunk-XORQIQXT.js';
import { MastraFGAPermissions, getEffectiveThreadId, getEffectiveResourceId, enforceThreadAccess } from './chunk-A7APTIYJ.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
import { __export } from './chunk-PR4QN5HX.js';
import { randomUUID } from 'crypto';
// src/server/handlers/responses.ts
var responses_exports = {};
__export(responses_exports, {
CREATE_RESPONSE_ROUTE: () => CREATE_RESPONSE_ROUTE,
DELETE_RESPONSE_ROUTE: () => DELETE_RESPONSE_ROUTE,
GET_RESPONSE_ROUTE: () => GET_RESPONSE_ROUTE
});
var JSON_OBJECT_RESPONSE_SCHEMA = {
type: "object",
additionalProperties: true
};
function jsonResponse(data, status = 200) {
return new Response(JSON.stringify(data), {
status,
headers: {
"Content-Type": "application/json"
}
});
}
function createStructuredOutput(text) {
if (!text) {
return void 0;
}
switch (text.format.type) {
case "json_object":
return {
schema: JSON_OBJECT_RESPONSE_SCHEMA,
jsonPromptInjection: true
};
case "json_schema":
return {
schema: text.format.schema
};
default:
return void 0;
}
}
function getStreamedMessageOutputItem(response, responseId) {
return response.output.find(
(item) => item.type === "message" && item.id === responseId
) ?? null;
}
async function resolveThreadExecutionContext({
agent,
store,
conversationId,
previousResponseTurnRecord,
requestContext
}) {
if (conversationId && previousResponseTurnRecord && previousResponseTurnRecord.thread.id !== conversationId) {
throw new HTTPException(400, {
message: "conversation_id and previous_response_id must reference the same conversation thread when both are provided"
});
}
if (previousResponseTurnRecord) {
return {
threadId: previousResponseTurnRecord.thread.id,
resourceId: previousResponseTurnRecord.thread.resourceId
};
}
const effectiveThreadId = getEffectiveThreadId(requestContext, void 0);
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!store && !conversationId && !effectiveThreadId) {
return null;
}
const memory = await agent.getMemory({ requestContext });
if (!memory) {
if (conversationId) {
throw new HTTPException(400, {
message: "conversation_id requires the target agent to have memory configured"
});
}
return null;
}
if (conversationId) {
const existingThread2 = await memory.getThreadById({ threadId: conversationId });
if (!existingThread2) {
throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });
}
await enforceThreadAccess({
mastra: agent.getMastraInstance(),
requestContext,
threadId: conversationId,
thread: existingThread2,
effectiveResourceId
});
return {
threadId: existingThread2.id,
resourceId: effectiveResourceId ?? existingThread2.resourceId
};
}
if (!effectiveThreadId) {
if (!store) {
return null;
}
const threadId2 = randomUUID();
const createdThread2 = await memory.createThread({
threadId: threadId2,
resourceId: effectiveResourceId ?? threadId2
});
return {
threadId: createdThread2.id,
resourceId: createdThread2.resourceId
};
}
const threadId = effectiveThreadId;
const existingThread = await memory.getThreadById({ threadId });
if (existingThread) {
await enforceThreadAccess({
mastra: agent.getMastraInstance(),
requestContext,
threadId,
thread: existingThread,
effectiveResourceId
});
return {
threadId: existingThread.id,
resourceId: effectiveResourceId ?? existingThread.resourceId
};
}
if (!store) {
return null;
}
const resourceId = effectiveResourceId ?? threadId;
const createdThread = await memory.createThread({
threadId,
resourceId
});
return {
threadId: createdThread.id,
resourceId: createdThread.resourceId
};
}
function createExecutionMemory(threadContext) {
if (!threadContext) {
return void 0;
}
return {
memory: {
thread: threadContext.threadId,
resource: threadContext.resourceId
}
};
}
async function resolveResponseAgent({
mastra,
agentId
}) {
if (!agentId) {
throw new HTTPException(400, {
message: "Responses requests require an agent_id"
});
}
if (!mastra) {
throw new HTTPException(500, { message: "Mastra instance is required for agent-backed responses" });
}
return getAgentFromSystem({ mastra, agentId });
}
async function resolveAgentMemoryStore({
agent,
requestContext,
errorMessage
}) {
const agentMemoryStore = await getAgentMemoryStore({ agent, requestContext });
if (!agentMemoryStore) {
throw new HTTPException(400, { message: errorMessage });
}
return agentMemoryStore;
}
async function executeGenerate({
agent,
resolvedModel,
modelOverride,
instructions,
text,
providerOptions,
input,
requestContext,
abortSignal,
threadContext
}) {
const executionMemory = createExecutionMemory(threadContext);
const structuredOutput = createStructuredOutput(text);
const modelOption = modelOverride ? { model: modelOverride } : {};
const commonOptions = {
instructions,
requestContext,
abortSignal,
...modelOption,
structuredOutput,
providerOptions,
...executionMemory ?? {}
};
if (resolvedModel.specificationVersion === "v1") {
if (threadContext) {
return await agent.generateLegacy(input, {
instructions,
requestContext,
abortSignal,
...modelOption,
output: structuredOutput?.schema,
providerOptions,
resourceId: threadContext.resourceId,
threadId: threadContext.threadId
});
}
return await agent.generateLegacy(input, {
instructions,
requestContext,
abortSignal,
...modelOption,
output: structuredOutput?.schema,
providerOptions
});
}
return await agent.generate(input, commonOptions);
}
async function executeStream({
agent,
resolvedModel,
modelOverride,
instructions,
text,
providerOptions,
input,
requestContext,
abortSignal,
threadContext
}) {
const executionMemory = createExecutionMemory(threadContext);
const structuredOutput = createStructuredOutput(text);
const modelOption = modelOverride ? { model: modelOverride } : {};
const commonOptions = {
instructions,
requestContext,
abortSignal,
...modelOption,
structuredOutput,
providerOptions,
...executionMemory ?? {}
};
if (resolvedModel.specificationVersion === "v1") {
if (threadContext) {
return await agent.streamLegacy(input, {
instructions,
requestContext,
abortSignal,
...modelOption,
output: structuredOutput?.schema,
providerOptions,
resourceId: threadContext.resourceId,
threadId: threadContext.threadId
});
}
return await agent.streamLegacy(input, {
instructions,
requestContext,
abortSignal,
...modelOption,
output: structuredOutput?.schema,
providerOptions
});
}
return await agent.stream(input, commonOptions);
}
async function resolveUsage(result) {
return await (result.totalUsage ?? result.usage ?? null);
}
async function resolveProviderMetadata(result) {
return await (result.providerMetadata ?? void 0);
}
async function resolveFinishReason(result) {
return await result.finishReason ?? void 0;
}
async function resolveText(result) {
return await result.text ?? "";
}
async function resolveCompletedResponseState(result, fallbackText) {
const usage = await resolveUsage(result);
return {
completedAt: Math.floor(Date.now() / 1e3),
status: toResponseStatus(await resolveFinishReason(result)),
text: await resolveText(result) || fallbackText,
usage,
usageDetails: toResponseUsage(usage),
providerOptions: await resolveProviderMetadata(result)
};
}
async function storeCompletedResponse({
agentMemoryStore,
didStore,
threadContext,
responseId,
metadata,
completedState,
messages,
outputItems
}) {
if (!didStore || !threadContext) {
return;
}
await persistResponseTurnRecord({
memoryStore: agentMemoryStore,
responseId,
metadata: {
...metadata,
completedAt: completedState.completedAt,
status: completedState.status,
usage: completedState.usageDetails,
providerOptions: completedState.providerOptions,
messageIds: [],
outputItems
},
threadContext,
messages
});
}
async function finalizeResponse({
agentMemoryStore,
didStore,
threadContext,
result,
responseId,
createdAt,
model,
instructions,
previousResponseId,
conversationId,
configuredTools,
responseMetadata,
fallbackText,
fallbackOutputItems
}) {
const completedState = await resolveCompletedResponseState(result, fallbackText);
const fallbackItems = fallbackOutputItems?.(completedState);
const responseMessages = await resolveResponseTurnMessagesForStorage({
result,
responseId,
text: completedState.text,
threadContext,
fallbackOutputItems: threadContext ? fallbackItems : void 0
});
const response = buildCompletedResponse({
responseId,
outputMessageId: responseId,
model,
createdAt,
completedAt: completedState.completedAt,
status: completedState.status,
text: completedState.text,
usage: completedState.usage,
instructions,
textConfig: responseMetadata.text,
previousResponseId,
conversationId,
providerOptions: completedState.providerOptions,
tools: configuredTools,
messages: responseMessages,
fallbackOutputItems: fallbackItems,
store: didStore
});
await storeCompletedResponse({
agentMemoryStore,
didStore,
threadContext,
responseId,
metadata: responseMetadata,
completedState,
messages: responseMessages,
outputItems: response.output
});
return { completedState, response, responseMessages };
}
async function prepareCreateResponseRequest({
body,
mastra,
requestContext
}) {
const executionInput = mapResponseInputToExecutionMessages(body.input);
let previousResponseTurnRecord = null;
let resolvedAgent = null;
if (body.previous_response_id) {
if (body.agent_id) {
resolvedAgent = await resolveResponseAgent({ mastra, agentId: body.agent_id });
previousResponseTurnRecord = await findResponseTurnRecord({
agent: resolvedAgent,
responseId: body.previous_response_id,
requestContext
});
if (!previousResponseTurnRecord) {
const owningResponseTurnRecord = await findResponseTurnRecordAcrossAgents({
mastra,
responseId: body.previous_response_id,
requestContext
});
if (owningResponseTurnRecord) {
if (owningResponseTurnRecord.metadata.agentId === body.agent_id) {
previousResponseTurnRecord = owningResponseTurnRecord;
} else {
throw new HTTPException(400, {
message: `Stored response ${body.previous_response_id} belongs to agent ${owningResponseTurnRecord.metadata.agentId}, not ${body.agent_id}`
});
}
}
if (!previousResponseTurnRecord) {
throw new HTTPException(404, { message: `Stored response ${body.previous_response_id} was not found` });
}
}
} else {
if (!mastra) {
throw new HTTPException(500, { message: "Mastra instance is required for agent-backed responses" });
}
previousResponseTurnRecord = await findResponseTurnRecordAcrossAgents({
mastra,
responseId: body.previous_response_id,
requestContext
});
if (!previousResponseTurnRecord) {
throw new HTTPException(404, { message: `Stored response ${body.previous_response_id} was not found` });
}
}
}
const agent = resolvedAgent ?? await resolveResponseAgent({
mastra,
agentId: body.agent_id ?? previousResponseTurnRecord?.metadata.agentId
});
const resolvedModel = await agent.getModel({
requestContext,
modelConfig: body.model
});
const responseModel = body.model ?? (() => {
if (resolvedModel.provider && resolvedModel.modelId) {
const publicProviderId = resolvedModel.provider.includes(".") ? resolvedModel.provider.split(".")[0] : resolvedModel.provider;
return `${publicProviderId}/${resolvedModel.modelId}`;
}
if (resolvedModel.modelId) {
return resolvedModel.modelId;
}
throw new HTTPException(500, {
message: "Responses route could not determine the effective model for this request"
});
})();
const shouldStore = body.store ?? false;
const needsMemoryStore = shouldStore || Boolean(body.conversation_id) || Boolean(body.previous_response_id);
const agentMemoryStore = needsMemoryStore ? await resolveAgentMemoryStore({
agent,
requestContext,
errorMessage: body.previous_response_id ? "previous_response_id requires the target agent to have memory storage configured" : shouldStore ? "Stored responses require the target agent to have memory storage configured" : "conversation_id requires the target agent to have memory storage configured"
}) : null;
const configuredTools = mapMastraToolsToResponseTools(
await Promise.resolve(agent.listTools({ requestContext }))
);
const responseId = createMessageId();
const createdAt = Math.floor(Date.now() / 1e3);
const threadContext = await resolveThreadExecutionContext({
agent,
store: shouldStore,
conversationId: body.conversation_id,
previousResponseTurnRecord,
requestContext
});
if (shouldStore && !threadContext) {
throw new HTTPException(400, {
message: "Stored responses require the target agent to have memory configured"
});
}
const didStore = shouldStore && Boolean(threadContext);
return {
agent,
agentMemoryStore,
configuredTools,
createdAt,
didStore,
executionInput,
previousResponseTurnRecord,
resolvedModel,
responseId,
responseModel,
responseMetadata: {
agentId: agent.id,
model: responseModel,
createdAt,
instructions: body.instructions,
text: body.text,
previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,
tools: configuredTools,
store: didStore
},
threadContext
};
}
function createResponseEventStream({
agentMemoryStore,
body,
configuredTools,
createdAt,
didStore,
previousResponseTurnRecord,
responseId,
responseModel,
responseMetadata,
streamResult,
threadContext
}) {
const createdResponse = buildInProgressResponse({
responseId,
model: responseModel,
createdAt,
instructions: body.instructions,
textConfig: body.text,
previousResponseId: body.previous_response_id,
conversationId: threadContext?.threadId ?? body.conversation_id,
tools: configuredTools,
store: didStore
});
return new ReadableStream({
async start(controller) {
let sequenceNumber = 1;
const enqueueEvent = (eventName, payload) => {
controller.enqueue(
formatSseEvent(eventName, {
...payload,
sequence_number: sequenceNumber++
})
);
};
enqueueEvent("response.created", {
type: "response.created",
response: createdResponse
});
enqueueEvent("response.in_progress", {
type: "response.in_progress",
response: createdResponse
});
const streamEvents = createResponseStreamEventTranslator(responseId);
const fullStream = await streamResult.fullStream;
const reader = fullStream.getReader();
try {
while (true) {
const { done, value } = await reader.read();
if (done) {
break;
}
for (const event of streamEvents.consume(value)) {
enqueueEvent(event.event, event.payload);
}
}
for (const event of streamEvents.flushPendingToolResults()) {
enqueueEvent(event.event, event.payload);
}
const { completedState, response } = await finalizeResponse({
agentMemoryStore,
didStore,
threadContext,
result: streamResult,
responseId,
createdAt,
model: responseModel,
instructions: body.instructions,
previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,
conversationId: threadContext?.threadId ?? body.conversation_id,
configuredTools,
responseMetadata,
fallbackText: streamEvents.text,
fallbackOutputItems: (completedState2) => streamEvents.getOutputItems({
text: completedState2.text,
status: completedState2.status
})
});
const completedItem = getStreamedMessageOutputItem(response, responseId);
if (completedItem || completedState.text) {
for (const event of streamEvents.completeText(
completedState.text,
completedItem ?? {
id: responseId,
type: "message",
role: "assistant",
status: "completed",
content: [createOutputTextPart(completedState.text)]
}
)) {
enqueueEvent(event.event, event.payload);
}
}
enqueueEvent("response.completed", {
type: "response.completed",
response
});
controller.close();
} catch (error) {
controller.error(error);
} finally {
reader.releaseLock();
}
}
});
}
var CREATE_RESPONSE_ROUTE = createRoute({
method: "POST",
path: "/v1/responses",
responseType: "datastream-response",
bodySchema: createResponseBodySchema,
responseSchema: responseObjectSchema,
summary: "Create a response",
description: "Creates a response through a Mastra-hosted Responses API-compatible route",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: MastraFGAPermissions.AGENTS_EXECUTE,
handler: async ({ mastra, requestContext, abortSignal, ...body }) => {
try {
const {
agent,
agentMemoryStore,
configuredTools,
createdAt,
didStore,
executionInput,
previousResponseTurnRecord,
resolvedModel,
responseId,
responseModel,
responseMetadata,
threadContext
} = await prepareCreateResponseRequest({ body, mastra, requestContext });
if (!body.stream) {
const result = await executeGenerate({
agent,
resolvedModel,
modelOverride: body.model,
instructions: body.instructions,
text: body.text,
providerOptions: body.providerOptions,
input: executionInput,
requestContext,
abortSignal,
threadContext
});
const { response } = await finalizeResponse({
agentMemoryStore,
didStore,
threadContext,
result,
responseId,
createdAt,
model: responseModel,
instructions: body.instructions,
previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,
conversationId: threadContext?.threadId ?? body.conversation_id,
configuredTools,
responseMetadata,
fallbackText: ""
});
return jsonResponse(response);
}
const streamResult = await executeStream({
agent,
resolvedModel,
modelOverride: body.model,
instructions: body.instructions,
text: body.text,
providerOptions: body.providerOptions,
input: executionInput,
requestContext,
abortSignal,
threadContext
});
const stream = createResponseEventStream({
agentMemoryStore,
body,
configuredTools,
createdAt,
didStore,
previousResponseTurnRecord,
responseId,
responseModel,
responseMetadata,
streamResult,
threadContext
});
return new Response(stream, {
headers: {
"Content-Type": "text/event-stream; charset=utf-8",
"Cache-Control": "no-cache",
Connection: "keep-alive",
"X-Accel-Buffering": "no"
}
});
} catch (error) {
return handleError(error, "Error creating response");
}
}
});
var GET_RESPONSE_ROUTE = createRoute({
method: "GET",
path: "/v1/responses/:responseId",
responseType: "json",
pathParamSchema: responseIdPathParams,
responseSchema: responseObjectSchema,
summary: "Retrieve a stored response",
description: "Returns a previously stored response object",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, responseId }) => {
try {
const responseTurnRecord = await findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });
if (!responseTurnRecord) {
throw new HTTPException(404, { message: `Stored response ${responseId} was not found` });
}
return mapResponseTurnRecordToResponse(responseTurnRecord);
} catch (error) {
return handleError(error, "Error retrieving response");
}
}
});
var DELETE_RESPONSE_ROUTE = createRoute({
method: "DELETE",
path: "/v1/responses/:responseId",
responseType: "json",
pathParamSchema: responseIdPathParams,
responseSchema: deleteResponseSchema,
summary: "Delete a stored response",
description: "Deletes a stored response so it can no longer be retrieved or chained",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: MastraFGAPermissions.AGENTS_DELETE,
handler: async ({ mastra, requestContext, responseId }) => {
try {
const responseTurnRecord = await findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });
if (!responseTurnRecord) {
throw new HTTPException(404, { message: `Stored response ${responseId} was not found` });
}
await deleteResponseTurnRecord({ responseTurnRecord });
const response = {
id: responseId,
object: "response",
deleted: true
};
return response;
} catch (error) {
return handleError(error, "Error deleting response");
}
}
});
export { CREATE_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE, responses_exports };
//# sourceMappingURL=chunk-6LKY2RDJ.js.map
//# sourceMappingURL=chunk-6LKY2RDJ.js.map
{"version":3,"sources":["../src/server/handlers/responses.ts"],"names":["existingThread","threadId","createdThread","completedState"],"mappings":"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","file":"chunk-6LKY2RDJ.js","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { Agent, MastraDBMessage } from '@mastra/core/agent';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { MemoryStorage } from '@mastra/core/storage';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n createResponseBodySchema,\n deleteResponseSchema,\n responseIdPathParams,\n responseObjectSchema,\n} from '../schemas/responses';\nimport type { CreateResponseBody, DeleteResponse, ResponseObject } from '../schemas/responses';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\nimport {\n buildCompletedResponse,\n buildInProgressResponse,\n createResponseStreamEventTranslator,\n createMessageId,\n createOutputTextPart,\n formatSseEvent,\n mapMastraToolsToResponseTools,\n mapResponseInputToExecutionMessages,\n mapResponseTurnRecordToResponse,\n toResponseStatus,\n toResponseUsage,\n} from './responses.adapter';\nimport {\n deleteResponseTurnRecord,\n findResponseTurnRecord,\n findResponseTurnRecordAcrossAgents,\n getAgentMemoryStore,\n persistResponseTurnRecord,\n resolveResponseTurnMessagesForStorage,\n} from './responses.storage';\nimport type {\n ProviderMetadataLike,\n ResponseTurnRecord,\n ResponseTurnRecordMetadata,\n ThreadExecutionContext,\n UsageLike,\n} from './responses.storage';\nimport { enforceThreadAccess, getEffectiveResourceId, getEffectiveThreadId } from './utils';\n\ntype AgentExecutionInput = Parameters<Agent['generate']>[0];\ntype ResolvedAgentModel = Awaited<ReturnType<Agent['getModel']>>;\n\ntype ResponseExecutionResult = {\n text?: string;\n finishReason?: string;\n totalUsage?: UsageLike | Promise<UsageLike>;\n usage?: UsageLike | Promise<UsageLike>;\n providerMetadata?: ProviderMetadataLike | Promise<ProviderMetadataLike>;\n response?: {\n id?: string;\n dbMessages?: MastraDBMessage[];\n };\n};\n\ntype ResponseStreamResult = {\n fullStream: ReadableStream<unknown> | Promise<ReadableStream<unknown>>;\n text: Promise<string> | string;\n finishReason: Promise<string | undefined> | string | undefined;\n totalUsage?: Promise<UsageLike> | UsageLike;\n usage?: Promise<UsageLike> | UsageLike;\n providerMetadata?: Promise<ProviderMetadataLike> | ProviderMetadataLike;\n response?:\n | Promise<{\n id?: string;\n dbMessages?: MastraDBMessage[];\n }>\n | {\n id?: string;\n dbMessages?: MastraDBMessage[];\n };\n};\n\ntype CompletedResponseState = {\n completedAt: number;\n status: ResponseObject['status'];\n text: string;\n usage: UsageLike;\n usageDetails: ResponseObject['usage'];\n providerOptions: ProviderMetadataLike;\n};\n\ntype FinalizedResponse = {\n completedState: CompletedResponseState;\n response: ResponseObject;\n responseMessages: MastraDBMessage[];\n};\n\ntype PreparedCreateResponseRequest = {\n agent: Agent<any, any, any, any>;\n agentMemoryStore: MemoryStorage | null;\n configuredTools: ReturnType<typeof mapMastraToolsToResponseTools>;\n createdAt: number;\n didStore: boolean;\n executionInput: AgentExecutionInput;\n previousResponseTurnRecord: ResponseTurnRecord | null;\n resolvedModel: ResolvedAgentModel;\n responseId: string;\n responseModel: string;\n responseMetadata: Omit<\n ResponseTurnRecordMetadata,\n 'completedAt' | 'status' | 'usage' | 'providerOptions' | 'messageIds'\n >;\n threadContext: ThreadExecutionContext | null;\n};\n\nconst JSON_OBJECT_RESPONSE_SCHEMA = {\n type: 'object',\n additionalProperties: true,\n} as const;\n\nfunction jsonResponse(data: ResponseObject, status: number = 200): Response {\n return new Response(JSON.stringify(data), {\n status,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n}\n\nfunction createStructuredOutput(text: CreateResponseBody['text']) {\n if (!text) {\n return undefined;\n }\n\n switch (text.format.type) {\n case 'json_object':\n return {\n schema: JSON_OBJECT_RESPONSE_SCHEMA,\n jsonPromptInjection: true,\n };\n case 'json_schema':\n return {\n schema: text.format.schema,\n };\n default:\n return undefined;\n }\n}\n\nfunction getStreamedMessageOutputItem(response: ResponseObject, responseId: string) {\n return (\n response.output.find(\n (item): item is Extract<ResponseObject['output'][number], { type: 'message' }> =>\n item.type === 'message' && item.id === responseId,\n ) ?? null\n );\n}\n\n/**\n * Resolves the memory thread that should back the current response request.\n *\n * If `previous_response_id` is present, the request continues on that stored thread.\n * Otherwise, the route only creates or reuses a thread when the caller asked to store\n * the response and the resolved agent actually has memory configured.\n */\nasync function resolveThreadExecutionContext({\n agent,\n store,\n conversationId,\n previousResponseTurnRecord,\n requestContext,\n}: {\n agent: Agent<any, any, any, any>;\n store: boolean;\n conversationId?: string;\n previousResponseTurnRecord: ResponseTurnRecord | null;\n requestContext: RequestContext;\n}): Promise<ThreadExecutionContext | null> {\n if (conversationId && previousResponseTurnRecord && previousResponseTurnRecord.thread.id !== conversationId) {\n throw new HTTPException(400, {\n message:\n 'conversation_id and previous_response_id must reference the same conversation thread when both are provided',\n });\n }\n\n if (previousResponseTurnRecord) {\n return {\n threadId: previousResponseTurnRecord.thread.id,\n resourceId: previousResponseTurnRecord.thread.resourceId,\n };\n }\n\n const effectiveThreadId = getEffectiveThreadId(requestContext, undefined);\n const effectiveResourceId = getEffectiveResourceId(requestContext, undefined);\n\n if (!store && !conversationId && !effectiveThreadId) {\n return null;\n }\n\n const memory = await agent.getMemory({ requestContext });\n if (!memory) {\n if (conversationId) {\n throw new HTTPException(400, {\n message: 'conversation_id requires the target agent to have memory configured',\n });\n }\n\n return null;\n }\n\n if (conversationId) {\n const existingThread = await memory.getThreadById({ threadId: conversationId });\n if (!existingThread) {\n throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });\n }\n\n await enforceThreadAccess({\n mastra: agent.getMastraInstance(),\n requestContext,\n threadId: conversationId,\n thread: existingThread,\n effectiveResourceId,\n });\n return {\n threadId: existingThread.id,\n resourceId: effectiveResourceId ?? existingThread.resourceId,\n };\n }\n\n if (!effectiveThreadId) {\n if (!store) {\n return null;\n }\n\n const threadId = randomUUID();\n const createdThread = await memory.createThread({\n threadId,\n resourceId: effectiveResourceId ?? threadId,\n });\n\n return {\n threadId: createdThread.id,\n resourceId: createdThread.resourceId,\n };\n }\n\n const threadId = effectiveThreadId;\n const existingThread = await memory.getThreadById({ threadId });\n if (existingThread) {\n await enforceThreadAccess({\n mastra: agent.getMastraInstance(),\n requestContext,\n threadId,\n thread: existingThread,\n effectiveResourceId,\n });\n return {\n threadId: existingThread.id,\n resourceId: effectiveResourceId ?? existingThread.resourceId,\n };\n }\n\n if (!store) {\n return null;\n }\n\n const resourceId = effectiveResourceId ?? threadId;\n const createdThread = await memory.createThread({\n threadId,\n resourceId,\n });\n\n return {\n threadId: createdThread.id,\n resourceId: createdThread.resourceId,\n };\n}\n\nfunction createExecutionMemory(threadContext: ThreadExecutionContext | null) {\n if (!threadContext) {\n return undefined;\n }\n\n return {\n memory: {\n thread: threadContext.threadId,\n resource: threadContext.resourceId,\n },\n } as const;\n}\n\n/**\n * Resolves the registered Mastra agent that owns the response request.\n */\nasync function resolveResponseAgent({\n mastra,\n agentId,\n}: {\n mastra: Mastra | undefined;\n agentId?: string;\n}): Promise<Agent<any, any, any, any>> {\n if (!agentId) {\n throw new HTTPException(400, {\n message: 'Responses requests require an agent_id',\n });\n }\n\n if (!mastra) {\n throw new HTTPException(500, { message: 'Mastra instance is required for agent-backed responses' });\n }\n\n return getAgentFromSystem({ mastra, agentId });\n}\n\nasync function resolveAgentMemoryStore({\n agent,\n requestContext,\n errorMessage,\n}: {\n agent: Agent<any, any, any, any>;\n requestContext: RequestContext;\n errorMessage: string;\n}): Promise<MemoryStorage> {\n const agentMemoryStore = await getAgentMemoryStore({ agent, requestContext });\n if (!agentMemoryStore) {\n throw new HTTPException(400, { message: errorMessage });\n }\n\n return agentMemoryStore;\n}\n\n/**\n * Executes a non-streaming Responses API request through the resolved Mastra agent.\n */\nasync function executeGenerate({\n agent,\n resolvedModel,\n modelOverride,\n instructions,\n text,\n providerOptions,\n input,\n requestContext,\n abortSignal,\n threadContext,\n}: {\n agent: Agent;\n resolvedModel: ResolvedAgentModel;\n modelOverride?: string;\n instructions: string | undefined;\n text: CreateResponseBody['text'];\n providerOptions: CreateResponseBody['providerOptions'];\n input: AgentExecutionInput;\n requestContext: RequestContext;\n abortSignal: AbortSignal;\n threadContext: ThreadExecutionContext | null;\n}) {\n const executionMemory = createExecutionMemory(threadContext);\n const structuredOutput = createStructuredOutput(text);\n const modelOption = modelOverride ? { model: modelOverride } : {};\n const commonOptions = {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n structuredOutput,\n providerOptions,\n ...(executionMemory ?? {}),\n };\n\n if (resolvedModel.specificationVersion === 'v1') {\n if (threadContext) {\n return (await agent.generateLegacy(input, {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n output: structuredOutput?.schema,\n providerOptions,\n resourceId: threadContext.resourceId,\n threadId: threadContext.threadId,\n } as never)) as ResponseExecutionResult;\n }\n\n return (await agent.generateLegacy(input, {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n output: structuredOutput?.schema,\n providerOptions,\n } as never)) as ResponseExecutionResult;\n }\n\n return (await agent.generate(input, commonOptions as never)) as ResponseExecutionResult;\n}\n\n/**\n * Executes a streaming Responses API request through the resolved Mastra agent.\n */\nasync function executeStream({\n agent,\n resolvedModel,\n modelOverride,\n instructions,\n text,\n providerOptions,\n input,\n requestContext,\n abortSignal,\n threadContext,\n}: {\n agent: Agent;\n resolvedModel: ResolvedAgentModel;\n modelOverride?: string;\n instructions: string | undefined;\n text: CreateResponseBody['text'];\n providerOptions: CreateResponseBody['providerOptions'];\n input: AgentExecutionInput;\n requestContext: RequestContext;\n abortSignal: AbortSignal;\n threadContext: ThreadExecutionContext | null;\n}) {\n const executionMemory = createExecutionMemory(threadContext);\n const structuredOutput = createStructuredOutput(text);\n const modelOption = modelOverride ? { model: modelOverride } : {};\n const commonOptions = {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n structuredOutput,\n providerOptions,\n ...(executionMemory ?? {}),\n };\n\n if (resolvedModel.specificationVersion === 'v1') {\n if (threadContext) {\n return (await agent.streamLegacy(input, {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n output: structuredOutput?.schema,\n providerOptions,\n resourceId: threadContext.resourceId,\n threadId: threadContext.threadId,\n } as never)) as ResponseStreamResult;\n }\n\n return (await agent.streamLegacy(input, {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n output: structuredOutput?.schema,\n providerOptions,\n } as never)) as ResponseStreamResult;\n }\n\n return (await agent.stream(input, commonOptions as never)) as ResponseStreamResult;\n}\n\nasync function resolveUsage(result: ResponseExecutionResult | ResponseStreamResult): Promise<UsageLike> {\n return (await (result.totalUsage ?? result.usage ?? null)) as UsageLike;\n}\n\nasync function resolveProviderMetadata(\n result: ResponseExecutionResult | ResponseStreamResult,\n): Promise<ProviderMetadataLike> {\n return (await (result.providerMetadata ?? undefined)) as ProviderMetadataLike;\n}\n\nasync function resolveFinishReason(\n result: ResponseExecutionResult | ResponseStreamResult,\n): Promise<string | undefined> {\n return (await result.finishReason) ?? undefined;\n}\n\nasync function resolveText(result: ResponseExecutionResult | ResponseStreamResult): Promise<string> {\n return (await result.text) ?? '';\n}\n\n/**\n * Resolves the final response state shared by streaming and non-streaming flows.\n */\nasync function resolveCompletedResponseState(\n result: ResponseExecutionResult | ResponseStreamResult,\n fallbackText: string,\n): Promise<CompletedResponseState> {\n const usage = await resolveUsage(result);\n\n return {\n completedAt: Math.floor(Date.now() / 1000),\n status: toResponseStatus(await resolveFinishReason(result)),\n text: (await resolveText(result)) || fallbackText,\n usage,\n usageDetails: toResponseUsage(usage),\n providerOptions: await resolveProviderMetadata(result),\n };\n}\n\n/**\n * Stores the completed response when the request opted into memory-backed persistence.\n */\nasync function storeCompletedResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n responseId,\n metadata,\n completedState,\n messages,\n outputItems,\n}: {\n agentMemoryStore: MemoryStorage | null;\n didStore: boolean;\n threadContext: ThreadExecutionContext | null;\n responseId: string;\n metadata: Omit<ResponseTurnRecordMetadata, 'completedAt' | 'status' | 'usage' | 'providerOptions' | 'messageIds'>;\n completedState: CompletedResponseState;\n messages: MastraDBMessage[];\n outputItems: ResponseObject['output'];\n}): Promise<void> {\n if (!didStore || !threadContext) {\n return;\n }\n\n await persistResponseTurnRecord({\n memoryStore: agentMemoryStore,\n responseId,\n metadata: {\n ...metadata,\n completedAt: completedState.completedAt,\n status: completedState.status,\n usage: completedState.usageDetails,\n providerOptions: completedState.providerOptions,\n messageIds: [],\n outputItems,\n },\n threadContext,\n messages,\n });\n}\n\n/**\n * Resolves the final response object and persists the stored response turn when needed.\n */\nasync function finalizeResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n result,\n responseId,\n createdAt,\n model,\n instructions,\n previousResponseId,\n conversationId,\n configuredTools,\n responseMetadata,\n fallbackText,\n fallbackOutputItems,\n}: {\n agentMemoryStore: MemoryStorage | null;\n didStore: boolean;\n threadContext: ThreadExecutionContext | null;\n result: ResponseExecutionResult | ResponseStreamResult;\n responseId: string;\n createdAt: number;\n model: string;\n instructions: string | undefined;\n previousResponseId?: string;\n conversationId?: string;\n configuredTools: ReturnType<typeof mapMastraToolsToResponseTools>;\n responseMetadata: Omit<\n ResponseTurnRecordMetadata,\n 'completedAt' | 'status' | 'usage' | 'providerOptions' | 'messageIds'\n >;\n fallbackText: string;\n fallbackOutputItems?: (completedState: CompletedResponseState) => ResponseObject['output'];\n}): Promise<FinalizedResponse> {\n const completedState = await resolveCompletedResponseState(result, fallbackText);\n const fallbackItems = fallbackOutputItems?.(completedState);\n const responseMessages = await resolveResponseTurnMessagesForStorage({\n result,\n responseId,\n text: completedState.text,\n threadContext,\n fallbackOutputItems: threadContext ? fallbackItems : undefined,\n });\n const response = buildCompletedResponse({\n responseId,\n outputMessageId: responseId,\n model,\n createdAt,\n completedAt: completedState.completedAt,\n status: completedState.status,\n text: completedState.text,\n usage: completedState.usage,\n instructions,\n textConfig: responseMetadata.text,\n previousResponseId,\n conversationId,\n providerOptions: completedState.providerOptions,\n tools: configuredTools,\n messages: responseMessages,\n fallbackOutputItems: fallbackItems,\n store: didStore,\n });\n\n await storeCompletedResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n responseId,\n metadata: responseMetadata,\n completedState,\n messages: responseMessages,\n outputItems: response.output,\n });\n\n return { completedState, response, responseMessages };\n}\n\n/**\n * Resolves all request-scoped Mastra primitives needed to execute a Responses create\n * call: the owning agent, the memory thread context, the normalized execution input,\n * and the response-turn metadata that may be persisted later.\n */\nasync function prepareCreateResponseRequest({\n body,\n mastra,\n requestContext,\n}: {\n body: CreateResponseBody;\n mastra: Mastra | undefined;\n requestContext: RequestContext;\n}): Promise<PreparedCreateResponseRequest> {\n const executionInput = mapResponseInputToExecutionMessages(body.input) as AgentExecutionInput;\n let previousResponseTurnRecord: ResponseTurnRecord | null = null;\n let resolvedAgent: Agent<any, any, any, any> | null = null;\n\n if (body.previous_response_id) {\n if (body.agent_id) {\n resolvedAgent = await resolveResponseAgent({ mastra, agentId: body.agent_id });\n previousResponseTurnRecord = await findResponseTurnRecord({\n agent: resolvedAgent,\n responseId: body.previous_response_id,\n requestContext,\n });\n\n if (!previousResponseTurnRecord) {\n const owningResponseTurnRecord = await findResponseTurnRecordAcrossAgents({\n mastra,\n responseId: body.previous_response_id,\n requestContext,\n });\n\n if (owningResponseTurnRecord) {\n if (owningResponseTurnRecord.metadata.agentId === body.agent_id) {\n previousResponseTurnRecord = owningResponseTurnRecord;\n } else {\n throw new HTTPException(400, {\n message: `Stored response ${body.previous_response_id} belongs to agent ${owningResponseTurnRecord.metadata.agentId}, not ${body.agent_id}`,\n });\n }\n }\n\n if (!previousResponseTurnRecord) {\n throw new HTTPException(404, { message: `Stored response ${body.previous_response_id} was not found` });\n }\n }\n } else {\n if (!mastra) {\n throw new HTTPException(500, { message: 'Mastra instance is required for agent-backed responses' });\n }\n\n previousResponseTurnRecord = await findResponseTurnRecordAcrossAgents({\n mastra,\n responseId: body.previous_response_id,\n requestContext,\n });\n\n if (!previousResponseTurnRecord) {\n throw new HTTPException(404, { message: `Stored response ${body.previous_response_id} was not found` });\n }\n }\n }\n\n const agent =\n resolvedAgent ??\n (await resolveResponseAgent({\n mastra,\n agentId: body.agent_id ?? previousResponseTurnRecord?.metadata.agentId,\n }));\n const resolvedModel = await agent.getModel({\n requestContext,\n modelConfig: body.model,\n });\n const responseModel =\n body.model ??\n (() => {\n if (resolvedModel.provider && resolvedModel.modelId) {\n const publicProviderId = resolvedModel.provider.includes('.')\n ? resolvedModel.provider.split('.')[0]!\n : resolvedModel.provider;\n return `${publicProviderId}/${resolvedModel.modelId}`;\n }\n\n if (resolvedModel.modelId) {\n return resolvedModel.modelId;\n }\n\n throw new HTTPException(500, {\n message: 'Responses route could not determine the effective model for this request',\n });\n })();\n const shouldStore = body.store ?? false;\n const needsMemoryStore = shouldStore || Boolean(body.conversation_id) || Boolean(body.previous_response_id);\n const agentMemoryStore = needsMemoryStore\n ? await resolveAgentMemoryStore({\n agent,\n requestContext,\n errorMessage: body.previous_response_id\n ? 'previous_response_id requires the target agent to have memory storage configured'\n : shouldStore\n ? 'Stored responses require the target agent to have memory storage configured'\n : 'conversation_id requires the target agent to have memory storage configured',\n })\n : null;\n const configuredTools = mapMastraToolsToResponseTools(\n (await Promise.resolve(agent.listTools({ requestContext }))) as Record<string, unknown>,\n );\n\n const responseId = createMessageId();\n const createdAt = Math.floor(Date.now() / 1000);\n const threadContext = await resolveThreadExecutionContext({\n agent,\n store: shouldStore,\n conversationId: body.conversation_id,\n previousResponseTurnRecord,\n requestContext,\n });\n\n if (shouldStore && !threadContext) {\n throw new HTTPException(400, {\n message: 'Stored responses require the target agent to have memory configured',\n });\n }\n\n const didStore = shouldStore && Boolean(threadContext);\n\n return {\n agent,\n agentMemoryStore,\n configuredTools,\n createdAt,\n didStore,\n executionInput,\n previousResponseTurnRecord,\n resolvedModel,\n responseId,\n responseModel,\n responseMetadata: {\n agentId: agent.id,\n model: responseModel,\n createdAt,\n instructions: body.instructions,\n text: body.text,\n previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,\n tools: configuredTools,\n store: didStore,\n },\n threadContext,\n };\n}\n\n/**\n * Bridges a Mastra agent stream into OpenAI-style Responses SSE events and completes\n * the stored response-turn record when the stream finishes.\n */\nfunction createResponseEventStream({\n agentMemoryStore,\n body,\n configuredTools,\n createdAt,\n didStore,\n previousResponseTurnRecord,\n responseId,\n responseModel,\n responseMetadata,\n streamResult,\n threadContext,\n}: {\n agentMemoryStore: MemoryStorage | null;\n body: CreateResponseBody;\n configuredTools: ReturnType<typeof mapMastraToolsToResponseTools>;\n createdAt: number;\n didStore: boolean;\n previousResponseTurnRecord: ResponseTurnRecord | null;\n responseId: string;\n responseModel: string;\n responseMetadata: Omit<\n ResponseTurnRecordMetadata,\n 'completedAt' | 'status' | 'usage' | 'providerOptions' | 'messageIds'\n >;\n streamResult: ResponseStreamResult;\n threadContext: ThreadExecutionContext | null;\n}) {\n const createdResponse = buildInProgressResponse({\n responseId,\n model: responseModel,\n createdAt,\n instructions: body.instructions,\n textConfig: body.text,\n previousResponseId: body.previous_response_id,\n conversationId: threadContext?.threadId ?? body.conversation_id,\n tools: configuredTools,\n store: didStore,\n });\n\n return new ReadableStream<Uint8Array>({\n async start(controller) {\n let sequenceNumber = 1;\n const enqueueEvent = (eventName: string, payload: Record<string, unknown>) => {\n controller.enqueue(\n formatSseEvent(eventName, {\n ...payload,\n sequence_number: sequenceNumber++,\n }),\n );\n };\n\n enqueueEvent('response.created', {\n type: 'response.created',\n response: createdResponse,\n });\n enqueueEvent('response.in_progress', {\n type: 'response.in_progress',\n response: createdResponse,\n });\n\n const streamEvents = createResponseStreamEventTranslator(responseId);\n const fullStream = await streamResult.fullStream;\n const reader = fullStream.getReader();\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n\n for (const event of streamEvents.consume(value)) {\n enqueueEvent(event.event, event.payload);\n }\n }\n\n for (const event of streamEvents.flushPendingToolResults()) {\n enqueueEvent(event.event, event.payload);\n }\n\n const { completedState, response } = await finalizeResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n result: streamResult,\n responseId,\n createdAt,\n model: responseModel,\n instructions: body.instructions,\n previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,\n conversationId: threadContext?.threadId ?? body.conversation_id,\n configuredTools,\n responseMetadata,\n fallbackText: streamEvents.text,\n fallbackOutputItems: completedState =>\n streamEvents.getOutputItems({\n text: completedState.text,\n status: completedState.status,\n }),\n });\n\n const completedItem = getStreamedMessageOutputItem(response, responseId);\n if (completedItem || completedState.text) {\n for (const event of streamEvents.completeText(\n completedState.text,\n completedItem ?? {\n id: responseId,\n type: 'message' as const,\n role: 'assistant' as const,\n status: 'completed' as const,\n content: [createOutputTextPart(completedState.text)],\n },\n )) {\n enqueueEvent(event.event, event.payload);\n }\n }\n enqueueEvent('response.completed', {\n type: 'response.completed',\n response,\n });\n controller.close();\n } catch (error) {\n controller.error(error);\n } finally {\n reader.releaseLock();\n }\n },\n });\n}\n\nexport const CREATE_RESPONSE_ROUTE = createRoute({\n method: 'POST',\n path: '/v1/responses',\n responseType: 'datastream-response',\n bodySchema: createResponseBodySchema,\n responseSchema: responseObjectSchema,\n summary: 'Create a response',\n description: 'Creates a response through a Mastra-hosted Responses API-compatible route',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_EXECUTE,\n handler: async ({ mastra, requestContext, abortSignal, ...body }) => {\n try {\n const {\n agent,\n agentMemoryStore,\n configuredTools,\n createdAt,\n didStore,\n executionInput,\n previousResponseTurnRecord,\n resolvedModel,\n responseId,\n responseModel,\n responseMetadata,\n threadContext,\n } = await prepareCreateResponseRequest({ body, mastra, requestContext });\n\n if (!body.stream) {\n const result = await executeGenerate({\n agent,\n resolvedModel,\n modelOverride: body.model,\n instructions: body.instructions,\n text: body.text,\n providerOptions: body.providerOptions,\n input: executionInput,\n requestContext,\n abortSignal,\n threadContext,\n });\n\n const { response } = await finalizeResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n result,\n responseId,\n createdAt,\n model: responseModel,\n instructions: body.instructions,\n previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,\n conversationId: threadContext?.threadId ?? body.conversation_id,\n configuredTools,\n responseMetadata,\n fallbackText: '',\n });\n\n return jsonResponse(response);\n }\n\n const streamResult = await executeStream({\n agent,\n resolvedModel,\n modelOverride: body.model,\n instructions: body.instructions,\n text: body.text,\n providerOptions: body.providerOptions,\n input: executionInput,\n requestContext,\n abortSignal,\n threadContext,\n });\n\n const stream = createResponseEventStream({\n agentMemoryStore,\n body,\n configuredTools,\n createdAt,\n didStore,\n previousResponseTurnRecord,\n responseId,\n responseModel,\n responseMetadata,\n streamResult,\n threadContext,\n });\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream; charset=utf-8',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n 'X-Accel-Buffering': 'no',\n },\n });\n } catch (error) {\n return handleError(error, 'Error creating response');\n }\n },\n});\n\nexport const GET_RESPONSE_ROUTE = createRoute({\n method: 'GET',\n path: '/v1/responses/:responseId',\n responseType: 'json',\n pathParamSchema: responseIdPathParams,\n responseSchema: responseObjectSchema,\n summary: 'Retrieve a stored response',\n description: 'Returns a previously stored response object',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_READ,\n handler: async ({ mastra, requestContext, responseId }) => {\n try {\n const responseTurnRecord = await findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });\n if (!responseTurnRecord) {\n throw new HTTPException(404, { message: `Stored response ${responseId} was not found` });\n }\n\n return mapResponseTurnRecordToResponse(responseTurnRecord);\n } catch (error) {\n return handleError(error, 'Error retrieving response');\n }\n },\n});\n\nexport const DELETE_RESPONSE_ROUTE = createRoute({\n method: 'DELETE',\n path: '/v1/responses/:responseId',\n responseType: 'json',\n pathParamSchema: responseIdPathParams,\n responseSchema: deleteResponseSchema,\n summary: 'Delete a stored response',\n description: 'Deletes a stored response so it can no longer be retrieved or chained',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_DELETE,\n handler: async ({ mastra, requestContext, responseId }) => {\n try {\n const responseTurnRecord = await findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });\n if (!responseTurnRecord) {\n throw new HTTPException(404, { message: `Stored response ${responseId} was not found` });\n }\n\n await deleteResponseTurnRecord({ responseTurnRecord });\n\n const response: DeleteResponse = {\n id: responseId,\n object: 'response',\n deleted: true,\n };\n\n return response;\n } catch (error) {\n return handleError(error, 'Error deleting response');\n }\n },\n});\n"]}
'use strict';
var chunkP2X2Q6N6_cjs = require('./chunk-P2X2Q6N6.cjs');
var chunkYUDME6CN_cjs = require('./chunk-YUDME6CN.cjs');
var chunkJ5RVSM7H_cjs = require('./chunk-J5RVSM7H.cjs');
var chunkWMS7BOP7_cjs = require('./chunk-WMS7BOP7.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
var workspace = require('@mastra/core/workspace');
var INDEXED_FOLDERS = ["references", "scripts", "assets"];
function extractIndexedPathsFromFiles(files, existing) {
if (!files || files.length === 0) return {};
const root = files.find((n) => n.type === "folder");
if (!root?.children) return {};
const result = {};
for (const folderName of INDEXED_FOLDERS) {
const folder = root.children.find((n) => n.type === "folder" && n.name === folderName);
if (!folder?.children || folder.children.length === 0) continue;
const existingPaths = new Set(existing[folderName] ?? []);
const paths = [...existingPaths];
collectFilePaths(folder.children, folderName, existingPaths, paths);
if (paths.length > 0) {
result[folderName] = paths;
}
}
return result;
}
function collectFilePaths(nodes, prefix, existingPaths, out) {
for (const node of nodes) {
if (node.type === "file") {
const relativePath = `${prefix}/${node.name}`;
if (!existingPaths.has(relativePath)) {
out.push(relativePath);
}
} else if (node.type === "folder" && node.children) {
collectFilePaths(node.children, `${prefix}/${node.name}`, existingPaths, out);
}
}
}
var LIST_STORED_SKILLS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/skills",
responseType: "json",
queryParamSchema: chunkP2X2Q6N6_cjs.listStoredSkillsQuerySchema,
responseSchema: chunkP2X2Q6N6_cjs.listStoredSkillsResponseSchema,
summary: "List stored skills",
description: "Returns a paginated list of all skill configurations stored in the database",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
page,
perPage,
orderBy,
status,
authorId,
visibility,
metadata,
favoritedOnly,
pinFavoritedFor
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Skills storage domain is not available" });
}
const filter = chunkWMS7BOP7_cjs.resolveAuthorFilter({
requestContext,
resource: "stored-skills",
queryAuthorId: authorId,
queryVisibility: visibility
});
const scope = await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext);
const scopedMetadata = chunkEVOVAWN6_cjs.scopeStoredResourceMetadata(metadata, scope);
const callerId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext);
const favoritesEnabled = await chunkJ5RVSM7H_cjs.isBuilderFeatureEnabled(mastra, "favorites");
const honoredStarredOnly = favoritesEnabled && favoritedOnly === true;
const favoriteSubjectId = pinFavoritedFor ?? callerId;
if (honoredStarredOnly) {
const effectivePerPage = perPage ?? 100;
if (!favoriteSubjectId) {
return { skills: [], total: 0, page, perPage: effectivePerPage, hasMore: false };
}
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Favorites storage domain is not available" });
}
const starredIds = await favoritesStore.listFavoritedIds({ userId: favoriteSubjectId, entityType: "skill" });
if (starredIds.length === 0) {
return { skills: [], total: 0, page, perPage: effectivePerPage, hasMore: false };
}
const allMatching = await skillStore.listResolved({
perPage: false,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata,
entityIds: starredIds
});
const visible = allMatching.skills.filter((record) => chunkWMS7BOP7_cjs.matchesAuthorFilter(record, filter));
const total = visible.length;
const startIdx = effectivePerPage === 0 ? 0 : page * effectivePerPage;
const endIdx = effectivePerPage === 0 ? 0 : startIdx + effectivePerPage;
const sliced = effectivePerPage === 0 ? [] : visible.slice(startIdx, endIdx);
const annotated2 = sliced.map((record) => ({ ...record, isFavorited: true }));
const hasMore = effectivePerPage > 0 && endIdx < total;
return {
skills: annotated2,
total,
page,
perPage: effectivePerPage,
hasMore
};
}
const result = await skillStore.listResolved({
page,
perPage,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata
});
const visibleSkills = result.skills.filter((record) => chunkWMS7BOP7_cjs.matchesAuthorFilter(record, filter));
if (!favoritesEnabled) {
return { ...result, skills: visibleSkills.map(chunkYUDME6CN_cjs.stripFavoriteFields) };
}
const enrichment = await chunkYUDME6CN_cjs.prepareFavoritesEnrichment(
mastra,
requestContext,
"skill",
visibleSkills.map((s) => s.id)
);
const annotated = enrichment ? visibleSkills.map((record) => ({ ...record, isFavorited: enrichment.starredIds.has(record.id) })) : visibleSkills.map(chunkYUDME6CN_cjs.stripFavoriteFields);
return { ...result, skills: annotated };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing stored skills");
}
}
});
var GET_STORED_SKILL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: chunkP2X2Q6N6_cjs.storedSkillIdPathParams,
responseSchema: chunkP2X2Q6N6_cjs.getStoredSkillResponseSchema,
summary: "Get stored skill by ID",
description: "Returns a specific skill from storage by its unique identifier (resolved with active version config)",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedSkillId }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Skills storage domain is not available" });
}
const skill = await skillStore.getByIdResolved(storedSkillId);
if (!skill) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(skill, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-skills", resourceId: storedSkillId, record: skill });
return chunkYUDME6CN_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", skill);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting stored skill");
}
}
});
var CREATE_STORED_SKILL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/skills",
responseType: "json",
bodySchema: chunkP2X2Q6N6_cjs.createStoredSkillBodySchema,
responseSchema: chunkP2X2Q6N6_cjs.createStoredSkillResponseSchema,
summary: "Create stored skill",
description: "Creates a new skill configuration in storage with the provided details",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
id: providedId,
name,
description,
instructions,
license,
compatibility,
source,
references,
scripts,
assets,
files,
metadata,
visibility: bodyVisibility
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Skills storage domain is not available" });
}
const id = providedId || chunkEVOVAWN6_cjs.toSlug(name);
if (!id) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "Could not derive skill ID from name. Please provide an explicit id."
});
}
const existing = await skillStore.getById(id);
if (existing) {
throw new chunk64ITUOXI_cjs.HTTPException(409, { message: `Skill with id ${id} already exists` });
}
const authorId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext) ?? void 0;
const visibility = authorId ? bodyVisibility ?? "private" : "public";
const indexedPaths = extractIndexedPathsFromFiles(files, { references, scripts, assets });
await skillStore.create({
skill: {
id,
authorId,
visibility,
name,
description,
instructions,
license,
compatibility,
source,
references: indexedPaths.references ?? references,
scripts: indexedPaths.scripts ?? scripts,
assets: indexedPaths.assets ?? assets,
files,
metadata: chunkEVOVAWN6_cjs.scopeStoredResourceMetadata(metadata, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext))
}
});
const resolved = await skillStore.getByIdResolved(id);
if (!resolved) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to resolve created skill" });
}
return chunkYUDME6CN_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating stored skill");
}
}
});
var UPDATE_STORED_SKILL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "PATCH",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: chunkP2X2Q6N6_cjs.storedSkillIdPathParams,
bodySchema: chunkP2X2Q6N6_cjs.updateStoredSkillBodySchema,
responseSchema: chunkP2X2Q6N6_cjs.updateStoredSkillResponseSchema,
summary: "Update stored skill",
description: "Updates an existing skill in storage with the provided fields",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
storedSkillId,
// Entity-level fields
authorId,
visibility,
// Config fields (snapshot-level)
name,
description,
instructions,
license,
compatibility,
source,
references,
scripts,
assets,
files,
metadata
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Skills storage domain is not available" });
}
const existing = await skillStore.getByIdResolved(storedSkillId);
if (!existing) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
const scope = await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext);
chunkEVOVAWN6_cjs.assertStoredResourceScope(existing, scope);
chunkWMS7BOP7_cjs.assertWriteAccess({
requestContext,
resource: "stored-skills",
resourceId: storedSkillId,
action: "edit",
record: existing
});
const callerAuthorId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext) ?? void 0;
const resolvedVisibility = callerAuthorId ? visibility : visibility != null ? "public" : void 0;
const indexedPaths = files ? extractIndexedPathsFromFiles(files, { references, scripts, assets }) : {};
const update = { id: storedSkillId };
if (authorId !== void 0) update.authorId = authorId;
if (resolvedVisibility !== void 0) update.visibility = resolvedVisibility;
if (name !== void 0) update.name = name;
if (description !== void 0) update.description = description;
if (instructions !== void 0) update.instructions = instructions;
if (license !== void 0) update.license = license;
if (compatibility !== void 0) update.compatibility = compatibility;
if (source !== void 0) update.source = source;
const resolvedReferences = indexedPaths.references ?? references;
const resolvedScripts = indexedPaths.scripts ?? scripts;
const resolvedAssets = indexedPaths.assets ?? assets;
if (resolvedReferences !== void 0) update.references = resolvedReferences;
if (resolvedScripts !== void 0) update.scripts = resolvedScripts;
if (resolvedAssets !== void 0) update.assets = resolvedAssets;
if (files !== void 0) update.files = files;
if (metadata !== void 0) {
update.metadata = chunkEVOVAWN6_cjs.scopeStoredResourceMetadata({ ...existing.metadata ?? {}, ...metadata }, scope);
}
await skillStore.update(update);
const resolved = await skillStore.getByIdResolved(storedSkillId);
if (!resolved) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to resolve updated skill" });
}
return chunkYUDME6CN_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error updating stored skill");
}
}
});
var DELETE_STORED_SKILL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: chunkP2X2Q6N6_cjs.storedSkillIdPathParams,
responseSchema: chunkP2X2Q6N6_cjs.deleteStoredSkillResponseSchema,
summary: "Delete stored skill",
description: "Deletes a skill from storage by its unique identifier",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedSkillId }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Skills storage domain is not available" });
}
const existing = await skillStore.getByIdResolved(storedSkillId);
if (!existing) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(existing, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertWriteAccess({
requestContext,
resource: "stored-skills",
resourceId: storedSkillId,
action: "delete",
record: existing
});
await skillStore.delete(storedSkillId);
try {
const favoritesStore = await storage.getStore("favorites");
await favoritesStore?.deleteFavoritesForEntity({ entityType: "skill", entityId: storedSkillId });
} catch (cascadeError) {
mastra.getLogger?.()?.warn?.("Failed to cascade-delete favorites for skill", { storedSkillId, error: cascadeError });
}
return {
success: true,
message: `Skill ${storedSkillId} deleted successfully`
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error deleting stored skill");
}
}
});
var PUBLISH_STORED_SKILL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/skills/:storedSkillId/publish",
responseType: "json",
pathParamSchema: chunkP2X2Q6N6_cjs.storedSkillIdPathParams,
bodySchema: chunkP2X2Q6N6_cjs.publishStoredSkillBodySchema,
responseSchema: chunkP2X2Q6N6_cjs.publishStoredSkillResponseSchema,
summary: "Publish stored skill",
description: "Snapshots the skill directory from the filesystem into content-addressable blob storage, creates a new version with a tree manifest, and marks the skill as published",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedSkillId, skillPath }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Skills storage domain is not available" });
}
const blobStore = await storage.getStore("blobs");
if (!blobStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Blob storage domain is not available" });
}
const existing = await skillStore.getByIdResolved(storedSkillId);
if (!existing) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(existing, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertWriteAccess({
requestContext,
resource: "stored-skills",
resourceId: storedSkillId,
action: "edit",
record: existing
});
const path = await import('path');
const fs = await import('fs/promises');
const resolvedPath = path.default.resolve(skillPath);
const allowedBase = path.default.resolve(process.env.SKILLS_BASE_DIR || process.cwd());
if (!resolvedPath.startsWith(allowedBase + path.default.sep) && resolvedPath !== allowedBase) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: `skillPath must be within the allowed directory: ${allowedBase}`
});
}
try {
const stat = await fs.stat(resolvedPath);
if (!stat.isDirectory()) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `skillPath is not a directory: ${resolvedPath}` });
}
} catch (err) {
if (err instanceof chunk64ITUOXI_cjs.HTTPException) throw err;
if (err?.code === "ENOENT") {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: `skillPath does not exist on the server filesystem: ${resolvedPath}. Create the skill directory (with a SKILL.md) before publishing, or use a skill that was materialized to disk.`
});
}
throw err;
}
try {
await fs.stat(path.default.join(resolvedPath, "SKILL.md"));
} catch (err) {
if (err?.code === "ENOENT") {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: `skillPath is missing SKILL.md: ${resolvedPath}`
});
}
throw err;
}
const source = new workspace.LocalSkillSource();
const { publishSkillFromSource } = await import('@mastra/core/workspace');
const { snapshot, tree, files } = await publishSkillFromSource(source, resolvedPath, blobStore);
const snapshotUpdate = {};
for (const [key, value] of Object.entries(snapshot)) {
if (value !== void 0) snapshotUpdate[key] = value;
}
await skillStore.update({
id: storedSkillId,
...snapshotUpdate,
tree,
files,
status: "published"
});
const latestVersion = await skillStore.getLatestVersion(storedSkillId);
if (latestVersion) {
await skillStore.update({
id: storedSkillId,
activeVersionId: latestVersion.id
});
}
const resolved = await skillStore.getByIdResolved(storedSkillId);
if (!resolved) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to resolve skill after publish" });
}
return chunkYUDME6CN_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error publishing stored skill");
}
}
});
exports.CREATE_STORED_SKILL_ROUTE = CREATE_STORED_SKILL_ROUTE;
exports.DELETE_STORED_SKILL_ROUTE = DELETE_STORED_SKILL_ROUTE;
exports.GET_STORED_SKILL_ROUTE = GET_STORED_SKILL_ROUTE;
exports.LIST_STORED_SKILLS_ROUTE = LIST_STORED_SKILLS_ROUTE;
exports.PUBLISH_STORED_SKILL_ROUTE = PUBLISH_STORED_SKILL_ROUTE;
exports.UPDATE_STORED_SKILL_ROUTE = UPDATE_STORED_SKILL_ROUTE;
//# sourceMappingURL=chunk-ALPAZYZR.cjs.map
//# sourceMappingURL=chunk-ALPAZYZR.cjs.map
{"version":3,"sources":["../src/server/handlers/stored-skills.ts"],"names":["createRoute","listStoredSkillsQuerySchema","listStoredSkillsResponseSchema","HTTPException","resolveAuthorFilter","getStoredResourceScope","scopeStoredResourceMetadata","getCallerAuthorId","isBuilderFeatureEnabled","matchesAuthorFilter","annotated","stripFavoriteFields","prepareFavoritesEnrichment","handleError","storedSkillIdPathParams","getStoredSkillResponseSchema","assertStoredResourceScope","assertReadAccess","enrichOrStripFavorites","createStoredSkillBodySchema","createStoredSkillResponseSchema","toSlug","updateStoredSkillBodySchema","updateStoredSkillResponseSchema","assertWriteAccess","deleteStoredSkillResponseSchema","publishStoredSkillBodySchema","publishStoredSkillResponseSchema","LocalSkillSource"],"mappings":"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","file":"chunk-ALPAZYZR.cjs","sourcesContent":["import type { StorageSkillFileNode } from '@mastra/core/storage';\nimport { LocalSkillSource } from '@mastra/core/workspace';\n\nimport { HTTPException } from '../http-exception';\nimport {\n storedSkillIdPathParams,\n listStoredSkillsQuerySchema,\n createStoredSkillBodySchema,\n updateStoredSkillBodySchema,\n publishStoredSkillBodySchema,\n listStoredSkillsResponseSchema,\n getStoredSkillResponseSchema,\n createStoredSkillResponseSchema,\n updateStoredSkillResponseSchema,\n deleteStoredSkillResponseSchema,\n publishStoredSkillResponseSchema,\n} from '../schemas/stored-skills';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { toSlug, assertStoredResourceScope, getStoredResourceScope, scopeStoredResourceMetadata } from '../utils';\n\nimport {\n assertReadAccess,\n assertWriteAccess,\n getCallerAuthorId,\n matchesAuthorFilter,\n resolveAuthorFilter,\n} from './authorship';\nimport { isBuilderFeatureEnabled } from './editor-builder';\nimport { handleError } from './error';\nimport { enrichOrStripFavorites, prepareFavoritesEnrichment, stripFavoriteFields } from './favorites-enrichment';\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Well-known folder names in the skill file tree whose children represent\n * indexable path arrays (references, scripts, assets).\n */\nconst INDEXED_FOLDERS = ['references', 'scripts', 'assets'] as const;\n\n/**\n * Walks the `files` tree and collects relative file paths for each well-known\n * folder (references, scripts, assets). Returned arrays only include entries\n * that are not already present in any explicitly-provided arrays so callers\n * can pass both `files` and `references` without creating duplicates.\n */\nfunction extractIndexedPathsFromFiles(\n files: StorageSkillFileNode[] | undefined,\n existing: {\n references?: string[];\n scripts?: string[];\n assets?: string[];\n },\n): {\n references?: string[];\n scripts?: string[];\n assets?: string[];\n} {\n if (!files || files.length === 0) return {};\n\n // Find the root folder (first folder node, usually id=\"root\")\n const root = files.find(n => n.type === 'folder');\n if (!root?.children) return {};\n\n const result: Record<string, string[]> = {};\n\n for (const folderName of INDEXED_FOLDERS) {\n const folder = root.children.find(n => n.type === 'folder' && n.name === folderName);\n if (!folder?.children || folder.children.length === 0) continue;\n\n const existingPaths = new Set(existing[folderName] ?? []);\n const paths: string[] = [...existingPaths];\n\n collectFilePaths(folder.children, folderName, existingPaths, paths);\n\n if (paths.length > 0) {\n result[folderName] = paths;\n }\n }\n\n return result;\n}\n\n/** Recursively collects file paths from a subtree, building relative paths. */\nfunction collectFilePaths(\n nodes: StorageSkillFileNode[],\n prefix: string,\n existingPaths: Set<string>,\n out: string[],\n): void {\n for (const node of nodes) {\n if (node.type === 'file') {\n const relativePath = `${prefix}/${node.name}`;\n if (!existingPaths.has(relativePath)) {\n out.push(relativePath);\n }\n } else if (node.type === 'folder' && node.children) {\n collectFilePaths(node.children, `${prefix}/${node.name}`, existingPaths, out);\n }\n }\n}\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/skills - List all stored skills\n */\nexport const LIST_STORED_SKILLS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/skills',\n responseType: 'json',\n queryParamSchema: listStoredSkillsQuerySchema,\n responseSchema: listStoredSkillsResponseSchema,\n summary: 'List stored skills',\n description: 'Returns a paginated list of all skill configurations stored in the database',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n page,\n perPage,\n orderBy,\n status,\n authorId,\n visibility,\n metadata,\n favoritedOnly,\n pinFavoritedFor,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n const filter = resolveAuthorFilter({\n requestContext,\n resource: 'stored-skills',\n queryAuthorId: authorId,\n queryVisibility: visibility,\n });\n\n const scope = await getStoredResourceScope(mastra, requestContext);\n const scopedMetadata = scopeStoredResourceMetadata(metadata, scope);\n\n const callerId = getCallerAuthorId(requestContext);\n const favoritesEnabled = await isBuilderFeatureEnabled(mastra, 'favorites');\n const honoredStarredOnly = favoritesEnabled && favoritedOnly === true;\n const favoriteSubjectId = pinFavoritedFor ?? callerId;\n\n // `?favoritedOnly=true` flow: fetch caller's favorited IDs, restrict the list\n // to that set, then post-filter by visibility and recompute total/pages.\n if (honoredStarredOnly) {\n const effectivePerPage: number = perPage ?? 100;\n if (!favoriteSubjectId) {\n // Caller cannot have favorited anything without an identity.\n return { skills: [], total: 0, page, perPage: effectivePerPage, hasMore: false };\n }\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) {\n throw new HTTPException(500, { message: 'Favorites storage domain is not available' });\n }\n const starredIds = await favoritesStore.listFavoritedIds({ userId: favoriteSubjectId, entityType: 'skill' });\n if (starredIds.length === 0) {\n return { skills: [], total: 0, page, perPage: effectivePerPage, hasMore: false };\n }\n const allMatching = await skillStore.listResolved({\n perPage: false,\n orderBy,\n status,\n authorId: filter.kind === 'exact' ? filter.authorId : undefined,\n metadata: scopedMetadata,\n entityIds: starredIds,\n });\n const visible = allMatching.skills.filter(record => matchesAuthorFilter(record, filter));\n const total = visible.length;\n const startIdx = effectivePerPage === 0 ? 0 : page * effectivePerPage;\n const endIdx = effectivePerPage === 0 ? 0 : startIdx + effectivePerPage;\n const sliced = effectivePerPage === 0 ? [] : visible.slice(startIdx, endIdx);\n const annotated = sliced.map(record => ({ ...record, isFavorited: true }));\n const hasMore = effectivePerPage > 0 && endIdx < total;\n return {\n skills: annotated,\n total,\n page,\n perPage: effectivePerPage,\n hasMore,\n };\n }\n\n const result = await skillStore.listResolved({\n page,\n perPage,\n orderBy,\n status,\n authorId: filter.kind === 'exact' ? filter.authorId : undefined,\n metadata: scopedMetadata,\n });\n\n // Post-filter to enforce ownership + visibility rules across all backends.\n // Storage adapters can only do an equality filter on authorId, so we apply\n // the ownedOrPublic / publicOnly logic here.\n // Note: `result.total` / `result.hasMore` reflect the storage-reported\n // count before this post-filter. For `unrestricted` / `exact` filters\n // nothing is removed; for `ownedOrPublic` / `publicOnly`, downstream UIs\n // should treat the filter as a view over the caller's scope — an\n // approximation is OK and preserves pagination math.\n const visibleSkills = result.skills.filter(record => matchesAuthorFilter(record, filter));\n\n if (!favoritesEnabled) {\n return { ...result, skills: visibleSkills.map(stripFavoriteFields) };\n }\n\n const enrichment = await prepareFavoritesEnrichment(\n mastra,\n requestContext,\n 'skill',\n visibleSkills.map(s => s.id),\n );\n const annotated = enrichment\n ? visibleSkills.map(record => ({ ...record, isFavorited: enrichment.starredIds.has(record.id) }))\n : visibleSkills.map(stripFavoriteFields);\n\n return { ...result, skills: annotated };\n } catch (error) {\n return handleError(error, 'Error listing stored skills');\n }\n },\n});\n\n/**\n * GET /stored/skills/:storedSkillId - Get a stored skill by ID\n */\nexport const GET_STORED_SKILL_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/skills/:storedSkillId',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: getStoredSkillResponseSchema,\n summary: 'Get stored skill by ID',\n description: 'Returns a specific skill from storage by its unique identifier (resolved with active version config)',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n const skill = await skillStore.getByIdResolved(storedSkillId);\n\n if (!skill) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));\n\n assertReadAccess({ requestContext, resource: 'stored-skills', resourceId: storedSkillId, record: skill });\n\n return enrichOrStripFavorites(mastra, requestContext, 'skill', skill);\n } catch (error) {\n return handleError(error, 'Error getting stored skill');\n }\n },\n});\n\n/**\n * POST /stored/skills - Create a new stored skill\n */\nexport const CREATE_STORED_SKILL_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/skills',\n responseType: 'json',\n bodySchema: createStoredSkillBodySchema,\n responseSchema: createStoredSkillResponseSchema,\n summary: 'Create stored skill',\n description: 'Creates a new skill configuration in storage with the provided details',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n id: providedId,\n name,\n description,\n instructions,\n license,\n compatibility,\n source,\n references,\n scripts,\n assets,\n files,\n metadata,\n visibility: bodyVisibility,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n // Derive ID from name if not explicitly provided\n const id = providedId || toSlug(name);\n\n if (!id) {\n throw new HTTPException(400, {\n message: 'Could not derive skill ID from name. Please provide an explicit id.',\n });\n }\n\n // Check if skill with this ID already exists\n const existing = await skillStore.getById(id);\n if (existing) {\n throw new HTTPException(409, { message: `Skill with id ${id} already exists` });\n }\n\n // Force authorId from the authenticated caller; ignore any body-provided value.\n // No owner = always public (no auth / no user context).\n // With an owner, respect the client's choice, defaulting to 'private'.\n const authorId = getCallerAuthorId(requestContext) ?? undefined;\n const visibility: 'private' | 'public' = authorId ? (bodyVisibility ?? 'private') : 'public';\n\n // Derive references/scripts/assets path arrays from the files tree\n // so agents can discover them via skill_read even when only `files` is provided.\n const indexedPaths = extractIndexedPathsFromFiles(files, { references, scripts, assets });\n\n await skillStore.create({\n skill: {\n id,\n authorId,\n visibility,\n name,\n description,\n instructions,\n license,\n compatibility,\n source,\n references: indexedPaths.references ?? references,\n scripts: indexedPaths.scripts ?? scripts,\n assets: indexedPaths.assets ?? assets,\n files,\n metadata: scopeStoredResourceMetadata(metadata, await getStoredResourceScope(mastra, requestContext)),\n },\n });\n\n // Return the resolved skill (thin record + version config)\n const resolved = await skillStore.getByIdResolved(id);\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve created skill' });\n }\n\n return enrichOrStripFavorites(mastra, requestContext, 'skill', resolved);\n } catch (error) {\n return handleError(error, 'Error creating stored skill');\n }\n },\n});\n\n/**\n * PATCH /stored/skills/:storedSkillId - Update a stored skill\n */\nexport const UPDATE_STORED_SKILL_ROUTE = createRoute({\n method: 'PATCH',\n path: '/stored/skills/:storedSkillId',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n bodySchema: updateStoredSkillBodySchema,\n responseSchema: updateStoredSkillResponseSchema,\n summary: 'Update stored skill',\n description: 'Updates an existing skill in storage with the provided fields',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n storedSkillId,\n // Entity-level fields\n authorId,\n visibility,\n // Config fields (snapshot-level)\n name,\n description,\n instructions,\n license,\n compatibility,\n source,\n references,\n scripts,\n assets,\n files,\n metadata,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n // Check if skill exists. Skill metadata lives on the resolved snapshot.\n const existing = await skillStore.getByIdResolved(storedSkillId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n const scope = await getStoredResourceScope(mastra, requestContext);\n assertStoredResourceScope(existing, scope);\n\n // Throws 404 if the caller isn't the owner, admin, or `stored-skills:write[:<id>]` holder.\n assertWriteAccess({\n requestContext,\n resource: 'stored-skills',\n resourceId: storedSkillId,\n action: 'edit',\n record: existing,\n });\n\n // No owner = always public, regardless of what the client sent.\n const callerAuthorId = getCallerAuthorId(requestContext) ?? undefined;\n const resolvedVisibility = callerAuthorId ? visibility : visibility != null ? 'public' : undefined;\n\n // Derive references/scripts/assets path arrays from the files tree\n const indexedPaths = files ? extractIndexedPathsFromFiles(files, { references, scripts, assets }) : {};\n\n // Update the skill with both entity-level and config-level fields.\n // The storage layer handles separating these into record updates vs\n // new-version creation, but it uses `field in updates` to detect config\n // changes — so we must only include fields the caller actually sent.\n // Forwarding `undefined` keys would trigger a spurious version create\n // and pass `undefined` into the database driver.\n const update: Record<string, unknown> = { id: storedSkillId };\n if (authorId !== undefined) update.authorId = authorId;\n if (resolvedVisibility !== undefined) update.visibility = resolvedVisibility;\n if (name !== undefined) update.name = name;\n if (description !== undefined) update.description = description;\n if (instructions !== undefined) update.instructions = instructions;\n if (license !== undefined) update.license = license;\n if (compatibility !== undefined) update.compatibility = compatibility;\n if (source !== undefined) update.source = source;\n const resolvedReferences = indexedPaths.references ?? references;\n const resolvedScripts = indexedPaths.scripts ?? scripts;\n const resolvedAssets = indexedPaths.assets ?? assets;\n if (resolvedReferences !== undefined) update.references = resolvedReferences;\n if (resolvedScripts !== undefined) update.scripts = resolvedScripts;\n if (resolvedAssets !== undefined) update.assets = resolvedAssets;\n if (files !== undefined) update.files = files;\n if (metadata !== undefined) {\n update.metadata = scopeStoredResourceMetadata({ ...(existing.metadata ?? {}), ...metadata }, scope);\n }\n\n await skillStore.update(update as Parameters<typeof skillStore.update>[0]);\n\n // Return the resolved skill with the updated config\n const resolved = await skillStore.getByIdResolved(storedSkillId);\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve updated skill' });\n }\n\n return enrichOrStripFavorites(mastra, requestContext, 'skill', resolved);\n } catch (error) {\n return handleError(error, 'Error updating stored skill');\n }\n },\n});\n\n/**\n * DELETE /stored/skills/:storedSkillId - Delete a stored skill\n */\nexport const DELETE_STORED_SKILL_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/skills/:storedSkillId',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: deleteStoredSkillResponseSchema,\n summary: 'Delete stored skill',\n description: 'Deletes a skill from storage by its unique identifier',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n // Check if skill exists. Skill metadata lives on the resolved snapshot.\n const existing = await skillStore.getByIdResolved(storedSkillId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller isn't the owner, admin, or `skills:delete[:<id>]` holder.\n assertWriteAccess({\n requestContext,\n resource: 'stored-skills',\n resourceId: storedSkillId,\n action: 'delete',\n record: existing,\n });\n\n await skillStore.delete(storedSkillId);\n\n // Cascade: drop any favorite rows referencing this skill. Failure must not\n // abort the delete.\n try {\n const favoritesStore = await storage.getStore('favorites');\n await favoritesStore?.deleteFavoritesForEntity({ entityType: 'skill', entityId: storedSkillId });\n } catch (cascadeError) {\n mastra\n .getLogger?.()\n ?.warn?.('Failed to cascade-delete favorites for skill', { storedSkillId, error: cascadeError });\n }\n\n return {\n success: true,\n message: `Skill ${storedSkillId} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting stored skill');\n }\n },\n});\n\n/**\n * POST /stored/skills/:storedSkillId/publish - Publish a skill from filesystem\n * Walks the skill directory, hashes files into blob store, creates a new version\n * with the tree manifest, and sets activeVersionId.\n */\nexport const PUBLISH_STORED_SKILL_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/skills/:storedSkillId/publish',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n bodySchema: publishStoredSkillBodySchema,\n responseSchema: publishStoredSkillResponseSchema,\n summary: 'Publish stored skill',\n description:\n 'Snapshots the skill directory from the filesystem into content-addressable blob storage, creates a new version with a tree manifest, and marks the skill as published',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedSkillId, skillPath }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n const blobStore = await storage.getStore('blobs');\n if (!blobStore) {\n throw new HTTPException(500, { message: 'Blob storage domain is not available' });\n }\n\n // Verify skill exists. Skill metadata lives on the resolved snapshot.\n const existing = await skillStore.getByIdResolved(storedSkillId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller isn't the owner, admin, or `stored-skills:write[:<id>]` holder.\n assertWriteAccess({\n requestContext,\n resource: 'stored-skills',\n resourceId: storedSkillId,\n action: 'edit',\n record: existing,\n });\n\n // Validate skillPath to prevent path traversal\n const path = await import('node:path');\n const fs = await import('node:fs/promises');\n const resolvedPath = path.default.resolve(skillPath);\n const allowedBase = path.default.resolve(process.env.SKILLS_BASE_DIR || process.cwd());\n if (!resolvedPath.startsWith(allowedBase + path.default.sep) && resolvedPath !== allowedBase) {\n throw new HTTPException(400, {\n message: `skillPath must be within the allowed directory: ${allowedBase}`,\n });\n }\n\n // Verify the source directory exists and contains a SKILL.md before attempting\n // to publish, so callers get a 400 with context instead of a raw 500/ENOENT.\n try {\n const stat = await fs.stat(resolvedPath);\n if (!stat.isDirectory()) {\n throw new HTTPException(400, { message: `skillPath is not a directory: ${resolvedPath}` });\n }\n } catch (err) {\n if (err instanceof HTTPException) throw err;\n if ((err as NodeJS.ErrnoException)?.code === 'ENOENT') {\n throw new HTTPException(400, {\n message: `skillPath does not exist on the server filesystem: ${resolvedPath}. Create the skill directory (with a SKILL.md) before publishing, or use a skill that was materialized to disk.`,\n });\n }\n throw err;\n }\n try {\n await fs.stat(path.default.join(resolvedPath, 'SKILL.md'));\n } catch (err) {\n if ((err as NodeJS.ErrnoException)?.code === 'ENOENT') {\n throw new HTTPException(400, {\n message: `skillPath is missing SKILL.md: ${resolvedPath}`,\n });\n }\n throw err;\n }\n\n // Use LocalSkillSource to read from the server filesystem\n const source = new LocalSkillSource();\n const { publishSkillFromSource } = await import('@mastra/core/workspace');\n\n const { snapshot, tree, files } = await publishSkillFromSource(source, resolvedPath, blobStore);\n\n // Strip undefined keys from the snapshot before passing to update(). The\n // storage layer treats \"field present\" as \"field changed\"; forwarding\n // undefined would overwrite populated columns with undefined and trip\n // NOT NULL / \"undefined cannot be passed as argument\" errors in\n // adapters that bind args raw (libsql, pg).\n const snapshotUpdate: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(snapshot)) {\n if (value !== undefined) snapshotUpdate[key] = value;\n }\n\n // Update the skill with new version data + tree + UI-facing file tree.\n // `files` is the nested folder/file structure shown in the editor; without\n // it the column would stay null and the UI would render an empty tree.\n await skillStore.update({\n id: storedSkillId,\n ...snapshotUpdate,\n tree,\n files,\n status: 'published',\n });\n\n // Point activeVersionId to the newly created version\n const latestVersion = await skillStore.getLatestVersion(storedSkillId);\n if (latestVersion) {\n await skillStore.update({\n id: storedSkillId,\n activeVersionId: latestVersion.id,\n });\n }\n\n const resolved = await skillStore.getByIdResolved(storedSkillId);\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve skill after publish' });\n }\n\n return enrichOrStripFavorites(mastra, requestContext, 'skill', resolved);\n } catch (error) {\n return handleError(error, 'Error publishing stored skill');\n }\n },\n});\n"]}
import { favoriteToggleResponseSchema } from './chunk-SFPN7SHZ.js';
import { requireBuilderFeature } from './chunk-IKIPMMHL.js';
import { getCallerAuthorId, assertReadAccess } from './chunk-ETR4XOVD.js';
import { storedAgentIdPathParams } from './chunk-5HBR27TT.js';
import { assertStoredResourceScope, getStoredResourceScope } from './chunk-4GWTCVFL.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
// src/server/handlers/stored-agent-favorites.ts
async function getFavoritesContext(mastra) {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentStore = await storage.getStore("agents");
if (!agentStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) {
throw new HTTPException(500, { message: "Favorites storage domain is not available" });
}
return { agentStore, favoritesStore };
}
var FAVORITE_STORED_AGENT_ROUTE = createRoute({
method: "PUT",
path: "/stored/agents/:storedAgentId/favorite",
responseType: "json",
pathParamSchema: storedAgentIdPathParams,
responseSchema: favoriteToggleResponseSchema,
summary: "Favorite a stored agent",
description: "Marks the stored agent as favorited by the calling user. Idempotent.",
tags: ["Stored Agents"],
requiresAuth: true,
requiresPermission: "stored-agents:read",
handler: async ({ mastra, requestContext, storedAgentId }) => {
try {
await requireBuilderFeature(mastra, "favorites");
const callerId = getCallerAuthorId(requestContext);
if (!callerId) {
throw new HTTPException(401, { message: "Authentication required" });
}
const { agentStore, favoritesStore } = await getFavoritesContext(mastra);
const agent = await agentStore.getById(storedAgentId);
if (!agent) {
throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
const result = await favoritesStore.favorite({
userId: callerId,
entityType: "agent",
entityId: storedAgentId
});
return result;
} catch (error) {
return handleError(error, "Error favoriting stored agent");
}
}
});
var UNFAVORITE_STORED_AGENT_ROUTE = createRoute({
method: "DELETE",
path: "/stored/agents/:storedAgentId/favorite",
responseType: "json",
pathParamSchema: storedAgentIdPathParams,
responseSchema: favoriteToggleResponseSchema,
summary: "Unfavorite a stored agent",
description: "Removes the caller\u2019s favorite from the stored agent. Idempotent.",
tags: ["Stored Agents"],
requiresAuth: true,
requiresPermission: "stored-agents:read",
handler: async ({ mastra, requestContext, storedAgentId }) => {
try {
await requireBuilderFeature(mastra, "favorites");
const callerId = getCallerAuthorId(requestContext);
if (!callerId) {
throw new HTTPException(401, { message: "Authentication required" });
}
const { agentStore, favoritesStore } = await getFavoritesContext(mastra);
const agent = await agentStore.getById(storedAgentId);
if (!agent) {
throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
const result = await favoritesStore.unfavorite({
userId: callerId,
entityType: "agent",
entityId: storedAgentId
});
return result;
} catch (error) {
return handleError(error, "Error unfavoriting stored agent");
}
}
});
export { FAVORITE_STORED_AGENT_ROUTE, UNFAVORITE_STORED_AGENT_ROUTE };
//# sourceMappingURL=chunk-C46XF6AU.js.map
//# sourceMappingURL=chunk-C46XF6AU.js.map
{"version":3,"sources":["../src/server/handlers/stored-agent-favorites.ts"],"names":[],"mappings":"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","file":"chunk-C46XF6AU.js","sourcesContent":["import { HTTPException } from '../http-exception';\nimport { favoriteToggleResponseSchema } from '../schemas/favorites';\nimport { storedAgentIdPathParams } from '../schemas/stored-agents';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { assertReadAccess, getCallerAuthorId } from './authorship';\nimport { requireBuilderFeature } from './editor-builder';\nimport { handleError } from './error';\n\n/**\n * Resolves the storage and favorites domains, throwing 500 if unavailable.\n */\nasync function getFavoritesContext(mastra: Parameters<typeof requireBuilderFeature>[0]) {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n const agentStore = await storage.getStore('agents');\n if (!agentStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) {\n throw new HTTPException(500, { message: 'Favorites storage domain is not available' });\n }\n return { agentStore, favoritesStore };\n}\n\n/**\n * PUT /stored/agents/:storedAgentId/favorite\n */\nexport const FAVORITE_STORED_AGENT_ROUTE = createRoute({\n method: 'PUT',\n path: '/stored/agents/:storedAgentId/favorite',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Favorite a stored agent',\n description: 'Marks the stored agent as favorited by the calling user. Idempotent.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra, requestContext, storedAgentId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { agentStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const agent = await agentStore.getById(storedAgentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller cannot read the agent (private + not owner/admin).\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: agent });\n\n const result = await favoritesStore.favorite({\n userId: callerId,\n entityType: 'agent',\n entityId: storedAgentId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error favoriting stored agent');\n }\n },\n});\n\n/**\n * DELETE /stored/agents/:storedAgentId/favorite\n */\nexport const UNFAVORITE_STORED_AGENT_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/agents/:storedAgentId/favorite',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Unfavorite a stored agent',\n description: 'Removes the caller’s favorite from the stored agent. Idempotent.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra, requestContext, storedAgentId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { agentStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const agent = await agentStore.getById(storedAgentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: agent });\n\n const result = await favoritesStore.unfavorite({\n userId: callerId,\n entityType: 'agent',\n entityId: storedAgentId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error unfavoriting stored agent');\n }\n },\n});\n"]}
'use strict';
var chunk33C4F4LV_cjs = require('./chunk-33C4F4LV.cjs');
var chunkW243A6ZK_cjs = require('./chunk-W243A6ZK.cjs');
var chunk3JVOIOO6_cjs = require('./chunk-3JVOIOO6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
// src/server/handlers/scores.ts
var scores_exports = {};
chunkO7I5CWRX_cjs.__export(scores_exports, {
GET_SCORER_ROUTE: () => GET_SCORER_ROUTE,
LIST_SCORERS_ROUTE: () => LIST_SCORERS_ROUTE,
LIST_SCORES_BY_ENTITY_ID_ROUTE: () => LIST_SCORES_BY_ENTITY_ID_ROUTE,
LIST_SCORES_BY_RUN_ID_ROUTE: () => LIST_SCORES_BY_RUN_ID_ROUTE,
LIST_SCORES_BY_SCORER_ID_ROUTE: () => LIST_SCORES_BY_SCORER_ID_ROUTE,
SAVE_SCORE_ROUTE: () => SAVE_SCORE_ROUTE
});
async function listScorersFromSystem({
mastra,
requestContext
}) {
const agents = mastra.listAgents();
const workflows = mastra.listWorkflows();
const scorersMap = /* @__PURE__ */ new Map();
const processAgentScorers = async (agent) => {
const scorers = await agent.listScorers({
requestContext
}) || {};
if (Object.keys(scorers).length > 0) {
for (const [_scorerId, scorer] of Object.entries(scorers)) {
const scorerId = scorer.scorer.id;
if (scorersMap.has(scorerId)) {
scorersMap.get(scorerId)?.agentIds.push(agent.id);
scorersMap.get(scorerId)?.agentNames.push(agent.name);
} else {
scorersMap.set(scorerId, {
workflowIds: [],
...scorer,
agentNames: [agent.name],
agentIds: [agent.id],
isRegistered: false,
source: scorer.scorer.source ?? "code"
});
}
}
}
};
for (const [_, agent] of Object.entries(agents)) {
await processAgentScorers(agent);
}
try {
const editor = mastra.getEditor();
const storedAgentsResult = await editor?.agent.list();
if (storedAgentsResult?.agents) {
for (const storedAgentConfig of storedAgentsResult.agents) {
try {
const agent = await editor?.agent.getById(storedAgentConfig.id);
if (agent) {
await processAgentScorers(agent);
}
} catch {
}
}
}
} catch {
}
try {
const editor = mastra.getEditor();
const storedScorersResult = await editor?.scorer.list();
if (storedScorersResult?.scorerDefinitions) {
for (const storedScorerConfig of storedScorersResult.scorerDefinitions) {
try {
await editor?.scorer.getById(storedScorerConfig.id);
} catch {
}
}
}
} catch {
}
for (const [workflowId, workflow] of Object.entries(workflows)) {
const scorers = await workflow.listScorers({
requestContext
}) || {};
if (Object.keys(scorers).length > 0) {
for (const [_scorerId, scorer] of Object.entries(scorers)) {
const scorerName = scorer.scorer.name;
if (scorersMap.has(scorerName)) {
scorersMap.get(scorerName)?.workflowIds.push(workflowId);
} else {
scorersMap.set(scorerName, {
agentIds: [],
agentNames: [],
...scorer,
workflowIds: [workflowId],
isRegistered: false,
source: scorer.scorer.source ?? "code"
});
}
}
}
}
const registeredScorers = await mastra.listScorers();
for (const [_scorerId, scorer] of Object.entries(registeredScorers || {})) {
const scorerId = scorer.id;
if (scorersMap.has(scorerId)) {
scorersMap.get(scorerId).isRegistered = true;
} else {
scorersMap.set(scorerId, {
scorer,
agentIds: [],
agentNames: [],
workflowIds: [],
isRegistered: true,
source: scorer.source ?? "code"
});
}
}
return Object.fromEntries(scorersMap.entries());
}
function getTraceDetails(traceIdWithSpanId) {
if (!traceIdWithSpanId) {
return {};
}
const [traceId, spanId] = traceIdWithSpanId.split("-");
return {
...traceId ? { traceId } : {},
...spanId ? { spanId } : {}
};
}
var LIST_SCORERS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/scores/scorers",
responseType: "json",
responseSchema: chunk33C4F4LV_cjs.listScorersResponseSchema,
summary: "List all scorers",
description: "Returns a list of all registered scorers with their configuration and associated agents and workflows",
tags: ["Scoring"],
requiresAuth: true,
handler: (async ({ mastra, requestContext }) => {
const scorers = await listScorersFromSystem({
mastra,
requestContext
});
return scorers;
})
});
var GET_SCORER_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/scores/scorers/:scorerId",
responseType: "json",
pathParamSchema: chunk33C4F4LV_cjs.scorerIdPathParams,
responseSchema: chunk33C4F4LV_cjs.scorerEntrySchema.nullable(),
summary: "Get scorer by ID",
description: "Returns details for a specific scorer including its configuration and associations",
tags: ["Scoring"],
requiresAuth: true,
handler: (async ({ mastra, scorerId, requestContext }) => {
const scorers = await listScorersFromSystem({
mastra,
requestContext
});
const scorer = scorers[scorerId];
if (!scorer) {
return null;
}
return scorer;
})
});
var LIST_SCORES_BY_RUN_ID_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/scores/run/:runId",
responseType: "json",
pathParamSchema: chunk3JVOIOO6_cjs.runIdSchema,
queryParamSchema: chunk33C4F4LV_cjs.listScoresByRunIdQuerySchema,
responseSchema: chunk33C4F4LV_cjs.scoresWithPaginationResponseSchema,
summary: "List scores by run ID",
description: "Returns all scores for a specific execution run",
tags: ["Scoring"],
requiresAuth: true,
handler: async ({ mastra, runId, ...params }) => {
try {
const { page, perPage } = params;
const pagination = {
page: page ?? 0,
perPage: perPage ?? 10
};
const scores = await mastra.getStorage()?.getStore("scores");
const scoreResults = await scores?.listScoresByRunId?.({
runId,
pagination
}) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };
return {
pagination: scoreResults.pagination,
scores: scoreResults.scores.map((score) => ({ ...score, ...getTraceDetails(score.traceId) }))
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting scores by run id");
}
}
});
var LIST_SCORES_BY_SCORER_ID_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/scores/scorer/:scorerId",
responseType: "json",
pathParamSchema: chunk33C4F4LV_cjs.scorerIdPathParams,
queryParamSchema: chunk33C4F4LV_cjs.listScoresByScorerIdQuerySchema,
responseSchema: chunk33C4F4LV_cjs.scoresWithPaginationResponseSchema,
summary: "List scores by scorer ID",
description: "Returns all scores generated by a specific scorer",
tags: ["Scoring"],
requiresAuth: true,
handler: async ({ mastra, scorerId, ...params }) => {
try {
const { page, perPage, entityId, entityType } = params;
const filters = Object.fromEntries(Object.entries({ entityId, entityType }).filter(([_, v]) => v !== void 0));
const scores = await mastra.getStorage()?.getStore("scores");
const scoreResults = await scores?.listScoresByScorerId?.({
scorerId,
pagination: { page: page ?? 0, perPage: perPage ?? 10 },
...filters
}) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };
return {
pagination: scoreResults.pagination,
scores: scoreResults.scores.map((score) => ({ ...score, ...getTraceDetails(score.traceId) }))
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting scores by scorer id");
}
}
});
var LIST_SCORES_BY_ENTITY_ID_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/scores/entity/:entityType/:entityId",
responseType: "json",
pathParamSchema: chunk33C4F4LV_cjs.entityPathParams,
queryParamSchema: chunk33C4F4LV_cjs.listScoresByEntityIdQuerySchema,
responseSchema: chunk33C4F4LV_cjs.scoresWithPaginationResponseSchema,
summary: "List scores by entity ID",
description: "Returns all scores for a specific entity (agent or workflow)",
tags: ["Scoring"],
requiresAuth: true,
handler: async ({ mastra, entityId, entityType, ...params }) => {
try {
const { page, perPage } = params;
let entityIdToUse = entityId;
if (entityType === "AGENT") {
const agent = await chunkW243A6ZK_cjs.getAgentFromSystem({ mastra, agentId: entityId });
entityIdToUse = agent.id;
} else if (entityType === "WORKFLOW") {
const workflow = mastra.getWorkflowById(entityId);
entityIdToUse = workflow.id;
}
const pagination = {
page: page ?? 0,
perPage: perPage ?? 10
};
const scoresStore = await mastra.getStorage()?.getStore("scores");
const scoreResults = await scoresStore?.listScoresByEntityId?.({
entityId: entityIdToUse,
entityType,
pagination
}) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };
return {
pagination: scoreResults.pagination,
scores: scoreResults.scores.map((score) => ({ ...score, ...getTraceDetails(score.traceId) }))
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting scores by entity id");
}
}
});
var SAVE_SCORE_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/scores",
responseType: "json",
bodySchema: chunk33C4F4LV_cjs.saveScoreBodySchema,
responseSchema: chunk33C4F4LV_cjs.saveScoreResponseSchema,
summary: "Save score",
description: "Saves a new score record to storage",
tags: ["Scoring"],
requiresAuth: true,
handler: async ({ mastra, ...params }) => {
try {
const { score } = params;
const scoresStore = await mastra.getStorage()?.getStore("scores");
const result = await scoresStore?.saveScore?.(score);
if (!result) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage not configured" });
}
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error saving score");
}
}
});
exports.GET_SCORER_ROUTE = GET_SCORER_ROUTE;
exports.LIST_SCORERS_ROUTE = LIST_SCORERS_ROUTE;
exports.LIST_SCORES_BY_ENTITY_ID_ROUTE = LIST_SCORES_BY_ENTITY_ID_ROUTE;
exports.LIST_SCORES_BY_RUN_ID_ROUTE = LIST_SCORES_BY_RUN_ID_ROUTE;
exports.LIST_SCORES_BY_SCORER_ID_ROUTE = LIST_SCORES_BY_SCORER_ID_ROUTE;
exports.SAVE_SCORE_ROUTE = SAVE_SCORE_ROUTE;
exports.scores_exports = scores_exports;
//# sourceMappingURL=chunk-D3NGCHN4.cjs.map
//# sourceMappingURL=chunk-D3NGCHN4.cjs.map
{"version":3,"sources":["../src/server/handlers/scores.ts"],"names":["__export","createRoute","listScorersResponseSchema","scorerIdPathParams","scorerEntrySchema","runIdSchema","listScoresByRunIdQuerySchema","scoresWithPaginationResponseSchema","handleError","listScoresByScorerIdQuerySchema","entityPathParams","listScoresByEntityIdQuerySchema","getAgentFromSystem","saveScoreBodySchema","saveScoreResponseSchema","HTTPException"],"mappings":"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","file":"chunk-D3NGCHN4.cjs","sourcesContent":["import type { MastraScorerEntry, ScoreRowData } from '@mastra/core/evals';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { StoragePagination } from '@mastra/core/storage';\nimport { HTTPException } from '../http-exception';\nimport { runIdSchema } from '../schemas/common';\nimport {\n listScorersResponseSchema,\n scorerEntrySchema,\n scorerIdPathParams,\n entityPathParams,\n listScoresByRunIdQuerySchema,\n listScoresByScorerIdQuerySchema,\n listScoresByEntityIdQuerySchema,\n saveScoreBodySchema,\n scoresWithPaginationResponseSchema,\n saveScoreResponseSchema,\n} from '../schemas/scores';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport type { Context } from '../types';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\n\nasync function listScorersFromSystem({\n mastra,\n requestContext,\n}: Context & {\n requestContext: RequestContext;\n}) {\n const agents = mastra.listAgents();\n const workflows = mastra.listWorkflows();\n\n const scorersMap = new Map<\n string,\n MastraScorerEntry & {\n agentIds: string[];\n agentNames: string[];\n workflowIds: string[];\n isRegistered: boolean;\n source: 'code' | 'stored' | 'fs';\n }\n >();\n\n // Helper function to process an agent's scorers\n const processAgentScorers = async (agent: {\n id: string;\n name: string;\n listScorers: (typeof agents)[string]['listScorers'];\n }) => {\n const scorers =\n (await agent.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerId = scorer.scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)?.agentIds.push(agent.id);\n scorersMap.get(scorerId)?.agentNames.push(agent.name);\n } else {\n scorersMap.set(scorerId, {\n workflowIds: [],\n ...scorer,\n agentNames: [agent.name],\n agentIds: [agent.id],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n };\n\n // Process code-defined agents\n for (const [_, agent] of Object.entries(agents)) {\n await processAgentScorers(agent);\n }\n\n // Process stored agents (database-backed agents)\n try {\n const editor = mastra.getEditor();\n const storedAgentsResult = await editor?.agent.list();\n if (storedAgentsResult?.agents) {\n for (const storedAgentConfig of storedAgentsResult.agents) {\n try {\n const agent = await editor?.agent.getById(storedAgentConfig.id);\n if (agent) {\n await processAgentScorers(agent);\n }\n } catch {\n // Skip individual agents that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured - not all setups have storage\n }\n\n // Process stored scorers (standalone CMS-created scorers)\n try {\n const editor = mastra.getEditor();\n const storedScorersResult = await editor?.scorer.list();\n if (storedScorersResult?.scorerDefinitions) {\n for (const storedScorerConfig of storedScorersResult.scorerDefinitions) {\n try {\n await editor?.scorer.getById(storedScorerConfig.id);\n } catch {\n // Skip individual scorers that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured\n }\n\n for (const [workflowId, workflow] of Object.entries(workflows)) {\n const scorers =\n (await workflow.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerName = scorer.scorer.name;\n if (scorersMap.has(scorerName)) {\n scorersMap.get(scorerName)?.workflowIds.push(workflowId);\n } else {\n scorersMap.set(scorerName, {\n agentIds: [],\n agentNames: [],\n ...scorer,\n workflowIds: [workflowId],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n }\n\n const registeredScorers = await mastra.listScorers();\n for (const [_scorerId, scorer] of Object.entries(registeredScorers || {})) {\n const scorerId = scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)!.isRegistered = true;\n } else {\n scorersMap.set(scorerId, {\n scorer: scorer,\n agentIds: [],\n agentNames: [],\n workflowIds: [],\n isRegistered: true,\n source: scorer.source ?? 'code',\n });\n }\n }\n\n return Object.fromEntries(scorersMap.entries());\n}\n\n// Legacy function to get trace and span details\nfunction getTraceDetails(traceIdWithSpanId?: string) {\n if (!traceIdWithSpanId) {\n return {};\n }\n\n const [traceId, spanId] = traceIdWithSpanId.split('-');\n\n return {\n ...(traceId ? { traceId } : {}),\n ...(spanId ? { spanId } : {}),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_SCORERS_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers',\n responseType: 'json',\n responseSchema: listScorersResponseSchema,\n summary: 'List all scorers',\n description: 'Returns a list of all registered scorers with their configuration and associated agents and workflows',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n return scorers;\n }) as any,\n});\n\nexport const GET_SCORER_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n responseSchema: scorerEntrySchema.nullable(),\n summary: 'Get scorer by ID',\n description: 'Returns details for a specific scorer including its configuration and associations',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, scorerId, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n\n const scorer = scorers[scorerId];\n\n if (!scorer) {\n return null;\n }\n\n return scorer;\n }) as any,\n});\n\nexport const LIST_SCORES_BY_RUN_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/run/:runId',\n responseType: 'json',\n pathParamSchema: runIdSchema,\n queryParamSchema: listScoresByRunIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by run ID',\n description: 'Returns all scores for a specific execution run',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, runId, ...params }) => {\n try {\n const { page, perPage } = params;\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByRunId?.({\n runId,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by run id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SCORER_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorer/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n queryParamSchema: listScoresByScorerIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by scorer ID',\n description: 'Returns all scores generated by a specific scorer',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, scorerId, ...params }) => {\n try {\n const { page, perPage, entityId, entityType } = params;\n const filters = Object.fromEntries(Object.entries({ entityId, entityType }).filter(([_, v]) => v !== undefined));\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByScorerId?.({\n scorerId,\n pagination: { page: page ?? 0, perPage: perPage ?? 10 },\n ...filters,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by scorer id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_ENTITY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/entity/:entityType/:entityId',\n responseType: 'json',\n pathParamSchema: entityPathParams,\n queryParamSchema: listScoresByEntityIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by entity ID',\n description: 'Returns all scores for a specific entity (agent or workflow)',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, entityId, entityType, ...params }) => {\n try {\n const { page, perPage } = params;\n let entityIdToUse = entityId;\n\n if (entityType === 'AGENT') {\n const agent = await getAgentFromSystem({ mastra, agentId: entityId });\n entityIdToUse = agent.id;\n } else if (entityType === 'WORKFLOW') {\n const workflow = mastra.getWorkflowById(entityId);\n entityIdToUse = workflow.id;\n }\n\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scoresStore?.listScoresByEntityId?.({\n entityId: entityIdToUse,\n entityType,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by entity id');\n }\n },\n});\n\nexport const SAVE_SCORE_ROUTE = createRoute({\n method: 'POST',\n path: '/scores',\n responseType: 'json',\n bodySchema: saveScoreBodySchema,\n responseSchema: saveScoreResponseSchema,\n summary: 'Save score',\n description: 'Saves a new score record to storage',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const { score } = params as { score: ScoreRowData };\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const result = await scoresStore?.saveScore?.(score);\n if (!result) {\n throw new HTTPException(500, { message: 'Storage not configured' });\n }\n return result;\n } catch (error) {\n return handleError(error, 'Error saving score');\n }\n },\n});\n"]}
'use strict';
var chunkZCX2J552_cjs = require('./chunk-ZCX2J552.cjs');
var chunkYUDME6CN_cjs = require('./chunk-YUDME6CN.cjs');
var chunkJ5RVSM7H_cjs = require('./chunk-J5RVSM7H.cjs');
var chunk2XZ2466F_cjs = require('./chunk-2XZ2466F.cjs');
var chunk5SY2ZQ3R_cjs = require('./chunk-5SY2ZQ3R.cjs');
var chunkWMS7BOP7_cjs = require('./chunk-WMS7BOP7.cjs');
var chunkNIMP2XEL_cjs = require('./chunk-NIMP2XEL.cjs');
var chunk3JVOIOO6_cjs = require('./chunk-3JVOIOO6.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
// src/server/handlers/stored-agents.ts
async function resolveBrowserField(browser, mastra) {
if (browser === true) {
const editor = mastra.getEditor?.();
const builder = await editor?.resolveBuilder?.();
const defaultBrowser = builder?.getConfiguration?.()?.agent?.browser;
if (!defaultBrowser) {
console.warn(
"[mastra:server] Browser enabled (browser: true) but no default browser config found in builder configuration. The agent will be created/updated without browser access. Set `editor.builder.configuration.agent.browser` to fix this."
);
}
return defaultBrowser ?? void 0;
}
if (browser === false) {
return null;
}
return browser;
}
var AGENT_SNAPSHOT_CONFIG_FIELDS = [
"name",
"description",
"instructions",
"model",
"tools",
"defaultOptions",
"workflows",
"agents",
"integrationTools",
"toolProviders",
"inputProcessors",
"outputProcessors",
"memory",
"scorers",
"requestContextSchema",
"mcpClients",
"skills",
"workspace",
"browser"
];
var CODE_AGENT_OVERRIDE_FIELDS = [
"instructions",
"tools",
"integrationTools",
"mcpClients",
"requestContextSchema"
];
function getCodeAgentOwnership(editorConfig) {
if (editorConfig === false) {
return { ownsInstructions: false, ownsTools: false, ownsToolDescriptionsOnly: false };
}
if (editorConfig === void 0 || editorConfig === null) {
return { ownsInstructions: true, ownsTools: true, ownsToolDescriptionsOnly: false };
}
if (typeof editorConfig !== "object") {
return { ownsInstructions: false, ownsTools: false, ownsToolDescriptionsOnly: false };
}
const cfg = editorConfig;
const ownsInstructions = cfg.instructions === true;
const toolsCfg = cfg.tools;
const ownsTools = toolsCfg === true;
const ownsToolDescriptionsOnly = typeof toolsCfg === "object" && toolsCfg !== null && toolsCfg.description === true;
return { ownsInstructions, ownsTools, ownsToolDescriptionsOnly };
}
function hasNonEmptyInstructions(value) {
if (typeof value === "string") {
return value.trim().length > 0;
}
if (!Array.isArray(value)) {
return false;
}
return value.some((block) => {
if (!block || typeof block !== "object") {
return false;
}
const typedBlock = block;
if (typedBlock.type === "prompt_block_ref") {
return typeof typedBlock.id === "string" && typedBlock.id.length > 0;
}
return typeof typedBlock.content === "string" && typedBlock.content.trim().length > 0;
});
}
function assertOwnedInstructionsNotEmpty(instructions) {
if (!hasNonEmptyInstructions(instructions)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Instructions are required" });
}
}
function sortForStableJson(value) {
if (Array.isArray(value)) {
return value.map(sortForStableJson);
}
if (value && typeof value === "object" && !(value instanceof Date)) {
return Object.fromEntries(
Object.entries(value).filter(([, entry]) => entry !== void 0).sort(([left], [right]) => left.localeCompare(right)).map(([key, entry]) => [key, sortForStableJson(entry)])
);
}
return value;
}
function buildExportConfig(input, agent) {
const editorConfig = agent?.__getEditorConfig?.();
const isCodeAgent = agent?.source === "code";
const allowedFields = isCodeAgent ? CODE_AGENT_OVERRIDE_FIELDS : AGENT_SNAPSHOT_CONFIG_FIELDS;
const ownership = isCodeAgent ? getCodeAgentOwnership(editorConfig) : null;
const config = {};
for (const field of allowedFields) {
if (input[field] === void 0) continue;
if (ownership) {
if (field === "instructions" && !ownership.ownsInstructions) continue;
if ((field === "tools" || field === "integrationTools" || field === "mcpClients") && !ownership.ownsTools && !ownership.ownsToolDescriptionsOnly) {
continue;
}
}
config[field] = input[field];
}
return sortForStableJson(config);
}
function agentExportFilename(agentId) {
return `agents/${encodeURIComponent(agentId)}.json`;
}
function sourceChangeRequestHeadRef(agentId) {
const safeAgentId = agentId.replace(/[^a-zA-Z0-9._-]+/g, "-").replace(/^-+|-+$/g, "") || "agent";
return `mastra/${safeAgentId}`;
}
function sourceChangeRequestMessage(agentId, userName, changeMessage) {
const normalizedUserName = userName?.replace(/\s+/g, " ").trim();
const normalizedMessage = changeMessage?.replace(/\s+/g, " ").trim();
const message = normalizedMessage || `Update ${agentId} agent override`;
return normalizedUserName ? `${message} by ${normalizedUserName}` : message;
}
var LIST_STORED_AGENTS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/agents",
responseType: "json",
queryParamSchema: chunkNIMP2XEL_cjs.listStoredAgentsQuerySchema,
responseSchema: chunkNIMP2XEL_cjs.listStoredAgentsResponseSchema,
summary: "List stored agents",
description: "Returns a paginated list of all agents stored in the database",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
page,
perPage,
orderBy,
status,
authorId,
visibility,
metadata,
favoritedOnly,
pinFavoritedFor
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const filter = chunkWMS7BOP7_cjs.resolveAuthorFilter({
requestContext,
resource: "stored-agents",
queryAuthorId: authorId,
queryVisibility: visibility === "public" ? "public" : void 0
});
const scope = await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext);
const scopedMetadata = chunkEVOVAWN6_cjs.scopeStoredResourceMetadata(metadata, scope);
const callerId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext);
const favoritesEnabled = await chunkJ5RVSM7H_cjs.isBuilderFeatureEnabled(mastra, "favorites");
const honoredStarredOnly = favoritesEnabled && favoritedOnly === true;
const favoriteSubjectId = pinFavoritedFor ?? callerId;
if (honoredStarredOnly) {
const effectivePerPage = perPage ?? 100;
if (!favoriteSubjectId) {
return { agents: [], total: 0, page, perPage: effectivePerPage, hasMore: false };
}
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Favorites storage domain is not available" });
}
const starredIds = await favoritesStore.listFavoritedIds({ userId: favoriteSubjectId, entityType: "agent" });
if (starredIds.length === 0) {
return { agents: [], total: 0, page, perPage: effectivePerPage, hasMore: false };
}
const allMatching = await agentsStore.listResolved({
perPage: false,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata,
entityIds: starredIds
});
const visible = allMatching.agents.filter((record) => chunkWMS7BOP7_cjs.matchesAuthorFilter(record, filter));
const total = visible.length;
const startIdx = effectivePerPage === 0 ? 0 : page * effectivePerPage;
const endIdx = effectivePerPage === 0 ? 0 : startIdx + effectivePerPage;
const sliced = effectivePerPage === 0 ? [] : visible.slice(startIdx, endIdx);
const annotated2 = sliced.map((record) => ({ ...record, isFavorited: true }));
const authors2 = await chunk5SY2ZQ3R_cjs.prepareAuthorEnrichment(
mastra,
requestContext,
annotated2.map((a) => a.authorId)
);
const withAuthors2 = authors2 ? annotated2.map((record) => chunk5SY2ZQ3R_cjs.attachAuthor(record, authors2)) : annotated2;
const hasMore = effectivePerPage > 0 && endIdx < total;
return { agents: withAuthors2, total, page, perPage: effectivePerPage, hasMore };
}
const result = await agentsStore.listResolved({
page,
perPage,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata
});
const visibleAgents = result.agents.filter((record) => chunkWMS7BOP7_cjs.matchesAuthorFilter(record, filter));
const authors = await chunk5SY2ZQ3R_cjs.prepareAuthorEnrichment(
mastra,
requestContext,
visibleAgents.map((a) => a.authorId)
);
if (!favoritesEnabled) {
const stripped = visibleAgents.map(chunkYUDME6CN_cjs.stripFavoriteFields);
const withAuthors2 = authors ? stripped.map((record) => chunk5SY2ZQ3R_cjs.attachAuthor(record, authors)) : stripped;
return { ...result, agents: withAuthors2 };
}
const enrichment = await chunkYUDME6CN_cjs.prepareFavoritesEnrichment(
mastra,
requestContext,
"agent",
visibleAgents.map((a) => a.id)
);
const annotated = enrichment ? visibleAgents.map((record) => ({ ...record, isFavorited: enrichment.starredIds.has(record.id) })) : visibleAgents.map(chunkYUDME6CN_cjs.stripFavoriteFields);
const withAuthors = authors ? annotated.map((record) => chunk5SY2ZQ3R_cjs.attachAuthor(record, authors)) : annotated;
return { ...result, agents: withAuthors };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing stored agents");
}
}
});
async function buildStoredAgentExport({
mastra,
requestContext,
storedAgentId,
body
}) {
const storage = mastra.getStorage();
const agentsStore = storage ? await storage.getStore("agents") : void 0;
const storedAgent = await agentsStore?.getByIdResolved(storedAgentId, { status: "draft" });
if (storedAgent) {
chunkEVOVAWN6_cjs.assertStoredResourceScope(storedAgent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: storedAgent });
}
let codeAgent;
try {
codeAgent = mastra.getAgentById?.(storedAgentId);
} catch {
codeAgent = void 0;
}
if (!storedAgent && !codeAgent) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Agent with id ${storedAgentId} not found` });
}
const config = buildExportConfig(body, codeAgent);
const content = `${JSON.stringify(config, null, 2)}
`;
return {
agentId: storedAgentId,
fileName: agentExportFilename(storedAgentId),
content,
config
};
}
var EXPORT_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/agents/:storedAgentId/export",
responseType: "json",
pathParamSchema: chunkNIMP2XEL_cjs.storedAgentIdPathParams,
bodySchema: chunkNIMP2XEL_cjs.exportStoredAgentBodySchema,
responseSchema: chunkNIMP2XEL_cjs.exportStoredAgentResponseSchema,
summary: "Export stored agent override JSON",
description: "Returns deterministic JSON for an agent configuration or code-agent override without mutating storage",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId, ...body }) => {
try {
return await buildStoredAgentExport({ mastra, requestContext, storedAgentId, body });
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error exporting stored agent");
}
}
});
var OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/agents/:storedAgentId/change-request",
responseType: "json",
pathParamSchema: chunkNIMP2XEL_cjs.storedAgentIdPathParams,
bodySchema: chunkNIMP2XEL_cjs.openStoredAgentChangeRequestBodySchema,
responseSchema: chunkNIMP2XEL_cjs.openStoredAgentChangeRequestResponseSchema,
summary: "Open stored agent source change request",
description: "Opens a source-provider change request for deterministic agent override JSON without mutating storage",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId, ...body }) => {
try {
const provider = mastra.getEditor?.()?.getSourceControlProvider?.();
if (!provider?.openChangeRequest) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Source control provider cannot open change requests" });
}
const openChangeRequest = provider.openChangeRequest.bind(provider);
const { changeMessage, userName, inspectOnly, ...exportBody } = body;
const headRef = sourceChangeRequestHeadRef(storedAgentId);
const title = `Update ${storedAgentId} agent override`;
const result = inspectOnly ? await openChangeRequest({
title,
headRef,
files: []
}) : await (async () => {
const response = await buildStoredAgentExport({ mastra, requestContext, storedAgentId, body: exportBody });
const message = sourceChangeRequestMessage(storedAgentId, userName, changeMessage);
return openChangeRequest({
title,
body: `Updates ${response.fileName} from Mastra Studio.`,
headRef,
files: [
{
path: response.fileName,
content: response.content,
message
}
]
});
})();
const storage = mastra.getStorage();
const agentsStore = storage ? await storage.getStore("agents") : void 0;
await agentsStore?.useProviderRef?.(storedAgentId, result.ref ?? headRef);
mastra.getEditor?.()?.agent?.clearCache?.(storedAgentId);
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error opening stored agent change request");
}
}
});
var GET_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkNIMP2XEL_cjs.storedAgentIdPathParams,
queryParamSchema: chunk3JVOIOO6_cjs.statusQuerySchema,
responseSchema: chunkNIMP2XEL_cjs.getStoredAgentResponseSchema,
summary: "Get stored agent by ID",
description: "Returns a specific agent from storage by its unique identifier. Use ?status=draft to resolve with the latest (draft) version, or ?status=published (default) for the active published version.",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId, status }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getByIdResolved(storedAgentId, { status });
if (!agent) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
const authors = await chunk5SY2ZQ3R_cjs.prepareAuthorEnrichment(mastra, requestContext, [agent.authorId]);
const withFavorite = await chunkYUDME6CN_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", agent);
return chunk5SY2ZQ3R_cjs.attachAuthor(withFavorite, authors);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting stored agent");
}
}
});
var CREATE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/agents",
responseType: "json",
bodySchema: chunkNIMP2XEL_cjs.createStoredAgentBodySchema,
responseSchema: chunkNIMP2XEL_cjs.createStoredAgentResponseSchema,
summary: "Create stored agent",
description: "Creates a new agent in storage with the provided configuration",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
id: providedId,
metadata,
visibility: bodyVisibility,
name,
description,
instructions,
model,
tools,
defaultOptions,
workflows,
agents,
integrationTools,
toolProviders,
mcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser,
requestContextSchema
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const id = providedId || chunkEVOVAWN6_cjs.toSlug(name);
if (!id) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "Could not derive agent ID from name. Please provide an explicit id."
});
}
const existing = await agentsStore.getById(id);
if (existing) {
throw new chunk64ITUOXI_cjs.HTTPException(409, { message: `Agent with id ${id} already exists` });
}
const authorId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext) ?? void 0;
const visibility = authorId ? bodyVisibility ?? "private" : "public";
chunkZCX2J552_cjs.validateMetadataAvatarUrl(metadata);
const resolvedBrowser = await resolveBrowserField(browser, mastra);
let createInstructions = instructions;
let createTools = tools;
let createIntegrationTools = integrationTools;
let createMcpClients = mcpClients;
let codeAgentForCreate;
try {
codeAgentForCreate = mastra.getAgentById?.(id);
} catch {
codeAgentForCreate = void 0;
}
if (codeAgentForCreate?.source === "code") {
const ownership = getCodeAgentOwnership(codeAgentForCreate.__getEditorConfig?.());
if (ownership.ownsInstructions) {
assertOwnedInstructionsNotEmpty(createInstructions);
} else {
createInstructions = void 0;
}
if (!ownership.ownsTools && !ownership.ownsToolDescriptionsOnly) {
createTools = void 0;
createIntegrationTools = void 0;
createMcpClients = void 0;
}
}
const input = {
id,
authorId,
visibility,
metadata: chunkEVOVAWN6_cjs.scopeStoredResourceMetadata(metadata, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext)),
name,
description,
instructions: createInstructions,
model,
tools: createTools,
defaultOptions,
workflows,
agents,
integrationTools: createIntegrationTools,
toolProviders,
mcpClients: createMcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser: resolvedBrowser,
requestContextSchema
};
const editor = mastra.getEditor?.();
if (editor) {
await editor.agent.create(input);
} else {
await agentsStore.create({ agent: input });
}
const { versions } = await agentsStore.listVersions({ agentId: id, perPage: 1 });
const initialVersion = versions[0];
if (initialVersion) {
await agentsStore.update({
id,
activeVersionId: initialVersion.id,
status: "published"
});
editor?.agent.clearCache(id);
}
const resolved = await agentsStore.getByIdResolved(id, { status: "published" });
if (!resolved) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to resolve created agent" });
}
return chunkYUDME6CN_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating stored agent");
}
}
});
var UPDATE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "PATCH",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkNIMP2XEL_cjs.storedAgentIdPathParams,
bodySchema: chunkNIMP2XEL_cjs.updateStoredAgentBodySchema,
responseSchema: chunkNIMP2XEL_cjs.updateStoredAgentResponseSchema,
summary: "Update stored agent",
description: "Updates an existing agent in storage with the provided fields",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
storedAgentId,
// Metadata-level fields
authorId,
metadata,
visibility,
// Config fields (snapshot-level)
name,
description,
instructions,
model,
tools,
defaultOptions,
workflows,
agents,
integrationTools,
toolProviders,
mcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser,
requestContextSchema,
// Version metadata
changeMessage
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const existing = await agentsStore.getById(storedAgentId);
if (!existing) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
const scope = await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext);
chunkEVOVAWN6_cjs.assertStoredResourceScope(existing, scope);
chunkWMS7BOP7_cjs.assertWriteAccess({
requestContext,
resource: "stored-agents",
resourceId: storedAgentId,
action: "edit",
record: existing
});
chunkZCX2J552_cjs.validateMetadataAvatarUrl(metadata);
const callerAuthorId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext) ?? void 0;
const resolvedVisibility = callerAuthorId ? visibility : visibility != null ? "public" : void 0;
const resolvedBrowser = await resolveBrowserField(browser, mastra);
let codeAgentForUpdate;
try {
codeAgentForUpdate = mastra.getAgentById?.(storedAgentId);
} catch {
codeAgentForUpdate = void 0;
}
if (codeAgentForUpdate?.source === "code") {
const ownership = getCodeAgentOwnership(codeAgentForUpdate.__getEditorConfig?.());
if (ownership.ownsInstructions) {
if (instructions !== void 0) {
assertOwnedInstructionsNotEmpty(instructions);
}
} else {
instructions = void 0;
}
if (!ownership.ownsTools && !ownership.ownsToolDescriptionsOnly) {
tools = void 0;
integrationTools = void 0;
mcpClients = void 0;
}
}
const mergedMetadata = { ...existing.metadata ?? {}, ...metadata ?? {} };
const scopedMetadata = chunkEVOVAWN6_cjs.scopeStoredResourceMetadata(mergedMetadata, scope);
const updatedAgent = await agentsStore.update({
id: storedAgentId,
authorId,
metadata: scopedMetadata,
visibility: resolvedVisibility,
name,
description,
instructions,
model,
tools,
defaultOptions,
workflows,
agents,
integrationTools,
toolProviders,
mcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser: resolvedBrowser,
requestContextSchema
});
const configFields = {
name,
description,
instructions,
model,
tools,
defaultOptions,
workflows,
agents,
integrationTools,
toolProviders,
mcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser: resolvedBrowser,
requestContextSchema
};
const providedConfigFields = Object.fromEntries(Object.entries(configFields).filter(([_, v]) => v !== void 0));
const autoVersionResult = await chunk2XZ2466F_cjs.handleAutoVersioning(
agentsStore,
storedAgentId,
"agentId",
AGENT_SNAPSHOT_CONFIG_FIELDS,
existing,
updatedAgent,
providedConfigFields,
changeMessage ? { changeMessage } : void 0
);
if (!autoVersionResult) {
throw new Error("handleAutoVersioning returned undefined");
}
const isCodeSource = mastra.getEditor?.()?.getSource?.() === "code";
if (isCodeSource && autoVersionResult.versionCreated && !changeMessage) {
const { versions } = await agentsStore.listVersions({ agentId: storedAgentId, perPage: 2 });
const previousVersion = versions[1];
if (previousVersion) {
await agentsStore.deleteVersion(previousVersion.id);
}
}
if (autoVersionResult.versionCreated) {
const { versions } = await agentsStore.listVersions({ agentId: storedAgentId, perPage: 1 });
const latestVersion = versions[0];
if (latestVersion) {
await agentsStore.update({
id: storedAgentId,
activeVersionId: latestVersion.id
});
}
}
const editor = mastra.getEditor();
if (editor) {
editor.agent.clearCache(storedAgentId);
}
const resolved = await agentsStore.getByIdResolved(storedAgentId, { status: "draft" });
if (!resolved) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to resolve updated agent" });
}
return chunkYUDME6CN_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error updating stored agent");
}
}
});
var DELETE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkNIMP2XEL_cjs.storedAgentIdPathParams,
responseSchema: chunkNIMP2XEL_cjs.deleteStoredAgentResponseSchema,
summary: "Delete stored agent",
description: "Deletes an agent from storage by its unique identifier",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const existing = await agentsStore.getById(storedAgentId);
if (!existing) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(existing, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertWriteAccess({
requestContext,
resource: "stored-agents",
resourceId: storedAgentId,
action: "delete",
record: existing
});
await agentsStore.delete(storedAgentId);
try {
const favoritesStore = await storage.getStore("favorites");
await favoritesStore?.deleteFavoritesForEntity({ entityType: "agent", entityId: storedAgentId });
} catch (cascadeError) {
mastra.getLogger?.()?.warn?.("Failed to cascade-delete favorites for agent", { storedAgentId, error: cascadeError });
}
mastra.getEditor()?.agent.clearCache(storedAgentId);
return { success: true, message: `Agent ${storedAgentId} deleted successfully` };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error deleting stored agent");
}
}
});
var GET_STORED_AGENT_DEPENDENTS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/agents/:storedAgentId/dependents",
responseType: "json",
pathParamSchema: chunkNIMP2XEL_cjs.storedAgentIdPathParams,
responseSchema: chunkNIMP2XEL_cjs.getStoredAgentDependentsResponseSchema,
summary: "List dependents of a stored agent",
description: "Returns agents that reference the target as a sub-agent. Used to warn before deleting or unsharing. Caller-readable references appear in `dependents` (id + name); cross-workspace references the caller cannot read are aggregated in `hiddenCount` and only surfaced when the target is public.",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const target = await agentsStore.getById(storedAgentId);
if (!target) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(target, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: target });
const filter = chunkWMS7BOP7_cjs.resolveAuthorFilter({ requestContext, resource: "stored-agents" });
const all = await agentsStore.listResolved({
perPage: false,
status: "published"
});
const targetIsPublic = target.visibility === "public";
const dependents = [];
let hiddenCount = 0;
for (const record of all.agents) {
if (record.id === storedAgentId) continue;
if (!referencesTarget(record.agents, storedAgentId)) continue;
if (chunkWMS7BOP7_cjs.matchesAuthorFilter(record, filter)) {
dependents.push({
id: record.id,
name: record.name ?? record.id
});
} else if (targetIsPublic) {
hiddenCount += 1;
}
}
return { dependents, hiddenCount };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing stored agent dependents");
}
}
});
function referencesTarget(subAgents, targetId) {
if (!subAgents) return false;
if (Array.isArray(subAgents)) {
return subAgents.some((variant) => {
const value = variant?.value;
return Boolean(value && typeof value === "object" && Object.prototype.hasOwnProperty.call(value, targetId));
});
}
if (typeof subAgents === "object") {
return Object.prototype.hasOwnProperty.call(subAgents, targetId);
}
return false;
}
var PREVIEW_INSTRUCTIONS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/agents/preview-instructions",
responseType: "json",
bodySchema: chunkNIMP2XEL_cjs.previewInstructionsBodySchema,
responseSchema: chunkNIMP2XEL_cjs.previewInstructionsResponseSchema,
summary: "Preview resolved instructions",
description: "Resolves an array of instruction blocks against a request context, evaluating rules, fetching prompt block references, and rendering template variables. Returns the final concatenated instruction string.",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, blocks, context }) => {
try {
const editor = mastra.getEditor();
if (!editor) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Editor is not configured" });
}
const result = await editor.prompt.preview(blocks, context ?? {});
return { result };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error previewing instructions");
}
}
});
exports.CREATE_STORED_AGENT_ROUTE = CREATE_STORED_AGENT_ROUTE;
exports.DELETE_STORED_AGENT_ROUTE = DELETE_STORED_AGENT_ROUTE;
exports.EXPORT_STORED_AGENT_ROUTE = EXPORT_STORED_AGENT_ROUTE;
exports.GET_STORED_AGENT_DEPENDENTS_ROUTE = GET_STORED_AGENT_DEPENDENTS_ROUTE;
exports.GET_STORED_AGENT_ROUTE = GET_STORED_AGENT_ROUTE;
exports.LIST_STORED_AGENTS_ROUTE = LIST_STORED_AGENTS_ROUTE;
exports.OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE = OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE;
exports.PREVIEW_INSTRUCTIONS_ROUTE = PREVIEW_INSTRUCTIONS_ROUTE;
exports.UPDATE_STORED_AGENT_ROUTE = UPDATE_STORED_AGENT_ROUTE;
//# sourceMappingURL=chunk-ERJ75YLP.cjs.map
//# sourceMappingURL=chunk-ERJ75YLP.cjs.map

Sorry, the diff of this file is too big to display

import { storedSkillIdPathParams } from './chunk-FBI32AWY.js';
import { favoriteToggleResponseSchema } from './chunk-SFPN7SHZ.js';
import { requireBuilderFeature } from './chunk-IKIPMMHL.js';
import { getCallerAuthorId, assertReadAccess } from './chunk-ETR4XOVD.js';
import { assertStoredResourceScope, getStoredResourceScope } from './chunk-4GWTCVFL.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
// src/server/handlers/stored-skill-favorites.ts
async function getFavoritesContext(mastra) {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new HTTPException(500, { message: "Skills storage domain is not available" });
}
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) {
throw new HTTPException(500, { message: "Favorites storage domain is not available" });
}
return { skillStore, favoritesStore };
}
var FAVORITE_STORED_SKILL_ROUTE = createRoute({
method: "PUT",
path: "/stored/skills/:storedSkillId/favorite",
responseType: "json",
pathParamSchema: storedSkillIdPathParams,
responseSchema: favoriteToggleResponseSchema,
summary: "Favorite a stored skill",
description: "Marks the stored skill as favorited by the calling user. Idempotent.",
tags: ["Stored Skills"],
requiresAuth: true,
requiresPermission: "stored-skills:read",
handler: async ({ mastra, requestContext, storedSkillId }) => {
try {
await requireBuilderFeature(mastra, "favorites");
const callerId = getCallerAuthorId(requestContext);
if (!callerId) {
throw new HTTPException(401, { message: "Authentication required" });
}
const { skillStore, favoritesStore } = await getFavoritesContext(mastra);
const skill = await skillStore.getByIdResolved(storedSkillId);
if (!skill) {
throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));
assertReadAccess({ requestContext, resource: "stored-skills", resourceId: storedSkillId, record: skill });
const result = await favoritesStore.favorite({
userId: callerId,
entityType: "skill",
entityId: storedSkillId
});
return result;
} catch (error) {
return handleError(error, "Error favoriting stored skill");
}
}
});
var UNFAVORITE_STORED_SKILL_ROUTE = createRoute({
method: "DELETE",
path: "/stored/skills/:storedSkillId/favorite",
responseType: "json",
pathParamSchema: storedSkillIdPathParams,
responseSchema: favoriteToggleResponseSchema,
summary: "Unfavorite a stored skill",
description: "Removes the caller\u2019s favorite from the stored skill. Idempotent.",
tags: ["Stored Skills"],
requiresAuth: true,
requiresPermission: "stored-skills:read",
handler: async ({ mastra, requestContext, storedSkillId }) => {
try {
await requireBuilderFeature(mastra, "favorites");
const callerId = getCallerAuthorId(requestContext);
if (!callerId) {
throw new HTTPException(401, { message: "Authentication required" });
}
const { skillStore, favoritesStore } = await getFavoritesContext(mastra);
const skill = await skillStore.getByIdResolved(storedSkillId);
if (!skill) {
throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));
assertReadAccess({ requestContext, resource: "stored-skills", resourceId: storedSkillId, record: skill });
const result = await favoritesStore.unfavorite({
userId: callerId,
entityType: "skill",
entityId: storedSkillId
});
return result;
} catch (error) {
return handleError(error, "Error unfavoriting stored skill");
}
}
});
export { FAVORITE_STORED_SKILL_ROUTE, UNFAVORITE_STORED_SKILL_ROUTE };
//# sourceMappingURL=chunk-F2YOTPSJ.js.map
//# sourceMappingURL=chunk-F2YOTPSJ.js.map
{"version":3,"sources":["../src/server/handlers/stored-skill-favorites.ts"],"names":[],"mappings":"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","file":"chunk-F2YOTPSJ.js","sourcesContent":["import { HTTPException } from '../http-exception';\nimport { favoriteToggleResponseSchema } from '../schemas/favorites';\nimport { storedSkillIdPathParams } from '../schemas/stored-skills';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { assertReadAccess, getCallerAuthorId } from './authorship';\nimport { requireBuilderFeature } from './editor-builder';\nimport { handleError } from './error';\n\n/**\n * Resolves the storage and favorites domains, throwing 500 if unavailable.\n */\nasync function getFavoritesContext(mastra: Parameters<typeof requireBuilderFeature>[0]) {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) {\n throw new HTTPException(500, { message: 'Favorites storage domain is not available' });\n }\n return { skillStore, favoritesStore };\n}\n\n/**\n * PUT /stored/skills/:storedSkillId/favorite\n */\nexport const FAVORITE_STORED_SKILL_ROUTE = createRoute({\n method: 'PUT',\n path: '/stored/skills/:storedSkillId/favorite',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Favorite a stored skill',\n description: 'Marks the stored skill as favorited by the calling user. Idempotent.',\n tags: ['Stored Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { skillStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const skill = await skillStore.getByIdResolved(storedSkillId);\n if (!skill) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller cannot read the skill (private + not owner/admin).\n assertReadAccess({ requestContext, resource: 'stored-skills', resourceId: storedSkillId, record: skill });\n\n const result = await favoritesStore.favorite({\n userId: callerId,\n entityType: 'skill',\n entityId: storedSkillId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error favoriting stored skill');\n }\n },\n});\n\n/**\n * DELETE /stored/skills/:storedSkillId/favorite\n */\nexport const UNFAVORITE_STORED_SKILL_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/skills/:storedSkillId/favorite',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Unfavorite a stored skill',\n description: 'Removes the caller’s favorite from the stored skill. Idempotent.',\n tags: ['Stored Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { skillStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const skill = await skillStore.getByIdResolved(storedSkillId);\n if (!skill) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));\n\n assertReadAccess({ requestContext, resource: 'stored-skills', resourceId: storedSkillId, record: skill });\n\n const result = await favoritesStore.unfavorite({\n userId: callerId,\n entityType: 'skill',\n entityId: storedSkillId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error unfavoriting stored skill');\n }\n },\n});\n"]}
import { createListVersionsResponseSchema, createCompareVersionsResponseSchema } from './chunk-FXXHWBF2.js';
import { toolConfigSchema, instructionsSchema, conditionalFieldSchema, scorerConfigSchema, serializedMemoryConfigSchema, storedProcessorGraphSchema, toolsConfigSchema, modelConfigSchema } from './chunk-5HBR27TT.js';
import { defaultOptionsSchema } from './chunk-TKP6FJQ3.js';
import { z } from 'zod/v4';
var mcpClientToolsConfigSchema = z.object({
tools: z.record(z.string(), toolConfigSchema).optional()
});
var agentVersionPathParams = z.object({
agentId: z.string().describe("Unique identifier for the stored agent")
});
var versionIdPathParams = z.object({
agentId: z.string().describe("Unique identifier for the stored agent"),
versionId: z.string().describe("Unique identifier for the version (UUID)")
});
var agentVersionSchema = z.object({
id: z.string().describe("Unique identifier for the version (UUID)"),
agentId: z.string().describe("ID of the agent this version belongs to"),
versionNumber: z.number().describe("Sequential version number (1, 2, 3, ...)"),
// Top-level config fields (from StorageAgentSnapshotType)
name: z.string().describe("Name of the agent"),
description: z.string().optional().describe("Description of the agent"),
instructions: instructionsSchema,
model: conditionalFieldSchema(modelConfigSchema).describe(
"Model configuration \u2014 static value or array of conditional variants"
),
tools: conditionalFieldSchema(toolsConfigSchema).optional().describe("Tool keys mapped to per-tool config \u2014 static or conditional"),
defaultOptions: conditionalFieldSchema(defaultOptionsSchema).optional().describe("Default options for generate/stream calls \u2014 static or conditional"),
workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema)).optional().describe("Workflow keys with optional per-workflow config \u2014 static or conditional"),
agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema)).optional().describe("Agent keys with optional per-agent config \u2014 static or conditional"),
integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of tool provider IDs to their tool configurations \u2014 static or conditional"),
mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of stored MCP client IDs to their tool configurations \u2014 static or conditional"),
inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Input processor graph \u2014 static or conditional"),
outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Output processor graph \u2014 static or conditional"),
memory: conditionalFieldSchema(serializedMemoryConfigSchema).optional().describe("Memory configuration \u2014 static or conditional"),
scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema)).optional().describe("Scorer keys with optional sampling config \u2014 static or conditional"),
requestContextSchema: z.record(z.string(), z.unknown()).optional().describe("JSON Schema defining valid request context variables"),
// Version metadata fields
changedFields: z.array(z.string()).optional().describe("Array of field names that changed from the previous version"),
changeMessage: z.string().optional().describe("Optional message describing the changes"),
createdAt: z.coerce.date().describe("When this version was created")
});
var listVersionsResponseSchema = createListVersionsResponseSchema(agentVersionSchema);
var getVersionResponseSchema = agentVersionSchema;
var createVersionResponseSchema = agentVersionSchema.partial().merge(
z.object({
// These fields are always present in a version response
id: z.string().describe("Unique identifier for the version (UUID)"),
agentId: z.string().describe("ID of the agent this version belongs to"),
versionNumber: z.number().describe("Sequential version number (1, 2, 3, ...)"),
createdAt: z.coerce.date().describe("When this version was created")
})
);
var restoreVersionResponseSchema = agentVersionSchema.describe(
"The newly created version from the restored configuration"
);
var compareVersionsResponseSchema = createCompareVersionsResponseSchema(agentVersionSchema);
export { agentVersionPathParams, agentVersionSchema, compareVersionsResponseSchema, createVersionResponseSchema, getVersionResponseSchema, listVersionsResponseSchema, restoreVersionResponseSchema, versionIdPathParams };
//# sourceMappingURL=chunk-F6ANJJFG.js.map
//# sourceMappingURL=chunk-F6ANJJFG.js.map
{"version":3,"sources":["../src/server/schemas/agent-versions.ts"],"names":[],"mappings":"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","file":"chunk-F6ANJJFG.js","sourcesContent":["import { z } from 'zod/v4';\nimport { defaultOptionsSchema } from './default-options';\nimport { serializedMemoryConfigSchema } from './memory-config';\nimport {\n scorerConfigSchema,\n instructionsSchema,\n conditionalFieldSchema,\n modelConfigSchema,\n toolConfigSchema,\n toolsConfigSchema,\n storedProcessorGraphSchema,\n} from './stored-agents';\nimport {\n listVersionsQuerySchema,\n compareVersionsQuerySchema,\n createVersionBodySchema,\n activateVersionResponseSchema,\n deleteVersionResponseSchema,\n versionDiffEntrySchema,\n createListVersionsResponseSchema,\n createCompareVersionsResponseSchema,\n} from './version-common';\n\nconst mcpClientToolsConfigSchema = z.object({\n tools: z.record(z.string(), toolConfigSchema).optional(),\n});\n\n// Re-export shared schemas for backwards compat\nexport {\n listVersionsQuerySchema,\n compareVersionsQuerySchema,\n createVersionBodySchema,\n activateVersionResponseSchema,\n deleteVersionResponseSchema,\n versionDiffEntrySchema,\n};\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\n/**\n * Path parameters for agent version routes\n */\nexport const agentVersionPathParams = z.object({\n agentId: z.string().describe('Unique identifier for the stored agent'),\n});\n\n/**\n * Path parameters for specific version routes\n */\nexport const versionIdPathParams = z.object({\n agentId: z.string().describe('Unique identifier for the stored agent'),\n versionId: z.string().describe('Unique identifier for the version (UUID)'),\n});\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\n/**\n * Agent version object schema (full response)\n * Config fields are top-level on the version (no nested snapshot object).\n * Extends StorageAgentSnapshotType fields.\n */\nexport const agentVersionSchema = z.object({\n id: z.string().describe('Unique identifier for the version (UUID)'),\n agentId: z.string().describe('ID of the agent this version belongs to'),\n versionNumber: z.number().describe('Sequential version number (1, 2, 3, ...)'),\n // Top-level config fields (from StorageAgentSnapshotType)\n name: z.string().describe('Name of the agent'),\n description: z.string().optional().describe('Description of the agent'),\n instructions: instructionsSchema,\n model: conditionalFieldSchema(modelConfigSchema).describe(\n 'Model configuration — static value or array of conditional variants',\n ),\n tools: conditionalFieldSchema(toolsConfigSchema)\n .optional()\n .describe('Tool keys mapped to per-tool config — static or conditional'),\n defaultOptions: conditionalFieldSchema(defaultOptionsSchema)\n .optional()\n .describe('Default options for generate/stream calls — static or conditional'),\n workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Workflow keys with optional per-workflow config — static or conditional'),\n agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Agent keys with optional per-agent config — static or conditional'),\n integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of tool provider IDs to their tool configurations — static or conditional'),\n mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of stored MCP client IDs to their tool configurations — static or conditional'),\n inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Input processor graph — static or conditional'),\n outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Output processor graph — static or conditional'),\n memory: conditionalFieldSchema(serializedMemoryConfigSchema)\n .optional()\n .describe('Memory configuration — static or conditional'),\n scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema))\n .optional()\n .describe('Scorer keys with optional sampling config — static or conditional'),\n requestContextSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('JSON Schema defining valid request context variables'),\n // Version metadata fields\n changedFields: z.array(z.string()).optional().describe('Array of field names that changed from the previous version'),\n changeMessage: z.string().optional().describe('Optional message describing the changes'),\n createdAt: z.coerce.date().describe('When this version was created'),\n});\n\n/**\n * Response for GET /stored/agents/:agentId/versions\n */\nexport const listVersionsResponseSchema = createListVersionsResponseSchema(agentVersionSchema);\n\n/**\n * Response for GET /stored/agents/:agentId/versions/:versionId\n */\nexport const getVersionResponseSchema = agentVersionSchema;\n\n/**\n * Response for POST /stored/agents/:agentId/versions\n */\nexport const createVersionResponseSchema = agentVersionSchema.partial().merge(\n z.object({\n // These fields are always present in a version response\n id: z.string().describe('Unique identifier for the version (UUID)'),\n agentId: z.string().describe('ID of the agent this version belongs to'),\n versionNumber: z.number().describe('Sequential version number (1, 2, 3, ...)'),\n createdAt: z.coerce.date().describe('When this version was created'),\n }),\n);\n\n/**\n * Response for POST /stored/agents/:agentId/versions/:versionId/restore\n */\nexport const restoreVersionResponseSchema = agentVersionSchema.describe(\n 'The newly created version from the restored configuration',\n);\n\n/**\n * Response for GET /stored/agents/:agentId/versions/compare\n */\nexport const compareVersionsResponseSchema: ReturnType<\n typeof createCompareVersionsResponseSchema<typeof agentVersionSchema>\n> = createCompareVersionsResponseSchema(agentVersionSchema);\n"]}
'use strict';
var chunkALPAZYZR_cjs = require('./chunk-ALPAZYZR.cjs');
var chunk7X3YWKHD_cjs = require('./chunk-7X3YWKHD.cjs');
var chunkS7XHYPBN_cjs = require('./chunk-S7XHYPBN.cjs');
var chunkOCDUNF52_cjs = require('./chunk-OCDUNF52.cjs');
var chunkJBH7K7YB_cjs = require('./chunk-JBH7K7YB.cjs');
var chunkERJ75YLP_cjs = require('./chunk-ERJ75YLP.cjs');
var chunkW543ZJQB_cjs = require('./chunk-W543ZJQB.cjs');
var chunkNTS3DORC_cjs = require('./chunk-NTS3DORC.cjs');
var chunkV3HBNBLU_cjs = require('./chunk-V3HBNBLU.cjs');
var chunkO4DW75OM_cjs = require('./chunk-O4DW75OM.cjs');
var chunkG7VOOYJX_cjs = require('./chunk-G7VOOYJX.cjs');
var chunkGHTMFCWF_cjs = require('./chunk-GHTMFCWF.cjs');
var chunkHWACFNNH_cjs = require('./chunk-HWACFNNH.cjs');
var chunkONVWPSQD_cjs = require('./chunk-ONVWPSQD.cjs');
var chunkABAQRIVF_cjs = require('./chunk-ABAQRIVF.cjs');
var chunkS7Y6AP64_cjs = require('./chunk-S7Y6AP64.cjs');
var chunkJ5RVSM7H_cjs = require('./chunk-J5RVSM7H.cjs');
var chunkUL3UXUNU_cjs = require('./chunk-UL3UXUNU.cjs');
var chunkYQIMII7K_cjs = require('./chunk-YQIMII7K.cjs');
var chunkIUYVKYLU_cjs = require('./chunk-IUYVKYLU.cjs');
var chunkA7MIAAKW_cjs = require('./chunk-A7MIAAKW.cjs');
var chunkPPJXCZCX_cjs = require('./chunk-PPJXCZCX.cjs');
var chunkH5LNJS3E_cjs = require('./chunk-H5LNJS3E.cjs');
var chunk2CMAB3SO_cjs = require('./chunk-2CMAB3SO.cjs');
var chunkN752ZCPA_cjs = require('./chunk-N752ZCPA.cjs');
var chunkOLYSNWQP_cjs = require('./chunk-OLYSNWQP.cjs');
var chunkD3NGCHN4_cjs = require('./chunk-D3NGCHN4.cjs');
var chunkXOBJYUKX_cjs = require('./chunk-XOBJYUKX.cjs');
var chunkT2P7FDNG_cjs = require('./chunk-T2P7FDNG.cjs');
var chunkLERI4STI_cjs = require('./chunk-LERI4STI.cjs');
var chunkWCTXV424_cjs = require('./chunk-WCTXV424.cjs');
var chunkTH7EIZLU_cjs = require('./chunk-TH7EIZLU.cjs');
var chunkJ4B6JVWR_cjs = require('./chunk-J4B6JVWR.cjs');
var chunkUSKSOKOS_cjs = require('./chunk-USKSOKOS.cjs');
var chunkLVCJ4W5T_cjs = require('./chunk-LVCJ4W5T.cjs');
var chunkW243A6ZK_cjs = require('./chunk-W243A6ZK.cjs');
var chunkSOCH5SNI_cjs = require('./chunk-SOCH5SNI.cjs');
var chunk55DF3BIU_cjs = require('./chunk-55DF3BIU.cjs');
var chunkNKG3PCTS_cjs = require('./chunk-NKG3PCTS.cjs');
var chunk52QOAXPM_cjs = require('./chunk-52QOAXPM.cjs');
// src/server/server-adapter/routes/permissions.ts
var METHOD_TO_ACTION = {
GET: "read",
POST: "write",
// Default for POST, may be overridden to 'execute'
PUT: "write",
PATCH: "write",
DELETE: "delete"
};
var EXECUTE_PATTERNS = [
"/generate",
"/stream",
"/execute",
"/start",
"/resume",
"/restart",
"/cancel",
"/approve",
"/decline",
"/speak",
"/listen",
"/query",
"/search",
"/observe",
"/time-travel",
"/enhance",
"/clone"
];
var PUBLISH_PATTERNS = ["/publish", "/activate", "/restore"];
var STORED_RESOURCE_SEGMENTS = {
agents: "stored-agents",
"mcp-clients": "stored-mcp-clients",
"prompt-blocks": "stored-prompt-blocks",
scorers: "stored-scorers",
skills: "stored-skills",
workspaces: "stored-workspaces"
};
function extractResource(path) {
const segments = path.replace(/^\//, "").split("/");
if (segments.length === 0) {
return null;
}
const firstSegment = segments[0];
if (firstSegment === "stored" && segments[1]) {
return STORED_RESOURCE_SEGMENTS[segments[1]] ?? null;
}
if (firstSegment === ".well-known") {
return "a2a";
}
return firstSegment || null;
}
function deriveAction(method, path) {
const upperMethod = method.toUpperCase();
if (upperMethod === "POST") {
if (path.startsWith("/stored/")) {
const isPublishOperation = PUBLISH_PATTERNS.some((pattern) => path.endsWith(pattern));
if (isPublishOperation) {
return "publish";
}
}
const isExecuteOperation = EXECUTE_PATTERNS.some((pattern) => path.includes(pattern));
return isExecuteOperation ? "execute" : "write";
}
return METHOD_TO_ACTION[upperMethod] || "read";
}
function derivePermission(route) {
if (route.method === "ALL") {
return null;
}
const resource = extractResource(route.path);
if (!resource) {
return null;
}
const action = deriveAction(route.method, route.path);
return `${resource}:${action}`;
}
function getEffectivePermission(route) {
if (route.requiresAuth === false) {
return null;
}
if (route.requiresPermission) {
return route.requiresPermission;
}
return derivePermission(route);
}
// src/server/server-adapter/routes/a2a.ts
var A2A_ROUTES = [chunkLVCJ4W5T_cjs.GET_AGENT_CARD_ROUTE, chunkLVCJ4W5T_cjs.AGENT_EXECUTION_ROUTE];
// src/server/server-adapter/routes/agent-builder.ts
var AGENT_BUILDER_ROUTES = [
chunk55DF3BIU_cjs.LIST_AGENT_BUILDER_ACTIONS_ROUTE,
chunk55DF3BIU_cjs.GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,
chunk55DF3BIU_cjs.LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,
chunk55DF3BIU_cjs.GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,
chunk55DF3BIU_cjs.CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,
chunk55DF3BIU_cjs.STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.START_AGENT_BUILDER_ACTION_RUN_ROUTE,
chunk55DF3BIU_cjs.OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.RESUME_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunk55DF3BIU_cjs.CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE
];
// src/server/server-adapter/routes/agent-controller.ts
var AGENT_CONTROLLER_ROUTES = [
chunk52QOAXPM_cjs.LIST_AGENT_CONTROLLERS_ROUTE,
chunk52QOAXPM_cjs.LIST_AGENT_CONTROLLER_MODES_ROUTE,
chunk52QOAXPM_cjs.LIST_AGENT_CONTROLLER_MODELS_ROUTE,
chunk52QOAXPM_cjs.CREATE_AGENT_CONTROLLER_SESSION_ROUTE,
chunk52QOAXPM_cjs.GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE,
chunk52QOAXPM_cjs.LIST_AGENT_CONTROLLER_THREADS_ROUTE,
chunk52QOAXPM_cjs.CREATE_AGENT_CONTROLLER_THREAD_ROUTE,
chunk52QOAXPM_cjs.DELETE_AGENT_CONTROLLER_THREAD_ROUTE,
chunk52QOAXPM_cjs.RENAME_AGENT_CONTROLLER_THREAD_ROUTE,
chunk52QOAXPM_cjs.CLONE_AGENT_CONTROLLER_THREAD_ROUTE,
chunk52QOAXPM_cjs.LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE,
chunk52QOAXPM_cjs.STREAM_AGENT_CONTROLLER_SESSION_ROUTE,
chunk52QOAXPM_cjs.SEND_AGENT_CONTROLLER_MESSAGE_ROUTE,
chunk52QOAXPM_cjs.STEER_AGENT_CONTROLLER_SESSION_ROUTE,
chunk52QOAXPM_cjs.FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE,
chunk52QOAXPM_cjs.ABORT_AGENT_CONTROLLER_SESSION_ROUTE,
chunk52QOAXPM_cjs.AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE,
chunk52QOAXPM_cjs.AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE,
chunk52QOAXPM_cjs.SWITCH_AGENT_CONTROLLER_MODE_ROUTE,
chunk52QOAXPM_cjs.SWITCH_AGENT_CONTROLLER_MODEL_ROUTE,
chunk52QOAXPM_cjs.SWITCH_AGENT_CONTROLLER_THREAD_ROUTE,
chunk52QOAXPM_cjs.SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE,
chunk52QOAXPM_cjs.GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE,
chunk52QOAXPM_cjs.GET_AGENT_CONTROLLER_OM_RECORD_ROUTE,
chunk52QOAXPM_cjs.SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE,
chunk52QOAXPM_cjs.GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE,
chunk52QOAXPM_cjs.GET_AGENT_CONTROLLER_GOAL_ROUTE,
chunk52QOAXPM_cjs.SET_AGENT_CONTROLLER_GOAL_ROUTE,
chunk52QOAXPM_cjs.UPDATE_AGENT_CONTROLLER_GOAL_ROUTE,
chunk52QOAXPM_cjs.CLEAR_AGENT_CONTROLLER_GOAL_ROUTE,
chunk52QOAXPM_cjs.GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE,
chunk52QOAXPM_cjs.SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE,
chunk52QOAXPM_cjs.SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE,
chunk52QOAXPM_cjs.SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE
];
// src/server/server-adapter/routes/agents.ts
var AGENTS_ROUTES = [
// ============================================================================
// Agent Core Routes
// ============================================================================
chunkW243A6ZK_cjs.LIST_AGENTS_ROUTE,
chunkW243A6ZK_cjs.GET_PROVIDERS_ROUTE,
chunkW243A6ZK_cjs.GET_AGENT_BY_ID_ROUTE,
chunkW243A6ZK_cjs.CLONE_AGENT_ROUTE,
// ============================================================================
// Voice Routes
// ============================================================================
chunk2CMAB3SO_cjs.GET_SPEAKERS_ROUTE,
chunk2CMAB3SO_cjs.GET_SPEAKERS_DEPRECATED_ROUTE,
// ============================================================================
// Agent Execution Routes
// ============================================================================
chunkW243A6ZK_cjs.GENERATE_AGENT_ROUTE,
chunkW243A6ZK_cjs.GENERATE_AGENT_VNEXT_ROUTE,
chunkW243A6ZK_cjs.STREAM_GENERATE_ROUTE,
chunkW243A6ZK_cjs.STREAM_UNTIL_IDLE_GENERATE_ROUTE,
chunkW243A6ZK_cjs.STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,
// ============================================================================
// Resumable Stream Routes
// ============================================================================
chunkW243A6ZK_cjs.OBSERVE_AGENT_STREAM_ROUTE,
chunkW243A6ZK_cjs.SEND_AGENT_MESSAGE_ROUTE,
chunkW243A6ZK_cjs.QUEUE_AGENT_MESSAGE_ROUTE,
chunkW243A6ZK_cjs.SEND_AGENT_SIGNAL_ROUTE,
chunkW243A6ZK_cjs.ABORT_AGENT_THREAD_ROUTE,
chunkW243A6ZK_cjs.SUBSCRIBE_AGENT_THREAD_ROUTE,
// ============================================================================
// Tool Routes
// ============================================================================
chunkOLYSNWQP_cjs.EXECUTE_AGENT_TOOL_ROUTE,
chunkW243A6ZK_cjs.APPROVE_TOOL_CALL_ROUTE,
chunkW243A6ZK_cjs.SEND_TOOL_APPROVAL_ROUTE,
chunkW243A6ZK_cjs.LIST_SUSPENDED_RUNS_ROUTE,
chunkW243A6ZK_cjs.DECLINE_TOOL_CALL_ROUTE,
chunkW243A6ZK_cjs.RESUME_STREAM_ROUTE,
chunkW243A6ZK_cjs.RECOVER_ROUTE,
chunkW243A6ZK_cjs.APPROVE_TOOL_CALL_GENERATE_ROUTE,
chunkW243A6ZK_cjs.DECLINE_TOOL_CALL_GENERATE_ROUTE,
chunkW243A6ZK_cjs.APPROVE_NETWORK_TOOL_CALL_ROUTE,
chunkW243A6ZK_cjs.DECLINE_NETWORK_TOOL_CALL_ROUTE,
chunkW243A6ZK_cjs.RESUME_STREAM_UNTIL_IDLE_ROUTE,
// ============================================================================
// Network Routes
// ============================================================================
chunkW243A6ZK_cjs.STREAM_NETWORK_ROUTE,
// ============================================================================
// Model Management Routes
// ============================================================================
chunkW243A6ZK_cjs.UPDATE_AGENT_MODEL_ROUTE,
chunkW243A6ZK_cjs.RESET_AGENT_MODEL_ROUTE,
chunkW243A6ZK_cjs.REORDER_AGENT_MODEL_LIST_ROUTE,
chunkW243A6ZK_cjs.UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,
// ============================================================================
// Instruction Enhancement Routes
// ============================================================================
chunkW243A6ZK_cjs.ENHANCE_INSTRUCTIONS_ROUTE,
// ============================================================================
// Agent Tool Routes
// ============================================================================
chunkOLYSNWQP_cjs.GET_AGENT_TOOL_ROUTE,
// ============================================================================
// Agent Skill Routes
// ============================================================================
chunkW243A6ZK_cjs.GET_AGENT_SKILL_ROUTE,
// ============================================================================
// Voice/Speech Routes
// ============================================================================
chunk2CMAB3SO_cjs.GENERATE_SPEECH_ROUTE,
chunk2CMAB3SO_cjs.GENERATE_SPEECH_DEPRECATED_ROUTE,
chunk2CMAB3SO_cjs.TRANSCRIBE_SPEECH_ROUTE,
chunk2CMAB3SO_cjs.TRANSCRIBE_SPEECH_DEPRECATED_ROUTE,
chunk2CMAB3SO_cjs.GET_LISTENER_ROUTE,
// ============================================================================
// Deprecated Routes
// ============================================================================
chunkW243A6ZK_cjs.STREAM_VNEXT_DEPRECATED_ROUTE,
chunkW243A6ZK_cjs.STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,
chunkW243A6ZK_cjs.STREAM_UI_MESSAGE_DEPRECATED_ROUTE
];
// src/server/server-adapter/routes/background-tasks.ts
var BACKGROUND_TASK_ROUTES = [
chunkIUYVKYLU_cjs.BACKGROUND_TASK_STREAM_ROUTE,
chunkIUYVKYLU_cjs.LIST_BACKGROUND_TASKS_ROUTE,
chunkIUYVKYLU_cjs.GET_BACKGROUND_TASK_ROUTE
];
// src/server/server-adapter/routes/channels.ts
var CHANNELS_ROUTES = [
chunkPPJXCZCX_cjs.LIST_CHANNEL_PLATFORMS_ROUTE,
chunkPPJXCZCX_cjs.LIST_CHANNEL_INSTALLATIONS_ROUTE,
chunkPPJXCZCX_cjs.CONNECT_CHANNEL_ROUTE,
chunkPPJXCZCX_cjs.DISCONNECT_CHANNEL_ROUTE
];
// src/server/server-adapter/routes/conversations.ts
var CONVERSATIONS_ROUTES = [
chunkJ4B6JVWR_cjs.CREATE_CONVERSATION_ROUTE,
chunkJ4B6JVWR_cjs.GET_CONVERSATION_ROUTE,
chunkJ4B6JVWR_cjs.GET_CONVERSATION_ITEMS_ROUTE,
chunkJ4B6JVWR_cjs.DELETE_CONVERSATION_ROUTE
];
// src/server/server-adapter/routes/datasets.ts
var DATASETS_ROUTES = [
// Dataset CRUD
chunkS7Y6AP64_cjs.LIST_DATASETS_ROUTE,
chunkS7Y6AP64_cjs.CREATE_DATASET_ROUTE,
chunkS7Y6AP64_cjs.GET_DATASET_ROUTE,
chunkS7Y6AP64_cjs.UPDATE_DATASET_ROUTE,
chunkS7Y6AP64_cjs.DELETE_DATASET_ROUTE,
// Item list and add
chunkS7Y6AP64_cjs.LIST_ITEMS_ROUTE,
chunkS7Y6AP64_cjs.ADD_ITEM_ROUTE,
// Batch operations - MUST come before item-specific routes to avoid /items/batch matching /items/:itemId
chunkS7Y6AP64_cjs.BATCH_INSERT_ITEMS_ROUTE,
chunkS7Y6AP64_cjs.BATCH_DELETE_ITEMS_ROUTE,
// Item-specific CRUD (uses :itemId param)
chunkS7Y6AP64_cjs.GET_ITEM_ROUTE,
chunkS7Y6AP64_cjs.UPDATE_ITEM_ROUTE,
chunkS7Y6AP64_cjs.DELETE_ITEM_ROUTE,
// Version operations
chunkS7Y6AP64_cjs.LIST_DATASET_VERSIONS_ROUTE,
chunkS7Y6AP64_cjs.LIST_ITEM_VERSIONS_ROUTE,
chunkS7Y6AP64_cjs.GET_ITEM_VERSION_ROUTE,
// All experiments (cross-dataset) - MUST come before dataset-scoped experiments
chunkS7Y6AP64_cjs.LIST_ALL_EXPERIMENTS_ROUTE,
// Experiment review summary (cross-dataset) - MUST come before dataset-scoped experiments
chunkS7Y6AP64_cjs.EXPERIMENT_REVIEW_SUMMARY_ROUTE,
// Experiment operations (dataset-scoped)
chunkS7Y6AP64_cjs.LIST_EXPERIMENTS_ROUTE,
chunkS7Y6AP64_cjs.TRIGGER_EXPERIMENT_ROUTE,
chunkS7Y6AP64_cjs.GET_EXPERIMENT_ROUTE,
chunkS7Y6AP64_cjs.LIST_EXPERIMENT_RESULTS_ROUTE,
chunkS7Y6AP64_cjs.UPDATE_EXPERIMENT_RESULT_ROUTE,
// Analytics
chunkS7Y6AP64_cjs.COMPARE_EXPERIMENTS_ROUTE,
// AI generation
chunkS7Y6AP64_cjs.GENERATE_ITEMS_ROUTE,
// Failure analysis
chunkS7Y6AP64_cjs.CLUSTER_FAILURES_ROUTE
];
// src/server/server-adapter/routes/editor-builder.ts
var EDITOR_BUILDER_ROUTES = [
chunkJ5RVSM7H_cjs.GET_EDITOR_BUILDER_SETTINGS_ROUTE,
chunkJ5RVSM7H_cjs.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE,
chunkJ5RVSM7H_cjs.GET_INFRASTRUCTURE_STATUS_ROUTE,
chunkA7MIAAKW_cjs.LIST_BUILDER_REGISTRIES_ROUTE,
chunkA7MIAAKW_cjs.BUILDER_REGISTRY_SEARCH_ROUTE,
chunkA7MIAAKW_cjs.BUILDER_REGISTRY_POPULAR_ROUTE,
chunkA7MIAAKW_cjs.BUILDER_REGISTRY_PREVIEW_ROUTE,
chunkA7MIAAKW_cjs.BUILDER_REGISTRY_INSTALL_ROUTE
];
// src/server/server-adapter/routes/legacy.ts
var LEGACY_ROUTES = [
// ============================================================================
// Legacy Agent Routes
// ============================================================================
chunkW243A6ZK_cjs.GENERATE_LEGACY_ROUTE,
chunkW243A6ZK_cjs.STREAM_GENERATE_LEGACY_ROUTE,
// ============================================================================
// Legacy Workflow Routes
// ============================================================================
chunkNKG3PCTS_cjs.STREAM_LEGACY_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE
];
// src/server/server-adapter/routes/logs.ts
var LOGS_ROUTES = [chunkUSKSOKOS_cjs.LIST_LOG_TRANSPORTS_ROUTE, chunkUSKSOKOS_cjs.LIST_LOGS_ROUTE, chunkUSKSOKOS_cjs.LIST_LOGS_BY_RUN_ID_ROUTE];
// src/server/server-adapter/routes/mcp.ts
var MCP_ROUTES = [
// ============================================================================
// MCP Server Registry Routes
// ============================================================================
chunkT2P7FDNG_cjs.LIST_MCP_SERVERS_ROUTE,
chunkT2P7FDNG_cjs.GET_MCP_SERVER_DETAIL_ROUTE,
// ============================================================================
// MCP Server Tool Routes
// ============================================================================
chunkT2P7FDNG_cjs.LIST_MCP_SERVER_TOOLS_ROUTE,
chunkT2P7FDNG_cjs.GET_MCP_SERVER_TOOL_DETAIL_ROUTE,
chunkT2P7FDNG_cjs.EXECUTE_MCP_SERVER_TOOL_ROUTE,
// ============================================================================
// MCP Server Resource Routes
// ============================================================================
chunkT2P7FDNG_cjs.LIST_MCP_SERVER_RESOURCES_ROUTE,
chunkT2P7FDNG_cjs.READ_MCP_SERVER_RESOURCE_ROUTE,
// ============================================================================
// MCP Transport Routes (handled by adapters)
// ============================================================================
chunkT2P7FDNG_cjs.MCP_HTTP_TRANSPORT_ROUTE,
chunkT2P7FDNG_cjs.MCP_SSE_TRANSPORT_ROUTE,
chunkT2P7FDNG_cjs.MCP_SSE_MESSAGES_ROUTE
];
// src/server/server-adapter/routes/memory.ts
var MEMORY_ROUTES = [
chunkLERI4STI_cjs.GET_MEMORY_STATUS_ROUTE,
chunkLERI4STI_cjs.GET_MEMORY_CONFIG_ROUTE,
chunkLERI4STI_cjs.GET_OBSERVATIONAL_MEMORY_ROUTE,
chunkLERI4STI_cjs.AWAIT_BUFFER_STATUS_ROUTE,
chunkLERI4STI_cjs.LIST_THREADS_ROUTE,
chunkLERI4STI_cjs.GET_THREAD_BY_ID_ROUTE,
chunkLERI4STI_cjs.LIST_MESSAGES_ROUTE,
chunkLERI4STI_cjs.GET_WORKING_MEMORY_ROUTE,
chunkLERI4STI_cjs.SAVE_MESSAGES_ROUTE,
chunkLERI4STI_cjs.CREATE_THREAD_ROUTE,
chunkLERI4STI_cjs.UPDATE_THREAD_ROUTE,
chunkLERI4STI_cjs.DELETE_THREAD_ROUTE,
chunkLERI4STI_cjs.CLONE_THREAD_ROUTE,
chunkLERI4STI_cjs.UPDATE_WORKING_MEMORY_ROUTE,
chunkLERI4STI_cjs.DELETE_MESSAGES_ROUTE,
chunkLERI4STI_cjs.SEARCH_MEMORY_ROUTE,
chunkLERI4STI_cjs.GET_MEMORY_STATUS_NETWORK_ROUTE,
chunkLERI4STI_cjs.LIST_THREADS_NETWORK_ROUTE,
chunkLERI4STI_cjs.GET_THREAD_BY_ID_NETWORK_ROUTE,
chunkLERI4STI_cjs.LIST_MESSAGES_NETWORK_ROUTE,
chunkLERI4STI_cjs.SAVE_MESSAGES_NETWORK_ROUTE,
chunkLERI4STI_cjs.CREATE_THREAD_NETWORK_ROUTE,
chunkLERI4STI_cjs.UPDATE_THREAD_NETWORK_ROUTE,
chunkLERI4STI_cjs.DELETE_THREAD_NETWORK_ROUTE,
chunkLERI4STI_cjs.DELETE_MESSAGES_NETWORK_ROUTE
];
// src/server/server-adapter/routes/observability.ts
var OBSERVABILITY_ROUTES = [
// Legacy
chunkWCTXV424_cjs.LIST_TRACES_ROUTE,
chunkWCTXV424_cjs.LIST_TRACES_LIGHT_ROUTE,
chunkWCTXV424_cjs.LIST_BRANCHES_ROUTE,
chunkWCTXV424_cjs.GET_BRANCH_ROUTE,
chunkWCTXV424_cjs.GET_TRACE_ROUTE,
chunkWCTXV424_cjs.GET_TRACE_LIGHT_ROUTE,
chunkWCTXV424_cjs.GET_SPAN_ROUTE,
chunkWCTXV424_cjs.GET_TRACE_TRAJECTORY_ROUTE,
chunkWCTXV424_cjs.SCORE_TRACES_ROUTE,
chunkWCTXV424_cjs.LIST_SCORES_BY_SPAN_ROUTE,
// New observability routes
chunkTH7EIZLU_cjs.LIST_METRICS,
chunkTH7EIZLU_cjs.LIST_LOGS,
chunkTH7EIZLU_cjs.LIST_SCORES,
chunkTH7EIZLU_cjs.CREATE_SCORE,
chunkTH7EIZLU_cjs.GET_SCORE,
chunkTH7EIZLU_cjs.GET_SCORE_AGGREGATE,
chunkTH7EIZLU_cjs.GET_SCORE_BREAKDOWN,
chunkTH7EIZLU_cjs.GET_SCORE_TIME_SERIES,
chunkTH7EIZLU_cjs.GET_SCORE_PERCENTILES,
chunkTH7EIZLU_cjs.LIST_FEEDBACK,
chunkTH7EIZLU_cjs.CREATE_FEEDBACK,
chunkTH7EIZLU_cjs.GET_FEEDBACK_AGGREGATE,
chunkTH7EIZLU_cjs.GET_FEEDBACK_BREAKDOWN,
chunkTH7EIZLU_cjs.GET_FEEDBACK_TIME_SERIES,
chunkTH7EIZLU_cjs.GET_FEEDBACK_PERCENTILES,
chunkTH7EIZLU_cjs.GET_METRIC_AGGREGATE,
chunkTH7EIZLU_cjs.GET_METRIC_BREAKDOWN,
chunkTH7EIZLU_cjs.GET_METRIC_TIME_SERIES,
chunkTH7EIZLU_cjs.GET_METRIC_PERCENTILES,
chunkTH7EIZLU_cjs.GET_METRIC_NAMES,
chunkTH7EIZLU_cjs.GET_METRIC_LABEL_KEYS,
chunkTH7EIZLU_cjs.GET_METRIC_LABEL_VALUES,
chunkTH7EIZLU_cjs.GET_ENTITY_TYPES,
chunkTH7EIZLU_cjs.GET_ENTITY_NAMES,
chunkTH7EIZLU_cjs.GET_SERVICE_NAMES,
chunkTH7EIZLU_cjs.GET_ENVIRONMENTS,
chunkTH7EIZLU_cjs.GET_TAGS
];
// src/server/server-adapter/routes/processor-providers.ts
var PROCESSOR_PROVIDER_ROUTES = [chunkABAQRIVF_cjs.LIST_PROCESSOR_PROVIDERS_ROUTE, chunkABAQRIVF_cjs.GET_PROCESSOR_PROVIDER_ROUTE];
// src/server/server-adapter/routes/processors.ts
var PROCESSORS_ROUTES = [chunkG7VOOYJX_cjs.LIST_PROCESSORS_ROUTE, chunkG7VOOYJX_cjs.GET_PROCESSOR_BY_ID_ROUTE, chunkG7VOOYJX_cjs.EXECUTE_PROCESSOR_ROUTE];
// src/server/server-adapter/routes/responses.ts
var RESPONSES_ROUTES = [chunkXOBJYUKX_cjs.CREATE_RESPONSE_ROUTE, chunkXOBJYUKX_cjs.GET_RESPONSE_ROUTE, chunkXOBJYUKX_cjs.DELETE_RESPONSE_ROUTE];
// src/server/server-adapter/routes/schedules.ts
var SCHEDULES_ROUTES = [
chunkHWACFNNH_cjs.LIST_SCHEDULES_ROUTE,
chunkHWACFNNH_cjs.GET_SCHEDULE_ROUTE,
chunkHWACFNNH_cjs.CREATE_SCHEDULE_ROUTE,
chunkHWACFNNH_cjs.UPDATE_SCHEDULE_ROUTE,
chunkHWACFNNH_cjs.DELETE_SCHEDULE_ROUTE,
chunkHWACFNNH_cjs.LIST_SCHEDULE_TRIGGERS_ROUTE,
chunkHWACFNNH_cjs.PAUSE_SCHEDULE_ROUTE,
chunkHWACFNNH_cjs.RESUME_SCHEDULE_ROUTE,
chunkHWACFNNH_cjs.RUN_SCHEDULE_ROUTE
];
// src/server/server-adapter/routes/scorers.ts
var SCORES_ROUTES = [
chunkD3NGCHN4_cjs.LIST_SCORERS_ROUTE,
chunkD3NGCHN4_cjs.GET_SCORER_ROUTE,
chunkD3NGCHN4_cjs.LIST_SCORES_BY_RUN_ID_ROUTE,
chunkD3NGCHN4_cjs.LIST_SCORES_BY_SCORER_ID_ROUTE,
chunkD3NGCHN4_cjs.LIST_SCORES_BY_ENTITY_ID_ROUTE,
chunkD3NGCHN4_cjs.SAVE_SCORE_ROUTE
];
// src/server/server-adapter/routes/stored-agents.ts
var STORED_AGENTS_ROUTES = [
// ============================================================================
// Stored Agents CRUD Routes
// IMPORTANT: Routes with literal paths (e.g., /preview-instructions) must come
// BEFORE routes with path parameters (e.g., /:storedAgentId) to ensure correct matching.
// ============================================================================
chunkERJ75YLP_cjs.LIST_STORED_AGENTS_ROUTE,
chunkERJ75YLP_cjs.PREVIEW_INSTRUCTIONS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkERJ75YLP_cjs.GET_STORED_AGENT_DEPENDENTS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE (longer literal)
chunkERJ75YLP_cjs.EXPORT_STORED_AGENT_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkERJ75YLP_cjs.OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkERJ75YLP_cjs.GET_STORED_AGENT_ROUTE,
chunkERJ75YLP_cjs.CREATE_STORED_AGENT_ROUTE,
chunkERJ75YLP_cjs.UPDATE_STORED_AGENT_ROUTE,
chunkERJ75YLP_cjs.DELETE_STORED_AGENT_ROUTE,
// ============================================================================
// Agent Versions Routes
// IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE
// routes with path parameters (e.g., /:versionId) to ensure correct matching.
// ============================================================================
chunkYQIMII7K_cjs.LIST_AGENT_VERSIONS_ROUTE,
chunkYQIMII7K_cjs.CREATE_AGENT_VERSION_ROUTE,
chunkYQIMII7K_cjs.COMPARE_AGENT_VERSIONS_ROUTE,
// Must be before GET_AGENT_VERSION_ROUTE
chunkYQIMII7K_cjs.GET_AGENT_VERSION_ROUTE,
chunkYQIMII7K_cjs.ACTIVATE_AGENT_VERSION_ROUTE,
chunkYQIMII7K_cjs.RESTORE_AGENT_VERSION_ROUTE,
chunkYQIMII7K_cjs.DELETE_AGENT_VERSION_ROUTE,
// ============================================================================
// Favorites (EE)
// ============================================================================
chunkJBH7K7YB_cjs.FAVORITE_STORED_AGENT_ROUTE,
chunkJBH7K7YB_cjs.UNFAVORITE_STORED_AGENT_ROUTE
];
// src/server/server-adapter/routes/stored-mcp-clients.ts
var STORED_MCP_CLIENTS_ROUTES = [
// Stored MCP Clients CRUD Routes
chunkW543ZJQB_cjs.LIST_STORED_MCP_CLIENTS_ROUTE,
chunkW543ZJQB_cjs.GET_STORED_MCP_CLIENT_ROUTE,
chunkW543ZJQB_cjs.CREATE_STORED_MCP_CLIENT_ROUTE,
chunkW543ZJQB_cjs.UPDATE_STORED_MCP_CLIENT_ROUTE,
chunkW543ZJQB_cjs.DELETE_STORED_MCP_CLIENT_ROUTE,
// MCP Client Versions Routes
// IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE
// routes with path parameters (e.g., /:versionId) to ensure correct matching.
chunkUL3UXUNU_cjs.LIST_MCP_CLIENT_VERSIONS_ROUTE,
chunkUL3UXUNU_cjs.CREATE_MCP_CLIENT_VERSION_ROUTE,
chunkUL3UXUNU_cjs.COMPARE_MCP_CLIENT_VERSIONS_ROUTE,
chunkUL3UXUNU_cjs.GET_MCP_CLIENT_VERSION_ROUTE,
chunkUL3UXUNU_cjs.ACTIVATE_MCP_CLIENT_VERSION_ROUTE,
chunkUL3UXUNU_cjs.RESTORE_MCP_CLIENT_VERSION_ROUTE,
chunkUL3UXUNU_cjs.DELETE_MCP_CLIENT_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-prompt-blocks.ts
var STORED_PROMPT_BLOCKS_ROUTES = [
// Stored Prompt Blocks CRUD Routes
chunkNTS3DORC_cjs.LIST_STORED_PROMPT_BLOCKS_ROUTE,
chunkNTS3DORC_cjs.GET_STORED_PROMPT_BLOCK_ROUTE,
chunkNTS3DORC_cjs.CREATE_STORED_PROMPT_BLOCK_ROUTE,
chunkNTS3DORC_cjs.UPDATE_STORED_PROMPT_BLOCK_ROUTE,
chunkNTS3DORC_cjs.DELETE_STORED_PROMPT_BLOCK_ROUTE,
// Prompt Block Versions Routes
// IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE
// routes with path parameters (e.g., /:versionId) to ensure correct matching.
chunkGHTMFCWF_cjs.LIST_PROMPT_BLOCK_VERSIONS_ROUTE,
chunkGHTMFCWF_cjs.CREATE_PROMPT_BLOCK_VERSION_ROUTE,
chunkGHTMFCWF_cjs.COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE,
chunkGHTMFCWF_cjs.GET_PROMPT_BLOCK_VERSION_ROUTE,
chunkGHTMFCWF_cjs.ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE,
chunkGHTMFCWF_cjs.RESTORE_PROMPT_BLOCK_VERSION_ROUTE,
chunkGHTMFCWF_cjs.DELETE_PROMPT_BLOCK_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-scorers.ts
var STORED_SCORERS_ROUTES = [
// Stored Scorers CRUD Routes
chunkV3HBNBLU_cjs.LIST_STORED_SCORERS_ROUTE,
chunkV3HBNBLU_cjs.GET_STORED_SCORER_ROUTE,
chunkV3HBNBLU_cjs.CREATE_STORED_SCORER_ROUTE,
chunkV3HBNBLU_cjs.UPDATE_STORED_SCORER_ROUTE,
chunkV3HBNBLU_cjs.DELETE_STORED_SCORER_ROUTE,
// Scorer Versions Routes
// IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE
// routes with path parameters (e.g., /:versionId) to ensure correct matching.
chunkONVWPSQD_cjs.LIST_SCORER_VERSIONS_ROUTE,
chunkONVWPSQD_cjs.CREATE_SCORER_VERSION_ROUTE,
chunkONVWPSQD_cjs.COMPARE_SCORER_VERSIONS_ROUTE,
chunkONVWPSQD_cjs.GET_SCORER_VERSION_ROUTE,
chunkONVWPSQD_cjs.ACTIVATE_SCORER_VERSION_ROUTE,
chunkONVWPSQD_cjs.RESTORE_SCORER_VERSION_ROUTE,
chunkONVWPSQD_cjs.DELETE_SCORER_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-skills.ts
var STORED_SKILLS_ROUTES = [
// Stored Skills CRUD Routes
chunkALPAZYZR_cjs.LIST_STORED_SKILLS_ROUTE,
chunkALPAZYZR_cjs.GET_STORED_SKILL_ROUTE,
chunkALPAZYZR_cjs.CREATE_STORED_SKILL_ROUTE,
chunkALPAZYZR_cjs.UPDATE_STORED_SKILL_ROUTE,
chunkALPAZYZR_cjs.DELETE_STORED_SKILL_ROUTE,
// Publish
chunkALPAZYZR_cjs.PUBLISH_STORED_SKILL_ROUTE,
// Favorites (EE)
chunkO4DW75OM_cjs.FAVORITE_STORED_SKILL_ROUTE,
chunkO4DW75OM_cjs.UNFAVORITE_STORED_SKILL_ROUTE
];
// src/server/server-adapter/routes/stored-workspaces.ts
var STORED_WORKSPACES_ROUTES = [
// Stored Workspaces CRUD Routes
chunk7X3YWKHD_cjs.LIST_STORED_WORKSPACES_ROUTE,
chunk7X3YWKHD_cjs.GET_STORED_WORKSPACE_ROUTE,
chunk7X3YWKHD_cjs.CREATE_STORED_WORKSPACE_ROUTE,
chunk7X3YWKHD_cjs.UPDATE_STORED_WORKSPACE_ROUTE,
chunk7X3YWKHD_cjs.DELETE_STORED_WORKSPACE_ROUTE
];
// src/server/server-adapter/routes/system.ts
var SYSTEM_ROUTES = [chunkS7XHYPBN_cjs.GET_SYSTEM_PACKAGES_ROUTE, chunkS7XHYPBN_cjs.GET_API_SCHEMA_ROUTE];
// src/server/server-adapter/routes/tool-providers.ts
var TOOL_PROVIDER_ROUTES = [
chunkOCDUNF52_cjs.LIST_TOOL_PROVIDERS_ROUTE,
chunkOCDUNF52_cjs.LIST_TOOL_PROVIDER_TOOLKITS_ROUTE,
chunkOCDUNF52_cjs.LIST_TOOL_PROVIDER_TOOLS_ROUTE,
chunkOCDUNF52_cjs.GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE,
chunkOCDUNF52_cjs.AUTHORIZE_TOOL_PROVIDER_ROUTE,
chunkOCDUNF52_cjs.GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE,
chunkOCDUNF52_cjs.TOOL_PROVIDER_CONNECTION_STATUS_ROUTE,
chunkOCDUNF52_cjs.LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE,
chunkOCDUNF52_cjs.LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE,
chunkOCDUNF52_cjs.DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE,
chunkOCDUNF52_cjs.UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE,
chunkOCDUNF52_cjs.GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE,
chunkOCDUNF52_cjs.GET_TOOL_PROVIDER_HEALTH_ROUTE
];
// src/server/server-adapter/routes/tools.ts
var TOOLS_ROUTES = [chunkOLYSNWQP_cjs.LIST_TOOLS_ROUTE, chunkOLYSNWQP_cjs.GET_TOOL_BY_ID_ROUTE, chunkOLYSNWQP_cjs.EXECUTE_TOOL_ROUTE];
// src/server/server-adapter/routes/vectors.ts
var VECTORS_ROUTES = [
chunkH5LNJS3E_cjs.UPSERT_VECTORS_ROUTE,
chunkH5LNJS3E_cjs.CREATE_INDEX_ROUTE,
chunkH5LNJS3E_cjs.QUERY_VECTORS_ROUTE,
chunkH5LNJS3E_cjs.LIST_INDEXES_ROUTE,
chunkH5LNJS3E_cjs.DESCRIBE_INDEX_ROUTE,
chunkH5LNJS3E_cjs.DELETE_INDEX_ROUTE,
chunkH5LNJS3E_cjs.LIST_VECTORS_ROUTE,
chunkH5LNJS3E_cjs.LIST_EMBEDDERS_ROUTE
];
// src/server/server-adapter/routes/workflows.ts
var WORKFLOWS_ROUTES = [
chunkNKG3PCTS_cjs.LIST_WORKFLOWS_ROUTE,
chunkNKG3PCTS_cjs.GET_WORKFLOW_BY_ID_ROUTE,
chunkNKG3PCTS_cjs.LIST_WORKFLOW_RUNS_ROUTE,
chunkNKG3PCTS_cjs.GET_WORKFLOW_RUN_BY_ID_ROUTE,
chunkNKG3PCTS_cjs.DELETE_WORKFLOW_RUN_BY_ID_ROUTE,
chunkNKG3PCTS_cjs.CREATE_WORKFLOW_RUN_ROUTE,
chunkNKG3PCTS_cjs.STREAM_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.RESUME_STREAM_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.START_ASYNC_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.START_WORKFLOW_RUN_ROUTE,
chunkNKG3PCTS_cjs.OBSERVE_STREAM_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.RESUME_ASYNC_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.RESUME_NO_WAIT_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.RESUME_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.CANCEL_WORKFLOW_RUN_ROUTE,
chunkNKG3PCTS_cjs.TIME_TRAVEL_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.RESTART_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.RESTART_ASYNC_WORKFLOW_ROUTE,
chunkNKG3PCTS_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,
chunkNKG3PCTS_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,
chunkNKG3PCTS_cjs.EXECUTE_WORKFLOW_STEP_ROUTE,
chunkNKG3PCTS_cjs.RECEIVE_WORKFLOW_EVENT_ROUTE
];
// src/server/server-adapter/routes/workspace.ts
var WORKSPACE_ROUTES = [
// List all workspaces route (at /api/workspaces)
chunkN752ZCPA_cjs.LIST_WORKSPACES_ROUTE,
// Get workspace route (at /api/workspaces/:workspaceId)
chunkN752ZCPA_cjs.GET_WORKSPACE_ROUTE,
// Filesystem routes (at /api/workspaces/:workspaceId/fs/*)
...chunkN752ZCPA_cjs.WORKSPACE_FS_ROUTES,
// Search routes (at /api/workspaces/:workspaceId/search, /api/workspaces/:workspaceId/index)
...chunkN752ZCPA_cjs.WORKSPACE_SEARCH_ROUTES,
// Skills routes (search must come before parameterized routes)
...chunkN752ZCPA_cjs.WORKSPACE_SKILLS_ROUTES,
// skills.sh proxy routes (at /api/workspaces/:workspaceId/skills-sh/*)
...chunkN752ZCPA_cjs.WORKSPACE_SKILLS_SH_ROUTES
];
// src/server/server-adapter/routes/index.ts
var SERVER_ROUTES = [
...AGENTS_ROUTES,
...chunkSOCH5SNI_cjs.AUTH_ROUTES,
...WORKFLOWS_ROUTES,
...TOOLS_ROUTES,
...PROCESSORS_ROUTES,
...RESPONSES_ROUTES,
...CONVERSATIONS_ROUTES,
...MEMORY_ROUTES,
...SCORES_ROUTES,
...OBSERVABILITY_ROUTES,
...LOGS_ROUTES,
...VECTORS_ROUTES,
...A2A_ROUTES,
...WORKSPACE_ROUTES,
...LEGACY_ROUTES,
...MCP_ROUTES,
...STORED_AGENTS_ROUTES,
...STORED_MCP_CLIENTS_ROUTES,
...STORED_PROMPT_BLOCKS_ROUTES,
...STORED_SCORERS_ROUTES,
...STORED_WORKSPACES_ROUTES,
...STORED_SKILLS_ROUTES,
...TOOL_PROVIDER_ROUTES,
...PROCESSOR_PROVIDER_ROUTES,
...SYSTEM_ROUTES,
...DATASETS_ROUTES,
...BACKGROUND_TASK_ROUTES,
...EDITOR_BUILDER_ROUTES,
...AGENT_BUILDER_ROUTES,
...SCHEDULES_ROUTES,
...CHANNELS_ROUTES,
...AGENT_CONTROLLER_ROUTES
];
exports.SERVER_ROUTES = SERVER_ROUTES;
exports.deriveAction = deriveAction;
exports.derivePermission = derivePermission;
exports.extractResource = extractResource;
exports.getEffectivePermission = getEffectivePermission;
//# sourceMappingURL=chunk-FGH4I6PE.cjs.map
//# sourceMappingURL=chunk-FGH4I6PE.cjs.map

Sorry, the diff of this file is too big to display

import { apiSchemaManifestResponseSchema, systemPackagesResponseSchema } from './chunk-KXKAQQMV.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { readFileSync } from 'fs';
var SOURCE_PROVIDER_CAPABILITIES_TIMEOUT_MS = 3e3;
async function getSourceProviderCapabilities(getCapabilities) {
let timeout;
try {
return await Promise.race([
getCapabilities(),
new Promise((_, reject) => {
timeout = setTimeout(
() => reject(new Error("Source provider capabilities timed out")),
SOURCE_PROVIDER_CAPABILITIES_TIMEOUT_MS
);
})
]);
} finally {
if (timeout) clearTimeout(timeout);
}
}
async function getEditorSourceCapabilities(editor) {
const editorSource = editor.getSource?.();
if (!editorSource) return void 0;
if (editorSource === "db") {
return {
source: editorSource,
storage: "database",
canSave: true,
canOpenChangeRequest: false
};
}
const configuredProvider = editor.getSourceControlProvider?.();
if (configuredProvider) {
const provider = {
id: configuredProvider.id,
displayName: configuredProvider.displayName
};
try {
const capabilities = await getSourceProviderCapabilities(() => configuredProvider.getCapabilities());
return {
source: editorSource,
storage: "source-provider",
provider,
canSave: capabilities.canWrite,
canOpenChangeRequest: capabilities.canOpenChangeRequest,
unavailableReason: capabilities.canWrite ? void 0 : capabilities.reason
};
} catch {
return {
source: editorSource,
storage: "source-provider",
provider,
canSave: false,
canOpenChangeRequest: false,
unavailableReason: "Unable to load source provider capabilities."
};
}
}
const sourceProvider = process.env.MASTRA_SOURCE_PROVIDER;
if (sourceProvider) {
return {
source: editorSource,
storage: "source-provider",
provider: {
id: sourceProvider,
displayName: process.env.MASTRA_SOURCE_PROVIDER_NAME || sourceProvider
},
canSave: process.env.MASTRA_SOURCE_STORAGE_CAN_WRITE !== "false",
canOpenChangeRequest: process.env.MASTRA_SOURCE_STORAGE_CAN_OPEN_CHANGE_REQUEST === "true"
};
}
const isHosted = process.env.MASTRA_DEPLOYMENT_ID || process.env.MASTRA_CLOUD_API_ENDPOINT || process.env.MASTRA_PLATFORM_PROJECT_ID;
if (isHosted) {
return {
source: editorSource,
storage: "unavailable",
canSave: false,
canOpenChangeRequest: false,
unavailableReason: "Code-source editing requires a source provider in hosted Studio."
};
}
return {
source: editorSource,
storage: "filesystem",
canSave: true,
canOpenChangeRequest: false
};
}
var GET_API_SCHEMA_ROUTE = createRoute({
method: "GET",
path: "/system/api-schema",
responseType: "json",
responseSchema: apiSchemaManifestResponseSchema,
summary: "Get API schema manifest",
description: "Returns the route-contract-derived API schema manifest for the machine-readable CLI",
tags: ["System"],
requiresAuth: true,
handler: async () => {
const { buildApiSchemaManifest } = await import('./api-schema-manifest-RV6AS2KM.js');
return buildApiSchemaManifest();
}
});
var GET_SYSTEM_PACKAGES_ROUTE = createRoute({
method: "GET",
path: "/system/packages",
responseType: "json",
responseSchema: systemPackagesResponseSchema,
summary: "Get installed Mastra packages",
description: "Returns a list of all installed Mastra packages and their versions from the project",
tags: ["System"],
requiresAuth: true,
handler: async ({ mastra }) => {
try {
const packagesFilePath = process.env.MASTRA_PACKAGES_FILE;
let packages = [];
if (packagesFilePath) {
try {
const fileContent = readFileSync(packagesFilePath, "utf-8");
packages = JSON.parse(fileContent);
} catch {
packages = [];
}
}
const storage = mastra.getStorage();
const storageType = storage?.name;
const observabilityStorage = storage?.stores?.observability;
const observabilityStorageType = observabilityStorage?.constructor.name;
const observabilityStorageFeatures = observabilityStorage?.getFeatures?.();
const observabilityStorageCapabilities = observabilityStorageFeatures?.some(
(feature) => feature === "metrics" || feature === "logs"
) ? {
metrics: observabilityStorageFeatures.includes("metrics"),
logs: observabilityStorageFeatures.includes("logs")
} : void 0;
const observabilityRuntimeStrategy = observabilityStorage?.runtimeTracingStrategy;
const observabilityEnabled = !!mastra.observability.getDefaultInstance();
const editor = mastra.getEditor();
const editorSource = editor?.getSource?.();
const editorSourceCapabilities = editor ? await getEditorSourceCapabilities(editor) : void 0;
return {
packages,
isDev: process.env.MASTRA_DEV === "true",
cmsEnabled: !!editor,
editorSource,
editorSourceCapabilities,
observabilityEnabled,
storageType,
observabilityStorageType,
...observabilityStorageCapabilities ? { observabilityStorageCapabilities } : {},
observabilityRuntimeStrategy
};
} catch (error) {
return handleError(error, "Error getting system packages");
}
}
});
export { GET_API_SCHEMA_ROUTE, GET_SYSTEM_PACKAGES_ROUTE };
//# sourceMappingURL=chunk-I6TYCL4H.js.map
//# sourceMappingURL=chunk-I6TYCL4H.js.map
{"version":3,"sources":["../src/server/handlers/system.ts"],"names":[],"mappings":";;;;;AAOA,IAAM,uCAAA,GAA0C,GAAA;AAEhD,eAAe,8BACb,eAAA,EAKA;AACA,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,QAAQ,IAAA,CAAK;AAAA,MACxB,eAAA,EAAgB;AAAA,MAChB,IAAI,OAAA,CAAe,CAAC,CAAA,EAAG,MAAA,KAAW;AAChC,QAAA,OAAA,GAAU,UAAA;AAAA,UACR,MAAM,MAAA,CAAO,IAAI,KAAA,CAAM,wCAAwC,CAAC,CAAA;AAAA,UAChE;AAAA,SACF;AAAA,MACF,CAAC;AAAA,KACF,CAAA;AAAA,EACH,CAAA,SAAE;AACA,IAAA,IAAI,OAAA,eAAsB,OAAO,CAAA;AAAA,EACnC;AACF;AAEA,eAAe,4BAA4B,MAAA,EAaxC;AACD,EAAA,MAAM,YAAA,GAAe,OAAO,SAAA,IAAY;AACxC,EAAA,IAAI,CAAC,cAAc,OAAO,MAAA;AAE1B,EAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,YAAA;AAAA,MACR,OAAA,EAAS,UAAA;AAAA,MACT,OAAA,EAAS,IAAA;AAAA,MACT,oBAAA,EAAsB;AAAA,KACxB;AAAA,EACF;AAEA,EAAA,MAAM,kBAAA,GAAqB,OAAO,wBAAA,IAA2B;AAC7D,EAAA,IAAI,kBAAA,EAAoB;AACtB,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,IAAI,kBAAA,CAAmB,EAAA;AAAA,MACvB,aAAa,kBAAA,CAAmB;AAAA,KAClC;AACA,IAAA,IAAI;AACF,MAAA,MAAM,eAAe,MAAM,6BAAA,CAA8B,MAAM,kBAAA,CAAmB,iBAAiB,CAAA;AACnG,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,YAAA;AAAA,QACR,OAAA,EAAS,iBAAA;AAAA,QACT,QAAA;AAAA,QACA,SAAS,YAAA,CAAa,QAAA;AAAA,QACtB,sBAAsB,YAAA,CAAa,oBAAA;AAAA,QACnC,iBAAA,EAAmB,YAAA,CAAa,QAAA,GAAW,MAAA,GAAY,YAAA,CAAa;AAAA,OACtE;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,YAAA;AAAA,QACR,OAAA,EAAS,iBAAA;AAAA,QACT,QAAA;AAAA,QACA,OAAA,EAAS,KAAA;AAAA,QACT,oBAAA,EAAsB,KAAA;AAAA,QACtB,iBAAA,EAAmB;AAAA,OACrB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,GAAA,CAAI,sBAAA;AAEnC,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,YAAA;AAAA,MACR,OAAA,EAAS,iBAAA;AAAA,MACT,QAAA,EAAU;AAAA,QACR,EAAA,EAAI,cAAA;AAAA,QACJ,WAAA,EAAa,OAAA,CAAQ,GAAA,CAAI,2BAAA,IAA+B;AAAA,OAC1D;AAAA,MACA,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,+BAAA,KAAoC,OAAA;AAAA,MACzD,oBAAA,EAAsB,OAAA,CAAQ,GAAA,CAAI,6CAAA,KAAkD;AAAA,KACtF;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GACJ,QAAQ,GAAA,CAAI,oBAAA,IAAwB,QAAQ,GAAA,CAAI,yBAAA,IAA6B,QAAQ,GAAA,CAAI,0BAAA;AAE3F,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,YAAA;AAAA,MACR,OAAA,EAAS,aAAA;AAAA,MACT,OAAA,EAAS,KAAA;AAAA,MACT,oBAAA,EAAsB,KAAA;AAAA,MACtB,iBAAA,EAAmB;AAAA,KACrB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,YAAA;AAAA,IACR,OAAA,EAAS,YAAA;AAAA,IACT,OAAA,EAAS,IAAA;AAAA,IACT,oBAAA,EAAsB;AAAA,GACxB;AACF;AAEO,IAAM,uBAAuB,WAAA,CAAY;AAAA,EAC9C,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,oBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,cAAA,EAAgB,+BAAA;AAAA,EAChB,OAAA,EAAS,yBAAA;AAAA,EACT,WAAA,EAAa,qFAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,EACf,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,YAAY;AAEnB,IAAA,MAAM,EAAE,sBAAA,EAAuB,GAAI,MAAM,OAAO,mCAAuC,CAAA;AACvF,IAAA,OAAO,sBAAA,EAAuB;AAAA,EAChC;AACF,CAAC;AAEM,IAAM,4BAA4B,WAAA,CAAY;AAAA,EACnD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,kBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,cAAA,EAAgB,4BAAA;AAAA,EAChB,OAAA,EAAS,+BAAA;AAAA,EACT,WAAA,EAAa,qFAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,EACf,YAAA,EAAc,IAAA;AAAA,EACd,OAAA,EAAS,OAAO,EAAE,MAAA,EAAO,KAAM;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,gBAAA,GAAmB,QAAQ,GAAA,CAAI,oBAAA;AAErC,MAAA,IAAI,WAA4B,EAAC;AAEjC,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,IAAI;AACF,UAAA,MAAM,WAAA,GAAc,YAAA,CAAa,gBAAA,EAAkB,OAAO,CAAA;AAC1D,UAAA,QAAA,GAAW,IAAA,CAAK,MAAM,WAAW,CAAA;AAAA,QACnC,CAAA,CAAA,MAAQ;AACN,UAAA,QAAA,GAAW,EAAC;AAAA,QACd;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAClC,MAAA,MAAM,cAAc,OAAA,EAAS,IAAA;AAC7B,MAAA,MAAM,oBAAA,GAAuB,SAAS,MAAA,EAAQ,aAAA;AAC9C,MAAA,MAAM,wBAAA,GAA2B,sBAAsB,WAAA,CAAY,IAAA;AACnE,MAAA,MAAM,4BAAA,GAA+B,sBAAsB,WAAA,IAAc;AACzE,MAAA,MAAM,mCAAmC,4BAAA,EAA8B,IAAA;AAAA,QACrE,CAAA,OAAA,KAAW,OAAA,KAAY,SAAA,IAAa,OAAA,KAAY;AAAA,OAClD,GACI;AAAA,QACE,OAAA,EAAS,4BAAA,CAA6B,QAAA,CAAS,SAAS,CAAA;AAAA,QACxD,IAAA,EAAM,4BAAA,CAA6B,QAAA,CAAS,MAAM;AAAA,OACpD,GACA,MAAA;AACJ,MAAA,MAAM,+BAA+B,oBAAA,EAAsB,sBAAA;AAC3D,MAAA,MAAM,oBAAA,GAAuB,CAAC,CAAC,MAAA,CAAO,cAAc,kBAAA,EAAmB;AAEvE,MAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,MAAA,MAAM,YAAA,GAAe,QAAQ,SAAA,IAAY;AACzC,MAAA,MAAM,wBAAA,GAA2B,MAAA,GAAS,MAAM,2BAAA,CAA4B,MAAM,CAAA,GAAI,MAAA;AAEtF,MAAA,OAAO;AAAA,QACL,QAAA;AAAA,QACA,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,UAAA,KAAe,MAAA;AAAA,QAClC,UAAA,EAAY,CAAC,CAAC,MAAA;AAAA,QACd,YAAA;AAAA,QACA,wBAAA;AAAA,QACA,oBAAA;AAAA,QACA,WAAA;AAAA,QACA,wBAAA;AAAA,QACA,GAAI,gCAAA,GAAmC,EAAE,gCAAA,KAAqC,EAAC;AAAA,QAC/E;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,+BAA+B,CAAA;AAAA,IAC3D;AAAA,EACF;AACF,CAAC","file":"chunk-I6TYCL4H.js","sourcesContent":["import { readFileSync } from 'node:fs';\n\nimport type { MastraPackage } from '../schemas/system';\nimport { apiSchemaManifestResponseSchema, systemPackagesResponseSchema } from '../schemas/system';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\n\nconst SOURCE_PROVIDER_CAPABILITIES_TIMEOUT_MS = 3000;\n\nasync function getSourceProviderCapabilities(\n getCapabilities: () => Promise<{\n canWrite: boolean;\n canOpenChangeRequest: boolean;\n reason?: string;\n }>,\n) {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n try {\n return await Promise.race([\n getCapabilities(),\n new Promise<never>((_, reject) => {\n timeout = setTimeout(\n () => reject(new Error('Source provider capabilities timed out')),\n SOURCE_PROVIDER_CAPABILITIES_TIMEOUT_MS,\n );\n }),\n ]);\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n}\n\nasync function getEditorSourceCapabilities(editor: {\n getSource?: () => 'code' | 'db' | undefined;\n getSourceControlProvider?: () =>\n | {\n id: string;\n displayName: string;\n getCapabilities: () => Promise<{\n canWrite: boolean;\n canOpenChangeRequest: boolean;\n reason?: string;\n }>;\n }\n | undefined;\n}) {\n const editorSource = editor.getSource?.();\n if (!editorSource) return undefined;\n\n if (editorSource === 'db') {\n return {\n source: editorSource,\n storage: 'database' as const,\n canSave: true,\n canOpenChangeRequest: false,\n };\n }\n\n const configuredProvider = editor.getSourceControlProvider?.();\n if (configuredProvider) {\n const provider = {\n id: configuredProvider.id,\n displayName: configuredProvider.displayName,\n };\n try {\n const capabilities = await getSourceProviderCapabilities(() => configuredProvider.getCapabilities());\n return {\n source: editorSource,\n storage: 'source-provider' as const,\n provider,\n canSave: capabilities.canWrite,\n canOpenChangeRequest: capabilities.canOpenChangeRequest,\n unavailableReason: capabilities.canWrite ? undefined : capabilities.reason,\n };\n } catch {\n return {\n source: editorSource,\n storage: 'source-provider' as const,\n provider,\n canSave: false,\n canOpenChangeRequest: false,\n unavailableReason: 'Unable to load source provider capabilities.',\n };\n }\n }\n\n const sourceProvider = process.env.MASTRA_SOURCE_PROVIDER;\n\n if (sourceProvider) {\n return {\n source: editorSource,\n storage: 'source-provider' as const,\n provider: {\n id: sourceProvider,\n displayName: process.env.MASTRA_SOURCE_PROVIDER_NAME || sourceProvider,\n },\n canSave: process.env.MASTRA_SOURCE_STORAGE_CAN_WRITE !== 'false',\n canOpenChangeRequest: process.env.MASTRA_SOURCE_STORAGE_CAN_OPEN_CHANGE_REQUEST === 'true',\n };\n }\n\n const isHosted =\n process.env.MASTRA_DEPLOYMENT_ID || process.env.MASTRA_CLOUD_API_ENDPOINT || process.env.MASTRA_PLATFORM_PROJECT_ID;\n\n if (isHosted) {\n return {\n source: editorSource,\n storage: 'unavailable' as const,\n canSave: false,\n canOpenChangeRequest: false,\n unavailableReason: 'Code-source editing requires a source provider in hosted Studio.',\n };\n }\n\n return {\n source: editorSource,\n storage: 'filesystem' as const,\n canSave: true,\n canOpenChangeRequest: false,\n };\n}\n\nexport const GET_API_SCHEMA_ROUTE = createRoute({\n method: 'GET',\n path: '/system/api-schema',\n responseType: 'json',\n responseSchema: apiSchemaManifestResponseSchema,\n summary: 'Get API schema manifest',\n description: 'Returns the route-contract-derived API schema manifest for the machine-readable CLI',\n tags: ['System'],\n requiresAuth: true,\n handler: async () => {\n // Dynamic import to avoid circular dependency issues\n const { buildApiSchemaManifest } = await import('../server-adapter/api-schema-manifest');\n return buildApiSchemaManifest();\n },\n});\n\nexport const GET_SYSTEM_PACKAGES_ROUTE = createRoute({\n method: 'GET',\n path: '/system/packages',\n responseType: 'json',\n responseSchema: systemPackagesResponseSchema,\n summary: 'Get installed Mastra packages',\n description: 'Returns a list of all installed Mastra packages and their versions from the project',\n tags: ['System'],\n requiresAuth: true,\n handler: async ({ mastra }) => {\n try {\n const packagesFilePath = process.env.MASTRA_PACKAGES_FILE;\n\n let packages: MastraPackage[] = [];\n\n if (packagesFilePath) {\n try {\n const fileContent = readFileSync(packagesFilePath, 'utf-8');\n packages = JSON.parse(fileContent);\n } catch {\n packages = [];\n }\n }\n\n const storage = mastra.getStorage();\n const storageType = storage?.name;\n const observabilityStorage = storage?.stores?.observability;\n const observabilityStorageType = observabilityStorage?.constructor.name;\n const observabilityStorageFeatures = observabilityStorage?.getFeatures?.();\n const observabilityStorageCapabilities = observabilityStorageFeatures?.some(\n feature => feature === 'metrics' || feature === 'logs',\n )\n ? {\n metrics: observabilityStorageFeatures.includes('metrics'),\n logs: observabilityStorageFeatures.includes('logs'),\n }\n : undefined;\n const observabilityRuntimeStrategy = observabilityStorage?.runtimeTracingStrategy;\n const observabilityEnabled = !!mastra.observability.getDefaultInstance();\n\n const editor = mastra.getEditor();\n const editorSource = editor?.getSource?.();\n const editorSourceCapabilities = editor ? await getEditorSourceCapabilities(editor) : undefined;\n\n return {\n packages,\n isDev: process.env.MASTRA_DEV === 'true',\n cmsEnabled: !!editor,\n editorSource,\n editorSourceCapabilities,\n observabilityEnabled,\n storageType,\n observabilityStorageType,\n ...(observabilityStorageCapabilities ? { observabilityStorageCapabilities } : {}),\n observabilityRuntimeStrategy,\n };\n } catch (error) {\n return handleError(error, 'Error getting system packages');\n }\n },\n});\n"]}
import { builderSettingsResponseSchema, builderAvailableModelsResponseSchema, infrastructureStatusResponseSchema, agentFeaturesSchema } from './chunk-2PFISG5R.js';
import { buildProvidersList } from './chunk-XORQIQXT.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
// src/server/utils/resolve-builder-model-policy.ts
async function resolveBuilderModelPolicy(editor) {
if (!editor) return { active: false };
if (typeof editor.resolveBuilder !== "function") return { active: false };
if (typeof editor.hasEnabledBuilderConfig === "function" && !editor.hasEnabledBuilderConfig()) {
return { active: false };
}
try {
const builder = await editor.resolveBuilder();
const { builderToModelPolicy } = await import('@mastra/core/agent-builder/ee');
return builderToModelPolicy(builder);
} catch {
return { active: false };
}
}
// src/server/handlers/editor-builder.ts
async function resolveBuilderFeatures(mastra) {
const editor = mastra.getEditor();
if (!editor || typeof editor.resolveBuilder !== "function") return null;
if (!editor.hasEnabledBuilderConfig?.()) return null;
const builder = await editor.resolveBuilder();
if (!builder || !builder.enabled) return null;
const features = builder.getFeatures?.()?.agent;
if (!features) return null;
const parsed = agentFeaturesSchema.safeParse(features);
return parsed.success ? parsed.data : null;
}
async function isBuilderFeatureEnabled(mastra, feature) {
const features = await resolveBuilderFeatures(mastra);
return features?.[feature] === true;
}
async function requireBuilderFeature(mastra, feature) {
if (!await isBuilderFeatureEnabled(mastra, feature)) {
throw new HTTPException(404, { message: "Not Found" });
}
}
var GET_EDITOR_BUILDER_SETTINGS_ROUTE = createRoute({
method: "GET",
path: "/editor/builder/settings",
responseType: "json",
responseSchema: builderSettingsResponseSchema,
summary: "Get agent builder settings",
description: "Returns the agent builder feature flags and configuration for UI gating",
tags: ["Editor"],
requiresAuth: true,
requiresPermission: "stored-agents:read",
handler: async ({ mastra }) => {
try {
const editor = mastra.getEditor();
if (!editor) {
return { enabled: false, modelPolicy: { active: false } };
}
if (typeof editor.resolveBuilder !== "function") {
return { enabled: false, modelPolicy: { active: false } };
}
if (!editor.hasEnabledBuilderConfig?.()) {
return { enabled: false, modelPolicy: { active: false } };
}
const builder = await editor.resolveBuilder();
if (!builder || !builder.enabled) {
return { enabled: false, modelPolicy: { active: false } };
}
const baseWarnings = builder.getModelPolicyWarnings?.() ?? [];
const configuration = builder.getConfiguration();
const collectAliases = (registry) => Object.entries(registry).map(([key, entity]) => ({
id: entity.id || key,
key
}));
const toolAliases = collectAliases(mastra.listTools() ?? {});
const agentAliases = collectAliases(mastra.listAgents() ?? {});
const workflowAliases = collectAliases(mastra.listWorkflows() ?? {});
const toResponseKey = (aliases, byId) => {
const map = /* @__PURE__ */ new Map();
for (const a of aliases) {
map.set(a.id, byId === "id" ? a.id : a.key);
map.set(a.key, byId === "id" ? a.id : a.key);
}
return map;
};
const toolKeyMap = toResponseKey(toolAliases, "key");
const agentKeyMap = toResponseKey(agentAliases, "id");
const workflowKeyMap = toResponseKey(workflowAliases, "key");
const { builderToModelPolicy, resolvePickerVisibility } = await import('@mastra/core/agent-builder/ee');
const picker = resolvePickerVisibility({
config: configuration?.agent,
registeredToolIds: toolAliases.flatMap((a) => [a.id, a.key]),
registeredAgentIds: agentAliases.flatMap((a) => [a.id, a.key]),
registeredWorkflowIds: workflowAliases.flatMap((a) => [a.id, a.key])
});
const normalize = (visible, map) => {
if (visible === null) return null;
const out = [];
const seen = /* @__PURE__ */ new Set();
for (const id of visible) {
const mapped = map.get(id);
if (mapped && !seen.has(mapped)) {
seen.add(mapped);
out.push(mapped);
}
}
return out;
};
const modelPolicyWarnings = [...baseWarnings, ...picker.warnings];
return {
enabled: true,
features: builder.getFeatures(),
configuration,
modelPolicy: builderToModelPolicy(builder),
picker: {
visibleTools: normalize(picker.visibleTools, toolKeyMap),
visibleAgents: normalize(picker.visibleAgents, agentKeyMap),
visibleWorkflows: normalize(picker.visibleWorkflows, workflowKeyMap)
},
...modelPolicyWarnings.length > 0 ? { modelPolicyWarnings } : {}
};
} catch (error) {
return handleError(error, "Error getting builder settings");
}
}
});
var GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE = createRoute({
method: "GET",
path: "/editor/builder/models/available",
responseType: "json",
responseSchema: builderAvailableModelsResponseSchema,
summary: "List builder-available AI models",
description: "Returns AI providers/models filtered by the active agent-builder model policy.",
tags: ["Editor"],
requiresAuth: true,
requiresPermission: "stored-agents:read",
handler: async ({ mastra }) => {
try {
const providers = (await buildProvidersList(mastra)).filter((provider) => provider.connected);
const policy = await resolveBuilderModelPolicy(mastra.getEditor());
if (!policy.active || !policy.allowed || policy.allowed.length === 0) {
return { providers };
}
const { isModelAllowed } = await import('@mastra/core/agent-builder/ee');
const filtered = providers.map((provider) => ({
...provider,
models: provider.models.filter((modelId) => isModelAllowed(policy.allowed, { provider: provider.id, modelId }))
})).filter((provider) => provider.models.length > 0);
return { providers: filtered };
} catch (error) {
return handleError(error, "Error fetching available models");
}
}
});
var GET_INFRASTRUCTURE_STATUS_ROUTE = createRoute({
method: "GET",
path: "/editor/builder/infrastructure",
responseType: "json",
responseSchema: infrastructureStatusResponseSchema,
summary: "Get infrastructure status",
description: "Agent Builder infrastructure configuration and lightweight runtime status.",
tags: ["Editor"],
requiresAuth: true,
requiresPermission: "infrastructure:read",
handler: async ({ mastra }) => {
try {
const formatConfigValue = (value) => {
if (value === null || value === void 0) return "not set";
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return String(value);
if (Array.isArray(value)) return `${value.length} item${value.length === 1 ? "" : "s"}`;
return value.constructor?.name && value.constructor.name !== "Object" ? value.constructor.name : "configured";
};
const getProviderName = (value) => {
if (!value) return null;
if (typeof value === "object" && "provider" in value && typeof value.provider === "string")
return value.provider;
if (typeof value === "object" && "constructor" in value) {
const name = value.constructor?.name;
return name && name !== "Object" ? name : "configured";
}
return null;
};
const getConfigEntries = (config, omittedKeys = []) => Object.entries(config).filter(([key, value]) => !omittedKeys.includes(key) && value !== void 0 && value !== null).map(([key, value]) => ({ key, value: formatConfigValue(value) }));
const channelProviders = mastra.getChannelProviders() ?? {};
const channels = {
providers: Object.entries(channelProviders).map(([id, provider]) => {
const info = provider.getInfo?.();
const routes = provider.getRoutes?.() ?? [];
return {
id: info?.id ?? id,
name: info?.name ?? id,
isConfigured: info?.isConfigured ?? false,
routeCount: routes.length
};
}).filter((provider) => provider.isConfigured)
};
const editor = mastra.getEditor();
let browser = {
type: null,
provider: null,
env: null,
registered: false,
availableProviders: [],
config: []
};
let workspace = {
type: null,
workspaceId: null,
name: null,
source: null,
registered: false,
hasFilesystem: false,
hasSandbox: false,
filesystemProvider: null,
sandboxProvider: null,
config: []
};
let registries = {
skillsSh: { enabled: false }
};
if (editor?.resolveBuilder) {
const browsers = editor.__browsers;
const builder = await editor.resolveBuilder();
const builderRegistries = builder?.getRegistries?.();
registries = {
skillsSh: { enabled: builderRegistries?.skillsSh?.enabled === true }
};
const configuration = builder?.getConfiguration?.()?.agent;
const browserRef = configuration?.browser;
const browserConfig = browserRef?.config ?? {};
const providerId = browserConfig.provider ?? null;
browser = {
type: browserRef?.type ?? null,
provider: providerId,
env: browserConfig.env ?? null,
registered: providerId ? !!browsers?.has(providerId) : false,
availableProviders: browsers ? Array.from(browsers.keys()) : [],
config: getConfigEntries(browserConfig, ["provider", "env"])
};
const workspaceRef = configuration?.workspace;
const workspaceConfig = workspaceRef?.config ?? {};
const registeredWorkspaces = mastra.listWorkspaces();
const registeredWorkspace = workspaceRef?.workspaceId ? registeredWorkspaces[workspaceRef.workspaceId] : void 0;
const filesystem = registeredWorkspace?.workspace.filesystem ?? workspaceConfig.filesystem;
const sandbox = registeredWorkspace?.workspace.sandbox ?? workspaceConfig.sandbox;
const filesystemConfig = typeof workspaceConfig.filesystem === "object" && workspaceConfig.filesystem && "config" in workspaceConfig.filesystem ? workspaceConfig.filesystem.config : {};
const sandboxConfig = typeof workspaceConfig.sandbox === "object" && workspaceConfig.sandbox && "config" in workspaceConfig.sandbox ? workspaceConfig.sandbox.config : {};
workspace = {
type: workspaceRef?.type ?? null,
workspaceId: workspaceRef?.workspaceId ?? null,
name: workspaceConfig.name ?? registeredWorkspace?.workspace.name ?? null,
source: registeredWorkspace?.source ?? null,
registered: !!registeredWorkspace,
hasFilesystem: !!filesystem,
hasSandbox: !!sandbox,
filesystemProvider: getProviderName(filesystem),
sandboxProvider: getProviderName(sandbox),
config: [
...getConfigEntries(filesystemConfig).map((entry) => ({ ...entry, key: `filesystem.${entry.key}` })),
...getConfigEntries(sandboxConfig).map((entry) => ({ ...entry, key: `sandbox.${entry.key}` }))
]
};
}
return { channels, browser, workspace, registries };
} catch (error) {
return handleError(error, "Error getting infrastructure status");
}
}
});
export { GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE, GET_EDITOR_BUILDER_SETTINGS_ROUTE, GET_INFRASTRUCTURE_STATUS_ROUTE, isBuilderFeatureEnabled, requireBuilderFeature };
//# sourceMappingURL=chunk-IKIPMMHL.js.map
//# sourceMappingURL=chunk-IKIPMMHL.js.map
{"version":3,"sources":["../src/server/utils/resolve-builder-model-policy.ts","../src/server/handlers/editor-builder.ts"],"names":[],"mappings":"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","file":"chunk-IKIPMMHL.js","sourcesContent":["import type { BuilderModelPolicy } from '@mastra/core/agent-builder/ee';\nimport type { IMastraEditor } from '@mastra/core/editor';\n\n/**\n * Server-side wrapper around `builderToModelPolicy`.\n *\n * Handles the optional `IMastraEditor` builder API surface (older / OSS editors\n * may not implement `hasEnabledBuilderConfig` / `resolveBuilder`) and returns\n * a uniform `BuilderModelPolicy` to every call site.\n *\n * Returns `{ active: false }` whenever:\n * - no editor is configured,\n * - the editor doesn't expose builder methods,\n * - the builder config is disabled, or\n * - resolving the builder fails / yields nothing.\n *\n * The `@mastra/core/agent-builder/ee` subpath is loaded lazily so this module\n * remains importable on `@mastra/core` versions that pre-date the subpath\n * (the subpath was added in core 1.34.0). The dynamic import is only reached\n * once an editor is actually configured, by which point a compatible core is\n * guaranteed.\n */\nexport async function resolveBuilderModelPolicy(editor: IMastraEditor | undefined): Promise<BuilderModelPolicy> {\n if (!editor) return { active: false };\n if (typeof editor.resolveBuilder !== 'function') return { active: false };\n if (typeof editor.hasEnabledBuilderConfig === 'function' && !editor.hasEnabledBuilderConfig()) {\n return { active: false };\n }\n\n // Degrade to inactive on builder-resolution failure rather than letting the\n // rejection escape: agent execution routes seed this on every request, so a\n // transient failure must not 500 the entire route.\n try {\n const builder = await editor.resolveBuilder();\n const { builderToModelPolicy } = await import('@mastra/core/agent-builder/ee');\n return builderToModelPolicy(builder);\n } catch {\n return { active: false };\n }\n}\n","import type { Mastra } from '@mastra/core';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentFeaturesSchema,\n builderAvailableModelsResponseSchema,\n builderSettingsResponseSchema,\n infrastructureStatusResponseSchema,\n} from '../schemas/editor-builder';\nimport type { AgentFeatures, InfrastructureStatus } from '../schemas/editor-builder';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { resolveBuilderModelPolicy } from '../utils/resolve-builder-model-policy';\nimport { buildProvidersList } from './agents';\nimport { handleError } from './error';\n\n/**\n * Resolve the active builder feature flags. Returns `null` when the editor is\n * absent, the builder is disabled, or no features are configured.\n */\nasync function resolveBuilderFeatures(mastra: Mastra): Promise<AgentFeatures | null> {\n const editor = mastra.getEditor();\n if (!editor || typeof editor.resolveBuilder !== 'function') return null;\n if (!editor.hasEnabledBuilderConfig?.()) return null;\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) return null;\n const features = builder.getFeatures?.()?.agent;\n if (!features) return null;\n // Validate the shape so unknown keys cannot smuggle through.\n const parsed = agentFeaturesSchema.safeParse(features);\n return parsed.success ? parsed.data : null;\n}\n\n/**\n * Returns whether a given agent-builder feature is enabled. Used by list /\n * get-by-id handlers to soft-gate response enrichment (omit fields, ignore\n * favoritedOnly / pinFavoritedFor params) when the feature is off.\n */\nexport async function isBuilderFeatureEnabled(mastra: Mastra, feature: keyof AgentFeatures): Promise<boolean> {\n const features = await resolveBuilderFeatures(mastra);\n return features?.[feature] === true;\n}\n\n/**\n * Hard-gate helper for mutation routes that must not exist when the feature\n * is off. Throws `HTTPException(404)` so we don't leak the existence of the\n * feature surface (matches behavior of unregistered routes).\n */\nexport async function requireBuilderFeature(mastra: Mastra, feature: keyof AgentFeatures): Promise<void> {\n if (!(await isBuilderFeatureEnabled(mastra, feature))) {\n throw new HTTPException(404, { message: 'Not Found' });\n }\n}\n\n/**\n * GET /editor/builder/settings\n *\n * Returns the agent builder settings configured by the admin.\n * Used by frontend to determine which features to display.\n */\nexport const GET_EDITOR_BUILDER_SETTINGS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/settings',\n responseType: 'json',\n responseSchema: builderSettingsResponseSchema,\n summary: 'Get agent builder settings',\n description: 'Returns the agent builder feature flags and configuration for UI gating',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n const editor = mastra.getEditor();\n\n // No editor configured\n if (!editor) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Editor doesn't support builder (older version or OSS)\n if (typeof editor.resolveBuilder !== 'function') {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Check if builder is enabled in config\n if (!editor.hasEnabledBuilderConfig?.()) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Resolve the builder instance\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n const baseWarnings = builder.getModelPolicyWarnings?.() ?? [];\n const configuration = builder.getConfiguration();\n\n // Picker allowlists are written against entity `.id` (what users see in\n // the UI, URLs, traces). The client filters list responses by their\n // response keys, which are not always `.id`:\n // - GET /agents keys by `agent.id`\n // - GET /tools keys by registration key (values include `id`)\n // - GET /workflows keys by registration key (values omit `id`)\n // To keep the client filter simple, we accept `.id` (fallback to\n // registration key) for matching, but emit visible IDs as response keys\n // so `Object.keys(data)` lines up.\n type AliasPair = { id: string; key: string };\n const collectAliases = (registry: Record<string, unknown>): AliasPair[] =>\n Object.entries(registry).map(([key, entity]) => ({\n id: (entity as { id?: string }).id || key,\n key,\n }));\n\n const toolAliases = collectAliases(mastra.listTools() ?? {});\n const agentAliases = collectAliases(mastra.listAgents() ?? {});\n const workflowAliases = collectAliases(mastra.listWorkflows() ?? {});\n\n // Tools/workflows responses are keyed by registration key. Agents\n // response is keyed by `.id`.\n const toResponseKey = (aliases: AliasPair[], byId: 'id' | 'key') => {\n const map = new Map<string, string>();\n for (const a of aliases) {\n map.set(a.id, byId === 'id' ? a.id : a.key);\n map.set(a.key, byId === 'id' ? a.id : a.key);\n }\n return map;\n };\n const toolKeyMap = toResponseKey(toolAliases, 'key');\n const agentKeyMap = toResponseKey(agentAliases, 'id');\n const workflowKeyMap = toResponseKey(workflowAliases, 'key');\n\n // Lazy-load the EE subpath so this module remains importable on\n // `@mastra/core` versions that pre-date it (added in core 1.34.0).\n // We only reach here after `builder.enabled` is true, which guarantees\n // a compatible core.\n const { builderToModelPolicy, resolvePickerVisibility } = await import('@mastra/core/agent-builder/ee');\n\n const picker = resolvePickerVisibility({\n config: configuration?.agent,\n registeredToolIds: toolAliases.flatMap(a => [a.id, a.key]),\n registeredAgentIds: agentAliases.flatMap(a => [a.id, a.key]),\n registeredWorkflowIds: workflowAliases.flatMap(a => [a.id, a.key]),\n });\n\n const normalize = (visible: string[] | null, map: Map<string, string>): string[] | null => {\n if (visible === null) return null;\n const out: string[] = [];\n const seen = new Set<string>();\n for (const id of visible) {\n const mapped = map.get(id);\n if (mapped && !seen.has(mapped)) {\n seen.add(mapped);\n out.push(mapped);\n }\n }\n return out;\n };\n\n const modelPolicyWarnings = [...baseWarnings, ...picker.warnings];\n\n return {\n enabled: true,\n features: builder.getFeatures(),\n configuration,\n modelPolicy: builderToModelPolicy(builder),\n picker: {\n visibleTools: normalize(picker.visibleTools, toolKeyMap),\n visibleAgents: normalize(picker.visibleAgents, agentKeyMap),\n visibleWorkflows: normalize(picker.visibleWorkflows, workflowKeyMap),\n },\n ...(modelPolicyWarnings.length > 0 ? { modelPolicyWarnings } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error getting builder settings');\n }\n },\n});\n\n/**\n * GET /editor/builder/models/available\n *\n * Returns the configured AI providers/models the agent builder may use. The\n * server is the single authority: it scopes the list to providers with a\n * configured API key (`connected`) and applies the active builder model\n * policy via `isModelAllowed`, so the Studio surfaces can render the response\n * verbatim without importing any EE matcher into the browser.\n *\n * - Providers without a configured API key are always omitted — the builder\n * decides the agent's model from this list, so an unconnected provider would\n * produce an agent that can never run.\n * - Policy inactive (or no allowlist) ⇒ all connected providers are returned.\n * - Policy active with an allowlist ⇒ each connected provider's models are\n * filtered, and providers left with no allowed models are omitted entirely.\n */\nexport const GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/models/available',\n responseType: 'json',\n responseSchema: builderAvailableModelsResponseSchema,\n summary: 'List builder-available AI models',\n description: 'Returns AI providers/models filtered by the active agent-builder model policy.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n // Only surface providers whose API key is configured (`connected`). The\n // agent builder decides the agent's model from this list, so including\n // providers without a key lets it pick a model that can never run. We\n // scope to connected providers so every choice is actually usable.\n const providers = (await buildProvidersList(mastra)).filter(provider => provider.connected);\n const policy = await resolveBuilderModelPolicy(mastra.getEditor());\n\n // Inactive policy (or no allowlist) ⇒ no allowlist filtering to apply.\n if (!policy.active || !policy.allowed || policy.allowed.length === 0) {\n return { providers };\n }\n\n // Lazy-load the EE matcher (server-only); mirrors the convention used by\n // resolve-builder-model-policy and the settings handler.\n const { isModelAllowed } = await import('@mastra/core/agent-builder/ee');\n\n const filtered = providers\n .map(provider => ({\n ...provider,\n models: provider.models.filter(modelId => isModelAllowed(policy.allowed, { provider: provider.id, modelId })),\n }))\n .filter(provider => provider.models.length > 0);\n\n return { providers: filtered };\n } catch (error) {\n return handleError(error, 'Error fetching available models');\n }\n },\n});\n\n/**\n * GET /editor/builder/infrastructure\n *\n * Returns the runtime status of Mastra-opinionated primitives (channels,\n * browser providers, workspaces). Admin-only; surfaced in Studio Settings so\n * admins can sanity-check what's wired up to the running server.\n */\nexport const GET_INFRASTRUCTURE_STATUS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/infrastructure',\n responseType: 'json',\n responseSchema: infrastructureStatusResponseSchema,\n summary: 'Get infrastructure status',\n description: 'Agent Builder infrastructure configuration and lightweight runtime status.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'infrastructure:read',\n handler: async ({ mastra }) => {\n try {\n const formatConfigValue = (value: unknown): string => {\n if (value === null || value === undefined) return 'not set';\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (Array.isArray(value)) return `${value.length} item${value.length === 1 ? '' : 's'}`;\n return value.constructor?.name && value.constructor.name !== 'Object' ? value.constructor.name : 'configured';\n };\n\n const getProviderName = (value: unknown): string | null => {\n if (!value) return null;\n if (typeof value === 'object' && 'provider' in value && typeof value.provider === 'string')\n return value.provider;\n if (typeof value === 'object' && 'constructor' in value) {\n const name = (value as { constructor?: { name?: string } }).constructor?.name;\n return name && name !== 'Object' ? name : 'configured';\n }\n return null;\n };\n\n const getConfigEntries = (config: Record<string, unknown>, omittedKeys: string[] = []) =>\n Object.entries(config)\n .filter(([key, value]) => !omittedKeys.includes(key) && value !== undefined && value !== null)\n .map(([key, value]) => ({ key, value: formatConfigValue(value) }));\n\n const channelProviders = mastra.getChannelProviders() ?? {};\n const channels: InfrastructureStatus['channels'] = {\n providers: Object.entries(channelProviders)\n .map(([id, provider]) => {\n const info = provider.getInfo?.();\n const routes = provider.getRoutes?.() ?? [];\n return {\n id: info?.id ?? id,\n name: info?.name ?? id,\n isConfigured: info?.isConfigured ?? false,\n routeCount: routes.length,\n };\n })\n .filter(provider => provider.isConfigured),\n };\n\n const editor = mastra.getEditor();\n let browser: InfrastructureStatus['browser'] = {\n type: null,\n provider: null,\n env: null,\n registered: false,\n availableProviders: [],\n config: [],\n };\n let workspace: InfrastructureStatus['workspace'] = {\n type: null,\n workspaceId: null,\n name: null,\n source: null,\n registered: false,\n hasFilesystem: false,\n hasSandbox: false,\n filesystemProvider: null,\n sandboxProvider: null,\n config: [],\n };\n let registries: InfrastructureStatus['registries'] = {\n skillsSh: { enabled: false },\n };\n\n if (editor?.resolveBuilder) {\n const browsers = (editor as unknown as { __browsers?: Map<string, unknown> }).__browsers;\n const builder = await editor.resolveBuilder();\n const builderRegistries = builder?.getRegistries?.();\n registries = {\n skillsSh: { enabled: builderRegistries?.skillsSh?.enabled === true },\n };\n const configuration = builder?.getConfiguration?.()?.agent as\n | {\n browser?: { type?: string; config?: { provider?: string; env?: string } };\n workspace?: {\n type?: string;\n workspaceId?: string;\n config?: { name?: string; filesystem?: unknown; sandbox?: unknown };\n };\n }\n | undefined;\n\n const browserRef = configuration?.browser;\n const browserConfig = browserRef?.config ?? {};\n const providerId = browserConfig.provider ?? null;\n browser = {\n type: browserRef?.type ?? null,\n provider: providerId,\n env: browserConfig.env ?? null,\n registered: providerId ? !!browsers?.has(providerId) : false,\n availableProviders: browsers ? Array.from(browsers.keys()) : [],\n config: getConfigEntries(browserConfig, ['provider', 'env']),\n };\n\n const workspaceRef = configuration?.workspace;\n const workspaceConfig = workspaceRef?.config ?? {};\n const registeredWorkspaces = mastra.listWorkspaces();\n const registeredWorkspace = workspaceRef?.workspaceId\n ? registeredWorkspaces[workspaceRef.workspaceId]\n : undefined;\n const filesystem = registeredWorkspace?.workspace.filesystem ?? workspaceConfig.filesystem;\n const sandbox = registeredWorkspace?.workspace.sandbox ?? workspaceConfig.sandbox;\n const filesystemConfig =\n typeof workspaceConfig.filesystem === 'object' &&\n workspaceConfig.filesystem &&\n 'config' in workspaceConfig.filesystem\n ? (workspaceConfig.filesystem.config as Record<string, unknown>)\n : {};\n const sandboxConfig =\n typeof workspaceConfig.sandbox === 'object' && workspaceConfig.sandbox && 'config' in workspaceConfig.sandbox\n ? (workspaceConfig.sandbox.config as Record<string, unknown>)\n : {};\n workspace = {\n type: workspaceRef?.type ?? null,\n workspaceId: workspaceRef?.workspaceId ?? null,\n name: workspaceConfig.name ?? registeredWorkspace?.workspace.name ?? null,\n source: registeredWorkspace?.source ?? null,\n registered: !!registeredWorkspace,\n hasFilesystem: !!filesystem,\n hasSandbox: !!sandbox,\n filesystemProvider: getProviderName(filesystem),\n sandboxProvider: getProviderName(sandbox),\n config: [\n ...getConfigEntries(filesystemConfig).map(entry => ({ ...entry, key: `filesystem.${entry.key}` })),\n ...getConfigEntries(sandboxConfig).map(entry => ({ ...entry, key: `sandbox.${entry.key}` })),\n ],\n };\n }\n\n return { channels, browser, workspace, registries };\n } catch (error) {\n return handleError(error, 'Error getting infrastructure status');\n }\n },\n});\n"]}
'use strict';
var chunkKK6BI6UL_cjs = require('./chunk-KK6BI6UL.cjs');
var chunkF3HP5HM6_cjs = require('./chunk-F3HP5HM6.cjs');
var chunkOFF7L43B_cjs = require('./chunk-OFF7L43B.cjs');
var chunkW243A6ZK_cjs = require('./chunk-W243A6ZK.cjs');
var chunkQQJHGSB2_cjs = require('./chunk-QQJHGSB2.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
var crypto = require('crypto');
// src/server/handlers/conversations.ts
var conversations_exports = {};
chunkO7I5CWRX_cjs.__export(conversations_exports, {
CREATE_CONVERSATION_ROUTE: () => CREATE_CONVERSATION_ROUTE,
DELETE_CONVERSATION_ROUTE: () => DELETE_CONVERSATION_ROUTE,
GET_CONVERSATION_ITEMS_ROUTE: () => GET_CONVERSATION_ITEMS_ROUTE,
GET_CONVERSATION_ROUTE: () => GET_CONVERSATION_ROUTE
});
function buildConversationObject({ thread }) {
return {
id: thread.id,
object: "conversation",
thread
};
}
function buildConversationItemsList(items) {
return {
object: "list",
data: items,
first_id: items[0]?.id ?? null,
last_id: items.at(-1)?.id ?? null,
has_more: false
};
}
function buildConversationDeleted(conversationId) {
return {
id: conversationId,
object: "conversation.deleted",
deleted: true
};
}
var CREATE_CONVERSATION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/v1/conversations",
responseType: "json",
bodySchema: chunkKK6BI6UL_cjs.createConversationBodySchema,
responseSchema: chunkKK6BI6UL_cjs.conversationObjectSchema,
summary: "Create a conversation",
description: "Creates a new thread-backed conversation for agent-backed Responses API requests",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunkQQJHGSB2_cjs.MastraFGAPermissions.AGENTS_CREATE,
handler: async ({ mastra, requestContext, agent_id, conversation_id, resource_id, title, metadata }) => {
try {
if (!mastra) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Mastra instance is required for conversations" });
}
const agent = await chunkW243A6ZK_cjs.getAgentFromSystem({ mastra, agentId: agent_id });
const memory = await agent.getMemory({ requestContext });
if (!memory) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Agent "${agent.id}" does not have memory configured` });
}
if (!await chunkOFF7L43B_cjs.getAgentMemoryStore({ agent, requestContext })) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Memory storage is not configured for agent "${agent.id}"` });
}
const threadId = conversation_id ?? crypto.randomUUID();
const resourceId = chunkQQJHGSB2_cjs.getEffectiveResourceId(requestContext, resource_id) ?? threadId;
const thread = await memory.createThread({
threadId,
resourceId,
title,
metadata
});
return buildConversationObject({ thread });
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating conversation");
}
}
});
var GET_CONVERSATION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/v1/conversations/:conversationId",
responseType: "json",
pathParamSchema: chunkKK6BI6UL_cjs.conversationIdPathParams,
responseSchema: chunkKK6BI6UL_cjs.conversationObjectSchema,
summary: "Retrieve a conversation",
description: "Returns a conversation object backed by a Mastra memory thread",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunkQQJHGSB2_cjs.MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await chunkOFF7L43B_cjs.findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });
if (!match) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Conversation ${conversationId} was not found` });
}
return buildConversationObject({ thread: match.thread });
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error retrieving conversation");
}
}
});
var GET_CONVERSATION_ITEMS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/v1/conversations/:conversationId/items",
responseType: "json",
pathParamSchema: chunkKK6BI6UL_cjs.conversationIdPathParams,
responseSchema: chunkKK6BI6UL_cjs.conversationItemsListSchema,
summary: "List conversation items",
description: "Returns OpenAI-style conversation items derived from the stored thread messages",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunkQQJHGSB2_cjs.MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await chunkOFF7L43B_cjs.findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });
if (!match) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Conversation ${conversationId} was not found` });
}
const { messages } = await match.memoryStore.listMessages({
threadId: conversationId,
page: 0,
perPage: 1e3
});
return buildConversationItemsList(chunkF3HP5HM6_cjs.mapMastraMessagesToConversationItems(messages));
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error retrieving conversation");
}
}
});
var DELETE_CONVERSATION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/v1/conversations/:conversationId",
responseType: "json",
pathParamSchema: chunkKK6BI6UL_cjs.conversationIdPathParams,
responseSchema: chunkKK6BI6UL_cjs.conversationDeletedSchema,
summary: "Delete a conversation",
description: "Deletes a thread-backed conversation and its stored items",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunkQQJHGSB2_cjs.MastraFGAPermissions.AGENTS_DELETE,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await chunkOFF7L43B_cjs.findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });
if (!match) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Conversation ${conversationId} was not found` });
}
await match.memoryStore.deleteThread({ threadId: conversationId });
return buildConversationDeleted(conversationId);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error deleting conversation");
}
}
});
exports.CREATE_CONVERSATION_ROUTE = CREATE_CONVERSATION_ROUTE;
exports.DELETE_CONVERSATION_ROUTE = DELETE_CONVERSATION_ROUTE;
exports.GET_CONVERSATION_ITEMS_ROUTE = GET_CONVERSATION_ITEMS_ROUTE;
exports.GET_CONVERSATION_ROUTE = GET_CONVERSATION_ROUTE;
exports.conversations_exports = conversations_exports;
//# sourceMappingURL=chunk-J4B6JVWR.cjs.map
//# sourceMappingURL=chunk-J4B6JVWR.cjs.map
{"version":3,"sources":["../src/server/handlers/conversations.ts"],"names":["__export","createRoute","createConversationBodySchema","conversationObjectSchema","MastraFGAPermissions","HTTPException","getAgentFromSystem","getAgentMemoryStore","randomUUID","getEffectiveResourceId","handleError","conversationIdPathParams","findConversationThreadAcrossAgents","conversationItemsListSchema","mapMastraMessagesToConversationItems","conversationDeletedSchema"],"mappings":"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","file":"chunk-J4B6JVWR.cjs","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n conversationDeletedSchema,\n conversationIdPathParams,\n conversationItemsListSchema,\n conversationObjectSchema,\n createConversationBodySchema,\n} from '../schemas/conversations';\nimport type { ConversationDeleted, ConversationItemsList, ConversationObject } from '../schemas/conversations';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\nimport { mapMastraMessagesToConversationItems } from './responses.adapter';\nimport { findConversationThreadAcrossAgents, getAgentMemoryStore } from './responses.storage';\nimport { getEffectiveResourceId } from './utils';\n\nfunction buildConversationObject({ thread }: { thread: ConversationObject['thread'] }): ConversationObject {\n return {\n id: thread.id,\n object: 'conversation',\n thread,\n };\n}\n\nfunction buildConversationItemsList(items: ConversationItemsList['data']): ConversationItemsList {\n return {\n object: 'list',\n data: items,\n first_id: items[0]?.id ?? null,\n last_id: items.at(-1)?.id ?? null,\n has_more: false,\n };\n}\n\nfunction buildConversationDeleted(conversationId: string): ConversationDeleted {\n return {\n id: conversationId,\n object: 'conversation.deleted',\n deleted: true,\n };\n}\n\nexport const CREATE_CONVERSATION_ROUTE = createRoute({\n method: 'POST',\n path: '/v1/conversations',\n responseType: 'json',\n bodySchema: createConversationBodySchema,\n responseSchema: conversationObjectSchema,\n summary: 'Create a conversation',\n description: 'Creates a new thread-backed conversation for agent-backed Responses API requests',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_CREATE,\n handler: async ({ mastra, requestContext, agent_id, conversation_id, resource_id, title, metadata }) => {\n try {\n if (!mastra) {\n throw new HTTPException(500, { message: 'Mastra instance is required for conversations' });\n }\n\n const agent = await getAgentFromSystem({ mastra, agentId: agent_id });\n const memory = await agent.getMemory({ requestContext });\n if (!memory) {\n throw new HTTPException(400, { message: `Agent \"${agent.id}\" does not have memory configured` });\n }\n if (!(await getAgentMemoryStore({ agent, requestContext }))) {\n throw new HTTPException(400, { message: `Memory storage is not configured for agent \"${agent.id}\"` });\n }\n\n const threadId = conversation_id ?? randomUUID();\n const resourceId = getEffectiveResourceId(requestContext, resource_id) ?? threadId;\n const thread = await memory.createThread({\n threadId,\n resourceId,\n title,\n metadata,\n });\n\n return buildConversationObject({ thread });\n } catch (error) {\n return handleError(error, 'Error creating conversation');\n }\n },\n});\n\nexport const GET_CONVERSATION_ROUTE = createRoute({\n method: 'GET',\n path: '/v1/conversations/:conversationId',\n responseType: 'json',\n pathParamSchema: conversationIdPathParams,\n responseSchema: conversationObjectSchema,\n summary: 'Retrieve a conversation',\n description: 'Returns a conversation object backed by a Mastra memory thread',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_READ,\n handler: async ({ mastra, requestContext, conversationId }) => {\n try {\n const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });\n if (!match) {\n throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });\n }\n\n return buildConversationObject({ thread: match.thread });\n } catch (error) {\n return handleError(error, 'Error retrieving conversation');\n }\n },\n});\n\nexport const GET_CONVERSATION_ITEMS_ROUTE = createRoute({\n method: 'GET',\n path: '/v1/conversations/:conversationId/items',\n responseType: 'json',\n pathParamSchema: conversationIdPathParams,\n responseSchema: conversationItemsListSchema,\n summary: 'List conversation items',\n description: 'Returns OpenAI-style conversation items derived from the stored thread messages',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_READ,\n handler: async ({ mastra, requestContext, conversationId }) => {\n try {\n const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });\n if (!match) {\n throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });\n }\n\n const { messages } = await match.memoryStore.listMessages({\n threadId: conversationId,\n page: 0,\n perPage: 1000,\n });\n\n return buildConversationItemsList(mapMastraMessagesToConversationItems(messages));\n } catch (error) {\n return handleError(error, 'Error retrieving conversation');\n }\n },\n});\n\nexport const DELETE_CONVERSATION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/v1/conversations/:conversationId',\n responseType: 'json',\n pathParamSchema: conversationIdPathParams,\n responseSchema: conversationDeletedSchema,\n summary: 'Delete a conversation',\n description: 'Deletes a thread-backed conversation and its stored items',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_DELETE,\n handler: async ({ mastra, requestContext, conversationId }) => {\n try {\n const match = await findConversationThreadAcrossAgents({ mastra, conversationId, requestContext });\n if (!match) {\n throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });\n }\n\n await match.memoryStore.deleteThread({ threadId: conversationId });\n\n return buildConversationDeleted(conversationId);\n } catch (error) {\n return handleError(error, 'Error deleting conversation');\n }\n },\n});\n"]}
'use strict';
var chunkMN7K3ZEC_cjs = require('./chunk-MN7K3ZEC.cjs');
var chunkW243A6ZK_cjs = require('./chunk-W243A6ZK.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
// src/server/utils/resolve-builder-model-policy.ts
async function resolveBuilderModelPolicy(editor) {
if (!editor) return { active: false };
if (typeof editor.resolveBuilder !== "function") return { active: false };
if (typeof editor.hasEnabledBuilderConfig === "function" && !editor.hasEnabledBuilderConfig()) {
return { active: false };
}
try {
const builder = await editor.resolveBuilder();
const { builderToModelPolicy } = await import('@mastra/core/agent-builder/ee');
return builderToModelPolicy(builder);
} catch {
return { active: false };
}
}
// src/server/handlers/editor-builder.ts
async function resolveBuilderFeatures(mastra) {
const editor = mastra.getEditor();
if (!editor || typeof editor.resolveBuilder !== "function") return null;
if (!editor.hasEnabledBuilderConfig?.()) return null;
const builder = await editor.resolveBuilder();
if (!builder || !builder.enabled) return null;
const features = builder.getFeatures?.()?.agent;
if (!features) return null;
const parsed = chunkMN7K3ZEC_cjs.agentFeaturesSchema.safeParse(features);
return parsed.success ? parsed.data : null;
}
async function isBuilderFeatureEnabled(mastra, feature) {
const features = await resolveBuilderFeatures(mastra);
return features?.[feature] === true;
}
async function requireBuilderFeature(mastra, feature) {
if (!await isBuilderFeatureEnabled(mastra, feature)) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Not Found" });
}
}
var GET_EDITOR_BUILDER_SETTINGS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/editor/builder/settings",
responseType: "json",
responseSchema: chunkMN7K3ZEC_cjs.builderSettingsResponseSchema,
summary: "Get agent builder settings",
description: "Returns the agent builder feature flags and configuration for UI gating",
tags: ["Editor"],
requiresAuth: true,
requiresPermission: "stored-agents:read",
handler: async ({ mastra }) => {
try {
const editor = mastra.getEditor();
if (!editor) {
return { enabled: false, modelPolicy: { active: false } };
}
if (typeof editor.resolveBuilder !== "function") {
return { enabled: false, modelPolicy: { active: false } };
}
if (!editor.hasEnabledBuilderConfig?.()) {
return { enabled: false, modelPolicy: { active: false } };
}
const builder = await editor.resolveBuilder();
if (!builder || !builder.enabled) {
return { enabled: false, modelPolicy: { active: false } };
}
const baseWarnings = builder.getModelPolicyWarnings?.() ?? [];
const configuration = builder.getConfiguration();
const collectAliases = (registry) => Object.entries(registry).map(([key, entity]) => ({
id: entity.id || key,
key
}));
const toolAliases = collectAliases(mastra.listTools() ?? {});
const agentAliases = collectAliases(mastra.listAgents() ?? {});
const workflowAliases = collectAliases(mastra.listWorkflows() ?? {});
const toResponseKey = (aliases, byId) => {
const map = /* @__PURE__ */ new Map();
for (const a of aliases) {
map.set(a.id, byId === "id" ? a.id : a.key);
map.set(a.key, byId === "id" ? a.id : a.key);
}
return map;
};
const toolKeyMap = toResponseKey(toolAliases, "key");
const agentKeyMap = toResponseKey(agentAliases, "id");
const workflowKeyMap = toResponseKey(workflowAliases, "key");
const { builderToModelPolicy, resolvePickerVisibility } = await import('@mastra/core/agent-builder/ee');
const picker = resolvePickerVisibility({
config: configuration?.agent,
registeredToolIds: toolAliases.flatMap((a) => [a.id, a.key]),
registeredAgentIds: agentAliases.flatMap((a) => [a.id, a.key]),
registeredWorkflowIds: workflowAliases.flatMap((a) => [a.id, a.key])
});
const normalize = (visible, map) => {
if (visible === null) return null;
const out = [];
const seen = /* @__PURE__ */ new Set();
for (const id of visible) {
const mapped = map.get(id);
if (mapped && !seen.has(mapped)) {
seen.add(mapped);
out.push(mapped);
}
}
return out;
};
const modelPolicyWarnings = [...baseWarnings, ...picker.warnings];
return {
enabled: true,
features: builder.getFeatures(),
configuration,
modelPolicy: builderToModelPolicy(builder),
picker: {
visibleTools: normalize(picker.visibleTools, toolKeyMap),
visibleAgents: normalize(picker.visibleAgents, agentKeyMap),
visibleWorkflows: normalize(picker.visibleWorkflows, workflowKeyMap)
},
...modelPolicyWarnings.length > 0 ? { modelPolicyWarnings } : {}
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting builder settings");
}
}
});
var GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/editor/builder/models/available",
responseType: "json",
responseSchema: chunkMN7K3ZEC_cjs.builderAvailableModelsResponseSchema,
summary: "List builder-available AI models",
description: "Returns AI providers/models filtered by the active agent-builder model policy.",
tags: ["Editor"],
requiresAuth: true,
requiresPermission: "stored-agents:read",
handler: async ({ mastra }) => {
try {
const providers = (await chunkW243A6ZK_cjs.buildProvidersList(mastra)).filter((provider) => provider.connected);
const policy = await resolveBuilderModelPolicy(mastra.getEditor());
if (!policy.active || !policy.allowed || policy.allowed.length === 0) {
return { providers };
}
const { isModelAllowed } = await import('@mastra/core/agent-builder/ee');
const filtered = providers.map((provider) => ({
...provider,
models: provider.models.filter((modelId) => isModelAllowed(policy.allowed, { provider: provider.id, modelId }))
})).filter((provider) => provider.models.length > 0);
return { providers: filtered };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error fetching available models");
}
}
});
var GET_INFRASTRUCTURE_STATUS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/editor/builder/infrastructure",
responseType: "json",
responseSchema: chunkMN7K3ZEC_cjs.infrastructureStatusResponseSchema,
summary: "Get infrastructure status",
description: "Agent Builder infrastructure configuration and lightweight runtime status.",
tags: ["Editor"],
requiresAuth: true,
requiresPermission: "infrastructure:read",
handler: async ({ mastra }) => {
try {
const formatConfigValue = (value) => {
if (value === null || value === void 0) return "not set";
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return String(value);
if (Array.isArray(value)) return `${value.length} item${value.length === 1 ? "" : "s"}`;
return value.constructor?.name && value.constructor.name !== "Object" ? value.constructor.name : "configured";
};
const getProviderName = (value) => {
if (!value) return null;
if (typeof value === "object" && "provider" in value && typeof value.provider === "string")
return value.provider;
if (typeof value === "object" && "constructor" in value) {
const name = value.constructor?.name;
return name && name !== "Object" ? name : "configured";
}
return null;
};
const getConfigEntries = (config, omittedKeys = []) => Object.entries(config).filter(([key, value]) => !omittedKeys.includes(key) && value !== void 0 && value !== null).map(([key, value]) => ({ key, value: formatConfigValue(value) }));
const channelProviders = mastra.getChannelProviders() ?? {};
const channels = {
providers: Object.entries(channelProviders).map(([id, provider]) => {
const info = provider.getInfo?.();
const routes = provider.getRoutes?.() ?? [];
return {
id: info?.id ?? id,
name: info?.name ?? id,
isConfigured: info?.isConfigured ?? false,
routeCount: routes.length
};
}).filter((provider) => provider.isConfigured)
};
const editor = mastra.getEditor();
let browser = {
type: null,
provider: null,
env: null,
registered: false,
availableProviders: [],
config: []
};
let workspace = {
type: null,
workspaceId: null,
name: null,
source: null,
registered: false,
hasFilesystem: false,
hasSandbox: false,
filesystemProvider: null,
sandboxProvider: null,
config: []
};
let registries = {
skillsSh: { enabled: false }
};
if (editor?.resolveBuilder) {
const browsers = editor.__browsers;
const builder = await editor.resolveBuilder();
const builderRegistries = builder?.getRegistries?.();
registries = {
skillsSh: { enabled: builderRegistries?.skillsSh?.enabled === true }
};
const configuration = builder?.getConfiguration?.()?.agent;
const browserRef = configuration?.browser;
const browserConfig = browserRef?.config ?? {};
const providerId = browserConfig.provider ?? null;
browser = {
type: browserRef?.type ?? null,
provider: providerId,
env: browserConfig.env ?? null,
registered: providerId ? !!browsers?.has(providerId) : false,
availableProviders: browsers ? Array.from(browsers.keys()) : [],
config: getConfigEntries(browserConfig, ["provider", "env"])
};
const workspaceRef = configuration?.workspace;
const workspaceConfig = workspaceRef?.config ?? {};
const registeredWorkspaces = mastra.listWorkspaces();
const registeredWorkspace = workspaceRef?.workspaceId ? registeredWorkspaces[workspaceRef.workspaceId] : void 0;
const filesystem = registeredWorkspace?.workspace.filesystem ?? workspaceConfig.filesystem;
const sandbox = registeredWorkspace?.workspace.sandbox ?? workspaceConfig.sandbox;
const filesystemConfig = typeof workspaceConfig.filesystem === "object" && workspaceConfig.filesystem && "config" in workspaceConfig.filesystem ? workspaceConfig.filesystem.config : {};
const sandboxConfig = typeof workspaceConfig.sandbox === "object" && workspaceConfig.sandbox && "config" in workspaceConfig.sandbox ? workspaceConfig.sandbox.config : {};
workspace = {
type: workspaceRef?.type ?? null,
workspaceId: workspaceRef?.workspaceId ?? null,
name: workspaceConfig.name ?? registeredWorkspace?.workspace.name ?? null,
source: registeredWorkspace?.source ?? null,
registered: !!registeredWorkspace,
hasFilesystem: !!filesystem,
hasSandbox: !!sandbox,
filesystemProvider: getProviderName(filesystem),
sandboxProvider: getProviderName(sandbox),
config: [
...getConfigEntries(filesystemConfig).map((entry) => ({ ...entry, key: `filesystem.${entry.key}` })),
...getConfigEntries(sandboxConfig).map((entry) => ({ ...entry, key: `sandbox.${entry.key}` }))
]
};
}
return { channels, browser, workspace, registries };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting infrastructure status");
}
}
});
exports.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE = GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE;
exports.GET_EDITOR_BUILDER_SETTINGS_ROUTE = GET_EDITOR_BUILDER_SETTINGS_ROUTE;
exports.GET_INFRASTRUCTURE_STATUS_ROUTE = GET_INFRASTRUCTURE_STATUS_ROUTE;
exports.isBuilderFeatureEnabled = isBuilderFeatureEnabled;
exports.requireBuilderFeature = requireBuilderFeature;
//# sourceMappingURL=chunk-J5RVSM7H.cjs.map
//# sourceMappingURL=chunk-J5RVSM7H.cjs.map
{"version":3,"sources":["../src/server/utils/resolve-builder-model-policy.ts","../src/server/handlers/editor-builder.ts"],"names":["agentFeaturesSchema","HTTPException","createRoute","builderSettingsResponseSchema","handleError","builderAvailableModelsResponseSchema","buildProvidersList","infrastructureStatusResponseSchema"],"mappings":"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","file":"chunk-J5RVSM7H.cjs","sourcesContent":["import type { BuilderModelPolicy } from '@mastra/core/agent-builder/ee';\nimport type { IMastraEditor } from '@mastra/core/editor';\n\n/**\n * Server-side wrapper around `builderToModelPolicy`.\n *\n * Handles the optional `IMastraEditor` builder API surface (older / OSS editors\n * may not implement `hasEnabledBuilderConfig` / `resolveBuilder`) and returns\n * a uniform `BuilderModelPolicy` to every call site.\n *\n * Returns `{ active: false }` whenever:\n * - no editor is configured,\n * - the editor doesn't expose builder methods,\n * - the builder config is disabled, or\n * - resolving the builder fails / yields nothing.\n *\n * The `@mastra/core/agent-builder/ee` subpath is loaded lazily so this module\n * remains importable on `@mastra/core` versions that pre-date the subpath\n * (the subpath was added in core 1.34.0). The dynamic import is only reached\n * once an editor is actually configured, by which point a compatible core is\n * guaranteed.\n */\nexport async function resolveBuilderModelPolicy(editor: IMastraEditor | undefined): Promise<BuilderModelPolicy> {\n if (!editor) return { active: false };\n if (typeof editor.resolveBuilder !== 'function') return { active: false };\n if (typeof editor.hasEnabledBuilderConfig === 'function' && !editor.hasEnabledBuilderConfig()) {\n return { active: false };\n }\n\n // Degrade to inactive on builder-resolution failure rather than letting the\n // rejection escape: agent execution routes seed this on every request, so a\n // transient failure must not 500 the entire route.\n try {\n const builder = await editor.resolveBuilder();\n const { builderToModelPolicy } = await import('@mastra/core/agent-builder/ee');\n return builderToModelPolicy(builder);\n } catch {\n return { active: false };\n }\n}\n","import type { Mastra } from '@mastra/core';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentFeaturesSchema,\n builderAvailableModelsResponseSchema,\n builderSettingsResponseSchema,\n infrastructureStatusResponseSchema,\n} from '../schemas/editor-builder';\nimport type { AgentFeatures, InfrastructureStatus } from '../schemas/editor-builder';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { resolveBuilderModelPolicy } from '../utils/resolve-builder-model-policy';\nimport { buildProvidersList } from './agents';\nimport { handleError } from './error';\n\n/**\n * Resolve the active builder feature flags. Returns `null` when the editor is\n * absent, the builder is disabled, or no features are configured.\n */\nasync function resolveBuilderFeatures(mastra: Mastra): Promise<AgentFeatures | null> {\n const editor = mastra.getEditor();\n if (!editor || typeof editor.resolveBuilder !== 'function') return null;\n if (!editor.hasEnabledBuilderConfig?.()) return null;\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) return null;\n const features = builder.getFeatures?.()?.agent;\n if (!features) return null;\n // Validate the shape so unknown keys cannot smuggle through.\n const parsed = agentFeaturesSchema.safeParse(features);\n return parsed.success ? parsed.data : null;\n}\n\n/**\n * Returns whether a given agent-builder feature is enabled. Used by list /\n * get-by-id handlers to soft-gate response enrichment (omit fields, ignore\n * favoritedOnly / pinFavoritedFor params) when the feature is off.\n */\nexport async function isBuilderFeatureEnabled(mastra: Mastra, feature: keyof AgentFeatures): Promise<boolean> {\n const features = await resolveBuilderFeatures(mastra);\n return features?.[feature] === true;\n}\n\n/**\n * Hard-gate helper for mutation routes that must not exist when the feature\n * is off. Throws `HTTPException(404)` so we don't leak the existence of the\n * feature surface (matches behavior of unregistered routes).\n */\nexport async function requireBuilderFeature(mastra: Mastra, feature: keyof AgentFeatures): Promise<void> {\n if (!(await isBuilderFeatureEnabled(mastra, feature))) {\n throw new HTTPException(404, { message: 'Not Found' });\n }\n}\n\n/**\n * GET /editor/builder/settings\n *\n * Returns the agent builder settings configured by the admin.\n * Used by frontend to determine which features to display.\n */\nexport const GET_EDITOR_BUILDER_SETTINGS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/settings',\n responseType: 'json',\n responseSchema: builderSettingsResponseSchema,\n summary: 'Get agent builder settings',\n description: 'Returns the agent builder feature flags and configuration for UI gating',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n const editor = mastra.getEditor();\n\n // No editor configured\n if (!editor) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Editor doesn't support builder (older version or OSS)\n if (typeof editor.resolveBuilder !== 'function') {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Check if builder is enabled in config\n if (!editor.hasEnabledBuilderConfig?.()) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Resolve the builder instance\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n const baseWarnings = builder.getModelPolicyWarnings?.() ?? [];\n const configuration = builder.getConfiguration();\n\n // Picker allowlists are written against entity `.id` (what users see in\n // the UI, URLs, traces). The client filters list responses by their\n // response keys, which are not always `.id`:\n // - GET /agents keys by `agent.id`\n // - GET /tools keys by registration key (values include `id`)\n // - GET /workflows keys by registration key (values omit `id`)\n // To keep the client filter simple, we accept `.id` (fallback to\n // registration key) for matching, but emit visible IDs as response keys\n // so `Object.keys(data)` lines up.\n type AliasPair = { id: string; key: string };\n const collectAliases = (registry: Record<string, unknown>): AliasPair[] =>\n Object.entries(registry).map(([key, entity]) => ({\n id: (entity as { id?: string }).id || key,\n key,\n }));\n\n const toolAliases = collectAliases(mastra.listTools() ?? {});\n const agentAliases = collectAliases(mastra.listAgents() ?? {});\n const workflowAliases = collectAliases(mastra.listWorkflows() ?? {});\n\n // Tools/workflows responses are keyed by registration key. Agents\n // response is keyed by `.id`.\n const toResponseKey = (aliases: AliasPair[], byId: 'id' | 'key') => {\n const map = new Map<string, string>();\n for (const a of aliases) {\n map.set(a.id, byId === 'id' ? a.id : a.key);\n map.set(a.key, byId === 'id' ? a.id : a.key);\n }\n return map;\n };\n const toolKeyMap = toResponseKey(toolAliases, 'key');\n const agentKeyMap = toResponseKey(agentAliases, 'id');\n const workflowKeyMap = toResponseKey(workflowAliases, 'key');\n\n // Lazy-load the EE subpath so this module remains importable on\n // `@mastra/core` versions that pre-date it (added in core 1.34.0).\n // We only reach here after `builder.enabled` is true, which guarantees\n // a compatible core.\n const { builderToModelPolicy, resolvePickerVisibility } = await import('@mastra/core/agent-builder/ee');\n\n const picker = resolvePickerVisibility({\n config: configuration?.agent,\n registeredToolIds: toolAliases.flatMap(a => [a.id, a.key]),\n registeredAgentIds: agentAliases.flatMap(a => [a.id, a.key]),\n registeredWorkflowIds: workflowAliases.flatMap(a => [a.id, a.key]),\n });\n\n const normalize = (visible: string[] | null, map: Map<string, string>): string[] | null => {\n if (visible === null) return null;\n const out: string[] = [];\n const seen = new Set<string>();\n for (const id of visible) {\n const mapped = map.get(id);\n if (mapped && !seen.has(mapped)) {\n seen.add(mapped);\n out.push(mapped);\n }\n }\n return out;\n };\n\n const modelPolicyWarnings = [...baseWarnings, ...picker.warnings];\n\n return {\n enabled: true,\n features: builder.getFeatures(),\n configuration,\n modelPolicy: builderToModelPolicy(builder),\n picker: {\n visibleTools: normalize(picker.visibleTools, toolKeyMap),\n visibleAgents: normalize(picker.visibleAgents, agentKeyMap),\n visibleWorkflows: normalize(picker.visibleWorkflows, workflowKeyMap),\n },\n ...(modelPolicyWarnings.length > 0 ? { modelPolicyWarnings } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error getting builder settings');\n }\n },\n});\n\n/**\n * GET /editor/builder/models/available\n *\n * Returns the configured AI providers/models the agent builder may use. The\n * server is the single authority: it scopes the list to providers with a\n * configured API key (`connected`) and applies the active builder model\n * policy via `isModelAllowed`, so the Studio surfaces can render the response\n * verbatim without importing any EE matcher into the browser.\n *\n * - Providers without a configured API key are always omitted — the builder\n * decides the agent's model from this list, so an unconnected provider would\n * produce an agent that can never run.\n * - Policy inactive (or no allowlist) ⇒ all connected providers are returned.\n * - Policy active with an allowlist ⇒ each connected provider's models are\n * filtered, and providers left with no allowed models are omitted entirely.\n */\nexport const GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/models/available',\n responseType: 'json',\n responseSchema: builderAvailableModelsResponseSchema,\n summary: 'List builder-available AI models',\n description: 'Returns AI providers/models filtered by the active agent-builder model policy.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n // Only surface providers whose API key is configured (`connected`). The\n // agent builder decides the agent's model from this list, so including\n // providers without a key lets it pick a model that can never run. We\n // scope to connected providers so every choice is actually usable.\n const providers = (await buildProvidersList(mastra)).filter(provider => provider.connected);\n const policy = await resolveBuilderModelPolicy(mastra.getEditor());\n\n // Inactive policy (or no allowlist) ⇒ no allowlist filtering to apply.\n if (!policy.active || !policy.allowed || policy.allowed.length === 0) {\n return { providers };\n }\n\n // Lazy-load the EE matcher (server-only); mirrors the convention used by\n // resolve-builder-model-policy and the settings handler.\n const { isModelAllowed } = await import('@mastra/core/agent-builder/ee');\n\n const filtered = providers\n .map(provider => ({\n ...provider,\n models: provider.models.filter(modelId => isModelAllowed(policy.allowed, { provider: provider.id, modelId })),\n }))\n .filter(provider => provider.models.length > 0);\n\n return { providers: filtered };\n } catch (error) {\n return handleError(error, 'Error fetching available models');\n }\n },\n});\n\n/**\n * GET /editor/builder/infrastructure\n *\n * Returns the runtime status of Mastra-opinionated primitives (channels,\n * browser providers, workspaces). Admin-only; surfaced in Studio Settings so\n * admins can sanity-check what's wired up to the running server.\n */\nexport const GET_INFRASTRUCTURE_STATUS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/infrastructure',\n responseType: 'json',\n responseSchema: infrastructureStatusResponseSchema,\n summary: 'Get infrastructure status',\n description: 'Agent Builder infrastructure configuration and lightweight runtime status.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'infrastructure:read',\n handler: async ({ mastra }) => {\n try {\n const formatConfigValue = (value: unknown): string => {\n if (value === null || value === undefined) return 'not set';\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (Array.isArray(value)) return `${value.length} item${value.length === 1 ? '' : 's'}`;\n return value.constructor?.name && value.constructor.name !== 'Object' ? value.constructor.name : 'configured';\n };\n\n const getProviderName = (value: unknown): string | null => {\n if (!value) return null;\n if (typeof value === 'object' && 'provider' in value && typeof value.provider === 'string')\n return value.provider;\n if (typeof value === 'object' && 'constructor' in value) {\n const name = (value as { constructor?: { name?: string } }).constructor?.name;\n return name && name !== 'Object' ? name : 'configured';\n }\n return null;\n };\n\n const getConfigEntries = (config: Record<string, unknown>, omittedKeys: string[] = []) =>\n Object.entries(config)\n .filter(([key, value]) => !omittedKeys.includes(key) && value !== undefined && value !== null)\n .map(([key, value]) => ({ key, value: formatConfigValue(value) }));\n\n const channelProviders = mastra.getChannelProviders() ?? {};\n const channels: InfrastructureStatus['channels'] = {\n providers: Object.entries(channelProviders)\n .map(([id, provider]) => {\n const info = provider.getInfo?.();\n const routes = provider.getRoutes?.() ?? [];\n return {\n id: info?.id ?? id,\n name: info?.name ?? id,\n isConfigured: info?.isConfigured ?? false,\n routeCount: routes.length,\n };\n })\n .filter(provider => provider.isConfigured),\n };\n\n const editor = mastra.getEditor();\n let browser: InfrastructureStatus['browser'] = {\n type: null,\n provider: null,\n env: null,\n registered: false,\n availableProviders: [],\n config: [],\n };\n let workspace: InfrastructureStatus['workspace'] = {\n type: null,\n workspaceId: null,\n name: null,\n source: null,\n registered: false,\n hasFilesystem: false,\n hasSandbox: false,\n filesystemProvider: null,\n sandboxProvider: null,\n config: [],\n };\n let registries: InfrastructureStatus['registries'] = {\n skillsSh: { enabled: false },\n };\n\n if (editor?.resolveBuilder) {\n const browsers = (editor as unknown as { __browsers?: Map<string, unknown> }).__browsers;\n const builder = await editor.resolveBuilder();\n const builderRegistries = builder?.getRegistries?.();\n registries = {\n skillsSh: { enabled: builderRegistries?.skillsSh?.enabled === true },\n };\n const configuration = builder?.getConfiguration?.()?.agent as\n | {\n browser?: { type?: string; config?: { provider?: string; env?: string } };\n workspace?: {\n type?: string;\n workspaceId?: string;\n config?: { name?: string; filesystem?: unknown; sandbox?: unknown };\n };\n }\n | undefined;\n\n const browserRef = configuration?.browser;\n const browserConfig = browserRef?.config ?? {};\n const providerId = browserConfig.provider ?? null;\n browser = {\n type: browserRef?.type ?? null,\n provider: providerId,\n env: browserConfig.env ?? null,\n registered: providerId ? !!browsers?.has(providerId) : false,\n availableProviders: browsers ? Array.from(browsers.keys()) : [],\n config: getConfigEntries(browserConfig, ['provider', 'env']),\n };\n\n const workspaceRef = configuration?.workspace;\n const workspaceConfig = workspaceRef?.config ?? {};\n const registeredWorkspaces = mastra.listWorkspaces();\n const registeredWorkspace = workspaceRef?.workspaceId\n ? registeredWorkspaces[workspaceRef.workspaceId]\n : undefined;\n const filesystem = registeredWorkspace?.workspace.filesystem ?? workspaceConfig.filesystem;\n const sandbox = registeredWorkspace?.workspace.sandbox ?? workspaceConfig.sandbox;\n const filesystemConfig =\n typeof workspaceConfig.filesystem === 'object' &&\n workspaceConfig.filesystem &&\n 'config' in workspaceConfig.filesystem\n ? (workspaceConfig.filesystem.config as Record<string, unknown>)\n : {};\n const sandboxConfig =\n typeof workspaceConfig.sandbox === 'object' && workspaceConfig.sandbox && 'config' in workspaceConfig.sandbox\n ? (workspaceConfig.sandbox.config as Record<string, unknown>)\n : {};\n workspace = {\n type: workspaceRef?.type ?? null,\n workspaceId: workspaceRef?.workspaceId ?? null,\n name: workspaceConfig.name ?? registeredWorkspace?.workspace.name ?? null,\n source: registeredWorkspace?.source ?? null,\n registered: !!registeredWorkspace,\n hasFilesystem: !!filesystem,\n hasSandbox: !!sandbox,\n filesystemProvider: getProviderName(filesystem),\n sandboxProvider: getProviderName(sandbox),\n config: [\n ...getConfigEntries(filesystemConfig).map(entry => ({ ...entry, key: `filesystem.${entry.key}` })),\n ...getConfigEntries(sandboxConfig).map(entry => ({ ...entry, key: `sandbox.${entry.key}` })),\n ],\n };\n }\n\n return { channels, browser, workspace, registries };\n } catch (error) {\n return handleError(error, 'Error getting infrastructure status');\n }\n },\n});\n"]}
'use strict';
var chunkO4O2EJF7_cjs = require('./chunk-O4O2EJF7.cjs');
var chunkJ5RVSM7H_cjs = require('./chunk-J5RVSM7H.cjs');
var chunkWMS7BOP7_cjs = require('./chunk-WMS7BOP7.cjs');
var chunkNIMP2XEL_cjs = require('./chunk-NIMP2XEL.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
// src/server/handlers/stored-agent-favorites.ts
async function getFavoritesContext(mastra) {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentStore = await storage.getStore("agents");
if (!agentStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Favorites storage domain is not available" });
}
return { agentStore, favoritesStore };
}
var FAVORITE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "PUT",
path: "/stored/agents/:storedAgentId/favorite",
responseType: "json",
pathParamSchema: chunkNIMP2XEL_cjs.storedAgentIdPathParams,
responseSchema: chunkO4O2EJF7_cjs.favoriteToggleResponseSchema,
summary: "Favorite a stored agent",
description: "Marks the stored agent as favorited by the calling user. Idempotent.",
tags: ["Stored Agents"],
requiresAuth: true,
requiresPermission: "stored-agents:read",
handler: async ({ mastra, requestContext, storedAgentId }) => {
try {
await chunkJ5RVSM7H_cjs.requireBuilderFeature(mastra, "favorites");
const callerId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext);
if (!callerId) {
throw new chunk64ITUOXI_cjs.HTTPException(401, { message: "Authentication required" });
}
const { agentStore, favoritesStore } = await getFavoritesContext(mastra);
const agent = await agentStore.getById(storedAgentId);
if (!agent) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
const result = await favoritesStore.favorite({
userId: callerId,
entityType: "agent",
entityId: storedAgentId
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error favoriting stored agent");
}
}
});
var UNFAVORITE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/stored/agents/:storedAgentId/favorite",
responseType: "json",
pathParamSchema: chunkNIMP2XEL_cjs.storedAgentIdPathParams,
responseSchema: chunkO4O2EJF7_cjs.favoriteToggleResponseSchema,
summary: "Unfavorite a stored agent",
description: "Removes the caller\u2019s favorite from the stored agent. Idempotent.",
tags: ["Stored Agents"],
requiresAuth: true,
requiresPermission: "stored-agents:read",
handler: async ({ mastra, requestContext, storedAgentId }) => {
try {
await chunkJ5RVSM7H_cjs.requireBuilderFeature(mastra, "favorites");
const callerId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext);
if (!callerId) {
throw new chunk64ITUOXI_cjs.HTTPException(401, { message: "Authentication required" });
}
const { agentStore, favoritesStore } = await getFavoritesContext(mastra);
const agent = await agentStore.getById(storedAgentId);
if (!agent) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
const result = await favoritesStore.unfavorite({
userId: callerId,
entityType: "agent",
entityId: storedAgentId
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error unfavoriting stored agent");
}
}
});
exports.FAVORITE_STORED_AGENT_ROUTE = FAVORITE_STORED_AGENT_ROUTE;
exports.UNFAVORITE_STORED_AGENT_ROUTE = UNFAVORITE_STORED_AGENT_ROUTE;
//# sourceMappingURL=chunk-JBH7K7YB.cjs.map
//# sourceMappingURL=chunk-JBH7K7YB.cjs.map
{"version":3,"sources":["../src/server/handlers/stored-agent-favorites.ts"],"names":["HTTPException","createRoute","storedAgentIdPathParams","favoriteToggleResponseSchema","requireBuilderFeature","getCallerAuthorId","assertStoredResourceScope","getStoredResourceScope","assertReadAccess","handleError"],"mappings":"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","file":"chunk-JBH7K7YB.cjs","sourcesContent":["import { HTTPException } from '../http-exception';\nimport { favoriteToggleResponseSchema } from '../schemas/favorites';\nimport { storedAgentIdPathParams } from '../schemas/stored-agents';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { assertReadAccess, getCallerAuthorId } from './authorship';\nimport { requireBuilderFeature } from './editor-builder';\nimport { handleError } from './error';\n\n/**\n * Resolves the storage and favorites domains, throwing 500 if unavailable.\n */\nasync function getFavoritesContext(mastra: Parameters<typeof requireBuilderFeature>[0]) {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n const agentStore = await storage.getStore('agents');\n if (!agentStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) {\n throw new HTTPException(500, { message: 'Favorites storage domain is not available' });\n }\n return { agentStore, favoritesStore };\n}\n\n/**\n * PUT /stored/agents/:storedAgentId/favorite\n */\nexport const FAVORITE_STORED_AGENT_ROUTE = createRoute({\n method: 'PUT',\n path: '/stored/agents/:storedAgentId/favorite',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Favorite a stored agent',\n description: 'Marks the stored agent as favorited by the calling user. Idempotent.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra, requestContext, storedAgentId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { agentStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const agent = await agentStore.getById(storedAgentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller cannot read the agent (private + not owner/admin).\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: agent });\n\n const result = await favoritesStore.favorite({\n userId: callerId,\n entityType: 'agent',\n entityId: storedAgentId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error favoriting stored agent');\n }\n },\n});\n\n/**\n * DELETE /stored/agents/:storedAgentId/favorite\n */\nexport const UNFAVORITE_STORED_AGENT_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/agents/:storedAgentId/favorite',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Unfavorite a stored agent',\n description: 'Removes the caller’s favorite from the stored agent. Idempotent.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra, requestContext, storedAgentId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { agentStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const agent = await agentStore.getById(storedAgentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: agent });\n\n const result = await favoritesStore.unfavorite({\n userId: callerId,\n entityType: 'agent',\n entityId: storedAgentId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error unfavoriting stored agent');\n }\n },\n});\n"]}
'use strict';
var chunkWE6BWC6H_cjs = require('./chunk-WE6BWC6H.cjs');
var chunkW243A6ZK_cjs = require('./chunk-W243A6ZK.cjs');
var chunkSOCH5SNI_cjs = require('./chunk-SOCH5SNI.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
var util = require('util');
var a2a = require('@mastra/core/a2a');
var v4 = require('zod/v4');
var crypto2 = require('crypto');
var promises = require('dns/promises');
var http = require('http');
var https = require('https');
var net = require('net');
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var crypto2__namespace = /*#__PURE__*/_interopNamespace(crypto2);
// ../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/canonicalize/1.0.8/8d710dcf19a48d178b2fc853e16c59951fde29eb27b6037da6c3f4dbb968b03d/node_modules/canonicalize/lib/canonicalize.js
var require_canonicalize = chunkO7I5CWRX_cjs.__commonJS({
"../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/canonicalize/1.0.8/8d710dcf19a48d178b2fc853e16c59951fde29eb27b6037da6c3f4dbb968b03d/node_modules/canonicalize/lib/canonicalize.js"(exports, module) {
module.exports = function serialize(object) {
if (object === null || typeof object !== "object" || object.toJSON != null) {
return JSON.stringify(object);
}
if (Array.isArray(object)) {
return "[" + object.reduce((t, cv, ci) => {
const comma = ci === 0 ? "" : ",";
const value = cv === void 0 || typeof cv === "symbol" ? null : cv;
return t + comma + serialize(value);
}, "") + "]";
}
return "{" + Object.keys(object).sort().reduce((t, cv, ci) => {
if (object[cv] === void 0 || typeof object[cv] === "symbol") {
return t;
}
const comma = t.length === 0 ? "" : ",";
return t + comma + serialize(cv) + ":" + serialize(object[cv]);
}, "") + "}";
};
}
});
// src/server/handlers/a2a.ts
var a2a_exports = {};
chunkO7I5CWRX_cjs.__export(a2a_exports, {
AGENT_EXECUTION_ROUTE: () => AGENT_EXECUTION_ROUTE,
GET_AGENT_CARD_ROUTE: () => GET_AGENT_CARD_ROUTE,
getAgentCardByIdHandler: () => getAgentCardByIdHandler,
getAgentExecutionHandler: () => getAgentExecutionHandler,
handleDeleteTaskPushNotificationConfig: () => handleDeleteTaskPushNotificationConfig,
handleGetTaskPushNotificationConfig: () => handleGetTaskPushNotificationConfig,
handleListTaskPushNotificationConfig: () => handleListTaskPushNotificationConfig,
handleMessageSend: () => handleMessageSend,
handleMessageStream: () => handleMessageStream,
handleSetTaskPushNotificationConfig: () => handleSetTaskPushNotificationConfig,
handleTaskCancel: () => handleTaskCancel,
handleTaskGet: () => handleTaskGet,
handleTaskResubscribe: () => handleTaskResubscribe
});
// src/server/a2a/agent-card-signing.ts
var import_canonicalize = chunkO7I5CWRX_cjs.__toESM(require_canonicalize(), 1);
var SUPPORTED_JWS_ALGORITHMS = /* @__PURE__ */ new Set([
"ES256",
"ES384",
"ES512",
"RS256",
"RS384",
"RS512",
"PS256",
"PS384",
"PS512"
]);
function stripAgentCardSignatures(agentCard) {
const unsignedCard = structuredClone(agentCard);
delete unsignedCard.signatures;
return unsignedCard;
}
function importSigningKey(signing) {
const { privateKey } = signing;
if (typeof privateKey === "string") {
return crypto2__namespace.createPrivateKey(privateKey);
}
return crypto2__namespace.createPrivateKey({
key: privateKey,
format: "jwk"
});
}
function getProtectedHeader(signing) {
const { alg, ...rest } = signing.protectedHeader;
if (!SUPPORTED_JWS_ALGORITHMS.has(alg)) {
throw new Error(`Unsupported JWS algorithm for A2A Agent Card signing: ${alg}`);
}
return {
...rest,
alg
};
}
function getSignatureOptions(algorithm) {
if (algorithm.startsWith("ES")) {
return { dsaEncoding: "ieee-p1363" };
}
if (algorithm.startsWith("PS")) {
return {
padding: crypto2__namespace.constants.RSA_PKCS1_PSS_PADDING,
saltLength: crypto2__namespace.constants.RSA_PSS_SALTLEN_DIGEST
};
}
return {};
}
function getDigestAlgorithm(algorithm) {
if (algorithm.endsWith("256")) return "sha256";
if (algorithm.endsWith("384")) return "sha384";
if (algorithm.endsWith("512")) return "sha512";
throw new Error(`Unsupported JWS algorithm for A2A Agent Card signing: ${algorithm}`);
}
async function signAgentCard({
agentCard,
signing
}) {
const canonicalPayload = (0, import_canonicalize.default)(stripAgentCardSignatures(agentCard));
if (!canonicalPayload) {
throw new Error("Failed to canonicalize A2A Agent Card for signing");
}
const key = importSigningKey(signing);
const protectedHeader = getProtectedHeader(signing);
const encodedHeader = Buffer.from(JSON.stringify(protectedHeader), "utf8").toString("base64url");
const encodedPayload = Buffer.from(canonicalPayload, "utf8").toString("base64url");
const signingInput = `${encodedHeader}.${encodedPayload}`;
const signatureBuffer = crypto2__namespace.sign(
getDigestAlgorithm(String(protectedHeader.alg)),
Buffer.from(signingInput, "utf8"),
{
key,
...getSignatureOptions(String(protectedHeader.alg))
}
);
const signatureValue = signatureBuffer.toString("base64url");
if (!encodedHeader || !signatureValue) {
throw new Error("Failed to create compact JWS for A2A Agent Card");
}
const signature = {
protected: encodedHeader,
signature: signatureValue,
header: signing.header
};
return {
...agentCard,
signatures: [...agentCard.signatures ?? [], signature]
};
}
function normalizeError(error, reqId, taskId, logger) {
let a2aError;
if (error instanceof a2a.MastraA2AError) {
a2aError = error;
} else if (error instanceof Error) {
a2aError = a2a.MastraA2AError.internalError(error.message, { stack: error.stack });
} else {
a2aError = a2a.MastraA2AError.internalError("An unknown error occurred.", error);
}
if (taskId && !a2aError.taskId) {
a2aError.taskId = taskId;
}
logger?.error(`Error processing request (Task: ${a2aError.taskId ?? "N/A"}, ReqID: ${reqId ?? "N/A"}):`, a2aError);
return createErrorResponse(reqId, a2aError.toJSONRPCError());
}
function createErrorResponse(id, error) {
return {
jsonrpc: "2.0",
id,
// Can be null if request ID was invalid/missing
error
};
}
function createSuccessResponse(id, result) {
if (!id) {
throw a2a.MastraA2AError.internalError("Cannot create success response for null ID.");
}
return {
jsonrpc: "2.0",
id,
result
};
}
function convertToCoreMessage(message) {
return {
role: message.role === "user" ? "user" : "assistant",
content: message.parts.map((msg) => convertToCoreMessagePart(msg))
};
}
function convertToCoreMessagePart(part) {
switch (part.kind) {
case "text":
return {
type: "text",
text: part.text
};
case "file":
return {
type: "file",
data: "uri" in part.file ? new URL(part.file.uri) : part.file.bytes,
mimeType: part.file.mimeType
};
case "data":
throw new Error("Data parts are not supported in core messages");
}
}
var DEFAULT_PUSH_NOTIFICATION_TOKEN_HEADER = "X-A2A-Notification-Token";
function isDisallowedHostname(hostname) {
const normalized = hostname.toLowerCase();
return normalized === "localhost" || normalized.endsWith(".localhost") || normalized.endsWith(".local") || normalized.endsWith(".internal") || !normalized.includes(".");
}
function isDisallowedIpv4(address) {
const [first = -1, second = -1] = address.split(".").map(Number);
return first === 10 || first === 127 || first === 169 && second === 254 || first === 172 && second >= 16 && second <= 31 || first === 192 && second === 168;
}
function isDisallowedIpv6(address) {
const normalized = address.toLowerCase();
return normalized === "::1" || normalized.startsWith("fe8") || normalized.startsWith("fe9") || normalized.startsWith("fea") || normalized.startsWith("feb") || normalized.startsWith("fc") || normalized.startsWith("fd");
}
function isDisallowedIpAddress(address) {
const version = net.isIP(address);
if (version === 4) {
return isDisallowedIpv4(address);
}
if (version === 6) {
return isDisallowedIpv6(address);
}
return false;
}
var DefaultPushNotificationSender = class {
constructor(pushNotificationStore, options = {}) {
this.pushNotificationStore = pushNotificationStore;
this.options = options;
}
pushNotificationStore;
options;
getStore() {
return this.pushNotificationStore;
}
async resolveValidatedDestination(rawUrl) {
const url = new URL(rawUrl);
if (url.protocol !== "https:" && url.protocol !== "http:") {
throw new Error(`Push notification URL must use http or https: ${url.protocol}`);
}
const hostname = url.hostname.toLowerCase();
if (this.options.allowedHosts && !this.options.allowedHosts.includes(hostname)) {
throw new Error(`Push notification host is not allowed: ${hostname}`);
}
if (isDisallowedHostname(hostname)) {
throw new Error(`Push notification URL must not target local or internal hosts: ${hostname}`);
}
if (isDisallowedIpAddress(hostname)) {
throw new Error(`Push notification URL must not target local or private IPs: ${hostname}`);
}
const resolvedAddresses = net.isIP(hostname) === 0 ? await (this.options.lookup ?? promises.lookup)(hostname, { all: true, verbatim: true }) : [{ address: hostname, family: net.isIP(hostname) }];
if (resolvedAddresses.some((result) => isDisallowedIpAddress(result.address))) {
throw new Error(`Push notification URL resolved to a local or private IP: ${hostname}`);
}
const requestUrl = new URL(url.toString());
requestUrl.hostname = resolvedAddresses[0].address;
return {
originalUrl: url,
requestUrl,
hostHeader: url.host,
servername: net.isIP(hostname) === 0 ? hostname : void 0
};
}
async postTaskSnapshot({
requestUrl,
hostHeader,
servername,
headers,
body,
timeout
}) {
headers.set("host", hostHeader);
const signal = typeof AbortSignal.timeout === "function" ? AbortSignal.timeout(timeout) : void 0;
if (this.options.fetch) {
return this.options.fetch(requestUrl.toString(), {
method: "POST",
headers,
body,
signal
});
}
const transport = requestUrl.protocol === "https:" ? https.request : http.request;
return await new Promise((resolve, reject) => {
const request = transport(
{
protocol: requestUrl.protocol,
hostname: requestUrl.hostname,
port: requestUrl.port || void 0,
path: `${requestUrl.pathname}${requestUrl.search}`,
method: "POST",
headers: Object.fromEntries(headers.entries()),
servername
},
(response) => {
response.resume();
response.on("end", () => {
resolve({
ok: !!response.statusCode && response.statusCode >= 200 && response.statusCode < 300,
status: response.statusCode ?? 0,
statusText: response.statusMessage ?? ""
});
});
}
);
request.on("error", reject);
if (signal) {
signal.addEventListener(
"abort",
() => {
request.destroy(signal.reason instanceof Error ? signal.reason : new Error("Push notification timed out"));
},
{ once: true }
);
}
request.end(body);
});
}
async sendNotifications({
agentId,
task,
logger
}) {
const configs = this.pushNotificationStore.list({
agentId,
params: { id: task.id }
});
if (configs.length === 0) {
return;
}
await Promise.allSettled(
configs.map(async (config) => {
const headers = new Headers({
"content-type": "application/json"
});
if (config.pushNotificationConfig.token) {
headers.set(
this.options.tokenHeaderName ?? DEFAULT_PUSH_NOTIFICATION_TOKEN_HEADER,
config.pushNotificationConfig.token
);
}
const auth = config.pushNotificationConfig.authentication;
if (auth?.credentials) {
if (auth.schemes.includes("Bearer")) {
headers.set("authorization", `Bearer ${auth.credentials}`);
} else if (auth.schemes.includes("Basic")) {
headers.set("authorization", `Basic ${auth.credentials}`);
}
}
const { requestUrl, hostHeader, servername } = await this.resolveValidatedDestination(
config.pushNotificationConfig.url
);
const response = await this.postTaskSnapshot({
requestUrl,
hostHeader,
servername,
headers,
body: JSON.stringify(task),
timeout: this.options.timeout ?? 5e3
});
if (!response.ok) {
throw new Error(
`Push notification failed with status ${response.status} ${response.statusText ?? ""}`.trim()
);
}
})
).then((results) => {
for (const result of results) {
if (result.status === "rejected") {
logger?.error("Failed to deliver A2A push notification", result.reason);
}
}
});
}
};
// src/server/a2a/push-notification-store.ts
function normalizeConfigId(taskId, configId) {
return configId || taskId;
}
var InMemoryPushNotificationStore = class {
store = /* @__PURE__ */ new Map();
getKey(agentId, taskId) {
return JSON.stringify([agentId, taskId]);
}
set({ agentId, config }) {
const key = this.getKey(agentId, config.taskId);
const configs = this.store.get(key) ?? /* @__PURE__ */ new Map();
const normalizedConfig = {
taskId: config.taskId,
pushNotificationConfig: {
...config.pushNotificationConfig,
id: normalizeConfigId(config.taskId, config.pushNotificationConfig.id)
}
};
configs.set(normalizedConfig.pushNotificationConfig.id, structuredClone(normalizedConfig));
this.store.set(key, configs);
return structuredClone(normalizedConfig);
}
get({
agentId,
params
}) {
const key = this.getKey(agentId, params.id);
const configId = normalizeConfigId(params.id, params.pushNotificationConfigId);
const config = this.store.get(key)?.get(configId);
return config ? structuredClone(config) : null;
}
list({
agentId,
params
}) {
const key = this.getKey(agentId, params.id);
return Array.from(this.store.get(key)?.values() ?? []).map((config) => structuredClone(config));
}
delete({ agentId, params }) {
const key = this.getKey(agentId, params.id);
const configs = this.store.get(key);
if (!configs) {
return false;
}
const deleted = configs.delete(params.pushNotificationConfigId);
if (configs.size === 0) {
this.store.delete(key);
}
return deleted;
}
};
// src/server/a2a/tasks.ts
function isTaskStatusUpdate(update) {
return "state" in update && !("parts" in update);
}
function isArtifactUpdate(update) {
return "kind" in update && update.kind === "artifact-update";
}
function applyUpdateToTask(current, update) {
let newTask = structuredClone(current);
if (isTaskStatusUpdate(update)) {
newTask.status = {
...newTask.status,
// Keep existing properties if not overwritten
...update,
// Apply updates
timestamp: (/* @__PURE__ */ new Date()).toISOString()
};
} else if (isArtifactUpdate(update)) {
if (!newTask.artifacts) {
newTask.artifacts = [];
} else {
newTask.artifacts = [...newTask.artifacts];
}
const artifact = update.artifact;
const existingIndex = newTask.artifacts.findIndex((a) => a.name === artifact.name);
const existingArtifact = newTask.artifacts[existingIndex];
if (existingArtifact) {
if (update.append) {
const appendedArtifact = JSON.parse(JSON.stringify(existingArtifact));
appendedArtifact.parts.push(...artifact.parts);
if (artifact.metadata) {
appendedArtifact.metadata = {
...appendedArtifact.metadata || {},
...artifact.metadata
};
}
if (artifact.description) appendedArtifact.description = artifact.description;
newTask.artifacts[existingIndex] = appendedArtifact;
} else {
newTask.artifacts[existingIndex] = { ...artifact };
}
} else {
newTask.artifacts.push({ ...artifact });
}
}
return newTask;
}
async function loadOrCreateTask({
agentId,
taskId,
taskStore,
message,
contextId,
metadata,
logger
}) {
const data = await taskStore.load({ agentId, taskId });
if (!data) {
const initialTask = {
id: taskId,
contextId: contextId || crypto.randomUUID(),
status: {
state: "submitted",
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
message: void 0
},
artifacts: [],
history: [message],
metadata,
kind: "task"
};
logger?.info(`[Task ${taskId}] Created new task.`);
await taskStore.save({ agentId, data: initialTask });
return initialTask;
}
logger?.info(`[Task ${taskId}] Loaded existing task.`);
let updatedData = data;
updatedData.history = [...data.history || [], message];
const { status } = data;
const finalStates = ["completed", "failed", "canceled"];
if (finalStates.includes(status.state)) {
logger?.warn(`[Task ${taskId}] Received message for task in final state ${status.state}. Restarting.`);
updatedData = applyUpdateToTask(updatedData, {
state: "submitted",
message: void 0
});
} else if (status.state === "input-required") {
logger?.info(`[Task ${taskId}] Changing state from 'input-required' to 'working'.`);
updatedData = applyUpdateToTask(updatedData, { state: "working" });
} else if (status.state === "working") {
logger?.warn(`[Task ${taskId}] Received message while already 'working'. Proceeding.`);
}
await taskStore.save({ agentId, data: updatedData });
return updatedData;
}
function createTaskContext({
task,
userMessage,
history,
activeCancellations
}) {
return {
task: structuredClone(task),
userMessage,
history: structuredClone(history),
isCancelled: () => activeCancellations.has(task.id)
};
}
// src/server/handlers/a2a.ts
var messagePartSchema = v4.z.discriminatedUnion("kind", [
v4.z.object({
kind: v4.z.literal("text"),
text: v4.z.string(),
metadata: v4.z.record(v4.z.string(), v4.z.any()).optional()
}),
v4.z.object({
kind: v4.z.literal("file"),
file: v4.z.union([
v4.z.object({
bytes: v4.z.string(),
mimeType: v4.z.string().optional(),
name: v4.z.string().optional()
}),
v4.z.object({
uri: v4.z.string(),
mimeType: v4.z.string().optional(),
name: v4.z.string().optional()
})
]),
metadata: v4.z.record(v4.z.string(), v4.z.any()).optional()
}),
v4.z.object({
kind: v4.z.literal("data"),
data: v4.z.record(v4.z.string(), v4.z.any()),
metadata: v4.z.record(v4.z.string(), v4.z.any()).optional()
})
]);
var messageSendParamsSchema = v4.z.object({
message: v4.z.object({
role: v4.z.enum(["user", "agent"]),
parts: v4.z.array(messagePartSchema),
kind: v4.z.literal("message"),
messageId: v4.z.string(),
contextId: v4.z.string().optional(),
taskId: v4.z.string().optional(),
referenceTaskIds: v4.z.array(v4.z.string()).optional(),
extensions: v4.z.array(v4.z.string()).optional(),
metadata: v4.z.record(v4.z.string(), v4.z.any()).optional()
}),
configuration: v4.z.object({
acceptedOutputModes: v4.z.array(v4.z.string()).optional(),
blocking: v4.z.boolean().optional(),
historyLength: v4.z.number().optional(),
pushNotificationConfig: v4.z.object({
url: v4.z.string(),
id: v4.z.string().optional(),
token: v4.z.string().optional(),
authentication: v4.z.object({
schemes: v4.z.array(v4.z.string()),
credentials: v4.z.string().optional()
}).optional()
}).optional()
}).optional()
});
var defaultPushNotificationStore = new InMemoryPushNotificationStore();
var defaultPushNotificationSender = new DefaultPushNotificationSender(defaultPushNotificationStore);
function createAgentCardDefaults({
pushNotifications = false
} = {}) {
return {
protocolVersion: "0.3.0",
additionalInterfaces: [],
supportsAuthenticatedExtendedCard: false,
security: [],
securitySchemes: {},
capabilities: {
streaming: true,
pushNotifications,
stateTransitionHistory: false,
extensions: []
},
defaultInputModes: ["text/plain"],
defaultOutputModes: ["text/plain"]
};
}
async function getAgentCardByIdHandler({
mastra,
agentId,
executionUrl = `/a2a/${agentId}`,
provider = {
organization: "Mastra",
url: "https://mastra.ai"
},
version = "1.0",
pushNotifications = false,
requestContext
}) {
const agent = await chunkW243A6ZK_cjs.getAgentFromSystem({ mastra, agentId });
const [instructions, tools] = await Promise.all([agent.getInstructions({ requestContext }), agent.listTools({ requestContext })]);
const agentCard = {
name: agent.id || agentId,
description: chunkEVOVAWN6_cjs.convertInstructionsToString(instructions),
url: executionUrl,
provider,
version,
...createAgentCardDefaults({ pushNotifications }),
// Convert agent tools to skills format for A2A protocol
skills: Object.entries(tools).map(([toolId, tool]) => ({
id: toolId,
name: toolId,
description: tool.description || `Tool: ${toolId}`,
// Optional fields
tags: ["tool"]
}))
};
const signing = mastra.getServer?.()?.a2a?.agentCardSigning;
if (!signing) {
return agentCard;
}
return signAgentCard({
agentCard,
signing
});
}
function getA2AExecutionUrl({
agentId,
request,
routePrefix
}) {
const executionPath = `${routePrefix ?? ""}/a2a/${agentId}`;
if (!request) {
return executionPath;
}
return `${chunkSOCH5SNI_cjs.getPublicOrigin(request)}${executionPath}`;
}
function validateMessageSendParams(params) {
try {
messageSendParamsSchema.parse(params);
} catch (error) {
if (error instanceof v4.z.ZodError) {
throw a2a.MastraA2AError.invalidParams(error.issues[0].message);
}
throw error;
}
}
function createArtifactUpdate({
taskId,
contextId,
text,
data
}) {
const parts = [
...text ? [{ kind: "text", text }] : [],
...data ? [{ kind: "data", data }] : []
];
if (parts.length === 0) {
return void 0;
}
return {
kind: "artifact-update",
taskId,
contextId,
lastChunk: true,
artifact: {
artifactId: `${taskId}:response`,
name: data ? "response.json" : "response.txt",
parts
}
};
}
function createTextChunkArtifactUpdate({
taskId,
contextId,
text,
append,
lastChunk
}) {
return {
kind: "artifact-update",
taskId,
contextId,
...append ? { append: true } : {},
...lastChunk !== void 0 ? { lastChunk } : {},
artifact: {
artifactId: `${taskId}:response:text`,
name: "response.txt",
parts: [{ kind: "text", text }]
}
};
}
function createDataArtifactUpdate({
taskId,
contextId,
data,
lastChunk
}) {
return {
kind: "artifact-update",
taskId,
contextId,
...{ lastChunk } ,
artifact: {
artifactId: `${taskId}:response:data`,
name: "response.json",
parts: [{ kind: "data", data }]
}
};
}
function resolvePushNotificationPair({
pushNotificationStore,
pushNotificationSender
}) {
if (pushNotificationSender) {
return {
pushNotificationStore: pushNotificationSender.getStore(),
pushNotificationSender
};
}
if (pushNotificationStore) {
return {
pushNotificationStore,
pushNotificationSender: new DefaultPushNotificationSender(pushNotificationStore)
};
}
return {
pushNotificationStore: defaultPushNotificationStore,
pushNotificationSender: defaultPushNotificationSender
};
}
function createTaskPushNotificationConfig(taskId, pushNotificationConfig) {
return {
taskId,
pushNotificationConfig: {
...pushNotificationConfig,
id: pushNotificationConfig.id ?? taskId
}
};
}
function shouldSendPushNotification(previousTask, nextTask) {
const pushTriggerStates = ["completed", "failed", "canceled", "input-required"];
if (!pushTriggerStates.includes(nextTask.status.state)) {
return false;
}
return previousTask?.status.state !== nextTask.status.state;
}
async function saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender,
previousTask,
nextTask,
agentId,
logger
}) {
await taskStore.save({ agentId, data: nextTask });
if (!shouldSendPushNotification(previousTask, nextTask)) {
return;
}
void pushNotificationSender.sendNotifications({
agentId,
task: nextTask,
logger
}).catch((error) => {
logger?.error("Failed to schedule A2A push notification", error);
});
}
function extractFullStreamTextDelta(value) {
if (typeof value !== "object" || value === null || !("type" in value)) {
return null;
}
const chunk = value;
switch (chunk.type) {
case "text-delta":
if (typeof chunk.payload?.text === "string") {
return chunk.payload.text;
}
if (typeof chunk.payload?.delta === "string") {
return chunk.payload.delta;
}
if (typeof chunk.textDelta === "string") {
return chunk.textDelta;
}
if (typeof chunk.delta === "string") {
return chunk.delta;
}
if (typeof chunk.text === "string") {
return chunk.text;
}
return null;
default:
return null;
}
}
function extractFinalStructuredObject(value) {
if (typeof value !== "object" || value === null || !("type" in value)) {
return void 0;
}
const chunk = value;
if (chunk.type !== "object-result") {
return void 0;
}
const objectValue = chunk.payload?.object ?? chunk.object;
return objectValue && typeof objectValue === "object" ? objectValue : void 0;
}
function isTerminalTaskState(state) {
return ["completed", "failed", "canceled"].includes(state);
}
function artifactIdentity(artifact) {
return artifact.artifactId || artifact.name;
}
function areArtifactPartsEqual(left, right) {
if (left === right) {
return true;
}
if (left.length !== right.length) {
return false;
}
return left.every((part, index) => {
const other = right[index];
if (!other || part.kind !== other.kind) {
return false;
}
if (part.kind === "text" && other.kind === "text") {
return part.text === other.text;
}
return part === other;
});
}
function areArtifactsEqual(left, right) {
if (left === right) {
return true;
}
if (!left || !right) {
return left === right;
}
return left.artifactId === right.artifactId && left.name === right.name && left.description === right.description && left.metadata === right.metadata && areArtifactPartsEqual(left.parts, right.parts);
}
function areStatusMessagePartsEqual(left, right) {
return left === right || util.isDeepStrictEqual(left, right);
}
function areStatusMessagesEqual(left, right) {
if (left === right) {
return true;
}
if (!left || !right) {
return left === right;
}
return left.messageId === right.messageId && left.kind === right.kind && left.role === right.role && left.contextId === right.contextId && left.taskId === right.taskId && util.isDeepStrictEqual(left.referenceTaskIds, right.referenceTaskIds) && util.isDeepStrictEqual(left.extensions, right.extensions) && util.isDeepStrictEqual(left.metadata, right.metadata) && areStatusMessagePartsEqual(left.parts, right.parts);
}
function didTaskStatusChange(previous, next) {
return previous.status.state !== next.status.state || previous.status.timestamp !== next.status.timestamp || !areStatusMessagesEqual(previous.status.message, next.status.message);
}
function getTaskArtifactUpdates({ previous, next }) {
const previousArtifacts = new Map((previous.artifacts ?? []).map((artifact) => [artifactIdentity(artifact), artifact]));
const changedArtifacts = (next.artifacts ?? []).filter((artifact) => {
const priorArtifact = previousArtifacts.get(artifactIdentity(artifact));
return !priorArtifact || !areArtifactsEqual(priorArtifact, artifact);
});
return changedArtifacts.map((artifact, index) => ({
kind: "artifact-update",
taskId: next.id,
contextId: next.contextId,
lastChunk: isTerminalTaskState(next.status.state) && index === changedArtifacts.length - 1,
artifact: structuredClone(artifact)
}));
}
async function handleMessageSend({
requestId,
params,
taskStore,
pushNotificationStore,
pushNotificationSender,
agent,
agentId,
logger,
requestContext
}) {
validateMessageSendParams(params);
const { message, metadata } = params;
const { contextId } = message;
const taskId = message.taskId || crypto.randomUUID();
const {
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender
} = resolvePushNotificationPair({
pushNotificationStore,
pushNotificationSender
});
let currentData = await loadOrCreateTask({
taskId,
taskStore,
agentId,
message,
contextId,
metadata
});
if (params.configuration?.pushNotificationConfig) {
resolvedPushNotificationStore.set({
agentId,
config: createTaskPushNotificationConfig(taskId, params.configuration.pushNotificationConfig)
});
}
const context = createTaskContext({
task: currentData,
userMessage: message,
history: currentData.history || [],
activeCancellations: taskStore.activeCancellations
});
try {
const resourceId = metadata?.resourceId ?? message.metadata?.resourceId ?? agentId;
const result = await agent.generate([convertToCoreMessage(message)], {
runId: taskId,
requestContext,
...contextId ? { threadId: contextId, resourceId } : {}
});
const artifactUpdate = createArtifactUpdate({
taskId: currentData.id,
contextId: currentData.contextId,
text: result.text,
data: result.object
});
if (artifactUpdate) {
currentData = applyUpdateToTask(currentData, artifactUpdate);
}
currentData = applyUpdateToTask(currentData, {
state: "completed",
message: void 0
});
currentData.metadata = {
...currentData.metadata,
execution: {
toolCalls: result.toolCalls,
toolResults: result.toolResults,
usage: result.usage,
finishReason: result.finishReason
}
};
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
previousTask: context.task,
nextTask: currentData,
agentId,
logger
});
context.task = currentData;
} catch (handlerError) {
const failureStatusUpdate = {
state: "failed",
message: {
messageId: crypto.randomUUID(),
role: "agent",
parts: [
{
kind: "text",
text: `Handler failed: ${handlerError instanceof Error ? handlerError.message : String(handlerError)}`
}
],
kind: "message"
}
};
currentData = applyUpdateToTask(currentData, failureStatusUpdate);
try {
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
previousTask: context.task,
nextTask: currentData,
agentId,
logger
});
} catch (saveError) {
logger?.error(`Failed to save task ${currentData.id} after handler error:`, saveError?.message);
}
return normalizeError(handlerError, requestId, currentData.id, logger);
}
return createSuccessResponse(requestId, currentData);
}
async function handleTaskGet({
requestId,
taskStore,
agentId,
taskId
}) {
const task = await taskStore.load({ agentId, taskId });
if (!task) {
throw a2a.MastraA2AError.taskNotFound(taskId);
}
return createSuccessResponse(requestId, task);
}
async function loadTaskOrThrow({
taskStore,
agentId,
taskId
}) {
const task = await taskStore.load({ agentId, taskId });
if (!task) {
throw a2a.MastraA2AError.taskNotFound(taskId);
}
return task;
}
async function handleSetTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore,
agentId,
params
}) {
await loadTaskOrThrow({
taskStore,
agentId,
taskId: params.taskId
});
const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({
pushNotificationStore
});
const config = resolvedPushNotificationStore.set({
agentId,
config: createTaskPushNotificationConfig(params.taskId, params.pushNotificationConfig)
});
return createSuccessResponse(requestId, config);
}
async function handleGetTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore,
agentId,
params
}) {
await loadTaskOrThrow({
taskStore,
agentId,
taskId: params.id
});
const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({
pushNotificationStore
});
const config = resolvedPushNotificationStore.get({
agentId,
params
});
if (!config) {
throw a2a.MastraA2AError.invalidParams(
`Push notification config not found: ${params.pushNotificationConfigId ?? params.id}`
);
}
return createSuccessResponse(requestId, config);
}
async function handleListTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore,
agentId,
params
}) {
await loadTaskOrThrow({
taskStore,
agentId,
taskId: params.id
});
const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({
pushNotificationStore
});
const configs = resolvedPushNotificationStore.list({
agentId,
params
});
return createSuccessResponse(requestId, configs);
}
async function handleDeleteTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore,
agentId,
params
}) {
await loadTaskOrThrow({
taskStore,
agentId,
taskId: params.id
});
const { pushNotificationStore: resolvedPushNotificationStore } = resolvePushNotificationPair({
pushNotificationStore
});
const deleted = resolvedPushNotificationStore.delete({
agentId,
params
});
if (!deleted) {
throw a2a.MastraA2AError.invalidParams(`Push notification config not found: ${params.pushNotificationConfigId}`);
}
return createSuccessResponse(requestId, null);
}
async function* handleMessageStream({
requestId,
params,
taskStore,
pushNotificationStore,
pushNotificationSender,
agent,
agentId,
logger,
requestContext
}) {
validateMessageSendParams(params);
const { message, metadata } = params;
const { contextId } = message;
const taskId = message.taskId || crypto.randomUUID();
const {
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender
} = resolvePushNotificationPair({
pushNotificationStore,
pushNotificationSender
});
let currentData = await loadOrCreateTask({
taskId,
taskStore,
agentId,
message,
contextId,
metadata
});
if (params.configuration?.pushNotificationConfig) {
resolvedPushNotificationStore.set({
agentId,
config: createTaskPushNotificationConfig(taskId, params.configuration.pushNotificationConfig)
});
}
currentData = applyUpdateToTask(currentData, {
state: "working",
message: {
messageId: crypto.randomUUID(),
kind: "message",
role: "agent",
parts: [{ kind: "text", text: "Generating response..." }]
}
});
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
nextTask: currentData,
agentId,
logger
});
yield createSuccessResponse(requestId, currentData);
try {
const resourceId = metadata?.resourceId ?? message.metadata?.resourceId ?? agentId;
const result = await agent.stream([convertToCoreMessage(message)], {
runId: taskId,
requestContext,
...contextId ? { threadId: contextId, resourceId } : {}
});
let sawTextArtifact = false;
let pendingTextChunk;
let structuredData;
for await (const chunk of result.fullStream) {
const textDelta = extractFullStreamTextDelta(chunk);
if (textDelta !== null) {
if (!pendingTextChunk) {
pendingTextChunk = textDelta;
continue;
}
const textUpdate = createTextChunkArtifactUpdate({
taskId: currentData.id,
contextId: currentData.contextId,
text: pendingTextChunk,
append: sawTextArtifact,
lastChunk: false
});
currentData = applyUpdateToTask(currentData, textUpdate);
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
nextTask: currentData,
agentId,
logger
});
yield createSuccessResponse(requestId, textUpdate);
sawTextArtifact = true;
pendingTextChunk = textDelta;
continue;
}
const finalStructuredObject = extractFinalStructuredObject(chunk);
if (finalStructuredObject) {
structuredData = finalStructuredObject;
}
}
structuredData ??= await result.object;
if (!pendingTextChunk && !sawTextArtifact) {
const finalText = await result.text;
if (finalText) {
pendingTextChunk = finalText;
}
}
if (pendingTextChunk) {
const textUpdate = createTextChunkArtifactUpdate({
taskId: currentData.id,
contextId: currentData.contextId,
text: pendingTextChunk,
append: sawTextArtifact,
lastChunk: !structuredData
});
currentData = applyUpdateToTask(currentData, textUpdate);
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
nextTask: currentData,
agentId,
logger
});
yield createSuccessResponse(requestId, textUpdate);
sawTextArtifact = true;
pendingTextChunk = void 0;
}
if (structuredData) {
const dataUpdate = createDataArtifactUpdate({
taskId: currentData.id,
contextId: currentData.contextId,
data: structuredData,
lastChunk: true
});
currentData = applyUpdateToTask(currentData, dataUpdate);
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
nextTask: currentData,
agentId,
logger
});
yield createSuccessResponse(requestId, dataUpdate);
}
const previousTask = currentData;
const completedTask = applyUpdateToTask(currentData, {
state: "completed",
message: void 0
});
completedTask.metadata = {
...completedTask.metadata,
execution: {
toolCalls: await result.toolCalls,
toolResults: await result.toolResults,
usage: await result.usage,
finishReason: await result.finishReason
}
};
currentData = completedTask;
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
previousTask,
nextTask: currentData,
agentId,
logger
});
} catch (handlerError) {
const previousTask = currentData;
currentData = applyUpdateToTask(currentData, {
state: "failed",
message: {
messageId: crypto.randomUUID(),
role: "agent",
parts: [
{
kind: "text",
text: `Handler failed: ${handlerError instanceof Error ? handlerError.message : String(handlerError)}`
}
],
kind: "message"
}
});
try {
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
previousTask,
nextTask: currentData,
agentId,
logger
});
} catch (saveError) {
logger?.error(`Failed to save task ${currentData.id} after handler error:`, saveError?.message);
}
}
yield createSuccessResponse(requestId, {
kind: "status-update",
taskId: currentData.id,
contextId: currentData.contextId,
status: currentData.status,
final: true
});
}
async function* handleTaskResubscribe({
requestId,
taskStore,
agentId,
taskId,
abortSignal
}) {
let snapshot = taskStore.loadWithVersion({ agentId, taskId });
if (!snapshot) {
throw a2a.MastraA2AError.taskNotFound(taskId);
}
yield createSuccessResponse(requestId, snapshot.task);
if (isTerminalTaskState(snapshot.task.status.state)) {
return;
}
while (true) {
const { task, version } = snapshot;
const nextUpdate = await taskStore.waitForNextUpdate({
agentId,
taskId,
afterVersion: version,
signal: abortSignal
});
for (const artifactUpdate of getTaskArtifactUpdates({ previous: task, next: nextUpdate.task })) {
yield createSuccessResponse(requestId, artifactUpdate);
}
if (didTaskStatusChange(task, nextUpdate.task)) {
yield createSuccessResponse(requestId, {
kind: "status-update",
taskId: nextUpdate.task.id,
contextId: nextUpdate.task.contextId,
status: nextUpdate.task.status,
final: isTerminalTaskState(nextUpdate.task.status.state)
});
}
if (isTerminalTaskState(nextUpdate.task.status.state)) {
return;
}
snapshot = nextUpdate;
}
}
function getTaskIdFromParams(params) {
if (!params || typeof params !== "object") {
return void 0;
}
if ("id" in params && typeof params.id === "string") {
return params.id;
}
if ("taskId" in params && typeof params.taskId === "string") {
return params.taskId;
}
if ("message" in params && params.message && typeof params.message === "object" && "taskId" in params.message) {
return typeof params.message.taskId === "string" ? params.message.taskId : void 0;
}
return void 0;
}
function isAsyncIterable(value) {
return !!value && typeof value === "object" && Symbol.asyncIterator in value;
}
function createA2AJsonResponse(payload) {
return Response.json(payload);
}
function createA2ASSEResponse(payload) {
const encoder = new TextEncoder();
const iterable = isAsyncIterable(payload) ? payload : (async function* () {
yield payload;
})();
const stream = new ReadableStream({
async start(controller) {
try {
for await (const chunk of iterable) {
controller.enqueue(encoder.encode(`data: ${JSON.stringify(chunk)}
`));
}
} catch (error) {
controller.error(error);
return;
}
controller.close();
}
});
return new Response(stream, {
headers: {
"Content-Type": "text/event-stream; charset=utf-8",
"Cache-Control": "no-cache",
Connection: "keep-alive",
"X-Accel-Buffering": "no"
}
});
}
async function handleTaskCancel({
requestId,
taskStore,
pushNotificationSender,
agentId,
taskId,
logger
}) {
let data = await taskStore.load({
agentId,
taskId
});
if (!data) {
throw a2a.MastraA2AError.taskNotFound(taskId);
}
const finalStates = ["completed", "failed", "canceled"];
if (finalStates.includes(data.status.state)) {
logger?.info(`Task ${taskId} already in final state ${data.status.state}, cannot cancel.`);
return createSuccessResponse(requestId, data);
}
taskStore.activeCancellations.add(taskId);
const cancelUpdate = {
state: "canceled",
message: {
role: "agent",
parts: [{ kind: "text", text: "Task cancelled by request." }],
kind: "message",
messageId: crypto.randomUUID()
}
};
const previousTask = data;
data = applyUpdateToTask(data, cancelUpdate);
await saveTaskAndMaybeSendPushNotification({
taskStore,
pushNotificationSender: resolvePushNotificationPair({ pushNotificationSender }).pushNotificationSender,
previousTask,
nextTask: data,
agentId,
logger
});
taskStore.activeCancellations.delete(taskId);
return createSuccessResponse(requestId, data);
}
async function getAgentExecutionHandler({
requestId,
mastra,
agentId,
requestContext,
method,
params,
taskStore,
pushNotificationStore,
pushNotificationSender,
logger,
abortSignal
}) {
const agent = await chunkW243A6ZK_cjs.getAgentFromSystem({ mastra, agentId });
const {
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender
} = resolvePushNotificationPair({
pushNotificationStore,
pushNotificationSender
});
let taskId;
try {
taskId = getTaskIdFromParams(params);
switch (method) {
case "message/send": {
const result = await handleMessageSend({
requestId,
params,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender,
agent,
agentId,
logger,
requestContext
});
return result;
}
case "message/stream": {
const result = await handleMessageStream({
requestId,
taskStore,
params,
pushNotificationStore: resolvedPushNotificationStore,
pushNotificationSender: resolvedPushNotificationSender,
agent,
agentId,
logger,
requestContext
});
return result;
}
case "tasks/get": {
const result = await handleTaskGet({
requestId,
taskStore,
agentId,
taskId: taskId || "No task ID provided"
});
return result;
}
case "tasks/cancel": {
const result = await handleTaskCancel({
requestId,
taskStore,
pushNotificationSender: resolvedPushNotificationSender,
agentId,
taskId: taskId || "No task ID provided",
logger
});
return result;
}
case "tasks/resubscribe":
return await handleTaskResubscribe({
requestId,
taskStore,
agentId,
taskId: taskId || "No task ID provided",
abortSignal
});
case "tasks/pushNotificationConfig/set":
return await handleSetTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
agentId,
params
});
case "tasks/pushNotificationConfig/get":
return await handleGetTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
agentId,
params
});
case "tasks/pushNotificationConfig/list":
return await handleListTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
agentId,
params
});
case "tasks/pushNotificationConfig/delete":
return await handleDeleteTaskPushNotificationConfig({
requestId,
taskStore,
pushNotificationStore: resolvedPushNotificationStore,
agentId,
params
});
case "agent/getAuthenticatedExtendedCard":
throw a2a.MastraA2AError.extendedAgentCardNotConfigured();
default:
throw a2a.MastraA2AError.methodNotFound(method);
}
} catch (error) {
if (error instanceof a2a.MastraA2AError && taskId && !error.taskId) {
error.taskId = taskId;
}
return normalizeError(error, requestId, taskId, logger);
}
}
var GET_AGENT_CARD_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/.well-known/:agentId/agent-card.json",
responseType: "json",
pathParamSchema: chunkWE6BWC6H_cjs.a2aAgentIdPathParams,
responseSchema: chunkWE6BWC6H_cjs.agentCardResponseSchema,
summary: "Get agent card",
description: "Returns the agent card information for A2A protocol discovery",
tags: ["Agent-to-Agent"],
requiresAuth: true,
handler: async (ctx) => {
const executionUrl = getA2AExecutionUrl({
agentId: ctx.agentId,
request: ctx.request,
routePrefix: ctx.routePrefix
});
return getAgentCardByIdHandler({
mastra: ctx.mastra,
requestContext: ctx.requestContext,
agentId: ctx.agentId,
executionUrl,
pushNotifications: true
});
}
});
var AGENT_EXECUTION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/a2a/:agentId",
responseType: "datastream-response",
pathParamSchema: chunkWE6BWC6H_cjs.a2aAgentIdPathParams,
bodySchema: chunkWE6BWC6H_cjs.agentExecutionBodySchema,
responseSchema: chunkWE6BWC6H_cjs.agentExecutionResponseSchema,
summary: "Execute agent",
description: "Executes an agent action via JSON-RPC 2.0 over A2A protocol",
tags: ["Agent-to-Agent"],
requiresAuth: true,
handler: async ({ mastra, agentId, requestContext, taskStore, abortSignal, ...bodyParams }) => {
const { id: requestId, method } = bodyParams;
const params = "params" in bodyParams ? bodyParams.params : void 0;
const result = await getAgentExecutionHandler({
requestId,
mastra,
agentId,
requestContext,
method,
params,
taskStore,
abortSignal
});
if (method === "message/stream" || method === "tasks/resubscribe") {
return createA2ASSEResponse(result);
}
return createA2AJsonResponse(result);
}
});
exports.AGENT_EXECUTION_ROUTE = AGENT_EXECUTION_ROUTE;
exports.GET_AGENT_CARD_ROUTE = GET_AGENT_CARD_ROUTE;
exports.a2a_exports = a2a_exports;
exports.getAgentCardByIdHandler = getAgentCardByIdHandler;
exports.getAgentExecutionHandler = getAgentExecutionHandler;
exports.handleDeleteTaskPushNotificationConfig = handleDeleteTaskPushNotificationConfig;
exports.handleGetTaskPushNotificationConfig = handleGetTaskPushNotificationConfig;
exports.handleListTaskPushNotificationConfig = handleListTaskPushNotificationConfig;
exports.handleMessageSend = handleMessageSend;
exports.handleMessageStream = handleMessageStream;
exports.handleSetTaskPushNotificationConfig = handleSetTaskPushNotificationConfig;
exports.handleTaskCancel = handleTaskCancel;
exports.handleTaskGet = handleTaskGet;
exports.handleTaskResubscribe = handleTaskResubscribe;
//# sourceMappingURL=chunk-LVCJ4W5T.cjs.map
//# sourceMappingURL=chunk-LVCJ4W5T.cjs.map

Sorry, the diff of this file is too big to display

'use strict';
var chunkGKIWZDPL_cjs = require('./chunk-GKIWZDPL.cjs');
var chunkPXLC5SNM_cjs = require('./chunk-PXLC5SNM.cjs');
var chunk24YYB3J7_cjs = require('./chunk-24YYB3J7.cjs');
var chunkPFKYMKIH_cjs = require('./chunk-PFKYMKIH.cjs');
var chunk3JVOIOO6_cjs = require('./chunk-3JVOIOO6.cjs');
var v4 = require('zod/v4');
var semanticRecallSchema = v4.z.object({
topK: v4.z.number().describe("Number of semantically similar messages to retrieve"),
messageRange: v4.z.union([
v4.z.number(),
v4.z.object({
before: v4.z.number(),
after: v4.z.number()
})
]).describe("Amount of surrounding context to include with each retrieved message"),
scope: v4.z.enum(["thread", "resource"]).optional().describe("Scope for semantic search queries"),
threshold: v4.z.number().min(0).max(1).optional().describe("Minimum similarity score threshold"),
indexName: v4.z.string().optional().describe("Index name for the vector store")
});
var titleGenerationSchema = v4.z.union([
v4.z.boolean(),
v4.z.object({
model: v4.z.string().describe("Model ID in format provider/model-name (ModelRouterModelId)"),
instructions: v4.z.string().optional().describe("Custom instructions for title generation")
})
]);
var serializedObservationConfigSchema = v4.z.object({
model: v4.z.string().optional().describe("Observer model ID"),
messageTokens: v4.z.number().optional().describe("Token threshold that triggers observation"),
modelSettings: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Model settings (temperature, etc.)"),
providerOptions: v4.z.record(v4.z.string(), v4.z.record(v4.z.string(), v4.z.unknown()).optional()).optional().describe("Provider-specific options"),
maxTokensPerBatch: v4.z.number().optional().describe("Maximum tokens per batch"),
bufferTokens: v4.z.union([v4.z.number(), v4.z.literal(false)]).optional().describe("Async buffering interval or false"),
bufferActivation: v4.z.number().optional().describe("Ratio of buffered observations to activate"),
blockAfter: v4.z.number().optional().describe("Token threshold for synchronous blocking")
});
var serializedReflectionConfigSchema = v4.z.object({
model: v4.z.string().optional().describe("Reflector model ID"),
observationTokens: v4.z.number().optional().describe("Token threshold that triggers reflection"),
modelSettings: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Model settings (temperature, etc.)"),
providerOptions: v4.z.record(v4.z.string(), v4.z.record(v4.z.string(), v4.z.unknown()).optional()).optional().describe("Provider-specific options"),
blockAfter: v4.z.number().optional().describe("Token threshold for synchronous blocking"),
bufferActivation: v4.z.number().optional().describe("Ratio for async reflection buffering")
});
var serializedObservationalMemoryConfigObjectSchema = v4.z.object({
model: v4.z.string().optional().describe("Model ID for both Observer and Reflector"),
scope: v4.z.enum(["resource", "thread"]).optional().describe("Memory scope"),
shareTokenBudget: v4.z.boolean().optional().describe("Share token budget between messages and observations"),
observation: serializedObservationConfigSchema.optional().describe("Observation step configuration"),
reflection: serializedReflectionConfigSchema.optional().describe("Reflection step configuration")
});
var serializedObservationalMemoryConfigSchema = v4.z.union([
v4.z.boolean(),
serializedObservationalMemoryConfigObjectSchema
]);
var serializedMemoryConfigSchema = v4.z.object({
vector: v4.z.union([v4.z.string(), v4.z.literal(false)]).optional().describe("Vector database identifier or false to disable"),
options: v4.z.object({
readOnly: v4.z.boolean().optional(),
lastMessages: v4.z.union([v4.z.number(), v4.z.literal(false)]).optional(),
semanticRecall: v4.z.union([v4.z.boolean(), semanticRecallSchema]).optional(),
generateTitle: titleGenerationSchema.optional()
}).optional().describe("Memory behavior configuration, excluding workingMemory and threads"),
embedder: v4.z.string().optional().describe('Embedding model ID in the format "provider/model" (e.g., "openai/text-embedding-3-small")'),
embedderOptions: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Options to pass to the embedder, omitting telemetry"),
observationalMemory: serializedObservationalMemoryConfigSchema.optional().describe("Serialized observational memory configuration")
}).refine(
(data) => {
const semanticRecall = data.options?.semanticRecall;
const semanticRecallEnabled = semanticRecall === true || typeof semanticRecall === "object" && semanticRecall !== null;
if (semanticRecallEnabled) {
const hasVector = typeof data.vector === "string" && data.vector.length > 0;
const hasEmbedder = typeof data.embedder === "string" && data.embedder.length > 0;
return hasVector && hasEmbedder;
}
return true;
},
{
message: "Semantic recall requires both vector and embedder to be configured",
path: ["options", "semanticRecall"]
}
);
var storedAgentIdPathParams = v4.z.object({
storedAgentId: v4.z.string().describe("Unique identifier for the stored agent")
});
var storageOrderBySchema = v4.z.object({
field: v4.z.enum(["createdAt", "updatedAt"]).optional(),
direction: v4.z.enum(["ASC", "DESC"]).optional()
});
var listStoredAgentsQuerySchema = chunk3JVOIOO6_cjs.createPagePaginationSchema(100).extend({
orderBy: storageOrderBySchema.optional(),
status: v4.z.enum(["draft", "published", "archived"]).optional().default("published").describe("Filter agents by status (defaults to published)"),
authorId: v4.z.string().optional().describe("Filter agents by author identifier"),
visibility: v4.z.enum(["public"]).optional().describe("Filter to only public agents"),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Filter agents by metadata key-value pairs"),
favoritedOnly: v4.z.stringbool().optional().describe("When true, return only agents favorited by the caller (requires the `favorites` EE feature)"),
pinFavoritedFor: v4.z.string().optional().describe(
"When set, treat the given subject (user/role) as the favoriting principal for `favoritedOnly` instead of the caller"
)
});
var scorerConfigSchema = v4.z.object({
description: v4.z.string().optional(),
sampling: v4.z.union([
v4.z.object({ type: v4.z.literal("none") }),
v4.z.object({ type: v4.z.literal("ratio"), rate: v4.z.number().min(0).max(1) })
]).optional(),
rules: chunk24YYB3J7_cjs.ruleGroupSchema.optional()
});
var agentInstructionBlockSchema = v4.z.discriminatedUnion("type", [
v4.z.object({ type: v4.z.literal("text"), content: v4.z.string() }),
v4.z.object({ type: v4.z.literal("prompt_block_ref"), id: v4.z.string() }),
v4.z.object({ type: v4.z.literal("prompt_block"), content: v4.z.string(), rules: chunk24YYB3J7_cjs.ruleGroupSchema.optional() })
]);
function conditionalFieldSchema(valueSchema) {
const variantSchema = v4.z.object({
value: valueSchema,
rules: chunk24YYB3J7_cjs.ruleGroupSchema.optional()
});
return v4.z.union([valueSchema, v4.z.array(variantSchema)]);
}
var instructionsSchema = v4.z.union([v4.z.string(), v4.z.array(agentInstructionBlockSchema)]).describe("System instructions for the agent (string or array of instruction blocks)");
var modelConfigSchema = v4.z.object({
provider: v4.z.string().describe("Model provider (e.g., openai, anthropic)"),
name: v4.z.string().describe("Model name (e.g., gpt-4o, claude-3-opus)")
}).passthrough();
var toolConfigSchema = v4.z.object({ description: v4.z.string().optional(), rules: chunk24YYB3J7_cjs.ruleGroupSchema.optional() });
var toolsConfigSchema = v4.z.record(v4.z.string(), toolConfigSchema);
var mcpClientToolsConfigSchema = v4.z.object({
tools: v4.z.record(v4.z.string(), toolConfigSchema).optional()
});
var skillConfigSchema = v4.z.object({
description: v4.z.string().optional(),
instructions: v4.z.string().optional(),
pin: v4.z.string().optional(),
strategy: v4.z.enum(["latest", "live"]).optional()
});
var skillsConfigSchema = v4.z.record(v4.z.string(), skillConfigSchema);
var workspaceRefSchema = v4.z.discriminatedUnion("type", [
v4.z.object({ type: v4.z.literal("id"), workspaceId: v4.z.string() }),
v4.z.object({ type: v4.z.literal("inline"), config: chunkGKIWZDPL_cjs.snapshotConfigSchema }),
v4.z.object({
type: v4.z.literal("provider"),
provider: v4.z.string().describe("Workspace provider identifier"),
config: v4.z.record(v4.z.string(), v4.z.unknown()).describe("Provider-specific configuration")
})
]);
var screencastOptionsSchema = v4.z.object({
format: v4.z.enum(["jpeg", "png"]).optional().describe("Image format (default: jpeg)"),
quality: v4.z.number().min(0).max(100).optional().describe("JPEG quality 0-100 (default: 80)"),
maxWidth: v4.z.number().optional().describe("Max width in pixels (default: 1280)"),
maxHeight: v4.z.number().optional().describe("Max height in pixels (default: 720)"),
everyNthFrame: v4.z.number().optional().describe("Capture every Nth frame (default: 1)")
});
var browserConfigSchema = v4.z.object({
provider: v4.z.string().describe("Browser provider type (e.g., stagehand, playwright)"),
headless: v4.z.boolean().optional().describe("Run browser in headless mode (default: true)"),
viewport: v4.z.object({
width: v4.z.number().describe("Viewport width in pixels"),
height: v4.z.number().describe("Viewport height in pixels")
}).optional().describe("Browser viewport dimensions"),
timeout: v4.z.number().optional().describe("Default timeout in milliseconds (default: 10000)"),
screencast: screencastOptionsSchema.optional().describe("Screencast options for streaming browser frames")
});
var browserRefSchema = v4.z.object({
type: v4.z.literal("inline"),
config: browserConfigSchema
});
var processorPhaseSchema = v4.z.enum([
"processInput",
"processInputStep",
"processOutputStream",
"processOutputResult",
"processOutputStep"
]);
var processorGraphStepSchema = v4.z.object({
id: v4.z.string().describe("Unique ID for this step within the graph"),
providerId: v4.z.string().describe("ProcessorProvider ID that creates this processor"),
config: v4.z.record(v4.z.string(), v4.z.unknown()).describe("Configuration matching the provider configSchema"),
enabledPhases: v4.z.array(processorPhaseSchema).min(1).describe("Which processor phases to enable")
});
var processorGraphEntryDepth3 = v4.z.discriminatedUnion("type", [
v4.z.object({ type: v4.z.literal("step"), step: processorGraphStepSchema })
]);
var processorGraphEntryDepth2 = v4.z.discriminatedUnion("type", [
v4.z.object({ type: v4.z.literal("step"), step: processorGraphStepSchema }),
v4.z.object({ type: v4.z.literal("parallel"), branches: v4.z.array(v4.z.array(processorGraphEntryDepth3)) }),
v4.z.object({
type: v4.z.literal("conditional"),
conditions: v4.z.array(
v4.z.object({
steps: v4.z.array(processorGraphEntryDepth3),
rules: chunk24YYB3J7_cjs.ruleGroupSchema.optional()
})
)
})
]);
var processorGraphEntrySchema = v4.z.discriminatedUnion("type", [
v4.z.object({ type: v4.z.literal("step"), step: processorGraphStepSchema }),
v4.z.object({ type: v4.z.literal("parallel"), branches: v4.z.array(v4.z.array(processorGraphEntryDepth2)) }),
v4.z.object({
type: v4.z.literal("conditional"),
conditions: v4.z.array(
v4.z.object({
steps: v4.z.array(processorGraphEntryDepth2),
rules: chunk24YYB3J7_cjs.ruleGroupSchema.optional()
})
)
})
]);
var storedProcessorGraphSchema = v4.z.object({
steps: v4.z.array(processorGraphEntrySchema).describe("Ordered list of processor graph entries")
});
var snapshotConfigSchema2 = v4.z.object({
name: v4.z.string().describe("Name of the agent"),
description: v4.z.string().optional().describe("Description of the agent"),
instructions: instructionsSchema,
model: conditionalFieldSchema(modelConfigSchema).describe(
"Model configuration \u2014 static value or array of conditional variants"
),
tools: conditionalFieldSchema(toolsConfigSchema).optional().describe("Tool keys mapped to per-tool config \u2014 static or conditional"),
defaultOptions: conditionalFieldSchema(chunkPFKYMKIH_cjs.defaultOptionsSchema).optional().describe("Default options for generate/stream calls \u2014 static or conditional"),
workflows: conditionalFieldSchema(v4.z.record(v4.z.string(), toolConfigSchema)).optional().describe("Workflow keys with optional per-workflow config \u2014 static or conditional"),
agents: conditionalFieldSchema(v4.z.record(v4.z.string(), toolConfigSchema)).optional().describe("Agent keys with optional per-agent config \u2014 static or conditional"),
integrationTools: conditionalFieldSchema(v4.z.record(v4.z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of tool provider IDs to their tool configurations \u2014 static or conditional"),
toolProviders: conditionalFieldSchema(chunkPXLC5SNM_cjs.toolProvidersSchema).optional().describe(
"Tool provider connections and per-tool config (provider-agnostic). Coexists with the deprecated `integrationTools` field."
),
mcpClients: conditionalFieldSchema(v4.z.record(v4.z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of stored MCP client IDs to their tool configurations \u2014 static or conditional"),
inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Input processor graph \u2014 static or conditional"),
outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Output processor graph \u2014 static or conditional"),
memory: conditionalFieldSchema(serializedMemoryConfigSchema).optional().describe("Memory configuration \u2014 static or conditional"),
scorers: conditionalFieldSchema(v4.z.record(v4.z.string(), scorerConfigSchema)).optional().describe("Scorer keys with optional sampling config \u2014 static or conditional"),
skills: conditionalFieldSchema(skillsConfigSchema).optional().describe("Skill IDs mapped to per-skill config \u2014 static or conditional"),
workspace: conditionalFieldSchema(workspaceRefSchema).optional().describe("Workspace reference (stored ID or inline config) \u2014 static or conditional"),
browser: v4.z.union([conditionalFieldSchema(browserRefSchema), v4.z.boolean(), v4.z.null()]).optional().describe("Browser configuration \u2014 object config, true (apply default), false/null (disable)"),
requestContextSchema: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("JSON Schema defining valid request context variables for conditional rule evaluation")
});
var agentMetadataSchema = v4.z.object({
authorId: v4.z.string().optional().describe("Author identifier for multi-tenant filtering"),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Additional metadata for the agent"),
visibility: v4.z.enum(["private", "public"]).optional().describe("Agent visibility: private (owner/admin only) or public (any reader)")
});
var snapshotConfigCreateSchema = snapshotConfigSchema2.extend({
model: conditionalFieldSchema(modelConfigSchema).optional().describe(
"Model configuration \u2014 static value or array of conditional variants. When omitted, the builder default model is applied server-side."
)
});
var createStoredAgentBodySchema = v4.z.object({
id: v4.z.string().optional().describe("Unique identifier for the agent. If not provided, derived from name."),
authorId: v4.z.string().optional().describe("Author identifier for multi-tenant filtering"),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Additional metadata for the agent"),
visibility: v4.z.enum(["private", "public"]).optional().describe("Agent visibility: private (owner/admin only) or public (any reader)")
}).merge(snapshotConfigCreateSchema);
var snapshotConfigUpdateSchema = snapshotConfigSchema2.extend({
memory: v4.z.union([conditionalFieldSchema(serializedMemoryConfigSchema), v4.z.null()]).optional().describe("Memory configuration \u2014 static, conditional, or null to disable memory")
});
var updateStoredAgentBodySchema = agentMetadataSchema.partial().merge(snapshotConfigUpdateSchema.partial()).extend({
changeMessage: v4.z.string().trim().max(500).optional().describe("Optional message describing the changes for the auto-created version")
});
var exportStoredAgentBodySchema = snapshotConfigUpdateSchema.partial();
var openStoredAgentChangeRequestBodySchema = exportStoredAgentBodySchema.extend({
changeMessage: v4.z.string().trim().max(500).optional(),
userName: v4.z.string().trim().min(1).max(120).optional(),
inspectOnly: v4.z.boolean().optional()
});
var resolvedAuthorSchema = v4.z.object({
id: v4.z.string(),
name: v4.z.string().optional(),
email: v4.z.string().optional(),
avatarUrl: v4.z.string().optional()
});
var storedAgentSchema = v4.z.object({
// Thin agent record fields
id: v4.z.string(),
status: v4.z.string().describe("Agent status: draft or published"),
activeVersionId: v4.z.string().optional(),
authorId: v4.z.string().optional(),
author: resolvedAuthorSchema.optional().describe("Resolved author identity (when an auth provider is configured)"),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional(),
visibility: v4.z.enum(["private", "public"]).optional(),
favoriteCount: v4.z.number().int().nonnegative().optional().describe("Number of users who have favorited this agent"),
isFavorited: v4.z.boolean().optional().describe("Whether the requesting user has favorited this agent"),
createdAt: v4.z.coerce.date(),
updatedAt: v4.z.coerce.date(),
// Version snapshot config fields (resolved from active version)
name: v4.z.string().describe("Name of the agent"),
description: v4.z.string().optional().describe("Description of the agent"),
instructions: instructionsSchema,
model: conditionalFieldSchema(modelConfigSchema).describe(
"Model configuration \u2014 static value or array of conditional variants"
),
tools: conditionalFieldSchema(toolsConfigSchema).optional().describe("Tool keys mapped to per-tool config \u2014 static or conditional"),
defaultOptions: conditionalFieldSchema(chunkPFKYMKIH_cjs.defaultOptionsSchema).optional().describe("Default options for generate/stream calls \u2014 static or conditional"),
workflows: conditionalFieldSchema(v4.z.record(v4.z.string(), toolConfigSchema)).optional().describe("Workflow keys with optional per-workflow config \u2014 static or conditional"),
agents: conditionalFieldSchema(v4.z.record(v4.z.string(), toolConfigSchema)).optional().describe("Agent keys with optional per-agent config \u2014 static or conditional"),
integrationTools: conditionalFieldSchema(v4.z.record(v4.z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of tool provider IDs to their tool configurations \u2014 static or conditional"),
toolProviders: conditionalFieldSchema(chunkPXLC5SNM_cjs.toolProvidersSchema).optional().describe(
"Tool provider connections and per-tool config (provider-agnostic). Coexists with the deprecated `integrationTools` field."
),
mcpClients: conditionalFieldSchema(v4.z.record(v4.z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of stored MCP client IDs to their tool configurations \u2014 static or conditional"),
inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Input processor graph \u2014 static or conditional"),
outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema).optional().describe("Output processor graph \u2014 static or conditional"),
memory: conditionalFieldSchema(serializedMemoryConfigSchema).optional().describe("Memory configuration \u2014 static or conditional"),
scorers: conditionalFieldSchema(v4.z.record(v4.z.string(), scorerConfigSchema)).optional().describe("Scorer keys with optional sampling config \u2014 static or conditional"),
skills: conditionalFieldSchema(skillsConfigSchema).optional().describe("Skill IDs mapped to per-skill config \u2014 static or conditional"),
workspace: conditionalFieldSchema(workspaceRefSchema).optional().describe("Workspace reference (stored ID or inline config) \u2014 static or conditional"),
browser: v4.z.union([conditionalFieldSchema(browserRefSchema), v4.z.boolean(), v4.z.null()]).optional().describe("Browser configuration \u2014 object config, true (apply default), false/null (disable)"),
requestContextSchema: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("JSON Schema defining valid request context variables")
});
var listStoredAgentsResponseSchema = chunk3JVOIOO6_cjs.paginationInfoSchema.extend({
agents: v4.z.array(storedAgentSchema)
});
var getStoredAgentResponseSchema = storedAgentSchema;
var createStoredAgentResponseSchema = storedAgentSchema;
var updateStoredAgentResponseSchema = v4.z.union([
// Thin agent record (no version config)
v4.z.object({
id: v4.z.string(),
status: v4.z.string(),
activeVersionId: v4.z.string().optional(),
authorId: v4.z.string().optional(),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional(),
visibility: v4.z.enum(["private", "public"]).optional(),
createdAt: v4.z.coerce.date(),
updatedAt: v4.z.coerce.date()
}),
// Resolved agent (thin record + version config)
storedAgentSchema
]);
var deleteStoredAgentResponseSchema = v4.z.object({
success: v4.z.boolean(),
message: v4.z.string()
});
var getStoredAgentDependentsResponseSchema = v4.z.object({
dependents: v4.z.array(
v4.z.object({
id: v4.z.string(),
name: v4.z.string()
})
),
hiddenCount: v4.z.number().int().nonnegative()
});
var exportStoredAgentResponseSchema = v4.z.object({
agentId: v4.z.string(),
fileName: v4.z.string(),
content: v4.z.string(),
config: v4.z.record(v4.z.string(), v4.z.unknown())
});
var openStoredAgentChangeRequestResponseSchema = v4.z.object({
id: v4.z.union([v4.z.string(), v4.z.number()]).optional(),
url: v4.z.string(),
ref: v4.z.string().optional()
});
var previewInstructionsBodySchema = v4.z.object({
blocks: v4.z.array(agentInstructionBlockSchema).describe("Array of instruction blocks to resolve"),
context: v4.z.record(v4.z.string(), v4.z.unknown()).optional().default({}).describe("Request context for variable interpolation and rule evaluation")
});
var previewInstructionsResponseSchema = v4.z.object({
result: v4.z.string().describe("The resolved instructions string")
});
exports.conditionalFieldSchema = conditionalFieldSchema;
exports.createStoredAgentBodySchema = createStoredAgentBodySchema;
exports.createStoredAgentResponseSchema = createStoredAgentResponseSchema;
exports.deleteStoredAgentResponseSchema = deleteStoredAgentResponseSchema;
exports.exportStoredAgentBodySchema = exportStoredAgentBodySchema;
exports.exportStoredAgentResponseSchema = exportStoredAgentResponseSchema;
exports.getStoredAgentDependentsResponseSchema = getStoredAgentDependentsResponseSchema;
exports.getStoredAgentResponseSchema = getStoredAgentResponseSchema;
exports.instructionsSchema = instructionsSchema;
exports.listStoredAgentsQuerySchema = listStoredAgentsQuerySchema;
exports.listStoredAgentsResponseSchema = listStoredAgentsResponseSchema;
exports.modelConfigSchema = modelConfigSchema;
exports.openStoredAgentChangeRequestBodySchema = openStoredAgentChangeRequestBodySchema;
exports.openStoredAgentChangeRequestResponseSchema = openStoredAgentChangeRequestResponseSchema;
exports.previewInstructionsBodySchema = previewInstructionsBodySchema;
exports.previewInstructionsResponseSchema = previewInstructionsResponseSchema;
exports.processorGraphEntrySchema = processorGraphEntrySchema;
exports.processorGraphStepSchema = processorGraphStepSchema;
exports.processorPhaseSchema = processorPhaseSchema;
exports.resolvedAuthorSchema = resolvedAuthorSchema;
exports.scorerConfigSchema = scorerConfigSchema;
exports.semanticRecallSchema = semanticRecallSchema;
exports.serializedMemoryConfigSchema = serializedMemoryConfigSchema;
exports.serializedObservationConfigSchema = serializedObservationConfigSchema;
exports.serializedObservationalMemoryConfigObjectSchema = serializedObservationalMemoryConfigObjectSchema;
exports.serializedObservationalMemoryConfigSchema = serializedObservationalMemoryConfigSchema;
exports.serializedReflectionConfigSchema = serializedReflectionConfigSchema;
exports.snapshotConfigSchema = snapshotConfigSchema2;
exports.storedAgentIdPathParams = storedAgentIdPathParams;
exports.storedAgentSchema = storedAgentSchema;
exports.storedProcessorGraphSchema = storedProcessorGraphSchema;
exports.titleGenerationSchema = titleGenerationSchema;
exports.toolConfigSchema = toolConfigSchema;
exports.toolsConfigSchema = toolsConfigSchema;
exports.updateStoredAgentBodySchema = updateStoredAgentBodySchema;
exports.updateStoredAgentResponseSchema = updateStoredAgentResponseSchema;
//# sourceMappingURL=chunk-NIMP2XEL.cjs.map
//# sourceMappingURL=chunk-NIMP2XEL.cjs.map
{"version":3,"sources":["../src/server/schemas/memory-config.ts","../src/server/schemas/stored-agents.ts"],"names":["z","createPagePaginationSchema","ruleGroupSchema","snapshotConfigSchema","defaultOptionsSchema","toolProvidersSchema","paginationInfoSchema"],"mappings":"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","file":"chunk-NIMP2XEL.cjs","sourcesContent":["import { z } from 'zod/v4';\n\n/**\n * Shared memory configuration schemas for agent storage\n * These schemas match the SerializedMemoryConfig type from @mastra/core\n */\n\n/**\n * Semantic recall configuration for vector-based memory retrieval\n */\nexport const semanticRecallSchema = z.object({\n topK: z.number().describe('Number of semantically similar messages to retrieve'),\n messageRange: z\n .union([\n z.number(),\n z.object({\n before: z.number(),\n after: z.number(),\n }),\n ])\n .describe('Amount of surrounding context to include with each retrieved message'),\n scope: z.enum(['thread', 'resource']).optional().describe('Scope for semantic search queries'),\n threshold: z.number().min(0).max(1).optional().describe('Minimum similarity score threshold'),\n indexName: z.string().optional().describe('Index name for the vector store'),\n});\n\n/**\n * Title generation configuration\n * When stored, the model is serialized as a ModelRouterModelId string (provider/model-name format)\n */\nexport const titleGenerationSchema = z.union([\n z.boolean(),\n z.object({\n model: z.string().describe('Model ID in format provider/model-name (ModelRouterModelId)'),\n instructions: z.string().optional().describe('Custom instructions for title generation'),\n }),\n]);\n\n/**\n * Observation step configuration for observational memory\n */\nexport const serializedObservationConfigSchema = z.object({\n model: z.string().optional().describe('Observer model ID'),\n messageTokens: z.number().optional().describe('Token threshold that triggers observation'),\n modelSettings: z.record(z.string(), z.unknown()).optional().describe('Model settings (temperature, etc.)'),\n providerOptions: z\n .record(z.string(), z.record(z.string(), z.unknown()).optional())\n .optional()\n .describe('Provider-specific options'),\n maxTokensPerBatch: z.number().optional().describe('Maximum tokens per batch'),\n bufferTokens: z\n .union([z.number(), z.literal(false)])\n .optional()\n .describe('Async buffering interval or false'),\n bufferActivation: z.number().optional().describe('Ratio of buffered observations to activate'),\n blockAfter: z.number().optional().describe('Token threshold for synchronous blocking'),\n});\n\n/**\n * Reflection step configuration for observational memory\n */\nexport const serializedReflectionConfigSchema = z.object({\n model: z.string().optional().describe('Reflector model ID'),\n observationTokens: z.number().optional().describe('Token threshold that triggers reflection'),\n modelSettings: z.record(z.string(), z.unknown()).optional().describe('Model settings (temperature, etc.)'),\n providerOptions: z\n .record(z.string(), z.record(z.string(), z.unknown()).optional())\n .optional()\n .describe('Provider-specific options'),\n blockAfter: z.number().optional().describe('Token threshold for synchronous blocking'),\n bufferActivation: z.number().optional().describe('Ratio for async reflection buffering'),\n});\n\n/**\n * Serialized observational memory configuration\n */\nexport const serializedObservationalMemoryConfigObjectSchema = z.object({\n model: z.string().optional().describe('Model ID for both Observer and Reflector'),\n scope: z.enum(['resource', 'thread']).optional().describe('Memory scope'),\n shareTokenBudget: z.boolean().optional().describe('Share token budget between messages and observations'),\n observation: serializedObservationConfigSchema.optional().describe('Observation step configuration'),\n reflection: serializedReflectionConfigSchema.optional().describe('Reflection step configuration'),\n});\n\nexport const serializedObservationalMemoryConfigSchema = z.union([\n z.boolean(),\n serializedObservationalMemoryConfigObjectSchema,\n]);\n\n/**\n * Serialized memory configuration matching SerializedMemoryConfig from @mastra/core\n *\n * Note: workingMemory and threads are omitted as they are not part of SerializedMemoryConfig\n * @see packages/core/src/memory/types.ts\n */\nexport const serializedMemoryConfigSchema = z\n .object({\n vector: z\n .union([z.string(), z.literal(false)])\n .optional()\n .describe('Vector database identifier or false to disable'),\n options: z\n .object({\n readOnly: z.boolean().optional(),\n lastMessages: z.union([z.number(), z.literal(false)]).optional(),\n semanticRecall: z.union([z.boolean(), semanticRecallSchema]).optional(),\n generateTitle: titleGenerationSchema.optional(),\n })\n .optional()\n .describe('Memory behavior configuration, excluding workingMemory and threads'),\n embedder: z\n .string()\n .optional()\n .describe('Embedding model ID in the format \"provider/model\" (e.g., \"openai/text-embedding-3-small\")'),\n embedderOptions: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('Options to pass to the embedder, omitting telemetry'),\n observationalMemory: serializedObservationalMemoryConfigSchema\n .optional()\n .describe('Serialized observational memory configuration'),\n })\n .refine(\n data => {\n // If semanticRecall is enabled (true or object), both vector and embedder are required\n const semanticRecall = data.options?.semanticRecall;\n const semanticRecallEnabled =\n semanticRecall === true || (typeof semanticRecall === 'object' && semanticRecall !== null);\n\n if (semanticRecallEnabled) {\n // vector must be a string (not false or undefined)\n const hasVector = typeof data.vector === 'string' && data.vector.length > 0;\n // embedder must be defined\n const hasEmbedder = typeof data.embedder === 'string' && data.embedder.length > 0;\n\n return hasVector && hasEmbedder;\n }\n return true;\n },\n {\n message: 'Semantic recall requires both vector and embedder to be configured',\n path: ['options', 'semanticRecall'],\n },\n );\n","import { z } from 'zod/v4';\nimport { paginationInfoSchema, createPagePaginationSchema, statusQuerySchema } from './common';\nimport { defaultOptionsSchema } from './default-options';\nimport { serializedMemoryConfigSchema } from './memory-config';\nimport { ruleGroupSchema } from './rule-group';\nimport { workspaceSnapshotConfigSchema } from './stored-workspaces';\nimport { toolProvidersSchema } from './tool-providers';\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\n/**\n * Path parameter for stored agent ID\n */\nexport const storedAgentIdPathParams = z.object({\n storedAgentId: z.string().describe('Unique identifier for the stored agent'),\n});\n\n// ============================================================================\n// Query Parameter Schemas\n// ============================================================================\n\n/**\n * Storage order by configuration\n */\nconst storageOrderBySchema = z.object({\n field: z.enum(['createdAt', 'updatedAt']).optional(),\n direction: z.enum(['ASC', 'DESC']).optional(),\n});\n\nexport { statusQuerySchema };\n\n/**\n * GET /stored/agents - List stored agents\n */\nexport const listStoredAgentsQuerySchema = createPagePaginationSchema(100).extend({\n orderBy: storageOrderBySchema.optional(),\n status: z\n .enum(['draft', 'published', 'archived'])\n .optional()\n .default('published')\n .describe('Filter agents by status (defaults to published)'),\n authorId: z.string().optional().describe('Filter agents by author identifier'),\n visibility: z.enum(['public']).optional().describe('Filter to only public agents'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Filter agents by metadata key-value pairs'),\n favoritedOnly: z\n .stringbool()\n .optional()\n .describe('When true, return only agents favorited by the caller (requires the `favorites` EE feature)'),\n pinFavoritedFor: z\n .string()\n .optional()\n .describe(\n 'When set, treat the given subject (user/role) as the favoriting principal for `favoritedOnly` instead of the caller',\n ),\n});\n\n// ============================================================================\n// Body Parameter Schemas\n// ============================================================================\n\n/**\n * Scorer config schema with optional sampling and rules\n */\nconst scorerConfigSchema = z.object({\n description: z.string().optional(),\n sampling: z\n .union([\n z.object({ type: z.literal('none') }),\n z.object({ type: z.literal('ratio'), rate: z.number().min(0).max(1) }),\n ])\n .optional(),\n rules: ruleGroupSchema.optional(),\n});\n\n/**\n * Agent instruction block schema for prompt-block-based instructions.\n */\nconst agentInstructionBlockSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('text'), content: z.string() }),\n z.object({ type: z.literal('prompt_block_ref'), id: z.string() }),\n z.object({ type: z.literal('prompt_block'), content: z.string(), rules: ruleGroupSchema.optional() }),\n]);\n\n/**\n * Creates a schema for a field that can be either a static value or an array of conditional variants.\n * Each variant has a `value` and an optional `rules` (RuleGroup) that determines when it applies.\n */\nfunction conditionalFieldSchema<T extends z.ZodTypeAny>(valueSchema: T) {\n const variantSchema = z.object({\n value: valueSchema,\n rules: ruleGroupSchema.optional(),\n });\n return z.union([valueSchema, z.array(variantSchema)]);\n}\n\n/**\n * Instructions can be a plain string or an array of instruction blocks (text + prompt_block references).\n */\nexport const instructionsSchema = z\n .union([z.string(), z.array(agentInstructionBlockSchema)])\n .describe('System instructions for the agent (string or array of instruction blocks)');\n\n/** Base model config schema (reused across snapshot and response schemas) */\nconst modelConfigSchema = z\n .object({\n provider: z.string().describe('Model provider (e.g., openai, anthropic)'),\n name: z.string().describe('Model name (e.g., gpt-4o, claude-3-opus)'),\n })\n .passthrough();\n\n/** Per-tool config schema */\nconst toolConfigSchema = z.object({ description: z.string().optional(), rules: ruleGroupSchema.optional() });\n\n/** Base tools config schema */\nconst toolsConfigSchema = z.record(z.string(), toolConfigSchema);\n\n/** MCP client tools config schema — specifies which tools to use from an MCP client/server */\nconst mcpClientToolsConfigSchema = z.object({\n tools: z.record(z.string(), toolConfigSchema).optional(),\n});\n\n/** Per-skill config schema */\nconst skillConfigSchema = z.object({\n description: z.string().optional(),\n instructions: z.string().optional(),\n pin: z.string().optional(),\n strategy: z.enum(['latest', 'live']).optional(),\n});\n\n/** Skills config: skill IDs mapped to per-skill config */\nconst skillsConfigSchema = z.record(z.string(), skillConfigSchema);\n\n/** Workspace reference: a stored workspace ID, inline config, or a registered workspace provider */\nconst workspaceRefSchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('id'), workspaceId: z.string() }),\n z.object({ type: z.literal('inline'), config: workspaceSnapshotConfigSchema }),\n z.object({\n type: z.literal('provider'),\n provider: z.string().describe('Workspace provider identifier'),\n config: z.record(z.string(), z.unknown()).describe('Provider-specific configuration'),\n }),\n]);\n\n/** Screencast options for streaming browser frames */\nconst screencastOptionsSchema = z.object({\n format: z.enum(['jpeg', 'png']).optional().describe('Image format (default: jpeg)'),\n quality: z.number().min(0).max(100).optional().describe('JPEG quality 0-100 (default: 80)'),\n maxWidth: z.number().optional().describe('Max width in pixels (default: 1280)'),\n maxHeight: z.number().optional().describe('Max height in pixels (default: 720)'),\n everyNthFrame: z.number().optional().describe('Capture every Nth frame (default: 1)'),\n});\n\n/** Browser config: serializable browser configuration for stored agents */\nconst browserConfigSchema = z.object({\n provider: z.string().describe('Browser provider type (e.g., stagehand, playwright)'),\n headless: z.boolean().optional().describe('Run browser in headless mode (default: true)'),\n viewport: z\n .object({\n width: z.number().describe('Viewport width in pixels'),\n height: z.number().describe('Viewport height in pixels'),\n })\n .optional()\n .describe('Browser viewport dimensions'),\n timeout: z.number().optional().describe('Default timeout in milliseconds (default: 10000)'),\n screencast: screencastOptionsSchema.optional().describe('Screencast options for streaming browser frames'),\n});\n\n/** Browser reference: inline browser configuration */\nconst browserRefSchema = z.object({\n type: z.literal('inline'),\n config: browserConfigSchema,\n});\n\n/**\n * Processor phase enum matching ProcessorPhase type\n */\nconst processorPhaseSchema = z.enum([\n 'processInput',\n 'processInputStep',\n 'processOutputStream',\n 'processOutputResult',\n 'processOutputStep',\n]);\n\n/**\n * A single processor step in a stored processor graph.\n */\nconst processorGraphStepSchema = z.object({\n id: z.string().describe('Unique ID for this step within the graph'),\n providerId: z.string().describe('ProcessorProvider ID that creates this processor'),\n config: z.record(z.string(), z.unknown()).describe('Configuration matching the provider configSchema'),\n enabledPhases: z.array(processorPhaseSchema).min(1).describe('Which processor phases to enable'),\n});\n\n/**\n * Processor graph entry schema.\n * Simplified version of SerializedStepFlowEntry, supporting step, parallel, and conditional.\n *\n * Uses a fixed nesting depth (3 levels) to avoid infinite recursion\n * when converting to JSON Schema / OpenAPI.\n */\n\n/** Depth 3 (leaf): only step entries allowed */\nconst processorGraphEntryDepth3 = z.discriminatedUnion('type', [\n z.object({ type: z.literal('step'), step: processorGraphStepSchema }),\n]);\n\n/** Depth 2: step, parallel, and conditional — children limited to depth 3 */\nconst processorGraphEntryDepth2 = z.discriminatedUnion('type', [\n z.object({ type: z.literal('step'), step: processorGraphStepSchema }),\n z.object({ type: z.literal('parallel'), branches: z.array(z.array(processorGraphEntryDepth3)) }),\n z.object({\n type: z.literal('conditional'),\n conditions: z.array(\n z.object({\n steps: z.array(processorGraphEntryDepth3),\n rules: ruleGroupSchema.optional(),\n }),\n ),\n }),\n]);\n\n/** Depth 1 (top-level): step, parallel, and conditional — children limited to depth 2 */\nconst processorGraphEntrySchema = z.discriminatedUnion('type', [\n z.object({ type: z.literal('step'), step: processorGraphStepSchema }),\n z.object({ type: z.literal('parallel'), branches: z.array(z.array(processorGraphEntryDepth2)) }),\n z.object({\n type: z.literal('conditional'),\n conditions: z.array(\n z.object({\n steps: z.array(processorGraphEntryDepth2),\n rules: ruleGroupSchema.optional(),\n }),\n ),\n }),\n]);\n\n/**\n * A stored processor graph representing a pipeline of processors.\n */\nconst storedProcessorGraphSchema = z.object({\n steps: z.array(processorGraphEntrySchema).describe('Ordered list of processor graph entries'),\n});\n\n/**\n * Agent snapshot config fields (name, description, instructions, model, tools, etc.)\n * These live in version snapshots, not on the thin agent record.\n *\n * Fields that support conditional variants (StorageConditionalField) can be either\n * a static value OR an array of { value, rules? } variants evaluated at request time.\n */\nconst snapshotConfigSchema = z.object({\n name: z.string().describe('Name of the agent'),\n description: z.string().optional().describe('Description of the agent'),\n instructions: instructionsSchema,\n model: conditionalFieldSchema(modelConfigSchema).describe(\n 'Model configuration — static value or array of conditional variants',\n ),\n tools: conditionalFieldSchema(toolsConfigSchema)\n .optional()\n .describe('Tool keys mapped to per-tool config — static or conditional'),\n defaultOptions: conditionalFieldSchema(defaultOptionsSchema)\n .optional()\n .describe('Default options for generate/stream calls — static or conditional'),\n workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Workflow keys with optional per-workflow config — static or conditional'),\n agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Agent keys with optional per-agent config — static or conditional'),\n integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of tool provider IDs to their tool configurations — static or conditional'),\n toolProviders: conditionalFieldSchema(toolProvidersSchema)\n .optional()\n .describe(\n 'Tool provider connections and per-tool config (provider-agnostic). Coexists with the deprecated `integrationTools` field.',\n ),\n mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of stored MCP client IDs to their tool configurations — static or conditional'),\n inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Input processor graph — static or conditional'),\n outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Output processor graph — static or conditional'),\n memory: conditionalFieldSchema(serializedMemoryConfigSchema)\n .optional()\n .describe('Memory configuration — static or conditional'),\n scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema))\n .optional()\n .describe('Scorer keys with optional sampling config — static or conditional'),\n skills: conditionalFieldSchema(skillsConfigSchema)\n .optional()\n .describe('Skill IDs mapped to per-skill config — static or conditional'),\n workspace: conditionalFieldSchema(workspaceRefSchema)\n .optional()\n .describe('Workspace reference (stored ID or inline config) — static or conditional'),\n browser: z\n .union([conditionalFieldSchema(browserRefSchema), z.boolean(), z.null()])\n .optional()\n .describe('Browser configuration — object config, true (apply default), false/null (disable)'),\n requestContextSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('JSON Schema defining valid request context variables for conditional rule evaluation'),\n});\n\n/**\n * Agent metadata fields (authorId, metadata, visibility) that live on the thin agent record.\n */\nconst agentMetadataSchema = z.object({\n authorId: z.string().optional().describe('Author identifier for multi-tenant filtering'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata for the agent'),\n visibility: z\n .enum(['private', 'public'])\n .optional()\n .describe('Agent visibility: private (owner/admin only) or public (any reader)'),\n});\n\n/**\n * Snapshot config schema for create where `model` is optional. When omitted, the\n * builder applies `defaults.model` from `/editor/builder/settings` server-side.\n */\nconst snapshotConfigCreateSchema = snapshotConfigSchema.extend({\n model: conditionalFieldSchema(modelConfigSchema)\n .optional()\n .describe(\n 'Model configuration — static value or array of conditional variants. ' +\n 'When omitted, the builder default model is applied server-side.',\n ),\n});\n\n/**\n * POST /stored/agents - Create stored agent body\n * Flat union of agent-record fields + config fields\n * The id is optional — if not provided, it will be derived from the agent name via slugify.\n */\nexport const createStoredAgentBodySchema = z\n .object({\n id: z.string().optional().describe('Unique identifier for the agent. If not provided, derived from name.'),\n authorId: z.string().optional().describe('Author identifier for multi-tenant filtering'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata for the agent'),\n visibility: z\n .enum(['private', 'public'])\n .optional()\n .describe('Agent visibility: private (owner/admin only) or public (any reader)'),\n })\n .merge(snapshotConfigCreateSchema);\n\n/**\n * Snapshot config schema for updates where nullable fields (like memory) can be set to null to clear them.\n */\nconst snapshotConfigUpdateSchema = snapshotConfigSchema.extend({\n memory: z\n .union([conditionalFieldSchema(serializedMemoryConfigSchema), z.null()])\n .optional()\n .describe('Memory configuration — static, conditional, or null to disable memory'),\n});\n\n/**\n * PATCH /stored/agents/:storedAgentId - Update stored agent body\n * Optional metadata-level fields + optional config fields\n */\nexport const updateStoredAgentBodySchema = agentMetadataSchema\n .partial()\n .merge(snapshotConfigUpdateSchema.partial())\n .extend({\n changeMessage: z\n .string()\n .trim()\n .max(500)\n .optional()\n .describe('Optional message describing the changes for the auto-created version'),\n });\n\nexport const exportStoredAgentBodySchema = snapshotConfigUpdateSchema.partial();\n\nexport const openStoredAgentChangeRequestBodySchema = exportStoredAgentBodySchema.extend({\n changeMessage: z.string().trim().max(500).optional(),\n userName: z.string().trim().min(1).max(120).optional(),\n inspectOnly: z.boolean().optional(),\n});\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\n/**\n * Resolved author object — server-side enrichment of `authorId` against the\n * configured auth provider. Only `id` is required; the other fields mirror\n * what `/auth/me` exposes and are optional because providers may not return\n * every field.\n */\nexport const resolvedAuthorSchema = z.object({\n id: z.string(),\n name: z.string().optional(),\n email: z.string().optional(),\n avatarUrl: z.string().optional(),\n});\n\n/**\n * Stored agent object schema (resolved response: thin record + version config)\n * Represents StorageResolvedAgentType\n */\nexport const storedAgentSchema = z.object({\n // Thin agent record fields\n id: z.string(),\n status: z.string().describe('Agent status: draft or published'),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n author: resolvedAuthorSchema.optional().describe('Resolved author identity (when an auth provider is configured)'),\n metadata: z.record(z.string(), z.unknown()).optional(),\n visibility: z.enum(['private', 'public']).optional(),\n favoriteCount: z.number().int().nonnegative().optional().describe('Number of users who have favorited this agent'),\n isFavorited: z.boolean().optional().describe('Whether the requesting user has favorited this agent'),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n // Version snapshot config fields (resolved from active version)\n name: z.string().describe('Name of the agent'),\n description: z.string().optional().describe('Description of the agent'),\n instructions: instructionsSchema,\n model: conditionalFieldSchema(modelConfigSchema).describe(\n 'Model configuration — static value or array of conditional variants',\n ),\n tools: conditionalFieldSchema(toolsConfigSchema)\n .optional()\n .describe('Tool keys mapped to per-tool config — static or conditional'),\n defaultOptions: conditionalFieldSchema(defaultOptionsSchema)\n .optional()\n .describe('Default options for generate/stream calls — static or conditional'),\n workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Workflow keys with optional per-workflow config — static or conditional'),\n agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Agent keys with optional per-agent config — static or conditional'),\n integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of tool provider IDs to their tool configurations — static or conditional'),\n toolProviders: conditionalFieldSchema(toolProvidersSchema)\n .optional()\n .describe(\n 'Tool provider connections and per-tool config (provider-agnostic). Coexists with the deprecated `integrationTools` field.',\n ),\n mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of stored MCP client IDs to their tool configurations — static or conditional'),\n inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Input processor graph — static or conditional'),\n outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Output processor graph — static or conditional'),\n memory: conditionalFieldSchema(serializedMemoryConfigSchema)\n .optional()\n .describe('Memory configuration — static or conditional'),\n scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema))\n .optional()\n .describe('Scorer keys with optional sampling config — static or conditional'),\n skills: conditionalFieldSchema(skillsConfigSchema)\n .optional()\n .describe('Skill IDs mapped to per-skill config — static or conditional'),\n workspace: conditionalFieldSchema(workspaceRefSchema)\n .optional()\n .describe('Workspace reference (stored ID or inline config) — static or conditional'),\n browser: z\n .union([conditionalFieldSchema(browserRefSchema), z.boolean(), z.null()])\n .optional()\n .describe('Browser configuration — object config, true (apply default), false/null (disable)'),\n requestContextSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('JSON Schema defining valid request context variables'),\n});\n\n/**\n * Response for GET /stored/agents\n */\nexport const listStoredAgentsResponseSchema = paginationInfoSchema.extend({\n agents: z.array(storedAgentSchema),\n});\n\n/**\n * Response for GET /stored/agents/:storedAgentId\n */\nexport const getStoredAgentResponseSchema = storedAgentSchema;\n\n/**\n * Response for POST /stored/agents\n */\nexport const createStoredAgentResponseSchema = storedAgentSchema;\n\n/**\n * Response for PATCH /stored/agents/:storedAgentId\n *\n * The response can be either:\n * 1. A thin agent record (no version) - only has id, status, dates, etc.\n * 2. A resolved agent (with version) - has all config fields from the version\n *\n * We use a union to handle both cases properly.\n */\nexport const updateStoredAgentResponseSchema = z.union([\n // Thin agent record (no version config)\n z.object({\n id: z.string(),\n status: z.string(),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n visibility: z.enum(['private', 'public']).optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n }),\n // Resolved agent (thin record + version config)\n storedAgentSchema,\n]);\n\n/**\n * Response for DELETE /stored/agents/:storedAgentId\n */\nexport const deleteStoredAgentResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n});\n\n/**\n * Response for GET /stored/agents/:storedAgentId/dependents\n *\n * `dependents` lists caller-readable stored agents whose resolved `agents` map\n * references the target. Includes both public and the caller's own private\n * agents — anything the caller already has read access to.\n * `hiddenCount` aggregates references from agents the caller cannot read\n * (cross-workspace private agents). Only populated when the target agent is\n * public, to avoid leaking cross-workspace structure for private targets.\n */\nexport const getStoredAgentDependentsResponseSchema = z.object({\n dependents: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n }),\n ),\n hiddenCount: z.number().int().nonnegative(),\n});\n\nexport const exportStoredAgentResponseSchema = z.object({\n agentId: z.string(),\n fileName: z.string(),\n content: z.string(),\n config: z.record(z.string(), z.unknown()),\n});\n\nexport const openStoredAgentChangeRequestResponseSchema = z.object({\n id: z.union([z.string(), z.number()]).optional(),\n url: z.string(),\n ref: z.string().optional(),\n});\n\n// ============================================================================\n// Preview Instructions Schemas\n// ============================================================================\n\n/**\n * POST /stored/agents/preview-instructions - Preview resolved instructions\n */\nexport const previewInstructionsBodySchema = z.object({\n blocks: z.array(agentInstructionBlockSchema).describe('Array of instruction blocks to resolve'),\n context: z\n .record(z.string(), z.unknown())\n .optional()\n .default({})\n .describe('Request context for variable interpolation and rule evaluation'),\n});\n\n/**\n * Response for POST /stored/agents/preview-instructions\n */\nexport const previewInstructionsResponseSchema = z.object({\n result: z.string().describe('The resolved instructions string'),\n});\n\n/**\n * Exported for use in agent-versions.ts schemas\n */\nexport {\n snapshotConfigSchema,\n scorerConfigSchema,\n conditionalFieldSchema,\n modelConfigSchema,\n storedProcessorGraphSchema,\n processorGraphStepSchema,\n processorGraphEntrySchema,\n processorPhaseSchema,\n toolConfigSchema,\n toolsConfigSchema,\n};\n"]}
'use strict';
var chunkP2X2Q6N6_cjs = require('./chunk-P2X2Q6N6.cjs');
var chunkO4O2EJF7_cjs = require('./chunk-O4O2EJF7.cjs');
var chunkJ5RVSM7H_cjs = require('./chunk-J5RVSM7H.cjs');
var chunkWMS7BOP7_cjs = require('./chunk-WMS7BOP7.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
// src/server/handlers/stored-skill-favorites.ts
async function getFavoritesContext(mastra) {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Skills storage domain is not available" });
}
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Favorites storage domain is not available" });
}
return { skillStore, favoritesStore };
}
var FAVORITE_STORED_SKILL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "PUT",
path: "/stored/skills/:storedSkillId/favorite",
responseType: "json",
pathParamSchema: chunkP2X2Q6N6_cjs.storedSkillIdPathParams,
responseSchema: chunkO4O2EJF7_cjs.favoriteToggleResponseSchema,
summary: "Favorite a stored skill",
description: "Marks the stored skill as favorited by the calling user. Idempotent.",
tags: ["Stored Skills"],
requiresAuth: true,
requiresPermission: "stored-skills:read",
handler: async ({ mastra, requestContext, storedSkillId }) => {
try {
await chunkJ5RVSM7H_cjs.requireBuilderFeature(mastra, "favorites");
const callerId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext);
if (!callerId) {
throw new chunk64ITUOXI_cjs.HTTPException(401, { message: "Authentication required" });
}
const { skillStore, favoritesStore } = await getFavoritesContext(mastra);
const skill = await skillStore.getByIdResolved(storedSkillId);
if (!skill) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(skill, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-skills", resourceId: storedSkillId, record: skill });
const result = await favoritesStore.favorite({
userId: callerId,
entityType: "skill",
entityId: storedSkillId
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error favoriting stored skill");
}
}
});
var UNFAVORITE_STORED_SKILL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/stored/skills/:storedSkillId/favorite",
responseType: "json",
pathParamSchema: chunkP2X2Q6N6_cjs.storedSkillIdPathParams,
responseSchema: chunkO4O2EJF7_cjs.favoriteToggleResponseSchema,
summary: "Unfavorite a stored skill",
description: "Removes the caller\u2019s favorite from the stored skill. Idempotent.",
tags: ["Stored Skills"],
requiresAuth: true,
requiresPermission: "stored-skills:read",
handler: async ({ mastra, requestContext, storedSkillId }) => {
try {
await chunkJ5RVSM7H_cjs.requireBuilderFeature(mastra, "favorites");
const callerId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext);
if (!callerId) {
throw new chunk64ITUOXI_cjs.HTTPException(401, { message: "Authentication required" });
}
const { skillStore, favoritesStore } = await getFavoritesContext(mastra);
const skill = await skillStore.getByIdResolved(storedSkillId);
if (!skill) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(skill, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-skills", resourceId: storedSkillId, record: skill });
const result = await favoritesStore.unfavorite({
userId: callerId,
entityType: "skill",
entityId: storedSkillId
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error unfavoriting stored skill");
}
}
});
exports.FAVORITE_STORED_SKILL_ROUTE = FAVORITE_STORED_SKILL_ROUTE;
exports.UNFAVORITE_STORED_SKILL_ROUTE = UNFAVORITE_STORED_SKILL_ROUTE;
//# sourceMappingURL=chunk-O4DW75OM.cjs.map
//# sourceMappingURL=chunk-O4DW75OM.cjs.map
{"version":3,"sources":["../src/server/handlers/stored-skill-favorites.ts"],"names":["HTTPException","createRoute","storedSkillIdPathParams","favoriteToggleResponseSchema","requireBuilderFeature","getCallerAuthorId","assertStoredResourceScope","getStoredResourceScope","assertReadAccess","handleError"],"mappings":"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","file":"chunk-O4DW75OM.cjs","sourcesContent":["import { HTTPException } from '../http-exception';\nimport { favoriteToggleResponseSchema } from '../schemas/favorites';\nimport { storedSkillIdPathParams } from '../schemas/stored-skills';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { assertReadAccess, getCallerAuthorId } from './authorship';\nimport { requireBuilderFeature } from './editor-builder';\nimport { handleError } from './error';\n\n/**\n * Resolves the storage and favorites domains, throwing 500 if unavailable.\n */\nasync function getFavoritesContext(mastra: Parameters<typeof requireBuilderFeature>[0]) {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) {\n throw new HTTPException(500, { message: 'Favorites storage domain is not available' });\n }\n return { skillStore, favoritesStore };\n}\n\n/**\n * PUT /stored/skills/:storedSkillId/favorite\n */\nexport const FAVORITE_STORED_SKILL_ROUTE = createRoute({\n method: 'PUT',\n path: '/stored/skills/:storedSkillId/favorite',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Favorite a stored skill',\n description: 'Marks the stored skill as favorited by the calling user. Idempotent.',\n tags: ['Stored Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { skillStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const skill = await skillStore.getByIdResolved(storedSkillId);\n if (!skill) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller cannot read the skill (private + not owner/admin).\n assertReadAccess({ requestContext, resource: 'stored-skills', resourceId: storedSkillId, record: skill });\n\n const result = await favoritesStore.favorite({\n userId: callerId,\n entityType: 'skill',\n entityId: storedSkillId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error favoriting stored skill');\n }\n },\n});\n\n/**\n * DELETE /stored/skills/:storedSkillId/favorite\n */\nexport const UNFAVORITE_STORED_SKILL_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/skills/:storedSkillId/favorite',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Unfavorite a stored skill',\n description: 'Removes the caller’s favorite from the stored skill. Idempotent.',\n tags: ['Stored Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { skillStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const skill = await skillStore.getByIdResolved(storedSkillId);\n if (!skill) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));\n\n assertReadAccess({ requestContext, resource: 'stored-skills', resourceId: storedSkillId, record: skill });\n\n const result = await favoritesStore.unfavorite({\n userId: callerId,\n entityType: 'skill',\n entityId: storedSkillId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error unfavoriting stored skill');\n }\n },\n});\n"]}
'use strict';
var chunk4JAXFPYO_cjs = require('./chunk-4JAXFPYO.cjs');
var chunkNIMP2XEL_cjs = require('./chunk-NIMP2XEL.cjs');
var v4 = require('zod/v4');
var listScorerVersionsQuerySchema = chunk4JAXFPYO_cjs.listVersionsQuerySchema;
var compareScorerVersionsQuerySchema = chunk4JAXFPYO_cjs.compareVersionsQuerySchema;
var createScorerVersionBodySchema = chunk4JAXFPYO_cjs.createVersionBodySchema;
var scorerVersionPathParams = v4.z.object({
scorerId: v4.z.string().describe("Unique identifier for the stored scorer definition")
});
var scorerVersionIdPathParams = v4.z.object({
scorerId: v4.z.string().describe("Unique identifier for the stored scorer definition"),
versionId: v4.z.string().describe("Unique identifier for the version (UUID)")
});
var samplingConfigSchema = v4.z.union([
v4.z.object({ type: v4.z.literal("none") }),
v4.z.object({ type: v4.z.literal("ratio"), rate: v4.z.number().min(0).max(1) })
]);
var scorerTypeEnum = v4.z.enum([
"llm-judge",
"answer-relevancy",
"answer-similarity",
"bias",
"context-precision",
"context-relevance",
"faithfulness",
"hallucination",
"noise-sensitivity",
"prompt-alignment",
"tool-call-accuracy",
"toxicity"
]);
var scorerVersionSchema = v4.z.object({
id: v4.z.string().describe("Unique identifier for the version (UUID)"),
scorerDefinitionId: v4.z.string().describe("ID of the scorer this version belongs to"),
versionNumber: v4.z.number().describe("Sequential version number (1, 2, 3, ...)"),
// Snapshot config fields
name: v4.z.string().describe("Name of the scorer"),
description: v4.z.string().optional().describe("Description of the scorer"),
type: scorerTypeEnum,
model: chunkNIMP2XEL_cjs.modelConfigSchema.optional(),
instructions: v4.z.string().optional(),
scoreRange: v4.z.object({
min: v4.z.number().optional(),
max: v4.z.number().optional()
}).optional(),
presetConfig: v4.z.record(v4.z.string(), v4.z.unknown()).optional(),
defaultSampling: samplingConfigSchema.optional(),
// Version metadata
changedFields: v4.z.array(v4.z.string()).optional().describe("Array of field names that changed from the previous version"),
changeMessage: v4.z.string().optional().describe("Optional message describing the changes"),
createdAt: v4.z.coerce.date().describe("When this version was created")
});
var listScorerVersionsResponseSchema = chunk4JAXFPYO_cjs.createListVersionsResponseSchema(scorerVersionSchema);
var getScorerVersionResponseSchema = scorerVersionSchema;
var createScorerVersionResponseSchema = scorerVersionSchema.partial().merge(
v4.z.object({
id: v4.z.string(),
scorerDefinitionId: v4.z.string(),
versionNumber: v4.z.number(),
createdAt: v4.z.coerce.date()
})
);
var activateScorerVersionResponseSchema = chunk4JAXFPYO_cjs.activateVersionResponseSchema;
var restoreScorerVersionResponseSchema = scorerVersionSchema;
var deleteScorerVersionResponseSchema = chunk4JAXFPYO_cjs.deleteVersionResponseSchema;
var compareScorerVersionsResponseSchema = chunk4JAXFPYO_cjs.createCompareVersionsResponseSchema(scorerVersionSchema);
exports.activateScorerVersionResponseSchema = activateScorerVersionResponseSchema;
exports.compareScorerVersionsQuerySchema = compareScorerVersionsQuerySchema;
exports.compareScorerVersionsResponseSchema = compareScorerVersionsResponseSchema;
exports.createScorerVersionBodySchema = createScorerVersionBodySchema;
exports.createScorerVersionResponseSchema = createScorerVersionResponseSchema;
exports.deleteScorerVersionResponseSchema = deleteScorerVersionResponseSchema;
exports.getScorerVersionResponseSchema = getScorerVersionResponseSchema;
exports.listScorerVersionsQuerySchema = listScorerVersionsQuerySchema;
exports.listScorerVersionsResponseSchema = listScorerVersionsResponseSchema;
exports.restoreScorerVersionResponseSchema = restoreScorerVersionResponseSchema;
exports.scorerVersionIdPathParams = scorerVersionIdPathParams;
exports.scorerVersionPathParams = scorerVersionPathParams;
exports.scorerVersionSchema = scorerVersionSchema;
//# sourceMappingURL=chunk-O4H32NTL.cjs.map
//# sourceMappingURL=chunk-O4H32NTL.cjs.map
{"version":3,"sources":["../src/server/schemas/scorer-versions.ts"],"names":["listVersionsQuerySchema","compareVersionsQuerySchema","createVersionBodySchema","z","modelConfigSchema","createListVersionsResponseSchema","activateVersionResponseSchema","deleteVersionResponseSchema","createCompareVersionsResponseSchema"],"mappings":"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","file":"chunk-O4H32NTL.cjs","sourcesContent":["import { z } from 'zod/v4';\nimport { modelConfigSchema } from './stored-agents';\nimport {\n listVersionsQuerySchema,\n compareVersionsQuerySchema,\n createVersionBodySchema,\n activateVersionResponseSchema,\n deleteVersionResponseSchema,\n versionDiffEntrySchema,\n createListVersionsResponseSchema,\n createCompareVersionsResponseSchema,\n} from './version-common';\n\n// Re-export shared schemas under domain-specific names\nexport const listScorerVersionsQuerySchema = listVersionsQuerySchema;\nexport const compareScorerVersionsQuerySchema = compareVersionsQuerySchema;\nexport const createScorerVersionBodySchema = createVersionBodySchema;\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\nexport const scorerVersionPathParams = z.object({\n scorerId: z.string().describe('Unique identifier for the stored scorer definition'),\n});\n\nexport const scorerVersionIdPathParams = z.object({\n scorerId: z.string().describe('Unique identifier for the stored scorer definition'),\n versionId: z.string().describe('Unique identifier for the version (UUID)'),\n});\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\nconst samplingConfigSchema = z.union([\n z.object({ type: z.literal('none') }),\n z.object({ type: z.literal('ratio'), rate: z.number().min(0).max(1) }),\n]);\n\nconst scorerTypeEnum = z.enum([\n 'llm-judge',\n 'answer-relevancy',\n 'answer-similarity',\n 'bias',\n 'context-precision',\n 'context-relevance',\n 'faithfulness',\n 'hallucination',\n 'noise-sensitivity',\n 'prompt-alignment',\n 'tool-call-accuracy',\n 'toxicity',\n]);\n\nexport const scorerVersionSchema = z.object({\n id: z.string().describe('Unique identifier for the version (UUID)'),\n scorerDefinitionId: z.string().describe('ID of the scorer this version belongs to'),\n versionNumber: z.number().describe('Sequential version number (1, 2, 3, ...)'),\n // Snapshot config fields\n name: z.string().describe('Name of the scorer'),\n description: z.string().optional().describe('Description of the scorer'),\n type: scorerTypeEnum,\n model: modelConfigSchema.optional(),\n instructions: z.string().optional(),\n scoreRange: z\n .object({\n min: z.number().optional(),\n max: z.number().optional(),\n })\n .optional(),\n presetConfig: z.record(z.string(), z.unknown()).optional(),\n defaultSampling: samplingConfigSchema.optional(),\n // Version metadata\n changedFields: z.array(z.string()).optional().describe('Array of field names that changed from the previous version'),\n changeMessage: z.string().optional().describe('Optional message describing the changes'),\n createdAt: z.coerce.date().describe('When this version was created'),\n});\n\nexport const listScorerVersionsResponseSchema = createListVersionsResponseSchema(scorerVersionSchema);\n\nexport const getScorerVersionResponseSchema = scorerVersionSchema;\n\nexport const createScorerVersionResponseSchema = scorerVersionSchema.partial().merge(\n z.object({\n id: z.string(),\n scorerDefinitionId: z.string(),\n versionNumber: z.number(),\n createdAt: z.coerce.date(),\n }),\n);\n\nexport const activateScorerVersionResponseSchema = activateVersionResponseSchema;\n\nexport const restoreScorerVersionResponseSchema = scorerVersionSchema;\n\nexport const deleteScorerVersionResponseSchema = deleteVersionResponseSchema;\n\nexport const compareScorerVersionsResponseSchema = createCompareVersionsResponseSchema(scorerVersionSchema);\n\nexport { versionDiffEntrySchema };\n"]}
'use strict';
var chunkNIMP2XEL_cjs = require('./chunk-NIMP2XEL.cjs');
var chunk3JVOIOO6_cjs = require('./chunk-3JVOIOO6.cjs');
var v4 = require('zod/v4');
var storedScorerIdPathParams = v4.z.object({
storedScorerId: v4.z.string().describe("Unique identifier for the stored scorer definition")
});
var storageOrderBySchema = v4.z.object({
field: v4.z.enum(["createdAt", "updatedAt"]).optional(),
direction: v4.z.enum(["ASC", "DESC"]).optional()
});
var listStoredScorersQuerySchema = chunk3JVOIOO6_cjs.createPagePaginationSchema(100).extend({
orderBy: storageOrderBySchema.optional(),
status: v4.z.enum(["draft", "published", "archived"]).optional().default("published").describe("Filter scorers by status (defaults to published)"),
authorId: v4.z.string().optional().describe("Filter scorers by author identifier"),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Filter scorers by metadata key-value pairs")
});
var samplingConfigSchema = v4.z.union([
v4.z.object({ type: v4.z.literal("none") }),
v4.z.object({ type: v4.z.literal("ratio"), rate: v4.z.number().min(0).max(1) })
]);
var scorerTypeEnum = v4.z.enum([
"llm-judge",
"answer-relevancy",
"answer-similarity",
"bias",
"context-precision",
"context-relevance",
"faithfulness",
"hallucination",
"noise-sensitivity",
"prompt-alignment",
"tool-call-accuracy",
"toxicity"
]).describe("Scorer type: llm-judge for custom, or a preset type name");
var snapshotConfigSchema = v4.z.object({
name: v4.z.string().describe("Name of the scorer"),
description: v4.z.string().optional().describe("Description of the scorer"),
type: scorerTypeEnum,
model: chunkNIMP2XEL_cjs.modelConfigSchema.optional().describe("Model configuration for LLM judge"),
instructions: v4.z.string().optional().describe("System instructions for the judge LLM (used when type is llm-judge)"),
scoreRange: v4.z.object({
min: v4.z.number().optional().describe("Minimum score value (default: 0)"),
max: v4.z.number().optional().describe("Maximum score value (default: 1)")
}).optional().describe("Score range configuration (used when type is llm-judge)"),
presetConfig: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Serializable config options for preset scorers"),
defaultSampling: samplingConfigSchema.optional().describe("Default sampling configuration")
});
var createStoredScorerBodySchema = v4.z.object({
id: v4.z.string().optional().describe("Unique identifier. If not provided, derived from name."),
authorId: v4.z.string().optional().describe("Author identifier for multi-tenant filtering"),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("Additional metadata for the scorer")
}).merge(snapshotConfigSchema);
var updateStoredScorerBodySchema = v4.z.object({
authorId: v4.z.string().optional(),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional()
}).partial().merge(snapshotConfigSchema.partial());
var storedScorerSchema = v4.z.object({
id: v4.z.string(),
status: v4.z.string().describe("Scorer status: draft, published, or archived"),
activeVersionId: v4.z.string().optional(),
authorId: v4.z.string().optional(),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional(),
createdAt: v4.z.coerce.date(),
updatedAt: v4.z.coerce.date(),
name: v4.z.string().describe("Name of the scorer"),
description: v4.z.string().optional().describe("Description of the scorer"),
type: scorerTypeEnum,
model: chunkNIMP2XEL_cjs.modelConfigSchema.optional(),
instructions: v4.z.string().optional().describe("System instructions for the judge LLM"),
scoreRange: v4.z.object({
min: v4.z.number().optional(),
max: v4.z.number().optional()
}).optional(),
presetConfig: v4.z.record(v4.z.string(), v4.z.unknown()).optional(),
defaultSampling: samplingConfigSchema.optional()
});
var listStoredScorersResponseSchema = chunk3JVOIOO6_cjs.paginationInfoSchema.extend({
scorerDefinitions: v4.z.array(storedScorerSchema)
});
var getStoredScorerResponseSchema = storedScorerSchema;
var createStoredScorerResponseSchema = storedScorerSchema;
var updateStoredScorerResponseSchema = v4.z.union([
v4.z.object({
id: v4.z.string(),
status: v4.z.string(),
activeVersionId: v4.z.string().optional(),
authorId: v4.z.string().optional(),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional(),
createdAt: v4.z.coerce.date(),
updatedAt: v4.z.coerce.date()
}),
storedScorerSchema
]);
var deleteStoredScorerResponseSchema = v4.z.object({
success: v4.z.boolean(),
message: v4.z.string()
});
exports.createStoredScorerBodySchema = createStoredScorerBodySchema;
exports.createStoredScorerResponseSchema = createStoredScorerResponseSchema;
exports.deleteStoredScorerResponseSchema = deleteStoredScorerResponseSchema;
exports.getStoredScorerResponseSchema = getStoredScorerResponseSchema;
exports.listStoredScorersQuerySchema = listStoredScorersQuerySchema;
exports.listStoredScorersResponseSchema = listStoredScorersResponseSchema;
exports.storedScorerIdPathParams = storedScorerIdPathParams;
exports.storedScorerSchema = storedScorerSchema;
exports.updateStoredScorerBodySchema = updateStoredScorerBodySchema;
exports.updateStoredScorerResponseSchema = updateStoredScorerResponseSchema;
//# sourceMappingURL=chunk-OEN2YIF2.cjs.map
//# sourceMappingURL=chunk-OEN2YIF2.cjs.map
{"version":3,"sources":["../src/server/schemas/stored-scorers.ts"],"names":["z","createPagePaginationSchema","modelConfigSchema","paginationInfoSchema"],"mappings":"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","file":"chunk-OEN2YIF2.cjs","sourcesContent":["import { z } from 'zod/v4';\n\nimport { paginationInfoSchema, createPagePaginationSchema, statusQuerySchema } from './common';\nimport { modelConfigSchema } from './stored-agents';\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\nexport const storedScorerIdPathParams = z.object({\n storedScorerId: z.string().describe('Unique identifier for the stored scorer definition'),\n});\n\n// ============================================================================\n// Query Parameter Schemas\n// ============================================================================\n\nconst storageOrderBySchema = z.object({\n field: z.enum(['createdAt', 'updatedAt']).optional(),\n direction: z.enum(['ASC', 'DESC']).optional(),\n});\n\nexport { statusQuerySchema };\n\nexport const listStoredScorersQuerySchema = createPagePaginationSchema(100).extend({\n orderBy: storageOrderBySchema.optional(),\n status: z\n .enum(['draft', 'published', 'archived'])\n .optional()\n .default('published')\n .describe('Filter scorers by status (defaults to published)'),\n authorId: z.string().optional().describe('Filter scorers by author identifier'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Filter scorers by metadata key-value pairs'),\n});\n\n// ============================================================================\n// Body Parameter Schemas\n// ============================================================================\n\nconst samplingConfigSchema = z.union([\n z.object({ type: z.literal('none') }),\n z.object({ type: z.literal('ratio'), rate: z.number().min(0).max(1) }),\n]);\n\nconst scorerTypeEnum = z\n .enum([\n 'llm-judge',\n 'answer-relevancy',\n 'answer-similarity',\n 'bias',\n 'context-precision',\n 'context-relevance',\n 'faithfulness',\n 'hallucination',\n 'noise-sensitivity',\n 'prompt-alignment',\n 'tool-call-accuracy',\n 'toxicity',\n ])\n .describe('Scorer type: llm-judge for custom, or a preset type name');\n\nconst snapshotConfigSchema = z.object({\n name: z.string().describe('Name of the scorer'),\n description: z.string().optional().describe('Description of the scorer'),\n type: scorerTypeEnum,\n model: modelConfigSchema.optional().describe('Model configuration for LLM judge'),\n instructions: z.string().optional().describe('System instructions for the judge LLM (used when type is llm-judge)'),\n scoreRange: z\n .object({\n min: z.number().optional().describe('Minimum score value (default: 0)'),\n max: z.number().optional().describe('Maximum score value (default: 1)'),\n })\n .optional()\n .describe('Score range configuration (used when type is llm-judge)'),\n presetConfig: z.record(z.string(), z.unknown()).optional().describe('Serializable config options for preset scorers'),\n defaultSampling: samplingConfigSchema.optional().describe('Default sampling configuration'),\n});\n\nexport const createStoredScorerBodySchema = z\n .object({\n id: z.string().optional().describe('Unique identifier. If not provided, derived from name.'),\n authorId: z.string().optional().describe('Author identifier for multi-tenant filtering'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata for the scorer'),\n })\n .merge(snapshotConfigSchema);\n\nexport const updateStoredScorerBodySchema = z\n .object({\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .partial()\n .merge(snapshotConfigSchema.partial());\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\nexport const storedScorerSchema = z.object({\n id: z.string(),\n status: z.string().describe('Scorer status: draft, published, or archived'),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n name: z.string().describe('Name of the scorer'),\n description: z.string().optional().describe('Description of the scorer'),\n type: scorerTypeEnum,\n model: modelConfigSchema.optional(),\n instructions: z.string().optional().describe('System instructions for the judge LLM'),\n scoreRange: z\n .object({\n min: z.number().optional(),\n max: z.number().optional(),\n })\n .optional(),\n presetConfig: z.record(z.string(), z.unknown()).optional(),\n defaultSampling: samplingConfigSchema.optional(),\n});\n\nexport const listStoredScorersResponseSchema = paginationInfoSchema.extend({\n scorerDefinitions: z.array(storedScorerSchema),\n});\n\nexport const getStoredScorerResponseSchema = storedScorerSchema;\nexport const createStoredScorerResponseSchema = storedScorerSchema;\n\nexport const updateStoredScorerResponseSchema = z.union([\n z.object({\n id: z.string(),\n status: z.string(),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n }),\n storedScorerSchema,\n]);\n\nexport const deleteStoredScorerResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n});\n"]}
'use strict';
var chunkW243A6ZK_cjs = require('./chunk-W243A6ZK.cjs');
var chunkYBLFY24F_cjs = require('./chunk-YBLFY24F.cjs');
var chunkQQJHGSB2_cjs = require('./chunk-QQJHGSB2.cjs');
var chunk3JVOIOO6_cjs = require('./chunk-3JVOIOO6.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunkEJX6WSR6_cjs = require('./chunk-EJX6WSR6.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
var tools = require('@mastra/core/tools');
// src/server/handlers/tools.ts
var tools_exports = {};
chunkO7I5CWRX_cjs.__export(tools_exports, {
EXECUTE_AGENT_TOOL_ROUTE: () => EXECUTE_AGENT_TOOL_ROUTE,
EXECUTE_TOOL_ROUTE: () => EXECUTE_TOOL_ROUTE,
GET_AGENT_TOOL_ROUTE: () => GET_AGENT_TOOL_ROUTE,
GET_TOOL_BY_ID_ROUTE: () => GET_TOOL_BY_ID_ROUTE,
LIST_TOOLS_ROUTE: () => LIST_TOOLS_ROUTE
});
function resolveLazySchema(schema) {
if (typeof schema === "function" && !("~standard" in schema)) {
return resolveLazySchema(schema());
}
return schema;
}
function schemaToJsonSchema(schema) {
if (!schema) {
return void 0;
}
return chunkEJX6WSR6_cjs.standardSchemaToJSONSchema(chunkEJX6WSR6_cjs.toStandardSchema5(schema), { target: "draft-2020-12" });
}
function serializeSchema(schema) {
const jsonSchema = schemaToJsonSchema(resolveLazySchema(schema));
if (jsonSchema === void 0) return void 0;
return chunkEVOVAWN6_cjs.stringify(jsonSchema);
}
async function findToolInAgents(mastra, toolId, requestContext) {
const agents = mastra.listAgents() || {};
for (const agent of Object.values(agents)) {
try {
const agentTools = await agent.listTools({ requestContext });
const found = Object.values(agentTools || {}).find((t) => t.id === toolId);
if (found) return found;
} catch (error) {
mastra.getLogger?.()?.warn?.("Failed to list tools for agent while resolving tool by id", {
agentId: agent?.id,
toolId,
error: error instanceof Error ? error.message : String(error)
});
}
}
return void 0;
}
function serializeTool(tool) {
if (tools.isProviderDefinedTool(tool)) {
const resolvedInput = resolveLazySchema(tool.inputSchema);
const resolvedOutput = resolveLazySchema(tool.outputSchema);
return {
...tool,
inputSchema: resolvedInput && typeof resolvedInput === "object" && "jsonSchema" in resolvedInput ? chunkEVOVAWN6_cjs.stringify(resolvedInput.jsonSchema) : void 0,
outputSchema: resolvedOutput && typeof resolvedOutput === "object" && "jsonSchema" in resolvedOutput ? chunkEVOVAWN6_cjs.stringify(resolvedOutput.jsonSchema) : void 0
};
}
return {
...tool,
inputSchema: serializeSchema(tool.inputSchema),
outputSchema: serializeSchema(tool.outputSchema),
requestContextSchema: serializeSchema(tool.requestContextSchema)
};
}
var LIST_TOOLS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/tools",
responseType: "json",
responseSchema: chunkYBLFY24F_cjs.listToolsResponseSchema,
summary: "List all tools",
description: "Returns a list of all available tools in the system",
tags: ["Tools"],
requiresAuth: true,
handler: async ({ mastra, registeredTools, requestContext }) => {
try {
const registered = registeredTools && Object.keys(registeredTools).length > 0 ? registeredTools : {};
const allTools = {};
const seenToolIds = /* @__PURE__ */ new Map();
for (const [key, tool] of Object.entries(registered)) {
const toolId = typeof tool?.id === "string" ? tool.id : void 0;
if (toolId !== void 0) seenToolIds.set(toolId, key);
allTools[key] = tool;
}
for (const [key, tool] of Object.entries(mastra.listTools() ?? {})) {
const toolId = typeof tool?.id === "string" ? tool.id : void 0;
if (toolId !== void 0 && seenToolIds.has(toolId)) continue;
if (toolId !== void 0) seenToolIds.set(toolId, key);
allTools[key] = tool;
}
const serializedTools = Object.entries(allTools).reduce(
(acc, [id, _tool]) => {
acc[id] = serializeTool(_tool);
return acc;
},
{}
);
const fgaProvider = mastra.getServer?.()?.fga;
const user = requestContext?.get("user");
if (fgaProvider && user) {
const toolList = Object.entries(serializedTools).map(([id, t]) => ({ id, ...t }));
const accessible = await fgaProvider.filterAccessible(user, toolList, "tool", chunkQQJHGSB2_cjs.MastraFGAPermissions.TOOLS_READ);
const accessibleSet = new Set(accessible.map((t) => t.id));
for (const id of Object.keys(serializedTools)) {
if (!accessibleSet.has(id)) {
delete serializedTools[id];
}
}
}
return serializedTools;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting tools");
}
}
});
var GET_TOOL_BY_ID_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/tools/:toolId",
responseType: "json",
pathParamSchema: chunkYBLFY24F_cjs.toolIdPathParams,
responseSchema: chunkYBLFY24F_cjs.serializedToolSchema,
summary: "Get tool by ID",
description: "Returns details for a specific tool including its schema and configuration",
tags: ["Tools"],
requiresAuth: true,
handler: async ({ mastra, registeredTools, toolId, requestContext }) => {
try {
let tool;
if (registeredTools && Object.keys(registeredTools).length > 0) {
tool = Object.values(registeredTools).find((t) => t.id === toolId);
}
if (!tool) {
try {
tool = mastra.getToolById(toolId);
} catch {
}
}
if (!tool) {
tool = await findToolInAgents(mastra, toolId, requestContext);
}
if (!tool) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Tool not found" });
}
return serializeTool(tool);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting tool");
}
}
});
var EXECUTE_TOOL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/tools/:toolId/execute",
responseType: "json",
pathParamSchema: chunkYBLFY24F_cjs.toolIdPathParams,
queryParamSchema: chunk3JVOIOO6_cjs.optionalRunIdSchema,
bodySchema: chunkYBLFY24F_cjs.executeToolContextBodySchema,
responseSchema: chunkYBLFY24F_cjs.executeToolResponseSchema,
summary: "Execute tool",
description: "Executes a specific tool with the provided input data",
tags: ["Tools"],
requiresAuth: true,
handler: async ({ mastra, runId, toolId, registeredTools, requestContext, ...bodyParams }) => {
try {
if (!toolId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Tool ID is required" });
}
let tool;
if (registeredTools && Object.keys(registeredTools).length > 0) {
tool = Object.values(registeredTools).find((t) => t.id === toolId);
}
if (!tool) {
try {
tool = mastra.getToolById(toolId);
} catch {
}
}
if (!tool) {
tool = await findToolInAgents(mastra, toolId, requestContext);
}
if (!tool) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Tool not found" });
}
if (!tool?.execute) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Tool is not executable" });
}
const { data } = bodyParams;
chunkQQJHGSB2_cjs.validateBody({ data });
let result;
if (tools.isVercelTool(tool)) {
result = await tool.execute(data);
} else {
result = await tool.execute(data, {
mastra,
requestContext,
// TODO: Pass proper tracing context when server API supports tracing
tracingContext: { currentSpan: void 0 },
...runId ? {
workflow: {
runId,
suspend: async () => {
}
}
} : {}
});
}
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error executing tool");
}
}
});
var GET_AGENT_TOOL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/agents/:agentId/tools/:toolId",
responseType: "json",
pathParamSchema: chunkYBLFY24F_cjs.agentToolPathParams,
responseSchema: chunkYBLFY24F_cjs.serializedToolSchema,
summary: "Get agent tool",
description: "Returns details for a specific tool assigned to the agent",
tags: ["Agents", "Tools"],
requiresAuth: true,
handler: async ({ mastra, agentId, toolId, requestContext }) => {
try {
if (!agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Agent ID is required" });
}
const agent = await chunkW243A6ZK_cjs.getAgentFromSystem({ mastra, agentId });
const agentTools = await agent.listTools({ requestContext });
const tool = Object.values(agentTools || {}).find((tool2) => tool2.id === toolId);
if (!tool) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Tool not found" });
}
return serializeTool(tool);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting agent tool");
}
}
});
var EXECUTE_AGENT_TOOL_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/agents/:agentId/tools/:toolId/execute",
responseType: "json",
pathParamSchema: chunkYBLFY24F_cjs.agentToolPathParams,
bodySchema: chunkYBLFY24F_cjs.executeToolBodySchema,
responseSchema: chunkYBLFY24F_cjs.executeToolResponseSchema,
summary: "Execute agent tool",
description: "Executes a specific tool assigned to the agent with the provided input data",
tags: ["Agents", "Tools"],
requiresAuth: true,
handler: async ({ mastra, agentId, toolId, data, requestContext }) => {
try {
if (!agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Agent ID is required" });
}
const agent = await chunkW243A6ZK_cjs.getAgentFromSystem({ mastra, agentId });
const agentTools = await agent.listTools({ requestContext });
const tool = Object.values(agentTools || {}).find((tool2) => tool2.id === toolId);
if (!tool) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Tool not found" });
}
if (!tool?.execute) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Tool is not executable" });
}
const result = await tool.execute(data, {
mastra,
requestContext,
// TODO: Pass proper tracing context when server API supports tracing
tracingContext: { currentSpan: void 0 }
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error executing agent tool");
}
}
});
exports.EXECUTE_AGENT_TOOL_ROUTE = EXECUTE_AGENT_TOOL_ROUTE;
exports.EXECUTE_TOOL_ROUTE = EXECUTE_TOOL_ROUTE;
exports.GET_AGENT_TOOL_ROUTE = GET_AGENT_TOOL_ROUTE;
exports.GET_TOOL_BY_ID_ROUTE = GET_TOOL_BY_ID_ROUTE;
exports.LIST_TOOLS_ROUTE = LIST_TOOLS_ROUTE;
exports.tools_exports = tools_exports;
//# sourceMappingURL=chunk-OLYSNWQP.cjs.map
//# sourceMappingURL=chunk-OLYSNWQP.cjs.map
{"version":3,"sources":["../src/server/handlers/tools.ts"],"names":["__export","standardSchemaToJSONSchema","toStandardSchema5","stringify","isProviderDefinedTool","createRoute","listToolsResponseSchema","MastraFGAPermissions","handleError","toolIdPathParams","serializedToolSchema","HTTPException","optionalRunIdSchema","executeToolContextBodySchema","executeToolResponseSchema","validateBody","isVercelTool","agentToolPathParams","getAgentFromSystem","tool","executeToolBodySchema"],"mappings":"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","file":"chunk-OLYSNWQP.cjs","sourcesContent":["import { isVercelTool, isProviderDefinedTool } from '@mastra/core/tools';\nimport { toStandardSchema, standardSchemaToJSONSchema } from '@mastra/schema-compat/schema';\nimport type { PublicSchema } from '@mastra/schema-compat/schema';\nimport { stringify } from 'superjson';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n executeToolContextBodySchema,\n executeToolResponseSchema,\n listToolsResponseSchema,\n serializedToolSchema,\n toolIdPathParams,\n agentToolPathParams,\n executeToolBodySchema,\n} from '../schemas/agents';\nimport { optionalRunIdSchema } from '../schemas/common';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\nimport { validateBody } from './utils';\n\n/**\n * Resolves a schema that may be a lazy function (e.g. AI SDK provider tools).\n * Recursively resolves until a non-function value is returned.\n * Skips functions that are themselves valid schemas (e.g. ArkType types are\n * callable but also implement StandardSchema via ~standard).\n */\nfunction resolveLazySchema(schema: unknown): unknown {\n if (typeof schema === 'function' && !('~standard' in schema)) {\n return resolveLazySchema(schema());\n }\n return schema;\n}\n\nfunction schemaToJsonSchema(schema: PublicSchema<unknown> | undefined) {\n if (!schema) {\n return undefined;\n }\n\n return standardSchemaToJSONSchema(toStandardSchema(schema), { target: 'draft-2020-12' });\n}\n\nfunction serializeSchema(schema: unknown): string | undefined {\n const jsonSchema = schemaToJsonSchema(resolveLazySchema(schema) as PublicSchema<unknown> | undefined);\n if (jsonSchema === undefined) return undefined;\n return stringify(jsonSchema);\n}\n\n/**\n * Searches dynamically-resolved agent tools (provided via `toolsResolver` /\n * function-based `tools`) for a tool with the given id. Used as a fallback\n * after the static tool registry (`registeredTools` + `mastra.getToolById`)\n * misses, so global tool routes can resolve tools that only exist on agents.\n *\n * Errors thrown by an individual agent's `listTools()` are logged and\n * skipped so a single broken resolver doesn't take down the whole lookup.\n */\nasync function findToolInAgents(mastra: any, toolId: string, requestContext: any): Promise<any | undefined> {\n const agents = mastra.listAgents() || {};\n for (const agent of Object.values(agents) as any[]) {\n try {\n const agentTools = await agent.listTools({ requestContext });\n const found = Object.values(agentTools || {}).find((t: any) => t.id === toolId);\n if (found) return found;\n } catch (error) {\n mastra.getLogger?.()?.warn?.('Failed to list tools for agent while resolving tool by id', {\n agentId: agent?.id,\n toolId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return undefined;\n}\n\n/**\n * Serializes a tool for API responses, handling both regular tools (with Zod schemas)\n * and provider-defined tools (with AI SDK lazy schemas).\n */\nfunction serializeTool(tool: any): any {\n // Provider-defined tools (e.g. google.tools.googleSearch(), openai.tools.webSearch())\n // have lazy inputSchema functions that return AI SDK Schema objects, not Zod schemas.\n // We resolve them and use the jsonSchema property directly.\n if (isProviderDefinedTool(tool)) {\n const resolvedInput = resolveLazySchema(tool.inputSchema);\n const resolvedOutput = resolveLazySchema(tool.outputSchema);\n return {\n ...tool,\n inputSchema:\n resolvedInput && typeof resolvedInput === 'object' && 'jsonSchema' in resolvedInput\n ? stringify(resolvedInput.jsonSchema)\n : undefined,\n outputSchema:\n resolvedOutput && typeof resolvedOutput === 'object' && 'jsonSchema' in resolvedOutput\n ? stringify(resolvedOutput.jsonSchema)\n : undefined,\n };\n }\n\n return {\n ...tool,\n inputSchema: serializeSchema(tool.inputSchema),\n outputSchema: serializeSchema(tool.outputSchema),\n requestContextSchema: serializeSchema(tool.requestContextSchema),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_TOOLS_ROUTE = createRoute({\n method: 'GET',\n path: '/tools',\n responseType: 'json',\n responseSchema: listToolsResponseSchema,\n summary: 'List all tools',\n description: 'Returns a list of all available tools in the system',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, registeredTools, requestContext }) => {\n try {\n // Merge tools from two sources: mastra.listTools() includes dynamically created tools\n // (e.g. MCP tools, or agent tools registered by their intrinsic id), while registeredTools\n // includes tools discovered by the CLI bundler (keyed by export name).\n //\n // The same tool instance can appear in both maps under different keys (e.g. an agent\n // registers it by `tool.id` while the bundler registers it by export name). Dedupe by\n // `tool.id`, preferring the registeredTools (bundler) key, so each tool appears once.\n const registered = registeredTools && Object.keys(registeredTools).length > 0 ? registeredTools : {};\n\n const allTools: Record<string, any> = {};\n const seenToolIds = new Map<string, string>();\n\n // registeredTools first so their key wins for a given tool.id.\n for (const [key, tool] of Object.entries(registered)) {\n const toolId = typeof (tool as any)?.id === 'string' ? (tool as any).id : undefined;\n if (toolId !== undefined) seenToolIds.set(toolId, key);\n allTools[key] = tool;\n }\n\n for (const [key, tool] of Object.entries(mastra.listTools() ?? {})) {\n const toolId = typeof (tool as any)?.id === 'string' ? (tool as any).id : undefined;\n // Skip if this exact tool.id was already registered (under any key) by registeredTools.\n if (toolId !== undefined && seenToolIds.has(toolId)) continue;\n if (toolId !== undefined) seenToolIds.set(toolId, key);\n allTools[key] = tool;\n }\n\n const serializedTools = Object.entries(allTools).reduce(\n (acc, [id, _tool]) => {\n acc[id] = serializeTool(_tool);\n return acc;\n },\n {} as Record<string, any>,\n );\n\n // Filter tools by FGA if configured\n const fgaProvider = mastra.getServer?.()?.fga;\n const user = requestContext?.get('user');\n if (fgaProvider && user) {\n const toolList = Object.entries(serializedTools).map(([id, t]) => ({ id, ...t }));\n const accessible = await fgaProvider.filterAccessible(user, toolList, 'tool', MastraFGAPermissions.TOOLS_READ);\n const accessibleSet = new Set(accessible.map((t: any) => t.id));\n for (const id of Object.keys(serializedTools)) {\n if (!accessibleSet.has(id)) {\n delete serializedTools[id];\n }\n }\n }\n\n return serializedTools;\n } catch (error) {\n return handleError(error, 'Error getting tools');\n }\n },\n});\n\nexport const GET_TOOL_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/tools/:toolId',\n responseType: 'json',\n pathParamSchema: toolIdPathParams,\n responseSchema: serializedToolSchema,\n summary: 'Get tool by ID',\n description: 'Returns details for a specific tool including its schema and configuration',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, registeredTools, toolId, requestContext }) => {\n try {\n let tool: any;\n\n // Try explicit registeredTools first, then fallback to mastra\n if (registeredTools && Object.keys(registeredTools).length > 0) {\n tool = Object.values(registeredTools).find((t: any) => t.id === toolId);\n }\n if (!tool) {\n try {\n tool = mastra.getToolById(toolId);\n } catch {\n // tool not found in global registry, continue to agent fallback\n }\n }\n\n // Fallback: search dynamically-resolved agent tools (toolsResolver)\n if (!tool) {\n tool = await findToolInAgents(mastra, toolId, requestContext);\n }\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n return serializeTool(tool);\n } catch (error) {\n return handleError(error, 'Error getting tool');\n }\n },\n});\n\nexport const EXECUTE_TOOL_ROUTE = createRoute({\n method: 'POST',\n path: '/tools/:toolId/execute',\n responseType: 'json',\n pathParamSchema: toolIdPathParams,\n queryParamSchema: optionalRunIdSchema,\n bodySchema: executeToolContextBodySchema,\n responseSchema: executeToolResponseSchema,\n summary: 'Execute tool',\n description: 'Executes a specific tool with the provided input data',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, runId, toolId, registeredTools, requestContext, ...bodyParams }) => {\n try {\n if (!toolId) {\n throw new HTTPException(400, { message: 'Tool ID is required' });\n }\n\n let tool: any;\n\n // Try explicit registeredTools first, then fallback to mastra\n if (registeredTools && Object.keys(registeredTools).length > 0) {\n tool = Object.values(registeredTools).find((t: any) => t.id === toolId);\n }\n if (!tool) {\n try {\n tool = mastra.getToolById(toolId);\n } catch {\n // tool not found in global registry, continue to agent fallback\n }\n }\n\n // Fallback: search dynamically-resolved agent tools (toolsResolver)\n if (!tool) {\n tool = await findToolInAgents(mastra, toolId, requestContext);\n }\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n if (!tool?.execute) {\n throw new HTTPException(400, { message: 'Tool is not executable' });\n }\n\n const { data } = bodyParams;\n\n validateBody({ data });\n\n let result;\n if (isVercelTool(tool)) {\n result = await (tool as any).execute(data);\n } else {\n result = await tool.execute(data!, {\n mastra,\n requestContext,\n // TODO: Pass proper tracing context when server API supports tracing\n tracingContext: { currentSpan: undefined },\n ...(runId\n ? {\n workflow: {\n runId,\n suspend: async () => {},\n },\n }\n : {}),\n });\n }\n\n return result;\n } catch (error) {\n return handleError(error, 'Error executing tool');\n }\n },\n});\n\n// ============================================================================\n// Agent Tool Routes\n// ============================================================================\n\nexport const GET_AGENT_TOOL_ROUTE = createRoute({\n method: 'GET',\n path: '/agents/:agentId/tools/:toolId',\n responseType: 'json',\n pathParamSchema: agentToolPathParams,\n responseSchema: serializedToolSchema,\n summary: 'Get agent tool',\n description: 'Returns details for a specific tool assigned to the agent',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, toolId, requestContext }) => {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const agentTools = await agent.listTools({ requestContext });\n\n const tool = Object.values(agentTools || {}).find((tool: any) => tool.id === toolId) as any;\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n return serializeTool(tool);\n } catch (error) {\n return handleError(error, 'Error getting agent tool');\n }\n },\n});\n\nexport const EXECUTE_AGENT_TOOL_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/tools/:toolId/execute',\n responseType: 'json',\n pathParamSchema: agentToolPathParams,\n bodySchema: executeToolBodySchema,\n responseSchema: executeToolResponseSchema,\n summary: 'Execute agent tool',\n description: 'Executes a specific tool assigned to the agent with the provided input data',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, toolId, data, requestContext }) => {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const agentTools = await agent.listTools({ requestContext });\n\n const tool = Object.values(agentTools || {}).find((tool: any) => tool.id === toolId) as any;\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n if (!tool?.execute) {\n throw new HTTPException(400, { message: 'Tool is not executable' });\n }\n\n const result = await tool.execute(data, {\n mastra,\n requestContext,\n // TODO: Pass proper tracing context when server API supports tracing\n tracingContext: { currentSpan: undefined },\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error executing agent tool');\n }\n },\n});\n"]}
'use strict';
var chunkO4H32NTL_cjs = require('./chunk-O4H32NTL.cjs');
var chunk2XZ2466F_cjs = require('./chunk-2XZ2466F.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
// src/server/handlers/scorer-versions.ts
var SNAPSHOT_CONFIG_FIELDS = [
"name",
"description",
"type",
"model",
"instructions",
"scoreRange",
"presetConfig",
"defaultSampling"
];
var LIST_SCORER_VERSIONS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/scorers/:scorerId/versions",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkO4H32NTL_cjs.scorerVersionPathParams,
queryParamSchema: chunkO4H32NTL_cjs.listScorerVersionsQuerySchema,
responseSchema: chunkO4H32NTL_cjs.listScorerVersionsResponseSchema,
summary: "List scorer versions",
description: "Returns a paginated list of all versions for a stored scorer",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, page, perPage, orderBy, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(scorer, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const result = await scorerStore.listVersions({
scorerDefinitionId: scorerId,
page,
perPage,
orderBy
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing scorer versions");
}
}
});
var CREATE_SCORER_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/scorers/:scorerId/versions",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkO4H32NTL_cjs.scorerVersionPathParams,
bodySchema: chunkO4H32NTL_cjs.createScorerVersionBodySchema,
responseSchema: chunkO4H32NTL_cjs.createScorerVersionResponseSchema,
summary: "Create scorer version",
description: "Creates a new version snapshot of the current scorer configuration",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, changeMessage, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(scorer, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
let currentConfig = {};
if (scorer.activeVersionId) {
const activeVersion = await scorerStore.getVersion(scorer.activeVersionId);
if (activeVersion) {
currentConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
activeVersion,
SNAPSHOT_CONFIG_FIELDS
);
}
}
const latestVersion = await scorerStore.getLatestVersion(scorerId);
if (!scorer.activeVersionId && latestVersion) {
currentConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
latestVersion,
SNAPSHOT_CONFIG_FIELDS
);
}
const previousConfig = latestVersion ? chunk2XZ2466F_cjs.extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
const changedFields = chunk2XZ2466F_cjs.calculateChangedFields(previousConfig, currentConfig);
const { versionId } = await chunk2XZ2466F_cjs.createVersionWithRetry(
scorerStore,
scorerId,
"scorerDefinitionId",
currentConfig,
changedFields,
{ changeMessage }
);
const version = await scorerStore.getVersion(versionId);
if (!version) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to retrieve created version" });
}
await chunk2XZ2466F_cjs.enforceRetentionLimit(
scorerStore,
scorerId,
"scorerDefinitionId",
scorer.activeVersionId
);
return version;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating scorer version");
}
}
});
var GET_SCORER_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/scorers/:scorerId/versions/:versionId",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkO4H32NTL_cjs.scorerVersionIdPathParams,
responseSchema: chunkO4H32NTL_cjs.getScorerVersionResponseSchema,
summary: "Get scorer version",
description: "Returns a specific version of a scorer by its version ID",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const version = await scorerStore.getVersion(versionId);
if (!version) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.scorerDefinitionId !== scorerId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, {
message: `Version with id ${versionId} not found for scorer ${scorerId}`
});
}
const scorer = await scorerStore.getById(scorerId);
chunkEVOVAWN6_cjs.assertStoredResourceScope(scorer, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
return version;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting scorer version");
}
}
});
var ACTIVATE_SCORER_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/scorers/:scorerId/versions/:versionId/activate",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkO4H32NTL_cjs.scorerVersionIdPathParams,
responseSchema: chunkO4H32NTL_cjs.activateScorerVersionResponseSchema,
summary: "Activate scorer version",
description: "Sets a specific version as the active version for the scorer",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(scorer, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const version = await scorerStore.getVersion(versionId);
if (!version) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.scorerDefinitionId !== scorerId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, {
message: `Version with id ${versionId} not found for scorer ${scorerId}`
});
}
await scorerStore.update({
id: scorerId,
activeVersionId: versionId,
status: "published"
});
mastra.getEditor()?.scorer.clearCache(scorerId);
return {
success: true,
message: `Version ${version.versionNumber} is now active`,
activeVersionId: versionId
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error activating scorer version");
}
}
});
var RESTORE_SCORER_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/scorers/:scorerId/versions/:versionId/restore",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkO4H32NTL_cjs.scorerVersionIdPathParams,
responseSchema: chunkO4H32NTL_cjs.restoreScorerVersionResponseSchema,
summary: "Restore scorer version",
description: "Restores the scorer configuration from a version, creating a new version",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(scorer, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const versionToRestore = await scorerStore.getVersion(versionId);
if (!versionToRestore) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (versionToRestore.scorerDefinitionId !== scorerId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, {
message: `Version with id ${versionId} not found for scorer ${scorerId}`
});
}
const restoredConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
versionToRestore,
SNAPSHOT_CONFIG_FIELDS
);
await scorerStore.update({
id: scorerId,
...restoredConfig
});
const latestVersion = await scorerStore.getLatestVersion(scorerId);
const previousConfig = latestVersion ? chunk2XZ2466F_cjs.extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
const changedFields = chunk2XZ2466F_cjs.calculateChangedFields(previousConfig, restoredConfig);
const { versionId: newVersionId } = await chunk2XZ2466F_cjs.createVersionWithRetry(
scorerStore,
scorerId,
"scorerDefinitionId",
restoredConfig,
changedFields,
{
changeMessage: `Restored from version ${versionToRestore.versionNumber}`
}
);
const newVersion = await scorerStore.getVersion(newVersionId);
if (!newVersion) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to retrieve created version" });
}
await chunk2XZ2466F_cjs.enforceRetentionLimit(
scorerStore,
scorerId,
"scorerDefinitionId",
scorer.activeVersionId
);
mastra.getEditor()?.scorer.clearCache(scorerId);
return newVersion;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error restoring scorer version");
}
}
});
var DELETE_SCORER_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/stored/scorers/:scorerId/versions/:versionId",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkO4H32NTL_cjs.scorerVersionIdPathParams,
responseSchema: chunkO4H32NTL_cjs.deleteScorerVersionResponseSchema,
summary: "Delete scorer version",
description: "Deletes a specific version (cannot delete the active version)",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
if (!scorer) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Scorer with id ${scorerId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(scorer, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const version = await scorerStore.getVersion(versionId);
if (!version) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.scorerDefinitionId !== scorerId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, {
message: `Version with id ${versionId} not found for scorer ${scorerId}`
});
}
if (scorer.activeVersionId === versionId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "Cannot delete the active version. Activate a different version first."
});
}
await scorerStore.deleteVersion(versionId);
mastra.getEditor()?.scorer.clearCache(scorerId);
return {
success: true,
message: `Version ${version.versionNumber} deleted successfully`
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error deleting scorer version");
}
}
});
var COMPARE_SCORER_VERSIONS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/scorers/:scorerId/versions/compare",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkO4H32NTL_cjs.scorerVersionPathParams,
queryParamSchema: chunkO4H32NTL_cjs.compareScorerVersionsQuerySchema,
responseSchema: chunkO4H32NTL_cjs.compareScorerVersionsResponseSchema,
summary: "Compare scorer versions",
description: "Compares two versions and returns the differences between them",
tags: ["Scorer Versions"],
handler: async ({ mastra, scorerId, from, to, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getById(scorerId);
chunkEVOVAWN6_cjs.assertStoredResourceScope(scorer, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const fromVersion = await scorerStore.getVersion(from);
if (!fromVersion) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${from} not found` });
}
if (fromVersion.scorerDefinitionId !== scorerId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, {
message: `Version with id ${from} not found for scorer ${scorerId}`
});
}
const toVersion = await scorerStore.getVersion(to);
if (!toVersion) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${to} not found` });
}
if (toVersion.scorerDefinitionId !== scorerId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, {
message: `Version with id ${to} not found for scorer ${scorerId}`
});
}
const fromConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
fromVersion,
SNAPSHOT_CONFIG_FIELDS
);
const toConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
toVersion,
SNAPSHOT_CONFIG_FIELDS
);
const diffs = chunk2XZ2466F_cjs.computeVersionDiffs(fromConfig, toConfig);
return {
diffs,
fromVersion,
toVersion
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error comparing scorer versions");
}
}
});
exports.ACTIVATE_SCORER_VERSION_ROUTE = ACTIVATE_SCORER_VERSION_ROUTE;
exports.COMPARE_SCORER_VERSIONS_ROUTE = COMPARE_SCORER_VERSIONS_ROUTE;
exports.CREATE_SCORER_VERSION_ROUTE = CREATE_SCORER_VERSION_ROUTE;
exports.DELETE_SCORER_VERSION_ROUTE = DELETE_SCORER_VERSION_ROUTE;
exports.GET_SCORER_VERSION_ROUTE = GET_SCORER_VERSION_ROUTE;
exports.LIST_SCORER_VERSIONS_ROUTE = LIST_SCORER_VERSIONS_ROUTE;
exports.RESTORE_SCORER_VERSION_ROUTE = RESTORE_SCORER_VERSION_ROUTE;
//# sourceMappingURL=chunk-ONVWPSQD.cjs.map
//# sourceMappingURL=chunk-ONVWPSQD.cjs.map
{"version":3,"sources":["../src/server/handlers/scorer-versions.ts"],"names":["createRoute","scorerVersionPathParams","listScorerVersionsQuerySchema","listScorerVersionsResponseSchema","HTTPException","assertStoredResourceScope","getStoredResourceScope","handleError","createScorerVersionBodySchema","createScorerVersionResponseSchema","extractConfigFromVersion","calculateChangedFields","createVersionWithRetry","enforceRetentionLimit","scorerVersionIdPathParams","getScorerVersionResponseSchema","activateScorerVersionResponseSchema","restoreScorerVersionResponseSchema","deleteScorerVersionResponseSchema","compareScorerVersionsQuerySchema","compareScorerVersionsResponseSchema","computeVersionDiffs"],"mappings":"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","file":"chunk-ONVWPSQD.cjs","sourcesContent":["import { HTTPException } from '../http-exception';\nimport {\n scorerVersionPathParams,\n scorerVersionIdPathParams,\n listScorerVersionsQuerySchema,\n createScorerVersionBodySchema,\n compareScorerVersionsQuerySchema,\n listScorerVersionsResponseSchema,\n getScorerVersionResponseSchema,\n createScorerVersionResponseSchema,\n activateScorerVersionResponseSchema,\n restoreScorerVersionResponseSchema,\n deleteScorerVersionResponseSchema,\n compareScorerVersionsResponseSchema,\n} from '../schemas/scorer-versions';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { handleError } from './error';\nimport {\n extractConfigFromVersion,\n calculateChangedFields,\n computeVersionDiffs,\n createVersionWithRetry,\n enforceRetentionLimit,\n} from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\nconst SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'type',\n 'model',\n 'instructions',\n 'scoreRange',\n 'presetConfig',\n 'defaultSampling',\n] as const;\n\n/**\n * GET /stored/scorers/:scorerId/versions - List all versions for a scorer\n */\nexport const LIST_SCORER_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:scorerId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionPathParams,\n queryParamSchema: listScorerVersionsQuerySchema,\n responseSchema: listScorerVersionsResponseSchema,\n summary: 'List scorer versions',\n description: 'Returns a paginated list of all versions for a stored scorer',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, page, perPage, orderBy, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const result = await scorerStore.listVersions({\n scorerDefinitionId: scorerId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing scorer versions');\n }\n },\n});\n\n/**\n * POST /stored/scorers/:scorerId/versions - Create a new version snapshot\n */\nexport const CREATE_SCORER_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers/:scorerId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionPathParams,\n bodySchema: createScorerVersionBodySchema,\n responseSchema: createScorerVersionResponseSchema,\n summary: 'Create scorer version',\n description: 'Creates a new version snapshot of the current scorer configuration',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, changeMessage, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n let currentConfig: Record<string, unknown> = {};\n if (scorer.activeVersionId) {\n const activeVersion = await scorerStore.getVersion(scorer.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n const latestVersion = await scorerStore.getLatestVersion(scorerId);\n\n // If no activeVersionId, fall back to latest version config\n if (!scorer.activeVersionId && latestVersion) {\n currentConfig = extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, currentConfig);\n\n const { versionId } = await createVersionWithRetry(\n scorerStore as unknown as VersionedStoreInterface,\n scorerId,\n 'scorerDefinitionId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n const version = await scorerStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n scorerStore as unknown as VersionedStoreInterface,\n scorerId,\n 'scorerDefinitionId',\n scorer.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating scorer version');\n }\n },\n});\n\n/**\n * GET /stored/scorers/:scorerId/versions/:versionId - Get a specific version\n */\nexport const GET_SCORER_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:scorerId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionIdPathParams,\n responseSchema: getScorerVersionResponseSchema,\n summary: 'Get scorer version',\n description: 'Returns a specific version of a scorer by its version ID',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const version = await scorerStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n if (version.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for scorer ${scorerId}`,\n });\n }\n const scorer = await scorerStore.getById(scorerId);\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting scorer version');\n }\n },\n});\n\n/**\n * POST /stored/scorers/:scorerId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_SCORER_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers/:scorerId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionIdPathParams,\n responseSchema: activateScorerVersionResponseSchema,\n summary: 'Activate scorer version',\n description: 'Sets a specific version as the active version for the scorer',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const version = await scorerStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for scorer ${scorerId}`,\n });\n }\n\n await scorerStore.update({\n id: scorerId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.scorer.clearCache(scorerId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} is now active`,\n activeVersionId: versionId,\n };\n } catch (error) {\n return handleError(error, 'Error activating scorer version');\n }\n },\n});\n\n/**\n * POST /stored/scorers/:scorerId/versions/:versionId/restore - Restore scorer to a version\n */\nexport const RESTORE_SCORER_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers/:scorerId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionIdPathParams,\n responseSchema: restoreScorerVersionResponseSchema,\n summary: 'Restore scorer version',\n description: 'Restores the scorer configuration from a version, creating a new version',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const versionToRestore = await scorerStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for scorer ${scorerId}`,\n });\n }\n\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n await scorerStore.update({\n id: scorerId,\n ...restoredConfig,\n });\n\n const latestVersion = await scorerStore.getLatestVersion(scorerId);\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, restoredConfig);\n\n const { versionId: newVersionId } = await createVersionWithRetry(\n scorerStore as unknown as VersionedStoreInterface,\n scorerId,\n 'scorerDefinitionId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n const newVersion = await scorerStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n scorerStore as unknown as VersionedStoreInterface,\n scorerId,\n 'scorerDefinitionId',\n scorer.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.scorer.clearCache(scorerId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring scorer version');\n }\n },\n});\n\n/**\n * DELETE /stored/scorers/:scorerId/versions/:versionId - Delete a version\n */\nexport const DELETE_SCORER_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/scorers/:scorerId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionIdPathParams,\n responseSchema: deleteScorerVersionResponseSchema,\n summary: 'Delete scorer version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getById(scorerId);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer with id ${scorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const version = await scorerStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for scorer ${scorerId}`,\n });\n }\n\n if (scorer.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await scorerStore.deleteVersion(versionId);\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.scorer.clearCache(scorerId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting scorer version');\n }\n },\n});\n\n/**\n * GET /stored/scorers/:scorerId/versions/compare - Compare two versions\n */\nexport const COMPARE_SCORER_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:scorerId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: scorerVersionPathParams,\n queryParamSchema: compareScorerVersionsQuerySchema,\n responseSchema: compareScorerVersionsResponseSchema,\n summary: 'Compare scorer versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['Scorer Versions'],\n handler: async ({ mastra, scorerId, from, to, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n const scorer = await scorerStore.getById(scorerId);\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n const fromVersion = await scorerStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${from} not found for scorer ${scorerId}`,\n });\n }\n\n const toVersion = await scorerStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.scorerDefinitionId !== scorerId) {\n throw new HTTPException(404, {\n message: `Version with id ${to} not found for scorer ${scorerId}`,\n });\n }\n\n const fromConfig = extractConfigFromVersion(\n fromVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n const toConfig = extractConfigFromVersion(\n toVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n const diffs = computeVersionDiffs(fromConfig, toConfig);\n\n return {\n diffs,\n fromVersion,\n toVersion,\n };\n } catch (error) {\n return handleError(error, 'Error comparing scorer versions');\n }\n },\n});\n"]}
import { getAgentFromSystem } from './chunk-XORQIQXT.js';
import { listToolsResponseSchema, serializedToolSchema, toolIdPathParams, executeToolResponseSchema, executeToolContextBodySchema, agentToolPathParams, executeToolBodySchema } from './chunk-QGKHU5OX.js';
import { MastraFGAPermissions, validateBody } from './chunk-A7APTIYJ.js';
import { optionalRunIdSchema } from './chunk-6VTOGOS2.js';
import { stringify } from './chunk-4GWTCVFL.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { standardSchemaToJSONSchema, toStandardSchema5 } from './chunk-7YKQI63H.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
import { __export } from './chunk-PR4QN5HX.js';
import { isVercelTool, isProviderDefinedTool } from '@mastra/core/tools';
// src/server/handlers/tools.ts
var tools_exports = {};
__export(tools_exports, {
EXECUTE_AGENT_TOOL_ROUTE: () => EXECUTE_AGENT_TOOL_ROUTE,
EXECUTE_TOOL_ROUTE: () => EXECUTE_TOOL_ROUTE,
GET_AGENT_TOOL_ROUTE: () => GET_AGENT_TOOL_ROUTE,
GET_TOOL_BY_ID_ROUTE: () => GET_TOOL_BY_ID_ROUTE,
LIST_TOOLS_ROUTE: () => LIST_TOOLS_ROUTE
});
function resolveLazySchema(schema) {
if (typeof schema === "function" && !("~standard" in schema)) {
return resolveLazySchema(schema());
}
return schema;
}
function schemaToJsonSchema(schema) {
if (!schema) {
return void 0;
}
return standardSchemaToJSONSchema(toStandardSchema5(schema), { target: "draft-2020-12" });
}
function serializeSchema(schema) {
const jsonSchema = schemaToJsonSchema(resolveLazySchema(schema));
if (jsonSchema === void 0) return void 0;
return stringify(jsonSchema);
}
async function findToolInAgents(mastra, toolId, requestContext) {
const agents = mastra.listAgents() || {};
for (const agent of Object.values(agents)) {
try {
const agentTools = await agent.listTools({ requestContext });
const found = Object.values(agentTools || {}).find((t) => t.id === toolId);
if (found) return found;
} catch (error) {
mastra.getLogger?.()?.warn?.("Failed to list tools for agent while resolving tool by id", {
agentId: agent?.id,
toolId,
error: error instanceof Error ? error.message : String(error)
});
}
}
return void 0;
}
function serializeTool(tool) {
if (isProviderDefinedTool(tool)) {
const resolvedInput = resolveLazySchema(tool.inputSchema);
const resolvedOutput = resolveLazySchema(tool.outputSchema);
return {
...tool,
inputSchema: resolvedInput && typeof resolvedInput === "object" && "jsonSchema" in resolvedInput ? stringify(resolvedInput.jsonSchema) : void 0,
outputSchema: resolvedOutput && typeof resolvedOutput === "object" && "jsonSchema" in resolvedOutput ? stringify(resolvedOutput.jsonSchema) : void 0
};
}
return {
...tool,
inputSchema: serializeSchema(tool.inputSchema),
outputSchema: serializeSchema(tool.outputSchema),
requestContextSchema: serializeSchema(tool.requestContextSchema)
};
}
var LIST_TOOLS_ROUTE = createRoute({
method: "GET",
path: "/tools",
responseType: "json",
responseSchema: listToolsResponseSchema,
summary: "List all tools",
description: "Returns a list of all available tools in the system",
tags: ["Tools"],
requiresAuth: true,
handler: async ({ mastra, registeredTools, requestContext }) => {
try {
const registered = registeredTools && Object.keys(registeredTools).length > 0 ? registeredTools : {};
const allTools = {};
const seenToolIds = /* @__PURE__ */ new Map();
for (const [key, tool] of Object.entries(registered)) {
const toolId = typeof tool?.id === "string" ? tool.id : void 0;
if (toolId !== void 0) seenToolIds.set(toolId, key);
allTools[key] = tool;
}
for (const [key, tool] of Object.entries(mastra.listTools() ?? {})) {
const toolId = typeof tool?.id === "string" ? tool.id : void 0;
if (toolId !== void 0 && seenToolIds.has(toolId)) continue;
if (toolId !== void 0) seenToolIds.set(toolId, key);
allTools[key] = tool;
}
const serializedTools = Object.entries(allTools).reduce(
(acc, [id, _tool]) => {
acc[id] = serializeTool(_tool);
return acc;
},
{}
);
const fgaProvider = mastra.getServer?.()?.fga;
const user = requestContext?.get("user");
if (fgaProvider && user) {
const toolList = Object.entries(serializedTools).map(([id, t]) => ({ id, ...t }));
const accessible = await fgaProvider.filterAccessible(user, toolList, "tool", MastraFGAPermissions.TOOLS_READ);
const accessibleSet = new Set(accessible.map((t) => t.id));
for (const id of Object.keys(serializedTools)) {
if (!accessibleSet.has(id)) {
delete serializedTools[id];
}
}
}
return serializedTools;
} catch (error) {
return handleError(error, "Error getting tools");
}
}
});
var GET_TOOL_BY_ID_ROUTE = createRoute({
method: "GET",
path: "/tools/:toolId",
responseType: "json",
pathParamSchema: toolIdPathParams,
responseSchema: serializedToolSchema,
summary: "Get tool by ID",
description: "Returns details for a specific tool including its schema and configuration",
tags: ["Tools"],
requiresAuth: true,
handler: async ({ mastra, registeredTools, toolId, requestContext }) => {
try {
let tool;
if (registeredTools && Object.keys(registeredTools).length > 0) {
tool = Object.values(registeredTools).find((t) => t.id === toolId);
}
if (!tool) {
try {
tool = mastra.getToolById(toolId);
} catch {
}
}
if (!tool) {
tool = await findToolInAgents(mastra, toolId, requestContext);
}
if (!tool) {
throw new HTTPException(404, { message: "Tool not found" });
}
return serializeTool(tool);
} catch (error) {
return handleError(error, "Error getting tool");
}
}
});
var EXECUTE_TOOL_ROUTE = createRoute({
method: "POST",
path: "/tools/:toolId/execute",
responseType: "json",
pathParamSchema: toolIdPathParams,
queryParamSchema: optionalRunIdSchema,
bodySchema: executeToolContextBodySchema,
responseSchema: executeToolResponseSchema,
summary: "Execute tool",
description: "Executes a specific tool with the provided input data",
tags: ["Tools"],
requiresAuth: true,
handler: async ({ mastra, runId, toolId, registeredTools, requestContext, ...bodyParams }) => {
try {
if (!toolId) {
throw new HTTPException(400, { message: "Tool ID is required" });
}
let tool;
if (registeredTools && Object.keys(registeredTools).length > 0) {
tool = Object.values(registeredTools).find((t) => t.id === toolId);
}
if (!tool) {
try {
tool = mastra.getToolById(toolId);
} catch {
}
}
if (!tool) {
tool = await findToolInAgents(mastra, toolId, requestContext);
}
if (!tool) {
throw new HTTPException(404, { message: "Tool not found" });
}
if (!tool?.execute) {
throw new HTTPException(400, { message: "Tool is not executable" });
}
const { data } = bodyParams;
validateBody({ data });
let result;
if (isVercelTool(tool)) {
result = await tool.execute(data);
} else {
result = await tool.execute(data, {
mastra,
requestContext,
// TODO: Pass proper tracing context when server API supports tracing
tracingContext: { currentSpan: void 0 },
...runId ? {
workflow: {
runId,
suspend: async () => {
}
}
} : {}
});
}
return result;
} catch (error) {
return handleError(error, "Error executing tool");
}
}
});
var GET_AGENT_TOOL_ROUTE = createRoute({
method: "GET",
path: "/agents/:agentId/tools/:toolId",
responseType: "json",
pathParamSchema: agentToolPathParams,
responseSchema: serializedToolSchema,
summary: "Get agent tool",
description: "Returns details for a specific tool assigned to the agent",
tags: ["Agents", "Tools"],
requiresAuth: true,
handler: async ({ mastra, agentId, toolId, requestContext }) => {
try {
if (!agentId) {
throw new HTTPException(400, { message: "Agent ID is required" });
}
const agent = await getAgentFromSystem({ mastra, agentId });
const agentTools = await agent.listTools({ requestContext });
const tool = Object.values(agentTools || {}).find((tool2) => tool2.id === toolId);
if (!tool) {
throw new HTTPException(404, { message: "Tool not found" });
}
return serializeTool(tool);
} catch (error) {
return handleError(error, "Error getting agent tool");
}
}
});
var EXECUTE_AGENT_TOOL_ROUTE = createRoute({
method: "POST",
path: "/agents/:agentId/tools/:toolId/execute",
responseType: "json",
pathParamSchema: agentToolPathParams,
bodySchema: executeToolBodySchema,
responseSchema: executeToolResponseSchema,
summary: "Execute agent tool",
description: "Executes a specific tool assigned to the agent with the provided input data",
tags: ["Agents", "Tools"],
requiresAuth: true,
handler: async ({ mastra, agentId, toolId, data, requestContext }) => {
try {
if (!agentId) {
throw new HTTPException(400, { message: "Agent ID is required" });
}
const agent = await getAgentFromSystem({ mastra, agentId });
const agentTools = await agent.listTools({ requestContext });
const tool = Object.values(agentTools || {}).find((tool2) => tool2.id === toolId);
if (!tool) {
throw new HTTPException(404, { message: "Tool not found" });
}
if (!tool?.execute) {
throw new HTTPException(400, { message: "Tool is not executable" });
}
const result = await tool.execute(data, {
mastra,
requestContext,
// TODO: Pass proper tracing context when server API supports tracing
tracingContext: { currentSpan: void 0 }
});
return result;
} catch (error) {
return handleError(error, "Error executing agent tool");
}
}
});
export { EXECUTE_AGENT_TOOL_ROUTE, EXECUTE_TOOL_ROUTE, GET_AGENT_TOOL_ROUTE, GET_TOOL_BY_ID_ROUTE, LIST_TOOLS_ROUTE, tools_exports };
//# sourceMappingURL=chunk-QHALAWTW.js.map
//# sourceMappingURL=chunk-QHALAWTW.js.map
{"version":3,"sources":["../src/server/handlers/tools.ts"],"names":["tool"],"mappings":"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","file":"chunk-QHALAWTW.js","sourcesContent":["import { isVercelTool, isProviderDefinedTool } from '@mastra/core/tools';\nimport { toStandardSchema, standardSchemaToJSONSchema } from '@mastra/schema-compat/schema';\nimport type { PublicSchema } from '@mastra/schema-compat/schema';\nimport { stringify } from 'superjson';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n executeToolContextBodySchema,\n executeToolResponseSchema,\n listToolsResponseSchema,\n serializedToolSchema,\n toolIdPathParams,\n agentToolPathParams,\n executeToolBodySchema,\n} from '../schemas/agents';\nimport { optionalRunIdSchema } from '../schemas/common';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\nimport { validateBody } from './utils';\n\n/**\n * Resolves a schema that may be a lazy function (e.g. AI SDK provider tools).\n * Recursively resolves until a non-function value is returned.\n * Skips functions that are themselves valid schemas (e.g. ArkType types are\n * callable but also implement StandardSchema via ~standard).\n */\nfunction resolveLazySchema(schema: unknown): unknown {\n if (typeof schema === 'function' && !('~standard' in schema)) {\n return resolveLazySchema(schema());\n }\n return schema;\n}\n\nfunction schemaToJsonSchema(schema: PublicSchema<unknown> | undefined) {\n if (!schema) {\n return undefined;\n }\n\n return standardSchemaToJSONSchema(toStandardSchema(schema), { target: 'draft-2020-12' });\n}\n\nfunction serializeSchema(schema: unknown): string | undefined {\n const jsonSchema = schemaToJsonSchema(resolveLazySchema(schema) as PublicSchema<unknown> | undefined);\n if (jsonSchema === undefined) return undefined;\n return stringify(jsonSchema);\n}\n\n/**\n * Searches dynamically-resolved agent tools (provided via `toolsResolver` /\n * function-based `tools`) for a tool with the given id. Used as a fallback\n * after the static tool registry (`registeredTools` + `mastra.getToolById`)\n * misses, so global tool routes can resolve tools that only exist on agents.\n *\n * Errors thrown by an individual agent's `listTools()` are logged and\n * skipped so a single broken resolver doesn't take down the whole lookup.\n */\nasync function findToolInAgents(mastra: any, toolId: string, requestContext: any): Promise<any | undefined> {\n const agents = mastra.listAgents() || {};\n for (const agent of Object.values(agents) as any[]) {\n try {\n const agentTools = await agent.listTools({ requestContext });\n const found = Object.values(agentTools || {}).find((t: any) => t.id === toolId);\n if (found) return found;\n } catch (error) {\n mastra.getLogger?.()?.warn?.('Failed to list tools for agent while resolving tool by id', {\n agentId: agent?.id,\n toolId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return undefined;\n}\n\n/**\n * Serializes a tool for API responses, handling both regular tools (with Zod schemas)\n * and provider-defined tools (with AI SDK lazy schemas).\n */\nfunction serializeTool(tool: any): any {\n // Provider-defined tools (e.g. google.tools.googleSearch(), openai.tools.webSearch())\n // have lazy inputSchema functions that return AI SDK Schema objects, not Zod schemas.\n // We resolve them and use the jsonSchema property directly.\n if (isProviderDefinedTool(tool)) {\n const resolvedInput = resolveLazySchema(tool.inputSchema);\n const resolvedOutput = resolveLazySchema(tool.outputSchema);\n return {\n ...tool,\n inputSchema:\n resolvedInput && typeof resolvedInput === 'object' && 'jsonSchema' in resolvedInput\n ? stringify(resolvedInput.jsonSchema)\n : undefined,\n outputSchema:\n resolvedOutput && typeof resolvedOutput === 'object' && 'jsonSchema' in resolvedOutput\n ? stringify(resolvedOutput.jsonSchema)\n : undefined,\n };\n }\n\n return {\n ...tool,\n inputSchema: serializeSchema(tool.inputSchema),\n outputSchema: serializeSchema(tool.outputSchema),\n requestContextSchema: serializeSchema(tool.requestContextSchema),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_TOOLS_ROUTE = createRoute({\n method: 'GET',\n path: '/tools',\n responseType: 'json',\n responseSchema: listToolsResponseSchema,\n summary: 'List all tools',\n description: 'Returns a list of all available tools in the system',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, registeredTools, requestContext }) => {\n try {\n // Merge tools from two sources: mastra.listTools() includes dynamically created tools\n // (e.g. MCP tools, or agent tools registered by their intrinsic id), while registeredTools\n // includes tools discovered by the CLI bundler (keyed by export name).\n //\n // The same tool instance can appear in both maps under different keys (e.g. an agent\n // registers it by `tool.id` while the bundler registers it by export name). Dedupe by\n // `tool.id`, preferring the registeredTools (bundler) key, so each tool appears once.\n const registered = registeredTools && Object.keys(registeredTools).length > 0 ? registeredTools : {};\n\n const allTools: Record<string, any> = {};\n const seenToolIds = new Map<string, string>();\n\n // registeredTools first so their key wins for a given tool.id.\n for (const [key, tool] of Object.entries(registered)) {\n const toolId = typeof (tool as any)?.id === 'string' ? (tool as any).id : undefined;\n if (toolId !== undefined) seenToolIds.set(toolId, key);\n allTools[key] = tool;\n }\n\n for (const [key, tool] of Object.entries(mastra.listTools() ?? {})) {\n const toolId = typeof (tool as any)?.id === 'string' ? (tool as any).id : undefined;\n // Skip if this exact tool.id was already registered (under any key) by registeredTools.\n if (toolId !== undefined && seenToolIds.has(toolId)) continue;\n if (toolId !== undefined) seenToolIds.set(toolId, key);\n allTools[key] = tool;\n }\n\n const serializedTools = Object.entries(allTools).reduce(\n (acc, [id, _tool]) => {\n acc[id] = serializeTool(_tool);\n return acc;\n },\n {} as Record<string, any>,\n );\n\n // Filter tools by FGA if configured\n const fgaProvider = mastra.getServer?.()?.fga;\n const user = requestContext?.get('user');\n if (fgaProvider && user) {\n const toolList = Object.entries(serializedTools).map(([id, t]) => ({ id, ...t }));\n const accessible = await fgaProvider.filterAccessible(user, toolList, 'tool', MastraFGAPermissions.TOOLS_READ);\n const accessibleSet = new Set(accessible.map((t: any) => t.id));\n for (const id of Object.keys(serializedTools)) {\n if (!accessibleSet.has(id)) {\n delete serializedTools[id];\n }\n }\n }\n\n return serializedTools;\n } catch (error) {\n return handleError(error, 'Error getting tools');\n }\n },\n});\n\nexport const GET_TOOL_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/tools/:toolId',\n responseType: 'json',\n pathParamSchema: toolIdPathParams,\n responseSchema: serializedToolSchema,\n summary: 'Get tool by ID',\n description: 'Returns details for a specific tool including its schema and configuration',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, registeredTools, toolId, requestContext }) => {\n try {\n let tool: any;\n\n // Try explicit registeredTools first, then fallback to mastra\n if (registeredTools && Object.keys(registeredTools).length > 0) {\n tool = Object.values(registeredTools).find((t: any) => t.id === toolId);\n }\n if (!tool) {\n try {\n tool = mastra.getToolById(toolId);\n } catch {\n // tool not found in global registry, continue to agent fallback\n }\n }\n\n // Fallback: search dynamically-resolved agent tools (toolsResolver)\n if (!tool) {\n tool = await findToolInAgents(mastra, toolId, requestContext);\n }\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n return serializeTool(tool);\n } catch (error) {\n return handleError(error, 'Error getting tool');\n }\n },\n});\n\nexport const EXECUTE_TOOL_ROUTE = createRoute({\n method: 'POST',\n path: '/tools/:toolId/execute',\n responseType: 'json',\n pathParamSchema: toolIdPathParams,\n queryParamSchema: optionalRunIdSchema,\n bodySchema: executeToolContextBodySchema,\n responseSchema: executeToolResponseSchema,\n summary: 'Execute tool',\n description: 'Executes a specific tool with the provided input data',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, runId, toolId, registeredTools, requestContext, ...bodyParams }) => {\n try {\n if (!toolId) {\n throw new HTTPException(400, { message: 'Tool ID is required' });\n }\n\n let tool: any;\n\n // Try explicit registeredTools first, then fallback to mastra\n if (registeredTools && Object.keys(registeredTools).length > 0) {\n tool = Object.values(registeredTools).find((t: any) => t.id === toolId);\n }\n if (!tool) {\n try {\n tool = mastra.getToolById(toolId);\n } catch {\n // tool not found in global registry, continue to agent fallback\n }\n }\n\n // Fallback: search dynamically-resolved agent tools (toolsResolver)\n if (!tool) {\n tool = await findToolInAgents(mastra, toolId, requestContext);\n }\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n if (!tool?.execute) {\n throw new HTTPException(400, { message: 'Tool is not executable' });\n }\n\n const { data } = bodyParams;\n\n validateBody({ data });\n\n let result;\n if (isVercelTool(tool)) {\n result = await (tool as any).execute(data);\n } else {\n result = await tool.execute(data!, {\n mastra,\n requestContext,\n // TODO: Pass proper tracing context when server API supports tracing\n tracingContext: { currentSpan: undefined },\n ...(runId\n ? {\n workflow: {\n runId,\n suspend: async () => {},\n },\n }\n : {}),\n });\n }\n\n return result;\n } catch (error) {\n return handleError(error, 'Error executing tool');\n }\n },\n});\n\n// ============================================================================\n// Agent Tool Routes\n// ============================================================================\n\nexport const GET_AGENT_TOOL_ROUTE = createRoute({\n method: 'GET',\n path: '/agents/:agentId/tools/:toolId',\n responseType: 'json',\n pathParamSchema: agentToolPathParams,\n responseSchema: serializedToolSchema,\n summary: 'Get agent tool',\n description: 'Returns details for a specific tool assigned to the agent',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, toolId, requestContext }) => {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const agentTools = await agent.listTools({ requestContext });\n\n const tool = Object.values(agentTools || {}).find((tool: any) => tool.id === toolId) as any;\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n return serializeTool(tool);\n } catch (error) {\n return handleError(error, 'Error getting agent tool');\n }\n },\n});\n\nexport const EXECUTE_AGENT_TOOL_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/tools/:toolId/execute',\n responseType: 'json',\n pathParamSchema: agentToolPathParams,\n bodySchema: executeToolBodySchema,\n responseSchema: executeToolResponseSchema,\n summary: 'Execute agent tool',\n description: 'Executes a specific tool assigned to the agent with the provided input data',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, toolId, data, requestContext }) => {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const agentTools = await agent.listTools({ requestContext });\n\n const tool = Object.values(agentTools || {}).find((tool: any) => tool.id === toolId) as any;\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n if (!tool?.execute) {\n throw new HTTPException(400, { message: 'Tool is not executable' });\n }\n\n const result = await tool.execute(data, {\n mastra,\n requestContext,\n // TODO: Pass proper tracing context when server API supports tracing\n tracingContext: { currentSpan: undefined },\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error executing agent tool');\n }\n },\n});\n"]}
import { listStoredSkillsResponseSchema, listStoredSkillsQuerySchema, getStoredSkillResponseSchema, storedSkillIdPathParams, createStoredSkillResponseSchema, createStoredSkillBodySchema, updateStoredSkillResponseSchema, updateStoredSkillBodySchema, deleteStoredSkillResponseSchema, publishStoredSkillResponseSchema, publishStoredSkillBodySchema } from './chunk-FBI32AWY.js';
import { stripFavoriteFields, prepareFavoritesEnrichment, enrichOrStripFavorites } from './chunk-VFIZ45BL.js';
import { isBuilderFeatureEnabled } from './chunk-IKIPMMHL.js';
import { resolveAuthorFilter, getCallerAuthorId, matchesAuthorFilter, assertReadAccess, assertWriteAccess } from './chunk-ETR4XOVD.js';
import { getStoredResourceScope, scopeStoredResourceMetadata, assertStoredResourceScope, toSlug } from './chunk-4GWTCVFL.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
import { LocalSkillSource } from '@mastra/core/workspace';
var INDEXED_FOLDERS = ["references", "scripts", "assets"];
function extractIndexedPathsFromFiles(files, existing) {
if (!files || files.length === 0) return {};
const root = files.find((n) => n.type === "folder");
if (!root?.children) return {};
const result = {};
for (const folderName of INDEXED_FOLDERS) {
const folder = root.children.find((n) => n.type === "folder" && n.name === folderName);
if (!folder?.children || folder.children.length === 0) continue;
const existingPaths = new Set(existing[folderName] ?? []);
const paths = [...existingPaths];
collectFilePaths(folder.children, folderName, existingPaths, paths);
if (paths.length > 0) {
result[folderName] = paths;
}
}
return result;
}
function collectFilePaths(nodes, prefix, existingPaths, out) {
for (const node of nodes) {
if (node.type === "file") {
const relativePath = `${prefix}/${node.name}`;
if (!existingPaths.has(relativePath)) {
out.push(relativePath);
}
} else if (node.type === "folder" && node.children) {
collectFilePaths(node.children, `${prefix}/${node.name}`, existingPaths, out);
}
}
}
var LIST_STORED_SKILLS_ROUTE = createRoute({
method: "GET",
path: "/stored/skills",
responseType: "json",
queryParamSchema: listStoredSkillsQuerySchema,
responseSchema: listStoredSkillsResponseSchema,
summary: "List stored skills",
description: "Returns a paginated list of all skill configurations stored in the database",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
page,
perPage,
orderBy,
status,
authorId,
visibility,
metadata,
favoritedOnly,
pinFavoritedFor
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new HTTPException(500, { message: "Skills storage domain is not available" });
}
const filter = resolveAuthorFilter({
requestContext,
resource: "stored-skills",
queryAuthorId: authorId,
queryVisibility: visibility
});
const scope = await getStoredResourceScope(mastra, requestContext);
const scopedMetadata = scopeStoredResourceMetadata(metadata, scope);
const callerId = getCallerAuthorId(requestContext);
const favoritesEnabled = await isBuilderFeatureEnabled(mastra, "favorites");
const honoredStarredOnly = favoritesEnabled && favoritedOnly === true;
const favoriteSubjectId = pinFavoritedFor ?? callerId;
if (honoredStarredOnly) {
const effectivePerPage = perPage ?? 100;
if (!favoriteSubjectId) {
return { skills: [], total: 0, page, perPage: effectivePerPage, hasMore: false };
}
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) {
throw new HTTPException(500, { message: "Favorites storage domain is not available" });
}
const starredIds = await favoritesStore.listFavoritedIds({ userId: favoriteSubjectId, entityType: "skill" });
if (starredIds.length === 0) {
return { skills: [], total: 0, page, perPage: effectivePerPage, hasMore: false };
}
const allMatching = await skillStore.listResolved({
perPage: false,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata,
entityIds: starredIds
});
const visible = allMatching.skills.filter((record) => matchesAuthorFilter(record, filter));
const total = visible.length;
const startIdx = effectivePerPage === 0 ? 0 : page * effectivePerPage;
const endIdx = effectivePerPage === 0 ? 0 : startIdx + effectivePerPage;
const sliced = effectivePerPage === 0 ? [] : visible.slice(startIdx, endIdx);
const annotated2 = sliced.map((record) => ({ ...record, isFavorited: true }));
const hasMore = effectivePerPage > 0 && endIdx < total;
return {
skills: annotated2,
total,
page,
perPage: effectivePerPage,
hasMore
};
}
const result = await skillStore.listResolved({
page,
perPage,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata
});
const visibleSkills = result.skills.filter((record) => matchesAuthorFilter(record, filter));
if (!favoritesEnabled) {
return { ...result, skills: visibleSkills.map(stripFavoriteFields) };
}
const enrichment = await prepareFavoritesEnrichment(
mastra,
requestContext,
"skill",
visibleSkills.map((s) => s.id)
);
const annotated = enrichment ? visibleSkills.map((record) => ({ ...record, isFavorited: enrichment.starredIds.has(record.id) })) : visibleSkills.map(stripFavoriteFields);
return { ...result, skills: annotated };
} catch (error) {
return handleError(error, "Error listing stored skills");
}
}
});
var GET_STORED_SKILL_ROUTE = createRoute({
method: "GET",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: storedSkillIdPathParams,
responseSchema: getStoredSkillResponseSchema,
summary: "Get stored skill by ID",
description: "Returns a specific skill from storage by its unique identifier (resolved with active version config)",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedSkillId }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new HTTPException(500, { message: "Skills storage domain is not available" });
}
const skill = await skillStore.getByIdResolved(storedSkillId);
if (!skill) {
throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));
assertReadAccess({ requestContext, resource: "stored-skills", resourceId: storedSkillId, record: skill });
return enrichOrStripFavorites(mastra, requestContext, "skill", skill);
} catch (error) {
return handleError(error, "Error getting stored skill");
}
}
});
var CREATE_STORED_SKILL_ROUTE = createRoute({
method: "POST",
path: "/stored/skills",
responseType: "json",
bodySchema: createStoredSkillBodySchema,
responseSchema: createStoredSkillResponseSchema,
summary: "Create stored skill",
description: "Creates a new skill configuration in storage with the provided details",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
id: providedId,
name,
description,
instructions,
license,
compatibility,
source,
references,
scripts,
assets,
files,
metadata,
visibility: bodyVisibility
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new HTTPException(500, { message: "Skills storage domain is not available" });
}
const id = providedId || toSlug(name);
if (!id) {
throw new HTTPException(400, {
message: "Could not derive skill ID from name. Please provide an explicit id."
});
}
const existing = await skillStore.getById(id);
if (existing) {
throw new HTTPException(409, { message: `Skill with id ${id} already exists` });
}
const authorId = getCallerAuthorId(requestContext) ?? void 0;
const visibility = authorId ? bodyVisibility ?? "private" : "public";
const indexedPaths = extractIndexedPathsFromFiles(files, { references, scripts, assets });
await skillStore.create({
skill: {
id,
authorId,
visibility,
name,
description,
instructions,
license,
compatibility,
source,
references: indexedPaths.references ?? references,
scripts: indexedPaths.scripts ?? scripts,
assets: indexedPaths.assets ?? assets,
files,
metadata: scopeStoredResourceMetadata(metadata, await getStoredResourceScope(mastra, requestContext))
}
});
const resolved = await skillStore.getByIdResolved(id);
if (!resolved) {
throw new HTTPException(500, { message: "Failed to resolve created skill" });
}
return enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return handleError(error, "Error creating stored skill");
}
}
});
var UPDATE_STORED_SKILL_ROUTE = createRoute({
method: "PATCH",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: storedSkillIdPathParams,
bodySchema: updateStoredSkillBodySchema,
responseSchema: updateStoredSkillResponseSchema,
summary: "Update stored skill",
description: "Updates an existing skill in storage with the provided fields",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
storedSkillId,
// Entity-level fields
authorId,
visibility,
// Config fields (snapshot-level)
name,
description,
instructions,
license,
compatibility,
source,
references,
scripts,
assets,
files,
metadata
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new HTTPException(500, { message: "Skills storage domain is not available" });
}
const existing = await skillStore.getByIdResolved(storedSkillId);
if (!existing) {
throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
const scope = await getStoredResourceScope(mastra, requestContext);
assertStoredResourceScope(existing, scope);
assertWriteAccess({
requestContext,
resource: "stored-skills",
resourceId: storedSkillId,
action: "edit",
record: existing
});
const callerAuthorId = getCallerAuthorId(requestContext) ?? void 0;
const resolvedVisibility = callerAuthorId ? visibility : visibility != null ? "public" : void 0;
const indexedPaths = files ? extractIndexedPathsFromFiles(files, { references, scripts, assets }) : {};
const update = { id: storedSkillId };
if (authorId !== void 0) update.authorId = authorId;
if (resolvedVisibility !== void 0) update.visibility = resolvedVisibility;
if (name !== void 0) update.name = name;
if (description !== void 0) update.description = description;
if (instructions !== void 0) update.instructions = instructions;
if (license !== void 0) update.license = license;
if (compatibility !== void 0) update.compatibility = compatibility;
if (source !== void 0) update.source = source;
const resolvedReferences = indexedPaths.references ?? references;
const resolvedScripts = indexedPaths.scripts ?? scripts;
const resolvedAssets = indexedPaths.assets ?? assets;
if (resolvedReferences !== void 0) update.references = resolvedReferences;
if (resolvedScripts !== void 0) update.scripts = resolvedScripts;
if (resolvedAssets !== void 0) update.assets = resolvedAssets;
if (files !== void 0) update.files = files;
if (metadata !== void 0) {
update.metadata = scopeStoredResourceMetadata({ ...existing.metadata ?? {}, ...metadata }, scope);
}
await skillStore.update(update);
const resolved = await skillStore.getByIdResolved(storedSkillId);
if (!resolved) {
throw new HTTPException(500, { message: "Failed to resolve updated skill" });
}
return enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return handleError(error, "Error updating stored skill");
}
}
});
var DELETE_STORED_SKILL_ROUTE = createRoute({
method: "DELETE",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: storedSkillIdPathParams,
responseSchema: deleteStoredSkillResponseSchema,
summary: "Delete stored skill",
description: "Deletes a skill from storage by its unique identifier",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedSkillId }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new HTTPException(500, { message: "Skills storage domain is not available" });
}
const existing = await skillStore.getByIdResolved(storedSkillId);
if (!existing) {
throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));
assertWriteAccess({
requestContext,
resource: "stored-skills",
resourceId: storedSkillId,
action: "delete",
record: existing
});
await skillStore.delete(storedSkillId);
try {
const favoritesStore = await storage.getStore("favorites");
await favoritesStore?.deleteFavoritesForEntity({ entityType: "skill", entityId: storedSkillId });
} catch (cascadeError) {
mastra.getLogger?.()?.warn?.("Failed to cascade-delete favorites for skill", { storedSkillId, error: cascadeError });
}
return {
success: true,
message: `Skill ${storedSkillId} deleted successfully`
};
} catch (error) {
return handleError(error, "Error deleting stored skill");
}
}
});
var PUBLISH_STORED_SKILL_ROUTE = createRoute({
method: "POST",
path: "/stored/skills/:storedSkillId/publish",
responseType: "json",
pathParamSchema: storedSkillIdPathParams,
bodySchema: publishStoredSkillBodySchema,
responseSchema: publishStoredSkillResponseSchema,
summary: "Publish stored skill",
description: "Snapshots the skill directory from the filesystem into content-addressable blob storage, creates a new version with a tree manifest, and marks the skill as published",
tags: ["Stored Skills"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedSkillId, skillPath }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const skillStore = await storage.getStore("skills");
if (!skillStore) {
throw new HTTPException(500, { message: "Skills storage domain is not available" });
}
const blobStore = await storage.getStore("blobs");
if (!blobStore) {
throw new HTTPException(500, { message: "Blob storage domain is not available" });
}
const existing = await skillStore.getByIdResolved(storedSkillId);
if (!existing) {
throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });
}
assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));
assertWriteAccess({
requestContext,
resource: "stored-skills",
resourceId: storedSkillId,
action: "edit",
record: existing
});
const path = await import('path');
const fs = await import('fs/promises');
const resolvedPath = path.default.resolve(skillPath);
const allowedBase = path.default.resolve(process.env.SKILLS_BASE_DIR || process.cwd());
if (!resolvedPath.startsWith(allowedBase + path.default.sep) && resolvedPath !== allowedBase) {
throw new HTTPException(400, {
message: `skillPath must be within the allowed directory: ${allowedBase}`
});
}
try {
const stat = await fs.stat(resolvedPath);
if (!stat.isDirectory()) {
throw new HTTPException(400, { message: `skillPath is not a directory: ${resolvedPath}` });
}
} catch (err) {
if (err instanceof HTTPException) throw err;
if (err?.code === "ENOENT") {
throw new HTTPException(400, {
message: `skillPath does not exist on the server filesystem: ${resolvedPath}. Create the skill directory (with a SKILL.md) before publishing, or use a skill that was materialized to disk.`
});
}
throw err;
}
try {
await fs.stat(path.default.join(resolvedPath, "SKILL.md"));
} catch (err) {
if (err?.code === "ENOENT") {
throw new HTTPException(400, {
message: `skillPath is missing SKILL.md: ${resolvedPath}`
});
}
throw err;
}
const source = new LocalSkillSource();
const { publishSkillFromSource } = await import('@mastra/core/workspace');
const { snapshot, tree, files } = await publishSkillFromSource(source, resolvedPath, blobStore);
const snapshotUpdate = {};
for (const [key, value] of Object.entries(snapshot)) {
if (value !== void 0) snapshotUpdate[key] = value;
}
await skillStore.update({
id: storedSkillId,
...snapshotUpdate,
tree,
files,
status: "published"
});
const latestVersion = await skillStore.getLatestVersion(storedSkillId);
if (latestVersion) {
await skillStore.update({
id: storedSkillId,
activeVersionId: latestVersion.id
});
}
const resolved = await skillStore.getByIdResolved(storedSkillId);
if (!resolved) {
throw new HTTPException(500, { message: "Failed to resolve skill after publish" });
}
return enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return handleError(error, "Error publishing stored skill");
}
}
});
export { CREATE_STORED_SKILL_ROUTE, DELETE_STORED_SKILL_ROUTE, GET_STORED_SKILL_ROUTE, LIST_STORED_SKILLS_ROUTE, PUBLISH_STORED_SKILL_ROUTE, UPDATE_STORED_SKILL_ROUTE };
//# sourceMappingURL=chunk-QRXUWF3U.js.map
//# sourceMappingURL=chunk-QRXUWF3U.js.map
{"version":3,"sources":["../src/server/handlers/stored-skills.ts"],"names":["annotated"],"mappings":"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","file":"chunk-QRXUWF3U.js","sourcesContent":["import type { StorageSkillFileNode } from '@mastra/core/storage';\nimport { LocalSkillSource } from '@mastra/core/workspace';\n\nimport { HTTPException } from '../http-exception';\nimport {\n storedSkillIdPathParams,\n listStoredSkillsQuerySchema,\n createStoredSkillBodySchema,\n updateStoredSkillBodySchema,\n publishStoredSkillBodySchema,\n listStoredSkillsResponseSchema,\n getStoredSkillResponseSchema,\n createStoredSkillResponseSchema,\n updateStoredSkillResponseSchema,\n deleteStoredSkillResponseSchema,\n publishStoredSkillResponseSchema,\n} from '../schemas/stored-skills';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { toSlug, assertStoredResourceScope, getStoredResourceScope, scopeStoredResourceMetadata } from '../utils';\n\nimport {\n assertReadAccess,\n assertWriteAccess,\n getCallerAuthorId,\n matchesAuthorFilter,\n resolveAuthorFilter,\n} from './authorship';\nimport { isBuilderFeatureEnabled } from './editor-builder';\nimport { handleError } from './error';\nimport { enrichOrStripFavorites, prepareFavoritesEnrichment, stripFavoriteFields } from './favorites-enrichment';\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Well-known folder names in the skill file tree whose children represent\n * indexable path arrays (references, scripts, assets).\n */\nconst INDEXED_FOLDERS = ['references', 'scripts', 'assets'] as const;\n\n/**\n * Walks the `files` tree and collects relative file paths for each well-known\n * folder (references, scripts, assets). Returned arrays only include entries\n * that are not already present in any explicitly-provided arrays so callers\n * can pass both `files` and `references` without creating duplicates.\n */\nfunction extractIndexedPathsFromFiles(\n files: StorageSkillFileNode[] | undefined,\n existing: {\n references?: string[];\n scripts?: string[];\n assets?: string[];\n },\n): {\n references?: string[];\n scripts?: string[];\n assets?: string[];\n} {\n if (!files || files.length === 0) return {};\n\n // Find the root folder (first folder node, usually id=\"root\")\n const root = files.find(n => n.type === 'folder');\n if (!root?.children) return {};\n\n const result: Record<string, string[]> = {};\n\n for (const folderName of INDEXED_FOLDERS) {\n const folder = root.children.find(n => n.type === 'folder' && n.name === folderName);\n if (!folder?.children || folder.children.length === 0) continue;\n\n const existingPaths = new Set(existing[folderName] ?? []);\n const paths: string[] = [...existingPaths];\n\n collectFilePaths(folder.children, folderName, existingPaths, paths);\n\n if (paths.length > 0) {\n result[folderName] = paths;\n }\n }\n\n return result;\n}\n\n/** Recursively collects file paths from a subtree, building relative paths. */\nfunction collectFilePaths(\n nodes: StorageSkillFileNode[],\n prefix: string,\n existingPaths: Set<string>,\n out: string[],\n): void {\n for (const node of nodes) {\n if (node.type === 'file') {\n const relativePath = `${prefix}/${node.name}`;\n if (!existingPaths.has(relativePath)) {\n out.push(relativePath);\n }\n } else if (node.type === 'folder' && node.children) {\n collectFilePaths(node.children, `${prefix}/${node.name}`, existingPaths, out);\n }\n }\n}\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/skills - List all stored skills\n */\nexport const LIST_STORED_SKILLS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/skills',\n responseType: 'json',\n queryParamSchema: listStoredSkillsQuerySchema,\n responseSchema: listStoredSkillsResponseSchema,\n summary: 'List stored skills',\n description: 'Returns a paginated list of all skill configurations stored in the database',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n page,\n perPage,\n orderBy,\n status,\n authorId,\n visibility,\n metadata,\n favoritedOnly,\n pinFavoritedFor,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n const filter = resolveAuthorFilter({\n requestContext,\n resource: 'stored-skills',\n queryAuthorId: authorId,\n queryVisibility: visibility,\n });\n\n const scope = await getStoredResourceScope(mastra, requestContext);\n const scopedMetadata = scopeStoredResourceMetadata(metadata, scope);\n\n const callerId = getCallerAuthorId(requestContext);\n const favoritesEnabled = await isBuilderFeatureEnabled(mastra, 'favorites');\n const honoredStarredOnly = favoritesEnabled && favoritedOnly === true;\n const favoriteSubjectId = pinFavoritedFor ?? callerId;\n\n // `?favoritedOnly=true` flow: fetch caller's favorited IDs, restrict the list\n // to that set, then post-filter by visibility and recompute total/pages.\n if (honoredStarredOnly) {\n const effectivePerPage: number = perPage ?? 100;\n if (!favoriteSubjectId) {\n // Caller cannot have favorited anything without an identity.\n return { skills: [], total: 0, page, perPage: effectivePerPage, hasMore: false };\n }\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) {\n throw new HTTPException(500, { message: 'Favorites storage domain is not available' });\n }\n const starredIds = await favoritesStore.listFavoritedIds({ userId: favoriteSubjectId, entityType: 'skill' });\n if (starredIds.length === 0) {\n return { skills: [], total: 0, page, perPage: effectivePerPage, hasMore: false };\n }\n const allMatching = await skillStore.listResolved({\n perPage: false,\n orderBy,\n status,\n authorId: filter.kind === 'exact' ? filter.authorId : undefined,\n metadata: scopedMetadata,\n entityIds: starredIds,\n });\n const visible = allMatching.skills.filter(record => matchesAuthorFilter(record, filter));\n const total = visible.length;\n const startIdx = effectivePerPage === 0 ? 0 : page * effectivePerPage;\n const endIdx = effectivePerPage === 0 ? 0 : startIdx + effectivePerPage;\n const sliced = effectivePerPage === 0 ? [] : visible.slice(startIdx, endIdx);\n const annotated = sliced.map(record => ({ ...record, isFavorited: true }));\n const hasMore = effectivePerPage > 0 && endIdx < total;\n return {\n skills: annotated,\n total,\n page,\n perPage: effectivePerPage,\n hasMore,\n };\n }\n\n const result = await skillStore.listResolved({\n page,\n perPage,\n orderBy,\n status,\n authorId: filter.kind === 'exact' ? filter.authorId : undefined,\n metadata: scopedMetadata,\n });\n\n // Post-filter to enforce ownership + visibility rules across all backends.\n // Storage adapters can only do an equality filter on authorId, so we apply\n // the ownedOrPublic / publicOnly logic here.\n // Note: `result.total` / `result.hasMore` reflect the storage-reported\n // count before this post-filter. For `unrestricted` / `exact` filters\n // nothing is removed; for `ownedOrPublic` / `publicOnly`, downstream UIs\n // should treat the filter as a view over the caller's scope — an\n // approximation is OK and preserves pagination math.\n const visibleSkills = result.skills.filter(record => matchesAuthorFilter(record, filter));\n\n if (!favoritesEnabled) {\n return { ...result, skills: visibleSkills.map(stripFavoriteFields) };\n }\n\n const enrichment = await prepareFavoritesEnrichment(\n mastra,\n requestContext,\n 'skill',\n visibleSkills.map(s => s.id),\n );\n const annotated = enrichment\n ? visibleSkills.map(record => ({ ...record, isFavorited: enrichment.starredIds.has(record.id) }))\n : visibleSkills.map(stripFavoriteFields);\n\n return { ...result, skills: annotated };\n } catch (error) {\n return handleError(error, 'Error listing stored skills');\n }\n },\n});\n\n/**\n * GET /stored/skills/:storedSkillId - Get a stored skill by ID\n */\nexport const GET_STORED_SKILL_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/skills/:storedSkillId',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: getStoredSkillResponseSchema,\n summary: 'Get stored skill by ID',\n description: 'Returns a specific skill from storage by its unique identifier (resolved with active version config)',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n const skill = await skillStore.getByIdResolved(storedSkillId);\n\n if (!skill) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));\n\n assertReadAccess({ requestContext, resource: 'stored-skills', resourceId: storedSkillId, record: skill });\n\n return enrichOrStripFavorites(mastra, requestContext, 'skill', skill);\n } catch (error) {\n return handleError(error, 'Error getting stored skill');\n }\n },\n});\n\n/**\n * POST /stored/skills - Create a new stored skill\n */\nexport const CREATE_STORED_SKILL_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/skills',\n responseType: 'json',\n bodySchema: createStoredSkillBodySchema,\n responseSchema: createStoredSkillResponseSchema,\n summary: 'Create stored skill',\n description: 'Creates a new skill configuration in storage with the provided details',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n id: providedId,\n name,\n description,\n instructions,\n license,\n compatibility,\n source,\n references,\n scripts,\n assets,\n files,\n metadata,\n visibility: bodyVisibility,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n // Derive ID from name if not explicitly provided\n const id = providedId || toSlug(name);\n\n if (!id) {\n throw new HTTPException(400, {\n message: 'Could not derive skill ID from name. Please provide an explicit id.',\n });\n }\n\n // Check if skill with this ID already exists\n const existing = await skillStore.getById(id);\n if (existing) {\n throw new HTTPException(409, { message: `Skill with id ${id} already exists` });\n }\n\n // Force authorId from the authenticated caller; ignore any body-provided value.\n // No owner = always public (no auth / no user context).\n // With an owner, respect the client's choice, defaulting to 'private'.\n const authorId = getCallerAuthorId(requestContext) ?? undefined;\n const visibility: 'private' | 'public' = authorId ? (bodyVisibility ?? 'private') : 'public';\n\n // Derive references/scripts/assets path arrays from the files tree\n // so agents can discover them via skill_read even when only `files` is provided.\n const indexedPaths = extractIndexedPathsFromFiles(files, { references, scripts, assets });\n\n await skillStore.create({\n skill: {\n id,\n authorId,\n visibility,\n name,\n description,\n instructions,\n license,\n compatibility,\n source,\n references: indexedPaths.references ?? references,\n scripts: indexedPaths.scripts ?? scripts,\n assets: indexedPaths.assets ?? assets,\n files,\n metadata: scopeStoredResourceMetadata(metadata, await getStoredResourceScope(mastra, requestContext)),\n },\n });\n\n // Return the resolved skill (thin record + version config)\n const resolved = await skillStore.getByIdResolved(id);\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve created skill' });\n }\n\n return enrichOrStripFavorites(mastra, requestContext, 'skill', resolved);\n } catch (error) {\n return handleError(error, 'Error creating stored skill');\n }\n },\n});\n\n/**\n * PATCH /stored/skills/:storedSkillId - Update a stored skill\n */\nexport const UPDATE_STORED_SKILL_ROUTE = createRoute({\n method: 'PATCH',\n path: '/stored/skills/:storedSkillId',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n bodySchema: updateStoredSkillBodySchema,\n responseSchema: updateStoredSkillResponseSchema,\n summary: 'Update stored skill',\n description: 'Updates an existing skill in storage with the provided fields',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n storedSkillId,\n // Entity-level fields\n authorId,\n visibility,\n // Config fields (snapshot-level)\n name,\n description,\n instructions,\n license,\n compatibility,\n source,\n references,\n scripts,\n assets,\n files,\n metadata,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n // Check if skill exists. Skill metadata lives on the resolved snapshot.\n const existing = await skillStore.getByIdResolved(storedSkillId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n const scope = await getStoredResourceScope(mastra, requestContext);\n assertStoredResourceScope(existing, scope);\n\n // Throws 404 if the caller isn't the owner, admin, or `stored-skills:write[:<id>]` holder.\n assertWriteAccess({\n requestContext,\n resource: 'stored-skills',\n resourceId: storedSkillId,\n action: 'edit',\n record: existing,\n });\n\n // No owner = always public, regardless of what the client sent.\n const callerAuthorId = getCallerAuthorId(requestContext) ?? undefined;\n const resolvedVisibility = callerAuthorId ? visibility : visibility != null ? 'public' : undefined;\n\n // Derive references/scripts/assets path arrays from the files tree\n const indexedPaths = files ? extractIndexedPathsFromFiles(files, { references, scripts, assets }) : {};\n\n // Update the skill with both entity-level and config-level fields.\n // The storage layer handles separating these into record updates vs\n // new-version creation, but it uses `field in updates` to detect config\n // changes — so we must only include fields the caller actually sent.\n // Forwarding `undefined` keys would trigger a spurious version create\n // and pass `undefined` into the database driver.\n const update: Record<string, unknown> = { id: storedSkillId };\n if (authorId !== undefined) update.authorId = authorId;\n if (resolvedVisibility !== undefined) update.visibility = resolvedVisibility;\n if (name !== undefined) update.name = name;\n if (description !== undefined) update.description = description;\n if (instructions !== undefined) update.instructions = instructions;\n if (license !== undefined) update.license = license;\n if (compatibility !== undefined) update.compatibility = compatibility;\n if (source !== undefined) update.source = source;\n const resolvedReferences = indexedPaths.references ?? references;\n const resolvedScripts = indexedPaths.scripts ?? scripts;\n const resolvedAssets = indexedPaths.assets ?? assets;\n if (resolvedReferences !== undefined) update.references = resolvedReferences;\n if (resolvedScripts !== undefined) update.scripts = resolvedScripts;\n if (resolvedAssets !== undefined) update.assets = resolvedAssets;\n if (files !== undefined) update.files = files;\n if (metadata !== undefined) {\n update.metadata = scopeStoredResourceMetadata({ ...(existing.metadata ?? {}), ...metadata }, scope);\n }\n\n await skillStore.update(update as Parameters<typeof skillStore.update>[0]);\n\n // Return the resolved skill with the updated config\n const resolved = await skillStore.getByIdResolved(storedSkillId);\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve updated skill' });\n }\n\n return enrichOrStripFavorites(mastra, requestContext, 'skill', resolved);\n } catch (error) {\n return handleError(error, 'Error updating stored skill');\n }\n },\n});\n\n/**\n * DELETE /stored/skills/:storedSkillId - Delete a stored skill\n */\nexport const DELETE_STORED_SKILL_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/skills/:storedSkillId',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: deleteStoredSkillResponseSchema,\n summary: 'Delete stored skill',\n description: 'Deletes a skill from storage by its unique identifier',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n // Check if skill exists. Skill metadata lives on the resolved snapshot.\n const existing = await skillStore.getByIdResolved(storedSkillId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller isn't the owner, admin, or `skills:delete[:<id>]` holder.\n assertWriteAccess({\n requestContext,\n resource: 'stored-skills',\n resourceId: storedSkillId,\n action: 'delete',\n record: existing,\n });\n\n await skillStore.delete(storedSkillId);\n\n // Cascade: drop any favorite rows referencing this skill. Failure must not\n // abort the delete.\n try {\n const favoritesStore = await storage.getStore('favorites');\n await favoritesStore?.deleteFavoritesForEntity({ entityType: 'skill', entityId: storedSkillId });\n } catch (cascadeError) {\n mastra\n .getLogger?.()\n ?.warn?.('Failed to cascade-delete favorites for skill', { storedSkillId, error: cascadeError });\n }\n\n return {\n success: true,\n message: `Skill ${storedSkillId} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting stored skill');\n }\n },\n});\n\n/**\n * POST /stored/skills/:storedSkillId/publish - Publish a skill from filesystem\n * Walks the skill directory, hashes files into blob store, creates a new version\n * with the tree manifest, and sets activeVersionId.\n */\nexport const PUBLISH_STORED_SKILL_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/skills/:storedSkillId/publish',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n bodySchema: publishStoredSkillBodySchema,\n responseSchema: publishStoredSkillResponseSchema,\n summary: 'Publish stored skill',\n description:\n 'Snapshots the skill directory from the filesystem into content-addressable blob storage, creates a new version with a tree manifest, and marks the skill as published',\n tags: ['Stored Skills'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedSkillId, skillPath }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n const blobStore = await storage.getStore('blobs');\n if (!blobStore) {\n throw new HTTPException(500, { message: 'Blob storage domain is not available' });\n }\n\n // Verify skill exists. Skill metadata lives on the resolved snapshot.\n const existing = await skillStore.getByIdResolved(storedSkillId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller isn't the owner, admin, or `stored-skills:write[:<id>]` holder.\n assertWriteAccess({\n requestContext,\n resource: 'stored-skills',\n resourceId: storedSkillId,\n action: 'edit',\n record: existing,\n });\n\n // Validate skillPath to prevent path traversal\n const path = await import('node:path');\n const fs = await import('node:fs/promises');\n const resolvedPath = path.default.resolve(skillPath);\n const allowedBase = path.default.resolve(process.env.SKILLS_BASE_DIR || process.cwd());\n if (!resolvedPath.startsWith(allowedBase + path.default.sep) && resolvedPath !== allowedBase) {\n throw new HTTPException(400, {\n message: `skillPath must be within the allowed directory: ${allowedBase}`,\n });\n }\n\n // Verify the source directory exists and contains a SKILL.md before attempting\n // to publish, so callers get a 400 with context instead of a raw 500/ENOENT.\n try {\n const stat = await fs.stat(resolvedPath);\n if (!stat.isDirectory()) {\n throw new HTTPException(400, { message: `skillPath is not a directory: ${resolvedPath}` });\n }\n } catch (err) {\n if (err instanceof HTTPException) throw err;\n if ((err as NodeJS.ErrnoException)?.code === 'ENOENT') {\n throw new HTTPException(400, {\n message: `skillPath does not exist on the server filesystem: ${resolvedPath}. Create the skill directory (with a SKILL.md) before publishing, or use a skill that was materialized to disk.`,\n });\n }\n throw err;\n }\n try {\n await fs.stat(path.default.join(resolvedPath, 'SKILL.md'));\n } catch (err) {\n if ((err as NodeJS.ErrnoException)?.code === 'ENOENT') {\n throw new HTTPException(400, {\n message: `skillPath is missing SKILL.md: ${resolvedPath}`,\n });\n }\n throw err;\n }\n\n // Use LocalSkillSource to read from the server filesystem\n const source = new LocalSkillSource();\n const { publishSkillFromSource } = await import('@mastra/core/workspace');\n\n const { snapshot, tree, files } = await publishSkillFromSource(source, resolvedPath, blobStore);\n\n // Strip undefined keys from the snapshot before passing to update(). The\n // storage layer treats \"field present\" as \"field changed\"; forwarding\n // undefined would overwrite populated columns with undefined and trip\n // NOT NULL / \"undefined cannot be passed as argument\" errors in\n // adapters that bind args raw (libsql, pg).\n const snapshotUpdate: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(snapshot)) {\n if (value !== undefined) snapshotUpdate[key] = value;\n }\n\n // Update the skill with new version data + tree + UI-facing file tree.\n // `files` is the nested folder/file structure shown in the editor; without\n // it the column would stay null and the UI would render an empty tree.\n await skillStore.update({\n id: storedSkillId,\n ...snapshotUpdate,\n tree,\n files,\n status: 'published',\n });\n\n // Point activeVersionId to the newly created version\n const latestVersion = await skillStore.getLatestVersion(storedSkillId);\n if (latestVersion) {\n await skillStore.update({\n id: storedSkillId,\n activeVersionId: latestVersion.id,\n });\n }\n\n const resolved = await skillStore.getByIdResolved(storedSkillId);\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve skill after publish' });\n }\n\n return enrichOrStripFavorites(mastra, requestContext, 'skill', resolved);\n } catch (error) {\n return handleError(error, 'Error publishing stored skill');\n }\n },\n});\n"]}
import { listStoredScorersResponseSchema, listStoredScorersQuerySchema, getStoredScorerResponseSchema, storedScorerIdPathParams, createStoredScorerResponseSchema, createStoredScorerBodySchema, updateStoredScorerResponseSchema, updateStoredScorerBodySchema, deleteStoredScorerResponseSchema } from './chunk-3G43R5VJ.js';
import { handleAutoVersioning } from './chunk-33QPJPK4.js';
import { statusQuerySchema } from './chunk-6VTOGOS2.js';
import { getStoredResourceScope, scopeStoredResourceMetadata, assertStoredResourceScope, toSlug } from './chunk-4GWTCVFL.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
// src/server/handlers/stored-scorers.ts
var SCORER_SNAPSHOT_CONFIG_FIELDS = [
"name",
"description",
"type",
"model",
"instructions",
"scoreRange",
"presetConfig",
"defaultSampling"
];
var LIST_STORED_SCORERS_ROUTE = createRoute({
method: "GET",
path: "/stored/scorers",
responseType: "json",
queryParamSchema: listStoredScorersQuerySchema,
responseSchema: listStoredScorersResponseSchema,
summary: "List stored scorer definitions",
description: "Returns a paginated list of all scorer definitions stored in the database",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({ mastra, page, perPage, orderBy, status, authorId, metadata, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scope = await getStoredResourceScope(mastra, requestContext);
const result = await scorerStore.listResolved({
page,
perPage,
orderBy,
status,
authorId,
metadata: scopeStoredResourceMetadata(metadata, scope)
});
return result;
} catch (error) {
return handleError(error, "Error listing stored scorer definitions");
}
}
});
var GET_STORED_SCORER_ROUTE = createRoute({
method: "GET",
path: "/stored/scorers/:storedScorerId",
responseType: "json",
pathParamSchema: storedScorerIdPathParams,
queryParamSchema: statusQuerySchema,
responseSchema: getStoredScorerResponseSchema,
summary: "Get stored scorer definition by ID",
description: "Returns a specific scorer definition from storage by its unique identifier. Use ?status=draft to resolve with the latest (draft) version, or ?status=published (default) for the active published version.",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({ mastra, storedScorerId, status, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getByIdResolved(storedScorerId, { status });
if (!scorer) {
throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });
}
assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));
return scorer;
} catch (error) {
return handleError(error, "Error getting stored scorer definition");
}
}
});
var CREATE_STORED_SCORER_ROUTE = createRoute({
method: "POST",
path: "/stored/scorers",
responseType: "json",
bodySchema: createStoredScorerBodySchema,
responseSchema: createStoredScorerResponseSchema,
summary: "Create stored scorer definition",
description: "Creates a new scorer definition in storage with the provided configuration",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({
mastra,
id: providedId,
authorId,
metadata,
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling,
requestContext
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const id = providedId || toSlug(name);
if (!id) {
throw new HTTPException(400, {
message: "Could not derive scorer definition ID from name. Please provide an explicit id."
});
}
const existing = await scorerStore.getById(id);
if (existing) {
throw new HTTPException(409, { message: `Scorer definition with id ${id} already exists` });
}
await scorerStore.create({
scorerDefinition: {
id,
authorId,
metadata: scopeStoredResourceMetadata(metadata, await getStoredResourceScope(mastra, requestContext)),
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling
}
});
const resolved = await scorerStore.getByIdResolved(id, { status: "draft" });
if (!resolved) {
throw new HTTPException(500, { message: "Failed to resolve created scorer definition" });
}
return resolved;
} catch (error) {
return handleError(error, "Error creating stored scorer definition");
}
}
});
var UPDATE_STORED_SCORER_ROUTE = createRoute({
method: "PATCH",
path: "/stored/scorers/:storedScorerId",
responseType: "json",
pathParamSchema: storedScorerIdPathParams,
bodySchema: updateStoredScorerBodySchema,
responseSchema: updateStoredScorerResponseSchema,
summary: "Update stored scorer definition",
description: "Updates an existing scorer definition in storage with the provided fields",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({
mastra,
storedScorerId,
// Metadata-level fields
authorId,
metadata,
// Config fields (snapshot-level)
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling,
requestContext
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const existing = await scorerStore.getById(storedScorerId);
if (!existing) {
throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });
}
const scope = await getStoredResourceScope(mastra, requestContext);
assertStoredResourceScope(existing, scope);
const scopedMetadata = metadata !== void 0 ? scopeStoredResourceMetadata({ ...existing.metadata ?? {}, ...metadata }, scope) : void 0;
const updatedScorer = await scorerStore.update({
id: storedScorerId,
authorId,
...scopedMetadata !== void 0 ? { metadata: scopedMetadata } : {},
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling
});
const configFields = {
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling
};
const providedConfigFields = Object.fromEntries(Object.entries(configFields).filter(([_, v]) => v !== void 0));
await handleAutoVersioning(
scorerStore,
storedScorerId,
"scorerDefinitionId",
SCORER_SNAPSHOT_CONFIG_FIELDS,
existing,
updatedScorer,
providedConfigFields
);
const editor = mastra.getEditor();
if (editor) {
editor.scorer.clearCache(storedScorerId);
}
const resolved = await scorerStore.getByIdResolved(storedScorerId, { status: "draft" });
if (!resolved) {
throw new HTTPException(500, { message: "Failed to resolve updated scorer definition" });
}
return resolved;
} catch (error) {
return handleError(error, "Error updating stored scorer definition");
}
}
});
var DELETE_STORED_SCORER_ROUTE = createRoute({
method: "DELETE",
path: "/stored/scorers/:storedScorerId",
responseType: "json",
pathParamSchema: storedScorerIdPathParams,
responseSchema: deleteStoredScorerResponseSchema,
summary: "Delete stored scorer definition",
description: "Deletes a scorer definition from storage by its unique identifier",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({ mastra, storedScorerId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const existing = await scorerStore.getById(storedScorerId);
if (!existing) {
throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });
}
assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));
await scorerStore.delete(storedScorerId);
mastra.getEditor()?.scorer.clearCache(storedScorerId);
return { success: true, message: `Scorer definition ${storedScorerId} deleted successfully` };
} catch (error) {
return handleError(error, "Error deleting stored scorer definition");
}
}
});
export { CREATE_STORED_SCORER_ROUTE, DELETE_STORED_SCORER_ROUTE, GET_STORED_SCORER_ROUTE, LIST_STORED_SCORERS_ROUTE, UPDATE_STORED_SCORER_ROUTE };
//# sourceMappingURL=chunk-R5VL3YAW.js.map
//# sourceMappingURL=chunk-R5VL3YAW.js.map
{"version":3,"sources":["../src/server/handlers/stored-scorers.ts"],"names":[],"mappings":";;;;;;;;;AAoBA,IAAM,6BAAA,GAAgC;AAAA,EACpC,MAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AASO,IAAM,4BAA4B,WAAA,CAAY;AAAA,EACnD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,iBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,gBAAA,EAAkB,4BAAA;AAAA,EAClB,cAAA,EAAgB,+BAAA;AAAA,EAChB,OAAA,EAAS,gCAAA;AAAA,EACT,WAAA,EAAa,2EAAA;AAAA,EACb,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,EACvB,YAAA,EAAc,IAAA;AAAA,EACd,OAAA,EAAS,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,MAAA,EAAQ,QAAA,EAAU,QAAA,EAAU,cAAA,EAAe,KAAM;AACjG,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,mBAAmB,CAAA;AAC9D,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,sDAAsD,CAAA;AAAA,MAChG;AAEA,MAAA,MAAM,KAAA,GAAQ,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAA;AACjE,MAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,YAAA,CAAa;AAAA,QAC5C,IAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA,EAAU,2BAAA,CAA4B,QAAA,EAAU,KAAK;AAAA,OACtD,CAAA;AAED,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,yCAAyC,CAAA;AAAA,IACrE;AAAA,EACF;AACF,CAAC;AAKM,IAAM,0BAA0B,WAAA,CAAY;AAAA,EACjD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,iCAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,wBAAA;AAAA,EACjB,gBAAA,EAAkB,iBAAA;AAAA,EAClB,cAAA,EAAgB,6BAAA;AAAA,EAChB,OAAA,EAAS,oCAAA;AAAA,EACT,WAAA,EACE,4MAAA;AAAA,EACF,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,EACvB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO,EAAE,QAAQ,cAAA,EAAgB,MAAA,EAAQ,gBAAe,KAAM;AACrE,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,mBAAmB,CAAA;AAC9D,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,sDAAsD,CAAA;AAAA,MAChG;AAEA,MAAA,MAAM,SAAS,MAAM,WAAA,CAAY,gBAAgB,cAAA,EAAgB,EAAE,QAAQ,CAAA;AAE3E,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,iCAAA,EAAoC,cAAc,cAAc,CAAA;AAAA,MAC1G;AACA,MAAA,yBAAA,CAA0B,MAAA,EAAQ,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAC,CAAA;AAEtF,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,wCAAwC,CAAA;AAAA,IACpE;AAAA,EACF;AACF,CAAC;AAKM,IAAM,6BAA6B,WAAA,CAAY;AAAA,EACpD,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,iBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,UAAA,EAAY,4BAAA;AAAA,EACZ,cAAA,EAAgB,gCAAA;AAAA,EAChB,OAAA,EAAS,iCAAA;AAAA,EACT,WAAA,EAAa,4EAAA;AAAA,EACb,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,EACvB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO;AAAA,IACd,MAAA;AAAA,IACA,EAAA,EAAI,UAAA;AAAA,IACJ,QAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF,KAAM;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,mBAAmB,CAAA;AAC9D,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,sDAAsD,CAAA;AAAA,MAChG;AAGA,MAAA,MAAM,EAAA,GAAK,UAAA,IAAc,MAAA,CAAO,IAAI,CAAA;AAEpC,MAAA,IAAI,CAAC,EAAA,EAAI;AACP,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK;AAAA,UAC3B,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAGA,MAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,OAAA,CAAQ,EAAE,CAAA;AAC7C,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,0BAAA,EAA6B,EAAE,mBAAmB,CAAA;AAAA,MAC5F;AAEA,MAAA,MAAM,YAAY,MAAA,CAAO;AAAA,QACvB,gBAAA,EAAkB;AAAA,UAChB,EAAA;AAAA,UACA,QAAA;AAAA,UACA,UAAU,2BAAA,CAA4B,QAAA,EAAU,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAC,CAAA;AAAA,UACpG,IAAA;AAAA,UACA,WAAA;AAAA,UACA,IAAA;AAAA,UACA,KAAA;AAAA,UACA,YAAA;AAAA,UACA,UAAA;AAAA,UACA,YAAA;AAAA,UACA;AAAA;AACF,OACD,CAAA;AAID,MAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,eAAA,CAAgB,IAAI,EAAE,MAAA,EAAQ,SAAS,CAAA;AAC1E,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,+CAA+C,CAAA;AAAA,MACzF;AAEA,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,yCAAyC,CAAA;AAAA,IACrE;AAAA,EACF;AACF,CAAC;AAKM,IAAM,6BAA6B,WAAA,CAAY;AAAA,EACpD,MAAA,EAAQ,OAAA;AAAA,EACR,IAAA,EAAM,iCAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,wBAAA;AAAA,EACjB,UAAA,EAAY,4BAAA;AAAA,EACZ,cAAA,EAAgB,gCAAA;AAAA,EAChB,OAAA,EAAS,iCAAA;AAAA,EACT,WAAA,EAAa,2EAAA;AAAA,EACb,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,EACvB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO;AAAA,IACd,MAAA;AAAA,IACA,cAAA;AAAA;AAAA,IAEA,QAAA;AAAA,IACA,QAAA;AAAA;AAAA,IAEA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF,KAAM;AACJ,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,mBAAmB,CAAA;AAC9D,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,sDAAsD,CAAA;AAAA,MAChG;AAGA,MAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,OAAA,CAAQ,cAAc,CAAA;AACzD,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,iCAAA,EAAoC,cAAc,cAAc,CAAA;AAAA,MAC1G;AACA,MAAA,MAAM,KAAA,GAAQ,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAA;AACjE,MAAA,yBAAA,CAA0B,UAAU,KAAK,CAAA;AACzC,MAAA,MAAM,cAAA,GACJ,QAAA,KAAa,MAAA,GACT,2BAAA,CAA4B,EAAE,GAAI,QAAA,CAAS,QAAA,IAAY,EAAC,EAAI,GAAG,QAAA,EAAS,EAAG,KAAK,CAAA,GAChF,MAAA;AAGN,MAAA,MAAM,aAAA,GAAgB,MAAM,WAAA,CAAY,MAAA,CAAO;AAAA,QAC7C,EAAA,EAAI,cAAA;AAAA,QACJ,QAAA;AAAA,QACA,GAAI,cAAA,KAAmB,MAAA,GAAY,EAAE,QAAA,EAAU,cAAA,KAAmB,EAAC;AAAA,QACnE,IAAA;AAAA,QACA,WAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA,YAAA;AAAA,QACA,UAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACD,CAAA;AAGD,MAAA,MAAM,YAAA,GAAe;AAAA,QACnB,IAAA;AAAA,QACA,WAAA;AAAA,QACA,IAAA;AAAA,QACA,KAAA;AAAA,QACA,YAAA;AAAA,QACA,UAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACF;AAGA,MAAA,MAAM,oBAAA,GAAuB,MAAA,CAAO,WAAA,CAAY,MAAA,CAAO,QAAQ,YAAY,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,KAAM,MAAS,CAAC,CAAA;AAKhH,MAAA,MAAM,oBAAA;AAAA,QACJ,WAAA;AAAA,QACA,cAAA;AAAA,QACA,oBAAA;AAAA,QACA,6BAAA;AAAA,QACA,QAAA;AAAA,QACA,aAAA;AAAA,QACA;AAAA,OACF;AAGA,MAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,CAAO,MAAA,CAAO,WAAW,cAAc,CAAA;AAAA,MACzC;AAGA,MAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,eAAA,CAAgB,gBAAgB,EAAE,MAAA,EAAQ,SAAS,CAAA;AACtF,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,+CAA+C,CAAA;AAAA,MACzF;AAEA,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,yCAAyC,CAAA;AAAA,IACrE;AAAA,EACF;AACF,CAAC;AAKM,IAAM,6BAA6B,WAAA,CAAY;AAAA,EACpD,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,iCAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,wBAAA;AAAA,EACjB,cAAA,EAAgB,gCAAA;AAAA,EAChB,OAAA,EAAS,iCAAA;AAAA,EACT,WAAA,EAAa,mEAAA;AAAA,EACb,IAAA,EAAM,CAAC,gBAAgB,CAAA;AAAA,EACvB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO,EAAE,MAAA,EAAQ,cAAA,EAAgB,gBAAe,KAAM;AAC7D,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AAEA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,mBAAmB,CAAA;AAC9D,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,sDAAsD,CAAA;AAAA,MAChG;AAGA,MAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,OAAA,CAAQ,cAAc,CAAA;AACzD,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,iCAAA,EAAoC,cAAc,cAAc,CAAA;AAAA,MAC1G;AACA,MAAA,yBAAA,CAA0B,QAAA,EAAU,MAAM,sBAAA,CAAuB,MAAA,EAAQ,cAAc,CAAC,CAAA;AAExF,MAAA,MAAM,WAAA,CAAY,OAAO,cAAc,CAAA;AAGvC,MAAA,MAAA,CAAO,SAAA,EAAU,EAAG,MAAA,CAAO,UAAA,CAAW,cAAc,CAAA;AAEpD,MAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAA,kBAAA,EAAqB,cAAc,CAAA,qBAAA,CAAA,EAAwB;AAAA,IAC9F,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,yCAAyC,CAAA;AAAA,IACrE;AAAA,EACF;AACF,CAAC","file":"chunk-R5VL3YAW.js","sourcesContent":["import { HTTPException } from '../http-exception';\nimport {\n storedScorerIdPathParams,\n statusQuerySchema,\n listStoredScorersQuerySchema,\n createStoredScorerBodySchema,\n updateStoredScorerBodySchema,\n listStoredScorersResponseSchema,\n getStoredScorerResponseSchema,\n createStoredScorerResponseSchema,\n updateStoredScorerResponseSchema,\n deleteStoredScorerResponseSchema,\n} from '../schemas/stored-scorers';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope, scopeStoredResourceMetadata, toSlug } from '../utils';\n\nimport { handleError } from './error';\nimport { handleAutoVersioning } from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\nconst SCORER_SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'type',\n 'model',\n 'instructions',\n 'scoreRange',\n 'presetConfig',\n 'defaultSampling',\n] as const;\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/scorers - List all stored scorer definitions\n */\nexport const LIST_STORED_SCORERS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers',\n responseType: 'json',\n queryParamSchema: listStoredScorersQuerySchema,\n responseSchema: listStoredScorersResponseSchema,\n summary: 'List stored scorer definitions',\n description: 'Returns a paginated list of all scorer definitions stored in the database',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, page, perPage, orderBy, status, authorId, metadata, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scope = await getStoredResourceScope(mastra, requestContext);\n const result = await scorerStore.listResolved({\n page,\n perPage,\n orderBy,\n status,\n authorId,\n metadata: scopeStoredResourceMetadata(metadata, scope),\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing stored scorer definitions');\n }\n },\n});\n\n/**\n * GET /stored/scorers/:storedScorerId - Get a stored scorer definition by ID\n */\nexport const GET_STORED_SCORER_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n queryParamSchema: statusQuerySchema,\n responseSchema: getStoredScorerResponseSchema,\n summary: 'Get stored scorer definition by ID',\n description:\n 'Returns a specific scorer definition from storage by its unique identifier. Use ?status=draft to resolve with the latest (draft) version, or ?status=published (default) for the active published version.',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, storedScorerId, status, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getByIdResolved(storedScorerId, { status });\n\n if (!scorer) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n return scorer;\n } catch (error) {\n return handleError(error, 'Error getting stored scorer definition');\n }\n },\n});\n\n/**\n * POST /stored/scorers - Create a new stored scorer definition\n */\nexport const CREATE_STORED_SCORER_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers',\n responseType: 'json',\n bodySchema: createStoredScorerBodySchema,\n responseSchema: createStoredScorerResponseSchema,\n summary: 'Create stored scorer definition',\n description: 'Creates a new scorer definition in storage with the provided configuration',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({\n mastra,\n id: providedId,\n authorId,\n metadata,\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n requestContext,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Derive ID from name if not explicitly provided\n const id = providedId || toSlug(name);\n\n if (!id) {\n throw new HTTPException(400, {\n message: 'Could not derive scorer definition ID from name. Please provide an explicit id.',\n });\n }\n\n // Check if scorer definition with this ID already exists\n const existing = await scorerStore.getById(id);\n if (existing) {\n throw new HTTPException(409, { message: `Scorer definition with id ${id} already exists` });\n }\n\n await scorerStore.create({\n scorerDefinition: {\n id,\n authorId,\n metadata: scopeStoredResourceMetadata(metadata, await getStoredResourceScope(mastra, requestContext)),\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n },\n });\n\n // Return the resolved scorer definition (thin record + version config)\n // Use draft status since newly created entities start as drafts\n const resolved = await scorerStore.getByIdResolved(id, { status: 'draft' });\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve created scorer definition' });\n }\n\n return resolved;\n } catch (error) {\n return handleError(error, 'Error creating stored scorer definition');\n }\n },\n});\n\n/**\n * PATCH /stored/scorers/:storedScorerId - Update a stored scorer definition\n */\nexport const UPDATE_STORED_SCORER_ROUTE = createRoute({\n method: 'PATCH',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n bodySchema: updateStoredScorerBodySchema,\n responseSchema: updateStoredScorerResponseSchema,\n summary: 'Update stored scorer definition',\n description: 'Updates an existing scorer definition in storage with the provided fields',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({\n mastra,\n storedScorerId,\n // Metadata-level fields\n authorId,\n metadata,\n // Config fields (snapshot-level)\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n requestContext,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Check if scorer definition exists\n const existing = await scorerStore.getById(storedScorerId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n const scope = await getStoredResourceScope(mastra, requestContext);\n assertStoredResourceScope(existing, scope);\n const scopedMetadata =\n metadata !== undefined\n ? scopeStoredResourceMetadata({ ...(existing.metadata ?? {}), ...metadata }, scope)\n : undefined;\n\n // Update the scorer definition with both metadata-level and config-level fields\n const updatedScorer = await scorerStore.update({\n id: storedScorerId,\n authorId,\n ...(scopedMetadata !== undefined ? { metadata: scopedMetadata } : {}),\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n });\n\n // Build the snapshot config for auto-versioning comparison\n const configFields = {\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n };\n\n // Filter out undefined values to get only the config fields that were provided\n const providedConfigFields = Object.fromEntries(Object.entries(configFields).filter(([_, v]) => v !== undefined));\n\n // Handle auto-versioning with retry logic for race conditions\n // This creates a new version if there are meaningful config changes.\n // It does NOT update activeVersionId — the version stays as a draft until explicitly published.\n await handleAutoVersioning(\n scorerStore as unknown as VersionedStoreInterface,\n storedScorerId,\n 'scorerDefinitionId',\n SCORER_SNAPSHOT_CONFIG_FIELDS,\n existing,\n updatedScorer,\n providedConfigFields,\n );\n\n // Clear the cached scorer instance so the next request gets the updated config\n const editor = mastra.getEditor();\n if (editor) {\n editor.scorer.clearCache(storedScorerId);\n }\n\n // Return the resolved scorer definition with the latest (draft) version so the UI sees its edits\n const resolved = await scorerStore.getByIdResolved(storedScorerId, { status: 'draft' });\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve updated scorer definition' });\n }\n\n return resolved;\n } catch (error) {\n return handleError(error, 'Error updating stored scorer definition');\n }\n },\n});\n\n/**\n * DELETE /stored/scorers/:storedScorerId - Delete a stored scorer definition\n */\nexport const DELETE_STORED_SCORER_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n responseSchema: deleteStoredScorerResponseSchema,\n summary: 'Delete stored scorer definition',\n description: 'Deletes a scorer definition from storage by its unique identifier',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, storedScorerId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Check if scorer definition exists\n const existing = await scorerStore.getById(storedScorerId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));\n\n await scorerStore.delete(storedScorerId);\n\n // Clear the cached scorer instance\n mastra.getEditor()?.scorer.clearCache(storedScorerId);\n\n return { success: true, message: `Scorer definition ${storedScorerId} deleted successfully` };\n } catch (error) {\n return handleError(error, 'Error deleting stored scorer definition');\n }\n },\n});\n"]}
import { validateMetadataAvatarUrl } from './chunk-HMJL3C3H.js';
import { stripFavoriteFields, prepareFavoritesEnrichment, enrichOrStripFavorites } from './chunk-VFIZ45BL.js';
import { isBuilderFeatureEnabled } from './chunk-IKIPMMHL.js';
import { handleAutoVersioning } from './chunk-33QPJPK4.js';
import { prepareAuthorEnrichment, attachAuthor } from './chunk-4W5AVWZH.js';
import { resolveAuthorFilter, getCallerAuthorId, matchesAuthorFilter, assertReadAccess, assertWriteAccess } from './chunk-ETR4XOVD.js';
import { listStoredAgentsResponseSchema, listStoredAgentsQuerySchema, exportStoredAgentResponseSchema, exportStoredAgentBodySchema, storedAgentIdPathParams, openStoredAgentChangeRequestResponseSchema, openStoredAgentChangeRequestBodySchema, getStoredAgentResponseSchema, createStoredAgentResponseSchema, createStoredAgentBodySchema, updateStoredAgentResponseSchema, updateStoredAgentBodySchema, deleteStoredAgentResponseSchema, getStoredAgentDependentsResponseSchema, previewInstructionsResponseSchema, previewInstructionsBodySchema } from './chunk-5HBR27TT.js';
import { statusQuerySchema } from './chunk-6VTOGOS2.js';
import { getStoredResourceScope, scopeStoredResourceMetadata, assertStoredResourceScope, toSlug } from './chunk-4GWTCVFL.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
// src/server/handlers/stored-agents.ts
async function resolveBrowserField(browser, mastra) {
if (browser === true) {
const editor = mastra.getEditor?.();
const builder = await editor?.resolveBuilder?.();
const defaultBrowser = builder?.getConfiguration?.()?.agent?.browser;
if (!defaultBrowser) {
console.warn(
"[mastra:server] Browser enabled (browser: true) but no default browser config found in builder configuration. The agent will be created/updated without browser access. Set `editor.builder.configuration.agent.browser` to fix this."
);
}
return defaultBrowser ?? void 0;
}
if (browser === false) {
return null;
}
return browser;
}
var AGENT_SNAPSHOT_CONFIG_FIELDS = [
"name",
"description",
"instructions",
"model",
"tools",
"defaultOptions",
"workflows",
"agents",
"integrationTools",
"toolProviders",
"inputProcessors",
"outputProcessors",
"memory",
"scorers",
"requestContextSchema",
"mcpClients",
"skills",
"workspace",
"browser"
];
var CODE_AGENT_OVERRIDE_FIELDS = [
"instructions",
"tools",
"integrationTools",
"mcpClients",
"requestContextSchema"
];
function getCodeAgentOwnership(editorConfig) {
if (editorConfig === false) {
return { ownsInstructions: false, ownsTools: false, ownsToolDescriptionsOnly: false };
}
if (editorConfig === void 0 || editorConfig === null) {
return { ownsInstructions: true, ownsTools: true, ownsToolDescriptionsOnly: false };
}
if (typeof editorConfig !== "object") {
return { ownsInstructions: false, ownsTools: false, ownsToolDescriptionsOnly: false };
}
const cfg = editorConfig;
const ownsInstructions = cfg.instructions === true;
const toolsCfg = cfg.tools;
const ownsTools = toolsCfg === true;
const ownsToolDescriptionsOnly = typeof toolsCfg === "object" && toolsCfg !== null && toolsCfg.description === true;
return { ownsInstructions, ownsTools, ownsToolDescriptionsOnly };
}
function hasNonEmptyInstructions(value) {
if (typeof value === "string") {
return value.trim().length > 0;
}
if (!Array.isArray(value)) {
return false;
}
return value.some((block) => {
if (!block || typeof block !== "object") {
return false;
}
const typedBlock = block;
if (typedBlock.type === "prompt_block_ref") {
return typeof typedBlock.id === "string" && typedBlock.id.length > 0;
}
return typeof typedBlock.content === "string" && typedBlock.content.trim().length > 0;
});
}
function assertOwnedInstructionsNotEmpty(instructions) {
if (!hasNonEmptyInstructions(instructions)) {
throw new HTTPException(400, { message: "Instructions are required" });
}
}
function sortForStableJson(value) {
if (Array.isArray(value)) {
return value.map(sortForStableJson);
}
if (value && typeof value === "object" && !(value instanceof Date)) {
return Object.fromEntries(
Object.entries(value).filter(([, entry]) => entry !== void 0).sort(([left], [right]) => left.localeCompare(right)).map(([key, entry]) => [key, sortForStableJson(entry)])
);
}
return value;
}
function buildExportConfig(input, agent) {
const editorConfig = agent?.__getEditorConfig?.();
const isCodeAgent = agent?.source === "code";
const allowedFields = isCodeAgent ? CODE_AGENT_OVERRIDE_FIELDS : AGENT_SNAPSHOT_CONFIG_FIELDS;
const ownership = isCodeAgent ? getCodeAgentOwnership(editorConfig) : null;
const config = {};
for (const field of allowedFields) {
if (input[field] === void 0) continue;
if (ownership) {
if (field === "instructions" && !ownership.ownsInstructions) continue;
if ((field === "tools" || field === "integrationTools" || field === "mcpClients") && !ownership.ownsTools && !ownership.ownsToolDescriptionsOnly) {
continue;
}
}
config[field] = input[field];
}
return sortForStableJson(config);
}
function agentExportFilename(agentId) {
return `agents/${encodeURIComponent(agentId)}.json`;
}
function sourceChangeRequestHeadRef(agentId) {
const safeAgentId = agentId.replace(/[^a-zA-Z0-9._-]+/g, "-").replace(/^-+|-+$/g, "") || "agent";
return `mastra/${safeAgentId}`;
}
function sourceChangeRequestMessage(agentId, userName, changeMessage) {
const normalizedUserName = userName?.replace(/\s+/g, " ").trim();
const normalizedMessage = changeMessage?.replace(/\s+/g, " ").trim();
const message = normalizedMessage || `Update ${agentId} agent override`;
return normalizedUserName ? `${message} by ${normalizedUserName}` : message;
}
var LIST_STORED_AGENTS_ROUTE = createRoute({
method: "GET",
path: "/stored/agents",
responseType: "json",
queryParamSchema: listStoredAgentsQuerySchema,
responseSchema: listStoredAgentsResponseSchema,
summary: "List stored agents",
description: "Returns a paginated list of all agents stored in the database",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
page,
perPage,
orderBy,
status,
authorId,
visibility,
metadata,
favoritedOnly,
pinFavoritedFor
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const filter = resolveAuthorFilter({
requestContext,
resource: "stored-agents",
queryAuthorId: authorId,
queryVisibility: visibility === "public" ? "public" : void 0
});
const scope = await getStoredResourceScope(mastra, requestContext);
const scopedMetadata = scopeStoredResourceMetadata(metadata, scope);
const callerId = getCallerAuthorId(requestContext);
const favoritesEnabled = await isBuilderFeatureEnabled(mastra, "favorites");
const honoredStarredOnly = favoritesEnabled && favoritedOnly === true;
const favoriteSubjectId = pinFavoritedFor ?? callerId;
if (honoredStarredOnly) {
const effectivePerPage = perPage ?? 100;
if (!favoriteSubjectId) {
return { agents: [], total: 0, page, perPage: effectivePerPage, hasMore: false };
}
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) {
throw new HTTPException(500, { message: "Favorites storage domain is not available" });
}
const starredIds = await favoritesStore.listFavoritedIds({ userId: favoriteSubjectId, entityType: "agent" });
if (starredIds.length === 0) {
return { agents: [], total: 0, page, perPage: effectivePerPage, hasMore: false };
}
const allMatching = await agentsStore.listResolved({
perPage: false,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata,
entityIds: starredIds
});
const visible = allMatching.agents.filter((record) => matchesAuthorFilter(record, filter));
const total = visible.length;
const startIdx = effectivePerPage === 0 ? 0 : page * effectivePerPage;
const endIdx = effectivePerPage === 0 ? 0 : startIdx + effectivePerPage;
const sliced = effectivePerPage === 0 ? [] : visible.slice(startIdx, endIdx);
const annotated2 = sliced.map((record) => ({ ...record, isFavorited: true }));
const authors2 = await prepareAuthorEnrichment(
mastra,
requestContext,
annotated2.map((a) => a.authorId)
);
const withAuthors2 = authors2 ? annotated2.map((record) => attachAuthor(record, authors2)) : annotated2;
const hasMore = effectivePerPage > 0 && endIdx < total;
return { agents: withAuthors2, total, page, perPage: effectivePerPage, hasMore };
}
const result = await agentsStore.listResolved({
page,
perPage,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata
});
const visibleAgents = result.agents.filter((record) => matchesAuthorFilter(record, filter));
const authors = await prepareAuthorEnrichment(
mastra,
requestContext,
visibleAgents.map((a) => a.authorId)
);
if (!favoritesEnabled) {
const stripped = visibleAgents.map(stripFavoriteFields);
const withAuthors2 = authors ? stripped.map((record) => attachAuthor(record, authors)) : stripped;
return { ...result, agents: withAuthors2 };
}
const enrichment = await prepareFavoritesEnrichment(
mastra,
requestContext,
"agent",
visibleAgents.map((a) => a.id)
);
const annotated = enrichment ? visibleAgents.map((record) => ({ ...record, isFavorited: enrichment.starredIds.has(record.id) })) : visibleAgents.map(stripFavoriteFields);
const withAuthors = authors ? annotated.map((record) => attachAuthor(record, authors)) : annotated;
return { ...result, agents: withAuthors };
} catch (error) {
return handleError(error, "Error listing stored agents");
}
}
});
async function buildStoredAgentExport({
mastra,
requestContext,
storedAgentId,
body
}) {
const storage = mastra.getStorage();
const agentsStore = storage ? await storage.getStore("agents") : void 0;
const storedAgent = await agentsStore?.getByIdResolved(storedAgentId, { status: "draft" });
if (storedAgent) {
assertStoredResourceScope(storedAgent, await getStoredResourceScope(mastra, requestContext));
assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: storedAgent });
}
let codeAgent;
try {
codeAgent = mastra.getAgentById?.(storedAgentId);
} catch {
codeAgent = void 0;
}
if (!storedAgent && !codeAgent) {
throw new HTTPException(404, { message: `Agent with id ${storedAgentId} not found` });
}
const config = buildExportConfig(body, codeAgent);
const content = `${JSON.stringify(config, null, 2)}
`;
return {
agentId: storedAgentId,
fileName: agentExportFilename(storedAgentId),
content,
config
};
}
var EXPORT_STORED_AGENT_ROUTE = createRoute({
method: "POST",
path: "/stored/agents/:storedAgentId/export",
responseType: "json",
pathParamSchema: storedAgentIdPathParams,
bodySchema: exportStoredAgentBodySchema,
responseSchema: exportStoredAgentResponseSchema,
summary: "Export stored agent override JSON",
description: "Returns deterministic JSON for an agent configuration or code-agent override without mutating storage",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId, ...body }) => {
try {
return await buildStoredAgentExport({ mastra, requestContext, storedAgentId, body });
} catch (error) {
return handleError(error, "Error exporting stored agent");
}
}
});
var OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE = createRoute({
method: "POST",
path: "/stored/agents/:storedAgentId/change-request",
responseType: "json",
pathParamSchema: storedAgentIdPathParams,
bodySchema: openStoredAgentChangeRequestBodySchema,
responseSchema: openStoredAgentChangeRequestResponseSchema,
summary: "Open stored agent source change request",
description: "Opens a source-provider change request for deterministic agent override JSON without mutating storage",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId, ...body }) => {
try {
const provider = mastra.getEditor?.()?.getSourceControlProvider?.();
if (!provider?.openChangeRequest) {
throw new HTTPException(400, { message: "Source control provider cannot open change requests" });
}
const openChangeRequest = provider.openChangeRequest.bind(provider);
const { changeMessage, userName, inspectOnly, ...exportBody } = body;
const headRef = sourceChangeRequestHeadRef(storedAgentId);
const title = `Update ${storedAgentId} agent override`;
const result = inspectOnly ? await openChangeRequest({
title,
headRef,
files: []
}) : await (async () => {
const response = await buildStoredAgentExport({ mastra, requestContext, storedAgentId, body: exportBody });
const message = sourceChangeRequestMessage(storedAgentId, userName, changeMessage);
return openChangeRequest({
title,
body: `Updates ${response.fileName} from Mastra Studio.`,
headRef,
files: [
{
path: response.fileName,
content: response.content,
message
}
]
});
})();
const storage = mastra.getStorage();
const agentsStore = storage ? await storage.getStore("agents") : void 0;
await agentsStore?.useProviderRef?.(storedAgentId, result.ref ?? headRef);
mastra.getEditor?.()?.agent?.clearCache?.(storedAgentId);
return result;
} catch (error) {
return handleError(error, "Error opening stored agent change request");
}
}
});
var GET_STORED_AGENT_ROUTE = createRoute({
method: "GET",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: storedAgentIdPathParams,
queryParamSchema: statusQuerySchema,
responseSchema: getStoredAgentResponseSchema,
summary: "Get stored agent by ID",
description: "Returns a specific agent from storage by its unique identifier. Use ?status=draft to resolve with the latest (draft) version, or ?status=published (default) for the active published version.",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId, status }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getByIdResolved(storedAgentId, { status });
if (!agent) {
throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
const authors = await prepareAuthorEnrichment(mastra, requestContext, [agent.authorId]);
const withFavorite = await enrichOrStripFavorites(mastra, requestContext, "agent", agent);
return attachAuthor(withFavorite, authors);
} catch (error) {
return handleError(error, "Error getting stored agent");
}
}
});
var CREATE_STORED_AGENT_ROUTE = createRoute({
method: "POST",
path: "/stored/agents",
responseType: "json",
bodySchema: createStoredAgentBodySchema,
responseSchema: createStoredAgentResponseSchema,
summary: "Create stored agent",
description: "Creates a new agent in storage with the provided configuration",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
id: providedId,
metadata,
visibility: bodyVisibility,
name,
description,
instructions,
model,
tools,
defaultOptions,
workflows,
agents,
integrationTools,
toolProviders,
mcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser,
requestContextSchema
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const id = providedId || toSlug(name);
if (!id) {
throw new HTTPException(400, {
message: "Could not derive agent ID from name. Please provide an explicit id."
});
}
const existing = await agentsStore.getById(id);
if (existing) {
throw new HTTPException(409, { message: `Agent with id ${id} already exists` });
}
const authorId = getCallerAuthorId(requestContext) ?? void 0;
const visibility = authorId ? bodyVisibility ?? "private" : "public";
validateMetadataAvatarUrl(metadata);
const resolvedBrowser = await resolveBrowserField(browser, mastra);
let createInstructions = instructions;
let createTools = tools;
let createIntegrationTools = integrationTools;
let createMcpClients = mcpClients;
let codeAgentForCreate;
try {
codeAgentForCreate = mastra.getAgentById?.(id);
} catch {
codeAgentForCreate = void 0;
}
if (codeAgentForCreate?.source === "code") {
const ownership = getCodeAgentOwnership(codeAgentForCreate.__getEditorConfig?.());
if (ownership.ownsInstructions) {
assertOwnedInstructionsNotEmpty(createInstructions);
} else {
createInstructions = void 0;
}
if (!ownership.ownsTools && !ownership.ownsToolDescriptionsOnly) {
createTools = void 0;
createIntegrationTools = void 0;
createMcpClients = void 0;
}
}
const input = {
id,
authorId,
visibility,
metadata: scopeStoredResourceMetadata(metadata, await getStoredResourceScope(mastra, requestContext)),
name,
description,
instructions: createInstructions,
model,
tools: createTools,
defaultOptions,
workflows,
agents,
integrationTools: createIntegrationTools,
toolProviders,
mcpClients: createMcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser: resolvedBrowser,
requestContextSchema
};
const editor = mastra.getEditor?.();
if (editor) {
await editor.agent.create(input);
} else {
await agentsStore.create({ agent: input });
}
const { versions } = await agentsStore.listVersions({ agentId: id, perPage: 1 });
const initialVersion = versions[0];
if (initialVersion) {
await agentsStore.update({
id,
activeVersionId: initialVersion.id,
status: "published"
});
editor?.agent.clearCache(id);
}
const resolved = await agentsStore.getByIdResolved(id, { status: "published" });
if (!resolved) {
throw new HTTPException(500, { message: "Failed to resolve created agent" });
}
return enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
} catch (error) {
return handleError(error, "Error creating stored agent");
}
}
});
var UPDATE_STORED_AGENT_ROUTE = createRoute({
method: "PATCH",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: storedAgentIdPathParams,
bodySchema: updateStoredAgentBodySchema,
responseSchema: updateStoredAgentResponseSchema,
summary: "Update stored agent",
description: "Updates an existing agent in storage with the provided fields",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({
mastra,
requestContext,
storedAgentId,
// Metadata-level fields
authorId,
metadata,
visibility,
// Config fields (snapshot-level)
name,
description,
instructions,
model,
tools,
defaultOptions,
workflows,
agents,
integrationTools,
toolProviders,
mcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser,
requestContextSchema,
// Version metadata
changeMessage
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const existing = await agentsStore.getById(storedAgentId);
if (!existing) {
throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
const scope = await getStoredResourceScope(mastra, requestContext);
assertStoredResourceScope(existing, scope);
assertWriteAccess({
requestContext,
resource: "stored-agents",
resourceId: storedAgentId,
action: "edit",
record: existing
});
validateMetadataAvatarUrl(metadata);
const callerAuthorId = getCallerAuthorId(requestContext) ?? void 0;
const resolvedVisibility = callerAuthorId ? visibility : visibility != null ? "public" : void 0;
const resolvedBrowser = await resolveBrowserField(browser, mastra);
let codeAgentForUpdate;
try {
codeAgentForUpdate = mastra.getAgentById?.(storedAgentId);
} catch {
codeAgentForUpdate = void 0;
}
if (codeAgentForUpdate?.source === "code") {
const ownership = getCodeAgentOwnership(codeAgentForUpdate.__getEditorConfig?.());
if (ownership.ownsInstructions) {
if (instructions !== void 0) {
assertOwnedInstructionsNotEmpty(instructions);
}
} else {
instructions = void 0;
}
if (!ownership.ownsTools && !ownership.ownsToolDescriptionsOnly) {
tools = void 0;
integrationTools = void 0;
mcpClients = void 0;
}
}
const mergedMetadata = { ...existing.metadata ?? {}, ...metadata ?? {} };
const scopedMetadata = scopeStoredResourceMetadata(mergedMetadata, scope);
const updatedAgent = await agentsStore.update({
id: storedAgentId,
authorId,
metadata: scopedMetadata,
visibility: resolvedVisibility,
name,
description,
instructions,
model,
tools,
defaultOptions,
workflows,
agents,
integrationTools,
toolProviders,
mcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser: resolvedBrowser,
requestContextSchema
});
const configFields = {
name,
description,
instructions,
model,
tools,
defaultOptions,
workflows,
agents,
integrationTools,
toolProviders,
mcpClients,
inputProcessors,
outputProcessors,
memory,
scorers,
skills,
workspace,
browser: resolvedBrowser,
requestContextSchema
};
const providedConfigFields = Object.fromEntries(Object.entries(configFields).filter(([_, v]) => v !== void 0));
const autoVersionResult = await handleAutoVersioning(
agentsStore,
storedAgentId,
"agentId",
AGENT_SNAPSHOT_CONFIG_FIELDS,
existing,
updatedAgent,
providedConfigFields,
changeMessage ? { changeMessage } : void 0
);
if (!autoVersionResult) {
throw new Error("handleAutoVersioning returned undefined");
}
const isCodeSource = mastra.getEditor?.()?.getSource?.() === "code";
if (isCodeSource && autoVersionResult.versionCreated && !changeMessage) {
const { versions } = await agentsStore.listVersions({ agentId: storedAgentId, perPage: 2 });
const previousVersion = versions[1];
if (previousVersion) {
await agentsStore.deleteVersion(previousVersion.id);
}
}
if (autoVersionResult.versionCreated) {
const { versions } = await agentsStore.listVersions({ agentId: storedAgentId, perPage: 1 });
const latestVersion = versions[0];
if (latestVersion) {
await agentsStore.update({
id: storedAgentId,
activeVersionId: latestVersion.id
});
}
}
const editor = mastra.getEditor();
if (editor) {
editor.agent.clearCache(storedAgentId);
}
const resolved = await agentsStore.getByIdResolved(storedAgentId, { status: "draft" });
if (!resolved) {
throw new HTTPException(500, { message: "Failed to resolve updated agent" });
}
return enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
} catch (error) {
return handleError(error, "Error updating stored agent");
}
}
});
var DELETE_STORED_AGENT_ROUTE = createRoute({
method: "DELETE",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: storedAgentIdPathParams,
responseSchema: deleteStoredAgentResponseSchema,
summary: "Delete stored agent",
description: "Deletes an agent from storage by its unique identifier",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const existing = await agentsStore.getById(storedAgentId);
if (!existing) {
throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));
assertWriteAccess({
requestContext,
resource: "stored-agents",
resourceId: storedAgentId,
action: "delete",
record: existing
});
await agentsStore.delete(storedAgentId);
try {
const favoritesStore = await storage.getStore("favorites");
await favoritesStore?.deleteFavoritesForEntity({ entityType: "agent", entityId: storedAgentId });
} catch (cascadeError) {
mastra.getLogger?.()?.warn?.("Failed to cascade-delete favorites for agent", { storedAgentId, error: cascadeError });
}
mastra.getEditor()?.agent.clearCache(storedAgentId);
return { success: true, message: `Agent ${storedAgentId} deleted successfully` };
} catch (error) {
return handleError(error, "Error deleting stored agent");
}
}
});
var GET_STORED_AGENT_DEPENDENTS_ROUTE = createRoute({
method: "GET",
path: "/stored/agents/:storedAgentId/dependents",
responseType: "json",
pathParamSchema: storedAgentIdPathParams,
responseSchema: getStoredAgentDependentsResponseSchema,
summary: "List dependents of a stored agent",
description: "Returns agents that reference the target as a sub-agent. Used to warn before deleting or unsharing. Caller-readable references appear in `dependents` (id + name); cross-workspace references the caller cannot read are aggregated in `hiddenCount` and only surfaced when the target is public.",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, requestContext, storedAgentId }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const target = await agentsStore.getById(storedAgentId);
if (!target) {
throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
}
assertStoredResourceScope(target, await getStoredResourceScope(mastra, requestContext));
assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: target });
const filter = resolveAuthorFilter({ requestContext, resource: "stored-agents" });
const all = await agentsStore.listResolved({
perPage: false,
status: "published"
});
const targetIsPublic = target.visibility === "public";
const dependents = [];
let hiddenCount = 0;
for (const record of all.agents) {
if (record.id === storedAgentId) continue;
if (!referencesTarget(record.agents, storedAgentId)) continue;
if (matchesAuthorFilter(record, filter)) {
dependents.push({
id: record.id,
name: record.name ?? record.id
});
} else if (targetIsPublic) {
hiddenCount += 1;
}
}
return { dependents, hiddenCount };
} catch (error) {
return handleError(error, "Error listing stored agent dependents");
}
}
});
function referencesTarget(subAgents, targetId) {
if (!subAgents) return false;
if (Array.isArray(subAgents)) {
return subAgents.some((variant) => {
const value = variant?.value;
return Boolean(value && typeof value === "object" && Object.prototype.hasOwnProperty.call(value, targetId));
});
}
if (typeof subAgents === "object") {
return Object.prototype.hasOwnProperty.call(subAgents, targetId);
}
return false;
}
var PREVIEW_INSTRUCTIONS_ROUTE = createRoute({
method: "POST",
path: "/stored/agents/preview-instructions",
responseType: "json",
bodySchema: previewInstructionsBodySchema,
responseSchema: previewInstructionsResponseSchema,
summary: "Preview resolved instructions",
description: "Resolves an array of instruction blocks against a request context, evaluating rules, fetching prompt block references, and rendering template variables. Returns the final concatenated instruction string.",
tags: ["Stored Agents"],
requiresAuth: true,
handler: async ({ mastra, blocks, context }) => {
try {
const editor = mastra.getEditor();
if (!editor) {
throw new HTTPException(500, { message: "Editor is not configured" });
}
const result = await editor.prompt.preview(blocks, context ?? {});
return { result };
} catch (error) {
return handleError(error, "Error previewing instructions");
}
}
});
export { CREATE_STORED_AGENT_ROUTE, DELETE_STORED_AGENT_ROUTE, EXPORT_STORED_AGENT_ROUTE, GET_STORED_AGENT_DEPENDENTS_ROUTE, GET_STORED_AGENT_ROUTE, LIST_STORED_AGENTS_ROUTE, OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE, PREVIEW_INSTRUCTIONS_ROUTE, UPDATE_STORED_AGENT_ROUTE };
//# sourceMappingURL=chunk-RSDPTA3U.js.map
//# sourceMappingURL=chunk-RSDPTA3U.js.map

Sorry, the diff of this file is too big to display

'use strict';
var chunkHHTDYBRJ_cjs = require('./chunk-HHTDYBRJ.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var fs = require('fs');
var SOURCE_PROVIDER_CAPABILITIES_TIMEOUT_MS = 3e3;
async function getSourceProviderCapabilities(getCapabilities) {
let timeout;
try {
return await Promise.race([
getCapabilities(),
new Promise((_, reject) => {
timeout = setTimeout(
() => reject(new Error("Source provider capabilities timed out")),
SOURCE_PROVIDER_CAPABILITIES_TIMEOUT_MS
);
})
]);
} finally {
if (timeout) clearTimeout(timeout);
}
}
async function getEditorSourceCapabilities(editor) {
const editorSource = editor.getSource?.();
if (!editorSource) return void 0;
if (editorSource === "db") {
return {
source: editorSource,
storage: "database",
canSave: true,
canOpenChangeRequest: false
};
}
const configuredProvider = editor.getSourceControlProvider?.();
if (configuredProvider) {
const provider = {
id: configuredProvider.id,
displayName: configuredProvider.displayName
};
try {
const capabilities = await getSourceProviderCapabilities(() => configuredProvider.getCapabilities());
return {
source: editorSource,
storage: "source-provider",
provider,
canSave: capabilities.canWrite,
canOpenChangeRequest: capabilities.canOpenChangeRequest,
unavailableReason: capabilities.canWrite ? void 0 : capabilities.reason
};
} catch {
return {
source: editorSource,
storage: "source-provider",
provider,
canSave: false,
canOpenChangeRequest: false,
unavailableReason: "Unable to load source provider capabilities."
};
}
}
const sourceProvider = process.env.MASTRA_SOURCE_PROVIDER;
if (sourceProvider) {
return {
source: editorSource,
storage: "source-provider",
provider: {
id: sourceProvider,
displayName: process.env.MASTRA_SOURCE_PROVIDER_NAME || sourceProvider
},
canSave: process.env.MASTRA_SOURCE_STORAGE_CAN_WRITE !== "false",
canOpenChangeRequest: process.env.MASTRA_SOURCE_STORAGE_CAN_OPEN_CHANGE_REQUEST === "true"
};
}
const isHosted = process.env.MASTRA_DEPLOYMENT_ID || process.env.MASTRA_CLOUD_API_ENDPOINT || process.env.MASTRA_PLATFORM_PROJECT_ID;
if (isHosted) {
return {
source: editorSource,
storage: "unavailable",
canSave: false,
canOpenChangeRequest: false,
unavailableReason: "Code-source editing requires a source provider in hosted Studio."
};
}
return {
source: editorSource,
storage: "filesystem",
canSave: true,
canOpenChangeRequest: false
};
}
var GET_API_SCHEMA_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/system/api-schema",
responseType: "json",
responseSchema: chunkHHTDYBRJ_cjs.apiSchemaManifestResponseSchema,
summary: "Get API schema manifest",
description: "Returns the route-contract-derived API schema manifest for the machine-readable CLI",
tags: ["System"],
requiresAuth: true,
handler: async () => {
const { buildApiSchemaManifest } = await import('./api-schema-manifest-GJZKV32J.cjs');
return buildApiSchemaManifest();
}
});
var GET_SYSTEM_PACKAGES_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/system/packages",
responseType: "json",
responseSchema: chunkHHTDYBRJ_cjs.systemPackagesResponseSchema,
summary: "Get installed Mastra packages",
description: "Returns a list of all installed Mastra packages and their versions from the project",
tags: ["System"],
requiresAuth: true,
handler: async ({ mastra }) => {
try {
const packagesFilePath = process.env.MASTRA_PACKAGES_FILE;
let packages = [];
if (packagesFilePath) {
try {
const fileContent = fs.readFileSync(packagesFilePath, "utf-8");
packages = JSON.parse(fileContent);
} catch {
packages = [];
}
}
const storage = mastra.getStorage();
const storageType = storage?.name;
const observabilityStorage = storage?.stores?.observability;
const observabilityStorageType = observabilityStorage?.constructor.name;
const observabilityStorageFeatures = observabilityStorage?.getFeatures?.();
const observabilityStorageCapabilities = observabilityStorageFeatures?.some(
(feature) => feature === "metrics" || feature === "logs"
) ? {
metrics: observabilityStorageFeatures.includes("metrics"),
logs: observabilityStorageFeatures.includes("logs")
} : void 0;
const observabilityRuntimeStrategy = observabilityStorage?.runtimeTracingStrategy;
const observabilityEnabled = !!mastra.observability.getDefaultInstance();
const editor = mastra.getEditor();
const editorSource = editor?.getSource?.();
const editorSourceCapabilities = editor ? await getEditorSourceCapabilities(editor) : void 0;
return {
packages,
isDev: process.env.MASTRA_DEV === "true",
cmsEnabled: !!editor,
editorSource,
editorSourceCapabilities,
observabilityEnabled,
storageType,
observabilityStorageType,
...observabilityStorageCapabilities ? { observabilityStorageCapabilities } : {},
observabilityRuntimeStrategy
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting system packages");
}
}
});
exports.GET_API_SCHEMA_ROUTE = GET_API_SCHEMA_ROUTE;
exports.GET_SYSTEM_PACKAGES_ROUTE = GET_SYSTEM_PACKAGES_ROUTE;
//# sourceMappingURL=chunk-S7XHYPBN.cjs.map
//# sourceMappingURL=chunk-S7XHYPBN.cjs.map
{"version":3,"sources":["../src/server/handlers/system.ts"],"names":["createRoute","apiSchemaManifestResponseSchema","systemPackagesResponseSchema","readFileSync","handleError"],"mappings":"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","file":"chunk-S7XHYPBN.cjs","sourcesContent":["import { readFileSync } from 'node:fs';\n\nimport type { MastraPackage } from '../schemas/system';\nimport { apiSchemaManifestResponseSchema, systemPackagesResponseSchema } from '../schemas/system';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\n\nconst SOURCE_PROVIDER_CAPABILITIES_TIMEOUT_MS = 3000;\n\nasync function getSourceProviderCapabilities(\n getCapabilities: () => Promise<{\n canWrite: boolean;\n canOpenChangeRequest: boolean;\n reason?: string;\n }>,\n) {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n try {\n return await Promise.race([\n getCapabilities(),\n new Promise<never>((_, reject) => {\n timeout = setTimeout(\n () => reject(new Error('Source provider capabilities timed out')),\n SOURCE_PROVIDER_CAPABILITIES_TIMEOUT_MS,\n );\n }),\n ]);\n } finally {\n if (timeout) clearTimeout(timeout);\n }\n}\n\nasync function getEditorSourceCapabilities(editor: {\n getSource?: () => 'code' | 'db' | undefined;\n getSourceControlProvider?: () =>\n | {\n id: string;\n displayName: string;\n getCapabilities: () => Promise<{\n canWrite: boolean;\n canOpenChangeRequest: boolean;\n reason?: string;\n }>;\n }\n | undefined;\n}) {\n const editorSource = editor.getSource?.();\n if (!editorSource) return undefined;\n\n if (editorSource === 'db') {\n return {\n source: editorSource,\n storage: 'database' as const,\n canSave: true,\n canOpenChangeRequest: false,\n };\n }\n\n const configuredProvider = editor.getSourceControlProvider?.();\n if (configuredProvider) {\n const provider = {\n id: configuredProvider.id,\n displayName: configuredProvider.displayName,\n };\n try {\n const capabilities = await getSourceProviderCapabilities(() => configuredProvider.getCapabilities());\n return {\n source: editorSource,\n storage: 'source-provider' as const,\n provider,\n canSave: capabilities.canWrite,\n canOpenChangeRequest: capabilities.canOpenChangeRequest,\n unavailableReason: capabilities.canWrite ? undefined : capabilities.reason,\n };\n } catch {\n return {\n source: editorSource,\n storage: 'source-provider' as const,\n provider,\n canSave: false,\n canOpenChangeRequest: false,\n unavailableReason: 'Unable to load source provider capabilities.',\n };\n }\n }\n\n const sourceProvider = process.env.MASTRA_SOURCE_PROVIDER;\n\n if (sourceProvider) {\n return {\n source: editorSource,\n storage: 'source-provider' as const,\n provider: {\n id: sourceProvider,\n displayName: process.env.MASTRA_SOURCE_PROVIDER_NAME || sourceProvider,\n },\n canSave: process.env.MASTRA_SOURCE_STORAGE_CAN_WRITE !== 'false',\n canOpenChangeRequest: process.env.MASTRA_SOURCE_STORAGE_CAN_OPEN_CHANGE_REQUEST === 'true',\n };\n }\n\n const isHosted =\n process.env.MASTRA_DEPLOYMENT_ID || process.env.MASTRA_CLOUD_API_ENDPOINT || process.env.MASTRA_PLATFORM_PROJECT_ID;\n\n if (isHosted) {\n return {\n source: editorSource,\n storage: 'unavailable' as const,\n canSave: false,\n canOpenChangeRequest: false,\n unavailableReason: 'Code-source editing requires a source provider in hosted Studio.',\n };\n }\n\n return {\n source: editorSource,\n storage: 'filesystem' as const,\n canSave: true,\n canOpenChangeRequest: false,\n };\n}\n\nexport const GET_API_SCHEMA_ROUTE = createRoute({\n method: 'GET',\n path: '/system/api-schema',\n responseType: 'json',\n responseSchema: apiSchemaManifestResponseSchema,\n summary: 'Get API schema manifest',\n description: 'Returns the route-contract-derived API schema manifest for the machine-readable CLI',\n tags: ['System'],\n requiresAuth: true,\n handler: async () => {\n // Dynamic import to avoid circular dependency issues\n const { buildApiSchemaManifest } = await import('../server-adapter/api-schema-manifest');\n return buildApiSchemaManifest();\n },\n});\n\nexport const GET_SYSTEM_PACKAGES_ROUTE = createRoute({\n method: 'GET',\n path: '/system/packages',\n responseType: 'json',\n responseSchema: systemPackagesResponseSchema,\n summary: 'Get installed Mastra packages',\n description: 'Returns a list of all installed Mastra packages and their versions from the project',\n tags: ['System'],\n requiresAuth: true,\n handler: async ({ mastra }) => {\n try {\n const packagesFilePath = process.env.MASTRA_PACKAGES_FILE;\n\n let packages: MastraPackage[] = [];\n\n if (packagesFilePath) {\n try {\n const fileContent = readFileSync(packagesFilePath, 'utf-8');\n packages = JSON.parse(fileContent);\n } catch {\n packages = [];\n }\n }\n\n const storage = mastra.getStorage();\n const storageType = storage?.name;\n const observabilityStorage = storage?.stores?.observability;\n const observabilityStorageType = observabilityStorage?.constructor.name;\n const observabilityStorageFeatures = observabilityStorage?.getFeatures?.();\n const observabilityStorageCapabilities = observabilityStorageFeatures?.some(\n feature => feature === 'metrics' || feature === 'logs',\n )\n ? {\n metrics: observabilityStorageFeatures.includes('metrics'),\n logs: observabilityStorageFeatures.includes('logs'),\n }\n : undefined;\n const observabilityRuntimeStrategy = observabilityStorage?.runtimeTracingStrategy;\n const observabilityEnabled = !!mastra.observability.getDefaultInstance();\n\n const editor = mastra.getEditor();\n const editorSource = editor?.getSource?.();\n const editorSourceCapabilities = editor ? await getEditorSourceCapabilities(editor) : undefined;\n\n return {\n packages,\n isDev: process.env.MASTRA_DEV === 'true',\n cmsEnabled: !!editor,\n editorSource,\n editorSourceCapabilities,\n observabilityEnabled,\n storageType,\n observabilityStorageType,\n ...(observabilityStorageCapabilities ? { observabilityStorageCapabilities } : {}),\n observabilityRuntimeStrategy,\n };\n } catch (error) {\n return handleError(error, 'Error getting system packages');\n }\n },\n});\n"]}
'use strict';
var chunk4JAXFPYO_cjs = require('./chunk-4JAXFPYO.cjs');
var chunkNIMP2XEL_cjs = require('./chunk-NIMP2XEL.cjs');
var chunkPFKYMKIH_cjs = require('./chunk-PFKYMKIH.cjs');
var v4 = require('zod/v4');
var mcpClientToolsConfigSchema = v4.z.object({
tools: v4.z.record(v4.z.string(), chunkNIMP2XEL_cjs.toolConfigSchema).optional()
});
var agentVersionPathParams = v4.z.object({
agentId: v4.z.string().describe("Unique identifier for the stored agent")
});
var versionIdPathParams = v4.z.object({
agentId: v4.z.string().describe("Unique identifier for the stored agent"),
versionId: v4.z.string().describe("Unique identifier for the version (UUID)")
});
var agentVersionSchema = v4.z.object({
id: v4.z.string().describe("Unique identifier for the version (UUID)"),
agentId: v4.z.string().describe("ID of the agent this version belongs to"),
versionNumber: v4.z.number().describe("Sequential version number (1, 2, 3, ...)"),
// Top-level config fields (from StorageAgentSnapshotType)
name: v4.z.string().describe("Name of the agent"),
description: v4.z.string().optional().describe("Description of the agent"),
instructions: chunkNIMP2XEL_cjs.instructionsSchema,
model: chunkNIMP2XEL_cjs.conditionalFieldSchema(chunkNIMP2XEL_cjs.modelConfigSchema).describe(
"Model configuration \u2014 static value or array of conditional variants"
),
tools: chunkNIMP2XEL_cjs.conditionalFieldSchema(chunkNIMP2XEL_cjs.toolsConfigSchema).optional().describe("Tool keys mapped to per-tool config \u2014 static or conditional"),
defaultOptions: chunkNIMP2XEL_cjs.conditionalFieldSchema(chunkPFKYMKIH_cjs.defaultOptionsSchema).optional().describe("Default options for generate/stream calls \u2014 static or conditional"),
workflows: chunkNIMP2XEL_cjs.conditionalFieldSchema(v4.z.record(v4.z.string(), chunkNIMP2XEL_cjs.toolConfigSchema)).optional().describe("Workflow keys with optional per-workflow config \u2014 static or conditional"),
agents: chunkNIMP2XEL_cjs.conditionalFieldSchema(v4.z.record(v4.z.string(), chunkNIMP2XEL_cjs.toolConfigSchema)).optional().describe("Agent keys with optional per-agent config \u2014 static or conditional"),
integrationTools: chunkNIMP2XEL_cjs.conditionalFieldSchema(v4.z.record(v4.z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of tool provider IDs to their tool configurations \u2014 static or conditional"),
mcpClients: chunkNIMP2XEL_cjs.conditionalFieldSchema(v4.z.record(v4.z.string(), mcpClientToolsConfigSchema)).optional().describe("Map of stored MCP client IDs to their tool configurations \u2014 static or conditional"),
inputProcessors: chunkNIMP2XEL_cjs.conditionalFieldSchema(chunkNIMP2XEL_cjs.storedProcessorGraphSchema).optional().describe("Input processor graph \u2014 static or conditional"),
outputProcessors: chunkNIMP2XEL_cjs.conditionalFieldSchema(chunkNIMP2XEL_cjs.storedProcessorGraphSchema).optional().describe("Output processor graph \u2014 static or conditional"),
memory: chunkNIMP2XEL_cjs.conditionalFieldSchema(chunkNIMP2XEL_cjs.serializedMemoryConfigSchema).optional().describe("Memory configuration \u2014 static or conditional"),
scorers: chunkNIMP2XEL_cjs.conditionalFieldSchema(v4.z.record(v4.z.string(), chunkNIMP2XEL_cjs.scorerConfigSchema)).optional().describe("Scorer keys with optional sampling config \u2014 static or conditional"),
requestContextSchema: v4.z.record(v4.z.string(), v4.z.unknown()).optional().describe("JSON Schema defining valid request context variables"),
// Version metadata fields
changedFields: v4.z.array(v4.z.string()).optional().describe("Array of field names that changed from the previous version"),
changeMessage: v4.z.string().optional().describe("Optional message describing the changes"),
createdAt: v4.z.coerce.date().describe("When this version was created")
});
var listVersionsResponseSchema = chunk4JAXFPYO_cjs.createListVersionsResponseSchema(agentVersionSchema);
var getVersionResponseSchema = agentVersionSchema;
var createVersionResponseSchema = agentVersionSchema.partial().merge(
v4.z.object({
// These fields are always present in a version response
id: v4.z.string().describe("Unique identifier for the version (UUID)"),
agentId: v4.z.string().describe("ID of the agent this version belongs to"),
versionNumber: v4.z.number().describe("Sequential version number (1, 2, 3, ...)"),
createdAt: v4.z.coerce.date().describe("When this version was created")
})
);
var restoreVersionResponseSchema = agentVersionSchema.describe(
"The newly created version from the restored configuration"
);
var compareVersionsResponseSchema = chunk4JAXFPYO_cjs.createCompareVersionsResponseSchema(agentVersionSchema);
exports.agentVersionPathParams = agentVersionPathParams;
exports.agentVersionSchema = agentVersionSchema;
exports.compareVersionsResponseSchema = compareVersionsResponseSchema;
exports.createVersionResponseSchema = createVersionResponseSchema;
exports.getVersionResponseSchema = getVersionResponseSchema;
exports.listVersionsResponseSchema = listVersionsResponseSchema;
exports.restoreVersionResponseSchema = restoreVersionResponseSchema;
exports.versionIdPathParams = versionIdPathParams;
//# sourceMappingURL=chunk-SDIJUD3E.cjs.map
//# sourceMappingURL=chunk-SDIJUD3E.cjs.map
{"version":3,"sources":["../src/server/schemas/agent-versions.ts"],"names":["z","toolConfigSchema","instructionsSchema","conditionalFieldSchema","modelConfigSchema","toolsConfigSchema","defaultOptionsSchema","storedProcessorGraphSchema","serializedMemoryConfigSchema","scorerConfigSchema","createListVersionsResponseSchema","createCompareVersionsResponseSchema"],"mappings":"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","file":"chunk-SDIJUD3E.cjs","sourcesContent":["import { z } from 'zod/v4';\nimport { defaultOptionsSchema } from './default-options';\nimport { serializedMemoryConfigSchema } from './memory-config';\nimport {\n scorerConfigSchema,\n instructionsSchema,\n conditionalFieldSchema,\n modelConfigSchema,\n toolConfigSchema,\n toolsConfigSchema,\n storedProcessorGraphSchema,\n} from './stored-agents';\nimport {\n listVersionsQuerySchema,\n compareVersionsQuerySchema,\n createVersionBodySchema,\n activateVersionResponseSchema,\n deleteVersionResponseSchema,\n versionDiffEntrySchema,\n createListVersionsResponseSchema,\n createCompareVersionsResponseSchema,\n} from './version-common';\n\nconst mcpClientToolsConfigSchema = z.object({\n tools: z.record(z.string(), toolConfigSchema).optional(),\n});\n\n// Re-export shared schemas for backwards compat\nexport {\n listVersionsQuerySchema,\n compareVersionsQuerySchema,\n createVersionBodySchema,\n activateVersionResponseSchema,\n deleteVersionResponseSchema,\n versionDiffEntrySchema,\n};\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\n/**\n * Path parameters for agent version routes\n */\nexport const agentVersionPathParams = z.object({\n agentId: z.string().describe('Unique identifier for the stored agent'),\n});\n\n/**\n * Path parameters for specific version routes\n */\nexport const versionIdPathParams = z.object({\n agentId: z.string().describe('Unique identifier for the stored agent'),\n versionId: z.string().describe('Unique identifier for the version (UUID)'),\n});\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\n/**\n * Agent version object schema (full response)\n * Config fields are top-level on the version (no nested snapshot object).\n * Extends StorageAgentSnapshotType fields.\n */\nexport const agentVersionSchema = z.object({\n id: z.string().describe('Unique identifier for the version (UUID)'),\n agentId: z.string().describe('ID of the agent this version belongs to'),\n versionNumber: z.number().describe('Sequential version number (1, 2, 3, ...)'),\n // Top-level config fields (from StorageAgentSnapshotType)\n name: z.string().describe('Name of the agent'),\n description: z.string().optional().describe('Description of the agent'),\n instructions: instructionsSchema,\n model: conditionalFieldSchema(modelConfigSchema).describe(\n 'Model configuration — static value or array of conditional variants',\n ),\n tools: conditionalFieldSchema(toolsConfigSchema)\n .optional()\n .describe('Tool keys mapped to per-tool config — static or conditional'),\n defaultOptions: conditionalFieldSchema(defaultOptionsSchema)\n .optional()\n .describe('Default options for generate/stream calls — static or conditional'),\n workflows: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Workflow keys with optional per-workflow config — static or conditional'),\n agents: conditionalFieldSchema(z.record(z.string(), toolConfigSchema))\n .optional()\n .describe('Agent keys with optional per-agent config — static or conditional'),\n integrationTools: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of tool provider IDs to their tool configurations — static or conditional'),\n mcpClients: conditionalFieldSchema(z.record(z.string(), mcpClientToolsConfigSchema))\n .optional()\n .describe('Map of stored MCP client IDs to their tool configurations — static or conditional'),\n inputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Input processor graph — static or conditional'),\n outputProcessors: conditionalFieldSchema(storedProcessorGraphSchema)\n .optional()\n .describe('Output processor graph — static or conditional'),\n memory: conditionalFieldSchema(serializedMemoryConfigSchema)\n .optional()\n .describe('Memory configuration — static or conditional'),\n scorers: conditionalFieldSchema(z.record(z.string(), scorerConfigSchema))\n .optional()\n .describe('Scorer keys with optional sampling config — static or conditional'),\n requestContextSchema: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('JSON Schema defining valid request context variables'),\n // Version metadata fields\n changedFields: z.array(z.string()).optional().describe('Array of field names that changed from the previous version'),\n changeMessage: z.string().optional().describe('Optional message describing the changes'),\n createdAt: z.coerce.date().describe('When this version was created'),\n});\n\n/**\n * Response for GET /stored/agents/:agentId/versions\n */\nexport const listVersionsResponseSchema = createListVersionsResponseSchema(agentVersionSchema);\n\n/**\n * Response for GET /stored/agents/:agentId/versions/:versionId\n */\nexport const getVersionResponseSchema = agentVersionSchema;\n\n/**\n * Response for POST /stored/agents/:agentId/versions\n */\nexport const createVersionResponseSchema = agentVersionSchema.partial().merge(\n z.object({\n // These fields are always present in a version response\n id: z.string().describe('Unique identifier for the version (UUID)'),\n agentId: z.string().describe('ID of the agent this version belongs to'),\n versionNumber: z.number().describe('Sequential version number (1, 2, 3, ...)'),\n createdAt: z.coerce.date().describe('When this version was created'),\n }),\n);\n\n/**\n * Response for POST /stored/agents/:agentId/versions/:versionId/restore\n */\nexport const restoreVersionResponseSchema = agentVersionSchema.describe(\n 'The newly created version from the restored configuration',\n);\n\n/**\n * Response for GET /stored/agents/:agentId/versions/compare\n */\nexport const compareVersionsResponseSchema: ReturnType<\n typeof createCompareVersionsResponseSchema<typeof agentVersionSchema>\n> = createCompareVersionsResponseSchema(agentVersionSchema);\n"]}
import { listScorersResponseSchema, scorerIdPathParams, scorerEntrySchema, scoresWithPaginationResponseSchema, listScoresByRunIdQuerySchema, listScoresByScorerIdQuerySchema, listScoresByEntityIdQuerySchema, entityPathParams, saveScoreResponseSchema, saveScoreBodySchema } from './chunk-BZUNERBP.js';
import { getAgentFromSystem } from './chunk-XORQIQXT.js';
import { runIdSchema } from './chunk-6VTOGOS2.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
import { __export } from './chunk-PR4QN5HX.js';
// src/server/handlers/scores.ts
var scores_exports = {};
__export(scores_exports, {
GET_SCORER_ROUTE: () => GET_SCORER_ROUTE,
LIST_SCORERS_ROUTE: () => LIST_SCORERS_ROUTE,
LIST_SCORES_BY_ENTITY_ID_ROUTE: () => LIST_SCORES_BY_ENTITY_ID_ROUTE,
LIST_SCORES_BY_RUN_ID_ROUTE: () => LIST_SCORES_BY_RUN_ID_ROUTE,
LIST_SCORES_BY_SCORER_ID_ROUTE: () => LIST_SCORES_BY_SCORER_ID_ROUTE,
SAVE_SCORE_ROUTE: () => SAVE_SCORE_ROUTE
});
async function listScorersFromSystem({
mastra,
requestContext
}) {
const agents = mastra.listAgents();
const workflows = mastra.listWorkflows();
const scorersMap = /* @__PURE__ */ new Map();
const processAgentScorers = async (agent) => {
const scorers = await agent.listScorers({
requestContext
}) || {};
if (Object.keys(scorers).length > 0) {
for (const [_scorerId, scorer] of Object.entries(scorers)) {
const scorerId = scorer.scorer.id;
if (scorersMap.has(scorerId)) {
scorersMap.get(scorerId)?.agentIds.push(agent.id);
scorersMap.get(scorerId)?.agentNames.push(agent.name);
} else {
scorersMap.set(scorerId, {
workflowIds: [],
...scorer,
agentNames: [agent.name],
agentIds: [agent.id],
isRegistered: false,
source: scorer.scorer.source ?? "code"
});
}
}
}
};
for (const [_, agent] of Object.entries(agents)) {
await processAgentScorers(agent);
}
try {
const editor = mastra.getEditor();
const storedAgentsResult = await editor?.agent.list();
if (storedAgentsResult?.agents) {
for (const storedAgentConfig of storedAgentsResult.agents) {
try {
const agent = await editor?.agent.getById(storedAgentConfig.id);
if (agent) {
await processAgentScorers(agent);
}
} catch {
}
}
}
} catch {
}
try {
const editor = mastra.getEditor();
const storedScorersResult = await editor?.scorer.list();
if (storedScorersResult?.scorerDefinitions) {
for (const storedScorerConfig of storedScorersResult.scorerDefinitions) {
try {
await editor?.scorer.getById(storedScorerConfig.id);
} catch {
}
}
}
} catch {
}
for (const [workflowId, workflow] of Object.entries(workflows)) {
const scorers = await workflow.listScorers({
requestContext
}) || {};
if (Object.keys(scorers).length > 0) {
for (const [_scorerId, scorer] of Object.entries(scorers)) {
const scorerName = scorer.scorer.name;
if (scorersMap.has(scorerName)) {
scorersMap.get(scorerName)?.workflowIds.push(workflowId);
} else {
scorersMap.set(scorerName, {
agentIds: [],
agentNames: [],
...scorer,
workflowIds: [workflowId],
isRegistered: false,
source: scorer.scorer.source ?? "code"
});
}
}
}
}
const registeredScorers = await mastra.listScorers();
for (const [_scorerId, scorer] of Object.entries(registeredScorers || {})) {
const scorerId = scorer.id;
if (scorersMap.has(scorerId)) {
scorersMap.get(scorerId).isRegistered = true;
} else {
scorersMap.set(scorerId, {
scorer,
agentIds: [],
agentNames: [],
workflowIds: [],
isRegistered: true,
source: scorer.source ?? "code"
});
}
}
return Object.fromEntries(scorersMap.entries());
}
function getTraceDetails(traceIdWithSpanId) {
if (!traceIdWithSpanId) {
return {};
}
const [traceId, spanId] = traceIdWithSpanId.split("-");
return {
...traceId ? { traceId } : {},
...spanId ? { spanId } : {}
};
}
var LIST_SCORERS_ROUTE = createRoute({
method: "GET",
path: "/scores/scorers",
responseType: "json",
responseSchema: listScorersResponseSchema,
summary: "List all scorers",
description: "Returns a list of all registered scorers with their configuration and associated agents and workflows",
tags: ["Scoring"],
requiresAuth: true,
handler: (async ({ mastra, requestContext }) => {
const scorers = await listScorersFromSystem({
mastra,
requestContext
});
return scorers;
})
});
var GET_SCORER_ROUTE = createRoute({
method: "GET",
path: "/scores/scorers/:scorerId",
responseType: "json",
pathParamSchema: scorerIdPathParams,
responseSchema: scorerEntrySchema.nullable(),
summary: "Get scorer by ID",
description: "Returns details for a specific scorer including its configuration and associations",
tags: ["Scoring"],
requiresAuth: true,
handler: (async ({ mastra, scorerId, requestContext }) => {
const scorers = await listScorersFromSystem({
mastra,
requestContext
});
const scorer = scorers[scorerId];
if (!scorer) {
return null;
}
return scorer;
})
});
var LIST_SCORES_BY_RUN_ID_ROUTE = createRoute({
method: "GET",
path: "/scores/run/:runId",
responseType: "json",
pathParamSchema: runIdSchema,
queryParamSchema: listScoresByRunIdQuerySchema,
responseSchema: scoresWithPaginationResponseSchema,
summary: "List scores by run ID",
description: "Returns all scores for a specific execution run",
tags: ["Scoring"],
requiresAuth: true,
handler: async ({ mastra, runId, ...params }) => {
try {
const { page, perPage } = params;
const pagination = {
page: page ?? 0,
perPage: perPage ?? 10
};
const scores = await mastra.getStorage()?.getStore("scores");
const scoreResults = await scores?.listScoresByRunId?.({
runId,
pagination
}) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };
return {
pagination: scoreResults.pagination,
scores: scoreResults.scores.map((score) => ({ ...score, ...getTraceDetails(score.traceId) }))
};
} catch (error) {
return handleError(error, "Error getting scores by run id");
}
}
});
var LIST_SCORES_BY_SCORER_ID_ROUTE = createRoute({
method: "GET",
path: "/scores/scorer/:scorerId",
responseType: "json",
pathParamSchema: scorerIdPathParams,
queryParamSchema: listScoresByScorerIdQuerySchema,
responseSchema: scoresWithPaginationResponseSchema,
summary: "List scores by scorer ID",
description: "Returns all scores generated by a specific scorer",
tags: ["Scoring"],
requiresAuth: true,
handler: async ({ mastra, scorerId, ...params }) => {
try {
const { page, perPage, entityId, entityType } = params;
const filters = Object.fromEntries(Object.entries({ entityId, entityType }).filter(([_, v]) => v !== void 0));
const scores = await mastra.getStorage()?.getStore("scores");
const scoreResults = await scores?.listScoresByScorerId?.({
scorerId,
pagination: { page: page ?? 0, perPage: perPage ?? 10 },
...filters
}) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };
return {
pagination: scoreResults.pagination,
scores: scoreResults.scores.map((score) => ({ ...score, ...getTraceDetails(score.traceId) }))
};
} catch (error) {
return handleError(error, "Error getting scores by scorer id");
}
}
});
var LIST_SCORES_BY_ENTITY_ID_ROUTE = createRoute({
method: "GET",
path: "/scores/entity/:entityType/:entityId",
responseType: "json",
pathParamSchema: entityPathParams,
queryParamSchema: listScoresByEntityIdQuerySchema,
responseSchema: scoresWithPaginationResponseSchema,
summary: "List scores by entity ID",
description: "Returns all scores for a specific entity (agent or workflow)",
tags: ["Scoring"],
requiresAuth: true,
handler: async ({ mastra, entityId, entityType, ...params }) => {
try {
const { page, perPage } = params;
let entityIdToUse = entityId;
if (entityType === "AGENT") {
const agent = await getAgentFromSystem({ mastra, agentId: entityId });
entityIdToUse = agent.id;
} else if (entityType === "WORKFLOW") {
const workflow = mastra.getWorkflowById(entityId);
entityIdToUse = workflow.id;
}
const pagination = {
page: page ?? 0,
perPage: perPage ?? 10
};
const scoresStore = await mastra.getStorage()?.getStore("scores");
const scoreResults = await scoresStore?.listScoresByEntityId?.({
entityId: entityIdToUse,
entityType,
pagination
}) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };
return {
pagination: scoreResults.pagination,
scores: scoreResults.scores.map((score) => ({ ...score, ...getTraceDetails(score.traceId) }))
};
} catch (error) {
return handleError(error, "Error getting scores by entity id");
}
}
});
var SAVE_SCORE_ROUTE = createRoute({
method: "POST",
path: "/scores",
responseType: "json",
bodySchema: saveScoreBodySchema,
responseSchema: saveScoreResponseSchema,
summary: "Save score",
description: "Saves a new score record to storage",
tags: ["Scoring"],
requiresAuth: true,
handler: async ({ mastra, ...params }) => {
try {
const { score } = params;
const scoresStore = await mastra.getStorage()?.getStore("scores");
const result = await scoresStore?.saveScore?.(score);
if (!result) {
throw new HTTPException(500, { message: "Storage not configured" });
}
return result;
} catch (error) {
return handleError(error, "Error saving score");
}
}
});
export { GET_SCORER_ROUTE, LIST_SCORERS_ROUTE, LIST_SCORES_BY_ENTITY_ID_ROUTE, LIST_SCORES_BY_RUN_ID_ROUTE, LIST_SCORES_BY_SCORER_ID_ROUTE, SAVE_SCORE_ROUTE, scores_exports };
//# sourceMappingURL=chunk-SHQ5UYM7.js.map
//# sourceMappingURL=chunk-SHQ5UYM7.js.map
{"version":3,"sources":["../src/server/handlers/scores.ts"],"names":[],"mappings":"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","file":"chunk-SHQ5UYM7.js","sourcesContent":["import type { MastraScorerEntry, ScoreRowData } from '@mastra/core/evals';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { StoragePagination } from '@mastra/core/storage';\nimport { HTTPException } from '../http-exception';\nimport { runIdSchema } from '../schemas/common';\nimport {\n listScorersResponseSchema,\n scorerEntrySchema,\n scorerIdPathParams,\n entityPathParams,\n listScoresByRunIdQuerySchema,\n listScoresByScorerIdQuerySchema,\n listScoresByEntityIdQuerySchema,\n saveScoreBodySchema,\n scoresWithPaginationResponseSchema,\n saveScoreResponseSchema,\n} from '../schemas/scores';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport type { Context } from '../types';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\n\nasync function listScorersFromSystem({\n mastra,\n requestContext,\n}: Context & {\n requestContext: RequestContext;\n}) {\n const agents = mastra.listAgents();\n const workflows = mastra.listWorkflows();\n\n const scorersMap = new Map<\n string,\n MastraScorerEntry & {\n agentIds: string[];\n agentNames: string[];\n workflowIds: string[];\n isRegistered: boolean;\n source: 'code' | 'stored' | 'fs';\n }\n >();\n\n // Helper function to process an agent's scorers\n const processAgentScorers = async (agent: {\n id: string;\n name: string;\n listScorers: (typeof agents)[string]['listScorers'];\n }) => {\n const scorers =\n (await agent.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerId = scorer.scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)?.agentIds.push(agent.id);\n scorersMap.get(scorerId)?.agentNames.push(agent.name);\n } else {\n scorersMap.set(scorerId, {\n workflowIds: [],\n ...scorer,\n agentNames: [agent.name],\n agentIds: [agent.id],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n };\n\n // Process code-defined agents\n for (const [_, agent] of Object.entries(agents)) {\n await processAgentScorers(agent);\n }\n\n // Process stored agents (database-backed agents)\n try {\n const editor = mastra.getEditor();\n const storedAgentsResult = await editor?.agent.list();\n if (storedAgentsResult?.agents) {\n for (const storedAgentConfig of storedAgentsResult.agents) {\n try {\n const agent = await editor?.agent.getById(storedAgentConfig.id);\n if (agent) {\n await processAgentScorers(agent);\n }\n } catch {\n // Skip individual agents that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured - not all setups have storage\n }\n\n // Process stored scorers (standalone CMS-created scorers)\n try {\n const editor = mastra.getEditor();\n const storedScorersResult = await editor?.scorer.list();\n if (storedScorersResult?.scorerDefinitions) {\n for (const storedScorerConfig of storedScorersResult.scorerDefinitions) {\n try {\n await editor?.scorer.getById(storedScorerConfig.id);\n } catch {\n // Skip individual scorers that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured\n }\n\n for (const [workflowId, workflow] of Object.entries(workflows)) {\n const scorers =\n (await workflow.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerName = scorer.scorer.name;\n if (scorersMap.has(scorerName)) {\n scorersMap.get(scorerName)?.workflowIds.push(workflowId);\n } else {\n scorersMap.set(scorerName, {\n agentIds: [],\n agentNames: [],\n ...scorer,\n workflowIds: [workflowId],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n }\n\n const registeredScorers = await mastra.listScorers();\n for (const [_scorerId, scorer] of Object.entries(registeredScorers || {})) {\n const scorerId = scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)!.isRegistered = true;\n } else {\n scorersMap.set(scorerId, {\n scorer: scorer,\n agentIds: [],\n agentNames: [],\n workflowIds: [],\n isRegistered: true,\n source: scorer.source ?? 'code',\n });\n }\n }\n\n return Object.fromEntries(scorersMap.entries());\n}\n\n// Legacy function to get trace and span details\nfunction getTraceDetails(traceIdWithSpanId?: string) {\n if (!traceIdWithSpanId) {\n return {};\n }\n\n const [traceId, spanId] = traceIdWithSpanId.split('-');\n\n return {\n ...(traceId ? { traceId } : {}),\n ...(spanId ? { spanId } : {}),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_SCORERS_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers',\n responseType: 'json',\n responseSchema: listScorersResponseSchema,\n summary: 'List all scorers',\n description: 'Returns a list of all registered scorers with their configuration and associated agents and workflows',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n return scorers;\n }) as any,\n});\n\nexport const GET_SCORER_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n responseSchema: scorerEntrySchema.nullable(),\n summary: 'Get scorer by ID',\n description: 'Returns details for a specific scorer including its configuration and associations',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, scorerId, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n\n const scorer = scorers[scorerId];\n\n if (!scorer) {\n return null;\n }\n\n return scorer;\n }) as any,\n});\n\nexport const LIST_SCORES_BY_RUN_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/run/:runId',\n responseType: 'json',\n pathParamSchema: runIdSchema,\n queryParamSchema: listScoresByRunIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by run ID',\n description: 'Returns all scores for a specific execution run',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, runId, ...params }) => {\n try {\n const { page, perPage } = params;\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByRunId?.({\n runId,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by run id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SCORER_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorer/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n queryParamSchema: listScoresByScorerIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by scorer ID',\n description: 'Returns all scores generated by a specific scorer',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, scorerId, ...params }) => {\n try {\n const { page, perPage, entityId, entityType } = params;\n const filters = Object.fromEntries(Object.entries({ entityId, entityType }).filter(([_, v]) => v !== undefined));\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByScorerId?.({\n scorerId,\n pagination: { page: page ?? 0, perPage: perPage ?? 10 },\n ...filters,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by scorer id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_ENTITY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/entity/:entityType/:entityId',\n responseType: 'json',\n pathParamSchema: entityPathParams,\n queryParamSchema: listScoresByEntityIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by entity ID',\n description: 'Returns all scores for a specific entity (agent or workflow)',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, entityId, entityType, ...params }) => {\n try {\n const { page, perPage } = params;\n let entityIdToUse = entityId;\n\n if (entityType === 'AGENT') {\n const agent = await getAgentFromSystem({ mastra, agentId: entityId });\n entityIdToUse = agent.id;\n } else if (entityType === 'WORKFLOW') {\n const workflow = mastra.getWorkflowById(entityId);\n entityIdToUse = workflow.id;\n }\n\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scoresStore?.listScoresByEntityId?.({\n entityId: entityIdToUse,\n entityType,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by entity id');\n }\n },\n});\n\nexport const SAVE_SCORE_ROUTE = createRoute({\n method: 'POST',\n path: '/scores',\n responseType: 'json',\n bodySchema: saveScoreBodySchema,\n responseSchema: saveScoreResponseSchema,\n summary: 'Save score',\n description: 'Saves a new score record to storage',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const { score } = params as { score: ScoreRowData };\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const result = await scoresStore?.saveScore?.(score);\n if (!result) {\n throw new HTTPException(500, { message: 'Storage not configured' });\n }\n return result;\n } catch (error) {\n return handleError(error, 'Error saving score');\n }\n },\n});\n"]}
import { LIST_STORED_SKILLS_ROUTE, GET_STORED_SKILL_ROUTE, CREATE_STORED_SKILL_ROUTE, UPDATE_STORED_SKILL_ROUTE, DELETE_STORED_SKILL_ROUTE, PUBLISH_STORED_SKILL_ROUTE } from './chunk-QRXUWF3U.js';
import { LIST_STORED_WORKSPACES_ROUTE, GET_STORED_WORKSPACE_ROUTE, CREATE_STORED_WORKSPACE_ROUTE, UPDATE_STORED_WORKSPACE_ROUTE, DELETE_STORED_WORKSPACE_ROUTE } from './chunk-CLZVCJJX.js';
import { GET_SYSTEM_PACKAGES_ROUTE, GET_API_SCHEMA_ROUTE } from './chunk-I6TYCL4H.js';
import { LIST_TOOL_PROVIDERS_ROUTE, LIST_TOOL_PROVIDER_TOOLKITS_ROUTE, LIST_TOOL_PROVIDER_TOOLS_ROUTE, GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE, AUTHORIZE_TOOL_PROVIDER_ROUTE, GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE, TOOL_PROVIDER_CONNECTION_STATUS_ROUTE, LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE, LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE, DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE, UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE, GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE, GET_TOOL_PROVIDER_HEALTH_ROUTE } from './chunk-ODT3BA2T.js';
import { FAVORITE_STORED_AGENT_ROUTE, UNFAVORITE_STORED_AGENT_ROUTE } from './chunk-C46XF6AU.js';
import { LIST_STORED_AGENTS_ROUTE, PREVIEW_INSTRUCTIONS_ROUTE, GET_STORED_AGENT_DEPENDENTS_ROUTE, EXPORT_STORED_AGENT_ROUTE, OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE, GET_STORED_AGENT_ROUTE, CREATE_STORED_AGENT_ROUTE, UPDATE_STORED_AGENT_ROUTE, DELETE_STORED_AGENT_ROUTE } from './chunk-RSDPTA3U.js';
import { LIST_STORED_MCP_CLIENTS_ROUTE, GET_STORED_MCP_CLIENT_ROUTE, CREATE_STORED_MCP_CLIENT_ROUTE, UPDATE_STORED_MCP_CLIENT_ROUTE, DELETE_STORED_MCP_CLIENT_ROUTE } from './chunk-RZZJ4L32.js';
import { LIST_STORED_PROMPT_BLOCKS_ROUTE, GET_STORED_PROMPT_BLOCK_ROUTE, CREATE_STORED_PROMPT_BLOCK_ROUTE, UPDATE_STORED_PROMPT_BLOCK_ROUTE, DELETE_STORED_PROMPT_BLOCK_ROUTE } from './chunk-4ESLXJ4G.js';
import { LIST_STORED_SCORERS_ROUTE, GET_STORED_SCORER_ROUTE, CREATE_STORED_SCORER_ROUTE, UPDATE_STORED_SCORER_ROUTE, DELETE_STORED_SCORER_ROUTE } from './chunk-R5VL3YAW.js';
import { FAVORITE_STORED_SKILL_ROUTE, UNFAVORITE_STORED_SKILL_ROUTE } from './chunk-F2YOTPSJ.js';
import { LIST_PROCESSORS_ROUTE, GET_PROCESSOR_BY_ID_ROUTE, EXECUTE_PROCESSOR_ROUTE } from './chunk-QWBZYM2G.js';
import { LIST_PROMPT_BLOCK_VERSIONS_ROUTE, CREATE_PROMPT_BLOCK_VERSION_ROUTE, COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE, GET_PROMPT_BLOCK_VERSION_ROUTE, ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE, RESTORE_PROMPT_BLOCK_VERSION_ROUTE, DELETE_PROMPT_BLOCK_VERSION_ROUTE } from './chunk-HVMCICMF.js';
import { LIST_SCHEDULES_ROUTE, GET_SCHEDULE_ROUTE, CREATE_SCHEDULE_ROUTE, UPDATE_SCHEDULE_ROUTE, DELETE_SCHEDULE_ROUTE, LIST_SCHEDULE_TRIGGERS_ROUTE, PAUSE_SCHEDULE_ROUTE, RESUME_SCHEDULE_ROUTE, RUN_SCHEDULE_ROUTE } from './chunk-HYBDPQZ4.js';
import { LIST_SCORER_VERSIONS_ROUTE, CREATE_SCORER_VERSION_ROUTE, COMPARE_SCORER_VERSIONS_ROUTE, GET_SCORER_VERSION_ROUTE, ACTIVATE_SCORER_VERSION_ROUTE, RESTORE_SCORER_VERSION_ROUTE, DELETE_SCORER_VERSION_ROUTE } from './chunk-3SQNEUDQ.js';
import { LIST_PROCESSOR_PROVIDERS_ROUTE, GET_PROCESSOR_PROVIDER_ROUTE } from './chunk-ULJ6JC5K.js';
import { LIST_DATASETS_ROUTE, CREATE_DATASET_ROUTE, GET_DATASET_ROUTE, UPDATE_DATASET_ROUTE, DELETE_DATASET_ROUTE, LIST_ITEMS_ROUTE, ADD_ITEM_ROUTE, BATCH_INSERT_ITEMS_ROUTE, BATCH_DELETE_ITEMS_ROUTE, GET_ITEM_ROUTE, UPDATE_ITEM_ROUTE, DELETE_ITEM_ROUTE, LIST_DATASET_VERSIONS_ROUTE, LIST_ITEM_VERSIONS_ROUTE, GET_ITEM_VERSION_ROUTE, LIST_ALL_EXPERIMENTS_ROUTE, EXPERIMENT_REVIEW_SUMMARY_ROUTE, LIST_EXPERIMENTS_ROUTE, TRIGGER_EXPERIMENT_ROUTE, GET_EXPERIMENT_ROUTE, LIST_EXPERIMENT_RESULTS_ROUTE, UPDATE_EXPERIMENT_RESULT_ROUTE, COMPARE_EXPERIMENTS_ROUTE, GENERATE_ITEMS_ROUTE, CLUSTER_FAILURES_ROUTE } from './chunk-5AM2O3JF.js';
import { GET_EDITOR_BUILDER_SETTINGS_ROUTE, GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE, GET_INFRASTRUCTURE_STATUS_ROUTE } from './chunk-IKIPMMHL.js';
import { LIST_MCP_CLIENT_VERSIONS_ROUTE, CREATE_MCP_CLIENT_VERSION_ROUTE, COMPARE_MCP_CLIENT_VERSIONS_ROUTE, GET_MCP_CLIENT_VERSION_ROUTE, ACTIVATE_MCP_CLIENT_VERSION_ROUTE, RESTORE_MCP_CLIENT_VERSION_ROUTE, DELETE_MCP_CLIENT_VERSION_ROUTE } from './chunk-DTJXVPYD.js';
import { LIST_AGENT_VERSIONS_ROUTE, CREATE_AGENT_VERSION_ROUTE, COMPARE_AGENT_VERSIONS_ROUTE, GET_AGENT_VERSION_ROUTE, ACTIVATE_AGENT_VERSION_ROUTE, RESTORE_AGENT_VERSION_ROUTE, DELETE_AGENT_VERSION_ROUTE } from './chunk-YZNPRVOK.js';
import { BACKGROUND_TASK_STREAM_ROUTE, LIST_BACKGROUND_TASKS_ROUTE, GET_BACKGROUND_TASK_ROUTE } from './chunk-UKDD2I3O.js';
import { LIST_BUILDER_REGISTRIES_ROUTE, BUILDER_REGISTRY_SEARCH_ROUTE, BUILDER_REGISTRY_POPULAR_ROUTE, BUILDER_REGISTRY_PREVIEW_ROUTE, BUILDER_REGISTRY_INSTALL_ROUTE } from './chunk-COBVX6FO.js';
import { LIST_CHANNEL_PLATFORMS_ROUTE, LIST_CHANNEL_INSTALLATIONS_ROUTE, CONNECT_CHANNEL_ROUTE, DISCONNECT_CHANNEL_ROUTE } from './chunk-2A4R6GSR.js';
import { UPSERT_VECTORS_ROUTE, CREATE_INDEX_ROUTE, QUERY_VECTORS_ROUTE, LIST_INDEXES_ROUTE, DESCRIBE_INDEX_ROUTE, DELETE_INDEX_ROUTE, LIST_VECTORS_ROUTE, LIST_EMBEDDERS_ROUTE } from './chunk-HP7234Q6.js';
import { GET_SPEAKERS_ROUTE, GET_SPEAKERS_DEPRECATED_ROUTE, GENERATE_SPEECH_ROUTE, GENERATE_SPEECH_DEPRECATED_ROUTE, TRANSCRIBE_SPEECH_ROUTE, TRANSCRIBE_SPEECH_DEPRECATED_ROUTE, GET_LISTENER_ROUTE } from './chunk-2YL7Z4BF.js';
import { LIST_WORKSPACES_ROUTE, GET_WORKSPACE_ROUTE, WORKSPACE_FS_ROUTES, WORKSPACE_SEARCH_ROUTES, WORKSPACE_SKILLS_ROUTES, WORKSPACE_SKILLS_SH_ROUTES } from './chunk-3H36PZH5.js';
import { EXECUTE_AGENT_TOOL_ROUTE, GET_AGENT_TOOL_ROUTE, LIST_TOOLS_ROUTE, GET_TOOL_BY_ID_ROUTE, EXECUTE_TOOL_ROUTE } from './chunk-QHALAWTW.js';
import { LIST_SCORERS_ROUTE, GET_SCORER_ROUTE, LIST_SCORES_BY_RUN_ID_ROUTE, LIST_SCORES_BY_SCORER_ID_ROUTE, LIST_SCORES_BY_ENTITY_ID_ROUTE, SAVE_SCORE_ROUTE } from './chunk-SHQ5UYM7.js';
import { CREATE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE } from './chunk-6LKY2RDJ.js';
import { LIST_MCP_SERVERS_ROUTE, GET_MCP_SERVER_DETAIL_ROUTE, LIST_MCP_SERVER_TOOLS_ROUTE, GET_MCP_SERVER_TOOL_DETAIL_ROUTE, EXECUTE_MCP_SERVER_TOOL_ROUTE, LIST_MCP_SERVER_RESOURCES_ROUTE, READ_MCP_SERVER_RESOURCE_ROUTE, MCP_HTTP_TRANSPORT_ROUTE, MCP_SSE_TRANSPORT_ROUTE, MCP_SSE_MESSAGES_ROUTE } from './chunk-T272I2ME.js';
import { GET_MEMORY_STATUS_ROUTE, GET_MEMORY_CONFIG_ROUTE, GET_OBSERVATIONAL_MEMORY_ROUTE, AWAIT_BUFFER_STATUS_ROUTE, LIST_THREADS_ROUTE, GET_THREAD_BY_ID_ROUTE, LIST_MESSAGES_ROUTE, GET_WORKING_MEMORY_ROUTE, SAVE_MESSAGES_ROUTE, CREATE_THREAD_ROUTE, UPDATE_THREAD_ROUTE, DELETE_THREAD_ROUTE, CLONE_THREAD_ROUTE, UPDATE_WORKING_MEMORY_ROUTE, DELETE_MESSAGES_ROUTE, SEARCH_MEMORY_ROUTE, GET_MEMORY_STATUS_NETWORK_ROUTE, LIST_THREADS_NETWORK_ROUTE, GET_THREAD_BY_ID_NETWORK_ROUTE, LIST_MESSAGES_NETWORK_ROUTE, SAVE_MESSAGES_NETWORK_ROUTE, CREATE_THREAD_NETWORK_ROUTE, UPDATE_THREAD_NETWORK_ROUTE, DELETE_THREAD_NETWORK_ROUTE, DELETE_MESSAGES_NETWORK_ROUTE } from './chunk-AJXH4AOX.js';
import { LIST_TRACES_ROUTE, LIST_TRACES_LIGHT_ROUTE, LIST_BRANCHES_ROUTE, GET_BRANCH_ROUTE, GET_TRACE_ROUTE, GET_TRACE_LIGHT_ROUTE, GET_SPAN_ROUTE, GET_TRACE_TRAJECTORY_ROUTE, SCORE_TRACES_ROUTE, LIST_SCORES_BY_SPAN_ROUTE } from './chunk-ZVTNACHY.js';
import { LIST_METRICS, LIST_LOGS, LIST_SCORES, CREATE_SCORE, GET_SCORE, GET_SCORE_AGGREGATE, GET_SCORE_BREAKDOWN, GET_SCORE_TIME_SERIES, GET_SCORE_PERCENTILES, LIST_FEEDBACK, CREATE_FEEDBACK, GET_FEEDBACK_AGGREGATE, GET_FEEDBACK_BREAKDOWN, GET_FEEDBACK_TIME_SERIES, GET_FEEDBACK_PERCENTILES, GET_METRIC_AGGREGATE, GET_METRIC_BREAKDOWN, GET_METRIC_TIME_SERIES, GET_METRIC_PERCENTILES, GET_METRIC_NAMES, GET_METRIC_LABEL_KEYS, GET_METRIC_LABEL_VALUES, GET_ENTITY_TYPES, GET_ENTITY_NAMES, GET_SERVICE_NAMES, GET_ENVIRONMENTS, GET_TAGS } from './chunk-NZZLZSVD.js';
import { CREATE_CONVERSATION_ROUTE, GET_CONVERSATION_ROUTE, GET_CONVERSATION_ITEMS_ROUTE, DELETE_CONVERSATION_ROUTE } from './chunk-2FNOQ5EO.js';
import { LIST_LOG_TRANSPORTS_ROUTE, LIST_LOGS_ROUTE, LIST_LOGS_BY_RUN_ID_ROUTE } from './chunk-5ZFBQKCW.js';
import { GET_AGENT_CARD_ROUTE, AGENT_EXECUTION_ROUTE } from './chunk-5GOTSBKU.js';
import { LIST_AGENTS_ROUTE, GET_PROVIDERS_ROUTE, GET_AGENT_BY_ID_ROUTE, CLONE_AGENT_ROUTE, GENERATE_AGENT_ROUTE, GENERATE_AGENT_VNEXT_ROUTE, STREAM_GENERATE_ROUTE, STREAM_UNTIL_IDLE_GENERATE_ROUTE, STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE, OBSERVE_AGENT_STREAM_ROUTE, SEND_AGENT_MESSAGE_ROUTE, QUEUE_AGENT_MESSAGE_ROUTE, SEND_AGENT_SIGNAL_ROUTE, ABORT_AGENT_THREAD_ROUTE, SUBSCRIBE_AGENT_THREAD_ROUTE, APPROVE_TOOL_CALL_ROUTE, SEND_TOOL_APPROVAL_ROUTE, LIST_SUSPENDED_RUNS_ROUTE, DECLINE_TOOL_CALL_ROUTE, RESUME_STREAM_ROUTE, RECOVER_ROUTE, APPROVE_TOOL_CALL_GENERATE_ROUTE, DECLINE_TOOL_CALL_GENERATE_ROUTE, APPROVE_NETWORK_TOOL_CALL_ROUTE, DECLINE_NETWORK_TOOL_CALL_ROUTE, RESUME_STREAM_UNTIL_IDLE_ROUTE, STREAM_NETWORK_ROUTE, UPDATE_AGENT_MODEL_ROUTE, RESET_AGENT_MODEL_ROUTE, REORDER_AGENT_MODEL_LIST_ROUTE, UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE, ENHANCE_INSTRUCTIONS_ROUTE, GET_AGENT_SKILL_ROUTE, STREAM_VNEXT_DEPRECATED_ROUTE, STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE, STREAM_UI_MESSAGE_DEPRECATED_ROUTE, GENERATE_LEGACY_ROUTE, STREAM_GENERATE_LEGACY_ROUTE } from './chunk-XORQIQXT.js';
import { AUTH_ROUTES } from './chunk-JF7G5FSK.js';
import { LIST_AGENT_BUILDER_ACTIONS_ROUTE, GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE, LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE, GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE, CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE, STREAM_AGENT_BUILDER_ACTION_ROUTE, STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE, START_ASYNC_AGENT_BUILDER_ACTION_ROUTE, START_AGENT_BUILDER_ACTION_RUN_ROUTE, OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE, OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE, RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE, RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE, RESUME_AGENT_BUILDER_ACTION_ROUTE, RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE, CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE } from './chunk-TRLQF6DU.js';
import { LIST_WORKFLOWS_ROUTE, GET_WORKFLOW_BY_ID_ROUTE, LIST_WORKFLOW_RUNS_ROUTE, GET_WORKFLOW_RUN_BY_ID_ROUTE, DELETE_WORKFLOW_RUN_BY_ID_ROUTE, CREATE_WORKFLOW_RUN_ROUTE, STREAM_WORKFLOW_ROUTE, RESUME_STREAM_WORKFLOW_ROUTE, START_ASYNC_WORKFLOW_ROUTE, START_WORKFLOW_RUN_ROUTE, OBSERVE_STREAM_WORKFLOW_ROUTE, RESUME_ASYNC_WORKFLOW_ROUTE, RESUME_NO_WAIT_WORKFLOW_ROUTE, RESUME_WORKFLOW_ROUTE, CANCEL_WORKFLOW_RUN_ROUTE, TIME_TRAVEL_WORKFLOW_ROUTE, TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE, TIME_TRAVEL_STREAM_WORKFLOW_ROUTE, RESTART_WORKFLOW_ROUTE, RESTART_ASYNC_WORKFLOW_ROUTE, RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE, RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE, EXECUTE_WORKFLOW_STEP_ROUTE, RECEIVE_WORKFLOW_EVENT_ROUTE, STREAM_LEGACY_WORKFLOW_ROUTE, OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE } from './chunk-TKOUI25C.js';
import { LIST_AGENT_CONTROLLERS_ROUTE, LIST_AGENT_CONTROLLER_MODES_ROUTE, LIST_AGENT_CONTROLLER_MODELS_ROUTE, CREATE_AGENT_CONTROLLER_SESSION_ROUTE, GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE, LIST_AGENT_CONTROLLER_THREADS_ROUTE, CREATE_AGENT_CONTROLLER_THREAD_ROUTE, DELETE_AGENT_CONTROLLER_THREAD_ROUTE, RENAME_AGENT_CONTROLLER_THREAD_ROUTE, CLONE_AGENT_CONTROLLER_THREAD_ROUTE, LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE, STREAM_AGENT_CONTROLLER_SESSION_ROUTE, SEND_AGENT_CONTROLLER_MESSAGE_ROUTE, STEER_AGENT_CONTROLLER_SESSION_ROUTE, FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE, ABORT_AGENT_CONTROLLER_SESSION_ROUTE, AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE, AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE, SWITCH_AGENT_CONTROLLER_MODE_ROUTE, SWITCH_AGENT_CONTROLLER_MODEL_ROUTE, SWITCH_AGENT_CONTROLLER_THREAD_ROUTE, SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE, GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE, GET_AGENT_CONTROLLER_OM_RECORD_ROUTE, SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE, GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE, GET_AGENT_CONTROLLER_GOAL_ROUTE, SET_AGENT_CONTROLLER_GOAL_ROUTE, UPDATE_AGENT_CONTROLLER_GOAL_ROUTE, CLEAR_AGENT_CONTROLLER_GOAL_ROUTE, GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE, SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE, SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE, SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE } from './chunk-GQESDOVN.js';
// src/server/server-adapter/routes/permissions.ts
var METHOD_TO_ACTION = {
GET: "read",
POST: "write",
// Default for POST, may be overridden to 'execute'
PUT: "write",
PATCH: "write",
DELETE: "delete"
};
var EXECUTE_PATTERNS = [
"/generate",
"/stream",
"/execute",
"/start",
"/resume",
"/restart",
"/cancel",
"/approve",
"/decline",
"/speak",
"/listen",
"/query",
"/search",
"/observe",
"/time-travel",
"/enhance",
"/clone"
];
var PUBLISH_PATTERNS = ["/publish", "/activate", "/restore"];
var STORED_RESOURCE_SEGMENTS = {
agents: "stored-agents",
"mcp-clients": "stored-mcp-clients",
"prompt-blocks": "stored-prompt-blocks",
scorers: "stored-scorers",
skills: "stored-skills",
workspaces: "stored-workspaces"
};
function extractResource(path) {
const segments = path.replace(/^\//, "").split("/");
if (segments.length === 0) {
return null;
}
const firstSegment = segments[0];
if (firstSegment === "stored" && segments[1]) {
return STORED_RESOURCE_SEGMENTS[segments[1]] ?? null;
}
if (firstSegment === ".well-known") {
return "a2a";
}
return firstSegment || null;
}
function deriveAction(method, path) {
const upperMethod = method.toUpperCase();
if (upperMethod === "POST") {
if (path.startsWith("/stored/")) {
const isPublishOperation = PUBLISH_PATTERNS.some((pattern) => path.endsWith(pattern));
if (isPublishOperation) {
return "publish";
}
}
const isExecuteOperation = EXECUTE_PATTERNS.some((pattern) => path.includes(pattern));
return isExecuteOperation ? "execute" : "write";
}
return METHOD_TO_ACTION[upperMethod] || "read";
}
function derivePermission(route) {
if (route.method === "ALL") {
return null;
}
const resource = extractResource(route.path);
if (!resource) {
return null;
}
const action = deriveAction(route.method, route.path);
return `${resource}:${action}`;
}
function getEffectivePermission(route) {
if (route.requiresAuth === false) {
return null;
}
if (route.requiresPermission) {
return route.requiresPermission;
}
return derivePermission(route);
}
// src/server/server-adapter/routes/a2a.ts
var A2A_ROUTES = [GET_AGENT_CARD_ROUTE, AGENT_EXECUTION_ROUTE];
// src/server/server-adapter/routes/agent-builder.ts
var AGENT_BUILDER_ROUTES = [
LIST_AGENT_BUILDER_ACTIONS_ROUTE,
GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,
LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,
GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,
CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,
STREAM_AGENT_BUILDER_ACTION_ROUTE,
STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
START_AGENT_BUILDER_ACTION_RUN_ROUTE,
OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,
OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,
RESUME_AGENT_BUILDER_ACTION_ROUTE,
RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,
CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE
];
// src/server/server-adapter/routes/agent-controller.ts
var AGENT_CONTROLLER_ROUTES = [
LIST_AGENT_CONTROLLERS_ROUTE,
LIST_AGENT_CONTROLLER_MODES_ROUTE,
LIST_AGENT_CONTROLLER_MODELS_ROUTE,
CREATE_AGENT_CONTROLLER_SESSION_ROUTE,
GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE,
LIST_AGENT_CONTROLLER_THREADS_ROUTE,
CREATE_AGENT_CONTROLLER_THREAD_ROUTE,
DELETE_AGENT_CONTROLLER_THREAD_ROUTE,
RENAME_AGENT_CONTROLLER_THREAD_ROUTE,
CLONE_AGENT_CONTROLLER_THREAD_ROUTE,
LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE,
STREAM_AGENT_CONTROLLER_SESSION_ROUTE,
SEND_AGENT_CONTROLLER_MESSAGE_ROUTE,
STEER_AGENT_CONTROLLER_SESSION_ROUTE,
FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE,
ABORT_AGENT_CONTROLLER_SESSION_ROUTE,
AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE,
AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE,
SWITCH_AGENT_CONTROLLER_MODE_ROUTE,
SWITCH_AGENT_CONTROLLER_MODEL_ROUTE,
SWITCH_AGENT_CONTROLLER_THREAD_ROUTE,
SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE,
GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE,
GET_AGENT_CONTROLLER_OM_RECORD_ROUTE,
SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE,
GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE,
GET_AGENT_CONTROLLER_GOAL_ROUTE,
SET_AGENT_CONTROLLER_GOAL_ROUTE,
UPDATE_AGENT_CONTROLLER_GOAL_ROUTE,
CLEAR_AGENT_CONTROLLER_GOAL_ROUTE,
GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE,
SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE,
SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE,
SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE
];
// src/server/server-adapter/routes/agents.ts
var AGENTS_ROUTES = [
// ============================================================================
// Agent Core Routes
// ============================================================================
LIST_AGENTS_ROUTE,
GET_PROVIDERS_ROUTE,
GET_AGENT_BY_ID_ROUTE,
CLONE_AGENT_ROUTE,
// ============================================================================
// Voice Routes
// ============================================================================
GET_SPEAKERS_ROUTE,
GET_SPEAKERS_DEPRECATED_ROUTE,
// ============================================================================
// Agent Execution Routes
// ============================================================================
GENERATE_AGENT_ROUTE,
GENERATE_AGENT_VNEXT_ROUTE,
STREAM_GENERATE_ROUTE,
STREAM_UNTIL_IDLE_GENERATE_ROUTE,
STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,
// ============================================================================
// Resumable Stream Routes
// ============================================================================
OBSERVE_AGENT_STREAM_ROUTE,
SEND_AGENT_MESSAGE_ROUTE,
QUEUE_AGENT_MESSAGE_ROUTE,
SEND_AGENT_SIGNAL_ROUTE,
ABORT_AGENT_THREAD_ROUTE,
SUBSCRIBE_AGENT_THREAD_ROUTE,
// ============================================================================
// Tool Routes
// ============================================================================
EXECUTE_AGENT_TOOL_ROUTE,
APPROVE_TOOL_CALL_ROUTE,
SEND_TOOL_APPROVAL_ROUTE,
LIST_SUSPENDED_RUNS_ROUTE,
DECLINE_TOOL_CALL_ROUTE,
RESUME_STREAM_ROUTE,
RECOVER_ROUTE,
APPROVE_TOOL_CALL_GENERATE_ROUTE,
DECLINE_TOOL_CALL_GENERATE_ROUTE,
APPROVE_NETWORK_TOOL_CALL_ROUTE,
DECLINE_NETWORK_TOOL_CALL_ROUTE,
RESUME_STREAM_UNTIL_IDLE_ROUTE,
// ============================================================================
// Network Routes
// ============================================================================
STREAM_NETWORK_ROUTE,
// ============================================================================
// Model Management Routes
// ============================================================================
UPDATE_AGENT_MODEL_ROUTE,
RESET_AGENT_MODEL_ROUTE,
REORDER_AGENT_MODEL_LIST_ROUTE,
UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,
// ============================================================================
// Instruction Enhancement Routes
// ============================================================================
ENHANCE_INSTRUCTIONS_ROUTE,
// ============================================================================
// Agent Tool Routes
// ============================================================================
GET_AGENT_TOOL_ROUTE,
// ============================================================================
// Agent Skill Routes
// ============================================================================
GET_AGENT_SKILL_ROUTE,
// ============================================================================
// Voice/Speech Routes
// ============================================================================
GENERATE_SPEECH_ROUTE,
GENERATE_SPEECH_DEPRECATED_ROUTE,
TRANSCRIBE_SPEECH_ROUTE,
TRANSCRIBE_SPEECH_DEPRECATED_ROUTE,
GET_LISTENER_ROUTE,
// ============================================================================
// Deprecated Routes
// ============================================================================
STREAM_VNEXT_DEPRECATED_ROUTE,
STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,
STREAM_UI_MESSAGE_DEPRECATED_ROUTE
];
// src/server/server-adapter/routes/background-tasks.ts
var BACKGROUND_TASK_ROUTES = [
BACKGROUND_TASK_STREAM_ROUTE,
LIST_BACKGROUND_TASKS_ROUTE,
GET_BACKGROUND_TASK_ROUTE
];
// src/server/server-adapter/routes/channels.ts
var CHANNELS_ROUTES = [
LIST_CHANNEL_PLATFORMS_ROUTE,
LIST_CHANNEL_INSTALLATIONS_ROUTE,
CONNECT_CHANNEL_ROUTE,
DISCONNECT_CHANNEL_ROUTE
];
// src/server/server-adapter/routes/conversations.ts
var CONVERSATIONS_ROUTES = [
CREATE_CONVERSATION_ROUTE,
GET_CONVERSATION_ROUTE,
GET_CONVERSATION_ITEMS_ROUTE,
DELETE_CONVERSATION_ROUTE
];
// src/server/server-adapter/routes/datasets.ts
var DATASETS_ROUTES = [
// Dataset CRUD
LIST_DATASETS_ROUTE,
CREATE_DATASET_ROUTE,
GET_DATASET_ROUTE,
UPDATE_DATASET_ROUTE,
DELETE_DATASET_ROUTE,
// Item list and add
LIST_ITEMS_ROUTE,
ADD_ITEM_ROUTE,
// Batch operations - MUST come before item-specific routes to avoid /items/batch matching /items/:itemId
BATCH_INSERT_ITEMS_ROUTE,
BATCH_DELETE_ITEMS_ROUTE,
// Item-specific CRUD (uses :itemId param)
GET_ITEM_ROUTE,
UPDATE_ITEM_ROUTE,
DELETE_ITEM_ROUTE,
// Version operations
LIST_DATASET_VERSIONS_ROUTE,
LIST_ITEM_VERSIONS_ROUTE,
GET_ITEM_VERSION_ROUTE,
// All experiments (cross-dataset) - MUST come before dataset-scoped experiments
LIST_ALL_EXPERIMENTS_ROUTE,
// Experiment review summary (cross-dataset) - MUST come before dataset-scoped experiments
EXPERIMENT_REVIEW_SUMMARY_ROUTE,
// Experiment operations (dataset-scoped)
LIST_EXPERIMENTS_ROUTE,
TRIGGER_EXPERIMENT_ROUTE,
GET_EXPERIMENT_ROUTE,
LIST_EXPERIMENT_RESULTS_ROUTE,
UPDATE_EXPERIMENT_RESULT_ROUTE,
// Analytics
COMPARE_EXPERIMENTS_ROUTE,
// AI generation
GENERATE_ITEMS_ROUTE,
// Failure analysis
CLUSTER_FAILURES_ROUTE
];
// src/server/server-adapter/routes/editor-builder.ts
var EDITOR_BUILDER_ROUTES = [
GET_EDITOR_BUILDER_SETTINGS_ROUTE,
GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE,
GET_INFRASTRUCTURE_STATUS_ROUTE,
LIST_BUILDER_REGISTRIES_ROUTE,
BUILDER_REGISTRY_SEARCH_ROUTE,
BUILDER_REGISTRY_POPULAR_ROUTE,
BUILDER_REGISTRY_PREVIEW_ROUTE,
BUILDER_REGISTRY_INSTALL_ROUTE
];
// src/server/server-adapter/routes/legacy.ts
var LEGACY_ROUTES = [
// ============================================================================
// Legacy Agent Routes
// ============================================================================
GENERATE_LEGACY_ROUTE,
STREAM_GENERATE_LEGACY_ROUTE,
// ============================================================================
// Legacy Workflow Routes
// ============================================================================
STREAM_LEGACY_WORKFLOW_ROUTE,
OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE
];
// src/server/server-adapter/routes/logs.ts
var LOGS_ROUTES = [LIST_LOG_TRANSPORTS_ROUTE, LIST_LOGS_ROUTE, LIST_LOGS_BY_RUN_ID_ROUTE];
// src/server/server-adapter/routes/mcp.ts
var MCP_ROUTES = [
// ============================================================================
// MCP Server Registry Routes
// ============================================================================
LIST_MCP_SERVERS_ROUTE,
GET_MCP_SERVER_DETAIL_ROUTE,
// ============================================================================
// MCP Server Tool Routes
// ============================================================================
LIST_MCP_SERVER_TOOLS_ROUTE,
GET_MCP_SERVER_TOOL_DETAIL_ROUTE,
EXECUTE_MCP_SERVER_TOOL_ROUTE,
// ============================================================================
// MCP Server Resource Routes
// ============================================================================
LIST_MCP_SERVER_RESOURCES_ROUTE,
READ_MCP_SERVER_RESOURCE_ROUTE,
// ============================================================================
// MCP Transport Routes (handled by adapters)
// ============================================================================
MCP_HTTP_TRANSPORT_ROUTE,
MCP_SSE_TRANSPORT_ROUTE,
MCP_SSE_MESSAGES_ROUTE
];
// src/server/server-adapter/routes/memory.ts
var MEMORY_ROUTES = [
GET_MEMORY_STATUS_ROUTE,
GET_MEMORY_CONFIG_ROUTE,
GET_OBSERVATIONAL_MEMORY_ROUTE,
AWAIT_BUFFER_STATUS_ROUTE,
LIST_THREADS_ROUTE,
GET_THREAD_BY_ID_ROUTE,
LIST_MESSAGES_ROUTE,
GET_WORKING_MEMORY_ROUTE,
SAVE_MESSAGES_ROUTE,
CREATE_THREAD_ROUTE,
UPDATE_THREAD_ROUTE,
DELETE_THREAD_ROUTE,
CLONE_THREAD_ROUTE,
UPDATE_WORKING_MEMORY_ROUTE,
DELETE_MESSAGES_ROUTE,
SEARCH_MEMORY_ROUTE,
GET_MEMORY_STATUS_NETWORK_ROUTE,
LIST_THREADS_NETWORK_ROUTE,
GET_THREAD_BY_ID_NETWORK_ROUTE,
LIST_MESSAGES_NETWORK_ROUTE,
SAVE_MESSAGES_NETWORK_ROUTE,
CREATE_THREAD_NETWORK_ROUTE,
UPDATE_THREAD_NETWORK_ROUTE,
DELETE_THREAD_NETWORK_ROUTE,
DELETE_MESSAGES_NETWORK_ROUTE
];
// src/server/server-adapter/routes/observability.ts
var OBSERVABILITY_ROUTES = [
// Legacy
LIST_TRACES_ROUTE,
LIST_TRACES_LIGHT_ROUTE,
LIST_BRANCHES_ROUTE,
GET_BRANCH_ROUTE,
GET_TRACE_ROUTE,
GET_TRACE_LIGHT_ROUTE,
GET_SPAN_ROUTE,
GET_TRACE_TRAJECTORY_ROUTE,
SCORE_TRACES_ROUTE,
LIST_SCORES_BY_SPAN_ROUTE,
// New observability routes
LIST_METRICS,
LIST_LOGS,
LIST_SCORES,
CREATE_SCORE,
GET_SCORE,
GET_SCORE_AGGREGATE,
GET_SCORE_BREAKDOWN,
GET_SCORE_TIME_SERIES,
GET_SCORE_PERCENTILES,
LIST_FEEDBACK,
CREATE_FEEDBACK,
GET_FEEDBACK_AGGREGATE,
GET_FEEDBACK_BREAKDOWN,
GET_FEEDBACK_TIME_SERIES,
GET_FEEDBACK_PERCENTILES,
GET_METRIC_AGGREGATE,
GET_METRIC_BREAKDOWN,
GET_METRIC_TIME_SERIES,
GET_METRIC_PERCENTILES,
GET_METRIC_NAMES,
GET_METRIC_LABEL_KEYS,
GET_METRIC_LABEL_VALUES,
GET_ENTITY_TYPES,
GET_ENTITY_NAMES,
GET_SERVICE_NAMES,
GET_ENVIRONMENTS,
GET_TAGS
];
// src/server/server-adapter/routes/processor-providers.ts
var PROCESSOR_PROVIDER_ROUTES = [LIST_PROCESSOR_PROVIDERS_ROUTE, GET_PROCESSOR_PROVIDER_ROUTE];
// src/server/server-adapter/routes/processors.ts
var PROCESSORS_ROUTES = [LIST_PROCESSORS_ROUTE, GET_PROCESSOR_BY_ID_ROUTE, EXECUTE_PROCESSOR_ROUTE];
// src/server/server-adapter/routes/responses.ts
var RESPONSES_ROUTES = [CREATE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE];
// src/server/server-adapter/routes/schedules.ts
var SCHEDULES_ROUTES = [
LIST_SCHEDULES_ROUTE,
GET_SCHEDULE_ROUTE,
CREATE_SCHEDULE_ROUTE,
UPDATE_SCHEDULE_ROUTE,
DELETE_SCHEDULE_ROUTE,
LIST_SCHEDULE_TRIGGERS_ROUTE,
PAUSE_SCHEDULE_ROUTE,
RESUME_SCHEDULE_ROUTE,
RUN_SCHEDULE_ROUTE
];
// src/server/server-adapter/routes/scorers.ts
var SCORES_ROUTES = [
LIST_SCORERS_ROUTE,
GET_SCORER_ROUTE,
LIST_SCORES_BY_RUN_ID_ROUTE,
LIST_SCORES_BY_SCORER_ID_ROUTE,
LIST_SCORES_BY_ENTITY_ID_ROUTE,
SAVE_SCORE_ROUTE
];
// src/server/server-adapter/routes/stored-agents.ts
var STORED_AGENTS_ROUTES = [
// ============================================================================
// Stored Agents CRUD Routes
// IMPORTANT: Routes with literal paths (e.g., /preview-instructions) must come
// BEFORE routes with path parameters (e.g., /:storedAgentId) to ensure correct matching.
// ============================================================================
LIST_STORED_AGENTS_ROUTE,
PREVIEW_INSTRUCTIONS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
GET_STORED_AGENT_DEPENDENTS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE (longer literal)
EXPORT_STORED_AGENT_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
GET_STORED_AGENT_ROUTE,
CREATE_STORED_AGENT_ROUTE,
UPDATE_STORED_AGENT_ROUTE,
DELETE_STORED_AGENT_ROUTE,
// ============================================================================
// Agent Versions Routes
// IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE
// routes with path parameters (e.g., /:versionId) to ensure correct matching.
// ============================================================================
LIST_AGENT_VERSIONS_ROUTE,
CREATE_AGENT_VERSION_ROUTE,
COMPARE_AGENT_VERSIONS_ROUTE,
// Must be before GET_AGENT_VERSION_ROUTE
GET_AGENT_VERSION_ROUTE,
ACTIVATE_AGENT_VERSION_ROUTE,
RESTORE_AGENT_VERSION_ROUTE,
DELETE_AGENT_VERSION_ROUTE,
// ============================================================================
// Favorites (EE)
// ============================================================================
FAVORITE_STORED_AGENT_ROUTE,
UNFAVORITE_STORED_AGENT_ROUTE
];
// src/server/server-adapter/routes/stored-mcp-clients.ts
var STORED_MCP_CLIENTS_ROUTES = [
// Stored MCP Clients CRUD Routes
LIST_STORED_MCP_CLIENTS_ROUTE,
GET_STORED_MCP_CLIENT_ROUTE,
CREATE_STORED_MCP_CLIENT_ROUTE,
UPDATE_STORED_MCP_CLIENT_ROUTE,
DELETE_STORED_MCP_CLIENT_ROUTE,
// MCP Client Versions Routes
// IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE
// routes with path parameters (e.g., /:versionId) to ensure correct matching.
LIST_MCP_CLIENT_VERSIONS_ROUTE,
CREATE_MCP_CLIENT_VERSION_ROUTE,
COMPARE_MCP_CLIENT_VERSIONS_ROUTE,
GET_MCP_CLIENT_VERSION_ROUTE,
ACTIVATE_MCP_CLIENT_VERSION_ROUTE,
RESTORE_MCP_CLIENT_VERSION_ROUTE,
DELETE_MCP_CLIENT_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-prompt-blocks.ts
var STORED_PROMPT_BLOCKS_ROUTES = [
// Stored Prompt Blocks CRUD Routes
LIST_STORED_PROMPT_BLOCKS_ROUTE,
GET_STORED_PROMPT_BLOCK_ROUTE,
CREATE_STORED_PROMPT_BLOCK_ROUTE,
UPDATE_STORED_PROMPT_BLOCK_ROUTE,
DELETE_STORED_PROMPT_BLOCK_ROUTE,
// Prompt Block Versions Routes
// IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE
// routes with path parameters (e.g., /:versionId) to ensure correct matching.
LIST_PROMPT_BLOCK_VERSIONS_ROUTE,
CREATE_PROMPT_BLOCK_VERSION_ROUTE,
COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE,
GET_PROMPT_BLOCK_VERSION_ROUTE,
ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE,
RESTORE_PROMPT_BLOCK_VERSION_ROUTE,
DELETE_PROMPT_BLOCK_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-scorers.ts
var STORED_SCORERS_ROUTES = [
// Stored Scorers CRUD Routes
LIST_STORED_SCORERS_ROUTE,
GET_STORED_SCORER_ROUTE,
CREATE_STORED_SCORER_ROUTE,
UPDATE_STORED_SCORER_ROUTE,
DELETE_STORED_SCORER_ROUTE,
// Scorer Versions Routes
// IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE
// routes with path parameters (e.g., /:versionId) to ensure correct matching.
LIST_SCORER_VERSIONS_ROUTE,
CREATE_SCORER_VERSION_ROUTE,
COMPARE_SCORER_VERSIONS_ROUTE,
GET_SCORER_VERSION_ROUTE,
ACTIVATE_SCORER_VERSION_ROUTE,
RESTORE_SCORER_VERSION_ROUTE,
DELETE_SCORER_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-skills.ts
var STORED_SKILLS_ROUTES = [
// Stored Skills CRUD Routes
LIST_STORED_SKILLS_ROUTE,
GET_STORED_SKILL_ROUTE,
CREATE_STORED_SKILL_ROUTE,
UPDATE_STORED_SKILL_ROUTE,
DELETE_STORED_SKILL_ROUTE,
// Publish
PUBLISH_STORED_SKILL_ROUTE,
// Favorites (EE)
FAVORITE_STORED_SKILL_ROUTE,
UNFAVORITE_STORED_SKILL_ROUTE
];
// src/server/server-adapter/routes/stored-workspaces.ts
var STORED_WORKSPACES_ROUTES = [
// Stored Workspaces CRUD Routes
LIST_STORED_WORKSPACES_ROUTE,
GET_STORED_WORKSPACE_ROUTE,
CREATE_STORED_WORKSPACE_ROUTE,
UPDATE_STORED_WORKSPACE_ROUTE,
DELETE_STORED_WORKSPACE_ROUTE
];
// src/server/server-adapter/routes/system.ts
var SYSTEM_ROUTES = [GET_SYSTEM_PACKAGES_ROUTE, GET_API_SCHEMA_ROUTE];
// src/server/server-adapter/routes/tool-providers.ts
var TOOL_PROVIDER_ROUTES = [
LIST_TOOL_PROVIDERS_ROUTE,
LIST_TOOL_PROVIDER_TOOLKITS_ROUTE,
LIST_TOOL_PROVIDER_TOOLS_ROUTE,
GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE,
AUTHORIZE_TOOL_PROVIDER_ROUTE,
GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE,
TOOL_PROVIDER_CONNECTION_STATUS_ROUTE,
LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE,
LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE,
DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE,
UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE,
GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE,
GET_TOOL_PROVIDER_HEALTH_ROUTE
];
// src/server/server-adapter/routes/tools.ts
var TOOLS_ROUTES = [LIST_TOOLS_ROUTE, GET_TOOL_BY_ID_ROUTE, EXECUTE_TOOL_ROUTE];
// src/server/server-adapter/routes/vectors.ts
var VECTORS_ROUTES = [
UPSERT_VECTORS_ROUTE,
CREATE_INDEX_ROUTE,
QUERY_VECTORS_ROUTE,
LIST_INDEXES_ROUTE,
DESCRIBE_INDEX_ROUTE,
DELETE_INDEX_ROUTE,
LIST_VECTORS_ROUTE,
LIST_EMBEDDERS_ROUTE
];
// src/server/server-adapter/routes/workflows.ts
var WORKFLOWS_ROUTES = [
LIST_WORKFLOWS_ROUTE,
GET_WORKFLOW_BY_ID_ROUTE,
LIST_WORKFLOW_RUNS_ROUTE,
GET_WORKFLOW_RUN_BY_ID_ROUTE,
DELETE_WORKFLOW_RUN_BY_ID_ROUTE,
CREATE_WORKFLOW_RUN_ROUTE,
STREAM_WORKFLOW_ROUTE,
RESUME_STREAM_WORKFLOW_ROUTE,
START_ASYNC_WORKFLOW_ROUTE,
START_WORKFLOW_RUN_ROUTE,
OBSERVE_STREAM_WORKFLOW_ROUTE,
RESUME_ASYNC_WORKFLOW_ROUTE,
RESUME_NO_WAIT_WORKFLOW_ROUTE,
RESUME_WORKFLOW_ROUTE,
CANCEL_WORKFLOW_RUN_ROUTE,
TIME_TRAVEL_WORKFLOW_ROUTE,
TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,
TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,
RESTART_WORKFLOW_ROUTE,
RESTART_ASYNC_WORKFLOW_ROUTE,
RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,
RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,
EXECUTE_WORKFLOW_STEP_ROUTE,
RECEIVE_WORKFLOW_EVENT_ROUTE
];
// src/server/server-adapter/routes/workspace.ts
var WORKSPACE_ROUTES = [
// List all workspaces route (at /api/workspaces)
LIST_WORKSPACES_ROUTE,
// Get workspace route (at /api/workspaces/:workspaceId)
GET_WORKSPACE_ROUTE,
// Filesystem routes (at /api/workspaces/:workspaceId/fs/*)
...WORKSPACE_FS_ROUTES,
// Search routes (at /api/workspaces/:workspaceId/search, /api/workspaces/:workspaceId/index)
...WORKSPACE_SEARCH_ROUTES,
// Skills routes (search must come before parameterized routes)
...WORKSPACE_SKILLS_ROUTES,
// skills.sh proxy routes (at /api/workspaces/:workspaceId/skills-sh/*)
...WORKSPACE_SKILLS_SH_ROUTES
];
// src/server/server-adapter/routes/index.ts
var SERVER_ROUTES = [
...AGENTS_ROUTES,
...AUTH_ROUTES,
...WORKFLOWS_ROUTES,
...TOOLS_ROUTES,
...PROCESSORS_ROUTES,
...RESPONSES_ROUTES,
...CONVERSATIONS_ROUTES,
...MEMORY_ROUTES,
...SCORES_ROUTES,
...OBSERVABILITY_ROUTES,
...LOGS_ROUTES,
...VECTORS_ROUTES,
...A2A_ROUTES,
...WORKSPACE_ROUTES,
...LEGACY_ROUTES,
...MCP_ROUTES,
...STORED_AGENTS_ROUTES,
...STORED_MCP_CLIENTS_ROUTES,
...STORED_PROMPT_BLOCKS_ROUTES,
...STORED_SCORERS_ROUTES,
...STORED_WORKSPACES_ROUTES,
...STORED_SKILLS_ROUTES,
...TOOL_PROVIDER_ROUTES,
...PROCESSOR_PROVIDER_ROUTES,
...SYSTEM_ROUTES,
...DATASETS_ROUTES,
...BACKGROUND_TASK_ROUTES,
...EDITOR_BUILDER_ROUTES,
...AGENT_BUILDER_ROUTES,
...SCHEDULES_ROUTES,
...CHANNELS_ROUTES,
...AGENT_CONTROLLER_ROUTES
];
export { SERVER_ROUTES, deriveAction, derivePermission, extractResource, getEffectivePermission };
//# sourceMappingURL=chunk-UOOEGODJ.js.map
//# sourceMappingURL=chunk-UOOEGODJ.js.map

Sorry, the diff of this file is too big to display

'use strict';
var chunkOEN2YIF2_cjs = require('./chunk-OEN2YIF2.cjs');
var chunk2XZ2466F_cjs = require('./chunk-2XZ2466F.cjs');
var chunk3JVOIOO6_cjs = require('./chunk-3JVOIOO6.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
// src/server/handlers/stored-scorers.ts
var SCORER_SNAPSHOT_CONFIG_FIELDS = [
"name",
"description",
"type",
"model",
"instructions",
"scoreRange",
"presetConfig",
"defaultSampling"
];
var LIST_STORED_SCORERS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/scorers",
responseType: "json",
queryParamSchema: chunkOEN2YIF2_cjs.listStoredScorersQuerySchema,
responseSchema: chunkOEN2YIF2_cjs.listStoredScorersResponseSchema,
summary: "List stored scorer definitions",
description: "Returns a paginated list of all scorer definitions stored in the database",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({ mastra, page, perPage, orderBy, status, authorId, metadata, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scope = await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext);
const result = await scorerStore.listResolved({
page,
perPage,
orderBy,
status,
authorId,
metadata: chunkEVOVAWN6_cjs.scopeStoredResourceMetadata(metadata, scope)
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing stored scorer definitions");
}
}
});
var GET_STORED_SCORER_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/scorers/:storedScorerId",
responseType: "json",
pathParamSchema: chunkOEN2YIF2_cjs.storedScorerIdPathParams,
queryParamSchema: chunk3JVOIOO6_cjs.statusQuerySchema,
responseSchema: chunkOEN2YIF2_cjs.getStoredScorerResponseSchema,
summary: "Get stored scorer definition by ID",
description: "Returns a specific scorer definition from storage by its unique identifier. Use ?status=draft to resolve with the latest (draft) version, or ?status=published (default) for the active published version.",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({ mastra, storedScorerId, status, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const scorer = await scorerStore.getByIdResolved(storedScorerId, { status });
if (!scorer) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(scorer, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
return scorer;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting stored scorer definition");
}
}
});
var CREATE_STORED_SCORER_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/scorers",
responseType: "json",
bodySchema: chunkOEN2YIF2_cjs.createStoredScorerBodySchema,
responseSchema: chunkOEN2YIF2_cjs.createStoredScorerResponseSchema,
summary: "Create stored scorer definition",
description: "Creates a new scorer definition in storage with the provided configuration",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({
mastra,
id: providedId,
authorId,
metadata,
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling,
requestContext
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const id = providedId || chunkEVOVAWN6_cjs.toSlug(name);
if (!id) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "Could not derive scorer definition ID from name. Please provide an explicit id."
});
}
const existing = await scorerStore.getById(id);
if (existing) {
throw new chunk64ITUOXI_cjs.HTTPException(409, { message: `Scorer definition with id ${id} already exists` });
}
await scorerStore.create({
scorerDefinition: {
id,
authorId,
metadata: chunkEVOVAWN6_cjs.scopeStoredResourceMetadata(metadata, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext)),
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling
}
});
const resolved = await scorerStore.getByIdResolved(id, { status: "draft" });
if (!resolved) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to resolve created scorer definition" });
}
return resolved;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating stored scorer definition");
}
}
});
var UPDATE_STORED_SCORER_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "PATCH",
path: "/stored/scorers/:storedScorerId",
responseType: "json",
pathParamSchema: chunkOEN2YIF2_cjs.storedScorerIdPathParams,
bodySchema: chunkOEN2YIF2_cjs.updateStoredScorerBodySchema,
responseSchema: chunkOEN2YIF2_cjs.updateStoredScorerResponseSchema,
summary: "Update stored scorer definition",
description: "Updates an existing scorer definition in storage with the provided fields",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({
mastra,
storedScorerId,
// Metadata-level fields
authorId,
metadata,
// Config fields (snapshot-level)
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling,
requestContext
}) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const existing = await scorerStore.getById(storedScorerId);
if (!existing) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });
}
const scope = await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext);
chunkEVOVAWN6_cjs.assertStoredResourceScope(existing, scope);
const scopedMetadata = metadata !== void 0 ? chunkEVOVAWN6_cjs.scopeStoredResourceMetadata({ ...existing.metadata ?? {}, ...metadata }, scope) : void 0;
const updatedScorer = await scorerStore.update({
id: storedScorerId,
authorId,
...scopedMetadata !== void 0 ? { metadata: scopedMetadata } : {},
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling
});
const configFields = {
name,
description,
type,
model,
instructions,
scoreRange,
presetConfig,
defaultSampling
};
const providedConfigFields = Object.fromEntries(Object.entries(configFields).filter(([_, v]) => v !== void 0));
await chunk2XZ2466F_cjs.handleAutoVersioning(
scorerStore,
storedScorerId,
"scorerDefinitionId",
SCORER_SNAPSHOT_CONFIG_FIELDS,
existing,
updatedScorer,
providedConfigFields
);
const editor = mastra.getEditor();
if (editor) {
editor.scorer.clearCache(storedScorerId);
}
const resolved = await scorerStore.getByIdResolved(storedScorerId, { status: "draft" });
if (!resolved) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to resolve updated scorer definition" });
}
return resolved;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error updating stored scorer definition");
}
}
});
var DELETE_STORED_SCORER_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/stored/scorers/:storedScorerId",
responseType: "json",
pathParamSchema: chunkOEN2YIF2_cjs.storedScorerIdPathParams,
responseSchema: chunkOEN2YIF2_cjs.deleteStoredScorerResponseSchema,
summary: "Delete stored scorer definition",
description: "Deletes a scorer definition from storage by its unique identifier",
tags: ["Stored Scorers"],
requiresAuth: true,
handler: async ({ mastra, storedScorerId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const scorerStore = await storage.getStore("scorerDefinitions");
if (!scorerStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Scorer definitions storage domain is not available" });
}
const existing = await scorerStore.getById(storedScorerId);
if (!existing) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(existing, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
await scorerStore.delete(storedScorerId);
mastra.getEditor()?.scorer.clearCache(storedScorerId);
return { success: true, message: `Scorer definition ${storedScorerId} deleted successfully` };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error deleting stored scorer definition");
}
}
});
exports.CREATE_STORED_SCORER_ROUTE = CREATE_STORED_SCORER_ROUTE;
exports.DELETE_STORED_SCORER_ROUTE = DELETE_STORED_SCORER_ROUTE;
exports.GET_STORED_SCORER_ROUTE = GET_STORED_SCORER_ROUTE;
exports.LIST_STORED_SCORERS_ROUTE = LIST_STORED_SCORERS_ROUTE;
exports.UPDATE_STORED_SCORER_ROUTE = UPDATE_STORED_SCORER_ROUTE;
//# sourceMappingURL=chunk-V3HBNBLU.cjs.map
//# sourceMappingURL=chunk-V3HBNBLU.cjs.map
{"version":3,"sources":["../src/server/handlers/stored-scorers.ts"],"names":["createRoute","listStoredScorersQuerySchema","listStoredScorersResponseSchema","HTTPException","getStoredResourceScope","scopeStoredResourceMetadata","handleError","storedScorerIdPathParams","statusQuerySchema","getStoredScorerResponseSchema","assertStoredResourceScope","createStoredScorerBodySchema","createStoredScorerResponseSchema","toSlug","updateStoredScorerBodySchema","updateStoredScorerResponseSchema","handleAutoVersioning","deleteStoredScorerResponseSchema"],"mappings":"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","file":"chunk-V3HBNBLU.cjs","sourcesContent":["import { HTTPException } from '../http-exception';\nimport {\n storedScorerIdPathParams,\n statusQuerySchema,\n listStoredScorersQuerySchema,\n createStoredScorerBodySchema,\n updateStoredScorerBodySchema,\n listStoredScorersResponseSchema,\n getStoredScorerResponseSchema,\n createStoredScorerResponseSchema,\n updateStoredScorerResponseSchema,\n deleteStoredScorerResponseSchema,\n} from '../schemas/stored-scorers';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope, scopeStoredResourceMetadata, toSlug } from '../utils';\n\nimport { handleError } from './error';\nimport { handleAutoVersioning } from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\nconst SCORER_SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'type',\n 'model',\n 'instructions',\n 'scoreRange',\n 'presetConfig',\n 'defaultSampling',\n] as const;\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/scorers - List all stored scorer definitions\n */\nexport const LIST_STORED_SCORERS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers',\n responseType: 'json',\n queryParamSchema: listStoredScorersQuerySchema,\n responseSchema: listStoredScorersResponseSchema,\n summary: 'List stored scorer definitions',\n description: 'Returns a paginated list of all scorer definitions stored in the database',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, page, perPage, orderBy, status, authorId, metadata, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scope = await getStoredResourceScope(mastra, requestContext);\n const result = await scorerStore.listResolved({\n page,\n perPage,\n orderBy,\n status,\n authorId,\n metadata: scopeStoredResourceMetadata(metadata, scope),\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing stored scorer definitions');\n }\n },\n});\n\n/**\n * GET /stored/scorers/:storedScorerId - Get a stored scorer definition by ID\n */\nexport const GET_STORED_SCORER_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n queryParamSchema: statusQuerySchema,\n responseSchema: getStoredScorerResponseSchema,\n summary: 'Get stored scorer definition by ID',\n description:\n 'Returns a specific scorer definition from storage by its unique identifier. Use ?status=draft to resolve with the latest (draft) version, or ?status=published (default) for the active published version.',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, storedScorerId, status, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n const scorer = await scorerStore.getByIdResolved(storedScorerId, { status });\n\n if (!scorer) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n assertStoredResourceScope(scorer, await getStoredResourceScope(mastra, requestContext));\n\n return scorer;\n } catch (error) {\n return handleError(error, 'Error getting stored scorer definition');\n }\n },\n});\n\n/**\n * POST /stored/scorers - Create a new stored scorer definition\n */\nexport const CREATE_STORED_SCORER_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/scorers',\n responseType: 'json',\n bodySchema: createStoredScorerBodySchema,\n responseSchema: createStoredScorerResponseSchema,\n summary: 'Create stored scorer definition',\n description: 'Creates a new scorer definition in storage with the provided configuration',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({\n mastra,\n id: providedId,\n authorId,\n metadata,\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n requestContext,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Derive ID from name if not explicitly provided\n const id = providedId || toSlug(name);\n\n if (!id) {\n throw new HTTPException(400, {\n message: 'Could not derive scorer definition ID from name. Please provide an explicit id.',\n });\n }\n\n // Check if scorer definition with this ID already exists\n const existing = await scorerStore.getById(id);\n if (existing) {\n throw new HTTPException(409, { message: `Scorer definition with id ${id} already exists` });\n }\n\n await scorerStore.create({\n scorerDefinition: {\n id,\n authorId,\n metadata: scopeStoredResourceMetadata(metadata, await getStoredResourceScope(mastra, requestContext)),\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n },\n });\n\n // Return the resolved scorer definition (thin record + version config)\n // Use draft status since newly created entities start as drafts\n const resolved = await scorerStore.getByIdResolved(id, { status: 'draft' });\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve created scorer definition' });\n }\n\n return resolved;\n } catch (error) {\n return handleError(error, 'Error creating stored scorer definition');\n }\n },\n});\n\n/**\n * PATCH /stored/scorers/:storedScorerId - Update a stored scorer definition\n */\nexport const UPDATE_STORED_SCORER_ROUTE = createRoute({\n method: 'PATCH',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n bodySchema: updateStoredScorerBodySchema,\n responseSchema: updateStoredScorerResponseSchema,\n summary: 'Update stored scorer definition',\n description: 'Updates an existing scorer definition in storage with the provided fields',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({\n mastra,\n storedScorerId,\n // Metadata-level fields\n authorId,\n metadata,\n // Config fields (snapshot-level)\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n requestContext,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Check if scorer definition exists\n const existing = await scorerStore.getById(storedScorerId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n const scope = await getStoredResourceScope(mastra, requestContext);\n assertStoredResourceScope(existing, scope);\n const scopedMetadata =\n metadata !== undefined\n ? scopeStoredResourceMetadata({ ...(existing.metadata ?? {}), ...metadata }, scope)\n : undefined;\n\n // Update the scorer definition with both metadata-level and config-level fields\n const updatedScorer = await scorerStore.update({\n id: storedScorerId,\n authorId,\n ...(scopedMetadata !== undefined ? { metadata: scopedMetadata } : {}),\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n });\n\n // Build the snapshot config for auto-versioning comparison\n const configFields = {\n name,\n description,\n type,\n model,\n instructions,\n scoreRange,\n presetConfig,\n defaultSampling,\n };\n\n // Filter out undefined values to get only the config fields that were provided\n const providedConfigFields = Object.fromEntries(Object.entries(configFields).filter(([_, v]) => v !== undefined));\n\n // Handle auto-versioning with retry logic for race conditions\n // This creates a new version if there are meaningful config changes.\n // It does NOT update activeVersionId — the version stays as a draft until explicitly published.\n await handleAutoVersioning(\n scorerStore as unknown as VersionedStoreInterface,\n storedScorerId,\n 'scorerDefinitionId',\n SCORER_SNAPSHOT_CONFIG_FIELDS,\n existing,\n updatedScorer,\n providedConfigFields,\n );\n\n // Clear the cached scorer instance so the next request gets the updated config\n const editor = mastra.getEditor();\n if (editor) {\n editor.scorer.clearCache(storedScorerId);\n }\n\n // Return the resolved scorer definition with the latest (draft) version so the UI sees its edits\n const resolved = await scorerStore.getByIdResolved(storedScorerId, { status: 'draft' });\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve updated scorer definition' });\n }\n\n return resolved;\n } catch (error) {\n return handleError(error, 'Error updating stored scorer definition');\n }\n },\n});\n\n/**\n * DELETE /stored/scorers/:storedScorerId - Delete a stored scorer definition\n */\nexport const DELETE_STORED_SCORER_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/scorers/:storedScorerId',\n responseType: 'json',\n pathParamSchema: storedScorerIdPathParams,\n responseSchema: deleteStoredScorerResponseSchema,\n summary: 'Delete stored scorer definition',\n description: 'Deletes a scorer definition from storage by its unique identifier',\n tags: ['Stored Scorers'],\n requiresAuth: true,\n handler: async ({ mastra, storedScorerId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const scorerStore = await storage.getStore('scorerDefinitions');\n if (!scorerStore) {\n throw new HTTPException(500, { message: 'Scorer definitions storage domain is not available' });\n }\n\n // Check if scorer definition exists\n const existing = await scorerStore.getById(storedScorerId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored scorer definition with id ${storedScorerId} not found` });\n }\n assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));\n\n await scorerStore.delete(storedScorerId);\n\n // Clear the cached scorer instance\n mastra.getEditor()?.scorer.clearCache(storedScorerId);\n\n return { success: true, message: `Scorer definition ${storedScorerId} deleted successfully` };\n } catch (error) {\n return handleError(error, 'Error deleting stored scorer definition');\n }\n },\n});\n"]}
import { isBuilderFeatureEnabled } from './chunk-IKIPMMHL.js';
import { getCallerAuthorId } from './chunk-ETR4XOVD.js';
// src/server/handlers/favorites-enrichment.ts
async function prepareFavoritesEnrichment(mastra, requestContext, entityType, entityIds) {
if (!await isBuilderFeatureEnabled(mastra, "favorites")) return null;
const userId = getCallerAuthorId(requestContext);
if (!userId) return null;
const storage = mastra.getStorage();
if (!storage) return null;
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) return null;
const starredIds = entityIds.length === 0 ? /* @__PURE__ */ new Set() : await favoritesStore.isFavoritedBatch({ userId, entityType, entityIds });
return { userId, starredIds, favoritesStore };
}
function stripFavoriteFields(record) {
if ("isFavorited" in record || "favoriteCount" in record) {
const copy = { ...record };
delete copy.isFavorited;
delete copy.favoriteCount;
return copy;
}
return record;
}
async function enrichOrStripFavorites(mastra, requestContext, entityType, record) {
const enrichment = await prepareFavoritesEnrichment(mastra, requestContext, entityType, [record.id]);
if (enrichment) {
return { ...record, isFavorited: enrichment.starredIds.has(record.id) };
}
return stripFavoriteFields(record);
}
export { enrichOrStripFavorites, prepareFavoritesEnrichment, stripFavoriteFields };
//# sourceMappingURL=chunk-VFIZ45BL.js.map
//# sourceMappingURL=chunk-VFIZ45BL.js.map
{"version":3,"sources":["../src/server/handlers/favorites-enrichment.ts"],"names":[],"mappings":";;;;AAyBA,eAAsB,0BAAA,CACpB,MAAA,EACA,cAAA,EACA,UAAA,EACA,SAAA,EACqC;AACrC,EAAA,IAAI,CAAE,MAAM,uBAAA,CAAwB,MAAA,EAAQ,WAAW,GAAI,OAAO,IAAA;AAElE,EAAA,MAAM,MAAA,GAAS,kBAAkB,cAAc,CAAA;AAC/C,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,EAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAClC,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,MAAM,cAAA,GAAiB,MAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA;AACzD,EAAA,IAAI,CAAC,gBAAgB,OAAO,IAAA;AAE5B,EAAA,MAAM,UAAA,GACJ,SAAA,CAAU,MAAA,KAAW,CAAA,uBACb,GAAA,EAAY,GAChB,MAAM,cAAA,CAAe,gBAAA,CAAiB,EAAE,MAAA,EAAQ,UAAA,EAAY,WAAW,CAAA;AAC7E,EAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,cAAA,EAAe;AAC9C;AAMO,SAAS,oBAAsC,MAAA,EAAc;AAClE,EAAA,IAAI,aAAA,IAAiB,MAAA,IAAU,eAAA,IAAmB,MAAA,EAAQ;AACxD,IAAA,MAAM,IAAA,GAAO,EAAE,GAAG,MAAA,EAAO;AACzB,IAAA,OAAO,IAAA,CAAK,WAAA;AACZ,IAAA,OAAO,IAAA,CAAK,aAAA;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AASA,eAAsB,sBAAA,CACpB,MAAA,EACA,cAAA,EACA,UAAA,EACA,MAAA,EACY;AACZ,EAAA,MAAM,UAAA,GAAa,MAAM,0BAAA,CAA2B,MAAA,EAAQ,gBAAgB,UAAA,EAAY,CAAC,MAAA,CAAO,EAAE,CAAC,CAAA;AACnG,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,WAAA,EAAa,WAAW,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,EAAE;AAAA,EACxE;AACA,EAAA,OAAO,oBAAoB,MAAM,CAAA;AACnC","file":"chunk-VFIZ45BL.js","sourcesContent":["import type { Mastra } from '@mastra/core';\nimport type { RequestContext } from '@mastra/core/di';\nimport type { FavoritesStorage, StorageFavoriteEntityType } from '@mastra/core/storage';\n\nimport { getCallerAuthorId } from './authorship';\nimport { isBuilderFeatureEnabled } from './editor-builder';\n\n/**\n * Result of `prepareFavoritesEnrichment` — `null` when the `favorites` EE feature is off.\n * When non-null the caller may use `starredIds` to set `isFavorited` on records\n * and may pass `userId` along to storage list paths for pin-favorited-first\n * sorting (`pinFavoritedFor`).\n */\nexport type FavoritesEnrichmentContext = {\n userId: string;\n starredIds: Set<string>;\n favoritesStore: FavoritesStorage;\n} | null;\n\n/**\n * Resolve the EE feature flag plus the caller's favorited set for a list of\n * candidate entity IDs in one shot. Soft-gated: returns `null` if the feature\n * is off or there's no caller — handlers should drop `isFavorited` / `favoriteCount`\n * fields and ignore `?favoritedOnly=true` in that case.\n */\nexport async function prepareFavoritesEnrichment(\n mastra: Mastra,\n requestContext: RequestContext,\n entityType: StorageFavoriteEntityType,\n entityIds: string[],\n): Promise<FavoritesEnrichmentContext> {\n if (!(await isBuilderFeatureEnabled(mastra, 'favorites'))) return null;\n\n const userId = getCallerAuthorId(requestContext);\n if (!userId) return null;\n\n const storage = mastra.getStorage();\n if (!storage) return null;\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) return null;\n\n const starredIds =\n entityIds.length === 0\n ? new Set<string>()\n : await favoritesStore.isFavoritedBatch({ userId, entityType, entityIds });\n return { userId, starredIds, favoritesStore };\n}\n\n/**\n * Strip the favorites EE fields from a record. Used when the feature is off so\n * stale values from storage do not leak through the API.\n */\nexport function stripFavoriteFields<T extends object>(record: T): T {\n if ('isFavorited' in record || 'favoriteCount' in record) {\n const copy = { ...record } as Record<string, unknown>;\n delete copy.isFavorited;\n delete copy.favoriteCount;\n return copy as T;\n }\n return record;\n}\n\n/**\n * Convenience for single-entity handlers (GET / POST / PATCH): annotate\n * `isFavorited` from the caller's favorites set when enrichment is available,\n * otherwise strip both favorite fields. `favoriteCount` is the canonical\n * mirrored counter and is left in place so callers can render share-count UI\n * (it's identical across viewers).\n */\nexport async function enrichOrStripFavorites<T extends { id: string }>(\n mastra: Mastra,\n requestContext: RequestContext,\n entityType: StorageFavoriteEntityType,\n record: T,\n): Promise<T> {\n const enrichment = await prepareFavoritesEnrichment(mastra, requestContext, entityType, [record.id]);\n if (enrichment) {\n return { ...record, isFavorited: enrichment.starredIds.has(record.id) };\n }\n return stripFavoriteFields(record);\n}\n"]}
import { createListVersionsResponseSchema, createCompareVersionsResponseSchema, activateVersionResponseSchema, compareVersionsQuerySchema, createVersionBodySchema, deleteVersionResponseSchema, listVersionsQuerySchema } from './chunk-FXXHWBF2.js';
import { modelConfigSchema } from './chunk-5HBR27TT.js';
import { z } from 'zod/v4';
var listScorerVersionsQuerySchema = listVersionsQuerySchema;
var compareScorerVersionsQuerySchema = compareVersionsQuerySchema;
var createScorerVersionBodySchema = createVersionBodySchema;
var scorerVersionPathParams = z.object({
scorerId: z.string().describe("Unique identifier for the stored scorer definition")
});
var scorerVersionIdPathParams = z.object({
scorerId: z.string().describe("Unique identifier for the stored scorer definition"),
versionId: z.string().describe("Unique identifier for the version (UUID)")
});
var samplingConfigSchema = z.union([
z.object({ type: z.literal("none") }),
z.object({ type: z.literal("ratio"), rate: z.number().min(0).max(1) })
]);
var scorerTypeEnum = z.enum([
"llm-judge",
"answer-relevancy",
"answer-similarity",
"bias",
"context-precision",
"context-relevance",
"faithfulness",
"hallucination",
"noise-sensitivity",
"prompt-alignment",
"tool-call-accuracy",
"toxicity"
]);
var scorerVersionSchema = z.object({
id: z.string().describe("Unique identifier for the version (UUID)"),
scorerDefinitionId: z.string().describe("ID of the scorer this version belongs to"),
versionNumber: z.number().describe("Sequential version number (1, 2, 3, ...)"),
// Snapshot config fields
name: z.string().describe("Name of the scorer"),
description: z.string().optional().describe("Description of the scorer"),
type: scorerTypeEnum,
model: modelConfigSchema.optional(),
instructions: z.string().optional(),
scoreRange: z.object({
min: z.number().optional(),
max: z.number().optional()
}).optional(),
presetConfig: z.record(z.string(), z.unknown()).optional(),
defaultSampling: samplingConfigSchema.optional(),
// Version metadata
changedFields: z.array(z.string()).optional().describe("Array of field names that changed from the previous version"),
changeMessage: z.string().optional().describe("Optional message describing the changes"),
createdAt: z.coerce.date().describe("When this version was created")
});
var listScorerVersionsResponseSchema = createListVersionsResponseSchema(scorerVersionSchema);
var getScorerVersionResponseSchema = scorerVersionSchema;
var createScorerVersionResponseSchema = scorerVersionSchema.partial().merge(
z.object({
id: z.string(),
scorerDefinitionId: z.string(),
versionNumber: z.number(),
createdAt: z.coerce.date()
})
);
var activateScorerVersionResponseSchema = activateVersionResponseSchema;
var restoreScorerVersionResponseSchema = scorerVersionSchema;
var deleteScorerVersionResponseSchema = deleteVersionResponseSchema;
var compareScorerVersionsResponseSchema = createCompareVersionsResponseSchema(scorerVersionSchema);
export { activateScorerVersionResponseSchema, compareScorerVersionsQuerySchema, compareScorerVersionsResponseSchema, createScorerVersionBodySchema, createScorerVersionResponseSchema, deleteScorerVersionResponseSchema, getScorerVersionResponseSchema, listScorerVersionsQuerySchema, listScorerVersionsResponseSchema, restoreScorerVersionResponseSchema, scorerVersionIdPathParams, scorerVersionPathParams, scorerVersionSchema };
//# sourceMappingURL=chunk-VTD4AE3B.js.map
//# sourceMappingURL=chunk-VTD4AE3B.js.map
{"version":3,"sources":["../src/server/schemas/scorer-versions.ts"],"names":[],"mappings":"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","file":"chunk-VTD4AE3B.js","sourcesContent":["import { z } from 'zod/v4';\nimport { modelConfigSchema } from './stored-agents';\nimport {\n listVersionsQuerySchema,\n compareVersionsQuerySchema,\n createVersionBodySchema,\n activateVersionResponseSchema,\n deleteVersionResponseSchema,\n versionDiffEntrySchema,\n createListVersionsResponseSchema,\n createCompareVersionsResponseSchema,\n} from './version-common';\n\n// Re-export shared schemas under domain-specific names\nexport const listScorerVersionsQuerySchema = listVersionsQuerySchema;\nexport const compareScorerVersionsQuerySchema = compareVersionsQuerySchema;\nexport const createScorerVersionBodySchema = createVersionBodySchema;\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\nexport const scorerVersionPathParams = z.object({\n scorerId: z.string().describe('Unique identifier for the stored scorer definition'),\n});\n\nexport const scorerVersionIdPathParams = z.object({\n scorerId: z.string().describe('Unique identifier for the stored scorer definition'),\n versionId: z.string().describe('Unique identifier for the version (UUID)'),\n});\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\nconst samplingConfigSchema = z.union([\n z.object({ type: z.literal('none') }),\n z.object({ type: z.literal('ratio'), rate: z.number().min(0).max(1) }),\n]);\n\nconst scorerTypeEnum = z.enum([\n 'llm-judge',\n 'answer-relevancy',\n 'answer-similarity',\n 'bias',\n 'context-precision',\n 'context-relevance',\n 'faithfulness',\n 'hallucination',\n 'noise-sensitivity',\n 'prompt-alignment',\n 'tool-call-accuracy',\n 'toxicity',\n]);\n\nexport const scorerVersionSchema = z.object({\n id: z.string().describe('Unique identifier for the version (UUID)'),\n scorerDefinitionId: z.string().describe('ID of the scorer this version belongs to'),\n versionNumber: z.number().describe('Sequential version number (1, 2, 3, ...)'),\n // Snapshot config fields\n name: z.string().describe('Name of the scorer'),\n description: z.string().optional().describe('Description of the scorer'),\n type: scorerTypeEnum,\n model: modelConfigSchema.optional(),\n instructions: z.string().optional(),\n scoreRange: z\n .object({\n min: z.number().optional(),\n max: z.number().optional(),\n })\n .optional(),\n presetConfig: z.record(z.string(), z.unknown()).optional(),\n defaultSampling: samplingConfigSchema.optional(),\n // Version metadata\n changedFields: z.array(z.string()).optional().describe('Array of field names that changed from the previous version'),\n changeMessage: z.string().optional().describe('Optional message describing the changes'),\n createdAt: z.coerce.date().describe('When this version was created'),\n});\n\nexport const listScorerVersionsResponseSchema = createListVersionsResponseSchema(scorerVersionSchema);\n\nexport const getScorerVersionResponseSchema = scorerVersionSchema;\n\nexport const createScorerVersionResponseSchema = scorerVersionSchema.partial().merge(\n z.object({\n id: z.string(),\n scorerDefinitionId: z.string(),\n versionNumber: z.number(),\n createdAt: z.coerce.date(),\n }),\n);\n\nexport const activateScorerVersionResponseSchema = activateVersionResponseSchema;\n\nexport const restoreScorerVersionResponseSchema = scorerVersionSchema;\n\nexport const deleteScorerVersionResponseSchema = deleteVersionResponseSchema;\n\nexport const compareScorerVersionsResponseSchema = createCompareVersionsResponseSchema(scorerVersionSchema);\n\nexport { versionDiffEntrySchema };\n"]}

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

'use strict';
var chunk42WZN6MM_cjs = require('./chunk-42WZN6MM.cjs');
var chunkF3HP5HM6_cjs = require('./chunk-F3HP5HM6.cjs');
var chunkOFF7L43B_cjs = require('./chunk-OFF7L43B.cjs');
var chunkW243A6ZK_cjs = require('./chunk-W243A6ZK.cjs');
var chunkQQJHGSB2_cjs = require('./chunk-QQJHGSB2.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
var crypto = require('crypto');
// src/server/handlers/responses.ts
var responses_exports = {};
chunkO7I5CWRX_cjs.__export(responses_exports, {
CREATE_RESPONSE_ROUTE: () => CREATE_RESPONSE_ROUTE,
DELETE_RESPONSE_ROUTE: () => DELETE_RESPONSE_ROUTE,
GET_RESPONSE_ROUTE: () => GET_RESPONSE_ROUTE
});
var JSON_OBJECT_RESPONSE_SCHEMA = {
type: "object",
additionalProperties: true
};
function jsonResponse(data, status = 200) {
return new Response(JSON.stringify(data), {
status,
headers: {
"Content-Type": "application/json"
}
});
}
function createStructuredOutput(text) {
if (!text) {
return void 0;
}
switch (text.format.type) {
case "json_object":
return {
schema: JSON_OBJECT_RESPONSE_SCHEMA,
jsonPromptInjection: true
};
case "json_schema":
return {
schema: text.format.schema
};
default:
return void 0;
}
}
function getStreamedMessageOutputItem(response, responseId) {
return response.output.find(
(item) => item.type === "message" && item.id === responseId
) ?? null;
}
async function resolveThreadExecutionContext({
agent,
store,
conversationId,
previousResponseTurnRecord,
requestContext
}) {
if (conversationId && previousResponseTurnRecord && previousResponseTurnRecord.thread.id !== conversationId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "conversation_id and previous_response_id must reference the same conversation thread when both are provided"
});
}
if (previousResponseTurnRecord) {
return {
threadId: previousResponseTurnRecord.thread.id,
resourceId: previousResponseTurnRecord.thread.resourceId
};
}
const effectiveThreadId = chunkQQJHGSB2_cjs.getEffectiveThreadId(requestContext, void 0);
const effectiveResourceId = chunkQQJHGSB2_cjs.getEffectiveResourceId(requestContext, void 0);
if (!store && !conversationId && !effectiveThreadId) {
return null;
}
const memory = await agent.getMemory({ requestContext });
if (!memory) {
if (conversationId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "conversation_id requires the target agent to have memory configured"
});
}
return null;
}
if (conversationId) {
const existingThread2 = await memory.getThreadById({ threadId: conversationId });
if (!existingThread2) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Conversation ${conversationId} was not found` });
}
await chunkQQJHGSB2_cjs.enforceThreadAccess({
mastra: agent.getMastraInstance(),
requestContext,
threadId: conversationId,
thread: existingThread2,
effectiveResourceId
});
return {
threadId: existingThread2.id,
resourceId: effectiveResourceId ?? existingThread2.resourceId
};
}
if (!effectiveThreadId) {
if (!store) {
return null;
}
const threadId2 = crypto.randomUUID();
const createdThread2 = await memory.createThread({
threadId: threadId2,
resourceId: effectiveResourceId ?? threadId2
});
return {
threadId: createdThread2.id,
resourceId: createdThread2.resourceId
};
}
const threadId = effectiveThreadId;
const existingThread = await memory.getThreadById({ threadId });
if (existingThread) {
await chunkQQJHGSB2_cjs.enforceThreadAccess({
mastra: agent.getMastraInstance(),
requestContext,
threadId,
thread: existingThread,
effectiveResourceId
});
return {
threadId: existingThread.id,
resourceId: effectiveResourceId ?? existingThread.resourceId
};
}
if (!store) {
return null;
}
const resourceId = effectiveResourceId ?? threadId;
const createdThread = await memory.createThread({
threadId,
resourceId
});
return {
threadId: createdThread.id,
resourceId: createdThread.resourceId
};
}
function createExecutionMemory(threadContext) {
if (!threadContext) {
return void 0;
}
return {
memory: {
thread: threadContext.threadId,
resource: threadContext.resourceId
}
};
}
async function resolveResponseAgent({
mastra,
agentId
}) {
if (!agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "Responses requests require an agent_id"
});
}
if (!mastra) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Mastra instance is required for agent-backed responses" });
}
return chunkW243A6ZK_cjs.getAgentFromSystem({ mastra, agentId });
}
async function resolveAgentMemoryStore({
agent,
requestContext,
errorMessage
}) {
const agentMemoryStore = await chunkOFF7L43B_cjs.getAgentMemoryStore({ agent, requestContext });
if (!agentMemoryStore) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: errorMessage });
}
return agentMemoryStore;
}
async function executeGenerate({
agent,
resolvedModel,
modelOverride,
instructions,
text,
providerOptions,
input,
requestContext,
abortSignal,
threadContext
}) {
const executionMemory = createExecutionMemory(threadContext);
const structuredOutput = createStructuredOutput(text);
const modelOption = modelOverride ? { model: modelOverride } : {};
const commonOptions = {
instructions,
requestContext,
abortSignal,
...modelOption,
structuredOutput,
providerOptions,
...executionMemory ?? {}
};
if (resolvedModel.specificationVersion === "v1") {
if (threadContext) {
return await agent.generateLegacy(input, {
instructions,
requestContext,
abortSignal,
...modelOption,
output: structuredOutput?.schema,
providerOptions,
resourceId: threadContext.resourceId,
threadId: threadContext.threadId
});
}
return await agent.generateLegacy(input, {
instructions,
requestContext,
abortSignal,
...modelOption,
output: structuredOutput?.schema,
providerOptions
});
}
return await agent.generate(input, commonOptions);
}
async function executeStream({
agent,
resolvedModel,
modelOverride,
instructions,
text,
providerOptions,
input,
requestContext,
abortSignal,
threadContext
}) {
const executionMemory = createExecutionMemory(threadContext);
const structuredOutput = createStructuredOutput(text);
const modelOption = modelOverride ? { model: modelOverride } : {};
const commonOptions = {
instructions,
requestContext,
abortSignal,
...modelOption,
structuredOutput,
providerOptions,
...executionMemory ?? {}
};
if (resolvedModel.specificationVersion === "v1") {
if (threadContext) {
return await agent.streamLegacy(input, {
instructions,
requestContext,
abortSignal,
...modelOption,
output: structuredOutput?.schema,
providerOptions,
resourceId: threadContext.resourceId,
threadId: threadContext.threadId
});
}
return await agent.streamLegacy(input, {
instructions,
requestContext,
abortSignal,
...modelOption,
output: structuredOutput?.schema,
providerOptions
});
}
return await agent.stream(input, commonOptions);
}
async function resolveUsage(result) {
return await (result.totalUsage ?? result.usage ?? null);
}
async function resolveProviderMetadata(result) {
return await (result.providerMetadata ?? void 0);
}
async function resolveFinishReason(result) {
return await result.finishReason ?? void 0;
}
async function resolveText(result) {
return await result.text ?? "";
}
async function resolveCompletedResponseState(result, fallbackText) {
const usage = await resolveUsage(result);
return {
completedAt: Math.floor(Date.now() / 1e3),
status: chunkF3HP5HM6_cjs.toResponseStatus(await resolveFinishReason(result)),
text: await resolveText(result) || fallbackText,
usage,
usageDetails: chunkF3HP5HM6_cjs.toResponseUsage(usage),
providerOptions: await resolveProviderMetadata(result)
};
}
async function storeCompletedResponse({
agentMemoryStore,
didStore,
threadContext,
responseId,
metadata,
completedState,
messages,
outputItems
}) {
if (!didStore || !threadContext) {
return;
}
await chunkOFF7L43B_cjs.persistResponseTurnRecord({
memoryStore: agentMemoryStore,
responseId,
metadata: {
...metadata,
completedAt: completedState.completedAt,
status: completedState.status,
usage: completedState.usageDetails,
providerOptions: completedState.providerOptions,
messageIds: [],
outputItems
},
threadContext,
messages
});
}
async function finalizeResponse({
agentMemoryStore,
didStore,
threadContext,
result,
responseId,
createdAt,
model,
instructions,
previousResponseId,
conversationId,
configuredTools,
responseMetadata,
fallbackText,
fallbackOutputItems
}) {
const completedState = await resolveCompletedResponseState(result, fallbackText);
const fallbackItems = fallbackOutputItems?.(completedState);
const responseMessages = await chunkOFF7L43B_cjs.resolveResponseTurnMessagesForStorage({
result,
responseId,
text: completedState.text,
threadContext,
fallbackOutputItems: threadContext ? fallbackItems : void 0
});
const response = chunkF3HP5HM6_cjs.buildCompletedResponse({
responseId,
outputMessageId: responseId,
model,
createdAt,
completedAt: completedState.completedAt,
status: completedState.status,
text: completedState.text,
usage: completedState.usage,
instructions,
textConfig: responseMetadata.text,
previousResponseId,
conversationId,
providerOptions: completedState.providerOptions,
tools: configuredTools,
messages: responseMessages,
fallbackOutputItems: fallbackItems,
store: didStore
});
await storeCompletedResponse({
agentMemoryStore,
didStore,
threadContext,
responseId,
metadata: responseMetadata,
completedState,
messages: responseMessages,
outputItems: response.output
});
return { completedState, response, responseMessages };
}
async function prepareCreateResponseRequest({
body,
mastra,
requestContext
}) {
const executionInput = chunkF3HP5HM6_cjs.mapResponseInputToExecutionMessages(body.input);
let previousResponseTurnRecord = null;
let resolvedAgent = null;
if (body.previous_response_id) {
if (body.agent_id) {
resolvedAgent = await resolveResponseAgent({ mastra, agentId: body.agent_id });
previousResponseTurnRecord = await chunkOFF7L43B_cjs.findResponseTurnRecord({
agent: resolvedAgent,
responseId: body.previous_response_id,
requestContext
});
if (!previousResponseTurnRecord) {
const owningResponseTurnRecord = await chunkOFF7L43B_cjs.findResponseTurnRecordAcrossAgents({
mastra,
responseId: body.previous_response_id,
requestContext
});
if (owningResponseTurnRecord) {
if (owningResponseTurnRecord.metadata.agentId === body.agent_id) {
previousResponseTurnRecord = owningResponseTurnRecord;
} else {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: `Stored response ${body.previous_response_id} belongs to agent ${owningResponseTurnRecord.metadata.agentId}, not ${body.agent_id}`
});
}
}
if (!previousResponseTurnRecord) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored response ${body.previous_response_id} was not found` });
}
}
} else {
if (!mastra) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Mastra instance is required for agent-backed responses" });
}
previousResponseTurnRecord = await chunkOFF7L43B_cjs.findResponseTurnRecordAcrossAgents({
mastra,
responseId: body.previous_response_id,
requestContext
});
if (!previousResponseTurnRecord) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored response ${body.previous_response_id} was not found` });
}
}
}
const agent = resolvedAgent ?? await resolveResponseAgent({
mastra,
agentId: body.agent_id ?? previousResponseTurnRecord?.metadata.agentId
});
const resolvedModel = await agent.getModel({
requestContext,
modelConfig: body.model
});
const responseModel = body.model ?? (() => {
if (resolvedModel.provider && resolvedModel.modelId) {
const publicProviderId = resolvedModel.provider.includes(".") ? resolvedModel.provider.split(".")[0] : resolvedModel.provider;
return `${publicProviderId}/${resolvedModel.modelId}`;
}
if (resolvedModel.modelId) {
return resolvedModel.modelId;
}
throw new chunk64ITUOXI_cjs.HTTPException(500, {
message: "Responses route could not determine the effective model for this request"
});
})();
const shouldStore = body.store ?? false;
const needsMemoryStore = shouldStore || Boolean(body.conversation_id) || Boolean(body.previous_response_id);
const agentMemoryStore = needsMemoryStore ? await resolveAgentMemoryStore({
agent,
requestContext,
errorMessage: body.previous_response_id ? "previous_response_id requires the target agent to have memory storage configured" : shouldStore ? "Stored responses require the target agent to have memory storage configured" : "conversation_id requires the target agent to have memory storage configured"
}) : null;
const configuredTools = chunkF3HP5HM6_cjs.mapMastraToolsToResponseTools(
await Promise.resolve(agent.listTools({ requestContext }))
);
const responseId = chunkF3HP5HM6_cjs.createMessageId();
const createdAt = Math.floor(Date.now() / 1e3);
const threadContext = await resolveThreadExecutionContext({
agent,
store: shouldStore,
conversationId: body.conversation_id,
previousResponseTurnRecord,
requestContext
});
if (shouldStore && !threadContext) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "Stored responses require the target agent to have memory configured"
});
}
const didStore = shouldStore && Boolean(threadContext);
return {
agent,
agentMemoryStore,
configuredTools,
createdAt,
didStore,
executionInput,
previousResponseTurnRecord,
resolvedModel,
responseId,
responseModel,
responseMetadata: {
agentId: agent.id,
model: responseModel,
createdAt,
instructions: body.instructions,
text: body.text,
previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,
tools: configuredTools,
store: didStore
},
threadContext
};
}
function createResponseEventStream({
agentMemoryStore,
body,
configuredTools,
createdAt,
didStore,
previousResponseTurnRecord,
responseId,
responseModel,
responseMetadata,
streamResult,
threadContext
}) {
const createdResponse = chunkF3HP5HM6_cjs.buildInProgressResponse({
responseId,
model: responseModel,
createdAt,
instructions: body.instructions,
textConfig: body.text,
previousResponseId: body.previous_response_id,
conversationId: threadContext?.threadId ?? body.conversation_id,
tools: configuredTools,
store: didStore
});
return new ReadableStream({
async start(controller) {
let sequenceNumber = 1;
const enqueueEvent = (eventName, payload) => {
controller.enqueue(
chunkF3HP5HM6_cjs.formatSseEvent(eventName, {
...payload,
sequence_number: sequenceNumber++
})
);
};
enqueueEvent("response.created", {
type: "response.created",
response: createdResponse
});
enqueueEvent("response.in_progress", {
type: "response.in_progress",
response: createdResponse
});
const streamEvents = chunkF3HP5HM6_cjs.createResponseStreamEventTranslator(responseId);
const fullStream = await streamResult.fullStream;
const reader = fullStream.getReader();
try {
while (true) {
const { done, value } = await reader.read();
if (done) {
break;
}
for (const event of streamEvents.consume(value)) {
enqueueEvent(event.event, event.payload);
}
}
for (const event of streamEvents.flushPendingToolResults()) {
enqueueEvent(event.event, event.payload);
}
const { completedState, response } = await finalizeResponse({
agentMemoryStore,
didStore,
threadContext,
result: streamResult,
responseId,
createdAt,
model: responseModel,
instructions: body.instructions,
previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,
conversationId: threadContext?.threadId ?? body.conversation_id,
configuredTools,
responseMetadata,
fallbackText: streamEvents.text,
fallbackOutputItems: (completedState2) => streamEvents.getOutputItems({
text: completedState2.text,
status: completedState2.status
})
});
const completedItem = getStreamedMessageOutputItem(response, responseId);
if (completedItem || completedState.text) {
for (const event of streamEvents.completeText(
completedState.text,
completedItem ?? {
id: responseId,
type: "message",
role: "assistant",
status: "completed",
content: [chunkF3HP5HM6_cjs.createOutputTextPart(completedState.text)]
}
)) {
enqueueEvent(event.event, event.payload);
}
}
enqueueEvent("response.completed", {
type: "response.completed",
response
});
controller.close();
} catch (error) {
controller.error(error);
} finally {
reader.releaseLock();
}
}
});
}
var CREATE_RESPONSE_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/v1/responses",
responseType: "datastream-response",
bodySchema: chunk42WZN6MM_cjs.createResponseBodySchema,
responseSchema: chunk42WZN6MM_cjs.responseObjectSchema,
summary: "Create a response",
description: "Creates a response through a Mastra-hosted Responses API-compatible route",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunkQQJHGSB2_cjs.MastraFGAPermissions.AGENTS_EXECUTE,
handler: async ({ mastra, requestContext, abortSignal, ...body }) => {
try {
const {
agent,
agentMemoryStore,
configuredTools,
createdAt,
didStore,
executionInput,
previousResponseTurnRecord,
resolvedModel,
responseId,
responseModel,
responseMetadata,
threadContext
} = await prepareCreateResponseRequest({ body, mastra, requestContext });
if (!body.stream) {
const result = await executeGenerate({
agent,
resolvedModel,
modelOverride: body.model,
instructions: body.instructions,
text: body.text,
providerOptions: body.providerOptions,
input: executionInput,
requestContext,
abortSignal,
threadContext
});
const { response } = await finalizeResponse({
agentMemoryStore,
didStore,
threadContext,
result,
responseId,
createdAt,
model: responseModel,
instructions: body.instructions,
previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,
conversationId: threadContext?.threadId ?? body.conversation_id,
configuredTools,
responseMetadata,
fallbackText: ""
});
return jsonResponse(response);
}
const streamResult = await executeStream({
agent,
resolvedModel,
modelOverride: body.model,
instructions: body.instructions,
text: body.text,
providerOptions: body.providerOptions,
input: executionInput,
requestContext,
abortSignal,
threadContext
});
const stream = createResponseEventStream({
agentMemoryStore,
body,
configuredTools,
createdAt,
didStore,
previousResponseTurnRecord,
responseId,
responseModel,
responseMetadata,
streamResult,
threadContext
});
return new Response(stream, {
headers: {
"Content-Type": "text/event-stream; charset=utf-8",
"Cache-Control": "no-cache",
Connection: "keep-alive",
"X-Accel-Buffering": "no"
}
});
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating response");
}
}
});
var GET_RESPONSE_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/v1/responses/:responseId",
responseType: "json",
pathParamSchema: chunk42WZN6MM_cjs.responseIdPathParams,
responseSchema: chunk42WZN6MM_cjs.responseObjectSchema,
summary: "Retrieve a stored response",
description: "Returns a previously stored response object",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunkQQJHGSB2_cjs.MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, responseId }) => {
try {
const responseTurnRecord = await chunkOFF7L43B_cjs.findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });
if (!responseTurnRecord) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored response ${responseId} was not found` });
}
return chunkF3HP5HM6_cjs.mapResponseTurnRecordToResponse(responseTurnRecord);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error retrieving response");
}
}
});
var DELETE_RESPONSE_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/v1/responses/:responseId",
responseType: "json",
pathParamSchema: chunk42WZN6MM_cjs.responseIdPathParams,
responseSchema: chunk42WZN6MM_cjs.deleteResponseSchema,
summary: "Delete a stored response",
description: "Deletes a stored response so it can no longer be retrieved or chained",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunkQQJHGSB2_cjs.MastraFGAPermissions.AGENTS_DELETE,
handler: async ({ mastra, requestContext, responseId }) => {
try {
const responseTurnRecord = await chunkOFF7L43B_cjs.findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });
if (!responseTurnRecord) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored response ${responseId} was not found` });
}
await chunkOFF7L43B_cjs.deleteResponseTurnRecord({ responseTurnRecord });
const response = {
id: responseId,
object: "response",
deleted: true
};
return response;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error deleting response");
}
}
});
exports.CREATE_RESPONSE_ROUTE = CREATE_RESPONSE_ROUTE;
exports.DELETE_RESPONSE_ROUTE = DELETE_RESPONSE_ROUTE;
exports.GET_RESPONSE_ROUTE = GET_RESPONSE_ROUTE;
exports.responses_exports = responses_exports;
//# sourceMappingURL=chunk-XOBJYUKX.cjs.map
//# sourceMappingURL=chunk-XOBJYUKX.cjs.map
{"version":3,"sources":["../src/server/handlers/responses.ts"],"names":["__export","HTTPException","getEffectiveThreadId","getEffectiveResourceId","existingThread","enforceThreadAccess","threadId","randomUUID","createdThread","getAgentFromSystem","getAgentMemoryStore","toResponseStatus","toResponseUsage","persistResponseTurnRecord","resolveResponseTurnMessagesForStorage","buildCompletedResponse","mapResponseInputToExecutionMessages","findResponseTurnRecord","findResponseTurnRecordAcrossAgents","mapMastraToolsToResponseTools","createMessageId","buildInProgressResponse","formatSseEvent","createResponseStreamEventTranslator","completedState","createOutputTextPart","createRoute","createResponseBodySchema","responseObjectSchema","MastraFGAPermissions","handleError","responseIdPathParams","mapResponseTurnRecordToResponse","deleteResponseSchema","deleteResponseTurnRecord"],"mappings":"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","file":"chunk-XOBJYUKX.cjs","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { Agent, MastraDBMessage } from '@mastra/core/agent';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { MemoryStorage } from '@mastra/core/storage';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n createResponseBodySchema,\n deleteResponseSchema,\n responseIdPathParams,\n responseObjectSchema,\n} from '../schemas/responses';\nimport type { CreateResponseBody, DeleteResponse, ResponseObject } from '../schemas/responses';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\nimport {\n buildCompletedResponse,\n buildInProgressResponse,\n createResponseStreamEventTranslator,\n createMessageId,\n createOutputTextPart,\n formatSseEvent,\n mapMastraToolsToResponseTools,\n mapResponseInputToExecutionMessages,\n mapResponseTurnRecordToResponse,\n toResponseStatus,\n toResponseUsage,\n} from './responses.adapter';\nimport {\n deleteResponseTurnRecord,\n findResponseTurnRecord,\n findResponseTurnRecordAcrossAgents,\n getAgentMemoryStore,\n persistResponseTurnRecord,\n resolveResponseTurnMessagesForStorage,\n} from './responses.storage';\nimport type {\n ProviderMetadataLike,\n ResponseTurnRecord,\n ResponseTurnRecordMetadata,\n ThreadExecutionContext,\n UsageLike,\n} from './responses.storage';\nimport { enforceThreadAccess, getEffectiveResourceId, getEffectiveThreadId } from './utils';\n\ntype AgentExecutionInput = Parameters<Agent['generate']>[0];\ntype ResolvedAgentModel = Awaited<ReturnType<Agent['getModel']>>;\n\ntype ResponseExecutionResult = {\n text?: string;\n finishReason?: string;\n totalUsage?: UsageLike | Promise<UsageLike>;\n usage?: UsageLike | Promise<UsageLike>;\n providerMetadata?: ProviderMetadataLike | Promise<ProviderMetadataLike>;\n response?: {\n id?: string;\n dbMessages?: MastraDBMessage[];\n };\n};\n\ntype ResponseStreamResult = {\n fullStream: ReadableStream<unknown> | Promise<ReadableStream<unknown>>;\n text: Promise<string> | string;\n finishReason: Promise<string | undefined> | string | undefined;\n totalUsage?: Promise<UsageLike> | UsageLike;\n usage?: Promise<UsageLike> | UsageLike;\n providerMetadata?: Promise<ProviderMetadataLike> | ProviderMetadataLike;\n response?:\n | Promise<{\n id?: string;\n dbMessages?: MastraDBMessage[];\n }>\n | {\n id?: string;\n dbMessages?: MastraDBMessage[];\n };\n};\n\ntype CompletedResponseState = {\n completedAt: number;\n status: ResponseObject['status'];\n text: string;\n usage: UsageLike;\n usageDetails: ResponseObject['usage'];\n providerOptions: ProviderMetadataLike;\n};\n\ntype FinalizedResponse = {\n completedState: CompletedResponseState;\n response: ResponseObject;\n responseMessages: MastraDBMessage[];\n};\n\ntype PreparedCreateResponseRequest = {\n agent: Agent<any, any, any, any>;\n agentMemoryStore: MemoryStorage | null;\n configuredTools: ReturnType<typeof mapMastraToolsToResponseTools>;\n createdAt: number;\n didStore: boolean;\n executionInput: AgentExecutionInput;\n previousResponseTurnRecord: ResponseTurnRecord | null;\n resolvedModel: ResolvedAgentModel;\n responseId: string;\n responseModel: string;\n responseMetadata: Omit<\n ResponseTurnRecordMetadata,\n 'completedAt' | 'status' | 'usage' | 'providerOptions' | 'messageIds'\n >;\n threadContext: ThreadExecutionContext | null;\n};\n\nconst JSON_OBJECT_RESPONSE_SCHEMA = {\n type: 'object',\n additionalProperties: true,\n} as const;\n\nfunction jsonResponse(data: ResponseObject, status: number = 200): Response {\n return new Response(JSON.stringify(data), {\n status,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n}\n\nfunction createStructuredOutput(text: CreateResponseBody['text']) {\n if (!text) {\n return undefined;\n }\n\n switch (text.format.type) {\n case 'json_object':\n return {\n schema: JSON_OBJECT_RESPONSE_SCHEMA,\n jsonPromptInjection: true,\n };\n case 'json_schema':\n return {\n schema: text.format.schema,\n };\n default:\n return undefined;\n }\n}\n\nfunction getStreamedMessageOutputItem(response: ResponseObject, responseId: string) {\n return (\n response.output.find(\n (item): item is Extract<ResponseObject['output'][number], { type: 'message' }> =>\n item.type === 'message' && item.id === responseId,\n ) ?? null\n );\n}\n\n/**\n * Resolves the memory thread that should back the current response request.\n *\n * If `previous_response_id` is present, the request continues on that stored thread.\n * Otherwise, the route only creates or reuses a thread when the caller asked to store\n * the response and the resolved agent actually has memory configured.\n */\nasync function resolveThreadExecutionContext({\n agent,\n store,\n conversationId,\n previousResponseTurnRecord,\n requestContext,\n}: {\n agent: Agent<any, any, any, any>;\n store: boolean;\n conversationId?: string;\n previousResponseTurnRecord: ResponseTurnRecord | null;\n requestContext: RequestContext;\n}): Promise<ThreadExecutionContext | null> {\n if (conversationId && previousResponseTurnRecord && previousResponseTurnRecord.thread.id !== conversationId) {\n throw new HTTPException(400, {\n message:\n 'conversation_id and previous_response_id must reference the same conversation thread when both are provided',\n });\n }\n\n if (previousResponseTurnRecord) {\n return {\n threadId: previousResponseTurnRecord.thread.id,\n resourceId: previousResponseTurnRecord.thread.resourceId,\n };\n }\n\n const effectiveThreadId = getEffectiveThreadId(requestContext, undefined);\n const effectiveResourceId = getEffectiveResourceId(requestContext, undefined);\n\n if (!store && !conversationId && !effectiveThreadId) {\n return null;\n }\n\n const memory = await agent.getMemory({ requestContext });\n if (!memory) {\n if (conversationId) {\n throw new HTTPException(400, {\n message: 'conversation_id requires the target agent to have memory configured',\n });\n }\n\n return null;\n }\n\n if (conversationId) {\n const existingThread = await memory.getThreadById({ threadId: conversationId });\n if (!existingThread) {\n throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });\n }\n\n await enforceThreadAccess({\n mastra: agent.getMastraInstance(),\n requestContext,\n threadId: conversationId,\n thread: existingThread,\n effectiveResourceId,\n });\n return {\n threadId: existingThread.id,\n resourceId: effectiveResourceId ?? existingThread.resourceId,\n };\n }\n\n if (!effectiveThreadId) {\n if (!store) {\n return null;\n }\n\n const threadId = randomUUID();\n const createdThread = await memory.createThread({\n threadId,\n resourceId: effectiveResourceId ?? threadId,\n });\n\n return {\n threadId: createdThread.id,\n resourceId: createdThread.resourceId,\n };\n }\n\n const threadId = effectiveThreadId;\n const existingThread = await memory.getThreadById({ threadId });\n if (existingThread) {\n await enforceThreadAccess({\n mastra: agent.getMastraInstance(),\n requestContext,\n threadId,\n thread: existingThread,\n effectiveResourceId,\n });\n return {\n threadId: existingThread.id,\n resourceId: effectiveResourceId ?? existingThread.resourceId,\n };\n }\n\n if (!store) {\n return null;\n }\n\n const resourceId = effectiveResourceId ?? threadId;\n const createdThread = await memory.createThread({\n threadId,\n resourceId,\n });\n\n return {\n threadId: createdThread.id,\n resourceId: createdThread.resourceId,\n };\n}\n\nfunction createExecutionMemory(threadContext: ThreadExecutionContext | null) {\n if (!threadContext) {\n return undefined;\n }\n\n return {\n memory: {\n thread: threadContext.threadId,\n resource: threadContext.resourceId,\n },\n } as const;\n}\n\n/**\n * Resolves the registered Mastra agent that owns the response request.\n */\nasync function resolveResponseAgent({\n mastra,\n agentId,\n}: {\n mastra: Mastra | undefined;\n agentId?: string;\n}): Promise<Agent<any, any, any, any>> {\n if (!agentId) {\n throw new HTTPException(400, {\n message: 'Responses requests require an agent_id',\n });\n }\n\n if (!mastra) {\n throw new HTTPException(500, { message: 'Mastra instance is required for agent-backed responses' });\n }\n\n return getAgentFromSystem({ mastra, agentId });\n}\n\nasync function resolveAgentMemoryStore({\n agent,\n requestContext,\n errorMessage,\n}: {\n agent: Agent<any, any, any, any>;\n requestContext: RequestContext;\n errorMessage: string;\n}): Promise<MemoryStorage> {\n const agentMemoryStore = await getAgentMemoryStore({ agent, requestContext });\n if (!agentMemoryStore) {\n throw new HTTPException(400, { message: errorMessage });\n }\n\n return agentMemoryStore;\n}\n\n/**\n * Executes a non-streaming Responses API request through the resolved Mastra agent.\n */\nasync function executeGenerate({\n agent,\n resolvedModel,\n modelOverride,\n instructions,\n text,\n providerOptions,\n input,\n requestContext,\n abortSignal,\n threadContext,\n}: {\n agent: Agent;\n resolvedModel: ResolvedAgentModel;\n modelOverride?: string;\n instructions: string | undefined;\n text: CreateResponseBody['text'];\n providerOptions: CreateResponseBody['providerOptions'];\n input: AgentExecutionInput;\n requestContext: RequestContext;\n abortSignal: AbortSignal;\n threadContext: ThreadExecutionContext | null;\n}) {\n const executionMemory = createExecutionMemory(threadContext);\n const structuredOutput = createStructuredOutput(text);\n const modelOption = modelOverride ? { model: modelOverride } : {};\n const commonOptions = {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n structuredOutput,\n providerOptions,\n ...(executionMemory ?? {}),\n };\n\n if (resolvedModel.specificationVersion === 'v1') {\n if (threadContext) {\n return (await agent.generateLegacy(input, {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n output: structuredOutput?.schema,\n providerOptions,\n resourceId: threadContext.resourceId,\n threadId: threadContext.threadId,\n } as never)) as ResponseExecutionResult;\n }\n\n return (await agent.generateLegacy(input, {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n output: structuredOutput?.schema,\n providerOptions,\n } as never)) as ResponseExecutionResult;\n }\n\n return (await agent.generate(input, commonOptions as never)) as ResponseExecutionResult;\n}\n\n/**\n * Executes a streaming Responses API request through the resolved Mastra agent.\n */\nasync function executeStream({\n agent,\n resolvedModel,\n modelOverride,\n instructions,\n text,\n providerOptions,\n input,\n requestContext,\n abortSignal,\n threadContext,\n}: {\n agent: Agent;\n resolvedModel: ResolvedAgentModel;\n modelOverride?: string;\n instructions: string | undefined;\n text: CreateResponseBody['text'];\n providerOptions: CreateResponseBody['providerOptions'];\n input: AgentExecutionInput;\n requestContext: RequestContext;\n abortSignal: AbortSignal;\n threadContext: ThreadExecutionContext | null;\n}) {\n const executionMemory = createExecutionMemory(threadContext);\n const structuredOutput = createStructuredOutput(text);\n const modelOption = modelOverride ? { model: modelOverride } : {};\n const commonOptions = {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n structuredOutput,\n providerOptions,\n ...(executionMemory ?? {}),\n };\n\n if (resolvedModel.specificationVersion === 'v1') {\n if (threadContext) {\n return (await agent.streamLegacy(input, {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n output: structuredOutput?.schema,\n providerOptions,\n resourceId: threadContext.resourceId,\n threadId: threadContext.threadId,\n } as never)) as ResponseStreamResult;\n }\n\n return (await agent.streamLegacy(input, {\n instructions,\n requestContext,\n abortSignal,\n ...modelOption,\n output: structuredOutput?.schema,\n providerOptions,\n } as never)) as ResponseStreamResult;\n }\n\n return (await agent.stream(input, commonOptions as never)) as ResponseStreamResult;\n}\n\nasync function resolveUsage(result: ResponseExecutionResult | ResponseStreamResult): Promise<UsageLike> {\n return (await (result.totalUsage ?? result.usage ?? null)) as UsageLike;\n}\n\nasync function resolveProviderMetadata(\n result: ResponseExecutionResult | ResponseStreamResult,\n): Promise<ProviderMetadataLike> {\n return (await (result.providerMetadata ?? undefined)) as ProviderMetadataLike;\n}\n\nasync function resolveFinishReason(\n result: ResponseExecutionResult | ResponseStreamResult,\n): Promise<string | undefined> {\n return (await result.finishReason) ?? undefined;\n}\n\nasync function resolveText(result: ResponseExecutionResult | ResponseStreamResult): Promise<string> {\n return (await result.text) ?? '';\n}\n\n/**\n * Resolves the final response state shared by streaming and non-streaming flows.\n */\nasync function resolveCompletedResponseState(\n result: ResponseExecutionResult | ResponseStreamResult,\n fallbackText: string,\n): Promise<CompletedResponseState> {\n const usage = await resolveUsage(result);\n\n return {\n completedAt: Math.floor(Date.now() / 1000),\n status: toResponseStatus(await resolveFinishReason(result)),\n text: (await resolveText(result)) || fallbackText,\n usage,\n usageDetails: toResponseUsage(usage),\n providerOptions: await resolveProviderMetadata(result),\n };\n}\n\n/**\n * Stores the completed response when the request opted into memory-backed persistence.\n */\nasync function storeCompletedResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n responseId,\n metadata,\n completedState,\n messages,\n outputItems,\n}: {\n agentMemoryStore: MemoryStorage | null;\n didStore: boolean;\n threadContext: ThreadExecutionContext | null;\n responseId: string;\n metadata: Omit<ResponseTurnRecordMetadata, 'completedAt' | 'status' | 'usage' | 'providerOptions' | 'messageIds'>;\n completedState: CompletedResponseState;\n messages: MastraDBMessage[];\n outputItems: ResponseObject['output'];\n}): Promise<void> {\n if (!didStore || !threadContext) {\n return;\n }\n\n await persistResponseTurnRecord({\n memoryStore: agentMemoryStore,\n responseId,\n metadata: {\n ...metadata,\n completedAt: completedState.completedAt,\n status: completedState.status,\n usage: completedState.usageDetails,\n providerOptions: completedState.providerOptions,\n messageIds: [],\n outputItems,\n },\n threadContext,\n messages,\n });\n}\n\n/**\n * Resolves the final response object and persists the stored response turn when needed.\n */\nasync function finalizeResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n result,\n responseId,\n createdAt,\n model,\n instructions,\n previousResponseId,\n conversationId,\n configuredTools,\n responseMetadata,\n fallbackText,\n fallbackOutputItems,\n}: {\n agentMemoryStore: MemoryStorage | null;\n didStore: boolean;\n threadContext: ThreadExecutionContext | null;\n result: ResponseExecutionResult | ResponseStreamResult;\n responseId: string;\n createdAt: number;\n model: string;\n instructions: string | undefined;\n previousResponseId?: string;\n conversationId?: string;\n configuredTools: ReturnType<typeof mapMastraToolsToResponseTools>;\n responseMetadata: Omit<\n ResponseTurnRecordMetadata,\n 'completedAt' | 'status' | 'usage' | 'providerOptions' | 'messageIds'\n >;\n fallbackText: string;\n fallbackOutputItems?: (completedState: CompletedResponseState) => ResponseObject['output'];\n}): Promise<FinalizedResponse> {\n const completedState = await resolveCompletedResponseState(result, fallbackText);\n const fallbackItems = fallbackOutputItems?.(completedState);\n const responseMessages = await resolveResponseTurnMessagesForStorage({\n result,\n responseId,\n text: completedState.text,\n threadContext,\n fallbackOutputItems: threadContext ? fallbackItems : undefined,\n });\n const response = buildCompletedResponse({\n responseId,\n outputMessageId: responseId,\n model,\n createdAt,\n completedAt: completedState.completedAt,\n status: completedState.status,\n text: completedState.text,\n usage: completedState.usage,\n instructions,\n textConfig: responseMetadata.text,\n previousResponseId,\n conversationId,\n providerOptions: completedState.providerOptions,\n tools: configuredTools,\n messages: responseMessages,\n fallbackOutputItems: fallbackItems,\n store: didStore,\n });\n\n await storeCompletedResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n responseId,\n metadata: responseMetadata,\n completedState,\n messages: responseMessages,\n outputItems: response.output,\n });\n\n return { completedState, response, responseMessages };\n}\n\n/**\n * Resolves all request-scoped Mastra primitives needed to execute a Responses create\n * call: the owning agent, the memory thread context, the normalized execution input,\n * and the response-turn metadata that may be persisted later.\n */\nasync function prepareCreateResponseRequest({\n body,\n mastra,\n requestContext,\n}: {\n body: CreateResponseBody;\n mastra: Mastra | undefined;\n requestContext: RequestContext;\n}): Promise<PreparedCreateResponseRequest> {\n const executionInput = mapResponseInputToExecutionMessages(body.input) as AgentExecutionInput;\n let previousResponseTurnRecord: ResponseTurnRecord | null = null;\n let resolvedAgent: Agent<any, any, any, any> | null = null;\n\n if (body.previous_response_id) {\n if (body.agent_id) {\n resolvedAgent = await resolveResponseAgent({ mastra, agentId: body.agent_id });\n previousResponseTurnRecord = await findResponseTurnRecord({\n agent: resolvedAgent,\n responseId: body.previous_response_id,\n requestContext,\n });\n\n if (!previousResponseTurnRecord) {\n const owningResponseTurnRecord = await findResponseTurnRecordAcrossAgents({\n mastra,\n responseId: body.previous_response_id,\n requestContext,\n });\n\n if (owningResponseTurnRecord) {\n if (owningResponseTurnRecord.metadata.agentId === body.agent_id) {\n previousResponseTurnRecord = owningResponseTurnRecord;\n } else {\n throw new HTTPException(400, {\n message: `Stored response ${body.previous_response_id} belongs to agent ${owningResponseTurnRecord.metadata.agentId}, not ${body.agent_id}`,\n });\n }\n }\n\n if (!previousResponseTurnRecord) {\n throw new HTTPException(404, { message: `Stored response ${body.previous_response_id} was not found` });\n }\n }\n } else {\n if (!mastra) {\n throw new HTTPException(500, { message: 'Mastra instance is required for agent-backed responses' });\n }\n\n previousResponseTurnRecord = await findResponseTurnRecordAcrossAgents({\n mastra,\n responseId: body.previous_response_id,\n requestContext,\n });\n\n if (!previousResponseTurnRecord) {\n throw new HTTPException(404, { message: `Stored response ${body.previous_response_id} was not found` });\n }\n }\n }\n\n const agent =\n resolvedAgent ??\n (await resolveResponseAgent({\n mastra,\n agentId: body.agent_id ?? previousResponseTurnRecord?.metadata.agentId,\n }));\n const resolvedModel = await agent.getModel({\n requestContext,\n modelConfig: body.model,\n });\n const responseModel =\n body.model ??\n (() => {\n if (resolvedModel.provider && resolvedModel.modelId) {\n const publicProviderId = resolvedModel.provider.includes('.')\n ? resolvedModel.provider.split('.')[0]!\n : resolvedModel.provider;\n return `${publicProviderId}/${resolvedModel.modelId}`;\n }\n\n if (resolvedModel.modelId) {\n return resolvedModel.modelId;\n }\n\n throw new HTTPException(500, {\n message: 'Responses route could not determine the effective model for this request',\n });\n })();\n const shouldStore = body.store ?? false;\n const needsMemoryStore = shouldStore || Boolean(body.conversation_id) || Boolean(body.previous_response_id);\n const agentMemoryStore = needsMemoryStore\n ? await resolveAgentMemoryStore({\n agent,\n requestContext,\n errorMessage: body.previous_response_id\n ? 'previous_response_id requires the target agent to have memory storage configured'\n : shouldStore\n ? 'Stored responses require the target agent to have memory storage configured'\n : 'conversation_id requires the target agent to have memory storage configured',\n })\n : null;\n const configuredTools = mapMastraToolsToResponseTools(\n (await Promise.resolve(agent.listTools({ requestContext }))) as Record<string, unknown>,\n );\n\n const responseId = createMessageId();\n const createdAt = Math.floor(Date.now() / 1000);\n const threadContext = await resolveThreadExecutionContext({\n agent,\n store: shouldStore,\n conversationId: body.conversation_id,\n previousResponseTurnRecord,\n requestContext,\n });\n\n if (shouldStore && !threadContext) {\n throw new HTTPException(400, {\n message: 'Stored responses require the target agent to have memory configured',\n });\n }\n\n const didStore = shouldStore && Boolean(threadContext);\n\n return {\n agent,\n agentMemoryStore,\n configuredTools,\n createdAt,\n didStore,\n executionInput,\n previousResponseTurnRecord,\n resolvedModel,\n responseId,\n responseModel,\n responseMetadata: {\n agentId: agent.id,\n model: responseModel,\n createdAt,\n instructions: body.instructions,\n text: body.text,\n previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,\n tools: configuredTools,\n store: didStore,\n },\n threadContext,\n };\n}\n\n/**\n * Bridges a Mastra agent stream into OpenAI-style Responses SSE events and completes\n * the stored response-turn record when the stream finishes.\n */\nfunction createResponseEventStream({\n agentMemoryStore,\n body,\n configuredTools,\n createdAt,\n didStore,\n previousResponseTurnRecord,\n responseId,\n responseModel,\n responseMetadata,\n streamResult,\n threadContext,\n}: {\n agentMemoryStore: MemoryStorage | null;\n body: CreateResponseBody;\n configuredTools: ReturnType<typeof mapMastraToolsToResponseTools>;\n createdAt: number;\n didStore: boolean;\n previousResponseTurnRecord: ResponseTurnRecord | null;\n responseId: string;\n responseModel: string;\n responseMetadata: Omit<\n ResponseTurnRecordMetadata,\n 'completedAt' | 'status' | 'usage' | 'providerOptions' | 'messageIds'\n >;\n streamResult: ResponseStreamResult;\n threadContext: ThreadExecutionContext | null;\n}) {\n const createdResponse = buildInProgressResponse({\n responseId,\n model: responseModel,\n createdAt,\n instructions: body.instructions,\n textConfig: body.text,\n previousResponseId: body.previous_response_id,\n conversationId: threadContext?.threadId ?? body.conversation_id,\n tools: configuredTools,\n store: didStore,\n });\n\n return new ReadableStream<Uint8Array>({\n async start(controller) {\n let sequenceNumber = 1;\n const enqueueEvent = (eventName: string, payload: Record<string, unknown>) => {\n controller.enqueue(\n formatSseEvent(eventName, {\n ...payload,\n sequence_number: sequenceNumber++,\n }),\n );\n };\n\n enqueueEvent('response.created', {\n type: 'response.created',\n response: createdResponse,\n });\n enqueueEvent('response.in_progress', {\n type: 'response.in_progress',\n response: createdResponse,\n });\n\n const streamEvents = createResponseStreamEventTranslator(responseId);\n const fullStream = await streamResult.fullStream;\n const reader = fullStream.getReader();\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n\n for (const event of streamEvents.consume(value)) {\n enqueueEvent(event.event, event.payload);\n }\n }\n\n for (const event of streamEvents.flushPendingToolResults()) {\n enqueueEvent(event.event, event.payload);\n }\n\n const { completedState, response } = await finalizeResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n result: streamResult,\n responseId,\n createdAt,\n model: responseModel,\n instructions: body.instructions,\n previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,\n conversationId: threadContext?.threadId ?? body.conversation_id,\n configuredTools,\n responseMetadata,\n fallbackText: streamEvents.text,\n fallbackOutputItems: completedState =>\n streamEvents.getOutputItems({\n text: completedState.text,\n status: completedState.status,\n }),\n });\n\n const completedItem = getStreamedMessageOutputItem(response, responseId);\n if (completedItem || completedState.text) {\n for (const event of streamEvents.completeText(\n completedState.text,\n completedItem ?? {\n id: responseId,\n type: 'message' as const,\n role: 'assistant' as const,\n status: 'completed' as const,\n content: [createOutputTextPart(completedState.text)],\n },\n )) {\n enqueueEvent(event.event, event.payload);\n }\n }\n enqueueEvent('response.completed', {\n type: 'response.completed',\n response,\n });\n controller.close();\n } catch (error) {\n controller.error(error);\n } finally {\n reader.releaseLock();\n }\n },\n });\n}\n\nexport const CREATE_RESPONSE_ROUTE = createRoute({\n method: 'POST',\n path: '/v1/responses',\n responseType: 'datastream-response',\n bodySchema: createResponseBodySchema,\n responseSchema: responseObjectSchema,\n summary: 'Create a response',\n description: 'Creates a response through a Mastra-hosted Responses API-compatible route',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_EXECUTE,\n handler: async ({ mastra, requestContext, abortSignal, ...body }) => {\n try {\n const {\n agent,\n agentMemoryStore,\n configuredTools,\n createdAt,\n didStore,\n executionInput,\n previousResponseTurnRecord,\n resolvedModel,\n responseId,\n responseModel,\n responseMetadata,\n threadContext,\n } = await prepareCreateResponseRequest({ body, mastra, requestContext });\n\n if (!body.stream) {\n const result = await executeGenerate({\n agent,\n resolvedModel,\n modelOverride: body.model,\n instructions: body.instructions,\n text: body.text,\n providerOptions: body.providerOptions,\n input: executionInput,\n requestContext,\n abortSignal,\n threadContext,\n });\n\n const { response } = await finalizeResponse({\n agentMemoryStore,\n didStore,\n threadContext,\n result,\n responseId,\n createdAt,\n model: responseModel,\n instructions: body.instructions,\n previousResponseId: previousResponseTurnRecord?.message.id ?? body.previous_response_id,\n conversationId: threadContext?.threadId ?? body.conversation_id,\n configuredTools,\n responseMetadata,\n fallbackText: '',\n });\n\n return jsonResponse(response);\n }\n\n const streamResult = await executeStream({\n agent,\n resolvedModel,\n modelOverride: body.model,\n instructions: body.instructions,\n text: body.text,\n providerOptions: body.providerOptions,\n input: executionInput,\n requestContext,\n abortSignal,\n threadContext,\n });\n\n const stream = createResponseEventStream({\n agentMemoryStore,\n body,\n configuredTools,\n createdAt,\n didStore,\n previousResponseTurnRecord,\n responseId,\n responseModel,\n responseMetadata,\n streamResult,\n threadContext,\n });\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream; charset=utf-8',\n 'Cache-Control': 'no-cache',\n Connection: 'keep-alive',\n 'X-Accel-Buffering': 'no',\n },\n });\n } catch (error) {\n return handleError(error, 'Error creating response');\n }\n },\n});\n\nexport const GET_RESPONSE_ROUTE = createRoute({\n method: 'GET',\n path: '/v1/responses/:responseId',\n responseType: 'json',\n pathParamSchema: responseIdPathParams,\n responseSchema: responseObjectSchema,\n summary: 'Retrieve a stored response',\n description: 'Returns a previously stored response object',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_READ,\n handler: async ({ mastra, requestContext, responseId }) => {\n try {\n const responseTurnRecord = await findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });\n if (!responseTurnRecord) {\n throw new HTTPException(404, { message: `Stored response ${responseId} was not found` });\n }\n\n return mapResponseTurnRecordToResponse(responseTurnRecord);\n } catch (error) {\n return handleError(error, 'Error retrieving response');\n }\n },\n});\n\nexport const DELETE_RESPONSE_ROUTE = createRoute({\n method: 'DELETE',\n path: '/v1/responses/:responseId',\n responseType: 'json',\n pathParamSchema: responseIdPathParams,\n responseSchema: deleteResponseSchema,\n summary: 'Delete a stored response',\n description: 'Deletes a stored response so it can no longer be retrieved or chained',\n tags: ['Responses'],\n requiresAuth: true,\n requiresPermission: MastraFGAPermissions.AGENTS_DELETE,\n handler: async ({ mastra, requestContext, responseId }) => {\n try {\n const responseTurnRecord = await findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });\n if (!responseTurnRecord) {\n throw new HTTPException(404, { message: `Stored response ${responseId} was not found` });\n }\n\n await deleteResponseTurnRecord({ responseTurnRecord });\n\n const response: DeleteResponse = {\n id: responseId,\n object: 'response',\n deleted: true,\n };\n\n return response;\n } catch (error) {\n return handleError(error, 'Error deleting response');\n }\n },\n});\n"]}

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

'use strict';
var chunkSDIJUD3E_cjs = require('./chunk-SDIJUD3E.cjs');
var chunk4JAXFPYO_cjs = require('./chunk-4JAXFPYO.cjs');
var chunk2XZ2466F_cjs = require('./chunk-2XZ2466F.cjs');
var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
// src/server/handlers/agent-versions.ts
var SNAPSHOT_CONFIG_FIELDS = [
"name",
"description",
"instructions",
"model",
"tools",
"defaultOptions",
"workflows",
"agents",
"integrationTools",
"inputProcessors",
"outputProcessors",
"memory",
"scorers",
"requestContextSchema",
"mcpClients"
];
var LIST_AGENT_VERSIONS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/agents/:agentId/versions",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkSDIJUD3E_cjs.agentVersionPathParams,
queryParamSchema: chunk4JAXFPYO_cjs.listVersionsQuerySchema,
responseSchema: chunkSDIJUD3E_cjs.listVersionsResponseSchema,
summary: "List agent versions",
description: "Returns a paginated list of all versions for a stored agent",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, page, perPage, orderBy, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const storedAgent = await agentsStore.getById(agentId);
let codeAgentExists = false;
try {
mastra.getAgentById(agentId);
codeAgentExists = true;
} catch {
}
if (!storedAgent && !codeAgentExists) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(storedAgent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const result = await agentsStore.listVersions({
agentId,
page,
perPage,
orderBy
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing agent versions");
}
}
});
var CREATE_AGENT_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/agents/:agentId/versions",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkSDIJUD3E_cjs.agentVersionPathParams,
bodySchema: chunk4JAXFPYO_cjs.createVersionBodySchema,
responseSchema: chunkSDIJUD3E_cjs.createVersionResponseSchema,
summary: "Create agent version",
description: "Creates a new version snapshot of the current agent configuration",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, changeMessage, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
if (!agent) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
let currentConfig = {};
if (agent.activeVersionId) {
const activeVersion = await agentsStore.getVersion(agent.activeVersionId);
if (activeVersion) {
currentConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
activeVersion,
SNAPSHOT_CONFIG_FIELDS
);
}
}
const latestVersion = await agentsStore.getLatestVersion(agentId);
if (!agent.activeVersionId && latestVersion) {
currentConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
latestVersion,
SNAPSHOT_CONFIG_FIELDS
);
}
const previousConfig = latestVersion ? chunk2XZ2466F_cjs.extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
const changedFields = chunk2XZ2466F_cjs.calculateChangedFields(previousConfig, currentConfig);
const { versionId } = await chunk2XZ2466F_cjs.createVersionWithRetry(
agentsStore,
agentId,
"agentId",
currentConfig,
changedFields,
{ changeMessage }
);
const version = await agentsStore.getVersion(versionId);
if (!version) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to retrieve created version" });
}
await chunk2XZ2466F_cjs.enforceRetentionLimit(
agentsStore,
agentId,
"agentId",
agent.activeVersionId
);
return version;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating agent version");
}
}
});
var GET_AGENT_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/agents/:agentId/versions/:versionId",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkSDIJUD3E_cjs.versionIdPathParams,
responseSchema: chunkSDIJUD3E_cjs.getVersionResponseSchema,
summary: "Get agent version",
description: "Returns a specific version of an agent by its version ID",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const version = await agentsStore.getVersion(versionId);
if (!version) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.agentId !== agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
}
const agent = await agentsStore.getById(agentId);
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
return version;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting agent version");
}
}
});
var ACTIVATE_AGENT_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/agents/:agentId/versions/:versionId/activate",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkSDIJUD3E_cjs.versionIdPathParams,
responseSchema: chunk4JAXFPYO_cjs.activateVersionResponseSchema,
summary: "Activate agent version",
description: "Sets a specific version as the active version for the agent",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
if (!agent) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const version = await agentsStore.getVersion(versionId);
if (!version) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.agentId !== agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
}
await agentsStore.update({
id: agentId,
activeVersionId: versionId,
status: "published"
});
mastra.getEditor()?.agent.clearCache(agentId);
return {
success: true,
message: `Version ${version.versionNumber} is now active`,
activeVersionId: versionId
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error activating agent version");
}
}
});
var RESTORE_AGENT_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "POST",
path: "/stored/agents/:agentId/versions/:versionId/restore",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkSDIJUD3E_cjs.versionIdPathParams,
responseSchema: chunkSDIJUD3E_cjs.restoreVersionResponseSchema,
summary: "Restore agent version",
description: "Restores the agent configuration from a version, creating a new version",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
if (!agent) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const versionToRestore = await agentsStore.getVersion(versionId);
if (!versionToRestore) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (versionToRestore.agentId !== agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
}
const restoredConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
versionToRestore,
SNAPSHOT_CONFIG_FIELDS
);
await agentsStore.update({
id: agentId,
...restoredConfig
});
const latestVersion = await agentsStore.getLatestVersion(agentId);
const previousConfig = latestVersion ? chunk2XZ2466F_cjs.extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
const changedFields = chunk2XZ2466F_cjs.calculateChangedFields(previousConfig, restoredConfig);
const { versionId: newVersionId } = await chunk2XZ2466F_cjs.createVersionWithRetry(
agentsStore,
agentId,
"agentId",
restoredConfig,
changedFields,
{
changeMessage: `Restored from version ${versionToRestore.versionNumber}`
}
);
const newVersion = await agentsStore.getVersion(newVersionId);
if (!newVersion) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to retrieve created version" });
}
await chunk2XZ2466F_cjs.enforceRetentionLimit(
agentsStore,
agentId,
"agentId",
agent.activeVersionId
);
mastra.getEditor()?.agent.clearCache(agentId);
return newVersion;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error restoring agent version");
}
}
});
var DELETE_AGENT_VERSION_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "DELETE",
path: "/stored/agents/:agentId/versions/:versionId",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkSDIJUD3E_cjs.versionIdPathParams,
responseSchema: chunk4JAXFPYO_cjs.deleteVersionResponseSchema,
summary: "Delete agent version",
description: "Deletes a specific version (cannot delete the active version)",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
if (!agent) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const version = await agentsStore.getVersion(versionId);
if (!version) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.agentId !== agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
}
if (agent.activeVersionId === versionId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: "Cannot delete the active version. Activate a different version first."
});
}
await agentsStore.deleteVersion(versionId);
mastra.getEditor()?.agent.clearCache(agentId);
return {
success: true,
message: `Version ${version.versionNumber} deleted successfully`
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error deleting agent version");
}
}
});
var COMPARE_AGENT_VERSIONS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
method: "GET",
path: "/stored/agents/:agentId/versions/compare",
requiresAuth: true,
responseType: "json",
pathParamSchema: chunkSDIJUD3E_cjs.agentVersionPathParams,
queryParamSchema: chunk4JAXFPYO_cjs.compareVersionsQuerySchema,
responseSchema: chunkSDIJUD3E_cjs.compareVersionsResponseSchema,
summary: "Compare agent versions",
description: "Compares two versions and returns the differences between them",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, from, to, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
const fromVersion = await agentsStore.getVersion(from);
if (!fromVersion) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${from} not found` });
}
if (fromVersion.agentId !== agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${from} not found for agent ${agentId}` });
}
const toVersion = await agentsStore.getVersion(to);
if (!toVersion) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${to} not found` });
}
if (toVersion.agentId !== agentId) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Version with id ${to} not found for agent ${agentId}` });
}
const fromConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
fromVersion,
SNAPSHOT_CONFIG_FIELDS
);
const toConfig = chunk2XZ2466F_cjs.extractConfigFromVersion(
toVersion,
SNAPSHOT_CONFIG_FIELDS
);
const diffs = chunk2XZ2466F_cjs.computeVersionDiffs(fromConfig, toConfig);
return {
diffs,
fromVersion,
toVersion
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error comparing agent versions");
}
}
});
exports.ACTIVATE_AGENT_VERSION_ROUTE = ACTIVATE_AGENT_VERSION_ROUTE;
exports.COMPARE_AGENT_VERSIONS_ROUTE = COMPARE_AGENT_VERSIONS_ROUTE;
exports.CREATE_AGENT_VERSION_ROUTE = CREATE_AGENT_VERSION_ROUTE;
exports.DELETE_AGENT_VERSION_ROUTE = DELETE_AGENT_VERSION_ROUTE;
exports.GET_AGENT_VERSION_ROUTE = GET_AGENT_VERSION_ROUTE;
exports.LIST_AGENT_VERSIONS_ROUTE = LIST_AGENT_VERSIONS_ROUTE;
exports.RESTORE_AGENT_VERSION_ROUTE = RESTORE_AGENT_VERSION_ROUTE;
//# sourceMappingURL=chunk-YQIMII7K.cjs.map
//# sourceMappingURL=chunk-YQIMII7K.cjs.map
{"version":3,"sources":["../src/server/handlers/agent-versions.ts"],"names":["createRoute","agentVersionPathParams","listVersionsQuerySchema","listVersionsResponseSchema","HTTPException","assertStoredResourceScope","getStoredResourceScope","handleError","createVersionBodySchema","createVersionResponseSchema","extractConfigFromVersion","calculateChangedFields","createVersionWithRetry","enforceRetentionLimit","versionIdPathParams","getVersionResponseSchema","activateVersionResponseSchema","restoreVersionResponseSchema","deleteVersionResponseSchema","compareVersionsQuerySchema","compareVersionsResponseSchema","computeVersionDiffs"],"mappings":"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","file":"chunk-YQIMII7K.cjs","sourcesContent":["import type { z } from 'zod/v4';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentVersionPathParams,\n versionIdPathParams,\n listVersionsQuerySchema,\n createVersionBodySchema,\n compareVersionsQuerySchema,\n listVersionsResponseSchema,\n getVersionResponseSchema,\n createVersionResponseSchema,\n activateVersionResponseSchema,\n restoreVersionResponseSchema,\n deleteVersionResponseSchema,\n compareVersionsResponseSchema,\n} from '../schemas/agent-versions';\nimport type { ServerRoute, RouteSchemas, InferParams } from '../server-adapter/routes';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { handleError } from './error';\nimport {\n extractConfigFromVersion,\n calculateChangedFields,\n computeVersionDiffs,\n createVersionWithRetry,\n enforceRetentionLimit,\n} from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\n/**\n * The config field names that live on version rows (StorageAgentSnapshotType fields).\n * Used to extract config from a version record for comparison and restoration.\n */\nconst SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'instructions',\n 'model',\n 'tools',\n 'defaultOptions',\n 'workflows',\n 'agents',\n 'integrationTools',\n 'inputProcessors',\n 'outputProcessors',\n 'memory',\n 'scorers',\n 'requestContextSchema',\n 'mcpClients',\n] as const;\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/agents/:agentId/versions - List all versions for an agent\n */\nexport const LIST_AGENT_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: listVersionsQuerySchema,\n responseSchema: listVersionsResponseSchema,\n summary: 'List agent versions',\n description: 'Returns a paginated list of all versions for a stored agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, page, perPage, orderBy, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists in code or storage\n const storedAgent = await agentsStore.getById(agentId);\n let codeAgentExists = false;\n try {\n mastra.getAgentById(agentId);\n codeAgentExists = true;\n } catch {\n // Agent not registered in code\n }\n\n if (!storedAgent && !codeAgentExists) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(storedAgent, await getStoredResourceScope(mastra, requestContext));\n\n const result = await agentsStore.listVersions({\n agentId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing agent versions');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions - Create a new version snapshot\n */\nexport const CREATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n bodySchema: createVersionBodySchema,\n responseSchema: createVersionResponseSchema,\n summary: 'Create agent version',\n description: 'Creates a new version snapshot of the current agent configuration',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, changeMessage, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Get the current agent to find its active version\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the current active version to snapshot its config\n let currentConfig: Record<string, unknown> = {};\n if (agent.activeVersionId) {\n const activeVersion = await agentsStore.getVersion(agent.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n\n // If no activeVersionId, fall back to latest version config\n if (!agent.activeVersionId && latestVersion) {\n currentConfig = extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, currentConfig);\n\n // Create the new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n // Get the created version to return\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/:versionId - Get a specific version\n */\nexport const GET_AGENT_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: getVersionResponseSchema,\n summary: 'Get agent version',\n description: 'Returns a specific version of an agent by its version ID',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n const version = await agentsStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n // Verify the version belongs to the specified agent\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: activateVersionResponseSchema,\n summary: 'Activate agent version',\n description: 'Sets a specific version as the active version for the agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Update the agent's activeVersionId AND status to 'published'\n await agentsStore.update({\n id: agentId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} is now active`,\n activeVersionId: versionId,\n };\n } catch (error) {\n return handleError(error, 'Error activating agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/restore - Restore agent to a version\n */\nexport const RESTORE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: restoreVersionResponseSchema,\n summary: 'Restore agent version',\n description: 'Restores the agent configuration from a version, creating a new version',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the version to restore\n const versionToRestore = await agentsStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Extract the config fields from the version to restore (top-level, no .snapshot)\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Update the agent with the config from the version to restore\n await agentsStore.update({\n id: agentId,\n ...restoredConfig,\n });\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, restoredConfig);\n\n // Create a new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId: newVersionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n // Do NOT auto-activate the restored version - user must explicitly activate it\n\n // Get the created version to return\n const newVersion = await agentsStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n // Use the agent's existing activeVersionId\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the restored config\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring agent version');\n }\n },\n});\n\n/**\n * DELETE /stored/agents/:agentId/versions/:versionId - Delete a version\n */\nexport const DELETE_AGENT_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: deleteVersionResponseSchema,\n summary: 'Delete agent version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Check if this is the active version\n if (agent.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await agentsStore.deleteVersion(versionId);\n\n // Clear the editor cache in case the deleted version affected resolution\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/compare - Compare two versions\n */\nexport const COMPARE_AGENT_VERSIONS_ROUTE: ServerRoute<\n InferParams<typeof agentVersionPathParams, typeof compareVersionsQuerySchema, undefined>,\n z.infer<typeof compareVersionsResponseSchema>,\n 'json',\n RouteSchemas<\n typeof agentVersionPathParams,\n typeof compareVersionsQuerySchema,\n undefined,\n typeof compareVersionsResponseSchema\n >,\n 'GET',\n '/stored/agents/:agentId/versions/compare'\n> = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: compareVersionsQuerySchema,\n responseSchema: compareVersionsResponseSchema,\n summary: 'Compare agent versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, from, to, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get both versions\n const fromVersion = await agentsStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${from} not found for agent ${agentId}` });\n }\n\n const toVersion = await agentsStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${to} not found for agent ${agentId}` });\n }\n\n // Extract config fields from both versions (top-level, no .snapshot)\n const fromConfig = extractConfigFromVersion(\n fromVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n const toConfig = extractConfigFromVersion(\n toVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Compute diffs on the config fields\n const diffs = computeVersionDiffs(fromConfig, toConfig);\n\n return {\n diffs,\n fromVersion,\n toVersion,\n };\n } catch (error) {\n return handleError(error, 'Error comparing agent versions');\n }\n },\n});\n"]}
'use strict';
var chunkJ5RVSM7H_cjs = require('./chunk-J5RVSM7H.cjs');
var chunkWMS7BOP7_cjs = require('./chunk-WMS7BOP7.cjs');
// src/server/handlers/favorites-enrichment.ts
async function prepareFavoritesEnrichment(mastra, requestContext, entityType, entityIds) {
if (!await chunkJ5RVSM7H_cjs.isBuilderFeatureEnabled(mastra, "favorites")) return null;
const userId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext);
if (!userId) return null;
const storage = mastra.getStorage();
if (!storage) return null;
const favoritesStore = await storage.getStore("favorites");
if (!favoritesStore) return null;
const starredIds = entityIds.length === 0 ? /* @__PURE__ */ new Set() : await favoritesStore.isFavoritedBatch({ userId, entityType, entityIds });
return { userId, starredIds, favoritesStore };
}
function stripFavoriteFields(record) {
if ("isFavorited" in record || "favoriteCount" in record) {
const copy = { ...record };
delete copy.isFavorited;
delete copy.favoriteCount;
return copy;
}
return record;
}
async function enrichOrStripFavorites(mastra, requestContext, entityType, record) {
const enrichment = await prepareFavoritesEnrichment(mastra, requestContext, entityType, [record.id]);
if (enrichment) {
return { ...record, isFavorited: enrichment.starredIds.has(record.id) };
}
return stripFavoriteFields(record);
}
exports.enrichOrStripFavorites = enrichOrStripFavorites;
exports.prepareFavoritesEnrichment = prepareFavoritesEnrichment;
exports.stripFavoriteFields = stripFavoriteFields;
//# sourceMappingURL=chunk-YUDME6CN.cjs.map
//# sourceMappingURL=chunk-YUDME6CN.cjs.map
{"version":3,"sources":["../src/server/handlers/favorites-enrichment.ts"],"names":["isBuilderFeatureEnabled","getCallerAuthorId"],"mappings":";;;;;;AAyBA,eAAsB,0BAAA,CACpB,MAAA,EACA,cAAA,EACA,UAAA,EACA,SAAA,EACqC;AACrC,EAAA,IAAI,CAAE,MAAMA,yCAAA,CAAwB,MAAA,EAAQ,WAAW,GAAI,OAAO,IAAA;AAElE,EAAA,MAAM,MAAA,GAASC,oCAAkB,cAAc,CAAA;AAC/C,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,EAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAClC,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,MAAM,cAAA,GAAiB,MAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA;AACzD,EAAA,IAAI,CAAC,gBAAgB,OAAO,IAAA;AAE5B,EAAA,MAAM,UAAA,GACJ,SAAA,CAAU,MAAA,KAAW,CAAA,uBACb,GAAA,EAAY,GAChB,MAAM,cAAA,CAAe,gBAAA,CAAiB,EAAE,MAAA,EAAQ,UAAA,EAAY,WAAW,CAAA;AAC7E,EAAA,OAAO,EAAE,MAAA,EAAQ,UAAA,EAAY,cAAA,EAAe;AAC9C;AAMO,SAAS,oBAAsC,MAAA,EAAc;AAClE,EAAA,IAAI,aAAA,IAAiB,MAAA,IAAU,eAAA,IAAmB,MAAA,EAAQ;AACxD,IAAA,MAAM,IAAA,GAAO,EAAE,GAAG,MAAA,EAAO;AACzB,IAAA,OAAO,IAAA,CAAK,WAAA;AACZ,IAAA,OAAO,IAAA,CAAK,aAAA;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;AASA,eAAsB,sBAAA,CACpB,MAAA,EACA,cAAA,EACA,UAAA,EACA,MAAA,EACY;AACZ,EAAA,MAAM,UAAA,GAAa,MAAM,0BAAA,CAA2B,MAAA,EAAQ,gBAAgB,UAAA,EAAY,CAAC,MAAA,CAAO,EAAE,CAAC,CAAA;AACnG,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,WAAA,EAAa,WAAW,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,EAAE;AAAA,EACxE;AACA,EAAA,OAAO,oBAAoB,MAAM,CAAA;AACnC","file":"chunk-YUDME6CN.cjs","sourcesContent":["import type { Mastra } from '@mastra/core';\nimport type { RequestContext } from '@mastra/core/di';\nimport type { FavoritesStorage, StorageFavoriteEntityType } from '@mastra/core/storage';\n\nimport { getCallerAuthorId } from './authorship';\nimport { isBuilderFeatureEnabled } from './editor-builder';\n\n/**\n * Result of `prepareFavoritesEnrichment` — `null` when the `favorites` EE feature is off.\n * When non-null the caller may use `starredIds` to set `isFavorited` on records\n * and may pass `userId` along to storage list paths for pin-favorited-first\n * sorting (`pinFavoritedFor`).\n */\nexport type FavoritesEnrichmentContext = {\n userId: string;\n starredIds: Set<string>;\n favoritesStore: FavoritesStorage;\n} | null;\n\n/**\n * Resolve the EE feature flag plus the caller's favorited set for a list of\n * candidate entity IDs in one shot. Soft-gated: returns `null` if the feature\n * is off or there's no caller — handlers should drop `isFavorited` / `favoriteCount`\n * fields and ignore `?favoritedOnly=true` in that case.\n */\nexport async function prepareFavoritesEnrichment(\n mastra: Mastra,\n requestContext: RequestContext,\n entityType: StorageFavoriteEntityType,\n entityIds: string[],\n): Promise<FavoritesEnrichmentContext> {\n if (!(await isBuilderFeatureEnabled(mastra, 'favorites'))) return null;\n\n const userId = getCallerAuthorId(requestContext);\n if (!userId) return null;\n\n const storage = mastra.getStorage();\n if (!storage) return null;\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) return null;\n\n const starredIds =\n entityIds.length === 0\n ? new Set<string>()\n : await favoritesStore.isFavoritedBatch({ userId, entityType, entityIds });\n return { userId, starredIds, favoritesStore };\n}\n\n/**\n * Strip the favorites EE fields from a record. Used when the feature is off so\n * stale values from storage do not leak through the API.\n */\nexport function stripFavoriteFields<T extends object>(record: T): T {\n if ('isFavorited' in record || 'favoriteCount' in record) {\n const copy = { ...record } as Record<string, unknown>;\n delete copy.isFavorited;\n delete copy.favoriteCount;\n return copy as T;\n }\n return record;\n}\n\n/**\n * Convenience for single-entity handlers (GET / POST / PATCH): annotate\n * `isFavorited` from the caller's favorites set when enrichment is available,\n * otherwise strip both favorite fields. `favoriteCount` is the canonical\n * mirrored counter and is left in place so callers can render share-count UI\n * (it's identical across viewers).\n */\nexport async function enrichOrStripFavorites<T extends { id: string }>(\n mastra: Mastra,\n requestContext: RequestContext,\n entityType: StorageFavoriteEntityType,\n record: T,\n): Promise<T> {\n const enrichment = await prepareFavoritesEnrichment(mastra, requestContext, entityType, [record.id]);\n if (enrichment) {\n return { ...record, isFavorited: enrichment.starredIds.has(record.id) };\n }\n return stripFavoriteFields(record);\n}\n"]}
import { listVersionsResponseSchema, agentVersionPathParams, createVersionResponseSchema, getVersionResponseSchema, versionIdPathParams, restoreVersionResponseSchema, compareVersionsResponseSchema } from './chunk-F6ANJJFG.js';
import { listVersionsQuerySchema, createVersionBodySchema, activateVersionResponseSchema, deleteVersionResponseSchema, compareVersionsQuerySchema } from './chunk-FXXHWBF2.js';
import { extractConfigFromVersion, calculateChangedFields, createVersionWithRetry, enforceRetentionLimit, computeVersionDiffs } from './chunk-33QPJPK4.js';
import { assertStoredResourceScope, getStoredResourceScope } from './chunk-4GWTCVFL.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-H5LXHGEJ.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
// src/server/handlers/agent-versions.ts
var SNAPSHOT_CONFIG_FIELDS = [
"name",
"description",
"instructions",
"model",
"tools",
"defaultOptions",
"workflows",
"agents",
"integrationTools",
"inputProcessors",
"outputProcessors",
"memory",
"scorers",
"requestContextSchema",
"mcpClients"
];
var LIST_AGENT_VERSIONS_ROUTE = createRoute({
method: "GET",
path: "/stored/agents/:agentId/versions",
requiresAuth: true,
responseType: "json",
pathParamSchema: agentVersionPathParams,
queryParamSchema: listVersionsQuerySchema,
responseSchema: listVersionsResponseSchema,
summary: "List agent versions",
description: "Returns a paginated list of all versions for a stored agent",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, page, perPage, orderBy, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const storedAgent = await agentsStore.getById(agentId);
let codeAgentExists = false;
try {
mastra.getAgentById(agentId);
codeAgentExists = true;
} catch {
}
if (!storedAgent && !codeAgentExists) {
throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
assertStoredResourceScope(storedAgent, await getStoredResourceScope(mastra, requestContext));
const result = await agentsStore.listVersions({
agentId,
page,
perPage,
orderBy
});
return result;
} catch (error) {
return handleError(error, "Error listing agent versions");
}
}
});
var CREATE_AGENT_VERSION_ROUTE = createRoute({
method: "POST",
path: "/stored/agents/:agentId/versions",
requiresAuth: true,
responseType: "json",
pathParamSchema: agentVersionPathParams,
bodySchema: createVersionBodySchema,
responseSchema: createVersionResponseSchema,
summary: "Create agent version",
description: "Creates a new version snapshot of the current agent configuration",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, changeMessage, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
if (!agent) {
throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
let currentConfig = {};
if (agent.activeVersionId) {
const activeVersion = await agentsStore.getVersion(agent.activeVersionId);
if (activeVersion) {
currentConfig = extractConfigFromVersion(
activeVersion,
SNAPSHOT_CONFIG_FIELDS
);
}
}
const latestVersion = await agentsStore.getLatestVersion(agentId);
if (!agent.activeVersionId && latestVersion) {
currentConfig = extractConfigFromVersion(
latestVersion,
SNAPSHOT_CONFIG_FIELDS
);
}
const previousConfig = latestVersion ? extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
const changedFields = calculateChangedFields(previousConfig, currentConfig);
const { versionId } = await createVersionWithRetry(
agentsStore,
agentId,
"agentId",
currentConfig,
changedFields,
{ changeMessage }
);
const version = await agentsStore.getVersion(versionId);
if (!version) {
throw new HTTPException(500, { message: "Failed to retrieve created version" });
}
await enforceRetentionLimit(
agentsStore,
agentId,
"agentId",
agent.activeVersionId
);
return version;
} catch (error) {
return handleError(error, "Error creating agent version");
}
}
});
var GET_AGENT_VERSION_ROUTE = createRoute({
method: "GET",
path: "/stored/agents/:agentId/versions/:versionId",
requiresAuth: true,
responseType: "json",
pathParamSchema: versionIdPathParams,
responseSchema: getVersionResponseSchema,
summary: "Get agent version",
description: "Returns a specific version of an agent by its version ID",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const version = await agentsStore.getVersion(versionId);
if (!version) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.agentId !== agentId) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
}
const agent = await agentsStore.getById(agentId);
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
return version;
} catch (error) {
return handleError(error, "Error getting agent version");
}
}
});
var ACTIVATE_AGENT_VERSION_ROUTE = createRoute({
method: "POST",
path: "/stored/agents/:agentId/versions/:versionId/activate",
requiresAuth: true,
responseType: "json",
pathParamSchema: versionIdPathParams,
responseSchema: activateVersionResponseSchema,
summary: "Activate agent version",
description: "Sets a specific version as the active version for the agent",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
if (!agent) {
throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
const version = await agentsStore.getVersion(versionId);
if (!version) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.agentId !== agentId) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
}
await agentsStore.update({
id: agentId,
activeVersionId: versionId,
status: "published"
});
mastra.getEditor()?.agent.clearCache(agentId);
return {
success: true,
message: `Version ${version.versionNumber} is now active`,
activeVersionId: versionId
};
} catch (error) {
return handleError(error, "Error activating agent version");
}
}
});
var RESTORE_AGENT_VERSION_ROUTE = createRoute({
method: "POST",
path: "/stored/agents/:agentId/versions/:versionId/restore",
requiresAuth: true,
responseType: "json",
pathParamSchema: versionIdPathParams,
responseSchema: restoreVersionResponseSchema,
summary: "Restore agent version",
description: "Restores the agent configuration from a version, creating a new version",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
if (!agent) {
throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
const versionToRestore = await agentsStore.getVersion(versionId);
if (!versionToRestore) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (versionToRestore.agentId !== agentId) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
}
const restoredConfig = extractConfigFromVersion(
versionToRestore,
SNAPSHOT_CONFIG_FIELDS
);
await agentsStore.update({
id: agentId,
...restoredConfig
});
const latestVersion = await agentsStore.getLatestVersion(agentId);
const previousConfig = latestVersion ? extractConfigFromVersion(latestVersion, SNAPSHOT_CONFIG_FIELDS) : null;
const changedFields = calculateChangedFields(previousConfig, restoredConfig);
const { versionId: newVersionId } = await createVersionWithRetry(
agentsStore,
agentId,
"agentId",
restoredConfig,
changedFields,
{
changeMessage: `Restored from version ${versionToRestore.versionNumber}`
}
);
const newVersion = await agentsStore.getVersion(newVersionId);
if (!newVersion) {
throw new HTTPException(500, { message: "Failed to retrieve created version" });
}
await enforceRetentionLimit(
agentsStore,
agentId,
"agentId",
agent.activeVersionId
);
mastra.getEditor()?.agent.clearCache(agentId);
return newVersion;
} catch (error) {
return handleError(error, "Error restoring agent version");
}
}
});
var DELETE_AGENT_VERSION_ROUTE = createRoute({
method: "DELETE",
path: "/stored/agents/:agentId/versions/:versionId",
requiresAuth: true,
responseType: "json",
pathParamSchema: versionIdPathParams,
responseSchema: deleteVersionResponseSchema,
summary: "Delete agent version",
description: "Deletes a specific version (cannot delete the active version)",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, versionId, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
if (!agent) {
throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });
}
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
const version = await agentsStore.getVersion(versionId);
if (!version) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
}
if (version.agentId !== agentId) {
throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
}
if (agent.activeVersionId === versionId) {
throw new HTTPException(400, {
message: "Cannot delete the active version. Activate a different version first."
});
}
await agentsStore.deleteVersion(versionId);
mastra.getEditor()?.agent.clearCache(agentId);
return {
success: true,
message: `Version ${version.versionNumber} deleted successfully`
};
} catch (error) {
return handleError(error, "Error deleting agent version");
}
}
});
var COMPARE_AGENT_VERSIONS_ROUTE = createRoute({
method: "GET",
path: "/stored/agents/:agentId/versions/compare",
requiresAuth: true,
responseType: "json",
pathParamSchema: agentVersionPathParams,
queryParamSchema: compareVersionsQuerySchema,
responseSchema: compareVersionsResponseSchema,
summary: "Compare agent versions",
description: "Compares two versions and returns the differences between them",
tags: ["Agent Versions"],
handler: async ({ mastra, agentId, from, to, requestContext }) => {
try {
const storage = mastra.getStorage();
if (!storage) {
throw new HTTPException(500, { message: "Storage is not configured" });
}
const agentsStore = await storage.getStore("agents");
if (!agentsStore) {
throw new HTTPException(500, { message: "Agents storage domain is not available" });
}
const agent = await agentsStore.getById(agentId);
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
const fromVersion = await agentsStore.getVersion(from);
if (!fromVersion) {
throw new HTTPException(404, { message: `Version with id ${from} not found` });
}
if (fromVersion.agentId !== agentId) {
throw new HTTPException(404, { message: `Version with id ${from} not found for agent ${agentId}` });
}
const toVersion = await agentsStore.getVersion(to);
if (!toVersion) {
throw new HTTPException(404, { message: `Version with id ${to} not found` });
}
if (toVersion.agentId !== agentId) {
throw new HTTPException(404, { message: `Version with id ${to} not found for agent ${agentId}` });
}
const fromConfig = extractConfigFromVersion(
fromVersion,
SNAPSHOT_CONFIG_FIELDS
);
const toConfig = extractConfigFromVersion(
toVersion,
SNAPSHOT_CONFIG_FIELDS
);
const diffs = computeVersionDiffs(fromConfig, toConfig);
return {
diffs,
fromVersion,
toVersion
};
} catch (error) {
return handleError(error, "Error comparing agent versions");
}
}
});
export { ACTIVATE_AGENT_VERSION_ROUTE, COMPARE_AGENT_VERSIONS_ROUTE, CREATE_AGENT_VERSION_ROUTE, DELETE_AGENT_VERSION_ROUTE, GET_AGENT_VERSION_ROUTE, LIST_AGENT_VERSIONS_ROUTE, RESTORE_AGENT_VERSION_ROUTE };
//# sourceMappingURL=chunk-YZNPRVOK.js.map
//# sourceMappingURL=chunk-YZNPRVOK.js.map
{"version":3,"sources":["../src/server/handlers/agent-versions.ts"],"names":[],"mappings":"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","file":"chunk-YZNPRVOK.js","sourcesContent":["import type { z } from 'zod/v4';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentVersionPathParams,\n versionIdPathParams,\n listVersionsQuerySchema,\n createVersionBodySchema,\n compareVersionsQuerySchema,\n listVersionsResponseSchema,\n getVersionResponseSchema,\n createVersionResponseSchema,\n activateVersionResponseSchema,\n restoreVersionResponseSchema,\n deleteVersionResponseSchema,\n compareVersionsResponseSchema,\n} from '../schemas/agent-versions';\nimport type { ServerRoute, RouteSchemas, InferParams } from '../server-adapter/routes';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { handleError } from './error';\nimport {\n extractConfigFromVersion,\n calculateChangedFields,\n computeVersionDiffs,\n createVersionWithRetry,\n enforceRetentionLimit,\n} from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\n/**\n * The config field names that live on version rows (StorageAgentSnapshotType fields).\n * Used to extract config from a version record for comparison and restoration.\n */\nconst SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'instructions',\n 'model',\n 'tools',\n 'defaultOptions',\n 'workflows',\n 'agents',\n 'integrationTools',\n 'inputProcessors',\n 'outputProcessors',\n 'memory',\n 'scorers',\n 'requestContextSchema',\n 'mcpClients',\n] as const;\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/agents/:agentId/versions - List all versions for an agent\n */\nexport const LIST_AGENT_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: listVersionsQuerySchema,\n responseSchema: listVersionsResponseSchema,\n summary: 'List agent versions',\n description: 'Returns a paginated list of all versions for a stored agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, page, perPage, orderBy, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists in code or storage\n const storedAgent = await agentsStore.getById(agentId);\n let codeAgentExists = false;\n try {\n mastra.getAgentById(agentId);\n codeAgentExists = true;\n } catch {\n // Agent not registered in code\n }\n\n if (!storedAgent && !codeAgentExists) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(storedAgent, await getStoredResourceScope(mastra, requestContext));\n\n const result = await agentsStore.listVersions({\n agentId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing agent versions');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions - Create a new version snapshot\n */\nexport const CREATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n bodySchema: createVersionBodySchema,\n responseSchema: createVersionResponseSchema,\n summary: 'Create agent version',\n description: 'Creates a new version snapshot of the current agent configuration',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, changeMessage, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Get the current agent to find its active version\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the current active version to snapshot its config\n let currentConfig: Record<string, unknown> = {};\n if (agent.activeVersionId) {\n const activeVersion = await agentsStore.getVersion(agent.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n\n // If no activeVersionId, fall back to latest version config\n if (!agent.activeVersionId && latestVersion) {\n currentConfig = extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, currentConfig);\n\n // Create the new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n // Get the created version to return\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/:versionId - Get a specific version\n */\nexport const GET_AGENT_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: getVersionResponseSchema,\n summary: 'Get agent version',\n description: 'Returns a specific version of an agent by its version ID',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n const version = await agentsStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n // Verify the version belongs to the specified agent\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: activateVersionResponseSchema,\n summary: 'Activate agent version',\n description: 'Sets a specific version as the active version for the agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Update the agent's activeVersionId AND status to 'published'\n await agentsStore.update({\n id: agentId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} is now active`,\n activeVersionId: versionId,\n };\n } catch (error) {\n return handleError(error, 'Error activating agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/restore - Restore agent to a version\n */\nexport const RESTORE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: restoreVersionResponseSchema,\n summary: 'Restore agent version',\n description: 'Restores the agent configuration from a version, creating a new version',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the version to restore\n const versionToRestore = await agentsStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Extract the config fields from the version to restore (top-level, no .snapshot)\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Update the agent with the config from the version to restore\n await agentsStore.update({\n id: agentId,\n ...restoredConfig,\n });\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, restoredConfig);\n\n // Create a new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId: newVersionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n // Do NOT auto-activate the restored version - user must explicitly activate it\n\n // Get the created version to return\n const newVersion = await agentsStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n // Use the agent's existing activeVersionId\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the restored config\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring agent version');\n }\n },\n});\n\n/**\n * DELETE /stored/agents/:agentId/versions/:versionId - Delete a version\n */\nexport const DELETE_AGENT_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: deleteVersionResponseSchema,\n summary: 'Delete agent version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Check if this is the active version\n if (agent.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await agentsStore.deleteVersion(versionId);\n\n // Clear the editor cache in case the deleted version affected resolution\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/compare - Compare two versions\n */\nexport const COMPARE_AGENT_VERSIONS_ROUTE: ServerRoute<\n InferParams<typeof agentVersionPathParams, typeof compareVersionsQuerySchema, undefined>,\n z.infer<typeof compareVersionsResponseSchema>,\n 'json',\n RouteSchemas<\n typeof agentVersionPathParams,\n typeof compareVersionsQuerySchema,\n undefined,\n typeof compareVersionsResponseSchema\n >,\n 'GET',\n '/stored/agents/:agentId/versions/compare'\n> = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: compareVersionsQuerySchema,\n responseSchema: compareVersionsResponseSchema,\n summary: 'Compare agent versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, from, to, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get both versions\n const fromVersion = await agentsStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${from} not found for agent ${agentId}` });\n }\n\n const toVersion = await agentsStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${to} not found for agent ${agentId}` });\n }\n\n // Extract config fields from both versions (top-level, no .snapshot)\n const fromConfig = extractConfigFromVersion(\n fromVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n const toConfig = extractConfigFromVersion(\n toVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Compute diffs on the config fields\n const diffs = computeVersionDiffs(fromConfig, toConfig);\n\n return {\n diffs,\n fromVersion,\n toVersion,\n };\n } catch (error) {\n return handleError(error, 'Error comparing agent versions');\n }\n },\n});\n"]}

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display