🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@mastra/server

Package Overview
Dependencies
Maintainers
7
Versions
1109
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.48.0-alpha.6
to
1.48.0-alpha.7
+58
dist/api-schema-manifest-OSFSFYKI.cjs
'use strict';
var chunk5SZOGYYO_cjs = require('./chunk-5SZOGYYO.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.cjs');
// src/server/server-adapter/api-schema-manifest.ts
function convertSchema(schema) {
return schema ? chunkDN2NUSL2_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 = chunk5SZOGYYO_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-OSFSFYKI.cjs.map
//# sourceMappingURL=api-schema-manifest-OSFSFYKI.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-OSFSFYKI.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-XJLHTR7T.js';
import { schemaToJsonSchema } from './chunk-Z5MTOVTR.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-YKMSPSZR.js.map
//# sourceMappingURL=api-schema-manifest-YKMSPSZR.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-YKMSPSZR.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"]}

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 chunkT3C54LPX_cjs = require('./chunk-T3C54LPX.cjs');
var chunkO4O2EJF7_cjs = require('./chunk-O4O2EJF7.cjs');
var chunkMJH4EEUV_cjs = require('./chunk-MJH4EEUV.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
var chunkYWUVDFQZ_cjs = require('./chunk-YWUVDFQZ.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunkDN2NUSL2_cjs.createRoute({
method: "PUT",
path: "/stored/skills/:storedSkillId/favorite",
responseType: "json",
pathParamSchema: chunkT3C54LPX_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 chunkMJH4EEUV_cjs.requireBuilderFeature(mastra, "favorites");
const callerId = chunkHDIYJI2Z_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(skill, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_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 = chunkDN2NUSL2_cjs.createRoute({
method: "DELETE",
path: "/stored/skills/:storedSkillId/favorite",
responseType: "json",
pathParamSchema: chunkT3C54LPX_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 chunkMJH4EEUV_cjs.requireBuilderFeature(mastra, "favorites");
const callerId = chunkHDIYJI2Z_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(skill, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_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-3EZOV6A3.cjs.map
//# sourceMappingURL=chunk-3EZOV6A3.cjs.map
{"version":3,"sources":["../src/server/handlers/stored-skill-favorites.ts"],"names":["HTTPException","createRoute","storedSkillIdPathParams","favoriteToggleResponseSchema","requireBuilderFeature","getCallerAuthorId","assertStoredResourceScope","getStoredResourceScope","assertReadAccess","handleError"],"mappings":";;;;;;;;;;;;AAaA,eAAe,oBAAoB,MAAA,EAAqD;AACtF,EAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAClC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAIA,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,EACvE;AACA,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AAClD,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAM,IAAIA,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0CAA0C,CAAA;AAAA,EACpF;AACA,EAAA,MAAM,cAAA,GAAiB,MAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA;AACzD,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,MAAM,IAAIA,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6CAA6C,CAAA;AAAA,EACvF;AACA,EAAA,OAAO,EAAE,YAAY,cAAA,EAAe;AACtC;AAKO,IAAM,8BAA8BC,6BAAA,CAAY;AAAA,EACrD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,wCAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiBC,yCAAA;AAAA,EACjB,cAAA,EAAgBC,8CAAA;AAAA,EAChB,OAAA,EAAS,yBAAA;AAAA,EACT,WAAA,EAAa,sEAAA;AAAA,EACb,IAAA,EAAM,CAAC,eAAe,CAAA;AAAA,EACtB,YAAA,EAAc,IAAA;AAAA,EACd,kBAAA,EAAoB,oBAAA;AAAA,EACpB,SAAS,OAAO,EAAE,MAAA,EAAQ,cAAA,EAAgB,eAAc,KAAM;AAC5D,IAAA,IAAI;AACF,MAAA,MAAMC,uCAAA,CAAsB,QAAQ,WAAW,CAAA;AAE/C,MAAA,MAAM,QAAA,GAAWC,oCAAkB,cAAc,CAAA;AACjD,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAIL,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,2BAA2B,CAAA;AAAA,MACrE;AAEA,MAAA,MAAM,EAAE,UAAA,EAAY,cAAA,EAAe,GAAI,MAAM,oBAAoB,MAAM,CAAA;AAEvE,MAAA,MAAM,KAAA,GAAQ,MAAM,UAAA,CAAW,eAAA,CAAgB,aAAa,CAAA;AAC5D,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,IAAIA,gCAAc,GAAA,EAAK,EAAE,SAAS,CAAA,qBAAA,EAAwB,aAAa,cAAc,CAAA;AAAA,MAC7F;AACA,MAAAM,2CAAA,CAA0B,KAAA,EAAO,MAAMC,wCAAA,CAAuB,MAAA,EAAQ,cAAc,CAAC,CAAA;AAGrF,MAAAC,kCAAA,CAAiB,EAAE,gBAAgB,QAAA,EAAU,eAAA,EAAiB,YAAY,aAAA,EAAe,MAAA,EAAQ,OAAO,CAAA;AAExG,MAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,QAAA,CAAS;AAAA,QAC3C,MAAA,EAAQ,QAAA;AAAA,QACR,UAAA,EAAY,OAAA;AAAA,QACZ,QAAA,EAAU;AAAA,OACX,CAAA;AACD,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAOC,6BAAA,CAAY,OAAO,+BAA+B,CAAA;AAAA,IAC3D;AAAA,EACF;AACF,CAAC;AAKM,IAAM,gCAAgCR,6BAAA,CAAY;AAAA,EACvD,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,wCAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiBC,yCAAA;AAAA,EACjB,cAAA,EAAgBC,8CAAA;AAAA,EAChB,OAAA,EAAS,2BAAA;AAAA,EACT,WAAA,EAAa,uEAAA;AAAA,EACb,IAAA,EAAM,CAAC,eAAe,CAAA;AAAA,EACtB,YAAA,EAAc,IAAA;AAAA,EACd,kBAAA,EAAoB,oBAAA;AAAA,EACpB,SAAS,OAAO,EAAE,MAAA,EAAQ,cAAA,EAAgB,eAAc,KAAM;AAC5D,IAAA,IAAI;AACF,MAAA,MAAMC,uCAAA,CAAsB,QAAQ,WAAW,CAAA;AAE/C,MAAA,MAAM,QAAA,GAAWC,oCAAkB,cAAc,CAAA;AACjD,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAIL,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,2BAA2B,CAAA;AAAA,MACrE;AAEA,MAAA,MAAM,EAAE,UAAA,EAAY,cAAA,EAAe,GAAI,MAAM,oBAAoB,MAAM,CAAA;AAEvE,MAAA,MAAM,KAAA,GAAQ,MAAM,UAAA,CAAW,eAAA,CAAgB,aAAa,CAAA;AAC5D,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,IAAIA,gCAAc,GAAA,EAAK,EAAE,SAAS,CAAA,qBAAA,EAAwB,aAAa,cAAc,CAAA;AAAA,MAC7F;AACA,MAAAM,2CAAA,CAA0B,KAAA,EAAO,MAAMC,wCAAA,CAAuB,MAAA,EAAQ,cAAc,CAAC,CAAA;AAErF,MAAAC,kCAAA,CAAiB,EAAE,gBAAgB,QAAA,EAAU,eAAA,EAAiB,YAAY,aAAA,EAAe,MAAA,EAAQ,OAAO,CAAA;AAExG,MAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,UAAA,CAAW;AAAA,QAC7C,MAAA,EAAQ,QAAA;AAAA,QACR,UAAA,EAAY,OAAA;AAAA,QACZ,QAAA,EAAU;AAAA,OACX,CAAA;AACD,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAOC,6BAAA,CAAY,OAAO,iCAAiC,CAAA;AAAA,IAC7D;AAAA,EACF;AACF,CAAC","file":"chunk-3EZOV6A3.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"]}
import { listWorkflowsResponseSchema, workflowInfoSchema, workflowIdPathParams, workflowRunsResponseSchema, listWorkflowRunsQuerySchema, workflowRunResultSchema, workflowRunResultQuerySchema, workflowRunPathParams, workflowControlResponseSchema, createWorkflowRunResponseSchema, createWorkflowRunBodySchema, streamWorkflowBodySchema, resumeBodySchema, workflowExecutionResultSchema, startAsyncWorkflowBodySchema, observeWorkflowQuerySchema, restartBodySchema, timeTravelBodySchema } from './chunk-K4HCNNHA.js';
import { streamResponseSchema } from './chunk-R3KUPFCO.js';
import { MastraFGAPermissions, getEffectiveResourceId, validateRunOwnership } from './chunk-JBSUT5XF.js';
import { optionalRunIdSchema, runIdSchema } from './chunk-2YY3EMMS.js';
import { getWorkflowInfo, WorkflowRegistry } from './chunk-EOGTJIPF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
import { __export } from './chunk-PR4QN5HX.js';
import { createCachingTransformStream, createReplayStream } from '@mastra/core/stream';
import { z } from 'zod/v4';
// src/server/handlers/workflows.ts
var workflows_exports = {};
__export(workflows_exports, {
CANCEL_WORKFLOW_RUN_ROUTE: () => CANCEL_WORKFLOW_RUN_ROUTE,
CREATE_WORKFLOW_RUN_ROUTE: () => CREATE_WORKFLOW_RUN_ROUTE,
DELETE_WORKFLOW_RUN_BY_ID_ROUTE: () => DELETE_WORKFLOW_RUN_BY_ID_ROUTE,
EXECUTE_WORKFLOW_STEP_ROUTE: () => EXECUTE_WORKFLOW_STEP_ROUTE,
GET_WORKFLOW_BY_ID_ROUTE: () => GET_WORKFLOW_BY_ID_ROUTE,
GET_WORKFLOW_RUN_BY_ID_ROUTE: () => GET_WORKFLOW_RUN_BY_ID_ROUTE,
LIST_WORKFLOWS_ROUTE: () => LIST_WORKFLOWS_ROUTE,
LIST_WORKFLOW_RUNS_ROUTE: () => LIST_WORKFLOW_RUNS_ROUTE,
OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE: () => OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE,
OBSERVE_STREAM_WORKFLOW_ROUTE: () => OBSERVE_STREAM_WORKFLOW_ROUTE,
RECEIVE_WORKFLOW_EVENT_ROUTE: () => RECEIVE_WORKFLOW_EVENT_ROUTE,
RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE: () => RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,
RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE: () => RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,
RESTART_ASYNC_WORKFLOW_ROUTE: () => RESTART_ASYNC_WORKFLOW_ROUTE,
RESTART_WORKFLOW_ROUTE: () => RESTART_WORKFLOW_ROUTE,
RESUME_ASYNC_WORKFLOW_ROUTE: () => RESUME_ASYNC_WORKFLOW_ROUTE,
RESUME_NO_WAIT_WORKFLOW_ROUTE: () => RESUME_NO_WAIT_WORKFLOW_ROUTE,
RESUME_STREAM_WORKFLOW_ROUTE: () => RESUME_STREAM_WORKFLOW_ROUTE,
RESUME_WORKFLOW_ROUTE: () => RESUME_WORKFLOW_ROUTE,
START_ASYNC_WORKFLOW_ROUTE: () => START_ASYNC_WORKFLOW_ROUTE,
START_WORKFLOW_RUN_ROUTE: () => START_WORKFLOW_RUN_ROUTE,
STREAM_LEGACY_WORKFLOW_ROUTE: () => STREAM_LEGACY_WORKFLOW_ROUTE,
STREAM_WORKFLOW_ROUTE: () => STREAM_WORKFLOW_ROUTE,
TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE: () => TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,
TIME_TRAVEL_STREAM_WORKFLOW_ROUTE: () => TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,
TIME_TRAVEL_WORKFLOW_ROUTE: () => TIME_TRAVEL_WORKFLOW_ROUTE
});
async function listWorkflowsFromSystem({ mastra, workflowId }) {
const logger = mastra.getLogger();
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
let workflow;
workflow = WorkflowRegistry.getWorkflow(workflowId);
if (!workflow) {
try {
workflow = mastra.getWorkflowById(workflowId);
} catch (error) {
logger.debug("Error getting workflow, searching agents for workflow", error);
}
}
if (!workflow) {
logger.debug("Workflow not found, searching agents for workflow", { workflowId });
const agents = mastra.listAgents();
if (Object.keys(agents || {}).length) {
for (const [_, agent] of Object.entries(agents)) {
try {
const workflows = await agent.listWorkflows();
if (workflows[workflowId]) {
workflow = workflows[workflowId];
break;
}
} catch (error) {
logger.debug("Error getting workflow from agent", error);
}
}
}
}
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
return { workflow };
}
var LIST_WORKFLOWS_ROUTE = createRoute({
method: "GET",
path: "/workflows",
responseType: "json",
queryParamSchema: z.object({
partial: z.string().optional()
}),
responseSchema: listWorkflowsResponseSchema,
summary: "List all workflows",
description: "Returns a list of all available workflows in the system",
tags: ["Workflows"],
requiresAuth: true,
handler: (async ({ mastra, partial, requestContext }) => {
try {
const workflows = mastra.listWorkflows({ serialized: false });
const isPartial = partial === "true";
const _workflows = Object.entries(workflows).reduce((acc, [key, workflow]) => {
acc[key] = getWorkflowInfo(workflow, isPartial);
return acc;
}, {});
const fgaProvider = mastra.getServer?.()?.fga;
const user = requestContext?.get("user");
if (fgaProvider) {
if (!user) {
return {};
}
const workflowList = Object.entries(_workflows).map(([id, w]) => ({ id, ...w }));
const accessible = await fgaProvider.filterAccessible(
user,
workflowList,
"workflow",
MastraFGAPermissions.WORKFLOWS_READ
);
const accessibleSet = new Set(accessible.map((w) => w.id));
for (const id of Object.keys(_workflows)) {
if (!accessibleSet.has(id)) {
delete _workflows[id];
}
}
}
return _workflows;
} catch (error) {
return handleError(error, "Error getting workflows");
}
})
});
var GET_WORKFLOW_BY_ID_ROUTE = createRoute({
method: "GET",
path: "/workflows/:workflowId",
responseType: "json",
pathParamSchema: workflowIdPathParams,
responseSchema: workflowInfoSchema,
summary: "Get workflow by ID",
description: "Returns details for a specific workflow",
tags: ["Workflows"],
requiresAuth: true,
handler: (async ({ mastra, workflowId }) => {
try {
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
return getWorkflowInfo(workflow);
} catch (error) {
return handleError(error, "Error getting workflow");
}
})
});
var LIST_WORKFLOW_RUNS_ROUTE = createRoute({
method: "GET",
path: "/workflows/:workflowId/runs",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: listWorkflowRunsQuerySchema,
responseSchema: workflowRunsResponseSchema,
summary: "List workflow runs",
description: "Returns a paginated list of execution runs for the specified workflow",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({
mastra,
workflowId,
fromDate,
toDate,
page,
perPage,
limit,
offset,
resourceId,
status,
requestContext
}) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
let finalPage = page;
let finalPerPage = perPage;
if (finalPerPage === void 0 && limit !== void 0) {
finalPerPage = limit;
}
if (finalPage === void 0 && offset !== void 0 && finalPerPage !== void 0 && finalPerPage > 0) {
finalPage = Math.floor(offset / finalPerPage);
}
if (finalPerPage !== void 0 && (typeof finalPerPage !== "number" || !Number.isInteger(finalPerPage) || finalPerPage <= 0)) {
throw new HTTPException(400, { message: "perPage must be a positive integer" });
}
if (finalPage !== void 0 && (!Number.isInteger(finalPage) || finalPage < 0)) {
throw new HTTPException(400, { message: "page must be a non-negative integer" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const workflowRuns = await workflow.listWorkflowRuns({
fromDate: fromDate ? typeof fromDate === "string" ? new Date(fromDate) : fromDate : void 0,
toDate: toDate ? typeof toDate === "string" ? new Date(toDate) : toDate : void 0,
perPage: finalPerPage,
page: finalPage,
resourceId: effectiveResourceId,
status
}) || {
runs: [],
total: 0
};
return workflowRuns;
} catch (error) {
return handleError(error, "Error getting workflow runs");
}
}
});
var GET_WORKFLOW_RUN_BY_ID_ROUTE = createRoute({
method: "GET",
path: "/workflows/:workflowId/runs/:runId",
responseType: "json",
pathParamSchema: workflowRunPathParams,
queryParamSchema: workflowRunResultQuerySchema,
responseSchema: workflowRunResultSchema,
summary: "Get workflow run by ID",
description: "Returns a workflow run with metadata and processed execution state. Use the fields query parameter to reduce payload size by requesting only specific fields (e.g., ?fields=status,result,metadata)",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, fields, withNestedWorkflows, requestContext }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "Run ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const fieldList = fields ? fields.split(",").map((f) => f.trim()) : void 0;
const run = await workflow.getWorkflowRunById(runId, {
withNestedWorkflows: withNestedWorkflows !== "false",
// Default to true unless explicitly 'false'
fields: fieldList
});
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
return run;
} catch (error) {
return handleError(error, "Error getting workflow run");
}
}
});
var DELETE_WORKFLOW_RUN_BY_ID_ROUTE = createRoute({
method: "DELETE",
path: "/workflows/:workflowId/runs/:runId",
responseType: "json",
pathParamSchema: workflowRunPathParams,
responseSchema: workflowControlResponseSchema,
summary: "Delete workflow run by ID",
description: "Deletes a specific workflow run by ID",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "Run ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
await workflow.deleteWorkflowRunById(runId);
return { message: "Workflow run deleted" };
} catch (error) {
return handleError(error, "Error deleting workflow run");
}
}
});
var CREATE_WORKFLOW_RUN_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/create-run",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: optionalRunIdSchema,
bodySchema: createWorkflowRunBodySchema,
responseSchema: createWorkflowRunResponseSchema,
summary: "Create workflow run",
description: "Creates a new workflow execution instance with an optional custom run ID",
tags: ["Workflows"],
requiresAuth: true,
// Creating a run is part of the execute flow (Studio/UI calls this before
// starting/streaming a workflow), so allow either permission. `write` is kept
// for back-compat with roles that already grant it.
requiresPermission: ["workflows:write", "workflows:execute"],
handler: async ({ mastra, workflowId, runId, resourceId, disableScorers, requestContext }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.createRun({ runId, resourceId: effectiveResourceId, disableScorers });
return { runId: run.runId };
} catch (error) {
return handleError(error, "Error creating workflow run");
}
}
});
var STREAM_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/stream",
responseType: "stream",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: streamWorkflowBodySchema,
summary: "Stream workflow execution",
description: "Executes a workflow and streams the results in real-time",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, resourceId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to stream workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const serverCache = mastra.getServerCache();
const run = await workflow.createRun({ runId, resourceId: effectiveResourceId });
const result = run.stream({ ...params, requestContext });
if (serverCache) {
const { transform } = createCachingTransformStream({
cache: serverCache,
cacheKey: runId
});
return result.fullStream.pipeThrough(transform);
}
return result.fullStream;
} catch (error) {
return handleError(error, "Error streaming workflow");
}
}
});
var RESUME_STREAM_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/resume-stream",
responseType: "stream",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: resumeBodySchema,
responseSchema: streamResponseSchema,
summary: "Resume workflow stream",
description: "Resumes a suspended workflow execution and continues streaming results",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const serverCache = mastra.getServerCache();
const resumeResult = _run.resumeStream({ ...params, requestContext });
if (serverCache) {
const { transform } = createCachingTransformStream({
cache: serverCache,
cacheKey: runId
});
return resumeResult.fullStream.pipeThrough(transform);
}
return resumeResult.fullStream;
} catch (error) {
return handleError(error, "Error resuming workflow");
}
}
});
var START_ASYNC_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/start-async",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: optionalRunIdSchema,
bodySchema: startAsyncWorkflowBodySchema,
responseSchema: workflowExecutionResultSchema,
summary: "Start workflow asynchronously",
description: "Starts a workflow execution asynchronously without streaming results",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, resourceId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const _run = await workflow.createRun({ runId, resourceId: effectiveResourceId });
const result = await _run.start({ ...params, requestContext });
return result;
} catch (error) {
return handleError(error, "Error starting async workflow");
}
}
});
var START_WORKFLOW_RUN_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/start",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: startAsyncWorkflowBodySchema,
responseSchema: workflowControlResponseSchema,
summary: "Start specific workflow run",
description: "Starts execution of a specific workflow run by ID",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to start run" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
void _run.start({
...params,
requestContext
});
return { message: "Workflow run started" };
} catch (e) {
return handleError(e, "Error starting workflow run");
}
}
});
var OBSERVE_STREAM_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/observe",
responseType: "stream",
pathParamSchema: workflowIdPathParams,
queryParamSchema: observeWorkflowQuerySchema,
responseSchema: streamResponseSchema,
summary: "Observe workflow stream",
description: "Observes and streams updates from an already running workflow execution. Supports position-based resume with offset for efficient reconnection.",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, offset, requestContext }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to observe workflow stream" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const serverCache = mastra.getServerCache();
if (!serverCache) {
throw new HTTPException(500, { message: "Server cache not found" });
}
const startIndex = offset ?? 0;
const cachedRunChunks = await serverCache.listFromTo(runId, startIndex);
const liveStream = _run.observeStream();
return createReplayStream({
history: cachedRunChunks,
liveSource: liveStream
});
} catch (error) {
return handleError(error, "Error observing workflow stream");
}
}
});
var RESUME_ASYNC_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/resume-async",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: resumeBodySchema,
responseSchema: workflowExecutionResultSchema,
summary: "Resume workflow asynchronously",
description: "Resumes a suspended workflow execution asynchronously without streaming",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const result = await _run.resume({ ...params, requestContext });
return result;
} catch (error) {
return handleError(error, "Error resuming workflow step");
}
}
});
var RESUME_NO_WAIT_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/resume-no-wait",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: resumeBodySchema,
responseSchema: createWorkflowRunResponseSchema,
summary: "Resume workflow without waiting",
description: "Resumes a suspended workflow execution without waiting (fire-and-forget) and returns immediately with the runId. The workflow continues executing in the background.",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const result = await _run.resumeAsync({ ...params, requestContext });
return result;
} catch (error) {
return handleError(error, "Error resuming workflow step");
}
}
});
var RESUME_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/resume",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: resumeBodySchema,
responseSchema: workflowControlResponseSchema,
summary: "Resume workflow",
description: "Resumes a suspended workflow execution from a specific step",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
void _run.resume({ ...params, requestContext });
return { message: "Workflow run resumed" };
} catch (error) {
return handleError(error, "Error resuming workflow");
}
}
});
var RESTART_ASYNC_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/restart-async",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: restartBodySchema,
responseSchema: workflowExecutionResultSchema,
summary: "Restart workflow asynchronously",
description: "Restarts an active workflow execution asynchronously",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to restart workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const result = await _run.restart({ ...params, requestContext });
return result;
} catch (error) {
return handleError(error, "Error restarting workflow");
}
}
});
var RESTART_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/restart",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: restartBodySchema,
responseSchema: workflowControlResponseSchema,
summary: "Restart workflow",
description: "Restarts an active workflow execution",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to restart workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
void _run.restart({ ...params, requestContext });
return { message: "Workflow run restarted" };
} catch (error) {
return handleError(error, "Error restarting workflow");
}
}
});
var RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/restart-all-active-workflow-runs-async",
responseType: "json",
pathParamSchema: workflowIdPathParams,
responseSchema: workflowControlResponseSchema,
summary: "Restart all active workflow runs asynchronously",
description: "Restarts all active workflow runs asynchronously",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId }) => {
try {
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
await workflow.restartAllActiveWorkflowRuns();
return { message: "All active workflow runs restarted" };
} catch (error) {
return handleError(error, "Error restarting workflow");
}
}
});
var RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/restart-all-active-workflow-runs",
responseType: "json",
pathParamSchema: workflowIdPathParams,
responseSchema: workflowControlResponseSchema,
summary: "Restart all active workflow runs",
description: "Restarts all active workflow runs",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId }) => {
try {
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
void workflow.restartAllActiveWorkflowRuns();
return { message: "All active workflow runs restarted" };
} catch (error) {
return handleError(error, "Error restarting workflow");
}
}
});
var TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/time-travel-async",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: timeTravelBodySchema,
responseSchema: workflowExecutionResultSchema,
summary: "Time travel workflow asynchronously",
description: "Time travels a workflow run asynchronously without streaming",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to time travel workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const result = await _run.timeTravel({ ...params, requestContext });
return result;
} catch (error) {
return handleError(error, "Error time traveling workflow");
}
}
});
var TIME_TRAVEL_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/time-travel",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: timeTravelBodySchema,
responseSchema: workflowControlResponseSchema,
summary: "Time travel workflow",
description: "Time travels a workflow run, starting from a specific step",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to time travel workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
void _run.timeTravel({ ...params, requestContext });
return { message: "Workflow run time travel started" };
} catch (error) {
return handleError(error, "Error time traveling workflow");
}
}
});
var TIME_TRAVEL_STREAM_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/time-travel-stream",
responseType: "stream",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: timeTravelBodySchema,
summary: "Time travel workflow stream",
description: "Time travels a workflow run, starting from a specific step, and streams the results in real-time",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to time travel workflow stream" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const existingRun = await workflow.getWorkflowRunById(runId);
if (!existingRun) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(existingRun, effectiveResourceId);
const serverCache = mastra.getServerCache();
const run = await workflow.createRun({ runId, resourceId: existingRun.resourceId });
const result = run.timeTravelStream({ ...params, requestContext });
if (serverCache) {
const { transform } = createCachingTransformStream({
cache: serverCache,
cacheKey: runId
});
return result.fullStream.pipeThrough(transform);
}
return result.fullStream;
} catch (error) {
return handleError(error, "Error time traveling workflow stream");
}
}
});
var CANCEL_WORKFLOW_RUN_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/runs/:runId/cancel",
responseType: "json",
pathParamSchema: workflowRunPathParams,
responseSchema: workflowControlResponseSchema,
summary: "Cancel workflow run",
description: "Cancels an in-progress workflow execution",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to cancel workflow run" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
await _run.cancel();
return { message: "Workflow run cancelled" };
} catch (error) {
return handleError(error, "Error canceling workflow run");
}
}
});
var STREAM_LEGACY_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/stream-legacy",
responseType: "stream",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: streamWorkflowBodySchema,
responseSchema: streamResponseSchema,
summary: "[DEPRECATED] Stream workflow with legacy format",
description: "Legacy endpoint for streaming workflow execution. Use /workflows/:workflowId/stream instead.",
tags: ["Workflows", "Legacy"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, resourceId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const serverCache = mastra.getServerCache();
const run = await workflow.createRun({ runId, resourceId: effectiveResourceId });
const result = run.streamLegacy({
...params,
requestContext,
onChunk: async (chunk) => {
if (serverCache) {
const cacheKey = runId;
await serverCache.listPush(cacheKey, chunk);
}
}
});
return result.stream;
} catch (error) {
return handleError(error, "Error executing workflow");
}
}
});
var OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/observe-stream-legacy",
responseType: "stream",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
responseSchema: streamResponseSchema,
summary: "[DEPRECATED] Observe workflow stream with legacy format",
description: "Legacy endpoint for observing workflow stream. Use /workflows/:workflowId/observe instead.",
tags: ["Workflows", "Legacy"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to observe workflow stream" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const serverCache = mastra.getServerCache();
if (!serverCache) {
throw new HTTPException(500, { message: "Server cache not found" });
}
const cachedRunChunks = await serverCache.listFromTo(runId, 0);
const result = _run.observeStreamLegacy();
if (!result.stream) {
throw new HTTPException(500, { message: "Failed to create observe stream" });
}
return createReplayStream({
history: cachedRunChunks,
liveSource: result.stream
});
} catch (error) {
return handleError(error, "Error observing workflow stream");
}
}
});
var stepExecutionBodySchema = z.object({
stepId: z.string(),
executionPath: z.array(z.number().int().nonnegative()),
stepResults: z.record(z.string(), z.any()),
state: z.record(z.string(), z.any()),
requestContext: z.record(z.string(), z.any()),
input: z.any().optional(),
resumeData: z.any().optional(),
retryCount: z.number().int().nonnegative().optional(),
foreachIdx: z.number().int().nonnegative().optional(),
format: z.enum(["legacy", "vnext"]).optional(),
perStep: z.boolean().optional(),
validateInputs: z.boolean().optional()
});
var strategyByMastra = /* @__PURE__ */ new WeakMap();
async function getStepStrategy(mastra) {
let cached = strategyByMastra.get(mastra);
if (!cached) {
const { InProcessStrategy } = await import('@mastra/core/worker');
cached = new InProcessStrategy({ mastra });
strategyByMastra.set(mastra, cached);
}
return cached;
}
var stepExecutionResponseSchema = z.any();
var EXECUTE_WORKFLOW_STEP_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/runs/:runId/steps/execute",
responseType: "json",
pathParamSchema: workflowRunPathParams,
bodySchema: stepExecutionBodySchema,
responseSchema: stepExecutionResponseSchema,
summary: "Execute a workflow step",
description: "Internal endpoint used by standalone OrchestrationWorker instances to execute workflow steps remotely via HttpRemoteStrategy.",
tags: ["Workflows", "Worker"],
requiresAuth: true,
handler: (async ({ mastra, workflowId, runId, ...body }) => {
try {
const strategy = await getStepStrategy(mastra);
const result = await strategy.executeStep({
workflowId,
runId,
stepId: body.stepId,
executionPath: body.executionPath,
stepResults: body.stepResults,
state: body.state,
requestContext: body.requestContext,
input: body.input,
resumeData: body.resumeData,
retryCount: body.retryCount,
foreachIdx: body.foreachIdx,
format: body.format,
perStep: body.perStep,
validateInputs: body.validateInputs
});
return result;
} catch (error) {
return handleError(error, "Error executing workflow step");
}
})
});
var workflowEventSchema = z.object({
id: z.string(),
type: z.string(),
data: z.unknown(),
runId: z.string(),
createdAt: z.string(),
index: z.number().optional(),
deliveryAttempt: z.number().optional()
});
var receiveWorkflowEventBodySchema = z.object({
event: workflowEventSchema.passthrough()
});
var receiveWorkflowEventResponseSchema = z.object({
ok: z.boolean(),
retry: z.boolean().optional()
});
var RECEIVE_WORKFLOW_EVENT_ROUTE = createRoute({
method: "POST",
path: "/workflows/events",
responseType: "json",
bodySchema: receiveWorkflowEventBodySchema,
responseSchema: receiveWorkflowEventResponseSchema,
summary: "Receive a workflow event from a push-mode broker",
description: "Push-mode entry point for workflow events. Brokers (GCP Pub/Sub push, SNS, EventBridge) POST each event here; Mastra processes it through the same pipeline as pull-mode workers.",
tags: ["Workflows", "Worker"],
requiresAuth: true,
// Broker push endpoint: it advances runtime state rather than editing
// definitions, so `workflows:execute` is the more accurate fit. `write` is
// kept for back-compat with service principals that already grant it.
requiresPermission: ["workflows:write", "workflows:execute"],
handler: (async ({ mastra, event }) => {
try {
const rawCreatedAt = event.createdAt;
const createdAt = rawCreatedAt instanceof Date ? rawCreatedAt : new Date(rawCreatedAt);
if (Number.isNaN(createdAt.getTime())) {
throw new HTTPException(400, { message: "Invalid createdAt" });
}
return await mastra.handleWorkflowEvent({ ...event, createdAt });
} catch (error) {
return handleError(error, "Error receiving workflow event");
}
})
});
export { CANCEL_WORKFLOW_RUN_ROUTE, CREATE_WORKFLOW_RUN_ROUTE, DELETE_WORKFLOW_RUN_BY_ID_ROUTE, EXECUTE_WORKFLOW_STEP_ROUTE, GET_WORKFLOW_BY_ID_ROUTE, GET_WORKFLOW_RUN_BY_ID_ROUTE, LIST_WORKFLOWS_ROUTE, LIST_WORKFLOW_RUNS_ROUTE, OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE, OBSERVE_STREAM_WORKFLOW_ROUTE, RECEIVE_WORKFLOW_EVENT_ROUTE, RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE, RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE, RESTART_ASYNC_WORKFLOW_ROUTE, RESTART_WORKFLOW_ROUTE, RESUME_ASYNC_WORKFLOW_ROUTE, RESUME_NO_WAIT_WORKFLOW_ROUTE, RESUME_STREAM_WORKFLOW_ROUTE, RESUME_WORKFLOW_ROUTE, START_ASYNC_WORKFLOW_ROUTE, START_WORKFLOW_RUN_ROUTE, STREAM_LEGACY_WORKFLOW_ROUTE, STREAM_WORKFLOW_ROUTE, TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE, TIME_TRAVEL_STREAM_WORKFLOW_ROUTE, TIME_TRAVEL_WORKFLOW_ROUTE, workflows_exports };
//# sourceMappingURL=chunk-3MJF6POS.js.map
//# sourceMappingURL=chunk-3MJF6POS.js.map

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

import { isBuilderFeatureEnabled } from './chunk-GZUFJQ5I.js';
import { getCallerAuthorId } from './chunk-SXZS6VZ3.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-56RJJ6PJ.js.map
//# sourceMappingURL=chunk-56RJJ6PJ.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-56RJJ6PJ.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 chunk3EZOV6A3_cjs = require('./chunk-3EZOV6A3.cjs');
var chunkSORUUFZK_cjs = require('./chunk-SORUUFZK.cjs');
var chunkEG6DDVIJ_cjs = require('./chunk-EG6DDVIJ.cjs');
var chunkUXVICGWD_cjs = require('./chunk-UXVICGWD.cjs');
var chunkYDUA7L5F_cjs = require('./chunk-YDUA7L5F.cjs');
var chunkZGAUP346_cjs = require('./chunk-ZGAUP346.cjs');
var chunkLRRO5PBP_cjs = require('./chunk-LRRO5PBP.cjs');
var chunk6QQ4I6IY_cjs = require('./chunk-6QQ4I6IY.cjs');
var chunkIQZE4X6U_cjs = require('./chunk-IQZE4X6U.cjs');
var chunkEMQZIPXG_cjs = require('./chunk-EMQZIPXG.cjs');
var chunkKE32UGIC_cjs = require('./chunk-KE32UGIC.cjs');
var chunkJYWPYMQS_cjs = require('./chunk-JYWPYMQS.cjs');
var chunkXPJZ72ZH_cjs = require('./chunk-XPJZ72ZH.cjs');
var chunkQ5CGBHAI_cjs = require('./chunk-Q5CGBHAI.cjs');
var chunkJ6XQWEEV_cjs = require('./chunk-J6XQWEEV.cjs');
var chunkFOANUZQ3_cjs = require('./chunk-FOANUZQ3.cjs');
var chunkMTWCBGFH_cjs = require('./chunk-MTWCBGFH.cjs');
var chunkMJH4EEUV_cjs = require('./chunk-MJH4EEUV.cjs');
var chunk55BEULMJ_cjs = require('./chunk-55BEULMJ.cjs');
var chunkAR5PBVYY_cjs = require('./chunk-AR5PBVYY.cjs');
var chunk6QZLGOUC_cjs = require('./chunk-6QZLGOUC.cjs');
var chunkLAY7G3RT_cjs = require('./chunk-LAY7G3RT.cjs');
var chunkSXMPMMTX_cjs = require('./chunk-SXMPMMTX.cjs');
var chunkQPICFOIK_cjs = require('./chunk-QPICFOIK.cjs');
var chunkPMGFP7II_cjs = require('./chunk-PMGFP7II.cjs');
var chunkDR2XLMGB_cjs = require('./chunk-DR2XLMGB.cjs');
var chunkYRZYCQGE_cjs = require('./chunk-YRZYCQGE.cjs');
var chunkI4X4UHQW_cjs = require('./chunk-I4X4UHQW.cjs');
var chunkOJB6MLRD_cjs = require('./chunk-OJB6MLRD.cjs');
var chunkUXYPH6HP_cjs = require('./chunk-UXYPH6HP.cjs');
var chunkPJXH5A23_cjs = require('./chunk-PJXH5A23.cjs');
var chunkY32XM46K_cjs = require('./chunk-Y32XM46K.cjs');
var chunk5GQWTNAY_cjs = require('./chunk-5GQWTNAY.cjs');
var chunkPXY4G3SN_cjs = require('./chunk-PXY4G3SN.cjs');
var chunk5O3XY7Z3_cjs = require('./chunk-5O3XY7Z3.cjs');
var chunkTGFTKXT4_cjs = require('./chunk-TGFTKXT4.cjs');
var chunkSCY53JIH_cjs = require('./chunk-SCY53JIH.cjs');
var chunkAJ4VAZFT_cjs = require('./chunk-AJ4VAZFT.cjs');
var chunkBVMR64B7_cjs = require('./chunk-BVMR64B7.cjs');
var chunkOE5GVCW4_cjs = require('./chunk-OE5GVCW4.cjs');
var chunkFPJGLJUZ_cjs = require('./chunk-FPJGLJUZ.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 = [chunkTGFTKXT4_cjs.GET_AGENT_CARD_ROUTE, chunkTGFTKXT4_cjs.AGENT_EXECUTION_ROUTE];
// src/server/server-adapter/routes/agent-builder.ts
var AGENT_BUILDER_ROUTES = [
chunkBVMR64B7_cjs.LIST_AGENT_BUILDER_ACTIONS_ROUTE,
chunkBVMR64B7_cjs.GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,
chunkBVMR64B7_cjs.LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,
chunkBVMR64B7_cjs.GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,
chunkBVMR64B7_cjs.CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,
chunkBVMR64B7_cjs.STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunkBVMR64B7_cjs.STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
chunkBVMR64B7_cjs.START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
chunkBVMR64B7_cjs.START_AGENT_BUILDER_ACTION_RUN_ROUTE,
chunkBVMR64B7_cjs.OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunkBVMR64B7_cjs.OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
chunkBVMR64B7_cjs.RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
chunkBVMR64B7_cjs.RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,
chunkBVMR64B7_cjs.RESUME_AGENT_BUILDER_ACTION_ROUTE,
chunkBVMR64B7_cjs.RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunkBVMR64B7_cjs.CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE
];
// src/server/server-adapter/routes/agent-controller.ts
var AGENT_CONTROLLER_ROUTES = [
chunkFPJGLJUZ_cjs.LIST_AGENT_CONTROLLERS_ROUTE,
chunkFPJGLJUZ_cjs.LIST_AGENT_CONTROLLER_MODES_ROUTE,
chunkFPJGLJUZ_cjs.LIST_AGENT_CONTROLLER_MODELS_ROUTE,
chunkFPJGLJUZ_cjs.CREATE_AGENT_CONTROLLER_SESSION_ROUTE,
chunkFPJGLJUZ_cjs.GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE,
chunkFPJGLJUZ_cjs.LIST_AGENT_CONTROLLER_THREADS_ROUTE,
chunkFPJGLJUZ_cjs.CREATE_AGENT_CONTROLLER_THREAD_ROUTE,
chunkFPJGLJUZ_cjs.DELETE_AGENT_CONTROLLER_THREAD_ROUTE,
chunkFPJGLJUZ_cjs.RENAME_AGENT_CONTROLLER_THREAD_ROUTE,
chunkFPJGLJUZ_cjs.CLONE_AGENT_CONTROLLER_THREAD_ROUTE,
chunkFPJGLJUZ_cjs.LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE,
chunkFPJGLJUZ_cjs.STREAM_AGENT_CONTROLLER_SESSION_ROUTE,
chunkFPJGLJUZ_cjs.SEND_AGENT_CONTROLLER_MESSAGE_ROUTE,
chunkFPJGLJUZ_cjs.STEER_AGENT_CONTROLLER_SESSION_ROUTE,
chunkFPJGLJUZ_cjs.FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE,
chunkFPJGLJUZ_cjs.ABORT_AGENT_CONTROLLER_SESSION_ROUTE,
chunkFPJGLJUZ_cjs.AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE,
chunkFPJGLJUZ_cjs.AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE,
chunkFPJGLJUZ_cjs.SWITCH_AGENT_CONTROLLER_MODE_ROUTE,
chunkFPJGLJUZ_cjs.SWITCH_AGENT_CONTROLLER_MODEL_ROUTE,
chunkFPJGLJUZ_cjs.SWITCH_AGENT_CONTROLLER_THREAD_ROUTE,
chunkFPJGLJUZ_cjs.SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE,
chunkFPJGLJUZ_cjs.GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE,
chunkFPJGLJUZ_cjs.GET_AGENT_CONTROLLER_OM_RECORD_ROUTE,
chunkFPJGLJUZ_cjs.SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE,
chunkFPJGLJUZ_cjs.GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE,
chunkFPJGLJUZ_cjs.GET_AGENT_CONTROLLER_GOAL_ROUTE,
chunkFPJGLJUZ_cjs.SET_AGENT_CONTROLLER_GOAL_ROUTE,
chunkFPJGLJUZ_cjs.UPDATE_AGENT_CONTROLLER_GOAL_ROUTE,
chunkFPJGLJUZ_cjs.CLEAR_AGENT_CONTROLLER_GOAL_ROUTE,
chunkFPJGLJUZ_cjs.GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE,
chunkFPJGLJUZ_cjs.SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE,
chunkFPJGLJUZ_cjs.SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE,
chunkFPJGLJUZ_cjs.SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE
];
// src/server/server-adapter/routes/agents.ts
var AGENTS_ROUTES = [
// ============================================================================
// Agent Core Routes
// ============================================================================
chunkSCY53JIH_cjs.LIST_AGENTS_ROUTE,
chunkSCY53JIH_cjs.GET_PROVIDERS_ROUTE,
chunkSCY53JIH_cjs.GET_AGENT_BY_ID_ROUTE,
chunkSCY53JIH_cjs.CLONE_AGENT_ROUTE,
// ============================================================================
// Voice Routes
// ============================================================================
chunkPMGFP7II_cjs.GET_SPEAKERS_ROUTE,
chunkPMGFP7II_cjs.GET_SPEAKERS_DEPRECATED_ROUTE,
// ============================================================================
// Agent Execution Routes
// ============================================================================
chunkSCY53JIH_cjs.GENERATE_AGENT_ROUTE,
chunkSCY53JIH_cjs.GENERATE_AGENT_VNEXT_ROUTE,
chunkSCY53JIH_cjs.STREAM_GENERATE_ROUTE,
chunkSCY53JIH_cjs.STREAM_UNTIL_IDLE_GENERATE_ROUTE,
chunkSCY53JIH_cjs.STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,
// ============================================================================
// Resumable Stream Routes
// ============================================================================
chunkSCY53JIH_cjs.OBSERVE_AGENT_STREAM_ROUTE,
chunkSCY53JIH_cjs.SEND_AGENT_MESSAGE_ROUTE,
chunkSCY53JIH_cjs.QUEUE_AGENT_MESSAGE_ROUTE,
chunkSCY53JIH_cjs.SEND_AGENT_SIGNAL_ROUTE,
chunkSCY53JIH_cjs.ABORT_AGENT_THREAD_ROUTE,
chunkSCY53JIH_cjs.SUBSCRIBE_AGENT_THREAD_ROUTE,
// ============================================================================
// Tool Routes
// ============================================================================
chunkYRZYCQGE_cjs.EXECUTE_AGENT_TOOL_ROUTE,
chunkSCY53JIH_cjs.APPROVE_TOOL_CALL_ROUTE,
chunkSCY53JIH_cjs.SEND_TOOL_APPROVAL_ROUTE,
chunkSCY53JIH_cjs.LIST_SUSPENDED_RUNS_ROUTE,
chunkSCY53JIH_cjs.DECLINE_TOOL_CALL_ROUTE,
chunkSCY53JIH_cjs.RESUME_STREAM_ROUTE,
chunkSCY53JIH_cjs.APPROVE_TOOL_CALL_GENERATE_ROUTE,
chunkSCY53JIH_cjs.DECLINE_TOOL_CALL_GENERATE_ROUTE,
chunkSCY53JIH_cjs.APPROVE_NETWORK_TOOL_CALL_ROUTE,
chunkSCY53JIH_cjs.DECLINE_NETWORK_TOOL_CALL_ROUTE,
chunkSCY53JIH_cjs.RESUME_STREAM_UNTIL_IDLE_ROUTE,
// ============================================================================
// Network Routes
// ============================================================================
chunkSCY53JIH_cjs.STREAM_NETWORK_ROUTE,
// ============================================================================
// Model Management Routes
// ============================================================================
chunkSCY53JIH_cjs.UPDATE_AGENT_MODEL_ROUTE,
chunkSCY53JIH_cjs.RESET_AGENT_MODEL_ROUTE,
chunkSCY53JIH_cjs.REORDER_AGENT_MODEL_LIST_ROUTE,
chunkSCY53JIH_cjs.UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,
// ============================================================================
// Instruction Enhancement Routes
// ============================================================================
chunkSCY53JIH_cjs.ENHANCE_INSTRUCTIONS_ROUTE,
// ============================================================================
// Agent Tool Routes
// ============================================================================
chunkYRZYCQGE_cjs.GET_AGENT_TOOL_ROUTE,
// ============================================================================
// Agent Skill Routes
// ============================================================================
chunkSCY53JIH_cjs.GET_AGENT_SKILL_ROUTE,
// ============================================================================
// Voice/Speech Routes
// ============================================================================
chunkPMGFP7II_cjs.GENERATE_SPEECH_ROUTE,
chunkPMGFP7II_cjs.GENERATE_SPEECH_DEPRECATED_ROUTE,
chunkPMGFP7II_cjs.TRANSCRIBE_SPEECH_ROUTE,
chunkPMGFP7II_cjs.TRANSCRIBE_SPEECH_DEPRECATED_ROUTE,
chunkPMGFP7II_cjs.GET_LISTENER_ROUTE,
// ============================================================================
// Deprecated Routes
// ============================================================================
chunkSCY53JIH_cjs.STREAM_VNEXT_DEPRECATED_ROUTE,
chunkSCY53JIH_cjs.STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,
chunkSCY53JIH_cjs.STREAM_UI_MESSAGE_DEPRECATED_ROUTE
];
// src/server/server-adapter/routes/background-tasks.ts
var BACKGROUND_TASK_ROUTES = [
chunk6QZLGOUC_cjs.BACKGROUND_TASK_STREAM_ROUTE,
chunk6QZLGOUC_cjs.LIST_BACKGROUND_TASKS_ROUTE,
chunk6QZLGOUC_cjs.GET_BACKGROUND_TASK_ROUTE
];
// src/server/server-adapter/routes/channels.ts
var CHANNELS_ROUTES = [
chunkSXMPMMTX_cjs.LIST_CHANNEL_PLATFORMS_ROUTE,
chunkSXMPMMTX_cjs.LIST_CHANNEL_INSTALLATIONS_ROUTE,
chunkSXMPMMTX_cjs.CONNECT_CHANNEL_ROUTE,
chunkSXMPMMTX_cjs.DISCONNECT_CHANNEL_ROUTE
];
// src/server/server-adapter/routes/conversations.ts
var CONVERSATIONS_ROUTES = [
chunkPXY4G3SN_cjs.CREATE_CONVERSATION_ROUTE,
chunkPXY4G3SN_cjs.GET_CONVERSATION_ROUTE,
chunkPXY4G3SN_cjs.GET_CONVERSATION_ITEMS_ROUTE,
chunkPXY4G3SN_cjs.DELETE_CONVERSATION_ROUTE
];
// src/server/server-adapter/routes/datasets.ts
var DATASETS_ROUTES = [
// Dataset CRUD
chunkMTWCBGFH_cjs.LIST_DATASETS_ROUTE,
chunkMTWCBGFH_cjs.CREATE_DATASET_ROUTE,
chunkMTWCBGFH_cjs.GET_DATASET_ROUTE,
chunkMTWCBGFH_cjs.UPDATE_DATASET_ROUTE,
chunkMTWCBGFH_cjs.DELETE_DATASET_ROUTE,
// Item list and add
chunkMTWCBGFH_cjs.LIST_ITEMS_ROUTE,
chunkMTWCBGFH_cjs.ADD_ITEM_ROUTE,
// Batch operations - MUST come before item-specific routes to avoid /items/batch matching /items/:itemId
chunkMTWCBGFH_cjs.BATCH_INSERT_ITEMS_ROUTE,
chunkMTWCBGFH_cjs.BATCH_DELETE_ITEMS_ROUTE,
// Item-specific CRUD (uses :itemId param)
chunkMTWCBGFH_cjs.GET_ITEM_ROUTE,
chunkMTWCBGFH_cjs.UPDATE_ITEM_ROUTE,
chunkMTWCBGFH_cjs.DELETE_ITEM_ROUTE,
// Version operations
chunkMTWCBGFH_cjs.LIST_DATASET_VERSIONS_ROUTE,
chunkMTWCBGFH_cjs.LIST_ITEM_VERSIONS_ROUTE,
chunkMTWCBGFH_cjs.GET_ITEM_VERSION_ROUTE,
// All experiments (cross-dataset) - MUST come before dataset-scoped experiments
chunkMTWCBGFH_cjs.LIST_ALL_EXPERIMENTS_ROUTE,
// Experiment review summary (cross-dataset) - MUST come before dataset-scoped experiments
chunkMTWCBGFH_cjs.EXPERIMENT_REVIEW_SUMMARY_ROUTE,
// Experiment operations (dataset-scoped)
chunkMTWCBGFH_cjs.LIST_EXPERIMENTS_ROUTE,
chunkMTWCBGFH_cjs.TRIGGER_EXPERIMENT_ROUTE,
chunkMTWCBGFH_cjs.GET_EXPERIMENT_ROUTE,
chunkMTWCBGFH_cjs.LIST_EXPERIMENT_RESULTS_ROUTE,
chunkMTWCBGFH_cjs.UPDATE_EXPERIMENT_RESULT_ROUTE,
// Analytics
chunkMTWCBGFH_cjs.COMPARE_EXPERIMENTS_ROUTE,
// AI generation
chunkMTWCBGFH_cjs.GENERATE_ITEMS_ROUTE,
// Failure analysis
chunkMTWCBGFH_cjs.CLUSTER_FAILURES_ROUTE
];
// src/server/server-adapter/routes/editor-builder.ts
var EDITOR_BUILDER_ROUTES = [
chunkMJH4EEUV_cjs.GET_EDITOR_BUILDER_SETTINGS_ROUTE,
chunkMJH4EEUV_cjs.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE,
chunkMJH4EEUV_cjs.GET_INFRASTRUCTURE_STATUS_ROUTE,
chunkLAY7G3RT_cjs.LIST_BUILDER_REGISTRIES_ROUTE,
chunkLAY7G3RT_cjs.BUILDER_REGISTRY_SEARCH_ROUTE,
chunkLAY7G3RT_cjs.BUILDER_REGISTRY_POPULAR_ROUTE,
chunkLAY7G3RT_cjs.BUILDER_REGISTRY_PREVIEW_ROUTE,
chunkLAY7G3RT_cjs.BUILDER_REGISTRY_INSTALL_ROUTE
];
// src/server/server-adapter/routes/heartbeats.ts
var HEARTBEATS_ROUTES = [
chunk55BEULMJ_cjs.LIST_HEARTBEATS_ROUTE,
chunk55BEULMJ_cjs.GET_HEARTBEAT_ROUTE,
chunk55BEULMJ_cjs.CREATE_HEARTBEAT_ROUTE,
chunk55BEULMJ_cjs.UPDATE_HEARTBEAT_ROUTE,
chunk55BEULMJ_cjs.DELETE_HEARTBEAT_ROUTE,
chunk55BEULMJ_cjs.PAUSE_HEARTBEAT_ROUTE,
chunk55BEULMJ_cjs.RESUME_HEARTBEAT_ROUTE,
chunk55BEULMJ_cjs.RUN_HEARTBEAT_ROUTE
];
// src/server/server-adapter/routes/legacy.ts
var LEGACY_ROUTES = [
// ============================================================================
// Legacy Agent Routes
// ============================================================================
chunkSCY53JIH_cjs.GENERATE_LEGACY_ROUTE,
chunkSCY53JIH_cjs.STREAM_GENERATE_LEGACY_ROUTE,
// ============================================================================
// Legacy Workflow Routes
// ============================================================================
chunkOE5GVCW4_cjs.STREAM_LEGACY_WORKFLOW_ROUTE,
chunkOE5GVCW4_cjs.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE
];
// src/server/server-adapter/routes/logs.ts
var LOGS_ROUTES = [chunk5O3XY7Z3_cjs.LIST_LOG_TRANSPORTS_ROUTE, chunk5O3XY7Z3_cjs.LIST_LOGS_ROUTE, chunk5O3XY7Z3_cjs.LIST_LOGS_BY_RUN_ID_ROUTE];
// src/server/server-adapter/routes/mcp.ts
var MCP_ROUTES = [
// ============================================================================
// MCP Server Registry Routes
// ============================================================================
chunkUXYPH6HP_cjs.LIST_MCP_SERVERS_ROUTE,
chunkUXYPH6HP_cjs.GET_MCP_SERVER_DETAIL_ROUTE,
// ============================================================================
// MCP Server Tool Routes
// ============================================================================
chunkUXYPH6HP_cjs.LIST_MCP_SERVER_TOOLS_ROUTE,
chunkUXYPH6HP_cjs.GET_MCP_SERVER_TOOL_DETAIL_ROUTE,
chunkUXYPH6HP_cjs.EXECUTE_MCP_SERVER_TOOL_ROUTE,
// ============================================================================
// MCP Server Resource Routes
// ============================================================================
chunkUXYPH6HP_cjs.LIST_MCP_SERVER_RESOURCES_ROUTE,
chunkUXYPH6HP_cjs.READ_MCP_SERVER_RESOURCE_ROUTE,
// ============================================================================
// MCP Transport Routes (handled by adapters)
// ============================================================================
chunkUXYPH6HP_cjs.MCP_HTTP_TRANSPORT_ROUTE,
chunkUXYPH6HP_cjs.MCP_SSE_TRANSPORT_ROUTE,
chunkUXYPH6HP_cjs.MCP_SSE_MESSAGES_ROUTE
];
// src/server/server-adapter/routes/memory.ts
var MEMORY_ROUTES = [
chunkPJXH5A23_cjs.GET_MEMORY_STATUS_ROUTE,
chunkPJXH5A23_cjs.GET_MEMORY_CONFIG_ROUTE,
chunkPJXH5A23_cjs.GET_OBSERVATIONAL_MEMORY_ROUTE,
chunkPJXH5A23_cjs.AWAIT_BUFFER_STATUS_ROUTE,
chunkPJXH5A23_cjs.LIST_THREADS_ROUTE,
chunkPJXH5A23_cjs.GET_THREAD_BY_ID_ROUTE,
chunkPJXH5A23_cjs.LIST_MESSAGES_ROUTE,
chunkPJXH5A23_cjs.GET_WORKING_MEMORY_ROUTE,
chunkPJXH5A23_cjs.SAVE_MESSAGES_ROUTE,
chunkPJXH5A23_cjs.CREATE_THREAD_ROUTE,
chunkPJXH5A23_cjs.UPDATE_THREAD_ROUTE,
chunkPJXH5A23_cjs.DELETE_THREAD_ROUTE,
chunkPJXH5A23_cjs.CLONE_THREAD_ROUTE,
chunkPJXH5A23_cjs.UPDATE_WORKING_MEMORY_ROUTE,
chunkPJXH5A23_cjs.DELETE_MESSAGES_ROUTE,
chunkPJXH5A23_cjs.SEARCH_MEMORY_ROUTE,
chunkPJXH5A23_cjs.GET_MEMORY_STATUS_NETWORK_ROUTE,
chunkPJXH5A23_cjs.LIST_THREADS_NETWORK_ROUTE,
chunkPJXH5A23_cjs.GET_THREAD_BY_ID_NETWORK_ROUTE,
chunkPJXH5A23_cjs.LIST_MESSAGES_NETWORK_ROUTE,
chunkPJXH5A23_cjs.SAVE_MESSAGES_NETWORK_ROUTE,
chunkPJXH5A23_cjs.CREATE_THREAD_NETWORK_ROUTE,
chunkPJXH5A23_cjs.UPDATE_THREAD_NETWORK_ROUTE,
chunkPJXH5A23_cjs.DELETE_THREAD_NETWORK_ROUTE,
chunkPJXH5A23_cjs.DELETE_MESSAGES_NETWORK_ROUTE
];
// src/server/server-adapter/routes/observability.ts
var OBSERVABILITY_ROUTES = [
// Legacy
chunkY32XM46K_cjs.LIST_TRACES_ROUTE,
chunkY32XM46K_cjs.LIST_TRACES_LIGHT_ROUTE,
chunkY32XM46K_cjs.LIST_BRANCHES_ROUTE,
chunkY32XM46K_cjs.GET_BRANCH_ROUTE,
chunkY32XM46K_cjs.GET_TRACE_ROUTE,
chunkY32XM46K_cjs.GET_TRACE_LIGHT_ROUTE,
chunkY32XM46K_cjs.GET_SPAN_ROUTE,
chunkY32XM46K_cjs.GET_TRACE_TRAJECTORY_ROUTE,
chunkY32XM46K_cjs.SCORE_TRACES_ROUTE,
chunkY32XM46K_cjs.LIST_SCORES_BY_SPAN_ROUTE,
// New observability routes
chunk5GQWTNAY_cjs.LIST_METRICS,
chunk5GQWTNAY_cjs.LIST_LOGS,
chunk5GQWTNAY_cjs.LIST_SCORES,
chunk5GQWTNAY_cjs.CREATE_SCORE,
chunk5GQWTNAY_cjs.GET_SCORE,
chunk5GQWTNAY_cjs.GET_SCORE_AGGREGATE,
chunk5GQWTNAY_cjs.GET_SCORE_BREAKDOWN,
chunk5GQWTNAY_cjs.GET_SCORE_TIME_SERIES,
chunk5GQWTNAY_cjs.GET_SCORE_PERCENTILES,
chunk5GQWTNAY_cjs.LIST_FEEDBACK,
chunk5GQWTNAY_cjs.CREATE_FEEDBACK,
chunk5GQWTNAY_cjs.GET_FEEDBACK_AGGREGATE,
chunk5GQWTNAY_cjs.GET_FEEDBACK_BREAKDOWN,
chunk5GQWTNAY_cjs.GET_FEEDBACK_TIME_SERIES,
chunk5GQWTNAY_cjs.GET_FEEDBACK_PERCENTILES,
chunk5GQWTNAY_cjs.GET_METRIC_AGGREGATE,
chunk5GQWTNAY_cjs.GET_METRIC_BREAKDOWN,
chunk5GQWTNAY_cjs.GET_METRIC_TIME_SERIES,
chunk5GQWTNAY_cjs.GET_METRIC_PERCENTILES,
chunk5GQWTNAY_cjs.GET_METRIC_NAMES,
chunk5GQWTNAY_cjs.GET_METRIC_LABEL_KEYS,
chunk5GQWTNAY_cjs.GET_METRIC_LABEL_VALUES,
chunk5GQWTNAY_cjs.GET_ENTITY_TYPES,
chunk5GQWTNAY_cjs.GET_ENTITY_NAMES,
chunk5GQWTNAY_cjs.GET_SERVICE_NAMES,
chunk5GQWTNAY_cjs.GET_ENVIRONMENTS,
chunk5GQWTNAY_cjs.GET_TAGS
];
// src/server/server-adapter/routes/processor-providers.ts
var PROCESSOR_PROVIDER_ROUTES = [chunkJYWPYMQS_cjs.LIST_PROCESSOR_PROVIDERS_ROUTE, chunkJYWPYMQS_cjs.GET_PROCESSOR_PROVIDER_ROUTE];
// src/server/server-adapter/routes/processors.ts
var PROCESSORS_ROUTES = [chunkXPJZ72ZH_cjs.LIST_PROCESSORS_ROUTE, chunkXPJZ72ZH_cjs.GET_PROCESSOR_BY_ID_ROUTE, chunkXPJZ72ZH_cjs.EXECUTE_PROCESSOR_ROUTE];
// src/server/server-adapter/routes/responses.ts
var RESPONSES_ROUTES = [chunkOJB6MLRD_cjs.CREATE_RESPONSE_ROUTE, chunkOJB6MLRD_cjs.GET_RESPONSE_ROUTE, chunkOJB6MLRD_cjs.DELETE_RESPONSE_ROUTE];
// src/server/server-adapter/routes/schedules.ts
var SCHEDULES_ROUTES = [
chunkJ6XQWEEV_cjs.LIST_SCHEDULES_ROUTE,
chunkJ6XQWEEV_cjs.GET_SCHEDULE_ROUTE,
chunkJ6XQWEEV_cjs.LIST_SCHEDULE_TRIGGERS_ROUTE,
chunkJ6XQWEEV_cjs.PAUSE_SCHEDULE_ROUTE,
chunkJ6XQWEEV_cjs.RESUME_SCHEDULE_ROUTE
];
// src/server/server-adapter/routes/scorers.ts
var SCORES_ROUTES = [
chunkI4X4UHQW_cjs.LIST_SCORERS_ROUTE,
chunkI4X4UHQW_cjs.GET_SCORER_ROUTE,
chunkI4X4UHQW_cjs.LIST_SCORES_BY_RUN_ID_ROUTE,
chunkI4X4UHQW_cjs.LIST_SCORES_BY_SCORER_ID_ROUTE,
chunkI4X4UHQW_cjs.LIST_SCORES_BY_ENTITY_ID_ROUTE,
chunkI4X4UHQW_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.
// ============================================================================
chunk6QQ4I6IY_cjs.LIST_STORED_AGENTS_ROUTE,
chunk6QQ4I6IY_cjs.PREVIEW_INSTRUCTIONS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunk6QQ4I6IY_cjs.GET_STORED_AGENT_DEPENDENTS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE (longer literal)
chunk6QQ4I6IY_cjs.EXPORT_STORED_AGENT_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunk6QQ4I6IY_cjs.OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunk6QQ4I6IY_cjs.GET_STORED_AGENT_ROUTE,
chunk6QQ4I6IY_cjs.CREATE_STORED_AGENT_ROUTE,
chunk6QQ4I6IY_cjs.UPDATE_STORED_AGENT_ROUTE,
chunk6QQ4I6IY_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.
// ============================================================================
chunkAR5PBVYY_cjs.LIST_AGENT_VERSIONS_ROUTE,
chunkAR5PBVYY_cjs.CREATE_AGENT_VERSION_ROUTE,
chunkAR5PBVYY_cjs.COMPARE_AGENT_VERSIONS_ROUTE,
// Must be before GET_AGENT_VERSION_ROUTE
chunkAR5PBVYY_cjs.GET_AGENT_VERSION_ROUTE,
chunkAR5PBVYY_cjs.ACTIVATE_AGENT_VERSION_ROUTE,
chunkAR5PBVYY_cjs.RESTORE_AGENT_VERSION_ROUTE,
chunkAR5PBVYY_cjs.DELETE_AGENT_VERSION_ROUTE,
// ============================================================================
// Favorites (EE)
// ============================================================================
chunkLRRO5PBP_cjs.FAVORITE_STORED_AGENT_ROUTE,
chunkLRRO5PBP_cjs.UNFAVORITE_STORED_AGENT_ROUTE
];
// src/server/server-adapter/routes/stored-mcp-clients.ts
var STORED_MCP_CLIENTS_ROUTES = [
// Stored MCP Clients CRUD Routes
chunkIQZE4X6U_cjs.LIST_STORED_MCP_CLIENTS_ROUTE,
chunkIQZE4X6U_cjs.GET_STORED_MCP_CLIENT_ROUTE,
chunkIQZE4X6U_cjs.CREATE_STORED_MCP_CLIENT_ROUTE,
chunkIQZE4X6U_cjs.UPDATE_STORED_MCP_CLIENT_ROUTE,
chunkIQZE4X6U_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.
chunkFOANUZQ3_cjs.LIST_MCP_CLIENT_VERSIONS_ROUTE,
chunkFOANUZQ3_cjs.CREATE_MCP_CLIENT_VERSION_ROUTE,
chunkFOANUZQ3_cjs.COMPARE_MCP_CLIENT_VERSIONS_ROUTE,
chunkFOANUZQ3_cjs.GET_MCP_CLIENT_VERSION_ROUTE,
chunkFOANUZQ3_cjs.ACTIVATE_MCP_CLIENT_VERSION_ROUTE,
chunkFOANUZQ3_cjs.RESTORE_MCP_CLIENT_VERSION_ROUTE,
chunkFOANUZQ3_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
chunkEMQZIPXG_cjs.LIST_STORED_PROMPT_BLOCKS_ROUTE,
chunkEMQZIPXG_cjs.GET_STORED_PROMPT_BLOCK_ROUTE,
chunkEMQZIPXG_cjs.CREATE_STORED_PROMPT_BLOCK_ROUTE,
chunkEMQZIPXG_cjs.UPDATE_STORED_PROMPT_BLOCK_ROUTE,
chunkEMQZIPXG_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.
chunkQ5CGBHAI_cjs.LIST_PROMPT_BLOCK_VERSIONS_ROUTE,
chunkQ5CGBHAI_cjs.CREATE_PROMPT_BLOCK_VERSION_ROUTE,
chunkQ5CGBHAI_cjs.COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE,
chunkQ5CGBHAI_cjs.GET_PROMPT_BLOCK_VERSION_ROUTE,
chunkQ5CGBHAI_cjs.ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE,
chunkQ5CGBHAI_cjs.RESTORE_PROMPT_BLOCK_VERSION_ROUTE,
chunkQ5CGBHAI_cjs.DELETE_PROMPT_BLOCK_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-scorers.ts
var STORED_SCORERS_ROUTES = [
// Stored Scorers CRUD Routes
chunkKE32UGIC_cjs.LIST_STORED_SCORERS_ROUTE,
chunkKE32UGIC_cjs.GET_STORED_SCORER_ROUTE,
chunkKE32UGIC_cjs.CREATE_STORED_SCORER_ROUTE,
chunkKE32UGIC_cjs.UPDATE_STORED_SCORER_ROUTE,
chunkKE32UGIC_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.
chunkZGAUP346_cjs.LIST_SCORER_VERSIONS_ROUTE,
chunkZGAUP346_cjs.CREATE_SCORER_VERSION_ROUTE,
chunkZGAUP346_cjs.COMPARE_SCORER_VERSIONS_ROUTE,
chunkZGAUP346_cjs.GET_SCORER_VERSION_ROUTE,
chunkZGAUP346_cjs.ACTIVATE_SCORER_VERSION_ROUTE,
chunkZGAUP346_cjs.RESTORE_SCORER_VERSION_ROUTE,
chunkZGAUP346_cjs.DELETE_SCORER_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-skills.ts
var STORED_SKILLS_ROUTES = [
// Stored Skills CRUD Routes
chunkSORUUFZK_cjs.LIST_STORED_SKILLS_ROUTE,
chunkSORUUFZK_cjs.GET_STORED_SKILL_ROUTE,
chunkSORUUFZK_cjs.CREATE_STORED_SKILL_ROUTE,
chunkSORUUFZK_cjs.UPDATE_STORED_SKILL_ROUTE,
chunkSORUUFZK_cjs.DELETE_STORED_SKILL_ROUTE,
// Publish
chunkSORUUFZK_cjs.PUBLISH_STORED_SKILL_ROUTE,
// Favorites (EE)
chunk3EZOV6A3_cjs.FAVORITE_STORED_SKILL_ROUTE,
chunk3EZOV6A3_cjs.UNFAVORITE_STORED_SKILL_ROUTE
];
// src/server/server-adapter/routes/stored-workspaces.ts
var STORED_WORKSPACES_ROUTES = [
// Stored Workspaces CRUD Routes
chunkEG6DDVIJ_cjs.LIST_STORED_WORKSPACES_ROUTE,
chunkEG6DDVIJ_cjs.GET_STORED_WORKSPACE_ROUTE,
chunkEG6DDVIJ_cjs.CREATE_STORED_WORKSPACE_ROUTE,
chunkEG6DDVIJ_cjs.UPDATE_STORED_WORKSPACE_ROUTE,
chunkEG6DDVIJ_cjs.DELETE_STORED_WORKSPACE_ROUTE
];
// src/server/server-adapter/routes/system.ts
var SYSTEM_ROUTES = [chunkUXVICGWD_cjs.GET_SYSTEM_PACKAGES_ROUTE, chunkUXVICGWD_cjs.GET_API_SCHEMA_ROUTE];
// src/server/server-adapter/routes/tool-providers.ts
var TOOL_PROVIDER_ROUTES = [
chunkYDUA7L5F_cjs.LIST_TOOL_PROVIDERS_ROUTE,
chunkYDUA7L5F_cjs.LIST_TOOL_PROVIDER_TOOLKITS_ROUTE,
chunkYDUA7L5F_cjs.LIST_TOOL_PROVIDER_TOOLS_ROUTE,
chunkYDUA7L5F_cjs.GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE,
chunkYDUA7L5F_cjs.AUTHORIZE_TOOL_PROVIDER_ROUTE,
chunkYDUA7L5F_cjs.GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE,
chunkYDUA7L5F_cjs.TOOL_PROVIDER_CONNECTION_STATUS_ROUTE,
chunkYDUA7L5F_cjs.LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE,
chunkYDUA7L5F_cjs.LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE,
chunkYDUA7L5F_cjs.DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE,
chunkYDUA7L5F_cjs.UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE,
chunkYDUA7L5F_cjs.GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE,
chunkYDUA7L5F_cjs.GET_TOOL_PROVIDER_HEALTH_ROUTE
];
// src/server/server-adapter/routes/tools.ts
var TOOLS_ROUTES = [chunkYRZYCQGE_cjs.LIST_TOOLS_ROUTE, chunkYRZYCQGE_cjs.GET_TOOL_BY_ID_ROUTE, chunkYRZYCQGE_cjs.EXECUTE_TOOL_ROUTE];
// src/server/server-adapter/routes/vectors.ts
var VECTORS_ROUTES = [
chunkQPICFOIK_cjs.UPSERT_VECTORS_ROUTE,
chunkQPICFOIK_cjs.CREATE_INDEX_ROUTE,
chunkQPICFOIK_cjs.QUERY_VECTORS_ROUTE,
chunkQPICFOIK_cjs.LIST_INDEXES_ROUTE,
chunkQPICFOIK_cjs.DESCRIBE_INDEX_ROUTE,
chunkQPICFOIK_cjs.DELETE_INDEX_ROUTE,
chunkQPICFOIK_cjs.LIST_VECTORS_ROUTE,
chunkQPICFOIK_cjs.LIST_EMBEDDERS_ROUTE
];
// src/server/server-adapter/routes/workflows.ts
var WORKFLOWS_ROUTES = [
chunkOE5GVCW4_cjs.LIST_WORKFLOWS_ROUTE,
chunkOE5GVCW4_cjs.GET_WORKFLOW_BY_ID_ROUTE,
chunkOE5GVCW4_cjs.LIST_WORKFLOW_RUNS_ROUTE,
chunkOE5GVCW4_cjs.GET_WORKFLOW_RUN_BY_ID_ROUTE,
chunkOE5GVCW4_cjs.DELETE_WORKFLOW_RUN_BY_ID_ROUTE,
chunkOE5GVCW4_cjs.CREATE_WORKFLOW_RUN_ROUTE,
chunkOE5GVCW4_cjs.STREAM_WORKFLOW_ROUTE,
chunkOE5GVCW4_cjs.RESUME_STREAM_WORKFLOW_ROUTE,
chunkOE5GVCW4_cjs.START_ASYNC_WORKFLOW_ROUTE,
chunkOE5GVCW4_cjs.START_WORKFLOW_RUN_ROUTE,
chunkOE5GVCW4_cjs.OBSERVE_STREAM_WORKFLOW_ROUTE,
chunkOE5GVCW4_cjs.RESUME_ASYNC_WORKFLOW_ROUTE,
chunkOE5GVCW4_cjs.RESUME_NO_WAIT_WORKFLOW_ROUTE,
chunkOE5GVCW4_cjs.RESUME_WORKFLOW_ROUTE,
chunkOE5GVCW4_cjs.CANCEL_WORKFLOW_RUN_ROUTE,
chunkOE5GVCW4_cjs.TIME_TRAVEL_WORKFLOW_ROUTE,
chunkOE5GVCW4_cjs.TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,
chunkOE5GVCW4_cjs.TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,
chunkOE5GVCW4_cjs.RESTART_WORKFLOW_ROUTE,
chunkOE5GVCW4_cjs.RESTART_ASYNC_WORKFLOW_ROUTE,
chunkOE5GVCW4_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,
chunkOE5GVCW4_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,
chunkOE5GVCW4_cjs.EXECUTE_WORKFLOW_STEP_ROUTE,
chunkOE5GVCW4_cjs.RECEIVE_WORKFLOW_EVENT_ROUTE
];
// src/server/server-adapter/routes/workspace.ts
var WORKSPACE_ROUTES = [
// List all workspaces route (at /api/workspaces)
chunkDR2XLMGB_cjs.LIST_WORKSPACES_ROUTE,
// Get workspace route (at /api/workspaces/:workspaceId)
chunkDR2XLMGB_cjs.GET_WORKSPACE_ROUTE,
// Filesystem routes (at /api/workspaces/:workspaceId/fs/*)
...chunkDR2XLMGB_cjs.WORKSPACE_FS_ROUTES,
// Search routes (at /api/workspaces/:workspaceId/search, /api/workspaces/:workspaceId/index)
...chunkDR2XLMGB_cjs.WORKSPACE_SEARCH_ROUTES,
// Skills routes (search must come before parameterized routes)
...chunkDR2XLMGB_cjs.WORKSPACE_SKILLS_ROUTES,
// skills.sh proxy routes (at /api/workspaces/:workspaceId/skills-sh/*)
...chunkDR2XLMGB_cjs.WORKSPACE_SKILLS_SH_ROUTES
];
// src/server/server-adapter/routes/index.ts
var SERVER_ROUTES = [
...AGENTS_ROUTES,
...chunkAJ4VAZFT_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,
...HEARTBEATS_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-5SZOGYYO.cjs.map
//# sourceMappingURL=chunk-5SZOGYYO.cjs.map

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

'use strict';
var chunkZCX2J552_cjs = require('./chunk-ZCX2J552.cjs');
var chunkFR5QBXVS_cjs = require('./chunk-FR5QBXVS.cjs');
var chunkMJH4EEUV_cjs = require('./chunk-MJH4EEUV.cjs');
var chunk2XZ2466F_cjs = require('./chunk-2XZ2466F.cjs');
var chunkM3UP3Z3G_cjs = require('./chunk-M3UP3Z3G.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
var chunkTIWGWGIO_cjs = require('./chunk-TIWGWGIO.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var chunkYWUVDFQZ_cjs = require('./chunk-YWUVDFQZ.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/stored/agents",
responseType: "json",
queryParamSchema: chunkTIWGWGIO_cjs.listStoredAgentsQuerySchema,
responseSchema: chunkTIWGWGIO_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 = chunkHDIYJI2Z_cjs.resolveAuthorFilter({
requestContext,
resource: "stored-agents",
queryAuthorId: authorId,
queryVisibility: visibility === "public" ? "public" : void 0
});
const scope = await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext);
const scopedMetadata = chunkYWUVDFQZ_cjs.scopeStoredResourceMetadata(metadata, scope);
const callerId = chunkHDIYJI2Z_cjs.getCallerAuthorId(requestContext);
const favoritesEnabled = await chunkMJH4EEUV_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) => chunkHDIYJI2Z_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 chunkM3UP3Z3G_cjs.prepareAuthorEnrichment(
mastra,
requestContext,
annotated2.map((a) => a.authorId)
);
const withAuthors2 = authors2 ? annotated2.map((record) => chunkM3UP3Z3G_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) => chunkHDIYJI2Z_cjs.matchesAuthorFilter(record, filter));
const authors = await chunkM3UP3Z3G_cjs.prepareAuthorEnrichment(
mastra,
requestContext,
visibleAgents.map((a) => a.authorId)
);
if (!favoritesEnabled) {
const stripped = visibleAgents.map(chunkFR5QBXVS_cjs.stripFavoriteFields);
const withAuthors2 = authors ? stripped.map((record) => chunkM3UP3Z3G_cjs.attachAuthor(record, authors)) : stripped;
return { ...result, agents: withAuthors2 };
}
const enrichment = await chunkFR5QBXVS_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(chunkFR5QBXVS_cjs.stripFavoriteFields);
const withAuthors = authors ? annotated.map((record) => chunkM3UP3Z3G_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) {
chunkYWUVDFQZ_cjs.assertStoredResourceScope(storedAgent, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/stored/agents/:storedAgentId/export",
responseType: "json",
pathParamSchema: chunkTIWGWGIO_cjs.storedAgentIdPathParams,
bodySchema: chunkTIWGWGIO_cjs.exportStoredAgentBodySchema,
responseSchema: chunkTIWGWGIO_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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/stored/agents/:storedAgentId/change-request",
responseType: "json",
pathParamSchema: chunkTIWGWGIO_cjs.storedAgentIdPathParams,
bodySchema: chunkTIWGWGIO_cjs.openStoredAgentChangeRequestBodySchema,
responseSchema: chunkTIWGWGIO_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkTIWGWGIO_cjs.storedAgentIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.statusQuerySchema,
responseSchema: chunkTIWGWGIO_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(agent, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
const authors = await chunkM3UP3Z3G_cjs.prepareAuthorEnrichment(mastra, requestContext, [agent.authorId]);
const withFavorite = await chunkFR5QBXVS_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", agent);
return chunkM3UP3Z3G_cjs.attachAuthor(withFavorite, authors);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting stored agent");
}
}
});
var CREATE_STORED_AGENT_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/stored/agents",
responseType: "json",
bodySchema: chunkTIWGWGIO_cjs.createStoredAgentBodySchema,
responseSchema: chunkTIWGWGIO_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 || chunkYWUVDFQZ_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 = chunkHDIYJI2Z_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: chunkYWUVDFQZ_cjs.scopeStoredResourceMetadata(metadata, await chunkYWUVDFQZ_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 chunkFR5QBXVS_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating stored agent");
}
}
});
var UPDATE_STORED_AGENT_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "PATCH",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkTIWGWGIO_cjs.storedAgentIdPathParams,
bodySchema: chunkTIWGWGIO_cjs.updateStoredAgentBodySchema,
responseSchema: chunkTIWGWGIO_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 chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext);
chunkYWUVDFQZ_cjs.assertStoredResourceScope(existing, scope);
chunkHDIYJI2Z_cjs.assertWriteAccess({
requestContext,
resource: "stored-agents",
resourceId: storedAgentId,
action: "edit",
record: existing
});
chunkZCX2J552_cjs.validateMetadataAvatarUrl(metadata);
const callerAuthorId = chunkHDIYJI2Z_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 = chunkYWUVDFQZ_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 chunkFR5QBXVS_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error updating stored agent");
}
}
});
var DELETE_STORED_AGENT_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "DELETE",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkTIWGWGIO_cjs.storedAgentIdPathParams,
responseSchema: chunkTIWGWGIO_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(existing, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/stored/agents/:storedAgentId/dependents",
responseType: "json",
pathParamSchema: chunkTIWGWGIO_cjs.storedAgentIdPathParams,
responseSchema: chunkTIWGWGIO_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(target, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: target });
const filter = chunkHDIYJI2Z_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 (chunkHDIYJI2Z_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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/stored/agents/preview-instructions",
responseType: "json",
bodySchema: chunkTIWGWGIO_cjs.previewInstructionsBodySchema,
responseSchema: chunkTIWGWGIO_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-6QQ4I6IY.cjs.map
//# sourceMappingURL=chunk-6QQ4I6IY.cjs.map

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

'use strict';
var chunkOE5GVCW4_cjs = require('./chunk-OE5GVCW4.cjs');
var chunkS6TNTR3A_cjs = require('./chunk-S6TNTR3A.cjs');
var chunkPTPMBE6M_cjs = require('./chunk-PTPMBE6M.cjs');
var chunkZQ4GVMYG_cjs = require('./chunk-ZQ4GVMYG.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var chunkYWUVDFQZ_cjs = require('./chunk-YWUVDFQZ.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
// src/server/handlers/agent-builder.ts
var agent_builder_exports = {};
chunkO7I5CWRX_cjs.__export(agent_builder_exports, {
CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE: () => CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE,
CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE: () => CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,
GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE: () => GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,
GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE: () => GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,
LIST_AGENT_BUILDER_ACTIONS_ROUTE: () => LIST_AGENT_BUILDER_ACTIONS_ROUTE,
LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE: () => LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,
OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE: () => OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,
OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE: () => OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
RESUME_AGENT_BUILDER_ACTION_ROUTE: () => RESUME_AGENT_BUILDER_ACTION_ROUTE,
RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE: () => RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE: () => RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,
RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE: () => RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,
START_AGENT_BUILDER_ACTION_RUN_ROUTE: () => START_AGENT_BUILDER_ACTION_RUN_ROUTE,
START_ASYNC_AGENT_BUILDER_ACTION_ROUTE: () => START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
STREAM_AGENT_BUILDER_ACTION_ROUTE: () => STREAM_AGENT_BUILDER_ACTION_ROUTE,
STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE: () => STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE
});
var agentBuilderWorkflowsPromise;
async function loadAgentBuilderWorkflows() {
agentBuilderWorkflowsPromise ??= import('./dist-66SHYWFH.cjs').then((mod) => mod.agentBuilderWorkflows);
return agentBuilderWorkflowsPromise;
}
async function registerAgentBuilderWorkflows(mastra) {
const agentBuilderWorkflows = await loadAgentBuilderWorkflows();
chunkYWUVDFQZ_cjs.WorkflowRegistry.registerTemporaryWorkflows(agentBuilderWorkflows, mastra);
return agentBuilderWorkflows;
}
var LIST_AGENT_BUILDER_ACTIONS_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/agent-builder",
responseType: "json",
responseSchema: chunkPTPMBE6M_cjs.listWorkflowsResponseSchema,
summary: "List agent-builder actions",
description: "Returns a list of all available agent-builder actions",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
logger.info("Listing agent builder actions");
return await chunkOE5GVCW4_cjs.LIST_WORKFLOWS_ROUTE.handler(ctx);
} catch (error) {
logger.error("Error listing agent builder actions", { error });
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting agent builder workflows");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/agent-builder/:actionId",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
responseSchema: chunkPTPMBE6M_cjs.workflowInfoSchema,
summary: "Get action by ID",
description: "Returns details for a specific agent-builder action",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId } = ctx;
const logger = mastra.getLogger();
try {
const agentBuilderWorkflows = await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: `Invalid agent-builder action: ${actionId}. Valid actions are: ${Object.keys(agentBuilderWorkflows).join(", ")}`
});
}
logger.info("Getting agent builder action by ID", { actionId });
return await chunkOE5GVCW4_cjs.GET_WORKFLOW_BY_ID_ROUTE.handler({ ...ctx, workflowId: actionId });
} catch (error) {
logger.error("Error getting agent builder action by ID", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting agent builder action");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/agent-builder/:actionId/runs",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkPTPMBE6M_cjs.listWorkflowRunsQuerySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowRunsResponseSchema,
summary: "List action runs",
description: "Returns a paginated list of execution runs for the specified action",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Listing agent builder action runs", { actionId });
return await chunkOE5GVCW4_cjs.LIST_WORKFLOW_RUNS_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error listing agent builder action runs", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting agent builder action runs");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/agent-builder/:actionId/runs/:runId",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionRunPathParams,
queryParamSchema: chunkPTPMBE6M_cjs.workflowRunResultQuerySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowRunResultSchema,
summary: "Get action run by ID",
description: "Returns details for a specific action run with metadata and processed execution state. Use the fields query parameter to reduce payload size.",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Getting agent builder action run by ID", { actionId, runId });
return await chunkOE5GVCW4_cjs.GET_WORKFLOW_RUN_BY_ID_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error getting agent builder action run", { error, actionId, runId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting agent builder action run");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/create-run",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.optionalRunIdSchema,
responseSchema: chunkPTPMBE6M_cjs.createWorkflowRunResponseSchema,
summary: "Create action run",
description: "Creates a new action execution instance with an optional custom run ID",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Creating agent builder action run", { actionId, runId });
return await chunkOE5GVCW4_cjs.CREATE_WORKFLOW_RUN_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error creating agent builder action run", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating agent builder action run");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var STREAM_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/stream",
responseType: "stream",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkS6TNTR3A_cjs.streamAgentBuilderBodySchema,
responseSchema: chunkZQ4GVMYG_cjs.streamResponseSchema,
summary: "Stream action execution",
description: "Executes an action and streams the results in real-time",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Streaming agent builder action", { actionId, runId });
return await chunkOE5GVCW4_cjs.STREAM_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error streaming agent builder action", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error streaming agent builder action");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var START_ASYNC_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/start-async",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.optionalRunIdSchema,
bodySchema: chunkS6TNTR3A_cjs.startAsyncAgentBuilderBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowExecutionResultSchema,
summary: "Start action asynchronously",
description: "Starts an action execution asynchronously without streaming results",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Starting agent builder action asynchronously", { actionId, runId });
return await chunkOE5GVCW4_cjs.START_ASYNC_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error starting agent builder action asynchronously", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error starting agent builder action");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var START_AGENT_BUILDER_ACTION_RUN_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/start",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkS6TNTR3A_cjs.startAsyncAgentBuilderBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Start specific action run",
description: "Starts execution of a specific action run by ID",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Starting specific agent builder action run", { actionId, runId });
return await chunkOE5GVCW4_cjs.START_WORKFLOW_RUN_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error starting agent builder action run", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error starting agent builder action run");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/observe",
responseType: "stream",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
responseSchema: chunkZQ4GVMYG_cjs.streamResponseSchema,
summary: "Observe action stream",
description: "Observes and streams updates from an already running action execution",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Observing agent builder action stream", { actionId, runId });
return await chunkOE5GVCW4_cjs.OBSERVE_STREAM_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error observing agent builder action stream", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error observing agent builder action stream");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/resume-async",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkS6TNTR3A_cjs.resumeAgentBuilderBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowExecutionResultSchema,
summary: "Resume action asynchronously",
description: "Resumes a suspended action execution asynchronously without streaming",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, step, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Resuming agent builder action asynchronously", { actionId, runId, step });
return await chunkOE5GVCW4_cjs.RESUME_ASYNC_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error resuming agent builder action asynchronously", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error resuming agent builder action");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/resume-no-wait",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkS6TNTR3A_cjs.resumeAgentBuilderBodySchema,
responseSchema: chunkPTPMBE6M_cjs.createWorkflowRunResponseSchema,
summary: "Resume action without waiting",
description: "Resumes a suspended action execution without waiting (fire-and-forget) and returns immediately with the runId. The action continues executing in the background.",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, step, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Resuming agent builder action without waiting", { actionId, runId, step });
return await chunkOE5GVCW4_cjs.RESUME_NO_WAIT_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error resuming agent builder action without waiting", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error resuming agent builder action");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var RESUME_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/resume",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkS6TNTR3A_cjs.resumeAgentBuilderBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Resume action",
description: "Resumes a suspended action execution from a specific step",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, step, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Resuming agent builder action", { actionId, runId, step });
return await chunkOE5GVCW4_cjs.RESUME_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error resuming agent builder action", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error resuming agent builder action");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/resume-stream",
responseType: "stream",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkS6TNTR3A_cjs.resumeAgentBuilderBodySchema,
responseSchema: chunkZQ4GVMYG_cjs.streamResponseSchema,
summary: "Resume action stream",
description: "Resumes a suspended action execution and continues streaming results",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, step, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Resuming agent builder action stream", { actionId, runId, step });
return await chunkOE5GVCW4_cjs.RESUME_STREAM_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error resuming agent builder action stream", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error resuming agent builder action stream");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/runs/:runId/cancel",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionRunPathParams,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Cancel action run",
description: "Cancels an in-progress action execution",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Cancelling agent builder action run", { actionId, runId });
return await chunkOE5GVCW4_cjs.CANCEL_WORKFLOW_RUN_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error cancelling agent builder action run", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error cancelling agent builder action run");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/stream-legacy",
responseType: "stream",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkS6TNTR3A_cjs.streamLegacyAgentBuilderBodySchema,
responseSchema: chunkZQ4GVMYG_cjs.streamResponseSchema,
summary: "[DEPRECATED] Stream agent-builder action with legacy format",
description: "Legacy endpoint for streaming agent-builder action execution. Use /agent-builder/:actionId/stream instead.",
tags: ["Agent Builder", "Legacy"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Streaming agent builder action (legacy)", { actionId, runId });
return await chunkOE5GVCW4_cjs.STREAM_LEGACY_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error streaming agent builder action (legacy)", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error streaming agent builder action");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/observe-stream-legacy",
responseType: "stream",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
responseSchema: chunkZQ4GVMYG_cjs.streamResponseSchema,
summary: "[DEPRECATED] Observe agent-builder action stream with legacy format",
description: "Legacy endpoint for observing agent-builder action stream. Use /agent-builder/:actionId/observe instead.",
tags: ["Agent Builder", "Legacy"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Observing agent builder action stream (legacy)", { actionId, runId });
return await chunkOE5GVCW4_cjs.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error observing agent builder action stream (legacy)", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error observing agent builder action stream");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
exports.CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE = CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE;
exports.CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE = CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE;
exports.GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE = GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE;
exports.GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE = GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE;
exports.LIST_AGENT_BUILDER_ACTIONS_ROUTE = LIST_AGENT_BUILDER_ACTIONS_ROUTE;
exports.LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE = LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE;
exports.OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE = OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE;
exports.OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE;
exports.RESUME_AGENT_BUILDER_ACTION_ROUTE = RESUME_AGENT_BUILDER_ACTION_ROUTE;
exports.RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE = RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE;
exports.RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE = RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE;
exports.RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE = RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE;
exports.START_AGENT_BUILDER_ACTION_RUN_ROUTE = START_AGENT_BUILDER_ACTION_RUN_ROUTE;
exports.START_ASYNC_AGENT_BUILDER_ACTION_ROUTE = START_ASYNC_AGENT_BUILDER_ACTION_ROUTE;
exports.STREAM_AGENT_BUILDER_ACTION_ROUTE = STREAM_AGENT_BUILDER_ACTION_ROUTE;
exports.STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE;
exports.agent_builder_exports = agent_builder_exports;
//# sourceMappingURL=chunk-BVMR64B7.cjs.map
//# sourceMappingURL=chunk-BVMR64B7.cjs.map
{"version":3,"sources":["../src/server/handlers/agent-builder.ts"],"names":["__export","WorkflowRegistry","createRoute","listWorkflowsResponseSchema","LIST_WORKFLOWS_ROUTE","handleError","actionIdPathParams","workflowInfoSchema","HTTPException","GET_WORKFLOW_BY_ID_ROUTE","listWorkflowRunsQuerySchema","workflowRunsResponseSchema","LIST_WORKFLOW_RUNS_ROUTE","actionRunPathParams","workflowRunResultQuerySchema","workflowRunResultSchema","GET_WORKFLOW_RUN_BY_ID_ROUTE","optionalRunIdSchema","createWorkflowRunResponseSchema","CREATE_WORKFLOW_RUN_ROUTE","runIdSchema","streamAgentBuilderBodySchema","streamResponseSchema","STREAM_WORKFLOW_ROUTE","startAsyncAgentBuilderBodySchema","workflowExecutionResultSchema","START_ASYNC_WORKFLOW_ROUTE","workflowControlResponseSchema","START_WORKFLOW_RUN_ROUTE","OBSERVE_STREAM_WORKFLOW_ROUTE","resumeAgentBuilderBodySchema","RESUME_ASYNC_WORKFLOW_ROUTE","RESUME_NO_WAIT_WORKFLOW_ROUTE","RESUME_WORKFLOW_ROUTE","RESUME_STREAM_WORKFLOW_ROUTE","CANCEL_WORKFLOW_RUN_ROUTE","streamLegacyAgentBuilderBodySchema","STREAM_LEGACY_WORKFLOW_ROUTE","OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE"],"mappings":"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","file":"chunk-BVMR64B7.cjs","sourcesContent":["import type { agentBuilderWorkflows as agentBuilderWorkflowsType } from '@mastra/agent-builder';\nimport { HTTPException } from '../http-exception';\nimport {\n actionIdPathParams,\n actionRunPathParams,\n createWorkflowRunResponseSchema,\n listWorkflowRunsQuerySchema,\n resumeAgentBuilderBodySchema,\n streamAgentBuilderBodySchema,\n startAsyncAgentBuilderBodySchema,\n workflowExecutionResultSchema,\n workflowControlResponseSchema,\n workflowRunsResponseSchema,\n workflowInfoSchema,\n listWorkflowsResponseSchema,\n streamLegacyAgentBuilderBodySchema,\n workflowRunResultSchema,\n workflowRunResultQuerySchema,\n} from '../schemas/agent-builder';\nimport { streamResponseSchema } from '../schemas/agents';\nimport { optionalRunIdSchema, runIdSchema } from '../schemas/common';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { WorkflowRegistry } from '../utils';\nimport { handleError } from './error';\nimport * as workflows from './workflows';\n\ntype AgentBuilderWorkflows = typeof agentBuilderWorkflowsType;\n\nlet agentBuilderWorkflowsPromise: Promise<AgentBuilderWorkflows> | undefined;\n\nasync function loadAgentBuilderWorkflows(): Promise<AgentBuilderWorkflows> {\n agentBuilderWorkflowsPromise ??= import('@mastra/agent-builder').then(mod => mod.agentBuilderWorkflows);\n return agentBuilderWorkflowsPromise;\n}\n\nasync function registerAgentBuilderWorkflows(\n mastra: Parameters<typeof WorkflowRegistry.registerTemporaryWorkflows>[1],\n) {\n const agentBuilderWorkflows = await loadAgentBuilderWorkflows();\n WorkflowRegistry.registerTemporaryWorkflows(agentBuilderWorkflows, mastra);\n return agentBuilderWorkflows;\n}\n\n// ============================================================================\n// Route Definitions (handlers call workflow route handlers with transformed parameters)\n// ============================================================================\n\nexport const LIST_AGENT_BUILDER_ACTIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-builder',\n responseType: 'json',\n responseSchema: listWorkflowsResponseSchema,\n summary: 'List agent-builder actions',\n description: 'Returns a list of all available agent-builder actions',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n logger.info('Listing agent builder actions');\n\n // Call workflow list handler\n return await workflows.LIST_WORKFLOWS_ROUTE.handler(ctx);\n } catch (error) {\n logger.error('Error listing agent builder actions', { error });\n return handleError(error, 'Error getting agent builder workflows');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-builder/:actionId',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n responseSchema: workflowInfoSchema,\n summary: 'Get action by ID',\n description: 'Returns details for a specific agent-builder action',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId } = ctx;\n const logger = mastra.getLogger();\n try {\n const agentBuilderWorkflows = await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, {\n message: `Invalid agent-builder action: ${actionId}. Valid actions are: ${Object.keys(agentBuilderWorkflows).join(', ')}`,\n });\n }\n\n logger.info('Getting agent builder action by ID', { actionId });\n\n return await workflows.GET_WORKFLOW_BY_ID_ROUTE.handler({ ...ctx, workflowId: actionId });\n } catch (error) {\n logger.error('Error getting agent builder action by ID', { error, actionId });\n return handleError(error, 'Error getting agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-builder/:actionId/runs',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: listWorkflowRunsQuerySchema,\n responseSchema: workflowRunsResponseSchema,\n summary: 'List action runs',\n description: 'Returns a paginated list of execution runs for the specified action',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Listing agent builder action runs', { actionId });\n\n return await workflows.LIST_WORKFLOW_RUNS_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error listing agent builder action runs', { error, actionId });\n return handleError(error, 'Error getting agent builder action runs');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-builder/:actionId/runs/:runId',\n responseType: 'json',\n pathParamSchema: actionRunPathParams,\n queryParamSchema: workflowRunResultQuerySchema,\n responseSchema: workflowRunResultSchema,\n summary: 'Get action run by ID',\n description:\n 'Returns details for a specific action run with metadata and processed execution state. Use the fields query parameter to reduce payload size.',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Getting agent builder action run by ID', { actionId, runId });\n\n return await workflows.GET_WORKFLOW_RUN_BY_ID_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error getting agent builder action run', { error, actionId, runId });\n return handleError(error, 'Error getting agent builder action run');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/create-run',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: optionalRunIdSchema,\n responseSchema: createWorkflowRunResponseSchema,\n summary: 'Create action run',\n description: 'Creates a new action execution instance with an optional custom run ID',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Creating agent builder action run', { actionId, runId });\n\n return await workflows.CREATE_WORKFLOW_RUN_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error creating agent builder action run', { error, actionId });\n return handleError(error, 'Error creating agent builder action run');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/stream',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: streamAgentBuilderBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Stream action execution',\n description: 'Executes an action and streams the results in real-time',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Streaming agent builder action', { actionId, runId });\n\n return await workflows.STREAM_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error streaming agent builder action', { error, actionId });\n return handleError(error, 'Error streaming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const START_ASYNC_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/start-async',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: optionalRunIdSchema,\n bodySchema: startAsyncAgentBuilderBodySchema,\n responseSchema: workflowExecutionResultSchema,\n summary: 'Start action asynchronously',\n description: 'Starts an action execution asynchronously without streaming results',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Starting agent builder action asynchronously', { actionId, runId });\n\n return await workflows.START_ASYNC_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error starting agent builder action asynchronously', { error, actionId });\n return handleError(error, 'Error starting agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const START_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/start',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: startAsyncAgentBuilderBodySchema,\n responseSchema: workflowControlResponseSchema,\n summary: 'Start specific action run',\n description: 'Starts execution of a specific action run by ID',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Starting specific agent builder action run', { actionId, runId });\n\n return await workflows.START_WORKFLOW_RUN_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error starting agent builder action run', { error, actionId });\n return handleError(error, 'Error starting agent builder action run');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/observe',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n responseSchema: streamResponseSchema,\n summary: 'Observe action stream',\n description: 'Observes and streams updates from an already running action execution',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Observing agent builder action stream', { actionId, runId });\n\n return await workflows.OBSERVE_STREAM_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error observing agent builder action stream', { error, actionId });\n return handleError(error, 'Error observing agent builder action stream');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/resume-async',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: resumeAgentBuilderBodySchema,\n responseSchema: workflowExecutionResultSchema,\n summary: 'Resume action asynchronously',\n description: 'Resumes a suspended action execution asynchronously without streaming',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, step, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Resuming agent builder action asynchronously', { actionId, runId, step });\n\n return await workflows.RESUME_ASYNC_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error resuming agent builder action asynchronously', { error, actionId });\n return handleError(error, 'Error resuming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\n/**\n * Fire-and-forget resume for agent-builder actions: returns immediately with the runId without\n * waiting for completion. Delegates to the workflows `resume-no-wait` route.\n *\n * TODO(v2): fold this behavior into the `resume-async` route in Mastra v2 and remove this route.\n * Kept separate in v1 to avoid breaking the existing `resume-async` response contract.\n */\nexport const RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/resume-no-wait',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: resumeAgentBuilderBodySchema,\n responseSchema: createWorkflowRunResponseSchema,\n summary: 'Resume action without waiting',\n description:\n 'Resumes a suspended action execution without waiting (fire-and-forget) and returns immediately with the runId. The action continues executing in the background.',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, step, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Resuming agent builder action without waiting', { actionId, runId, step });\n\n return await workflows.RESUME_NO_WAIT_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error resuming agent builder action without waiting', { error, actionId });\n return handleError(error, 'Error resuming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const RESUME_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/resume',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: resumeAgentBuilderBodySchema,\n responseSchema: workflowControlResponseSchema,\n summary: 'Resume action',\n description: 'Resumes a suspended action execution from a specific step',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, step, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Resuming agent builder action', { actionId, runId, step });\n\n return await workflows.RESUME_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error resuming agent builder action', { error, actionId });\n return handleError(error, 'Error resuming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/resume-stream',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: resumeAgentBuilderBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Resume action stream',\n description: 'Resumes a suspended action execution and continues streaming results',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, step, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Resuming agent builder action stream', { actionId, runId, step });\n\n return await workflows.RESUME_STREAM_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error resuming agent builder action stream', { error, actionId });\n return handleError(error, 'Error resuming agent builder action stream');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/runs/:runId/cancel',\n responseType: 'json',\n pathParamSchema: actionRunPathParams,\n responseSchema: workflowControlResponseSchema,\n summary: 'Cancel action run',\n description: 'Cancels an in-progress action execution',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Cancelling agent builder action run', { actionId, runId });\n\n return await workflows.CANCEL_WORKFLOW_RUN_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error cancelling agent builder action run', { error, actionId });\n return handleError(error, 'Error cancelling agent builder action run');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\n// Legacy routes (deprecated)\nexport const STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/stream-legacy',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: streamLegacyAgentBuilderBodySchema,\n responseSchema: streamResponseSchema,\n summary: '[DEPRECATED] Stream agent-builder action with legacy format',\n description:\n 'Legacy endpoint for streaming agent-builder action execution. Use /agent-builder/:actionId/stream instead.',\n tags: ['Agent Builder', 'Legacy'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Streaming agent builder action (legacy)', { actionId, runId });\n\n return await workflows.STREAM_LEGACY_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error streaming agent builder action (legacy)', { error, actionId });\n return handleError(error, 'Error streaming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/observe-stream-legacy',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n responseSchema: streamResponseSchema,\n summary: '[DEPRECATED] Observe agent-builder action stream with legacy format',\n description:\n 'Legacy endpoint for observing agent-builder action stream. Use /agent-builder/:actionId/observe instead.',\n tags: ['Agent Builder', 'Legacy'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Observing agent builder action stream (legacy)', { actionId, runId });\n\n return await workflows.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error observing agent builder action stream (legacy)', { error, actionId });\n return handleError(error, 'Error observing agent builder action stream');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n"]}
import { favoriteToggleResponseSchema } from './chunk-SFPN7SHZ.js';
import { requireBuilderFeature } from './chunk-GZUFJQ5I.js';
import { getCallerAuthorId, assertReadAccess } from './chunk-SXZS6VZ3.js';
import { storedAgentIdPathParams } from './chunk-SPVKRK56.js';
import { assertStoredResourceScope, getStoredResourceScope } from './chunk-EOGTJIPF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-DPTBGWU7.js.map
//# sourceMappingURL=chunk-DPTBGWU7.js.map
{"version":3,"sources":["../src/server/handlers/stored-agent-favorites.ts"],"names":[],"mappings":"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","file":"chunk-DPTBGWU7.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"]}
import { listScorersResponseSchema, scorerIdPathParams, scorerEntrySchema, scoresWithPaginationResponseSchema, listScoresByRunIdQuerySchema, listScoresByScorerIdQuerySchema, listScoresByEntityIdQuerySchema, entityPathParams, saveScoreResponseSchema, saveScoreBodySchema } from './chunk-I2LG5WYB.js';
import { getAgentFromSystem } from './chunk-2MEUH7JT.js';
import { runIdSchema } from './chunk-2YY3EMMS.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-DX4ROVTA.js.map
//# sourceMappingURL=chunk-DX4ROVTA.js.map
{"version":3,"sources":["../src/server/handlers/scores.ts"],"names":[],"mappings":"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","file":"chunk-DX4ROVTA.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"]}
'use strict';
var chunkMJH4EEUV_cjs = require('./chunk-MJH4EEUV.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
// src/server/handlers/favorites-enrichment.ts
async function prepareFavoritesEnrichment(mastra, requestContext, entityType, entityIds) {
if (!await chunkMJH4EEUV_cjs.isBuilderFeatureEnabled(mastra, "favorites")) return null;
const userId = chunkHDIYJI2Z_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-FR5QBXVS.cjs.map
//# sourceMappingURL=chunk-FR5QBXVS.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-FR5QBXVS.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 { builderSettingsResponseSchema, builderAvailableModelsResponseSchema, infrastructureStatusResponseSchema, agentFeaturesSchema } from './chunk-PBNENTGS.js';
import { buildProvidersList } from './chunk-2MEUH7JT.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-GZUFJQ5I.js.map
//# sourceMappingURL=chunk-GZUFJQ5I.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-GZUFJQ5I.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"]}
import { paginationInfoSchema } from './chunk-2YY3EMMS.js';
import { z } from 'zod/v4';
var scoringSamplingConfigSchema = z.object({});
var mastraScorerConfigSchema = z.object({
id: z.string(),
name: z.string().optional(),
description: z.string(),
type: z.unknown().optional(),
judge: z.unknown().optional()
});
var mastraScorerSchema = z.object({
config: mastraScorerConfigSchema
});
var scorerEntrySchema = z.object({
scorer: mastraScorerSchema,
sampling: scoringSamplingConfigSchema.optional(),
agentIds: z.array(z.string()),
agentNames: z.array(z.string()),
workflowIds: z.array(z.string()),
isRegistered: z.boolean(),
source: z.enum(["code", "stored", "fs"])
});
var listScorersResponseSchema = z.record(z.string(), scorerEntrySchema);
var scorerIdPathParams = z.object({
scorerId: z.string().describe("Unique identifier for the scorer")
});
var entityPathParams = z.object({
entityType: z.string().describe("Type of the entity (AGENT or WORKFLOW)"),
entityId: z.string().describe("Unique identifier for the entity")
});
var listScoresByRunIdQuerySchema = z.object({
page: z.coerce.number().optional().default(0),
perPage: z.coerce.number().optional().default(10)
});
var listScoresByScorerIdQuerySchema = z.object({
page: z.coerce.number().optional().default(0),
perPage: z.coerce.number().optional().default(10),
entityId: z.string().optional(),
entityType: z.string().optional()
});
var listScoresByEntityIdQuerySchema = z.object({
page: z.coerce.number().optional().default(0),
perPage: z.coerce.number().optional().default(10)
});
var saveScoreBodySchema = z.object({
score: z.unknown()
// ScoreRowData - complex type
});
var scoresWithPaginationResponseSchema = z.object({
pagination: paginationInfoSchema,
scores: z.array(z.unknown())
// Array of score records
});
var saveScoreResponseSchema = z.object({
score: z.unknown()
// ScoreRowData
});
export { entityPathParams, listScorersResponseSchema, listScoresByEntityIdQuerySchema, listScoresByRunIdQuerySchema, listScoresByScorerIdQuerySchema, saveScoreBodySchema, saveScoreResponseSchema, scorerEntrySchema, scorerIdPathParams, scoresWithPaginationResponseSchema };
//# sourceMappingURL=chunk-I2LG5WYB.js.map
//# sourceMappingURL=chunk-I2LG5WYB.js.map
{"version":3,"sources":["../src/server/schemas/scores.ts"],"names":[],"mappings":"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","file":"chunk-I2LG5WYB.js","sourcesContent":["import { z } from 'zod/v4';\nimport { paginationInfoSchema } from './common';\n\n/**\n * Schema for sampling configuration\n * Using passthrough to allow various sampling config shapes\n */\nconst scoringSamplingConfigSchema = z.object({});\n\n/**\n * Schema for MastraScorer config object\n */\nconst mastraScorerConfigSchema = z.object({\n id: z.string(),\n name: z.string().optional(),\n description: z.string(),\n type: z.unknown().optional(),\n judge: z.unknown().optional(),\n});\n\n/**\n * Schema for MastraScorer\n * Only validates public config property, uses passthrough to allow class instance\n */\nconst mastraScorerSchema = z.object({\n config: mastraScorerConfigSchema,\n});\n\n/**\n * Schema for scorer entry with associations to agents and workflows\n */\nexport const scorerEntrySchema = z.object({\n scorer: mastraScorerSchema,\n sampling: scoringSamplingConfigSchema.optional(),\n agentIds: z.array(z.string()),\n agentNames: z.array(z.string()),\n workflowIds: z.array(z.string()),\n isRegistered: z.boolean(),\n source: z.enum(['code', 'stored', 'fs']),\n});\n\n/**\n * Response schema for list scorers endpoint\n * Returns a record of scorer ID to scorer entry with associations\n */\nexport const listScorersResponseSchema = z.record(z.string(), scorerEntrySchema);\n\n// Path parameter schemas\nexport const scorerIdPathParams = z.object({\n scorerId: z.string().describe('Unique identifier for the scorer'),\n});\n\nexport const entityPathParams = z.object({\n entityType: z.string().describe('Type of the entity (AGENT or WORKFLOW)'),\n entityId: z.string().describe('Unique identifier for the entity'),\n});\n\n// Query parameter schemas\n// HTTP query params must be flat (e.g., ?page=0&perPage=10)\n// Adapters should transform these into nested pagination objects for handlers if needed\n\nexport const listScoresByRunIdQuerySchema = z.object({\n page: z.coerce.number().optional().default(0),\n perPage: z.coerce.number().optional().default(10),\n});\n\nexport const listScoresByScorerIdQuerySchema = z.object({\n page: z.coerce.number().optional().default(0),\n perPage: z.coerce.number().optional().default(10),\n entityId: z.string().optional(),\n entityType: z.string().optional(),\n});\n\nexport const listScoresByEntityIdQuerySchema = z.object({\n page: z.coerce.number().optional().default(0),\n perPage: z.coerce.number().optional().default(10),\n});\n\n// Body schema for saving scores\nexport const saveScoreBodySchema = z.object({\n score: z.unknown(), // ScoreRowData - complex type\n});\n\n// Response schemas\nexport const scoresWithPaginationResponseSchema = z.object({\n pagination: paginationInfoSchema,\n scores: z.array(z.unknown()), // Array of score records\n});\n\nexport const saveScoreResponseSchema = z.object({\n score: z.unknown(), // ScoreRowData\n});\n"]}
'use strict';
var chunkMJ5QWRI2_cjs = require('./chunk-MJ5QWRI2.cjs');
var chunkSCY53JIH_cjs = require('./chunk-SCY53JIH.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/scores/scorers",
responseType: "json",
responseSchema: chunkMJ5QWRI2_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/scores/scorers/:scorerId",
responseType: "json",
pathParamSchema: chunkMJ5QWRI2_cjs.scorerIdPathParams,
responseSchema: chunkMJ5QWRI2_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/scores/run/:runId",
responseType: "json",
pathParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
queryParamSchema: chunkMJ5QWRI2_cjs.listScoresByRunIdQuerySchema,
responseSchema: chunkMJ5QWRI2_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/scores/scorer/:scorerId",
responseType: "json",
pathParamSchema: chunkMJ5QWRI2_cjs.scorerIdPathParams,
queryParamSchema: chunkMJ5QWRI2_cjs.listScoresByScorerIdQuerySchema,
responseSchema: chunkMJ5QWRI2_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/scores/entity/:entityType/:entityId",
responseType: "json",
pathParamSchema: chunkMJ5QWRI2_cjs.entityPathParams,
queryParamSchema: chunkMJ5QWRI2_cjs.listScoresByEntityIdQuerySchema,
responseSchema: chunkMJ5QWRI2_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 chunkSCY53JIH_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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/scores",
responseType: "json",
bodySchema: chunkMJ5QWRI2_cjs.saveScoreBodySchema,
responseSchema: chunkMJ5QWRI2_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-I4X4UHQW.cjs.map
//# sourceMappingURL=chunk-I4X4UHQW.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-I4X4UHQW.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 { validateMetadataAvatarUrl } from './chunk-HMJL3C3H.js';
import { stripFavoriteFields, prepareFavoritesEnrichment, enrichOrStripFavorites } from './chunk-56RJJ6PJ.js';
import { isBuilderFeatureEnabled } from './chunk-GZUFJQ5I.js';
import { handleAutoVersioning } from './chunk-33QPJPK4.js';
import { prepareAuthorEnrichment, attachAuthor } from './chunk-KLV64VVH.js';
import { resolveAuthorFilter, getCallerAuthorId, matchesAuthorFilter, assertReadAccess, assertWriteAccess } from './chunk-SXZS6VZ3.js';
import { listStoredAgentsResponseSchema, listStoredAgentsQuerySchema, exportStoredAgentResponseSchema, exportStoredAgentBodySchema, storedAgentIdPathParams, openStoredAgentChangeRequestResponseSchema, openStoredAgentChangeRequestBodySchema, getStoredAgentResponseSchema, createStoredAgentResponseSchema, createStoredAgentBodySchema, updateStoredAgentResponseSchema, updateStoredAgentBodySchema, deleteStoredAgentResponseSchema, getStoredAgentDependentsResponseSchema, previewInstructionsResponseSchema, previewInstructionsBodySchema } from './chunk-SPVKRK56.js';
import { statusQuerySchema } from './chunk-2YY3EMMS.js';
import { getStoredResourceScope, scopeStoredResourceMetadata, assertStoredResourceScope, toSlug } from './chunk-EOGTJIPF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-J63TLQKU.js.map
//# sourceMappingURL=chunk-J63TLQKU.js.map

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

import { getAgentFromSystem } from './chunk-2MEUH7JT.js';
import { listToolsResponseSchema, serializedToolSchema, toolIdPathParams, executeToolResponseSchema, executeToolContextBodySchema, agentToolPathParams, executeToolBodySchema } from './chunk-R3KUPFCO.js';
import { MastraFGAPermissions, validateBody } from './chunk-JBSUT5XF.js';
import { optionalRunIdSchema } from './chunk-2YY3EMMS.js';
import { stringify } from './chunk-EOGTJIPF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.js';
import { standardSchemaToJSONSchema, toStandardSchema5 } from './chunk-JIL453ER.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-KR2OUW3N.js.map
//# sourceMappingURL=chunk-KR2OUW3N.js.map
{"version":3,"sources":["../src/server/handlers/tools.ts"],"names":["tool"],"mappings":"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","file":"chunk-KR2OUW3N.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-UIRQU4GW.js';
import { stripFavoriteFields, prepareFavoritesEnrichment, enrichOrStripFavorites } from './chunk-56RJJ6PJ.js';
import { isBuilderFeatureEnabled } from './chunk-GZUFJQ5I.js';
import { resolveAuthorFilter, getCallerAuthorId, matchesAuthorFilter, assertReadAccess, assertWriteAccess } from './chunk-SXZS6VZ3.js';
import { getStoredResourceScope, scopeStoredResourceMetadata, assertStoredResourceScope, toSlug } from './chunk-EOGTJIPF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-LQXFAW5L.js.map
//# sourceMappingURL=chunk-LQXFAW5L.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-LQXFAW5L.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 chunkO4O2EJF7_cjs = require('./chunk-O4O2EJF7.cjs');
var chunkMJH4EEUV_cjs = require('./chunk-MJH4EEUV.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
var chunkTIWGWGIO_cjs = require('./chunk-TIWGWGIO.cjs');
var chunkYWUVDFQZ_cjs = require('./chunk-YWUVDFQZ.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunkDN2NUSL2_cjs.createRoute({
method: "PUT",
path: "/stored/agents/:storedAgentId/favorite",
responseType: "json",
pathParamSchema: chunkTIWGWGIO_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 chunkMJH4EEUV_cjs.requireBuilderFeature(mastra, "favorites");
const callerId = chunkHDIYJI2Z_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(agent, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_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 = chunkDN2NUSL2_cjs.createRoute({
method: "DELETE",
path: "/stored/agents/:storedAgentId/favorite",
responseType: "json",
pathParamSchema: chunkTIWGWGIO_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 chunkMJH4EEUV_cjs.requireBuilderFeature(mastra, "favorites");
const callerId = chunkHDIYJI2Z_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(agent, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_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-LRRO5PBP.cjs.map
//# sourceMappingURL=chunk-LRRO5PBP.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-LRRO5PBP.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 chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var v4 = require('zod/v4');
var scoringSamplingConfigSchema = v4.z.object({});
var mastraScorerConfigSchema = v4.z.object({
id: v4.z.string(),
name: v4.z.string().optional(),
description: v4.z.string(),
type: v4.z.unknown().optional(),
judge: v4.z.unknown().optional()
});
var mastraScorerSchema = v4.z.object({
config: mastraScorerConfigSchema
});
var scorerEntrySchema = v4.z.object({
scorer: mastraScorerSchema,
sampling: scoringSamplingConfigSchema.optional(),
agentIds: v4.z.array(v4.z.string()),
agentNames: v4.z.array(v4.z.string()),
workflowIds: v4.z.array(v4.z.string()),
isRegistered: v4.z.boolean(),
source: v4.z.enum(["code", "stored", "fs"])
});
var listScorersResponseSchema = v4.z.record(v4.z.string(), scorerEntrySchema);
var scorerIdPathParams = v4.z.object({
scorerId: v4.z.string().describe("Unique identifier for the scorer")
});
var entityPathParams = v4.z.object({
entityType: v4.z.string().describe("Type of the entity (AGENT or WORKFLOW)"),
entityId: v4.z.string().describe("Unique identifier for the entity")
});
var listScoresByRunIdQuerySchema = v4.z.object({
page: v4.z.coerce.number().optional().default(0),
perPage: v4.z.coerce.number().optional().default(10)
});
var listScoresByScorerIdQuerySchema = v4.z.object({
page: v4.z.coerce.number().optional().default(0),
perPage: v4.z.coerce.number().optional().default(10),
entityId: v4.z.string().optional(),
entityType: v4.z.string().optional()
});
var listScoresByEntityIdQuerySchema = v4.z.object({
page: v4.z.coerce.number().optional().default(0),
perPage: v4.z.coerce.number().optional().default(10)
});
var saveScoreBodySchema = v4.z.object({
score: v4.z.unknown()
// ScoreRowData - complex type
});
var scoresWithPaginationResponseSchema = v4.z.object({
pagination: chunkDIG2K5CV_cjs.paginationInfoSchema,
scores: v4.z.array(v4.z.unknown())
// Array of score records
});
var saveScoreResponseSchema = v4.z.object({
score: v4.z.unknown()
// ScoreRowData
});
exports.entityPathParams = entityPathParams;
exports.listScorersResponseSchema = listScorersResponseSchema;
exports.listScoresByEntityIdQuerySchema = listScoresByEntityIdQuerySchema;
exports.listScoresByRunIdQuerySchema = listScoresByRunIdQuerySchema;
exports.listScoresByScorerIdQuerySchema = listScoresByScorerIdQuerySchema;
exports.saveScoreBodySchema = saveScoreBodySchema;
exports.saveScoreResponseSchema = saveScoreResponseSchema;
exports.scorerEntrySchema = scorerEntrySchema;
exports.scorerIdPathParams = scorerIdPathParams;
exports.scoresWithPaginationResponseSchema = scoresWithPaginationResponseSchema;
//# sourceMappingURL=chunk-MJ5QWRI2.cjs.map
//# sourceMappingURL=chunk-MJ5QWRI2.cjs.map
{"version":3,"sources":["../src/server/schemas/scores.ts"],"names":["z","paginationInfoSchema"],"mappings":"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","file":"chunk-MJ5QWRI2.cjs","sourcesContent":["import { z } from 'zod/v4';\nimport { paginationInfoSchema } from './common';\n\n/**\n * Schema for sampling configuration\n * Using passthrough to allow various sampling config shapes\n */\nconst scoringSamplingConfigSchema = z.object({});\n\n/**\n * Schema for MastraScorer config object\n */\nconst mastraScorerConfigSchema = z.object({\n id: z.string(),\n name: z.string().optional(),\n description: z.string(),\n type: z.unknown().optional(),\n judge: z.unknown().optional(),\n});\n\n/**\n * Schema for MastraScorer\n * Only validates public config property, uses passthrough to allow class instance\n */\nconst mastraScorerSchema = z.object({\n config: mastraScorerConfigSchema,\n});\n\n/**\n * Schema for scorer entry with associations to agents and workflows\n */\nexport const scorerEntrySchema = z.object({\n scorer: mastraScorerSchema,\n sampling: scoringSamplingConfigSchema.optional(),\n agentIds: z.array(z.string()),\n agentNames: z.array(z.string()),\n workflowIds: z.array(z.string()),\n isRegistered: z.boolean(),\n source: z.enum(['code', 'stored', 'fs']),\n});\n\n/**\n * Response schema for list scorers endpoint\n * Returns a record of scorer ID to scorer entry with associations\n */\nexport const listScorersResponseSchema = z.record(z.string(), scorerEntrySchema);\n\n// Path parameter schemas\nexport const scorerIdPathParams = z.object({\n scorerId: z.string().describe('Unique identifier for the scorer'),\n});\n\nexport const entityPathParams = z.object({\n entityType: z.string().describe('Type of the entity (AGENT or WORKFLOW)'),\n entityId: z.string().describe('Unique identifier for the entity'),\n});\n\n// Query parameter schemas\n// HTTP query params must be flat (e.g., ?page=0&perPage=10)\n// Adapters should transform these into nested pagination objects for handlers if needed\n\nexport const listScoresByRunIdQuerySchema = z.object({\n page: z.coerce.number().optional().default(0),\n perPage: z.coerce.number().optional().default(10),\n});\n\nexport const listScoresByScorerIdQuerySchema = z.object({\n page: z.coerce.number().optional().default(0),\n perPage: z.coerce.number().optional().default(10),\n entityId: z.string().optional(),\n entityType: z.string().optional(),\n});\n\nexport const listScoresByEntityIdQuerySchema = z.object({\n page: z.coerce.number().optional().default(0),\n perPage: z.coerce.number().optional().default(10),\n});\n\n// Body schema for saving scores\nexport const saveScoreBodySchema = z.object({\n score: z.unknown(), // ScoreRowData - complex type\n});\n\n// Response schemas\nexport const scoresWithPaginationResponseSchema = z.object({\n pagination: paginationInfoSchema,\n scores: z.array(z.unknown()), // Array of score records\n});\n\nexport const saveScoreResponseSchema = z.object({\n score: z.unknown(), // ScoreRowData\n});\n"]}
'use strict';
var chunkVBPYR5ZH_cjs = require('./chunk-VBPYR5ZH.cjs');
var chunkSCY53JIH_cjs = require('./chunk-SCY53JIH.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunkVBPYR5ZH_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/editor/builder/settings",
responseType: "json",
responseSchema: chunkVBPYR5ZH_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/editor/builder/models/available",
responseType: "json",
responseSchema: chunkVBPYR5ZH_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 chunkSCY53JIH_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/editor/builder/infrastructure",
responseType: "json",
responseSchema: chunkVBPYR5ZH_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-MJH4EEUV.cjs.map
//# sourceMappingURL=chunk-MJH4EEUV.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-MJH4EEUV.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"]}
import { LIST_WORKFLOWS_ROUTE, GET_WORKFLOW_BY_ID_ROUTE, LIST_WORKFLOW_RUNS_ROUTE, GET_WORKFLOW_RUN_BY_ID_ROUTE, CREATE_WORKFLOW_RUN_ROUTE, 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, RESUME_STREAM_WORKFLOW_ROUTE, CANCEL_WORKFLOW_RUN_ROUTE, STREAM_LEGACY_WORKFLOW_ROUTE, OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE } from './chunk-3MJF6POS.js';
import { actionIdPathParams, actionRunPathParams, streamAgentBuilderBodySchema, startAsyncAgentBuilderBodySchema, resumeAgentBuilderBodySchema, streamLegacyAgentBuilderBodySchema } from './chunk-6SZGOLAP.js';
import { listWorkflowsResponseSchema, workflowInfoSchema, workflowRunsResponseSchema, listWorkflowRunsQuerySchema, workflowRunResultSchema, workflowRunResultQuerySchema, createWorkflowRunResponseSchema, workflowExecutionResultSchema, workflowControlResponseSchema } from './chunk-K4HCNNHA.js';
import { streamResponseSchema } from './chunk-R3KUPFCO.js';
import { optionalRunIdSchema, runIdSchema } from './chunk-2YY3EMMS.js';
import { WorkflowRegistry } from './chunk-EOGTJIPF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
import { __export } from './chunk-PR4QN5HX.js';
// src/server/handlers/agent-builder.ts
var agent_builder_exports = {};
__export(agent_builder_exports, {
CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE: () => CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE,
CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE: () => CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,
GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE: () => GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,
GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE: () => GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,
LIST_AGENT_BUILDER_ACTIONS_ROUTE: () => LIST_AGENT_BUILDER_ACTIONS_ROUTE,
LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE: () => LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,
OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE: () => OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,
OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE: () => OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
RESUME_AGENT_BUILDER_ACTION_ROUTE: () => RESUME_AGENT_BUILDER_ACTION_ROUTE,
RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE: () => RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE: () => RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,
RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE: () => RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,
START_AGENT_BUILDER_ACTION_RUN_ROUTE: () => START_AGENT_BUILDER_ACTION_RUN_ROUTE,
START_ASYNC_AGENT_BUILDER_ACTION_ROUTE: () => START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
STREAM_AGENT_BUILDER_ACTION_ROUTE: () => STREAM_AGENT_BUILDER_ACTION_ROUTE,
STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE: () => STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE
});
var agentBuilderWorkflowsPromise;
async function loadAgentBuilderWorkflows() {
agentBuilderWorkflowsPromise ??= import('./dist-Q3RF3I36.js').then((mod) => mod.agentBuilderWorkflows);
return agentBuilderWorkflowsPromise;
}
async function registerAgentBuilderWorkflows(mastra) {
const agentBuilderWorkflows = await loadAgentBuilderWorkflows();
WorkflowRegistry.registerTemporaryWorkflows(agentBuilderWorkflows, mastra);
return agentBuilderWorkflows;
}
var LIST_AGENT_BUILDER_ACTIONS_ROUTE = createRoute({
method: "GET",
path: "/agent-builder",
responseType: "json",
responseSchema: listWorkflowsResponseSchema,
summary: "List agent-builder actions",
description: "Returns a list of all available agent-builder actions",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
logger.info("Listing agent builder actions");
return await LIST_WORKFLOWS_ROUTE.handler(ctx);
} catch (error) {
logger.error("Error listing agent builder actions", { error });
return handleError(error, "Error getting agent builder workflows");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE = createRoute({
method: "GET",
path: "/agent-builder/:actionId",
responseType: "json",
pathParamSchema: actionIdPathParams,
responseSchema: workflowInfoSchema,
summary: "Get action by ID",
description: "Returns details for a specific agent-builder action",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId } = ctx;
const logger = mastra.getLogger();
try {
const agentBuilderWorkflows = await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, {
message: `Invalid agent-builder action: ${actionId}. Valid actions are: ${Object.keys(agentBuilderWorkflows).join(", ")}`
});
}
logger.info("Getting agent builder action by ID", { actionId });
return await GET_WORKFLOW_BY_ID_ROUTE.handler({ ...ctx, workflowId: actionId });
} catch (error) {
logger.error("Error getting agent builder action by ID", { error, actionId });
return handleError(error, "Error getting agent builder action");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE = createRoute({
method: "GET",
path: "/agent-builder/:actionId/runs",
responseType: "json",
pathParamSchema: actionIdPathParams,
queryParamSchema: listWorkflowRunsQuerySchema,
responseSchema: workflowRunsResponseSchema,
summary: "List action runs",
description: "Returns a paginated list of execution runs for the specified action",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Listing agent builder action runs", { actionId });
return await LIST_WORKFLOW_RUNS_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error listing agent builder action runs", { error, actionId });
return handleError(error, "Error getting agent builder action runs");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE = createRoute({
method: "GET",
path: "/agent-builder/:actionId/runs/:runId",
responseType: "json",
pathParamSchema: actionRunPathParams,
queryParamSchema: workflowRunResultQuerySchema,
responseSchema: workflowRunResultSchema,
summary: "Get action run by ID",
description: "Returns details for a specific action run with metadata and processed execution state. Use the fields query parameter to reduce payload size.",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Getting agent builder action run by ID", { actionId, runId });
return await GET_WORKFLOW_RUN_BY_ID_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error getting agent builder action run", { error, actionId, runId });
return handleError(error, "Error getting agent builder action run");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/create-run",
responseType: "json",
pathParamSchema: actionIdPathParams,
queryParamSchema: optionalRunIdSchema,
responseSchema: createWorkflowRunResponseSchema,
summary: "Create action run",
description: "Creates a new action execution instance with an optional custom run ID",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Creating agent builder action run", { actionId, runId });
return await CREATE_WORKFLOW_RUN_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error creating agent builder action run", { error, actionId });
return handleError(error, "Error creating agent builder action run");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/stream",
responseType: "stream",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: streamAgentBuilderBodySchema,
responseSchema: streamResponseSchema,
summary: "Stream action execution",
description: "Executes an action and streams the results in real-time",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Streaming agent builder action", { actionId, runId });
return await STREAM_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error streaming agent builder action", { error, actionId });
return handleError(error, "Error streaming agent builder action");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var START_ASYNC_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/start-async",
responseType: "json",
pathParamSchema: actionIdPathParams,
queryParamSchema: optionalRunIdSchema,
bodySchema: startAsyncAgentBuilderBodySchema,
responseSchema: workflowExecutionResultSchema,
summary: "Start action asynchronously",
description: "Starts an action execution asynchronously without streaming results",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Starting agent builder action asynchronously", { actionId, runId });
return await START_ASYNC_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error starting agent builder action asynchronously", { error, actionId });
return handleError(error, "Error starting agent builder action");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var START_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/start",
responseType: "json",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: startAsyncAgentBuilderBodySchema,
responseSchema: workflowControlResponseSchema,
summary: "Start specific action run",
description: "Starts execution of a specific action run by ID",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Starting specific agent builder action run", { actionId, runId });
return await START_WORKFLOW_RUN_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error starting agent builder action run", { error, actionId });
return handleError(error, "Error starting agent builder action run");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/observe",
responseType: "stream",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
responseSchema: streamResponseSchema,
summary: "Observe action stream",
description: "Observes and streams updates from an already running action execution",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Observing agent builder action stream", { actionId, runId });
return await OBSERVE_STREAM_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error observing agent builder action stream", { error, actionId });
return handleError(error, "Error observing agent builder action stream");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/resume-async",
responseType: "json",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: resumeAgentBuilderBodySchema,
responseSchema: workflowExecutionResultSchema,
summary: "Resume action asynchronously",
description: "Resumes a suspended action execution asynchronously without streaming",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, step, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Resuming agent builder action asynchronously", { actionId, runId, step });
return await RESUME_ASYNC_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error resuming agent builder action asynchronously", { error, actionId });
return handleError(error, "Error resuming agent builder action");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/resume-no-wait",
responseType: "json",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: resumeAgentBuilderBodySchema,
responseSchema: createWorkflowRunResponseSchema,
summary: "Resume action without waiting",
description: "Resumes a suspended action execution without waiting (fire-and-forget) and returns immediately with the runId. The action continues executing in the background.",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, step, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Resuming agent builder action without waiting", { actionId, runId, step });
return await RESUME_NO_WAIT_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error resuming agent builder action without waiting", { error, actionId });
return handleError(error, "Error resuming agent builder action");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var RESUME_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/resume",
responseType: "json",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: resumeAgentBuilderBodySchema,
responseSchema: workflowControlResponseSchema,
summary: "Resume action",
description: "Resumes a suspended action execution from a specific step",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, step, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Resuming agent builder action", { actionId, runId, step });
return await RESUME_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error resuming agent builder action", { error, actionId });
return handleError(error, "Error resuming agent builder action");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/resume-stream",
responseType: "stream",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: resumeAgentBuilderBodySchema,
responseSchema: streamResponseSchema,
summary: "Resume action stream",
description: "Resumes a suspended action execution and continues streaming results",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, step, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Resuming agent builder action stream", { actionId, runId, step });
return await RESUME_STREAM_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error resuming agent builder action stream", { error, actionId });
return handleError(error, "Error resuming agent builder action stream");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/runs/:runId/cancel",
responseType: "json",
pathParamSchema: actionRunPathParams,
responseSchema: workflowControlResponseSchema,
summary: "Cancel action run",
description: "Cancels an in-progress action execution",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Cancelling agent builder action run", { actionId, runId });
return await CANCEL_WORKFLOW_RUN_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error cancelling agent builder action run", { error, actionId });
return handleError(error, "Error cancelling agent builder action run");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/stream-legacy",
responseType: "stream",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: streamLegacyAgentBuilderBodySchema,
responseSchema: streamResponseSchema,
summary: "[DEPRECATED] Stream agent-builder action with legacy format",
description: "Legacy endpoint for streaming agent-builder action execution. Use /agent-builder/:actionId/stream instead.",
tags: ["Agent Builder", "Legacy"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Streaming agent builder action (legacy)", { actionId, runId });
return await STREAM_LEGACY_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error streaming agent builder action (legacy)", { error, actionId });
return handleError(error, "Error streaming agent builder action");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/observe-stream-legacy",
responseType: "stream",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
responseSchema: streamResponseSchema,
summary: "[DEPRECATED] Observe agent-builder action stream with legacy format",
description: "Legacy endpoint for observing agent-builder action stream. Use /agent-builder/:actionId/observe instead.",
tags: ["Agent Builder", "Legacy"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Observing agent builder action stream (legacy)", { actionId, runId });
return await OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error observing agent builder action stream (legacy)", { error, actionId });
return handleError(error, "Error observing agent builder action stream");
} finally {
WorkflowRegistry.cleanup();
}
}
});
export { CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE, CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE, GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE, GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE, LIST_AGENT_BUILDER_ACTIONS_ROUTE, LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE, OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE, OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE, RESUME_AGENT_BUILDER_ACTION_ROUTE, RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE, RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE, RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE, START_AGENT_BUILDER_ACTION_RUN_ROUTE, START_ASYNC_AGENT_BUILDER_ACTION_ROUTE, STREAM_AGENT_BUILDER_ACTION_ROUTE, STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE, agent_builder_exports };
//# sourceMappingURL=chunk-NZBVBHKY.js.map
//# sourceMappingURL=chunk-NZBVBHKY.js.map
{"version":3,"sources":["../src/server/handlers/agent-builder.ts"],"names":[],"mappings":"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","file":"chunk-NZBVBHKY.js","sourcesContent":["import type { agentBuilderWorkflows as agentBuilderWorkflowsType } from '@mastra/agent-builder';\nimport { HTTPException } from '../http-exception';\nimport {\n actionIdPathParams,\n actionRunPathParams,\n createWorkflowRunResponseSchema,\n listWorkflowRunsQuerySchema,\n resumeAgentBuilderBodySchema,\n streamAgentBuilderBodySchema,\n startAsyncAgentBuilderBodySchema,\n workflowExecutionResultSchema,\n workflowControlResponseSchema,\n workflowRunsResponseSchema,\n workflowInfoSchema,\n listWorkflowsResponseSchema,\n streamLegacyAgentBuilderBodySchema,\n workflowRunResultSchema,\n workflowRunResultQuerySchema,\n} from '../schemas/agent-builder';\nimport { streamResponseSchema } from '../schemas/agents';\nimport { optionalRunIdSchema, runIdSchema } from '../schemas/common';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { WorkflowRegistry } from '../utils';\nimport { handleError } from './error';\nimport * as workflows from './workflows';\n\ntype AgentBuilderWorkflows = typeof agentBuilderWorkflowsType;\n\nlet agentBuilderWorkflowsPromise: Promise<AgentBuilderWorkflows> | undefined;\n\nasync function loadAgentBuilderWorkflows(): Promise<AgentBuilderWorkflows> {\n agentBuilderWorkflowsPromise ??= import('@mastra/agent-builder').then(mod => mod.agentBuilderWorkflows);\n return agentBuilderWorkflowsPromise;\n}\n\nasync function registerAgentBuilderWorkflows(\n mastra: Parameters<typeof WorkflowRegistry.registerTemporaryWorkflows>[1],\n) {\n const agentBuilderWorkflows = await loadAgentBuilderWorkflows();\n WorkflowRegistry.registerTemporaryWorkflows(agentBuilderWorkflows, mastra);\n return agentBuilderWorkflows;\n}\n\n// ============================================================================\n// Route Definitions (handlers call workflow route handlers with transformed parameters)\n// ============================================================================\n\nexport const LIST_AGENT_BUILDER_ACTIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-builder',\n responseType: 'json',\n responseSchema: listWorkflowsResponseSchema,\n summary: 'List agent-builder actions',\n description: 'Returns a list of all available agent-builder actions',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n logger.info('Listing agent builder actions');\n\n // Call workflow list handler\n return await workflows.LIST_WORKFLOWS_ROUTE.handler(ctx);\n } catch (error) {\n logger.error('Error listing agent builder actions', { error });\n return handleError(error, 'Error getting agent builder workflows');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-builder/:actionId',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n responseSchema: workflowInfoSchema,\n summary: 'Get action by ID',\n description: 'Returns details for a specific agent-builder action',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId } = ctx;\n const logger = mastra.getLogger();\n try {\n const agentBuilderWorkflows = await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, {\n message: `Invalid agent-builder action: ${actionId}. Valid actions are: ${Object.keys(agentBuilderWorkflows).join(', ')}`,\n });\n }\n\n logger.info('Getting agent builder action by ID', { actionId });\n\n return await workflows.GET_WORKFLOW_BY_ID_ROUTE.handler({ ...ctx, workflowId: actionId });\n } catch (error) {\n logger.error('Error getting agent builder action by ID', { error, actionId });\n return handleError(error, 'Error getting agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-builder/:actionId/runs',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: listWorkflowRunsQuerySchema,\n responseSchema: workflowRunsResponseSchema,\n summary: 'List action runs',\n description: 'Returns a paginated list of execution runs for the specified action',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Listing agent builder action runs', { actionId });\n\n return await workflows.LIST_WORKFLOW_RUNS_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error listing agent builder action runs', { error, actionId });\n return handleError(error, 'Error getting agent builder action runs');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-builder/:actionId/runs/:runId',\n responseType: 'json',\n pathParamSchema: actionRunPathParams,\n queryParamSchema: workflowRunResultQuerySchema,\n responseSchema: workflowRunResultSchema,\n summary: 'Get action run by ID',\n description:\n 'Returns details for a specific action run with metadata and processed execution state. Use the fields query parameter to reduce payload size.',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Getting agent builder action run by ID', { actionId, runId });\n\n return await workflows.GET_WORKFLOW_RUN_BY_ID_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error getting agent builder action run', { error, actionId, runId });\n return handleError(error, 'Error getting agent builder action run');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/create-run',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: optionalRunIdSchema,\n responseSchema: createWorkflowRunResponseSchema,\n summary: 'Create action run',\n description: 'Creates a new action execution instance with an optional custom run ID',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Creating agent builder action run', { actionId, runId });\n\n return await workflows.CREATE_WORKFLOW_RUN_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error creating agent builder action run', { error, actionId });\n return handleError(error, 'Error creating agent builder action run');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/stream',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: streamAgentBuilderBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Stream action execution',\n description: 'Executes an action and streams the results in real-time',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Streaming agent builder action', { actionId, runId });\n\n return await workflows.STREAM_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error streaming agent builder action', { error, actionId });\n return handleError(error, 'Error streaming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const START_ASYNC_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/start-async',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: optionalRunIdSchema,\n bodySchema: startAsyncAgentBuilderBodySchema,\n responseSchema: workflowExecutionResultSchema,\n summary: 'Start action asynchronously',\n description: 'Starts an action execution asynchronously without streaming results',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Starting agent builder action asynchronously', { actionId, runId });\n\n return await workflows.START_ASYNC_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error starting agent builder action asynchronously', { error, actionId });\n return handleError(error, 'Error starting agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const START_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/start',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: startAsyncAgentBuilderBodySchema,\n responseSchema: workflowControlResponseSchema,\n summary: 'Start specific action run',\n description: 'Starts execution of a specific action run by ID',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Starting specific agent builder action run', { actionId, runId });\n\n return await workflows.START_WORKFLOW_RUN_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error starting agent builder action run', { error, actionId });\n return handleError(error, 'Error starting agent builder action run');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/observe',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n responseSchema: streamResponseSchema,\n summary: 'Observe action stream',\n description: 'Observes and streams updates from an already running action execution',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Observing agent builder action stream', { actionId, runId });\n\n return await workflows.OBSERVE_STREAM_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error observing agent builder action stream', { error, actionId });\n return handleError(error, 'Error observing agent builder action stream');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/resume-async',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: resumeAgentBuilderBodySchema,\n responseSchema: workflowExecutionResultSchema,\n summary: 'Resume action asynchronously',\n description: 'Resumes a suspended action execution asynchronously without streaming',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, step, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Resuming agent builder action asynchronously', { actionId, runId, step });\n\n return await workflows.RESUME_ASYNC_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error resuming agent builder action asynchronously', { error, actionId });\n return handleError(error, 'Error resuming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\n/**\n * Fire-and-forget resume for agent-builder actions: returns immediately with the runId without\n * waiting for completion. Delegates to the workflows `resume-no-wait` route.\n *\n * TODO(v2): fold this behavior into the `resume-async` route in Mastra v2 and remove this route.\n * Kept separate in v1 to avoid breaking the existing `resume-async` response contract.\n */\nexport const RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/resume-no-wait',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: resumeAgentBuilderBodySchema,\n responseSchema: createWorkflowRunResponseSchema,\n summary: 'Resume action without waiting',\n description:\n 'Resumes a suspended action execution without waiting (fire-and-forget) and returns immediately with the runId. The action continues executing in the background.',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, step, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Resuming agent builder action without waiting', { actionId, runId, step });\n\n return await workflows.RESUME_NO_WAIT_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error resuming agent builder action without waiting', { error, actionId });\n return handleError(error, 'Error resuming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const RESUME_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/resume',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: resumeAgentBuilderBodySchema,\n responseSchema: workflowControlResponseSchema,\n summary: 'Resume action',\n description: 'Resumes a suspended action execution from a specific step',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, step, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Resuming agent builder action', { actionId, runId, step });\n\n return await workflows.RESUME_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error resuming agent builder action', { error, actionId });\n return handleError(error, 'Error resuming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/resume-stream',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: resumeAgentBuilderBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Resume action stream',\n description: 'Resumes a suspended action execution and continues streaming results',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, step, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Resuming agent builder action stream', { actionId, runId, step });\n\n return await workflows.RESUME_STREAM_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error resuming agent builder action stream', { error, actionId });\n return handleError(error, 'Error resuming agent builder action stream');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/runs/:runId/cancel',\n responseType: 'json',\n pathParamSchema: actionRunPathParams,\n responseSchema: workflowControlResponseSchema,\n summary: 'Cancel action run',\n description: 'Cancels an in-progress action execution',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Cancelling agent builder action run', { actionId, runId });\n\n return await workflows.CANCEL_WORKFLOW_RUN_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error cancelling agent builder action run', { error, actionId });\n return handleError(error, 'Error cancelling agent builder action run');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\n// Legacy routes (deprecated)\nexport const STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/stream-legacy',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: streamLegacyAgentBuilderBodySchema,\n responseSchema: streamResponseSchema,\n summary: '[DEPRECATED] Stream agent-builder action with legacy format',\n description:\n 'Legacy endpoint for streaming agent-builder action execution. Use /agent-builder/:actionId/stream instead.',\n tags: ['Agent Builder', 'Legacy'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Streaming agent builder action (legacy)', { actionId, runId });\n\n return await workflows.STREAM_LEGACY_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error streaming agent builder action (legacy)', { error, actionId });\n return handleError(error, 'Error streaming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/observe-stream-legacy',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n responseSchema: streamResponseSchema,\n summary: '[DEPRECATED] Observe agent-builder action stream with legacy format',\n description:\n 'Legacy endpoint for observing agent-builder action stream. Use /agent-builder/:actionId/observe instead.',\n tags: ['Agent Builder', 'Legacy'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Observing agent builder action stream (legacy)', { actionId, runId });\n\n return await workflows.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error observing agent builder action stream (legacy)', { error, actionId });\n return handleError(error, 'Error observing agent builder action stream');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n"]}
'use strict';
var chunkPTPMBE6M_cjs = require('./chunk-PTPMBE6M.cjs');
var chunkZQ4GVMYG_cjs = require('./chunk-ZQ4GVMYG.cjs');
var chunk42M6Y2OD_cjs = require('./chunk-42M6Y2OD.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var chunkYWUVDFQZ_cjs = require('./chunk-YWUVDFQZ.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
var stream = require('@mastra/core/stream');
var v4 = require('zod/v4');
// src/server/handlers/workflows.ts
var workflows_exports = {};
chunkO7I5CWRX_cjs.__export(workflows_exports, {
CANCEL_WORKFLOW_RUN_ROUTE: () => CANCEL_WORKFLOW_RUN_ROUTE,
CREATE_WORKFLOW_RUN_ROUTE: () => CREATE_WORKFLOW_RUN_ROUTE,
DELETE_WORKFLOW_RUN_BY_ID_ROUTE: () => DELETE_WORKFLOW_RUN_BY_ID_ROUTE,
EXECUTE_WORKFLOW_STEP_ROUTE: () => EXECUTE_WORKFLOW_STEP_ROUTE,
GET_WORKFLOW_BY_ID_ROUTE: () => GET_WORKFLOW_BY_ID_ROUTE,
GET_WORKFLOW_RUN_BY_ID_ROUTE: () => GET_WORKFLOW_RUN_BY_ID_ROUTE,
LIST_WORKFLOWS_ROUTE: () => LIST_WORKFLOWS_ROUTE,
LIST_WORKFLOW_RUNS_ROUTE: () => LIST_WORKFLOW_RUNS_ROUTE,
OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE: () => OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE,
OBSERVE_STREAM_WORKFLOW_ROUTE: () => OBSERVE_STREAM_WORKFLOW_ROUTE,
RECEIVE_WORKFLOW_EVENT_ROUTE: () => RECEIVE_WORKFLOW_EVENT_ROUTE,
RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE: () => RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,
RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE: () => RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,
RESTART_ASYNC_WORKFLOW_ROUTE: () => RESTART_ASYNC_WORKFLOW_ROUTE,
RESTART_WORKFLOW_ROUTE: () => RESTART_WORKFLOW_ROUTE,
RESUME_ASYNC_WORKFLOW_ROUTE: () => RESUME_ASYNC_WORKFLOW_ROUTE,
RESUME_NO_WAIT_WORKFLOW_ROUTE: () => RESUME_NO_WAIT_WORKFLOW_ROUTE,
RESUME_STREAM_WORKFLOW_ROUTE: () => RESUME_STREAM_WORKFLOW_ROUTE,
RESUME_WORKFLOW_ROUTE: () => RESUME_WORKFLOW_ROUTE,
START_ASYNC_WORKFLOW_ROUTE: () => START_ASYNC_WORKFLOW_ROUTE,
START_WORKFLOW_RUN_ROUTE: () => START_WORKFLOW_RUN_ROUTE,
STREAM_LEGACY_WORKFLOW_ROUTE: () => STREAM_LEGACY_WORKFLOW_ROUTE,
STREAM_WORKFLOW_ROUTE: () => STREAM_WORKFLOW_ROUTE,
TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE: () => TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,
TIME_TRAVEL_STREAM_WORKFLOW_ROUTE: () => TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,
TIME_TRAVEL_WORKFLOW_ROUTE: () => TIME_TRAVEL_WORKFLOW_ROUTE
});
async function listWorkflowsFromSystem({ mastra, workflowId }) {
const logger = mastra.getLogger();
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
let workflow;
workflow = chunkYWUVDFQZ_cjs.WorkflowRegistry.getWorkflow(workflowId);
if (!workflow) {
try {
workflow = mastra.getWorkflowById(workflowId);
} catch (error) {
logger.debug("Error getting workflow, searching agents for workflow", error);
}
}
if (!workflow) {
logger.debug("Workflow not found, searching agents for workflow", { workflowId });
const agents = mastra.listAgents();
if (Object.keys(agents || {}).length) {
for (const [_, agent] of Object.entries(agents)) {
try {
const workflows = await agent.listWorkflows();
if (workflows[workflowId]) {
workflow = workflows[workflowId];
break;
}
} catch (error) {
logger.debug("Error getting workflow from agent", error);
}
}
}
}
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
return { workflow };
}
var LIST_WORKFLOWS_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/workflows",
responseType: "json",
queryParamSchema: v4.z.object({
partial: v4.z.string().optional()
}),
responseSchema: chunkPTPMBE6M_cjs.listWorkflowsResponseSchema,
summary: "List all workflows",
description: "Returns a list of all available workflows in the system",
tags: ["Workflows"],
requiresAuth: true,
handler: (async ({ mastra, partial, requestContext }) => {
try {
const workflows = mastra.listWorkflows({ serialized: false });
const isPartial = partial === "true";
const _workflows = Object.entries(workflows).reduce((acc, [key, workflow]) => {
acc[key] = chunkYWUVDFQZ_cjs.getWorkflowInfo(workflow, isPartial);
return acc;
}, {});
const fgaProvider = mastra.getServer?.()?.fga;
const user = requestContext?.get("user");
if (fgaProvider) {
if (!user) {
return {};
}
const workflowList = Object.entries(_workflows).map(([id, w]) => ({ id, ...w }));
const accessible = await fgaProvider.filterAccessible(
user,
workflowList,
"workflow",
chunk42M6Y2OD_cjs.MastraFGAPermissions.WORKFLOWS_READ
);
const accessibleSet = new Set(accessible.map((w) => w.id));
for (const id of Object.keys(_workflows)) {
if (!accessibleSet.has(id)) {
delete _workflows[id];
}
}
}
return _workflows;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting workflows");
}
})
});
var GET_WORKFLOW_BY_ID_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/workflows/:workflowId",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
responseSchema: chunkPTPMBE6M_cjs.workflowInfoSchema,
summary: "Get workflow by ID",
description: "Returns details for a specific workflow",
tags: ["Workflows"],
requiresAuth: true,
handler: (async ({ mastra, workflowId }) => {
try {
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
return chunkYWUVDFQZ_cjs.getWorkflowInfo(workflow);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting workflow");
}
})
});
var LIST_WORKFLOW_RUNS_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/workflows/:workflowId/runs",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkPTPMBE6M_cjs.listWorkflowRunsQuerySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowRunsResponseSchema,
summary: "List workflow runs",
description: "Returns a paginated list of execution runs for the specified workflow",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({
mastra,
workflowId,
fromDate,
toDate,
page,
perPage,
limit,
offset,
resourceId,
status,
requestContext
}) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
let finalPage = page;
let finalPerPage = perPage;
if (finalPerPage === void 0 && limit !== void 0) {
finalPerPage = limit;
}
if (finalPage === void 0 && offset !== void 0 && finalPerPage !== void 0 && finalPerPage > 0) {
finalPage = Math.floor(offset / finalPerPage);
}
if (finalPerPage !== void 0 && (typeof finalPerPage !== "number" || !Number.isInteger(finalPerPage) || finalPerPage <= 0)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "perPage must be a positive integer" });
}
if (finalPage !== void 0 && (!Number.isInteger(finalPage) || finalPage < 0)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "page must be a non-negative integer" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const workflowRuns = await workflow.listWorkflowRuns({
fromDate: fromDate ? typeof fromDate === "string" ? new Date(fromDate) : fromDate : void 0,
toDate: toDate ? typeof toDate === "string" ? new Date(toDate) : toDate : void 0,
perPage: finalPerPage,
page: finalPage,
resourceId: effectiveResourceId,
status
}) || {
runs: [],
total: 0
};
return workflowRuns;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting workflow runs");
}
}
});
var GET_WORKFLOW_RUN_BY_ID_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/workflows/:workflowId/runs/:runId",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowRunPathParams,
queryParamSchema: chunkPTPMBE6M_cjs.workflowRunResultQuerySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowRunResultSchema,
summary: "Get workflow run by ID",
description: "Returns a workflow run with metadata and processed execution state. Use the fields query parameter to reduce payload size by requesting only specific fields (e.g., ?fields=status,result,metadata)",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, fields, withNestedWorkflows, requestContext }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Run ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const fieldList = fields ? fields.split(",").map((f) => f.trim()) : void 0;
const run = await workflow.getWorkflowRunById(runId, {
withNestedWorkflows: withNestedWorkflows !== "false",
// Default to true unless explicitly 'false'
fields: fieldList
});
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
return run;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting workflow run");
}
}
});
var DELETE_WORKFLOW_RUN_BY_ID_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "DELETE",
path: "/workflows/:workflowId/runs/:runId",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowRunPathParams,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Delete workflow run by ID",
description: "Deletes a specific workflow run by ID",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Run ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
await workflow.deleteWorkflowRunById(runId);
return { message: "Workflow run deleted" };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error deleting workflow run");
}
}
});
var CREATE_WORKFLOW_RUN_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/create-run",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.optionalRunIdSchema,
bodySchema: chunkPTPMBE6M_cjs.createWorkflowRunBodySchema,
responseSchema: chunkPTPMBE6M_cjs.createWorkflowRunResponseSchema,
summary: "Create workflow run",
description: "Creates a new workflow execution instance with an optional custom run ID",
tags: ["Workflows"],
requiresAuth: true,
// Creating a run is part of the execute flow (Studio/UI calls this before
// starting/streaming a workflow), so allow either permission. `write` is kept
// for back-compat with roles that already grant it.
requiresPermission: ["workflows:write", "workflows:execute"],
handler: async ({ mastra, workflowId, runId, resourceId, disableScorers, requestContext }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.createRun({ runId, resourceId: effectiveResourceId, disableScorers });
return { runId: run.runId };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating workflow run");
}
}
});
var STREAM_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/stream",
responseType: "stream",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.streamWorkflowBodySchema,
summary: "Stream workflow execution",
description: "Executes a workflow and streams the results in real-time",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, resourceId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to stream workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const serverCache = mastra.getServerCache();
const run = await workflow.createRun({ runId, resourceId: effectiveResourceId });
const result = run.stream({ ...params, requestContext });
if (serverCache) {
const { transform } = stream.createCachingTransformStream({
cache: serverCache,
cacheKey: runId
});
return result.fullStream.pipeThrough(transform);
}
return result.fullStream;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error streaming workflow");
}
}
});
var RESUME_STREAM_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/resume-stream",
responseType: "stream",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.resumeBodySchema,
responseSchema: chunkZQ4GVMYG_cjs.streamResponseSchema,
summary: "Resume workflow stream",
description: "Resumes a suspended workflow execution and continues streaming results",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const serverCache = mastra.getServerCache();
const resumeResult = _run.resumeStream({ ...params, requestContext });
if (serverCache) {
const { transform } = stream.createCachingTransformStream({
cache: serverCache,
cacheKey: runId
});
return resumeResult.fullStream.pipeThrough(transform);
}
return resumeResult.fullStream;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error resuming workflow");
}
}
});
var START_ASYNC_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/start-async",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.optionalRunIdSchema,
bodySchema: chunkPTPMBE6M_cjs.startAsyncWorkflowBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowExecutionResultSchema,
summary: "Start workflow asynchronously",
description: "Starts a workflow execution asynchronously without streaming results",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, resourceId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const _run = await workflow.createRun({ runId, resourceId: effectiveResourceId });
const result = await _run.start({ ...params, requestContext });
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error starting async workflow");
}
}
});
var START_WORKFLOW_RUN_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/start",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.startAsyncWorkflowBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Start specific workflow run",
description: "Starts execution of a specific workflow run by ID",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to start run" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
void _run.start({
...params,
requestContext
});
return { message: "Workflow run started" };
} catch (e) {
return chunkZ7LCIYK7_cjs.handleError(e, "Error starting workflow run");
}
}
});
var OBSERVE_STREAM_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/observe",
responseType: "stream",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkPTPMBE6M_cjs.observeWorkflowQuerySchema,
responseSchema: chunkZQ4GVMYG_cjs.streamResponseSchema,
summary: "Observe workflow stream",
description: "Observes and streams updates from an already running workflow execution. Supports position-based resume with offset for efficient reconnection.",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, offset, requestContext }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to observe workflow stream" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const serverCache = mastra.getServerCache();
if (!serverCache) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Server cache not found" });
}
const startIndex = offset ?? 0;
const cachedRunChunks = await serverCache.listFromTo(runId, startIndex);
const liveStream = _run.observeStream();
return stream.createReplayStream({
history: cachedRunChunks,
liveSource: liveStream
});
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error observing workflow stream");
}
}
});
var RESUME_ASYNC_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/resume-async",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.resumeBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowExecutionResultSchema,
summary: "Resume workflow asynchronously",
description: "Resumes a suspended workflow execution asynchronously without streaming",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const result = await _run.resume({ ...params, requestContext });
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error resuming workflow step");
}
}
});
var RESUME_NO_WAIT_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/resume-no-wait",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.resumeBodySchema,
responseSchema: chunkPTPMBE6M_cjs.createWorkflowRunResponseSchema,
summary: "Resume workflow without waiting",
description: "Resumes a suspended workflow execution without waiting (fire-and-forget) and returns immediately with the runId. The workflow continues executing in the background.",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const result = await _run.resumeAsync({ ...params, requestContext });
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error resuming workflow step");
}
}
});
var RESUME_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/resume",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.resumeBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Resume workflow",
description: "Resumes a suspended workflow execution from a specific step",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
void _run.resume({ ...params, requestContext });
return { message: "Workflow run resumed" };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error resuming workflow");
}
}
});
var RESTART_ASYNC_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/restart-async",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.restartBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowExecutionResultSchema,
summary: "Restart workflow asynchronously",
description: "Restarts an active workflow execution asynchronously",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to restart workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const result = await _run.restart({ ...params, requestContext });
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error restarting workflow");
}
}
});
var RESTART_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/restart",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.restartBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Restart workflow",
description: "Restarts an active workflow execution",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to restart workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
void _run.restart({ ...params, requestContext });
return { message: "Workflow run restarted" };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error restarting workflow");
}
}
});
var RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/restart-all-active-workflow-runs-async",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Restart all active workflow runs asynchronously",
description: "Restarts all active workflow runs asynchronously",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId }) => {
try {
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
await workflow.restartAllActiveWorkflowRuns();
return { message: "All active workflow runs restarted" };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error restarting workflow");
}
}
});
var RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/restart-all-active-workflow-runs",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Restart all active workflow runs",
description: "Restarts all active workflow runs",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId }) => {
try {
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
void workflow.restartAllActiveWorkflowRuns();
return { message: "All active workflow runs restarted" };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error restarting workflow");
}
}
});
var TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/time-travel-async",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.timeTravelBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowExecutionResultSchema,
summary: "Time travel workflow asynchronously",
description: "Time travels a workflow run asynchronously without streaming",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to time travel workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const result = await _run.timeTravel({ ...params, requestContext });
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error time traveling workflow");
}
}
});
var TIME_TRAVEL_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/time-travel",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.timeTravelBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Time travel workflow",
description: "Time travels a workflow run, starting from a specific step",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to time travel workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
void _run.timeTravel({ ...params, requestContext });
return { message: "Workflow run time travel started" };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error time traveling workflow");
}
}
});
var TIME_TRAVEL_STREAM_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/time-travel-stream",
responseType: "stream",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.timeTravelBodySchema,
summary: "Time travel workflow stream",
description: "Time travels a workflow run, starting from a specific step, and streams the results in real-time",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to time travel workflow stream" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const existingRun = await workflow.getWorkflowRunById(runId);
if (!existingRun) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(existingRun, effectiveResourceId);
const serverCache = mastra.getServerCache();
const run = await workflow.createRun({ runId, resourceId: existingRun.resourceId });
const result = run.timeTravelStream({ ...params, requestContext });
if (serverCache) {
const { transform } = stream.createCachingTransformStream({
cache: serverCache,
cacheKey: runId
});
return result.fullStream.pipeThrough(transform);
}
return result.fullStream;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error time traveling workflow stream");
}
}
});
var CANCEL_WORKFLOW_RUN_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/runs/:runId/cancel",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowRunPathParams,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Cancel workflow run",
description: "Cancels an in-progress workflow execution",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to cancel workflow run" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
await _run.cancel();
return { message: "Workflow run cancelled" };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error canceling workflow run");
}
}
});
var STREAM_LEGACY_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/stream-legacy",
responseType: "stream",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.streamWorkflowBodySchema,
responseSchema: chunkZQ4GVMYG_cjs.streamResponseSchema,
summary: "[DEPRECATED] Stream workflow with legacy format",
description: "Legacy endpoint for streaming workflow execution. Use /workflows/:workflowId/stream instead.",
tags: ["Workflows", "Legacy"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, resourceId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const serverCache = mastra.getServerCache();
const run = await workflow.createRun({ runId, resourceId: effectiveResourceId });
const result = run.streamLegacy({
...params,
requestContext,
onChunk: async (chunk) => {
if (serverCache) {
const cacheKey = runId;
await serverCache.listPush(cacheKey, chunk);
}
}
});
return result.stream;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error executing workflow");
}
}
});
var OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/observe-stream-legacy",
responseType: "stream",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
responseSchema: chunkZQ4GVMYG_cjs.streamResponseSchema,
summary: "[DEPRECATED] Observe workflow stream with legacy format",
description: "Legacy endpoint for observing workflow stream. Use /workflows/:workflowId/observe instead.",
tags: ["Workflows", "Legacy"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to observe workflow stream" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const serverCache = mastra.getServerCache();
if (!serverCache) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Server cache not found" });
}
const cachedRunChunks = await serverCache.listFromTo(runId, 0);
const result = _run.observeStreamLegacy();
if (!result.stream) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to create observe stream" });
}
return stream.createReplayStream({
history: cachedRunChunks,
liveSource: result.stream
});
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error observing workflow stream");
}
}
});
var stepExecutionBodySchema = v4.z.object({
stepId: v4.z.string(),
executionPath: v4.z.array(v4.z.number().int().nonnegative()),
stepResults: v4.z.record(v4.z.string(), v4.z.any()),
state: v4.z.record(v4.z.string(), v4.z.any()),
requestContext: v4.z.record(v4.z.string(), v4.z.any()),
input: v4.z.any().optional(),
resumeData: v4.z.any().optional(),
retryCount: v4.z.number().int().nonnegative().optional(),
foreachIdx: v4.z.number().int().nonnegative().optional(),
format: v4.z.enum(["legacy", "vnext"]).optional(),
perStep: v4.z.boolean().optional(),
validateInputs: v4.z.boolean().optional()
});
var strategyByMastra = /* @__PURE__ */ new WeakMap();
async function getStepStrategy(mastra) {
let cached = strategyByMastra.get(mastra);
if (!cached) {
const { InProcessStrategy } = await import('@mastra/core/worker');
cached = new InProcessStrategy({ mastra });
strategyByMastra.set(mastra, cached);
}
return cached;
}
var stepExecutionResponseSchema = v4.z.any();
var EXECUTE_WORKFLOW_STEP_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/runs/:runId/steps/execute",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowRunPathParams,
bodySchema: stepExecutionBodySchema,
responseSchema: stepExecutionResponseSchema,
summary: "Execute a workflow step",
description: "Internal endpoint used by standalone OrchestrationWorker instances to execute workflow steps remotely via HttpRemoteStrategy.",
tags: ["Workflows", "Worker"],
requiresAuth: true,
handler: (async ({ mastra, workflowId, runId, ...body }) => {
try {
const strategy = await getStepStrategy(mastra);
const result = await strategy.executeStep({
workflowId,
runId,
stepId: body.stepId,
executionPath: body.executionPath,
stepResults: body.stepResults,
state: body.state,
requestContext: body.requestContext,
input: body.input,
resumeData: body.resumeData,
retryCount: body.retryCount,
foreachIdx: body.foreachIdx,
format: body.format,
perStep: body.perStep,
validateInputs: body.validateInputs
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error executing workflow step");
}
})
});
var workflowEventSchema = v4.z.object({
id: v4.z.string(),
type: v4.z.string(),
data: v4.z.unknown(),
runId: v4.z.string(),
createdAt: v4.z.string(),
index: v4.z.number().optional(),
deliveryAttempt: v4.z.number().optional()
});
var receiveWorkflowEventBodySchema = v4.z.object({
event: workflowEventSchema.passthrough()
});
var receiveWorkflowEventResponseSchema = v4.z.object({
ok: v4.z.boolean(),
retry: v4.z.boolean().optional()
});
var RECEIVE_WORKFLOW_EVENT_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/events",
responseType: "json",
bodySchema: receiveWorkflowEventBodySchema,
responseSchema: receiveWorkflowEventResponseSchema,
summary: "Receive a workflow event from a push-mode broker",
description: "Push-mode entry point for workflow events. Brokers (GCP Pub/Sub push, SNS, EventBridge) POST each event here; Mastra processes it through the same pipeline as pull-mode workers.",
tags: ["Workflows", "Worker"],
requiresAuth: true,
// Broker push endpoint: it advances runtime state rather than editing
// definitions, so `workflows:execute` is the more accurate fit. `write` is
// kept for back-compat with service principals that already grant it.
requiresPermission: ["workflows:write", "workflows:execute"],
handler: (async ({ mastra, event }) => {
try {
const rawCreatedAt = event.createdAt;
const createdAt = rawCreatedAt instanceof Date ? rawCreatedAt : new Date(rawCreatedAt);
if (Number.isNaN(createdAt.getTime())) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Invalid createdAt" });
}
return await mastra.handleWorkflowEvent({ ...event, createdAt });
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error receiving workflow event");
}
})
});
exports.CANCEL_WORKFLOW_RUN_ROUTE = CANCEL_WORKFLOW_RUN_ROUTE;
exports.CREATE_WORKFLOW_RUN_ROUTE = CREATE_WORKFLOW_RUN_ROUTE;
exports.DELETE_WORKFLOW_RUN_BY_ID_ROUTE = DELETE_WORKFLOW_RUN_BY_ID_ROUTE;
exports.EXECUTE_WORKFLOW_STEP_ROUTE = EXECUTE_WORKFLOW_STEP_ROUTE;
exports.GET_WORKFLOW_BY_ID_ROUTE = GET_WORKFLOW_BY_ID_ROUTE;
exports.GET_WORKFLOW_RUN_BY_ID_ROUTE = GET_WORKFLOW_RUN_BY_ID_ROUTE;
exports.LIST_WORKFLOWS_ROUTE = LIST_WORKFLOWS_ROUTE;
exports.LIST_WORKFLOW_RUNS_ROUTE = LIST_WORKFLOW_RUNS_ROUTE;
exports.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE = OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE;
exports.OBSERVE_STREAM_WORKFLOW_ROUTE = OBSERVE_STREAM_WORKFLOW_ROUTE;
exports.RECEIVE_WORKFLOW_EVENT_ROUTE = RECEIVE_WORKFLOW_EVENT_ROUTE;
exports.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE = RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE;
exports.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE = RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE;
exports.RESTART_ASYNC_WORKFLOW_ROUTE = RESTART_ASYNC_WORKFLOW_ROUTE;
exports.RESTART_WORKFLOW_ROUTE = RESTART_WORKFLOW_ROUTE;
exports.RESUME_ASYNC_WORKFLOW_ROUTE = RESUME_ASYNC_WORKFLOW_ROUTE;
exports.RESUME_NO_WAIT_WORKFLOW_ROUTE = RESUME_NO_WAIT_WORKFLOW_ROUTE;
exports.RESUME_STREAM_WORKFLOW_ROUTE = RESUME_STREAM_WORKFLOW_ROUTE;
exports.RESUME_WORKFLOW_ROUTE = RESUME_WORKFLOW_ROUTE;
exports.START_ASYNC_WORKFLOW_ROUTE = START_ASYNC_WORKFLOW_ROUTE;
exports.START_WORKFLOW_RUN_ROUTE = START_WORKFLOW_RUN_ROUTE;
exports.STREAM_LEGACY_WORKFLOW_ROUTE = STREAM_LEGACY_WORKFLOW_ROUTE;
exports.STREAM_WORKFLOW_ROUTE = STREAM_WORKFLOW_ROUTE;
exports.TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE = TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE;
exports.TIME_TRAVEL_STREAM_WORKFLOW_ROUTE = TIME_TRAVEL_STREAM_WORKFLOW_ROUTE;
exports.TIME_TRAVEL_WORKFLOW_ROUTE = TIME_TRAVEL_WORKFLOW_ROUTE;
exports.workflows_exports = workflows_exports;
//# sourceMappingURL=chunk-OE5GVCW4.cjs.map
//# sourceMappingURL=chunk-OE5GVCW4.cjs.map

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 chunkKIDHIRVO_cjs = require('./chunk-KIDHIRVO.cjs');
var chunkSCY53JIH_cjs = require('./chunk-SCY53JIH.cjs');
var chunk42M6Y2OD_cjs = require('./chunk-42M6Y2OD.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunk42M6Y2OD_cjs.getEffectiveThreadId(requestContext, void 0);
const effectiveResourceId = chunk42M6Y2OD_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 chunk42M6Y2OD_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 chunk42M6Y2OD_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 chunkSCY53JIH_cjs.getAgentFromSystem({ mastra, agentId });
}
async function resolveAgentMemoryStore({
agent,
requestContext,
errorMessage
}) {
const agentMemoryStore = await chunkKIDHIRVO_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 chunkKIDHIRVO_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 chunkKIDHIRVO_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 chunkKIDHIRVO_cjs.findResponseTurnRecord({
agent: resolvedAgent,
responseId: body.previous_response_id,
requestContext
});
if (!previousResponseTurnRecord) {
const owningResponseTurnRecord = await chunkKIDHIRVO_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 chunkKIDHIRVO_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 = chunkDN2NUSL2_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: chunk42M6Y2OD_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 = chunkDN2NUSL2_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: chunk42M6Y2OD_cjs.MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, responseId }) => {
try {
const responseTurnRecord = await chunkKIDHIRVO_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 = chunkDN2NUSL2_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: chunk42M6Y2OD_cjs.MastraFGAPermissions.AGENTS_DELETE,
handler: async ({ mastra, requestContext, responseId }) => {
try {
const responseTurnRecord = await chunkKIDHIRVO_cjs.findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });
if (!responseTurnRecord) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored response ${responseId} was not found` });
}
await chunkKIDHIRVO_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-OJB6MLRD.cjs.map
//# sourceMappingURL=chunk-OJB6MLRD.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-OJB6MLRD.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 { providerSchema } from './chunk-R3KUPFCO.js';
import { z } from 'zod/v4';
var agentFeaturesSchema = z.object({
tools: z.boolean().optional(),
agents: z.boolean().optional(),
workflows: z.boolean().optional(),
scorers: z.boolean().optional(),
skills: z.boolean().optional(),
memory: z.boolean().optional(),
variables: z.boolean().optional(),
favorites: z.boolean().optional(),
avatarUpload: z.boolean().optional(),
browser: z.boolean().optional(),
/**
* Whether the model picker is visible in the Agent Builder.
* Omitted ⇒ picker visible (default-on). Explicit `false` ⇒ picker hidden
* (locked mode); `models.default` is required and applied.
*/
model: z.boolean().optional()
});
var knownProviderEntrySchema = z.object({
provider: z.string().min(1),
modelId: z.string().min(1).optional()
}).strict();
var customProviderEntrySchema = z.object({
kind: z.literal("custom"),
provider: z.string().min(1),
modelId: z.string().min(1).optional()
}).strict();
var knownDefaultModelEntrySchema = z.object({
provider: z.string().min(1),
modelId: z.string().min(1)
}).strict();
var customDefaultModelEntrySchema = z.object({
kind: z.literal("custom"),
provider: z.string().min(1),
modelId: z.string().min(1)
}).strict();
var providerModelEntrySchema = z.union([customProviderEntrySchema, knownProviderEntrySchema]);
var defaultModelEntrySchema = z.union([customDefaultModelEntrySchema, knownDefaultModelEntrySchema]);
var agentModelsSchema = z.object({
allowed: z.array(providerModelEntrySchema).optional(),
default: defaultModelEntrySchema.optional()
});
var pickerAllowlistSchema = z.object({
allowed: z.array(z.string()).optional()
}).strict();
var agentConfigurationSchema = z.object({
models: agentModelsSchema.optional(),
tools: pickerAllowlistSchema.optional(),
agents: pickerAllowlistSchema.optional(),
workflows: pickerAllowlistSchema.optional()
}).catchall(z.unknown());
var builderPickerSchema = z.object({
visibleTools: z.array(z.string()).nullable(),
visibleAgents: z.array(z.string()).nullable(),
visibleWorkflows: z.array(z.string()).nullable()
});
var builderModelPolicySchema = z.object({
active: z.boolean(),
pickerVisible: z.boolean().optional(),
allowed: z.array(providerModelEntrySchema).optional(),
default: defaultModelEntrySchema.optional()
});
var builderSettingsResponseSchema = z.object({
enabled: z.boolean(),
features: z.object({
agent: agentFeaturesSchema.optional()
}).optional(),
configuration: z.object({
agent: agentConfigurationSchema.optional()
}).optional(),
modelPolicy: builderModelPolicySchema.optional(),
/**
* Resolved picker visibility for tools/agents/workflows. Always present when
* the builder is enabled. Omitted when the builder is disabled.
*/
picker: builderPickerSchema.optional(),
/**
* Non-fatal warnings produced by `EditorAgentBuilder`'s constructor-time
* validation (e.g. allowlist entries with unknown provider strings, or
* picker allowlist entries that don't match a registered ID). UI surfaces
* these as a banner in the Builder admin view.
*/
modelPolicyWarnings: z.array(z.string()).optional()
});
var infrastructureStatusResponseSchema = z.object({
channels: z.object({
providers: z.array(
z.object({
id: z.string(),
name: z.string(),
isConfigured: z.boolean(),
routeCount: z.number()
})
)
}),
browser: z.object({
type: z.string().nullable(),
provider: z.string().nullable(),
env: z.string().nullable(),
registered: z.boolean(),
availableProviders: z.array(z.string()),
config: z.array(z.object({ key: z.string(), value: z.string() }))
}),
workspace: z.object({
type: z.string().nullable(),
workspaceId: z.string().nullable(),
name: z.string().nullable(),
source: z.string().nullable(),
registered: z.boolean(),
hasFilesystem: z.boolean(),
hasSandbox: z.boolean(),
filesystemProvider: z.string().nullable(),
sandboxProvider: z.string().nullable(),
config: z.array(z.object({ key: z.string(), value: z.string() }))
}),
registries: z.object({
skillsSh: z.object({
enabled: z.boolean()
})
})
});
var builderAvailableModelsResponseSchema = z.object({
providers: z.array(providerSchema)
});
export { agentConfigurationSchema, agentFeaturesSchema, agentModelsSchema, builderAvailableModelsResponseSchema, builderModelPolicySchema, builderPickerSchema, builderSettingsResponseSchema, defaultModelEntrySchema, infrastructureStatusResponseSchema, pickerAllowlistSchema, providerModelEntrySchema };
//# sourceMappingURL=chunk-PBNENTGS.js.map
//# sourceMappingURL=chunk-PBNENTGS.js.map
{"version":3,"sources":["../src/server/schemas/editor-builder.ts"],"names":[],"mappings":"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","file":"chunk-PBNENTGS.js","sourcesContent":["import { z } from 'zod/v4';\nimport { providerSchema } from './agents';\n\n/**\n * Agent feature flags for the builder.\n *\n * Wire format: each key is an optional boolean. The server normalizes admin\n * input via `resolveAgentFeatures` (default-on semantics): any omitted key\n * resolves to `true`; admins opt out by setting a key to `false`. The\n * `GET /editor/builder/settings` response always carries a fully-resolved\n * object — clients should still use strict `=== true` checks.\n *\n * Special cases:\n * - `browser`: only resolves to `true` when `configuration.agent.browser` is\n * provided. Omitted with no config ⇒ silently `false` (no warning).\n * Explicit `true` with no config ⇒ warns and downgrades to `false`.\n */\nexport const agentFeaturesSchema = z.object({\n tools: z.boolean().optional(),\n agents: z.boolean().optional(),\n workflows: z.boolean().optional(),\n scorers: z.boolean().optional(),\n skills: z.boolean().optional(),\n memory: z.boolean().optional(),\n variables: z.boolean().optional(),\n favorites: z.boolean().optional(),\n avatarUpload: z.boolean().optional(),\n browser: z.boolean().optional(),\n /**\n * Whether the model picker is visible in the Agent Builder.\n * Omitted ⇒ picker visible (default-on). Explicit `false` ⇒ picker hidden\n * (locked mode); `models.default` is required and applied.\n */\n model: z.boolean().optional(),\n});\n\n/**\n * Allowlist + default-model entries for {@link agentModelsSchema}.\n *\n * Four standalone schemas (known × custom × entry × default) joined with `z.union`.\n * The schema does NOT validate `provider` against the runtime registry — invalid strings\n * surface as warnings during Phase 4 config validation.\n *\n * NOTE: `z.union(...).extend()` does not exist; that's why these are separate schemas.\n */\n// All four schemas are `.strict()` so typos like `modelID` or `Provider` are\n// rejected up-front instead of silently widening the policy.\nconst knownProviderEntrySchema = z\n .object({\n provider: z.string().min(1),\n modelId: z.string().min(1).optional(),\n })\n .strict();\n\nconst customProviderEntrySchema = z\n .object({\n kind: z.literal('custom'),\n provider: z.string().min(1),\n modelId: z.string().min(1).optional(),\n })\n .strict();\n\nconst knownDefaultModelEntrySchema = z\n .object({\n provider: z.string().min(1),\n modelId: z.string().min(1),\n })\n .strict();\n\nconst customDefaultModelEntrySchema = z\n .object({\n kind: z.literal('custom'),\n provider: z.string().min(1),\n modelId: z.string().min(1),\n })\n .strict();\n\n// Custom-tagged variants must come first so the discriminator (`kind: 'custom'`)\n// wins over the more permissive known-provider schemas. Otherwise the union\n// silently drops the `kind` field on matching inputs.\nexport const providerModelEntrySchema = z.union([customProviderEntrySchema, knownProviderEntrySchema]);\nexport const defaultModelEntrySchema = z.union([customDefaultModelEntrySchema, knownDefaultModelEntrySchema]);\n\n/**\n * Admin-controlled model allowlist + default for the Agent Builder.\n */\nexport const agentModelsSchema = z.object({\n allowed: z.array(providerModelEntrySchema).optional(),\n default: defaultModelEntrySchema.optional(),\n});\n\n/**\n * Admin-controlled allowlist for one of the builder pickers (tools/agents/workflows).\n *\n * Semantics:\n * - omitted ⇒ unrestricted (all registered IDs shown in the picker).\n * - `allowed: []` ⇒ empty picker (explicit lockdown).\n * - `allowed: [...ids]` ⇒ only the listed IDs are shown.\n */\nexport const pickerAllowlistSchema = z\n .object({\n allowed: z.array(z.string()).optional(),\n })\n .strict();\n\n/**\n * Agent configuration (pinned, non-overridable settings).\n *\n * Known structured field: `models` (Phase 1 contracts).\n * Other keys flow through unchanged for forward compatibility.\n */\nexport const agentConfigurationSchema = z\n .object({\n models: agentModelsSchema.optional(),\n tools: pickerAllowlistSchema.optional(),\n agents: pickerAllowlistSchema.optional(),\n workflows: pickerAllowlistSchema.optional(),\n })\n .catchall(z.unknown());\n\n/**\n * Resolved picker visibility returned in `BuilderSettingsResponse`.\n *\n * Per kind:\n * - `null` ⇒ unrestricted (show all registered entries).\n * - `string[]` ⇒ explicit allowlist (may be empty to show none).\n */\nexport const builderPickerSchema = z.object({\n visibleTools: z.array(z.string()).nullable(),\n visibleAgents: z.array(z.string()).nullable(),\n visibleWorkflows: z.array(z.string()).nullable(),\n});\n\n/**\n * Derived `BuilderModelPolicy`. Server-owned shape so the playground hook is a\n * thin selector and the UI never re-derives policy from `features` / `configuration`.\n *\n * Mirrors `BuilderModelPolicy` from `@mastra/core/agent-builder/ee`:\n * - `active: false` ⇒ all other fields ignored.\n * - `active: true` + `pickerVisible: false` (locked) ⇒ `default` set in valid configs.\n * - `allowed`/`default` are passed through verbatim when present.\n */\nexport const builderModelPolicySchema = z.object({\n active: z.boolean(),\n pickerVisible: z.boolean().optional(),\n allowed: z.array(providerModelEntrySchema).optional(),\n default: defaultModelEntrySchema.optional(),\n});\n\n/**\n * Response schema for GET /editor/builder/settings\n */\nexport const builderSettingsResponseSchema = z.object({\n enabled: z.boolean(),\n features: z\n .object({\n agent: agentFeaturesSchema.optional(),\n })\n .optional(),\n configuration: z\n .object({\n agent: agentConfigurationSchema.optional(),\n })\n .optional(),\n modelPolicy: builderModelPolicySchema.optional(),\n /**\n * Resolved picker visibility for tools/agents/workflows. Always present when\n * the builder is enabled. Omitted when the builder is disabled.\n */\n picker: builderPickerSchema.optional(),\n /**\n * Non-fatal warnings produced by `EditorAgentBuilder`'s constructor-time\n * validation (e.g. allowlist entries with unknown provider strings, or\n * picker allowlist entries that don't match a registered ID). UI surfaces\n * these as a banner in the Builder admin view.\n */\n modelPolicyWarnings: z.array(z.string()).optional(),\n});\n\n/**\n * Infrastructure status response for Agent Builder admin diagnostics.\n *\n * Reports the Agent Builder-specific primitive configuration plus lightweight\n * runtime resolution state where useful.\n */\nexport const infrastructureStatusResponseSchema = z.object({\n channels: z.object({\n providers: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n isConfigured: z.boolean(),\n routeCount: z.number(),\n }),\n ),\n }),\n browser: z.object({\n type: z.string().nullable(),\n provider: z.string().nullable(),\n env: z.string().nullable(),\n registered: z.boolean(),\n availableProviders: z.array(z.string()),\n config: z.array(z.object({ key: z.string(), value: z.string() })),\n }),\n workspace: z.object({\n type: z.string().nullable(),\n workspaceId: z.string().nullable(),\n name: z.string().nullable(),\n source: z.string().nullable(),\n registered: z.boolean(),\n hasFilesystem: z.boolean(),\n hasSandbox: z.boolean(),\n filesystemProvider: z.string().nullable(),\n sandboxProvider: z.string().nullable(),\n config: z.array(z.object({ key: z.string(), value: z.string() })),\n }),\n registries: z.object({\n skillsSh: z.object({\n enabled: z.boolean(),\n }),\n }),\n});\n\n/**\n * Response schema for GET /editor/builder/models/available.\n *\n * Same provider shape as GET /agents/providers, but each provider's `models`\n * list is already filtered by the active builder model policy (server applies\n * the EE allowlist). Providers with no allowed models are omitted entirely so\n * the Studio model picker can render the response verbatim.\n */\nexport const builderAvailableModelsResponseSchema = z.object({\n providers: z.array(providerSchema),\n});\n\nexport type BuilderAvailableModelsResponse = z.infer<typeof builderAvailableModelsResponseSchema>;\n\nexport type InfrastructureStatus = z.infer<typeof infrastructureStatusResponseSchema>;\n\nexport type AgentFeatures = z.infer<typeof agentFeaturesSchema>;\nexport type AgentConfiguration = z.infer<typeof agentConfigurationSchema>;\nexport type BuilderSettingsResponse = z.infer<typeof builderSettingsResponseSchema>;\nexport type ProviderModelEntrySchema = z.infer<typeof providerModelEntrySchema>;\nexport type DefaultModelEntrySchema = z.infer<typeof defaultModelEntrySchema>;\nexport type AgentModelsSchema = z.infer<typeof agentModelsSchema>;\nexport type BuilderModelPolicySchema = z.infer<typeof builderModelPolicySchema>;\nexport type PickerAllowlistSchema = z.infer<typeof pickerAllowlistSchema>;\nexport type BuilderPickerSchema = z.infer<typeof builderPickerSchema>;\n"]}
'use strict';
var chunkHTBC6CVX_cjs = require('./chunk-HTBC6CVX.cjs');
var chunkF3HP5HM6_cjs = require('./chunk-F3HP5HM6.cjs');
var chunkKIDHIRVO_cjs = require('./chunk-KIDHIRVO.cjs');
var chunkSCY53JIH_cjs = require('./chunk-SCY53JIH.cjs');
var chunk42M6Y2OD_cjs = require('./chunk-42M6Y2OD.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/v1/conversations",
responseType: "json",
bodySchema: chunkHTBC6CVX_cjs.createConversationBodySchema,
responseSchema: chunkHTBC6CVX_cjs.conversationObjectSchema,
summary: "Create a conversation",
description: "Creates a new thread-backed conversation for agent-backed Responses API requests",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunk42M6Y2OD_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 chunkSCY53JIH_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 chunkKIDHIRVO_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 = chunk42M6Y2OD_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/v1/conversations/:conversationId",
responseType: "json",
pathParamSchema: chunkHTBC6CVX_cjs.conversationIdPathParams,
responseSchema: chunkHTBC6CVX_cjs.conversationObjectSchema,
summary: "Retrieve a conversation",
description: "Returns a conversation object backed by a Mastra memory thread",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunk42M6Y2OD_cjs.MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await chunkKIDHIRVO_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/v1/conversations/:conversationId/items",
responseType: "json",
pathParamSchema: chunkHTBC6CVX_cjs.conversationIdPathParams,
responseSchema: chunkHTBC6CVX_cjs.conversationItemsListSchema,
summary: "List conversation items",
description: "Returns OpenAI-style conversation items derived from the stored thread messages",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunk42M6Y2OD_cjs.MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await chunkKIDHIRVO_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 = chunkDN2NUSL2_cjs.createRoute({
method: "DELETE",
path: "/v1/conversations/:conversationId",
responseType: "json",
pathParamSchema: chunkHTBC6CVX_cjs.conversationIdPathParams,
responseSchema: chunkHTBC6CVX_cjs.conversationDeletedSchema,
summary: "Delete a conversation",
description: "Deletes a thread-backed conversation and its stored items",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunk42M6Y2OD_cjs.MastraFGAPermissions.AGENTS_DELETE,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await chunkKIDHIRVO_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-PXY4G3SN.cjs.map
//# sourceMappingURL=chunk-PXY4G3SN.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-PXY4G3SN.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"]}
import { defaultOptionsSchema } from './chunk-TKP6FJQ3.js';
import { tracingOptionsSchema, coreMessageSchema, messageResponseSchema } from './chunk-2YY3EMMS.js';
import { z } from 'zod/v4';
var jsonValueSchema = z.lazy(
() => z.union([
z.string(),
z.number(),
z.boolean(),
z.null(),
z.array(jsonValueSchema),
z.record(z.string(), jsonValueSchema)
])
);
var jsonRecordSchema = z.record(z.string(), jsonValueSchema);
var signalAttributesSchema = z.record(
z.string(),
z.union([z.string(), z.number(), z.boolean(), z.null(), z.undefined()])
);
var baseSignalSchema = z.object({
id: z.string().optional(),
createdAt: z.union([z.string(), z.date()]).optional(),
metadata: jsonRecordSchema.optional(),
attributes: signalAttributesSchema.optional()
});
var partProviderOptionsSchema = z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional();
var signalTextPartSchema = z.object({
type: z.literal("text"),
text: z.string(),
providerOptions: partProviderOptionsSchema
});
var signalFilePartSchema = z.object({
type: z.literal("file"),
data: z.string(),
mediaType: z.string(),
filename: z.string().optional(),
providerOptions: partProviderOptionsSchema
});
var userMessageSignalContentsSchema = z.union([
z.string(),
z.array(z.union([signalTextPartSchema, signalFilePartSchema]))
]);
var agentMessageInputObjectSchema = z.object({
contents: userMessageSignalContentsSchema,
attributes: signalAttributesSchema.optional(),
metadata: jsonRecordSchema.optional(),
providerOptions: z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional()
});
var agentMessageInputSchema = z.union([userMessageSignalContentsSchema, agentMessageInputObjectSchema]);
var agentSignalSchema = baseSignalSchema.extend({
type: z.enum(["user", "state", "reactive", "notification", "user-message", "system-reminder"]),
tagName: z.string().optional(),
contents: userMessageSignalContentsSchema,
providerOptions: z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional()
});
var agentIdPathParams = z.object({
agentId: z.string().describe("Unique identifier for the agent")
});
var agentVersionQuerySchema = z.object({
status: z.enum(["draft", "published"]).optional().describe(
"Which stored config version to resolve: draft (latest, default) or published (active version). Mutually exclusive with versionId."
),
versionId: z.string().optional().describe(
"Specific version ID to resolve. Mutually exclusive with status \u2014 if both are provided, versionId takes precedence."
)
});
var toolIdPathParams = z.object({
toolId: z.string().describe("Unique identifier for the tool")
});
var agentToolPathParams = agentIdPathParams.extend({
toolId: z.string().describe("Unique identifier for the tool")
});
var agentSkillPathParams = agentIdPathParams.extend({
skillName: z.string().describe("Name of the skill")
});
var modelConfigIdPathParams = agentIdPathParams.extend({
modelConfigId: z.string().describe("Unique identifier for the model configuration")
});
var serializedProcessorSchema = z.object({
id: z.string(),
name: z.string().optional()
});
var serializedToolSchema = z.object({
id: z.string(),
description: z.string().optional(),
inputSchema: z.string().optional(),
outputSchema: z.string().optional(),
requireApproval: z.boolean().optional()
});
var serializedWorkflowSchema = z.object({
name: z.string(),
steps: z.record(
z.string(),
z.object({
id: z.string(),
description: z.string().optional()
})
).optional()
});
var serializedAgentDefinitionSchema = z.object({
id: z.string(),
name: z.string()
});
var systemMessageSchema = z.union([
z.string(),
z.array(z.string()),
z.any(),
// CoreSystemMessage or SystemModelMessage
z.array(z.any())
]);
var modelConfigSchema = z.object({
model: z.object({
modelId: z.string(),
provider: z.string(),
modelVersion: z.string()
})
// Additional fields from AgentModelManagerConfig can be added here
});
var agentEditorConfigSchema = z.union([
z.literal(false),
z.object({
instructions: z.boolean().optional(),
tools: z.union([z.boolean(), z.object({ description: z.boolean().optional() })]).optional()
})
]);
var serializedAgentSchema = z.object({
name: z.string(),
description: z.string().optional(),
metadata: z.record(z.string(), z.unknown()).optional(),
instructions: systemMessageSchema.optional(),
tools: z.record(z.string(), serializedToolSchema),
agents: z.record(z.string(), serializedAgentDefinitionSchema),
workflows: z.record(z.string(), serializedWorkflowSchema),
inputProcessors: z.array(serializedProcessorSchema),
outputProcessors: z.array(serializedProcessorSchema),
provider: z.string().optional(),
modelId: z.string().optional(),
modelVersion: z.string().optional(),
supportsMemory: z.boolean().optional(),
modelList: z.array(modelConfigSchema).optional(),
defaultOptions: defaultOptionsSchema.optional(),
defaultGenerateOptionsLegacy: z.record(z.string(), z.any()).optional(),
defaultStreamOptionsLegacy: z.record(z.string(), z.any()).optional(),
source: z.enum(["code", "stored", "fs"]).optional(),
status: z.enum(["draft", "published", "archived"]).optional(),
activeVersionId: z.string().optional(),
hasDraft: z.boolean().optional(),
editor: agentEditorConfigSchema.optional()
});
var serializedAgentWithIdSchema = serializedAgentSchema.extend({
id: z.string()
});
var providerSchema = z.object({
id: z.string(),
name: z.string(),
label: z.string().optional(),
description: z.string().optional(),
envVar: z.union([z.string(), z.array(z.string())]),
connected: z.boolean(),
docUrl: z.string().optional(),
models: z.array(z.string())
});
var providersResponseSchema = z.object({
providers: z.array(providerSchema)
});
var listAgentsResponseSchema = z.record(z.string(), serializedAgentSchema);
var listToolsResponseSchema = z.record(z.string(), serializedToolSchema);
var agentMemoryOptionSchema = z.object({
thread: z.union([z.string(), z.object({ id: z.string() }).passthrough()]),
resource: z.string(),
options: z.record(z.string(), z.any()).optional(),
readOnly: z.boolean().optional()
});
var toolChoiceSchema = z.union([
z.enum(["auto", "none", "required"]),
z.object({ type: z.literal("tool"), toolName: z.string() })
]);
var agentExecutionBodySchema = z.object({
// REQUIRED
messages: z.union([
z.array(coreMessageSchema),
// Array of messages
z.string()
// Single user message shorthand
]),
// Message Configuration
instructions: systemMessageSchema.optional(),
system: systemMessageSchema.optional(),
context: z.array(coreMessageSchema).optional(),
// Memory & Persistence
memory: agentMemoryOptionSchema.optional(),
runId: z.string().optional(),
savePerStep: z.boolean().optional(),
// Request Context (handler-specific field - merged with server's requestContext)
requestContext: z.record(z.string(), z.any()).optional(),
// Version overrides for sub-agents (and future primitives)
versions: z.object({
agents: z.record(
z.string(),
z.union([z.object({ versionId: z.string() }), z.object({ status: z.enum(["draft", "published"]) })])
).optional(),
defaultStatus: z.enum(["draft", "published"]).optional()
}).optional(),
// Execution Control
maxSteps: z.number().optional(),
stopWhen: z.any().optional(),
// Model Configuration
providerOptions: z.object({
anthropic: z.record(z.string(), z.any()).optional(),
google: z.record(z.string(), z.any()).optional(),
openai: z.record(z.string(), z.any()).optional(),
xai: z.record(z.string(), z.any()).optional()
}).optional(),
modelSettings: z.any().optional(),
// Tool Configuration
activeTools: z.array(z.string()).optional(),
toolsets: z.record(z.string(), z.any()).optional(),
clientTools: z.record(z.string(), z.any()).optional(),
toolChoice: toolChoiceSchema.optional(),
requireToolApproval: z.boolean().optional(),
// Evaluation
scorers: z.union([
z.record(z.string(), z.any()),
z.record(
z.string(),
z.object({
scorer: z.string(),
sampling: z.any().optional()
})
)
]).optional(),
returnScorerData: z.boolean().optional(),
// Observability
tracingOptions: tracingOptionsSchema.optional(),
// Structured Output
output: z.any().optional(),
// Zod schema, JSON schema, or structured output object
structuredOutput: z.object({
schema: z.object({}).passthrough(),
model: z.union([z.string(), z.any()]).optional(),
instructions: z.string().optional(),
jsonPromptInjection: z.boolean().optional(),
errorStrategy: z.enum(["strict", "warn", "fallback"]).optional(),
fallbackValue: z.any().optional()
}).optional(),
// Idle-loop streaming (collapses streamUntilIdle into stream)
untilIdle: z.union([z.boolean(), z.object({ maxIdleMs: z.number().int().positive().optional() })]).optional()
}).passthrough();
var agentExecutionLegacyBodySchema = agentExecutionBodySchema.extend({
resourceId: z.string().optional(),
resourceid: z.string().optional(),
// lowercase variant
threadId: z.string().optional()
});
var streamUntilIdleBodySchema = agentExecutionBodySchema.extend({
maxIdleMs: z.number().int().positive().optional(),
untilIdle: z.union([z.boolean(), z.object({ maxIdleMs: z.number().int().positive().optional() })]).optional()
});
var resumeStreamUntilIdleBodySchema = agentExecutionBodySchema.omit({ messages: true }).extend({
runId: z.string(),
resumeData: z.unknown().refine((x) => x !== void 0, { message: "resumeData is required" }),
toolCallId: z.string().optional(),
maxIdleMs: z.number().int().positive().optional()
});
var executeToolDataBodySchema = z.object({
data: z.unknown().refine((x) => x !== void 0, { message: "data is required" })
});
var executeToolBodySchema = executeToolDataBodySchema.extend({
requestContext: z.record(z.string(), z.any()).optional()
});
var executeToolContextBodySchema = executeToolDataBodySchema.extend({
requestContext: z.record(z.string(), z.any()).optional()
});
var toolCallActionBodySchema = z.object({
runId: z.string(),
requestContext: z.record(z.string(), z.any()).optional(),
toolCallId: z.string(),
format: z.string().optional()
});
var networkToolCallActionBodySchema = z.object({
runId: z.string(),
requestContext: z.record(z.string(), z.any()).optional(),
format: z.string().optional()
});
var approveToolCallBodySchema = toolCallActionBodySchema;
var declineToolCallBodySchema = toolCallActionBodySchema;
var approveNetworkToolCallBodySchema = networkToolCallActionBodySchema;
var declineNetworkToolCallBodySchema = networkToolCallActionBodySchema;
var toolCallResponseSchema = z.object({
fullStream: z.any()
// ReadableStream
});
var sendToolApprovalResponseSchema = z.object({
accepted: z.literal(true),
runId: z.string(),
toolCallId: z.string().optional()
});
var listSuspendedRunsQuerySchema = z.object({
threadId: z.string().optional(),
resourceId: z.string().optional(),
fromDate: z.coerce.date().optional(),
toDate: z.coerce.date().optional(),
perPage: z.coerce.number().int().positive().optional(),
// page is zero-indexed, so 0 is valid
page: z.coerce.number().int().nonnegative().optional()
}).refine((data) => !data.fromDate || !data.toDate || data.fromDate <= data.toDate, {
message: "fromDate must be less than or equal to toDate",
path: ["fromDate"]
});
var listSuspendedRunsResponseSchema = z.object({
runs: z.array(
z.object({
runId: z.string(),
status: z.literal("suspended"),
threadId: z.string().optional(),
resourceId: z.string().optional(),
suspendedAt: z.date(),
toolCalls: z.array(
z.object({
toolCallId: z.string().optional(),
toolName: z.string().optional(),
args: z.unknown().optional(),
requiresApproval: z.boolean(),
suspendPayload: z.unknown().optional()
})
)
})
),
total: z.number().int().nonnegative()
});
var resumeStreamBodySchema = agentExecutionBodySchema.omit({ messages: true }).extend({
runId: z.string(),
resumeData: z.unknown().refine((x) => x !== void 0, { message: "resumeData is required" }),
toolCallId: z.string().optional()
});
var updateAgentModelBodySchema = z.object({
modelId: z.string(),
provider: z.string()
});
var reorderAgentModelListBodySchema = z.object({
reorderedModelIds: z.array(z.string())
});
var updateAgentModelInModelListBodySchema = z.object({
model: z.object({
modelId: z.string(),
provider: z.string()
}).optional(),
maxRetries: z.number().optional(),
enabled: z.boolean().optional()
});
var modelManagementResponseSchema = messageResponseSchema;
var generateResponseSchema = z.any();
var streamResponseSchema = z.any();
var executeToolResponseSchema = z.any();
var enhanceInstructionsBodySchema = z.object({
instructions: z.string().describe("The current agent instructions to enhance"),
comment: z.string().describe("User comment describing how to enhance the instructions")
});
var enhanceInstructionsResponseSchema = z.object({
explanation: z.string().describe("Explanation of the changes made"),
new_prompt: z.string().describe("The enhanced instructions")
});
var observeAgentBodySchema = z.object({
runId: z.string().describe("The run ID to observe/reconnect to"),
offset: z.number().optional().describe("Resume from this event index (0-based). If omitted, replays all events.")
});
var signalActiveBehaviorSchema = z.enum(["deliver", "persist", "discard"]);
var signalIdleBehaviorSchema = z.enum(["wake", "persist", "discard"]);
var signalTargetBaseBodySchema = z.object({
ifActive: z.object({
behavior: signalActiveBehaviorSchema.optional(),
attributes: signalAttributesSchema.optional()
}).optional()
});
var signalTargetBodySchema = z.union([
signalTargetBaseBodySchema.extend({
runId: z.string(),
resourceId: z.string().optional(),
threadId: z.string().optional(),
ifIdle: z.undefined().optional()
}),
signalTargetBaseBodySchema.extend({
runId: z.undefined().optional(),
resourceId: z.string(),
threadId: z.string(),
ifIdle: z.object({
behavior: signalIdleBehaviorSchema.optional(),
streamOptions: agentExecutionBodySchema.omit({ messages: true }).optional(),
attributes: signalAttributesSchema.optional()
}).optional()
})
]);
var sendAgentSignalBodySchema = z.union([
signalTargetBodySchema.options[0].extend({ signal: agentSignalSchema }),
signalTargetBodySchema.options[1].extend({ signal: agentSignalSchema })
]);
var sendAgentMessageBodySchema = z.union([
signalTargetBodySchema.options[0].extend({ message: agentMessageInputSchema }),
signalTargetBodySchema.options[1].extend({ message: agentMessageInputSchema })
]);
var queueAgentMessageBodySchema = sendAgentMessageBodySchema;
var subscribeAgentThreadBodySchema = z.object({
resourceId: z.string().optional(),
threadId: z.string()
});
var abortAgentThreadBodySchema = subscribeAgentThreadBodySchema;
var sendToolApprovalBodySchema = z.object({
resourceId: z.string(),
threadId: z.string(),
requestContext: z.record(z.string(), z.any()).optional(),
toolCallId: z.string(),
approved: z.boolean(),
resumeData: z.any().optional(),
format: z.string().optional(),
messages: z.array(coreMessageSchema).optional(),
streamOptions: z.any().optional()
});
var abortAgentThreadResponseSchema = z.object({
aborted: z.boolean()
});
var observeAgentResponseSchema = z.any();
export { abortAgentThreadBodySchema, abortAgentThreadResponseSchema, agentExecutionBodySchema, agentExecutionLegacyBodySchema, agentIdPathParams, agentSkillPathParams, agentToolPathParams, agentVersionQuerySchema, approveNetworkToolCallBodySchema, approveToolCallBodySchema, declineNetworkToolCallBodySchema, declineToolCallBodySchema, enhanceInstructionsBodySchema, enhanceInstructionsResponseSchema, executeToolBodySchema, executeToolContextBodySchema, executeToolResponseSchema, generateResponseSchema, listAgentsResponseSchema, listSuspendedRunsQuerySchema, listSuspendedRunsResponseSchema, listToolsResponseSchema, modelConfigIdPathParams, modelManagementResponseSchema, observeAgentBodySchema, observeAgentResponseSchema, providerSchema, providersResponseSchema, queueAgentMessageBodySchema, reorderAgentModelListBodySchema, resumeStreamBodySchema, resumeStreamUntilIdleBodySchema, sendAgentMessageBodySchema, sendAgentSignalBodySchema, sendToolApprovalBodySchema, sendToolApprovalResponseSchema, serializedAgentDefinitionSchema, serializedAgentSchema, serializedAgentWithIdSchema, serializedProcessorSchema, serializedToolSchema, serializedWorkflowSchema, streamResponseSchema, streamUntilIdleBodySchema, subscribeAgentThreadBodySchema, toolCallResponseSchema, toolIdPathParams, updateAgentModelBodySchema, updateAgentModelInModelListBodySchema };
//# sourceMappingURL=chunk-R3KUPFCO.js.map
//# sourceMappingURL=chunk-R3KUPFCO.js.map
{"version":3,"sources":["../src/server/schemas/agents.ts"],"names":[],"mappings":"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","file":"chunk-R3KUPFCO.js","sourcesContent":["import { z } from 'zod/v4';\nimport { tracingOptionsSchema, coreMessageSchema, messageResponseSchema } from './common';\nimport { defaultOptionsSchema } from './default-options';\n\nexport {\n generateSpeechBodySchema,\n getListenerResponseSchema,\n speakResponseSchema,\n transcribeSpeechBodySchema,\n transcribeSpeechResponseSchema,\n voiceSpeakersResponseSchema,\n} from '@internal/voice/routes';\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\n\nconst jsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(jsonValueSchema),\n z.record(z.string(), jsonValueSchema),\n ]),\n);\nconst jsonRecordSchema = z.record(z.string(), jsonValueSchema);\n\nconst signalAttributesSchema = z.record(\n z.string(),\n z.union([z.string(), z.number(), z.boolean(), z.null(), z.undefined()]),\n);\n\nconst baseSignalSchema = z.object({\n id: z.string().optional(),\n createdAt: z.union([z.string(), z.date()]).optional(),\n metadata: jsonRecordSchema.optional(),\n attributes: signalAttributesSchema.optional(),\n});\n\nconst partProviderOptionsSchema = z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional();\n\nconst signalTextPartSchema = z.object({\n type: z.literal('text'),\n text: z.string(),\n providerOptions: partProviderOptionsSchema,\n});\n\nconst signalFilePartSchema = z.object({\n type: z.literal('file'),\n data: z.string(),\n mediaType: z.string(),\n filename: z.string().optional(),\n providerOptions: partProviderOptionsSchema,\n});\n\nconst userMessageSignalContentsSchema = z.union([\n z.string(),\n z.array(z.union([signalTextPartSchema, signalFilePartSchema])),\n]);\n\nconst agentMessageInputObjectSchema = z.object({\n contents: userMessageSignalContentsSchema,\n attributes: signalAttributesSchema.optional(),\n metadata: jsonRecordSchema.optional(),\n providerOptions: z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional(),\n});\n\nconst agentMessageInputSchema = z.union([userMessageSignalContentsSchema, agentMessageInputObjectSchema]);\n\nconst agentSignalSchema = baseSignalSchema.extend({\n type: z.enum(['user', 'state', 'reactive', 'notification', 'user-message', 'system-reminder']),\n tagName: z.string().optional(),\n contents: userMessageSignalContentsSchema,\n providerOptions: z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional(),\n});\n\n// Path parameter schemas\nexport const agentIdPathParams = z.object({\n agentId: z.string().describe('Unique identifier for the agent'),\n});\n\n/**\n * Query params for GET /agents/:agentId — controls which stored config version is used for overrides.\n * Use either `status` or `versionId`, not both.\n * - `status` — 'draft' (latest version, default) or 'published' (active published version).\n * - `versionId` — Resolve with a specific version ID.\n */\nexport const agentVersionQuerySchema = z.object({\n status: z\n .enum(['draft', 'published'])\n .optional()\n .describe(\n 'Which stored config version to resolve: draft (latest, default) or published (active version). Mutually exclusive with versionId.',\n ),\n versionId: z\n .string()\n .optional()\n .describe(\n 'Specific version ID to resolve. Mutually exclusive with status — if both are provided, versionId takes precedence.',\n ),\n});\n\nexport const toolIdPathParams = z.object({\n toolId: z.string().describe('Unique identifier for the tool'),\n});\n\nexport const agentToolPathParams = agentIdPathParams.extend({\n toolId: z.string().describe('Unique identifier for the tool'),\n});\n\nexport const agentSkillPathParams = agentIdPathParams.extend({\n skillName: z.string().describe('Name of the skill'),\n});\n\nexport const modelConfigIdPathParams = agentIdPathParams.extend({\n modelConfigId: z.string().describe('Unique identifier for the model configuration'),\n});\n\n/**\n * Schema for serialized processor metadata\n */\nexport const serializedProcessorSchema = z.object({\n id: z.string(),\n name: z.string().optional(),\n});\n\n/**\n * Schema for serialized tool with JSON schemas\n * Uses passthrough() to allow additional tool properties beyond core fields\n */\nexport const serializedToolSchema = z.object({\n id: z.string(),\n description: z.string().optional(),\n inputSchema: z.string().optional(),\n outputSchema: z.string().optional(),\n requireApproval: z.boolean().optional(),\n});\n\n/**\n * Schema for serialized workflow with steps\n */\nexport const serializedWorkflowSchema = z.object({\n name: z.string(),\n steps: z\n .record(\n z.string(),\n z.object({\n id: z.string(),\n description: z.string().optional(),\n }),\n )\n .optional(),\n});\n\n/**\n * Schema for serialized agent definition (referenced by other agents)\n */\nexport const serializedAgentDefinitionSchema = z.object({\n id: z.string(),\n name: z.string(),\n});\n\n/**\n * Schema for SystemMessage type\n * Can be string, string[], or various message objects\n */\nconst systemMessageSchema = z.union([\n z.string(),\n z.array(z.string()),\n z.any(), // CoreSystemMessage or SystemModelMessage\n z.array(z.any()),\n]);\n\n/**\n * Schema for model configuration in model list\n */\nconst modelConfigSchema = z.object({\n model: z.object({\n modelId: z.string(),\n provider: z.string(),\n modelVersion: z.string(),\n }),\n // Additional fields from AgentModelManagerConfig can be added here\n});\n\nconst agentEditorConfigSchema = z.union([\n z.literal(false),\n z.object({\n instructions: z.boolean().optional(),\n tools: z.union([z.boolean(), z.object({ description: z.boolean().optional() })]).optional(),\n }),\n]);\n\n/**\n * Main schema for serialized agent representation\n */\nexport const serializedAgentSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n instructions: systemMessageSchema.optional(),\n tools: z.record(z.string(), serializedToolSchema),\n agents: z.record(z.string(), serializedAgentDefinitionSchema),\n workflows: z.record(z.string(), serializedWorkflowSchema),\n inputProcessors: z.array(serializedProcessorSchema),\n outputProcessors: z.array(serializedProcessorSchema),\n provider: z.string().optional(),\n modelId: z.string().optional(),\n modelVersion: z.string().optional(),\n supportsMemory: z.boolean().optional(),\n modelList: z.array(modelConfigSchema).optional(),\n defaultOptions: defaultOptionsSchema.optional(),\n defaultGenerateOptionsLegacy: z.record(z.string(), z.any()).optional(),\n defaultStreamOptionsLegacy: z.record(z.string(), z.any()).optional(),\n source: z.enum(['code', 'stored', 'fs']).optional(),\n status: z.enum(['draft', 'published', 'archived']).optional(),\n activeVersionId: z.string().optional(),\n hasDraft: z.boolean().optional(),\n editor: agentEditorConfigSchema.optional(),\n});\n\n/**\n * Schema for agent with ID\n */\nexport const serializedAgentWithIdSchema = serializedAgentSchema.extend({\n id: z.string(),\n});\n\n/**\n * Schema for individual provider information\n */\nexport const providerSchema = z.object({\n id: z.string(),\n name: z.string(),\n label: z.string().optional(),\n description: z.string().optional(),\n envVar: z.union([z.string(), z.array(z.string())]),\n connected: z.boolean(),\n docUrl: z.string().optional(),\n models: z.array(z.string()),\n});\n\n/**\n * Schema for providers endpoint response\n */\nexport const providersResponseSchema = z.object({\n providers: z.array(providerSchema),\n});\n\nexport type ProviderListItem = z.infer<typeof providerSchema>;\n\n/**\n * Schema for list agents endpoint response\n * Returns a record of agent ID to serialized agent\n */\nexport const listAgentsResponseSchema = z.record(z.string(), serializedAgentSchema);\n\n/**\n * Schema for list tools endpoint response\n * Returns a record of tool ID to serialized tool\n */\nexport const listToolsResponseSchema = z.record(z.string(), serializedToolSchema);\n\n// ============================================================================\n// Agent Execution Body Schemas\n// ============================================================================\n\n/**\n * Schema for agent memory option\n */\nconst agentMemoryOptionSchema = z.object({\n thread: z.union([z.string(), z.object({ id: z.string() }).passthrough()]),\n resource: z.string(),\n options: z.record(z.string(), z.any()).optional(),\n readOnly: z.boolean().optional(),\n});\n\n/**\n * Schema for tool choice configuration\n */\nconst toolChoiceSchema = z.union([\n z.enum(['auto', 'none', 'required']),\n z.object({ type: z.literal('tool'), toolName: z.string() }),\n]);\n\n/**\n * Comprehensive body schema for agent generate and stream endpoints\n * Validates common fields while using passthrough for complex nested objects\n *\n * EXCLUDED FIELDS (not serializable):\n * - Callbacks: onStepFinish, onFinish, onChunk, onError, onAbort, prepareStep\n * - Class instances: inputProcessors, outputProcessors\n * - Non-serializable: abortSignal, tracingContext\n */\nexport const agentExecutionBodySchema = z\n .object({\n // REQUIRED\n messages: z.union([\n z.array(coreMessageSchema), // Array of messages\n z.string(), // Single user message shorthand\n ]),\n\n // Message Configuration\n instructions: systemMessageSchema.optional(),\n system: systemMessageSchema.optional(),\n context: z.array(coreMessageSchema).optional(),\n\n // Memory & Persistence\n memory: agentMemoryOptionSchema.optional(),\n runId: z.string().optional(),\n savePerStep: z.boolean().optional(),\n\n // Request Context (handler-specific field - merged with server's requestContext)\n requestContext: z.record(z.string(), z.any()).optional(),\n\n // Version overrides for sub-agents (and future primitives)\n versions: z\n .object({\n agents: z\n .record(\n z.string(),\n z.union([z.object({ versionId: z.string() }), z.object({ status: z.enum(['draft', 'published']) })]),\n )\n .optional(),\n defaultStatus: z.enum(['draft', 'published']).optional(),\n })\n .optional(),\n\n // Execution Control\n maxSteps: z.number().optional(),\n stopWhen: z.any().optional(),\n\n // Model Configuration\n providerOptions: z\n .object({\n anthropic: z.record(z.string(), z.any()).optional(),\n google: z.record(z.string(), z.any()).optional(),\n openai: z.record(z.string(), z.any()).optional(),\n xai: z.record(z.string(), z.any()).optional(),\n })\n .optional(),\n modelSettings: z.any().optional(),\n\n // Tool Configuration\n activeTools: z.array(z.string()).optional(),\n toolsets: z.record(z.string(), z.any()).optional(),\n clientTools: z.record(z.string(), z.any()).optional(),\n toolChoice: toolChoiceSchema.optional(),\n requireToolApproval: z.boolean().optional(),\n\n // Evaluation\n scorers: z\n .union([\n z.record(z.string(), z.any()),\n z.record(\n z.string(),\n z.object({\n scorer: z.string(),\n sampling: z.any().optional(),\n }),\n ),\n ])\n .optional(),\n returnScorerData: z.boolean().optional(),\n\n // Observability\n tracingOptions: tracingOptionsSchema.optional(),\n\n // Structured Output\n output: z.any().optional(), // Zod schema, JSON schema, or structured output object\n structuredOutput: z\n .object({\n schema: z.object({}).passthrough(),\n model: z.union([z.string(), z.any()]).optional(),\n instructions: z.string().optional(),\n jsonPromptInjection: z.boolean().optional(),\n errorStrategy: z.enum(['strict', 'warn', 'fallback']).optional(),\n fallbackValue: z.any().optional(),\n })\n .optional(),\n\n // Idle-loop streaming (collapses streamUntilIdle into stream)\n untilIdle: z.union([z.boolean(), z.object({ maxIdleMs: z.number().int().positive().optional() })]).optional(),\n })\n .passthrough(); // Allow additional fields for forward compatibility\n\n/**\n * Legacy body schema for deprecated endpoints that still use threadId/resourceId\n * Used by /agents/:agentId/generate-legacy and /agents/:agentId/stream-legacy\n */\nexport const agentExecutionLegacyBodySchema = agentExecutionBodySchema.extend({\n resourceId: z.string().optional(),\n resourceid: z.string().optional(), // lowercase variant\n threadId: z.string().optional(),\n});\n\nexport const streamUntilIdleBodySchema = agentExecutionBodySchema.extend({\n maxIdleMs: z.number().int().positive().optional(),\n untilIdle: z.union([z.boolean(), z.object({ maxIdleMs: z.number().int().positive().optional() })]).optional(),\n});\n\nexport const resumeStreamUntilIdleBodySchema = agentExecutionBodySchema.omit({ messages: true }).extend({\n runId: z.string(),\n resumeData: z.unknown().refine(x => x !== undefined, { message: 'resumeData is required' }),\n toolCallId: z.string().optional(),\n maxIdleMs: z.number().int().positive().optional(),\n});\n/**\n * Body schema for tool execute endpoint\n * Simple schema - tool validates its own input data\n * Note: Using z.unknown().refine() instead of z.any() to ensure data is required\n * (z.any() is treated as optional by Zod)\n */\nconst executeToolDataBodySchema = z.object({\n data: z.unknown().refine(x => x !== undefined, { message: 'data is required' }),\n});\n\nexport const executeToolBodySchema = executeToolDataBodySchema.extend({\n requestContext: z.record(z.string(), z.any()).optional(),\n});\n\nexport const executeToolContextBodySchema = executeToolDataBodySchema.extend({\n requestContext: z.record(z.string(), z.any()).optional(),\n});\n\n// ============================================================================\n// Tool Approval Schemas\n// ============================================================================\n\n/**\n * Base schema for tool approval/decline operations\n * Both approve and decline use the same parameters\n */\nconst toolCallActionBodySchema = z.object({\n runId: z.string(),\n requestContext: z.record(z.string(), z.any()).optional(),\n toolCallId: z.string(),\n format: z.string().optional(),\n});\nconst networkToolCallActionBodySchema = z.object({\n runId: z.string(),\n requestContext: z.record(z.string(), z.any()).optional(),\n format: z.string().optional(),\n});\n\n/**\n * Body schema for approving tool call\n */\nexport const approveToolCallBodySchema = toolCallActionBodySchema;\n\n/**\n * Body schema for declining tool call\n */\nexport const declineToolCallBodySchema = toolCallActionBodySchema;\n\n/**\n * Body schema for approving network tool call\n */\nexport const approveNetworkToolCallBodySchema = networkToolCallActionBodySchema;\n\n/**\n * Body schema for declining network tool call\n */\nexport const declineNetworkToolCallBodySchema = networkToolCallActionBodySchema;\n\n/**\n * Response schema for tool approval/decline\n */\nexport const toolCallResponseSchema = z.object({\n fullStream: z.any(), // ReadableStream\n});\n\nexport const sendToolApprovalResponseSchema = z.object({\n accepted: z.literal(true),\n runId: z.string(),\n toolCallId: z.string().optional(),\n});\n\n/**\n * Query schema for listing suspended agent runs\n */\nexport const listSuspendedRunsQuerySchema = z\n .object({\n threadId: z.string().optional(),\n resourceId: z.string().optional(),\n fromDate: z.coerce.date().optional(),\n toDate: z.coerce.date().optional(),\n perPage: z.coerce.number().int().positive().optional(),\n // page is zero-indexed, so 0 is valid\n page: z.coerce.number().int().nonnegative().optional(),\n })\n .refine(data => !data.fromDate || !data.toDate || data.fromDate <= data.toDate, {\n message: 'fromDate must be less than or equal to toDate',\n path: ['fromDate'],\n });\n\n/**\n * Response schema for listing suspended agent runs\n */\nexport const listSuspendedRunsResponseSchema = z.object({\n runs: z.array(\n z.object({\n runId: z.string(),\n status: z.literal('suspended'),\n threadId: z.string().optional(),\n resourceId: z.string().optional(),\n suspendedAt: z.date(),\n toolCalls: z.array(\n z.object({\n toolCallId: z.string().optional(),\n toolName: z.string().optional(),\n args: z.unknown().optional(),\n requiresApproval: z.boolean(),\n suspendPayload: z.unknown().optional(),\n }),\n ),\n }),\n ),\n total: z.number().int().nonnegative(),\n});\n\n// ============================================================================\n// Resume Stream Schema\n// ============================================================================\n\n/**\n * Body schema for resuming a suspended agent stream with custom data.\n * Extends the agent execution body without messages, since resume\n * continues from a prior suspension point rather than starting fresh.\n */\nexport const resumeStreamBodySchema = agentExecutionBodySchema.omit({ messages: true }).extend({\n runId: z.string(),\n resumeData: z.unknown().refine(x => x !== undefined, { message: 'resumeData is required' }),\n toolCallId: z.string().optional(),\n});\n\n// ============================================================================\n// Model Management Schemas\n// ============================================================================\n\n/**\n * Body schema for updating agent model\n */\nexport const updateAgentModelBodySchema = z.object({\n modelId: z.string(),\n provider: z.string(),\n});\n\n/**\n * Body schema for reordering agent model list\n */\nexport const reorderAgentModelListBodySchema = z.object({\n reorderedModelIds: z.array(z.string()),\n});\n\n/**\n * Body schema for updating model in model list\n */\nexport const updateAgentModelInModelListBodySchema = z.object({\n model: z\n .object({\n modelId: z.string(),\n provider: z.string(),\n })\n .optional(),\n maxRetries: z.number().optional(),\n enabled: z.boolean().optional(),\n});\n\n/**\n * Response schema for model management operations\n */\nexport const modelManagementResponseSchema = messageResponseSchema;\n\n// ============================================================================\n// Response schemas for agent generation endpoints\n// These return AI SDK types which have complex structures\n// ============================================================================\n\nexport const generateResponseSchema = z.any(); // AI SDK GenerateResult type\nexport const streamResponseSchema = z.any(); // AI SDK StreamResult type\nexport const executeToolResponseSchema = z.any(); // Tool execution result varies by tool\n\n// ============================================================================\n// Instruction Enhancement Schemas\n// ============================================================================\n\n/**\n * Body schema for enhancing agent instructions\n */\nexport const enhanceInstructionsBodySchema = z.object({\n instructions: z.string().describe('The current agent instructions to enhance'),\n comment: z.string().describe('User comment describing how to enhance the instructions'),\n});\n\n/**\n * Response schema for enhanced instructions\n */\nexport const enhanceInstructionsResponseSchema = z.object({\n explanation: z.string().describe('Explanation of the changes made'),\n new_prompt: z.string().describe('The enhanced instructions'),\n});\n\n// ============================================================================\n// Observe (Resumable Streams) Schemas\n// ============================================================================\n\n/**\n * Body schema for observing an agent stream\n * Used to reconnect to an existing stream and receive missed events\n */\nexport const observeAgentBodySchema = z.object({\n runId: z.string().describe('The run ID to observe/reconnect to'),\n offset: z.number().optional().describe('Resume from this event index (0-based). If omitted, replays all events.'),\n});\n\nconst signalActiveBehaviorSchema = z.enum(['deliver', 'persist', 'discard']);\nconst signalIdleBehaviorSchema = z.enum(['wake', 'persist', 'discard']);\n\nconst signalTargetBaseBodySchema = z.object({\n ifActive: z\n .object({\n behavior: signalActiveBehaviorSchema.optional(),\n attributes: signalAttributesSchema.optional(),\n })\n .optional(),\n});\n\nconst signalTargetBodySchema = z.union([\n signalTargetBaseBodySchema.extend({\n runId: z.string(),\n resourceId: z.string().optional(),\n threadId: z.string().optional(),\n ifIdle: z.undefined().optional(),\n }),\n signalTargetBaseBodySchema.extend({\n runId: z.undefined().optional(),\n resourceId: z.string(),\n threadId: z.string(),\n ifIdle: z\n .object({\n behavior: signalIdleBehaviorSchema.optional(),\n streamOptions: agentExecutionBodySchema.omit({ messages: true }).optional(),\n attributes: signalAttributesSchema.optional(),\n })\n .optional(),\n }),\n]);\n\nexport const sendAgentSignalBodySchema = z.union([\n signalTargetBodySchema.options[0].extend({ signal: agentSignalSchema }),\n signalTargetBodySchema.options[1].extend({ signal: agentSignalSchema }),\n]);\n\nexport const sendAgentMessageBodySchema = z.union([\n signalTargetBodySchema.options[0].extend({ message: agentMessageInputSchema }),\n signalTargetBodySchema.options[1].extend({ message: agentMessageInputSchema }),\n]);\n\nexport const queueAgentMessageBodySchema = sendAgentMessageBodySchema;\n\nexport const subscribeAgentThreadBodySchema = z.object({\n resourceId: z.string().optional(),\n threadId: z.string(),\n});\n\nexport const abortAgentThreadBodySchema = subscribeAgentThreadBodySchema;\n\nexport const sendToolApprovalBodySchema = z.object({\n resourceId: z.string(),\n threadId: z.string(),\n requestContext: z.record(z.string(), z.any()).optional(),\n toolCallId: z.string(),\n approved: z.boolean(),\n resumeData: z.any().optional(),\n format: z.string().optional(),\n messages: z.array(coreMessageSchema).optional(),\n streamOptions: z.any().optional(),\n});\n\nexport const abortAgentThreadResponseSchema = z.object({\n aborted: z.boolean(),\n});\n\n/**\n * Response schema for observe endpoint (streaming response)\n */\nexport const observeAgentResponseSchema = z.any(); // Streaming response\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 chunkT3C54LPX_cjs = require('./chunk-T3C54LPX.cjs');
var chunkFR5QBXVS_cjs = require('./chunk-FR5QBXVS.cjs');
var chunkMJH4EEUV_cjs = require('./chunk-MJH4EEUV.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
var chunkYWUVDFQZ_cjs = require('./chunk-YWUVDFQZ.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/stored/skills",
responseType: "json",
queryParamSchema: chunkT3C54LPX_cjs.listStoredSkillsQuerySchema,
responseSchema: chunkT3C54LPX_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 = chunkHDIYJI2Z_cjs.resolveAuthorFilter({
requestContext,
resource: "stored-skills",
queryAuthorId: authorId,
queryVisibility: visibility
});
const scope = await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext);
const scopedMetadata = chunkYWUVDFQZ_cjs.scopeStoredResourceMetadata(metadata, scope);
const callerId = chunkHDIYJI2Z_cjs.getCallerAuthorId(requestContext);
const favoritesEnabled = await chunkMJH4EEUV_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) => chunkHDIYJI2Z_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) => chunkHDIYJI2Z_cjs.matchesAuthorFilter(record, filter));
if (!favoritesEnabled) {
return { ...result, skills: visibleSkills.map(chunkFR5QBXVS_cjs.stripFavoriteFields) };
}
const enrichment = await chunkFR5QBXVS_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(chunkFR5QBXVS_cjs.stripFavoriteFields);
return { ...result, skills: annotated };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing stored skills");
}
}
});
var GET_STORED_SKILL_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: chunkT3C54LPX_cjs.storedSkillIdPathParams,
responseSchema: chunkT3C54LPX_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(skill, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_cjs.assertReadAccess({ requestContext, resource: "stored-skills", resourceId: storedSkillId, record: skill });
return chunkFR5QBXVS_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", skill);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting stored skill");
}
}
});
var CREATE_STORED_SKILL_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/stored/skills",
responseType: "json",
bodySchema: chunkT3C54LPX_cjs.createStoredSkillBodySchema,
responseSchema: chunkT3C54LPX_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 || chunkYWUVDFQZ_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 = chunkHDIYJI2Z_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: chunkYWUVDFQZ_cjs.scopeStoredResourceMetadata(metadata, await chunkYWUVDFQZ_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 chunkFR5QBXVS_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating stored skill");
}
}
});
var UPDATE_STORED_SKILL_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "PATCH",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: chunkT3C54LPX_cjs.storedSkillIdPathParams,
bodySchema: chunkT3C54LPX_cjs.updateStoredSkillBodySchema,
responseSchema: chunkT3C54LPX_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 chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext);
chunkYWUVDFQZ_cjs.assertStoredResourceScope(existing, scope);
chunkHDIYJI2Z_cjs.assertWriteAccess({
requestContext,
resource: "stored-skills",
resourceId: storedSkillId,
action: "edit",
record: existing
});
const callerAuthorId = chunkHDIYJI2Z_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 = chunkYWUVDFQZ_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 chunkFR5QBXVS_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error updating stored skill");
}
}
});
var DELETE_STORED_SKILL_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "DELETE",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: chunkT3C54LPX_cjs.storedSkillIdPathParams,
responseSchema: chunkT3C54LPX_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(existing, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/stored/skills/:storedSkillId/publish",
responseType: "json",
pathParamSchema: chunkT3C54LPX_cjs.storedSkillIdPathParams,
bodySchema: chunkT3C54LPX_cjs.publishStoredSkillBodySchema,
responseSchema: chunkT3C54LPX_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(existing, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_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 chunkFR5QBXVS_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-SORUUFZK.cjs.map
//# sourceMappingURL=chunk-SORUUFZK.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-SORUUFZK.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"]}
'use strict';
var chunkCXAJPAJ2_cjs = require('./chunk-CXAJPAJ2.cjs');
var chunkSCY53JIH_cjs = require('./chunk-SCY53JIH.cjs');
var chunkAJ4VAZFT_cjs = require('./chunk-AJ4VAZFT.cjs');
var chunkYWUVDFQZ_cjs = require('./chunk-YWUVDFQZ.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 chunkSCY53JIH_cjs.getAgentFromSystem({ mastra, agentId });
const [instructions, tools] = await Promise.all([agent.getInstructions({ requestContext }), agent.listTools({ requestContext })]);
const agentCard = {
name: agent.id || agentId,
description: chunkYWUVDFQZ_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 `${chunkAJ4VAZFT_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 chunkSCY53JIH_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/.well-known/:agentId/agent-card.json",
responseType: "json",
pathParamSchema: chunkCXAJPAJ2_cjs.a2aAgentIdPathParams,
responseSchema: chunkCXAJPAJ2_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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/a2a/:agentId",
responseType: "datastream-response",
pathParamSchema: chunkCXAJPAJ2_cjs.a2aAgentIdPathParams,
bodySchema: chunkCXAJPAJ2_cjs.agentExecutionBodySchema,
responseSchema: chunkCXAJPAJ2_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-TGFTKXT4.cjs.map
//# sourceMappingURL=chunk-TGFTKXT4.cjs.map

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

'use strict';
var chunkAKJAQVZ3_cjs = require('./chunk-AKJAQVZ3.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/system/api-schema",
responseType: "json",
responseSchema: chunkAKJAQVZ3_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-OSFSFYKI.cjs');
return buildApiSchemaManifest();
}
});
var GET_SYSTEM_PACKAGES_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/system/packages",
responseType: "json",
responseSchema: chunkAKJAQVZ3_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 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,
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-UXVICGWD.cjs.map
//# sourceMappingURL=chunk-UXVICGWD.cjs.map
{"version":3,"sources":["../src/server/handlers/system.ts"],"names":["createRoute","apiSchemaManifestResponseSchema","systemPackagesResponseSchema","readFileSync","handleError"],"mappings":"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","file":"chunk-UXVICGWD.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 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 observabilityRuntimeStrategy,\n };\n } catch (error) {\n return handleError(error, 'Error getting system packages');\n }\n },\n});\n"]}
'use strict';
var chunkZQ4GVMYG_cjs = require('./chunk-ZQ4GVMYG.cjs');
var v4 = require('zod/v4');
var agentFeaturesSchema = v4.z.object({
tools: v4.z.boolean().optional(),
agents: v4.z.boolean().optional(),
workflows: v4.z.boolean().optional(),
scorers: v4.z.boolean().optional(),
skills: v4.z.boolean().optional(),
memory: v4.z.boolean().optional(),
variables: v4.z.boolean().optional(),
favorites: v4.z.boolean().optional(),
avatarUpload: v4.z.boolean().optional(),
browser: v4.z.boolean().optional(),
/**
* Whether the model picker is visible in the Agent Builder.
* Omitted ⇒ picker visible (default-on). Explicit `false` ⇒ picker hidden
* (locked mode); `models.default` is required and applied.
*/
model: v4.z.boolean().optional()
});
var knownProviderEntrySchema = v4.z.object({
provider: v4.z.string().min(1),
modelId: v4.z.string().min(1).optional()
}).strict();
var customProviderEntrySchema = v4.z.object({
kind: v4.z.literal("custom"),
provider: v4.z.string().min(1),
modelId: v4.z.string().min(1).optional()
}).strict();
var knownDefaultModelEntrySchema = v4.z.object({
provider: v4.z.string().min(1),
modelId: v4.z.string().min(1)
}).strict();
var customDefaultModelEntrySchema = v4.z.object({
kind: v4.z.literal("custom"),
provider: v4.z.string().min(1),
modelId: v4.z.string().min(1)
}).strict();
var providerModelEntrySchema = v4.z.union([customProviderEntrySchema, knownProviderEntrySchema]);
var defaultModelEntrySchema = v4.z.union([customDefaultModelEntrySchema, knownDefaultModelEntrySchema]);
var agentModelsSchema = v4.z.object({
allowed: v4.z.array(providerModelEntrySchema).optional(),
default: defaultModelEntrySchema.optional()
});
var pickerAllowlistSchema = v4.z.object({
allowed: v4.z.array(v4.z.string()).optional()
}).strict();
var agentConfigurationSchema = v4.z.object({
models: agentModelsSchema.optional(),
tools: pickerAllowlistSchema.optional(),
agents: pickerAllowlistSchema.optional(),
workflows: pickerAllowlistSchema.optional()
}).catchall(v4.z.unknown());
var builderPickerSchema = v4.z.object({
visibleTools: v4.z.array(v4.z.string()).nullable(),
visibleAgents: v4.z.array(v4.z.string()).nullable(),
visibleWorkflows: v4.z.array(v4.z.string()).nullable()
});
var builderModelPolicySchema = v4.z.object({
active: v4.z.boolean(),
pickerVisible: v4.z.boolean().optional(),
allowed: v4.z.array(providerModelEntrySchema).optional(),
default: defaultModelEntrySchema.optional()
});
var builderSettingsResponseSchema = v4.z.object({
enabled: v4.z.boolean(),
features: v4.z.object({
agent: agentFeaturesSchema.optional()
}).optional(),
configuration: v4.z.object({
agent: agentConfigurationSchema.optional()
}).optional(),
modelPolicy: builderModelPolicySchema.optional(),
/**
* Resolved picker visibility for tools/agents/workflows. Always present when
* the builder is enabled. Omitted when the builder is disabled.
*/
picker: builderPickerSchema.optional(),
/**
* Non-fatal warnings produced by `EditorAgentBuilder`'s constructor-time
* validation (e.g. allowlist entries with unknown provider strings, or
* picker allowlist entries that don't match a registered ID). UI surfaces
* these as a banner in the Builder admin view.
*/
modelPolicyWarnings: v4.z.array(v4.z.string()).optional()
});
var infrastructureStatusResponseSchema = v4.z.object({
channels: v4.z.object({
providers: v4.z.array(
v4.z.object({
id: v4.z.string(),
name: v4.z.string(),
isConfigured: v4.z.boolean(),
routeCount: v4.z.number()
})
)
}),
browser: v4.z.object({
type: v4.z.string().nullable(),
provider: v4.z.string().nullable(),
env: v4.z.string().nullable(),
registered: v4.z.boolean(),
availableProviders: v4.z.array(v4.z.string()),
config: v4.z.array(v4.z.object({ key: v4.z.string(), value: v4.z.string() }))
}),
workspace: v4.z.object({
type: v4.z.string().nullable(),
workspaceId: v4.z.string().nullable(),
name: v4.z.string().nullable(),
source: v4.z.string().nullable(),
registered: v4.z.boolean(),
hasFilesystem: v4.z.boolean(),
hasSandbox: v4.z.boolean(),
filesystemProvider: v4.z.string().nullable(),
sandboxProvider: v4.z.string().nullable(),
config: v4.z.array(v4.z.object({ key: v4.z.string(), value: v4.z.string() }))
}),
registries: v4.z.object({
skillsSh: v4.z.object({
enabled: v4.z.boolean()
})
})
});
var builderAvailableModelsResponseSchema = v4.z.object({
providers: v4.z.array(chunkZQ4GVMYG_cjs.providerSchema)
});
exports.agentConfigurationSchema = agentConfigurationSchema;
exports.agentFeaturesSchema = agentFeaturesSchema;
exports.agentModelsSchema = agentModelsSchema;
exports.builderAvailableModelsResponseSchema = builderAvailableModelsResponseSchema;
exports.builderModelPolicySchema = builderModelPolicySchema;
exports.builderPickerSchema = builderPickerSchema;
exports.builderSettingsResponseSchema = builderSettingsResponseSchema;
exports.defaultModelEntrySchema = defaultModelEntrySchema;
exports.infrastructureStatusResponseSchema = infrastructureStatusResponseSchema;
exports.pickerAllowlistSchema = pickerAllowlistSchema;
exports.providerModelEntrySchema = providerModelEntrySchema;
//# sourceMappingURL=chunk-VBPYR5ZH.cjs.map
//# sourceMappingURL=chunk-VBPYR5ZH.cjs.map
{"version":3,"sources":["../src/server/schemas/editor-builder.ts"],"names":["z","providerSchema"],"mappings":"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","file":"chunk-VBPYR5ZH.cjs","sourcesContent":["import { z } from 'zod/v4';\nimport { providerSchema } from './agents';\n\n/**\n * Agent feature flags for the builder.\n *\n * Wire format: each key is an optional boolean. The server normalizes admin\n * input via `resolveAgentFeatures` (default-on semantics): any omitted key\n * resolves to `true`; admins opt out by setting a key to `false`. The\n * `GET /editor/builder/settings` response always carries a fully-resolved\n * object — clients should still use strict `=== true` checks.\n *\n * Special cases:\n * - `browser`: only resolves to `true` when `configuration.agent.browser` is\n * provided. Omitted with no config ⇒ silently `false` (no warning).\n * Explicit `true` with no config ⇒ warns and downgrades to `false`.\n */\nexport const agentFeaturesSchema = z.object({\n tools: z.boolean().optional(),\n agents: z.boolean().optional(),\n workflows: z.boolean().optional(),\n scorers: z.boolean().optional(),\n skills: z.boolean().optional(),\n memory: z.boolean().optional(),\n variables: z.boolean().optional(),\n favorites: z.boolean().optional(),\n avatarUpload: z.boolean().optional(),\n browser: z.boolean().optional(),\n /**\n * Whether the model picker is visible in the Agent Builder.\n * Omitted ⇒ picker visible (default-on). Explicit `false` ⇒ picker hidden\n * (locked mode); `models.default` is required and applied.\n */\n model: z.boolean().optional(),\n});\n\n/**\n * Allowlist + default-model entries for {@link agentModelsSchema}.\n *\n * Four standalone schemas (known × custom × entry × default) joined with `z.union`.\n * The schema does NOT validate `provider` against the runtime registry — invalid strings\n * surface as warnings during Phase 4 config validation.\n *\n * NOTE: `z.union(...).extend()` does not exist; that's why these are separate schemas.\n */\n// All four schemas are `.strict()` so typos like `modelID` or `Provider` are\n// rejected up-front instead of silently widening the policy.\nconst knownProviderEntrySchema = z\n .object({\n provider: z.string().min(1),\n modelId: z.string().min(1).optional(),\n })\n .strict();\n\nconst customProviderEntrySchema = z\n .object({\n kind: z.literal('custom'),\n provider: z.string().min(1),\n modelId: z.string().min(1).optional(),\n })\n .strict();\n\nconst knownDefaultModelEntrySchema = z\n .object({\n provider: z.string().min(1),\n modelId: z.string().min(1),\n })\n .strict();\n\nconst customDefaultModelEntrySchema = z\n .object({\n kind: z.literal('custom'),\n provider: z.string().min(1),\n modelId: z.string().min(1),\n })\n .strict();\n\n// Custom-tagged variants must come first so the discriminator (`kind: 'custom'`)\n// wins over the more permissive known-provider schemas. Otherwise the union\n// silently drops the `kind` field on matching inputs.\nexport const providerModelEntrySchema = z.union([customProviderEntrySchema, knownProviderEntrySchema]);\nexport const defaultModelEntrySchema = z.union([customDefaultModelEntrySchema, knownDefaultModelEntrySchema]);\n\n/**\n * Admin-controlled model allowlist + default for the Agent Builder.\n */\nexport const agentModelsSchema = z.object({\n allowed: z.array(providerModelEntrySchema).optional(),\n default: defaultModelEntrySchema.optional(),\n});\n\n/**\n * Admin-controlled allowlist for one of the builder pickers (tools/agents/workflows).\n *\n * Semantics:\n * - omitted ⇒ unrestricted (all registered IDs shown in the picker).\n * - `allowed: []` ⇒ empty picker (explicit lockdown).\n * - `allowed: [...ids]` ⇒ only the listed IDs are shown.\n */\nexport const pickerAllowlistSchema = z\n .object({\n allowed: z.array(z.string()).optional(),\n })\n .strict();\n\n/**\n * Agent configuration (pinned, non-overridable settings).\n *\n * Known structured field: `models` (Phase 1 contracts).\n * Other keys flow through unchanged for forward compatibility.\n */\nexport const agentConfigurationSchema = z\n .object({\n models: agentModelsSchema.optional(),\n tools: pickerAllowlistSchema.optional(),\n agents: pickerAllowlistSchema.optional(),\n workflows: pickerAllowlistSchema.optional(),\n })\n .catchall(z.unknown());\n\n/**\n * Resolved picker visibility returned in `BuilderSettingsResponse`.\n *\n * Per kind:\n * - `null` ⇒ unrestricted (show all registered entries).\n * - `string[]` ⇒ explicit allowlist (may be empty to show none).\n */\nexport const builderPickerSchema = z.object({\n visibleTools: z.array(z.string()).nullable(),\n visibleAgents: z.array(z.string()).nullable(),\n visibleWorkflows: z.array(z.string()).nullable(),\n});\n\n/**\n * Derived `BuilderModelPolicy`. Server-owned shape so the playground hook is a\n * thin selector and the UI never re-derives policy from `features` / `configuration`.\n *\n * Mirrors `BuilderModelPolicy` from `@mastra/core/agent-builder/ee`:\n * - `active: false` ⇒ all other fields ignored.\n * - `active: true` + `pickerVisible: false` (locked) ⇒ `default` set in valid configs.\n * - `allowed`/`default` are passed through verbatim when present.\n */\nexport const builderModelPolicySchema = z.object({\n active: z.boolean(),\n pickerVisible: z.boolean().optional(),\n allowed: z.array(providerModelEntrySchema).optional(),\n default: defaultModelEntrySchema.optional(),\n});\n\n/**\n * Response schema for GET /editor/builder/settings\n */\nexport const builderSettingsResponseSchema = z.object({\n enabled: z.boolean(),\n features: z\n .object({\n agent: agentFeaturesSchema.optional(),\n })\n .optional(),\n configuration: z\n .object({\n agent: agentConfigurationSchema.optional(),\n })\n .optional(),\n modelPolicy: builderModelPolicySchema.optional(),\n /**\n * Resolved picker visibility for tools/agents/workflows. Always present when\n * the builder is enabled. Omitted when the builder is disabled.\n */\n picker: builderPickerSchema.optional(),\n /**\n * Non-fatal warnings produced by `EditorAgentBuilder`'s constructor-time\n * validation (e.g. allowlist entries with unknown provider strings, or\n * picker allowlist entries that don't match a registered ID). UI surfaces\n * these as a banner in the Builder admin view.\n */\n modelPolicyWarnings: z.array(z.string()).optional(),\n});\n\n/**\n * Infrastructure status response for Agent Builder admin diagnostics.\n *\n * Reports the Agent Builder-specific primitive configuration plus lightweight\n * runtime resolution state where useful.\n */\nexport const infrastructureStatusResponseSchema = z.object({\n channels: z.object({\n providers: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n isConfigured: z.boolean(),\n routeCount: z.number(),\n }),\n ),\n }),\n browser: z.object({\n type: z.string().nullable(),\n provider: z.string().nullable(),\n env: z.string().nullable(),\n registered: z.boolean(),\n availableProviders: z.array(z.string()),\n config: z.array(z.object({ key: z.string(), value: z.string() })),\n }),\n workspace: z.object({\n type: z.string().nullable(),\n workspaceId: z.string().nullable(),\n name: z.string().nullable(),\n source: z.string().nullable(),\n registered: z.boolean(),\n hasFilesystem: z.boolean(),\n hasSandbox: z.boolean(),\n filesystemProvider: z.string().nullable(),\n sandboxProvider: z.string().nullable(),\n config: z.array(z.object({ key: z.string(), value: z.string() })),\n }),\n registries: z.object({\n skillsSh: z.object({\n enabled: z.boolean(),\n }),\n }),\n});\n\n/**\n * Response schema for GET /editor/builder/models/available.\n *\n * Same provider shape as GET /agents/providers, but each provider's `models`\n * list is already filtered by the active builder model policy (server applies\n * the EE allowlist). Providers with no allowed models are omitted entirely so\n * the Studio model picker can render the response verbatim.\n */\nexport const builderAvailableModelsResponseSchema = z.object({\n providers: z.array(providerSchema),\n});\n\nexport type BuilderAvailableModelsResponse = z.infer<typeof builderAvailableModelsResponseSchema>;\n\nexport type InfrastructureStatus = z.infer<typeof infrastructureStatusResponseSchema>;\n\nexport type AgentFeatures = z.infer<typeof agentFeaturesSchema>;\nexport type AgentConfiguration = z.infer<typeof agentConfigurationSchema>;\nexport type BuilderSettingsResponse = z.infer<typeof builderSettingsResponseSchema>;\nexport type ProviderModelEntrySchema = z.infer<typeof providerModelEntrySchema>;\nexport type DefaultModelEntrySchema = z.infer<typeof defaultModelEntrySchema>;\nexport type AgentModelsSchema = z.infer<typeof agentModelsSchema>;\nexport type BuilderModelPolicySchema = z.infer<typeof builderModelPolicySchema>;\nexport type PickerAllowlistSchema = z.infer<typeof pickerAllowlistSchema>;\nexport type BuilderPickerSchema = z.infer<typeof builderPickerSchema>;\n"]}
import { storedSkillIdPathParams } from './chunk-UIRQU4GW.js';
import { favoriteToggleResponseSchema } from './chunk-SFPN7SHZ.js';
import { requireBuilderFeature } from './chunk-GZUFJQ5I.js';
import { getCallerAuthorId, assertReadAccess } from './chunk-SXZS6VZ3.js';
import { assertStoredResourceScope, getStoredResourceScope } from './chunk-EOGTJIPF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-WLQ4XLHG.js.map
//# sourceMappingURL=chunk-WLQ4XLHG.js.map
{"version":3,"sources":["../src/server/handlers/stored-skill-favorites.ts"],"names":[],"mappings":"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","file":"chunk-WLQ4XLHG.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 { apiSchemaManifestResponseSchema, systemPackagesResponseSchema } from './chunk-ZA2G7XV3.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-YKMSPSZR.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 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,
observabilityRuntimeStrategy
};
} catch (error) {
return handleError(error, "Error getting system packages");
}
}
});
export { GET_API_SCHEMA_ROUTE, GET_SYSTEM_PACKAGES_ROUTE };
//# sourceMappingURL=chunk-XDR5CTSX.js.map
//# sourceMappingURL=chunk-XDR5CTSX.js.map
{"version":3,"sources":["../src/server/handlers/system.ts"],"names":[],"mappings":"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","file":"chunk-XDR5CTSX.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 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 observabilityRuntimeStrategy,\n };\n } catch (error) {\n return handleError(error, 'Error getting system packages');\n }\n },\n});\n"]}
import { FAVORITE_STORED_SKILL_ROUTE, UNFAVORITE_STORED_SKILL_ROUTE } from './chunk-WLQ4XLHG.js';
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-LQXFAW5L.js';
import { LIST_STORED_WORKSPACES_ROUTE, GET_STORED_WORKSPACE_ROUTE, CREATE_STORED_WORKSPACE_ROUTE, UPDATE_STORED_WORKSPACE_ROUTE, DELETE_STORED_WORKSPACE_ROUTE } from './chunk-ICWJHWEM.js';
import { GET_SYSTEM_PACKAGES_ROUTE, GET_API_SCHEMA_ROUTE } from './chunk-XDR5CTSX.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-VWZFDHUG.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-JGHI6QE5.js';
import { FAVORITE_STORED_AGENT_ROUTE, UNFAVORITE_STORED_AGENT_ROUTE } from './chunk-DPTBGWU7.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-J63TLQKU.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-L2M2Z5CU.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-F3V5T2ON.js';
import { LIST_STORED_SCORERS_ROUTE, GET_STORED_SCORER_ROUTE, CREATE_STORED_SCORER_ROUTE, UPDATE_STORED_SCORER_ROUTE, DELETE_STORED_SCORER_ROUTE } from './chunk-LHEZDXWV.js';
import { LIST_PROCESSOR_PROVIDERS_ROUTE, GET_PROCESSOR_PROVIDER_ROUTE } from './chunk-RUOOTVGK.js';
import { LIST_PROCESSORS_ROUTE, GET_PROCESSOR_BY_ID_ROUTE, EXECUTE_PROCESSOR_ROUTE } from './chunk-SMQKZ2QV.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-OJLVR6RK.js';
import { LIST_SCHEDULES_ROUTE, GET_SCHEDULE_ROUTE, LIST_SCHEDULE_TRIGGERS_ROUTE, PAUSE_SCHEDULE_ROUTE, RESUME_SCHEDULE_ROUTE } from './chunk-RXSZMJIR.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-RUBHF3J4.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-H4HJRAHU.js';
import { GET_EDITOR_BUILDER_SETTINGS_ROUTE, GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE, GET_INFRASTRUCTURE_STATUS_ROUTE } from './chunk-GZUFJQ5I.js';
import { LIST_HEARTBEATS_ROUTE, GET_HEARTBEAT_ROUTE, CREATE_HEARTBEAT_ROUTE, UPDATE_HEARTBEAT_ROUTE, DELETE_HEARTBEAT_ROUTE, PAUSE_HEARTBEAT_ROUTE, RESUME_HEARTBEAT_ROUTE, RUN_HEARTBEAT_ROUTE } from './chunk-7WWWWHIQ.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-KC52XQSP.js';
import { BACKGROUND_TASK_STREAM_ROUTE, LIST_BACKGROUND_TASKS_ROUTE, GET_BACKGROUND_TASK_ROUTE } from './chunk-V6Z2DEIO.js';
import { LIST_BUILDER_REGISTRIES_ROUTE, BUILDER_REGISTRY_SEARCH_ROUTE, BUILDER_REGISTRY_POPULAR_ROUTE, BUILDER_REGISTRY_PREVIEW_ROUTE, BUILDER_REGISTRY_INSTALL_ROUTE } from './chunk-5C5P4MZE.js';
import { LIST_CHANNEL_PLATFORMS_ROUTE, LIST_CHANNEL_INSTALLATIONS_ROUTE, CONNECT_CHANNEL_ROUTE, DISCONNECT_CHANNEL_ROUTE } from './chunk-AXS2E3ZS.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-A5GLESMH.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-LQZHT5U7.js';
import { LIST_WORKSPACES_ROUTE, GET_WORKSPACE_ROUTE, WORKSPACE_FS_ROUTES, WORKSPACE_SEARCH_ROUTES, WORKSPACE_SKILLS_ROUTES, WORKSPACE_SKILLS_SH_ROUTES } from './chunk-TWUWF3AU.js';
import { EXECUTE_AGENT_TOOL_ROUTE, GET_AGENT_TOOL_ROUTE, LIST_TOOLS_ROUTE, GET_TOOL_BY_ID_ROUTE, EXECUTE_TOOL_ROUTE } from './chunk-KR2OUW3N.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-DX4ROVTA.js';
import { CREATE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE } from './chunk-ZJM23PJU.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-22YWJT5H.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-LZMQLV2S.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-PRJENCIC.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-7WVY3KMP.js';
import { CREATE_CONVERSATION_ROUTE, GET_CONVERSATION_ROUTE, GET_CONVERSATION_ITEMS_ROUTE, DELETE_CONVERSATION_ROUTE } from './chunk-YAEG3FIX.js';
import { LIST_LOG_TRANSPORTS_ROUTE, LIST_LOGS_ROUTE, LIST_LOGS_BY_RUN_ID_ROUTE } from './chunk-SDSDV6TA.js';
import { GET_AGENT_CARD_ROUTE, AGENT_EXECUTION_ROUTE } from './chunk-ZBOTGUPW.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, 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-2MEUH7JT.js';
import { AUTH_ROUTES } from './chunk-BEPGHVMJ.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-NZBVBHKY.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-3MJF6POS.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-PHATOO2U.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,
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/heartbeats.ts
var HEARTBEATS_ROUTES = [
LIST_HEARTBEATS_ROUTE,
GET_HEARTBEAT_ROUTE,
CREATE_HEARTBEAT_ROUTE,
UPDATE_HEARTBEAT_ROUTE,
DELETE_HEARTBEAT_ROUTE,
PAUSE_HEARTBEAT_ROUTE,
RESUME_HEARTBEAT_ROUTE,
RUN_HEARTBEAT_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,
LIST_SCHEDULE_TRIGGERS_ROUTE,
PAUSE_SCHEDULE_ROUTE,
RESUME_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,
...HEARTBEATS_ROUTES,
...CHANNELS_ROUTES,
...AGENT_CONTROLLER_ROUTES
];
export { SERVER_ROUTES, deriveAction, derivePermission, extractResource, getEffectivePermission };
//# sourceMappingURL=chunk-XJLHTR7T.js.map
//# sourceMappingURL=chunk-XJLHTR7T.js.map

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

import { conversationObjectSchema, createConversationBodySchema, conversationIdPathParams, conversationItemsListSchema, conversationDeletedSchema } from './chunk-WOE6XG6B.js';
import { mapMastraMessagesToConversationItems } from './chunk-TLLV2JP5.js';
import { getAgentMemoryStore, findConversationThreadAcrossAgents } from './chunk-L4DD3HSB.js';
import { getAgentFromSystem } from './chunk-2MEUH7JT.js';
import { MastraFGAPermissions, getEffectiveResourceId } from './chunk-JBSUT5XF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-YAEG3FIX.js.map
//# sourceMappingURL=chunk-YAEG3FIX.js.map
{"version":3,"sources":["../src/server/handlers/conversations.ts"],"names":[],"mappings":"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","file":"chunk-YAEG3FIX.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 chunkSCY53JIH_cjs = require('./chunk-SCY53JIH.cjs');
var chunkZQ4GVMYG_cjs = require('./chunk-ZQ4GVMYG.cjs');
var chunk42M6Y2OD_cjs = require('./chunk-42M6Y2OD.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var chunkYWUVDFQZ_cjs = require('./chunk-YWUVDFQZ.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.cjs');
var chunk3YQ7NWF6_cjs = require('./chunk-3YQ7NWF6.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 chunk3YQ7NWF6_cjs.standardSchemaToJSONSchema(chunk3YQ7NWF6_cjs.toStandardSchema5(schema), { target: "draft-2020-12" });
}
function serializeSchema(schema) {
const jsonSchema = schemaToJsonSchema(resolveLazySchema(schema));
if (jsonSchema === void 0) return void 0;
return chunkYWUVDFQZ_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 ? chunkYWUVDFQZ_cjs.stringify(resolvedInput.jsonSchema) : void 0,
outputSchema: resolvedOutput && typeof resolvedOutput === "object" && "jsonSchema" in resolvedOutput ? chunkYWUVDFQZ_cjs.stringify(resolvedOutput.jsonSchema) : void 0
};
}
return {
...tool,
inputSchema: serializeSchema(tool.inputSchema),
outputSchema: serializeSchema(tool.outputSchema),
requestContextSchema: serializeSchema(tool.requestContextSchema)
};
}
var LIST_TOOLS_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/tools",
responseType: "json",
responseSchema: chunkZQ4GVMYG_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", chunk42M6Y2OD_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/tools/:toolId",
responseType: "json",
pathParamSchema: chunkZQ4GVMYG_cjs.toolIdPathParams,
responseSchema: chunkZQ4GVMYG_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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/tools/:toolId/execute",
responseType: "json",
pathParamSchema: chunkZQ4GVMYG_cjs.toolIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.optionalRunIdSchema,
bodySchema: chunkZQ4GVMYG_cjs.executeToolContextBodySchema,
responseSchema: chunkZQ4GVMYG_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;
chunk42M6Y2OD_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/agents/:agentId/tools/:toolId",
responseType: "json",
pathParamSchema: chunkZQ4GVMYG_cjs.agentToolPathParams,
responseSchema: chunkZQ4GVMYG_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 chunkSCY53JIH_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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agents/:agentId/tools/:toolId/execute",
responseType: "json",
pathParamSchema: chunkZQ4GVMYG_cjs.agentToolPathParams,
bodySchema: chunkZQ4GVMYG_cjs.executeToolBodySchema,
responseSchema: chunkZQ4GVMYG_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 chunkSCY53JIH_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-YRZYCQGE.cjs.map
//# sourceMappingURL=chunk-YRZYCQGE.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-YRZYCQGE.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 { agentCardResponseSchema, a2aAgentIdPathParams, agentExecutionResponseSchema, agentExecutionBodySchema } from './chunk-KEE6UMGC.js';
import { getAgentFromSystem } from './chunk-2MEUH7JT.js';
import { getPublicOrigin } from './chunk-BEPGHVMJ.js';
import { convertInstructionsToString } from './chunk-EOGTJIPF.js';
import { createRoute } from './chunk-Z5MTOVTR.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-ZBOTGUPW.js.map
//# sourceMappingURL=chunk-ZBOTGUPW.js.map

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

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-L4DD3HSB.js';
import { getAgentFromSystem } from './chunk-2MEUH7JT.js';
import { MastraFGAPermissions, getEffectiveThreadId, getEffectiveResourceId, enforceThreadAccess } from './chunk-JBSUT5XF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-ZJM23PJU.js.map
//# sourceMappingURL=chunk-ZJM23PJU.js.map
{"version":3,"sources":["../src/server/handlers/responses.ts"],"names":["existingThread","threadId","createdThread","completedState"],"mappings":";;;;;;;;;;;;AAAA,IAAA,iBAAA,GAAA;AAAA,QAAA,CAAA,iBAAA,EAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,qBAAA,EAAA,MAAA,qBAAA;AAAA,EAAA,kBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAiHA,IAAM,2BAAA,GAA8B;AAAA,EAClC,IAAA,EAAM,QAAA;AAAA,EACN,oBAAA,EAAsB;AACxB,CAAA;AAEA,SAAS,YAAA,CAAa,IAAA,EAAsB,MAAA,GAAiB,GAAA,EAAe;AAC1E,EAAA,OAAO,IAAI,QAAA,CAAS,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,EAAG;AAAA,IACxC,MAAA;AAAA,IACA,OAAA,EAAS;AAAA,MACP,cAAA,EAAgB;AAAA;AAClB,GACD,CAAA;AACH;AAEA,SAAS,uBAAuB,IAAA,EAAkC;AAChE,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,QAAQ,IAAA,CAAK,OAAO,IAAA;AAAM,IACxB,KAAK,aAAA;AACH,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,2BAAA;AAAA,QACR,mBAAA,EAAqB;AAAA,OACvB;AAAA,IACF,KAAK,aAAA;AACH,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,KAAK,MAAA,CAAO;AAAA,OACtB;AAAA,IACF;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAEA,SAAS,4BAAA,CAA6B,UAA0B,UAAA,EAAoB;AAClF,EAAA,OACE,SAAS,MAAA,CAAO,IAAA;AAAA,IACd,CAAC,IAAA,KACC,IAAA,CAAK,IAAA,KAAS,SAAA,IAAa,KAAK,EAAA,KAAO;AAAA,GAC3C,IAAK,IAAA;AAET;AASA,eAAe,6BAAA,CAA8B;AAAA,EAC3C,KAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA;AAAA,EACA,0BAAA;AAAA,EACA;AACF,CAAA,EAM2C;AACzC,EAAA,IAAI,cAAA,IAAkB,0BAAA,IAA8B,0BAAA,CAA2B,MAAA,CAAO,OAAO,cAAA,EAAgB;AAC3G,IAAA,MAAM,IAAI,cAAc,GAAA,EAAK;AAAA,MAC3B,OAAA,EACE;AAAA,KACH,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,0BAAA,EAA4B;AAC9B,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,2BAA2B,MAAA,CAAO,EAAA;AAAA,MAC5C,UAAA,EAAY,2BAA2B,MAAA,CAAO;AAAA,KAChD;AAAA,EACF;AAEA,EAAA,MAAM,iBAAA,GAAoB,oBAAA,CAAqB,cAAA,EAAgB,MAAS,CAAA;AACxE,EAAA,MAAM,mBAAA,GAAsB,sBAAA,CAAuB,cAAA,EAAgB,MAAS,CAAA;AAE5E,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,cAAA,IAAkB,CAAC,iBAAA,EAAmB;AACnD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAS,MAAM,KAAA,CAAM,SAAA,CAAU,EAAE,gBAAgB,CAAA;AACvD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,MAAM,IAAI,cAAc,GAAA,EAAK;AAAA,QAC3B,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,MAAMA,kBAAiB,MAAM,MAAA,CAAO,cAAc,EAAE,QAAA,EAAU,gBAAgB,CAAA;AAC9E,IAAA,IAAI,CAACA,eAAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,aAAA,EAAgB,cAAc,kBAAkB,CAAA;AAAA,IAC1F;AAEA,IAAA,MAAM,mBAAA,CAAoB;AAAA,MACxB,MAAA,EAAQ,MAAM,iBAAA,EAAkB;AAAA,MAChC,cAAA;AAAA,MACA,QAAA,EAAU,cAAA;AAAA,MACV,MAAA,EAAQA,eAAAA;AAAA,MACR;AAAA,KACD,CAAA;AACD,IAAA,OAAO;AAAA,MACL,UAAUA,eAAAA,CAAe,EAAA;AAAA,MACzB,UAAA,EAAY,uBAAuBA,eAAAA,CAAe;AAAA,KACpD;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAMC,YAAW,UAAA,EAAW;AAC5B,IAAA,MAAMC,cAAAA,GAAgB,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MAC9C,QAAA,EAAAD,SAAAA;AAAA,MACA,YAAY,mBAAA,IAAuBA;AAAA,KACpC,CAAA;AAED,IAAA,OAAO;AAAA,MACL,UAAUC,cAAAA,CAAc,EAAA;AAAA,MACxB,YAAYA,cAAAA,CAAc;AAAA,KAC5B;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,iBAAA;AACjB,EAAA,MAAM,iBAAiB,MAAM,MAAA,CAAO,aAAA,CAAc,EAAE,UAAU,CAAA;AAC9D,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,MAAM,mBAAA,CAAoB;AAAA,MACxB,MAAA,EAAQ,MAAM,iBAAA,EAAkB;AAAA,MAChC,cAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA,EAAQ,cAAA;AAAA,MACR;AAAA,KACD,CAAA;AACD,IAAA,OAAO;AAAA,MACL,UAAU,cAAA,CAAe,EAAA;AAAA,MACzB,UAAA,EAAY,uBAAuB,cAAA,CAAe;AAAA,KACpD;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAa,mBAAA,IAAuB,QAAA;AAC1C,EAAA,MAAM,aAAA,GAAgB,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,IAC9C,QAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,UAAU,aAAA,CAAc,EAAA;AAAA,IACxB,YAAY,aAAA,CAAc;AAAA,GAC5B;AACF;AAEA,SAAS,sBAAsB,aAAA,EAA8C;AAC3E,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ;AAAA,MACN,QAAQ,aAAA,CAAc,QAAA;AAAA,MACtB,UAAU,aAAA,CAAc;AAAA;AAC1B,GACF;AACF;AAKA,eAAe,oBAAA,CAAqB;AAAA,EAClC,MAAA;AAAA,EACA;AACF,CAAA,EAGuC;AACrC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,cAAc,GAAA,EAAK;AAAA,MAC3B,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0DAA0D,CAAA;AAAA,EACpG;AAEA,EAAA,OAAO,kBAAA,CAAmB,EAAE,MAAA,EAAQ,OAAA,EAAS,CAAA;AAC/C;AAEA,eAAe,uBAAA,CAAwB;AAAA,EACrC,KAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAI2B;AACzB,EAAA,MAAM,mBAAmB,MAAM,mBAAA,CAAoB,EAAE,KAAA,EAAO,gBAAgB,CAAA;AAC5E,EAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,IAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,cAAc,CAAA;AAAA,EACxD;AAEA,EAAA,OAAO,gBAAA;AACT;AAKA,eAAe,eAAA,CAAgB;AAAA,EAC7B,KAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,IAAA;AAAA,EACA,eAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAWG;AACD,EAAA,MAAM,eAAA,GAAkB,sBAAsB,aAAa,CAAA;AAC3D,EAAA,MAAM,gBAAA,GAAmB,uBAAuB,IAAI,CAAA;AACpD,EAAA,MAAM,cAAc,aAAA,GAAgB,EAAE,KAAA,EAAO,aAAA,KAAkB,EAAC;AAChE,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,YAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA;AAAA,IACA,GAAG,WAAA;AAAA,IACH,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,GAAI,mBAAmB;AAAC,GAC1B;AAEA,EAAA,IAAI,aAAA,CAAc,yBAAyB,IAAA,EAAM;AAC/C,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,OAAQ,MAAM,KAAA,CAAM,cAAA,CAAe,KAAA,EAAO;AAAA,QACxC,YAAA;AAAA,QACA,cAAA;AAAA,QACA,WAAA;AAAA,QACA,GAAG,WAAA;AAAA,QACH,QAAQ,gBAAA,EAAkB,MAAA;AAAA,QAC1B,eAAA;AAAA,QACA,YAAY,aAAA,CAAc,UAAA;AAAA,QAC1B,UAAU,aAAA,CAAc;AAAA,OAChB,CAAA;AAAA,IACZ;AAEA,IAAA,OAAQ,MAAM,KAAA,CAAM,cAAA,CAAe,KAAA,EAAO;AAAA,MACxC,YAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA,GAAG,WAAA;AAAA,MACH,QAAQ,gBAAA,EAAkB,MAAA;AAAA,MAC1B;AAAA,KACQ,CAAA;AAAA,EACZ;AAEA,EAAA,OAAQ,MAAM,KAAA,CAAM,QAAA,CAAS,KAAA,EAAO,aAAsB,CAAA;AAC5D;AAKA,eAAe,aAAA,CAAc;AAAA,EAC3B,KAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,IAAA;AAAA,EACA,eAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAWG;AACD,EAAA,MAAM,eAAA,GAAkB,sBAAsB,aAAa,CAAA;AAC3D,EAAA,MAAM,gBAAA,GAAmB,uBAAuB,IAAI,CAAA;AACpD,EAAA,MAAM,cAAc,aAAA,GAAgB,EAAE,KAAA,EAAO,aAAA,KAAkB,EAAC;AAChE,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,YAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA;AAAA,IACA,GAAG,WAAA;AAAA,IACH,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,GAAI,mBAAmB;AAAC,GAC1B;AAEA,EAAA,IAAI,aAAA,CAAc,yBAAyB,IAAA,EAAM;AAC/C,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,OAAQ,MAAM,KAAA,CAAM,YAAA,CAAa,KAAA,EAAO;AAAA,QACtC,YAAA;AAAA,QACA,cAAA;AAAA,QACA,WAAA;AAAA,QACA,GAAG,WAAA;AAAA,QACH,QAAQ,gBAAA,EAAkB,MAAA;AAAA,QAC1B,eAAA;AAAA,QACA,YAAY,aAAA,CAAc,UAAA;AAAA,QAC1B,UAAU,aAAA,CAAc;AAAA,OAChB,CAAA;AAAA,IACZ;AAEA,IAAA,OAAQ,MAAM,KAAA,CAAM,YAAA,CAAa,KAAA,EAAO;AAAA,MACtC,YAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA,GAAG,WAAA;AAAA,MACH,QAAQ,gBAAA,EAAkB,MAAA;AAAA,MAC1B;AAAA,KACQ,CAAA;AAAA,EACZ;AAEA,EAAA,OAAQ,MAAM,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,aAAsB,CAAA;AAC1D;AAEA,eAAe,aAAa,MAAA,EAA4E;AACtG,EAAA,OAAQ,OAAO,MAAA,CAAO,UAAA,IAAc,MAAA,CAAO,KAAA,IAAS,IAAA,CAAA;AACtD;AAEA,eAAe,wBACb,MAAA,EAC+B;AAC/B,EAAA,OAAQ,OAAO,OAAO,gBAAA,IAAoB,MAAA,CAAA;AAC5C;AAEA,eAAe,oBACb,MAAA,EAC6B;AAC7B,EAAA,OAAQ,MAAM,OAAO,YAAA,IAAiB,MAAA;AACxC;AAEA,eAAe,YAAY,MAAA,EAAyE;AAClG,EAAA,OAAQ,MAAM,OAAO,IAAA,IAAS,EAAA;AAChC;AAKA,eAAe,6BAAA,CACb,QACA,YAAA,EACiC;AACjC,EAAA,MAAM,KAAA,GAAQ,MAAM,YAAA,CAAa,MAAM,CAAA;AAEvC,EAAA,OAAO;AAAA,IACL,aAAa,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAAA,IACzC,MAAA,EAAQ,gBAAA,CAAiB,MAAM,mBAAA,CAAoB,MAAM,CAAC,CAAA;AAAA,IAC1D,IAAA,EAAO,MAAM,WAAA,CAAY,MAAM,CAAA,IAAM,YAAA;AAAA,IACrC,KAAA;AAAA,IACA,YAAA,EAAc,gBAAgB,KAAK,CAAA;AAAA,IACnC,eAAA,EAAiB,MAAM,uBAAA,CAAwB,MAAM;AAAA,GACvD;AACF;AAKA,eAAe,sBAAA,CAAuB;AAAA,EACpC,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EASkB;AAChB,EAAA,IAAI,CAAC,QAAA,IAAY,CAAC,aAAA,EAAe;AAC/B,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,yBAAA,CAA0B;AAAA,IAC9B,WAAA,EAAa,gBAAA;AAAA,IACb,UAAA;AAAA,IACA,QAAA,EAAU;AAAA,MACR,GAAG,QAAA;AAAA,MACH,aAAa,cAAA,CAAe,WAAA;AAAA,MAC5B,QAAQ,cAAA,CAAe,MAAA;AAAA,MACvB,OAAO,cAAA,CAAe,YAAA;AAAA,MACtB,iBAAiB,cAAA,CAAe,eAAA;AAAA,MAChC,YAAY,EAAC;AAAA,MACb;AAAA,KACF;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AAKA,eAAe,gBAAA,CAAiB;AAAA,EAC9B,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAkB+B;AAC7B,EAAA,MAAM,cAAA,GAAiB,MAAM,6BAAA,CAA8B,MAAA,EAAQ,YAAY,CAAA;AAC/E,EAAA,MAAM,aAAA,GAAgB,sBAAsB,cAAc,CAAA;AAC1D,EAAA,MAAM,gBAAA,GAAmB,MAAM,qCAAA,CAAsC;AAAA,IACnE,MAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAM,cAAA,CAAe,IAAA;AAAA,IACrB,aAAA;AAAA,IACA,mBAAA,EAAqB,gBAAgB,aAAA,GAAgB;AAAA,GACtD,CAAA;AACD,EAAA,MAAM,WAAW,sBAAA,CAAuB;AAAA,IACtC,UAAA;AAAA,IACA,eAAA,EAAiB,UAAA;AAAA,IACjB,KAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAa,cAAA,CAAe,WAAA;AAAA,IAC5B,QAAQ,cAAA,CAAe,MAAA;AAAA,IACvB,MAAM,cAAA,CAAe,IAAA;AAAA,IACrB,OAAO,cAAA,CAAe,KAAA;AAAA,IACtB,YAAA;AAAA,IACA,YAAY,gBAAA,CAAiB,IAAA;AAAA,IAC7B,kBAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAiB,cAAA,CAAe,eAAA;AAAA,IAChC,KAAA,EAAO,eAAA;AAAA,IACP,QAAA,EAAU,gBAAA;AAAA,IACV,mBAAA,EAAqB,aAAA;AAAA,IACrB,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAA,MAAM,sBAAA,CAAuB;AAAA,IAC3B,gBAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA,EAAU,gBAAA;AAAA,IACV,cAAA;AAAA,IACA,QAAA,EAAU,gBAAA;AAAA,IACV,aAAa,QAAA,CAAS;AAAA,GACvB,CAAA;AAED,EAAA,OAAO,EAAE,cAAA,EAAgB,QAAA,EAAU,gBAAA,EAAiB;AACtD;AAOA,eAAe,4BAAA,CAA6B;AAAA,EAC1C,IAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAI2C;AACzC,EAAA,MAAM,cAAA,GAAiB,mCAAA,CAAoC,IAAA,CAAK,KAAK,CAAA;AACrE,EAAA,IAAI,0BAAA,GAAwD,IAAA;AAC5D,EAAA,IAAI,aAAA,GAAkD,IAAA;AAEtD,EAAA,IAAI,KAAK,oBAAA,EAAsB;AAC7B,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,aAAA,GAAgB,MAAM,oBAAA,CAAqB,EAAE,QAAQ,OAAA,EAAS,IAAA,CAAK,UAAU,CAAA;AAC7E,MAAA,0BAAA,GAA6B,MAAM,sBAAA,CAAuB;AAAA,QACxD,KAAA,EAAO,aAAA;AAAA,QACP,YAAY,IAAA,CAAK,oBAAA;AAAA,QACjB;AAAA,OACD,CAAA;AAED,MAAA,IAAI,CAAC,0BAAA,EAA4B;AAC/B,QAAA,MAAM,wBAAA,GAA2B,MAAM,kCAAA,CAAmC;AAAA,UACxE,MAAA;AAAA,UACA,YAAY,IAAA,CAAK,oBAAA;AAAA,UACjB;AAAA,SACD,CAAA;AAED,QAAA,IAAI,wBAAA,EAA0B;AAC5B,UAAA,IAAI,wBAAA,CAAyB,QAAA,CAAS,OAAA,KAAY,IAAA,CAAK,QAAA,EAAU;AAC/D,YAAA,0BAAA,GAA6B,wBAAA;AAAA,UAC/B,CAAA,MAAO;AACL,YAAA,MAAM,IAAI,cAAc,GAAA,EAAK;AAAA,cAC3B,OAAA,EAAS,CAAA,gBAAA,EAAmB,IAAA,CAAK,oBAAoB,CAAA,kBAAA,EAAqB,yBAAyB,QAAA,CAAS,OAAO,CAAA,MAAA,EAAS,IAAA,CAAK,QAAQ,CAAA;AAAA,aAC1I,CAAA;AAAA,UACH;AAAA,QACF;AAEA,QAAA,IAAI,CAAC,0BAAA,EAA4B;AAC/B,UAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,gBAAA,EAAmB,IAAA,CAAK,oBAAoB,CAAA,cAAA,CAAA,EAAkB,CAAA;AAAA,QACxG;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0DAA0D,CAAA;AAAA,MACpG;AAEA,MAAA,0BAAA,GAA6B,MAAM,kCAAA,CAAmC;AAAA,QACpE,MAAA;AAAA,QACA,YAAY,IAAA,CAAK,oBAAA;AAAA,QACjB;AAAA,OACD,CAAA;AAED,MAAA,IAAI,CAAC,0BAAA,EAA4B;AAC/B,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,gBAAA,EAAmB,IAAA,CAAK,oBAAoB,CAAA,cAAA,CAAA,EAAkB,CAAA;AAAA,MACxG;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GACJ,aAAA,IACC,MAAM,oBAAA,CAAqB;AAAA,IAC1B,MAAA;AAAA,IACA,OAAA,EAAS,IAAA,CAAK,QAAA,IAAY,0BAAA,EAA4B,QAAA,CAAS;AAAA,GAChE,CAAA;AACH,EAAA,MAAM,aAAA,GAAgB,MAAM,KAAA,CAAM,QAAA,CAAS;AAAA,IACzC,cAAA;AAAA,IACA,aAAa,IAAA,CAAK;AAAA,GACnB,CAAA;AACD,EAAA,MAAM,aAAA,GACJ,IAAA,CAAK,KAAA,IAAA,CACJ,MAAM;AACL,IAAA,IAAI,aAAA,CAAc,QAAA,IAAY,aAAA,CAAc,OAAA,EAAS;AACnD,MAAA,MAAM,gBAAA,GAAmB,aAAA,CAAc,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA,GACxD,aAAA,CAAc,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,IACnC,aAAA,CAAc,QAAA;AAClB,MAAA,OAAO,CAAA,EAAG,gBAAgB,CAAA,CAAA,EAAI,aAAA,CAAc,OAAO,CAAA,CAAA;AAAA,IACrD;AAEA,IAAA,IAAI,cAAc,OAAA,EAAS;AACzB,MAAA,OAAO,aAAA,CAAc,OAAA;AAAA,IACvB;AAEA,IAAA,MAAM,IAAI,cAAc,GAAA,EAAK;AAAA,MAC3B,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH,CAAA,GAAG;AACL,EAAA,MAAM,WAAA,GAAc,KAAK,KAAA,IAAS,KAAA;AAClC,EAAA,MAAM,gBAAA,GAAmB,eAAe,OAAA,CAAQ,IAAA,CAAK,eAAe,CAAA,IAAK,OAAA,CAAQ,KAAK,oBAAoB,CAAA;AAC1G,EAAA,MAAM,gBAAA,GAAmB,gBAAA,GACrB,MAAM,uBAAA,CAAwB;AAAA,IAC5B,KAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA,EAAc,IAAA,CAAK,oBAAA,GACf,kFAAA,GACA,cACE,6EAAA,GACA;AAAA,GACP,CAAA,GACD,IAAA;AACJ,EAAA,MAAM,eAAA,GAAkB,6BAAA;AAAA,IACrB,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,UAAU,EAAE,cAAA,EAAgB,CAAC;AAAA,GAC5D;AAEA,EAAA,MAAM,aAAa,eAAA,EAAgB;AACnC,EAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAC9C,EAAA,MAAM,aAAA,GAAgB,MAAM,6BAAA,CAA8B;AAAA,IACxD,KAAA;AAAA,IACA,KAAA,EAAO,WAAA;AAAA,IACP,gBAAgB,IAAA,CAAK,eAAA;AAAA,IACrB,0BAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,IAAI,WAAA,IAAe,CAAC,aAAA,EAAe;AACjC,IAAA,MAAM,IAAI,cAAc,GAAA,EAAK;AAAA,MAC3B,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,QAAA,GAAW,WAAA,IAAe,OAAA,CAAQ,aAAa,CAAA;AAErD,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA;AAAA,IACA,0BAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,SAAS,KAAA,CAAM,EAAA;AAAA,MACf,KAAA,EAAO,aAAA;AAAA,MACP,SAAA;AAAA,MACA,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,kBAAA,EAAoB,0BAAA,EAA4B,OAAA,CAAQ,EAAA,IAAM,IAAA,CAAK,oBAAA;AAAA,MACnE,KAAA,EAAO,eAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,GACF;AACF;AAMA,SAAS,yBAAA,CAA0B;AAAA,EACjC,gBAAA;AAAA,EACA,IAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,0BAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAeG;AACD,EAAA,MAAM,kBAAkB,uBAAA,CAAwB;AAAA,IAC9C,UAAA;AAAA,IACA,KAAA,EAAO,aAAA;AAAA,IACP,SAAA;AAAA,IACA,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,YAAY,IAAA,CAAK,IAAA;AAAA,IACjB,oBAAoB,IAAA,CAAK,oBAAA;AAAA,IACzB,cAAA,EAAgB,aAAA,EAAe,QAAA,IAAY,IAAA,CAAK,eAAA;AAAA,IAChD,KAAA,EAAO,eAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAA,OAAO,IAAI,cAAA,CAA2B;AAAA,IACpC,MAAM,MAAM,UAAA,EAAY;AACtB,MAAA,IAAI,cAAA,GAAiB,CAAA;AACrB,MAAA,MAAM,YAAA,GAAe,CAAC,SAAA,EAAmB,OAAA,KAAqC;AAC5E,QAAA,UAAA,CAAW,OAAA;AAAA,UACT,eAAe,SAAA,EAAW;AAAA,YACxB,GAAG,OAAA;AAAA,YACH,eAAA,EAAiB,cAAA;AAAA,WAClB;AAAA,SACH;AAAA,MACF,CAAA;AAEA,MAAA,YAAA,CAAa,kBAAA,EAAoB;AAAA,QAC/B,IAAA,EAAM,kBAAA;AAAA,QACN,QAAA,EAAU;AAAA,OACX,CAAA;AACD,MAAA,YAAA,CAAa,sBAAA,EAAwB;AAAA,QACnC,IAAA,EAAM,sBAAA;AAAA,QACN,QAAA,EAAU;AAAA,OACX,CAAA;AAED,MAAA,MAAM,YAAA,GAAe,oCAAoC,UAAU,CAAA;AACnE,MAAA,MAAM,UAAA,GAAa,MAAM,YAAA,CAAa,UAAA;AACtC,MAAA,MAAM,MAAA,GAAS,WAAW,SAAA,EAAU;AAEpC,MAAA,IAAI;AACF,QAAA,OAAO,IAAA,EAAM;AACX,UAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,UAAA,IAAI,IAAA,EAAM;AACR,YAAA;AAAA,UACF;AAEA,UAAA,KAAA,MAAW,KAAA,IAAS,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/C,YAAA,YAAA,CAAa,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,OAAO,CAAA;AAAA,UACzC;AAAA,QACF;AAEA,QAAA,KAAA,MAAW,KAAA,IAAS,YAAA,CAAa,uBAAA,EAAwB,EAAG;AAC1D,UAAA,YAAA,CAAa,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,OAAO,CAAA;AAAA,QACzC;AAEA,QAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAS,GAAI,MAAM,gBAAA,CAAiB;AAAA,UAC1D,gBAAA;AAAA,UACA,QAAA;AAAA,UACA,aAAA;AAAA,UACA,MAAA,EAAQ,YAAA;AAAA,UACR,UAAA;AAAA,UACA,SAAA;AAAA,UACA,KAAA,EAAO,aAAA;AAAA,UACP,cAAc,IAAA,CAAK,YAAA;AAAA,UACnB,kBAAA,EAAoB,0BAAA,EAA4B,OAAA,CAAQ,EAAA,IAAM,IAAA,CAAK,oBAAA;AAAA,UACnE,cAAA,EAAgB,aAAA,EAAe,QAAA,IAAY,IAAA,CAAK,eAAA;AAAA,UAChD,eAAA;AAAA,UACA,gBAAA;AAAA,UACA,cAAc,YAAA,CAAa,IAAA;AAAA,UAC3B,mBAAA,EAAqB,CAAAC,eAAAA,KACnB,YAAA,CAAa,cAAA,CAAe;AAAA,YAC1B,MAAMA,eAAAA,CAAe,IAAA;AAAA,YACrB,QAAQA,eAAAA,CAAe;AAAA,WACxB;AAAA,SACJ,CAAA;AAED,QAAA,MAAM,aAAA,GAAgB,4BAAA,CAA6B,QAAA,EAAU,UAAU,CAAA;AACvE,QAAA,IAAI,aAAA,IAAiB,eAAe,IAAA,EAAM;AACxC,UAAA,KAAA,MAAW,SAAS,YAAA,CAAa,YAAA;AAAA,YAC/B,cAAA,CAAe,IAAA;AAAA,YACf,aAAA,IAAiB;AAAA,cACf,EAAA,EAAI,UAAA;AAAA,cACJ,IAAA,EAAM,SAAA;AAAA,cACN,IAAA,EAAM,WAAA;AAAA,cACN,MAAA,EAAQ,WAAA;AAAA,cACR,OAAA,EAAS,CAAC,oBAAA,CAAqB,cAAA,CAAe,IAAI,CAAC;AAAA;AACrD,WACF,EAAG;AACD,YAAA,YAAA,CAAa,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,OAAO,CAAA;AAAA,UACzC;AAAA,QACF;AACA,QAAA,YAAA,CAAa,oBAAA,EAAsB;AAAA,UACjC,IAAA,EAAM,oBAAA;AAAA,UACN;AAAA,SACD,CAAA;AACD,QAAA,UAAA,CAAW,KAAA,EAAM;AAAA,MACnB,SAAS,KAAA,EAAO;AACd,QAAA,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA,MACxB,CAAA,SAAE;AACA,QAAA,MAAA,CAAO,WAAA,EAAY;AAAA,MACrB;AAAA,IACF;AAAA,GACD,CAAA;AACH;AAEO,IAAM,wBAAwB,WAAA,CAAY;AAAA,EAC/C,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,eAAA;AAAA,EACN,YAAA,EAAc,qBAAA;AAAA,EACd,UAAA,EAAY,wBAAA;AAAA,EACZ,cAAA,EAAgB,oBAAA;AAAA,EAChB,OAAA,EAAS,mBAAA;AAAA,EACT,WAAA,EAAa,2EAAA;AAAA,EACb,IAAA,EAAM,CAAC,WAAW,CAAA;AAAA,EAClB,YAAA,EAAc,IAAA;AAAA,EACd,oBAAoB,oBAAA,CAAqB,cAAA;AAAA,EACzC,OAAA,EAAS,OAAO,EAAE,MAAA,EAAQ,gBAAgB,WAAA,EAAa,GAAG,MAAK,KAAM;AACnE,IAAA,IAAI;AACF,MAAA,MAAM;AAAA,QACJ,KAAA;AAAA,QACA,gBAAA;AAAA,QACA,eAAA;AAAA,QACA,SAAA;AAAA,QACA,QAAA;AAAA,QACA,cAAA;AAAA,QACA,0BAAA;AAAA,QACA,aAAA;AAAA,QACA,UAAA;AAAA,QACA,aAAA;AAAA,QACA,gBAAA;AAAA,QACA;AAAA,UACE,MAAM,4BAAA,CAA6B,EAAE,IAAA,EAAM,MAAA,EAAQ,gBAAgB,CAAA;AAEvE,MAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,QAAA,MAAM,MAAA,GAAS,MAAM,eAAA,CAAgB;AAAA,UACnC,KAAA;AAAA,UACA,aAAA;AAAA,UACA,eAAe,IAAA,CAAK,KAAA;AAAA,UACpB,cAAc,IAAA,CAAK,YAAA;AAAA,UACnB,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,iBAAiB,IAAA,CAAK,eAAA;AAAA,UACtB,KAAA,EAAO,cAAA;AAAA,UACP,cAAA;AAAA,UACA,WAAA;AAAA,UACA;AAAA,SACD,CAAA;AAED,QAAA,MAAM,EAAE,QAAA,EAAS,GAAI,MAAM,gBAAA,CAAiB;AAAA,UAC1C,gBAAA;AAAA,UACA,QAAA;AAAA,UACA,aAAA;AAAA,UACA,MAAA;AAAA,UACA,UAAA;AAAA,UACA,SAAA;AAAA,UACA,KAAA,EAAO,aAAA;AAAA,UACP,cAAc,IAAA,CAAK,YAAA;AAAA,UACnB,kBAAA,EAAoB,0BAAA,EAA4B,OAAA,CAAQ,EAAA,IAAM,IAAA,CAAK,oBAAA;AAAA,UACnE,cAAA,EAAgB,aAAA,EAAe,QAAA,IAAY,IAAA,CAAK,eAAA;AAAA,UAChD,eAAA;AAAA,UACA,gBAAA;AAAA,UACA,YAAA,EAAc;AAAA,SACf,CAAA;AAED,QAAA,OAAO,aAAa,QAAQ,CAAA;AAAA,MAC9B;AAEA,MAAA,MAAM,YAAA,GAAe,MAAM,aAAA,CAAc;AAAA,QACvC,KAAA;AAAA,QACA,aAAA;AAAA,QACA,eAAe,IAAA,CAAK,KAAA;AAAA,QACpB,cAAc,IAAA,CAAK,YAAA;AAAA,QACnB,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,iBAAiB,IAAA,CAAK,eAAA;AAAA,QACtB,KAAA,EAAO,cAAA;AAAA,QACP,cAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,MAAM,SAAS,yBAAA,CAA0B;AAAA,QACvC,gBAAA;AAAA,QACA,IAAA;AAAA,QACA,eAAA;AAAA,QACA,SAAA;AAAA,QACA,QAAA;AAAA,QACA,0BAAA;AAAA,QACA,UAAA;AAAA,QACA,aAAA;AAAA,QACA,gBAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,OAAO,IAAI,SAAS,MAAA,EAAQ;AAAA,QAC1B,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kCAAA;AAAA,UAChB,eAAA,EAAiB,UAAA;AAAA,UACjB,UAAA,EAAY,YAAA;AAAA,UACZ,mBAAA,EAAqB;AAAA;AACvB,OACD,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,yBAAyB,CAAA;AAAA,IACrD;AAAA,EACF;AACF,CAAC;AAEM,IAAM,qBAAqB,WAAA,CAAY;AAAA,EAC5C,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,2BAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,oBAAA;AAAA,EACjB,cAAA,EAAgB,oBAAA;AAAA,EAChB,OAAA,EAAS,4BAAA;AAAA,EACT,WAAA,EAAa,6CAAA;AAAA,EACb,IAAA,EAAM,CAAC,WAAW,CAAA;AAAA,EAClB,YAAA,EAAc,IAAA;AAAA,EACd,oBAAoB,oBAAA,CAAqB,WAAA;AAAA,EACzC,SAAS,OAAO,EAAE,MAAA,EAAQ,cAAA,EAAgB,YAAW,KAAM;AACzD,IAAA,IAAI;AACF,MAAA,MAAM,qBAAqB,MAAM,kCAAA,CAAmC,EAAE,MAAA,EAAQ,UAAA,EAAY,gBAAgB,CAAA;AAC1G,MAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,gBAAA,EAAmB,UAAU,kBAAkB,CAAA;AAAA,MACzF;AAEA,MAAA,OAAO,gCAAgC,kBAAkB,CAAA;AAAA,IAC3D,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,2BAA2B,CAAA;AAAA,IACvD;AAAA,EACF;AACF,CAAC;AAEM,IAAM,wBAAwB,WAAA,CAAY;AAAA,EAC/C,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,2BAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,oBAAA;AAAA,EACjB,cAAA,EAAgB,oBAAA;AAAA,EAChB,OAAA,EAAS,0BAAA;AAAA,EACT,WAAA,EAAa,uEAAA;AAAA,EACb,IAAA,EAAM,CAAC,WAAW,CAAA;AAAA,EAClB,YAAA,EAAc,IAAA;AAAA,EACd,oBAAoB,oBAAA,CAAqB,aAAA;AAAA,EACzC,SAAS,OAAO,EAAE,MAAA,EAAQ,cAAA,EAAgB,YAAW,KAAM;AACzD,IAAA,IAAI;AACF,MAAA,MAAM,qBAAqB,MAAM,kCAAA,CAAmC,EAAE,MAAA,EAAQ,UAAA,EAAY,gBAAgB,CAAA;AAC1G,MAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK,EAAE,SAAS,CAAA,gBAAA,EAAmB,UAAU,kBAAkB,CAAA;AAAA,MACzF;AAEA,MAAA,MAAM,wBAAA,CAAyB,EAAE,kBAAA,EAAoB,CAAA;AAErD,MAAA,MAAM,QAAA,GAA2B;AAAA,QAC/B,EAAA,EAAI,UAAA;AAAA,QACJ,MAAA,EAAQ,UAAA;AAAA,QACR,OAAA,EAAS;AAAA,OACX;AAEA,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,yBAAyB,CAAA;AAAA,IACrD;AAAA,EACF;AACF,CAAC","file":"chunk-ZJM23PJU.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 chunkPFKYMKIH_cjs = require('./chunk-PFKYMKIH.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var v4 = require('zod/v4');
var jsonValueSchema = v4.z.lazy(
() => v4.z.union([
v4.z.string(),
v4.z.number(),
v4.z.boolean(),
v4.z.null(),
v4.z.array(jsonValueSchema),
v4.z.record(v4.z.string(), jsonValueSchema)
])
);
var jsonRecordSchema = v4.z.record(v4.z.string(), jsonValueSchema);
var signalAttributesSchema = v4.z.record(
v4.z.string(),
v4.z.union([v4.z.string(), v4.z.number(), v4.z.boolean(), v4.z.null(), v4.z.undefined()])
);
var baseSignalSchema = v4.z.object({
id: v4.z.string().optional(),
createdAt: v4.z.union([v4.z.string(), v4.z.date()]).optional(),
metadata: jsonRecordSchema.optional(),
attributes: signalAttributesSchema.optional()
});
var partProviderOptionsSchema = v4.z.record(v4.z.string(), v4.z.record(v4.z.string(), jsonValueSchema)).optional();
var signalTextPartSchema = v4.z.object({
type: v4.z.literal("text"),
text: v4.z.string(),
providerOptions: partProviderOptionsSchema
});
var signalFilePartSchema = v4.z.object({
type: v4.z.literal("file"),
data: v4.z.string(),
mediaType: v4.z.string(),
filename: v4.z.string().optional(),
providerOptions: partProviderOptionsSchema
});
var userMessageSignalContentsSchema = v4.z.union([
v4.z.string(),
v4.z.array(v4.z.union([signalTextPartSchema, signalFilePartSchema]))
]);
var agentMessageInputObjectSchema = v4.z.object({
contents: userMessageSignalContentsSchema,
attributes: signalAttributesSchema.optional(),
metadata: jsonRecordSchema.optional(),
providerOptions: v4.z.record(v4.z.string(), v4.z.record(v4.z.string(), jsonValueSchema)).optional()
});
var agentMessageInputSchema = v4.z.union([userMessageSignalContentsSchema, agentMessageInputObjectSchema]);
var agentSignalSchema = baseSignalSchema.extend({
type: v4.z.enum(["user", "state", "reactive", "notification", "user-message", "system-reminder"]),
tagName: v4.z.string().optional(),
contents: userMessageSignalContentsSchema,
providerOptions: v4.z.record(v4.z.string(), v4.z.record(v4.z.string(), jsonValueSchema)).optional()
});
var agentIdPathParams = v4.z.object({
agentId: v4.z.string().describe("Unique identifier for the agent")
});
var agentVersionQuerySchema = v4.z.object({
status: v4.z.enum(["draft", "published"]).optional().describe(
"Which stored config version to resolve: draft (latest, default) or published (active version). Mutually exclusive with versionId."
),
versionId: v4.z.string().optional().describe(
"Specific version ID to resolve. Mutually exclusive with status \u2014 if both are provided, versionId takes precedence."
)
});
var toolIdPathParams = v4.z.object({
toolId: v4.z.string().describe("Unique identifier for the tool")
});
var agentToolPathParams = agentIdPathParams.extend({
toolId: v4.z.string().describe("Unique identifier for the tool")
});
var agentSkillPathParams = agentIdPathParams.extend({
skillName: v4.z.string().describe("Name of the skill")
});
var modelConfigIdPathParams = agentIdPathParams.extend({
modelConfigId: v4.z.string().describe("Unique identifier for the model configuration")
});
var serializedProcessorSchema = v4.z.object({
id: v4.z.string(),
name: v4.z.string().optional()
});
var serializedToolSchema = v4.z.object({
id: v4.z.string(),
description: v4.z.string().optional(),
inputSchema: v4.z.string().optional(),
outputSchema: v4.z.string().optional(),
requireApproval: v4.z.boolean().optional()
});
var serializedWorkflowSchema = v4.z.object({
name: v4.z.string(),
steps: v4.z.record(
v4.z.string(),
v4.z.object({
id: v4.z.string(),
description: v4.z.string().optional()
})
).optional()
});
var serializedAgentDefinitionSchema = v4.z.object({
id: v4.z.string(),
name: v4.z.string()
});
var systemMessageSchema = v4.z.union([
v4.z.string(),
v4.z.array(v4.z.string()),
v4.z.any(),
// CoreSystemMessage or SystemModelMessage
v4.z.array(v4.z.any())
]);
var modelConfigSchema = v4.z.object({
model: v4.z.object({
modelId: v4.z.string(),
provider: v4.z.string(),
modelVersion: v4.z.string()
})
// Additional fields from AgentModelManagerConfig can be added here
});
var agentEditorConfigSchema = v4.z.union([
v4.z.literal(false),
v4.z.object({
instructions: v4.z.boolean().optional(),
tools: v4.z.union([v4.z.boolean(), v4.z.object({ description: v4.z.boolean().optional() })]).optional()
})
]);
var serializedAgentSchema = v4.z.object({
name: v4.z.string(),
description: v4.z.string().optional(),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional(),
instructions: systemMessageSchema.optional(),
tools: v4.z.record(v4.z.string(), serializedToolSchema),
agents: v4.z.record(v4.z.string(), serializedAgentDefinitionSchema),
workflows: v4.z.record(v4.z.string(), serializedWorkflowSchema),
inputProcessors: v4.z.array(serializedProcessorSchema),
outputProcessors: v4.z.array(serializedProcessorSchema),
provider: v4.z.string().optional(),
modelId: v4.z.string().optional(),
modelVersion: v4.z.string().optional(),
supportsMemory: v4.z.boolean().optional(),
modelList: v4.z.array(modelConfigSchema).optional(),
defaultOptions: chunkPFKYMKIH_cjs.defaultOptionsSchema.optional(),
defaultGenerateOptionsLegacy: v4.z.record(v4.z.string(), v4.z.any()).optional(),
defaultStreamOptionsLegacy: v4.z.record(v4.z.string(), v4.z.any()).optional(),
source: v4.z.enum(["code", "stored", "fs"]).optional(),
status: v4.z.enum(["draft", "published", "archived"]).optional(),
activeVersionId: v4.z.string().optional(),
hasDraft: v4.z.boolean().optional(),
editor: agentEditorConfigSchema.optional()
});
var serializedAgentWithIdSchema = serializedAgentSchema.extend({
id: v4.z.string()
});
var providerSchema = v4.z.object({
id: v4.z.string(),
name: v4.z.string(),
label: v4.z.string().optional(),
description: v4.z.string().optional(),
envVar: v4.z.union([v4.z.string(), v4.z.array(v4.z.string())]),
connected: v4.z.boolean(),
docUrl: v4.z.string().optional(),
models: v4.z.array(v4.z.string())
});
var providersResponseSchema = v4.z.object({
providers: v4.z.array(providerSchema)
});
var listAgentsResponseSchema = v4.z.record(v4.z.string(), serializedAgentSchema);
var listToolsResponseSchema = v4.z.record(v4.z.string(), serializedToolSchema);
var agentMemoryOptionSchema = v4.z.object({
thread: v4.z.union([v4.z.string(), v4.z.object({ id: v4.z.string() }).passthrough()]),
resource: v4.z.string(),
options: v4.z.record(v4.z.string(), v4.z.any()).optional(),
readOnly: v4.z.boolean().optional()
});
var toolChoiceSchema = v4.z.union([
v4.z.enum(["auto", "none", "required"]),
v4.z.object({ type: v4.z.literal("tool"), toolName: v4.z.string() })
]);
var agentExecutionBodySchema = v4.z.object({
// REQUIRED
messages: v4.z.union([
v4.z.array(chunkDIG2K5CV_cjs.coreMessageSchema),
// Array of messages
v4.z.string()
// Single user message shorthand
]),
// Message Configuration
instructions: systemMessageSchema.optional(),
system: systemMessageSchema.optional(),
context: v4.z.array(chunkDIG2K5CV_cjs.coreMessageSchema).optional(),
// Memory & Persistence
memory: agentMemoryOptionSchema.optional(),
runId: v4.z.string().optional(),
savePerStep: v4.z.boolean().optional(),
// Request Context (handler-specific field - merged with server's requestContext)
requestContext: v4.z.record(v4.z.string(), v4.z.any()).optional(),
// Version overrides for sub-agents (and future primitives)
versions: v4.z.object({
agents: v4.z.record(
v4.z.string(),
v4.z.union([v4.z.object({ versionId: v4.z.string() }), v4.z.object({ status: v4.z.enum(["draft", "published"]) })])
).optional(),
defaultStatus: v4.z.enum(["draft", "published"]).optional()
}).optional(),
// Execution Control
maxSteps: v4.z.number().optional(),
stopWhen: v4.z.any().optional(),
// Model Configuration
providerOptions: v4.z.object({
anthropic: v4.z.record(v4.z.string(), v4.z.any()).optional(),
google: v4.z.record(v4.z.string(), v4.z.any()).optional(),
openai: v4.z.record(v4.z.string(), v4.z.any()).optional(),
xai: v4.z.record(v4.z.string(), v4.z.any()).optional()
}).optional(),
modelSettings: v4.z.any().optional(),
// Tool Configuration
activeTools: v4.z.array(v4.z.string()).optional(),
toolsets: v4.z.record(v4.z.string(), v4.z.any()).optional(),
clientTools: v4.z.record(v4.z.string(), v4.z.any()).optional(),
toolChoice: toolChoiceSchema.optional(),
requireToolApproval: v4.z.boolean().optional(),
// Evaluation
scorers: v4.z.union([
v4.z.record(v4.z.string(), v4.z.any()),
v4.z.record(
v4.z.string(),
v4.z.object({
scorer: v4.z.string(),
sampling: v4.z.any().optional()
})
)
]).optional(),
returnScorerData: v4.z.boolean().optional(),
// Observability
tracingOptions: chunkDIG2K5CV_cjs.tracingOptionsSchema.optional(),
// Structured Output
output: v4.z.any().optional(),
// Zod schema, JSON schema, or structured output object
structuredOutput: v4.z.object({
schema: v4.z.object({}).passthrough(),
model: v4.z.union([v4.z.string(), v4.z.any()]).optional(),
instructions: v4.z.string().optional(),
jsonPromptInjection: v4.z.boolean().optional(),
errorStrategy: v4.z.enum(["strict", "warn", "fallback"]).optional(),
fallbackValue: v4.z.any().optional()
}).optional(),
// Idle-loop streaming (collapses streamUntilIdle into stream)
untilIdle: v4.z.union([v4.z.boolean(), v4.z.object({ maxIdleMs: v4.z.number().int().positive().optional() })]).optional()
}).passthrough();
var agentExecutionLegacyBodySchema = agentExecutionBodySchema.extend({
resourceId: v4.z.string().optional(),
resourceid: v4.z.string().optional(),
// lowercase variant
threadId: v4.z.string().optional()
});
var streamUntilIdleBodySchema = agentExecutionBodySchema.extend({
maxIdleMs: v4.z.number().int().positive().optional(),
untilIdle: v4.z.union([v4.z.boolean(), v4.z.object({ maxIdleMs: v4.z.number().int().positive().optional() })]).optional()
});
var resumeStreamUntilIdleBodySchema = agentExecutionBodySchema.omit({ messages: true }).extend({
runId: v4.z.string(),
resumeData: v4.z.unknown().refine((x) => x !== void 0, { message: "resumeData is required" }),
toolCallId: v4.z.string().optional(),
maxIdleMs: v4.z.number().int().positive().optional()
});
var executeToolDataBodySchema = v4.z.object({
data: v4.z.unknown().refine((x) => x !== void 0, { message: "data is required" })
});
var executeToolBodySchema = executeToolDataBodySchema.extend({
requestContext: v4.z.record(v4.z.string(), v4.z.any()).optional()
});
var executeToolContextBodySchema = executeToolDataBodySchema.extend({
requestContext: v4.z.record(v4.z.string(), v4.z.any()).optional()
});
var toolCallActionBodySchema = v4.z.object({
runId: v4.z.string(),
requestContext: v4.z.record(v4.z.string(), v4.z.any()).optional(),
toolCallId: v4.z.string(),
format: v4.z.string().optional()
});
var networkToolCallActionBodySchema = v4.z.object({
runId: v4.z.string(),
requestContext: v4.z.record(v4.z.string(), v4.z.any()).optional(),
format: v4.z.string().optional()
});
var approveToolCallBodySchema = toolCallActionBodySchema;
var declineToolCallBodySchema = toolCallActionBodySchema;
var approveNetworkToolCallBodySchema = networkToolCallActionBodySchema;
var declineNetworkToolCallBodySchema = networkToolCallActionBodySchema;
var toolCallResponseSchema = v4.z.object({
fullStream: v4.z.any()
// ReadableStream
});
var sendToolApprovalResponseSchema = v4.z.object({
accepted: v4.z.literal(true),
runId: v4.z.string(),
toolCallId: v4.z.string().optional()
});
var listSuspendedRunsQuerySchema = v4.z.object({
threadId: v4.z.string().optional(),
resourceId: v4.z.string().optional(),
fromDate: v4.z.coerce.date().optional(),
toDate: v4.z.coerce.date().optional(),
perPage: v4.z.coerce.number().int().positive().optional(),
// page is zero-indexed, so 0 is valid
page: v4.z.coerce.number().int().nonnegative().optional()
}).refine((data) => !data.fromDate || !data.toDate || data.fromDate <= data.toDate, {
message: "fromDate must be less than or equal to toDate",
path: ["fromDate"]
});
var listSuspendedRunsResponseSchema = v4.z.object({
runs: v4.z.array(
v4.z.object({
runId: v4.z.string(),
status: v4.z.literal("suspended"),
threadId: v4.z.string().optional(),
resourceId: v4.z.string().optional(),
suspendedAt: v4.z.date(),
toolCalls: v4.z.array(
v4.z.object({
toolCallId: v4.z.string().optional(),
toolName: v4.z.string().optional(),
args: v4.z.unknown().optional(),
requiresApproval: v4.z.boolean(),
suspendPayload: v4.z.unknown().optional()
})
)
})
),
total: v4.z.number().int().nonnegative()
});
var resumeStreamBodySchema = agentExecutionBodySchema.omit({ messages: true }).extend({
runId: v4.z.string(),
resumeData: v4.z.unknown().refine((x) => x !== void 0, { message: "resumeData is required" }),
toolCallId: v4.z.string().optional()
});
var updateAgentModelBodySchema = v4.z.object({
modelId: v4.z.string(),
provider: v4.z.string()
});
var reorderAgentModelListBodySchema = v4.z.object({
reorderedModelIds: v4.z.array(v4.z.string())
});
var updateAgentModelInModelListBodySchema = v4.z.object({
model: v4.z.object({
modelId: v4.z.string(),
provider: v4.z.string()
}).optional(),
maxRetries: v4.z.number().optional(),
enabled: v4.z.boolean().optional()
});
var modelManagementResponseSchema = chunkDIG2K5CV_cjs.messageResponseSchema;
var generateResponseSchema = v4.z.any();
var streamResponseSchema = v4.z.any();
var executeToolResponseSchema = v4.z.any();
var enhanceInstructionsBodySchema = v4.z.object({
instructions: v4.z.string().describe("The current agent instructions to enhance"),
comment: v4.z.string().describe("User comment describing how to enhance the instructions")
});
var enhanceInstructionsResponseSchema = v4.z.object({
explanation: v4.z.string().describe("Explanation of the changes made"),
new_prompt: v4.z.string().describe("The enhanced instructions")
});
var observeAgentBodySchema = v4.z.object({
runId: v4.z.string().describe("The run ID to observe/reconnect to"),
offset: v4.z.number().optional().describe("Resume from this event index (0-based). If omitted, replays all events.")
});
var signalActiveBehaviorSchema = v4.z.enum(["deliver", "persist", "discard"]);
var signalIdleBehaviorSchema = v4.z.enum(["wake", "persist", "discard"]);
var signalTargetBaseBodySchema = v4.z.object({
ifActive: v4.z.object({
behavior: signalActiveBehaviorSchema.optional(),
attributes: signalAttributesSchema.optional()
}).optional()
});
var signalTargetBodySchema = v4.z.union([
signalTargetBaseBodySchema.extend({
runId: v4.z.string(),
resourceId: v4.z.string().optional(),
threadId: v4.z.string().optional(),
ifIdle: v4.z.undefined().optional()
}),
signalTargetBaseBodySchema.extend({
runId: v4.z.undefined().optional(),
resourceId: v4.z.string(),
threadId: v4.z.string(),
ifIdle: v4.z.object({
behavior: signalIdleBehaviorSchema.optional(),
streamOptions: agentExecutionBodySchema.omit({ messages: true }).optional(),
attributes: signalAttributesSchema.optional()
}).optional()
})
]);
var sendAgentSignalBodySchema = v4.z.union([
signalTargetBodySchema.options[0].extend({ signal: agentSignalSchema }),
signalTargetBodySchema.options[1].extend({ signal: agentSignalSchema })
]);
var sendAgentMessageBodySchema = v4.z.union([
signalTargetBodySchema.options[0].extend({ message: agentMessageInputSchema }),
signalTargetBodySchema.options[1].extend({ message: agentMessageInputSchema })
]);
var queueAgentMessageBodySchema = sendAgentMessageBodySchema;
var subscribeAgentThreadBodySchema = v4.z.object({
resourceId: v4.z.string().optional(),
threadId: v4.z.string()
});
var abortAgentThreadBodySchema = subscribeAgentThreadBodySchema;
var sendToolApprovalBodySchema = v4.z.object({
resourceId: v4.z.string(),
threadId: v4.z.string(),
requestContext: v4.z.record(v4.z.string(), v4.z.any()).optional(),
toolCallId: v4.z.string(),
approved: v4.z.boolean(),
resumeData: v4.z.any().optional(),
format: v4.z.string().optional(),
messages: v4.z.array(chunkDIG2K5CV_cjs.coreMessageSchema).optional(),
streamOptions: v4.z.any().optional()
});
var abortAgentThreadResponseSchema = v4.z.object({
aborted: v4.z.boolean()
});
var observeAgentResponseSchema = v4.z.any();
exports.abortAgentThreadBodySchema = abortAgentThreadBodySchema;
exports.abortAgentThreadResponseSchema = abortAgentThreadResponseSchema;
exports.agentExecutionBodySchema = agentExecutionBodySchema;
exports.agentExecutionLegacyBodySchema = agentExecutionLegacyBodySchema;
exports.agentIdPathParams = agentIdPathParams;
exports.agentSkillPathParams = agentSkillPathParams;
exports.agentToolPathParams = agentToolPathParams;
exports.agentVersionQuerySchema = agentVersionQuerySchema;
exports.approveNetworkToolCallBodySchema = approveNetworkToolCallBodySchema;
exports.approveToolCallBodySchema = approveToolCallBodySchema;
exports.declineNetworkToolCallBodySchema = declineNetworkToolCallBodySchema;
exports.declineToolCallBodySchema = declineToolCallBodySchema;
exports.enhanceInstructionsBodySchema = enhanceInstructionsBodySchema;
exports.enhanceInstructionsResponseSchema = enhanceInstructionsResponseSchema;
exports.executeToolBodySchema = executeToolBodySchema;
exports.executeToolContextBodySchema = executeToolContextBodySchema;
exports.executeToolResponseSchema = executeToolResponseSchema;
exports.generateResponseSchema = generateResponseSchema;
exports.listAgentsResponseSchema = listAgentsResponseSchema;
exports.listSuspendedRunsQuerySchema = listSuspendedRunsQuerySchema;
exports.listSuspendedRunsResponseSchema = listSuspendedRunsResponseSchema;
exports.listToolsResponseSchema = listToolsResponseSchema;
exports.modelConfigIdPathParams = modelConfigIdPathParams;
exports.modelManagementResponseSchema = modelManagementResponseSchema;
exports.observeAgentBodySchema = observeAgentBodySchema;
exports.observeAgentResponseSchema = observeAgentResponseSchema;
exports.providerSchema = providerSchema;
exports.providersResponseSchema = providersResponseSchema;
exports.queueAgentMessageBodySchema = queueAgentMessageBodySchema;
exports.reorderAgentModelListBodySchema = reorderAgentModelListBodySchema;
exports.resumeStreamBodySchema = resumeStreamBodySchema;
exports.resumeStreamUntilIdleBodySchema = resumeStreamUntilIdleBodySchema;
exports.sendAgentMessageBodySchema = sendAgentMessageBodySchema;
exports.sendAgentSignalBodySchema = sendAgentSignalBodySchema;
exports.sendToolApprovalBodySchema = sendToolApprovalBodySchema;
exports.sendToolApprovalResponseSchema = sendToolApprovalResponseSchema;
exports.serializedAgentDefinitionSchema = serializedAgentDefinitionSchema;
exports.serializedAgentSchema = serializedAgentSchema;
exports.serializedAgentWithIdSchema = serializedAgentWithIdSchema;
exports.serializedProcessorSchema = serializedProcessorSchema;
exports.serializedToolSchema = serializedToolSchema;
exports.serializedWorkflowSchema = serializedWorkflowSchema;
exports.streamResponseSchema = streamResponseSchema;
exports.streamUntilIdleBodySchema = streamUntilIdleBodySchema;
exports.subscribeAgentThreadBodySchema = subscribeAgentThreadBodySchema;
exports.toolCallResponseSchema = toolCallResponseSchema;
exports.toolIdPathParams = toolIdPathParams;
exports.updateAgentModelBodySchema = updateAgentModelBodySchema;
exports.updateAgentModelInModelListBodySchema = updateAgentModelInModelListBodySchema;
//# sourceMappingURL=chunk-ZQ4GVMYG.cjs.map
//# sourceMappingURL=chunk-ZQ4GVMYG.cjs.map
{"version":3,"sources":["../src/server/schemas/agents.ts"],"names":["z","defaultOptionsSchema","coreMessageSchema","tracingOptionsSchema","messageResponseSchema"],"mappings":"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","file":"chunk-ZQ4GVMYG.cjs","sourcesContent":["import { z } from 'zod/v4';\nimport { tracingOptionsSchema, coreMessageSchema, messageResponseSchema } from './common';\nimport { defaultOptionsSchema } from './default-options';\n\nexport {\n generateSpeechBodySchema,\n getListenerResponseSchema,\n speakResponseSchema,\n transcribeSpeechBodySchema,\n transcribeSpeechResponseSchema,\n voiceSpeakersResponseSchema,\n} from '@internal/voice/routes';\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\n\nconst jsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(jsonValueSchema),\n z.record(z.string(), jsonValueSchema),\n ]),\n);\nconst jsonRecordSchema = z.record(z.string(), jsonValueSchema);\n\nconst signalAttributesSchema = z.record(\n z.string(),\n z.union([z.string(), z.number(), z.boolean(), z.null(), z.undefined()]),\n);\n\nconst baseSignalSchema = z.object({\n id: z.string().optional(),\n createdAt: z.union([z.string(), z.date()]).optional(),\n metadata: jsonRecordSchema.optional(),\n attributes: signalAttributesSchema.optional(),\n});\n\nconst partProviderOptionsSchema = z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional();\n\nconst signalTextPartSchema = z.object({\n type: z.literal('text'),\n text: z.string(),\n providerOptions: partProviderOptionsSchema,\n});\n\nconst signalFilePartSchema = z.object({\n type: z.literal('file'),\n data: z.string(),\n mediaType: z.string(),\n filename: z.string().optional(),\n providerOptions: partProviderOptionsSchema,\n});\n\nconst userMessageSignalContentsSchema = z.union([\n z.string(),\n z.array(z.union([signalTextPartSchema, signalFilePartSchema])),\n]);\n\nconst agentMessageInputObjectSchema = z.object({\n contents: userMessageSignalContentsSchema,\n attributes: signalAttributesSchema.optional(),\n metadata: jsonRecordSchema.optional(),\n providerOptions: z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional(),\n});\n\nconst agentMessageInputSchema = z.union([userMessageSignalContentsSchema, agentMessageInputObjectSchema]);\n\nconst agentSignalSchema = baseSignalSchema.extend({\n type: z.enum(['user', 'state', 'reactive', 'notification', 'user-message', 'system-reminder']),\n tagName: z.string().optional(),\n contents: userMessageSignalContentsSchema,\n providerOptions: z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional(),\n});\n\n// Path parameter schemas\nexport const agentIdPathParams = z.object({\n agentId: z.string().describe('Unique identifier for the agent'),\n});\n\n/**\n * Query params for GET /agents/:agentId — controls which stored config version is used for overrides.\n * Use either `status` or `versionId`, not both.\n * - `status` — 'draft' (latest version, default) or 'published' (active published version).\n * - `versionId` — Resolve with a specific version ID.\n */\nexport const agentVersionQuerySchema = z.object({\n status: z\n .enum(['draft', 'published'])\n .optional()\n .describe(\n 'Which stored config version to resolve: draft (latest, default) or published (active version). Mutually exclusive with versionId.',\n ),\n versionId: z\n .string()\n .optional()\n .describe(\n 'Specific version ID to resolve. Mutually exclusive with status — if both are provided, versionId takes precedence.',\n ),\n});\n\nexport const toolIdPathParams = z.object({\n toolId: z.string().describe('Unique identifier for the tool'),\n});\n\nexport const agentToolPathParams = agentIdPathParams.extend({\n toolId: z.string().describe('Unique identifier for the tool'),\n});\n\nexport const agentSkillPathParams = agentIdPathParams.extend({\n skillName: z.string().describe('Name of the skill'),\n});\n\nexport const modelConfigIdPathParams = agentIdPathParams.extend({\n modelConfigId: z.string().describe('Unique identifier for the model configuration'),\n});\n\n/**\n * Schema for serialized processor metadata\n */\nexport const serializedProcessorSchema = z.object({\n id: z.string(),\n name: z.string().optional(),\n});\n\n/**\n * Schema for serialized tool with JSON schemas\n * Uses passthrough() to allow additional tool properties beyond core fields\n */\nexport const serializedToolSchema = z.object({\n id: z.string(),\n description: z.string().optional(),\n inputSchema: z.string().optional(),\n outputSchema: z.string().optional(),\n requireApproval: z.boolean().optional(),\n});\n\n/**\n * Schema for serialized workflow with steps\n */\nexport const serializedWorkflowSchema = z.object({\n name: z.string(),\n steps: z\n .record(\n z.string(),\n z.object({\n id: z.string(),\n description: z.string().optional(),\n }),\n )\n .optional(),\n});\n\n/**\n * Schema for serialized agent definition (referenced by other agents)\n */\nexport const serializedAgentDefinitionSchema = z.object({\n id: z.string(),\n name: z.string(),\n});\n\n/**\n * Schema for SystemMessage type\n * Can be string, string[], or various message objects\n */\nconst systemMessageSchema = z.union([\n z.string(),\n z.array(z.string()),\n z.any(), // CoreSystemMessage or SystemModelMessage\n z.array(z.any()),\n]);\n\n/**\n * Schema for model configuration in model list\n */\nconst modelConfigSchema = z.object({\n model: z.object({\n modelId: z.string(),\n provider: z.string(),\n modelVersion: z.string(),\n }),\n // Additional fields from AgentModelManagerConfig can be added here\n});\n\nconst agentEditorConfigSchema = z.union([\n z.literal(false),\n z.object({\n instructions: z.boolean().optional(),\n tools: z.union([z.boolean(), z.object({ description: z.boolean().optional() })]).optional(),\n }),\n]);\n\n/**\n * Main schema for serialized agent representation\n */\nexport const serializedAgentSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n instructions: systemMessageSchema.optional(),\n tools: z.record(z.string(), serializedToolSchema),\n agents: z.record(z.string(), serializedAgentDefinitionSchema),\n workflows: z.record(z.string(), serializedWorkflowSchema),\n inputProcessors: z.array(serializedProcessorSchema),\n outputProcessors: z.array(serializedProcessorSchema),\n provider: z.string().optional(),\n modelId: z.string().optional(),\n modelVersion: z.string().optional(),\n supportsMemory: z.boolean().optional(),\n modelList: z.array(modelConfigSchema).optional(),\n defaultOptions: defaultOptionsSchema.optional(),\n defaultGenerateOptionsLegacy: z.record(z.string(), z.any()).optional(),\n defaultStreamOptionsLegacy: z.record(z.string(), z.any()).optional(),\n source: z.enum(['code', 'stored', 'fs']).optional(),\n status: z.enum(['draft', 'published', 'archived']).optional(),\n activeVersionId: z.string().optional(),\n hasDraft: z.boolean().optional(),\n editor: agentEditorConfigSchema.optional(),\n});\n\n/**\n * Schema for agent with ID\n */\nexport const serializedAgentWithIdSchema = serializedAgentSchema.extend({\n id: z.string(),\n});\n\n/**\n * Schema for individual provider information\n */\nexport const providerSchema = z.object({\n id: z.string(),\n name: z.string(),\n label: z.string().optional(),\n description: z.string().optional(),\n envVar: z.union([z.string(), z.array(z.string())]),\n connected: z.boolean(),\n docUrl: z.string().optional(),\n models: z.array(z.string()),\n});\n\n/**\n * Schema for providers endpoint response\n */\nexport const providersResponseSchema = z.object({\n providers: z.array(providerSchema),\n});\n\nexport type ProviderListItem = z.infer<typeof providerSchema>;\n\n/**\n * Schema for list agents endpoint response\n * Returns a record of agent ID to serialized agent\n */\nexport const listAgentsResponseSchema = z.record(z.string(), serializedAgentSchema);\n\n/**\n * Schema for list tools endpoint response\n * Returns a record of tool ID to serialized tool\n */\nexport const listToolsResponseSchema = z.record(z.string(), serializedToolSchema);\n\n// ============================================================================\n// Agent Execution Body Schemas\n// ============================================================================\n\n/**\n * Schema for agent memory option\n */\nconst agentMemoryOptionSchema = z.object({\n thread: z.union([z.string(), z.object({ id: z.string() }).passthrough()]),\n resource: z.string(),\n options: z.record(z.string(), z.any()).optional(),\n readOnly: z.boolean().optional(),\n});\n\n/**\n * Schema for tool choice configuration\n */\nconst toolChoiceSchema = z.union([\n z.enum(['auto', 'none', 'required']),\n z.object({ type: z.literal('tool'), toolName: z.string() }),\n]);\n\n/**\n * Comprehensive body schema for agent generate and stream endpoints\n * Validates common fields while using passthrough for complex nested objects\n *\n * EXCLUDED FIELDS (not serializable):\n * - Callbacks: onStepFinish, onFinish, onChunk, onError, onAbort, prepareStep\n * - Class instances: inputProcessors, outputProcessors\n * - Non-serializable: abortSignal, tracingContext\n */\nexport const agentExecutionBodySchema = z\n .object({\n // REQUIRED\n messages: z.union([\n z.array(coreMessageSchema), // Array of messages\n z.string(), // Single user message shorthand\n ]),\n\n // Message Configuration\n instructions: systemMessageSchema.optional(),\n system: systemMessageSchema.optional(),\n context: z.array(coreMessageSchema).optional(),\n\n // Memory & Persistence\n memory: agentMemoryOptionSchema.optional(),\n runId: z.string().optional(),\n savePerStep: z.boolean().optional(),\n\n // Request Context (handler-specific field - merged with server's requestContext)\n requestContext: z.record(z.string(), z.any()).optional(),\n\n // Version overrides for sub-agents (and future primitives)\n versions: z\n .object({\n agents: z\n .record(\n z.string(),\n z.union([z.object({ versionId: z.string() }), z.object({ status: z.enum(['draft', 'published']) })]),\n )\n .optional(),\n defaultStatus: z.enum(['draft', 'published']).optional(),\n })\n .optional(),\n\n // Execution Control\n maxSteps: z.number().optional(),\n stopWhen: z.any().optional(),\n\n // Model Configuration\n providerOptions: z\n .object({\n anthropic: z.record(z.string(), z.any()).optional(),\n google: z.record(z.string(), z.any()).optional(),\n openai: z.record(z.string(), z.any()).optional(),\n xai: z.record(z.string(), z.any()).optional(),\n })\n .optional(),\n modelSettings: z.any().optional(),\n\n // Tool Configuration\n activeTools: z.array(z.string()).optional(),\n toolsets: z.record(z.string(), z.any()).optional(),\n clientTools: z.record(z.string(), z.any()).optional(),\n toolChoice: toolChoiceSchema.optional(),\n requireToolApproval: z.boolean().optional(),\n\n // Evaluation\n scorers: z\n .union([\n z.record(z.string(), z.any()),\n z.record(\n z.string(),\n z.object({\n scorer: z.string(),\n sampling: z.any().optional(),\n }),\n ),\n ])\n .optional(),\n returnScorerData: z.boolean().optional(),\n\n // Observability\n tracingOptions: tracingOptionsSchema.optional(),\n\n // Structured Output\n output: z.any().optional(), // Zod schema, JSON schema, or structured output object\n structuredOutput: z\n .object({\n schema: z.object({}).passthrough(),\n model: z.union([z.string(), z.any()]).optional(),\n instructions: z.string().optional(),\n jsonPromptInjection: z.boolean().optional(),\n errorStrategy: z.enum(['strict', 'warn', 'fallback']).optional(),\n fallbackValue: z.any().optional(),\n })\n .optional(),\n\n // Idle-loop streaming (collapses streamUntilIdle into stream)\n untilIdle: z.union([z.boolean(), z.object({ maxIdleMs: z.number().int().positive().optional() })]).optional(),\n })\n .passthrough(); // Allow additional fields for forward compatibility\n\n/**\n * Legacy body schema for deprecated endpoints that still use threadId/resourceId\n * Used by /agents/:agentId/generate-legacy and /agents/:agentId/stream-legacy\n */\nexport const agentExecutionLegacyBodySchema = agentExecutionBodySchema.extend({\n resourceId: z.string().optional(),\n resourceid: z.string().optional(), // lowercase variant\n threadId: z.string().optional(),\n});\n\nexport const streamUntilIdleBodySchema = agentExecutionBodySchema.extend({\n maxIdleMs: z.number().int().positive().optional(),\n untilIdle: z.union([z.boolean(), z.object({ maxIdleMs: z.number().int().positive().optional() })]).optional(),\n});\n\nexport const resumeStreamUntilIdleBodySchema = agentExecutionBodySchema.omit({ messages: true }).extend({\n runId: z.string(),\n resumeData: z.unknown().refine(x => x !== undefined, { message: 'resumeData is required' }),\n toolCallId: z.string().optional(),\n maxIdleMs: z.number().int().positive().optional(),\n});\n/**\n * Body schema for tool execute endpoint\n * Simple schema - tool validates its own input data\n * Note: Using z.unknown().refine() instead of z.any() to ensure data is required\n * (z.any() is treated as optional by Zod)\n */\nconst executeToolDataBodySchema = z.object({\n data: z.unknown().refine(x => x !== undefined, { message: 'data is required' }),\n});\n\nexport const executeToolBodySchema = executeToolDataBodySchema.extend({\n requestContext: z.record(z.string(), z.any()).optional(),\n});\n\nexport const executeToolContextBodySchema = executeToolDataBodySchema.extend({\n requestContext: z.record(z.string(), z.any()).optional(),\n});\n\n// ============================================================================\n// Tool Approval Schemas\n// ============================================================================\n\n/**\n * Base schema for tool approval/decline operations\n * Both approve and decline use the same parameters\n */\nconst toolCallActionBodySchema = z.object({\n runId: z.string(),\n requestContext: z.record(z.string(), z.any()).optional(),\n toolCallId: z.string(),\n format: z.string().optional(),\n});\nconst networkToolCallActionBodySchema = z.object({\n runId: z.string(),\n requestContext: z.record(z.string(), z.any()).optional(),\n format: z.string().optional(),\n});\n\n/**\n * Body schema for approving tool call\n */\nexport const approveToolCallBodySchema = toolCallActionBodySchema;\n\n/**\n * Body schema for declining tool call\n */\nexport const declineToolCallBodySchema = toolCallActionBodySchema;\n\n/**\n * Body schema for approving network tool call\n */\nexport const approveNetworkToolCallBodySchema = networkToolCallActionBodySchema;\n\n/**\n * Body schema for declining network tool call\n */\nexport const declineNetworkToolCallBodySchema = networkToolCallActionBodySchema;\n\n/**\n * Response schema for tool approval/decline\n */\nexport const toolCallResponseSchema = z.object({\n fullStream: z.any(), // ReadableStream\n});\n\nexport const sendToolApprovalResponseSchema = z.object({\n accepted: z.literal(true),\n runId: z.string(),\n toolCallId: z.string().optional(),\n});\n\n/**\n * Query schema for listing suspended agent runs\n */\nexport const listSuspendedRunsQuerySchema = z\n .object({\n threadId: z.string().optional(),\n resourceId: z.string().optional(),\n fromDate: z.coerce.date().optional(),\n toDate: z.coerce.date().optional(),\n perPage: z.coerce.number().int().positive().optional(),\n // page is zero-indexed, so 0 is valid\n page: z.coerce.number().int().nonnegative().optional(),\n })\n .refine(data => !data.fromDate || !data.toDate || data.fromDate <= data.toDate, {\n message: 'fromDate must be less than or equal to toDate',\n path: ['fromDate'],\n });\n\n/**\n * Response schema for listing suspended agent runs\n */\nexport const listSuspendedRunsResponseSchema = z.object({\n runs: z.array(\n z.object({\n runId: z.string(),\n status: z.literal('suspended'),\n threadId: z.string().optional(),\n resourceId: z.string().optional(),\n suspendedAt: z.date(),\n toolCalls: z.array(\n z.object({\n toolCallId: z.string().optional(),\n toolName: z.string().optional(),\n args: z.unknown().optional(),\n requiresApproval: z.boolean(),\n suspendPayload: z.unknown().optional(),\n }),\n ),\n }),\n ),\n total: z.number().int().nonnegative(),\n});\n\n// ============================================================================\n// Resume Stream Schema\n// ============================================================================\n\n/**\n * Body schema for resuming a suspended agent stream with custom data.\n * Extends the agent execution body without messages, since resume\n * continues from a prior suspension point rather than starting fresh.\n */\nexport const resumeStreamBodySchema = agentExecutionBodySchema.omit({ messages: true }).extend({\n runId: z.string(),\n resumeData: z.unknown().refine(x => x !== undefined, { message: 'resumeData is required' }),\n toolCallId: z.string().optional(),\n});\n\n// ============================================================================\n// Model Management Schemas\n// ============================================================================\n\n/**\n * Body schema for updating agent model\n */\nexport const updateAgentModelBodySchema = z.object({\n modelId: z.string(),\n provider: z.string(),\n});\n\n/**\n * Body schema for reordering agent model list\n */\nexport const reorderAgentModelListBodySchema = z.object({\n reorderedModelIds: z.array(z.string()),\n});\n\n/**\n * Body schema for updating model in model list\n */\nexport const updateAgentModelInModelListBodySchema = z.object({\n model: z\n .object({\n modelId: z.string(),\n provider: z.string(),\n })\n .optional(),\n maxRetries: z.number().optional(),\n enabled: z.boolean().optional(),\n});\n\n/**\n * Response schema for model management operations\n */\nexport const modelManagementResponseSchema = messageResponseSchema;\n\n// ============================================================================\n// Response schemas for agent generation endpoints\n// These return AI SDK types which have complex structures\n// ============================================================================\n\nexport const generateResponseSchema = z.any(); // AI SDK GenerateResult type\nexport const streamResponseSchema = z.any(); // AI SDK StreamResult type\nexport const executeToolResponseSchema = z.any(); // Tool execution result varies by tool\n\n// ============================================================================\n// Instruction Enhancement Schemas\n// ============================================================================\n\n/**\n * Body schema for enhancing agent instructions\n */\nexport const enhanceInstructionsBodySchema = z.object({\n instructions: z.string().describe('The current agent instructions to enhance'),\n comment: z.string().describe('User comment describing how to enhance the instructions'),\n});\n\n/**\n * Response schema for enhanced instructions\n */\nexport const enhanceInstructionsResponseSchema = z.object({\n explanation: z.string().describe('Explanation of the changes made'),\n new_prompt: z.string().describe('The enhanced instructions'),\n});\n\n// ============================================================================\n// Observe (Resumable Streams) Schemas\n// ============================================================================\n\n/**\n * Body schema for observing an agent stream\n * Used to reconnect to an existing stream and receive missed events\n */\nexport const observeAgentBodySchema = z.object({\n runId: z.string().describe('The run ID to observe/reconnect to'),\n offset: z.number().optional().describe('Resume from this event index (0-based). If omitted, replays all events.'),\n});\n\nconst signalActiveBehaviorSchema = z.enum(['deliver', 'persist', 'discard']);\nconst signalIdleBehaviorSchema = z.enum(['wake', 'persist', 'discard']);\n\nconst signalTargetBaseBodySchema = z.object({\n ifActive: z\n .object({\n behavior: signalActiveBehaviorSchema.optional(),\n attributes: signalAttributesSchema.optional(),\n })\n .optional(),\n});\n\nconst signalTargetBodySchema = z.union([\n signalTargetBaseBodySchema.extend({\n runId: z.string(),\n resourceId: z.string().optional(),\n threadId: z.string().optional(),\n ifIdle: z.undefined().optional(),\n }),\n signalTargetBaseBodySchema.extend({\n runId: z.undefined().optional(),\n resourceId: z.string(),\n threadId: z.string(),\n ifIdle: z\n .object({\n behavior: signalIdleBehaviorSchema.optional(),\n streamOptions: agentExecutionBodySchema.omit({ messages: true }).optional(),\n attributes: signalAttributesSchema.optional(),\n })\n .optional(),\n }),\n]);\n\nexport const sendAgentSignalBodySchema = z.union([\n signalTargetBodySchema.options[0].extend({ signal: agentSignalSchema }),\n signalTargetBodySchema.options[1].extend({ signal: agentSignalSchema }),\n]);\n\nexport const sendAgentMessageBodySchema = z.union([\n signalTargetBodySchema.options[0].extend({ message: agentMessageInputSchema }),\n signalTargetBodySchema.options[1].extend({ message: agentMessageInputSchema }),\n]);\n\nexport const queueAgentMessageBodySchema = sendAgentMessageBodySchema;\n\nexport const subscribeAgentThreadBodySchema = z.object({\n resourceId: z.string().optional(),\n threadId: z.string(),\n});\n\nexport const abortAgentThreadBodySchema = subscribeAgentThreadBodySchema;\n\nexport const sendToolApprovalBodySchema = z.object({\n resourceId: z.string(),\n threadId: z.string(),\n requestContext: z.record(z.string(), z.any()).optional(),\n toolCallId: z.string(),\n approved: z.boolean(),\n resumeData: z.any().optional(),\n format: z.string().optional(),\n messages: z.array(coreMessageSchema).optional(),\n streamOptions: z.any().optional(),\n});\n\nexport const abortAgentThreadResponseSchema = z.object({\n aborted: z.boolean(),\n});\n\n/**\n * Response schema for observe endpoint (streaming response)\n */\nexport const observeAgentResponseSchema = z.any(); // Streaming response\n"]}
+1
-1
{
"version": "1.48.0-alpha.6",
"version": "1.48.0-alpha.7",
"package": "@mastra/server",

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

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

package: "@mastra/server"
version: "1.48.0-alpha.6"
version: "1.48.0-alpha.7"
---

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

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

var chunkDR2XLMGB_cjs = require('../chunk-DR2XLMGB.cjs');
var chunkK75VRP3V_cjs = require('../chunk-K75VRP3V.cjs');
var chunkFLO6YIKC_cjs = require('../chunk-FLO6YIKC.cjs');
var chunkZLES3TDX_cjs = require('../chunk-ZLES3TDX.cjs');
var chunkYRZYCQGE_cjs = require('../chunk-YRZYCQGE.cjs');
var chunkI4X4UHQW_cjs = require('../chunk-I4X4UHQW.cjs');
var chunkOJB6MLRD_cjs = require('../chunk-OJB6MLRD.cjs');
var chunkUXYPH6HP_cjs = require('../chunk-UXYPH6HP.cjs');
var chunkPJXH5A23_cjs = require('../chunk-PJXH5A23.cjs');
var chunkY32XM46K_cjs = require('../chunk-Y32XM46K.cjs');
var chunk5KDVUPQN_cjs = require('../chunk-5KDVUPQN.cjs');
var chunkPXY4G3SN_cjs = require('../chunk-PXY4G3SN.cjs');
var chunk5O3XY7Z3_cjs = require('../chunk-5O3XY7Z3.cjs');
var chunkFVXUFEHO_cjs = require('../chunk-FVXUFEHO.cjs');
var chunkFCOEWHH3_cjs = require('../chunk-FCOEWHH3.cjs');
var chunkZYPEQZPE_cjs = require('../chunk-ZYPEQZPE.cjs');
var chunkO35VIFMS_cjs = require('../chunk-O35VIFMS.cjs');
var chunkTGFTKXT4_cjs = require('../chunk-TGFTKXT4.cjs');
var chunkSCY53JIH_cjs = require('../chunk-SCY53JIH.cjs');
var chunkBVMR64B7_cjs = require('../chunk-BVMR64B7.cjs');
var chunkOE5GVCW4_cjs = require('../chunk-OE5GVCW4.cjs');
var chunkZ7LCIYK7_cjs = require('../chunk-Z7LCIYK7.cjs');

@@ -37,11 +37,11 @@

enumerable: true,
get: function () { return chunkK75VRP3V_cjs.tools_exports; }
get: function () { return chunkYRZYCQGE_cjs.tools_exports; }
});
Object.defineProperty(exports, "scores", {
enumerable: true,
get: function () { return chunkFLO6YIKC_cjs.scores_exports; }
get: function () { return chunkI4X4UHQW_cjs.scores_exports; }
});
Object.defineProperty(exports, "responses", {
enumerable: true,
get: function () { return chunkZLES3TDX_cjs.responses_exports; }
get: function () { return chunkOJB6MLRD_cjs.responses_exports; }
});

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

enumerable: true,
get: function () { return chunk5KDVUPQN_cjs.conversations_exports; }
get: function () { return chunkPXY4G3SN_cjs.conversations_exports; }
});

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

enumerable: true,
get: function () { return chunkFVXUFEHO_cjs.a2a_exports; }
get: function () { return chunkTGFTKXT4_cjs.a2a_exports; }
});
Object.defineProperty(exports, "agents", {
enumerable: true,
get: function () { return chunkFCOEWHH3_cjs.agents_exports; }
get: function () { return chunkSCY53JIH_cjs.agents_exports; }
});
Object.defineProperty(exports, "agentBuilder", {
enumerable: true,
get: function () { return chunkZYPEQZPE_cjs.agent_builder_exports; }
get: function () { return chunkBVMR64B7_cjs.agent_builder_exports; }
});
Object.defineProperty(exports, "workflows", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.workflows_exports; }
get: function () { return chunkOE5GVCW4_cjs.workflows_exports; }
});

@@ -86,0 +86,0 @@ Object.defineProperty(exports, "formatZodError", {

export { vector_exports as vector } from '../chunk-A5GLESMH.js';
export { voice_exports as voice } from '../chunk-LQZHT5U7.js';
export { workspace_exports as workspace } from '../chunk-TWUWF3AU.js';
export { tools_exports as tools } from '../chunk-U7XUUMFF.js';
export { scores_exports as scores } from '../chunk-SNO2CFDL.js';
export { responses_exports as responses } from '../chunk-6DTFR4ZS.js';
export { tools_exports as tools } from '../chunk-KR2OUW3N.js';
export { scores_exports as scores } from '../chunk-DX4ROVTA.js';
export { responses_exports as responses } from '../chunk-ZJM23PJU.js';
export { mcp_exports as mcp } from '../chunk-22YWJT5H.js';
export { memory_exports as memory } from '../chunk-LZMQLV2S.js';
export { observability_exports as observability } from '../chunk-PRJENCIC.js';
export { conversations_exports as conversations } from '../chunk-V5YAPSSQ.js';
export { conversations_exports as conversations } from '../chunk-YAEG3FIX.js';
export { logs_exports as logs } from '../chunk-SDSDV6TA.js';
export { a2a_exports as a2a } from '../chunk-SZ6QKUFJ.js';
export { agents_exports as agents } from '../chunk-FU2NIFNJ.js';
export { agent_builder_exports as agentBuilder } from '../chunk-NDCWMT6H.js';
export { workflows_exports as workflows } from '../chunk-XX5G7THL.js';
export { a2a_exports as a2a } from '../chunk-ZBOTGUPW.js';
export { agents_exports as agents } from '../chunk-2MEUH7JT.js';
export { agent_builder_exports as agentBuilder } from '../chunk-NZBVBHKY.js';
export { workflows_exports as workflows } from '../chunk-3MJF6POS.js';
export { formatZodError, isZodError } from '../chunk-7ZWJX3AN.js';
//# sourceMappingURL=handlers.js.map
//# sourceMappingURL=handlers.js.map
'use strict';
var chunkFVXUFEHO_cjs = require('../../chunk-FVXUFEHO.cjs');
var chunkTGFTKXT4_cjs = require('../../chunk-TGFTKXT4.cjs');

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

enumerable: true,
get: function () { return chunkFVXUFEHO_cjs.AGENT_EXECUTION_ROUTE; }
get: function () { return chunkTGFTKXT4_cjs.AGENT_EXECUTION_ROUTE; }
});
Object.defineProperty(exports, "GET_AGENT_CARD_ROUTE", {
enumerable: true,
get: function () { return chunkFVXUFEHO_cjs.GET_AGENT_CARD_ROUTE; }
get: function () { return chunkTGFTKXT4_cjs.GET_AGENT_CARD_ROUTE; }
});
Object.defineProperty(exports, "getAgentCardByIdHandler", {
enumerable: true,
get: function () { return chunkFVXUFEHO_cjs.getAgentCardByIdHandler; }
get: function () { return chunkTGFTKXT4_cjs.getAgentCardByIdHandler; }
});
Object.defineProperty(exports, "getAgentExecutionHandler", {
enumerable: true,
get: function () { return chunkFVXUFEHO_cjs.getAgentExecutionHandler; }
get: function () { return chunkTGFTKXT4_cjs.getAgentExecutionHandler; }
});
Object.defineProperty(exports, "handleDeleteTaskPushNotificationConfig", {
enumerable: true,
get: function () { return chunkFVXUFEHO_cjs.handleDeleteTaskPushNotificationConfig; }
get: function () { return chunkTGFTKXT4_cjs.handleDeleteTaskPushNotificationConfig; }
});
Object.defineProperty(exports, "handleGetTaskPushNotificationConfig", {
enumerable: true,
get: function () { return chunkFVXUFEHO_cjs.handleGetTaskPushNotificationConfig; }
get: function () { return chunkTGFTKXT4_cjs.handleGetTaskPushNotificationConfig; }
});
Object.defineProperty(exports, "handleListTaskPushNotificationConfig", {
enumerable: true,
get: function () { return chunkFVXUFEHO_cjs.handleListTaskPushNotificationConfig; }
get: function () { return chunkTGFTKXT4_cjs.handleListTaskPushNotificationConfig; }
});
Object.defineProperty(exports, "handleMessageSend", {
enumerable: true,
get: function () { return chunkFVXUFEHO_cjs.handleMessageSend; }
get: function () { return chunkTGFTKXT4_cjs.handleMessageSend; }
});
Object.defineProperty(exports, "handleMessageStream", {
enumerable: true,
get: function () { return chunkFVXUFEHO_cjs.handleMessageStream; }
get: function () { return chunkTGFTKXT4_cjs.handleMessageStream; }
});
Object.defineProperty(exports, "handleSetTaskPushNotificationConfig", {
enumerable: true,
get: function () { return chunkFVXUFEHO_cjs.handleSetTaskPushNotificationConfig; }
get: function () { return chunkTGFTKXT4_cjs.handleSetTaskPushNotificationConfig; }
});
Object.defineProperty(exports, "handleTaskCancel", {
enumerable: true,
get: function () { return chunkFVXUFEHO_cjs.handleTaskCancel; }
get: function () { return chunkTGFTKXT4_cjs.handleTaskCancel; }
});
Object.defineProperty(exports, "handleTaskGet", {
enumerable: true,
get: function () { return chunkFVXUFEHO_cjs.handleTaskGet; }
get: function () { return chunkTGFTKXT4_cjs.handleTaskGet; }
});
Object.defineProperty(exports, "handleTaskResubscribe", {
enumerable: true,
get: function () { return chunkFVXUFEHO_cjs.handleTaskResubscribe; }
get: function () { return chunkTGFTKXT4_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-SZ6QKUFJ.js';
export { AGENT_EXECUTION_ROUTE, GET_AGENT_CARD_ROUTE, getAgentCardByIdHandler, getAgentExecutionHandler, handleDeleteTaskPushNotificationConfig, handleGetTaskPushNotificationConfig, handleListTaskPushNotificationConfig, handleMessageSend, handleMessageStream, handleSetTaskPushNotificationConfig, handleTaskCancel, handleTaskGet, handleTaskResubscribe } from '../../chunk-ZBOTGUPW.js';
//# sourceMappingURL=a2a.js.map
//# sourceMappingURL=a2a.js.map
'use strict';
var chunkZYPEQZPE_cjs = require('../../chunk-ZYPEQZPE.cjs');
var chunkBVMR64B7_cjs = require('../../chunk-BVMR64B7.cjs');

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

enumerable: true,
get: function () { return chunkZYPEQZPE_cjs.CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE; }
get: function () { return chunkBVMR64B7_cjs.CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE; }
});
Object.defineProperty(exports, "CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE", {
enumerable: true,
get: function () { return chunkZYPEQZPE_cjs.CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE; }
get: function () { return chunkBVMR64B7_cjs.CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE; }
});
Object.defineProperty(exports, "GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE", {
enumerable: true,
get: function () { return chunkZYPEQZPE_cjs.GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE; }
get: function () { return chunkBVMR64B7_cjs.GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE; }
});
Object.defineProperty(exports, "GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE", {
enumerable: true,
get: function () { return chunkZYPEQZPE_cjs.GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE; }
get: function () { return chunkBVMR64B7_cjs.GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE; }
});
Object.defineProperty(exports, "LIST_AGENT_BUILDER_ACTIONS_ROUTE", {
enumerable: true,
get: function () { return chunkZYPEQZPE_cjs.LIST_AGENT_BUILDER_ACTIONS_ROUTE; }
get: function () { return chunkBVMR64B7_cjs.LIST_AGENT_BUILDER_ACTIONS_ROUTE; }
});
Object.defineProperty(exports, "LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE", {
enumerable: true,
get: function () { return chunkZYPEQZPE_cjs.LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE; }
get: function () { return chunkBVMR64B7_cjs.LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE; }
});
Object.defineProperty(exports, "OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkZYPEQZPE_cjs.OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunkBVMR64B7_cjs.OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE; }
});
Object.defineProperty(exports, "OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkZYPEQZPE_cjs.OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunkBVMR64B7_cjs.OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE; }
});
Object.defineProperty(exports, "RESUME_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkZYPEQZPE_cjs.RESUME_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunkBVMR64B7_cjs.RESUME_AGENT_BUILDER_ACTION_ROUTE; }
});
Object.defineProperty(exports, "RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkZYPEQZPE_cjs.RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunkBVMR64B7_cjs.RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE; }
});
Object.defineProperty(exports, "RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkZYPEQZPE_cjs.RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunkBVMR64B7_cjs.RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE; }
});
Object.defineProperty(exports, "RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkZYPEQZPE_cjs.RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunkBVMR64B7_cjs.RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE; }
});
Object.defineProperty(exports, "START_AGENT_BUILDER_ACTION_RUN_ROUTE", {
enumerable: true,
get: function () { return chunkZYPEQZPE_cjs.START_AGENT_BUILDER_ACTION_RUN_ROUTE; }
get: function () { return chunkBVMR64B7_cjs.START_AGENT_BUILDER_ACTION_RUN_ROUTE; }
});
Object.defineProperty(exports, "START_ASYNC_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkZYPEQZPE_cjs.START_ASYNC_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunkBVMR64B7_cjs.START_ASYNC_AGENT_BUILDER_ACTION_ROUTE; }
});
Object.defineProperty(exports, "STREAM_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkZYPEQZPE_cjs.STREAM_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunkBVMR64B7_cjs.STREAM_AGENT_BUILDER_ACTION_ROUTE; }
});
Object.defineProperty(exports, "STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkZYPEQZPE_cjs.STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunkBVMR64B7_cjs.STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE; }
});
//# sourceMappingURL=agent-builder.cjs.map
//# sourceMappingURL=agent-builder.cjs.map

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

export { CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE, CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE, GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE, GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE, LIST_AGENT_BUILDER_ACTIONS_ROUTE, LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE, OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE, OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE, RESUME_AGENT_BUILDER_ACTION_ROUTE, RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE, RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE, RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE, START_AGENT_BUILDER_ACTION_RUN_ROUTE, START_ASYNC_AGENT_BUILDER_ACTION_ROUTE, STREAM_AGENT_BUILDER_ACTION_ROUTE, STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE } from '../../chunk-NDCWMT6H.js';
export { CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE, CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE, GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE, GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE, LIST_AGENT_BUILDER_ACTIONS_ROUTE, LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE, OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE, OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE, RESUME_AGENT_BUILDER_ACTION_ROUTE, RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE, RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE, RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE, START_AGENT_BUILDER_ACTION_RUN_ROUTE, START_ASYNC_AGENT_BUILDER_ACTION_ROUTE, STREAM_AGENT_BUILDER_ACTION_ROUTE, STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE } from '../../chunk-NZBVBHKY.js';
//# sourceMappingURL=agent-builder.js.map
//# sourceMappingURL=agent-builder.js.map
'use strict';
var chunkFCOEWHH3_cjs = require('../../chunk-FCOEWHH3.cjs');
var chunkSCY53JIH_cjs = require('../../chunk-SCY53JIH.cjs');

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

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

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

{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/agents.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qDA4C5B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kEAgG/B,CAAC;AAGH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yEAoEhC,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uEAiGvC,CAAC;AAEH;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA8D/F;AAED,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;+CAkB9B,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wEAYrC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gEAsGhC,CAAC;AAEH,QAAA,MAAM,6BAA6B,EAAE,CAAC,CAAC,OAAO,CAAC;IAAE,QAAQ,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAIhG,CAAC;AA0BH,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAC/C,WAAW,CAAC,OAAO,iBAAiB,EAAE,SAAS,EAAE,OAAO,yBAAyB,CAAC,EAClF,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,EAC7C,MAAM,EACN,YAAY,CACV,OAAO,iBAAiB,EACxB,SAAS,EACT,OAAO,yBAAyB,EAChC,OAAO,6BAA6B,CACrC,EACD,MAAM,EACN,0BAA0B,CAwG1B,CAAC;AA4FH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA7OsB,IAAI;WAAS,MAAM;aAAW,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAArC,IAAI;WAAS,MAAM;aAAW,OAAO;;cAArC,IAAI;WAAS,MAAM;aAAW,OAAO;uDAgQ9F,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAlQqB,IAAI;WAAS,MAAM;aAAW,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/agents.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA7OsB,IAAI;WAAS,MAAM;aAAW,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAArC,IAAI;WAAS,MAAM;aAAW,OAAO;;cAArC,IAAI;WAAS,MAAM;aAAW,OAAO;uDAgQ9F,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAlQqB,IAAI;WAAS,MAAM;aAAW,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}

@@ -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, 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-FU2NIFNJ.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, 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-2MEUH7JT.js';
//# sourceMappingURL=agents.js.map
//# sourceMappingURL=agents.js.map
'use strict';
var chunk5KDVUPQN_cjs = require('../../chunk-5KDVUPQN.cjs');
var chunkPXY4G3SN_cjs = require('../../chunk-PXY4G3SN.cjs');

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

enumerable: true,
get: function () { return chunk5KDVUPQN_cjs.CREATE_CONVERSATION_ROUTE; }
get: function () { return chunkPXY4G3SN_cjs.CREATE_CONVERSATION_ROUTE; }
});
Object.defineProperty(exports, "DELETE_CONVERSATION_ROUTE", {
enumerable: true,
get: function () { return chunk5KDVUPQN_cjs.DELETE_CONVERSATION_ROUTE; }
get: function () { return chunkPXY4G3SN_cjs.DELETE_CONVERSATION_ROUTE; }
});
Object.defineProperty(exports, "GET_CONVERSATION_ITEMS_ROUTE", {
enumerable: true,
get: function () { return chunk5KDVUPQN_cjs.GET_CONVERSATION_ITEMS_ROUTE; }
get: function () { return chunkPXY4G3SN_cjs.GET_CONVERSATION_ITEMS_ROUTE; }
});
Object.defineProperty(exports, "GET_CONVERSATION_ROUTE", {
enumerable: true,
get: function () { return chunk5KDVUPQN_cjs.GET_CONVERSATION_ROUTE; }
get: function () { return chunkPXY4G3SN_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-V5YAPSSQ.js';
export { CREATE_CONVERSATION_ROUTE, DELETE_CONVERSATION_ROUTE, GET_CONVERSATION_ITEMS_ROUTE, GET_CONVERSATION_ROUTE } from '../../chunk-YAEG3FIX.js';
//# sourceMappingURL=conversations.js.map
//# sourceMappingURL=conversations.js.map
'use strict';
var chunkL3I5OC4W_cjs = require('../../chunk-L3I5OC4W.cjs');
var chunkMJH4EEUV_cjs = require('../../chunk-MJH4EEUV.cjs');

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

enumerable: true,
get: function () { return chunkL3I5OC4W_cjs.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE; }
get: function () { return chunkMJH4EEUV_cjs.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE; }
});
Object.defineProperty(exports, "GET_EDITOR_BUILDER_SETTINGS_ROUTE", {
enumerable: true,
get: function () { return chunkL3I5OC4W_cjs.GET_EDITOR_BUILDER_SETTINGS_ROUTE; }
get: function () { return chunkMJH4EEUV_cjs.GET_EDITOR_BUILDER_SETTINGS_ROUTE; }
});
Object.defineProperty(exports, "GET_INFRASTRUCTURE_STATUS_ROUTE", {
enumerable: true,
get: function () { return chunkL3I5OC4W_cjs.GET_INFRASTRUCTURE_STATUS_ROUTE; }
get: function () { return chunkMJH4EEUV_cjs.GET_INFRASTRUCTURE_STATUS_ROUTE; }
});
Object.defineProperty(exports, "isBuilderFeatureEnabled", {
enumerable: true,
get: function () { return chunkL3I5OC4W_cjs.isBuilderFeatureEnabled; }
get: function () { return chunkMJH4EEUV_cjs.isBuilderFeatureEnabled; }
});
Object.defineProperty(exports, "requireBuilderFeature", {
enumerable: true,
get: function () { return chunkL3I5OC4W_cjs.requireBuilderFeature; }
get: function () { return chunkMJH4EEUV_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-KSYJQMJ7.js';
export { GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE, GET_EDITOR_BUILDER_SETTINGS_ROUTE, GET_INFRASTRUCTURE_STATUS_ROUTE, isBuilderFeatureEnabled, requireBuilderFeature } from '../../chunk-GZUFJQ5I.js';
//# sourceMappingURL=editor-builder.js.map
//# sourceMappingURL=editor-builder.js.map
'use strict';
var chunkSI63GFYM_cjs = require('../../chunk-SI63GFYM.cjs');
var chunkFR5QBXVS_cjs = require('../../chunk-FR5QBXVS.cjs');

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

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

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

export { enrichOrStripFavorites, prepareFavoritesEnrichment, stripFavoriteFields } from '../../chunk-U32YHG7T.js';
export { enrichOrStripFavorites, prepareFavoritesEnrichment, stripFavoriteFields } from '../../chunk-56RJJ6PJ.js';
//# sourceMappingURL=favorites-enrichment.js.map
//# sourceMappingURL=favorites-enrichment.js.map
'use strict';
var chunkZLES3TDX_cjs = require('../../chunk-ZLES3TDX.cjs');
var chunkOJB6MLRD_cjs = require('../../chunk-OJB6MLRD.cjs');

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

enumerable: true,
get: function () { return chunkZLES3TDX_cjs.CREATE_RESPONSE_ROUTE; }
get: function () { return chunkOJB6MLRD_cjs.CREATE_RESPONSE_ROUTE; }
});
Object.defineProperty(exports, "DELETE_RESPONSE_ROUTE", {
enumerable: true,
get: function () { return chunkZLES3TDX_cjs.DELETE_RESPONSE_ROUTE; }
get: function () { return chunkOJB6MLRD_cjs.DELETE_RESPONSE_ROUTE; }
});
Object.defineProperty(exports, "GET_RESPONSE_ROUTE", {
enumerable: true,
get: function () { return chunkZLES3TDX_cjs.GET_RESPONSE_ROUTE; }
get: function () { return chunkOJB6MLRD_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-6DTFR4ZS.js';
export { CREATE_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE } from '../../chunk-ZJM23PJU.js';
//# sourceMappingURL=responses.js.map
//# sourceMappingURL=responses.js.map
'use strict';
var chunkFLO6YIKC_cjs = require('../../chunk-FLO6YIKC.cjs');
var chunkI4X4UHQW_cjs = require('../../chunk-I4X4UHQW.cjs');

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

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

@@ -15,3 +15,3 @@ export declare const LIST_SCORERS_ROUTE: import("../server-adapter").ServerRoute<{}, Record<string, {

isRegistered: boolean;
source: "code" | "stored";
source: "code" | "stored" | "fs";
sampling?: Record<string, never> | undefined;

@@ -36,2 +36,3 @@ }>, "json", import("../server-adapter").RouteSchemas<undefined, undefined, undefined, import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodObject<{

stored: "stored";
fs: "fs";
}>;

@@ -55,3 +56,3 @@ }, import("zod/v4/core").$strip>>>, "GET", "/scores/scorers">;

isRegistered: boolean;
source: "code" | "stored";
source: "code" | "stored" | "fs";
sampling?: Record<string, never> | undefined;

@@ -78,2 +79,3 @@ } | null, "json", import("../server-adapter").RouteSchemas<import("zod").ZodObject<{

stored: "stored";
fs: "fs";
}>;

@@ -80,0 +82,0 @@ }, import("zod/v4/core").$strip>>>, "GET", "/scores/scorers/:scorerId">;

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

{"version":3,"file":"scores.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/scores.ts"],"names":[],"mappings":"AAkLA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6DAgB7B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uEAwB3B,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;+DA+BtC,CAAC;AAEH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qEA6BzC,CAAC;AAEH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;iFA4CzC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;qDAuB3B,CAAC"}
{"version":3,"file":"scores.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/scores.ts"],"names":[],"mappings":"AAkLA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6DAgB7B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uEAwB3B,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;+DA+BtC,CAAC;AAEH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qEA6BzC,CAAC;AAEH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;iFA4CzC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;qDAuB3B,CAAC"}

@@ -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-SNO2CFDL.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-DX4ROVTA.js';
//# sourceMappingURL=scores.js.map
//# sourceMappingURL=scores.js.map
'use strict';
var chunkLKOHTU4W_cjs = require('../../chunk-LKOHTU4W.cjs');
var chunkLRRO5PBP_cjs = require('../../chunk-LRRO5PBP.cjs');

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

enumerable: true,
get: function () { return chunkLKOHTU4W_cjs.FAVORITE_STORED_AGENT_ROUTE; }
get: function () { return chunkLRRO5PBP_cjs.FAVORITE_STORED_AGENT_ROUTE; }
});
Object.defineProperty(exports, "UNFAVORITE_STORED_AGENT_ROUTE", {
enumerable: true,
get: function () { return chunkLKOHTU4W_cjs.UNFAVORITE_STORED_AGENT_ROUTE; }
get: function () { return chunkLRRO5PBP_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-EB6H2VVW.js';
export { FAVORITE_STORED_AGENT_ROUTE, UNFAVORITE_STORED_AGENT_ROUTE } from '../../chunk-DPTBGWU7.js';
//# sourceMappingURL=stored-agent-favorites.js.map
//# sourceMappingURL=stored-agent-favorites.js.map
'use strict';
var chunkJWIAPHFH_cjs = require('../../chunk-JWIAPHFH.cjs');
var chunk6QQ4I6IY_cjs = require('../../chunk-6QQ4I6IY.cjs');

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

enumerable: true,
get: function () { return chunkJWIAPHFH_cjs.CREATE_STORED_AGENT_ROUTE; }
get: function () { return chunk6QQ4I6IY_cjs.CREATE_STORED_AGENT_ROUTE; }
});
Object.defineProperty(exports, "DELETE_STORED_AGENT_ROUTE", {
enumerable: true,
get: function () { return chunkJWIAPHFH_cjs.DELETE_STORED_AGENT_ROUTE; }
get: function () { return chunk6QQ4I6IY_cjs.DELETE_STORED_AGENT_ROUTE; }
});
Object.defineProperty(exports, "EXPORT_STORED_AGENT_ROUTE", {
enumerable: true,
get: function () { return chunkJWIAPHFH_cjs.EXPORT_STORED_AGENT_ROUTE; }
get: function () { return chunk6QQ4I6IY_cjs.EXPORT_STORED_AGENT_ROUTE; }
});
Object.defineProperty(exports, "GET_STORED_AGENT_DEPENDENTS_ROUTE", {
enumerable: true,
get: function () { return chunkJWIAPHFH_cjs.GET_STORED_AGENT_DEPENDENTS_ROUTE; }
get: function () { return chunk6QQ4I6IY_cjs.GET_STORED_AGENT_DEPENDENTS_ROUTE; }
});
Object.defineProperty(exports, "GET_STORED_AGENT_ROUTE", {
enumerable: true,
get: function () { return chunkJWIAPHFH_cjs.GET_STORED_AGENT_ROUTE; }
get: function () { return chunk6QQ4I6IY_cjs.GET_STORED_AGENT_ROUTE; }
});
Object.defineProperty(exports, "LIST_STORED_AGENTS_ROUTE", {
enumerable: true,
get: function () { return chunkJWIAPHFH_cjs.LIST_STORED_AGENTS_ROUTE; }
get: function () { return chunk6QQ4I6IY_cjs.LIST_STORED_AGENTS_ROUTE; }
});
Object.defineProperty(exports, "OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE", {
enumerable: true,
get: function () { return chunkJWIAPHFH_cjs.OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE; }
get: function () { return chunk6QQ4I6IY_cjs.OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE; }
});
Object.defineProperty(exports, "PREVIEW_INSTRUCTIONS_ROUTE", {
enumerable: true,
get: function () { return chunkJWIAPHFH_cjs.PREVIEW_INSTRUCTIONS_ROUTE; }
get: function () { return chunk6QQ4I6IY_cjs.PREVIEW_INSTRUCTIONS_ROUTE; }
});
Object.defineProperty(exports, "UPDATE_STORED_AGENT_ROUTE", {
enumerable: true,
get: function () { return chunkJWIAPHFH_cjs.UPDATE_STORED_AGENT_ROUTE; }
get: function () { return chunk6QQ4I6IY_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-EDFYCJM7.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-J63TLQKU.js';
//# sourceMappingURL=stored-agents.js.map
//# sourceMappingURL=stored-agents.js.map
'use strict';
var chunkMM7BEDAW_cjs = require('../../chunk-MM7BEDAW.cjs');
var chunk3EZOV6A3_cjs = require('../../chunk-3EZOV6A3.cjs');

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

enumerable: true,
get: function () { return chunkMM7BEDAW_cjs.FAVORITE_STORED_SKILL_ROUTE; }
get: function () { return chunk3EZOV6A3_cjs.FAVORITE_STORED_SKILL_ROUTE; }
});
Object.defineProperty(exports, "UNFAVORITE_STORED_SKILL_ROUTE", {
enumerable: true,
get: function () { return chunkMM7BEDAW_cjs.UNFAVORITE_STORED_SKILL_ROUTE; }
get: function () { return chunk3EZOV6A3_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-FQTRNIV6.js';
export { FAVORITE_STORED_SKILL_ROUTE, UNFAVORITE_STORED_SKILL_ROUTE } from '../../chunk-WLQ4XLHG.js';
//# sourceMappingURL=stored-skill-favorites.js.map
//# sourceMappingURL=stored-skill-favorites.js.map
'use strict';
var chunkUDTYX3A7_cjs = require('../../chunk-UDTYX3A7.cjs');
var chunkSORUUFZK_cjs = require('../../chunk-SORUUFZK.cjs');

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

enumerable: true,
get: function () { return chunkUDTYX3A7_cjs.CREATE_STORED_SKILL_ROUTE; }
get: function () { return chunkSORUUFZK_cjs.CREATE_STORED_SKILL_ROUTE; }
});
Object.defineProperty(exports, "DELETE_STORED_SKILL_ROUTE", {
enumerable: true,
get: function () { return chunkUDTYX3A7_cjs.DELETE_STORED_SKILL_ROUTE; }
get: function () { return chunkSORUUFZK_cjs.DELETE_STORED_SKILL_ROUTE; }
});
Object.defineProperty(exports, "GET_STORED_SKILL_ROUTE", {
enumerable: true,
get: function () { return chunkUDTYX3A7_cjs.GET_STORED_SKILL_ROUTE; }
get: function () { return chunkSORUUFZK_cjs.GET_STORED_SKILL_ROUTE; }
});
Object.defineProperty(exports, "LIST_STORED_SKILLS_ROUTE", {
enumerable: true,
get: function () { return chunkUDTYX3A7_cjs.LIST_STORED_SKILLS_ROUTE; }
get: function () { return chunkSORUUFZK_cjs.LIST_STORED_SKILLS_ROUTE; }
});
Object.defineProperty(exports, "PUBLISH_STORED_SKILL_ROUTE", {
enumerable: true,
get: function () { return chunkUDTYX3A7_cjs.PUBLISH_STORED_SKILL_ROUTE; }
get: function () { return chunkSORUUFZK_cjs.PUBLISH_STORED_SKILL_ROUTE; }
});
Object.defineProperty(exports, "UPDATE_STORED_SKILL_ROUTE", {
enumerable: true,
get: function () { return chunkUDTYX3A7_cjs.UPDATE_STORED_SKILL_ROUTE; }
get: function () { return chunkSORUUFZK_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-735J6KQA.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-LQXFAW5L.js';
//# sourceMappingURL=stored-skills.js.map
//# sourceMappingURL=stored-skills.js.map
'use strict';
var chunk7QRZY7RG_cjs = require('../../chunk-7QRZY7RG.cjs');
var chunkUXVICGWD_cjs = require('../../chunk-UXVICGWD.cjs');

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

enumerable: true,
get: function () { return chunk7QRZY7RG_cjs.GET_API_SCHEMA_ROUTE; }
get: function () { return chunkUXVICGWD_cjs.GET_API_SCHEMA_ROUTE; }
});
Object.defineProperty(exports, "GET_SYSTEM_PACKAGES_ROUTE", {
enumerable: true,
get: function () { return chunk7QRZY7RG_cjs.GET_SYSTEM_PACKAGES_ROUTE; }
get: function () { return chunkUXVICGWD_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-7WHBMHJO.js';
export { GET_API_SCHEMA_ROUTE, GET_SYSTEM_PACKAGES_ROUTE } from '../../chunk-XDR5CTSX.js';
//# sourceMappingURL=system.js.map
//# sourceMappingURL=system.js.map
'use strict';
var chunkK75VRP3V_cjs = require('../../chunk-K75VRP3V.cjs');
var chunkYRZYCQGE_cjs = require('../../chunk-YRZYCQGE.cjs');

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

enumerable: true,
get: function () { return chunkK75VRP3V_cjs.EXECUTE_AGENT_TOOL_ROUTE; }
get: function () { return chunkYRZYCQGE_cjs.EXECUTE_AGENT_TOOL_ROUTE; }
});
Object.defineProperty(exports, "EXECUTE_TOOL_ROUTE", {
enumerable: true,
get: function () { return chunkK75VRP3V_cjs.EXECUTE_TOOL_ROUTE; }
get: function () { return chunkYRZYCQGE_cjs.EXECUTE_TOOL_ROUTE; }
});
Object.defineProperty(exports, "GET_AGENT_TOOL_ROUTE", {
enumerable: true,
get: function () { return chunkK75VRP3V_cjs.GET_AGENT_TOOL_ROUTE; }
get: function () { return chunkYRZYCQGE_cjs.GET_AGENT_TOOL_ROUTE; }
});
Object.defineProperty(exports, "GET_TOOL_BY_ID_ROUTE", {
enumerable: true,
get: function () { return chunkK75VRP3V_cjs.GET_TOOL_BY_ID_ROUTE; }
get: function () { return chunkYRZYCQGE_cjs.GET_TOOL_BY_ID_ROUTE; }
});
Object.defineProperty(exports, "LIST_TOOLS_ROUTE", {
enumerable: true,
get: function () { return chunkK75VRP3V_cjs.LIST_TOOLS_ROUTE; }
get: function () { return chunkYRZYCQGE_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-U7XUUMFF.js';
export { EXECUTE_AGENT_TOOL_ROUTE, EXECUTE_TOOL_ROUTE, GET_AGENT_TOOL_ROUTE, GET_TOOL_BY_ID_ROUTE, LIST_TOOLS_ROUTE } from '../../chunk-KR2OUW3N.js';
//# sourceMappingURL=tools.js.map
//# sourceMappingURL=tools.js.map
'use strict';
var chunkO35VIFMS_cjs = require('../../chunk-O35VIFMS.cjs');
var chunkOE5GVCW4_cjs = require('../../chunk-OE5GVCW4.cjs');

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

enumerable: true,
get: function () { return chunkO35VIFMS_cjs.CANCEL_WORKFLOW_RUN_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.CANCEL_WORKFLOW_RUN_ROUTE; }
});
Object.defineProperty(exports, "CREATE_WORKFLOW_RUN_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.CREATE_WORKFLOW_RUN_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.CREATE_WORKFLOW_RUN_ROUTE; }
});
Object.defineProperty(exports, "DELETE_WORKFLOW_RUN_BY_ID_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.DELETE_WORKFLOW_RUN_BY_ID_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.DELETE_WORKFLOW_RUN_BY_ID_ROUTE; }
});
Object.defineProperty(exports, "EXECUTE_WORKFLOW_STEP_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.EXECUTE_WORKFLOW_STEP_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.EXECUTE_WORKFLOW_STEP_ROUTE; }
});
Object.defineProperty(exports, "GET_WORKFLOW_BY_ID_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.GET_WORKFLOW_BY_ID_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.GET_WORKFLOW_BY_ID_ROUTE; }
});
Object.defineProperty(exports, "GET_WORKFLOW_RUN_BY_ID_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.GET_WORKFLOW_RUN_BY_ID_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.GET_WORKFLOW_RUN_BY_ID_ROUTE; }
});
Object.defineProperty(exports, "LIST_WORKFLOWS_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.LIST_WORKFLOWS_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.LIST_WORKFLOWS_ROUTE; }
});
Object.defineProperty(exports, "LIST_WORKFLOW_RUNS_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.LIST_WORKFLOW_RUNS_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.LIST_WORKFLOW_RUNS_ROUTE; }
});
Object.defineProperty(exports, "OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE; }
});
Object.defineProperty(exports, "OBSERVE_STREAM_WORKFLOW_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.OBSERVE_STREAM_WORKFLOW_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.OBSERVE_STREAM_WORKFLOW_ROUTE; }
});
Object.defineProperty(exports, "RECEIVE_WORKFLOW_EVENT_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.RECEIVE_WORKFLOW_EVENT_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.RECEIVE_WORKFLOW_EVENT_ROUTE; }
});
Object.defineProperty(exports, "RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE; }
});
Object.defineProperty(exports, "RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE; }
});
Object.defineProperty(exports, "RESTART_ASYNC_WORKFLOW_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.RESTART_ASYNC_WORKFLOW_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.RESTART_ASYNC_WORKFLOW_ROUTE; }
});
Object.defineProperty(exports, "RESTART_WORKFLOW_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.RESTART_WORKFLOW_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.RESTART_WORKFLOW_ROUTE; }
});
Object.defineProperty(exports, "RESUME_ASYNC_WORKFLOW_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.RESUME_ASYNC_WORKFLOW_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.RESUME_ASYNC_WORKFLOW_ROUTE; }
});
Object.defineProperty(exports, "RESUME_NO_WAIT_WORKFLOW_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.RESUME_NO_WAIT_WORKFLOW_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.RESUME_NO_WAIT_WORKFLOW_ROUTE; }
});
Object.defineProperty(exports, "RESUME_STREAM_WORKFLOW_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.RESUME_STREAM_WORKFLOW_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.RESUME_STREAM_WORKFLOW_ROUTE; }
});
Object.defineProperty(exports, "RESUME_WORKFLOW_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.RESUME_WORKFLOW_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.RESUME_WORKFLOW_ROUTE; }
});
Object.defineProperty(exports, "START_ASYNC_WORKFLOW_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.START_ASYNC_WORKFLOW_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.START_ASYNC_WORKFLOW_ROUTE; }
});
Object.defineProperty(exports, "START_WORKFLOW_RUN_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.START_WORKFLOW_RUN_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.START_WORKFLOW_RUN_ROUTE; }
});
Object.defineProperty(exports, "STREAM_LEGACY_WORKFLOW_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.STREAM_LEGACY_WORKFLOW_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.STREAM_LEGACY_WORKFLOW_ROUTE; }
});
Object.defineProperty(exports, "STREAM_WORKFLOW_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.STREAM_WORKFLOW_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.STREAM_WORKFLOW_ROUTE; }
});
Object.defineProperty(exports, "TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE; }
});
Object.defineProperty(exports, "TIME_TRAVEL_STREAM_WORKFLOW_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.TIME_TRAVEL_STREAM_WORKFLOW_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.TIME_TRAVEL_STREAM_WORKFLOW_ROUTE; }
});
Object.defineProperty(exports, "TIME_TRAVEL_WORKFLOW_ROUTE", {
enumerable: true,
get: function () { return chunkO35VIFMS_cjs.TIME_TRAVEL_WORKFLOW_ROUTE; }
get: function () { return chunkOE5GVCW4_cjs.TIME_TRAVEL_WORKFLOW_ROUTE; }
});
//# sourceMappingURL=workflows.cjs.map
//# sourceMappingURL=workflows.cjs.map

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

export { CANCEL_WORKFLOW_RUN_ROUTE, CREATE_WORKFLOW_RUN_ROUTE, DELETE_WORKFLOW_RUN_BY_ID_ROUTE, EXECUTE_WORKFLOW_STEP_ROUTE, GET_WORKFLOW_BY_ID_ROUTE, GET_WORKFLOW_RUN_BY_ID_ROUTE, LIST_WORKFLOWS_ROUTE, LIST_WORKFLOW_RUNS_ROUTE, OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE, OBSERVE_STREAM_WORKFLOW_ROUTE, RECEIVE_WORKFLOW_EVENT_ROUTE, RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE, RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE, RESTART_ASYNC_WORKFLOW_ROUTE, RESTART_WORKFLOW_ROUTE, RESUME_ASYNC_WORKFLOW_ROUTE, RESUME_NO_WAIT_WORKFLOW_ROUTE, RESUME_STREAM_WORKFLOW_ROUTE, RESUME_WORKFLOW_ROUTE, START_ASYNC_WORKFLOW_ROUTE, START_WORKFLOW_RUN_ROUTE, STREAM_LEGACY_WORKFLOW_ROUTE, STREAM_WORKFLOW_ROUTE, TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE, TIME_TRAVEL_STREAM_WORKFLOW_ROUTE, TIME_TRAVEL_WORKFLOW_ROUTE } from '../../chunk-XX5G7THL.js';
export { CANCEL_WORKFLOW_RUN_ROUTE, CREATE_WORKFLOW_RUN_ROUTE, DELETE_WORKFLOW_RUN_BY_ID_ROUTE, EXECUTE_WORKFLOW_STEP_ROUTE, GET_WORKFLOW_BY_ID_ROUTE, GET_WORKFLOW_RUN_BY_ID_ROUTE, LIST_WORKFLOWS_ROUTE, LIST_WORKFLOW_RUNS_ROUTE, OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE, OBSERVE_STREAM_WORKFLOW_ROUTE, RECEIVE_WORKFLOW_EVENT_ROUTE, RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE, RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE, RESTART_ASYNC_WORKFLOW_ROUTE, RESTART_WORKFLOW_ROUTE, RESUME_ASYNC_WORKFLOW_ROUTE, RESUME_NO_WAIT_WORKFLOW_ROUTE, RESUME_STREAM_WORKFLOW_ROUTE, RESUME_WORKFLOW_ROUTE, START_ASYNC_WORKFLOW_ROUTE, START_WORKFLOW_RUN_ROUTE, STREAM_LEGACY_WORKFLOW_ROUTE, STREAM_WORKFLOW_ROUTE, TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE, TIME_TRAVEL_STREAM_WORKFLOW_ROUTE, TIME_TRAVEL_WORKFLOW_ROUTE } from '../../chunk-3MJF6POS.js';
//# sourceMappingURL=workflows.js.map
//# sourceMappingURL=workflows.js.map

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

{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/server/schemas/agents.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/server/schemas/agents.ts"],"names":[],"mappings":"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"}

@@ -12,7 +12,7 @@ export { SKILL_ORIGIN_METADATA_KEY, buildOriginMetadata, createStoredSkillBodySchema, createStoredSkillResponseSchema, deleteStoredSkillResponseSchema, getStoredSkillResponseSchema, listStoredSkillsQuerySchema, listStoredSkillsResponseSchema, publishStoredSkillBodySchema, publishStoredSkillResponseSchema, readSkillOrigin, skillOriginSchema, storedSkillIdPathParams, storedSkillSchema, updateStoredSkillBodySchema, updateStoredSkillResponseSchema } from '../../chunk-UIRQU4GW.js';

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, triggerExperimentBodySchema, updateDatasetBodySchema, updateExperimentResultBodySchema, updateItemBodySchema } from '../../chunk-X7KQ23MW.js';
export { agentConfigurationSchema, agentFeaturesSchema, agentModelsSchema, builderAvailableModelsResponseSchema, builderModelPolicySchema, builderPickerSchema, builderSettingsResponseSchema, defaultModelEntrySchema, infrastructureStatusResponseSchema, pickerAllowlistSchema, providerModelEntrySchema } from '../../chunk-JUOHAGMO.js';
export { agentConfigurationSchema, agentFeaturesSchema, agentModelsSchema, builderAvailableModelsResponseSchema, builderModelPolicySchema, builderPickerSchema, builderSettingsResponseSchema, defaultModelEntrySchema, infrastructureStatusResponseSchema, pickerAllowlistSchema, providerModelEntrySchema } from '../../chunk-PBNENTGS.js';
export { agentVersionPathParams, agentVersionSchema, compareVersionsResponseSchema, createVersionResponseSchema, getVersionResponseSchema, listVersionsResponseSchema, restoreVersionResponseSchema, versionIdPathParams } from '../../chunk-ONDWDP2S.js';
export { activateVersionResponseSchema, compareVersionsQuerySchema, createCompareVersionsResponseSchema, createListVersionsResponseSchema, createVersionBodySchema, deleteVersionResponseSchema, listVersionsQuerySchema, versionDiffEntrySchema, versionOrderBySchema } from '../../chunk-3OQMTFIV.js';
export { createIndexBodySchema, createIndexResponseSchema, deleteIndexResponseSchema, describeIndexResponseSchema, listEmbeddersResponseSchema, listIndexesResponseSchema, listVectorsResponseSchema, queryVectorsBodySchema, queryVectorsResponseSchema, upsertVectorsBodySchema, upsertVectorsResponseSchema, vectorIndexPathParams, vectorNamePathParams } from '../../chunk-RVICRXZF.js';
export { entityPathParams, listScorersResponseSchema, listScoresByEntityIdQuerySchema, listScoresByRunIdQuerySchema, listScoresByScorerIdQuerySchema, saveScoreBodySchema, saveScoreResponseSchema, scorerEntrySchema, scorerIdPathParams, scoresWithPaginationResponseSchema } from '../../chunk-OC4S3EDO.js';
export { entityPathParams, listScorersResponseSchema, listScoresByEntityIdQuerySchema, listScoresByRunIdQuerySchema, listScoresByScorerIdQuerySchema, saveScoreBodySchema, saveScoreResponseSchema, scorerEntrySchema, scorerIdPathParams, scoresWithPaginationResponseSchema } from '../../chunk-I2LG5WYB.js';
export { getMcpServerDetailQuerySchema, jsonRpcErrorSchema, listMcpServerToolsResponseSchema, listMcpServersQuerySchema, listMcpServersResponseSchema, executeToolBodySchema as mcpExecuteToolBodySchema, executeToolResponseSchema as mcpExecuteToolResponseSchema, mcpServerDetailPathParams, mcpServerIdPathParams, mcpServerToolPathParams, mcpToolInfoSchema, serverDetailSchema, serverInfoSchema, versionDetailSchema } from '../../chunk-356JZOB2.js';

@@ -32,3 +32,3 @@ export { conversationDeletedSchema, conversationIdPathParams, conversationItemsListSchema, conversationObjectSchema, createConversationBodySchema } from '../../chunk-WOE6XG6B.js';

export { createWorkflowRunResponseSchema, listWorkflowRunsQuerySchema, listWorkflowsResponseSchema, sendWorkflowRunEventBodySchema, workflowControlResponseSchema, workflowExecutionResultSchema, workflowInfoSchema, workflowRunResultQuerySchema, workflowRunResultSchema, workflowRunsResponseSchema } from '../../chunk-K4HCNNHA.js';
export { abortAgentThreadBodySchema, abortAgentThreadResponseSchema, agentExecutionBodySchema, agentExecutionLegacyBodySchema, agentIdPathParams, agentSkillPathParams, agentToolPathParams, agentVersionQuerySchema, approveNetworkToolCallBodySchema, approveToolCallBodySchema, declineNetworkToolCallBodySchema, declineToolCallBodySchema, enhanceInstructionsBodySchema, enhanceInstructionsResponseSchema, executeToolBodySchema, executeToolContextBodySchema, executeToolResponseSchema, generateResponseSchema, listAgentsResponseSchema, listSuspendedRunsQuerySchema, listSuspendedRunsResponseSchema, listToolsResponseSchema, modelConfigIdPathParams, modelManagementResponseSchema, observeAgentBodySchema, observeAgentResponseSchema, providerSchema, providersResponseSchema, queueAgentMessageBodySchema, reorderAgentModelListBodySchema, resumeStreamBodySchema, resumeStreamUntilIdleBodySchema, sendAgentMessageBodySchema, sendAgentSignalBodySchema, sendToolApprovalBodySchema, sendToolApprovalResponseSchema, serializedAgentDefinitionSchema, serializedAgentSchema, serializedAgentWithIdSchema, serializedProcessorSchema, serializedToolSchema, serializedWorkflowSchema, streamResponseSchema, streamUntilIdleBodySchema, subscribeAgentThreadBodySchema, toolCallResponseSchema, toolIdPathParams, updateAgentModelBodySchema, updateAgentModelInModelListBodySchema } from '../../chunk-WQB65Q5Y.js';
export { abortAgentThreadBodySchema, abortAgentThreadResponseSchema, agentExecutionBodySchema, agentExecutionLegacyBodySchema, agentIdPathParams, agentSkillPathParams, agentToolPathParams, agentVersionQuerySchema, approveNetworkToolCallBodySchema, approveToolCallBodySchema, declineNetworkToolCallBodySchema, declineToolCallBodySchema, enhanceInstructionsBodySchema, enhanceInstructionsResponseSchema, executeToolBodySchema, executeToolContextBodySchema, executeToolResponseSchema, generateResponseSchema, listAgentsResponseSchema, listSuspendedRunsQuerySchema, listSuspendedRunsResponseSchema, listToolsResponseSchema, modelConfigIdPathParams, modelManagementResponseSchema, observeAgentBodySchema, observeAgentResponseSchema, providerSchema, providersResponseSchema, queueAgentMessageBodySchema, reorderAgentModelListBodySchema, resumeStreamBodySchema, resumeStreamUntilIdleBodySchema, sendAgentMessageBodySchema, sendAgentSignalBodySchema, sendToolApprovalBodySchema, sendToolApprovalResponseSchema, serializedAgentDefinitionSchema, serializedAgentSchema, serializedAgentWithIdSchema, serializedProcessorSchema, serializedToolSchema, serializedWorkflowSchema, streamResponseSchema, streamUntilIdleBodySchema, subscribeAgentThreadBodySchema, toolCallResponseSchema, toolIdPathParams, updateAgentModelBodySchema, updateAgentModelInModelListBodySchema } from '../../chunk-R3KUPFCO.js';
export { generateSpeechBodySchema, getListenerResponseSchema, speakResponseSchema, transcribeSpeechBodySchema, transcribeSpeechResponseSchema, voiceSpeakersResponseSchema } from '../../chunk-LPT77UR6.js';

@@ -35,0 +35,0 @@ export { defaultOptionsSchema } from '../../chunk-TKP6FJQ3.js';

@@ -23,2 +23,3 @@ import { z } from 'zod/v4';

stored: "stored";
fs: "fs";
}>;

@@ -48,2 +49,3 @@ }, z.core.$strip>;

stored: "stored";
fs: "fs";
}>;

@@ -50,0 +52,0 @@ }, z.core.$strip>>;

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

{"version":3,"file":"scores.d.ts","sourceRoot":"","sources":["../../../src/server/schemas/scores.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AA4B3B;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;iBAQ5B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;kBAA0C,CAAC;AAGjF,eAAO,MAAM,kBAAkB;;iBAE7B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;iBAG3B,CAAC;AAMH,eAAO,MAAM,4BAA4B;;;iBAGvC,CAAC;AAEH,eAAO,MAAM,+BAA+B;;;;;iBAK1C,CAAC;AAEH,eAAO,MAAM,+BAA+B;;;iBAG1C,CAAC;AAGH,eAAO,MAAM,mBAAmB;;iBAE9B,CAAC;AAGH,eAAO,MAAM,kCAAkC;;;;;;;;iBAG7C,CAAC;AAEH,eAAO,MAAM,uBAAuB;;iBAElC,CAAC"}
{"version":3,"file":"scores.d.ts","sourceRoot":"","sources":["../../../src/server/schemas/scores.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AA4B3B;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;iBAQ5B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;kBAA0C,CAAC;AAGjF,eAAO,MAAM,kBAAkB;;iBAE7B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;iBAG3B,CAAC;AAMH,eAAO,MAAM,4BAA4B;;;iBAGvC,CAAC;AAEH,eAAO,MAAM,+BAA+B;;;;;iBAK1C,CAAC;AAEH,eAAO,MAAM,+BAA+B;;;iBAG1C,CAAC;AAGH,eAAO,MAAM,mBAAmB;;iBAE9B,CAAC;AAGH,eAAO,MAAM,kCAAkC;;;;;;;;iBAG7C,CAAC;AAEH,eAAO,MAAM,uBAAuB;;iBAElC,CAAC"}
'use strict';
var chunkRFJJ7ZAD_cjs = require('../../chunk-RFJJ7ZAD.cjs');
var chunk5SZOGYYO_cjs = require('../../chunk-5SZOGYYO.cjs');
var chunk4PQR3D5Y_cjs = require('../../chunk-4PQR3D5Y.cjs');

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

}
const permission = chunkRFJJ7ZAD_cjs.getEffectivePermission(route);
const permission = chunk5SZOGYYO_cjs.getEffectivePermission(route);
if (!permission) {

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

function getRoutePermissions(route) {
return [chunkRFJJ7ZAD_cjs.getEffectivePermission(route), route.fga?.permission].flatMap((value) => Array.isArray(value) ? value : [value]).filter((permission) => Boolean(permission));
return [chunk5SZOGYYO_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 = chunkRFJJ7ZAD_cjs.getEffectivePermission(route);
const requiredPermission = chunk5SZOGYYO_cjs.getEffectivePermission(route);
if (!requiredPermission) {

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

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

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

buildOpenAPISpec(config, prefix) {
const openApiSpec = chunkDN2NUSL2_cjs.generateOpenAPIDocument(chunkRFJJ7ZAD_cjs.SERVER_ROUTES, config);
const openApiSpec = chunkDN2NUSL2_cjs.generateOpenAPIDocument(chunk5SZOGYYO_cjs.SERVER_ROUTES, config);
if (prefix) {

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

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

@@ -1009,3 +1009,3 @@ }

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

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

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

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

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

import { getEffectivePermission, SERVER_ROUTES } from '../../chunk-TQPQ7HXR.js';
export { SERVER_ROUTES, deriveAction, derivePermission, extractResource, getEffectivePermission } from '../../chunk-TQPQ7HXR.js';
import { getEffectivePermission, SERVER_ROUTES } from '../../chunk-XJLHTR7T.js';
export { SERVER_ROUTES, deriveAction, derivePermission, extractResource, getEffectivePermission } from '../../chunk-XJLHTR7T.js';
import { coreAuthMiddleware } from '../../chunk-HATXNJ4V.js';

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

@@ -15,3 +15,3 @@ export declare const SCORES_ROUTES: readonly [import(".").ServerRoute<{}, Record<string, {

isRegistered: boolean;
source: "code" | "stored";
source: "code" | "stored" | "fs";
sampling?: Record<string, never> | undefined;

@@ -36,2 +36,3 @@ }>, "json", import(".").RouteSchemas<undefined, undefined, undefined, import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodObject<{

stored: "stored";
fs: "fs";
}>;

@@ -54,3 +55,3 @@ }, import("zod/v4/core").$strip>>>, "GET", "/scores/scorers">, import(".").ServerRoute<{

isRegistered: boolean;
source: "code" | "stored";
source: "code" | "stored" | "fs";
sampling?: Record<string, never> | undefined;

@@ -77,2 +78,3 @@ } | null, "json", import(".").RouteSchemas<import("zod").ZodObject<{

stored: "stored";
fs: "fs";
}>;

@@ -79,0 +81,0 @@ }, import("zod/v4/core").$strip>>>, "GET", "/scores/scorers/:scorerId">, import(".").ServerRoute<import(".").InferParams<import("zod").ZodObject<{

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

{"version":3,"file":"scorers.d.ts","sourceRoot":"","sources":["../../../../src/server/server-adapter/routes/scorers.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sDAOhB,CAAC"}
{"version":3,"file":"scorers.d.ts","sourceRoot":"","sources":["../../../../src/server/server-adapter/routes/scorers.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sDAOhB,CAAC"}
{
"name": "@mastra/server",
"version": "1.48.0-alpha.6",
"version": "1.48.0-alpha.7",
"description": "",

@@ -118,11 +118,11 @@ "type": "module",

"zod-to-ts": "^2.1.0",
"@internal/types-builder": "0.0.84",
"@internal/core": "0.1.0",
"@internal/lint": "0.0.109",
"@internal/storage-test-utils": "0.0.105",
"@internal/types-builder": "0.0.84",
"@internal/test-utils": "0.0.45",
"@internal/voice": "0.0.9",
"@mastra/agent-builder": "1.1.3-alpha.2",
"@mastra/core": "1.48.0-alpha.6",
"@internal/voice": "0.0.9",
"@mastra/core": "1.48.0-alpha.7",
"@mastra/schema-compat": "1.3.2-alpha.1",
"@internal/test-utils": "0.0.45"
"@internal/storage-test-utils": "0.0.105"
},

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

import { SERVER_ROUTES } from './chunk-TQPQ7HXR.js';
import { schemaToJsonSchema } from './chunk-Z5MTOVTR.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-4VFPTKMR.js.map
//# sourceMappingURL=api-schema-manifest-4VFPTKMR.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-4VFPTKMR.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 chunkRFJJ7ZAD_cjs = require('./chunk-RFJJ7ZAD.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.cjs');
// src/server/server-adapter/api-schema-manifest.ts
function convertSchema(schema) {
return schema ? chunkDN2NUSL2_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 = chunkRFJJ7ZAD_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-Q5FDXWHO.cjs.map
//# sourceMappingURL=api-schema-manifest-Q5FDXWHO.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-Q5FDXWHO.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"]}
'use strict';
var chunkHTBC6CVX_cjs = require('./chunk-HTBC6CVX.cjs');
var chunkF3HP5HM6_cjs = require('./chunk-F3HP5HM6.cjs');
var chunkKIDHIRVO_cjs = require('./chunk-KIDHIRVO.cjs');
var chunkFCOEWHH3_cjs = require('./chunk-FCOEWHH3.cjs');
var chunk42M6Y2OD_cjs = require('./chunk-42M6Y2OD.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/v1/conversations",
responseType: "json",
bodySchema: chunkHTBC6CVX_cjs.createConversationBodySchema,
responseSchema: chunkHTBC6CVX_cjs.conversationObjectSchema,
summary: "Create a conversation",
description: "Creates a new thread-backed conversation for agent-backed Responses API requests",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunk42M6Y2OD_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 chunkFCOEWHH3_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 chunkKIDHIRVO_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 = chunk42M6Y2OD_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/v1/conversations/:conversationId",
responseType: "json",
pathParamSchema: chunkHTBC6CVX_cjs.conversationIdPathParams,
responseSchema: chunkHTBC6CVX_cjs.conversationObjectSchema,
summary: "Retrieve a conversation",
description: "Returns a conversation object backed by a Mastra memory thread",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunk42M6Y2OD_cjs.MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await chunkKIDHIRVO_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/v1/conversations/:conversationId/items",
responseType: "json",
pathParamSchema: chunkHTBC6CVX_cjs.conversationIdPathParams,
responseSchema: chunkHTBC6CVX_cjs.conversationItemsListSchema,
summary: "List conversation items",
description: "Returns OpenAI-style conversation items derived from the stored thread messages",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunk42M6Y2OD_cjs.MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await chunkKIDHIRVO_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 = chunkDN2NUSL2_cjs.createRoute({
method: "DELETE",
path: "/v1/conversations/:conversationId",
responseType: "json",
pathParamSchema: chunkHTBC6CVX_cjs.conversationIdPathParams,
responseSchema: chunkHTBC6CVX_cjs.conversationDeletedSchema,
summary: "Delete a conversation",
description: "Deletes a thread-backed conversation and its stored items",
tags: ["Responses"],
requiresAuth: true,
requiresPermission: chunk42M6Y2OD_cjs.MastraFGAPermissions.AGENTS_DELETE,
handler: async ({ mastra, requestContext, conversationId }) => {
try {
const match = await chunkKIDHIRVO_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-5KDVUPQN.cjs.map
//# sourceMappingURL=chunk-5KDVUPQN.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-5KDVUPQN.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"]}
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-L4DD3HSB.js';
import { getAgentFromSystem } from './chunk-FU2NIFNJ.js';
import { MastraFGAPermissions, getEffectiveThreadId, getEffectiveResourceId, enforceThreadAccess } from './chunk-JBSUT5XF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-6DTFR4ZS.js.map
//# sourceMappingURL=chunk-6DTFR4ZS.js.map
{"version":3,"sources":["../src/server/handlers/responses.ts"],"names":["existingThread","threadId","createdThread","completedState"],"mappings":"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","file":"chunk-6DTFR4ZS.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"]}
import { listStoredSkillsResponseSchema, listStoredSkillsQuerySchema, getStoredSkillResponseSchema, storedSkillIdPathParams, createStoredSkillResponseSchema, createStoredSkillBodySchema, updateStoredSkillResponseSchema, updateStoredSkillBodySchema, deleteStoredSkillResponseSchema, publishStoredSkillResponseSchema, publishStoredSkillBodySchema } from './chunk-UIRQU4GW.js';
import { stripFavoriteFields, prepareFavoritesEnrichment, enrichOrStripFavorites } from './chunk-U32YHG7T.js';
import { isBuilderFeatureEnabled } from './chunk-KSYJQMJ7.js';
import { resolveAuthorFilter, getCallerAuthorId, matchesAuthorFilter, assertReadAccess, assertWriteAccess } from './chunk-SXZS6VZ3.js';
import { getStoredResourceScope, scopeStoredResourceMetadata, assertStoredResourceScope, toSlug } from './chunk-EOGTJIPF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-735J6KQA.js.map
//# sourceMappingURL=chunk-735J6KQA.js.map
{"version":3,"sources":["../src/server/handlers/stored-skills.ts"],"names":["annotated"],"mappings":"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","file":"chunk-735J6KQA.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 chunkAKJAQVZ3_cjs = require('./chunk-AKJAQVZ3.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/system/api-schema",
responseType: "json",
responseSchema: chunkAKJAQVZ3_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-Q5FDXWHO.cjs');
return buildApiSchemaManifest();
}
});
var GET_SYSTEM_PACKAGES_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/system/packages",
responseType: "json",
responseSchema: chunkAKJAQVZ3_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 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,
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-7QRZY7RG.cjs.map
//# sourceMappingURL=chunk-7QRZY7RG.cjs.map
{"version":3,"sources":["../src/server/handlers/system.ts"],"names":["createRoute","apiSchemaManifestResponseSchema","systemPackagesResponseSchema","readFileSync","handleError"],"mappings":"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","file":"chunk-7QRZY7RG.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 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 observabilityRuntimeStrategy,\n };\n } catch (error) {\n return handleError(error, 'Error getting system packages');\n }\n },\n});\n"]}
import { apiSchemaManifestResponseSchema, systemPackagesResponseSchema } from './chunk-ZA2G7XV3.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-4VFPTKMR.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 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,
observabilityRuntimeStrategy
};
} catch (error) {
return handleError(error, "Error getting system packages");
}
}
});
export { GET_API_SCHEMA_ROUTE, GET_SYSTEM_PACKAGES_ROUTE };
//# sourceMappingURL=chunk-7WHBMHJO.js.map
//# sourceMappingURL=chunk-7WHBMHJO.js.map
{"version":3,"sources":["../src/server/handlers/system.ts"],"names":[],"mappings":"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","file":"chunk-7WHBMHJO.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 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 observabilityRuntimeStrategy,\n };\n } catch (error) {\n return handleError(error, 'Error getting system packages');\n }\n },\n});\n"]}
'use strict';
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var v4 = require('zod/v4');
var scoringSamplingConfigSchema = v4.z.object({});
var mastraScorerConfigSchema = v4.z.object({
id: v4.z.string(),
name: v4.z.string().optional(),
description: v4.z.string(),
type: v4.z.unknown().optional(),
judge: v4.z.unknown().optional()
});
var mastraScorerSchema = v4.z.object({
config: mastraScorerConfigSchema
});
var scorerEntrySchema = v4.z.object({
scorer: mastraScorerSchema,
sampling: scoringSamplingConfigSchema.optional(),
agentIds: v4.z.array(v4.z.string()),
agentNames: v4.z.array(v4.z.string()),
workflowIds: v4.z.array(v4.z.string()),
isRegistered: v4.z.boolean(),
source: v4.z.enum(["code", "stored"])
});
var listScorersResponseSchema = v4.z.record(v4.z.string(), scorerEntrySchema);
var scorerIdPathParams = v4.z.object({
scorerId: v4.z.string().describe("Unique identifier for the scorer")
});
var entityPathParams = v4.z.object({
entityType: v4.z.string().describe("Type of the entity (AGENT or WORKFLOW)"),
entityId: v4.z.string().describe("Unique identifier for the entity")
});
var listScoresByRunIdQuerySchema = v4.z.object({
page: v4.z.coerce.number().optional().default(0),
perPage: v4.z.coerce.number().optional().default(10)
});
var listScoresByScorerIdQuerySchema = v4.z.object({
page: v4.z.coerce.number().optional().default(0),
perPage: v4.z.coerce.number().optional().default(10),
entityId: v4.z.string().optional(),
entityType: v4.z.string().optional()
});
var listScoresByEntityIdQuerySchema = v4.z.object({
page: v4.z.coerce.number().optional().default(0),
perPage: v4.z.coerce.number().optional().default(10)
});
var saveScoreBodySchema = v4.z.object({
score: v4.z.unknown()
// ScoreRowData - complex type
});
var scoresWithPaginationResponseSchema = v4.z.object({
pagination: chunkDIG2K5CV_cjs.paginationInfoSchema,
scores: v4.z.array(v4.z.unknown())
// Array of score records
});
var saveScoreResponseSchema = v4.z.object({
score: v4.z.unknown()
// ScoreRowData
});
exports.entityPathParams = entityPathParams;
exports.listScorersResponseSchema = listScorersResponseSchema;
exports.listScoresByEntityIdQuerySchema = listScoresByEntityIdQuerySchema;
exports.listScoresByRunIdQuerySchema = listScoresByRunIdQuerySchema;
exports.listScoresByScorerIdQuerySchema = listScoresByScorerIdQuerySchema;
exports.saveScoreBodySchema = saveScoreBodySchema;
exports.saveScoreResponseSchema = saveScoreResponseSchema;
exports.scorerEntrySchema = scorerEntrySchema;
exports.scorerIdPathParams = scorerIdPathParams;
exports.scoresWithPaginationResponseSchema = scoresWithPaginationResponseSchema;
//# sourceMappingURL=chunk-DCDQNIYY.cjs.map
//# sourceMappingURL=chunk-DCDQNIYY.cjs.map
{"version":3,"sources":["../src/server/schemas/scores.ts"],"names":["z","paginationInfoSchema"],"mappings":"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","file":"chunk-DCDQNIYY.cjs","sourcesContent":["import { z } from 'zod/v4';\nimport { paginationInfoSchema } from './common';\n\n/**\n * Schema for sampling configuration\n * Using passthrough to allow various sampling config shapes\n */\nconst scoringSamplingConfigSchema = z.object({});\n\n/**\n * Schema for MastraScorer config object\n */\nconst mastraScorerConfigSchema = z.object({\n id: z.string(),\n name: z.string().optional(),\n description: z.string(),\n type: z.unknown().optional(),\n judge: z.unknown().optional(),\n});\n\n/**\n * Schema for MastraScorer\n * Only validates public config property, uses passthrough to allow class instance\n */\nconst mastraScorerSchema = z.object({\n config: mastraScorerConfigSchema,\n});\n\n/**\n * Schema for scorer entry with associations to agents and workflows\n */\nexport const scorerEntrySchema = z.object({\n scorer: mastraScorerSchema,\n sampling: scoringSamplingConfigSchema.optional(),\n agentIds: z.array(z.string()),\n agentNames: z.array(z.string()),\n workflowIds: z.array(z.string()),\n isRegistered: z.boolean(),\n source: z.enum(['code', 'stored']),\n});\n\n/**\n * Response schema for list scorers endpoint\n * Returns a record of scorer ID to scorer entry with associations\n */\nexport const listScorersResponseSchema = z.record(z.string(), scorerEntrySchema);\n\n// Path parameter schemas\nexport const scorerIdPathParams = z.object({\n scorerId: z.string().describe('Unique identifier for the scorer'),\n});\n\nexport const entityPathParams = z.object({\n entityType: z.string().describe('Type of the entity (AGENT or WORKFLOW)'),\n entityId: z.string().describe('Unique identifier for the entity'),\n});\n\n// Query parameter schemas\n// HTTP query params must be flat (e.g., ?page=0&perPage=10)\n// Adapters should transform these into nested pagination objects for handlers if needed\n\nexport const listScoresByRunIdQuerySchema = z.object({\n page: z.coerce.number().optional().default(0),\n perPage: z.coerce.number().optional().default(10),\n});\n\nexport const listScoresByScorerIdQuerySchema = z.object({\n page: z.coerce.number().optional().default(0),\n perPage: z.coerce.number().optional().default(10),\n entityId: z.string().optional(),\n entityType: z.string().optional(),\n});\n\nexport const listScoresByEntityIdQuerySchema = z.object({\n page: z.coerce.number().optional().default(0),\n perPage: z.coerce.number().optional().default(10),\n});\n\n// Body schema for saving scores\nexport const saveScoreBodySchema = z.object({\n score: z.unknown(), // ScoreRowData - complex type\n});\n\n// Response schemas\nexport const scoresWithPaginationResponseSchema = z.object({\n pagination: paginationInfoSchema,\n scores: z.array(z.unknown()), // Array of score records\n});\n\nexport const saveScoreResponseSchema = z.object({\n score: z.unknown(), // ScoreRowData\n});\n"]}
import { favoriteToggleResponseSchema } from './chunk-SFPN7SHZ.js';
import { requireBuilderFeature } from './chunk-KSYJQMJ7.js';
import { getCallerAuthorId, assertReadAccess } from './chunk-SXZS6VZ3.js';
import { storedAgentIdPathParams } from './chunk-SPVKRK56.js';
import { assertStoredResourceScope, getStoredResourceScope } from './chunk-EOGTJIPF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-EB6H2VVW.js.map
//# sourceMappingURL=chunk-EB6H2VVW.js.map
{"version":3,"sources":["../src/server/handlers/stored-agent-favorites.ts"],"names":[],"mappings":"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","file":"chunk-EB6H2VVW.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"]}
import { validateMetadataAvatarUrl } from './chunk-HMJL3C3H.js';
import { stripFavoriteFields, prepareFavoritesEnrichment, enrichOrStripFavorites } from './chunk-U32YHG7T.js';
import { isBuilderFeatureEnabled } from './chunk-KSYJQMJ7.js';
import { handleAutoVersioning } from './chunk-33QPJPK4.js';
import { prepareAuthorEnrichment, attachAuthor } from './chunk-KLV64VVH.js';
import { resolveAuthorFilter, getCallerAuthorId, matchesAuthorFilter, assertReadAccess, assertWriteAccess } from './chunk-SXZS6VZ3.js';
import { listStoredAgentsResponseSchema, listStoredAgentsQuerySchema, exportStoredAgentResponseSchema, exportStoredAgentBodySchema, storedAgentIdPathParams, openStoredAgentChangeRequestResponseSchema, openStoredAgentChangeRequestBodySchema, getStoredAgentResponseSchema, createStoredAgentResponseSchema, createStoredAgentBodySchema, updateStoredAgentResponseSchema, updateStoredAgentBodySchema, deleteStoredAgentResponseSchema, getStoredAgentDependentsResponseSchema, previewInstructionsResponseSchema, previewInstructionsBodySchema } from './chunk-SPVKRK56.js';
import { statusQuerySchema } from './chunk-2YY3EMMS.js';
import { getStoredResourceScope, scopeStoredResourceMetadata, assertStoredResourceScope, toSlug } from './chunk-EOGTJIPF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-EDFYCJM7.js.map
//# sourceMappingURL=chunk-EDFYCJM7.js.map

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

'use strict';
var chunkDCDQNIYY_cjs = require('./chunk-DCDQNIYY.cjs');
var chunkFCOEWHH3_cjs = require('./chunk-FCOEWHH3.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/scores/scorers",
responseType: "json",
responseSchema: chunkDCDQNIYY_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/scores/scorers/:scorerId",
responseType: "json",
pathParamSchema: chunkDCDQNIYY_cjs.scorerIdPathParams,
responseSchema: chunkDCDQNIYY_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/scores/run/:runId",
responseType: "json",
pathParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
queryParamSchema: chunkDCDQNIYY_cjs.listScoresByRunIdQuerySchema,
responseSchema: chunkDCDQNIYY_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/scores/scorer/:scorerId",
responseType: "json",
pathParamSchema: chunkDCDQNIYY_cjs.scorerIdPathParams,
queryParamSchema: chunkDCDQNIYY_cjs.listScoresByScorerIdQuerySchema,
responseSchema: chunkDCDQNIYY_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/scores/entity/:entityType/:entityId",
responseType: "json",
pathParamSchema: chunkDCDQNIYY_cjs.entityPathParams,
queryParamSchema: chunkDCDQNIYY_cjs.listScoresByEntityIdQuerySchema,
responseSchema: chunkDCDQNIYY_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 chunkFCOEWHH3_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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/scores",
responseType: "json",
bodySchema: chunkDCDQNIYY_cjs.saveScoreBodySchema,
responseSchema: chunkDCDQNIYY_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-FLO6YIKC.cjs.map
//# sourceMappingURL=chunk-FLO6YIKC.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-FLO6YIKC.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';\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 { storedSkillIdPathParams } from './chunk-UIRQU4GW.js';
import { favoriteToggleResponseSchema } from './chunk-SFPN7SHZ.js';
import { requireBuilderFeature } from './chunk-KSYJQMJ7.js';
import { getCallerAuthorId, assertReadAccess } from './chunk-SXZS6VZ3.js';
import { assertStoredResourceScope, getStoredResourceScope } from './chunk-EOGTJIPF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-FQTRNIV6.js.map
//# sourceMappingURL=chunk-FQTRNIV6.js.map
{"version":3,"sources":["../src/server/handlers/stored-skill-favorites.ts"],"names":[],"mappings":"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","file":"chunk-FQTRNIV6.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"]}

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 chunkCXAJPAJ2_cjs = require('./chunk-CXAJPAJ2.cjs');
var chunkFCOEWHH3_cjs = require('./chunk-FCOEWHH3.cjs');
var chunkAJ4VAZFT_cjs = require('./chunk-AJ4VAZFT.cjs');
var chunkYWUVDFQZ_cjs = require('./chunk-YWUVDFQZ.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 chunkFCOEWHH3_cjs.getAgentFromSystem({ mastra, agentId });
const [instructions, tools] = await Promise.all([agent.getInstructions({ requestContext }), agent.listTools({ requestContext })]);
const agentCard = {
name: agent.id || agentId,
description: chunkYWUVDFQZ_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 `${chunkAJ4VAZFT_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 chunkFCOEWHH3_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/.well-known/:agentId/agent-card.json",
responseType: "json",
pathParamSchema: chunkCXAJPAJ2_cjs.a2aAgentIdPathParams,
responseSchema: chunkCXAJPAJ2_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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/a2a/:agentId",
responseType: "datastream-response",
pathParamSchema: chunkCXAJPAJ2_cjs.a2aAgentIdPathParams,
bodySchema: chunkCXAJPAJ2_cjs.agentExecutionBodySchema,
responseSchema: chunkCXAJPAJ2_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-FVXUFEHO.cjs.map
//# sourceMappingURL=chunk-FVXUFEHO.cjs.map

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

'use strict';
var chunkPFKYMKIH_cjs = require('./chunk-PFKYMKIH.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var v4 = require('zod/v4');
var jsonValueSchema = v4.z.lazy(
() => v4.z.union([
v4.z.string(),
v4.z.number(),
v4.z.boolean(),
v4.z.null(),
v4.z.array(jsonValueSchema),
v4.z.record(v4.z.string(), jsonValueSchema)
])
);
var jsonRecordSchema = v4.z.record(v4.z.string(), jsonValueSchema);
var signalAttributesSchema = v4.z.record(
v4.z.string(),
v4.z.union([v4.z.string(), v4.z.number(), v4.z.boolean(), v4.z.null(), v4.z.undefined()])
);
var baseSignalSchema = v4.z.object({
id: v4.z.string().optional(),
createdAt: v4.z.union([v4.z.string(), v4.z.date()]).optional(),
metadata: jsonRecordSchema.optional(),
attributes: signalAttributesSchema.optional()
});
var partProviderOptionsSchema = v4.z.record(v4.z.string(), v4.z.record(v4.z.string(), jsonValueSchema)).optional();
var signalTextPartSchema = v4.z.object({
type: v4.z.literal("text"),
text: v4.z.string(),
providerOptions: partProviderOptionsSchema
});
var signalFilePartSchema = v4.z.object({
type: v4.z.literal("file"),
data: v4.z.string(),
mediaType: v4.z.string(),
filename: v4.z.string().optional(),
providerOptions: partProviderOptionsSchema
});
var userMessageSignalContentsSchema = v4.z.union([
v4.z.string(),
v4.z.array(v4.z.union([signalTextPartSchema, signalFilePartSchema]))
]);
var agentMessageInputObjectSchema = v4.z.object({
contents: userMessageSignalContentsSchema,
attributes: signalAttributesSchema.optional(),
metadata: jsonRecordSchema.optional(),
providerOptions: v4.z.record(v4.z.string(), v4.z.record(v4.z.string(), jsonValueSchema)).optional()
});
var agentMessageInputSchema = v4.z.union([userMessageSignalContentsSchema, agentMessageInputObjectSchema]);
var agentSignalSchema = baseSignalSchema.extend({
type: v4.z.enum(["user", "state", "reactive", "notification", "user-message", "system-reminder"]),
tagName: v4.z.string().optional(),
contents: userMessageSignalContentsSchema,
providerOptions: v4.z.record(v4.z.string(), v4.z.record(v4.z.string(), jsonValueSchema)).optional()
});
var agentIdPathParams = v4.z.object({
agentId: v4.z.string().describe("Unique identifier for the agent")
});
var agentVersionQuerySchema = v4.z.object({
status: v4.z.enum(["draft", "published"]).optional().describe(
"Which stored config version to resolve: draft (latest, default) or published (active version). Mutually exclusive with versionId."
),
versionId: v4.z.string().optional().describe(
"Specific version ID to resolve. Mutually exclusive with status \u2014 if both are provided, versionId takes precedence."
)
});
var toolIdPathParams = v4.z.object({
toolId: v4.z.string().describe("Unique identifier for the tool")
});
var agentToolPathParams = agentIdPathParams.extend({
toolId: v4.z.string().describe("Unique identifier for the tool")
});
var agentSkillPathParams = agentIdPathParams.extend({
skillName: v4.z.string().describe("Name of the skill")
});
var modelConfigIdPathParams = agentIdPathParams.extend({
modelConfigId: v4.z.string().describe("Unique identifier for the model configuration")
});
var serializedProcessorSchema = v4.z.object({
id: v4.z.string(),
name: v4.z.string().optional()
});
var serializedToolSchema = v4.z.object({
id: v4.z.string(),
description: v4.z.string().optional(),
inputSchema: v4.z.string().optional(),
outputSchema: v4.z.string().optional(),
requireApproval: v4.z.boolean().optional()
});
var serializedWorkflowSchema = v4.z.object({
name: v4.z.string(),
steps: v4.z.record(
v4.z.string(),
v4.z.object({
id: v4.z.string(),
description: v4.z.string().optional()
})
).optional()
});
var serializedAgentDefinitionSchema = v4.z.object({
id: v4.z.string(),
name: v4.z.string()
});
var systemMessageSchema = v4.z.union([
v4.z.string(),
v4.z.array(v4.z.string()),
v4.z.any(),
// CoreSystemMessage or SystemModelMessage
v4.z.array(v4.z.any())
]);
var modelConfigSchema = v4.z.object({
model: v4.z.object({
modelId: v4.z.string(),
provider: v4.z.string(),
modelVersion: v4.z.string()
})
// Additional fields from AgentModelManagerConfig can be added here
});
var agentEditorConfigSchema = v4.z.union([
v4.z.literal(false),
v4.z.object({
instructions: v4.z.boolean().optional(),
tools: v4.z.union([v4.z.boolean(), v4.z.object({ description: v4.z.boolean().optional() })]).optional()
})
]);
var serializedAgentSchema = v4.z.object({
name: v4.z.string(),
description: v4.z.string().optional(),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional(),
instructions: systemMessageSchema.optional(),
tools: v4.z.record(v4.z.string(), serializedToolSchema),
agents: v4.z.record(v4.z.string(), serializedAgentDefinitionSchema),
workflows: v4.z.record(v4.z.string(), serializedWorkflowSchema),
inputProcessors: v4.z.array(serializedProcessorSchema),
outputProcessors: v4.z.array(serializedProcessorSchema),
provider: v4.z.string().optional(),
modelId: v4.z.string().optional(),
modelVersion: v4.z.string().optional(),
supportsMemory: v4.z.boolean().optional(),
modelList: v4.z.array(modelConfigSchema).optional(),
defaultOptions: chunkPFKYMKIH_cjs.defaultOptionsSchema.optional(),
defaultGenerateOptionsLegacy: v4.z.record(v4.z.string(), v4.z.any()).optional(),
defaultStreamOptionsLegacy: v4.z.record(v4.z.string(), v4.z.any()).optional(),
source: v4.z.enum(["code", "stored"]).optional(),
status: v4.z.enum(["draft", "published", "archived"]).optional(),
activeVersionId: v4.z.string().optional(),
hasDraft: v4.z.boolean().optional(),
editor: agentEditorConfigSchema.optional()
});
var serializedAgentWithIdSchema = serializedAgentSchema.extend({
id: v4.z.string()
});
var providerSchema = v4.z.object({
id: v4.z.string(),
name: v4.z.string(),
label: v4.z.string().optional(),
description: v4.z.string().optional(),
envVar: v4.z.union([v4.z.string(), v4.z.array(v4.z.string())]),
connected: v4.z.boolean(),
docUrl: v4.z.string().optional(),
models: v4.z.array(v4.z.string())
});
var providersResponseSchema = v4.z.object({
providers: v4.z.array(providerSchema)
});
var listAgentsResponseSchema = v4.z.record(v4.z.string(), serializedAgentSchema);
var listToolsResponseSchema = v4.z.record(v4.z.string(), serializedToolSchema);
var agentMemoryOptionSchema = v4.z.object({
thread: v4.z.union([v4.z.string(), v4.z.object({ id: v4.z.string() }).passthrough()]),
resource: v4.z.string(),
options: v4.z.record(v4.z.string(), v4.z.any()).optional(),
readOnly: v4.z.boolean().optional()
});
var toolChoiceSchema = v4.z.union([
v4.z.enum(["auto", "none", "required"]),
v4.z.object({ type: v4.z.literal("tool"), toolName: v4.z.string() })
]);
var agentExecutionBodySchema = v4.z.object({
// REQUIRED
messages: v4.z.union([
v4.z.array(chunkDIG2K5CV_cjs.coreMessageSchema),
// Array of messages
v4.z.string()
// Single user message shorthand
]),
// Message Configuration
instructions: systemMessageSchema.optional(),
system: systemMessageSchema.optional(),
context: v4.z.array(chunkDIG2K5CV_cjs.coreMessageSchema).optional(),
// Memory & Persistence
memory: agentMemoryOptionSchema.optional(),
runId: v4.z.string().optional(),
savePerStep: v4.z.boolean().optional(),
// Request Context (handler-specific field - merged with server's requestContext)
requestContext: v4.z.record(v4.z.string(), v4.z.any()).optional(),
// Version overrides for sub-agents (and future primitives)
versions: v4.z.object({
agents: v4.z.record(
v4.z.string(),
v4.z.union([v4.z.object({ versionId: v4.z.string() }), v4.z.object({ status: v4.z.enum(["draft", "published"]) })])
).optional(),
defaultStatus: v4.z.enum(["draft", "published"]).optional()
}).optional(),
// Execution Control
maxSteps: v4.z.number().optional(),
stopWhen: v4.z.any().optional(),
// Model Configuration
providerOptions: v4.z.object({
anthropic: v4.z.record(v4.z.string(), v4.z.any()).optional(),
google: v4.z.record(v4.z.string(), v4.z.any()).optional(),
openai: v4.z.record(v4.z.string(), v4.z.any()).optional(),
xai: v4.z.record(v4.z.string(), v4.z.any()).optional()
}).optional(),
modelSettings: v4.z.any().optional(),
// Tool Configuration
activeTools: v4.z.array(v4.z.string()).optional(),
toolsets: v4.z.record(v4.z.string(), v4.z.any()).optional(),
clientTools: v4.z.record(v4.z.string(), v4.z.any()).optional(),
toolChoice: toolChoiceSchema.optional(),
requireToolApproval: v4.z.boolean().optional(),
// Evaluation
scorers: v4.z.union([
v4.z.record(v4.z.string(), v4.z.any()),
v4.z.record(
v4.z.string(),
v4.z.object({
scorer: v4.z.string(),
sampling: v4.z.any().optional()
})
)
]).optional(),
returnScorerData: v4.z.boolean().optional(),
// Observability
tracingOptions: chunkDIG2K5CV_cjs.tracingOptionsSchema.optional(),
// Structured Output
output: v4.z.any().optional(),
// Zod schema, JSON schema, or structured output object
structuredOutput: v4.z.object({
schema: v4.z.object({}).passthrough(),
model: v4.z.union([v4.z.string(), v4.z.any()]).optional(),
instructions: v4.z.string().optional(),
jsonPromptInjection: v4.z.boolean().optional(),
errorStrategy: v4.z.enum(["strict", "warn", "fallback"]).optional(),
fallbackValue: v4.z.any().optional()
}).optional(),
// Idle-loop streaming (collapses streamUntilIdle into stream)
untilIdle: v4.z.union([v4.z.boolean(), v4.z.object({ maxIdleMs: v4.z.number().int().positive().optional() })]).optional()
}).passthrough();
var agentExecutionLegacyBodySchema = agentExecutionBodySchema.extend({
resourceId: v4.z.string().optional(),
resourceid: v4.z.string().optional(),
// lowercase variant
threadId: v4.z.string().optional()
});
var streamUntilIdleBodySchema = agentExecutionBodySchema.extend({
maxIdleMs: v4.z.number().int().positive().optional(),
untilIdle: v4.z.union([v4.z.boolean(), v4.z.object({ maxIdleMs: v4.z.number().int().positive().optional() })]).optional()
});
var resumeStreamUntilIdleBodySchema = agentExecutionBodySchema.omit({ messages: true }).extend({
runId: v4.z.string(),
resumeData: v4.z.unknown().refine((x) => x !== void 0, { message: "resumeData is required" }),
toolCallId: v4.z.string().optional(),
maxIdleMs: v4.z.number().int().positive().optional()
});
var executeToolDataBodySchema = v4.z.object({
data: v4.z.unknown().refine((x) => x !== void 0, { message: "data is required" })
});
var executeToolBodySchema = executeToolDataBodySchema.extend({
requestContext: v4.z.record(v4.z.string(), v4.z.any()).optional()
});
var executeToolContextBodySchema = executeToolDataBodySchema.extend({
requestContext: v4.z.record(v4.z.string(), v4.z.any()).optional()
});
var toolCallActionBodySchema = v4.z.object({
runId: v4.z.string(),
requestContext: v4.z.record(v4.z.string(), v4.z.any()).optional(),
toolCallId: v4.z.string(),
format: v4.z.string().optional()
});
var networkToolCallActionBodySchema = v4.z.object({
runId: v4.z.string(),
requestContext: v4.z.record(v4.z.string(), v4.z.any()).optional(),
format: v4.z.string().optional()
});
var approveToolCallBodySchema = toolCallActionBodySchema;
var declineToolCallBodySchema = toolCallActionBodySchema;
var approveNetworkToolCallBodySchema = networkToolCallActionBodySchema;
var declineNetworkToolCallBodySchema = networkToolCallActionBodySchema;
var toolCallResponseSchema = v4.z.object({
fullStream: v4.z.any()
// ReadableStream
});
var sendToolApprovalResponseSchema = v4.z.object({
accepted: v4.z.literal(true),
runId: v4.z.string(),
toolCallId: v4.z.string().optional()
});
var listSuspendedRunsQuerySchema = v4.z.object({
threadId: v4.z.string().optional(),
resourceId: v4.z.string().optional(),
fromDate: v4.z.coerce.date().optional(),
toDate: v4.z.coerce.date().optional(),
perPage: v4.z.coerce.number().int().positive().optional(),
// page is zero-indexed, so 0 is valid
page: v4.z.coerce.number().int().nonnegative().optional()
}).refine((data) => !data.fromDate || !data.toDate || data.fromDate <= data.toDate, {
message: "fromDate must be less than or equal to toDate",
path: ["fromDate"]
});
var listSuspendedRunsResponseSchema = v4.z.object({
runs: v4.z.array(
v4.z.object({
runId: v4.z.string(),
status: v4.z.literal("suspended"),
threadId: v4.z.string().optional(),
resourceId: v4.z.string().optional(),
suspendedAt: v4.z.date(),
toolCalls: v4.z.array(
v4.z.object({
toolCallId: v4.z.string().optional(),
toolName: v4.z.string().optional(),
args: v4.z.unknown().optional(),
requiresApproval: v4.z.boolean(),
suspendPayload: v4.z.unknown().optional()
})
)
})
),
total: v4.z.number().int().nonnegative()
});
var resumeStreamBodySchema = agentExecutionBodySchema.omit({ messages: true }).extend({
runId: v4.z.string(),
resumeData: v4.z.unknown().refine((x) => x !== void 0, { message: "resumeData is required" }),
toolCallId: v4.z.string().optional()
});
var updateAgentModelBodySchema = v4.z.object({
modelId: v4.z.string(),
provider: v4.z.string()
});
var reorderAgentModelListBodySchema = v4.z.object({
reorderedModelIds: v4.z.array(v4.z.string())
});
var updateAgentModelInModelListBodySchema = v4.z.object({
model: v4.z.object({
modelId: v4.z.string(),
provider: v4.z.string()
}).optional(),
maxRetries: v4.z.number().optional(),
enabled: v4.z.boolean().optional()
});
var modelManagementResponseSchema = chunkDIG2K5CV_cjs.messageResponseSchema;
var generateResponseSchema = v4.z.any();
var streamResponseSchema = v4.z.any();
var executeToolResponseSchema = v4.z.any();
var enhanceInstructionsBodySchema = v4.z.object({
instructions: v4.z.string().describe("The current agent instructions to enhance"),
comment: v4.z.string().describe("User comment describing how to enhance the instructions")
});
var enhanceInstructionsResponseSchema = v4.z.object({
explanation: v4.z.string().describe("Explanation of the changes made"),
new_prompt: v4.z.string().describe("The enhanced instructions")
});
var observeAgentBodySchema = v4.z.object({
runId: v4.z.string().describe("The run ID to observe/reconnect to"),
offset: v4.z.number().optional().describe("Resume from this event index (0-based). If omitted, replays all events.")
});
var signalActiveBehaviorSchema = v4.z.enum(["deliver", "persist", "discard"]);
var signalIdleBehaviorSchema = v4.z.enum(["wake", "persist", "discard"]);
var signalTargetBaseBodySchema = v4.z.object({
ifActive: v4.z.object({
behavior: signalActiveBehaviorSchema.optional(),
attributes: signalAttributesSchema.optional()
}).optional()
});
var signalTargetBodySchema = v4.z.union([
signalTargetBaseBodySchema.extend({
runId: v4.z.string(),
resourceId: v4.z.string().optional(),
threadId: v4.z.string().optional(),
ifIdle: v4.z.undefined().optional()
}),
signalTargetBaseBodySchema.extend({
runId: v4.z.undefined().optional(),
resourceId: v4.z.string(),
threadId: v4.z.string(),
ifIdle: v4.z.object({
behavior: signalIdleBehaviorSchema.optional(),
streamOptions: agentExecutionBodySchema.omit({ messages: true }).optional(),
attributes: signalAttributesSchema.optional()
}).optional()
})
]);
var sendAgentSignalBodySchema = v4.z.union([
signalTargetBodySchema.options[0].extend({ signal: agentSignalSchema }),
signalTargetBodySchema.options[1].extend({ signal: agentSignalSchema })
]);
var sendAgentMessageBodySchema = v4.z.union([
signalTargetBodySchema.options[0].extend({ message: agentMessageInputSchema }),
signalTargetBodySchema.options[1].extend({ message: agentMessageInputSchema })
]);
var queueAgentMessageBodySchema = sendAgentMessageBodySchema;
var subscribeAgentThreadBodySchema = v4.z.object({
resourceId: v4.z.string().optional(),
threadId: v4.z.string()
});
var abortAgentThreadBodySchema = subscribeAgentThreadBodySchema;
var sendToolApprovalBodySchema = v4.z.object({
resourceId: v4.z.string(),
threadId: v4.z.string(),
requestContext: v4.z.record(v4.z.string(), v4.z.any()).optional(),
toolCallId: v4.z.string(),
approved: v4.z.boolean(),
resumeData: v4.z.any().optional(),
format: v4.z.string().optional(),
messages: v4.z.array(chunkDIG2K5CV_cjs.coreMessageSchema).optional(),
streamOptions: v4.z.any().optional()
});
var abortAgentThreadResponseSchema = v4.z.object({
aborted: v4.z.boolean()
});
var observeAgentResponseSchema = v4.z.any();
exports.abortAgentThreadBodySchema = abortAgentThreadBodySchema;
exports.abortAgentThreadResponseSchema = abortAgentThreadResponseSchema;
exports.agentExecutionBodySchema = agentExecutionBodySchema;
exports.agentExecutionLegacyBodySchema = agentExecutionLegacyBodySchema;
exports.agentIdPathParams = agentIdPathParams;
exports.agentSkillPathParams = agentSkillPathParams;
exports.agentToolPathParams = agentToolPathParams;
exports.agentVersionQuerySchema = agentVersionQuerySchema;
exports.approveNetworkToolCallBodySchema = approveNetworkToolCallBodySchema;
exports.approveToolCallBodySchema = approveToolCallBodySchema;
exports.declineNetworkToolCallBodySchema = declineNetworkToolCallBodySchema;
exports.declineToolCallBodySchema = declineToolCallBodySchema;
exports.enhanceInstructionsBodySchema = enhanceInstructionsBodySchema;
exports.enhanceInstructionsResponseSchema = enhanceInstructionsResponseSchema;
exports.executeToolBodySchema = executeToolBodySchema;
exports.executeToolContextBodySchema = executeToolContextBodySchema;
exports.executeToolResponseSchema = executeToolResponseSchema;
exports.generateResponseSchema = generateResponseSchema;
exports.listAgentsResponseSchema = listAgentsResponseSchema;
exports.listSuspendedRunsQuerySchema = listSuspendedRunsQuerySchema;
exports.listSuspendedRunsResponseSchema = listSuspendedRunsResponseSchema;
exports.listToolsResponseSchema = listToolsResponseSchema;
exports.modelConfigIdPathParams = modelConfigIdPathParams;
exports.modelManagementResponseSchema = modelManagementResponseSchema;
exports.observeAgentBodySchema = observeAgentBodySchema;
exports.observeAgentResponseSchema = observeAgentResponseSchema;
exports.providerSchema = providerSchema;
exports.providersResponseSchema = providersResponseSchema;
exports.queueAgentMessageBodySchema = queueAgentMessageBodySchema;
exports.reorderAgentModelListBodySchema = reorderAgentModelListBodySchema;
exports.resumeStreamBodySchema = resumeStreamBodySchema;
exports.resumeStreamUntilIdleBodySchema = resumeStreamUntilIdleBodySchema;
exports.sendAgentMessageBodySchema = sendAgentMessageBodySchema;
exports.sendAgentSignalBodySchema = sendAgentSignalBodySchema;
exports.sendToolApprovalBodySchema = sendToolApprovalBodySchema;
exports.sendToolApprovalResponseSchema = sendToolApprovalResponseSchema;
exports.serializedAgentDefinitionSchema = serializedAgentDefinitionSchema;
exports.serializedAgentSchema = serializedAgentSchema;
exports.serializedAgentWithIdSchema = serializedAgentWithIdSchema;
exports.serializedProcessorSchema = serializedProcessorSchema;
exports.serializedToolSchema = serializedToolSchema;
exports.serializedWorkflowSchema = serializedWorkflowSchema;
exports.streamResponseSchema = streamResponseSchema;
exports.streamUntilIdleBodySchema = streamUntilIdleBodySchema;
exports.subscribeAgentThreadBodySchema = subscribeAgentThreadBodySchema;
exports.toolCallResponseSchema = toolCallResponseSchema;
exports.toolIdPathParams = toolIdPathParams;
exports.updateAgentModelBodySchema = updateAgentModelBodySchema;
exports.updateAgentModelInModelListBodySchema = updateAgentModelInModelListBodySchema;
//# sourceMappingURL=chunk-HBXNOBJN.cjs.map
//# sourceMappingURL=chunk-HBXNOBJN.cjs.map
{"version":3,"sources":["../src/server/schemas/agents.ts"],"names":["z","defaultOptionsSchema","coreMessageSchema","tracingOptionsSchema","messageResponseSchema"],"mappings":"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","file":"chunk-HBXNOBJN.cjs","sourcesContent":["import { z } from 'zod/v4';\nimport { tracingOptionsSchema, coreMessageSchema, messageResponseSchema } from './common';\nimport { defaultOptionsSchema } from './default-options';\n\nexport {\n generateSpeechBodySchema,\n getListenerResponseSchema,\n speakResponseSchema,\n transcribeSpeechBodySchema,\n transcribeSpeechResponseSchema,\n voiceSpeakersResponseSchema,\n} from '@internal/voice/routes';\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\n\nconst jsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(jsonValueSchema),\n z.record(z.string(), jsonValueSchema),\n ]),\n);\nconst jsonRecordSchema = z.record(z.string(), jsonValueSchema);\n\nconst signalAttributesSchema = z.record(\n z.string(),\n z.union([z.string(), z.number(), z.boolean(), z.null(), z.undefined()]),\n);\n\nconst baseSignalSchema = z.object({\n id: z.string().optional(),\n createdAt: z.union([z.string(), z.date()]).optional(),\n metadata: jsonRecordSchema.optional(),\n attributes: signalAttributesSchema.optional(),\n});\n\nconst partProviderOptionsSchema = z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional();\n\nconst signalTextPartSchema = z.object({\n type: z.literal('text'),\n text: z.string(),\n providerOptions: partProviderOptionsSchema,\n});\n\nconst signalFilePartSchema = z.object({\n type: z.literal('file'),\n data: z.string(),\n mediaType: z.string(),\n filename: z.string().optional(),\n providerOptions: partProviderOptionsSchema,\n});\n\nconst userMessageSignalContentsSchema = z.union([\n z.string(),\n z.array(z.union([signalTextPartSchema, signalFilePartSchema])),\n]);\n\nconst agentMessageInputObjectSchema = z.object({\n contents: userMessageSignalContentsSchema,\n attributes: signalAttributesSchema.optional(),\n metadata: jsonRecordSchema.optional(),\n providerOptions: z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional(),\n});\n\nconst agentMessageInputSchema = z.union([userMessageSignalContentsSchema, agentMessageInputObjectSchema]);\n\nconst agentSignalSchema = baseSignalSchema.extend({\n type: z.enum(['user', 'state', 'reactive', 'notification', 'user-message', 'system-reminder']),\n tagName: z.string().optional(),\n contents: userMessageSignalContentsSchema,\n providerOptions: z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional(),\n});\n\n// Path parameter schemas\nexport const agentIdPathParams = z.object({\n agentId: z.string().describe('Unique identifier for the agent'),\n});\n\n/**\n * Query params for GET /agents/:agentId — controls which stored config version is used for overrides.\n * Use either `status` or `versionId`, not both.\n * - `status` — 'draft' (latest version, default) or 'published' (active published version).\n * - `versionId` — Resolve with a specific version ID.\n */\nexport const agentVersionQuerySchema = z.object({\n status: z\n .enum(['draft', 'published'])\n .optional()\n .describe(\n 'Which stored config version to resolve: draft (latest, default) or published (active version). Mutually exclusive with versionId.',\n ),\n versionId: z\n .string()\n .optional()\n .describe(\n 'Specific version ID to resolve. Mutually exclusive with status — if both are provided, versionId takes precedence.',\n ),\n});\n\nexport const toolIdPathParams = z.object({\n toolId: z.string().describe('Unique identifier for the tool'),\n});\n\nexport const agentToolPathParams = agentIdPathParams.extend({\n toolId: z.string().describe('Unique identifier for the tool'),\n});\n\nexport const agentSkillPathParams = agentIdPathParams.extend({\n skillName: z.string().describe('Name of the skill'),\n});\n\nexport const modelConfigIdPathParams = agentIdPathParams.extend({\n modelConfigId: z.string().describe('Unique identifier for the model configuration'),\n});\n\n/**\n * Schema for serialized processor metadata\n */\nexport const serializedProcessorSchema = z.object({\n id: z.string(),\n name: z.string().optional(),\n});\n\n/**\n * Schema for serialized tool with JSON schemas\n * Uses passthrough() to allow additional tool properties beyond core fields\n */\nexport const serializedToolSchema = z.object({\n id: z.string(),\n description: z.string().optional(),\n inputSchema: z.string().optional(),\n outputSchema: z.string().optional(),\n requireApproval: z.boolean().optional(),\n});\n\n/**\n * Schema for serialized workflow with steps\n */\nexport const serializedWorkflowSchema = z.object({\n name: z.string(),\n steps: z\n .record(\n z.string(),\n z.object({\n id: z.string(),\n description: z.string().optional(),\n }),\n )\n .optional(),\n});\n\n/**\n * Schema for serialized agent definition (referenced by other agents)\n */\nexport const serializedAgentDefinitionSchema = z.object({\n id: z.string(),\n name: z.string(),\n});\n\n/**\n * Schema for SystemMessage type\n * Can be string, string[], or various message objects\n */\nconst systemMessageSchema = z.union([\n z.string(),\n z.array(z.string()),\n z.any(), // CoreSystemMessage or SystemModelMessage\n z.array(z.any()),\n]);\n\n/**\n * Schema for model configuration in model list\n */\nconst modelConfigSchema = z.object({\n model: z.object({\n modelId: z.string(),\n provider: z.string(),\n modelVersion: z.string(),\n }),\n // Additional fields from AgentModelManagerConfig can be added here\n});\n\nconst agentEditorConfigSchema = z.union([\n z.literal(false),\n z.object({\n instructions: z.boolean().optional(),\n tools: z.union([z.boolean(), z.object({ description: z.boolean().optional() })]).optional(),\n }),\n]);\n\n/**\n * Main schema for serialized agent representation\n */\nexport const serializedAgentSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n instructions: systemMessageSchema.optional(),\n tools: z.record(z.string(), serializedToolSchema),\n agents: z.record(z.string(), serializedAgentDefinitionSchema),\n workflows: z.record(z.string(), serializedWorkflowSchema),\n inputProcessors: z.array(serializedProcessorSchema),\n outputProcessors: z.array(serializedProcessorSchema),\n provider: z.string().optional(),\n modelId: z.string().optional(),\n modelVersion: z.string().optional(),\n supportsMemory: z.boolean().optional(),\n modelList: z.array(modelConfigSchema).optional(),\n defaultOptions: defaultOptionsSchema.optional(),\n defaultGenerateOptionsLegacy: z.record(z.string(), z.any()).optional(),\n defaultStreamOptionsLegacy: z.record(z.string(), z.any()).optional(),\n source: z.enum(['code', 'stored']).optional(),\n status: z.enum(['draft', 'published', 'archived']).optional(),\n activeVersionId: z.string().optional(),\n hasDraft: z.boolean().optional(),\n editor: agentEditorConfigSchema.optional(),\n});\n\n/**\n * Schema for agent with ID\n */\nexport const serializedAgentWithIdSchema = serializedAgentSchema.extend({\n id: z.string(),\n});\n\n/**\n * Schema for individual provider information\n */\nexport const providerSchema = z.object({\n id: z.string(),\n name: z.string(),\n label: z.string().optional(),\n description: z.string().optional(),\n envVar: z.union([z.string(), z.array(z.string())]),\n connected: z.boolean(),\n docUrl: z.string().optional(),\n models: z.array(z.string()),\n});\n\n/**\n * Schema for providers endpoint response\n */\nexport const providersResponseSchema = z.object({\n providers: z.array(providerSchema),\n});\n\nexport type ProviderListItem = z.infer<typeof providerSchema>;\n\n/**\n * Schema for list agents endpoint response\n * Returns a record of agent ID to serialized agent\n */\nexport const listAgentsResponseSchema = z.record(z.string(), serializedAgentSchema);\n\n/**\n * Schema for list tools endpoint response\n * Returns a record of tool ID to serialized tool\n */\nexport const listToolsResponseSchema = z.record(z.string(), serializedToolSchema);\n\n// ============================================================================\n// Agent Execution Body Schemas\n// ============================================================================\n\n/**\n * Schema for agent memory option\n */\nconst agentMemoryOptionSchema = z.object({\n thread: z.union([z.string(), z.object({ id: z.string() }).passthrough()]),\n resource: z.string(),\n options: z.record(z.string(), z.any()).optional(),\n readOnly: z.boolean().optional(),\n});\n\n/**\n * Schema for tool choice configuration\n */\nconst toolChoiceSchema = z.union([\n z.enum(['auto', 'none', 'required']),\n z.object({ type: z.literal('tool'), toolName: z.string() }),\n]);\n\n/**\n * Comprehensive body schema for agent generate and stream endpoints\n * Validates common fields while using passthrough for complex nested objects\n *\n * EXCLUDED FIELDS (not serializable):\n * - Callbacks: onStepFinish, onFinish, onChunk, onError, onAbort, prepareStep\n * - Class instances: inputProcessors, outputProcessors\n * - Non-serializable: abortSignal, tracingContext\n */\nexport const agentExecutionBodySchema = z\n .object({\n // REQUIRED\n messages: z.union([\n z.array(coreMessageSchema), // Array of messages\n z.string(), // Single user message shorthand\n ]),\n\n // Message Configuration\n instructions: systemMessageSchema.optional(),\n system: systemMessageSchema.optional(),\n context: z.array(coreMessageSchema).optional(),\n\n // Memory & Persistence\n memory: agentMemoryOptionSchema.optional(),\n runId: z.string().optional(),\n savePerStep: z.boolean().optional(),\n\n // Request Context (handler-specific field - merged with server's requestContext)\n requestContext: z.record(z.string(), z.any()).optional(),\n\n // Version overrides for sub-agents (and future primitives)\n versions: z\n .object({\n agents: z\n .record(\n z.string(),\n z.union([z.object({ versionId: z.string() }), z.object({ status: z.enum(['draft', 'published']) })]),\n )\n .optional(),\n defaultStatus: z.enum(['draft', 'published']).optional(),\n })\n .optional(),\n\n // Execution Control\n maxSteps: z.number().optional(),\n stopWhen: z.any().optional(),\n\n // Model Configuration\n providerOptions: z\n .object({\n anthropic: z.record(z.string(), z.any()).optional(),\n google: z.record(z.string(), z.any()).optional(),\n openai: z.record(z.string(), z.any()).optional(),\n xai: z.record(z.string(), z.any()).optional(),\n })\n .optional(),\n modelSettings: z.any().optional(),\n\n // Tool Configuration\n activeTools: z.array(z.string()).optional(),\n toolsets: z.record(z.string(), z.any()).optional(),\n clientTools: z.record(z.string(), z.any()).optional(),\n toolChoice: toolChoiceSchema.optional(),\n requireToolApproval: z.boolean().optional(),\n\n // Evaluation\n scorers: z\n .union([\n z.record(z.string(), z.any()),\n z.record(\n z.string(),\n z.object({\n scorer: z.string(),\n sampling: z.any().optional(),\n }),\n ),\n ])\n .optional(),\n returnScorerData: z.boolean().optional(),\n\n // Observability\n tracingOptions: tracingOptionsSchema.optional(),\n\n // Structured Output\n output: z.any().optional(), // Zod schema, JSON schema, or structured output object\n structuredOutput: z\n .object({\n schema: z.object({}).passthrough(),\n model: z.union([z.string(), z.any()]).optional(),\n instructions: z.string().optional(),\n jsonPromptInjection: z.boolean().optional(),\n errorStrategy: z.enum(['strict', 'warn', 'fallback']).optional(),\n fallbackValue: z.any().optional(),\n })\n .optional(),\n\n // Idle-loop streaming (collapses streamUntilIdle into stream)\n untilIdle: z.union([z.boolean(), z.object({ maxIdleMs: z.number().int().positive().optional() })]).optional(),\n })\n .passthrough(); // Allow additional fields for forward compatibility\n\n/**\n * Legacy body schema for deprecated endpoints that still use threadId/resourceId\n * Used by /agents/:agentId/generate-legacy and /agents/:agentId/stream-legacy\n */\nexport const agentExecutionLegacyBodySchema = agentExecutionBodySchema.extend({\n resourceId: z.string().optional(),\n resourceid: z.string().optional(), // lowercase variant\n threadId: z.string().optional(),\n});\n\nexport const streamUntilIdleBodySchema = agentExecutionBodySchema.extend({\n maxIdleMs: z.number().int().positive().optional(),\n untilIdle: z.union([z.boolean(), z.object({ maxIdleMs: z.number().int().positive().optional() })]).optional(),\n});\n\nexport const resumeStreamUntilIdleBodySchema = agentExecutionBodySchema.omit({ messages: true }).extend({\n runId: z.string(),\n resumeData: z.unknown().refine(x => x !== undefined, { message: 'resumeData is required' }),\n toolCallId: z.string().optional(),\n maxIdleMs: z.number().int().positive().optional(),\n});\n/**\n * Body schema for tool execute endpoint\n * Simple schema - tool validates its own input data\n * Note: Using z.unknown().refine() instead of z.any() to ensure data is required\n * (z.any() is treated as optional by Zod)\n */\nconst executeToolDataBodySchema = z.object({\n data: z.unknown().refine(x => x !== undefined, { message: 'data is required' }),\n});\n\nexport const executeToolBodySchema = executeToolDataBodySchema.extend({\n requestContext: z.record(z.string(), z.any()).optional(),\n});\n\nexport const executeToolContextBodySchema = executeToolDataBodySchema.extend({\n requestContext: z.record(z.string(), z.any()).optional(),\n});\n\n// ============================================================================\n// Tool Approval Schemas\n// ============================================================================\n\n/**\n * Base schema for tool approval/decline operations\n * Both approve and decline use the same parameters\n */\nconst toolCallActionBodySchema = z.object({\n runId: z.string(),\n requestContext: z.record(z.string(), z.any()).optional(),\n toolCallId: z.string(),\n format: z.string().optional(),\n});\nconst networkToolCallActionBodySchema = z.object({\n runId: z.string(),\n requestContext: z.record(z.string(), z.any()).optional(),\n format: z.string().optional(),\n});\n\n/**\n * Body schema for approving tool call\n */\nexport const approveToolCallBodySchema = toolCallActionBodySchema;\n\n/**\n * Body schema for declining tool call\n */\nexport const declineToolCallBodySchema = toolCallActionBodySchema;\n\n/**\n * Body schema for approving network tool call\n */\nexport const approveNetworkToolCallBodySchema = networkToolCallActionBodySchema;\n\n/**\n * Body schema for declining network tool call\n */\nexport const declineNetworkToolCallBodySchema = networkToolCallActionBodySchema;\n\n/**\n * Response schema for tool approval/decline\n */\nexport const toolCallResponseSchema = z.object({\n fullStream: z.any(), // ReadableStream\n});\n\nexport const sendToolApprovalResponseSchema = z.object({\n accepted: z.literal(true),\n runId: z.string(),\n toolCallId: z.string().optional(),\n});\n\n/**\n * Query schema for listing suspended agent runs\n */\nexport const listSuspendedRunsQuerySchema = z\n .object({\n threadId: z.string().optional(),\n resourceId: z.string().optional(),\n fromDate: z.coerce.date().optional(),\n toDate: z.coerce.date().optional(),\n perPage: z.coerce.number().int().positive().optional(),\n // page is zero-indexed, so 0 is valid\n page: z.coerce.number().int().nonnegative().optional(),\n })\n .refine(data => !data.fromDate || !data.toDate || data.fromDate <= data.toDate, {\n message: 'fromDate must be less than or equal to toDate',\n path: ['fromDate'],\n });\n\n/**\n * Response schema for listing suspended agent runs\n */\nexport const listSuspendedRunsResponseSchema = z.object({\n runs: z.array(\n z.object({\n runId: z.string(),\n status: z.literal('suspended'),\n threadId: z.string().optional(),\n resourceId: z.string().optional(),\n suspendedAt: z.date(),\n toolCalls: z.array(\n z.object({\n toolCallId: z.string().optional(),\n toolName: z.string().optional(),\n args: z.unknown().optional(),\n requiresApproval: z.boolean(),\n suspendPayload: z.unknown().optional(),\n }),\n ),\n }),\n ),\n total: z.number().int().nonnegative(),\n});\n\n// ============================================================================\n// Resume Stream Schema\n// ============================================================================\n\n/**\n * Body schema for resuming a suspended agent stream with custom data.\n * Extends the agent execution body without messages, since resume\n * continues from a prior suspension point rather than starting fresh.\n */\nexport const resumeStreamBodySchema = agentExecutionBodySchema.omit({ messages: true }).extend({\n runId: z.string(),\n resumeData: z.unknown().refine(x => x !== undefined, { message: 'resumeData is required' }),\n toolCallId: z.string().optional(),\n});\n\n// ============================================================================\n// Model Management Schemas\n// ============================================================================\n\n/**\n * Body schema for updating agent model\n */\nexport const updateAgentModelBodySchema = z.object({\n modelId: z.string(),\n provider: z.string(),\n});\n\n/**\n * Body schema for reordering agent model list\n */\nexport const reorderAgentModelListBodySchema = z.object({\n reorderedModelIds: z.array(z.string()),\n});\n\n/**\n * Body schema for updating model in model list\n */\nexport const updateAgentModelInModelListBodySchema = z.object({\n model: z\n .object({\n modelId: z.string(),\n provider: z.string(),\n })\n .optional(),\n maxRetries: z.number().optional(),\n enabled: z.boolean().optional(),\n});\n\n/**\n * Response schema for model management operations\n */\nexport const modelManagementResponseSchema = messageResponseSchema;\n\n// ============================================================================\n// Response schemas for agent generation endpoints\n// These return AI SDK types which have complex structures\n// ============================================================================\n\nexport const generateResponseSchema = z.any(); // AI SDK GenerateResult type\nexport const streamResponseSchema = z.any(); // AI SDK StreamResult type\nexport const executeToolResponseSchema = z.any(); // Tool execution result varies by tool\n\n// ============================================================================\n// Instruction Enhancement Schemas\n// ============================================================================\n\n/**\n * Body schema for enhancing agent instructions\n */\nexport const enhanceInstructionsBodySchema = z.object({\n instructions: z.string().describe('The current agent instructions to enhance'),\n comment: z.string().describe('User comment describing how to enhance the instructions'),\n});\n\n/**\n * Response schema for enhanced instructions\n */\nexport const enhanceInstructionsResponseSchema = z.object({\n explanation: z.string().describe('Explanation of the changes made'),\n new_prompt: z.string().describe('The enhanced instructions'),\n});\n\n// ============================================================================\n// Observe (Resumable Streams) Schemas\n// ============================================================================\n\n/**\n * Body schema for observing an agent stream\n * Used to reconnect to an existing stream and receive missed events\n */\nexport const observeAgentBodySchema = z.object({\n runId: z.string().describe('The run ID to observe/reconnect to'),\n offset: z.number().optional().describe('Resume from this event index (0-based). If omitted, replays all events.'),\n});\n\nconst signalActiveBehaviorSchema = z.enum(['deliver', 'persist', 'discard']);\nconst signalIdleBehaviorSchema = z.enum(['wake', 'persist', 'discard']);\n\nconst signalTargetBaseBodySchema = z.object({\n ifActive: z\n .object({\n behavior: signalActiveBehaviorSchema.optional(),\n attributes: signalAttributesSchema.optional(),\n })\n .optional(),\n});\n\nconst signalTargetBodySchema = z.union([\n signalTargetBaseBodySchema.extend({\n runId: z.string(),\n resourceId: z.string().optional(),\n threadId: z.string().optional(),\n ifIdle: z.undefined().optional(),\n }),\n signalTargetBaseBodySchema.extend({\n runId: z.undefined().optional(),\n resourceId: z.string(),\n threadId: z.string(),\n ifIdle: z\n .object({\n behavior: signalIdleBehaviorSchema.optional(),\n streamOptions: agentExecutionBodySchema.omit({ messages: true }).optional(),\n attributes: signalAttributesSchema.optional(),\n })\n .optional(),\n }),\n]);\n\nexport const sendAgentSignalBodySchema = z.union([\n signalTargetBodySchema.options[0].extend({ signal: agentSignalSchema }),\n signalTargetBodySchema.options[1].extend({ signal: agentSignalSchema }),\n]);\n\nexport const sendAgentMessageBodySchema = z.union([\n signalTargetBodySchema.options[0].extend({ message: agentMessageInputSchema }),\n signalTargetBodySchema.options[1].extend({ message: agentMessageInputSchema }),\n]);\n\nexport const queueAgentMessageBodySchema = sendAgentMessageBodySchema;\n\nexport const subscribeAgentThreadBodySchema = z.object({\n resourceId: z.string().optional(),\n threadId: z.string(),\n});\n\nexport const abortAgentThreadBodySchema = subscribeAgentThreadBodySchema;\n\nexport const sendToolApprovalBodySchema = z.object({\n resourceId: z.string(),\n threadId: z.string(),\n requestContext: z.record(z.string(), z.any()).optional(),\n toolCallId: z.string(),\n approved: z.boolean(),\n resumeData: z.any().optional(),\n format: z.string().optional(),\n messages: z.array(coreMessageSchema).optional(),\n streamOptions: z.any().optional(),\n});\n\nexport const abortAgentThreadResponseSchema = z.object({\n aborted: z.boolean(),\n});\n\n/**\n * Response schema for observe endpoint (streaming response)\n */\nexport const observeAgentResponseSchema = z.any(); // Streaming response\n"]}
import { providerSchema } from './chunk-WQB65Q5Y.js';
import { z } from 'zod/v4';
var agentFeaturesSchema = z.object({
tools: z.boolean().optional(),
agents: z.boolean().optional(),
workflows: z.boolean().optional(),
scorers: z.boolean().optional(),
skills: z.boolean().optional(),
memory: z.boolean().optional(),
variables: z.boolean().optional(),
favorites: z.boolean().optional(),
avatarUpload: z.boolean().optional(),
browser: z.boolean().optional(),
/**
* Whether the model picker is visible in the Agent Builder.
* Omitted ⇒ picker visible (default-on). Explicit `false` ⇒ picker hidden
* (locked mode); `models.default` is required and applied.
*/
model: z.boolean().optional()
});
var knownProviderEntrySchema = z.object({
provider: z.string().min(1),
modelId: z.string().min(1).optional()
}).strict();
var customProviderEntrySchema = z.object({
kind: z.literal("custom"),
provider: z.string().min(1),
modelId: z.string().min(1).optional()
}).strict();
var knownDefaultModelEntrySchema = z.object({
provider: z.string().min(1),
modelId: z.string().min(1)
}).strict();
var customDefaultModelEntrySchema = z.object({
kind: z.literal("custom"),
provider: z.string().min(1),
modelId: z.string().min(1)
}).strict();
var providerModelEntrySchema = z.union([customProviderEntrySchema, knownProviderEntrySchema]);
var defaultModelEntrySchema = z.union([customDefaultModelEntrySchema, knownDefaultModelEntrySchema]);
var agentModelsSchema = z.object({
allowed: z.array(providerModelEntrySchema).optional(),
default: defaultModelEntrySchema.optional()
});
var pickerAllowlistSchema = z.object({
allowed: z.array(z.string()).optional()
}).strict();
var agentConfigurationSchema = z.object({
models: agentModelsSchema.optional(),
tools: pickerAllowlistSchema.optional(),
agents: pickerAllowlistSchema.optional(),
workflows: pickerAllowlistSchema.optional()
}).catchall(z.unknown());
var builderPickerSchema = z.object({
visibleTools: z.array(z.string()).nullable(),
visibleAgents: z.array(z.string()).nullable(),
visibleWorkflows: z.array(z.string()).nullable()
});
var builderModelPolicySchema = z.object({
active: z.boolean(),
pickerVisible: z.boolean().optional(),
allowed: z.array(providerModelEntrySchema).optional(),
default: defaultModelEntrySchema.optional()
});
var builderSettingsResponseSchema = z.object({
enabled: z.boolean(),
features: z.object({
agent: agentFeaturesSchema.optional()
}).optional(),
configuration: z.object({
agent: agentConfigurationSchema.optional()
}).optional(),
modelPolicy: builderModelPolicySchema.optional(),
/**
* Resolved picker visibility for tools/agents/workflows. Always present when
* the builder is enabled. Omitted when the builder is disabled.
*/
picker: builderPickerSchema.optional(),
/**
* Non-fatal warnings produced by `EditorAgentBuilder`'s constructor-time
* validation (e.g. allowlist entries with unknown provider strings, or
* picker allowlist entries that don't match a registered ID). UI surfaces
* these as a banner in the Builder admin view.
*/
modelPolicyWarnings: z.array(z.string()).optional()
});
var infrastructureStatusResponseSchema = z.object({
channels: z.object({
providers: z.array(
z.object({
id: z.string(),
name: z.string(),
isConfigured: z.boolean(),
routeCount: z.number()
})
)
}),
browser: z.object({
type: z.string().nullable(),
provider: z.string().nullable(),
env: z.string().nullable(),
registered: z.boolean(),
availableProviders: z.array(z.string()),
config: z.array(z.object({ key: z.string(), value: z.string() }))
}),
workspace: z.object({
type: z.string().nullable(),
workspaceId: z.string().nullable(),
name: z.string().nullable(),
source: z.string().nullable(),
registered: z.boolean(),
hasFilesystem: z.boolean(),
hasSandbox: z.boolean(),
filesystemProvider: z.string().nullable(),
sandboxProvider: z.string().nullable(),
config: z.array(z.object({ key: z.string(), value: z.string() }))
}),
registries: z.object({
skillsSh: z.object({
enabled: z.boolean()
})
})
});
var builderAvailableModelsResponseSchema = z.object({
providers: z.array(providerSchema)
});
export { agentConfigurationSchema, agentFeaturesSchema, agentModelsSchema, builderAvailableModelsResponseSchema, builderModelPolicySchema, builderPickerSchema, builderSettingsResponseSchema, defaultModelEntrySchema, infrastructureStatusResponseSchema, pickerAllowlistSchema, providerModelEntrySchema };
//# sourceMappingURL=chunk-JUOHAGMO.js.map
//# sourceMappingURL=chunk-JUOHAGMO.js.map
{"version":3,"sources":["../src/server/schemas/editor-builder.ts"],"names":[],"mappings":"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","file":"chunk-JUOHAGMO.js","sourcesContent":["import { z } from 'zod/v4';\nimport { providerSchema } from './agents';\n\n/**\n * Agent feature flags for the builder.\n *\n * Wire format: each key is an optional boolean. The server normalizes admin\n * input via `resolveAgentFeatures` (default-on semantics): any omitted key\n * resolves to `true`; admins opt out by setting a key to `false`. The\n * `GET /editor/builder/settings` response always carries a fully-resolved\n * object — clients should still use strict `=== true` checks.\n *\n * Special cases:\n * - `browser`: only resolves to `true` when `configuration.agent.browser` is\n * provided. Omitted with no config ⇒ silently `false` (no warning).\n * Explicit `true` with no config ⇒ warns and downgrades to `false`.\n */\nexport const agentFeaturesSchema = z.object({\n tools: z.boolean().optional(),\n agents: z.boolean().optional(),\n workflows: z.boolean().optional(),\n scorers: z.boolean().optional(),\n skills: z.boolean().optional(),\n memory: z.boolean().optional(),\n variables: z.boolean().optional(),\n favorites: z.boolean().optional(),\n avatarUpload: z.boolean().optional(),\n browser: z.boolean().optional(),\n /**\n * Whether the model picker is visible in the Agent Builder.\n * Omitted ⇒ picker visible (default-on). Explicit `false` ⇒ picker hidden\n * (locked mode); `models.default` is required and applied.\n */\n model: z.boolean().optional(),\n});\n\n/**\n * Allowlist + default-model entries for {@link agentModelsSchema}.\n *\n * Four standalone schemas (known × custom × entry × default) joined with `z.union`.\n * The schema does NOT validate `provider` against the runtime registry — invalid strings\n * surface as warnings during Phase 4 config validation.\n *\n * NOTE: `z.union(...).extend()` does not exist; that's why these are separate schemas.\n */\n// All four schemas are `.strict()` so typos like `modelID` or `Provider` are\n// rejected up-front instead of silently widening the policy.\nconst knownProviderEntrySchema = z\n .object({\n provider: z.string().min(1),\n modelId: z.string().min(1).optional(),\n })\n .strict();\n\nconst customProviderEntrySchema = z\n .object({\n kind: z.literal('custom'),\n provider: z.string().min(1),\n modelId: z.string().min(1).optional(),\n })\n .strict();\n\nconst knownDefaultModelEntrySchema = z\n .object({\n provider: z.string().min(1),\n modelId: z.string().min(1),\n })\n .strict();\n\nconst customDefaultModelEntrySchema = z\n .object({\n kind: z.literal('custom'),\n provider: z.string().min(1),\n modelId: z.string().min(1),\n })\n .strict();\n\n// Custom-tagged variants must come first so the discriminator (`kind: 'custom'`)\n// wins over the more permissive known-provider schemas. Otherwise the union\n// silently drops the `kind` field on matching inputs.\nexport const providerModelEntrySchema = z.union([customProviderEntrySchema, knownProviderEntrySchema]);\nexport const defaultModelEntrySchema = z.union([customDefaultModelEntrySchema, knownDefaultModelEntrySchema]);\n\n/**\n * Admin-controlled model allowlist + default for the Agent Builder.\n */\nexport const agentModelsSchema = z.object({\n allowed: z.array(providerModelEntrySchema).optional(),\n default: defaultModelEntrySchema.optional(),\n});\n\n/**\n * Admin-controlled allowlist for one of the builder pickers (tools/agents/workflows).\n *\n * Semantics:\n * - omitted ⇒ unrestricted (all registered IDs shown in the picker).\n * - `allowed: []` ⇒ empty picker (explicit lockdown).\n * - `allowed: [...ids]` ⇒ only the listed IDs are shown.\n */\nexport const pickerAllowlistSchema = z\n .object({\n allowed: z.array(z.string()).optional(),\n })\n .strict();\n\n/**\n * Agent configuration (pinned, non-overridable settings).\n *\n * Known structured field: `models` (Phase 1 contracts).\n * Other keys flow through unchanged for forward compatibility.\n */\nexport const agentConfigurationSchema = z\n .object({\n models: agentModelsSchema.optional(),\n tools: pickerAllowlistSchema.optional(),\n agents: pickerAllowlistSchema.optional(),\n workflows: pickerAllowlistSchema.optional(),\n })\n .catchall(z.unknown());\n\n/**\n * Resolved picker visibility returned in `BuilderSettingsResponse`.\n *\n * Per kind:\n * - `null` ⇒ unrestricted (show all registered entries).\n * - `string[]` ⇒ explicit allowlist (may be empty to show none).\n */\nexport const builderPickerSchema = z.object({\n visibleTools: z.array(z.string()).nullable(),\n visibleAgents: z.array(z.string()).nullable(),\n visibleWorkflows: z.array(z.string()).nullable(),\n});\n\n/**\n * Derived `BuilderModelPolicy`. Server-owned shape so the playground hook is a\n * thin selector and the UI never re-derives policy from `features` / `configuration`.\n *\n * Mirrors `BuilderModelPolicy` from `@mastra/core/agent-builder/ee`:\n * - `active: false` ⇒ all other fields ignored.\n * - `active: true` + `pickerVisible: false` (locked) ⇒ `default` set in valid configs.\n * - `allowed`/`default` are passed through verbatim when present.\n */\nexport const builderModelPolicySchema = z.object({\n active: z.boolean(),\n pickerVisible: z.boolean().optional(),\n allowed: z.array(providerModelEntrySchema).optional(),\n default: defaultModelEntrySchema.optional(),\n});\n\n/**\n * Response schema for GET /editor/builder/settings\n */\nexport const builderSettingsResponseSchema = z.object({\n enabled: z.boolean(),\n features: z\n .object({\n agent: agentFeaturesSchema.optional(),\n })\n .optional(),\n configuration: z\n .object({\n agent: agentConfigurationSchema.optional(),\n })\n .optional(),\n modelPolicy: builderModelPolicySchema.optional(),\n /**\n * Resolved picker visibility for tools/agents/workflows. Always present when\n * the builder is enabled. Omitted when the builder is disabled.\n */\n picker: builderPickerSchema.optional(),\n /**\n * Non-fatal warnings produced by `EditorAgentBuilder`'s constructor-time\n * validation (e.g. allowlist entries with unknown provider strings, or\n * picker allowlist entries that don't match a registered ID). UI surfaces\n * these as a banner in the Builder admin view.\n */\n modelPolicyWarnings: z.array(z.string()).optional(),\n});\n\n/**\n * Infrastructure status response for Agent Builder admin diagnostics.\n *\n * Reports the Agent Builder-specific primitive configuration plus lightweight\n * runtime resolution state where useful.\n */\nexport const infrastructureStatusResponseSchema = z.object({\n channels: z.object({\n providers: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n isConfigured: z.boolean(),\n routeCount: z.number(),\n }),\n ),\n }),\n browser: z.object({\n type: z.string().nullable(),\n provider: z.string().nullable(),\n env: z.string().nullable(),\n registered: z.boolean(),\n availableProviders: z.array(z.string()),\n config: z.array(z.object({ key: z.string(), value: z.string() })),\n }),\n workspace: z.object({\n type: z.string().nullable(),\n workspaceId: z.string().nullable(),\n name: z.string().nullable(),\n source: z.string().nullable(),\n registered: z.boolean(),\n hasFilesystem: z.boolean(),\n hasSandbox: z.boolean(),\n filesystemProvider: z.string().nullable(),\n sandboxProvider: z.string().nullable(),\n config: z.array(z.object({ key: z.string(), value: z.string() })),\n }),\n registries: z.object({\n skillsSh: z.object({\n enabled: z.boolean(),\n }),\n }),\n});\n\n/**\n * Response schema for GET /editor/builder/models/available.\n *\n * Same provider shape as GET /agents/providers, but each provider's `models`\n * list is already filtered by the active builder model policy (server applies\n * the EE allowlist). Providers with no allowed models are omitted entirely so\n * the Studio model picker can render the response verbatim.\n */\nexport const builderAvailableModelsResponseSchema = z.object({\n providers: z.array(providerSchema),\n});\n\nexport type BuilderAvailableModelsResponse = z.infer<typeof builderAvailableModelsResponseSchema>;\n\nexport type InfrastructureStatus = z.infer<typeof infrastructureStatusResponseSchema>;\n\nexport type AgentFeatures = z.infer<typeof agentFeaturesSchema>;\nexport type AgentConfiguration = z.infer<typeof agentConfigurationSchema>;\nexport type BuilderSettingsResponse = z.infer<typeof builderSettingsResponseSchema>;\nexport type ProviderModelEntrySchema = z.infer<typeof providerModelEntrySchema>;\nexport type DefaultModelEntrySchema = z.infer<typeof defaultModelEntrySchema>;\nexport type AgentModelsSchema = z.infer<typeof agentModelsSchema>;\nexport type BuilderModelPolicySchema = z.infer<typeof builderModelPolicySchema>;\nexport type PickerAllowlistSchema = z.infer<typeof pickerAllowlistSchema>;\nexport type BuilderPickerSchema = z.infer<typeof builderPickerSchema>;\n"]}
'use strict';
var chunkZCX2J552_cjs = require('./chunk-ZCX2J552.cjs');
var chunkSI63GFYM_cjs = require('./chunk-SI63GFYM.cjs');
var chunkL3I5OC4W_cjs = require('./chunk-L3I5OC4W.cjs');
var chunk2XZ2466F_cjs = require('./chunk-2XZ2466F.cjs');
var chunkM3UP3Z3G_cjs = require('./chunk-M3UP3Z3G.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
var chunkTIWGWGIO_cjs = require('./chunk-TIWGWGIO.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var chunkYWUVDFQZ_cjs = require('./chunk-YWUVDFQZ.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/stored/agents",
responseType: "json",
queryParamSchema: chunkTIWGWGIO_cjs.listStoredAgentsQuerySchema,
responseSchema: chunkTIWGWGIO_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 = chunkHDIYJI2Z_cjs.resolveAuthorFilter({
requestContext,
resource: "stored-agents",
queryAuthorId: authorId,
queryVisibility: visibility === "public" ? "public" : void 0
});
const scope = await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext);
const scopedMetadata = chunkYWUVDFQZ_cjs.scopeStoredResourceMetadata(metadata, scope);
const callerId = chunkHDIYJI2Z_cjs.getCallerAuthorId(requestContext);
const favoritesEnabled = await chunkL3I5OC4W_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) => chunkHDIYJI2Z_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 chunkM3UP3Z3G_cjs.prepareAuthorEnrichment(
mastra,
requestContext,
annotated2.map((a) => a.authorId)
);
const withAuthors2 = authors2 ? annotated2.map((record) => chunkM3UP3Z3G_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) => chunkHDIYJI2Z_cjs.matchesAuthorFilter(record, filter));
const authors = await chunkM3UP3Z3G_cjs.prepareAuthorEnrichment(
mastra,
requestContext,
visibleAgents.map((a) => a.authorId)
);
if (!favoritesEnabled) {
const stripped = visibleAgents.map(chunkSI63GFYM_cjs.stripFavoriteFields);
const withAuthors2 = authors ? stripped.map((record) => chunkM3UP3Z3G_cjs.attachAuthor(record, authors)) : stripped;
return { ...result, agents: withAuthors2 };
}
const enrichment = await chunkSI63GFYM_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(chunkSI63GFYM_cjs.stripFavoriteFields);
const withAuthors = authors ? annotated.map((record) => chunkM3UP3Z3G_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) {
chunkYWUVDFQZ_cjs.assertStoredResourceScope(storedAgent, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/stored/agents/:storedAgentId/export",
responseType: "json",
pathParamSchema: chunkTIWGWGIO_cjs.storedAgentIdPathParams,
bodySchema: chunkTIWGWGIO_cjs.exportStoredAgentBodySchema,
responseSchema: chunkTIWGWGIO_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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/stored/agents/:storedAgentId/change-request",
responseType: "json",
pathParamSchema: chunkTIWGWGIO_cjs.storedAgentIdPathParams,
bodySchema: chunkTIWGWGIO_cjs.openStoredAgentChangeRequestBodySchema,
responseSchema: chunkTIWGWGIO_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkTIWGWGIO_cjs.storedAgentIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.statusQuerySchema,
responseSchema: chunkTIWGWGIO_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(agent, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
const authors = await chunkM3UP3Z3G_cjs.prepareAuthorEnrichment(mastra, requestContext, [agent.authorId]);
const withFavorite = await chunkSI63GFYM_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", agent);
return chunkM3UP3Z3G_cjs.attachAuthor(withFavorite, authors);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting stored agent");
}
}
});
var CREATE_STORED_AGENT_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/stored/agents",
responseType: "json",
bodySchema: chunkTIWGWGIO_cjs.createStoredAgentBodySchema,
responseSchema: chunkTIWGWGIO_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 || chunkYWUVDFQZ_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 = chunkHDIYJI2Z_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: chunkYWUVDFQZ_cjs.scopeStoredResourceMetadata(metadata, await chunkYWUVDFQZ_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 chunkSI63GFYM_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating stored agent");
}
}
});
var UPDATE_STORED_AGENT_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "PATCH",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkTIWGWGIO_cjs.storedAgentIdPathParams,
bodySchema: chunkTIWGWGIO_cjs.updateStoredAgentBodySchema,
responseSchema: chunkTIWGWGIO_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 chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext);
chunkYWUVDFQZ_cjs.assertStoredResourceScope(existing, scope);
chunkHDIYJI2Z_cjs.assertWriteAccess({
requestContext,
resource: "stored-agents",
resourceId: storedAgentId,
action: "edit",
record: existing
});
chunkZCX2J552_cjs.validateMetadataAvatarUrl(metadata);
const callerAuthorId = chunkHDIYJI2Z_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 = chunkYWUVDFQZ_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 chunkSI63GFYM_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error updating stored agent");
}
}
});
var DELETE_STORED_AGENT_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "DELETE",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkTIWGWGIO_cjs.storedAgentIdPathParams,
responseSchema: chunkTIWGWGIO_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(existing, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/stored/agents/:storedAgentId/dependents",
responseType: "json",
pathParamSchema: chunkTIWGWGIO_cjs.storedAgentIdPathParams,
responseSchema: chunkTIWGWGIO_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(target, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: target });
const filter = chunkHDIYJI2Z_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 (chunkHDIYJI2Z_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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/stored/agents/preview-instructions",
responseType: "json",
bodySchema: chunkTIWGWGIO_cjs.previewInstructionsBodySchema,
responseSchema: chunkTIWGWGIO_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-JWIAPHFH.cjs.map
//# sourceMappingURL=chunk-JWIAPHFH.cjs.map

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

'use strict';
var chunkFCOEWHH3_cjs = require('./chunk-FCOEWHH3.cjs');
var chunkHBXNOBJN_cjs = require('./chunk-HBXNOBJN.cjs');
var chunk42M6Y2OD_cjs = require('./chunk-42M6Y2OD.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var chunkYWUVDFQZ_cjs = require('./chunk-YWUVDFQZ.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.cjs');
var chunk3YQ7NWF6_cjs = require('./chunk-3YQ7NWF6.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 chunk3YQ7NWF6_cjs.standardSchemaToJSONSchema(chunk3YQ7NWF6_cjs.toStandardSchema5(schema), { target: "draft-2020-12" });
}
function serializeSchema(schema) {
const jsonSchema = schemaToJsonSchema(resolveLazySchema(schema));
if (jsonSchema === void 0) return void 0;
return chunkYWUVDFQZ_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 ? chunkYWUVDFQZ_cjs.stringify(resolvedInput.jsonSchema) : void 0,
outputSchema: resolvedOutput && typeof resolvedOutput === "object" && "jsonSchema" in resolvedOutput ? chunkYWUVDFQZ_cjs.stringify(resolvedOutput.jsonSchema) : void 0
};
}
return {
...tool,
inputSchema: serializeSchema(tool.inputSchema),
outputSchema: serializeSchema(tool.outputSchema),
requestContextSchema: serializeSchema(tool.requestContextSchema)
};
}
var LIST_TOOLS_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/tools",
responseType: "json",
responseSchema: chunkHBXNOBJN_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", chunk42M6Y2OD_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/tools/:toolId",
responseType: "json",
pathParamSchema: chunkHBXNOBJN_cjs.toolIdPathParams,
responseSchema: chunkHBXNOBJN_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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/tools/:toolId/execute",
responseType: "json",
pathParamSchema: chunkHBXNOBJN_cjs.toolIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.optionalRunIdSchema,
bodySchema: chunkHBXNOBJN_cjs.executeToolContextBodySchema,
responseSchema: chunkHBXNOBJN_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;
chunk42M6Y2OD_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/agents/:agentId/tools/:toolId",
responseType: "json",
pathParamSchema: chunkHBXNOBJN_cjs.agentToolPathParams,
responseSchema: chunkHBXNOBJN_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 chunkFCOEWHH3_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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agents/:agentId/tools/:toolId/execute",
responseType: "json",
pathParamSchema: chunkHBXNOBJN_cjs.agentToolPathParams,
bodySchema: chunkHBXNOBJN_cjs.executeToolBodySchema,
responseSchema: chunkHBXNOBJN_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 chunkFCOEWHH3_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-K75VRP3V.cjs.map
//# sourceMappingURL=chunk-K75VRP3V.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-K75VRP3V.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 chunkHBXNOBJN_cjs = require('./chunk-HBXNOBJN.cjs');
var v4 = require('zod/v4');
var agentFeaturesSchema = v4.z.object({
tools: v4.z.boolean().optional(),
agents: v4.z.boolean().optional(),
workflows: v4.z.boolean().optional(),
scorers: v4.z.boolean().optional(),
skills: v4.z.boolean().optional(),
memory: v4.z.boolean().optional(),
variables: v4.z.boolean().optional(),
favorites: v4.z.boolean().optional(),
avatarUpload: v4.z.boolean().optional(),
browser: v4.z.boolean().optional(),
/**
* Whether the model picker is visible in the Agent Builder.
* Omitted ⇒ picker visible (default-on). Explicit `false` ⇒ picker hidden
* (locked mode); `models.default` is required and applied.
*/
model: v4.z.boolean().optional()
});
var knownProviderEntrySchema = v4.z.object({
provider: v4.z.string().min(1),
modelId: v4.z.string().min(1).optional()
}).strict();
var customProviderEntrySchema = v4.z.object({
kind: v4.z.literal("custom"),
provider: v4.z.string().min(1),
modelId: v4.z.string().min(1).optional()
}).strict();
var knownDefaultModelEntrySchema = v4.z.object({
provider: v4.z.string().min(1),
modelId: v4.z.string().min(1)
}).strict();
var customDefaultModelEntrySchema = v4.z.object({
kind: v4.z.literal("custom"),
provider: v4.z.string().min(1),
modelId: v4.z.string().min(1)
}).strict();
var providerModelEntrySchema = v4.z.union([customProviderEntrySchema, knownProviderEntrySchema]);
var defaultModelEntrySchema = v4.z.union([customDefaultModelEntrySchema, knownDefaultModelEntrySchema]);
var agentModelsSchema = v4.z.object({
allowed: v4.z.array(providerModelEntrySchema).optional(),
default: defaultModelEntrySchema.optional()
});
var pickerAllowlistSchema = v4.z.object({
allowed: v4.z.array(v4.z.string()).optional()
}).strict();
var agentConfigurationSchema = v4.z.object({
models: agentModelsSchema.optional(),
tools: pickerAllowlistSchema.optional(),
agents: pickerAllowlistSchema.optional(),
workflows: pickerAllowlistSchema.optional()
}).catchall(v4.z.unknown());
var builderPickerSchema = v4.z.object({
visibleTools: v4.z.array(v4.z.string()).nullable(),
visibleAgents: v4.z.array(v4.z.string()).nullable(),
visibleWorkflows: v4.z.array(v4.z.string()).nullable()
});
var builderModelPolicySchema = v4.z.object({
active: v4.z.boolean(),
pickerVisible: v4.z.boolean().optional(),
allowed: v4.z.array(providerModelEntrySchema).optional(),
default: defaultModelEntrySchema.optional()
});
var builderSettingsResponseSchema = v4.z.object({
enabled: v4.z.boolean(),
features: v4.z.object({
agent: agentFeaturesSchema.optional()
}).optional(),
configuration: v4.z.object({
agent: agentConfigurationSchema.optional()
}).optional(),
modelPolicy: builderModelPolicySchema.optional(),
/**
* Resolved picker visibility for tools/agents/workflows. Always present when
* the builder is enabled. Omitted when the builder is disabled.
*/
picker: builderPickerSchema.optional(),
/**
* Non-fatal warnings produced by `EditorAgentBuilder`'s constructor-time
* validation (e.g. allowlist entries with unknown provider strings, or
* picker allowlist entries that don't match a registered ID). UI surfaces
* these as a banner in the Builder admin view.
*/
modelPolicyWarnings: v4.z.array(v4.z.string()).optional()
});
var infrastructureStatusResponseSchema = v4.z.object({
channels: v4.z.object({
providers: v4.z.array(
v4.z.object({
id: v4.z.string(),
name: v4.z.string(),
isConfigured: v4.z.boolean(),
routeCount: v4.z.number()
})
)
}),
browser: v4.z.object({
type: v4.z.string().nullable(),
provider: v4.z.string().nullable(),
env: v4.z.string().nullable(),
registered: v4.z.boolean(),
availableProviders: v4.z.array(v4.z.string()),
config: v4.z.array(v4.z.object({ key: v4.z.string(), value: v4.z.string() }))
}),
workspace: v4.z.object({
type: v4.z.string().nullable(),
workspaceId: v4.z.string().nullable(),
name: v4.z.string().nullable(),
source: v4.z.string().nullable(),
registered: v4.z.boolean(),
hasFilesystem: v4.z.boolean(),
hasSandbox: v4.z.boolean(),
filesystemProvider: v4.z.string().nullable(),
sandboxProvider: v4.z.string().nullable(),
config: v4.z.array(v4.z.object({ key: v4.z.string(), value: v4.z.string() }))
}),
registries: v4.z.object({
skillsSh: v4.z.object({
enabled: v4.z.boolean()
})
})
});
var builderAvailableModelsResponseSchema = v4.z.object({
providers: v4.z.array(chunkHBXNOBJN_cjs.providerSchema)
});
exports.agentConfigurationSchema = agentConfigurationSchema;
exports.agentFeaturesSchema = agentFeaturesSchema;
exports.agentModelsSchema = agentModelsSchema;
exports.builderAvailableModelsResponseSchema = builderAvailableModelsResponseSchema;
exports.builderModelPolicySchema = builderModelPolicySchema;
exports.builderPickerSchema = builderPickerSchema;
exports.builderSettingsResponseSchema = builderSettingsResponseSchema;
exports.defaultModelEntrySchema = defaultModelEntrySchema;
exports.infrastructureStatusResponseSchema = infrastructureStatusResponseSchema;
exports.pickerAllowlistSchema = pickerAllowlistSchema;
exports.providerModelEntrySchema = providerModelEntrySchema;
//# sourceMappingURL=chunk-KDAMUQII.cjs.map
//# sourceMappingURL=chunk-KDAMUQII.cjs.map
{"version":3,"sources":["../src/server/schemas/editor-builder.ts"],"names":["z","providerSchema"],"mappings":"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","file":"chunk-KDAMUQII.cjs","sourcesContent":["import { z } from 'zod/v4';\nimport { providerSchema } from './agents';\n\n/**\n * Agent feature flags for the builder.\n *\n * Wire format: each key is an optional boolean. The server normalizes admin\n * input via `resolveAgentFeatures` (default-on semantics): any omitted key\n * resolves to `true`; admins opt out by setting a key to `false`. The\n * `GET /editor/builder/settings` response always carries a fully-resolved\n * object — clients should still use strict `=== true` checks.\n *\n * Special cases:\n * - `browser`: only resolves to `true` when `configuration.agent.browser` is\n * provided. Omitted with no config ⇒ silently `false` (no warning).\n * Explicit `true` with no config ⇒ warns and downgrades to `false`.\n */\nexport const agentFeaturesSchema = z.object({\n tools: z.boolean().optional(),\n agents: z.boolean().optional(),\n workflows: z.boolean().optional(),\n scorers: z.boolean().optional(),\n skills: z.boolean().optional(),\n memory: z.boolean().optional(),\n variables: z.boolean().optional(),\n favorites: z.boolean().optional(),\n avatarUpload: z.boolean().optional(),\n browser: z.boolean().optional(),\n /**\n * Whether the model picker is visible in the Agent Builder.\n * Omitted ⇒ picker visible (default-on). Explicit `false` ⇒ picker hidden\n * (locked mode); `models.default` is required and applied.\n */\n model: z.boolean().optional(),\n});\n\n/**\n * Allowlist + default-model entries for {@link agentModelsSchema}.\n *\n * Four standalone schemas (known × custom × entry × default) joined with `z.union`.\n * The schema does NOT validate `provider` against the runtime registry — invalid strings\n * surface as warnings during Phase 4 config validation.\n *\n * NOTE: `z.union(...).extend()` does not exist; that's why these are separate schemas.\n */\n// All four schemas are `.strict()` so typos like `modelID` or `Provider` are\n// rejected up-front instead of silently widening the policy.\nconst knownProviderEntrySchema = z\n .object({\n provider: z.string().min(1),\n modelId: z.string().min(1).optional(),\n })\n .strict();\n\nconst customProviderEntrySchema = z\n .object({\n kind: z.literal('custom'),\n provider: z.string().min(1),\n modelId: z.string().min(1).optional(),\n })\n .strict();\n\nconst knownDefaultModelEntrySchema = z\n .object({\n provider: z.string().min(1),\n modelId: z.string().min(1),\n })\n .strict();\n\nconst customDefaultModelEntrySchema = z\n .object({\n kind: z.literal('custom'),\n provider: z.string().min(1),\n modelId: z.string().min(1),\n })\n .strict();\n\n// Custom-tagged variants must come first so the discriminator (`kind: 'custom'`)\n// wins over the more permissive known-provider schemas. Otherwise the union\n// silently drops the `kind` field on matching inputs.\nexport const providerModelEntrySchema = z.union([customProviderEntrySchema, knownProviderEntrySchema]);\nexport const defaultModelEntrySchema = z.union([customDefaultModelEntrySchema, knownDefaultModelEntrySchema]);\n\n/**\n * Admin-controlled model allowlist + default for the Agent Builder.\n */\nexport const agentModelsSchema = z.object({\n allowed: z.array(providerModelEntrySchema).optional(),\n default: defaultModelEntrySchema.optional(),\n});\n\n/**\n * Admin-controlled allowlist for one of the builder pickers (tools/agents/workflows).\n *\n * Semantics:\n * - omitted ⇒ unrestricted (all registered IDs shown in the picker).\n * - `allowed: []` ⇒ empty picker (explicit lockdown).\n * - `allowed: [...ids]` ⇒ only the listed IDs are shown.\n */\nexport const pickerAllowlistSchema = z\n .object({\n allowed: z.array(z.string()).optional(),\n })\n .strict();\n\n/**\n * Agent configuration (pinned, non-overridable settings).\n *\n * Known structured field: `models` (Phase 1 contracts).\n * Other keys flow through unchanged for forward compatibility.\n */\nexport const agentConfigurationSchema = z\n .object({\n models: agentModelsSchema.optional(),\n tools: pickerAllowlistSchema.optional(),\n agents: pickerAllowlistSchema.optional(),\n workflows: pickerAllowlistSchema.optional(),\n })\n .catchall(z.unknown());\n\n/**\n * Resolved picker visibility returned in `BuilderSettingsResponse`.\n *\n * Per kind:\n * - `null` ⇒ unrestricted (show all registered entries).\n * - `string[]` ⇒ explicit allowlist (may be empty to show none).\n */\nexport const builderPickerSchema = z.object({\n visibleTools: z.array(z.string()).nullable(),\n visibleAgents: z.array(z.string()).nullable(),\n visibleWorkflows: z.array(z.string()).nullable(),\n});\n\n/**\n * Derived `BuilderModelPolicy`. Server-owned shape so the playground hook is a\n * thin selector and the UI never re-derives policy from `features` / `configuration`.\n *\n * Mirrors `BuilderModelPolicy` from `@mastra/core/agent-builder/ee`:\n * - `active: false` ⇒ all other fields ignored.\n * - `active: true` + `pickerVisible: false` (locked) ⇒ `default` set in valid configs.\n * - `allowed`/`default` are passed through verbatim when present.\n */\nexport const builderModelPolicySchema = z.object({\n active: z.boolean(),\n pickerVisible: z.boolean().optional(),\n allowed: z.array(providerModelEntrySchema).optional(),\n default: defaultModelEntrySchema.optional(),\n});\n\n/**\n * Response schema for GET /editor/builder/settings\n */\nexport const builderSettingsResponseSchema = z.object({\n enabled: z.boolean(),\n features: z\n .object({\n agent: agentFeaturesSchema.optional(),\n })\n .optional(),\n configuration: z\n .object({\n agent: agentConfigurationSchema.optional(),\n })\n .optional(),\n modelPolicy: builderModelPolicySchema.optional(),\n /**\n * Resolved picker visibility for tools/agents/workflows. Always present when\n * the builder is enabled. Omitted when the builder is disabled.\n */\n picker: builderPickerSchema.optional(),\n /**\n * Non-fatal warnings produced by `EditorAgentBuilder`'s constructor-time\n * validation (e.g. allowlist entries with unknown provider strings, or\n * picker allowlist entries that don't match a registered ID). UI surfaces\n * these as a banner in the Builder admin view.\n */\n modelPolicyWarnings: z.array(z.string()).optional(),\n});\n\n/**\n * Infrastructure status response for Agent Builder admin diagnostics.\n *\n * Reports the Agent Builder-specific primitive configuration plus lightweight\n * runtime resolution state where useful.\n */\nexport const infrastructureStatusResponseSchema = z.object({\n channels: z.object({\n providers: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n isConfigured: z.boolean(),\n routeCount: z.number(),\n }),\n ),\n }),\n browser: z.object({\n type: z.string().nullable(),\n provider: z.string().nullable(),\n env: z.string().nullable(),\n registered: z.boolean(),\n availableProviders: z.array(z.string()),\n config: z.array(z.object({ key: z.string(), value: z.string() })),\n }),\n workspace: z.object({\n type: z.string().nullable(),\n workspaceId: z.string().nullable(),\n name: z.string().nullable(),\n source: z.string().nullable(),\n registered: z.boolean(),\n hasFilesystem: z.boolean(),\n hasSandbox: z.boolean(),\n filesystemProvider: z.string().nullable(),\n sandboxProvider: z.string().nullable(),\n config: z.array(z.object({ key: z.string(), value: z.string() })),\n }),\n registries: z.object({\n skillsSh: z.object({\n enabled: z.boolean(),\n }),\n }),\n});\n\n/**\n * Response schema for GET /editor/builder/models/available.\n *\n * Same provider shape as GET /agents/providers, but each provider's `models`\n * list is already filtered by the active builder model policy (server applies\n * the EE allowlist). Providers with no allowed models are omitted entirely so\n * the Studio model picker can render the response verbatim.\n */\nexport const builderAvailableModelsResponseSchema = z.object({\n providers: z.array(providerSchema),\n});\n\nexport type BuilderAvailableModelsResponse = z.infer<typeof builderAvailableModelsResponseSchema>;\n\nexport type InfrastructureStatus = z.infer<typeof infrastructureStatusResponseSchema>;\n\nexport type AgentFeatures = z.infer<typeof agentFeaturesSchema>;\nexport type AgentConfiguration = z.infer<typeof agentConfigurationSchema>;\nexport type BuilderSettingsResponse = z.infer<typeof builderSettingsResponseSchema>;\nexport type ProviderModelEntrySchema = z.infer<typeof providerModelEntrySchema>;\nexport type DefaultModelEntrySchema = z.infer<typeof defaultModelEntrySchema>;\nexport type AgentModelsSchema = z.infer<typeof agentModelsSchema>;\nexport type BuilderModelPolicySchema = z.infer<typeof builderModelPolicySchema>;\nexport type PickerAllowlistSchema = z.infer<typeof pickerAllowlistSchema>;\nexport type BuilderPickerSchema = z.infer<typeof builderPickerSchema>;\n"]}
import { builderSettingsResponseSchema, builderAvailableModelsResponseSchema, infrastructureStatusResponseSchema, agentFeaturesSchema } from './chunk-JUOHAGMO.js';
import { buildProvidersList } from './chunk-FU2NIFNJ.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-KSYJQMJ7.js.map
//# sourceMappingURL=chunk-KSYJQMJ7.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-KSYJQMJ7.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 chunkKDAMUQII_cjs = require('./chunk-KDAMUQII.cjs');
var chunkFCOEWHH3_cjs = require('./chunk-FCOEWHH3.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunkKDAMUQII_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/editor/builder/settings",
responseType: "json",
responseSchema: chunkKDAMUQII_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/editor/builder/models/available",
responseType: "json",
responseSchema: chunkKDAMUQII_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 chunkFCOEWHH3_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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/editor/builder/infrastructure",
responseType: "json",
responseSchema: chunkKDAMUQII_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-L3I5OC4W.cjs.map
//# sourceMappingURL=chunk-L3I5OC4W.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-L3I5OC4W.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 chunkL3I5OC4W_cjs = require('./chunk-L3I5OC4W.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
var chunkTIWGWGIO_cjs = require('./chunk-TIWGWGIO.cjs');
var chunkYWUVDFQZ_cjs = require('./chunk-YWUVDFQZ.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunkDN2NUSL2_cjs.createRoute({
method: "PUT",
path: "/stored/agents/:storedAgentId/favorite",
responseType: "json",
pathParamSchema: chunkTIWGWGIO_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 chunkL3I5OC4W_cjs.requireBuilderFeature(mastra, "favorites");
const callerId = chunkHDIYJI2Z_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(agent, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_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 = chunkDN2NUSL2_cjs.createRoute({
method: "DELETE",
path: "/stored/agents/:storedAgentId/favorite",
responseType: "json",
pathParamSchema: chunkTIWGWGIO_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 chunkL3I5OC4W_cjs.requireBuilderFeature(mastra, "favorites");
const callerId = chunkHDIYJI2Z_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(agent, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_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-LKOHTU4W.cjs.map
//# sourceMappingURL=chunk-LKOHTU4W.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-LKOHTU4W.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 chunkT3C54LPX_cjs = require('./chunk-T3C54LPX.cjs');
var chunkO4O2EJF7_cjs = require('./chunk-O4O2EJF7.cjs');
var chunkL3I5OC4W_cjs = require('./chunk-L3I5OC4W.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
var chunkYWUVDFQZ_cjs = require('./chunk-YWUVDFQZ.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunkDN2NUSL2_cjs.createRoute({
method: "PUT",
path: "/stored/skills/:storedSkillId/favorite",
responseType: "json",
pathParamSchema: chunkT3C54LPX_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 chunkL3I5OC4W_cjs.requireBuilderFeature(mastra, "favorites");
const callerId = chunkHDIYJI2Z_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(skill, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_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 = chunkDN2NUSL2_cjs.createRoute({
method: "DELETE",
path: "/stored/skills/:storedSkillId/favorite",
responseType: "json",
pathParamSchema: chunkT3C54LPX_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 chunkL3I5OC4W_cjs.requireBuilderFeature(mastra, "favorites");
const callerId = chunkHDIYJI2Z_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(skill, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_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-MM7BEDAW.cjs.map
//# sourceMappingURL=chunk-MM7BEDAW.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-MM7BEDAW.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"]}
import { LIST_WORKFLOWS_ROUTE, GET_WORKFLOW_BY_ID_ROUTE, LIST_WORKFLOW_RUNS_ROUTE, GET_WORKFLOW_RUN_BY_ID_ROUTE, CREATE_WORKFLOW_RUN_ROUTE, 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, RESUME_STREAM_WORKFLOW_ROUTE, CANCEL_WORKFLOW_RUN_ROUTE, STREAM_LEGACY_WORKFLOW_ROUTE, OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE } from './chunk-XX5G7THL.js';
import { actionIdPathParams, actionRunPathParams, streamAgentBuilderBodySchema, startAsyncAgentBuilderBodySchema, resumeAgentBuilderBodySchema, streamLegacyAgentBuilderBodySchema } from './chunk-6SZGOLAP.js';
import { listWorkflowsResponseSchema, workflowInfoSchema, workflowRunsResponseSchema, listWorkflowRunsQuerySchema, workflowRunResultSchema, workflowRunResultQuerySchema, createWorkflowRunResponseSchema, workflowExecutionResultSchema, workflowControlResponseSchema } from './chunk-K4HCNNHA.js';
import { streamResponseSchema } from './chunk-WQB65Q5Y.js';
import { optionalRunIdSchema, runIdSchema } from './chunk-2YY3EMMS.js';
import { WorkflowRegistry } from './chunk-EOGTJIPF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
import { __export } from './chunk-PR4QN5HX.js';
// src/server/handlers/agent-builder.ts
var agent_builder_exports = {};
__export(agent_builder_exports, {
CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE: () => CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE,
CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE: () => CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,
GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE: () => GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,
GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE: () => GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,
LIST_AGENT_BUILDER_ACTIONS_ROUTE: () => LIST_AGENT_BUILDER_ACTIONS_ROUTE,
LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE: () => LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,
OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE: () => OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,
OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE: () => OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
RESUME_AGENT_BUILDER_ACTION_ROUTE: () => RESUME_AGENT_BUILDER_ACTION_ROUTE,
RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE: () => RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE: () => RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,
RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE: () => RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,
START_AGENT_BUILDER_ACTION_RUN_ROUTE: () => START_AGENT_BUILDER_ACTION_RUN_ROUTE,
START_ASYNC_AGENT_BUILDER_ACTION_ROUTE: () => START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
STREAM_AGENT_BUILDER_ACTION_ROUTE: () => STREAM_AGENT_BUILDER_ACTION_ROUTE,
STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE: () => STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE
});
var agentBuilderWorkflowsPromise;
async function loadAgentBuilderWorkflows() {
agentBuilderWorkflowsPromise ??= import('./dist-Q3RF3I36.js').then((mod) => mod.agentBuilderWorkflows);
return agentBuilderWorkflowsPromise;
}
async function registerAgentBuilderWorkflows(mastra) {
const agentBuilderWorkflows = await loadAgentBuilderWorkflows();
WorkflowRegistry.registerTemporaryWorkflows(agentBuilderWorkflows, mastra);
return agentBuilderWorkflows;
}
var LIST_AGENT_BUILDER_ACTIONS_ROUTE = createRoute({
method: "GET",
path: "/agent-builder",
responseType: "json",
responseSchema: listWorkflowsResponseSchema,
summary: "List agent-builder actions",
description: "Returns a list of all available agent-builder actions",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
logger.info("Listing agent builder actions");
return await LIST_WORKFLOWS_ROUTE.handler(ctx);
} catch (error) {
logger.error("Error listing agent builder actions", { error });
return handleError(error, "Error getting agent builder workflows");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE = createRoute({
method: "GET",
path: "/agent-builder/:actionId",
responseType: "json",
pathParamSchema: actionIdPathParams,
responseSchema: workflowInfoSchema,
summary: "Get action by ID",
description: "Returns details for a specific agent-builder action",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId } = ctx;
const logger = mastra.getLogger();
try {
const agentBuilderWorkflows = await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, {
message: `Invalid agent-builder action: ${actionId}. Valid actions are: ${Object.keys(agentBuilderWorkflows).join(", ")}`
});
}
logger.info("Getting agent builder action by ID", { actionId });
return await GET_WORKFLOW_BY_ID_ROUTE.handler({ ...ctx, workflowId: actionId });
} catch (error) {
logger.error("Error getting agent builder action by ID", { error, actionId });
return handleError(error, "Error getting agent builder action");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE = createRoute({
method: "GET",
path: "/agent-builder/:actionId/runs",
responseType: "json",
pathParamSchema: actionIdPathParams,
queryParamSchema: listWorkflowRunsQuerySchema,
responseSchema: workflowRunsResponseSchema,
summary: "List action runs",
description: "Returns a paginated list of execution runs for the specified action",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Listing agent builder action runs", { actionId });
return await LIST_WORKFLOW_RUNS_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error listing agent builder action runs", { error, actionId });
return handleError(error, "Error getting agent builder action runs");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE = createRoute({
method: "GET",
path: "/agent-builder/:actionId/runs/:runId",
responseType: "json",
pathParamSchema: actionRunPathParams,
queryParamSchema: workflowRunResultQuerySchema,
responseSchema: workflowRunResultSchema,
summary: "Get action run by ID",
description: "Returns details for a specific action run with metadata and processed execution state. Use the fields query parameter to reduce payload size.",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Getting agent builder action run by ID", { actionId, runId });
return await GET_WORKFLOW_RUN_BY_ID_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error getting agent builder action run", { error, actionId, runId });
return handleError(error, "Error getting agent builder action run");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/create-run",
responseType: "json",
pathParamSchema: actionIdPathParams,
queryParamSchema: optionalRunIdSchema,
responseSchema: createWorkflowRunResponseSchema,
summary: "Create action run",
description: "Creates a new action execution instance with an optional custom run ID",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Creating agent builder action run", { actionId, runId });
return await CREATE_WORKFLOW_RUN_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error creating agent builder action run", { error, actionId });
return handleError(error, "Error creating agent builder action run");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/stream",
responseType: "stream",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: streamAgentBuilderBodySchema,
responseSchema: streamResponseSchema,
summary: "Stream action execution",
description: "Executes an action and streams the results in real-time",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Streaming agent builder action", { actionId, runId });
return await STREAM_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error streaming agent builder action", { error, actionId });
return handleError(error, "Error streaming agent builder action");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var START_ASYNC_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/start-async",
responseType: "json",
pathParamSchema: actionIdPathParams,
queryParamSchema: optionalRunIdSchema,
bodySchema: startAsyncAgentBuilderBodySchema,
responseSchema: workflowExecutionResultSchema,
summary: "Start action asynchronously",
description: "Starts an action execution asynchronously without streaming results",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Starting agent builder action asynchronously", { actionId, runId });
return await START_ASYNC_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error starting agent builder action asynchronously", { error, actionId });
return handleError(error, "Error starting agent builder action");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var START_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/start",
responseType: "json",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: startAsyncAgentBuilderBodySchema,
responseSchema: workflowControlResponseSchema,
summary: "Start specific action run",
description: "Starts execution of a specific action run by ID",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Starting specific agent builder action run", { actionId, runId });
return await START_WORKFLOW_RUN_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error starting agent builder action run", { error, actionId });
return handleError(error, "Error starting agent builder action run");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/observe",
responseType: "stream",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
responseSchema: streamResponseSchema,
summary: "Observe action stream",
description: "Observes and streams updates from an already running action execution",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Observing agent builder action stream", { actionId, runId });
return await OBSERVE_STREAM_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error observing agent builder action stream", { error, actionId });
return handleError(error, "Error observing agent builder action stream");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/resume-async",
responseType: "json",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: resumeAgentBuilderBodySchema,
responseSchema: workflowExecutionResultSchema,
summary: "Resume action asynchronously",
description: "Resumes a suspended action execution asynchronously without streaming",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, step, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Resuming agent builder action asynchronously", { actionId, runId, step });
return await RESUME_ASYNC_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error resuming agent builder action asynchronously", { error, actionId });
return handleError(error, "Error resuming agent builder action");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/resume-no-wait",
responseType: "json",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: resumeAgentBuilderBodySchema,
responseSchema: createWorkflowRunResponseSchema,
summary: "Resume action without waiting",
description: "Resumes a suspended action execution without waiting (fire-and-forget) and returns immediately with the runId. The action continues executing in the background.",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, step, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Resuming agent builder action without waiting", { actionId, runId, step });
return await RESUME_NO_WAIT_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error resuming agent builder action without waiting", { error, actionId });
return handleError(error, "Error resuming agent builder action");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var RESUME_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/resume",
responseType: "json",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: resumeAgentBuilderBodySchema,
responseSchema: workflowControlResponseSchema,
summary: "Resume action",
description: "Resumes a suspended action execution from a specific step",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, step, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Resuming agent builder action", { actionId, runId, step });
return await RESUME_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error resuming agent builder action", { error, actionId });
return handleError(error, "Error resuming agent builder action");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/resume-stream",
responseType: "stream",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: resumeAgentBuilderBodySchema,
responseSchema: streamResponseSchema,
summary: "Resume action stream",
description: "Resumes a suspended action execution and continues streaming results",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, step, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Resuming agent builder action stream", { actionId, runId, step });
return await RESUME_STREAM_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error resuming agent builder action stream", { error, actionId });
return handleError(error, "Error resuming agent builder action stream");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/runs/:runId/cancel",
responseType: "json",
pathParamSchema: actionRunPathParams,
responseSchema: workflowControlResponseSchema,
summary: "Cancel action run",
description: "Cancels an in-progress action execution",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Cancelling agent builder action run", { actionId, runId });
return await CANCEL_WORKFLOW_RUN_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error cancelling agent builder action run", { error, actionId });
return handleError(error, "Error cancelling agent builder action run");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/stream-legacy",
responseType: "stream",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: streamLegacyAgentBuilderBodySchema,
responseSchema: streamResponseSchema,
summary: "[DEPRECATED] Stream agent-builder action with legacy format",
description: "Legacy endpoint for streaming agent-builder action execution. Use /agent-builder/:actionId/stream instead.",
tags: ["Agent Builder", "Legacy"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Streaming agent builder action (legacy)", { actionId, runId });
return await STREAM_LEGACY_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error streaming agent builder action (legacy)", { error, actionId });
return handleError(error, "Error streaming agent builder action");
} finally {
WorkflowRegistry.cleanup();
}
}
});
var OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = createRoute({
method: "POST",
path: "/agent-builder/:actionId/observe-stream-legacy",
responseType: "stream",
pathParamSchema: actionIdPathParams,
queryParamSchema: runIdSchema,
responseSchema: streamResponseSchema,
summary: "[DEPRECATED] Observe agent-builder action stream with legacy format",
description: "Legacy endpoint for observing agent-builder action stream. Use /agent-builder/:actionId/observe instead.",
tags: ["Agent Builder", "Legacy"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Observing agent builder action stream (legacy)", { actionId, runId });
return await OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error observing agent builder action stream (legacy)", { error, actionId });
return handleError(error, "Error observing agent builder action stream");
} finally {
WorkflowRegistry.cleanup();
}
}
});
export { CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE, CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE, GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE, GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE, LIST_AGENT_BUILDER_ACTIONS_ROUTE, LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE, OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE, OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE, RESUME_AGENT_BUILDER_ACTION_ROUTE, RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE, RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE, RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE, START_AGENT_BUILDER_ACTION_RUN_ROUTE, START_ASYNC_AGENT_BUILDER_ACTION_ROUTE, STREAM_AGENT_BUILDER_ACTION_ROUTE, STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE, agent_builder_exports };
//# sourceMappingURL=chunk-NDCWMT6H.js.map
//# sourceMappingURL=chunk-NDCWMT6H.js.map
{"version":3,"sources":["../src/server/handlers/agent-builder.ts"],"names":[],"mappings":"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","file":"chunk-NDCWMT6H.js","sourcesContent":["import type { agentBuilderWorkflows as agentBuilderWorkflowsType } from '@mastra/agent-builder';\nimport { HTTPException } from '../http-exception';\nimport {\n actionIdPathParams,\n actionRunPathParams,\n createWorkflowRunResponseSchema,\n listWorkflowRunsQuerySchema,\n resumeAgentBuilderBodySchema,\n streamAgentBuilderBodySchema,\n startAsyncAgentBuilderBodySchema,\n workflowExecutionResultSchema,\n workflowControlResponseSchema,\n workflowRunsResponseSchema,\n workflowInfoSchema,\n listWorkflowsResponseSchema,\n streamLegacyAgentBuilderBodySchema,\n workflowRunResultSchema,\n workflowRunResultQuerySchema,\n} from '../schemas/agent-builder';\nimport { streamResponseSchema } from '../schemas/agents';\nimport { optionalRunIdSchema, runIdSchema } from '../schemas/common';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { WorkflowRegistry } from '../utils';\nimport { handleError } from './error';\nimport * as workflows from './workflows';\n\ntype AgentBuilderWorkflows = typeof agentBuilderWorkflowsType;\n\nlet agentBuilderWorkflowsPromise: Promise<AgentBuilderWorkflows> | undefined;\n\nasync function loadAgentBuilderWorkflows(): Promise<AgentBuilderWorkflows> {\n agentBuilderWorkflowsPromise ??= import('@mastra/agent-builder').then(mod => mod.agentBuilderWorkflows);\n return agentBuilderWorkflowsPromise;\n}\n\nasync function registerAgentBuilderWorkflows(\n mastra: Parameters<typeof WorkflowRegistry.registerTemporaryWorkflows>[1],\n) {\n const agentBuilderWorkflows = await loadAgentBuilderWorkflows();\n WorkflowRegistry.registerTemporaryWorkflows(agentBuilderWorkflows, mastra);\n return agentBuilderWorkflows;\n}\n\n// ============================================================================\n// Route Definitions (handlers call workflow route handlers with transformed parameters)\n// ============================================================================\n\nexport const LIST_AGENT_BUILDER_ACTIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-builder',\n responseType: 'json',\n responseSchema: listWorkflowsResponseSchema,\n summary: 'List agent-builder actions',\n description: 'Returns a list of all available agent-builder actions',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n logger.info('Listing agent builder actions');\n\n // Call workflow list handler\n return await workflows.LIST_WORKFLOWS_ROUTE.handler(ctx);\n } catch (error) {\n logger.error('Error listing agent builder actions', { error });\n return handleError(error, 'Error getting agent builder workflows');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-builder/:actionId',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n responseSchema: workflowInfoSchema,\n summary: 'Get action by ID',\n description: 'Returns details for a specific agent-builder action',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId } = ctx;\n const logger = mastra.getLogger();\n try {\n const agentBuilderWorkflows = await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, {\n message: `Invalid agent-builder action: ${actionId}. Valid actions are: ${Object.keys(agentBuilderWorkflows).join(', ')}`,\n });\n }\n\n logger.info('Getting agent builder action by ID', { actionId });\n\n return await workflows.GET_WORKFLOW_BY_ID_ROUTE.handler({ ...ctx, workflowId: actionId });\n } catch (error) {\n logger.error('Error getting agent builder action by ID', { error, actionId });\n return handleError(error, 'Error getting agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-builder/:actionId/runs',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: listWorkflowRunsQuerySchema,\n responseSchema: workflowRunsResponseSchema,\n summary: 'List action runs',\n description: 'Returns a paginated list of execution runs for the specified action',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Listing agent builder action runs', { actionId });\n\n return await workflows.LIST_WORKFLOW_RUNS_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error listing agent builder action runs', { error, actionId });\n return handleError(error, 'Error getting agent builder action runs');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-builder/:actionId/runs/:runId',\n responseType: 'json',\n pathParamSchema: actionRunPathParams,\n queryParamSchema: workflowRunResultQuerySchema,\n responseSchema: workflowRunResultSchema,\n summary: 'Get action run by ID',\n description:\n 'Returns details for a specific action run with metadata and processed execution state. Use the fields query parameter to reduce payload size.',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Getting agent builder action run by ID', { actionId, runId });\n\n return await workflows.GET_WORKFLOW_RUN_BY_ID_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error getting agent builder action run', { error, actionId, runId });\n return handleError(error, 'Error getting agent builder action run');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/create-run',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: optionalRunIdSchema,\n responseSchema: createWorkflowRunResponseSchema,\n summary: 'Create action run',\n description: 'Creates a new action execution instance with an optional custom run ID',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Creating agent builder action run', { actionId, runId });\n\n return await workflows.CREATE_WORKFLOW_RUN_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error creating agent builder action run', { error, actionId });\n return handleError(error, 'Error creating agent builder action run');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/stream',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: streamAgentBuilderBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Stream action execution',\n description: 'Executes an action and streams the results in real-time',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Streaming agent builder action', { actionId, runId });\n\n return await workflows.STREAM_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error streaming agent builder action', { error, actionId });\n return handleError(error, 'Error streaming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const START_ASYNC_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/start-async',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: optionalRunIdSchema,\n bodySchema: startAsyncAgentBuilderBodySchema,\n responseSchema: workflowExecutionResultSchema,\n summary: 'Start action asynchronously',\n description: 'Starts an action execution asynchronously without streaming results',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Starting agent builder action asynchronously', { actionId, runId });\n\n return await workflows.START_ASYNC_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error starting agent builder action asynchronously', { error, actionId });\n return handleError(error, 'Error starting agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const START_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/start',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: startAsyncAgentBuilderBodySchema,\n responseSchema: workflowControlResponseSchema,\n summary: 'Start specific action run',\n description: 'Starts execution of a specific action run by ID',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Starting specific agent builder action run', { actionId, runId });\n\n return await workflows.START_WORKFLOW_RUN_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error starting agent builder action run', { error, actionId });\n return handleError(error, 'Error starting agent builder action run');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/observe',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n responseSchema: streamResponseSchema,\n summary: 'Observe action stream',\n description: 'Observes and streams updates from an already running action execution',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Observing agent builder action stream', { actionId, runId });\n\n return await workflows.OBSERVE_STREAM_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error observing agent builder action stream', { error, actionId });\n return handleError(error, 'Error observing agent builder action stream');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/resume-async',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: resumeAgentBuilderBodySchema,\n responseSchema: workflowExecutionResultSchema,\n summary: 'Resume action asynchronously',\n description: 'Resumes a suspended action execution asynchronously without streaming',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, step, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Resuming agent builder action asynchronously', { actionId, runId, step });\n\n return await workflows.RESUME_ASYNC_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error resuming agent builder action asynchronously', { error, actionId });\n return handleError(error, 'Error resuming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\n/**\n * Fire-and-forget resume for agent-builder actions: returns immediately with the runId without\n * waiting for completion. Delegates to the workflows `resume-no-wait` route.\n *\n * TODO(v2): fold this behavior into the `resume-async` route in Mastra v2 and remove this route.\n * Kept separate in v1 to avoid breaking the existing `resume-async` response contract.\n */\nexport const RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/resume-no-wait',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: resumeAgentBuilderBodySchema,\n responseSchema: createWorkflowRunResponseSchema,\n summary: 'Resume action without waiting',\n description:\n 'Resumes a suspended action execution without waiting (fire-and-forget) and returns immediately with the runId. The action continues executing in the background.',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, step, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Resuming agent builder action without waiting', { actionId, runId, step });\n\n return await workflows.RESUME_NO_WAIT_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error resuming agent builder action without waiting', { error, actionId });\n return handleError(error, 'Error resuming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const RESUME_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/resume',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: resumeAgentBuilderBodySchema,\n responseSchema: workflowControlResponseSchema,\n summary: 'Resume action',\n description: 'Resumes a suspended action execution from a specific step',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, step, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Resuming agent builder action', { actionId, runId, step });\n\n return await workflows.RESUME_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error resuming agent builder action', { error, actionId });\n return handleError(error, 'Error resuming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/resume-stream',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: resumeAgentBuilderBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Resume action stream',\n description: 'Resumes a suspended action execution and continues streaming results',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, step, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Resuming agent builder action stream', { actionId, runId, step });\n\n return await workflows.RESUME_STREAM_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error resuming agent builder action stream', { error, actionId });\n return handleError(error, 'Error resuming agent builder action stream');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/runs/:runId/cancel',\n responseType: 'json',\n pathParamSchema: actionRunPathParams,\n responseSchema: workflowControlResponseSchema,\n summary: 'Cancel action run',\n description: 'Cancels an in-progress action execution',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Cancelling agent builder action run', { actionId, runId });\n\n return await workflows.CANCEL_WORKFLOW_RUN_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error cancelling agent builder action run', { error, actionId });\n return handleError(error, 'Error cancelling agent builder action run');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\n// Legacy routes (deprecated)\nexport const STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/stream-legacy',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: streamLegacyAgentBuilderBodySchema,\n responseSchema: streamResponseSchema,\n summary: '[DEPRECATED] Stream agent-builder action with legacy format',\n description:\n 'Legacy endpoint for streaming agent-builder action execution. Use /agent-builder/:actionId/stream instead.',\n tags: ['Agent Builder', 'Legacy'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Streaming agent builder action (legacy)', { actionId, runId });\n\n return await workflows.STREAM_LEGACY_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error streaming agent builder action (legacy)', { error, actionId });\n return handleError(error, 'Error streaming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/observe-stream-legacy',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n responseSchema: streamResponseSchema,\n summary: '[DEPRECATED] Observe agent-builder action stream with legacy format',\n description:\n 'Legacy endpoint for observing agent-builder action stream. Use /agent-builder/:actionId/observe instead.',\n tags: ['Agent Builder', 'Legacy'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Observing agent builder action stream (legacy)', { actionId, runId });\n\n return await workflows.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error observing agent builder action stream (legacy)', { error, actionId });\n return handleError(error, 'Error observing agent builder action stream');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n"]}
'use strict';
var chunkPTPMBE6M_cjs = require('./chunk-PTPMBE6M.cjs');
var chunkHBXNOBJN_cjs = require('./chunk-HBXNOBJN.cjs');
var chunk42M6Y2OD_cjs = require('./chunk-42M6Y2OD.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var chunkYWUVDFQZ_cjs = require('./chunk-YWUVDFQZ.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
var stream = require('@mastra/core/stream');
var v4 = require('zod/v4');
// src/server/handlers/workflows.ts
var workflows_exports = {};
chunkO7I5CWRX_cjs.__export(workflows_exports, {
CANCEL_WORKFLOW_RUN_ROUTE: () => CANCEL_WORKFLOW_RUN_ROUTE,
CREATE_WORKFLOW_RUN_ROUTE: () => CREATE_WORKFLOW_RUN_ROUTE,
DELETE_WORKFLOW_RUN_BY_ID_ROUTE: () => DELETE_WORKFLOW_RUN_BY_ID_ROUTE,
EXECUTE_WORKFLOW_STEP_ROUTE: () => EXECUTE_WORKFLOW_STEP_ROUTE,
GET_WORKFLOW_BY_ID_ROUTE: () => GET_WORKFLOW_BY_ID_ROUTE,
GET_WORKFLOW_RUN_BY_ID_ROUTE: () => GET_WORKFLOW_RUN_BY_ID_ROUTE,
LIST_WORKFLOWS_ROUTE: () => LIST_WORKFLOWS_ROUTE,
LIST_WORKFLOW_RUNS_ROUTE: () => LIST_WORKFLOW_RUNS_ROUTE,
OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE: () => OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE,
OBSERVE_STREAM_WORKFLOW_ROUTE: () => OBSERVE_STREAM_WORKFLOW_ROUTE,
RECEIVE_WORKFLOW_EVENT_ROUTE: () => RECEIVE_WORKFLOW_EVENT_ROUTE,
RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE: () => RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,
RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE: () => RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,
RESTART_ASYNC_WORKFLOW_ROUTE: () => RESTART_ASYNC_WORKFLOW_ROUTE,
RESTART_WORKFLOW_ROUTE: () => RESTART_WORKFLOW_ROUTE,
RESUME_ASYNC_WORKFLOW_ROUTE: () => RESUME_ASYNC_WORKFLOW_ROUTE,
RESUME_NO_WAIT_WORKFLOW_ROUTE: () => RESUME_NO_WAIT_WORKFLOW_ROUTE,
RESUME_STREAM_WORKFLOW_ROUTE: () => RESUME_STREAM_WORKFLOW_ROUTE,
RESUME_WORKFLOW_ROUTE: () => RESUME_WORKFLOW_ROUTE,
START_ASYNC_WORKFLOW_ROUTE: () => START_ASYNC_WORKFLOW_ROUTE,
START_WORKFLOW_RUN_ROUTE: () => START_WORKFLOW_RUN_ROUTE,
STREAM_LEGACY_WORKFLOW_ROUTE: () => STREAM_LEGACY_WORKFLOW_ROUTE,
STREAM_WORKFLOW_ROUTE: () => STREAM_WORKFLOW_ROUTE,
TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE: () => TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,
TIME_TRAVEL_STREAM_WORKFLOW_ROUTE: () => TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,
TIME_TRAVEL_WORKFLOW_ROUTE: () => TIME_TRAVEL_WORKFLOW_ROUTE
});
async function listWorkflowsFromSystem({ mastra, workflowId }) {
const logger = mastra.getLogger();
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
let workflow;
workflow = chunkYWUVDFQZ_cjs.WorkflowRegistry.getWorkflow(workflowId);
if (!workflow) {
try {
workflow = mastra.getWorkflowById(workflowId);
} catch (error) {
logger.debug("Error getting workflow, searching agents for workflow", error);
}
}
if (!workflow) {
logger.debug("Workflow not found, searching agents for workflow", { workflowId });
const agents = mastra.listAgents();
if (Object.keys(agents || {}).length) {
for (const [_, agent] of Object.entries(agents)) {
try {
const workflows = await agent.listWorkflows();
if (workflows[workflowId]) {
workflow = workflows[workflowId];
break;
}
} catch (error) {
logger.debug("Error getting workflow from agent", error);
}
}
}
}
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
return { workflow };
}
var LIST_WORKFLOWS_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/workflows",
responseType: "json",
queryParamSchema: v4.z.object({
partial: v4.z.string().optional()
}),
responseSchema: chunkPTPMBE6M_cjs.listWorkflowsResponseSchema,
summary: "List all workflows",
description: "Returns a list of all available workflows in the system",
tags: ["Workflows"],
requiresAuth: true,
handler: (async ({ mastra, partial, requestContext }) => {
try {
const workflows = mastra.listWorkflows({ serialized: false });
const isPartial = partial === "true";
const _workflows = Object.entries(workflows).reduce((acc, [key, workflow]) => {
acc[key] = chunkYWUVDFQZ_cjs.getWorkflowInfo(workflow, isPartial);
return acc;
}, {});
const fgaProvider = mastra.getServer?.()?.fga;
const user = requestContext?.get("user");
if (fgaProvider) {
if (!user) {
return {};
}
const workflowList = Object.entries(_workflows).map(([id, w]) => ({ id, ...w }));
const accessible = await fgaProvider.filterAccessible(
user,
workflowList,
"workflow",
chunk42M6Y2OD_cjs.MastraFGAPermissions.WORKFLOWS_READ
);
const accessibleSet = new Set(accessible.map((w) => w.id));
for (const id of Object.keys(_workflows)) {
if (!accessibleSet.has(id)) {
delete _workflows[id];
}
}
}
return _workflows;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting workflows");
}
})
});
var GET_WORKFLOW_BY_ID_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/workflows/:workflowId",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
responseSchema: chunkPTPMBE6M_cjs.workflowInfoSchema,
summary: "Get workflow by ID",
description: "Returns details for a specific workflow",
tags: ["Workflows"],
requiresAuth: true,
handler: (async ({ mastra, workflowId }) => {
try {
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
return chunkYWUVDFQZ_cjs.getWorkflowInfo(workflow);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting workflow");
}
})
});
var LIST_WORKFLOW_RUNS_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/workflows/:workflowId/runs",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkPTPMBE6M_cjs.listWorkflowRunsQuerySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowRunsResponseSchema,
summary: "List workflow runs",
description: "Returns a paginated list of execution runs for the specified workflow",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({
mastra,
workflowId,
fromDate,
toDate,
page,
perPage,
limit,
offset,
resourceId,
status,
requestContext
}) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
let finalPage = page;
let finalPerPage = perPage;
if (finalPerPage === void 0 && limit !== void 0) {
finalPerPage = limit;
}
if (finalPage === void 0 && offset !== void 0 && finalPerPage !== void 0 && finalPerPage > 0) {
finalPage = Math.floor(offset / finalPerPage);
}
if (finalPerPage !== void 0 && (typeof finalPerPage !== "number" || !Number.isInteger(finalPerPage) || finalPerPage <= 0)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "perPage must be a positive integer" });
}
if (finalPage !== void 0 && (!Number.isInteger(finalPage) || finalPage < 0)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "page must be a non-negative integer" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const workflowRuns = await workflow.listWorkflowRuns({
fromDate: fromDate ? typeof fromDate === "string" ? new Date(fromDate) : fromDate : void 0,
toDate: toDate ? typeof toDate === "string" ? new Date(toDate) : toDate : void 0,
perPage: finalPerPage,
page: finalPage,
resourceId: effectiveResourceId,
status
}) || {
runs: [],
total: 0
};
return workflowRuns;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting workflow runs");
}
}
});
var GET_WORKFLOW_RUN_BY_ID_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/workflows/:workflowId/runs/:runId",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowRunPathParams,
queryParamSchema: chunkPTPMBE6M_cjs.workflowRunResultQuerySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowRunResultSchema,
summary: "Get workflow run by ID",
description: "Returns a workflow run with metadata and processed execution state. Use the fields query parameter to reduce payload size by requesting only specific fields (e.g., ?fields=status,result,metadata)",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, fields, withNestedWorkflows, requestContext }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Run ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const fieldList = fields ? fields.split(",").map((f) => f.trim()) : void 0;
const run = await workflow.getWorkflowRunById(runId, {
withNestedWorkflows: withNestedWorkflows !== "false",
// Default to true unless explicitly 'false'
fields: fieldList
});
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
return run;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting workflow run");
}
}
});
var DELETE_WORKFLOW_RUN_BY_ID_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "DELETE",
path: "/workflows/:workflowId/runs/:runId",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowRunPathParams,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Delete workflow run by ID",
description: "Deletes a specific workflow run by ID",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Run ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
await workflow.deleteWorkflowRunById(runId);
return { message: "Workflow run deleted" };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error deleting workflow run");
}
}
});
var CREATE_WORKFLOW_RUN_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/create-run",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.optionalRunIdSchema,
bodySchema: chunkPTPMBE6M_cjs.createWorkflowRunBodySchema,
responseSchema: chunkPTPMBE6M_cjs.createWorkflowRunResponseSchema,
summary: "Create workflow run",
description: "Creates a new workflow execution instance with an optional custom run ID",
tags: ["Workflows"],
requiresAuth: true,
// Creating a run is part of the execute flow (Studio/UI calls this before
// starting/streaming a workflow), so allow either permission. `write` is kept
// for back-compat with roles that already grant it.
requiresPermission: ["workflows:write", "workflows:execute"],
handler: async ({ mastra, workflowId, runId, resourceId, disableScorers, requestContext }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.createRun({ runId, resourceId: effectiveResourceId, disableScorers });
return { runId: run.runId };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating workflow run");
}
}
});
var STREAM_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/stream",
responseType: "stream",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.streamWorkflowBodySchema,
summary: "Stream workflow execution",
description: "Executes a workflow and streams the results in real-time",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, resourceId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to stream workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const serverCache = mastra.getServerCache();
const run = await workflow.createRun({ runId, resourceId: effectiveResourceId });
const result = run.stream({ ...params, requestContext });
if (serverCache) {
const { transform } = stream.createCachingTransformStream({
cache: serverCache,
cacheKey: runId
});
return result.fullStream.pipeThrough(transform);
}
return result.fullStream;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error streaming workflow");
}
}
});
var RESUME_STREAM_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/resume-stream",
responseType: "stream",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.resumeBodySchema,
responseSchema: chunkHBXNOBJN_cjs.streamResponseSchema,
summary: "Resume workflow stream",
description: "Resumes a suspended workflow execution and continues streaming results",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const serverCache = mastra.getServerCache();
const resumeResult = _run.resumeStream({ ...params, requestContext });
if (serverCache) {
const { transform } = stream.createCachingTransformStream({
cache: serverCache,
cacheKey: runId
});
return resumeResult.fullStream.pipeThrough(transform);
}
return resumeResult.fullStream;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error resuming workflow");
}
}
});
var START_ASYNC_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/start-async",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.optionalRunIdSchema,
bodySchema: chunkPTPMBE6M_cjs.startAsyncWorkflowBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowExecutionResultSchema,
summary: "Start workflow asynchronously",
description: "Starts a workflow execution asynchronously without streaming results",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, resourceId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const _run = await workflow.createRun({ runId, resourceId: effectiveResourceId });
const result = await _run.start({ ...params, requestContext });
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error starting async workflow");
}
}
});
var START_WORKFLOW_RUN_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/start",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.startAsyncWorkflowBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Start specific workflow run",
description: "Starts execution of a specific workflow run by ID",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to start run" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
void _run.start({
...params,
requestContext
});
return { message: "Workflow run started" };
} catch (e) {
return chunkZ7LCIYK7_cjs.handleError(e, "Error starting workflow run");
}
}
});
var OBSERVE_STREAM_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/observe",
responseType: "stream",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkPTPMBE6M_cjs.observeWorkflowQuerySchema,
responseSchema: chunkHBXNOBJN_cjs.streamResponseSchema,
summary: "Observe workflow stream",
description: "Observes and streams updates from an already running workflow execution. Supports position-based resume with offset for efficient reconnection.",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, offset, requestContext }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to observe workflow stream" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const serverCache = mastra.getServerCache();
if (!serverCache) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Server cache not found" });
}
const startIndex = offset ?? 0;
const cachedRunChunks = await serverCache.listFromTo(runId, startIndex);
const liveStream = _run.observeStream();
return stream.createReplayStream({
history: cachedRunChunks,
liveSource: liveStream
});
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error observing workflow stream");
}
}
});
var RESUME_ASYNC_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/resume-async",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.resumeBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowExecutionResultSchema,
summary: "Resume workflow asynchronously",
description: "Resumes a suspended workflow execution asynchronously without streaming",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const result = await _run.resume({ ...params, requestContext });
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error resuming workflow step");
}
}
});
var RESUME_NO_WAIT_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/resume-no-wait",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.resumeBodySchema,
responseSchema: chunkPTPMBE6M_cjs.createWorkflowRunResponseSchema,
summary: "Resume workflow without waiting",
description: "Resumes a suspended workflow execution without waiting (fire-and-forget) and returns immediately with the runId. The workflow continues executing in the background.",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const result = await _run.resumeAsync({ ...params, requestContext });
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error resuming workflow step");
}
}
});
var RESUME_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/resume",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.resumeBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Resume workflow",
description: "Resumes a suspended workflow execution from a specific step",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
void _run.resume({ ...params, requestContext });
return { message: "Workflow run resumed" };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error resuming workflow");
}
}
});
var RESTART_ASYNC_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/restart-async",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.restartBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowExecutionResultSchema,
summary: "Restart workflow asynchronously",
description: "Restarts an active workflow execution asynchronously",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to restart workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const result = await _run.restart({ ...params, requestContext });
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error restarting workflow");
}
}
});
var RESTART_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/restart",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.restartBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Restart workflow",
description: "Restarts an active workflow execution",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to restart workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
void _run.restart({ ...params, requestContext });
return { message: "Workflow run restarted" };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error restarting workflow");
}
}
});
var RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/restart-all-active-workflow-runs-async",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Restart all active workflow runs asynchronously",
description: "Restarts all active workflow runs asynchronously",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId }) => {
try {
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
await workflow.restartAllActiveWorkflowRuns();
return { message: "All active workflow runs restarted" };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error restarting workflow");
}
}
});
var RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/restart-all-active-workflow-runs",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Restart all active workflow runs",
description: "Restarts all active workflow runs",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId }) => {
try {
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
void workflow.restartAllActiveWorkflowRuns();
return { message: "All active workflow runs restarted" };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error restarting workflow");
}
}
});
var TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/time-travel-async",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.timeTravelBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowExecutionResultSchema,
summary: "Time travel workflow asynchronously",
description: "Time travels a workflow run asynchronously without streaming",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to time travel workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const result = await _run.timeTravel({ ...params, requestContext });
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error time traveling workflow");
}
}
});
var TIME_TRAVEL_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/time-travel",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.timeTravelBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Time travel workflow",
description: "Time travels a workflow run, starting from a specific step",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to time travel workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
void _run.timeTravel({ ...params, requestContext });
return { message: "Workflow run time travel started" };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error time traveling workflow");
}
}
});
var TIME_TRAVEL_STREAM_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/time-travel-stream",
responseType: "stream",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.timeTravelBodySchema,
summary: "Time travel workflow stream",
description: "Time travels a workflow run, starting from a specific step, and streams the results in real-time",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to time travel workflow stream" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const existingRun = await workflow.getWorkflowRunById(runId);
if (!existingRun) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(existingRun, effectiveResourceId);
const serverCache = mastra.getServerCache();
const run = await workflow.createRun({ runId, resourceId: existingRun.resourceId });
const result = run.timeTravelStream({ ...params, requestContext });
if (serverCache) {
const { transform } = stream.createCachingTransformStream({
cache: serverCache,
cacheKey: runId
});
return result.fullStream.pipeThrough(transform);
}
return result.fullStream;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error time traveling workflow stream");
}
}
});
var CANCEL_WORKFLOW_RUN_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/runs/:runId/cancel",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowRunPathParams,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Cancel workflow run",
description: "Cancels an in-progress workflow execution",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to cancel workflow run" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
await _run.cancel();
return { message: "Workflow run cancelled" };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error canceling workflow run");
}
}
});
var STREAM_LEGACY_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/stream-legacy",
responseType: "stream",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkPTPMBE6M_cjs.streamWorkflowBodySchema,
responseSchema: chunkHBXNOBJN_cjs.streamResponseSchema,
summary: "[DEPRECATED] Stream workflow with legacy format",
description: "Legacy endpoint for streaming workflow execution. Use /workflows/:workflowId/stream instead.",
tags: ["Workflows", "Legacy"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, resourceId, requestContext, ...params }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const serverCache = mastra.getServerCache();
const run = await workflow.createRun({ runId, resourceId: effectiveResourceId });
const result = run.streamLegacy({
...params,
requestContext,
onChunk: async (chunk) => {
if (serverCache) {
const cacheKey = runId;
await serverCache.listPush(cacheKey, chunk);
}
}
});
return result.stream;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error executing workflow");
}
}
});
var OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/observe-stream-legacy",
responseType: "stream",
pathParamSchema: chunkPTPMBE6M_cjs.workflowIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
responseSchema: chunkHBXNOBJN_cjs.streamResponseSchema,
summary: "[DEPRECATED] Observe workflow stream with legacy format",
description: "Legacy endpoint for observing workflow stream. Use /workflows/:workflowId/observe instead.",
tags: ["Workflows", "Legacy"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext }) => {
try {
const effectiveResourceId = chunk42M6Y2OD_cjs.getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "runId required to observe workflow stream" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: "Workflow run not found" });
}
await chunk42M6Y2OD_cjs.validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const serverCache = mastra.getServerCache();
if (!serverCache) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Server cache not found" });
}
const cachedRunChunks = await serverCache.listFromTo(runId, 0);
const result = _run.observeStreamLegacy();
if (!result.stream) {
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to create observe stream" });
}
return stream.createReplayStream({
history: cachedRunChunks,
liveSource: result.stream
});
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error observing workflow stream");
}
}
});
var stepExecutionBodySchema = v4.z.object({
stepId: v4.z.string(),
executionPath: v4.z.array(v4.z.number().int().nonnegative()),
stepResults: v4.z.record(v4.z.string(), v4.z.any()),
state: v4.z.record(v4.z.string(), v4.z.any()),
requestContext: v4.z.record(v4.z.string(), v4.z.any()),
input: v4.z.any().optional(),
resumeData: v4.z.any().optional(),
retryCount: v4.z.number().int().nonnegative().optional(),
foreachIdx: v4.z.number().int().nonnegative().optional(),
format: v4.z.enum(["legacy", "vnext"]).optional(),
perStep: v4.z.boolean().optional(),
validateInputs: v4.z.boolean().optional()
});
var strategyByMastra = /* @__PURE__ */ new WeakMap();
async function getStepStrategy(mastra) {
let cached = strategyByMastra.get(mastra);
if (!cached) {
const { InProcessStrategy } = await import('@mastra/core/worker');
cached = new InProcessStrategy({ mastra });
strategyByMastra.set(mastra, cached);
}
return cached;
}
var stepExecutionResponseSchema = v4.z.any();
var EXECUTE_WORKFLOW_STEP_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/:workflowId/runs/:runId/steps/execute",
responseType: "json",
pathParamSchema: chunkPTPMBE6M_cjs.workflowRunPathParams,
bodySchema: stepExecutionBodySchema,
responseSchema: stepExecutionResponseSchema,
summary: "Execute a workflow step",
description: "Internal endpoint used by standalone OrchestrationWorker instances to execute workflow steps remotely via HttpRemoteStrategy.",
tags: ["Workflows", "Worker"],
requiresAuth: true,
handler: (async ({ mastra, workflowId, runId, ...body }) => {
try {
const strategy = await getStepStrategy(mastra);
const result = await strategy.executeStep({
workflowId,
runId,
stepId: body.stepId,
executionPath: body.executionPath,
stepResults: body.stepResults,
state: body.state,
requestContext: body.requestContext,
input: body.input,
resumeData: body.resumeData,
retryCount: body.retryCount,
foreachIdx: body.foreachIdx,
format: body.format,
perStep: body.perStep,
validateInputs: body.validateInputs
});
return result;
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error executing workflow step");
}
})
});
var workflowEventSchema = v4.z.object({
id: v4.z.string(),
type: v4.z.string(),
data: v4.z.unknown(),
runId: v4.z.string(),
createdAt: v4.z.string(),
index: v4.z.number().optional(),
deliveryAttempt: v4.z.number().optional()
});
var receiveWorkflowEventBodySchema = v4.z.object({
event: workflowEventSchema.passthrough()
});
var receiveWorkflowEventResponseSchema = v4.z.object({
ok: v4.z.boolean(),
retry: v4.z.boolean().optional()
});
var RECEIVE_WORKFLOW_EVENT_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/workflows/events",
responseType: "json",
bodySchema: receiveWorkflowEventBodySchema,
responseSchema: receiveWorkflowEventResponseSchema,
summary: "Receive a workflow event from a push-mode broker",
description: "Push-mode entry point for workflow events. Brokers (GCP Pub/Sub push, SNS, EventBridge) POST each event here; Mastra processes it through the same pipeline as pull-mode workers.",
tags: ["Workflows", "Worker"],
requiresAuth: true,
// Broker push endpoint: it advances runtime state rather than editing
// definitions, so `workflows:execute` is the more accurate fit. `write` is
// kept for back-compat with service principals that already grant it.
requiresPermission: ["workflows:write", "workflows:execute"],
handler: (async ({ mastra, event }) => {
try {
const rawCreatedAt = event.createdAt;
const createdAt = rawCreatedAt instanceof Date ? rawCreatedAt : new Date(rawCreatedAt);
if (Number.isNaN(createdAt.getTime())) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "Invalid createdAt" });
}
return await mastra.handleWorkflowEvent({ ...event, createdAt });
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error receiving workflow event");
}
})
});
exports.CANCEL_WORKFLOW_RUN_ROUTE = CANCEL_WORKFLOW_RUN_ROUTE;
exports.CREATE_WORKFLOW_RUN_ROUTE = CREATE_WORKFLOW_RUN_ROUTE;
exports.DELETE_WORKFLOW_RUN_BY_ID_ROUTE = DELETE_WORKFLOW_RUN_BY_ID_ROUTE;
exports.EXECUTE_WORKFLOW_STEP_ROUTE = EXECUTE_WORKFLOW_STEP_ROUTE;
exports.GET_WORKFLOW_BY_ID_ROUTE = GET_WORKFLOW_BY_ID_ROUTE;
exports.GET_WORKFLOW_RUN_BY_ID_ROUTE = GET_WORKFLOW_RUN_BY_ID_ROUTE;
exports.LIST_WORKFLOWS_ROUTE = LIST_WORKFLOWS_ROUTE;
exports.LIST_WORKFLOW_RUNS_ROUTE = LIST_WORKFLOW_RUNS_ROUTE;
exports.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE = OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE;
exports.OBSERVE_STREAM_WORKFLOW_ROUTE = OBSERVE_STREAM_WORKFLOW_ROUTE;
exports.RECEIVE_WORKFLOW_EVENT_ROUTE = RECEIVE_WORKFLOW_EVENT_ROUTE;
exports.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE = RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE;
exports.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE = RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE;
exports.RESTART_ASYNC_WORKFLOW_ROUTE = RESTART_ASYNC_WORKFLOW_ROUTE;
exports.RESTART_WORKFLOW_ROUTE = RESTART_WORKFLOW_ROUTE;
exports.RESUME_ASYNC_WORKFLOW_ROUTE = RESUME_ASYNC_WORKFLOW_ROUTE;
exports.RESUME_NO_WAIT_WORKFLOW_ROUTE = RESUME_NO_WAIT_WORKFLOW_ROUTE;
exports.RESUME_STREAM_WORKFLOW_ROUTE = RESUME_STREAM_WORKFLOW_ROUTE;
exports.RESUME_WORKFLOW_ROUTE = RESUME_WORKFLOW_ROUTE;
exports.START_ASYNC_WORKFLOW_ROUTE = START_ASYNC_WORKFLOW_ROUTE;
exports.START_WORKFLOW_RUN_ROUTE = START_WORKFLOW_RUN_ROUTE;
exports.STREAM_LEGACY_WORKFLOW_ROUTE = STREAM_LEGACY_WORKFLOW_ROUTE;
exports.STREAM_WORKFLOW_ROUTE = STREAM_WORKFLOW_ROUTE;
exports.TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE = TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE;
exports.TIME_TRAVEL_STREAM_WORKFLOW_ROUTE = TIME_TRAVEL_STREAM_WORKFLOW_ROUTE;
exports.TIME_TRAVEL_WORKFLOW_ROUTE = TIME_TRAVEL_WORKFLOW_ROUTE;
exports.workflows_exports = workflows_exports;
//# sourceMappingURL=chunk-O35VIFMS.cjs.map
//# sourceMappingURL=chunk-O35VIFMS.cjs.map

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

import { paginationInfoSchema } from './chunk-2YY3EMMS.js';
import { z } from 'zod/v4';
var scoringSamplingConfigSchema = z.object({});
var mastraScorerConfigSchema = z.object({
id: z.string(),
name: z.string().optional(),
description: z.string(),
type: z.unknown().optional(),
judge: z.unknown().optional()
});
var mastraScorerSchema = z.object({
config: mastraScorerConfigSchema
});
var scorerEntrySchema = z.object({
scorer: mastraScorerSchema,
sampling: scoringSamplingConfigSchema.optional(),
agentIds: z.array(z.string()),
agentNames: z.array(z.string()),
workflowIds: z.array(z.string()),
isRegistered: z.boolean(),
source: z.enum(["code", "stored"])
});
var listScorersResponseSchema = z.record(z.string(), scorerEntrySchema);
var scorerIdPathParams = z.object({
scorerId: z.string().describe("Unique identifier for the scorer")
});
var entityPathParams = z.object({
entityType: z.string().describe("Type of the entity (AGENT or WORKFLOW)"),
entityId: z.string().describe("Unique identifier for the entity")
});
var listScoresByRunIdQuerySchema = z.object({
page: z.coerce.number().optional().default(0),
perPage: z.coerce.number().optional().default(10)
});
var listScoresByScorerIdQuerySchema = z.object({
page: z.coerce.number().optional().default(0),
perPage: z.coerce.number().optional().default(10),
entityId: z.string().optional(),
entityType: z.string().optional()
});
var listScoresByEntityIdQuerySchema = z.object({
page: z.coerce.number().optional().default(0),
perPage: z.coerce.number().optional().default(10)
});
var saveScoreBodySchema = z.object({
score: z.unknown()
// ScoreRowData - complex type
});
var scoresWithPaginationResponseSchema = z.object({
pagination: paginationInfoSchema,
scores: z.array(z.unknown())
// Array of score records
});
var saveScoreResponseSchema = z.object({
score: z.unknown()
// ScoreRowData
});
export { entityPathParams, listScorersResponseSchema, listScoresByEntityIdQuerySchema, listScoresByRunIdQuerySchema, listScoresByScorerIdQuerySchema, saveScoreBodySchema, saveScoreResponseSchema, scorerEntrySchema, scorerIdPathParams, scoresWithPaginationResponseSchema };
//# sourceMappingURL=chunk-OC4S3EDO.js.map
//# sourceMappingURL=chunk-OC4S3EDO.js.map
{"version":3,"sources":["../src/server/schemas/scores.ts"],"names":[],"mappings":"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","file":"chunk-OC4S3EDO.js","sourcesContent":["import { z } from 'zod/v4';\nimport { paginationInfoSchema } from './common';\n\n/**\n * Schema for sampling configuration\n * Using passthrough to allow various sampling config shapes\n */\nconst scoringSamplingConfigSchema = z.object({});\n\n/**\n * Schema for MastraScorer config object\n */\nconst mastraScorerConfigSchema = z.object({\n id: z.string(),\n name: z.string().optional(),\n description: z.string(),\n type: z.unknown().optional(),\n judge: z.unknown().optional(),\n});\n\n/**\n * Schema for MastraScorer\n * Only validates public config property, uses passthrough to allow class instance\n */\nconst mastraScorerSchema = z.object({\n config: mastraScorerConfigSchema,\n});\n\n/**\n * Schema for scorer entry with associations to agents and workflows\n */\nexport const scorerEntrySchema = z.object({\n scorer: mastraScorerSchema,\n sampling: scoringSamplingConfigSchema.optional(),\n agentIds: z.array(z.string()),\n agentNames: z.array(z.string()),\n workflowIds: z.array(z.string()),\n isRegistered: z.boolean(),\n source: z.enum(['code', 'stored']),\n});\n\n/**\n * Response schema for list scorers endpoint\n * Returns a record of scorer ID to scorer entry with associations\n */\nexport const listScorersResponseSchema = z.record(z.string(), scorerEntrySchema);\n\n// Path parameter schemas\nexport const scorerIdPathParams = z.object({\n scorerId: z.string().describe('Unique identifier for the scorer'),\n});\n\nexport const entityPathParams = z.object({\n entityType: z.string().describe('Type of the entity (AGENT or WORKFLOW)'),\n entityId: z.string().describe('Unique identifier for the entity'),\n});\n\n// Query parameter schemas\n// HTTP query params must be flat (e.g., ?page=0&perPage=10)\n// Adapters should transform these into nested pagination objects for handlers if needed\n\nexport const listScoresByRunIdQuerySchema = z.object({\n page: z.coerce.number().optional().default(0),\n perPage: z.coerce.number().optional().default(10),\n});\n\nexport const listScoresByScorerIdQuerySchema = z.object({\n page: z.coerce.number().optional().default(0),\n perPage: z.coerce.number().optional().default(10),\n entityId: z.string().optional(),\n entityType: z.string().optional(),\n});\n\nexport const listScoresByEntityIdQuerySchema = z.object({\n page: z.coerce.number().optional().default(0),\n perPage: z.coerce.number().optional().default(10),\n});\n\n// Body schema for saving scores\nexport const saveScoreBodySchema = z.object({\n score: z.unknown(), // ScoreRowData - complex type\n});\n\n// Response schemas\nexport const scoresWithPaginationResponseSchema = z.object({\n pagination: paginationInfoSchema,\n scores: z.array(z.unknown()), // Array of score records\n});\n\nexport const saveScoreResponseSchema = z.object({\n score: z.unknown(), // ScoreRowData\n});\n"]}
'use strict';
var chunkMM7BEDAW_cjs = require('./chunk-MM7BEDAW.cjs');
var chunkUDTYX3A7_cjs = require('./chunk-UDTYX3A7.cjs');
var chunkEG6DDVIJ_cjs = require('./chunk-EG6DDVIJ.cjs');
var chunk7QRZY7RG_cjs = require('./chunk-7QRZY7RG.cjs');
var chunkYDUA7L5F_cjs = require('./chunk-YDUA7L5F.cjs');
var chunkZGAUP346_cjs = require('./chunk-ZGAUP346.cjs');
var chunkLKOHTU4W_cjs = require('./chunk-LKOHTU4W.cjs');
var chunkJWIAPHFH_cjs = require('./chunk-JWIAPHFH.cjs');
var chunkIQZE4X6U_cjs = require('./chunk-IQZE4X6U.cjs');
var chunkEMQZIPXG_cjs = require('./chunk-EMQZIPXG.cjs');
var chunkKE32UGIC_cjs = require('./chunk-KE32UGIC.cjs');
var chunkJYWPYMQS_cjs = require('./chunk-JYWPYMQS.cjs');
var chunkXPJZ72ZH_cjs = require('./chunk-XPJZ72ZH.cjs');
var chunkQ5CGBHAI_cjs = require('./chunk-Q5CGBHAI.cjs');
var chunkJ6XQWEEV_cjs = require('./chunk-J6XQWEEV.cjs');
var chunkFOANUZQ3_cjs = require('./chunk-FOANUZQ3.cjs');
var chunkMTWCBGFH_cjs = require('./chunk-MTWCBGFH.cjs');
var chunkL3I5OC4W_cjs = require('./chunk-L3I5OC4W.cjs');
var chunk55BEULMJ_cjs = require('./chunk-55BEULMJ.cjs');
var chunkAR5PBVYY_cjs = require('./chunk-AR5PBVYY.cjs');
var chunk6QZLGOUC_cjs = require('./chunk-6QZLGOUC.cjs');
var chunkLAY7G3RT_cjs = require('./chunk-LAY7G3RT.cjs');
var chunkSXMPMMTX_cjs = require('./chunk-SXMPMMTX.cjs');
var chunkQPICFOIK_cjs = require('./chunk-QPICFOIK.cjs');
var chunkPMGFP7II_cjs = require('./chunk-PMGFP7II.cjs');
var chunkDR2XLMGB_cjs = require('./chunk-DR2XLMGB.cjs');
var chunkK75VRP3V_cjs = require('./chunk-K75VRP3V.cjs');
var chunkFLO6YIKC_cjs = require('./chunk-FLO6YIKC.cjs');
var chunkZLES3TDX_cjs = require('./chunk-ZLES3TDX.cjs');
var chunkUXYPH6HP_cjs = require('./chunk-UXYPH6HP.cjs');
var chunkPJXH5A23_cjs = require('./chunk-PJXH5A23.cjs');
var chunkY32XM46K_cjs = require('./chunk-Y32XM46K.cjs');
var chunk5GQWTNAY_cjs = require('./chunk-5GQWTNAY.cjs');
var chunk5KDVUPQN_cjs = require('./chunk-5KDVUPQN.cjs');
var chunk5O3XY7Z3_cjs = require('./chunk-5O3XY7Z3.cjs');
var chunkFVXUFEHO_cjs = require('./chunk-FVXUFEHO.cjs');
var chunkFCOEWHH3_cjs = require('./chunk-FCOEWHH3.cjs');
var chunkAJ4VAZFT_cjs = require('./chunk-AJ4VAZFT.cjs');
var chunkZYPEQZPE_cjs = require('./chunk-ZYPEQZPE.cjs');
var chunkO35VIFMS_cjs = require('./chunk-O35VIFMS.cjs');
var chunkFPJGLJUZ_cjs = require('./chunk-FPJGLJUZ.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 = [chunkFVXUFEHO_cjs.GET_AGENT_CARD_ROUTE, chunkFVXUFEHO_cjs.AGENT_EXECUTION_ROUTE];
// src/server/server-adapter/routes/agent-builder.ts
var AGENT_BUILDER_ROUTES = [
chunkZYPEQZPE_cjs.LIST_AGENT_BUILDER_ACTIONS_ROUTE,
chunkZYPEQZPE_cjs.GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,
chunkZYPEQZPE_cjs.LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,
chunkZYPEQZPE_cjs.GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,
chunkZYPEQZPE_cjs.CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,
chunkZYPEQZPE_cjs.STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunkZYPEQZPE_cjs.STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
chunkZYPEQZPE_cjs.START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
chunkZYPEQZPE_cjs.START_AGENT_BUILDER_ACTION_RUN_ROUTE,
chunkZYPEQZPE_cjs.OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunkZYPEQZPE_cjs.OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
chunkZYPEQZPE_cjs.RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
chunkZYPEQZPE_cjs.RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,
chunkZYPEQZPE_cjs.RESUME_AGENT_BUILDER_ACTION_ROUTE,
chunkZYPEQZPE_cjs.RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunkZYPEQZPE_cjs.CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE
];
// src/server/server-adapter/routes/agent-controller.ts
var AGENT_CONTROLLER_ROUTES = [
chunkFPJGLJUZ_cjs.LIST_AGENT_CONTROLLERS_ROUTE,
chunkFPJGLJUZ_cjs.LIST_AGENT_CONTROLLER_MODES_ROUTE,
chunkFPJGLJUZ_cjs.LIST_AGENT_CONTROLLER_MODELS_ROUTE,
chunkFPJGLJUZ_cjs.CREATE_AGENT_CONTROLLER_SESSION_ROUTE,
chunkFPJGLJUZ_cjs.GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE,
chunkFPJGLJUZ_cjs.LIST_AGENT_CONTROLLER_THREADS_ROUTE,
chunkFPJGLJUZ_cjs.CREATE_AGENT_CONTROLLER_THREAD_ROUTE,
chunkFPJGLJUZ_cjs.DELETE_AGENT_CONTROLLER_THREAD_ROUTE,
chunkFPJGLJUZ_cjs.RENAME_AGENT_CONTROLLER_THREAD_ROUTE,
chunkFPJGLJUZ_cjs.CLONE_AGENT_CONTROLLER_THREAD_ROUTE,
chunkFPJGLJUZ_cjs.LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE,
chunkFPJGLJUZ_cjs.STREAM_AGENT_CONTROLLER_SESSION_ROUTE,
chunkFPJGLJUZ_cjs.SEND_AGENT_CONTROLLER_MESSAGE_ROUTE,
chunkFPJGLJUZ_cjs.STEER_AGENT_CONTROLLER_SESSION_ROUTE,
chunkFPJGLJUZ_cjs.FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE,
chunkFPJGLJUZ_cjs.ABORT_AGENT_CONTROLLER_SESSION_ROUTE,
chunkFPJGLJUZ_cjs.AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE,
chunkFPJGLJUZ_cjs.AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE,
chunkFPJGLJUZ_cjs.SWITCH_AGENT_CONTROLLER_MODE_ROUTE,
chunkFPJGLJUZ_cjs.SWITCH_AGENT_CONTROLLER_MODEL_ROUTE,
chunkFPJGLJUZ_cjs.SWITCH_AGENT_CONTROLLER_THREAD_ROUTE,
chunkFPJGLJUZ_cjs.SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE,
chunkFPJGLJUZ_cjs.GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE,
chunkFPJGLJUZ_cjs.GET_AGENT_CONTROLLER_OM_RECORD_ROUTE,
chunkFPJGLJUZ_cjs.SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE,
chunkFPJGLJUZ_cjs.GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE,
chunkFPJGLJUZ_cjs.GET_AGENT_CONTROLLER_GOAL_ROUTE,
chunkFPJGLJUZ_cjs.SET_AGENT_CONTROLLER_GOAL_ROUTE,
chunkFPJGLJUZ_cjs.UPDATE_AGENT_CONTROLLER_GOAL_ROUTE,
chunkFPJGLJUZ_cjs.CLEAR_AGENT_CONTROLLER_GOAL_ROUTE,
chunkFPJGLJUZ_cjs.GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE,
chunkFPJGLJUZ_cjs.SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE,
chunkFPJGLJUZ_cjs.SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE,
chunkFPJGLJUZ_cjs.SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE
];
// src/server/server-adapter/routes/agents.ts
var AGENTS_ROUTES = [
// ============================================================================
// Agent Core Routes
// ============================================================================
chunkFCOEWHH3_cjs.LIST_AGENTS_ROUTE,
chunkFCOEWHH3_cjs.GET_PROVIDERS_ROUTE,
chunkFCOEWHH3_cjs.GET_AGENT_BY_ID_ROUTE,
chunkFCOEWHH3_cjs.CLONE_AGENT_ROUTE,
// ============================================================================
// Voice Routes
// ============================================================================
chunkPMGFP7II_cjs.GET_SPEAKERS_ROUTE,
chunkPMGFP7II_cjs.GET_SPEAKERS_DEPRECATED_ROUTE,
// ============================================================================
// Agent Execution Routes
// ============================================================================
chunkFCOEWHH3_cjs.GENERATE_AGENT_ROUTE,
chunkFCOEWHH3_cjs.GENERATE_AGENT_VNEXT_ROUTE,
chunkFCOEWHH3_cjs.STREAM_GENERATE_ROUTE,
chunkFCOEWHH3_cjs.STREAM_UNTIL_IDLE_GENERATE_ROUTE,
chunkFCOEWHH3_cjs.STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,
// ============================================================================
// Resumable Stream Routes
// ============================================================================
chunkFCOEWHH3_cjs.OBSERVE_AGENT_STREAM_ROUTE,
chunkFCOEWHH3_cjs.SEND_AGENT_MESSAGE_ROUTE,
chunkFCOEWHH3_cjs.QUEUE_AGENT_MESSAGE_ROUTE,
chunkFCOEWHH3_cjs.SEND_AGENT_SIGNAL_ROUTE,
chunkFCOEWHH3_cjs.ABORT_AGENT_THREAD_ROUTE,
chunkFCOEWHH3_cjs.SUBSCRIBE_AGENT_THREAD_ROUTE,
// ============================================================================
// Tool Routes
// ============================================================================
chunkK75VRP3V_cjs.EXECUTE_AGENT_TOOL_ROUTE,
chunkFCOEWHH3_cjs.APPROVE_TOOL_CALL_ROUTE,
chunkFCOEWHH3_cjs.SEND_TOOL_APPROVAL_ROUTE,
chunkFCOEWHH3_cjs.LIST_SUSPENDED_RUNS_ROUTE,
chunkFCOEWHH3_cjs.DECLINE_TOOL_CALL_ROUTE,
chunkFCOEWHH3_cjs.RESUME_STREAM_ROUTE,
chunkFCOEWHH3_cjs.APPROVE_TOOL_CALL_GENERATE_ROUTE,
chunkFCOEWHH3_cjs.DECLINE_TOOL_CALL_GENERATE_ROUTE,
chunkFCOEWHH3_cjs.APPROVE_NETWORK_TOOL_CALL_ROUTE,
chunkFCOEWHH3_cjs.DECLINE_NETWORK_TOOL_CALL_ROUTE,
chunkFCOEWHH3_cjs.RESUME_STREAM_UNTIL_IDLE_ROUTE,
// ============================================================================
// Network Routes
// ============================================================================
chunkFCOEWHH3_cjs.STREAM_NETWORK_ROUTE,
// ============================================================================
// Model Management Routes
// ============================================================================
chunkFCOEWHH3_cjs.UPDATE_AGENT_MODEL_ROUTE,
chunkFCOEWHH3_cjs.RESET_AGENT_MODEL_ROUTE,
chunkFCOEWHH3_cjs.REORDER_AGENT_MODEL_LIST_ROUTE,
chunkFCOEWHH3_cjs.UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,
// ============================================================================
// Instruction Enhancement Routes
// ============================================================================
chunkFCOEWHH3_cjs.ENHANCE_INSTRUCTIONS_ROUTE,
// ============================================================================
// Agent Tool Routes
// ============================================================================
chunkK75VRP3V_cjs.GET_AGENT_TOOL_ROUTE,
// ============================================================================
// Agent Skill Routes
// ============================================================================
chunkFCOEWHH3_cjs.GET_AGENT_SKILL_ROUTE,
// ============================================================================
// Voice/Speech Routes
// ============================================================================
chunkPMGFP7II_cjs.GENERATE_SPEECH_ROUTE,
chunkPMGFP7II_cjs.GENERATE_SPEECH_DEPRECATED_ROUTE,
chunkPMGFP7II_cjs.TRANSCRIBE_SPEECH_ROUTE,
chunkPMGFP7II_cjs.TRANSCRIBE_SPEECH_DEPRECATED_ROUTE,
chunkPMGFP7II_cjs.GET_LISTENER_ROUTE,
// ============================================================================
// Deprecated Routes
// ============================================================================
chunkFCOEWHH3_cjs.STREAM_VNEXT_DEPRECATED_ROUTE,
chunkFCOEWHH3_cjs.STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,
chunkFCOEWHH3_cjs.STREAM_UI_MESSAGE_DEPRECATED_ROUTE
];
// src/server/server-adapter/routes/background-tasks.ts
var BACKGROUND_TASK_ROUTES = [
chunk6QZLGOUC_cjs.BACKGROUND_TASK_STREAM_ROUTE,
chunk6QZLGOUC_cjs.LIST_BACKGROUND_TASKS_ROUTE,
chunk6QZLGOUC_cjs.GET_BACKGROUND_TASK_ROUTE
];
// src/server/server-adapter/routes/channels.ts
var CHANNELS_ROUTES = [
chunkSXMPMMTX_cjs.LIST_CHANNEL_PLATFORMS_ROUTE,
chunkSXMPMMTX_cjs.LIST_CHANNEL_INSTALLATIONS_ROUTE,
chunkSXMPMMTX_cjs.CONNECT_CHANNEL_ROUTE,
chunkSXMPMMTX_cjs.DISCONNECT_CHANNEL_ROUTE
];
// src/server/server-adapter/routes/conversations.ts
var CONVERSATIONS_ROUTES = [
chunk5KDVUPQN_cjs.CREATE_CONVERSATION_ROUTE,
chunk5KDVUPQN_cjs.GET_CONVERSATION_ROUTE,
chunk5KDVUPQN_cjs.GET_CONVERSATION_ITEMS_ROUTE,
chunk5KDVUPQN_cjs.DELETE_CONVERSATION_ROUTE
];
// src/server/server-adapter/routes/datasets.ts
var DATASETS_ROUTES = [
// Dataset CRUD
chunkMTWCBGFH_cjs.LIST_DATASETS_ROUTE,
chunkMTWCBGFH_cjs.CREATE_DATASET_ROUTE,
chunkMTWCBGFH_cjs.GET_DATASET_ROUTE,
chunkMTWCBGFH_cjs.UPDATE_DATASET_ROUTE,
chunkMTWCBGFH_cjs.DELETE_DATASET_ROUTE,
// Item list and add
chunkMTWCBGFH_cjs.LIST_ITEMS_ROUTE,
chunkMTWCBGFH_cjs.ADD_ITEM_ROUTE,
// Batch operations - MUST come before item-specific routes to avoid /items/batch matching /items/:itemId
chunkMTWCBGFH_cjs.BATCH_INSERT_ITEMS_ROUTE,
chunkMTWCBGFH_cjs.BATCH_DELETE_ITEMS_ROUTE,
// Item-specific CRUD (uses :itemId param)
chunkMTWCBGFH_cjs.GET_ITEM_ROUTE,
chunkMTWCBGFH_cjs.UPDATE_ITEM_ROUTE,
chunkMTWCBGFH_cjs.DELETE_ITEM_ROUTE,
// Version operations
chunkMTWCBGFH_cjs.LIST_DATASET_VERSIONS_ROUTE,
chunkMTWCBGFH_cjs.LIST_ITEM_VERSIONS_ROUTE,
chunkMTWCBGFH_cjs.GET_ITEM_VERSION_ROUTE,
// All experiments (cross-dataset) - MUST come before dataset-scoped experiments
chunkMTWCBGFH_cjs.LIST_ALL_EXPERIMENTS_ROUTE,
// Experiment review summary (cross-dataset) - MUST come before dataset-scoped experiments
chunkMTWCBGFH_cjs.EXPERIMENT_REVIEW_SUMMARY_ROUTE,
// Experiment operations (dataset-scoped)
chunkMTWCBGFH_cjs.LIST_EXPERIMENTS_ROUTE,
chunkMTWCBGFH_cjs.TRIGGER_EXPERIMENT_ROUTE,
chunkMTWCBGFH_cjs.GET_EXPERIMENT_ROUTE,
chunkMTWCBGFH_cjs.LIST_EXPERIMENT_RESULTS_ROUTE,
chunkMTWCBGFH_cjs.UPDATE_EXPERIMENT_RESULT_ROUTE,
// Analytics
chunkMTWCBGFH_cjs.COMPARE_EXPERIMENTS_ROUTE,
// AI generation
chunkMTWCBGFH_cjs.GENERATE_ITEMS_ROUTE,
// Failure analysis
chunkMTWCBGFH_cjs.CLUSTER_FAILURES_ROUTE
];
// src/server/server-adapter/routes/editor-builder.ts
var EDITOR_BUILDER_ROUTES = [
chunkL3I5OC4W_cjs.GET_EDITOR_BUILDER_SETTINGS_ROUTE,
chunkL3I5OC4W_cjs.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE,
chunkL3I5OC4W_cjs.GET_INFRASTRUCTURE_STATUS_ROUTE,
chunkLAY7G3RT_cjs.LIST_BUILDER_REGISTRIES_ROUTE,
chunkLAY7G3RT_cjs.BUILDER_REGISTRY_SEARCH_ROUTE,
chunkLAY7G3RT_cjs.BUILDER_REGISTRY_POPULAR_ROUTE,
chunkLAY7G3RT_cjs.BUILDER_REGISTRY_PREVIEW_ROUTE,
chunkLAY7G3RT_cjs.BUILDER_REGISTRY_INSTALL_ROUTE
];
// src/server/server-adapter/routes/heartbeats.ts
var HEARTBEATS_ROUTES = [
chunk55BEULMJ_cjs.LIST_HEARTBEATS_ROUTE,
chunk55BEULMJ_cjs.GET_HEARTBEAT_ROUTE,
chunk55BEULMJ_cjs.CREATE_HEARTBEAT_ROUTE,
chunk55BEULMJ_cjs.UPDATE_HEARTBEAT_ROUTE,
chunk55BEULMJ_cjs.DELETE_HEARTBEAT_ROUTE,
chunk55BEULMJ_cjs.PAUSE_HEARTBEAT_ROUTE,
chunk55BEULMJ_cjs.RESUME_HEARTBEAT_ROUTE,
chunk55BEULMJ_cjs.RUN_HEARTBEAT_ROUTE
];
// src/server/server-adapter/routes/legacy.ts
var LEGACY_ROUTES = [
// ============================================================================
// Legacy Agent Routes
// ============================================================================
chunkFCOEWHH3_cjs.GENERATE_LEGACY_ROUTE,
chunkFCOEWHH3_cjs.STREAM_GENERATE_LEGACY_ROUTE,
// ============================================================================
// Legacy Workflow Routes
// ============================================================================
chunkO35VIFMS_cjs.STREAM_LEGACY_WORKFLOW_ROUTE,
chunkO35VIFMS_cjs.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE
];
// src/server/server-adapter/routes/logs.ts
var LOGS_ROUTES = [chunk5O3XY7Z3_cjs.LIST_LOG_TRANSPORTS_ROUTE, chunk5O3XY7Z3_cjs.LIST_LOGS_ROUTE, chunk5O3XY7Z3_cjs.LIST_LOGS_BY_RUN_ID_ROUTE];
// src/server/server-adapter/routes/mcp.ts
var MCP_ROUTES = [
// ============================================================================
// MCP Server Registry Routes
// ============================================================================
chunkUXYPH6HP_cjs.LIST_MCP_SERVERS_ROUTE,
chunkUXYPH6HP_cjs.GET_MCP_SERVER_DETAIL_ROUTE,
// ============================================================================
// MCP Server Tool Routes
// ============================================================================
chunkUXYPH6HP_cjs.LIST_MCP_SERVER_TOOLS_ROUTE,
chunkUXYPH6HP_cjs.GET_MCP_SERVER_TOOL_DETAIL_ROUTE,
chunkUXYPH6HP_cjs.EXECUTE_MCP_SERVER_TOOL_ROUTE,
// ============================================================================
// MCP Server Resource Routes
// ============================================================================
chunkUXYPH6HP_cjs.LIST_MCP_SERVER_RESOURCES_ROUTE,
chunkUXYPH6HP_cjs.READ_MCP_SERVER_RESOURCE_ROUTE,
// ============================================================================
// MCP Transport Routes (handled by adapters)
// ============================================================================
chunkUXYPH6HP_cjs.MCP_HTTP_TRANSPORT_ROUTE,
chunkUXYPH6HP_cjs.MCP_SSE_TRANSPORT_ROUTE,
chunkUXYPH6HP_cjs.MCP_SSE_MESSAGES_ROUTE
];
// src/server/server-adapter/routes/memory.ts
var MEMORY_ROUTES = [
chunkPJXH5A23_cjs.GET_MEMORY_STATUS_ROUTE,
chunkPJXH5A23_cjs.GET_MEMORY_CONFIG_ROUTE,
chunkPJXH5A23_cjs.GET_OBSERVATIONAL_MEMORY_ROUTE,
chunkPJXH5A23_cjs.AWAIT_BUFFER_STATUS_ROUTE,
chunkPJXH5A23_cjs.LIST_THREADS_ROUTE,
chunkPJXH5A23_cjs.GET_THREAD_BY_ID_ROUTE,
chunkPJXH5A23_cjs.LIST_MESSAGES_ROUTE,
chunkPJXH5A23_cjs.GET_WORKING_MEMORY_ROUTE,
chunkPJXH5A23_cjs.SAVE_MESSAGES_ROUTE,
chunkPJXH5A23_cjs.CREATE_THREAD_ROUTE,
chunkPJXH5A23_cjs.UPDATE_THREAD_ROUTE,
chunkPJXH5A23_cjs.DELETE_THREAD_ROUTE,
chunkPJXH5A23_cjs.CLONE_THREAD_ROUTE,
chunkPJXH5A23_cjs.UPDATE_WORKING_MEMORY_ROUTE,
chunkPJXH5A23_cjs.DELETE_MESSAGES_ROUTE,
chunkPJXH5A23_cjs.SEARCH_MEMORY_ROUTE,
chunkPJXH5A23_cjs.GET_MEMORY_STATUS_NETWORK_ROUTE,
chunkPJXH5A23_cjs.LIST_THREADS_NETWORK_ROUTE,
chunkPJXH5A23_cjs.GET_THREAD_BY_ID_NETWORK_ROUTE,
chunkPJXH5A23_cjs.LIST_MESSAGES_NETWORK_ROUTE,
chunkPJXH5A23_cjs.SAVE_MESSAGES_NETWORK_ROUTE,
chunkPJXH5A23_cjs.CREATE_THREAD_NETWORK_ROUTE,
chunkPJXH5A23_cjs.UPDATE_THREAD_NETWORK_ROUTE,
chunkPJXH5A23_cjs.DELETE_THREAD_NETWORK_ROUTE,
chunkPJXH5A23_cjs.DELETE_MESSAGES_NETWORK_ROUTE
];
// src/server/server-adapter/routes/observability.ts
var OBSERVABILITY_ROUTES = [
// Legacy
chunkY32XM46K_cjs.LIST_TRACES_ROUTE,
chunkY32XM46K_cjs.LIST_TRACES_LIGHT_ROUTE,
chunkY32XM46K_cjs.LIST_BRANCHES_ROUTE,
chunkY32XM46K_cjs.GET_BRANCH_ROUTE,
chunkY32XM46K_cjs.GET_TRACE_ROUTE,
chunkY32XM46K_cjs.GET_TRACE_LIGHT_ROUTE,
chunkY32XM46K_cjs.GET_SPAN_ROUTE,
chunkY32XM46K_cjs.GET_TRACE_TRAJECTORY_ROUTE,
chunkY32XM46K_cjs.SCORE_TRACES_ROUTE,
chunkY32XM46K_cjs.LIST_SCORES_BY_SPAN_ROUTE,
// New observability routes
chunk5GQWTNAY_cjs.LIST_METRICS,
chunk5GQWTNAY_cjs.LIST_LOGS,
chunk5GQWTNAY_cjs.LIST_SCORES,
chunk5GQWTNAY_cjs.CREATE_SCORE,
chunk5GQWTNAY_cjs.GET_SCORE,
chunk5GQWTNAY_cjs.GET_SCORE_AGGREGATE,
chunk5GQWTNAY_cjs.GET_SCORE_BREAKDOWN,
chunk5GQWTNAY_cjs.GET_SCORE_TIME_SERIES,
chunk5GQWTNAY_cjs.GET_SCORE_PERCENTILES,
chunk5GQWTNAY_cjs.LIST_FEEDBACK,
chunk5GQWTNAY_cjs.CREATE_FEEDBACK,
chunk5GQWTNAY_cjs.GET_FEEDBACK_AGGREGATE,
chunk5GQWTNAY_cjs.GET_FEEDBACK_BREAKDOWN,
chunk5GQWTNAY_cjs.GET_FEEDBACK_TIME_SERIES,
chunk5GQWTNAY_cjs.GET_FEEDBACK_PERCENTILES,
chunk5GQWTNAY_cjs.GET_METRIC_AGGREGATE,
chunk5GQWTNAY_cjs.GET_METRIC_BREAKDOWN,
chunk5GQWTNAY_cjs.GET_METRIC_TIME_SERIES,
chunk5GQWTNAY_cjs.GET_METRIC_PERCENTILES,
chunk5GQWTNAY_cjs.GET_METRIC_NAMES,
chunk5GQWTNAY_cjs.GET_METRIC_LABEL_KEYS,
chunk5GQWTNAY_cjs.GET_METRIC_LABEL_VALUES,
chunk5GQWTNAY_cjs.GET_ENTITY_TYPES,
chunk5GQWTNAY_cjs.GET_ENTITY_NAMES,
chunk5GQWTNAY_cjs.GET_SERVICE_NAMES,
chunk5GQWTNAY_cjs.GET_ENVIRONMENTS,
chunk5GQWTNAY_cjs.GET_TAGS
];
// src/server/server-adapter/routes/processor-providers.ts
var PROCESSOR_PROVIDER_ROUTES = [chunkJYWPYMQS_cjs.LIST_PROCESSOR_PROVIDERS_ROUTE, chunkJYWPYMQS_cjs.GET_PROCESSOR_PROVIDER_ROUTE];
// src/server/server-adapter/routes/processors.ts
var PROCESSORS_ROUTES = [chunkXPJZ72ZH_cjs.LIST_PROCESSORS_ROUTE, chunkXPJZ72ZH_cjs.GET_PROCESSOR_BY_ID_ROUTE, chunkXPJZ72ZH_cjs.EXECUTE_PROCESSOR_ROUTE];
// src/server/server-adapter/routes/responses.ts
var RESPONSES_ROUTES = [chunkZLES3TDX_cjs.CREATE_RESPONSE_ROUTE, chunkZLES3TDX_cjs.GET_RESPONSE_ROUTE, chunkZLES3TDX_cjs.DELETE_RESPONSE_ROUTE];
// src/server/server-adapter/routes/schedules.ts
var SCHEDULES_ROUTES = [
chunkJ6XQWEEV_cjs.LIST_SCHEDULES_ROUTE,
chunkJ6XQWEEV_cjs.GET_SCHEDULE_ROUTE,
chunkJ6XQWEEV_cjs.LIST_SCHEDULE_TRIGGERS_ROUTE,
chunkJ6XQWEEV_cjs.PAUSE_SCHEDULE_ROUTE,
chunkJ6XQWEEV_cjs.RESUME_SCHEDULE_ROUTE
];
// src/server/server-adapter/routes/scorers.ts
var SCORES_ROUTES = [
chunkFLO6YIKC_cjs.LIST_SCORERS_ROUTE,
chunkFLO6YIKC_cjs.GET_SCORER_ROUTE,
chunkFLO6YIKC_cjs.LIST_SCORES_BY_RUN_ID_ROUTE,
chunkFLO6YIKC_cjs.LIST_SCORES_BY_SCORER_ID_ROUTE,
chunkFLO6YIKC_cjs.LIST_SCORES_BY_ENTITY_ID_ROUTE,
chunkFLO6YIKC_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.
// ============================================================================
chunkJWIAPHFH_cjs.LIST_STORED_AGENTS_ROUTE,
chunkJWIAPHFH_cjs.PREVIEW_INSTRUCTIONS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkJWIAPHFH_cjs.GET_STORED_AGENT_DEPENDENTS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE (longer literal)
chunkJWIAPHFH_cjs.EXPORT_STORED_AGENT_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkJWIAPHFH_cjs.OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkJWIAPHFH_cjs.GET_STORED_AGENT_ROUTE,
chunkJWIAPHFH_cjs.CREATE_STORED_AGENT_ROUTE,
chunkJWIAPHFH_cjs.UPDATE_STORED_AGENT_ROUTE,
chunkJWIAPHFH_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.
// ============================================================================
chunkAR5PBVYY_cjs.LIST_AGENT_VERSIONS_ROUTE,
chunkAR5PBVYY_cjs.CREATE_AGENT_VERSION_ROUTE,
chunkAR5PBVYY_cjs.COMPARE_AGENT_VERSIONS_ROUTE,
// Must be before GET_AGENT_VERSION_ROUTE
chunkAR5PBVYY_cjs.GET_AGENT_VERSION_ROUTE,
chunkAR5PBVYY_cjs.ACTIVATE_AGENT_VERSION_ROUTE,
chunkAR5PBVYY_cjs.RESTORE_AGENT_VERSION_ROUTE,
chunkAR5PBVYY_cjs.DELETE_AGENT_VERSION_ROUTE,
// ============================================================================
// Favorites (EE)
// ============================================================================
chunkLKOHTU4W_cjs.FAVORITE_STORED_AGENT_ROUTE,
chunkLKOHTU4W_cjs.UNFAVORITE_STORED_AGENT_ROUTE
];
// src/server/server-adapter/routes/stored-mcp-clients.ts
var STORED_MCP_CLIENTS_ROUTES = [
// Stored MCP Clients CRUD Routes
chunkIQZE4X6U_cjs.LIST_STORED_MCP_CLIENTS_ROUTE,
chunkIQZE4X6U_cjs.GET_STORED_MCP_CLIENT_ROUTE,
chunkIQZE4X6U_cjs.CREATE_STORED_MCP_CLIENT_ROUTE,
chunkIQZE4X6U_cjs.UPDATE_STORED_MCP_CLIENT_ROUTE,
chunkIQZE4X6U_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.
chunkFOANUZQ3_cjs.LIST_MCP_CLIENT_VERSIONS_ROUTE,
chunkFOANUZQ3_cjs.CREATE_MCP_CLIENT_VERSION_ROUTE,
chunkFOANUZQ3_cjs.COMPARE_MCP_CLIENT_VERSIONS_ROUTE,
chunkFOANUZQ3_cjs.GET_MCP_CLIENT_VERSION_ROUTE,
chunkFOANUZQ3_cjs.ACTIVATE_MCP_CLIENT_VERSION_ROUTE,
chunkFOANUZQ3_cjs.RESTORE_MCP_CLIENT_VERSION_ROUTE,
chunkFOANUZQ3_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
chunkEMQZIPXG_cjs.LIST_STORED_PROMPT_BLOCKS_ROUTE,
chunkEMQZIPXG_cjs.GET_STORED_PROMPT_BLOCK_ROUTE,
chunkEMQZIPXG_cjs.CREATE_STORED_PROMPT_BLOCK_ROUTE,
chunkEMQZIPXG_cjs.UPDATE_STORED_PROMPT_BLOCK_ROUTE,
chunkEMQZIPXG_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.
chunkQ5CGBHAI_cjs.LIST_PROMPT_BLOCK_VERSIONS_ROUTE,
chunkQ5CGBHAI_cjs.CREATE_PROMPT_BLOCK_VERSION_ROUTE,
chunkQ5CGBHAI_cjs.COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE,
chunkQ5CGBHAI_cjs.GET_PROMPT_BLOCK_VERSION_ROUTE,
chunkQ5CGBHAI_cjs.ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE,
chunkQ5CGBHAI_cjs.RESTORE_PROMPT_BLOCK_VERSION_ROUTE,
chunkQ5CGBHAI_cjs.DELETE_PROMPT_BLOCK_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-scorers.ts
var STORED_SCORERS_ROUTES = [
// Stored Scorers CRUD Routes
chunkKE32UGIC_cjs.LIST_STORED_SCORERS_ROUTE,
chunkKE32UGIC_cjs.GET_STORED_SCORER_ROUTE,
chunkKE32UGIC_cjs.CREATE_STORED_SCORER_ROUTE,
chunkKE32UGIC_cjs.UPDATE_STORED_SCORER_ROUTE,
chunkKE32UGIC_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.
chunkZGAUP346_cjs.LIST_SCORER_VERSIONS_ROUTE,
chunkZGAUP346_cjs.CREATE_SCORER_VERSION_ROUTE,
chunkZGAUP346_cjs.COMPARE_SCORER_VERSIONS_ROUTE,
chunkZGAUP346_cjs.GET_SCORER_VERSION_ROUTE,
chunkZGAUP346_cjs.ACTIVATE_SCORER_VERSION_ROUTE,
chunkZGAUP346_cjs.RESTORE_SCORER_VERSION_ROUTE,
chunkZGAUP346_cjs.DELETE_SCORER_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-skills.ts
var STORED_SKILLS_ROUTES = [
// Stored Skills CRUD Routes
chunkUDTYX3A7_cjs.LIST_STORED_SKILLS_ROUTE,
chunkUDTYX3A7_cjs.GET_STORED_SKILL_ROUTE,
chunkUDTYX3A7_cjs.CREATE_STORED_SKILL_ROUTE,
chunkUDTYX3A7_cjs.UPDATE_STORED_SKILL_ROUTE,
chunkUDTYX3A7_cjs.DELETE_STORED_SKILL_ROUTE,
// Publish
chunkUDTYX3A7_cjs.PUBLISH_STORED_SKILL_ROUTE,
// Favorites (EE)
chunkMM7BEDAW_cjs.FAVORITE_STORED_SKILL_ROUTE,
chunkMM7BEDAW_cjs.UNFAVORITE_STORED_SKILL_ROUTE
];
// src/server/server-adapter/routes/stored-workspaces.ts
var STORED_WORKSPACES_ROUTES = [
// Stored Workspaces CRUD Routes
chunkEG6DDVIJ_cjs.LIST_STORED_WORKSPACES_ROUTE,
chunkEG6DDVIJ_cjs.GET_STORED_WORKSPACE_ROUTE,
chunkEG6DDVIJ_cjs.CREATE_STORED_WORKSPACE_ROUTE,
chunkEG6DDVIJ_cjs.UPDATE_STORED_WORKSPACE_ROUTE,
chunkEG6DDVIJ_cjs.DELETE_STORED_WORKSPACE_ROUTE
];
// src/server/server-adapter/routes/system.ts
var SYSTEM_ROUTES = [chunk7QRZY7RG_cjs.GET_SYSTEM_PACKAGES_ROUTE, chunk7QRZY7RG_cjs.GET_API_SCHEMA_ROUTE];
// src/server/server-adapter/routes/tool-providers.ts
var TOOL_PROVIDER_ROUTES = [
chunkYDUA7L5F_cjs.LIST_TOOL_PROVIDERS_ROUTE,
chunkYDUA7L5F_cjs.LIST_TOOL_PROVIDER_TOOLKITS_ROUTE,
chunkYDUA7L5F_cjs.LIST_TOOL_PROVIDER_TOOLS_ROUTE,
chunkYDUA7L5F_cjs.GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE,
chunkYDUA7L5F_cjs.AUTHORIZE_TOOL_PROVIDER_ROUTE,
chunkYDUA7L5F_cjs.GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE,
chunkYDUA7L5F_cjs.TOOL_PROVIDER_CONNECTION_STATUS_ROUTE,
chunkYDUA7L5F_cjs.LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE,
chunkYDUA7L5F_cjs.LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE,
chunkYDUA7L5F_cjs.DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE,
chunkYDUA7L5F_cjs.UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE,
chunkYDUA7L5F_cjs.GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE,
chunkYDUA7L5F_cjs.GET_TOOL_PROVIDER_HEALTH_ROUTE
];
// src/server/server-adapter/routes/tools.ts
var TOOLS_ROUTES = [chunkK75VRP3V_cjs.LIST_TOOLS_ROUTE, chunkK75VRP3V_cjs.GET_TOOL_BY_ID_ROUTE, chunkK75VRP3V_cjs.EXECUTE_TOOL_ROUTE];
// src/server/server-adapter/routes/vectors.ts
var VECTORS_ROUTES = [
chunkQPICFOIK_cjs.UPSERT_VECTORS_ROUTE,
chunkQPICFOIK_cjs.CREATE_INDEX_ROUTE,
chunkQPICFOIK_cjs.QUERY_VECTORS_ROUTE,
chunkQPICFOIK_cjs.LIST_INDEXES_ROUTE,
chunkQPICFOIK_cjs.DESCRIBE_INDEX_ROUTE,
chunkQPICFOIK_cjs.DELETE_INDEX_ROUTE,
chunkQPICFOIK_cjs.LIST_VECTORS_ROUTE,
chunkQPICFOIK_cjs.LIST_EMBEDDERS_ROUTE
];
// src/server/server-adapter/routes/workflows.ts
var WORKFLOWS_ROUTES = [
chunkO35VIFMS_cjs.LIST_WORKFLOWS_ROUTE,
chunkO35VIFMS_cjs.GET_WORKFLOW_BY_ID_ROUTE,
chunkO35VIFMS_cjs.LIST_WORKFLOW_RUNS_ROUTE,
chunkO35VIFMS_cjs.GET_WORKFLOW_RUN_BY_ID_ROUTE,
chunkO35VIFMS_cjs.DELETE_WORKFLOW_RUN_BY_ID_ROUTE,
chunkO35VIFMS_cjs.CREATE_WORKFLOW_RUN_ROUTE,
chunkO35VIFMS_cjs.STREAM_WORKFLOW_ROUTE,
chunkO35VIFMS_cjs.RESUME_STREAM_WORKFLOW_ROUTE,
chunkO35VIFMS_cjs.START_ASYNC_WORKFLOW_ROUTE,
chunkO35VIFMS_cjs.START_WORKFLOW_RUN_ROUTE,
chunkO35VIFMS_cjs.OBSERVE_STREAM_WORKFLOW_ROUTE,
chunkO35VIFMS_cjs.RESUME_ASYNC_WORKFLOW_ROUTE,
chunkO35VIFMS_cjs.RESUME_NO_WAIT_WORKFLOW_ROUTE,
chunkO35VIFMS_cjs.RESUME_WORKFLOW_ROUTE,
chunkO35VIFMS_cjs.CANCEL_WORKFLOW_RUN_ROUTE,
chunkO35VIFMS_cjs.TIME_TRAVEL_WORKFLOW_ROUTE,
chunkO35VIFMS_cjs.TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,
chunkO35VIFMS_cjs.TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,
chunkO35VIFMS_cjs.RESTART_WORKFLOW_ROUTE,
chunkO35VIFMS_cjs.RESTART_ASYNC_WORKFLOW_ROUTE,
chunkO35VIFMS_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,
chunkO35VIFMS_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,
chunkO35VIFMS_cjs.EXECUTE_WORKFLOW_STEP_ROUTE,
chunkO35VIFMS_cjs.RECEIVE_WORKFLOW_EVENT_ROUTE
];
// src/server/server-adapter/routes/workspace.ts
var WORKSPACE_ROUTES = [
// List all workspaces route (at /api/workspaces)
chunkDR2XLMGB_cjs.LIST_WORKSPACES_ROUTE,
// Get workspace route (at /api/workspaces/:workspaceId)
chunkDR2XLMGB_cjs.GET_WORKSPACE_ROUTE,
// Filesystem routes (at /api/workspaces/:workspaceId/fs/*)
...chunkDR2XLMGB_cjs.WORKSPACE_FS_ROUTES,
// Search routes (at /api/workspaces/:workspaceId/search, /api/workspaces/:workspaceId/index)
...chunkDR2XLMGB_cjs.WORKSPACE_SEARCH_ROUTES,
// Skills routes (search must come before parameterized routes)
...chunkDR2XLMGB_cjs.WORKSPACE_SKILLS_ROUTES,
// skills.sh proxy routes (at /api/workspaces/:workspaceId/skills-sh/*)
...chunkDR2XLMGB_cjs.WORKSPACE_SKILLS_SH_ROUTES
];
// src/server/server-adapter/routes/index.ts
var SERVER_ROUTES = [
...AGENTS_ROUTES,
...chunkAJ4VAZFT_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,
...HEARTBEATS_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-RFJJ7ZAD.cjs.map
//# sourceMappingURL=chunk-RFJJ7ZAD.cjs.map

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

'use strict';
var chunkL3I5OC4W_cjs = require('./chunk-L3I5OC4W.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
// src/server/handlers/favorites-enrichment.ts
async function prepareFavoritesEnrichment(mastra, requestContext, entityType, entityIds) {
if (!await chunkL3I5OC4W_cjs.isBuilderFeatureEnabled(mastra, "favorites")) return null;
const userId = chunkHDIYJI2Z_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-SI63GFYM.cjs.map
//# sourceMappingURL=chunk-SI63GFYM.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-SI63GFYM.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 { listScorersResponseSchema, scorerIdPathParams, scorerEntrySchema, scoresWithPaginationResponseSchema, listScoresByRunIdQuerySchema, listScoresByScorerIdQuerySchema, listScoresByEntityIdQuerySchema, entityPathParams, saveScoreResponseSchema, saveScoreBodySchema } from './chunk-OC4S3EDO.js';
import { getAgentFromSystem } from './chunk-FU2NIFNJ.js';
import { runIdSchema } from './chunk-2YY3EMMS.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-SNO2CFDL.js.map
//# sourceMappingURL=chunk-SNO2CFDL.js.map
{"version":3,"sources":["../src/server/handlers/scores.ts"],"names":[],"mappings":"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","file":"chunk-SNO2CFDL.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';\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-KEE6UMGC.js';
import { getAgentFromSystem } from './chunk-FU2NIFNJ.js';
import { getPublicOrigin } from './chunk-BEPGHVMJ.js';
import { convertInstructionsToString } from './chunk-EOGTJIPF.js';
import { createRoute } from './chunk-Z5MTOVTR.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-SZ6QKUFJ.js.map
//# sourceMappingURL=chunk-SZ6QKUFJ.js.map

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

import { FAVORITE_STORED_SKILL_ROUTE, UNFAVORITE_STORED_SKILL_ROUTE } from './chunk-FQTRNIV6.js';
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-735J6KQA.js';
import { LIST_STORED_WORKSPACES_ROUTE, GET_STORED_WORKSPACE_ROUTE, CREATE_STORED_WORKSPACE_ROUTE, UPDATE_STORED_WORKSPACE_ROUTE, DELETE_STORED_WORKSPACE_ROUTE } from './chunk-ICWJHWEM.js';
import { GET_SYSTEM_PACKAGES_ROUTE, GET_API_SCHEMA_ROUTE } from './chunk-7WHBMHJO.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-VWZFDHUG.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-JGHI6QE5.js';
import { FAVORITE_STORED_AGENT_ROUTE, UNFAVORITE_STORED_AGENT_ROUTE } from './chunk-EB6H2VVW.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-EDFYCJM7.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-L2M2Z5CU.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-F3V5T2ON.js';
import { LIST_STORED_SCORERS_ROUTE, GET_STORED_SCORER_ROUTE, CREATE_STORED_SCORER_ROUTE, UPDATE_STORED_SCORER_ROUTE, DELETE_STORED_SCORER_ROUTE } from './chunk-LHEZDXWV.js';
import { LIST_PROCESSOR_PROVIDERS_ROUTE, GET_PROCESSOR_PROVIDER_ROUTE } from './chunk-RUOOTVGK.js';
import { LIST_PROCESSORS_ROUTE, GET_PROCESSOR_BY_ID_ROUTE, EXECUTE_PROCESSOR_ROUTE } from './chunk-SMQKZ2QV.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-OJLVR6RK.js';
import { LIST_SCHEDULES_ROUTE, GET_SCHEDULE_ROUTE, LIST_SCHEDULE_TRIGGERS_ROUTE, PAUSE_SCHEDULE_ROUTE, RESUME_SCHEDULE_ROUTE } from './chunk-RXSZMJIR.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-RUBHF3J4.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-H4HJRAHU.js';
import { GET_EDITOR_BUILDER_SETTINGS_ROUTE, GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE, GET_INFRASTRUCTURE_STATUS_ROUTE } from './chunk-KSYJQMJ7.js';
import { LIST_HEARTBEATS_ROUTE, GET_HEARTBEAT_ROUTE, CREATE_HEARTBEAT_ROUTE, UPDATE_HEARTBEAT_ROUTE, DELETE_HEARTBEAT_ROUTE, PAUSE_HEARTBEAT_ROUTE, RESUME_HEARTBEAT_ROUTE, RUN_HEARTBEAT_ROUTE } from './chunk-7WWWWHIQ.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-KC52XQSP.js';
import { BACKGROUND_TASK_STREAM_ROUTE, LIST_BACKGROUND_TASKS_ROUTE, GET_BACKGROUND_TASK_ROUTE } from './chunk-V6Z2DEIO.js';
import { LIST_BUILDER_REGISTRIES_ROUTE, BUILDER_REGISTRY_SEARCH_ROUTE, BUILDER_REGISTRY_POPULAR_ROUTE, BUILDER_REGISTRY_PREVIEW_ROUTE, BUILDER_REGISTRY_INSTALL_ROUTE } from './chunk-5C5P4MZE.js';
import { LIST_CHANNEL_PLATFORMS_ROUTE, LIST_CHANNEL_INSTALLATIONS_ROUTE, CONNECT_CHANNEL_ROUTE, DISCONNECT_CHANNEL_ROUTE } from './chunk-AXS2E3ZS.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-A5GLESMH.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-LQZHT5U7.js';
import { LIST_WORKSPACES_ROUTE, GET_WORKSPACE_ROUTE, WORKSPACE_FS_ROUTES, WORKSPACE_SEARCH_ROUTES, WORKSPACE_SKILLS_ROUTES, WORKSPACE_SKILLS_SH_ROUTES } from './chunk-TWUWF3AU.js';
import { EXECUTE_AGENT_TOOL_ROUTE, GET_AGENT_TOOL_ROUTE, LIST_TOOLS_ROUTE, GET_TOOL_BY_ID_ROUTE, EXECUTE_TOOL_ROUTE } from './chunk-U7XUUMFF.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-SNO2CFDL.js';
import { CREATE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE } from './chunk-6DTFR4ZS.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-22YWJT5H.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-LZMQLV2S.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-PRJENCIC.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-7WVY3KMP.js';
import { CREATE_CONVERSATION_ROUTE, GET_CONVERSATION_ROUTE, GET_CONVERSATION_ITEMS_ROUTE, DELETE_CONVERSATION_ROUTE } from './chunk-V5YAPSSQ.js';
import { LIST_LOG_TRANSPORTS_ROUTE, LIST_LOGS_ROUTE, LIST_LOGS_BY_RUN_ID_ROUTE } from './chunk-SDSDV6TA.js';
import { GET_AGENT_CARD_ROUTE, AGENT_EXECUTION_ROUTE } from './chunk-SZ6QKUFJ.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, 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-FU2NIFNJ.js';
import { AUTH_ROUTES } from './chunk-BEPGHVMJ.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-NDCWMT6H.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-XX5G7THL.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-PHATOO2U.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,
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/heartbeats.ts
var HEARTBEATS_ROUTES = [
LIST_HEARTBEATS_ROUTE,
GET_HEARTBEAT_ROUTE,
CREATE_HEARTBEAT_ROUTE,
UPDATE_HEARTBEAT_ROUTE,
DELETE_HEARTBEAT_ROUTE,
PAUSE_HEARTBEAT_ROUTE,
RESUME_HEARTBEAT_ROUTE,
RUN_HEARTBEAT_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,
LIST_SCHEDULE_TRIGGERS_ROUTE,
PAUSE_SCHEDULE_ROUTE,
RESUME_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,
...HEARTBEATS_ROUTES,
...CHANNELS_ROUTES,
...AGENT_CONTROLLER_ROUTES
];
export { SERVER_ROUTES, deriveAction, derivePermission, extractResource, getEffectivePermission };
//# sourceMappingURL=chunk-TQPQ7HXR.js.map
//# sourceMappingURL=chunk-TQPQ7HXR.js.map

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

import { isBuilderFeatureEnabled } from './chunk-KSYJQMJ7.js';
import { getCallerAuthorId } from './chunk-SXZS6VZ3.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-U32YHG7T.js.map
//# sourceMappingURL=chunk-U32YHG7T.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-U32YHG7T.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 { getAgentFromSystem } from './chunk-FU2NIFNJ.js';
import { listToolsResponseSchema, serializedToolSchema, toolIdPathParams, executeToolResponseSchema, executeToolContextBodySchema, agentToolPathParams, executeToolBodySchema } from './chunk-WQB65Q5Y.js';
import { MastraFGAPermissions, validateBody } from './chunk-JBSUT5XF.js';
import { optionalRunIdSchema } from './chunk-2YY3EMMS.js';
import { stringify } from './chunk-EOGTJIPF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.js';
import { standardSchemaToJSONSchema, toStandardSchema5 } from './chunk-JIL453ER.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-U7XUUMFF.js.map
//# sourceMappingURL=chunk-U7XUUMFF.js.map
{"version":3,"sources":["../src/server/handlers/tools.ts"],"names":["tool"],"mappings":";;;;;;;;;;;;;AAAA,IAAA,aAAA,GAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,wBAAA,EAAA,MAAA,wBAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,gBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AA4BA,SAAS,kBAAkB,MAAA,EAA0B;AACnD,EAAA,IAAI,OAAO,MAAA,KAAW,UAAA,IAAc,EAAE,eAAe,MAAA,CAAA,EAAS;AAC5D,IAAA,OAAO,iBAAA,CAAkB,QAAQ,CAAA;AAAA,EACnC;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,mBAAmB,MAAA,EAA2C;AACrE,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,2BAA2B,iBAAA,CAAiB,MAAM,GAAG,EAAE,MAAA,EAAQ,iBAAiB,CAAA;AACzF;AAEA,SAAS,gBAAgB,MAAA,EAAqC;AAC5D,EAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,iBAAA,CAAkB,MAAM,CAAsC,CAAA;AACpG,EAAA,IAAI,UAAA,KAAe,QAAW,OAAO,MAAA;AACrC,EAAA,OAAO,UAAU,UAAU,CAAA;AAC7B;AAWA,eAAe,gBAAA,CAAiB,MAAA,EAAa,MAAA,EAAgB,cAAA,EAA+C;AAC1G,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,UAAA,EAAW,IAAK,EAAC;AACvC,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,EAAY;AAClD,IAAA,IAAI;AACF,MAAA,MAAM,aAAa,MAAM,KAAA,CAAM,SAAA,CAAU,EAAE,gBAAgB,CAAA;AAC3D,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,UAAA,IAAc,EAAE,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAW,CAAA,CAAE,EAAA,KAAO,MAAM,CAAA;AAC9E,MAAA,IAAI,OAAO,OAAO,KAAA;AAAA,IACpB,SAAS,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,SAAA,IAAY,EAAG,IAAA,GAAO,2DAAA,EAA6D;AAAA,QACxF,SAAS,KAAA,EAAO,EAAA;AAAA,QAChB,MAAA;AAAA,QACA,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,OAC7D,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAMA,SAAS,cAAc,IAAA,EAAgB;AAIrC,EAAA,IAAI,qBAAA,CAAsB,IAAI,CAAA,EAAG;AAC/B,IAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,IAAA,CAAK,WAAW,CAAA;AACxD,IAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,IAAA,CAAK,YAAY,CAAA;AAC1D,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,WAAA,EACE,aAAA,IAAiB,OAAO,aAAA,KAAkB,QAAA,IAAY,gBAAgB,aAAA,GAClE,SAAA,CAAU,aAAA,CAAc,UAAU,CAAA,GAClC,MAAA;AAAA,MACN,YAAA,EACE,cAAA,IAAkB,OAAO,cAAA,KAAmB,QAAA,IAAY,gBAAgB,cAAA,GACpE,SAAA,CAAU,cAAA,CAAe,UAAU,CAAA,GACnC;AAAA,KACR;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,WAAA,EAAa,eAAA,CAAgB,IAAA,CAAK,WAAW,CAAA;AAAA,IAC7C,YAAA,EAAc,eAAA,CAAgB,IAAA,CAAK,YAAY,CAAA;AAAA,IAC/C,oBAAA,EAAsB,eAAA,CAAgB,IAAA,CAAK,oBAAoB;AAAA,GACjE;AACF;AAMO,IAAM,mBAAmB,WAAA,CAAY;AAAA,EAC1C,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,QAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,cAAA,EAAgB,uBAAA;AAAA,EAChB,OAAA,EAAS,gBAAA;AAAA,EACT,WAAA,EAAa,qDAAA;AAAA,EACb,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,EACd,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO,EAAE,MAAA,EAAQ,eAAA,EAAiB,gBAAe,KAAM;AAC9D,IAAA,IAAI;AAQF,MAAA,MAAM,UAAA,GAAa,mBAAmB,MAAA,CAAO,IAAA,CAAK,eAAe,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,eAAA,GAAkB,EAAC;AAEnG,MAAA,MAAM,WAAgC,EAAC;AACvC,MAAA,MAAM,WAAA,uBAAkB,GAAA,EAAoB;AAG5C,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,IAAI,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACpD,QAAA,MAAM,SAAS,OAAQ,IAAA,EAAc,EAAA,KAAO,QAAA,GAAY,KAAa,EAAA,GAAK,MAAA;AAC1E,QAAA,IAAI,MAAA,KAAW,MAAA,EAAW,WAAA,CAAY,GAAA,CAAI,QAAQ,GAAG,CAAA;AACrD,QAAA,QAAA,CAAS,GAAG,CAAA,GAAI,IAAA;AAAA,MAClB;AAEA,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,IAAI,CAAA,IAAK,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,SAAA,EAAU,IAAK,EAAE,CAAA,EAAG;AAClE,QAAA,MAAM,SAAS,OAAQ,IAAA,EAAc,EAAA,KAAO,QAAA,GAAY,KAAa,EAAA,GAAK,MAAA;AAE1E,QAAA,IAAI,MAAA,KAAW,MAAA,IAAa,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA,EAAG;AACrD,QAAA,IAAI,MAAA,KAAW,MAAA,EAAW,WAAA,CAAY,GAAA,CAAI,QAAQ,GAAG,CAAA;AACrD,QAAA,QAAA,CAAS,GAAG,CAAA,GAAI,IAAA;AAAA,MAClB;AAEA,MAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,CAAE,MAAA;AAAA,QAC/C,CAAC,GAAA,EAAK,CAAC,EAAA,EAAI,KAAK,CAAA,KAAM;AACpB,UAAA,GAAA,CAAI,EAAE,CAAA,GAAI,aAAA,CAAc,KAAK,CAAA;AAC7B,UAAA,OAAO,GAAA;AAAA,QACT,CAAA;AAAA,QACA;AAAC,OACH;AAGA,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,SAAA,IAAY,EAAG,GAAA;AAC1C,MAAA,MAAM,IAAA,GAAO,cAAA,EAAgB,GAAA,CAAI,MAAM,CAAA;AACvC,MAAA,IAAI,eAAe,IAAA,EAAM;AACvB,QAAA,MAAM,QAAA,GAAW,MAAA,CAAO,OAAA,CAAQ,eAAe,EAAE,GAAA,CAAI,CAAC,CAAC,EAAA,EAAI,CAAC,CAAA,MAAO,EAAE,EAAA,EAAI,GAAG,GAAE,CAAE,CAAA;AAChF,QAAA,MAAM,UAAA,GAAa,MAAM,WAAA,CAAY,gBAAA,CAAiB,MAAM,QAAA,EAAU,MAAA,EAAQ,qBAAqB,UAAU,CAAA;AAC7G,QAAA,MAAM,aAAA,GAAgB,IAAI,GAAA,CAAI,UAAA,CAAW,IAAI,CAAC,CAAA,KAAW,CAAA,CAAE,EAAE,CAAC,CAAA;AAC9D,QAAA,KAAA,MAAW,EAAA,IAAM,MAAA,CAAO,IAAA,CAAK,eAAe,CAAA,EAAG;AAC7C,UAAA,IAAI,CAAC,aAAA,CAAc,GAAA,CAAI,EAAE,CAAA,EAAG;AAC1B,YAAA,OAAO,gBAAgB,EAAE,CAAA;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AAEA,MAAA,OAAO,eAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,qBAAqB,CAAA;AAAA,IACjD;AAAA,EACF;AACF,CAAC;AAEM,IAAM,uBAAuB,WAAA,CAAY;AAAA,EAC9C,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,gBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,gBAAA;AAAA,EACjB,cAAA,EAAgB,oBAAA;AAAA,EAChB,OAAA,EAAS,gBAAA;AAAA,EACT,WAAA,EAAa,4EAAA;AAAA,EACb,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,EACd,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO,EAAE,QAAQ,eAAA,EAAiB,MAAA,EAAQ,gBAAe,KAAM;AACtE,IAAA,IAAI;AACF,MAAA,IAAI,IAAA;AAGJ,MAAA,IAAI,mBAAmB,MAAA,CAAO,IAAA,CAAK,eAAe,CAAA,CAAE,SAAS,CAAA,EAAG;AAC9D,QAAA,IAAA,GAAO,MAAA,CAAO,OAAO,eAAe,CAAA,CAAE,KAAK,CAAC,CAAA,KAAW,CAAA,CAAE,EAAA,KAAO,MAAM,CAAA;AAAA,MACxE;AACA,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,IAAI;AACF,UAAA,IAAA,GAAO,MAAA,CAAO,YAAY,MAAM,CAAA;AAAA,QAClC,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAGA,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,IAAA,GAAO,MAAM,gBAAA,CAAiB,MAAA,EAAQ,MAAA,EAAQ,cAAc,CAAA;AAAA,MAC9D;AAEA,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,kBAAkB,CAAA;AAAA,MAC5D;AAEA,MAAA,OAAO,cAAc,IAAI,CAAA;AAAA,IAC3B,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,oBAAoB,CAAA;AAAA,IAChD;AAAA,EACF;AACF,CAAC;AAEM,IAAM,qBAAqB,WAAA,CAAY;AAAA,EAC5C,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,wBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,gBAAA;AAAA,EACjB,gBAAA,EAAkB,mBAAA;AAAA,EAClB,UAAA,EAAY,4BAAA;AAAA,EACZ,cAAA,EAAgB,yBAAA;AAAA,EAChB,OAAA,EAAS,cAAA;AAAA,EACT,WAAA,EAAa,uDAAA;AAAA,EACb,IAAA,EAAM,CAAC,OAAO,CAAA;AAAA,EACd,YAAA,EAAc,IAAA;AAAA,EACd,OAAA,EAAS,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,QAAQ,eAAA,EAAiB,cAAA,EAAgB,GAAG,UAAA,EAAW,KAAM;AAC5F,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,uBAAuB,CAAA;AAAA,MACjE;AAEA,MAAA,IAAI,IAAA;AAGJ,MAAA,IAAI,mBAAmB,MAAA,CAAO,IAAA,CAAK,eAAe,CAAA,CAAE,SAAS,CAAA,EAAG;AAC9D,QAAA,IAAA,GAAO,MAAA,CAAO,OAAO,eAAe,CAAA,CAAE,KAAK,CAAC,CAAA,KAAW,CAAA,CAAE,EAAA,KAAO,MAAM,CAAA;AAAA,MACxE;AACA,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,IAAI;AACF,UAAA,IAAA,GAAO,MAAA,CAAO,YAAY,MAAM,CAAA;AAAA,QAClC,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAGA,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,IAAA,GAAO,MAAM,gBAAA,CAAiB,MAAA,EAAQ,MAAA,EAAQ,cAAc,CAAA;AAAA,MAC9D;AAEA,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,kBAAkB,CAAA;AAAA,MAC5D;AAEA,MAAA,IAAI,CAAC,MAAM,OAAA,EAAS;AAClB,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0BAA0B,CAAA;AAAA,MACpE;AAEA,MAAA,MAAM,EAAE,MAAK,GAAI,UAAA;AAEjB,MAAA,YAAA,CAAa,EAAE,MAAM,CAAA;AAErB,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,YAAA,CAAa,IAAI,CAAA,EAAG;AACtB,QAAA,MAAA,GAAS,MAAO,IAAA,CAAa,OAAA,CAAQ,IAAI,CAAA;AAAA,MAC3C,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAO;AAAA,UACjC,MAAA;AAAA,UACA,cAAA;AAAA;AAAA,UAEA,cAAA,EAAgB,EAAE,WAAA,EAAa,MAAA,EAAU;AAAA,UACzC,GAAI,KAAA,GACA;AAAA,YACE,QAAA,EAAU;AAAA,cACR,KAAA;AAAA,cACA,SAAS,YAAY;AAAA,cAAC;AAAA;AACxB,cAEF;AAAC,SACN,CAAA;AAAA,MACH;AAEA,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,sBAAsB,CAAA;AAAA,IAClD;AAAA,EACF;AACF,CAAC;AAMM,IAAM,uBAAuB,WAAA,CAAY;AAAA,EAC9C,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,gCAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,mBAAA;AAAA,EACjB,cAAA,EAAgB,oBAAA;AAAA,EAChB,OAAA,EAAS,gBAAA;AAAA,EACT,WAAA,EAAa,2DAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAA,EAAU,OAAO,CAAA;AAAA,EACxB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO,EAAE,QAAQ,OAAA,EAAS,MAAA,EAAQ,gBAAe,KAAM;AAC9D,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,wBAAwB,CAAA;AAAA,MAClE;AACA,MAAA,MAAM,QAAQ,MAAM,kBAAA,CAAmB,EAAE,MAAA,EAAQ,SAAS,CAAA;AAE1D,MAAA,MAAM,aAAa,MAAM,KAAA,CAAM,SAAA,CAAU,EAAE,gBAAgB,CAAA;AAE3D,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,UAAA,IAAc,EAAE,CAAA,CAAE,IAAA,CAAK,CAACA,KAAAA,KAAcA,KAAAA,CAAK,EAAA,KAAO,MAAM,CAAA;AAEnF,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,kBAAkB,CAAA;AAAA,MAC5D;AAEA,MAAA,OAAO,cAAc,IAAI,CAAA;AAAA,IAC3B,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,0BAA0B,CAAA;AAAA,IACtD;AAAA,EACF;AACF,CAAC;AAEM,IAAM,2BAA2B,WAAA,CAAY;AAAA,EAClD,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,wCAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,mBAAA;AAAA,EACjB,UAAA,EAAY,qBAAA;AAAA,EACZ,cAAA,EAAgB,yBAAA;AAAA,EAChB,OAAA,EAAS,oBAAA;AAAA,EACT,WAAA,EAAa,6EAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAA,EAAU,OAAO,CAAA;AAAA,EACxB,YAAA,EAAc,IAAA;AAAA,EACd,OAAA,EAAS,OAAO,EAAE,MAAA,EAAQ,SAAS,MAAA,EAAQ,IAAA,EAAM,gBAAe,KAAM;AACpE,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,wBAAwB,CAAA;AAAA,MAClE;AACA,MAAA,MAAM,QAAQ,MAAM,kBAAA,CAAmB,EAAE,MAAA,EAAQ,SAAS,CAAA;AAE1D,MAAA,MAAM,aAAa,MAAM,KAAA,CAAM,SAAA,CAAU,EAAE,gBAAgB,CAAA;AAE3D,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,UAAA,IAAc,EAAE,CAAA,CAAE,IAAA,CAAK,CAACA,KAAAA,KAAcA,KAAAA,CAAK,EAAA,KAAO,MAAM,CAAA;AAEnF,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,kBAAkB,CAAA;AAAA,MAC5D;AAEA,MAAA,IAAI,CAAC,MAAM,OAAA,EAAS;AAClB,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0BAA0B,CAAA;AAAA,MACpE;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM;AAAA,QACtC,MAAA;AAAA,QACA,cAAA;AAAA;AAAA,QAEA,cAAA,EAAgB,EAAE,WAAA,EAAa,MAAA;AAAU,OAC1C,CAAA;AAED,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,4BAA4B,CAAA;AAAA,IACxD;AAAA,EACF;AACF,CAAC","file":"chunk-U7XUUMFF.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 chunkT3C54LPX_cjs = require('./chunk-T3C54LPX.cjs');
var chunkSI63GFYM_cjs = require('./chunk-SI63GFYM.cjs');
var chunkL3I5OC4W_cjs = require('./chunk-L3I5OC4W.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
var chunkYWUVDFQZ_cjs = require('./chunk-YWUVDFQZ.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/stored/skills",
responseType: "json",
queryParamSchema: chunkT3C54LPX_cjs.listStoredSkillsQuerySchema,
responseSchema: chunkT3C54LPX_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 = chunkHDIYJI2Z_cjs.resolveAuthorFilter({
requestContext,
resource: "stored-skills",
queryAuthorId: authorId,
queryVisibility: visibility
});
const scope = await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext);
const scopedMetadata = chunkYWUVDFQZ_cjs.scopeStoredResourceMetadata(metadata, scope);
const callerId = chunkHDIYJI2Z_cjs.getCallerAuthorId(requestContext);
const favoritesEnabled = await chunkL3I5OC4W_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) => chunkHDIYJI2Z_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) => chunkHDIYJI2Z_cjs.matchesAuthorFilter(record, filter));
if (!favoritesEnabled) {
return { ...result, skills: visibleSkills.map(chunkSI63GFYM_cjs.stripFavoriteFields) };
}
const enrichment = await chunkSI63GFYM_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(chunkSI63GFYM_cjs.stripFavoriteFields);
return { ...result, skills: annotated };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing stored skills");
}
}
});
var GET_STORED_SKILL_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: chunkT3C54LPX_cjs.storedSkillIdPathParams,
responseSchema: chunkT3C54LPX_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(skill, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_cjs.assertReadAccess({ requestContext, resource: "stored-skills", resourceId: storedSkillId, record: skill });
return chunkSI63GFYM_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", skill);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting stored skill");
}
}
});
var CREATE_STORED_SKILL_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/stored/skills",
responseType: "json",
bodySchema: chunkT3C54LPX_cjs.createStoredSkillBodySchema,
responseSchema: chunkT3C54LPX_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 || chunkYWUVDFQZ_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 = chunkHDIYJI2Z_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: chunkYWUVDFQZ_cjs.scopeStoredResourceMetadata(metadata, await chunkYWUVDFQZ_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 chunkSI63GFYM_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating stored skill");
}
}
});
var UPDATE_STORED_SKILL_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "PATCH",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: chunkT3C54LPX_cjs.storedSkillIdPathParams,
bodySchema: chunkT3C54LPX_cjs.updateStoredSkillBodySchema,
responseSchema: chunkT3C54LPX_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 chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext);
chunkYWUVDFQZ_cjs.assertStoredResourceScope(existing, scope);
chunkHDIYJI2Z_cjs.assertWriteAccess({
requestContext,
resource: "stored-skills",
resourceId: storedSkillId,
action: "edit",
record: existing
});
const callerAuthorId = chunkHDIYJI2Z_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 = chunkYWUVDFQZ_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 chunkSI63GFYM_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error updating stored skill");
}
}
});
var DELETE_STORED_SKILL_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "DELETE",
path: "/stored/skills/:storedSkillId",
responseType: "json",
pathParamSchema: chunkT3C54LPX_cjs.storedSkillIdPathParams,
responseSchema: chunkT3C54LPX_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(existing, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_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 = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/stored/skills/:storedSkillId/publish",
responseType: "json",
pathParamSchema: chunkT3C54LPX_cjs.storedSkillIdPathParams,
bodySchema: chunkT3C54LPX_cjs.publishStoredSkillBodySchema,
responseSchema: chunkT3C54LPX_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` });
}
chunkYWUVDFQZ_cjs.assertStoredResourceScope(existing, await chunkYWUVDFQZ_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_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 chunkSI63GFYM_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-UDTYX3A7.cjs.map
//# sourceMappingURL=chunk-UDTYX3A7.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-UDTYX3A7.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 { conversationObjectSchema, createConversationBodySchema, conversationIdPathParams, conversationItemsListSchema, conversationDeletedSchema } from './chunk-WOE6XG6B.js';
import { mapMastraMessagesToConversationItems } from './chunk-TLLV2JP5.js';
import { getAgentMemoryStore, findConversationThreadAcrossAgents } from './chunk-L4DD3HSB.js';
import { getAgentFromSystem } from './chunk-FU2NIFNJ.js';
import { MastraFGAPermissions, getEffectiveResourceId } from './chunk-JBSUT5XF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.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-V5YAPSSQ.js.map
//# sourceMappingURL=chunk-V5YAPSSQ.js.map
{"version":3,"sources":["../src/server/handlers/conversations.ts"],"names":[],"mappings":"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","file":"chunk-V5YAPSSQ.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 { defaultOptionsSchema } from './chunk-TKP6FJQ3.js';
import { tracingOptionsSchema, coreMessageSchema, messageResponseSchema } from './chunk-2YY3EMMS.js';
import { z } from 'zod/v4';
var jsonValueSchema = z.lazy(
() => z.union([
z.string(),
z.number(),
z.boolean(),
z.null(),
z.array(jsonValueSchema),
z.record(z.string(), jsonValueSchema)
])
);
var jsonRecordSchema = z.record(z.string(), jsonValueSchema);
var signalAttributesSchema = z.record(
z.string(),
z.union([z.string(), z.number(), z.boolean(), z.null(), z.undefined()])
);
var baseSignalSchema = z.object({
id: z.string().optional(),
createdAt: z.union([z.string(), z.date()]).optional(),
metadata: jsonRecordSchema.optional(),
attributes: signalAttributesSchema.optional()
});
var partProviderOptionsSchema = z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional();
var signalTextPartSchema = z.object({
type: z.literal("text"),
text: z.string(),
providerOptions: partProviderOptionsSchema
});
var signalFilePartSchema = z.object({
type: z.literal("file"),
data: z.string(),
mediaType: z.string(),
filename: z.string().optional(),
providerOptions: partProviderOptionsSchema
});
var userMessageSignalContentsSchema = z.union([
z.string(),
z.array(z.union([signalTextPartSchema, signalFilePartSchema]))
]);
var agentMessageInputObjectSchema = z.object({
contents: userMessageSignalContentsSchema,
attributes: signalAttributesSchema.optional(),
metadata: jsonRecordSchema.optional(),
providerOptions: z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional()
});
var agentMessageInputSchema = z.union([userMessageSignalContentsSchema, agentMessageInputObjectSchema]);
var agentSignalSchema = baseSignalSchema.extend({
type: z.enum(["user", "state", "reactive", "notification", "user-message", "system-reminder"]),
tagName: z.string().optional(),
contents: userMessageSignalContentsSchema,
providerOptions: z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional()
});
var agentIdPathParams = z.object({
agentId: z.string().describe("Unique identifier for the agent")
});
var agentVersionQuerySchema = z.object({
status: z.enum(["draft", "published"]).optional().describe(
"Which stored config version to resolve: draft (latest, default) or published (active version). Mutually exclusive with versionId."
),
versionId: z.string().optional().describe(
"Specific version ID to resolve. Mutually exclusive with status \u2014 if both are provided, versionId takes precedence."
)
});
var toolIdPathParams = z.object({
toolId: z.string().describe("Unique identifier for the tool")
});
var agentToolPathParams = agentIdPathParams.extend({
toolId: z.string().describe("Unique identifier for the tool")
});
var agentSkillPathParams = agentIdPathParams.extend({
skillName: z.string().describe("Name of the skill")
});
var modelConfigIdPathParams = agentIdPathParams.extend({
modelConfigId: z.string().describe("Unique identifier for the model configuration")
});
var serializedProcessorSchema = z.object({
id: z.string(),
name: z.string().optional()
});
var serializedToolSchema = z.object({
id: z.string(),
description: z.string().optional(),
inputSchema: z.string().optional(),
outputSchema: z.string().optional(),
requireApproval: z.boolean().optional()
});
var serializedWorkflowSchema = z.object({
name: z.string(),
steps: z.record(
z.string(),
z.object({
id: z.string(),
description: z.string().optional()
})
).optional()
});
var serializedAgentDefinitionSchema = z.object({
id: z.string(),
name: z.string()
});
var systemMessageSchema = z.union([
z.string(),
z.array(z.string()),
z.any(),
// CoreSystemMessage or SystemModelMessage
z.array(z.any())
]);
var modelConfigSchema = z.object({
model: z.object({
modelId: z.string(),
provider: z.string(),
modelVersion: z.string()
})
// Additional fields from AgentModelManagerConfig can be added here
});
var agentEditorConfigSchema = z.union([
z.literal(false),
z.object({
instructions: z.boolean().optional(),
tools: z.union([z.boolean(), z.object({ description: z.boolean().optional() })]).optional()
})
]);
var serializedAgentSchema = z.object({
name: z.string(),
description: z.string().optional(),
metadata: z.record(z.string(), z.unknown()).optional(),
instructions: systemMessageSchema.optional(),
tools: z.record(z.string(), serializedToolSchema),
agents: z.record(z.string(), serializedAgentDefinitionSchema),
workflows: z.record(z.string(), serializedWorkflowSchema),
inputProcessors: z.array(serializedProcessorSchema),
outputProcessors: z.array(serializedProcessorSchema),
provider: z.string().optional(),
modelId: z.string().optional(),
modelVersion: z.string().optional(),
supportsMemory: z.boolean().optional(),
modelList: z.array(modelConfigSchema).optional(),
defaultOptions: defaultOptionsSchema.optional(),
defaultGenerateOptionsLegacy: z.record(z.string(), z.any()).optional(),
defaultStreamOptionsLegacy: z.record(z.string(), z.any()).optional(),
source: z.enum(["code", "stored"]).optional(),
status: z.enum(["draft", "published", "archived"]).optional(),
activeVersionId: z.string().optional(),
hasDraft: z.boolean().optional(),
editor: agentEditorConfigSchema.optional()
});
var serializedAgentWithIdSchema = serializedAgentSchema.extend({
id: z.string()
});
var providerSchema = z.object({
id: z.string(),
name: z.string(),
label: z.string().optional(),
description: z.string().optional(),
envVar: z.union([z.string(), z.array(z.string())]),
connected: z.boolean(),
docUrl: z.string().optional(),
models: z.array(z.string())
});
var providersResponseSchema = z.object({
providers: z.array(providerSchema)
});
var listAgentsResponseSchema = z.record(z.string(), serializedAgentSchema);
var listToolsResponseSchema = z.record(z.string(), serializedToolSchema);
var agentMemoryOptionSchema = z.object({
thread: z.union([z.string(), z.object({ id: z.string() }).passthrough()]),
resource: z.string(),
options: z.record(z.string(), z.any()).optional(),
readOnly: z.boolean().optional()
});
var toolChoiceSchema = z.union([
z.enum(["auto", "none", "required"]),
z.object({ type: z.literal("tool"), toolName: z.string() })
]);
var agentExecutionBodySchema = z.object({
// REQUIRED
messages: z.union([
z.array(coreMessageSchema),
// Array of messages
z.string()
// Single user message shorthand
]),
// Message Configuration
instructions: systemMessageSchema.optional(),
system: systemMessageSchema.optional(),
context: z.array(coreMessageSchema).optional(),
// Memory & Persistence
memory: agentMemoryOptionSchema.optional(),
runId: z.string().optional(),
savePerStep: z.boolean().optional(),
// Request Context (handler-specific field - merged with server's requestContext)
requestContext: z.record(z.string(), z.any()).optional(),
// Version overrides for sub-agents (and future primitives)
versions: z.object({
agents: z.record(
z.string(),
z.union([z.object({ versionId: z.string() }), z.object({ status: z.enum(["draft", "published"]) })])
).optional(),
defaultStatus: z.enum(["draft", "published"]).optional()
}).optional(),
// Execution Control
maxSteps: z.number().optional(),
stopWhen: z.any().optional(),
// Model Configuration
providerOptions: z.object({
anthropic: z.record(z.string(), z.any()).optional(),
google: z.record(z.string(), z.any()).optional(),
openai: z.record(z.string(), z.any()).optional(),
xai: z.record(z.string(), z.any()).optional()
}).optional(),
modelSettings: z.any().optional(),
// Tool Configuration
activeTools: z.array(z.string()).optional(),
toolsets: z.record(z.string(), z.any()).optional(),
clientTools: z.record(z.string(), z.any()).optional(),
toolChoice: toolChoiceSchema.optional(),
requireToolApproval: z.boolean().optional(),
// Evaluation
scorers: z.union([
z.record(z.string(), z.any()),
z.record(
z.string(),
z.object({
scorer: z.string(),
sampling: z.any().optional()
})
)
]).optional(),
returnScorerData: z.boolean().optional(),
// Observability
tracingOptions: tracingOptionsSchema.optional(),
// Structured Output
output: z.any().optional(),
// Zod schema, JSON schema, or structured output object
structuredOutput: z.object({
schema: z.object({}).passthrough(),
model: z.union([z.string(), z.any()]).optional(),
instructions: z.string().optional(),
jsonPromptInjection: z.boolean().optional(),
errorStrategy: z.enum(["strict", "warn", "fallback"]).optional(),
fallbackValue: z.any().optional()
}).optional(),
// Idle-loop streaming (collapses streamUntilIdle into stream)
untilIdle: z.union([z.boolean(), z.object({ maxIdleMs: z.number().int().positive().optional() })]).optional()
}).passthrough();
var agentExecutionLegacyBodySchema = agentExecutionBodySchema.extend({
resourceId: z.string().optional(),
resourceid: z.string().optional(),
// lowercase variant
threadId: z.string().optional()
});
var streamUntilIdleBodySchema = agentExecutionBodySchema.extend({
maxIdleMs: z.number().int().positive().optional(),
untilIdle: z.union([z.boolean(), z.object({ maxIdleMs: z.number().int().positive().optional() })]).optional()
});
var resumeStreamUntilIdleBodySchema = agentExecutionBodySchema.omit({ messages: true }).extend({
runId: z.string(),
resumeData: z.unknown().refine((x) => x !== void 0, { message: "resumeData is required" }),
toolCallId: z.string().optional(),
maxIdleMs: z.number().int().positive().optional()
});
var executeToolDataBodySchema = z.object({
data: z.unknown().refine((x) => x !== void 0, { message: "data is required" })
});
var executeToolBodySchema = executeToolDataBodySchema.extend({
requestContext: z.record(z.string(), z.any()).optional()
});
var executeToolContextBodySchema = executeToolDataBodySchema.extend({
requestContext: z.record(z.string(), z.any()).optional()
});
var toolCallActionBodySchema = z.object({
runId: z.string(),
requestContext: z.record(z.string(), z.any()).optional(),
toolCallId: z.string(),
format: z.string().optional()
});
var networkToolCallActionBodySchema = z.object({
runId: z.string(),
requestContext: z.record(z.string(), z.any()).optional(),
format: z.string().optional()
});
var approveToolCallBodySchema = toolCallActionBodySchema;
var declineToolCallBodySchema = toolCallActionBodySchema;
var approveNetworkToolCallBodySchema = networkToolCallActionBodySchema;
var declineNetworkToolCallBodySchema = networkToolCallActionBodySchema;
var toolCallResponseSchema = z.object({
fullStream: z.any()
// ReadableStream
});
var sendToolApprovalResponseSchema = z.object({
accepted: z.literal(true),
runId: z.string(),
toolCallId: z.string().optional()
});
var listSuspendedRunsQuerySchema = z.object({
threadId: z.string().optional(),
resourceId: z.string().optional(),
fromDate: z.coerce.date().optional(),
toDate: z.coerce.date().optional(),
perPage: z.coerce.number().int().positive().optional(),
// page is zero-indexed, so 0 is valid
page: z.coerce.number().int().nonnegative().optional()
}).refine((data) => !data.fromDate || !data.toDate || data.fromDate <= data.toDate, {
message: "fromDate must be less than or equal to toDate",
path: ["fromDate"]
});
var listSuspendedRunsResponseSchema = z.object({
runs: z.array(
z.object({
runId: z.string(),
status: z.literal("suspended"),
threadId: z.string().optional(),
resourceId: z.string().optional(),
suspendedAt: z.date(),
toolCalls: z.array(
z.object({
toolCallId: z.string().optional(),
toolName: z.string().optional(),
args: z.unknown().optional(),
requiresApproval: z.boolean(),
suspendPayload: z.unknown().optional()
})
)
})
),
total: z.number().int().nonnegative()
});
var resumeStreamBodySchema = agentExecutionBodySchema.omit({ messages: true }).extend({
runId: z.string(),
resumeData: z.unknown().refine((x) => x !== void 0, { message: "resumeData is required" }),
toolCallId: z.string().optional()
});
var updateAgentModelBodySchema = z.object({
modelId: z.string(),
provider: z.string()
});
var reorderAgentModelListBodySchema = z.object({
reorderedModelIds: z.array(z.string())
});
var updateAgentModelInModelListBodySchema = z.object({
model: z.object({
modelId: z.string(),
provider: z.string()
}).optional(),
maxRetries: z.number().optional(),
enabled: z.boolean().optional()
});
var modelManagementResponseSchema = messageResponseSchema;
var generateResponseSchema = z.any();
var streamResponseSchema = z.any();
var executeToolResponseSchema = z.any();
var enhanceInstructionsBodySchema = z.object({
instructions: z.string().describe("The current agent instructions to enhance"),
comment: z.string().describe("User comment describing how to enhance the instructions")
});
var enhanceInstructionsResponseSchema = z.object({
explanation: z.string().describe("Explanation of the changes made"),
new_prompt: z.string().describe("The enhanced instructions")
});
var observeAgentBodySchema = z.object({
runId: z.string().describe("The run ID to observe/reconnect to"),
offset: z.number().optional().describe("Resume from this event index (0-based). If omitted, replays all events.")
});
var signalActiveBehaviorSchema = z.enum(["deliver", "persist", "discard"]);
var signalIdleBehaviorSchema = z.enum(["wake", "persist", "discard"]);
var signalTargetBaseBodySchema = z.object({
ifActive: z.object({
behavior: signalActiveBehaviorSchema.optional(),
attributes: signalAttributesSchema.optional()
}).optional()
});
var signalTargetBodySchema = z.union([
signalTargetBaseBodySchema.extend({
runId: z.string(),
resourceId: z.string().optional(),
threadId: z.string().optional(),
ifIdle: z.undefined().optional()
}),
signalTargetBaseBodySchema.extend({
runId: z.undefined().optional(),
resourceId: z.string(),
threadId: z.string(),
ifIdle: z.object({
behavior: signalIdleBehaviorSchema.optional(),
streamOptions: agentExecutionBodySchema.omit({ messages: true }).optional(),
attributes: signalAttributesSchema.optional()
}).optional()
})
]);
var sendAgentSignalBodySchema = z.union([
signalTargetBodySchema.options[0].extend({ signal: agentSignalSchema }),
signalTargetBodySchema.options[1].extend({ signal: agentSignalSchema })
]);
var sendAgentMessageBodySchema = z.union([
signalTargetBodySchema.options[0].extend({ message: agentMessageInputSchema }),
signalTargetBodySchema.options[1].extend({ message: agentMessageInputSchema })
]);
var queueAgentMessageBodySchema = sendAgentMessageBodySchema;
var subscribeAgentThreadBodySchema = z.object({
resourceId: z.string().optional(),
threadId: z.string()
});
var abortAgentThreadBodySchema = subscribeAgentThreadBodySchema;
var sendToolApprovalBodySchema = z.object({
resourceId: z.string(),
threadId: z.string(),
requestContext: z.record(z.string(), z.any()).optional(),
toolCallId: z.string(),
approved: z.boolean(),
resumeData: z.any().optional(),
format: z.string().optional(),
messages: z.array(coreMessageSchema).optional(),
streamOptions: z.any().optional()
});
var abortAgentThreadResponseSchema = z.object({
aborted: z.boolean()
});
var observeAgentResponseSchema = z.any();
export { abortAgentThreadBodySchema, abortAgentThreadResponseSchema, agentExecutionBodySchema, agentExecutionLegacyBodySchema, agentIdPathParams, agentSkillPathParams, agentToolPathParams, agentVersionQuerySchema, approveNetworkToolCallBodySchema, approveToolCallBodySchema, declineNetworkToolCallBodySchema, declineToolCallBodySchema, enhanceInstructionsBodySchema, enhanceInstructionsResponseSchema, executeToolBodySchema, executeToolContextBodySchema, executeToolResponseSchema, generateResponseSchema, listAgentsResponseSchema, listSuspendedRunsQuerySchema, listSuspendedRunsResponseSchema, listToolsResponseSchema, modelConfigIdPathParams, modelManagementResponseSchema, observeAgentBodySchema, observeAgentResponseSchema, providerSchema, providersResponseSchema, queueAgentMessageBodySchema, reorderAgentModelListBodySchema, resumeStreamBodySchema, resumeStreamUntilIdleBodySchema, sendAgentMessageBodySchema, sendAgentSignalBodySchema, sendToolApprovalBodySchema, sendToolApprovalResponseSchema, serializedAgentDefinitionSchema, serializedAgentSchema, serializedAgentWithIdSchema, serializedProcessorSchema, serializedToolSchema, serializedWorkflowSchema, streamResponseSchema, streamUntilIdleBodySchema, subscribeAgentThreadBodySchema, toolCallResponseSchema, toolIdPathParams, updateAgentModelBodySchema, updateAgentModelInModelListBodySchema };
//# sourceMappingURL=chunk-WQB65Q5Y.js.map
//# sourceMappingURL=chunk-WQB65Q5Y.js.map
{"version":3,"sources":["../src/server/schemas/agents.ts"],"names":[],"mappings":"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","file":"chunk-WQB65Q5Y.js","sourcesContent":["import { z } from 'zod/v4';\nimport { tracingOptionsSchema, coreMessageSchema, messageResponseSchema } from './common';\nimport { defaultOptionsSchema } from './default-options';\n\nexport {\n generateSpeechBodySchema,\n getListenerResponseSchema,\n speakResponseSchema,\n transcribeSpeechBodySchema,\n transcribeSpeechResponseSchema,\n voiceSpeakersResponseSchema,\n} from '@internal/voice/routes';\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\n\nconst jsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(jsonValueSchema),\n z.record(z.string(), jsonValueSchema),\n ]),\n);\nconst jsonRecordSchema = z.record(z.string(), jsonValueSchema);\n\nconst signalAttributesSchema = z.record(\n z.string(),\n z.union([z.string(), z.number(), z.boolean(), z.null(), z.undefined()]),\n);\n\nconst baseSignalSchema = z.object({\n id: z.string().optional(),\n createdAt: z.union([z.string(), z.date()]).optional(),\n metadata: jsonRecordSchema.optional(),\n attributes: signalAttributesSchema.optional(),\n});\n\nconst partProviderOptionsSchema = z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional();\n\nconst signalTextPartSchema = z.object({\n type: z.literal('text'),\n text: z.string(),\n providerOptions: partProviderOptionsSchema,\n});\n\nconst signalFilePartSchema = z.object({\n type: z.literal('file'),\n data: z.string(),\n mediaType: z.string(),\n filename: z.string().optional(),\n providerOptions: partProviderOptionsSchema,\n});\n\nconst userMessageSignalContentsSchema = z.union([\n z.string(),\n z.array(z.union([signalTextPartSchema, signalFilePartSchema])),\n]);\n\nconst agentMessageInputObjectSchema = z.object({\n contents: userMessageSignalContentsSchema,\n attributes: signalAttributesSchema.optional(),\n metadata: jsonRecordSchema.optional(),\n providerOptions: z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional(),\n});\n\nconst agentMessageInputSchema = z.union([userMessageSignalContentsSchema, agentMessageInputObjectSchema]);\n\nconst agentSignalSchema = baseSignalSchema.extend({\n type: z.enum(['user', 'state', 'reactive', 'notification', 'user-message', 'system-reminder']),\n tagName: z.string().optional(),\n contents: userMessageSignalContentsSchema,\n providerOptions: z.record(z.string(), z.record(z.string(), jsonValueSchema)).optional(),\n});\n\n// Path parameter schemas\nexport const agentIdPathParams = z.object({\n agentId: z.string().describe('Unique identifier for the agent'),\n});\n\n/**\n * Query params for GET /agents/:agentId — controls which stored config version is used for overrides.\n * Use either `status` or `versionId`, not both.\n * - `status` — 'draft' (latest version, default) or 'published' (active published version).\n * - `versionId` — Resolve with a specific version ID.\n */\nexport const agentVersionQuerySchema = z.object({\n status: z\n .enum(['draft', 'published'])\n .optional()\n .describe(\n 'Which stored config version to resolve: draft (latest, default) or published (active version). Mutually exclusive with versionId.',\n ),\n versionId: z\n .string()\n .optional()\n .describe(\n 'Specific version ID to resolve. Mutually exclusive with status — if both are provided, versionId takes precedence.',\n ),\n});\n\nexport const toolIdPathParams = z.object({\n toolId: z.string().describe('Unique identifier for the tool'),\n});\n\nexport const agentToolPathParams = agentIdPathParams.extend({\n toolId: z.string().describe('Unique identifier for the tool'),\n});\n\nexport const agentSkillPathParams = agentIdPathParams.extend({\n skillName: z.string().describe('Name of the skill'),\n});\n\nexport const modelConfigIdPathParams = agentIdPathParams.extend({\n modelConfigId: z.string().describe('Unique identifier for the model configuration'),\n});\n\n/**\n * Schema for serialized processor metadata\n */\nexport const serializedProcessorSchema = z.object({\n id: z.string(),\n name: z.string().optional(),\n});\n\n/**\n * Schema for serialized tool with JSON schemas\n * Uses passthrough() to allow additional tool properties beyond core fields\n */\nexport const serializedToolSchema = z.object({\n id: z.string(),\n description: z.string().optional(),\n inputSchema: z.string().optional(),\n outputSchema: z.string().optional(),\n requireApproval: z.boolean().optional(),\n});\n\n/**\n * Schema for serialized workflow with steps\n */\nexport const serializedWorkflowSchema = z.object({\n name: z.string(),\n steps: z\n .record(\n z.string(),\n z.object({\n id: z.string(),\n description: z.string().optional(),\n }),\n )\n .optional(),\n});\n\n/**\n * Schema for serialized agent definition (referenced by other agents)\n */\nexport const serializedAgentDefinitionSchema = z.object({\n id: z.string(),\n name: z.string(),\n});\n\n/**\n * Schema for SystemMessage type\n * Can be string, string[], or various message objects\n */\nconst systemMessageSchema = z.union([\n z.string(),\n z.array(z.string()),\n z.any(), // CoreSystemMessage or SystemModelMessage\n z.array(z.any()),\n]);\n\n/**\n * Schema for model configuration in model list\n */\nconst modelConfigSchema = z.object({\n model: z.object({\n modelId: z.string(),\n provider: z.string(),\n modelVersion: z.string(),\n }),\n // Additional fields from AgentModelManagerConfig can be added here\n});\n\nconst agentEditorConfigSchema = z.union([\n z.literal(false),\n z.object({\n instructions: z.boolean().optional(),\n tools: z.union([z.boolean(), z.object({ description: z.boolean().optional() })]).optional(),\n }),\n]);\n\n/**\n * Main schema for serialized agent representation\n */\nexport const serializedAgentSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n instructions: systemMessageSchema.optional(),\n tools: z.record(z.string(), serializedToolSchema),\n agents: z.record(z.string(), serializedAgentDefinitionSchema),\n workflows: z.record(z.string(), serializedWorkflowSchema),\n inputProcessors: z.array(serializedProcessorSchema),\n outputProcessors: z.array(serializedProcessorSchema),\n provider: z.string().optional(),\n modelId: z.string().optional(),\n modelVersion: z.string().optional(),\n supportsMemory: z.boolean().optional(),\n modelList: z.array(modelConfigSchema).optional(),\n defaultOptions: defaultOptionsSchema.optional(),\n defaultGenerateOptionsLegacy: z.record(z.string(), z.any()).optional(),\n defaultStreamOptionsLegacy: z.record(z.string(), z.any()).optional(),\n source: z.enum(['code', 'stored']).optional(),\n status: z.enum(['draft', 'published', 'archived']).optional(),\n activeVersionId: z.string().optional(),\n hasDraft: z.boolean().optional(),\n editor: agentEditorConfigSchema.optional(),\n});\n\n/**\n * Schema for agent with ID\n */\nexport const serializedAgentWithIdSchema = serializedAgentSchema.extend({\n id: z.string(),\n});\n\n/**\n * Schema for individual provider information\n */\nexport const providerSchema = z.object({\n id: z.string(),\n name: z.string(),\n label: z.string().optional(),\n description: z.string().optional(),\n envVar: z.union([z.string(), z.array(z.string())]),\n connected: z.boolean(),\n docUrl: z.string().optional(),\n models: z.array(z.string()),\n});\n\n/**\n * Schema for providers endpoint response\n */\nexport const providersResponseSchema = z.object({\n providers: z.array(providerSchema),\n});\n\nexport type ProviderListItem = z.infer<typeof providerSchema>;\n\n/**\n * Schema for list agents endpoint response\n * Returns a record of agent ID to serialized agent\n */\nexport const listAgentsResponseSchema = z.record(z.string(), serializedAgentSchema);\n\n/**\n * Schema for list tools endpoint response\n * Returns a record of tool ID to serialized tool\n */\nexport const listToolsResponseSchema = z.record(z.string(), serializedToolSchema);\n\n// ============================================================================\n// Agent Execution Body Schemas\n// ============================================================================\n\n/**\n * Schema for agent memory option\n */\nconst agentMemoryOptionSchema = z.object({\n thread: z.union([z.string(), z.object({ id: z.string() }).passthrough()]),\n resource: z.string(),\n options: z.record(z.string(), z.any()).optional(),\n readOnly: z.boolean().optional(),\n});\n\n/**\n * Schema for tool choice configuration\n */\nconst toolChoiceSchema = z.union([\n z.enum(['auto', 'none', 'required']),\n z.object({ type: z.literal('tool'), toolName: z.string() }),\n]);\n\n/**\n * Comprehensive body schema for agent generate and stream endpoints\n * Validates common fields while using passthrough for complex nested objects\n *\n * EXCLUDED FIELDS (not serializable):\n * - Callbacks: onStepFinish, onFinish, onChunk, onError, onAbort, prepareStep\n * - Class instances: inputProcessors, outputProcessors\n * - Non-serializable: abortSignal, tracingContext\n */\nexport const agentExecutionBodySchema = z\n .object({\n // REQUIRED\n messages: z.union([\n z.array(coreMessageSchema), // Array of messages\n z.string(), // Single user message shorthand\n ]),\n\n // Message Configuration\n instructions: systemMessageSchema.optional(),\n system: systemMessageSchema.optional(),\n context: z.array(coreMessageSchema).optional(),\n\n // Memory & Persistence\n memory: agentMemoryOptionSchema.optional(),\n runId: z.string().optional(),\n savePerStep: z.boolean().optional(),\n\n // Request Context (handler-specific field - merged with server's requestContext)\n requestContext: z.record(z.string(), z.any()).optional(),\n\n // Version overrides for sub-agents (and future primitives)\n versions: z\n .object({\n agents: z\n .record(\n z.string(),\n z.union([z.object({ versionId: z.string() }), z.object({ status: z.enum(['draft', 'published']) })]),\n )\n .optional(),\n defaultStatus: z.enum(['draft', 'published']).optional(),\n })\n .optional(),\n\n // Execution Control\n maxSteps: z.number().optional(),\n stopWhen: z.any().optional(),\n\n // Model Configuration\n providerOptions: z\n .object({\n anthropic: z.record(z.string(), z.any()).optional(),\n google: z.record(z.string(), z.any()).optional(),\n openai: z.record(z.string(), z.any()).optional(),\n xai: z.record(z.string(), z.any()).optional(),\n })\n .optional(),\n modelSettings: z.any().optional(),\n\n // Tool Configuration\n activeTools: z.array(z.string()).optional(),\n toolsets: z.record(z.string(), z.any()).optional(),\n clientTools: z.record(z.string(), z.any()).optional(),\n toolChoice: toolChoiceSchema.optional(),\n requireToolApproval: z.boolean().optional(),\n\n // Evaluation\n scorers: z\n .union([\n z.record(z.string(), z.any()),\n z.record(\n z.string(),\n z.object({\n scorer: z.string(),\n sampling: z.any().optional(),\n }),\n ),\n ])\n .optional(),\n returnScorerData: z.boolean().optional(),\n\n // Observability\n tracingOptions: tracingOptionsSchema.optional(),\n\n // Structured Output\n output: z.any().optional(), // Zod schema, JSON schema, or structured output object\n structuredOutput: z\n .object({\n schema: z.object({}).passthrough(),\n model: z.union([z.string(), z.any()]).optional(),\n instructions: z.string().optional(),\n jsonPromptInjection: z.boolean().optional(),\n errorStrategy: z.enum(['strict', 'warn', 'fallback']).optional(),\n fallbackValue: z.any().optional(),\n })\n .optional(),\n\n // Idle-loop streaming (collapses streamUntilIdle into stream)\n untilIdle: z.union([z.boolean(), z.object({ maxIdleMs: z.number().int().positive().optional() })]).optional(),\n })\n .passthrough(); // Allow additional fields for forward compatibility\n\n/**\n * Legacy body schema for deprecated endpoints that still use threadId/resourceId\n * Used by /agents/:agentId/generate-legacy and /agents/:agentId/stream-legacy\n */\nexport const agentExecutionLegacyBodySchema = agentExecutionBodySchema.extend({\n resourceId: z.string().optional(),\n resourceid: z.string().optional(), // lowercase variant\n threadId: z.string().optional(),\n});\n\nexport const streamUntilIdleBodySchema = agentExecutionBodySchema.extend({\n maxIdleMs: z.number().int().positive().optional(),\n untilIdle: z.union([z.boolean(), z.object({ maxIdleMs: z.number().int().positive().optional() })]).optional(),\n});\n\nexport const resumeStreamUntilIdleBodySchema = agentExecutionBodySchema.omit({ messages: true }).extend({\n runId: z.string(),\n resumeData: z.unknown().refine(x => x !== undefined, { message: 'resumeData is required' }),\n toolCallId: z.string().optional(),\n maxIdleMs: z.number().int().positive().optional(),\n});\n/**\n * Body schema for tool execute endpoint\n * Simple schema - tool validates its own input data\n * Note: Using z.unknown().refine() instead of z.any() to ensure data is required\n * (z.any() is treated as optional by Zod)\n */\nconst executeToolDataBodySchema = z.object({\n data: z.unknown().refine(x => x !== undefined, { message: 'data is required' }),\n});\n\nexport const executeToolBodySchema = executeToolDataBodySchema.extend({\n requestContext: z.record(z.string(), z.any()).optional(),\n});\n\nexport const executeToolContextBodySchema = executeToolDataBodySchema.extend({\n requestContext: z.record(z.string(), z.any()).optional(),\n});\n\n// ============================================================================\n// Tool Approval Schemas\n// ============================================================================\n\n/**\n * Base schema for tool approval/decline operations\n * Both approve and decline use the same parameters\n */\nconst toolCallActionBodySchema = z.object({\n runId: z.string(),\n requestContext: z.record(z.string(), z.any()).optional(),\n toolCallId: z.string(),\n format: z.string().optional(),\n});\nconst networkToolCallActionBodySchema = z.object({\n runId: z.string(),\n requestContext: z.record(z.string(), z.any()).optional(),\n format: z.string().optional(),\n});\n\n/**\n * Body schema for approving tool call\n */\nexport const approveToolCallBodySchema = toolCallActionBodySchema;\n\n/**\n * Body schema for declining tool call\n */\nexport const declineToolCallBodySchema = toolCallActionBodySchema;\n\n/**\n * Body schema for approving network tool call\n */\nexport const approveNetworkToolCallBodySchema = networkToolCallActionBodySchema;\n\n/**\n * Body schema for declining network tool call\n */\nexport const declineNetworkToolCallBodySchema = networkToolCallActionBodySchema;\n\n/**\n * Response schema for tool approval/decline\n */\nexport const toolCallResponseSchema = z.object({\n fullStream: z.any(), // ReadableStream\n});\n\nexport const sendToolApprovalResponseSchema = z.object({\n accepted: z.literal(true),\n runId: z.string(),\n toolCallId: z.string().optional(),\n});\n\n/**\n * Query schema for listing suspended agent runs\n */\nexport const listSuspendedRunsQuerySchema = z\n .object({\n threadId: z.string().optional(),\n resourceId: z.string().optional(),\n fromDate: z.coerce.date().optional(),\n toDate: z.coerce.date().optional(),\n perPage: z.coerce.number().int().positive().optional(),\n // page is zero-indexed, so 0 is valid\n page: z.coerce.number().int().nonnegative().optional(),\n })\n .refine(data => !data.fromDate || !data.toDate || data.fromDate <= data.toDate, {\n message: 'fromDate must be less than or equal to toDate',\n path: ['fromDate'],\n });\n\n/**\n * Response schema for listing suspended agent runs\n */\nexport const listSuspendedRunsResponseSchema = z.object({\n runs: z.array(\n z.object({\n runId: z.string(),\n status: z.literal('suspended'),\n threadId: z.string().optional(),\n resourceId: z.string().optional(),\n suspendedAt: z.date(),\n toolCalls: z.array(\n z.object({\n toolCallId: z.string().optional(),\n toolName: z.string().optional(),\n args: z.unknown().optional(),\n requiresApproval: z.boolean(),\n suspendPayload: z.unknown().optional(),\n }),\n ),\n }),\n ),\n total: z.number().int().nonnegative(),\n});\n\n// ============================================================================\n// Resume Stream Schema\n// ============================================================================\n\n/**\n * Body schema for resuming a suspended agent stream with custom data.\n * Extends the agent execution body without messages, since resume\n * continues from a prior suspension point rather than starting fresh.\n */\nexport const resumeStreamBodySchema = agentExecutionBodySchema.omit({ messages: true }).extend({\n runId: z.string(),\n resumeData: z.unknown().refine(x => x !== undefined, { message: 'resumeData is required' }),\n toolCallId: z.string().optional(),\n});\n\n// ============================================================================\n// Model Management Schemas\n// ============================================================================\n\n/**\n * Body schema for updating agent model\n */\nexport const updateAgentModelBodySchema = z.object({\n modelId: z.string(),\n provider: z.string(),\n});\n\n/**\n * Body schema for reordering agent model list\n */\nexport const reorderAgentModelListBodySchema = z.object({\n reorderedModelIds: z.array(z.string()),\n});\n\n/**\n * Body schema for updating model in model list\n */\nexport const updateAgentModelInModelListBodySchema = z.object({\n model: z\n .object({\n modelId: z.string(),\n provider: z.string(),\n })\n .optional(),\n maxRetries: z.number().optional(),\n enabled: z.boolean().optional(),\n});\n\n/**\n * Response schema for model management operations\n */\nexport const modelManagementResponseSchema = messageResponseSchema;\n\n// ============================================================================\n// Response schemas for agent generation endpoints\n// These return AI SDK types which have complex structures\n// ============================================================================\n\nexport const generateResponseSchema = z.any(); // AI SDK GenerateResult type\nexport const streamResponseSchema = z.any(); // AI SDK StreamResult type\nexport const executeToolResponseSchema = z.any(); // Tool execution result varies by tool\n\n// ============================================================================\n// Instruction Enhancement Schemas\n// ============================================================================\n\n/**\n * Body schema for enhancing agent instructions\n */\nexport const enhanceInstructionsBodySchema = z.object({\n instructions: z.string().describe('The current agent instructions to enhance'),\n comment: z.string().describe('User comment describing how to enhance the instructions'),\n});\n\n/**\n * Response schema for enhanced instructions\n */\nexport const enhanceInstructionsResponseSchema = z.object({\n explanation: z.string().describe('Explanation of the changes made'),\n new_prompt: z.string().describe('The enhanced instructions'),\n});\n\n// ============================================================================\n// Observe (Resumable Streams) Schemas\n// ============================================================================\n\n/**\n * Body schema for observing an agent stream\n * Used to reconnect to an existing stream and receive missed events\n */\nexport const observeAgentBodySchema = z.object({\n runId: z.string().describe('The run ID to observe/reconnect to'),\n offset: z.number().optional().describe('Resume from this event index (0-based). If omitted, replays all events.'),\n});\n\nconst signalActiveBehaviorSchema = z.enum(['deliver', 'persist', 'discard']);\nconst signalIdleBehaviorSchema = z.enum(['wake', 'persist', 'discard']);\n\nconst signalTargetBaseBodySchema = z.object({\n ifActive: z\n .object({\n behavior: signalActiveBehaviorSchema.optional(),\n attributes: signalAttributesSchema.optional(),\n })\n .optional(),\n});\n\nconst signalTargetBodySchema = z.union([\n signalTargetBaseBodySchema.extend({\n runId: z.string(),\n resourceId: z.string().optional(),\n threadId: z.string().optional(),\n ifIdle: z.undefined().optional(),\n }),\n signalTargetBaseBodySchema.extend({\n runId: z.undefined().optional(),\n resourceId: z.string(),\n threadId: z.string(),\n ifIdle: z\n .object({\n behavior: signalIdleBehaviorSchema.optional(),\n streamOptions: agentExecutionBodySchema.omit({ messages: true }).optional(),\n attributes: signalAttributesSchema.optional(),\n })\n .optional(),\n }),\n]);\n\nexport const sendAgentSignalBodySchema = z.union([\n signalTargetBodySchema.options[0].extend({ signal: agentSignalSchema }),\n signalTargetBodySchema.options[1].extend({ signal: agentSignalSchema }),\n]);\n\nexport const sendAgentMessageBodySchema = z.union([\n signalTargetBodySchema.options[0].extend({ message: agentMessageInputSchema }),\n signalTargetBodySchema.options[1].extend({ message: agentMessageInputSchema }),\n]);\n\nexport const queueAgentMessageBodySchema = sendAgentMessageBodySchema;\n\nexport const subscribeAgentThreadBodySchema = z.object({\n resourceId: z.string().optional(),\n threadId: z.string(),\n});\n\nexport const abortAgentThreadBodySchema = subscribeAgentThreadBodySchema;\n\nexport const sendToolApprovalBodySchema = z.object({\n resourceId: z.string(),\n threadId: z.string(),\n requestContext: z.record(z.string(), z.any()).optional(),\n toolCallId: z.string(),\n approved: z.boolean(),\n resumeData: z.any().optional(),\n format: z.string().optional(),\n messages: z.array(coreMessageSchema).optional(),\n streamOptions: z.any().optional(),\n});\n\nexport const abortAgentThreadResponseSchema = z.object({\n aborted: z.boolean(),\n});\n\n/**\n * Response schema for observe endpoint (streaming response)\n */\nexport const observeAgentResponseSchema = z.any(); // Streaming response\n"]}
import { listWorkflowsResponseSchema, workflowInfoSchema, workflowIdPathParams, workflowRunsResponseSchema, listWorkflowRunsQuerySchema, workflowRunResultSchema, workflowRunResultQuerySchema, workflowRunPathParams, workflowControlResponseSchema, createWorkflowRunResponseSchema, createWorkflowRunBodySchema, streamWorkflowBodySchema, resumeBodySchema, workflowExecutionResultSchema, startAsyncWorkflowBodySchema, observeWorkflowQuerySchema, restartBodySchema, timeTravelBodySchema } from './chunk-K4HCNNHA.js';
import { streamResponseSchema } from './chunk-WQB65Q5Y.js';
import { MastraFGAPermissions, getEffectiveResourceId, validateRunOwnership } from './chunk-JBSUT5XF.js';
import { optionalRunIdSchema, runIdSchema } from './chunk-2YY3EMMS.js';
import { getWorkflowInfo, WorkflowRegistry } from './chunk-EOGTJIPF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-Z5MTOVTR.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
import { __export } from './chunk-PR4QN5HX.js';
import { createCachingTransformStream, createReplayStream } from '@mastra/core/stream';
import { z } from 'zod/v4';
// src/server/handlers/workflows.ts
var workflows_exports = {};
__export(workflows_exports, {
CANCEL_WORKFLOW_RUN_ROUTE: () => CANCEL_WORKFLOW_RUN_ROUTE,
CREATE_WORKFLOW_RUN_ROUTE: () => CREATE_WORKFLOW_RUN_ROUTE,
DELETE_WORKFLOW_RUN_BY_ID_ROUTE: () => DELETE_WORKFLOW_RUN_BY_ID_ROUTE,
EXECUTE_WORKFLOW_STEP_ROUTE: () => EXECUTE_WORKFLOW_STEP_ROUTE,
GET_WORKFLOW_BY_ID_ROUTE: () => GET_WORKFLOW_BY_ID_ROUTE,
GET_WORKFLOW_RUN_BY_ID_ROUTE: () => GET_WORKFLOW_RUN_BY_ID_ROUTE,
LIST_WORKFLOWS_ROUTE: () => LIST_WORKFLOWS_ROUTE,
LIST_WORKFLOW_RUNS_ROUTE: () => LIST_WORKFLOW_RUNS_ROUTE,
OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE: () => OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE,
OBSERVE_STREAM_WORKFLOW_ROUTE: () => OBSERVE_STREAM_WORKFLOW_ROUTE,
RECEIVE_WORKFLOW_EVENT_ROUTE: () => RECEIVE_WORKFLOW_EVENT_ROUTE,
RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE: () => RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,
RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE: () => RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,
RESTART_ASYNC_WORKFLOW_ROUTE: () => RESTART_ASYNC_WORKFLOW_ROUTE,
RESTART_WORKFLOW_ROUTE: () => RESTART_WORKFLOW_ROUTE,
RESUME_ASYNC_WORKFLOW_ROUTE: () => RESUME_ASYNC_WORKFLOW_ROUTE,
RESUME_NO_WAIT_WORKFLOW_ROUTE: () => RESUME_NO_WAIT_WORKFLOW_ROUTE,
RESUME_STREAM_WORKFLOW_ROUTE: () => RESUME_STREAM_WORKFLOW_ROUTE,
RESUME_WORKFLOW_ROUTE: () => RESUME_WORKFLOW_ROUTE,
START_ASYNC_WORKFLOW_ROUTE: () => START_ASYNC_WORKFLOW_ROUTE,
START_WORKFLOW_RUN_ROUTE: () => START_WORKFLOW_RUN_ROUTE,
STREAM_LEGACY_WORKFLOW_ROUTE: () => STREAM_LEGACY_WORKFLOW_ROUTE,
STREAM_WORKFLOW_ROUTE: () => STREAM_WORKFLOW_ROUTE,
TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE: () => TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,
TIME_TRAVEL_STREAM_WORKFLOW_ROUTE: () => TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,
TIME_TRAVEL_WORKFLOW_ROUTE: () => TIME_TRAVEL_WORKFLOW_ROUTE
});
async function listWorkflowsFromSystem({ mastra, workflowId }) {
const logger = mastra.getLogger();
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
let workflow;
workflow = WorkflowRegistry.getWorkflow(workflowId);
if (!workflow) {
try {
workflow = mastra.getWorkflowById(workflowId);
} catch (error) {
logger.debug("Error getting workflow, searching agents for workflow", error);
}
}
if (!workflow) {
logger.debug("Workflow not found, searching agents for workflow", { workflowId });
const agents = mastra.listAgents();
if (Object.keys(agents || {}).length) {
for (const [_, agent] of Object.entries(agents)) {
try {
const workflows = await agent.listWorkflows();
if (workflows[workflowId]) {
workflow = workflows[workflowId];
break;
}
} catch (error) {
logger.debug("Error getting workflow from agent", error);
}
}
}
}
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
return { workflow };
}
var LIST_WORKFLOWS_ROUTE = createRoute({
method: "GET",
path: "/workflows",
responseType: "json",
queryParamSchema: z.object({
partial: z.string().optional()
}),
responseSchema: listWorkflowsResponseSchema,
summary: "List all workflows",
description: "Returns a list of all available workflows in the system",
tags: ["Workflows"],
requiresAuth: true,
handler: (async ({ mastra, partial, requestContext }) => {
try {
const workflows = mastra.listWorkflows({ serialized: false });
const isPartial = partial === "true";
const _workflows = Object.entries(workflows).reduce((acc, [key, workflow]) => {
acc[key] = getWorkflowInfo(workflow, isPartial);
return acc;
}, {});
const fgaProvider = mastra.getServer?.()?.fga;
const user = requestContext?.get("user");
if (fgaProvider) {
if (!user) {
return {};
}
const workflowList = Object.entries(_workflows).map(([id, w]) => ({ id, ...w }));
const accessible = await fgaProvider.filterAccessible(
user,
workflowList,
"workflow",
MastraFGAPermissions.WORKFLOWS_READ
);
const accessibleSet = new Set(accessible.map((w) => w.id));
for (const id of Object.keys(_workflows)) {
if (!accessibleSet.has(id)) {
delete _workflows[id];
}
}
}
return _workflows;
} catch (error) {
return handleError(error, "Error getting workflows");
}
})
});
var GET_WORKFLOW_BY_ID_ROUTE = createRoute({
method: "GET",
path: "/workflows/:workflowId",
responseType: "json",
pathParamSchema: workflowIdPathParams,
responseSchema: workflowInfoSchema,
summary: "Get workflow by ID",
description: "Returns details for a specific workflow",
tags: ["Workflows"],
requiresAuth: true,
handler: (async ({ mastra, workflowId }) => {
try {
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
return getWorkflowInfo(workflow);
} catch (error) {
return handleError(error, "Error getting workflow");
}
})
});
var LIST_WORKFLOW_RUNS_ROUTE = createRoute({
method: "GET",
path: "/workflows/:workflowId/runs",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: listWorkflowRunsQuerySchema,
responseSchema: workflowRunsResponseSchema,
summary: "List workflow runs",
description: "Returns a paginated list of execution runs for the specified workflow",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({
mastra,
workflowId,
fromDate,
toDate,
page,
perPage,
limit,
offset,
resourceId,
status,
requestContext
}) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
let finalPage = page;
let finalPerPage = perPage;
if (finalPerPage === void 0 && limit !== void 0) {
finalPerPage = limit;
}
if (finalPage === void 0 && offset !== void 0 && finalPerPage !== void 0 && finalPerPage > 0) {
finalPage = Math.floor(offset / finalPerPage);
}
if (finalPerPage !== void 0 && (typeof finalPerPage !== "number" || !Number.isInteger(finalPerPage) || finalPerPage <= 0)) {
throw new HTTPException(400, { message: "perPage must be a positive integer" });
}
if (finalPage !== void 0 && (!Number.isInteger(finalPage) || finalPage < 0)) {
throw new HTTPException(400, { message: "page must be a non-negative integer" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const workflowRuns = await workflow.listWorkflowRuns({
fromDate: fromDate ? typeof fromDate === "string" ? new Date(fromDate) : fromDate : void 0,
toDate: toDate ? typeof toDate === "string" ? new Date(toDate) : toDate : void 0,
perPage: finalPerPage,
page: finalPage,
resourceId: effectiveResourceId,
status
}) || {
runs: [],
total: 0
};
return workflowRuns;
} catch (error) {
return handleError(error, "Error getting workflow runs");
}
}
});
var GET_WORKFLOW_RUN_BY_ID_ROUTE = createRoute({
method: "GET",
path: "/workflows/:workflowId/runs/:runId",
responseType: "json",
pathParamSchema: workflowRunPathParams,
queryParamSchema: workflowRunResultQuerySchema,
responseSchema: workflowRunResultSchema,
summary: "Get workflow run by ID",
description: "Returns a workflow run with metadata and processed execution state. Use the fields query parameter to reduce payload size by requesting only specific fields (e.g., ?fields=status,result,metadata)",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, fields, withNestedWorkflows, requestContext }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "Run ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const fieldList = fields ? fields.split(",").map((f) => f.trim()) : void 0;
const run = await workflow.getWorkflowRunById(runId, {
withNestedWorkflows: withNestedWorkflows !== "false",
// Default to true unless explicitly 'false'
fields: fieldList
});
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
return run;
} catch (error) {
return handleError(error, "Error getting workflow run");
}
}
});
var DELETE_WORKFLOW_RUN_BY_ID_ROUTE = createRoute({
method: "DELETE",
path: "/workflows/:workflowId/runs/:runId",
responseType: "json",
pathParamSchema: workflowRunPathParams,
responseSchema: workflowControlResponseSchema,
summary: "Delete workflow run by ID",
description: "Deletes a specific workflow run by ID",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "Run ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
await workflow.deleteWorkflowRunById(runId);
return { message: "Workflow run deleted" };
} catch (error) {
return handleError(error, "Error deleting workflow run");
}
}
});
var CREATE_WORKFLOW_RUN_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/create-run",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: optionalRunIdSchema,
bodySchema: createWorkflowRunBodySchema,
responseSchema: createWorkflowRunResponseSchema,
summary: "Create workflow run",
description: "Creates a new workflow execution instance with an optional custom run ID",
tags: ["Workflows"],
requiresAuth: true,
// Creating a run is part of the execute flow (Studio/UI calls this before
// starting/streaming a workflow), so allow either permission. `write` is kept
// for back-compat with roles that already grant it.
requiresPermission: ["workflows:write", "workflows:execute"],
handler: async ({ mastra, workflowId, runId, resourceId, disableScorers, requestContext }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.createRun({ runId, resourceId: effectiveResourceId, disableScorers });
return { runId: run.runId };
} catch (error) {
return handleError(error, "Error creating workflow run");
}
}
});
var STREAM_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/stream",
responseType: "stream",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: streamWorkflowBodySchema,
summary: "Stream workflow execution",
description: "Executes a workflow and streams the results in real-time",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, resourceId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to stream workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const serverCache = mastra.getServerCache();
const run = await workflow.createRun({ runId, resourceId: effectiveResourceId });
const result = run.stream({ ...params, requestContext });
if (serverCache) {
const { transform } = createCachingTransformStream({
cache: serverCache,
cacheKey: runId
});
return result.fullStream.pipeThrough(transform);
}
return result.fullStream;
} catch (error) {
return handleError(error, "Error streaming workflow");
}
}
});
var RESUME_STREAM_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/resume-stream",
responseType: "stream",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: resumeBodySchema,
responseSchema: streamResponseSchema,
summary: "Resume workflow stream",
description: "Resumes a suspended workflow execution and continues streaming results",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const serverCache = mastra.getServerCache();
const resumeResult = _run.resumeStream({ ...params, requestContext });
if (serverCache) {
const { transform } = createCachingTransformStream({
cache: serverCache,
cacheKey: runId
});
return resumeResult.fullStream.pipeThrough(transform);
}
return resumeResult.fullStream;
} catch (error) {
return handleError(error, "Error resuming workflow");
}
}
});
var START_ASYNC_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/start-async",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: optionalRunIdSchema,
bodySchema: startAsyncWorkflowBodySchema,
responseSchema: workflowExecutionResultSchema,
summary: "Start workflow asynchronously",
description: "Starts a workflow execution asynchronously without streaming results",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, resourceId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const _run = await workflow.createRun({ runId, resourceId: effectiveResourceId });
const result = await _run.start({ ...params, requestContext });
return result;
} catch (error) {
return handleError(error, "Error starting async workflow");
}
}
});
var START_WORKFLOW_RUN_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/start",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: startAsyncWorkflowBodySchema,
responseSchema: workflowControlResponseSchema,
summary: "Start specific workflow run",
description: "Starts execution of a specific workflow run by ID",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to start run" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
void _run.start({
...params,
requestContext
});
return { message: "Workflow run started" };
} catch (e) {
return handleError(e, "Error starting workflow run");
}
}
});
var OBSERVE_STREAM_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/observe",
responseType: "stream",
pathParamSchema: workflowIdPathParams,
queryParamSchema: observeWorkflowQuerySchema,
responseSchema: streamResponseSchema,
summary: "Observe workflow stream",
description: "Observes and streams updates from an already running workflow execution. Supports position-based resume with offset for efficient reconnection.",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, offset, requestContext }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to observe workflow stream" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const serverCache = mastra.getServerCache();
if (!serverCache) {
throw new HTTPException(500, { message: "Server cache not found" });
}
const startIndex = offset ?? 0;
const cachedRunChunks = await serverCache.listFromTo(runId, startIndex);
const liveStream = _run.observeStream();
return createReplayStream({
history: cachedRunChunks,
liveSource: liveStream
});
} catch (error) {
return handleError(error, "Error observing workflow stream");
}
}
});
var RESUME_ASYNC_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/resume-async",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: resumeBodySchema,
responseSchema: workflowExecutionResultSchema,
summary: "Resume workflow asynchronously",
description: "Resumes a suspended workflow execution asynchronously without streaming",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const result = await _run.resume({ ...params, requestContext });
return result;
} catch (error) {
return handleError(error, "Error resuming workflow step");
}
}
});
var RESUME_NO_WAIT_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/resume-no-wait",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: resumeBodySchema,
responseSchema: createWorkflowRunResponseSchema,
summary: "Resume workflow without waiting",
description: "Resumes a suspended workflow execution without waiting (fire-and-forget) and returns immediately with the runId. The workflow continues executing in the background.",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const result = await _run.resumeAsync({ ...params, requestContext });
return result;
} catch (error) {
return handleError(error, "Error resuming workflow step");
}
}
});
var RESUME_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/resume",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: resumeBodySchema,
responseSchema: workflowControlResponseSchema,
summary: "Resume workflow",
description: "Resumes a suspended workflow execution from a specific step",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
void _run.resume({ ...params, requestContext });
return { message: "Workflow run resumed" };
} catch (error) {
return handleError(error, "Error resuming workflow");
}
}
});
var RESTART_ASYNC_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/restart-async",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: restartBodySchema,
responseSchema: workflowExecutionResultSchema,
summary: "Restart workflow asynchronously",
description: "Restarts an active workflow execution asynchronously",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to restart workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const result = await _run.restart({ ...params, requestContext });
return result;
} catch (error) {
return handleError(error, "Error restarting workflow");
}
}
});
var RESTART_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/restart",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: restartBodySchema,
responseSchema: workflowControlResponseSchema,
summary: "Restart workflow",
description: "Restarts an active workflow execution",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to restart workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
void _run.restart({ ...params, requestContext });
return { message: "Workflow run restarted" };
} catch (error) {
return handleError(error, "Error restarting workflow");
}
}
});
var RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/restart-all-active-workflow-runs-async",
responseType: "json",
pathParamSchema: workflowIdPathParams,
responseSchema: workflowControlResponseSchema,
summary: "Restart all active workflow runs asynchronously",
description: "Restarts all active workflow runs asynchronously",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId }) => {
try {
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
await workflow.restartAllActiveWorkflowRuns();
return { message: "All active workflow runs restarted" };
} catch (error) {
return handleError(error, "Error restarting workflow");
}
}
});
var RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/restart-all-active-workflow-runs",
responseType: "json",
pathParamSchema: workflowIdPathParams,
responseSchema: workflowControlResponseSchema,
summary: "Restart all active workflow runs",
description: "Restarts all active workflow runs",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId }) => {
try {
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
void workflow.restartAllActiveWorkflowRuns();
return { message: "All active workflow runs restarted" };
} catch (error) {
return handleError(error, "Error restarting workflow");
}
}
});
var TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/time-travel-async",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: timeTravelBodySchema,
responseSchema: workflowExecutionResultSchema,
summary: "Time travel workflow asynchronously",
description: "Time travels a workflow run asynchronously without streaming",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to time travel workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const result = await _run.timeTravel({ ...params, requestContext });
return result;
} catch (error) {
return handleError(error, "Error time traveling workflow");
}
}
});
var TIME_TRAVEL_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/time-travel",
responseType: "json",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: timeTravelBodySchema,
responseSchema: workflowControlResponseSchema,
summary: "Time travel workflow",
description: "Time travels a workflow run, starting from a specific step",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to time travel workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
void _run.timeTravel({ ...params, requestContext });
return { message: "Workflow run time travel started" };
} catch (error) {
return handleError(error, "Error time traveling workflow");
}
}
});
var TIME_TRAVEL_STREAM_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/time-travel-stream",
responseType: "stream",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: timeTravelBodySchema,
summary: "Time travel workflow stream",
description: "Time travels a workflow run, starting from a specific step, and streams the results in real-time",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to time travel workflow stream" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const existingRun = await workflow.getWorkflowRunById(runId);
if (!existingRun) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(existingRun, effectiveResourceId);
const serverCache = mastra.getServerCache();
const run = await workflow.createRun({ runId, resourceId: existingRun.resourceId });
const result = run.timeTravelStream({ ...params, requestContext });
if (serverCache) {
const { transform } = createCachingTransformStream({
cache: serverCache,
cacheKey: runId
});
return result.fullStream.pipeThrough(transform);
}
return result.fullStream;
} catch (error) {
return handleError(error, "Error time traveling workflow stream");
}
}
});
var CANCEL_WORKFLOW_RUN_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/runs/:runId/cancel",
responseType: "json",
pathParamSchema: workflowRunPathParams,
responseSchema: workflowControlResponseSchema,
summary: "Cancel workflow run",
description: "Cancels an in-progress workflow execution",
tags: ["Workflows"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to cancel workflow run" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
await _run.cancel();
return { message: "Workflow run cancelled" };
} catch (error) {
return handleError(error, "Error canceling workflow run");
}
}
});
var STREAM_LEGACY_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/stream-legacy",
responseType: "stream",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
bodySchema: streamWorkflowBodySchema,
responseSchema: streamResponseSchema,
summary: "[DEPRECATED] Stream workflow with legacy format",
description: "Legacy endpoint for streaming workflow execution. Use /workflows/:workflowId/stream instead.",
tags: ["Workflows", "Legacy"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, resourceId, requestContext, ...params }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to resume workflow" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const serverCache = mastra.getServerCache();
const run = await workflow.createRun({ runId, resourceId: effectiveResourceId });
const result = run.streamLegacy({
...params,
requestContext,
onChunk: async (chunk) => {
if (serverCache) {
const cacheKey = runId;
await serverCache.listPush(cacheKey, chunk);
}
}
});
return result.stream;
} catch (error) {
return handleError(error, "Error executing workflow");
}
}
});
var OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/observe-stream-legacy",
responseType: "stream",
pathParamSchema: workflowIdPathParams,
queryParamSchema: runIdSchema,
responseSchema: streamResponseSchema,
summary: "[DEPRECATED] Observe workflow stream with legacy format",
description: "Legacy endpoint for observing workflow stream. Use /workflows/:workflowId/observe instead.",
tags: ["Workflows", "Legacy"],
requiresAuth: true,
handler: async ({ mastra, workflowId, runId, requestContext }) => {
try {
const effectiveResourceId = getEffectiveResourceId(requestContext, void 0);
if (!workflowId) {
throw new HTTPException(400, { message: "Workflow ID is required" });
}
if (!runId) {
throw new HTTPException(400, { message: "runId required to observe workflow stream" });
}
const { workflow } = await listWorkflowsFromSystem({ mastra, workflowId });
if (!workflow) {
throw new HTTPException(404, { message: "Workflow not found" });
}
const run = await workflow.getWorkflowRunById(runId);
if (!run) {
throw new HTTPException(404, { message: "Workflow run not found" });
}
await validateRunOwnership(run, effectiveResourceId);
const _run = await workflow.createRun({ runId, resourceId: run.resourceId });
const serverCache = mastra.getServerCache();
if (!serverCache) {
throw new HTTPException(500, { message: "Server cache not found" });
}
const cachedRunChunks = await serverCache.listFromTo(runId, 0);
const result = _run.observeStreamLegacy();
if (!result.stream) {
throw new HTTPException(500, { message: "Failed to create observe stream" });
}
return createReplayStream({
history: cachedRunChunks,
liveSource: result.stream
});
} catch (error) {
return handleError(error, "Error observing workflow stream");
}
}
});
var stepExecutionBodySchema = z.object({
stepId: z.string(),
executionPath: z.array(z.number().int().nonnegative()),
stepResults: z.record(z.string(), z.any()),
state: z.record(z.string(), z.any()),
requestContext: z.record(z.string(), z.any()),
input: z.any().optional(),
resumeData: z.any().optional(),
retryCount: z.number().int().nonnegative().optional(),
foreachIdx: z.number().int().nonnegative().optional(),
format: z.enum(["legacy", "vnext"]).optional(),
perStep: z.boolean().optional(),
validateInputs: z.boolean().optional()
});
var strategyByMastra = /* @__PURE__ */ new WeakMap();
async function getStepStrategy(mastra) {
let cached = strategyByMastra.get(mastra);
if (!cached) {
const { InProcessStrategy } = await import('@mastra/core/worker');
cached = new InProcessStrategy({ mastra });
strategyByMastra.set(mastra, cached);
}
return cached;
}
var stepExecutionResponseSchema = z.any();
var EXECUTE_WORKFLOW_STEP_ROUTE = createRoute({
method: "POST",
path: "/workflows/:workflowId/runs/:runId/steps/execute",
responseType: "json",
pathParamSchema: workflowRunPathParams,
bodySchema: stepExecutionBodySchema,
responseSchema: stepExecutionResponseSchema,
summary: "Execute a workflow step",
description: "Internal endpoint used by standalone OrchestrationWorker instances to execute workflow steps remotely via HttpRemoteStrategy.",
tags: ["Workflows", "Worker"],
requiresAuth: true,
handler: (async ({ mastra, workflowId, runId, ...body }) => {
try {
const strategy = await getStepStrategy(mastra);
const result = await strategy.executeStep({
workflowId,
runId,
stepId: body.stepId,
executionPath: body.executionPath,
stepResults: body.stepResults,
state: body.state,
requestContext: body.requestContext,
input: body.input,
resumeData: body.resumeData,
retryCount: body.retryCount,
foreachIdx: body.foreachIdx,
format: body.format,
perStep: body.perStep,
validateInputs: body.validateInputs
});
return result;
} catch (error) {
return handleError(error, "Error executing workflow step");
}
})
});
var workflowEventSchema = z.object({
id: z.string(),
type: z.string(),
data: z.unknown(),
runId: z.string(),
createdAt: z.string(),
index: z.number().optional(),
deliveryAttempt: z.number().optional()
});
var receiveWorkflowEventBodySchema = z.object({
event: workflowEventSchema.passthrough()
});
var receiveWorkflowEventResponseSchema = z.object({
ok: z.boolean(),
retry: z.boolean().optional()
});
var RECEIVE_WORKFLOW_EVENT_ROUTE = createRoute({
method: "POST",
path: "/workflows/events",
responseType: "json",
bodySchema: receiveWorkflowEventBodySchema,
responseSchema: receiveWorkflowEventResponseSchema,
summary: "Receive a workflow event from a push-mode broker",
description: "Push-mode entry point for workflow events. Brokers (GCP Pub/Sub push, SNS, EventBridge) POST each event here; Mastra processes it through the same pipeline as pull-mode workers.",
tags: ["Workflows", "Worker"],
requiresAuth: true,
// Broker push endpoint: it advances runtime state rather than editing
// definitions, so `workflows:execute` is the more accurate fit. `write` is
// kept for back-compat with service principals that already grant it.
requiresPermission: ["workflows:write", "workflows:execute"],
handler: (async ({ mastra, event }) => {
try {
const rawCreatedAt = event.createdAt;
const createdAt = rawCreatedAt instanceof Date ? rawCreatedAt : new Date(rawCreatedAt);
if (Number.isNaN(createdAt.getTime())) {
throw new HTTPException(400, { message: "Invalid createdAt" });
}
return await mastra.handleWorkflowEvent({ ...event, createdAt });
} catch (error) {
return handleError(error, "Error receiving workflow event");
}
})
});
export { CANCEL_WORKFLOW_RUN_ROUTE, CREATE_WORKFLOW_RUN_ROUTE, DELETE_WORKFLOW_RUN_BY_ID_ROUTE, EXECUTE_WORKFLOW_STEP_ROUTE, GET_WORKFLOW_BY_ID_ROUTE, GET_WORKFLOW_RUN_BY_ID_ROUTE, LIST_WORKFLOWS_ROUTE, LIST_WORKFLOW_RUNS_ROUTE, OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE, OBSERVE_STREAM_WORKFLOW_ROUTE, RECEIVE_WORKFLOW_EVENT_ROUTE, RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE, RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE, RESTART_ASYNC_WORKFLOW_ROUTE, RESTART_WORKFLOW_ROUTE, RESUME_ASYNC_WORKFLOW_ROUTE, RESUME_NO_WAIT_WORKFLOW_ROUTE, RESUME_STREAM_WORKFLOW_ROUTE, RESUME_WORKFLOW_ROUTE, START_ASYNC_WORKFLOW_ROUTE, START_WORKFLOW_RUN_ROUTE, STREAM_LEGACY_WORKFLOW_ROUTE, STREAM_WORKFLOW_ROUTE, TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE, TIME_TRAVEL_STREAM_WORKFLOW_ROUTE, TIME_TRAVEL_WORKFLOW_ROUTE, workflows_exports };
//# sourceMappingURL=chunk-XX5G7THL.js.map
//# sourceMappingURL=chunk-XX5G7THL.js.map

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 chunkKIDHIRVO_cjs = require('./chunk-KIDHIRVO.cjs');
var chunkFCOEWHH3_cjs = require('./chunk-FCOEWHH3.cjs');
var chunk42M6Y2OD_cjs = require('./chunk-42M6Y2OD.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.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 = chunk42M6Y2OD_cjs.getEffectiveThreadId(requestContext, void 0);
const effectiveResourceId = chunk42M6Y2OD_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 chunk42M6Y2OD_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 chunk42M6Y2OD_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 chunkFCOEWHH3_cjs.getAgentFromSystem({ mastra, agentId });
}
async function resolveAgentMemoryStore({
agent,
requestContext,
errorMessage
}) {
const agentMemoryStore = await chunkKIDHIRVO_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 chunkKIDHIRVO_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 chunkKIDHIRVO_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 chunkKIDHIRVO_cjs.findResponseTurnRecord({
agent: resolvedAgent,
responseId: body.previous_response_id,
requestContext
});
if (!previousResponseTurnRecord) {
const owningResponseTurnRecord = await chunkKIDHIRVO_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 chunkKIDHIRVO_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 = chunkDN2NUSL2_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: chunk42M6Y2OD_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 = chunkDN2NUSL2_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: chunk42M6Y2OD_cjs.MastraFGAPermissions.AGENTS_READ,
handler: async ({ mastra, requestContext, responseId }) => {
try {
const responseTurnRecord = await chunkKIDHIRVO_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 = chunkDN2NUSL2_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: chunk42M6Y2OD_cjs.MastraFGAPermissions.AGENTS_DELETE,
handler: async ({ mastra, requestContext, responseId }) => {
try {
const responseTurnRecord = await chunkKIDHIRVO_cjs.findResponseTurnRecordAcrossAgents({ mastra, responseId, requestContext });
if (!responseTurnRecord) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored response ${responseId} was not found` });
}
await chunkKIDHIRVO_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-ZLES3TDX.cjs.map
//# sourceMappingURL=chunk-ZLES3TDX.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-ZLES3TDX.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"]}
'use strict';
var chunkO35VIFMS_cjs = require('./chunk-O35VIFMS.cjs');
var chunkS6TNTR3A_cjs = require('./chunk-S6TNTR3A.cjs');
var chunkPTPMBE6M_cjs = require('./chunk-PTPMBE6M.cjs');
var chunkHBXNOBJN_cjs = require('./chunk-HBXNOBJN.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var chunkYWUVDFQZ_cjs = require('./chunk-YWUVDFQZ.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkDN2NUSL2_cjs = require('./chunk-DN2NUSL2.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
var chunkO7I5CWRX_cjs = require('./chunk-O7I5CWRX.cjs');
// src/server/handlers/agent-builder.ts
var agent_builder_exports = {};
chunkO7I5CWRX_cjs.__export(agent_builder_exports, {
CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE: () => CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE,
CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE: () => CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,
GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE: () => GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,
GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE: () => GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,
LIST_AGENT_BUILDER_ACTIONS_ROUTE: () => LIST_AGENT_BUILDER_ACTIONS_ROUTE,
LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE: () => LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,
OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE: () => OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,
OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE: () => OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
RESUME_AGENT_BUILDER_ACTION_ROUTE: () => RESUME_AGENT_BUILDER_ACTION_ROUTE,
RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE: () => RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE: () => RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,
RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE: () => RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,
START_AGENT_BUILDER_ACTION_RUN_ROUTE: () => START_AGENT_BUILDER_ACTION_RUN_ROUTE,
START_ASYNC_AGENT_BUILDER_ACTION_ROUTE: () => START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
STREAM_AGENT_BUILDER_ACTION_ROUTE: () => STREAM_AGENT_BUILDER_ACTION_ROUTE,
STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE: () => STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE
});
var agentBuilderWorkflowsPromise;
async function loadAgentBuilderWorkflows() {
agentBuilderWorkflowsPromise ??= import('./dist-66SHYWFH.cjs').then((mod) => mod.agentBuilderWorkflows);
return agentBuilderWorkflowsPromise;
}
async function registerAgentBuilderWorkflows(mastra) {
const agentBuilderWorkflows = await loadAgentBuilderWorkflows();
chunkYWUVDFQZ_cjs.WorkflowRegistry.registerTemporaryWorkflows(agentBuilderWorkflows, mastra);
return agentBuilderWorkflows;
}
var LIST_AGENT_BUILDER_ACTIONS_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/agent-builder",
responseType: "json",
responseSchema: chunkPTPMBE6M_cjs.listWorkflowsResponseSchema,
summary: "List agent-builder actions",
description: "Returns a list of all available agent-builder actions",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
logger.info("Listing agent builder actions");
return await chunkO35VIFMS_cjs.LIST_WORKFLOWS_ROUTE.handler(ctx);
} catch (error) {
logger.error("Error listing agent builder actions", { error });
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting agent builder workflows");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/agent-builder/:actionId",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
responseSchema: chunkPTPMBE6M_cjs.workflowInfoSchema,
summary: "Get action by ID",
description: "Returns details for a specific agent-builder action",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId } = ctx;
const logger = mastra.getLogger();
try {
const agentBuilderWorkflows = await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, {
message: `Invalid agent-builder action: ${actionId}. Valid actions are: ${Object.keys(agentBuilderWorkflows).join(", ")}`
});
}
logger.info("Getting agent builder action by ID", { actionId });
return await chunkO35VIFMS_cjs.GET_WORKFLOW_BY_ID_ROUTE.handler({ ...ctx, workflowId: actionId });
} catch (error) {
logger.error("Error getting agent builder action by ID", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting agent builder action");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/agent-builder/:actionId/runs",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkPTPMBE6M_cjs.listWorkflowRunsQuerySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowRunsResponseSchema,
summary: "List action runs",
description: "Returns a paginated list of execution runs for the specified action",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Listing agent builder action runs", { actionId });
return await chunkO35VIFMS_cjs.LIST_WORKFLOW_RUNS_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error listing agent builder action runs", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting agent builder action runs");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "GET",
path: "/agent-builder/:actionId/runs/:runId",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionRunPathParams,
queryParamSchema: chunkPTPMBE6M_cjs.workflowRunResultQuerySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowRunResultSchema,
summary: "Get action run by ID",
description: "Returns details for a specific action run with metadata and processed execution state. Use the fields query parameter to reduce payload size.",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Getting agent builder action run by ID", { actionId, runId });
return await chunkO35VIFMS_cjs.GET_WORKFLOW_RUN_BY_ID_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error getting agent builder action run", { error, actionId, runId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting agent builder action run");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/create-run",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.optionalRunIdSchema,
responseSchema: chunkPTPMBE6M_cjs.createWorkflowRunResponseSchema,
summary: "Create action run",
description: "Creates a new action execution instance with an optional custom run ID",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Creating agent builder action run", { actionId, runId });
return await chunkO35VIFMS_cjs.CREATE_WORKFLOW_RUN_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error creating agent builder action run", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating agent builder action run");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var STREAM_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/stream",
responseType: "stream",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkS6TNTR3A_cjs.streamAgentBuilderBodySchema,
responseSchema: chunkHBXNOBJN_cjs.streamResponseSchema,
summary: "Stream action execution",
description: "Executes an action and streams the results in real-time",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Streaming agent builder action", { actionId, runId });
return await chunkO35VIFMS_cjs.STREAM_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error streaming agent builder action", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error streaming agent builder action");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var START_ASYNC_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/start-async",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.optionalRunIdSchema,
bodySchema: chunkS6TNTR3A_cjs.startAsyncAgentBuilderBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowExecutionResultSchema,
summary: "Start action asynchronously",
description: "Starts an action execution asynchronously without streaming results",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Starting agent builder action asynchronously", { actionId, runId });
return await chunkO35VIFMS_cjs.START_ASYNC_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error starting agent builder action asynchronously", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error starting agent builder action");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var START_AGENT_BUILDER_ACTION_RUN_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/start",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkS6TNTR3A_cjs.startAsyncAgentBuilderBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Start specific action run",
description: "Starts execution of a specific action run by ID",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Starting specific agent builder action run", { actionId, runId });
return await chunkO35VIFMS_cjs.START_WORKFLOW_RUN_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error starting agent builder action run", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error starting agent builder action run");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/observe",
responseType: "stream",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
responseSchema: chunkHBXNOBJN_cjs.streamResponseSchema,
summary: "Observe action stream",
description: "Observes and streams updates from an already running action execution",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Observing agent builder action stream", { actionId, runId });
return await chunkO35VIFMS_cjs.OBSERVE_STREAM_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error observing agent builder action stream", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error observing agent builder action stream");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/resume-async",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkS6TNTR3A_cjs.resumeAgentBuilderBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowExecutionResultSchema,
summary: "Resume action asynchronously",
description: "Resumes a suspended action execution asynchronously without streaming",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, step, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Resuming agent builder action asynchronously", { actionId, runId, step });
return await chunkO35VIFMS_cjs.RESUME_ASYNC_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error resuming agent builder action asynchronously", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error resuming agent builder action");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/resume-no-wait",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkS6TNTR3A_cjs.resumeAgentBuilderBodySchema,
responseSchema: chunkPTPMBE6M_cjs.createWorkflowRunResponseSchema,
summary: "Resume action without waiting",
description: "Resumes a suspended action execution without waiting (fire-and-forget) and returns immediately with the runId. The action continues executing in the background.",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, step, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Resuming agent builder action without waiting", { actionId, runId, step });
return await chunkO35VIFMS_cjs.RESUME_NO_WAIT_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error resuming agent builder action without waiting", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error resuming agent builder action");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var RESUME_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/resume",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkS6TNTR3A_cjs.resumeAgentBuilderBodySchema,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Resume action",
description: "Resumes a suspended action execution from a specific step",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, step, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Resuming agent builder action", { actionId, runId, step });
return await chunkO35VIFMS_cjs.RESUME_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error resuming agent builder action", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error resuming agent builder action");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/resume-stream",
responseType: "stream",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkS6TNTR3A_cjs.resumeAgentBuilderBodySchema,
responseSchema: chunkHBXNOBJN_cjs.streamResponseSchema,
summary: "Resume action stream",
description: "Resumes a suspended action execution and continues streaming results",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, step, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Resuming agent builder action stream", { actionId, runId, step });
return await chunkO35VIFMS_cjs.RESUME_STREAM_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error resuming agent builder action stream", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error resuming agent builder action stream");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/runs/:runId/cancel",
responseType: "json",
pathParamSchema: chunkS6TNTR3A_cjs.actionRunPathParams,
responseSchema: chunkPTPMBE6M_cjs.workflowControlResponseSchema,
summary: "Cancel action run",
description: "Cancels an in-progress action execution",
tags: ["Agent Builder"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Cancelling agent builder action run", { actionId, runId });
return await chunkO35VIFMS_cjs.CANCEL_WORKFLOW_RUN_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error cancelling agent builder action run", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error cancelling agent builder action run");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/stream-legacy",
responseType: "stream",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
bodySchema: chunkS6TNTR3A_cjs.streamLegacyAgentBuilderBodySchema,
responseSchema: chunkHBXNOBJN_cjs.streamResponseSchema,
summary: "[DEPRECATED] Stream agent-builder action with legacy format",
description: "Legacy endpoint for streaming agent-builder action execution. Use /agent-builder/:actionId/stream instead.",
tags: ["Agent Builder", "Legacy"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId, requestContext } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Streaming agent builder action (legacy)", { actionId, runId });
return await chunkO35VIFMS_cjs.STREAM_LEGACY_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId,
requestContext
});
} catch (error) {
logger.error("Error streaming agent builder action (legacy)", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error streaming agent builder action");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
var OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = chunkDN2NUSL2_cjs.createRoute({
method: "POST",
path: "/agent-builder/:actionId/observe-stream-legacy",
responseType: "stream",
pathParamSchema: chunkS6TNTR3A_cjs.actionIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.runIdSchema,
responseSchema: chunkHBXNOBJN_cjs.streamResponseSchema,
summary: "[DEPRECATED] Observe agent-builder action stream with legacy format",
description: "Legacy endpoint for observing agent-builder action stream. Use /agent-builder/:actionId/observe instead.",
tags: ["Agent Builder", "Legacy"],
requiresAuth: true,
handler: async (ctx) => {
const { mastra, actionId, runId } = ctx;
const logger = mastra.getLogger();
try {
await registerAgentBuilderWorkflows(mastra);
if (actionId && !chunkYWUVDFQZ_cjs.WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {
throw new chunk64ITUOXI_cjs.HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });
}
logger.info("Observing agent builder action stream (legacy)", { actionId, runId });
return await chunkO35VIFMS_cjs.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE.handler({
...ctx,
workflowId: actionId
});
} catch (error) {
logger.error("Error observing agent builder action stream (legacy)", { error, actionId });
return chunkZ7LCIYK7_cjs.handleError(error, "Error observing agent builder action stream");
} finally {
chunkYWUVDFQZ_cjs.WorkflowRegistry.cleanup();
}
}
});
exports.CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE = CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE;
exports.CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE = CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE;
exports.GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE = GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE;
exports.GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE = GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE;
exports.LIST_AGENT_BUILDER_ACTIONS_ROUTE = LIST_AGENT_BUILDER_ACTIONS_ROUTE;
exports.LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE = LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE;
exports.OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE = OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE;
exports.OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE;
exports.RESUME_AGENT_BUILDER_ACTION_ROUTE = RESUME_AGENT_BUILDER_ACTION_ROUTE;
exports.RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE = RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE;
exports.RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE = RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE;
exports.RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE = RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE;
exports.START_AGENT_BUILDER_ACTION_RUN_ROUTE = START_AGENT_BUILDER_ACTION_RUN_ROUTE;
exports.START_ASYNC_AGENT_BUILDER_ACTION_ROUTE = START_ASYNC_AGENT_BUILDER_ACTION_ROUTE;
exports.STREAM_AGENT_BUILDER_ACTION_ROUTE = STREAM_AGENT_BUILDER_ACTION_ROUTE;
exports.STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE;
exports.agent_builder_exports = agent_builder_exports;
//# sourceMappingURL=chunk-ZYPEQZPE.cjs.map
//# sourceMappingURL=chunk-ZYPEQZPE.cjs.map
{"version":3,"sources":["../src/server/handlers/agent-builder.ts"],"names":["__export","WorkflowRegistry","createRoute","listWorkflowsResponseSchema","LIST_WORKFLOWS_ROUTE","handleError","actionIdPathParams","workflowInfoSchema","HTTPException","GET_WORKFLOW_BY_ID_ROUTE","listWorkflowRunsQuerySchema","workflowRunsResponseSchema","LIST_WORKFLOW_RUNS_ROUTE","actionRunPathParams","workflowRunResultQuerySchema","workflowRunResultSchema","GET_WORKFLOW_RUN_BY_ID_ROUTE","optionalRunIdSchema","createWorkflowRunResponseSchema","CREATE_WORKFLOW_RUN_ROUTE","runIdSchema","streamAgentBuilderBodySchema","streamResponseSchema","STREAM_WORKFLOW_ROUTE","startAsyncAgentBuilderBodySchema","workflowExecutionResultSchema","START_ASYNC_WORKFLOW_ROUTE","workflowControlResponseSchema","START_WORKFLOW_RUN_ROUTE","OBSERVE_STREAM_WORKFLOW_ROUTE","resumeAgentBuilderBodySchema","RESUME_ASYNC_WORKFLOW_ROUTE","RESUME_NO_WAIT_WORKFLOW_ROUTE","RESUME_WORKFLOW_ROUTE","RESUME_STREAM_WORKFLOW_ROUTE","CANCEL_WORKFLOW_RUN_ROUTE","streamLegacyAgentBuilderBodySchema","STREAM_LEGACY_WORKFLOW_ROUTE","OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE"],"mappings":"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","file":"chunk-ZYPEQZPE.cjs","sourcesContent":["import type { agentBuilderWorkflows as agentBuilderWorkflowsType } from '@mastra/agent-builder';\nimport { HTTPException } from '../http-exception';\nimport {\n actionIdPathParams,\n actionRunPathParams,\n createWorkflowRunResponseSchema,\n listWorkflowRunsQuerySchema,\n resumeAgentBuilderBodySchema,\n streamAgentBuilderBodySchema,\n startAsyncAgentBuilderBodySchema,\n workflowExecutionResultSchema,\n workflowControlResponseSchema,\n workflowRunsResponseSchema,\n workflowInfoSchema,\n listWorkflowsResponseSchema,\n streamLegacyAgentBuilderBodySchema,\n workflowRunResultSchema,\n workflowRunResultQuerySchema,\n} from '../schemas/agent-builder';\nimport { streamResponseSchema } from '../schemas/agents';\nimport { optionalRunIdSchema, runIdSchema } from '../schemas/common';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { WorkflowRegistry } from '../utils';\nimport { handleError } from './error';\nimport * as workflows from './workflows';\n\ntype AgentBuilderWorkflows = typeof agentBuilderWorkflowsType;\n\nlet agentBuilderWorkflowsPromise: Promise<AgentBuilderWorkflows> | undefined;\n\nasync function loadAgentBuilderWorkflows(): Promise<AgentBuilderWorkflows> {\n agentBuilderWorkflowsPromise ??= import('@mastra/agent-builder').then(mod => mod.agentBuilderWorkflows);\n return agentBuilderWorkflowsPromise;\n}\n\nasync function registerAgentBuilderWorkflows(\n mastra: Parameters<typeof WorkflowRegistry.registerTemporaryWorkflows>[1],\n) {\n const agentBuilderWorkflows = await loadAgentBuilderWorkflows();\n WorkflowRegistry.registerTemporaryWorkflows(agentBuilderWorkflows, mastra);\n return agentBuilderWorkflows;\n}\n\n// ============================================================================\n// Route Definitions (handlers call workflow route handlers with transformed parameters)\n// ============================================================================\n\nexport const LIST_AGENT_BUILDER_ACTIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-builder',\n responseType: 'json',\n responseSchema: listWorkflowsResponseSchema,\n summary: 'List agent-builder actions',\n description: 'Returns a list of all available agent-builder actions',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n logger.info('Listing agent builder actions');\n\n // Call workflow list handler\n return await workflows.LIST_WORKFLOWS_ROUTE.handler(ctx);\n } catch (error) {\n logger.error('Error listing agent builder actions', { error });\n return handleError(error, 'Error getting agent builder workflows');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-builder/:actionId',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n responseSchema: workflowInfoSchema,\n summary: 'Get action by ID',\n description: 'Returns details for a specific agent-builder action',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId } = ctx;\n const logger = mastra.getLogger();\n try {\n const agentBuilderWorkflows = await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, {\n message: `Invalid agent-builder action: ${actionId}. Valid actions are: ${Object.keys(agentBuilderWorkflows).join(', ')}`,\n });\n }\n\n logger.info('Getting agent builder action by ID', { actionId });\n\n return await workflows.GET_WORKFLOW_BY_ID_ROUTE.handler({ ...ctx, workflowId: actionId });\n } catch (error) {\n logger.error('Error getting agent builder action by ID', { error, actionId });\n return handleError(error, 'Error getting agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-builder/:actionId/runs',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: listWorkflowRunsQuerySchema,\n responseSchema: workflowRunsResponseSchema,\n summary: 'List action runs',\n description: 'Returns a paginated list of execution runs for the specified action',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Listing agent builder action runs', { actionId });\n\n return await workflows.LIST_WORKFLOW_RUNS_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error listing agent builder action runs', { error, actionId });\n return handleError(error, 'Error getting agent builder action runs');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-builder/:actionId/runs/:runId',\n responseType: 'json',\n pathParamSchema: actionRunPathParams,\n queryParamSchema: workflowRunResultQuerySchema,\n responseSchema: workflowRunResultSchema,\n summary: 'Get action run by ID',\n description:\n 'Returns details for a specific action run with metadata and processed execution state. Use the fields query parameter to reduce payload size.',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Getting agent builder action run by ID', { actionId, runId });\n\n return await workflows.GET_WORKFLOW_RUN_BY_ID_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error getting agent builder action run', { error, actionId, runId });\n return handleError(error, 'Error getting agent builder action run');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/create-run',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: optionalRunIdSchema,\n responseSchema: createWorkflowRunResponseSchema,\n summary: 'Create action run',\n description: 'Creates a new action execution instance with an optional custom run ID',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Creating agent builder action run', { actionId, runId });\n\n return await workflows.CREATE_WORKFLOW_RUN_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error creating agent builder action run', { error, actionId });\n return handleError(error, 'Error creating agent builder action run');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/stream',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: streamAgentBuilderBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Stream action execution',\n description: 'Executes an action and streams the results in real-time',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Streaming agent builder action', { actionId, runId });\n\n return await workflows.STREAM_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error streaming agent builder action', { error, actionId });\n return handleError(error, 'Error streaming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const START_ASYNC_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/start-async',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: optionalRunIdSchema,\n bodySchema: startAsyncAgentBuilderBodySchema,\n responseSchema: workflowExecutionResultSchema,\n summary: 'Start action asynchronously',\n description: 'Starts an action execution asynchronously without streaming results',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Starting agent builder action asynchronously', { actionId, runId });\n\n return await workflows.START_ASYNC_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error starting agent builder action asynchronously', { error, actionId });\n return handleError(error, 'Error starting agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const START_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/start',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: startAsyncAgentBuilderBodySchema,\n responseSchema: workflowControlResponseSchema,\n summary: 'Start specific action run',\n description: 'Starts execution of a specific action run by ID',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Starting specific agent builder action run', { actionId, runId });\n\n return await workflows.START_WORKFLOW_RUN_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error starting agent builder action run', { error, actionId });\n return handleError(error, 'Error starting agent builder action run');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/observe',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n responseSchema: streamResponseSchema,\n summary: 'Observe action stream',\n description: 'Observes and streams updates from an already running action execution',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Observing agent builder action stream', { actionId, runId });\n\n return await workflows.OBSERVE_STREAM_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error observing agent builder action stream', { error, actionId });\n return handleError(error, 'Error observing agent builder action stream');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/resume-async',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: resumeAgentBuilderBodySchema,\n responseSchema: workflowExecutionResultSchema,\n summary: 'Resume action asynchronously',\n description: 'Resumes a suspended action execution asynchronously without streaming',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, step, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Resuming agent builder action asynchronously', { actionId, runId, step });\n\n return await workflows.RESUME_ASYNC_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error resuming agent builder action asynchronously', { error, actionId });\n return handleError(error, 'Error resuming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\n/**\n * Fire-and-forget resume for agent-builder actions: returns immediately with the runId without\n * waiting for completion. Delegates to the workflows `resume-no-wait` route.\n *\n * TODO(v2): fold this behavior into the `resume-async` route in Mastra v2 and remove this route.\n * Kept separate in v1 to avoid breaking the existing `resume-async` response contract.\n */\nexport const RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/resume-no-wait',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: resumeAgentBuilderBodySchema,\n responseSchema: createWorkflowRunResponseSchema,\n summary: 'Resume action without waiting',\n description:\n 'Resumes a suspended action execution without waiting (fire-and-forget) and returns immediately with the runId. The action continues executing in the background.',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, step, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Resuming agent builder action without waiting', { actionId, runId, step });\n\n return await workflows.RESUME_NO_WAIT_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error resuming agent builder action without waiting', { error, actionId });\n return handleError(error, 'Error resuming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const RESUME_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/resume',\n responseType: 'json',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: resumeAgentBuilderBodySchema,\n responseSchema: workflowControlResponseSchema,\n summary: 'Resume action',\n description: 'Resumes a suspended action execution from a specific step',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, step, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Resuming agent builder action', { actionId, runId, step });\n\n return await workflows.RESUME_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error resuming agent builder action', { error, actionId });\n return handleError(error, 'Error resuming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/resume-stream',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: resumeAgentBuilderBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Resume action stream',\n description: 'Resumes a suspended action execution and continues streaming results',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, step, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Resuming agent builder action stream', { actionId, runId, step });\n\n return await workflows.RESUME_STREAM_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error resuming agent builder action stream', { error, actionId });\n return handleError(error, 'Error resuming agent builder action stream');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/runs/:runId/cancel',\n responseType: 'json',\n pathParamSchema: actionRunPathParams,\n responseSchema: workflowControlResponseSchema,\n summary: 'Cancel action run',\n description: 'Cancels an in-progress action execution',\n tags: ['Agent Builder'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Cancelling agent builder action run', { actionId, runId });\n\n return await workflows.CANCEL_WORKFLOW_RUN_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error cancelling agent builder action run', { error, actionId });\n return handleError(error, 'Error cancelling agent builder action run');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\n// Legacy routes (deprecated)\nexport const STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/stream-legacy',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n bodySchema: streamLegacyAgentBuilderBodySchema,\n responseSchema: streamResponseSchema,\n summary: '[DEPRECATED] Stream agent-builder action with legacy format',\n description:\n 'Legacy endpoint for streaming agent-builder action execution. Use /agent-builder/:actionId/stream instead.',\n tags: ['Agent Builder', 'Legacy'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId, requestContext } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Streaming agent builder action (legacy)', { actionId, runId });\n\n return await workflows.STREAM_LEGACY_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n requestContext,\n });\n } catch (error) {\n logger.error('Error streaming agent builder action (legacy)', { error, actionId });\n return handleError(error, 'Error streaming agent builder action');\n } finally {\n WorkflowRegistry.cleanup();\n }\n },\n});\n\nexport const OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-builder/:actionId/observe-stream-legacy',\n responseType: 'stream',\n pathParamSchema: actionIdPathParams,\n queryParamSchema: runIdSchema,\n responseSchema: streamResponseSchema,\n summary: '[DEPRECATED] Observe agent-builder action stream with legacy format',\n description:\n 'Legacy endpoint for observing agent-builder action stream. Use /agent-builder/:actionId/observe instead.',\n tags: ['Agent Builder', 'Legacy'],\n requiresAuth: true,\n handler: async ctx => {\n const { mastra, actionId, runId } = ctx;\n const logger = mastra.getLogger();\n try {\n await registerAgentBuilderWorkflows(mastra);\n\n if (actionId && !WorkflowRegistry.isAgentBuilderWorkflow(actionId)) {\n throw new HTTPException(400, { message: `Invalid agent-builder action: ${actionId}` });\n }\n\n logger.info('Observing agent builder action stream (legacy)', { actionId, runId });\n\n return await workflows.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE.handler({\n ...ctx,\n workflowId: actionId,\n });\n } catch (error) {\n logger.error('Error observing agent builder action stream (legacy)', { error, actionId });\n return handleError(error, 'Error observing agent builder action stream');\n } finally {\n WorkflowRegistry.cleanup();\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

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