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

@mastra/server

Package Overview
Dependencies
Maintainers
7
Versions
1111
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.50.0-alpha.0
to
1.50.0-alpha.1
+56
dist/api-schema-manifest-EW55OSKH.js
import { SERVER_ROUTES } from './chunk-ZAK4IF2O.js';
import { schemaToJsonSchema } from './chunk-PIKPS6Q6.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-EW55OSKH.js.map
//# sourceMappingURL=api-schema-manifest-EW55OSKH.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-EW55OSKH.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 chunk5NLRYTA7_cjs = require('./chunk-5NLRYTA7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.cjs');
// src/server/server-adapter/api-schema-manifest.ts
function convertSchema(schema) {
return schema ? chunkN54Q3AQR_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 = chunk5NLRYTA7_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-YT3AMGZD.cjs.map
//# sourceMappingURL=api-schema-manifest-YT3AMGZD.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-YT3AMGZD.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 chunkO4O2EJF7_cjs = require('./chunk-O4O2EJF7.cjs');
var chunkJFPYHABB_cjs = require('./chunk-JFPYHABB.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
var chunkW36PYFFL_cjs = require('./chunk-W36PYFFL.cjs');
var chunkDRDVJ35H_cjs = require('./chunk-DRDVJ35H.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 = chunkN54Q3AQR_cjs.createRoute({
method: "PUT",
path: "/stored/agents/:storedAgentId/favorite",
responseType: "json",
pathParamSchema: chunkW36PYFFL_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 chunkJFPYHABB_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(agent, await chunkDRDVJ35H_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 = chunkN54Q3AQR_cjs.createRoute({
method: "DELETE",
path: "/stored/agents/:storedAgentId/favorite",
responseType: "json",
pathParamSchema: chunkW36PYFFL_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 chunkJFPYHABB_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(agent, await chunkDRDVJ35H_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-22BLV4RK.cjs.map
//# sourceMappingURL=chunk-22BLV4RK.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-22BLV4RK.cjs","sourcesContent":["import { HTTPException } from '../http-exception';\nimport { favoriteToggleResponseSchema } from '../schemas/favorites';\nimport { storedAgentIdPathParams } from '../schemas/stored-agents';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { assertReadAccess, getCallerAuthorId } from './authorship';\nimport { requireBuilderFeature } from './editor-builder';\nimport { handleError } from './error';\n\n/**\n * Resolves the storage and favorites domains, throwing 500 if unavailable.\n */\nasync function getFavoritesContext(mastra: Parameters<typeof requireBuilderFeature>[0]) {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n const agentStore = await storage.getStore('agents');\n if (!agentStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) {\n throw new HTTPException(500, { message: 'Favorites storage domain is not available' });\n }\n return { agentStore, favoritesStore };\n}\n\n/**\n * PUT /stored/agents/:storedAgentId/favorite\n */\nexport const FAVORITE_STORED_AGENT_ROUTE = createRoute({\n method: 'PUT',\n path: '/stored/agents/:storedAgentId/favorite',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Favorite a stored agent',\n description: 'Marks the stored agent as favorited by the calling user. Idempotent.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra, requestContext, storedAgentId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { agentStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const agent = await agentStore.getById(storedAgentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller cannot read the agent (private + not owner/admin).\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: agent });\n\n const result = await favoritesStore.favorite({\n userId: callerId,\n entityType: 'agent',\n entityId: storedAgentId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error favoriting stored agent');\n }\n },\n});\n\n/**\n * DELETE /stored/agents/:storedAgentId/favorite\n */\nexport const UNFAVORITE_STORED_AGENT_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/agents/:storedAgentId/favorite',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Unfavorite a stored agent',\n description: 'Removes the caller’s favorite from the stored agent. Idempotent.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra, requestContext, storedAgentId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { agentStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const agent = await agentStore.getById(storedAgentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: agent });\n\n const result = await favoritesStore.unfavorite({\n userId: callerId,\n entityType: 'agent',\n entityId: storedAgentId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error unfavoriting stored agent');\n }\n },\n});\n"]}
import { getAgentFromSystem } from './chunk-6JZFDXJ2.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-QIQWHDPH.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.js';
import { standardSchemaToJSONSchema, toStandardSchema5 } from './chunk-YZAQOU2I.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-2RM335Q2.js.map
//# sourceMappingURL=chunk-2RM335Q2.js.map
{"version":3,"sources":["../src/server/handlers/tools.ts"],"names":["tool"],"mappings":"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","file":"chunk-2RM335Q2.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 { conversationObjectSchema, createConversationBodySchema, conversationIdPathParams, conversationItemsListSchema, conversationDeletedSchema } from './chunk-LEKVIHSE.js';
import { mapMastraMessagesToConversationItems } from './chunk-TLLV2JP5.js';
import { getAgentMemoryStore, findConversationThreadAcrossAgents } from './chunk-L4DD3HSB.js';
import { getAgentFromSystem } from './chunk-6JZFDXJ2.js';
import { MastraFGAPermissions, getEffectiveResourceId } from './chunk-JBSUT5XF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-2YA4RQFD.js.map
//# sourceMappingURL=chunk-2YA4RQFD.js.map
{"version":3,"sources":["../src/server/handlers/conversations.ts"],"names":[],"mappings":"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","file":"chunk-2YA4RQFD.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"]}

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

'use strict';
var chunkAKJAQVZ3_cjs = require('./chunk-AKJAQVZ3.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 = chunkN54Q3AQR_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-YT3AMGZD.cjs');
return buildApiSchemaManifest();
}
});
var GET_SYSTEM_PACKAGES_ROUTE = chunkN54Q3AQR_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-4D4HXQZQ.cjs.map
//# sourceMappingURL=chunk-4D4HXQZQ.cjs.map
{"version":3,"sources":["../src/server/handlers/system.ts"],"names":["createRoute","apiSchemaManifestResponseSchema","systemPackagesResponseSchema","readFileSync","handleError"],"mappings":"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","file":"chunk-4D4HXQZQ.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 chunkSQQY4SMT_cjs = require('./chunk-SQQY4SMT.cjs');
var chunkX6EAMRBA_cjs = require('./chunk-X6EAMRBA.cjs');
var chunkGJBHQJBK_cjs = require('./chunk-GJBHQJBK.cjs');
var chunk4D4HXQZQ_cjs = require('./chunk-4D4HXQZQ.cjs');
var chunkIEE5MCG5_cjs = require('./chunk-IEE5MCG5.cjs');
var chunkN4IIUIJS_cjs = require('./chunk-N4IIUIJS.cjs');
var chunk22BLV4RK_cjs = require('./chunk-22BLV4RK.cjs');
var chunkV4CUA3V6_cjs = require('./chunk-V4CUA3V6.cjs');
var chunkYKY2YBJI_cjs = require('./chunk-YKY2YBJI.cjs');
var chunkUHKWQQBG_cjs = require('./chunk-UHKWQQBG.cjs');
var chunkLTQYCKDT_cjs = require('./chunk-LTQYCKDT.cjs');
var chunkXXNADDFD_cjs = require('./chunk-XXNADDFD.cjs');
var chunkYZ6PW23L_cjs = require('./chunk-YZ6PW23L.cjs');
var chunkHR4F4XZV_cjs = require('./chunk-HR4F4XZV.cjs');
var chunk7XZQUQEO_cjs = require('./chunk-7XZQUQEO.cjs');
var chunkVZ7EXKEF_cjs = require('./chunk-VZ7EXKEF.cjs');
var chunkVCCMOFQR_cjs = require('./chunk-VCCMOFQR.cjs');
var chunkJFPYHABB_cjs = require('./chunk-JFPYHABB.cjs');
var chunkXTB6XXHH_cjs = require('./chunk-XTB6XXHH.cjs');
var chunk347OHR7U_cjs = require('./chunk-347OHR7U.cjs');
var chunkUIAQYIDW_cjs = require('./chunk-UIAQYIDW.cjs');
var chunk4ATFZDHI_cjs = require('./chunk-4ATFZDHI.cjs');
var chunkWGEIHQXI_cjs = require('./chunk-WGEIHQXI.cjs');
var chunkBQ2JQTKA_cjs = require('./chunk-BQ2JQTKA.cjs');
var chunkPMGFP7II_cjs = require('./chunk-PMGFP7II.cjs');
var chunk2VO3BDE5_cjs = require('./chunk-2VO3BDE5.cjs');
var chunkLOMJCP7B_cjs = require('./chunk-LOMJCP7B.cjs');
var chunkHV4BVD47_cjs = require('./chunk-HV4BVD47.cjs');
var chunkQRBSJM46_cjs = require('./chunk-QRBSJM46.cjs');
var chunk76YQAK7Q_cjs = require('./chunk-76YQAK7Q.cjs');
var chunk6KPMWM5N_cjs = require('./chunk-6KPMWM5N.cjs');
var chunkU52CKL4A_cjs = require('./chunk-U52CKL4A.cjs');
var chunk46D4LXPJ_cjs = require('./chunk-46D4LXPJ.cjs');
var chunkWMYGX6IW_cjs = require('./chunk-WMYGX6IW.cjs');
var chunkJJOGTXKN_cjs = require('./chunk-JJOGTXKN.cjs');
var chunkZT7ES4WM_cjs = require('./chunk-ZT7ES4WM.cjs');
var chunk3ZITEOQR_cjs = require('./chunk-3ZITEOQR.cjs');
var chunkTGKPSQB3_cjs = require('./chunk-TGKPSQB3.cjs');
var chunk6QZTZ5F3_cjs = require('./chunk-6QZTZ5F3.cjs');
var chunkRJPRSDIS_cjs = require('./chunk-RJPRSDIS.cjs');
var chunk57BKC4ZW_cjs = require('./chunk-57BKC4ZW.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 = [chunkZT7ES4WM_cjs.GET_AGENT_CARD_ROUTE, chunkZT7ES4WM_cjs.AGENT_EXECUTION_ROUTE];
// src/server/server-adapter/routes/agent-builder.ts
var AGENT_BUILDER_ROUTES = [
chunk6QZTZ5F3_cjs.LIST_AGENT_BUILDER_ACTIONS_ROUTE,
chunk6QZTZ5F3_cjs.GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,
chunk6QZTZ5F3_cjs.LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,
chunk6QZTZ5F3_cjs.GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,
chunk6QZTZ5F3_cjs.CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,
chunk6QZTZ5F3_cjs.STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunk6QZTZ5F3_cjs.STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
chunk6QZTZ5F3_cjs.START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
chunk6QZTZ5F3_cjs.START_AGENT_BUILDER_ACTION_RUN_ROUTE,
chunk6QZTZ5F3_cjs.OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunk6QZTZ5F3_cjs.OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
chunk6QZTZ5F3_cjs.RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
chunk6QZTZ5F3_cjs.RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,
chunk6QZTZ5F3_cjs.RESUME_AGENT_BUILDER_ACTION_ROUTE,
chunk6QZTZ5F3_cjs.RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunk6QZTZ5F3_cjs.CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE
];
// src/server/server-adapter/routes/agent-controller.ts
var AGENT_CONTROLLER_ROUTES = [
chunk57BKC4ZW_cjs.LIST_AGENT_CONTROLLERS_ROUTE,
chunk57BKC4ZW_cjs.LIST_AGENT_CONTROLLER_MODES_ROUTE,
chunk57BKC4ZW_cjs.LIST_AGENT_CONTROLLER_MODELS_ROUTE,
chunk57BKC4ZW_cjs.CREATE_AGENT_CONTROLLER_SESSION_ROUTE,
chunk57BKC4ZW_cjs.GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE,
chunk57BKC4ZW_cjs.LIST_AGENT_CONTROLLER_THREADS_ROUTE,
chunk57BKC4ZW_cjs.CREATE_AGENT_CONTROLLER_THREAD_ROUTE,
chunk57BKC4ZW_cjs.DELETE_AGENT_CONTROLLER_THREAD_ROUTE,
chunk57BKC4ZW_cjs.RENAME_AGENT_CONTROLLER_THREAD_ROUTE,
chunk57BKC4ZW_cjs.CLONE_AGENT_CONTROLLER_THREAD_ROUTE,
chunk57BKC4ZW_cjs.LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE,
chunk57BKC4ZW_cjs.STREAM_AGENT_CONTROLLER_SESSION_ROUTE,
chunk57BKC4ZW_cjs.SEND_AGENT_CONTROLLER_MESSAGE_ROUTE,
chunk57BKC4ZW_cjs.STEER_AGENT_CONTROLLER_SESSION_ROUTE,
chunk57BKC4ZW_cjs.FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE,
chunk57BKC4ZW_cjs.ABORT_AGENT_CONTROLLER_SESSION_ROUTE,
chunk57BKC4ZW_cjs.AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE,
chunk57BKC4ZW_cjs.AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE,
chunk57BKC4ZW_cjs.SWITCH_AGENT_CONTROLLER_MODE_ROUTE,
chunk57BKC4ZW_cjs.SWITCH_AGENT_CONTROLLER_MODEL_ROUTE,
chunk57BKC4ZW_cjs.SWITCH_AGENT_CONTROLLER_THREAD_ROUTE,
chunk57BKC4ZW_cjs.SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE,
chunk57BKC4ZW_cjs.GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE,
chunk57BKC4ZW_cjs.GET_AGENT_CONTROLLER_OM_RECORD_ROUTE,
chunk57BKC4ZW_cjs.SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE,
chunk57BKC4ZW_cjs.GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE,
chunk57BKC4ZW_cjs.GET_AGENT_CONTROLLER_GOAL_ROUTE,
chunk57BKC4ZW_cjs.SET_AGENT_CONTROLLER_GOAL_ROUTE,
chunk57BKC4ZW_cjs.UPDATE_AGENT_CONTROLLER_GOAL_ROUTE,
chunk57BKC4ZW_cjs.CLEAR_AGENT_CONTROLLER_GOAL_ROUTE,
chunk57BKC4ZW_cjs.GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE,
chunk57BKC4ZW_cjs.SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE,
chunk57BKC4ZW_cjs.SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE,
chunk57BKC4ZW_cjs.SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE
];
// src/server/server-adapter/routes/agents.ts
var AGENTS_ROUTES = [
// ============================================================================
// Agent Core Routes
// ============================================================================
chunk3ZITEOQR_cjs.LIST_AGENTS_ROUTE,
chunk3ZITEOQR_cjs.GET_PROVIDERS_ROUTE,
chunk3ZITEOQR_cjs.GET_AGENT_BY_ID_ROUTE,
chunk3ZITEOQR_cjs.CLONE_AGENT_ROUTE,
// ============================================================================
// Voice Routes
// ============================================================================
chunkPMGFP7II_cjs.GET_SPEAKERS_ROUTE,
chunkPMGFP7II_cjs.GET_SPEAKERS_DEPRECATED_ROUTE,
// ============================================================================
// Agent Execution Routes
// ============================================================================
chunk3ZITEOQR_cjs.GENERATE_AGENT_ROUTE,
chunk3ZITEOQR_cjs.GENERATE_AGENT_VNEXT_ROUTE,
chunk3ZITEOQR_cjs.STREAM_GENERATE_ROUTE,
chunk3ZITEOQR_cjs.STREAM_UNTIL_IDLE_GENERATE_ROUTE,
chunk3ZITEOQR_cjs.STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,
// ============================================================================
// Resumable Stream Routes
// ============================================================================
chunk3ZITEOQR_cjs.OBSERVE_AGENT_STREAM_ROUTE,
chunk3ZITEOQR_cjs.SEND_AGENT_MESSAGE_ROUTE,
chunk3ZITEOQR_cjs.QUEUE_AGENT_MESSAGE_ROUTE,
chunk3ZITEOQR_cjs.SEND_AGENT_SIGNAL_ROUTE,
chunk3ZITEOQR_cjs.ABORT_AGENT_THREAD_ROUTE,
chunk3ZITEOQR_cjs.SUBSCRIBE_AGENT_THREAD_ROUTE,
// ============================================================================
// Tool Routes
// ============================================================================
chunkLOMJCP7B_cjs.EXECUTE_AGENT_TOOL_ROUTE,
chunk3ZITEOQR_cjs.APPROVE_TOOL_CALL_ROUTE,
chunk3ZITEOQR_cjs.SEND_TOOL_APPROVAL_ROUTE,
chunk3ZITEOQR_cjs.LIST_SUSPENDED_RUNS_ROUTE,
chunk3ZITEOQR_cjs.DECLINE_TOOL_CALL_ROUTE,
chunk3ZITEOQR_cjs.RESUME_STREAM_ROUTE,
chunk3ZITEOQR_cjs.APPROVE_TOOL_CALL_GENERATE_ROUTE,
chunk3ZITEOQR_cjs.DECLINE_TOOL_CALL_GENERATE_ROUTE,
chunk3ZITEOQR_cjs.APPROVE_NETWORK_TOOL_CALL_ROUTE,
chunk3ZITEOQR_cjs.DECLINE_NETWORK_TOOL_CALL_ROUTE,
chunk3ZITEOQR_cjs.RESUME_STREAM_UNTIL_IDLE_ROUTE,
// ============================================================================
// Network Routes
// ============================================================================
chunk3ZITEOQR_cjs.STREAM_NETWORK_ROUTE,
// ============================================================================
// Model Management Routes
// ============================================================================
chunk3ZITEOQR_cjs.UPDATE_AGENT_MODEL_ROUTE,
chunk3ZITEOQR_cjs.RESET_AGENT_MODEL_ROUTE,
chunk3ZITEOQR_cjs.REORDER_AGENT_MODEL_LIST_ROUTE,
chunk3ZITEOQR_cjs.UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,
// ============================================================================
// Instruction Enhancement Routes
// ============================================================================
chunk3ZITEOQR_cjs.ENHANCE_INSTRUCTIONS_ROUTE,
// ============================================================================
// Agent Tool Routes
// ============================================================================
chunkLOMJCP7B_cjs.GET_AGENT_TOOL_ROUTE,
// ============================================================================
// Agent Skill Routes
// ============================================================================
chunk3ZITEOQR_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
// ============================================================================
chunk3ZITEOQR_cjs.STREAM_VNEXT_DEPRECATED_ROUTE,
chunk3ZITEOQR_cjs.STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,
chunk3ZITEOQR_cjs.STREAM_UI_MESSAGE_DEPRECATED_ROUTE
];
// src/server/server-adapter/routes/background-tasks.ts
var BACKGROUND_TASK_ROUTES = [
chunkUIAQYIDW_cjs.BACKGROUND_TASK_STREAM_ROUTE,
chunkUIAQYIDW_cjs.LIST_BACKGROUND_TASKS_ROUTE,
chunkUIAQYIDW_cjs.GET_BACKGROUND_TASK_ROUTE
];
// src/server/server-adapter/routes/channels.ts
var CHANNELS_ROUTES = [
chunkWGEIHQXI_cjs.LIST_CHANNEL_PLATFORMS_ROUTE,
chunkWGEIHQXI_cjs.LIST_CHANNEL_INSTALLATIONS_ROUTE,
chunkWGEIHQXI_cjs.CONNECT_CHANNEL_ROUTE,
chunkWGEIHQXI_cjs.DISCONNECT_CHANNEL_ROUTE
];
// src/server/server-adapter/routes/conversations.ts
var CONVERSATIONS_ROUTES = [
chunkWMYGX6IW_cjs.CREATE_CONVERSATION_ROUTE,
chunkWMYGX6IW_cjs.GET_CONVERSATION_ROUTE,
chunkWMYGX6IW_cjs.GET_CONVERSATION_ITEMS_ROUTE,
chunkWMYGX6IW_cjs.DELETE_CONVERSATION_ROUTE
];
// src/server/server-adapter/routes/datasets.ts
var DATASETS_ROUTES = [
// Dataset CRUD
chunkVCCMOFQR_cjs.LIST_DATASETS_ROUTE,
chunkVCCMOFQR_cjs.CREATE_DATASET_ROUTE,
chunkVCCMOFQR_cjs.GET_DATASET_ROUTE,
chunkVCCMOFQR_cjs.UPDATE_DATASET_ROUTE,
chunkVCCMOFQR_cjs.DELETE_DATASET_ROUTE,
// Item list and add
chunkVCCMOFQR_cjs.LIST_ITEMS_ROUTE,
chunkVCCMOFQR_cjs.ADD_ITEM_ROUTE,
// Batch operations - MUST come before item-specific routes to avoid /items/batch matching /items/:itemId
chunkVCCMOFQR_cjs.BATCH_INSERT_ITEMS_ROUTE,
chunkVCCMOFQR_cjs.BATCH_DELETE_ITEMS_ROUTE,
// Item-specific CRUD (uses :itemId param)
chunkVCCMOFQR_cjs.GET_ITEM_ROUTE,
chunkVCCMOFQR_cjs.UPDATE_ITEM_ROUTE,
chunkVCCMOFQR_cjs.DELETE_ITEM_ROUTE,
// Version operations
chunkVCCMOFQR_cjs.LIST_DATASET_VERSIONS_ROUTE,
chunkVCCMOFQR_cjs.LIST_ITEM_VERSIONS_ROUTE,
chunkVCCMOFQR_cjs.GET_ITEM_VERSION_ROUTE,
// All experiments (cross-dataset) - MUST come before dataset-scoped experiments
chunkVCCMOFQR_cjs.LIST_ALL_EXPERIMENTS_ROUTE,
// Experiment review summary (cross-dataset) - MUST come before dataset-scoped experiments
chunkVCCMOFQR_cjs.EXPERIMENT_REVIEW_SUMMARY_ROUTE,
// Experiment operations (dataset-scoped)
chunkVCCMOFQR_cjs.LIST_EXPERIMENTS_ROUTE,
chunkVCCMOFQR_cjs.TRIGGER_EXPERIMENT_ROUTE,
chunkVCCMOFQR_cjs.GET_EXPERIMENT_ROUTE,
chunkVCCMOFQR_cjs.LIST_EXPERIMENT_RESULTS_ROUTE,
chunkVCCMOFQR_cjs.UPDATE_EXPERIMENT_RESULT_ROUTE,
// Analytics
chunkVCCMOFQR_cjs.COMPARE_EXPERIMENTS_ROUTE,
// AI generation
chunkVCCMOFQR_cjs.GENERATE_ITEMS_ROUTE,
// Failure analysis
chunkVCCMOFQR_cjs.CLUSTER_FAILURES_ROUTE
];
// src/server/server-adapter/routes/editor-builder.ts
var EDITOR_BUILDER_ROUTES = [
chunkJFPYHABB_cjs.GET_EDITOR_BUILDER_SETTINGS_ROUTE,
chunkJFPYHABB_cjs.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE,
chunkJFPYHABB_cjs.GET_INFRASTRUCTURE_STATUS_ROUTE,
chunk4ATFZDHI_cjs.LIST_BUILDER_REGISTRIES_ROUTE,
chunk4ATFZDHI_cjs.BUILDER_REGISTRY_SEARCH_ROUTE,
chunk4ATFZDHI_cjs.BUILDER_REGISTRY_POPULAR_ROUTE,
chunk4ATFZDHI_cjs.BUILDER_REGISTRY_PREVIEW_ROUTE,
chunk4ATFZDHI_cjs.BUILDER_REGISTRY_INSTALL_ROUTE
];
// src/server/server-adapter/routes/heartbeats.ts
var HEARTBEATS_ROUTES = [
chunkXTB6XXHH_cjs.LIST_HEARTBEATS_ROUTE,
chunkXTB6XXHH_cjs.GET_HEARTBEAT_ROUTE,
chunkXTB6XXHH_cjs.CREATE_HEARTBEAT_ROUTE,
chunkXTB6XXHH_cjs.UPDATE_HEARTBEAT_ROUTE,
chunkXTB6XXHH_cjs.DELETE_HEARTBEAT_ROUTE,
chunkXTB6XXHH_cjs.PAUSE_HEARTBEAT_ROUTE,
chunkXTB6XXHH_cjs.RESUME_HEARTBEAT_ROUTE,
chunkXTB6XXHH_cjs.RUN_HEARTBEAT_ROUTE
];
// src/server/server-adapter/routes/legacy.ts
var LEGACY_ROUTES = [
// ============================================================================
// Legacy Agent Routes
// ============================================================================
chunk3ZITEOQR_cjs.GENERATE_LEGACY_ROUTE,
chunk3ZITEOQR_cjs.STREAM_GENERATE_LEGACY_ROUTE,
// ============================================================================
// Legacy Workflow Routes
// ============================================================================
chunkRJPRSDIS_cjs.STREAM_LEGACY_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE
];
// src/server/server-adapter/routes/logs.ts
var LOGS_ROUTES = [chunkJJOGTXKN_cjs.LIST_LOG_TRANSPORTS_ROUTE, chunkJJOGTXKN_cjs.LIST_LOGS_ROUTE, chunkJJOGTXKN_cjs.LIST_LOGS_BY_RUN_ID_ROUTE];
// src/server/server-adapter/routes/mcp.ts
var MCP_ROUTES = [
// ============================================================================
// MCP Server Registry Routes
// ============================================================================
chunk76YQAK7Q_cjs.LIST_MCP_SERVERS_ROUTE,
chunk76YQAK7Q_cjs.GET_MCP_SERVER_DETAIL_ROUTE,
// ============================================================================
// MCP Server Tool Routes
// ============================================================================
chunk76YQAK7Q_cjs.LIST_MCP_SERVER_TOOLS_ROUTE,
chunk76YQAK7Q_cjs.GET_MCP_SERVER_TOOL_DETAIL_ROUTE,
chunk76YQAK7Q_cjs.EXECUTE_MCP_SERVER_TOOL_ROUTE,
// ============================================================================
// MCP Server Resource Routes
// ============================================================================
chunk76YQAK7Q_cjs.LIST_MCP_SERVER_RESOURCES_ROUTE,
chunk76YQAK7Q_cjs.READ_MCP_SERVER_RESOURCE_ROUTE,
// ============================================================================
// MCP Transport Routes (handled by adapters)
// ============================================================================
chunk76YQAK7Q_cjs.MCP_HTTP_TRANSPORT_ROUTE,
chunk76YQAK7Q_cjs.MCP_SSE_TRANSPORT_ROUTE,
chunk76YQAK7Q_cjs.MCP_SSE_MESSAGES_ROUTE
];
// src/server/server-adapter/routes/memory.ts
var MEMORY_ROUTES = [
chunk6KPMWM5N_cjs.GET_MEMORY_STATUS_ROUTE,
chunk6KPMWM5N_cjs.GET_MEMORY_CONFIG_ROUTE,
chunk6KPMWM5N_cjs.GET_OBSERVATIONAL_MEMORY_ROUTE,
chunk6KPMWM5N_cjs.AWAIT_BUFFER_STATUS_ROUTE,
chunk6KPMWM5N_cjs.LIST_THREADS_ROUTE,
chunk6KPMWM5N_cjs.GET_THREAD_BY_ID_ROUTE,
chunk6KPMWM5N_cjs.LIST_MESSAGES_ROUTE,
chunk6KPMWM5N_cjs.GET_WORKING_MEMORY_ROUTE,
chunk6KPMWM5N_cjs.SAVE_MESSAGES_ROUTE,
chunk6KPMWM5N_cjs.CREATE_THREAD_ROUTE,
chunk6KPMWM5N_cjs.UPDATE_THREAD_ROUTE,
chunk6KPMWM5N_cjs.DELETE_THREAD_ROUTE,
chunk6KPMWM5N_cjs.CLONE_THREAD_ROUTE,
chunk6KPMWM5N_cjs.UPDATE_WORKING_MEMORY_ROUTE,
chunk6KPMWM5N_cjs.DELETE_MESSAGES_ROUTE,
chunk6KPMWM5N_cjs.SEARCH_MEMORY_ROUTE,
chunk6KPMWM5N_cjs.GET_MEMORY_STATUS_NETWORK_ROUTE,
chunk6KPMWM5N_cjs.LIST_THREADS_NETWORK_ROUTE,
chunk6KPMWM5N_cjs.GET_THREAD_BY_ID_NETWORK_ROUTE,
chunk6KPMWM5N_cjs.LIST_MESSAGES_NETWORK_ROUTE,
chunk6KPMWM5N_cjs.SAVE_MESSAGES_NETWORK_ROUTE,
chunk6KPMWM5N_cjs.CREATE_THREAD_NETWORK_ROUTE,
chunk6KPMWM5N_cjs.UPDATE_THREAD_NETWORK_ROUTE,
chunk6KPMWM5N_cjs.DELETE_THREAD_NETWORK_ROUTE,
chunk6KPMWM5N_cjs.DELETE_MESSAGES_NETWORK_ROUTE
];
// src/server/server-adapter/routes/observability.ts
var OBSERVABILITY_ROUTES = [
// Legacy
chunkU52CKL4A_cjs.LIST_TRACES_ROUTE,
chunkU52CKL4A_cjs.LIST_TRACES_LIGHT_ROUTE,
chunkU52CKL4A_cjs.LIST_BRANCHES_ROUTE,
chunkU52CKL4A_cjs.GET_BRANCH_ROUTE,
chunkU52CKL4A_cjs.GET_TRACE_ROUTE,
chunkU52CKL4A_cjs.GET_TRACE_LIGHT_ROUTE,
chunkU52CKL4A_cjs.GET_SPAN_ROUTE,
chunkU52CKL4A_cjs.GET_TRACE_TRAJECTORY_ROUTE,
chunkU52CKL4A_cjs.SCORE_TRACES_ROUTE,
chunkU52CKL4A_cjs.LIST_SCORES_BY_SPAN_ROUTE,
// New observability routes
chunk46D4LXPJ_cjs.LIST_METRICS,
chunk46D4LXPJ_cjs.LIST_LOGS,
chunk46D4LXPJ_cjs.LIST_SCORES,
chunk46D4LXPJ_cjs.CREATE_SCORE,
chunk46D4LXPJ_cjs.GET_SCORE,
chunk46D4LXPJ_cjs.GET_SCORE_AGGREGATE,
chunk46D4LXPJ_cjs.GET_SCORE_BREAKDOWN,
chunk46D4LXPJ_cjs.GET_SCORE_TIME_SERIES,
chunk46D4LXPJ_cjs.GET_SCORE_PERCENTILES,
chunk46D4LXPJ_cjs.LIST_FEEDBACK,
chunk46D4LXPJ_cjs.CREATE_FEEDBACK,
chunk46D4LXPJ_cjs.GET_FEEDBACK_AGGREGATE,
chunk46D4LXPJ_cjs.GET_FEEDBACK_BREAKDOWN,
chunk46D4LXPJ_cjs.GET_FEEDBACK_TIME_SERIES,
chunk46D4LXPJ_cjs.GET_FEEDBACK_PERCENTILES,
chunk46D4LXPJ_cjs.GET_METRIC_AGGREGATE,
chunk46D4LXPJ_cjs.GET_METRIC_BREAKDOWN,
chunk46D4LXPJ_cjs.GET_METRIC_TIME_SERIES,
chunk46D4LXPJ_cjs.GET_METRIC_PERCENTILES,
chunk46D4LXPJ_cjs.GET_METRIC_NAMES,
chunk46D4LXPJ_cjs.GET_METRIC_LABEL_KEYS,
chunk46D4LXPJ_cjs.GET_METRIC_LABEL_VALUES,
chunk46D4LXPJ_cjs.GET_ENTITY_TYPES,
chunk46D4LXPJ_cjs.GET_ENTITY_NAMES,
chunk46D4LXPJ_cjs.GET_SERVICE_NAMES,
chunk46D4LXPJ_cjs.GET_ENVIRONMENTS,
chunk46D4LXPJ_cjs.GET_TAGS
];
// src/server/server-adapter/routes/processor-providers.ts
var PROCESSOR_PROVIDER_ROUTES = [chunkXXNADDFD_cjs.LIST_PROCESSOR_PROVIDERS_ROUTE, chunkXXNADDFD_cjs.GET_PROCESSOR_PROVIDER_ROUTE];
// src/server/server-adapter/routes/processors.ts
var PROCESSORS_ROUTES = [chunkYZ6PW23L_cjs.LIST_PROCESSORS_ROUTE, chunkYZ6PW23L_cjs.GET_PROCESSOR_BY_ID_ROUTE, chunkYZ6PW23L_cjs.EXECUTE_PROCESSOR_ROUTE];
// src/server/server-adapter/routes/responses.ts
var RESPONSES_ROUTES = [chunkQRBSJM46_cjs.CREATE_RESPONSE_ROUTE, chunkQRBSJM46_cjs.GET_RESPONSE_ROUTE, chunkQRBSJM46_cjs.DELETE_RESPONSE_ROUTE];
// src/server/server-adapter/routes/schedules.ts
var SCHEDULES_ROUTES = [
chunk7XZQUQEO_cjs.LIST_SCHEDULES_ROUTE,
chunk7XZQUQEO_cjs.GET_SCHEDULE_ROUTE,
chunk7XZQUQEO_cjs.LIST_SCHEDULE_TRIGGERS_ROUTE,
chunk7XZQUQEO_cjs.PAUSE_SCHEDULE_ROUTE,
chunk7XZQUQEO_cjs.RESUME_SCHEDULE_ROUTE
];
// src/server/server-adapter/routes/scorers.ts
var SCORES_ROUTES = [
chunkHV4BVD47_cjs.LIST_SCORERS_ROUTE,
chunkHV4BVD47_cjs.GET_SCORER_ROUTE,
chunkHV4BVD47_cjs.LIST_SCORES_BY_RUN_ID_ROUTE,
chunkHV4BVD47_cjs.LIST_SCORES_BY_SCORER_ID_ROUTE,
chunkHV4BVD47_cjs.LIST_SCORES_BY_ENTITY_ID_ROUTE,
chunkHV4BVD47_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.
// ============================================================================
chunkV4CUA3V6_cjs.LIST_STORED_AGENTS_ROUTE,
chunkV4CUA3V6_cjs.PREVIEW_INSTRUCTIONS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkV4CUA3V6_cjs.GET_STORED_AGENT_DEPENDENTS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE (longer literal)
chunkV4CUA3V6_cjs.EXPORT_STORED_AGENT_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkV4CUA3V6_cjs.OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkV4CUA3V6_cjs.GET_STORED_AGENT_ROUTE,
chunkV4CUA3V6_cjs.CREATE_STORED_AGENT_ROUTE,
chunkV4CUA3V6_cjs.UPDATE_STORED_AGENT_ROUTE,
chunkV4CUA3V6_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.
// ============================================================================
chunk347OHR7U_cjs.LIST_AGENT_VERSIONS_ROUTE,
chunk347OHR7U_cjs.CREATE_AGENT_VERSION_ROUTE,
chunk347OHR7U_cjs.COMPARE_AGENT_VERSIONS_ROUTE,
// Must be before GET_AGENT_VERSION_ROUTE
chunk347OHR7U_cjs.GET_AGENT_VERSION_ROUTE,
chunk347OHR7U_cjs.ACTIVATE_AGENT_VERSION_ROUTE,
chunk347OHR7U_cjs.RESTORE_AGENT_VERSION_ROUTE,
chunk347OHR7U_cjs.DELETE_AGENT_VERSION_ROUTE,
// ============================================================================
// Favorites (EE)
// ============================================================================
chunk22BLV4RK_cjs.FAVORITE_STORED_AGENT_ROUTE,
chunk22BLV4RK_cjs.UNFAVORITE_STORED_AGENT_ROUTE
];
// src/server/server-adapter/routes/stored-mcp-clients.ts
var STORED_MCP_CLIENTS_ROUTES = [
// Stored MCP Clients CRUD Routes
chunkYKY2YBJI_cjs.LIST_STORED_MCP_CLIENTS_ROUTE,
chunkYKY2YBJI_cjs.GET_STORED_MCP_CLIENT_ROUTE,
chunkYKY2YBJI_cjs.CREATE_STORED_MCP_CLIENT_ROUTE,
chunkYKY2YBJI_cjs.UPDATE_STORED_MCP_CLIENT_ROUTE,
chunkYKY2YBJI_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.
chunkVZ7EXKEF_cjs.LIST_MCP_CLIENT_VERSIONS_ROUTE,
chunkVZ7EXKEF_cjs.CREATE_MCP_CLIENT_VERSION_ROUTE,
chunkVZ7EXKEF_cjs.COMPARE_MCP_CLIENT_VERSIONS_ROUTE,
chunkVZ7EXKEF_cjs.GET_MCP_CLIENT_VERSION_ROUTE,
chunkVZ7EXKEF_cjs.ACTIVATE_MCP_CLIENT_VERSION_ROUTE,
chunkVZ7EXKEF_cjs.RESTORE_MCP_CLIENT_VERSION_ROUTE,
chunkVZ7EXKEF_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
chunkUHKWQQBG_cjs.LIST_STORED_PROMPT_BLOCKS_ROUTE,
chunkUHKWQQBG_cjs.GET_STORED_PROMPT_BLOCK_ROUTE,
chunkUHKWQQBG_cjs.CREATE_STORED_PROMPT_BLOCK_ROUTE,
chunkUHKWQQBG_cjs.UPDATE_STORED_PROMPT_BLOCK_ROUTE,
chunkUHKWQQBG_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.
chunkHR4F4XZV_cjs.LIST_PROMPT_BLOCK_VERSIONS_ROUTE,
chunkHR4F4XZV_cjs.CREATE_PROMPT_BLOCK_VERSION_ROUTE,
chunkHR4F4XZV_cjs.COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE,
chunkHR4F4XZV_cjs.GET_PROMPT_BLOCK_VERSION_ROUTE,
chunkHR4F4XZV_cjs.ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE,
chunkHR4F4XZV_cjs.RESTORE_PROMPT_BLOCK_VERSION_ROUTE,
chunkHR4F4XZV_cjs.DELETE_PROMPT_BLOCK_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-scorers.ts
var STORED_SCORERS_ROUTES = [
// Stored Scorers CRUD Routes
chunkLTQYCKDT_cjs.LIST_STORED_SCORERS_ROUTE,
chunkLTQYCKDT_cjs.GET_STORED_SCORER_ROUTE,
chunkLTQYCKDT_cjs.CREATE_STORED_SCORER_ROUTE,
chunkLTQYCKDT_cjs.UPDATE_STORED_SCORER_ROUTE,
chunkLTQYCKDT_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.
chunkN4IIUIJS_cjs.LIST_SCORER_VERSIONS_ROUTE,
chunkN4IIUIJS_cjs.CREATE_SCORER_VERSION_ROUTE,
chunkN4IIUIJS_cjs.COMPARE_SCORER_VERSIONS_ROUTE,
chunkN4IIUIJS_cjs.GET_SCORER_VERSION_ROUTE,
chunkN4IIUIJS_cjs.ACTIVATE_SCORER_VERSION_ROUTE,
chunkN4IIUIJS_cjs.RESTORE_SCORER_VERSION_ROUTE,
chunkN4IIUIJS_cjs.DELETE_SCORER_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-skills.ts
var STORED_SKILLS_ROUTES = [
// Stored Skills CRUD Routes
chunkX6EAMRBA_cjs.LIST_STORED_SKILLS_ROUTE,
chunkX6EAMRBA_cjs.GET_STORED_SKILL_ROUTE,
chunkX6EAMRBA_cjs.CREATE_STORED_SKILL_ROUTE,
chunkX6EAMRBA_cjs.UPDATE_STORED_SKILL_ROUTE,
chunkX6EAMRBA_cjs.DELETE_STORED_SKILL_ROUTE,
// Publish
chunkX6EAMRBA_cjs.PUBLISH_STORED_SKILL_ROUTE,
// Favorites (EE)
chunkSQQY4SMT_cjs.FAVORITE_STORED_SKILL_ROUTE,
chunkSQQY4SMT_cjs.UNFAVORITE_STORED_SKILL_ROUTE
];
// src/server/server-adapter/routes/stored-workspaces.ts
var STORED_WORKSPACES_ROUTES = [
// Stored Workspaces CRUD Routes
chunkGJBHQJBK_cjs.LIST_STORED_WORKSPACES_ROUTE,
chunkGJBHQJBK_cjs.GET_STORED_WORKSPACE_ROUTE,
chunkGJBHQJBK_cjs.CREATE_STORED_WORKSPACE_ROUTE,
chunkGJBHQJBK_cjs.UPDATE_STORED_WORKSPACE_ROUTE,
chunkGJBHQJBK_cjs.DELETE_STORED_WORKSPACE_ROUTE
];
// src/server/server-adapter/routes/system.ts
var SYSTEM_ROUTES = [chunk4D4HXQZQ_cjs.GET_SYSTEM_PACKAGES_ROUTE, chunk4D4HXQZQ_cjs.GET_API_SCHEMA_ROUTE];
// src/server/server-adapter/routes/tool-providers.ts
var TOOL_PROVIDER_ROUTES = [
chunkIEE5MCG5_cjs.LIST_TOOL_PROVIDERS_ROUTE,
chunkIEE5MCG5_cjs.LIST_TOOL_PROVIDER_TOOLKITS_ROUTE,
chunkIEE5MCG5_cjs.LIST_TOOL_PROVIDER_TOOLS_ROUTE,
chunkIEE5MCG5_cjs.GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE,
chunkIEE5MCG5_cjs.AUTHORIZE_TOOL_PROVIDER_ROUTE,
chunkIEE5MCG5_cjs.GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE,
chunkIEE5MCG5_cjs.TOOL_PROVIDER_CONNECTION_STATUS_ROUTE,
chunkIEE5MCG5_cjs.LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE,
chunkIEE5MCG5_cjs.LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE,
chunkIEE5MCG5_cjs.DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE,
chunkIEE5MCG5_cjs.UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE,
chunkIEE5MCG5_cjs.GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE,
chunkIEE5MCG5_cjs.GET_TOOL_PROVIDER_HEALTH_ROUTE
];
// src/server/server-adapter/routes/tools.ts
var TOOLS_ROUTES = [chunkLOMJCP7B_cjs.LIST_TOOLS_ROUTE, chunkLOMJCP7B_cjs.GET_TOOL_BY_ID_ROUTE, chunkLOMJCP7B_cjs.EXECUTE_TOOL_ROUTE];
// src/server/server-adapter/routes/vectors.ts
var VECTORS_ROUTES = [
chunkBQ2JQTKA_cjs.UPSERT_VECTORS_ROUTE,
chunkBQ2JQTKA_cjs.CREATE_INDEX_ROUTE,
chunkBQ2JQTKA_cjs.QUERY_VECTORS_ROUTE,
chunkBQ2JQTKA_cjs.LIST_INDEXES_ROUTE,
chunkBQ2JQTKA_cjs.DESCRIBE_INDEX_ROUTE,
chunkBQ2JQTKA_cjs.DELETE_INDEX_ROUTE,
chunkBQ2JQTKA_cjs.LIST_VECTORS_ROUTE,
chunkBQ2JQTKA_cjs.LIST_EMBEDDERS_ROUTE
];
// src/server/server-adapter/routes/workflows.ts
var WORKFLOWS_ROUTES = [
chunkRJPRSDIS_cjs.LIST_WORKFLOWS_ROUTE,
chunkRJPRSDIS_cjs.GET_WORKFLOW_BY_ID_ROUTE,
chunkRJPRSDIS_cjs.LIST_WORKFLOW_RUNS_ROUTE,
chunkRJPRSDIS_cjs.GET_WORKFLOW_RUN_BY_ID_ROUTE,
chunkRJPRSDIS_cjs.DELETE_WORKFLOW_RUN_BY_ID_ROUTE,
chunkRJPRSDIS_cjs.CREATE_WORKFLOW_RUN_ROUTE,
chunkRJPRSDIS_cjs.STREAM_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.RESUME_STREAM_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.START_ASYNC_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.START_WORKFLOW_RUN_ROUTE,
chunkRJPRSDIS_cjs.OBSERVE_STREAM_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.RESUME_ASYNC_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.RESUME_NO_WAIT_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.RESUME_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.CANCEL_WORKFLOW_RUN_ROUTE,
chunkRJPRSDIS_cjs.TIME_TRAVEL_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.RESTART_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.RESTART_ASYNC_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,
chunkRJPRSDIS_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,
chunkRJPRSDIS_cjs.EXECUTE_WORKFLOW_STEP_ROUTE,
chunkRJPRSDIS_cjs.RECEIVE_WORKFLOW_EVENT_ROUTE
];
// src/server/server-adapter/routes/workspace.ts
var WORKSPACE_ROUTES = [
// List all workspaces route (at /api/workspaces)
chunk2VO3BDE5_cjs.LIST_WORKSPACES_ROUTE,
// Get workspace route (at /api/workspaces/:workspaceId)
chunk2VO3BDE5_cjs.GET_WORKSPACE_ROUTE,
// Filesystem routes (at /api/workspaces/:workspaceId/fs/*)
...chunk2VO3BDE5_cjs.WORKSPACE_FS_ROUTES,
// Search routes (at /api/workspaces/:workspaceId/search, /api/workspaces/:workspaceId/index)
...chunk2VO3BDE5_cjs.WORKSPACE_SEARCH_ROUTES,
// Skills routes (search must come before parameterized routes)
...chunk2VO3BDE5_cjs.WORKSPACE_SKILLS_ROUTES,
// skills.sh proxy routes (at /api/workspaces/:workspaceId/skills-sh/*)
...chunk2VO3BDE5_cjs.WORKSPACE_SKILLS_SH_ROUTES
];
// src/server/server-adapter/routes/index.ts
var SERVER_ROUTES = [
...AGENTS_ROUTES,
...chunkTGKPSQB3_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-5NLRYTA7.cjs.map
//# sourceMappingURL=chunk-5NLRYTA7.cjs.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

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 chunkRJPRSDIS_cjs = require('./chunk-RJPRSDIS.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 chunkDRDVJ35H_cjs = require('./chunk-DRDVJ35H.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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-GT5SXQBU.cjs').then((mod) => mod.agentBuilderWorkflows);
return agentBuilderWorkflowsPromise;
}
async function registerAgentBuilderWorkflows(mastra) {
const agentBuilderWorkflows = await loadAgentBuilderWorkflows();
chunkDRDVJ35H_cjs.WorkflowRegistry.registerTemporaryWorkflows(agentBuilderWorkflows, mastra);
return agentBuilderWorkflows;
}
var LIST_AGENT_BUILDER_ACTIONS_ROUTE = chunkN54Q3AQR_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var STREAM_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var START_ASYNC_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var START_AGENT_BUILDER_ACTION_RUN_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var RESUME_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_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-6QZTZ5F3.cjs.map
//# sourceMappingURL=chunk-6QZTZ5F3.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-6QZTZ5F3.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 { listScorersResponseSchema, scorerIdPathParams, scorerEntrySchema, scoresWithPaginationResponseSchema, listScoresByRunIdQuerySchema, listScoresByScorerIdQuerySchema, listScoresByEntityIdQuerySchema, entityPathParams, saveScoreResponseSchema, saveScoreBodySchema } from './chunk-I2LG5WYB.js';
import { getAgentFromSystem } from './chunk-6JZFDXJ2.js';
import { runIdSchema } from './chunk-2YY3EMMS.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-BTBWMU2H.js.map
//# sourceMappingURL=chunk-BTBWMU2H.js.map
{"version":3,"sources":["../src/server/handlers/scores.ts"],"names":[],"mappings":"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","file":"chunk-BTBWMU2H.js","sourcesContent":["import type { MastraScorerEntry, ScoreRowData } from '@mastra/core/evals';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { StoragePagination } from '@mastra/core/storage';\nimport { HTTPException } from '../http-exception';\nimport { runIdSchema } from '../schemas/common';\nimport {\n listScorersResponseSchema,\n scorerEntrySchema,\n scorerIdPathParams,\n entityPathParams,\n listScoresByRunIdQuerySchema,\n listScoresByScorerIdQuerySchema,\n listScoresByEntityIdQuerySchema,\n saveScoreBodySchema,\n scoresWithPaginationResponseSchema,\n saveScoreResponseSchema,\n} from '../schemas/scores';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport type { Context } from '../types';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\n\nasync function listScorersFromSystem({\n mastra,\n requestContext,\n}: Context & {\n requestContext: RequestContext;\n}) {\n const agents = mastra.listAgents();\n const workflows = mastra.listWorkflows();\n\n const scorersMap = new Map<\n string,\n MastraScorerEntry & {\n agentIds: string[];\n agentNames: string[];\n workflowIds: string[];\n isRegistered: boolean;\n source: 'code' | 'stored' | 'fs';\n }\n >();\n\n // Helper function to process an agent's scorers\n const processAgentScorers = async (agent: {\n id: string;\n name: string;\n listScorers: (typeof agents)[string]['listScorers'];\n }) => {\n const scorers =\n (await agent.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerId = scorer.scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)?.agentIds.push(agent.id);\n scorersMap.get(scorerId)?.agentNames.push(agent.name);\n } else {\n scorersMap.set(scorerId, {\n workflowIds: [],\n ...scorer,\n agentNames: [agent.name],\n agentIds: [agent.id],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n };\n\n // Process code-defined agents\n for (const [_, agent] of Object.entries(agents)) {\n await processAgentScorers(agent);\n }\n\n // Process stored agents (database-backed agents)\n try {\n const editor = mastra.getEditor();\n const storedAgentsResult = await editor?.agent.list();\n if (storedAgentsResult?.agents) {\n for (const storedAgentConfig of storedAgentsResult.agents) {\n try {\n const agent = await editor?.agent.getById(storedAgentConfig.id);\n if (agent) {\n await processAgentScorers(agent);\n }\n } catch {\n // Skip individual agents that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured - not all setups have storage\n }\n\n // Process stored scorers (standalone CMS-created scorers)\n try {\n const editor = mastra.getEditor();\n const storedScorersResult = await editor?.scorer.list();\n if (storedScorersResult?.scorerDefinitions) {\n for (const storedScorerConfig of storedScorersResult.scorerDefinitions) {\n try {\n await editor?.scorer.getById(storedScorerConfig.id);\n } catch {\n // Skip individual scorers that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured\n }\n\n for (const [workflowId, workflow] of Object.entries(workflows)) {\n const scorers =\n (await workflow.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerName = scorer.scorer.name;\n if (scorersMap.has(scorerName)) {\n scorersMap.get(scorerName)?.workflowIds.push(workflowId);\n } else {\n scorersMap.set(scorerName, {\n agentIds: [],\n agentNames: [],\n ...scorer,\n workflowIds: [workflowId],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n }\n\n const registeredScorers = await mastra.listScorers();\n for (const [_scorerId, scorer] of Object.entries(registeredScorers || {})) {\n const scorerId = scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)!.isRegistered = true;\n } else {\n scorersMap.set(scorerId, {\n scorer: scorer,\n agentIds: [],\n agentNames: [],\n workflowIds: [],\n isRegistered: true,\n source: scorer.source ?? 'code',\n });\n }\n }\n\n return Object.fromEntries(scorersMap.entries());\n}\n\n// Legacy function to get trace and span details\nfunction getTraceDetails(traceIdWithSpanId?: string) {\n if (!traceIdWithSpanId) {\n return {};\n }\n\n const [traceId, spanId] = traceIdWithSpanId.split('-');\n\n return {\n ...(traceId ? { traceId } : {}),\n ...(spanId ? { spanId } : {}),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_SCORERS_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers',\n responseType: 'json',\n responseSchema: listScorersResponseSchema,\n summary: 'List all scorers',\n description: 'Returns a list of all registered scorers with their configuration and associated agents and workflows',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n return scorers;\n }) as any,\n});\n\nexport const GET_SCORER_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n responseSchema: scorerEntrySchema.nullable(),\n summary: 'Get scorer by ID',\n description: 'Returns details for a specific scorer including its configuration and associations',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, scorerId, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n\n const scorer = scorers[scorerId];\n\n if (!scorer) {\n return null;\n }\n\n return scorer;\n }) as any,\n});\n\nexport const LIST_SCORES_BY_RUN_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/run/:runId',\n responseType: 'json',\n pathParamSchema: runIdSchema,\n queryParamSchema: listScoresByRunIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by run ID',\n description: 'Returns all scores for a specific execution run',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, runId, ...params }) => {\n try {\n const { page, perPage } = params;\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByRunId?.({\n runId,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by run id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SCORER_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorer/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n queryParamSchema: listScoresByScorerIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by scorer ID',\n description: 'Returns all scores generated by a specific scorer',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, scorerId, ...params }) => {\n try {\n const { page, perPage, entityId, entityType } = params;\n const filters = Object.fromEntries(Object.entries({ entityId, entityType }).filter(([_, v]) => v !== undefined));\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByScorerId?.({\n scorerId,\n pagination: { page: page ?? 0, perPage: perPage ?? 10 },\n ...filters,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by scorer id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_ENTITY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/entity/:entityType/:entityId',\n responseType: 'json',\n pathParamSchema: entityPathParams,\n queryParamSchema: listScoresByEntityIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by entity ID',\n description: 'Returns all scores for a specific entity (agent or workflow)',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, entityId, entityType, ...params }) => {\n try {\n const { page, perPage } = params;\n let entityIdToUse = entityId;\n\n if (entityType === 'AGENT') {\n const agent = await getAgentFromSystem({ mastra, agentId: entityId });\n entityIdToUse = agent.id;\n } else if (entityType === 'WORKFLOW') {\n const workflow = mastra.getWorkflowById(entityId);\n entityIdToUse = workflow.id;\n }\n\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scoresStore?.listScoresByEntityId?.({\n entityId: entityIdToUse,\n entityType,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by entity id');\n }\n },\n});\n\nexport const SAVE_SCORE_ROUTE = createRoute({\n method: 'POST',\n path: '/scores',\n responseType: 'json',\n bodySchema: saveScoreBodySchema,\n responseSchema: saveScoreResponseSchema,\n summary: 'Save score',\n description: 'Saves a new score record to storage',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const { score } = params as { score: ScoreRowData };\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const result = await scoresStore?.saveScore?.(score);\n if (!result) {\n throw new HTTPException(500, { message: 'Storage not configured' });\n }\n return result;\n } catch (error) {\n return handleError(error, 'Error saving score');\n }\n },\n});\n"]}
import { validateMetadataAvatarUrl } from './chunk-HMJL3C3H.js';
import { stripFavoriteFields, prepareFavoritesEnrichment, enrichOrStripFavorites } from './chunk-ZBTVLET6.js';
import { isBuilderFeatureEnabled } from './chunk-OJM7XIWW.js';
import { handleAutoVersioning } from './chunk-33QPJPK4.js';
import { prepareAuthorEnrichment, attachAuthor } from './chunk-4W5AVWZH.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-MPFUINWR.js';
import { statusQuerySchema } from './chunk-2YY3EMMS.js';
import { getStoredResourceScope, scopeStoredResourceMetadata, assertStoredResourceScope, toSlug } from './chunk-QIQWHDPH.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-C6ILFNRT.js.map
//# sourceMappingURL=chunk-C6ILFNRT.js.map

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

'use strict';
var chunkJFPYHABB_cjs = require('./chunk-JFPYHABB.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
// src/server/handlers/favorites-enrichment.ts
async function prepareFavoritesEnrichment(mastra, requestContext, entityType, entityIds) {
if (!await chunkJFPYHABB_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-CMZUE2F4.cjs.map
//# sourceMappingURL=chunk-CMZUE2F4.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-CMZUE2F4.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 { storedSkillIdPathParams } from './chunk-UIRQU4GW.js';
import { favoriteToggleResponseSchema } from './chunk-SFPN7SHZ.js';
import { requireBuilderFeature } from './chunk-OJM7XIWW.js';
import { getCallerAuthorId, assertReadAccess } from './chunk-SXZS6VZ3.js';
import { assertStoredResourceScope, getStoredResourceScope } from './chunk-QIQWHDPH.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-DJVFZVFX.js.map
//# sourceMappingURL=chunk-DJVFZVFX.js.map
{"version":3,"sources":["../src/server/handlers/stored-skill-favorites.ts"],"names":[],"mappings":"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","file":"chunk-DJVFZVFX.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

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

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

import { listStoredSkillsResponseSchema, listStoredSkillsQuerySchema, getStoredSkillResponseSchema, storedSkillIdPathParams, createStoredSkillResponseSchema, createStoredSkillBodySchema, updateStoredSkillResponseSchema, updateStoredSkillBodySchema, deleteStoredSkillResponseSchema, publishStoredSkillResponseSchema, publishStoredSkillBodySchema } from './chunk-UIRQU4GW.js';
import { stripFavoriteFields, prepareFavoritesEnrichment, enrichOrStripFavorites } from './chunk-ZBTVLET6.js';
import { isBuilderFeatureEnabled } from './chunk-OJM7XIWW.js';
import { resolveAuthorFilter, getCallerAuthorId, matchesAuthorFilter, assertReadAccess, assertWriteAccess } from './chunk-SXZS6VZ3.js';
import { getStoredResourceScope, scopeStoredResourceMetadata, assertStoredResourceScope, toSlug } from './chunk-QIQWHDPH.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-HCJQ55XP.js.map
//# sourceMappingURL=chunk-HCJQ55XP.js.map
{"version":3,"sources":["../src/server/handlers/stored-skills.ts"],"names":["annotated"],"mappings":"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","file":"chunk-HCJQ55XP.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 chunkMJ5QWRI2_cjs = require('./chunk-MJ5QWRI2.cjs');
var chunk3ZITEOQR_cjs = require('./chunk-3ZITEOQR.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 chunk3ZITEOQR_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 = chunkN54Q3AQR_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-HV4BVD47.cjs.map
//# sourceMappingURL=chunk-HV4BVD47.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-HV4BVD47.cjs","sourcesContent":["import type { MastraScorerEntry, ScoreRowData } from '@mastra/core/evals';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { StoragePagination } from '@mastra/core/storage';\nimport { HTTPException } from '../http-exception';\nimport { runIdSchema } from '../schemas/common';\nimport {\n listScorersResponseSchema,\n scorerEntrySchema,\n scorerIdPathParams,\n entityPathParams,\n listScoresByRunIdQuerySchema,\n listScoresByScorerIdQuerySchema,\n listScoresByEntityIdQuerySchema,\n saveScoreBodySchema,\n scoresWithPaginationResponseSchema,\n saveScoreResponseSchema,\n} from '../schemas/scores';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport type { Context } from '../types';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\n\nasync function listScorersFromSystem({\n mastra,\n requestContext,\n}: Context & {\n requestContext: RequestContext;\n}) {\n const agents = mastra.listAgents();\n const workflows = mastra.listWorkflows();\n\n const scorersMap = new Map<\n string,\n MastraScorerEntry & {\n agentIds: string[];\n agentNames: string[];\n workflowIds: string[];\n isRegistered: boolean;\n source: 'code' | 'stored' | 'fs';\n }\n >();\n\n // Helper function to process an agent's scorers\n const processAgentScorers = async (agent: {\n id: string;\n name: string;\n listScorers: (typeof agents)[string]['listScorers'];\n }) => {\n const scorers =\n (await agent.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerId = scorer.scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)?.agentIds.push(agent.id);\n scorersMap.get(scorerId)?.agentNames.push(agent.name);\n } else {\n scorersMap.set(scorerId, {\n workflowIds: [],\n ...scorer,\n agentNames: [agent.name],\n agentIds: [agent.id],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n };\n\n // Process code-defined agents\n for (const [_, agent] of Object.entries(agents)) {\n await processAgentScorers(agent);\n }\n\n // Process stored agents (database-backed agents)\n try {\n const editor = mastra.getEditor();\n const storedAgentsResult = await editor?.agent.list();\n if (storedAgentsResult?.agents) {\n for (const storedAgentConfig of storedAgentsResult.agents) {\n try {\n const agent = await editor?.agent.getById(storedAgentConfig.id);\n if (agent) {\n await processAgentScorers(agent);\n }\n } catch {\n // Skip individual agents that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured - not all setups have storage\n }\n\n // Process stored scorers (standalone CMS-created scorers)\n try {\n const editor = mastra.getEditor();\n const storedScorersResult = await editor?.scorer.list();\n if (storedScorersResult?.scorerDefinitions) {\n for (const storedScorerConfig of storedScorersResult.scorerDefinitions) {\n try {\n await editor?.scorer.getById(storedScorerConfig.id);\n } catch {\n // Skip individual scorers that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured\n }\n\n for (const [workflowId, workflow] of Object.entries(workflows)) {\n const scorers =\n (await workflow.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerName = scorer.scorer.name;\n if (scorersMap.has(scorerName)) {\n scorersMap.get(scorerName)?.workflowIds.push(workflowId);\n } else {\n scorersMap.set(scorerName, {\n agentIds: [],\n agentNames: [],\n ...scorer,\n workflowIds: [workflowId],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n }\n\n const registeredScorers = await mastra.listScorers();\n for (const [_scorerId, scorer] of Object.entries(registeredScorers || {})) {\n const scorerId = scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)!.isRegistered = true;\n } else {\n scorersMap.set(scorerId, {\n scorer: scorer,\n agentIds: [],\n agentNames: [],\n workflowIds: [],\n isRegistered: true,\n source: scorer.source ?? 'code',\n });\n }\n }\n\n return Object.fromEntries(scorersMap.entries());\n}\n\n// Legacy function to get trace and span details\nfunction getTraceDetails(traceIdWithSpanId?: string) {\n if (!traceIdWithSpanId) {\n return {};\n }\n\n const [traceId, spanId] = traceIdWithSpanId.split('-');\n\n return {\n ...(traceId ? { traceId } : {}),\n ...(spanId ? { spanId } : {}),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_SCORERS_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers',\n responseType: 'json',\n responseSchema: listScorersResponseSchema,\n summary: 'List all scorers',\n description: 'Returns a list of all registered scorers with their configuration and associated agents and workflows',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n return scorers;\n }) as any,\n});\n\nexport const GET_SCORER_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n responseSchema: scorerEntrySchema.nullable(),\n summary: 'Get scorer by ID',\n description: 'Returns details for a specific scorer including its configuration and associations',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, scorerId, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n\n const scorer = scorers[scorerId];\n\n if (!scorer) {\n return null;\n }\n\n return scorer;\n }) as any,\n});\n\nexport const LIST_SCORES_BY_RUN_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/run/:runId',\n responseType: 'json',\n pathParamSchema: runIdSchema,\n queryParamSchema: listScoresByRunIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by run ID',\n description: 'Returns all scores for a specific execution run',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, runId, ...params }) => {\n try {\n const { page, perPage } = params;\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByRunId?.({\n runId,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by run id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SCORER_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorer/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n queryParamSchema: listScoresByScorerIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by scorer ID',\n description: 'Returns all scores generated by a specific scorer',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, scorerId, ...params }) => {\n try {\n const { page, perPage, entityId, entityType } = params;\n const filters = Object.fromEntries(Object.entries({ entityId, entityType }).filter(([_, v]) => v !== undefined));\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByScorerId?.({\n scorerId,\n pagination: { page: page ?? 0, perPage: perPage ?? 10 },\n ...filters,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by scorer id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_ENTITY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/entity/:entityType/:entityId',\n responseType: 'json',\n pathParamSchema: entityPathParams,\n queryParamSchema: listScoresByEntityIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by entity ID',\n description: 'Returns all scores for a specific entity (agent or workflow)',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, entityId, entityType, ...params }) => {\n try {\n const { page, perPage } = params;\n let entityIdToUse = entityId;\n\n if (entityType === 'AGENT') {\n const agent = await getAgentFromSystem({ mastra, agentId: entityId });\n entityIdToUse = agent.id;\n } else if (entityType === 'WORKFLOW') {\n const workflow = mastra.getWorkflowById(entityId);\n entityIdToUse = workflow.id;\n }\n\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scoresStore?.listScoresByEntityId?.({\n entityId: entityIdToUse,\n entityType,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by entity id');\n }\n },\n});\n\nexport const SAVE_SCORE_ROUTE = createRoute({\n method: 'POST',\n path: '/scores',\n responseType: 'json',\n bodySchema: saveScoreBodySchema,\n responseSchema: saveScoreResponseSchema,\n summary: 'Save score',\n description: 'Saves a new score record to storage',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const { score } = params as { score: ScoreRowData };\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const result = await scoresStore?.saveScore?.(score);\n if (!result) {\n throw new HTTPException(500, { message: 'Storage not configured' });\n }\n return result;\n } catch (error) {\n return handleError(error, 'Error saving score');\n }\n },\n});\n"]}
'use strict';
var chunkVBPYR5ZH_cjs = require('./chunk-VBPYR5ZH.cjs');
var chunk3ZITEOQR_cjs = require('./chunk-3ZITEOQR.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 chunk3ZITEOQR_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 = chunkN54Q3AQR_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-JFPYHABB.cjs.map
//# sourceMappingURL=chunk-JFPYHABB.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-JFPYHABB.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 chunk3ZITEOQR_cjs = require('./chunk-3ZITEOQR.cjs');
var chunkZQ4GVMYG_cjs = require('./chunk-ZQ4GVMYG.cjs');
var chunk42M6Y2OD_cjs = require('./chunk-42M6Y2OD.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var chunkDRDVJ35H_cjs = require('./chunk-DRDVJ35H.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.cjs');
var chunk22EM2GBH_cjs = require('./chunk-22EM2GBH.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 chunk22EM2GBH_cjs.standardSchemaToJSONSchema(chunk22EM2GBH_cjs.toStandardSchema5(schema), { target: "draft-2020-12" });
}
function serializeSchema(schema) {
const jsonSchema = schemaToJsonSchema(resolveLazySchema(schema));
if (jsonSchema === void 0) return void 0;
return chunkDRDVJ35H_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 ? chunkDRDVJ35H_cjs.stringify(resolvedInput.jsonSchema) : void 0,
outputSchema: resolvedOutput && typeof resolvedOutput === "object" && "jsonSchema" in resolvedOutput ? chunkDRDVJ35H_cjs.stringify(resolvedOutput.jsonSchema) : void 0
};
}
return {
...tool,
inputSchema: serializeSchema(tool.inputSchema),
outputSchema: serializeSchema(tool.outputSchema),
requestContextSchema: serializeSchema(tool.requestContextSchema)
};
}
var LIST_TOOLS_ROUTE = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 chunk3ZITEOQR_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 = chunkN54Q3AQR_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 chunk3ZITEOQR_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-LOMJCP7B.cjs.map
//# sourceMappingURL=chunk-LOMJCP7B.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-LOMJCP7B.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 { 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-6JZFDXJ2.js';
import { MastraFGAPermissions, getEffectiveThreadId, getEffectiveResourceId, enforceThreadAccess } from './chunk-JBSUT5XF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-M2T6UZPI.js.map
//# sourceMappingURL=chunk-M2T6UZPI.js.map
{"version":3,"sources":["../src/server/handlers/responses.ts"],"names":["existingThread","threadId","createdThread","completedState"],"mappings":"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","file":"chunk-M2T6UZPI.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 { builderSettingsResponseSchema, builderAvailableModelsResponseSchema, infrastructureStatusResponseSchema, agentFeaturesSchema } from './chunk-PBNENTGS.js';
import { buildProvidersList } from './chunk-6JZFDXJ2.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-OJM7XIWW.js.map
//# sourceMappingURL=chunk-OJM7XIWW.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-OJM7XIWW.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 chunk42WZN6MM_cjs = require('./chunk-42WZN6MM.cjs');
var chunkF3HP5HM6_cjs = require('./chunk-F3HP5HM6.cjs');
var chunkKIDHIRVO_cjs = require('./chunk-KIDHIRVO.cjs');
var chunk3ZITEOQR_cjs = require('./chunk-3ZITEOQR.cjs');
var chunk42M6Y2OD_cjs = require('./chunk-42M6Y2OD.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 chunk3ZITEOQR_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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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-QRBSJM46.cjs.map
//# sourceMappingURL=chunk-QRBSJM46.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-QRBSJM46.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 chunkT3C54LPX_cjs = require('./chunk-T3C54LPX.cjs');
var chunkO4O2EJF7_cjs = require('./chunk-O4O2EJF7.cjs');
var chunkJFPYHABB_cjs = require('./chunk-JFPYHABB.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
var chunkDRDVJ35H_cjs = require('./chunk-DRDVJ35H.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 = chunkN54Q3AQR_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 chunkJFPYHABB_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(skill, await chunkDRDVJ35H_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 = chunkN54Q3AQR_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 chunkJFPYHABB_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(skill, await chunkDRDVJ35H_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-SQQY4SMT.cjs.map
//# sourceMappingURL=chunk-SQQY4SMT.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-SQQY4SMT.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 { favoriteToggleResponseSchema } from './chunk-SFPN7SHZ.js';
import { requireBuilderFeature } from './chunk-OJM7XIWW.js';
import { getCallerAuthorId, assertReadAccess } from './chunk-SXZS6VZ3.js';
import { storedAgentIdPathParams } from './chunk-MPFUINWR.js';
import { assertStoredResourceScope, getStoredResourceScope } from './chunk-QIQWHDPH.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-U24PDWYK.js.map
//# sourceMappingURL=chunk-U24PDWYK.js.map
{"version":3,"sources":["../src/server/handlers/stored-agent-favorites.ts"],"names":[],"mappings":"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","file":"chunk-U24PDWYK.js","sourcesContent":["import { HTTPException } from '../http-exception';\nimport { favoriteToggleResponseSchema } from '../schemas/favorites';\nimport { storedAgentIdPathParams } from '../schemas/stored-agents';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { assertReadAccess, getCallerAuthorId } from './authorship';\nimport { requireBuilderFeature } from './editor-builder';\nimport { handleError } from './error';\n\n/**\n * Resolves the storage and favorites domains, throwing 500 if unavailable.\n */\nasync function getFavoritesContext(mastra: Parameters<typeof requireBuilderFeature>[0]) {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n const agentStore = await storage.getStore('agents');\n if (!agentStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) {\n throw new HTTPException(500, { message: 'Favorites storage domain is not available' });\n }\n return { agentStore, favoritesStore };\n}\n\n/**\n * PUT /stored/agents/:storedAgentId/favorite\n */\nexport const FAVORITE_STORED_AGENT_ROUTE = createRoute({\n method: 'PUT',\n path: '/stored/agents/:storedAgentId/favorite',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Favorite a stored agent',\n description: 'Marks the stored agent as favorited by the calling user. Idempotent.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra, requestContext, storedAgentId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { agentStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const agent = await agentStore.getById(storedAgentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller cannot read the agent (private + not owner/admin).\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: agent });\n\n const result = await favoritesStore.favorite({\n userId: callerId,\n entityType: 'agent',\n entityId: storedAgentId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error favoriting stored agent');\n }\n },\n});\n\n/**\n * DELETE /stored/agents/:storedAgentId/favorite\n */\nexport const UNFAVORITE_STORED_AGENT_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/agents/:storedAgentId/favorite',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Unfavorite a stored agent',\n description: 'Removes the caller’s favorite from the stored agent. Idempotent.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra, requestContext, storedAgentId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { agentStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const agent = await agentStore.getById(storedAgentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: agent });\n\n const result = await favoritesStore.unfavorite({\n userId: callerId,\n entityType: 'agent',\n entityId: storedAgentId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error unfavoriting stored agent');\n }\n },\n});\n"]}
'use strict';
var chunkZCX2J552_cjs = require('./chunk-ZCX2J552.cjs');
var chunkCMZUE2F4_cjs = require('./chunk-CMZUE2F4.cjs');
var chunkJFPYHABB_cjs = require('./chunk-JFPYHABB.cjs');
var chunk2XZ2466F_cjs = require('./chunk-2XZ2466F.cjs');
var chunk5SY2ZQ3R_cjs = require('./chunk-5SY2ZQ3R.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
var chunkW36PYFFL_cjs = require('./chunk-W36PYFFL.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var chunkDRDVJ35H_cjs = require('./chunk-DRDVJ35H.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 = chunkN54Q3AQR_cjs.createRoute({
method: "GET",
path: "/stored/agents",
responseType: "json",
queryParamSchema: chunkW36PYFFL_cjs.listStoredAgentsQuerySchema,
responseSchema: chunkW36PYFFL_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 chunkDRDVJ35H_cjs.getStoredResourceScope(mastra, requestContext);
const scopedMetadata = chunkDRDVJ35H_cjs.scopeStoredResourceMetadata(metadata, scope);
const callerId = chunkHDIYJI2Z_cjs.getCallerAuthorId(requestContext);
const favoritesEnabled = await chunkJFPYHABB_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 chunk5SY2ZQ3R_cjs.prepareAuthorEnrichment(
mastra,
requestContext,
annotated2.map((a) => a.authorId)
);
const withAuthors2 = authors2 ? annotated2.map((record) => chunk5SY2ZQ3R_cjs.attachAuthor(record, authors2)) : annotated2;
const hasMore = effectivePerPage > 0 && endIdx < total;
return { agents: withAuthors2, total, page, perPage: effectivePerPage, hasMore };
}
const result = await agentsStore.listResolved({
page,
perPage,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata
});
const visibleAgents = result.agents.filter((record) => chunkHDIYJI2Z_cjs.matchesAuthorFilter(record, filter));
const authors = await chunk5SY2ZQ3R_cjs.prepareAuthorEnrichment(
mastra,
requestContext,
visibleAgents.map((a) => a.authorId)
);
if (!favoritesEnabled) {
const stripped = visibleAgents.map(chunkCMZUE2F4_cjs.stripFavoriteFields);
const withAuthors2 = authors ? stripped.map((record) => chunk5SY2ZQ3R_cjs.attachAuthor(record, authors)) : stripped;
return { ...result, agents: withAuthors2 };
}
const enrichment = await chunkCMZUE2F4_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(chunkCMZUE2F4_cjs.stripFavoriteFields);
const withAuthors = authors ? annotated.map((record) => chunk5SY2ZQ3R_cjs.attachAuthor(record, authors)) : annotated;
return { ...result, agents: withAuthors };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing stored agents");
}
}
});
async function buildStoredAgentExport({
mastra,
requestContext,
storedAgentId,
body
}) {
const storage = mastra.getStorage();
const agentsStore = storage ? await storage.getStore("agents") : void 0;
const storedAgent = await agentsStore?.getByIdResolved(storedAgentId, { status: "draft" });
if (storedAgent) {
chunkDRDVJ35H_cjs.assertStoredResourceScope(storedAgent, await chunkDRDVJ35H_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 = chunkN54Q3AQR_cjs.createRoute({
method: "POST",
path: "/stored/agents/:storedAgentId/export",
responseType: "json",
pathParamSchema: chunkW36PYFFL_cjs.storedAgentIdPathParams,
bodySchema: chunkW36PYFFL_cjs.exportStoredAgentBodySchema,
responseSchema: chunkW36PYFFL_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 = chunkN54Q3AQR_cjs.createRoute({
method: "POST",
path: "/stored/agents/:storedAgentId/change-request",
responseType: "json",
pathParamSchema: chunkW36PYFFL_cjs.storedAgentIdPathParams,
bodySchema: chunkW36PYFFL_cjs.openStoredAgentChangeRequestBodySchema,
responseSchema: chunkW36PYFFL_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 = chunkN54Q3AQR_cjs.createRoute({
method: "GET",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkW36PYFFL_cjs.storedAgentIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.statusQuerySchema,
responseSchema: chunkW36PYFFL_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(agent, await chunkDRDVJ35H_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
const authors = await chunk5SY2ZQ3R_cjs.prepareAuthorEnrichment(mastra, requestContext, [agent.authorId]);
const withFavorite = await chunkCMZUE2F4_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", agent);
return chunk5SY2ZQ3R_cjs.attachAuthor(withFavorite, authors);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting stored agent");
}
}
});
var CREATE_STORED_AGENT_ROUTE = chunkN54Q3AQR_cjs.createRoute({
method: "POST",
path: "/stored/agents",
responseType: "json",
bodySchema: chunkW36PYFFL_cjs.createStoredAgentBodySchema,
responseSchema: chunkW36PYFFL_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 || chunkDRDVJ35H_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: chunkDRDVJ35H_cjs.scopeStoredResourceMetadata(metadata, await chunkDRDVJ35H_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 chunkCMZUE2F4_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating stored agent");
}
}
});
var UPDATE_STORED_AGENT_ROUTE = chunkN54Q3AQR_cjs.createRoute({
method: "PATCH",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkW36PYFFL_cjs.storedAgentIdPathParams,
bodySchema: chunkW36PYFFL_cjs.updateStoredAgentBodySchema,
responseSchema: chunkW36PYFFL_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 chunkDRDVJ35H_cjs.getStoredResourceScope(mastra, requestContext);
chunkDRDVJ35H_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 = chunkDRDVJ35H_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 chunkCMZUE2F4_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error updating stored agent");
}
}
});
var DELETE_STORED_AGENT_ROUTE = chunkN54Q3AQR_cjs.createRoute({
method: "DELETE",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkW36PYFFL_cjs.storedAgentIdPathParams,
responseSchema: chunkW36PYFFL_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(existing, await chunkDRDVJ35H_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 = chunkN54Q3AQR_cjs.createRoute({
method: "GET",
path: "/stored/agents/:storedAgentId/dependents",
responseType: "json",
pathParamSchema: chunkW36PYFFL_cjs.storedAgentIdPathParams,
responseSchema: chunkW36PYFFL_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(target, await chunkDRDVJ35H_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 = chunkN54Q3AQR_cjs.createRoute({
method: "POST",
path: "/stored/agents/preview-instructions",
responseType: "json",
bodySchema: chunkW36PYFFL_cjs.previewInstructionsBodySchema,
responseSchema: chunkW36PYFFL_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-V4CUA3V6.cjs.map
//# sourceMappingURL=chunk-V4CUA3V6.cjs.map

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

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-TQBIGT3Q.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-QIQWHDPH.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-OPQ753KD.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-VFTKZ5NN.js.map
//# sourceMappingURL=chunk-VFTKZ5NN.js.map
{"version":3,"sources":["../src/server/handlers/agent-builder.ts"],"names":[],"mappings":"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","file":"chunk-VFTKZ5NN.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 chunkNI2DJ2VW_cjs = require('./chunk-NI2DJ2VW.cjs');
var chunkF3HP5HM6_cjs = require('./chunk-F3HP5HM6.cjs');
var chunkKIDHIRVO_cjs = require('./chunk-KIDHIRVO.cjs');
var chunk3ZITEOQR_cjs = require('./chunk-3ZITEOQR.cjs');
var chunk42M6Y2OD_cjs = require('./chunk-42M6Y2OD.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 = chunkN54Q3AQR_cjs.createRoute({
method: "POST",
path: "/v1/conversations",
responseType: "json",
bodySchema: chunkNI2DJ2VW_cjs.createConversationBodySchema,
responseSchema: chunkNI2DJ2VW_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 chunk3ZITEOQR_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 = chunkN54Q3AQR_cjs.createRoute({
method: "GET",
path: "/v1/conversations/:conversationId",
responseType: "json",
pathParamSchema: chunkNI2DJ2VW_cjs.conversationIdPathParams,
responseSchema: chunkNI2DJ2VW_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 = chunkN54Q3AQR_cjs.createRoute({
method: "GET",
path: "/v1/conversations/:conversationId/items",
responseType: "json",
pathParamSchema: chunkNI2DJ2VW_cjs.conversationIdPathParams,
responseSchema: chunkNI2DJ2VW_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 = chunkN54Q3AQR_cjs.createRoute({
method: "DELETE",
path: "/v1/conversations/:conversationId",
responseType: "json",
pathParamSchema: chunkNI2DJ2VW_cjs.conversationIdPathParams,
responseSchema: chunkNI2DJ2VW_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-WMYGX6IW.cjs.map
//# sourceMappingURL=chunk-WMYGX6IW.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-WMYGX6IW.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 { apiSchemaManifestResponseSchema, systemPackagesResponseSchema } from './chunk-ZA2G7XV3.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-EW55OSKH.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-WUUYTMMN.js.map
//# sourceMappingURL=chunk-WUUYTMMN.js.map
{"version":3,"sources":["../src/server/handlers/system.ts"],"names":[],"mappings":"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","file":"chunk-WUUYTMMN.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 chunkT3C54LPX_cjs = require('./chunk-T3C54LPX.cjs');
var chunkCMZUE2F4_cjs = require('./chunk-CMZUE2F4.cjs');
var chunkJFPYHABB_cjs = require('./chunk-JFPYHABB.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
var chunkDRDVJ35H_cjs = require('./chunk-DRDVJ35H.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 = chunkN54Q3AQR_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 chunkDRDVJ35H_cjs.getStoredResourceScope(mastra, requestContext);
const scopedMetadata = chunkDRDVJ35H_cjs.scopeStoredResourceMetadata(metadata, scope);
const callerId = chunkHDIYJI2Z_cjs.getCallerAuthorId(requestContext);
const favoritesEnabled = await chunkJFPYHABB_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(chunkCMZUE2F4_cjs.stripFavoriteFields) };
}
const enrichment = await chunkCMZUE2F4_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(chunkCMZUE2F4_cjs.stripFavoriteFields);
return { ...result, skills: annotated };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing stored skills");
}
}
});
var GET_STORED_SKILL_ROUTE = chunkN54Q3AQR_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(skill, await chunkDRDVJ35H_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_cjs.assertReadAccess({ requestContext, resource: "stored-skills", resourceId: storedSkillId, record: skill });
return chunkCMZUE2F4_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", skill);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting stored skill");
}
}
});
var CREATE_STORED_SKILL_ROUTE = chunkN54Q3AQR_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 || chunkDRDVJ35H_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: chunkDRDVJ35H_cjs.scopeStoredResourceMetadata(metadata, await chunkDRDVJ35H_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 chunkCMZUE2F4_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating stored skill");
}
}
});
var UPDATE_STORED_SKILL_ROUTE = chunkN54Q3AQR_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 chunkDRDVJ35H_cjs.getStoredResourceScope(mastra, requestContext);
chunkDRDVJ35H_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 = chunkDRDVJ35H_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 chunkCMZUE2F4_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error updating stored skill");
}
}
});
var DELETE_STORED_SKILL_ROUTE = chunkN54Q3AQR_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(existing, await chunkDRDVJ35H_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 = chunkN54Q3AQR_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(existing, await chunkDRDVJ35H_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 chunkCMZUE2F4_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-X6EAMRBA.cjs.map
//# sourceMappingURL=chunk-X6EAMRBA.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-X6EAMRBA.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 { agentCardResponseSchema, a2aAgentIdPathParams, agentExecutionResponseSchema, agentExecutionBodySchema } from './chunk-KEE6UMGC.js';
import { getAgentFromSystem } from './chunk-6JZFDXJ2.js';
import { getPublicOrigin } from './chunk-CCT2USYM.js';
import { convertInstructionsToString } from './chunk-QIQWHDPH.js';
import { createRoute } from './chunk-PIKPS6Q6.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-Z33Z4XXY.js.map
//# sourceMappingURL=chunk-Z33Z4XXY.js.map

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

import { FAVORITE_STORED_SKILL_ROUTE, UNFAVORITE_STORED_SKILL_ROUTE } from './chunk-DJVFZVFX.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-HCJQ55XP.js';
import { LIST_STORED_WORKSPACES_ROUTE, GET_STORED_WORKSPACE_ROUTE, CREATE_STORED_WORKSPACE_ROUTE, UPDATE_STORED_WORKSPACE_ROUTE, DELETE_STORED_WORKSPACE_ROUTE } from './chunk-H7UZ44VA.js';
import { GET_SYSTEM_PACKAGES_ROUTE, GET_API_SCHEMA_ROUTE } from './chunk-WUUYTMMN.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-POM4VGLJ.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-AWPRYEMK.js';
import { FAVORITE_STORED_AGENT_ROUTE, UNFAVORITE_STORED_AGENT_ROUTE } from './chunk-U24PDWYK.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-C6ILFNRT.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-7ICIPSVS.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-KRZJLGGN.js';
import { LIST_STORED_SCORERS_ROUTE, GET_STORED_SCORER_ROUTE, CREATE_STORED_SCORER_ROUTE, UPDATE_STORED_SCORER_ROUTE, DELETE_STORED_SCORER_ROUTE } from './chunk-LOEWD4E6.js';
import { LIST_PROCESSOR_PROVIDERS_ROUTE, GET_PROCESSOR_PROVIDER_ROUTE } from './chunk-YBVHGMK4.js';
import { LIST_PROCESSORS_ROUTE, GET_PROCESSOR_BY_ID_ROUTE, EXECUTE_PROCESSOR_ROUTE } from './chunk-LBY32Z7C.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-LZJM4JTY.js';
import { LIST_SCHEDULES_ROUTE, GET_SCHEDULE_ROUTE, LIST_SCHEDULE_TRIGGERS_ROUTE, PAUSE_SCHEDULE_ROUTE, RESUME_SCHEDULE_ROUTE } from './chunk-RCXVCPAD.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-6ZQIEZFG.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-XFAG2VCC.js';
import { GET_EDITOR_BUILDER_SETTINGS_ROUTE, GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE, GET_INFRASTRUCTURE_STATUS_ROUTE } from './chunk-OJM7XIWW.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-4DVFBBKV.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-UFZ5CTGJ.js';
import { BACKGROUND_TASK_STREAM_ROUTE, LIST_BACKGROUND_TASKS_ROUTE, GET_BACKGROUND_TASK_ROUTE } from './chunk-S2JGT2GI.js';
import { LIST_BUILDER_REGISTRIES_ROUTE, BUILDER_REGISTRY_SEARCH_ROUTE, BUILDER_REGISTRY_POPULAR_ROUTE, BUILDER_REGISTRY_PREVIEW_ROUTE, BUILDER_REGISTRY_INSTALL_ROUTE } from './chunk-ERCBJA5A.js';
import { LIST_CHANNEL_PLATFORMS_ROUTE, LIST_CHANNEL_INSTALLATIONS_ROUTE, CONNECT_CHANNEL_ROUTE, DISCONNECT_CHANNEL_ROUTE } from './chunk-Z5DHV2QW.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-DRIJ6W3Z.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-NUPNOKI2.js';
import { EXECUTE_AGENT_TOOL_ROUTE, GET_AGENT_TOOL_ROUTE, LIST_TOOLS_ROUTE, GET_TOOL_BY_ID_ROUTE, EXECUTE_TOOL_ROUTE } from './chunk-2RM335Q2.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-BTBWMU2H.js';
import { CREATE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE } from './chunk-M2T6UZPI.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-3VNAOZ3S.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-GIQJF7ZM.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-LLVTDE4P.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-Z354XOPM.js';
import { CREATE_CONVERSATION_ROUTE, GET_CONVERSATION_ROUTE, GET_CONVERSATION_ITEMS_ROUTE, DELETE_CONVERSATION_ROUTE } from './chunk-2YA4RQFD.js';
import { LIST_LOG_TRANSPORTS_ROUTE, LIST_LOGS_ROUTE, LIST_LOGS_BY_RUN_ID_ROUTE } from './chunk-JXUL45J6.js';
import { GET_AGENT_CARD_ROUTE, AGENT_EXECUTION_ROUTE } from './chunk-Z33Z4XXY.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-6JZFDXJ2.js';
import { AUTH_ROUTES } from './chunk-CCT2USYM.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-VFTKZ5NN.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-TQBIGT3Q.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-HK4SJHYT.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-ZAK4IF2O.js.map
//# sourceMappingURL=chunk-ZAK4IF2O.js.map

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

import { isBuilderFeatureEnabled } from './chunk-OJM7XIWW.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-ZBTVLET6.js.map
//# sourceMappingURL=chunk-ZBTVLET6.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-ZBTVLET6.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 chunkCXAJPAJ2_cjs = require('./chunk-CXAJPAJ2.cjs');
var chunk3ZITEOQR_cjs = require('./chunk-3ZITEOQR.cjs');
var chunkTGKPSQB3_cjs = require('./chunk-TGKPSQB3.cjs');
var chunkDRDVJ35H_cjs = require('./chunk-DRDVJ35H.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 chunk3ZITEOQR_cjs.getAgentFromSystem({ mastra, agentId });
const [instructions, tools] = await Promise.all([agent.getInstructions({ requestContext }), agent.listTools({ requestContext })]);
const agentCard = {
name: agent.id || agentId,
description: chunkDRDVJ35H_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 `${chunkTGKPSQB3_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 chunk3ZITEOQR_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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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-ZT7ES4WM.cjs.map
//# sourceMappingURL=chunk-ZT7ES4WM.cjs.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

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

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

export { Extractor, ModelByInputTokens, OBSERVER_SYSTEM_PROMPT, ObservationalMemory, ObservationalMemoryProcessor, TokenCounter, WorkingMemoryExtractor, buildObserverPrompt, buildObserverSystemPrompt, combineObservationGroupRanges, deriveObservationGroupProvenance, extractCurrentTask, formatMessagesForObserver, getObservationsAsOf, hasCurrentTaskSection, injectAnchorIds, optimizeObservationsForContext, parseAnchorId, parseObservationGroups, parseObserverOutput, reconcileObservationGroupsFromReflection, renderObservationGroupsForReflection, stripEphemeralAnchorIds, stripObservationGroups, wrapInObservationGroup } from './chunk-3PX4QNTY.js';
export { OBSERVATIONAL_MEMORY_DEFAULTS, OBSERVATION_CONTEXT_INSTRUCTIONS, OBSERVATION_CONTEXT_PROMPT, OBSERVATION_CONTINUATION_HINT } from './chunk-JMEMSVJ5.js';
//# sourceMappingURL=observational-memory-BTXNITBN-GBTCKQX5.js.map
//# sourceMappingURL=observational-memory-BTXNITBN-GBTCKQX5.js.map
{"version":3,"sources":[],"names":[],"mappings":"","file":"observational-memory-BTXNITBN-GBTCKQX5.js"}
'use strict';
var chunkEVRBOCDD_cjs = require('./chunk-EVRBOCDD.cjs');
var chunk3D55EABW_cjs = require('./chunk-3D55EABW.cjs');
Object.defineProperty(exports, "Extractor", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.Extractor; }
});
Object.defineProperty(exports, "ModelByInputTokens", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.ModelByInputTokens; }
});
Object.defineProperty(exports, "OBSERVER_SYSTEM_PROMPT", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.OBSERVER_SYSTEM_PROMPT; }
});
Object.defineProperty(exports, "ObservationalMemory", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.ObservationalMemory; }
});
Object.defineProperty(exports, "ObservationalMemoryProcessor", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.ObservationalMemoryProcessor; }
});
Object.defineProperty(exports, "TokenCounter", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.TokenCounter; }
});
Object.defineProperty(exports, "WorkingMemoryExtractor", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.WorkingMemoryExtractor; }
});
Object.defineProperty(exports, "buildObserverPrompt", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.buildObserverPrompt; }
});
Object.defineProperty(exports, "buildObserverSystemPrompt", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.buildObserverSystemPrompt; }
});
Object.defineProperty(exports, "combineObservationGroupRanges", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.combineObservationGroupRanges; }
});
Object.defineProperty(exports, "deriveObservationGroupProvenance", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.deriveObservationGroupProvenance; }
});
Object.defineProperty(exports, "extractCurrentTask", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.extractCurrentTask; }
});
Object.defineProperty(exports, "formatMessagesForObserver", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.formatMessagesForObserver; }
});
Object.defineProperty(exports, "getObservationsAsOf", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.getObservationsAsOf; }
});
Object.defineProperty(exports, "hasCurrentTaskSection", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.hasCurrentTaskSection; }
});
Object.defineProperty(exports, "injectAnchorIds", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.injectAnchorIds; }
});
Object.defineProperty(exports, "optimizeObservationsForContext", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.optimizeObservationsForContext; }
});
Object.defineProperty(exports, "parseAnchorId", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.parseAnchorId; }
});
Object.defineProperty(exports, "parseObservationGroups", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.parseObservationGroups; }
});
Object.defineProperty(exports, "parseObserverOutput", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.parseObserverOutput; }
});
Object.defineProperty(exports, "reconcileObservationGroupsFromReflection", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.reconcileObservationGroupsFromReflection; }
});
Object.defineProperty(exports, "renderObservationGroupsForReflection", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.renderObservationGroupsForReflection; }
});
Object.defineProperty(exports, "stripEphemeralAnchorIds", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.stripEphemeralAnchorIds; }
});
Object.defineProperty(exports, "stripObservationGroups", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.stripObservationGroups; }
});
Object.defineProperty(exports, "wrapInObservationGroup", {
enumerable: true,
get: function () { return chunkEVRBOCDD_cjs.wrapInObservationGroup; }
});
Object.defineProperty(exports, "OBSERVATIONAL_MEMORY_DEFAULTS", {
enumerable: true,
get: function () { return chunk3D55EABW_cjs.OBSERVATIONAL_MEMORY_DEFAULTS; }
});
Object.defineProperty(exports, "OBSERVATION_CONTEXT_INSTRUCTIONS", {
enumerable: true,
get: function () { return chunk3D55EABW_cjs.OBSERVATION_CONTEXT_INSTRUCTIONS; }
});
Object.defineProperty(exports, "OBSERVATION_CONTEXT_PROMPT", {
enumerable: true,
get: function () { return chunk3D55EABW_cjs.OBSERVATION_CONTEXT_PROMPT; }
});
Object.defineProperty(exports, "OBSERVATION_CONTINUATION_HINT", {
enumerable: true,
get: function () { return chunk3D55EABW_cjs.OBSERVATION_CONTINUATION_HINT; }
});
//# sourceMappingURL=observational-memory-BTXNITBN-USQTBIPQ.cjs.map
//# sourceMappingURL=observational-memory-BTXNITBN-USQTBIPQ.cjs.map
{"version":3,"sources":[],"names":[],"mappings":"","file":"observational-memory-BTXNITBN-USQTBIPQ.cjs"}

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

+1
-1
{
"version": "1.50.0-alpha.0",
"version": "1.50.0-alpha.1",
"package": "@mastra/server",

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

@@ -25,5 +25,5 @@ > Discover all available pages from the documentation index: https://mastra.ai/llms.txt

**path** (`string`): Route path with optional params (e.g., \`/api/items/:id\`)
**path** (`string`): Route path with optional params (e.g., /api/items/:id)
**responseType** (`'json' | 'stream'`): Response format. Internal routes may use additional types (\`datastream-response\`, \`mcp-http\`, \`mcp-sse\`).
**responseType** (`'json' | 'stream'`): Response format. Internal routes may use additional types (datastream-response, mcp-http, mcp-sse).

@@ -52,3 +52,3 @@ **handler** (`ServerRouteHandler`): Route handler function

**onValidationError** (`(error: ZodError, context: 'query' | 'body' | 'path') => { status: number; body: unknown } | undefined`): Custom validation error handler for this route. Overrides the server-level \`onValidationError\` hook. Return \`{ status, body }\` to customize the response, or \`undefined\` to use the default.
**onValidationError** (`(error: ZodError, context: 'query' | 'body' | 'path') => { status: number; body: unknown } | undefined`): Custom validation error handler for this route. Overrides the server-level onValidationError hook. Return { status, body } to customize the response, or undefined to use the default.

@@ -55,0 +55,0 @@ ## Handler parameters

@@ -37,3 +37,3 @@ > Discover all available pages from the documentation index: https://mastra.ai/llms.txt

**prefix** (`string`): Route path prefix (e.g., \`/api/v2\`) (Default: `''`)
**prefix** (`string`): Route path prefix (e.g., /api/v2) (Default: `''`)

@@ -40,0 +40,0 @@ **openapiPath** (`string`): Path to serve OpenAPI spec (Default: `''`)

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

package: "@mastra/server"
version: "1.50.0-alpha.0"
version: "1.50.0-alpha.1"
---

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

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

var chunk2VO3BDE5_cjs = require('../chunk-2VO3BDE5.cjs');
var chunkTGHO7KPM_cjs = require('../chunk-TGHO7KPM.cjs');
var chunk2PGHAAKS_cjs = require('../chunk-2PGHAAKS.cjs');
var chunkMVHJTBLL_cjs = require('../chunk-MVHJTBLL.cjs');
var chunkLOMJCP7B_cjs = require('../chunk-LOMJCP7B.cjs');
var chunkHV4BVD47_cjs = require('../chunk-HV4BVD47.cjs');
var chunkQRBSJM46_cjs = require('../chunk-QRBSJM46.cjs');
var chunk76YQAK7Q_cjs = require('../chunk-76YQAK7Q.cjs');
var chunk7KNGT7JR_cjs = require('../chunk-7KNGT7JR.cjs');
var chunk6KPMWM5N_cjs = require('../chunk-6KPMWM5N.cjs');
var chunkU52CKL4A_cjs = require('../chunk-U52CKL4A.cjs');
var chunkWMYGX6IW_cjs = require('../chunk-WMYGX6IW.cjs');
var chunkJJOGTXKN_cjs = require('../chunk-JJOGTXKN.cjs');
var chunk4SSXL7RB_cjs = require('../chunk-4SSXL7RB.cjs');
var chunk3HQT7VXK_cjs = require('../chunk-3HQT7VXK.cjs');
var chunkTMAUK4UG_cjs = require('../chunk-TMAUK4UG.cjs');
var chunkQ56NQYUJ_cjs = require('../chunk-Q56NQYUJ.cjs');
var chunkZT7ES4WM_cjs = require('../chunk-ZT7ES4WM.cjs');
var chunk3ZITEOQR_cjs = require('../chunk-3ZITEOQR.cjs');
var chunk6QZTZ5F3_cjs = require('../chunk-6QZTZ5F3.cjs');
var chunkRJPRSDIS_cjs = require('../chunk-RJPRSDIS.cjs');

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

enumerable: true,
get: function () { return chunkTGHO7KPM_cjs.tools_exports; }
get: function () { return chunkLOMJCP7B_cjs.tools_exports; }
});
Object.defineProperty(exports, "scores", {
enumerable: true,
get: function () { return chunk2PGHAAKS_cjs.scores_exports; }
get: function () { return chunkHV4BVD47_cjs.scores_exports; }
});
Object.defineProperty(exports, "responses", {
enumerable: true,
get: function () { return chunkMVHJTBLL_cjs.responses_exports; }
get: function () { return chunkQRBSJM46_cjs.responses_exports; }
});

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

enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.memory_exports; }
get: function () { return chunk6KPMWM5N_cjs.memory_exports; }
});

@@ -61,2 +61,6 @@ Object.defineProperty(exports, "observability", {

});
Object.defineProperty(exports, "conversations", {
enumerable: true,
get: function () { return chunkWMYGX6IW_cjs.conversations_exports; }
});
Object.defineProperty(exports, "logs", {

@@ -66,17 +70,13 @@ enumerable: true,

});
Object.defineProperty(exports, "conversations", {
enumerable: true,
get: function () { return chunk4SSXL7RB_cjs.conversations_exports; }
});
Object.defineProperty(exports, "a2a", {
enumerable: true,
get: function () { return chunk3HQT7VXK_cjs.a2a_exports; }
get: function () { return chunkZT7ES4WM_cjs.a2a_exports; }
});
Object.defineProperty(exports, "agents", {
enumerable: true,
get: function () { return chunkTMAUK4UG_cjs.agents_exports; }
get: function () { return chunk3ZITEOQR_cjs.agents_exports; }
});
Object.defineProperty(exports, "agentBuilder", {
enumerable: true,
get: function () { return chunkQ56NQYUJ_cjs.agent_builder_exports; }
get: function () { return chunk6QZTZ5F3_cjs.agent_builder_exports; }
});

@@ -83,0 +83,0 @@ Object.defineProperty(exports, "workflows", {

export { vector_exports as vector } from '../chunk-DRIJ6W3Z.js';
export { voice_exports as voice } from '../chunk-LQZHT5U7.js';
export { workspace_exports as workspace } from '../chunk-NUPNOKI2.js';
export { tools_exports as tools } from '../chunk-WJXL7PJV.js';
export { scores_exports as scores } from '../chunk-U3N4FCLP.js';
export { responses_exports as responses } from '../chunk-ZPILA2J2.js';
export { tools_exports as tools } from '../chunk-2RM335Q2.js';
export { scores_exports as scores } from '../chunk-BTBWMU2H.js';
export { responses_exports as responses } from '../chunk-M2T6UZPI.js';
export { mcp_exports as mcp } from '../chunk-3VNAOZ3S.js';
export { memory_exports as memory } from '../chunk-ULLGWMF5.js';
export { memory_exports as memory } from '../chunk-GIQJF7ZM.js';
export { observability_exports as observability } from '../chunk-LLVTDE4P.js';
export { conversations_exports as conversations } from '../chunk-2YA4RQFD.js';
export { logs_exports as logs } from '../chunk-JXUL45J6.js';
export { conversations_exports as conversations } from '../chunk-Y3CWM5PU.js';
export { a2a_exports as a2a } from '../chunk-4QGCOOCW.js';
export { agents_exports as agents } from '../chunk-5NREJ74P.js';
export { agent_builder_exports as agentBuilder } from '../chunk-ETVWGZSU.js';
export { a2a_exports as a2a } from '../chunk-Z33Z4XXY.js';
export { agents_exports as agents } from '../chunk-6JZFDXJ2.js';
export { agent_builder_exports as agentBuilder } from '../chunk-VFTKZ5NN.js';
export { workflows_exports as workflows } from '../chunk-TQBIGT3Q.js';

@@ -16,0 +16,0 @@ export { formatZodError, isZodError } from '../chunk-7ZWJX3AN.js';

'use strict';
var chunk3HQT7VXK_cjs = require('../../chunk-3HQT7VXK.cjs');
var chunkZT7ES4WM_cjs = require('../../chunk-ZT7ES4WM.cjs');

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

enumerable: true,
get: function () { return chunk3HQT7VXK_cjs.AGENT_EXECUTION_ROUTE; }
get: function () { return chunkZT7ES4WM_cjs.AGENT_EXECUTION_ROUTE; }
});
Object.defineProperty(exports, "GET_AGENT_CARD_ROUTE", {
enumerable: true,
get: function () { return chunk3HQT7VXK_cjs.GET_AGENT_CARD_ROUTE; }
get: function () { return chunkZT7ES4WM_cjs.GET_AGENT_CARD_ROUTE; }
});
Object.defineProperty(exports, "getAgentCardByIdHandler", {
enumerable: true,
get: function () { return chunk3HQT7VXK_cjs.getAgentCardByIdHandler; }
get: function () { return chunkZT7ES4WM_cjs.getAgentCardByIdHandler; }
});
Object.defineProperty(exports, "getAgentExecutionHandler", {
enumerable: true,
get: function () { return chunk3HQT7VXK_cjs.getAgentExecutionHandler; }
get: function () { return chunkZT7ES4WM_cjs.getAgentExecutionHandler; }
});
Object.defineProperty(exports, "handleDeleteTaskPushNotificationConfig", {
enumerable: true,
get: function () { return chunk3HQT7VXK_cjs.handleDeleteTaskPushNotificationConfig; }
get: function () { return chunkZT7ES4WM_cjs.handleDeleteTaskPushNotificationConfig; }
});
Object.defineProperty(exports, "handleGetTaskPushNotificationConfig", {
enumerable: true,
get: function () { return chunk3HQT7VXK_cjs.handleGetTaskPushNotificationConfig; }
get: function () { return chunkZT7ES4WM_cjs.handleGetTaskPushNotificationConfig; }
});
Object.defineProperty(exports, "handleListTaskPushNotificationConfig", {
enumerable: true,
get: function () { return chunk3HQT7VXK_cjs.handleListTaskPushNotificationConfig; }
get: function () { return chunkZT7ES4WM_cjs.handleListTaskPushNotificationConfig; }
});
Object.defineProperty(exports, "handleMessageSend", {
enumerable: true,
get: function () { return chunk3HQT7VXK_cjs.handleMessageSend; }
get: function () { return chunkZT7ES4WM_cjs.handleMessageSend; }
});
Object.defineProperty(exports, "handleMessageStream", {
enumerable: true,
get: function () { return chunk3HQT7VXK_cjs.handleMessageStream; }
get: function () { return chunkZT7ES4WM_cjs.handleMessageStream; }
});
Object.defineProperty(exports, "handleSetTaskPushNotificationConfig", {
enumerable: true,
get: function () { return chunk3HQT7VXK_cjs.handleSetTaskPushNotificationConfig; }
get: function () { return chunkZT7ES4WM_cjs.handleSetTaskPushNotificationConfig; }
});
Object.defineProperty(exports, "handleTaskCancel", {
enumerable: true,
get: function () { return chunk3HQT7VXK_cjs.handleTaskCancel; }
get: function () { return chunkZT7ES4WM_cjs.handleTaskCancel; }
});
Object.defineProperty(exports, "handleTaskGet", {
enumerable: true,
get: function () { return chunk3HQT7VXK_cjs.handleTaskGet; }
get: function () { return chunkZT7ES4WM_cjs.handleTaskGet; }
});
Object.defineProperty(exports, "handleTaskResubscribe", {
enumerable: true,
get: function () { return chunk3HQT7VXK_cjs.handleTaskResubscribe; }
get: function () { return chunkZT7ES4WM_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-4QGCOOCW.js';
export { AGENT_EXECUTION_ROUTE, GET_AGENT_CARD_ROUTE, getAgentCardByIdHandler, getAgentExecutionHandler, handleDeleteTaskPushNotificationConfig, handleGetTaskPushNotificationConfig, handleListTaskPushNotificationConfig, handleMessageSend, handleMessageStream, handleSetTaskPushNotificationConfig, handleTaskCancel, handleTaskGet, handleTaskResubscribe } from '../../chunk-Z33Z4XXY.js';
//# sourceMappingURL=a2a.js.map
//# sourceMappingURL=a2a.js.map
'use strict';
var chunkQ56NQYUJ_cjs = require('../../chunk-Q56NQYUJ.cjs');
var chunk6QZTZ5F3_cjs = require('../../chunk-6QZTZ5F3.cjs');

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

enumerable: true,
get: function () { return chunkQ56NQYUJ_cjs.CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE; }
get: function () { return chunk6QZTZ5F3_cjs.CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE; }
});
Object.defineProperty(exports, "CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE", {
enumerable: true,
get: function () { return chunkQ56NQYUJ_cjs.CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE; }
get: function () { return chunk6QZTZ5F3_cjs.CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE; }
});
Object.defineProperty(exports, "GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE", {
enumerable: true,
get: function () { return chunkQ56NQYUJ_cjs.GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE; }
get: function () { return chunk6QZTZ5F3_cjs.GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE; }
});
Object.defineProperty(exports, "GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE", {
enumerable: true,
get: function () { return chunkQ56NQYUJ_cjs.GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE; }
get: function () { return chunk6QZTZ5F3_cjs.GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE; }
});
Object.defineProperty(exports, "LIST_AGENT_BUILDER_ACTIONS_ROUTE", {
enumerable: true,
get: function () { return chunkQ56NQYUJ_cjs.LIST_AGENT_BUILDER_ACTIONS_ROUTE; }
get: function () { return chunk6QZTZ5F3_cjs.LIST_AGENT_BUILDER_ACTIONS_ROUTE; }
});
Object.defineProperty(exports, "LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE", {
enumerable: true,
get: function () { return chunkQ56NQYUJ_cjs.LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE; }
get: function () { return chunk6QZTZ5F3_cjs.LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE; }
});
Object.defineProperty(exports, "OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkQ56NQYUJ_cjs.OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunk6QZTZ5F3_cjs.OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE; }
});
Object.defineProperty(exports, "OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkQ56NQYUJ_cjs.OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunk6QZTZ5F3_cjs.OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE; }
});
Object.defineProperty(exports, "RESUME_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkQ56NQYUJ_cjs.RESUME_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunk6QZTZ5F3_cjs.RESUME_AGENT_BUILDER_ACTION_ROUTE; }
});
Object.defineProperty(exports, "RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkQ56NQYUJ_cjs.RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunk6QZTZ5F3_cjs.RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE; }
});
Object.defineProperty(exports, "RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkQ56NQYUJ_cjs.RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunk6QZTZ5F3_cjs.RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE; }
});
Object.defineProperty(exports, "RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkQ56NQYUJ_cjs.RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunk6QZTZ5F3_cjs.RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE; }
});
Object.defineProperty(exports, "START_AGENT_BUILDER_ACTION_RUN_ROUTE", {
enumerable: true,
get: function () { return chunkQ56NQYUJ_cjs.START_AGENT_BUILDER_ACTION_RUN_ROUTE; }
get: function () { return chunk6QZTZ5F3_cjs.START_AGENT_BUILDER_ACTION_RUN_ROUTE; }
});
Object.defineProperty(exports, "START_ASYNC_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkQ56NQYUJ_cjs.START_ASYNC_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunk6QZTZ5F3_cjs.START_ASYNC_AGENT_BUILDER_ACTION_ROUTE; }
});
Object.defineProperty(exports, "STREAM_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkQ56NQYUJ_cjs.STREAM_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunk6QZTZ5F3_cjs.STREAM_AGENT_BUILDER_ACTION_ROUTE; }
});
Object.defineProperty(exports, "STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE", {
enumerable: true,
get: function () { return chunkQ56NQYUJ_cjs.STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE; }
get: function () { return chunk6QZTZ5F3_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-ETVWGZSU.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-VFTKZ5NN.js';
//# sourceMappingURL=agent-builder.js.map
//# sourceMappingURL=agent-builder.js.map
'use strict';
var chunkTMAUK4UG_cjs = require('../../chunk-TMAUK4UG.cjs');
var chunk3ZITEOQR_cjs = require('../../chunk-3ZITEOQR.cjs');

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

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

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

export { ABORT_AGENT_THREAD_ROUTE, APPROVE_NETWORK_TOOL_CALL_ROUTE, APPROVE_TOOL_CALL_GENERATE_ROUTE, APPROVE_TOOL_CALL_ROUTE, CLONE_AGENT_ROUTE, DECLINE_NETWORK_TOOL_CALL_ROUTE, DECLINE_TOOL_CALL_GENERATE_ROUTE, DECLINE_TOOL_CALL_ROUTE, ENHANCE_INSTRUCTIONS_ROUTE, GENERATE_AGENT_ROUTE, GENERATE_AGENT_VNEXT_ROUTE, GENERATE_LEGACY_ROUTE, GET_AGENT_BY_ID_ROUTE, GET_AGENT_SKILL_ROUTE, GET_PROVIDERS_ROUTE, LIST_AGENTS_ROUTE, LIST_SUSPENDED_RUNS_ROUTE, OBSERVE_AGENT_STREAM_ROUTE, QUEUE_AGENT_MESSAGE_ROUTE, 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-5NREJ74P.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-6JZFDXJ2.js';
//# sourceMappingURL=agents.js.map
//# sourceMappingURL=agents.js.map
'use strict';
var chunk4SSXL7RB_cjs = require('../../chunk-4SSXL7RB.cjs');
var chunkWMYGX6IW_cjs = require('../../chunk-WMYGX6IW.cjs');

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

enumerable: true,
get: function () { return chunk4SSXL7RB_cjs.CREATE_CONVERSATION_ROUTE; }
get: function () { return chunkWMYGX6IW_cjs.CREATE_CONVERSATION_ROUTE; }
});
Object.defineProperty(exports, "DELETE_CONVERSATION_ROUTE", {
enumerable: true,
get: function () { return chunk4SSXL7RB_cjs.DELETE_CONVERSATION_ROUTE; }
get: function () { return chunkWMYGX6IW_cjs.DELETE_CONVERSATION_ROUTE; }
});
Object.defineProperty(exports, "GET_CONVERSATION_ITEMS_ROUTE", {
enumerable: true,
get: function () { return chunk4SSXL7RB_cjs.GET_CONVERSATION_ITEMS_ROUTE; }
get: function () { return chunkWMYGX6IW_cjs.GET_CONVERSATION_ITEMS_ROUTE; }
});
Object.defineProperty(exports, "GET_CONVERSATION_ROUTE", {
enumerable: true,
get: function () { return chunk4SSXL7RB_cjs.GET_CONVERSATION_ROUTE; }
get: function () { return chunkWMYGX6IW_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-Y3CWM5PU.js';
export { CREATE_CONVERSATION_ROUTE, DELETE_CONVERSATION_ROUTE, GET_CONVERSATION_ITEMS_ROUTE, GET_CONVERSATION_ROUTE } from '../../chunk-2YA4RQFD.js';
//# sourceMappingURL=conversations.js.map
//# sourceMappingURL=conversations.js.map
'use strict';
var chunkKXKNHXU3_cjs = require('../../chunk-KXKNHXU3.cjs');
var chunkJFPYHABB_cjs = require('../../chunk-JFPYHABB.cjs');

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

enumerable: true,
get: function () { return chunkKXKNHXU3_cjs.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE; }
get: function () { return chunkJFPYHABB_cjs.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE; }
});
Object.defineProperty(exports, "GET_EDITOR_BUILDER_SETTINGS_ROUTE", {
enumerable: true,
get: function () { return chunkKXKNHXU3_cjs.GET_EDITOR_BUILDER_SETTINGS_ROUTE; }
get: function () { return chunkJFPYHABB_cjs.GET_EDITOR_BUILDER_SETTINGS_ROUTE; }
});
Object.defineProperty(exports, "GET_INFRASTRUCTURE_STATUS_ROUTE", {
enumerable: true,
get: function () { return chunkKXKNHXU3_cjs.GET_INFRASTRUCTURE_STATUS_ROUTE; }
get: function () { return chunkJFPYHABB_cjs.GET_INFRASTRUCTURE_STATUS_ROUTE; }
});
Object.defineProperty(exports, "isBuilderFeatureEnabled", {
enumerable: true,
get: function () { return chunkKXKNHXU3_cjs.isBuilderFeatureEnabled; }
get: function () { return chunkJFPYHABB_cjs.isBuilderFeatureEnabled; }
});
Object.defineProperty(exports, "requireBuilderFeature", {
enumerable: true,
get: function () { return chunkKXKNHXU3_cjs.requireBuilderFeature; }
get: function () { return chunkJFPYHABB_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-JVVAZD6P.js';
export { GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE, GET_EDITOR_BUILDER_SETTINGS_ROUTE, GET_INFRASTRUCTURE_STATUS_ROUTE, isBuilderFeatureEnabled, requireBuilderFeature } from '../../chunk-OJM7XIWW.js';
//# sourceMappingURL=editor-builder.js.map
//# sourceMappingURL=editor-builder.js.map
'use strict';
var chunkFORER7LG_cjs = require('../../chunk-FORER7LG.cjs');
var chunkCMZUE2F4_cjs = require('../../chunk-CMZUE2F4.cjs');

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

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

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

export { enrichOrStripFavorites, prepareFavoritesEnrichment, stripFavoriteFields } from '../../chunk-JZUUCCEO.js';
export { enrichOrStripFavorites, prepareFavoritesEnrichment, stripFavoriteFields } from '../../chunk-ZBTVLET6.js';
//# sourceMappingURL=favorites-enrichment.js.map
//# sourceMappingURL=favorites-enrichment.js.map
'use strict';
var chunk7KNGT7JR_cjs = require('../../chunk-7KNGT7JR.cjs');
var chunk6KPMWM5N_cjs = require('../../chunk-6KPMWM5N.cjs');

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

enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.AWAIT_BUFFER_STATUS_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.AWAIT_BUFFER_STATUS_ROUTE; }
});
Object.defineProperty(exports, "CLONE_THREAD_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.CLONE_THREAD_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.CLONE_THREAD_ROUTE; }
});
Object.defineProperty(exports, "CREATE_THREAD_NETWORK_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.CREATE_THREAD_NETWORK_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.CREATE_THREAD_NETWORK_ROUTE; }
});
Object.defineProperty(exports, "CREATE_THREAD_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.CREATE_THREAD_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.CREATE_THREAD_ROUTE; }
});
Object.defineProperty(exports, "DELETE_MESSAGES_NETWORK_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.DELETE_MESSAGES_NETWORK_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.DELETE_MESSAGES_NETWORK_ROUTE; }
});
Object.defineProperty(exports, "DELETE_MESSAGES_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.DELETE_MESSAGES_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.DELETE_MESSAGES_ROUTE; }
});
Object.defineProperty(exports, "DELETE_THREAD_NETWORK_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.DELETE_THREAD_NETWORK_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.DELETE_THREAD_NETWORK_ROUTE; }
});
Object.defineProperty(exports, "DELETE_THREAD_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.DELETE_THREAD_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.DELETE_THREAD_ROUTE; }
});
Object.defineProperty(exports, "GET_MEMORY_CONFIG_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.GET_MEMORY_CONFIG_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.GET_MEMORY_CONFIG_ROUTE; }
});
Object.defineProperty(exports, "GET_MEMORY_STATUS_NETWORK_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.GET_MEMORY_STATUS_NETWORK_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.GET_MEMORY_STATUS_NETWORK_ROUTE; }
});
Object.defineProperty(exports, "GET_MEMORY_STATUS_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.GET_MEMORY_STATUS_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.GET_MEMORY_STATUS_ROUTE; }
});
Object.defineProperty(exports, "GET_OBSERVATIONAL_MEMORY_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.GET_OBSERVATIONAL_MEMORY_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.GET_OBSERVATIONAL_MEMORY_ROUTE; }
});
Object.defineProperty(exports, "GET_THREAD_BY_ID_NETWORK_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.GET_THREAD_BY_ID_NETWORK_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.GET_THREAD_BY_ID_NETWORK_ROUTE; }
});
Object.defineProperty(exports, "GET_THREAD_BY_ID_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.GET_THREAD_BY_ID_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.GET_THREAD_BY_ID_ROUTE; }
});
Object.defineProperty(exports, "GET_WORKING_MEMORY_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.GET_WORKING_MEMORY_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.GET_WORKING_MEMORY_ROUTE; }
});
Object.defineProperty(exports, "LIST_MESSAGES_NETWORK_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.LIST_MESSAGES_NETWORK_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.LIST_MESSAGES_NETWORK_ROUTE; }
});
Object.defineProperty(exports, "LIST_MESSAGES_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.LIST_MESSAGES_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.LIST_MESSAGES_ROUTE; }
});
Object.defineProperty(exports, "LIST_THREADS_NETWORK_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.LIST_THREADS_NETWORK_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.LIST_THREADS_NETWORK_ROUTE; }
});
Object.defineProperty(exports, "LIST_THREADS_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.LIST_THREADS_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.LIST_THREADS_ROUTE; }
});
Object.defineProperty(exports, "SAVE_MESSAGES_NETWORK_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.SAVE_MESSAGES_NETWORK_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.SAVE_MESSAGES_NETWORK_ROUTE; }
});
Object.defineProperty(exports, "SAVE_MESSAGES_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.SAVE_MESSAGES_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.SAVE_MESSAGES_ROUTE; }
});
Object.defineProperty(exports, "SEARCH_MEMORY_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.SEARCH_MEMORY_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.SEARCH_MEMORY_ROUTE; }
});
Object.defineProperty(exports, "UPDATE_THREAD_NETWORK_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.UPDATE_THREAD_NETWORK_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.UPDATE_THREAD_NETWORK_ROUTE; }
});
Object.defineProperty(exports, "UPDATE_THREAD_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.UPDATE_THREAD_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.UPDATE_THREAD_ROUTE; }
});
Object.defineProperty(exports, "UPDATE_WORKING_MEMORY_ROUTE", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.UPDATE_WORKING_MEMORY_ROUTE; }
get: function () { return chunk6KPMWM5N_cjs.UPDATE_WORKING_MEMORY_ROUTE; }
});
Object.defineProperty(exports, "getTextContent", {
enumerable: true,
get: function () { return chunk7KNGT7JR_cjs.getTextContent; }
get: function () { return chunk6KPMWM5N_cjs.getTextContent; }
});
//# sourceMappingURL=memory.cjs.map
//# sourceMappingURL=memory.cjs.map

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

export { AWAIT_BUFFER_STATUS_ROUTE, CLONE_THREAD_ROUTE, CREATE_THREAD_NETWORK_ROUTE, CREATE_THREAD_ROUTE, DELETE_MESSAGES_NETWORK_ROUTE, DELETE_MESSAGES_ROUTE, DELETE_THREAD_NETWORK_ROUTE, DELETE_THREAD_ROUTE, GET_MEMORY_CONFIG_ROUTE, GET_MEMORY_STATUS_NETWORK_ROUTE, GET_MEMORY_STATUS_ROUTE, GET_OBSERVATIONAL_MEMORY_ROUTE, GET_THREAD_BY_ID_NETWORK_ROUTE, GET_THREAD_BY_ID_ROUTE, GET_WORKING_MEMORY_ROUTE, LIST_MESSAGES_NETWORK_ROUTE, LIST_MESSAGES_ROUTE, LIST_THREADS_NETWORK_ROUTE, LIST_THREADS_ROUTE, SAVE_MESSAGES_NETWORK_ROUTE, SAVE_MESSAGES_ROUTE, SEARCH_MEMORY_ROUTE, UPDATE_THREAD_NETWORK_ROUTE, UPDATE_THREAD_ROUTE, UPDATE_WORKING_MEMORY_ROUTE, getTextContent } from '../../chunk-ULLGWMF5.js';
export { AWAIT_BUFFER_STATUS_ROUTE, CLONE_THREAD_ROUTE, CREATE_THREAD_NETWORK_ROUTE, CREATE_THREAD_ROUTE, DELETE_MESSAGES_NETWORK_ROUTE, DELETE_MESSAGES_ROUTE, DELETE_THREAD_NETWORK_ROUTE, DELETE_THREAD_ROUTE, GET_MEMORY_CONFIG_ROUTE, GET_MEMORY_STATUS_NETWORK_ROUTE, GET_MEMORY_STATUS_ROUTE, GET_OBSERVATIONAL_MEMORY_ROUTE, GET_THREAD_BY_ID_NETWORK_ROUTE, GET_THREAD_BY_ID_ROUTE, GET_WORKING_MEMORY_ROUTE, LIST_MESSAGES_NETWORK_ROUTE, LIST_MESSAGES_ROUTE, LIST_THREADS_NETWORK_ROUTE, LIST_THREADS_ROUTE, SAVE_MESSAGES_NETWORK_ROUTE, SAVE_MESSAGES_ROUTE, SEARCH_MEMORY_ROUTE, UPDATE_THREAD_NETWORK_ROUTE, UPDATE_THREAD_ROUTE, UPDATE_WORKING_MEMORY_ROUTE, getTextContent } from '../../chunk-GIQJF7ZM.js';
//# sourceMappingURL=memory.js.map
//# sourceMappingURL=memory.js.map
'use strict';
var chunkMVHJTBLL_cjs = require('../../chunk-MVHJTBLL.cjs');
var chunkQRBSJM46_cjs = require('../../chunk-QRBSJM46.cjs');

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

enumerable: true,
get: function () { return chunkMVHJTBLL_cjs.CREATE_RESPONSE_ROUTE; }
get: function () { return chunkQRBSJM46_cjs.CREATE_RESPONSE_ROUTE; }
});
Object.defineProperty(exports, "DELETE_RESPONSE_ROUTE", {
enumerable: true,
get: function () { return chunkMVHJTBLL_cjs.DELETE_RESPONSE_ROUTE; }
get: function () { return chunkQRBSJM46_cjs.DELETE_RESPONSE_ROUTE; }
});
Object.defineProperty(exports, "GET_RESPONSE_ROUTE", {
enumerable: true,
get: function () { return chunkMVHJTBLL_cjs.GET_RESPONSE_ROUTE; }
get: function () { return chunkQRBSJM46_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-ZPILA2J2.js';
export { CREATE_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE } from '../../chunk-M2T6UZPI.js';
//# sourceMappingURL=responses.js.map
//# sourceMappingURL=responses.js.map
'use strict';
var chunk2PGHAAKS_cjs = require('../../chunk-2PGHAAKS.cjs');
var chunkHV4BVD47_cjs = require('../../chunk-HV4BVD47.cjs');

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

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

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

export { GET_SCORER_ROUTE, LIST_SCORERS_ROUTE, LIST_SCORES_BY_ENTITY_ID_ROUTE, LIST_SCORES_BY_RUN_ID_ROUTE, LIST_SCORES_BY_SCORER_ID_ROUTE, SAVE_SCORE_ROUTE } from '../../chunk-U3N4FCLP.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-BTBWMU2H.js';
//# sourceMappingURL=scores.js.map
//# sourceMappingURL=scores.js.map
'use strict';
var chunkGN5Y2NOX_cjs = require('../../chunk-GN5Y2NOX.cjs');
var chunk22BLV4RK_cjs = require('../../chunk-22BLV4RK.cjs');

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

enumerable: true,
get: function () { return chunkGN5Y2NOX_cjs.FAVORITE_STORED_AGENT_ROUTE; }
get: function () { return chunk22BLV4RK_cjs.FAVORITE_STORED_AGENT_ROUTE; }
});
Object.defineProperty(exports, "UNFAVORITE_STORED_AGENT_ROUTE", {
enumerable: true,
get: function () { return chunkGN5Y2NOX_cjs.UNFAVORITE_STORED_AGENT_ROUTE; }
get: function () { return chunk22BLV4RK_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-BXQHNIYS.js';
export { FAVORITE_STORED_AGENT_ROUTE, UNFAVORITE_STORED_AGENT_ROUTE } from '../../chunk-U24PDWYK.js';
//# sourceMappingURL=stored-agent-favorites.js.map
//# sourceMappingURL=stored-agent-favorites.js.map
'use strict';
var chunkIBZHIMZ3_cjs = require('../../chunk-IBZHIMZ3.cjs');
var chunkV4CUA3V6_cjs = require('../../chunk-V4CUA3V6.cjs');

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

enumerable: true,
get: function () { return chunkIBZHIMZ3_cjs.CREATE_STORED_AGENT_ROUTE; }
get: function () { return chunkV4CUA3V6_cjs.CREATE_STORED_AGENT_ROUTE; }
});
Object.defineProperty(exports, "DELETE_STORED_AGENT_ROUTE", {
enumerable: true,
get: function () { return chunkIBZHIMZ3_cjs.DELETE_STORED_AGENT_ROUTE; }
get: function () { return chunkV4CUA3V6_cjs.DELETE_STORED_AGENT_ROUTE; }
});
Object.defineProperty(exports, "EXPORT_STORED_AGENT_ROUTE", {
enumerable: true,
get: function () { return chunkIBZHIMZ3_cjs.EXPORT_STORED_AGENT_ROUTE; }
get: function () { return chunkV4CUA3V6_cjs.EXPORT_STORED_AGENT_ROUTE; }
});
Object.defineProperty(exports, "GET_STORED_AGENT_DEPENDENTS_ROUTE", {
enumerable: true,
get: function () { return chunkIBZHIMZ3_cjs.GET_STORED_AGENT_DEPENDENTS_ROUTE; }
get: function () { return chunkV4CUA3V6_cjs.GET_STORED_AGENT_DEPENDENTS_ROUTE; }
});
Object.defineProperty(exports, "GET_STORED_AGENT_ROUTE", {
enumerable: true,
get: function () { return chunkIBZHIMZ3_cjs.GET_STORED_AGENT_ROUTE; }
get: function () { return chunkV4CUA3V6_cjs.GET_STORED_AGENT_ROUTE; }
});
Object.defineProperty(exports, "LIST_STORED_AGENTS_ROUTE", {
enumerable: true,
get: function () { return chunkIBZHIMZ3_cjs.LIST_STORED_AGENTS_ROUTE; }
get: function () { return chunkV4CUA3V6_cjs.LIST_STORED_AGENTS_ROUTE; }
});
Object.defineProperty(exports, "OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE", {
enumerable: true,
get: function () { return chunkIBZHIMZ3_cjs.OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE; }
get: function () { return chunkV4CUA3V6_cjs.OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE; }
});
Object.defineProperty(exports, "PREVIEW_INSTRUCTIONS_ROUTE", {
enumerable: true,
get: function () { return chunkIBZHIMZ3_cjs.PREVIEW_INSTRUCTIONS_ROUTE; }
get: function () { return chunkV4CUA3V6_cjs.PREVIEW_INSTRUCTIONS_ROUTE; }
});
Object.defineProperty(exports, "UPDATE_STORED_AGENT_ROUTE", {
enumerable: true,
get: function () { return chunkIBZHIMZ3_cjs.UPDATE_STORED_AGENT_ROUTE; }
get: function () { return chunkV4CUA3V6_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-4JG4GWPK.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-C6ILFNRT.js';
//# sourceMappingURL=stored-agents.js.map
//# sourceMappingURL=stored-agents.js.map
'use strict';
var chunkGULCRVVE_cjs = require('../../chunk-GULCRVVE.cjs');
var chunkSQQY4SMT_cjs = require('../../chunk-SQQY4SMT.cjs');

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

enumerable: true,
get: function () { return chunkGULCRVVE_cjs.FAVORITE_STORED_SKILL_ROUTE; }
get: function () { return chunkSQQY4SMT_cjs.FAVORITE_STORED_SKILL_ROUTE; }
});
Object.defineProperty(exports, "UNFAVORITE_STORED_SKILL_ROUTE", {
enumerable: true,
get: function () { return chunkGULCRVVE_cjs.UNFAVORITE_STORED_SKILL_ROUTE; }
get: function () { return chunkSQQY4SMT_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-JOUZTIVR.js';
export { FAVORITE_STORED_SKILL_ROUTE, UNFAVORITE_STORED_SKILL_ROUTE } from '../../chunk-DJVFZVFX.js';
//# sourceMappingURL=stored-skill-favorites.js.map
//# sourceMappingURL=stored-skill-favorites.js.map
'use strict';
var chunkXMBSW6DM_cjs = require('../../chunk-XMBSW6DM.cjs');
var chunkX6EAMRBA_cjs = require('../../chunk-X6EAMRBA.cjs');

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

enumerable: true,
get: function () { return chunkXMBSW6DM_cjs.CREATE_STORED_SKILL_ROUTE; }
get: function () { return chunkX6EAMRBA_cjs.CREATE_STORED_SKILL_ROUTE; }
});
Object.defineProperty(exports, "DELETE_STORED_SKILL_ROUTE", {
enumerable: true,
get: function () { return chunkXMBSW6DM_cjs.DELETE_STORED_SKILL_ROUTE; }
get: function () { return chunkX6EAMRBA_cjs.DELETE_STORED_SKILL_ROUTE; }
});
Object.defineProperty(exports, "GET_STORED_SKILL_ROUTE", {
enumerable: true,
get: function () { return chunkXMBSW6DM_cjs.GET_STORED_SKILL_ROUTE; }
get: function () { return chunkX6EAMRBA_cjs.GET_STORED_SKILL_ROUTE; }
});
Object.defineProperty(exports, "LIST_STORED_SKILLS_ROUTE", {
enumerable: true,
get: function () { return chunkXMBSW6DM_cjs.LIST_STORED_SKILLS_ROUTE; }
get: function () { return chunkX6EAMRBA_cjs.LIST_STORED_SKILLS_ROUTE; }
});
Object.defineProperty(exports, "PUBLISH_STORED_SKILL_ROUTE", {
enumerable: true,
get: function () { return chunkXMBSW6DM_cjs.PUBLISH_STORED_SKILL_ROUTE; }
get: function () { return chunkX6EAMRBA_cjs.PUBLISH_STORED_SKILL_ROUTE; }
});
Object.defineProperty(exports, "UPDATE_STORED_SKILL_ROUTE", {
enumerable: true,
get: function () { return chunkXMBSW6DM_cjs.UPDATE_STORED_SKILL_ROUTE; }
get: function () { return chunkX6EAMRBA_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-LBH3CTYD.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-HCJQ55XP.js';
//# sourceMappingURL=stored-skills.js.map
//# sourceMappingURL=stored-skills.js.map
'use strict';
var chunkY44XPBTJ_cjs = require('../../chunk-Y44XPBTJ.cjs');
var chunk4D4HXQZQ_cjs = require('../../chunk-4D4HXQZQ.cjs');

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

enumerable: true,
get: function () { return chunkY44XPBTJ_cjs.GET_API_SCHEMA_ROUTE; }
get: function () { return chunk4D4HXQZQ_cjs.GET_API_SCHEMA_ROUTE; }
});
Object.defineProperty(exports, "GET_SYSTEM_PACKAGES_ROUTE", {
enumerable: true,
get: function () { return chunkY44XPBTJ_cjs.GET_SYSTEM_PACKAGES_ROUTE; }
get: function () { return chunk4D4HXQZQ_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-Z4BKSPBZ.js';
export { GET_API_SCHEMA_ROUTE, GET_SYSTEM_PACKAGES_ROUTE } from '../../chunk-WUUYTMMN.js';
//# sourceMappingURL=system.js.map
//# sourceMappingURL=system.js.map
'use strict';
var chunkTGHO7KPM_cjs = require('../../chunk-TGHO7KPM.cjs');
var chunkLOMJCP7B_cjs = require('../../chunk-LOMJCP7B.cjs');

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

enumerable: true,
get: function () { return chunkTGHO7KPM_cjs.EXECUTE_AGENT_TOOL_ROUTE; }
get: function () { return chunkLOMJCP7B_cjs.EXECUTE_AGENT_TOOL_ROUTE; }
});
Object.defineProperty(exports, "EXECUTE_TOOL_ROUTE", {
enumerable: true,
get: function () { return chunkTGHO7KPM_cjs.EXECUTE_TOOL_ROUTE; }
get: function () { return chunkLOMJCP7B_cjs.EXECUTE_TOOL_ROUTE; }
});
Object.defineProperty(exports, "GET_AGENT_TOOL_ROUTE", {
enumerable: true,
get: function () { return chunkTGHO7KPM_cjs.GET_AGENT_TOOL_ROUTE; }
get: function () { return chunkLOMJCP7B_cjs.GET_AGENT_TOOL_ROUTE; }
});
Object.defineProperty(exports, "GET_TOOL_BY_ID_ROUTE", {
enumerable: true,
get: function () { return chunkTGHO7KPM_cjs.GET_TOOL_BY_ID_ROUTE; }
get: function () { return chunkLOMJCP7B_cjs.GET_TOOL_BY_ID_ROUTE; }
});
Object.defineProperty(exports, "LIST_TOOLS_ROUTE", {
enumerable: true,
get: function () { return chunkTGHO7KPM_cjs.LIST_TOOLS_ROUTE; }
get: function () { return chunkLOMJCP7B_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-WJXL7PJV.js';
export { EXECUTE_AGENT_TOOL_ROUTE, EXECUTE_TOOL_ROUTE, GET_AGENT_TOOL_ROUTE, GET_TOOL_BY_ID_ROUTE, LIST_TOOLS_ROUTE } from '../../chunk-2RM335Q2.js';
//# sourceMappingURL=tools.js.map
//# sourceMappingURL=tools.js.map

@@ -0,21 +1,27 @@

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 { apiSchemaManifestResponseSchema, apiSchemaManifestRouteSchema, apiSchemaResponseShapeSchema, editorSourceCapabilitiesSchema, editorSourceSchema, mastraPackageSchema, observabilityRuntimeStrategySchema, systemPackagesResponseSchema } from '../../chunk-ZA2G7XV3.js';
export { activateScorerVersionResponseSchema, compareScorerVersionsQuerySchema, compareScorerVersionsResponseSchema, createScorerVersionBodySchema, createScorerVersionResponseSchema, deleteScorerVersionResponseSchema, getScorerVersionResponseSchema, listScorerVersionsQuerySchema, listScorerVersionsResponseSchema, restoreScorerVersionResponseSchema, scorerVersionIdPathParams, scorerVersionPathParams, scorerVersionSchema } from '../../chunk-OGHCGR5P.js';
export { createStoredMCPClientBodySchema, createStoredMCPClientResponseSchema, deleteStoredMCPClientResponseSchema, getStoredMCPClientResponseSchema, listStoredMCPClientsQuerySchema, listStoredMCPClientsResponseSchema, storedMCPClientIdPathParams, storedMCPClientSchema, updateStoredMCPClientBodySchema, updateStoredMCPClientResponseSchema } from '../../chunk-K6WBL3KZ.js';
export { createStoredPromptBlockBodySchema, createStoredPromptBlockResponseSchema, deleteStoredPromptBlockResponseSchema, getStoredPromptBlockResponseSchema, listStoredPromptBlocksQuerySchema, listStoredPromptBlocksResponseSchema, storedPromptBlockIdPathParams, storedPromptBlockSchema, updateStoredPromptBlockBodySchema, updateStoredPromptBlockResponseSchema } from '../../chunk-BUFXUC67.js';
export { createStoredScorerBodySchema, createStoredScorerResponseSchema, deleteStoredScorerResponseSchema, getStoredScorerResponseSchema, listStoredScorersQuerySchema, listStoredScorersResponseSchema, storedScorerIdPathParams, storedScorerSchema, updateStoredScorerBodySchema, updateStoredScorerResponseSchema } from '../../chunk-NI4O4PKL.js';
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 { getProcessorProviderResponseSchema, getProcessorProvidersResponseSchema, processorProviderIdPathParams } from '../../chunk-SJOVDYRT.js';
export { executeProcessorBodySchema, executeProcessorResponseSchema, listProcessorsResponseSchema, processorConfigurationSchema, processorIdPathParams, serializedProcessorSchema as processorSerializedSchema, serializedProcessorDetailSchema } from '../../chunk-2R5GLZJD.js';
export { activatePromptBlockVersionResponseSchema, comparePromptBlockVersionsQuerySchema, comparePromptBlockVersionsResponseSchema, createPromptBlockVersionBodySchema, createPromptBlockVersionResponseSchema, deletePromptBlockVersionResponseSchema, getPromptBlockVersionResponseSchema, listPromptBlockVersionsQuerySchema, listPromptBlockVersionsResponseSchema, promptBlockVersionIdPathParams, promptBlockVersionPathParams, promptBlockVersionSchema, restorePromptBlockVersionResponseSchema } from '../../chunk-3BLT6ISZ.js';
export { activateScorerVersionResponseSchema, compareScorerVersionsQuerySchema, compareScorerVersionsResponseSchema, createScorerVersionBodySchema, createScorerVersionResponseSchema, deleteScorerVersionResponseSchema, getScorerVersionResponseSchema, listScorerVersionsQuerySchema, listScorerVersionsResponseSchema, restoreScorerVersionResponseSchema, scorerVersionIdPathParams, scorerVersionPathParams, scorerVersionSchema } from '../../chunk-OGHCGR5P.js';
export { getProcessorProviderResponseSchema, getProcessorProvidersResponseSchema, processorProviderIdPathParams } from '../../chunk-SJOVDYRT.js';
export { activateMCPClientVersionResponseSchema, compareMCPClientVersionsQuerySchema, compareMCPClientVersionsResponseSchema, createMCPClientVersionBodySchema, createMCPClientVersionResponseSchema, deleteMCPClientVersionResponseSchema, getMCPClientVersionResponseSchema, listMCPClientVersionsQuerySchema, listMCPClientVersionsResponseSchema, mcpClientVersionIdPathParams, mcpClientVersionPathParams, mcpClientVersionSchema, restoreMCPClientVersionResponseSchema } from '../../chunk-EFJIK2PW.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, tenancyQuerySchema, triggerExperimentBodySchema, updateDatasetBodySchema, updateExperimentResultBodySchema, updateItemBodySchema } from '../../chunk-RRQZAJDZ.js';
export { agentConfigurationSchema, agentFeaturesSchema, agentModelsSchema, builderAvailableModelsResponseSchema, builderModelPolicySchema, builderPickerSchema, builderSettingsResponseSchema, defaultModelEntrySchema, infrastructureStatusResponseSchema, pickerAllowlistSchema, providerModelEntrySchema } from '../../chunk-PBNENTGS.js';
export { activateMCPClientVersionResponseSchema, compareMCPClientVersionsQuerySchema, compareMCPClientVersionsResponseSchema, createMCPClientVersionBodySchema, createMCPClientVersionResponseSchema, deleteMCPClientVersionResponseSchema, getMCPClientVersionResponseSchema, listMCPClientVersionsQuerySchema, listMCPClientVersionsResponseSchema, mcpClientVersionIdPathParams, mcpClientVersionPathParams, mcpClientVersionSchema, restoreMCPClientVersionResponseSchema } from '../../chunk-EFJIK2PW.js';
export { agentVersionPathParams, agentVersionSchema, compareVersionsResponseSchema, createVersionResponseSchema, getVersionResponseSchema, listVersionsResponseSchema, restoreVersionResponseSchema, versionIdPathParams } from '../../chunk-GLD2BPPG.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-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';
export { listLogTransportsResponseSchema, listLogsQuerySchema, listLogsResponseSchema } from '../../chunk-MXZPGEC2.js';
export { conversationDeletedSchema, conversationIdPathParams, conversationItemsListSchema, conversationObjectSchema, createConversationBodySchema } from '../../chunk-LEKVIHSE.js';
export { conversationItemMessageSchema, conversationItemSchema, conversationMessageContentSchema, createResponseBodySchema, deleteResponseSchema, responseIdPathParams, responseInputMessageSchema, responseInputTextContentSchema, responseInputTextPartSchema, responseObjectSchema, responseOutputFunctionCallOutputSchema, responseOutputFunctionCallSchema, responseOutputItemSchema, responseOutputMessageSchema, responseOutputTextSchema, responseTextFormatSchema, responseToolSchema, responseUsageSchema } from '../../chunk-BIUL4Y6W.js';
export { agentIdQuerySchema, awaitBufferStatusBodySchema, awaitBufferStatusResponseSchema, cloneThreadBodySchema, cloneThreadResponseSchema, createThreadBodySchema, createThreadNetworkQuerySchema, deleteMessagesBodySchema, deleteMessagesNetworkQuerySchema, deleteMessagesQuerySchema, deleteMessagesResponseSchema, deleteThreadNetworkQuerySchema, deleteThreadQuerySchema, deleteThreadResponseSchema, getMemoryConfigQuerySchema, getMemoryStatusNetworkQuerySchema, getMemoryStatusQuerySchema, getObservationalMemoryQuerySchema, getObservationalMemoryResponseSchema, getThreadByIdNetworkQuerySchema, getThreadByIdQuerySchema, getThreadByIdResponseSchema, getWorkingMemoryQuerySchema, getWorkingMemoryResponseSchema, listMessagesNetworkQuerySchema, listMessagesQuerySchema, listMessagesResponseSchema, listThreadsNetworkQuerySchema, listThreadsQuerySchema, listThreadsResponseSchema, memoryConfigResponseSchema, memoryStatusResponseSchema, optionalAgentIdQuerySchema, saveMessagesBodySchema, saveMessagesNetworkQuerySchema, saveMessagesResponseSchema, searchMemoryQuerySchema, searchMemoryResponseSchema, threadIdPathParams, updateThreadBodySchema, updateThreadNetworkQuerySchema, updateWorkingMemoryBodySchema, updateWorkingMemoryResponseSchema } from '../../chunk-Q6FMYSXG.js';
export { listLogTransportsResponseSchema, listLogsQuerySchema, listLogsResponseSchema } from '../../chunk-MXZPGEC2.js';
export { agentExecutionBodySchema as a2aAgentExecutionBodySchema, a2aAgentIdPathParams, a2aTaskPathParams, agentCardResponseSchema, agentExecutionResponseSchema, messageSendBodySchema, taskQueryBodySchema, taskResponseSchema } from '../../chunk-KEE6UMGC.js';
export { conditionalFieldSchema, createStoredAgentBodySchema, createStoredAgentResponseSchema, deleteStoredAgentResponseSchema, exportStoredAgentBodySchema, exportStoredAgentResponseSchema, getStoredAgentDependentsResponseSchema, getStoredAgentResponseSchema, instructionsSchema, listStoredAgentsQuerySchema, listStoredAgentsResponseSchema, modelConfigSchema, openStoredAgentChangeRequestBodySchema, openStoredAgentChangeRequestResponseSchema, previewInstructionsBodySchema, previewInstructionsResponseSchema, processorGraphEntrySchema, processorGraphStepSchema, processorPhaseSchema, resolvedAuthorSchema, scorerConfigSchema, semanticRecallSchema, serializedMemoryConfigSchema, serializedObservationConfigSchema, serializedObservationalMemoryConfigObjectSchema, serializedObservationalMemoryConfigSchema, serializedReflectionConfigSchema, snapshotConfigSchema, storedAgentIdPathParams, storedAgentSchema, storedProcessorGraphSchema, titleGenerationSchema, toolConfigSchema, toolsConfigSchema, updateStoredAgentBodySchema, updateStoredAgentResponseSchema } from '../../chunk-MPFUINWR.js';
export { createStoredWorkspaceBodySchema, createStoredWorkspaceResponseSchema, deleteStoredWorkspaceResponseSchema, getStoredWorkspaceResponseSchema, listStoredWorkspacesQuerySchema, listStoredWorkspacesResponseSchema, storedWorkspaceIdPathParams, storedWorkspaceSchema, updateStoredWorkspaceBodySchema, updateStoredWorkspaceResponseSchema, snapshotConfigSchema as workspaceSnapshotConfigSchema } from '../../chunk-64QFFUEH.js';
export { authStatusToolProviderResponseSchema, authorizeToolProviderBodySchema, authorizeToolProviderResponseSchema, connectionSchema, connectionScopeSchema, connectionStatusToolProviderBodySchema, connectionStatusToolProviderResponseSchema, connectionUsageQuerySchema, connectionUsageResponseSchema, disconnectConnectionQuerySchema, disconnectConnectionResponseSchema, getToolProviderToolSchemaResponseSchema, listConnectionFieldsQuerySchema, listConnectionFieldsResponseSchema, listConnectionsQuerySchema, listConnectionsResponseSchema, listToolProviderToolkitsResponseSchema, listToolProviderToolsQuerySchema, listToolProviderToolsResponseSchema, listToolProvidersResponseSchema, toolProviderAuthStatusPathParams, toolProviderConfigSchema, toolProviderConnectionPathParams, toolProviderHealthResponseSchema, toolProviderIdPathParams, toolProvidersSchema, toolSlugPathParams, updateConnectionBodySchema, updateConnectionResponseSchema } from '../../chunk-SFAWHLOX.js';
export { ruleGroupSchema, ruleSchema } from '../../chunk-JA4UAHWP.js';
export { authenticatedCapabilitiesSchema, authenticatedUserSchema, capabilitiesResponseSchema, capabilityFlagsSchema, credentialsResponseSchema, credentialsSignInBodySchema, credentialsSignUpBodySchema, currentUserResponseSchema, loginConfigSchema, logoutResponseSchema, permissionPatternsResponseSchema, publicCapabilitiesSchema, refreshResponseSchema, ssoCallbackQuerySchema, ssoCallbackResponseSchema, ssoConfigSchema, ssoLoginQuerySchema, ssoLoginResponseSchema, userAccessSchema } from '../../chunk-LWA65ME7.js';

@@ -27,8 +33,2 @@ export { fileEntrySchema, fsDeleteQuerySchema, fsDeleteResponseSchema, fsListQuerySchema, fsListResponseSchema, fsMkdirBodySchema, fsMkdirResponseSchema, fsPathParams, fsReadQuerySchema, fsReadResponseSchema, fsStatQuerySchema, fsStatResponseSchema, fsWriteBodySchema, fsWriteResponseSchema, getAgentSkillResponseSchema, getSkillResponseSchema, indexBodySchema, indexResponseSchema, listReferencesResponseSchema, listSkillsResponseSchema, listWorkspacesResponseSchema, mountInfoSchema, searchQuerySchema, searchResponseSchema, searchResultSchema, searchSkillsQuerySchema, searchSkillsResponseSchema, skillDisambiguationQuerySchema, skillMetadataSchema, skillMetadataWithPathSchema, skillNamePathParams, skillReferencePathParams, skillReferenceResponseSchema, skillSchema, skillSearchResultSchema, skillSourceSchema, skillsShInstallBodySchema, skillsShInstallResponseSchema, skillsShListResponseSchema, skillsShPopularQuerySchema, skillsShPreviewQuerySchema, skillsShPreviewResponseSchema, skillsShRemoveBodySchema, skillsShRemoveResponseSchema, skillsShSearchQuerySchema, skillsShSearchResponseSchema, skillsShSkillSchema, skillsShSourceSchema, skillsShUpdateBodySchema, skillsShUpdateResponseSchema, workspaceIdPathParams, workspaceInfoResponseSchema } from '../../chunk-ZHULRNJG.js';

export { generateSpeechBodySchema, getListenerResponseSchema, speakResponseSchema, transcribeSpeechBodySchema, transcribeSpeechResponseSchema, voiceSpeakersResponseSchema } from '../../chunk-LPT77UR6.js';
export { agentVersionPathParams, agentVersionSchema, compareVersionsResponseSchema, createVersionResponseSchema, getVersionResponseSchema, listVersionsResponseSchema, restoreVersionResponseSchema, versionIdPathParams } from '../../chunk-GLD2BPPG.js';
export { activateVersionResponseSchema, compareVersionsQuerySchema, createCompareVersionsResponseSchema, createListVersionsResponseSchema, createVersionBodySchema, deleteVersionResponseSchema, listVersionsQuerySchema, versionDiffEntrySchema, versionOrderBySchema } from '../../chunk-3OQMTFIV.js';
export { conditionalFieldSchema, createStoredAgentBodySchema, createStoredAgentResponseSchema, deleteStoredAgentResponseSchema, exportStoredAgentBodySchema, exportStoredAgentResponseSchema, getStoredAgentDependentsResponseSchema, getStoredAgentResponseSchema, instructionsSchema, listStoredAgentsQuerySchema, listStoredAgentsResponseSchema, modelConfigSchema, openStoredAgentChangeRequestBodySchema, openStoredAgentChangeRequestResponseSchema, previewInstructionsBodySchema, previewInstructionsResponseSchema, processorGraphEntrySchema, processorGraphStepSchema, processorPhaseSchema, resolvedAuthorSchema, scorerConfigSchema, semanticRecallSchema, serializedMemoryConfigSchema, serializedObservationConfigSchema, serializedObservationalMemoryConfigObjectSchema, serializedObservationalMemoryConfigSchema, serializedReflectionConfigSchema, snapshotConfigSchema, storedAgentIdPathParams, storedAgentSchema, storedProcessorGraphSchema, titleGenerationSchema, toolConfigSchema, toolsConfigSchema, updateStoredAgentBodySchema, updateStoredAgentResponseSchema } from '../../chunk-MPFUINWR.js';
export { createStoredWorkspaceBodySchema, createStoredWorkspaceResponseSchema, deleteStoredWorkspaceResponseSchema, getStoredWorkspaceResponseSchema, listStoredWorkspacesQuerySchema, listStoredWorkspacesResponseSchema, storedWorkspaceIdPathParams, storedWorkspaceSchema, updateStoredWorkspaceBodySchema, updateStoredWorkspaceResponseSchema, snapshotConfigSchema as workspaceSnapshotConfigSchema } from '../../chunk-64QFFUEH.js';
export { authStatusToolProviderResponseSchema, authorizeToolProviderBodySchema, authorizeToolProviderResponseSchema, connectionSchema, connectionScopeSchema, connectionStatusToolProviderBodySchema, connectionStatusToolProviderResponseSchema, connectionUsageQuerySchema, connectionUsageResponseSchema, disconnectConnectionQuerySchema, disconnectConnectionResponseSchema, getToolProviderToolSchemaResponseSchema, listConnectionFieldsQuerySchema, listConnectionFieldsResponseSchema, listConnectionsQuerySchema, listConnectionsResponseSchema, listToolProviderToolkitsResponseSchema, listToolProviderToolsQuerySchema, listToolProviderToolsResponseSchema, listToolProvidersResponseSchema, toolProviderAuthStatusPathParams, toolProviderConfigSchema, toolProviderConnectionPathParams, toolProviderHealthResponseSchema, toolProviderIdPathParams, toolProvidersSchema, toolSlugPathParams, updateConnectionBodySchema, updateConnectionResponseSchema } from '../../chunk-SFAWHLOX.js';
export { ruleGroupSchema, ruleSchema } from '../../chunk-JA4UAHWP.js';
export { defaultOptionsSchema } from '../../chunk-TKP6FJQ3.js';

@@ -35,0 +35,0 @@ export { baseLogMessageSchema, coreMessageSchema, createCombinedPaginationSchema, createPagePaginationSchema, messageResponseSchema, optionalRunIdSchema, paginationInfoSchema, partialQuerySchema, runIdSchema, statusQuerySchema, successResponseSchema, tracingOptionsSchema } from '../../chunk-2YY3EMMS.js';

'use strict';
var chunkJO2FTGNB_cjs = require('../../chunk-JO2FTGNB.cjs');
var chunk5NLRYTA7_cjs = require('../../chunk-5NLRYTA7.cjs');
var chunkSYZ2NTP3_cjs = require('../../chunk-SYZ2NTP3.cjs');

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

}
const permission = chunkJO2FTGNB_cjs.getEffectivePermission(route);
const permission = chunk5NLRYTA7_cjs.getEffectivePermission(route);
if (!permission) {

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

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

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

);
const routes = [...chunkJO2FTGNB_cjs.SERVER_ROUTES, ...customRoutes];
const routes = [...chunk5NLRYTA7_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 = chunkN54Q3AQR_cjs.generateOpenAPIDocument(chunkJO2FTGNB_cjs.SERVER_ROUTES, config);
const openApiSpec = chunkN54Q3AQR_cjs.generateOpenAPIDocument(chunk5NLRYTA7_cjs.SERVER_ROUTES, config);
if (prefix) {

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

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

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

}
const effectivePermission = route.path ? chunkJO2FTGNB_cjs.getEffectivePermission(route) : null;
const effectivePermission = route.path ? chunk5NLRYTA7_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 chunkJO2FTGNB_cjs.SERVER_ROUTES; }
get: function () { return chunk5NLRYTA7_cjs.SERVER_ROUTES; }
});
Object.defineProperty(exports, "deriveAction", {
enumerable: true,
get: function () { return chunkJO2FTGNB_cjs.deriveAction; }
get: function () { return chunk5NLRYTA7_cjs.deriveAction; }
});
Object.defineProperty(exports, "derivePermission", {
enumerable: true,
get: function () { return chunkJO2FTGNB_cjs.derivePermission; }
get: function () { return chunk5NLRYTA7_cjs.derivePermission; }
});
Object.defineProperty(exports, "extractResource", {
enumerable: true,
get: function () { return chunkJO2FTGNB_cjs.extractResource; }
get: function () { return chunk5NLRYTA7_cjs.extractResource; }
});
Object.defineProperty(exports, "getEffectivePermission", {
enumerable: true,
get: function () { return chunkJO2FTGNB_cjs.getEffectivePermission; }
get: function () { return chunk5NLRYTA7_cjs.getEffectivePermission; }
});

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

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

import { getEffectivePermission, SERVER_ROUTES } from '../../chunk-2HDVP6PE.js';
export { SERVER_ROUTES, deriveAction, derivePermission, extractResource, getEffectivePermission } from '../../chunk-2HDVP6PE.js';
import { getEffectivePermission, SERVER_ROUTES } from '../../chunk-ZAK4IF2O.js';
export { SERVER_ROUTES, deriveAction, derivePermission, extractResource, getEffectivePermission } from '../../chunk-ZAK4IF2O.js';
import { coreAuthMiddleware } from '../../chunk-DHAHH4TH.js';

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

{
"name": "@mastra/server",
"version": "1.50.0-alpha.0",
"version": "1.50.0-alpha.1",
"description": "",

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

"zod-to-ts": "^2.1.0",
"@internal/lint": "0.0.111",
"@internal/test-utils": "0.0.47",
"@internal/core": "0.1.0",
"@internal/lint": "0.0.111",
"@internal/storage-test-utils": "0.0.107",
"@internal/types-builder": "0.0.86",
"@internal/voice": "0.0.11",
"@internal/test-utils": "0.0.47",
"@mastra/agent-builder": "1.1.4",
"@mastra/core": "1.50.0-alpha.0",
"@mastra/schema-compat": "1.3.3"
"@internal/storage-test-utils": "0.0.107",
"@mastra/core": "1.50.0-alpha.1",
"@mastra/schema-compat": "1.3.3",
"@internal/voice": "0.0.11"
},

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

import { SERVER_ROUTES } from './chunk-2HDVP6PE.js';
import { schemaToJsonSchema } from './chunk-PIKPS6Q6.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-5GWYLM2E.js.map
//# sourceMappingURL=api-schema-manifest-5GWYLM2E.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-5GWYLM2E.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 chunkJO2FTGNB_cjs = require('./chunk-JO2FTGNB.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.cjs');
// src/server/server-adapter/api-schema-manifest.ts
function convertSchema(schema) {
return schema ? chunkN54Q3AQR_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 = chunkJO2FTGNB_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-YOGI6NFI.cjs.map
//# sourceMappingURL=api-schema-manifest-YOGI6NFI.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-YOGI6NFI.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 { 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-LBH3CTYD.js';
import { LIST_STORED_WORKSPACES_ROUTE, GET_STORED_WORKSPACE_ROUTE, CREATE_STORED_WORKSPACE_ROUTE, UPDATE_STORED_WORKSPACE_ROUTE, DELETE_STORED_WORKSPACE_ROUTE } from './chunk-H7UZ44VA.js';
import { GET_SYSTEM_PACKAGES_ROUTE, GET_API_SCHEMA_ROUTE } from './chunk-Z4BKSPBZ.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-POM4VGLJ.js';
import { FAVORITE_STORED_AGENT_ROUTE, UNFAVORITE_STORED_AGENT_ROUTE } from './chunk-BXQHNIYS.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-4JG4GWPK.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-7ICIPSVS.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-KRZJLGGN.js';
import { LIST_STORED_SCORERS_ROUTE, GET_STORED_SCORER_ROUTE, CREATE_STORED_SCORER_ROUTE, UPDATE_STORED_SCORER_ROUTE, DELETE_STORED_SCORER_ROUTE } from './chunk-LOEWD4E6.js';
import { FAVORITE_STORED_SKILL_ROUTE, UNFAVORITE_STORED_SKILL_ROUTE } from './chunk-JOUZTIVR.js';
import { LIST_PROCESSORS_ROUTE, GET_PROCESSOR_BY_ID_ROUTE, EXECUTE_PROCESSOR_ROUTE } from './chunk-LBY32Z7C.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-LZJM4JTY.js';
import { LIST_SCHEDULES_ROUTE, GET_SCHEDULE_ROUTE, LIST_SCHEDULE_TRIGGERS_ROUTE, PAUSE_SCHEDULE_ROUTE, RESUME_SCHEDULE_ROUTE } from './chunk-RCXVCPAD.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-AWPRYEMK.js';
import { LIST_PROCESSOR_PROVIDERS_ROUTE, GET_PROCESSOR_PROVIDER_ROUTE } from './chunk-YBVHGMK4.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-XFAG2VCC.js';
import { GET_EDITOR_BUILDER_SETTINGS_ROUTE, GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE, GET_INFRASTRUCTURE_STATUS_ROUTE } from './chunk-JVVAZD6P.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-4DVFBBKV.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-6ZQIEZFG.js';
import { BACKGROUND_TASK_STREAM_ROUTE, LIST_BACKGROUND_TASKS_ROUTE, GET_BACKGROUND_TASK_ROUTE } from './chunk-S2JGT2GI.js';
import { LIST_BUILDER_REGISTRIES_ROUTE, BUILDER_REGISTRY_SEARCH_ROUTE, BUILDER_REGISTRY_POPULAR_ROUTE, BUILDER_REGISTRY_PREVIEW_ROUTE, BUILDER_REGISTRY_INSTALL_ROUTE } from './chunk-ERCBJA5A.js';
import { LIST_CHANNEL_PLATFORMS_ROUTE, LIST_CHANNEL_INSTALLATIONS_ROUTE, CONNECT_CHANNEL_ROUTE, DISCONNECT_CHANNEL_ROUTE } from './chunk-Z5DHV2QW.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-DRIJ6W3Z.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-NUPNOKI2.js';
import { EXECUTE_AGENT_TOOL_ROUTE, GET_AGENT_TOOL_ROUTE, LIST_TOOLS_ROUTE, GET_TOOL_BY_ID_ROUTE, EXECUTE_TOOL_ROUTE } from './chunk-WJXL7PJV.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-U3N4FCLP.js';
import { CREATE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE } from './chunk-ZPILA2J2.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-3VNAOZ3S.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-ULLGWMF5.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-LLVTDE4P.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-Z354XOPM.js';
import { LIST_LOG_TRANSPORTS_ROUTE, LIST_LOGS_ROUTE, LIST_LOGS_BY_RUN_ID_ROUTE } from './chunk-JXUL45J6.js';
import { CREATE_CONVERSATION_ROUTE, GET_CONVERSATION_ROUTE, GET_CONVERSATION_ITEMS_ROUTE, DELETE_CONVERSATION_ROUTE } from './chunk-Y3CWM5PU.js';
import { GET_AGENT_CARD_ROUTE, AGENT_EXECUTION_ROUTE } from './chunk-4QGCOOCW.js';
import { AUTH_ROUTES } from './chunk-CCT2USYM.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-5NREJ74P.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-ETVWGZSU.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-TQBIGT3Q.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-HK4SJHYT.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-UFZ5CTGJ.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-2HDVP6PE.js.map
//# sourceMappingURL=chunk-2HDVP6PE.js.map

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

'use strict';
var chunkMJ5QWRI2_cjs = require('./chunk-MJ5QWRI2.cjs');
var chunkTMAUK4UG_cjs = require('./chunk-TMAUK4UG.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 chunkTMAUK4UG_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 = chunkN54Q3AQR_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-2PGHAAKS.cjs.map
//# sourceMappingURL=chunk-2PGHAAKS.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-2PGHAAKS.cjs","sourcesContent":["import type { MastraScorerEntry, ScoreRowData } from '@mastra/core/evals';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { StoragePagination } from '@mastra/core/storage';\nimport { HTTPException } from '../http-exception';\nimport { runIdSchema } from '../schemas/common';\nimport {\n listScorersResponseSchema,\n scorerEntrySchema,\n scorerIdPathParams,\n entityPathParams,\n listScoresByRunIdQuerySchema,\n listScoresByScorerIdQuerySchema,\n listScoresByEntityIdQuerySchema,\n saveScoreBodySchema,\n scoresWithPaginationResponseSchema,\n saveScoreResponseSchema,\n} from '../schemas/scores';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport type { Context } from '../types';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\n\nasync function listScorersFromSystem({\n mastra,\n requestContext,\n}: Context & {\n requestContext: RequestContext;\n}) {\n const agents = mastra.listAgents();\n const workflows = mastra.listWorkflows();\n\n const scorersMap = new Map<\n string,\n MastraScorerEntry & {\n agentIds: string[];\n agentNames: string[];\n workflowIds: string[];\n isRegistered: boolean;\n source: 'code' | 'stored' | 'fs';\n }\n >();\n\n // Helper function to process an agent's scorers\n const processAgentScorers = async (agent: {\n id: string;\n name: string;\n listScorers: (typeof agents)[string]['listScorers'];\n }) => {\n const scorers =\n (await agent.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerId = scorer.scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)?.agentIds.push(agent.id);\n scorersMap.get(scorerId)?.agentNames.push(agent.name);\n } else {\n scorersMap.set(scorerId, {\n workflowIds: [],\n ...scorer,\n agentNames: [agent.name],\n agentIds: [agent.id],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n };\n\n // Process code-defined agents\n for (const [_, agent] of Object.entries(agents)) {\n await processAgentScorers(agent);\n }\n\n // Process stored agents (database-backed agents)\n try {\n const editor = mastra.getEditor();\n const storedAgentsResult = await editor?.agent.list();\n if (storedAgentsResult?.agents) {\n for (const storedAgentConfig of storedAgentsResult.agents) {\n try {\n const agent = await editor?.agent.getById(storedAgentConfig.id);\n if (agent) {\n await processAgentScorers(agent);\n }\n } catch {\n // Skip individual agents that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured - not all setups have storage\n }\n\n // Process stored scorers (standalone CMS-created scorers)\n try {\n const editor = mastra.getEditor();\n const storedScorersResult = await editor?.scorer.list();\n if (storedScorersResult?.scorerDefinitions) {\n for (const storedScorerConfig of storedScorersResult.scorerDefinitions) {\n try {\n await editor?.scorer.getById(storedScorerConfig.id);\n } catch {\n // Skip individual scorers that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured\n }\n\n for (const [workflowId, workflow] of Object.entries(workflows)) {\n const scorers =\n (await workflow.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerName = scorer.scorer.name;\n if (scorersMap.has(scorerName)) {\n scorersMap.get(scorerName)?.workflowIds.push(workflowId);\n } else {\n scorersMap.set(scorerName, {\n agentIds: [],\n agentNames: [],\n ...scorer,\n workflowIds: [workflowId],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n }\n\n const registeredScorers = await mastra.listScorers();\n for (const [_scorerId, scorer] of Object.entries(registeredScorers || {})) {\n const scorerId = scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)!.isRegistered = true;\n } else {\n scorersMap.set(scorerId, {\n scorer: scorer,\n agentIds: [],\n agentNames: [],\n workflowIds: [],\n isRegistered: true,\n source: scorer.source ?? 'code',\n });\n }\n }\n\n return Object.fromEntries(scorersMap.entries());\n}\n\n// Legacy function to get trace and span details\nfunction getTraceDetails(traceIdWithSpanId?: string) {\n if (!traceIdWithSpanId) {\n return {};\n }\n\n const [traceId, spanId] = traceIdWithSpanId.split('-');\n\n return {\n ...(traceId ? { traceId } : {}),\n ...(spanId ? { spanId } : {}),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_SCORERS_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers',\n responseType: 'json',\n responseSchema: listScorersResponseSchema,\n summary: 'List all scorers',\n description: 'Returns a list of all registered scorers with their configuration and associated agents and workflows',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n return scorers;\n }) as any,\n});\n\nexport const GET_SCORER_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n responseSchema: scorerEntrySchema.nullable(),\n summary: 'Get scorer by ID',\n description: 'Returns details for a specific scorer including its configuration and associations',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, scorerId, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n\n const scorer = scorers[scorerId];\n\n if (!scorer) {\n return null;\n }\n\n return scorer;\n }) as any,\n});\n\nexport const LIST_SCORES_BY_RUN_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/run/:runId',\n responseType: 'json',\n pathParamSchema: runIdSchema,\n queryParamSchema: listScoresByRunIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by run ID',\n description: 'Returns all scores for a specific execution run',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, runId, ...params }) => {\n try {\n const { page, perPage } = params;\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByRunId?.({\n runId,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by run id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SCORER_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorer/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n queryParamSchema: listScoresByScorerIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by scorer ID',\n description: 'Returns all scores generated by a specific scorer',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, scorerId, ...params }) => {\n try {\n const { page, perPage, entityId, entityType } = params;\n const filters = Object.fromEntries(Object.entries({ entityId, entityType }).filter(([_, v]) => v !== undefined));\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByScorerId?.({\n scorerId,\n pagination: { page: page ?? 0, perPage: perPage ?? 10 },\n ...filters,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by scorer id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_ENTITY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/entity/:entityType/:entityId',\n responseType: 'json',\n pathParamSchema: entityPathParams,\n queryParamSchema: listScoresByEntityIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by entity ID',\n description: 'Returns all scores for a specific entity (agent or workflow)',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, entityId, entityType, ...params }) => {\n try {\n const { page, perPage } = params;\n let entityIdToUse = entityId;\n\n if (entityType === 'AGENT') {\n const agent = await getAgentFromSystem({ mastra, agentId: entityId });\n entityIdToUse = agent.id;\n } else if (entityType === 'WORKFLOW') {\n const workflow = mastra.getWorkflowById(entityId);\n entityIdToUse = workflow.id;\n }\n\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scoresStore?.listScoresByEntityId?.({\n entityId: entityIdToUse,\n entityType,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by entity id');\n }\n },\n});\n\nexport const SAVE_SCORE_ROUTE = createRoute({\n method: 'POST',\n path: '/scores',\n responseType: 'json',\n bodySchema: saveScoreBodySchema,\n responseSchema: saveScoreResponseSchema,\n summary: 'Save score',\n description: 'Saves a new score record to storage',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const { score } = params as { score: ScoreRowData };\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const result = await scoresStore?.saveScore?.(score);\n if (!result) {\n throw new HTTPException(500, { message: 'Storage not configured' });\n }\n return result;\n } catch (error) {\n return handleError(error, 'Error saving score');\n }\n },\n});\n"]}
'use strict';
var chunkCXAJPAJ2_cjs = require('./chunk-CXAJPAJ2.cjs');
var chunkTGKPSQB3_cjs = require('./chunk-TGKPSQB3.cjs');
var chunkTMAUK4UG_cjs = require('./chunk-TMAUK4UG.cjs');
var chunkDRDVJ35H_cjs = require('./chunk-DRDVJ35H.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 chunkTMAUK4UG_cjs.getAgentFromSystem({ mastra, agentId });
const [instructions, tools] = await Promise.all([agent.getInstructions({ requestContext }), agent.listTools({ requestContext })]);
const agentCard = {
name: agent.id || agentId,
description: chunkDRDVJ35H_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 `${chunkTGKPSQB3_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 chunkTMAUK4UG_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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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-3HQT7VXK.cjs.map
//# sourceMappingURL=chunk-3HQT7VXK.cjs.map

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

import { validateMetadataAvatarUrl } from './chunk-HMJL3C3H.js';
import { stripFavoriteFields, prepareFavoritesEnrichment, enrichOrStripFavorites } from './chunk-JZUUCCEO.js';
import { isBuilderFeatureEnabled } from './chunk-JVVAZD6P.js';
import { prepareAuthorEnrichment, attachAuthor } from './chunk-4W5AVWZH.js';
import { resolveAuthorFilter, getCallerAuthorId, matchesAuthorFilter, assertReadAccess, assertWriteAccess } from './chunk-SXZS6VZ3.js';
import { handleAutoVersioning } from './chunk-33QPJPK4.js';
import { listStoredAgentsResponseSchema, listStoredAgentsQuerySchema, exportStoredAgentResponseSchema, exportStoredAgentBodySchema, storedAgentIdPathParams, openStoredAgentChangeRequestResponseSchema, openStoredAgentChangeRequestBodySchema, getStoredAgentResponseSchema, createStoredAgentResponseSchema, createStoredAgentBodySchema, updateStoredAgentResponseSchema, updateStoredAgentBodySchema, deleteStoredAgentResponseSchema, getStoredAgentDependentsResponseSchema, previewInstructionsResponseSchema, previewInstructionsBodySchema } from './chunk-MPFUINWR.js';
import { statusQuerySchema } from './chunk-2YY3EMMS.js';
import { getStoredResourceScope, scopeStoredResourceMetadata, assertStoredResourceScope, toSlug } from './chunk-QIQWHDPH.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-4JG4GWPK.js.map
//# sourceMappingURL=chunk-4JG4GWPK.js.map

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

import { agentCardResponseSchema, a2aAgentIdPathParams, agentExecutionResponseSchema, agentExecutionBodySchema } from './chunk-KEE6UMGC.js';
import { getPublicOrigin } from './chunk-CCT2USYM.js';
import { getAgentFromSystem } from './chunk-5NREJ74P.js';
import { convertInstructionsToString } from './chunk-QIQWHDPH.js';
import { createRoute } from './chunk-PIKPS6Q6.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-4QGCOOCW.js.map
//# sourceMappingURL=chunk-4QGCOOCW.js.map

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

'use strict';
var chunkNI2DJ2VW_cjs = require('./chunk-NI2DJ2VW.cjs');
var chunkF3HP5HM6_cjs = require('./chunk-F3HP5HM6.cjs');
var chunkKIDHIRVO_cjs = require('./chunk-KIDHIRVO.cjs');
var chunkTMAUK4UG_cjs = require('./chunk-TMAUK4UG.cjs');
var chunk42M6Y2OD_cjs = require('./chunk-42M6Y2OD.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 = chunkN54Q3AQR_cjs.createRoute({
method: "POST",
path: "/v1/conversations",
responseType: "json",
bodySchema: chunkNI2DJ2VW_cjs.createConversationBodySchema,
responseSchema: chunkNI2DJ2VW_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 chunkTMAUK4UG_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 = chunkN54Q3AQR_cjs.createRoute({
method: "GET",
path: "/v1/conversations/:conversationId",
responseType: "json",
pathParamSchema: chunkNI2DJ2VW_cjs.conversationIdPathParams,
responseSchema: chunkNI2DJ2VW_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 = chunkN54Q3AQR_cjs.createRoute({
method: "GET",
path: "/v1/conversations/:conversationId/items",
responseType: "json",
pathParamSchema: chunkNI2DJ2VW_cjs.conversationIdPathParams,
responseSchema: chunkNI2DJ2VW_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 = chunkN54Q3AQR_cjs.createRoute({
method: "DELETE",
path: "/v1/conversations/:conversationId",
responseType: "json",
pathParamSchema: chunkNI2DJ2VW_cjs.conversationIdPathParams,
responseSchema: chunkNI2DJ2VW_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-4SSXL7RB.cjs.map
//# sourceMappingURL=chunk-4SSXL7RB.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-4SSXL7RB.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"]}

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

import { favoriteToggleResponseSchema } from './chunk-SFPN7SHZ.js';
import { requireBuilderFeature } from './chunk-JVVAZD6P.js';
import { getCallerAuthorId, assertReadAccess } from './chunk-SXZS6VZ3.js';
import { storedAgentIdPathParams } from './chunk-MPFUINWR.js';
import { assertStoredResourceScope, getStoredResourceScope } from './chunk-QIQWHDPH.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-BXQHNIYS.js.map
//# sourceMappingURL=chunk-BXQHNIYS.js.map
{"version":3,"sources":["../src/server/handlers/stored-agent-favorites.ts"],"names":[],"mappings":"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","file":"chunk-BXQHNIYS.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"]}

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

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

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-TQBIGT3Q.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-QIQWHDPH.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-JSC2CQVL.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-ETVWGZSU.js.map
//# sourceMappingURL=chunk-ETVWGZSU.js.map
{"version":3,"sources":["../src/server/handlers/agent-builder.ts"],"names":[],"mappings":"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","file":"chunk-ETVWGZSU.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 chunkKXKNHXU3_cjs = require('./chunk-KXKNHXU3.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
// src/server/handlers/favorites-enrichment.ts
async function prepareFavoritesEnrichment(mastra, requestContext, entityType, entityIds) {
if (!await chunkKXKNHXU3_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-FORER7LG.cjs.map
//# sourceMappingURL=chunk-FORER7LG.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-FORER7LG.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"]}
'use strict';
var chunkO4O2EJF7_cjs = require('./chunk-O4O2EJF7.cjs');
var chunkKXKNHXU3_cjs = require('./chunk-KXKNHXU3.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
var chunkW36PYFFL_cjs = require('./chunk-W36PYFFL.cjs');
var chunkDRDVJ35H_cjs = require('./chunk-DRDVJ35H.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 = chunkN54Q3AQR_cjs.createRoute({
method: "PUT",
path: "/stored/agents/:storedAgentId/favorite",
responseType: "json",
pathParamSchema: chunkW36PYFFL_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 chunkKXKNHXU3_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(agent, await chunkDRDVJ35H_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 = chunkN54Q3AQR_cjs.createRoute({
method: "DELETE",
path: "/stored/agents/:storedAgentId/favorite",
responseType: "json",
pathParamSchema: chunkW36PYFFL_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 chunkKXKNHXU3_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(agent, await chunkDRDVJ35H_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-GN5Y2NOX.cjs.map
//# sourceMappingURL=chunk-GN5Y2NOX.cjs.map
{"version":3,"sources":["../src/server/handlers/stored-agent-favorites.ts"],"names":["HTTPException","createRoute","storedAgentIdPathParams","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,OAAA,CAAQ,aAAa,CAAA;AACpD,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,OAAA,CAAQ,aAAa,CAAA;AACpD,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-GN5Y2NOX.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 chunkKXKNHXU3_cjs = require('./chunk-KXKNHXU3.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
var chunkDRDVJ35H_cjs = require('./chunk-DRDVJ35H.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 = chunkN54Q3AQR_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 chunkKXKNHXU3_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(skill, await chunkDRDVJ35H_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 = chunkN54Q3AQR_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 chunkKXKNHXU3_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(skill, await chunkDRDVJ35H_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-GULCRVVE.cjs.map
//# sourceMappingURL=chunk-GULCRVVE.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-GULCRVVE.cjs","sourcesContent":["import { HTTPException } from '../http-exception';\nimport { favoriteToggleResponseSchema } from '../schemas/favorites';\nimport { storedSkillIdPathParams } from '../schemas/stored-skills';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { assertReadAccess, getCallerAuthorId } from './authorship';\nimport { requireBuilderFeature } from './editor-builder';\nimport { handleError } from './error';\n\n/**\n * Resolves the storage and favorites domains, throwing 500 if unavailable.\n */\nasync function getFavoritesContext(mastra: Parameters<typeof requireBuilderFeature>[0]) {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) {\n throw new HTTPException(500, { message: 'Favorites storage domain is not available' });\n }\n return { skillStore, favoritesStore };\n}\n\n/**\n * PUT /stored/skills/:storedSkillId/favorite\n */\nexport const FAVORITE_STORED_SKILL_ROUTE = createRoute({\n method: 'PUT',\n path: '/stored/skills/:storedSkillId/favorite',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Favorite a stored skill',\n description: 'Marks the stored skill as favorited by the calling user. Idempotent.',\n tags: ['Stored Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { skillStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const skill = await skillStore.getByIdResolved(storedSkillId);\n if (!skill) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller cannot read the skill (private + not owner/admin).\n assertReadAccess({ requestContext, resource: 'stored-skills', resourceId: storedSkillId, record: skill });\n\n const result = await favoritesStore.favorite({\n userId: callerId,\n entityType: 'skill',\n entityId: storedSkillId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error favoriting stored skill');\n }\n },\n});\n\n/**\n * DELETE /stored/skills/:storedSkillId/favorite\n */\nexport const UNFAVORITE_STORED_SKILL_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/skills/:storedSkillId/favorite',\n responseType: 'json',\n pathParamSchema: storedSkillIdPathParams,\n responseSchema: favoriteToggleResponseSchema,\n summary: 'Unfavorite a stored skill',\n description: 'Removes the caller’s favorite from the stored skill. Idempotent.',\n tags: ['Stored Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra, requestContext, storedSkillId }) => {\n try {\n await requireBuilderFeature(mastra, 'favorites');\n\n const callerId = getCallerAuthorId(requestContext);\n if (!callerId) {\n throw new HTTPException(401, { message: 'Authentication required' });\n }\n\n const { skillStore, favoritesStore } = await getFavoritesContext(mastra);\n\n const skill = await skillStore.getByIdResolved(storedSkillId);\n if (!skill) {\n throw new HTTPException(404, { message: `Stored skill with id ${storedSkillId} not found` });\n }\n assertStoredResourceScope(skill, await getStoredResourceScope(mastra, requestContext));\n\n assertReadAccess({ requestContext, resource: 'stored-skills', resourceId: storedSkillId, record: skill });\n\n const result = await favoritesStore.unfavorite({\n userId: callerId,\n entityType: 'skill',\n entityId: storedSkillId,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error unfavoriting stored skill');\n }\n },\n});\n"]}
'use strict';
var chunkZCX2J552_cjs = require('./chunk-ZCX2J552.cjs');
var chunkFORER7LG_cjs = require('./chunk-FORER7LG.cjs');
var chunkKXKNHXU3_cjs = require('./chunk-KXKNHXU3.cjs');
var chunk5SY2ZQ3R_cjs = require('./chunk-5SY2ZQ3R.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
var chunk2XZ2466F_cjs = require('./chunk-2XZ2466F.cjs');
var chunkW36PYFFL_cjs = require('./chunk-W36PYFFL.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var chunkDRDVJ35H_cjs = require('./chunk-DRDVJ35H.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 = chunkN54Q3AQR_cjs.createRoute({
method: "GET",
path: "/stored/agents",
responseType: "json",
queryParamSchema: chunkW36PYFFL_cjs.listStoredAgentsQuerySchema,
responseSchema: chunkW36PYFFL_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 chunkDRDVJ35H_cjs.getStoredResourceScope(mastra, requestContext);
const scopedMetadata = chunkDRDVJ35H_cjs.scopeStoredResourceMetadata(metadata, scope);
const callerId = chunkHDIYJI2Z_cjs.getCallerAuthorId(requestContext);
const favoritesEnabled = await chunkKXKNHXU3_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 chunk5SY2ZQ3R_cjs.prepareAuthorEnrichment(
mastra,
requestContext,
annotated2.map((a) => a.authorId)
);
const withAuthors2 = authors2 ? annotated2.map((record) => chunk5SY2ZQ3R_cjs.attachAuthor(record, authors2)) : annotated2;
const hasMore = effectivePerPage > 0 && endIdx < total;
return { agents: withAuthors2, total, page, perPage: effectivePerPage, hasMore };
}
const result = await agentsStore.listResolved({
page,
perPage,
orderBy,
status,
authorId: filter.kind === "exact" ? filter.authorId : void 0,
metadata: scopedMetadata
});
const visibleAgents = result.agents.filter((record) => chunkHDIYJI2Z_cjs.matchesAuthorFilter(record, filter));
const authors = await chunk5SY2ZQ3R_cjs.prepareAuthorEnrichment(
mastra,
requestContext,
visibleAgents.map((a) => a.authorId)
);
if (!favoritesEnabled) {
const stripped = visibleAgents.map(chunkFORER7LG_cjs.stripFavoriteFields);
const withAuthors2 = authors ? stripped.map((record) => chunk5SY2ZQ3R_cjs.attachAuthor(record, authors)) : stripped;
return { ...result, agents: withAuthors2 };
}
const enrichment = await chunkFORER7LG_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(chunkFORER7LG_cjs.stripFavoriteFields);
const withAuthors = authors ? annotated.map((record) => chunk5SY2ZQ3R_cjs.attachAuthor(record, authors)) : annotated;
return { ...result, agents: withAuthors };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing stored agents");
}
}
});
async function buildStoredAgentExport({
mastra,
requestContext,
storedAgentId,
body
}) {
const storage = mastra.getStorage();
const agentsStore = storage ? await storage.getStore("agents") : void 0;
const storedAgent = await agentsStore?.getByIdResolved(storedAgentId, { status: "draft" });
if (storedAgent) {
chunkDRDVJ35H_cjs.assertStoredResourceScope(storedAgent, await chunkDRDVJ35H_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 = chunkN54Q3AQR_cjs.createRoute({
method: "POST",
path: "/stored/agents/:storedAgentId/export",
responseType: "json",
pathParamSchema: chunkW36PYFFL_cjs.storedAgentIdPathParams,
bodySchema: chunkW36PYFFL_cjs.exportStoredAgentBodySchema,
responseSchema: chunkW36PYFFL_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 = chunkN54Q3AQR_cjs.createRoute({
method: "POST",
path: "/stored/agents/:storedAgentId/change-request",
responseType: "json",
pathParamSchema: chunkW36PYFFL_cjs.storedAgentIdPathParams,
bodySchema: chunkW36PYFFL_cjs.openStoredAgentChangeRequestBodySchema,
responseSchema: chunkW36PYFFL_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 = chunkN54Q3AQR_cjs.createRoute({
method: "GET",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkW36PYFFL_cjs.storedAgentIdPathParams,
queryParamSchema: chunkDIG2K5CV_cjs.statusQuerySchema,
responseSchema: chunkW36PYFFL_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(agent, await chunkDRDVJ35H_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
const authors = await chunk5SY2ZQ3R_cjs.prepareAuthorEnrichment(mastra, requestContext, [agent.authorId]);
const withFavorite = await chunkFORER7LG_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", agent);
return chunk5SY2ZQ3R_cjs.attachAuthor(withFavorite, authors);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting stored agent");
}
}
});
var CREATE_STORED_AGENT_ROUTE = chunkN54Q3AQR_cjs.createRoute({
method: "POST",
path: "/stored/agents",
responseType: "json",
bodySchema: chunkW36PYFFL_cjs.createStoredAgentBodySchema,
responseSchema: chunkW36PYFFL_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 || chunkDRDVJ35H_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: chunkDRDVJ35H_cjs.scopeStoredResourceMetadata(metadata, await chunkDRDVJ35H_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 chunkFORER7LG_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating stored agent");
}
}
});
var UPDATE_STORED_AGENT_ROUTE = chunkN54Q3AQR_cjs.createRoute({
method: "PATCH",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkW36PYFFL_cjs.storedAgentIdPathParams,
bodySchema: chunkW36PYFFL_cjs.updateStoredAgentBodySchema,
responseSchema: chunkW36PYFFL_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 chunkDRDVJ35H_cjs.getStoredResourceScope(mastra, requestContext);
chunkDRDVJ35H_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 = chunkDRDVJ35H_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 chunkFORER7LG_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error updating stored agent");
}
}
});
var DELETE_STORED_AGENT_ROUTE = chunkN54Q3AQR_cjs.createRoute({
method: "DELETE",
path: "/stored/agents/:storedAgentId",
responseType: "json",
pathParamSchema: chunkW36PYFFL_cjs.storedAgentIdPathParams,
responseSchema: chunkW36PYFFL_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(existing, await chunkDRDVJ35H_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 = chunkN54Q3AQR_cjs.createRoute({
method: "GET",
path: "/stored/agents/:storedAgentId/dependents",
responseType: "json",
pathParamSchema: chunkW36PYFFL_cjs.storedAgentIdPathParams,
responseSchema: chunkW36PYFFL_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(target, await chunkDRDVJ35H_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 = chunkN54Q3AQR_cjs.createRoute({
method: "POST",
path: "/stored/agents/preview-instructions",
responseType: "json",
bodySchema: chunkW36PYFFL_cjs.previewInstructionsBodySchema,
responseSchema: chunkW36PYFFL_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-IBZHIMZ3.cjs.map
//# sourceMappingURL=chunk-IBZHIMZ3.cjs.map

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

'use strict';
var chunkXMBSW6DM_cjs = require('./chunk-XMBSW6DM.cjs');
var chunkGJBHQJBK_cjs = require('./chunk-GJBHQJBK.cjs');
var chunkY44XPBTJ_cjs = require('./chunk-Y44XPBTJ.cjs');
var chunkIEE5MCG5_cjs = require('./chunk-IEE5MCG5.cjs');
var chunkGN5Y2NOX_cjs = require('./chunk-GN5Y2NOX.cjs');
var chunkIBZHIMZ3_cjs = require('./chunk-IBZHIMZ3.cjs');
var chunkYKY2YBJI_cjs = require('./chunk-YKY2YBJI.cjs');
var chunkUHKWQQBG_cjs = require('./chunk-UHKWQQBG.cjs');
var chunkLTQYCKDT_cjs = require('./chunk-LTQYCKDT.cjs');
var chunkGULCRVVE_cjs = require('./chunk-GULCRVVE.cjs');
var chunkYZ6PW23L_cjs = require('./chunk-YZ6PW23L.cjs');
var chunkHR4F4XZV_cjs = require('./chunk-HR4F4XZV.cjs');
var chunk7XZQUQEO_cjs = require('./chunk-7XZQUQEO.cjs');
var chunkN4IIUIJS_cjs = require('./chunk-N4IIUIJS.cjs');
var chunkXXNADDFD_cjs = require('./chunk-XXNADDFD.cjs');
var chunkVCCMOFQR_cjs = require('./chunk-VCCMOFQR.cjs');
var chunkKXKNHXU3_cjs = require('./chunk-KXKNHXU3.cjs');
var chunkXTB6XXHH_cjs = require('./chunk-XTB6XXHH.cjs');
var chunkVZ7EXKEF_cjs = require('./chunk-VZ7EXKEF.cjs');
var chunkUIAQYIDW_cjs = require('./chunk-UIAQYIDW.cjs');
var chunk4ATFZDHI_cjs = require('./chunk-4ATFZDHI.cjs');
var chunkWGEIHQXI_cjs = require('./chunk-WGEIHQXI.cjs');
var chunkBQ2JQTKA_cjs = require('./chunk-BQ2JQTKA.cjs');
var chunkPMGFP7II_cjs = require('./chunk-PMGFP7II.cjs');
var chunk2VO3BDE5_cjs = require('./chunk-2VO3BDE5.cjs');
var chunkTGHO7KPM_cjs = require('./chunk-TGHO7KPM.cjs');
var chunk2PGHAAKS_cjs = require('./chunk-2PGHAAKS.cjs');
var chunkMVHJTBLL_cjs = require('./chunk-MVHJTBLL.cjs');
var chunk76YQAK7Q_cjs = require('./chunk-76YQAK7Q.cjs');
var chunk7KNGT7JR_cjs = require('./chunk-7KNGT7JR.cjs');
var chunkU52CKL4A_cjs = require('./chunk-U52CKL4A.cjs');
var chunk46D4LXPJ_cjs = require('./chunk-46D4LXPJ.cjs');
var chunkJJOGTXKN_cjs = require('./chunk-JJOGTXKN.cjs');
var chunk4SSXL7RB_cjs = require('./chunk-4SSXL7RB.cjs');
var chunk3HQT7VXK_cjs = require('./chunk-3HQT7VXK.cjs');
var chunkTGKPSQB3_cjs = require('./chunk-TGKPSQB3.cjs');
var chunkTMAUK4UG_cjs = require('./chunk-TMAUK4UG.cjs');
var chunkQ56NQYUJ_cjs = require('./chunk-Q56NQYUJ.cjs');
var chunkRJPRSDIS_cjs = require('./chunk-RJPRSDIS.cjs');
var chunk57BKC4ZW_cjs = require('./chunk-57BKC4ZW.cjs');
var chunk347OHR7U_cjs = require('./chunk-347OHR7U.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 = [chunk3HQT7VXK_cjs.GET_AGENT_CARD_ROUTE, chunk3HQT7VXK_cjs.AGENT_EXECUTION_ROUTE];
// src/server/server-adapter/routes/agent-builder.ts
var AGENT_BUILDER_ROUTES = [
chunkQ56NQYUJ_cjs.LIST_AGENT_BUILDER_ACTIONS_ROUTE,
chunkQ56NQYUJ_cjs.GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,
chunkQ56NQYUJ_cjs.LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,
chunkQ56NQYUJ_cjs.GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,
chunkQ56NQYUJ_cjs.CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,
chunkQ56NQYUJ_cjs.STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunkQ56NQYUJ_cjs.STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
chunkQ56NQYUJ_cjs.START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
chunkQ56NQYUJ_cjs.START_AGENT_BUILDER_ACTION_RUN_ROUTE,
chunkQ56NQYUJ_cjs.OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunkQ56NQYUJ_cjs.OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
chunkQ56NQYUJ_cjs.RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
chunkQ56NQYUJ_cjs.RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,
chunkQ56NQYUJ_cjs.RESUME_AGENT_BUILDER_ACTION_ROUTE,
chunkQ56NQYUJ_cjs.RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunkQ56NQYUJ_cjs.CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE
];
// src/server/server-adapter/routes/agent-controller.ts
var AGENT_CONTROLLER_ROUTES = [
chunk57BKC4ZW_cjs.LIST_AGENT_CONTROLLERS_ROUTE,
chunk57BKC4ZW_cjs.LIST_AGENT_CONTROLLER_MODES_ROUTE,
chunk57BKC4ZW_cjs.LIST_AGENT_CONTROLLER_MODELS_ROUTE,
chunk57BKC4ZW_cjs.CREATE_AGENT_CONTROLLER_SESSION_ROUTE,
chunk57BKC4ZW_cjs.GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE,
chunk57BKC4ZW_cjs.LIST_AGENT_CONTROLLER_THREADS_ROUTE,
chunk57BKC4ZW_cjs.CREATE_AGENT_CONTROLLER_THREAD_ROUTE,
chunk57BKC4ZW_cjs.DELETE_AGENT_CONTROLLER_THREAD_ROUTE,
chunk57BKC4ZW_cjs.RENAME_AGENT_CONTROLLER_THREAD_ROUTE,
chunk57BKC4ZW_cjs.CLONE_AGENT_CONTROLLER_THREAD_ROUTE,
chunk57BKC4ZW_cjs.LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE,
chunk57BKC4ZW_cjs.STREAM_AGENT_CONTROLLER_SESSION_ROUTE,
chunk57BKC4ZW_cjs.SEND_AGENT_CONTROLLER_MESSAGE_ROUTE,
chunk57BKC4ZW_cjs.STEER_AGENT_CONTROLLER_SESSION_ROUTE,
chunk57BKC4ZW_cjs.FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE,
chunk57BKC4ZW_cjs.ABORT_AGENT_CONTROLLER_SESSION_ROUTE,
chunk57BKC4ZW_cjs.AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE,
chunk57BKC4ZW_cjs.AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE,
chunk57BKC4ZW_cjs.SWITCH_AGENT_CONTROLLER_MODE_ROUTE,
chunk57BKC4ZW_cjs.SWITCH_AGENT_CONTROLLER_MODEL_ROUTE,
chunk57BKC4ZW_cjs.SWITCH_AGENT_CONTROLLER_THREAD_ROUTE,
chunk57BKC4ZW_cjs.SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE,
chunk57BKC4ZW_cjs.GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE,
chunk57BKC4ZW_cjs.GET_AGENT_CONTROLLER_OM_RECORD_ROUTE,
chunk57BKC4ZW_cjs.SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE,
chunk57BKC4ZW_cjs.GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE,
chunk57BKC4ZW_cjs.GET_AGENT_CONTROLLER_GOAL_ROUTE,
chunk57BKC4ZW_cjs.SET_AGENT_CONTROLLER_GOAL_ROUTE,
chunk57BKC4ZW_cjs.UPDATE_AGENT_CONTROLLER_GOAL_ROUTE,
chunk57BKC4ZW_cjs.CLEAR_AGENT_CONTROLLER_GOAL_ROUTE,
chunk57BKC4ZW_cjs.GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE,
chunk57BKC4ZW_cjs.SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE,
chunk57BKC4ZW_cjs.SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE,
chunk57BKC4ZW_cjs.SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE
];
// src/server/server-adapter/routes/agents.ts
var AGENTS_ROUTES = [
// ============================================================================
// Agent Core Routes
// ============================================================================
chunkTMAUK4UG_cjs.LIST_AGENTS_ROUTE,
chunkTMAUK4UG_cjs.GET_PROVIDERS_ROUTE,
chunkTMAUK4UG_cjs.GET_AGENT_BY_ID_ROUTE,
chunkTMAUK4UG_cjs.CLONE_AGENT_ROUTE,
// ============================================================================
// Voice Routes
// ============================================================================
chunkPMGFP7II_cjs.GET_SPEAKERS_ROUTE,
chunkPMGFP7II_cjs.GET_SPEAKERS_DEPRECATED_ROUTE,
// ============================================================================
// Agent Execution Routes
// ============================================================================
chunkTMAUK4UG_cjs.GENERATE_AGENT_ROUTE,
chunkTMAUK4UG_cjs.GENERATE_AGENT_VNEXT_ROUTE,
chunkTMAUK4UG_cjs.STREAM_GENERATE_ROUTE,
chunkTMAUK4UG_cjs.STREAM_UNTIL_IDLE_GENERATE_ROUTE,
chunkTMAUK4UG_cjs.STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,
// ============================================================================
// Resumable Stream Routes
// ============================================================================
chunkTMAUK4UG_cjs.OBSERVE_AGENT_STREAM_ROUTE,
chunkTMAUK4UG_cjs.SEND_AGENT_MESSAGE_ROUTE,
chunkTMAUK4UG_cjs.QUEUE_AGENT_MESSAGE_ROUTE,
chunkTMAUK4UG_cjs.SEND_AGENT_SIGNAL_ROUTE,
chunkTMAUK4UG_cjs.ABORT_AGENT_THREAD_ROUTE,
chunkTMAUK4UG_cjs.SUBSCRIBE_AGENT_THREAD_ROUTE,
// ============================================================================
// Tool Routes
// ============================================================================
chunkTGHO7KPM_cjs.EXECUTE_AGENT_TOOL_ROUTE,
chunkTMAUK4UG_cjs.APPROVE_TOOL_CALL_ROUTE,
chunkTMAUK4UG_cjs.SEND_TOOL_APPROVAL_ROUTE,
chunkTMAUK4UG_cjs.LIST_SUSPENDED_RUNS_ROUTE,
chunkTMAUK4UG_cjs.DECLINE_TOOL_CALL_ROUTE,
chunkTMAUK4UG_cjs.RESUME_STREAM_ROUTE,
chunkTMAUK4UG_cjs.APPROVE_TOOL_CALL_GENERATE_ROUTE,
chunkTMAUK4UG_cjs.DECLINE_TOOL_CALL_GENERATE_ROUTE,
chunkTMAUK4UG_cjs.APPROVE_NETWORK_TOOL_CALL_ROUTE,
chunkTMAUK4UG_cjs.DECLINE_NETWORK_TOOL_CALL_ROUTE,
chunkTMAUK4UG_cjs.RESUME_STREAM_UNTIL_IDLE_ROUTE,
// ============================================================================
// Network Routes
// ============================================================================
chunkTMAUK4UG_cjs.STREAM_NETWORK_ROUTE,
// ============================================================================
// Model Management Routes
// ============================================================================
chunkTMAUK4UG_cjs.UPDATE_AGENT_MODEL_ROUTE,
chunkTMAUK4UG_cjs.RESET_AGENT_MODEL_ROUTE,
chunkTMAUK4UG_cjs.REORDER_AGENT_MODEL_LIST_ROUTE,
chunkTMAUK4UG_cjs.UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,
// ============================================================================
// Instruction Enhancement Routes
// ============================================================================
chunkTMAUK4UG_cjs.ENHANCE_INSTRUCTIONS_ROUTE,
// ============================================================================
// Agent Tool Routes
// ============================================================================
chunkTGHO7KPM_cjs.GET_AGENT_TOOL_ROUTE,
// ============================================================================
// Agent Skill Routes
// ============================================================================
chunkTMAUK4UG_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
// ============================================================================
chunkTMAUK4UG_cjs.STREAM_VNEXT_DEPRECATED_ROUTE,
chunkTMAUK4UG_cjs.STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,
chunkTMAUK4UG_cjs.STREAM_UI_MESSAGE_DEPRECATED_ROUTE
];
// src/server/server-adapter/routes/background-tasks.ts
var BACKGROUND_TASK_ROUTES = [
chunkUIAQYIDW_cjs.BACKGROUND_TASK_STREAM_ROUTE,
chunkUIAQYIDW_cjs.LIST_BACKGROUND_TASKS_ROUTE,
chunkUIAQYIDW_cjs.GET_BACKGROUND_TASK_ROUTE
];
// src/server/server-adapter/routes/channels.ts
var CHANNELS_ROUTES = [
chunkWGEIHQXI_cjs.LIST_CHANNEL_PLATFORMS_ROUTE,
chunkWGEIHQXI_cjs.LIST_CHANNEL_INSTALLATIONS_ROUTE,
chunkWGEIHQXI_cjs.CONNECT_CHANNEL_ROUTE,
chunkWGEIHQXI_cjs.DISCONNECT_CHANNEL_ROUTE
];
// src/server/server-adapter/routes/conversations.ts
var CONVERSATIONS_ROUTES = [
chunk4SSXL7RB_cjs.CREATE_CONVERSATION_ROUTE,
chunk4SSXL7RB_cjs.GET_CONVERSATION_ROUTE,
chunk4SSXL7RB_cjs.GET_CONVERSATION_ITEMS_ROUTE,
chunk4SSXL7RB_cjs.DELETE_CONVERSATION_ROUTE
];
// src/server/server-adapter/routes/datasets.ts
var DATASETS_ROUTES = [
// Dataset CRUD
chunkVCCMOFQR_cjs.LIST_DATASETS_ROUTE,
chunkVCCMOFQR_cjs.CREATE_DATASET_ROUTE,
chunkVCCMOFQR_cjs.GET_DATASET_ROUTE,
chunkVCCMOFQR_cjs.UPDATE_DATASET_ROUTE,
chunkVCCMOFQR_cjs.DELETE_DATASET_ROUTE,
// Item list and add
chunkVCCMOFQR_cjs.LIST_ITEMS_ROUTE,
chunkVCCMOFQR_cjs.ADD_ITEM_ROUTE,
// Batch operations - MUST come before item-specific routes to avoid /items/batch matching /items/:itemId
chunkVCCMOFQR_cjs.BATCH_INSERT_ITEMS_ROUTE,
chunkVCCMOFQR_cjs.BATCH_DELETE_ITEMS_ROUTE,
// Item-specific CRUD (uses :itemId param)
chunkVCCMOFQR_cjs.GET_ITEM_ROUTE,
chunkVCCMOFQR_cjs.UPDATE_ITEM_ROUTE,
chunkVCCMOFQR_cjs.DELETE_ITEM_ROUTE,
// Version operations
chunkVCCMOFQR_cjs.LIST_DATASET_VERSIONS_ROUTE,
chunkVCCMOFQR_cjs.LIST_ITEM_VERSIONS_ROUTE,
chunkVCCMOFQR_cjs.GET_ITEM_VERSION_ROUTE,
// All experiments (cross-dataset) - MUST come before dataset-scoped experiments
chunkVCCMOFQR_cjs.LIST_ALL_EXPERIMENTS_ROUTE,
// Experiment review summary (cross-dataset) - MUST come before dataset-scoped experiments
chunkVCCMOFQR_cjs.EXPERIMENT_REVIEW_SUMMARY_ROUTE,
// Experiment operations (dataset-scoped)
chunkVCCMOFQR_cjs.LIST_EXPERIMENTS_ROUTE,
chunkVCCMOFQR_cjs.TRIGGER_EXPERIMENT_ROUTE,
chunkVCCMOFQR_cjs.GET_EXPERIMENT_ROUTE,
chunkVCCMOFQR_cjs.LIST_EXPERIMENT_RESULTS_ROUTE,
chunkVCCMOFQR_cjs.UPDATE_EXPERIMENT_RESULT_ROUTE,
// Analytics
chunkVCCMOFQR_cjs.COMPARE_EXPERIMENTS_ROUTE,
// AI generation
chunkVCCMOFQR_cjs.GENERATE_ITEMS_ROUTE,
// Failure analysis
chunkVCCMOFQR_cjs.CLUSTER_FAILURES_ROUTE
];
// src/server/server-adapter/routes/editor-builder.ts
var EDITOR_BUILDER_ROUTES = [
chunkKXKNHXU3_cjs.GET_EDITOR_BUILDER_SETTINGS_ROUTE,
chunkKXKNHXU3_cjs.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE,
chunkKXKNHXU3_cjs.GET_INFRASTRUCTURE_STATUS_ROUTE,
chunk4ATFZDHI_cjs.LIST_BUILDER_REGISTRIES_ROUTE,
chunk4ATFZDHI_cjs.BUILDER_REGISTRY_SEARCH_ROUTE,
chunk4ATFZDHI_cjs.BUILDER_REGISTRY_POPULAR_ROUTE,
chunk4ATFZDHI_cjs.BUILDER_REGISTRY_PREVIEW_ROUTE,
chunk4ATFZDHI_cjs.BUILDER_REGISTRY_INSTALL_ROUTE
];
// src/server/server-adapter/routes/heartbeats.ts
var HEARTBEATS_ROUTES = [
chunkXTB6XXHH_cjs.LIST_HEARTBEATS_ROUTE,
chunkXTB6XXHH_cjs.GET_HEARTBEAT_ROUTE,
chunkXTB6XXHH_cjs.CREATE_HEARTBEAT_ROUTE,
chunkXTB6XXHH_cjs.UPDATE_HEARTBEAT_ROUTE,
chunkXTB6XXHH_cjs.DELETE_HEARTBEAT_ROUTE,
chunkXTB6XXHH_cjs.PAUSE_HEARTBEAT_ROUTE,
chunkXTB6XXHH_cjs.RESUME_HEARTBEAT_ROUTE,
chunkXTB6XXHH_cjs.RUN_HEARTBEAT_ROUTE
];
// src/server/server-adapter/routes/legacy.ts
var LEGACY_ROUTES = [
// ============================================================================
// Legacy Agent Routes
// ============================================================================
chunkTMAUK4UG_cjs.GENERATE_LEGACY_ROUTE,
chunkTMAUK4UG_cjs.STREAM_GENERATE_LEGACY_ROUTE,
// ============================================================================
// Legacy Workflow Routes
// ============================================================================
chunkRJPRSDIS_cjs.STREAM_LEGACY_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE
];
// src/server/server-adapter/routes/logs.ts
var LOGS_ROUTES = [chunkJJOGTXKN_cjs.LIST_LOG_TRANSPORTS_ROUTE, chunkJJOGTXKN_cjs.LIST_LOGS_ROUTE, chunkJJOGTXKN_cjs.LIST_LOGS_BY_RUN_ID_ROUTE];
// src/server/server-adapter/routes/mcp.ts
var MCP_ROUTES = [
// ============================================================================
// MCP Server Registry Routes
// ============================================================================
chunk76YQAK7Q_cjs.LIST_MCP_SERVERS_ROUTE,
chunk76YQAK7Q_cjs.GET_MCP_SERVER_DETAIL_ROUTE,
// ============================================================================
// MCP Server Tool Routes
// ============================================================================
chunk76YQAK7Q_cjs.LIST_MCP_SERVER_TOOLS_ROUTE,
chunk76YQAK7Q_cjs.GET_MCP_SERVER_TOOL_DETAIL_ROUTE,
chunk76YQAK7Q_cjs.EXECUTE_MCP_SERVER_TOOL_ROUTE,
// ============================================================================
// MCP Server Resource Routes
// ============================================================================
chunk76YQAK7Q_cjs.LIST_MCP_SERVER_RESOURCES_ROUTE,
chunk76YQAK7Q_cjs.READ_MCP_SERVER_RESOURCE_ROUTE,
// ============================================================================
// MCP Transport Routes (handled by adapters)
// ============================================================================
chunk76YQAK7Q_cjs.MCP_HTTP_TRANSPORT_ROUTE,
chunk76YQAK7Q_cjs.MCP_SSE_TRANSPORT_ROUTE,
chunk76YQAK7Q_cjs.MCP_SSE_MESSAGES_ROUTE
];
// src/server/server-adapter/routes/memory.ts
var MEMORY_ROUTES = [
chunk7KNGT7JR_cjs.GET_MEMORY_STATUS_ROUTE,
chunk7KNGT7JR_cjs.GET_MEMORY_CONFIG_ROUTE,
chunk7KNGT7JR_cjs.GET_OBSERVATIONAL_MEMORY_ROUTE,
chunk7KNGT7JR_cjs.AWAIT_BUFFER_STATUS_ROUTE,
chunk7KNGT7JR_cjs.LIST_THREADS_ROUTE,
chunk7KNGT7JR_cjs.GET_THREAD_BY_ID_ROUTE,
chunk7KNGT7JR_cjs.LIST_MESSAGES_ROUTE,
chunk7KNGT7JR_cjs.GET_WORKING_MEMORY_ROUTE,
chunk7KNGT7JR_cjs.SAVE_MESSAGES_ROUTE,
chunk7KNGT7JR_cjs.CREATE_THREAD_ROUTE,
chunk7KNGT7JR_cjs.UPDATE_THREAD_ROUTE,
chunk7KNGT7JR_cjs.DELETE_THREAD_ROUTE,
chunk7KNGT7JR_cjs.CLONE_THREAD_ROUTE,
chunk7KNGT7JR_cjs.UPDATE_WORKING_MEMORY_ROUTE,
chunk7KNGT7JR_cjs.DELETE_MESSAGES_ROUTE,
chunk7KNGT7JR_cjs.SEARCH_MEMORY_ROUTE,
chunk7KNGT7JR_cjs.GET_MEMORY_STATUS_NETWORK_ROUTE,
chunk7KNGT7JR_cjs.LIST_THREADS_NETWORK_ROUTE,
chunk7KNGT7JR_cjs.GET_THREAD_BY_ID_NETWORK_ROUTE,
chunk7KNGT7JR_cjs.LIST_MESSAGES_NETWORK_ROUTE,
chunk7KNGT7JR_cjs.SAVE_MESSAGES_NETWORK_ROUTE,
chunk7KNGT7JR_cjs.CREATE_THREAD_NETWORK_ROUTE,
chunk7KNGT7JR_cjs.UPDATE_THREAD_NETWORK_ROUTE,
chunk7KNGT7JR_cjs.DELETE_THREAD_NETWORK_ROUTE,
chunk7KNGT7JR_cjs.DELETE_MESSAGES_NETWORK_ROUTE
];
// src/server/server-adapter/routes/observability.ts
var OBSERVABILITY_ROUTES = [
// Legacy
chunkU52CKL4A_cjs.LIST_TRACES_ROUTE,
chunkU52CKL4A_cjs.LIST_TRACES_LIGHT_ROUTE,
chunkU52CKL4A_cjs.LIST_BRANCHES_ROUTE,
chunkU52CKL4A_cjs.GET_BRANCH_ROUTE,
chunkU52CKL4A_cjs.GET_TRACE_ROUTE,
chunkU52CKL4A_cjs.GET_TRACE_LIGHT_ROUTE,
chunkU52CKL4A_cjs.GET_SPAN_ROUTE,
chunkU52CKL4A_cjs.GET_TRACE_TRAJECTORY_ROUTE,
chunkU52CKL4A_cjs.SCORE_TRACES_ROUTE,
chunkU52CKL4A_cjs.LIST_SCORES_BY_SPAN_ROUTE,
// New observability routes
chunk46D4LXPJ_cjs.LIST_METRICS,
chunk46D4LXPJ_cjs.LIST_LOGS,
chunk46D4LXPJ_cjs.LIST_SCORES,
chunk46D4LXPJ_cjs.CREATE_SCORE,
chunk46D4LXPJ_cjs.GET_SCORE,
chunk46D4LXPJ_cjs.GET_SCORE_AGGREGATE,
chunk46D4LXPJ_cjs.GET_SCORE_BREAKDOWN,
chunk46D4LXPJ_cjs.GET_SCORE_TIME_SERIES,
chunk46D4LXPJ_cjs.GET_SCORE_PERCENTILES,
chunk46D4LXPJ_cjs.LIST_FEEDBACK,
chunk46D4LXPJ_cjs.CREATE_FEEDBACK,
chunk46D4LXPJ_cjs.GET_FEEDBACK_AGGREGATE,
chunk46D4LXPJ_cjs.GET_FEEDBACK_BREAKDOWN,
chunk46D4LXPJ_cjs.GET_FEEDBACK_TIME_SERIES,
chunk46D4LXPJ_cjs.GET_FEEDBACK_PERCENTILES,
chunk46D4LXPJ_cjs.GET_METRIC_AGGREGATE,
chunk46D4LXPJ_cjs.GET_METRIC_BREAKDOWN,
chunk46D4LXPJ_cjs.GET_METRIC_TIME_SERIES,
chunk46D4LXPJ_cjs.GET_METRIC_PERCENTILES,
chunk46D4LXPJ_cjs.GET_METRIC_NAMES,
chunk46D4LXPJ_cjs.GET_METRIC_LABEL_KEYS,
chunk46D4LXPJ_cjs.GET_METRIC_LABEL_VALUES,
chunk46D4LXPJ_cjs.GET_ENTITY_TYPES,
chunk46D4LXPJ_cjs.GET_ENTITY_NAMES,
chunk46D4LXPJ_cjs.GET_SERVICE_NAMES,
chunk46D4LXPJ_cjs.GET_ENVIRONMENTS,
chunk46D4LXPJ_cjs.GET_TAGS
];
// src/server/server-adapter/routes/processor-providers.ts
var PROCESSOR_PROVIDER_ROUTES = [chunkXXNADDFD_cjs.LIST_PROCESSOR_PROVIDERS_ROUTE, chunkXXNADDFD_cjs.GET_PROCESSOR_PROVIDER_ROUTE];
// src/server/server-adapter/routes/processors.ts
var PROCESSORS_ROUTES = [chunkYZ6PW23L_cjs.LIST_PROCESSORS_ROUTE, chunkYZ6PW23L_cjs.GET_PROCESSOR_BY_ID_ROUTE, chunkYZ6PW23L_cjs.EXECUTE_PROCESSOR_ROUTE];
// src/server/server-adapter/routes/responses.ts
var RESPONSES_ROUTES = [chunkMVHJTBLL_cjs.CREATE_RESPONSE_ROUTE, chunkMVHJTBLL_cjs.GET_RESPONSE_ROUTE, chunkMVHJTBLL_cjs.DELETE_RESPONSE_ROUTE];
// src/server/server-adapter/routes/schedules.ts
var SCHEDULES_ROUTES = [
chunk7XZQUQEO_cjs.LIST_SCHEDULES_ROUTE,
chunk7XZQUQEO_cjs.GET_SCHEDULE_ROUTE,
chunk7XZQUQEO_cjs.LIST_SCHEDULE_TRIGGERS_ROUTE,
chunk7XZQUQEO_cjs.PAUSE_SCHEDULE_ROUTE,
chunk7XZQUQEO_cjs.RESUME_SCHEDULE_ROUTE
];
// src/server/server-adapter/routes/scorers.ts
var SCORES_ROUTES = [
chunk2PGHAAKS_cjs.LIST_SCORERS_ROUTE,
chunk2PGHAAKS_cjs.GET_SCORER_ROUTE,
chunk2PGHAAKS_cjs.LIST_SCORES_BY_RUN_ID_ROUTE,
chunk2PGHAAKS_cjs.LIST_SCORES_BY_SCORER_ID_ROUTE,
chunk2PGHAAKS_cjs.LIST_SCORES_BY_ENTITY_ID_ROUTE,
chunk2PGHAAKS_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.
// ============================================================================
chunkIBZHIMZ3_cjs.LIST_STORED_AGENTS_ROUTE,
chunkIBZHIMZ3_cjs.PREVIEW_INSTRUCTIONS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkIBZHIMZ3_cjs.GET_STORED_AGENT_DEPENDENTS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE (longer literal)
chunkIBZHIMZ3_cjs.EXPORT_STORED_AGENT_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkIBZHIMZ3_cjs.OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkIBZHIMZ3_cjs.GET_STORED_AGENT_ROUTE,
chunkIBZHIMZ3_cjs.CREATE_STORED_AGENT_ROUTE,
chunkIBZHIMZ3_cjs.UPDATE_STORED_AGENT_ROUTE,
chunkIBZHIMZ3_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.
// ============================================================================
chunk347OHR7U_cjs.LIST_AGENT_VERSIONS_ROUTE,
chunk347OHR7U_cjs.CREATE_AGENT_VERSION_ROUTE,
chunk347OHR7U_cjs.COMPARE_AGENT_VERSIONS_ROUTE,
// Must be before GET_AGENT_VERSION_ROUTE
chunk347OHR7U_cjs.GET_AGENT_VERSION_ROUTE,
chunk347OHR7U_cjs.ACTIVATE_AGENT_VERSION_ROUTE,
chunk347OHR7U_cjs.RESTORE_AGENT_VERSION_ROUTE,
chunk347OHR7U_cjs.DELETE_AGENT_VERSION_ROUTE,
// ============================================================================
// Favorites (EE)
// ============================================================================
chunkGN5Y2NOX_cjs.FAVORITE_STORED_AGENT_ROUTE,
chunkGN5Y2NOX_cjs.UNFAVORITE_STORED_AGENT_ROUTE
];
// src/server/server-adapter/routes/stored-mcp-clients.ts
var STORED_MCP_CLIENTS_ROUTES = [
// Stored MCP Clients CRUD Routes
chunkYKY2YBJI_cjs.LIST_STORED_MCP_CLIENTS_ROUTE,
chunkYKY2YBJI_cjs.GET_STORED_MCP_CLIENT_ROUTE,
chunkYKY2YBJI_cjs.CREATE_STORED_MCP_CLIENT_ROUTE,
chunkYKY2YBJI_cjs.UPDATE_STORED_MCP_CLIENT_ROUTE,
chunkYKY2YBJI_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.
chunkVZ7EXKEF_cjs.LIST_MCP_CLIENT_VERSIONS_ROUTE,
chunkVZ7EXKEF_cjs.CREATE_MCP_CLIENT_VERSION_ROUTE,
chunkVZ7EXKEF_cjs.COMPARE_MCP_CLIENT_VERSIONS_ROUTE,
chunkVZ7EXKEF_cjs.GET_MCP_CLIENT_VERSION_ROUTE,
chunkVZ7EXKEF_cjs.ACTIVATE_MCP_CLIENT_VERSION_ROUTE,
chunkVZ7EXKEF_cjs.RESTORE_MCP_CLIENT_VERSION_ROUTE,
chunkVZ7EXKEF_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
chunkUHKWQQBG_cjs.LIST_STORED_PROMPT_BLOCKS_ROUTE,
chunkUHKWQQBG_cjs.GET_STORED_PROMPT_BLOCK_ROUTE,
chunkUHKWQQBG_cjs.CREATE_STORED_PROMPT_BLOCK_ROUTE,
chunkUHKWQQBG_cjs.UPDATE_STORED_PROMPT_BLOCK_ROUTE,
chunkUHKWQQBG_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.
chunkHR4F4XZV_cjs.LIST_PROMPT_BLOCK_VERSIONS_ROUTE,
chunkHR4F4XZV_cjs.CREATE_PROMPT_BLOCK_VERSION_ROUTE,
chunkHR4F4XZV_cjs.COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE,
chunkHR4F4XZV_cjs.GET_PROMPT_BLOCK_VERSION_ROUTE,
chunkHR4F4XZV_cjs.ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE,
chunkHR4F4XZV_cjs.RESTORE_PROMPT_BLOCK_VERSION_ROUTE,
chunkHR4F4XZV_cjs.DELETE_PROMPT_BLOCK_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-scorers.ts
var STORED_SCORERS_ROUTES = [
// Stored Scorers CRUD Routes
chunkLTQYCKDT_cjs.LIST_STORED_SCORERS_ROUTE,
chunkLTQYCKDT_cjs.GET_STORED_SCORER_ROUTE,
chunkLTQYCKDT_cjs.CREATE_STORED_SCORER_ROUTE,
chunkLTQYCKDT_cjs.UPDATE_STORED_SCORER_ROUTE,
chunkLTQYCKDT_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.
chunkN4IIUIJS_cjs.LIST_SCORER_VERSIONS_ROUTE,
chunkN4IIUIJS_cjs.CREATE_SCORER_VERSION_ROUTE,
chunkN4IIUIJS_cjs.COMPARE_SCORER_VERSIONS_ROUTE,
chunkN4IIUIJS_cjs.GET_SCORER_VERSION_ROUTE,
chunkN4IIUIJS_cjs.ACTIVATE_SCORER_VERSION_ROUTE,
chunkN4IIUIJS_cjs.RESTORE_SCORER_VERSION_ROUTE,
chunkN4IIUIJS_cjs.DELETE_SCORER_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-skills.ts
var STORED_SKILLS_ROUTES = [
// Stored Skills CRUD Routes
chunkXMBSW6DM_cjs.LIST_STORED_SKILLS_ROUTE,
chunkXMBSW6DM_cjs.GET_STORED_SKILL_ROUTE,
chunkXMBSW6DM_cjs.CREATE_STORED_SKILL_ROUTE,
chunkXMBSW6DM_cjs.UPDATE_STORED_SKILL_ROUTE,
chunkXMBSW6DM_cjs.DELETE_STORED_SKILL_ROUTE,
// Publish
chunkXMBSW6DM_cjs.PUBLISH_STORED_SKILL_ROUTE,
// Favorites (EE)
chunkGULCRVVE_cjs.FAVORITE_STORED_SKILL_ROUTE,
chunkGULCRVVE_cjs.UNFAVORITE_STORED_SKILL_ROUTE
];
// src/server/server-adapter/routes/stored-workspaces.ts
var STORED_WORKSPACES_ROUTES = [
// Stored Workspaces CRUD Routes
chunkGJBHQJBK_cjs.LIST_STORED_WORKSPACES_ROUTE,
chunkGJBHQJBK_cjs.GET_STORED_WORKSPACE_ROUTE,
chunkGJBHQJBK_cjs.CREATE_STORED_WORKSPACE_ROUTE,
chunkGJBHQJBK_cjs.UPDATE_STORED_WORKSPACE_ROUTE,
chunkGJBHQJBK_cjs.DELETE_STORED_WORKSPACE_ROUTE
];
// src/server/server-adapter/routes/system.ts
var SYSTEM_ROUTES = [chunkY44XPBTJ_cjs.GET_SYSTEM_PACKAGES_ROUTE, chunkY44XPBTJ_cjs.GET_API_SCHEMA_ROUTE];
// src/server/server-adapter/routes/tool-providers.ts
var TOOL_PROVIDER_ROUTES = [
chunkIEE5MCG5_cjs.LIST_TOOL_PROVIDERS_ROUTE,
chunkIEE5MCG5_cjs.LIST_TOOL_PROVIDER_TOOLKITS_ROUTE,
chunkIEE5MCG5_cjs.LIST_TOOL_PROVIDER_TOOLS_ROUTE,
chunkIEE5MCG5_cjs.GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE,
chunkIEE5MCG5_cjs.AUTHORIZE_TOOL_PROVIDER_ROUTE,
chunkIEE5MCG5_cjs.GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE,
chunkIEE5MCG5_cjs.TOOL_PROVIDER_CONNECTION_STATUS_ROUTE,
chunkIEE5MCG5_cjs.LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE,
chunkIEE5MCG5_cjs.LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE,
chunkIEE5MCG5_cjs.DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE,
chunkIEE5MCG5_cjs.UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE,
chunkIEE5MCG5_cjs.GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE,
chunkIEE5MCG5_cjs.GET_TOOL_PROVIDER_HEALTH_ROUTE
];
// src/server/server-adapter/routes/tools.ts
var TOOLS_ROUTES = [chunkTGHO7KPM_cjs.LIST_TOOLS_ROUTE, chunkTGHO7KPM_cjs.GET_TOOL_BY_ID_ROUTE, chunkTGHO7KPM_cjs.EXECUTE_TOOL_ROUTE];
// src/server/server-adapter/routes/vectors.ts
var VECTORS_ROUTES = [
chunkBQ2JQTKA_cjs.UPSERT_VECTORS_ROUTE,
chunkBQ2JQTKA_cjs.CREATE_INDEX_ROUTE,
chunkBQ2JQTKA_cjs.QUERY_VECTORS_ROUTE,
chunkBQ2JQTKA_cjs.LIST_INDEXES_ROUTE,
chunkBQ2JQTKA_cjs.DESCRIBE_INDEX_ROUTE,
chunkBQ2JQTKA_cjs.DELETE_INDEX_ROUTE,
chunkBQ2JQTKA_cjs.LIST_VECTORS_ROUTE,
chunkBQ2JQTKA_cjs.LIST_EMBEDDERS_ROUTE
];
// src/server/server-adapter/routes/workflows.ts
var WORKFLOWS_ROUTES = [
chunkRJPRSDIS_cjs.LIST_WORKFLOWS_ROUTE,
chunkRJPRSDIS_cjs.GET_WORKFLOW_BY_ID_ROUTE,
chunkRJPRSDIS_cjs.LIST_WORKFLOW_RUNS_ROUTE,
chunkRJPRSDIS_cjs.GET_WORKFLOW_RUN_BY_ID_ROUTE,
chunkRJPRSDIS_cjs.DELETE_WORKFLOW_RUN_BY_ID_ROUTE,
chunkRJPRSDIS_cjs.CREATE_WORKFLOW_RUN_ROUTE,
chunkRJPRSDIS_cjs.STREAM_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.RESUME_STREAM_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.START_ASYNC_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.START_WORKFLOW_RUN_ROUTE,
chunkRJPRSDIS_cjs.OBSERVE_STREAM_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.RESUME_ASYNC_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.RESUME_NO_WAIT_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.RESUME_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.CANCEL_WORKFLOW_RUN_ROUTE,
chunkRJPRSDIS_cjs.TIME_TRAVEL_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.RESTART_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.RESTART_ASYNC_WORKFLOW_ROUTE,
chunkRJPRSDIS_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,
chunkRJPRSDIS_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,
chunkRJPRSDIS_cjs.EXECUTE_WORKFLOW_STEP_ROUTE,
chunkRJPRSDIS_cjs.RECEIVE_WORKFLOW_EVENT_ROUTE
];
// src/server/server-adapter/routes/workspace.ts
var WORKSPACE_ROUTES = [
// List all workspaces route (at /api/workspaces)
chunk2VO3BDE5_cjs.LIST_WORKSPACES_ROUTE,
// Get workspace route (at /api/workspaces/:workspaceId)
chunk2VO3BDE5_cjs.GET_WORKSPACE_ROUTE,
// Filesystem routes (at /api/workspaces/:workspaceId/fs/*)
...chunk2VO3BDE5_cjs.WORKSPACE_FS_ROUTES,
// Search routes (at /api/workspaces/:workspaceId/search, /api/workspaces/:workspaceId/index)
...chunk2VO3BDE5_cjs.WORKSPACE_SEARCH_ROUTES,
// Skills routes (search must come before parameterized routes)
...chunk2VO3BDE5_cjs.WORKSPACE_SKILLS_ROUTES,
// skills.sh proxy routes (at /api/workspaces/:workspaceId/skills-sh/*)
...chunk2VO3BDE5_cjs.WORKSPACE_SKILLS_SH_ROUTES
];
// src/server/server-adapter/routes/index.ts
var SERVER_ROUTES = [
...AGENTS_ROUTES,
...chunkTGKPSQB3_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-JO2FTGNB.cjs.map
//# sourceMappingURL=chunk-JO2FTGNB.cjs.map

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

import { storedSkillIdPathParams } from './chunk-UIRQU4GW.js';
import { favoriteToggleResponseSchema } from './chunk-SFPN7SHZ.js';
import { requireBuilderFeature } from './chunk-JVVAZD6P.js';
import { getCallerAuthorId, assertReadAccess } from './chunk-SXZS6VZ3.js';
import { assertStoredResourceScope, getStoredResourceScope } from './chunk-QIQWHDPH.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-JOUZTIVR.js.map
//# sourceMappingURL=chunk-JOUZTIVR.js.map
{"version":3,"sources":["../src/server/handlers/stored-skill-favorites.ts"],"names":[],"mappings":"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","file":"chunk-JOUZTIVR.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 { builderSettingsResponseSchema, builderAvailableModelsResponseSchema, infrastructureStatusResponseSchema, agentFeaturesSchema } from './chunk-PBNENTGS.js';
import { buildProvidersList } from './chunk-5NREJ74P.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-JVVAZD6P.js.map
//# sourceMappingURL=chunk-JVVAZD6P.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-JVVAZD6P.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 { isBuilderFeatureEnabled } from './chunk-JVVAZD6P.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-JZUUCCEO.js.map
//# sourceMappingURL=chunk-JZUUCCEO.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-JZUUCCEO.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 chunkVBPYR5ZH_cjs = require('./chunk-VBPYR5ZH.cjs');
var chunkTMAUK4UG_cjs = require('./chunk-TMAUK4UG.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 chunkTMAUK4UG_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 = chunkN54Q3AQR_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-KXKNHXU3.cjs.map
//# sourceMappingURL=chunk-KXKNHXU3.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":";;;;;;;;;AAsBA,eAAsB,0BAA0B,MAAA,EAAgE;AAC9G,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAE,QAAQ,KAAA,EAAM;AACpC,EAAA,IAAI,OAAO,MAAA,CAAO,cAAA,KAAmB,YAAY,OAAO,EAAE,QAAQ,KAAA,EAAM;AACxE,EAAA,IAAI,OAAO,MAAA,CAAO,uBAAA,KAA4B,cAAc,CAAC,MAAA,CAAO,yBAAwB,EAAG;AAC7F,IAAA,OAAO,EAAE,QAAQ,KAAA,EAAM;AAAA,EACzB;AAKA,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,cAAA,EAAe;AAC5C,IAAA,MAAM,EAAE,oBAAA,EAAqB,GAAI,MAAM,OAAO,+BAA+B,CAAA;AAC7E,IAAA,OAAO,qBAAqB,OAAO,CAAA;AAAA,EACrC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,QAAQ,KAAA,EAAM;AAAA,EACzB;AACF;;;ACpBA,eAAe,uBAAuB,MAAA,EAA+C;AACnF,EAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,EAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,CAAO,cAAA,KAAmB,YAAY,OAAO,IAAA;AACnE,EAAA,IAAI,CAAC,MAAA,CAAO,uBAAA,IAA0B,EAAG,OAAO,IAAA;AAChD,EAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,cAAA,EAAe;AAC5C,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,SAAS,OAAO,IAAA;AACzC,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,WAAA,IAAc,EAAG,KAAA;AAC1C,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AAEtB,EAAA,MAAM,MAAA,GAASA,qCAAA,CAAoB,SAAA,CAAU,QAAQ,CAAA;AACrD,EAAA,OAAO,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,IAAA,GAAO,IAAA;AACxC;AAOA,eAAsB,uBAAA,CAAwB,QAAgB,OAAA,EAAgD;AAC5G,EAAA,MAAM,QAAA,GAAW,MAAM,sBAAA,CAAuB,MAAM,CAAA;AACpD,EAAA,OAAO,QAAA,GAAW,OAAO,CAAA,KAAM,IAAA;AACjC;AAOA,eAAsB,qBAAA,CAAsB,QAAgB,OAAA,EAA6C;AACvG,EAAA,IAAI,CAAE,MAAM,uBAAA,CAAwB,MAAA,EAAQ,OAAO,CAAA,EAAI;AACrD,IAAA,MAAM,IAAIC,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,aAAa,CAAA;AAAA,EACvD;AACF;AAQO,IAAM,oCAAoCC,6BAAA,CAAY;AAAA,EAC3D,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,0BAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,cAAA,EAAgBC,+CAAA;AAAA,EAChB,OAAA,EAAS,4BAAA;AAAA,EACT,WAAA,EAAa,yEAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,EACf,YAAA,EAAc,IAAA;AAAA,EACd,kBAAA,EAAoB,oBAAA;AAAA,EACpB,OAAA,EAAS,OAAO,EAAE,MAAA,EAAO,KAAM;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAGhC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,aAAa,EAAE,MAAA,EAAQ,OAAM,EAAE;AAAA,MAC1D;AAGA,MAAA,IAAI,OAAO,MAAA,CAAO,cAAA,KAAmB,UAAA,EAAY;AAC/C,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,aAAa,EAAE,MAAA,EAAQ,OAAM,EAAE;AAAA,MAC1D;AAGA,MAAA,IAAI,CAAC,MAAA,CAAO,uBAAA,IAA0B,EAAG;AACvC,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,aAAa,EAAE,MAAA,EAAQ,OAAM,EAAE;AAAA,MAC1D;AAGA,MAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,cAAA,EAAe;AAC5C,MAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,OAAA,EAAS;AAChC,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,aAAa,EAAE,MAAA,EAAQ,OAAM,EAAE;AAAA,MAC1D;AAEA,MAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,sBAAA,IAAyB,IAAK,EAAC;AAC5D,MAAA,MAAM,aAAA,GAAgB,QAAQ,gBAAA,EAAiB;AAY/C,MAAA,MAAM,cAAA,GAAiB,CAAC,QAAA,KACtB,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,MAAM,CAAA,MAAO;AAAA,QAC/C,EAAA,EAAK,OAA2B,EAAA,IAAM,GAAA;AAAA,QACtC;AAAA,OACF,CAAE,CAAA;AAEJ,MAAA,MAAM,cAAc,cAAA,CAAe,MAAA,CAAO,SAAA,EAAU,IAAK,EAAE,CAAA;AAC3D,MAAA,MAAM,eAAe,cAAA,CAAe,MAAA,CAAO,UAAA,EAAW,IAAK,EAAE,CAAA;AAC7D,MAAA,MAAM,kBAAkB,cAAA,CAAe,MAAA,CAAO,aAAA,EAAc,IAAK,EAAE,CAAA;AAInE,MAAA,MAAM,aAAA,GAAgB,CAAC,OAAA,EAAsB,IAAA,KAAuB;AAClE,QAAA,MAAM,GAAA,uBAAU,GAAA,EAAoB;AACpC,QAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,UAAA,GAAA,CAAI,GAAA,CAAI,EAAE,EAAA,EAAI,IAAA,KAAS,OAAO,CAAA,CAAE,EAAA,GAAK,EAAE,GAAG,CAAA;AAC1C,UAAA,GAAA,CAAI,GAAA,CAAI,EAAE,GAAA,EAAK,IAAA,KAAS,OAAO,CAAA,CAAE,EAAA,GAAK,EAAE,GAAG,CAAA;AAAA,QAC7C;AACA,QAAA,OAAO,GAAA;AAAA,MACT,CAAA;AACA,MAAA,MAAM,UAAA,GAAa,aAAA,CAAc,WAAA,EAAa,KAAK,CAAA;AACnD,MAAA,MAAM,WAAA,GAAc,aAAA,CAAc,YAAA,EAAc,IAAI,CAAA;AACpD,MAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,eAAA,EAAiB,KAAK,CAAA;AAM3D,MAAA,MAAM,EAAE,oBAAA,EAAsB,uBAAA,EAAwB,GAAI,MAAM,OAAO,+BAA+B,CAAA;AAEtG,MAAA,MAAM,SAAS,uBAAA,CAAwB;AAAA,QACrC,QAAQ,aAAA,EAAe,KAAA;AAAA,QACvB,iBAAA,EAAmB,YAAY,OAAA,CAAQ,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,EAAA,EAAI,CAAA,CAAE,GAAG,CAAC,CAAA;AAAA,QACzD,kBAAA,EAAoB,aAAa,OAAA,CAAQ,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,EAAA,EAAI,CAAA,CAAE,GAAG,CAAC,CAAA;AAAA,QAC3D,qBAAA,EAAuB,gBAAgB,OAAA,CAAQ,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,EAAA,EAAI,CAAA,CAAE,GAAG,CAAC;AAAA,OAClE,CAAA;AAED,MAAA,MAAM,SAAA,GAAY,CAAC,OAAA,EAA0B,GAAA,KAA8C;AACzF,QAAA,IAAI,OAAA,KAAY,MAAM,OAAO,IAAA;AAC7B,QAAA,MAAM,MAAgB,EAAC;AACvB,QAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,QAAA,KAAA,MAAW,MAAM,OAAA,EAAS;AACxB,UAAA,MAAM,MAAA,GAAS,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA;AACzB,UAAA,IAAI,MAAA,IAAU,CAAC,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,EAAG;AAC/B,YAAA,IAAA,CAAK,IAAI,MAAM,CAAA;AACf,YAAA,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,UACjB;AAAA,QACF;AACA,QAAA,OAAO,GAAA;AAAA,MACT,CAAA;AAEA,MAAA,MAAM,sBAAsB,CAAC,GAAG,YAAA,EAAc,GAAG,OAAO,QAAQ,CAAA;AAEhE,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,QAAA,EAAU,QAAQ,WAAA,EAAY;AAAA,QAC9B,aAAA;AAAA,QACA,WAAA,EAAa,qBAAqB,OAAO,CAAA;AAAA,QACzC,MAAA,EAAQ;AAAA,UACN,YAAA,EAAc,SAAA,CAAU,MAAA,CAAO,YAAA,EAAc,UAAU,CAAA;AAAA,UACvD,aAAA,EAAe,SAAA,CAAU,MAAA,CAAO,aAAA,EAAe,WAAW,CAAA;AAAA,UAC1D,gBAAA,EAAkB,SAAA,CAAU,MAAA,CAAO,gBAAA,EAAkB,cAAc;AAAA,SACrE;AAAA,QACA,GAAI,mBAAA,CAAoB,MAAA,GAAS,IAAI,EAAE,mBAAA,KAAwB;AAAC,OAClE;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAOC,6BAAA,CAAY,OAAO,gCAAgC,CAAA;AAAA,IAC5D;AAAA,EACF;AACF,CAAC;AAkBM,IAAM,4CAA4CF,6BAAA,CAAY;AAAA,EACnE,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,kCAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,cAAA,EAAgBG,sDAAA;AAAA,EAChB,OAAA,EAAS,kCAAA;AAAA,EACT,WAAA,EAAa,gFAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,EACf,YAAA,EAAc,IAAA;AAAA,EACd,kBAAA,EAAoB,oBAAA;AAAA,EACpB,OAAA,EAAS,OAAO,EAAE,MAAA,EAAO,KAAM;AAC7B,IAAA,IAAI;AAKF,MAAA,MAAM,SAAA,GAAA,CAAa,MAAMC,oCAAA,CAAmB,MAAM,GAAG,MAAA,CAAO,CAAA,QAAA,KAAY,SAAS,SAAS,CAAA;AAC1F,MAAA,MAAM,MAAA,GAAS,MAAM,yBAAA,CAA0B,MAAA,CAAO,WAAW,CAAA;AAGjE,MAAA,IAAI,CAAC,OAAO,MAAA,IAAU,CAAC,OAAO,OAAA,IAAW,MAAA,CAAO,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AACpE,QAAA,OAAO,EAAE,SAAA,EAAU;AAAA,MACrB;AAIA,MAAA,MAAM,EAAE,cAAA,EAAe,GAAI,MAAM,OAAO,+BAA+B,CAAA;AAEvE,MAAA,MAAM,QAAA,GAAW,SAAA,CACd,GAAA,CAAI,CAAA,QAAA,MAAa;AAAA,QAChB,GAAG,QAAA;AAAA,QACH,MAAA,EAAQ,QAAA,CAAS,MAAA,CAAO,MAAA,CAAO,aAAW,cAAA,CAAe,MAAA,CAAO,OAAA,EAAS,EAAE,QAAA,EAAU,QAAA,CAAS,EAAA,EAAI,OAAA,EAAS,CAAC;AAAA,QAC5G,CAAA,CACD,MAAA,CAAO,cAAY,QAAA,CAAS,MAAA,CAAO,SAAS,CAAC,CAAA;AAEhD,MAAA,OAAO,EAAE,WAAW,QAAA,EAAS;AAAA,IAC/B,SAAS,KAAA,EAAO;AACd,MAAA,OAAOF,6BAAA,CAAY,OAAO,iCAAiC,CAAA;AAAA,IAC7D;AAAA,EACF;AACF,CAAC;AASM,IAAM,kCAAkCF,6BAAA,CAAY;AAAA,EACzD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,gCAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,cAAA,EAAgBK,oDAAA;AAAA,EAChB,OAAA,EAAS,2BAAA;AAAA,EACT,WAAA,EAAa,4EAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,EACf,YAAA,EAAc,IAAA;AAAA,EACd,kBAAA,EAAoB,qBAAA;AAAA,EACpB,OAAA,EAAS,OAAO,EAAE,MAAA,EAAO,KAAM;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAA2B;AACpD,QAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,OAAO,SAAA;AAClD,QAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,KAAA,KAAU,SAAA,EAAW,OAAO,MAAA,CAAO,KAAK,CAAA;AAC7G,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,CAAA,EAAG,KAAA,CAAM,MAAM,CAAA,KAAA,EAAQ,KAAA,CAAM,MAAA,KAAW,CAAA,GAAI,KAAK,GAAG,CAAA,CAAA;AACrF,QAAA,OAAO,KAAA,CAAM,aAAa,IAAA,IAAQ,KAAA,CAAM,YAAY,IAAA,KAAS,QAAA,GAAW,KAAA,CAAM,WAAA,CAAY,IAAA,GAAO,YAAA;AAAA,MACnG,CAAA;AAEA,MAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAkC;AACzD,QAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,QAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,cAAc,KAAA,IAAS,OAAO,MAAM,QAAA,KAAa,QAAA;AAChF,UAAA,OAAO,KAAA,CAAM,QAAA;AACf,QAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,aAAA,IAAiB,KAAA,EAAO;AACvD,UAAA,MAAM,IAAA,GAAQ,MAA8C,WAAA,EAAa,IAAA;AACzE,UAAA,OAAO,IAAA,IAAQ,IAAA,KAAS,QAAA,GAAW,IAAA,GAAO,YAAA;AAAA,QAC5C;AACA,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AAEA,MAAA,MAAM,mBAAmB,CAAC,MAAA,EAAiC,WAAA,GAAwB,OACjF,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAClB,OAAO,CAAC,CAAC,KAAK,KAAK,CAAA,KAAM,CAAC,WAAA,CAAY,QAAA,CAAS,GAAG,CAAA,IAAK,UAAU,MAAA,IAAa,KAAA,KAAU,IAAI,CAAA,CAC5F,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,OAAO,EAAE,GAAA,EAAK,OAAO,iBAAA,CAAkB,KAAK,GAAE,CAAE,CAAA;AAErE,MAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,mBAAA,EAAoB,IAAK,EAAC;AAC1D,MAAA,MAAM,QAAA,GAA6C;AAAA,QACjD,SAAA,EAAW,MAAA,CAAO,OAAA,CAAQ,gBAAgB,CAAA,CACvC,IAAI,CAAC,CAAC,EAAA,EAAI,QAAQ,CAAA,KAAM;AACvB,UAAA,MAAM,IAAA,GAAO,SAAS,OAAA,IAAU;AAChC,UAAA,MAAM,MAAA,GAAS,QAAA,CAAS,SAAA,IAAY,IAAK,EAAC;AAC1C,UAAA,OAAO;AAAA,YACL,EAAA,EAAI,MAAM,EAAA,IAAM,EAAA;AAAA,YAChB,IAAA,EAAM,MAAM,IAAA,IAAQ,EAAA;AAAA,YACpB,YAAA,EAAc,MAAM,YAAA,IAAgB,KAAA;AAAA,YACpC,YAAY,MAAA,CAAO;AAAA,WACrB;AAAA,QACF,CAAC,CAAA,CACA,MAAA,CAAO,CAAA,QAAA,KAAY,SAAS,YAAY;AAAA,OAC7C;AAEA,MAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,MAAA,IAAI,OAAA,GAA2C;AAAA,QAC7C,IAAA,EAAM,IAAA;AAAA,QACN,QAAA,EAAU,IAAA;AAAA,QACV,GAAA,EAAK,IAAA;AAAA,QACL,UAAA,EAAY,KAAA;AAAA,QACZ,oBAAoB,EAAC;AAAA,QACrB,QAAQ;AAAC,OACX;AACA,MAAA,IAAI,SAAA,GAA+C;AAAA,QACjD,IAAA,EAAM,IAAA;AAAA,QACN,WAAA,EAAa,IAAA;AAAA,QACb,IAAA,EAAM,IAAA;AAAA,QACN,MAAA,EAAQ,IAAA;AAAA,QACR,UAAA,EAAY,KAAA;AAAA,QACZ,aAAA,EAAe,KAAA;AAAA,QACf,UAAA,EAAY,KAAA;AAAA,QACZ,kBAAA,EAAoB,IAAA;AAAA,QACpB,eAAA,EAAiB,IAAA;AAAA,QACjB,QAAQ;AAAC,OACX;AACA,MAAA,IAAI,UAAA,GAAiD;AAAA,QACnD,QAAA,EAAU,EAAE,OAAA,EAAS,KAAA;AAAM,OAC7B;AAEA,MAAA,IAAI,QAAQ,cAAA,EAAgB;AAC1B,QAAA,MAAM,WAAY,MAAA,CAA4D,UAAA;AAC9E,QAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,cAAA,EAAe;AAC5C,QAAA,MAAM,iBAAA,GAAoB,SAAS,aAAA,IAAgB;AACnD,QAAA,UAAA,GAAa;AAAA,UACX,UAAU,EAAE,OAAA,EAAS,iBAAA,EAAmB,QAAA,EAAU,YAAY,IAAA;AAAK,SACrE;AACA,QAAA,MAAM,aAAA,GAAgB,OAAA,EAAS,gBAAA,IAAmB,EAAG,KAAA;AAWrD,QAAA,MAAM,aAAa,aAAA,EAAe,OAAA;AAClC,QAAA,MAAM,aAAA,GAAgB,UAAA,EAAY,MAAA,IAAU,EAAC;AAC7C,QAAA,MAAM,UAAA,GAAa,cAAc,QAAA,IAAY,IAAA;AAC7C,QAAA,OAAA,GAAU;AAAA,UACR,IAAA,EAAM,YAAY,IAAA,IAAQ,IAAA;AAAA,UAC1B,QAAA,EAAU,UAAA;AAAA,UACV,GAAA,EAAK,cAAc,GAAA,IAAO,IAAA;AAAA,UAC1B,YAAY,UAAA,GAAa,CAAC,CAAC,QAAA,EAAU,GAAA,CAAI,UAAU,CAAA,GAAI,KAAA;AAAA,UACvD,kBAAA,EAAoB,WAAW,KAAA,CAAM,IAAA,CAAK,SAAS,IAAA,EAAM,IAAI,EAAC;AAAA,UAC9D,QAAQ,gBAAA,CAAiB,aAAA,EAAe,CAAC,UAAA,EAAY,KAAK,CAAC;AAAA,SAC7D;AAEA,QAAA,MAAM,eAAe,aAAA,EAAe,SAAA;AACpC,QAAA,MAAM,eAAA,GAAkB,YAAA,EAAc,MAAA,IAAU,EAAC;AACjD,QAAA,MAAM,oBAAA,GAAuB,OAAO,cAAA,EAAe;AACnD,QAAA,MAAM,sBAAsB,YAAA,EAAc,WAAA,GACtC,oBAAA,CAAqB,YAAA,CAAa,WAAW,CAAA,GAC7C,MAAA;AACJ,QAAA,MAAM,UAAA,GAAa,mBAAA,EAAqB,SAAA,CAAU,UAAA,IAAc,eAAA,CAAgB,UAAA;AAChF,QAAA,MAAM,OAAA,GAAU,mBAAA,EAAqB,SAAA,CAAU,OAAA,IAAW,eAAA,CAAgB,OAAA;AAC1E,QAAA,MAAM,gBAAA,GACJ,OAAO,eAAA,CAAgB,UAAA,KAAe,QAAA,IACtC,eAAA,CAAgB,UAAA,IAChB,QAAA,IAAY,eAAA,CAAgB,UAAA,GACvB,eAAA,CAAgB,UAAA,CAAW,SAC5B,EAAC;AACP,QAAA,MAAM,aAAA,GACJ,OAAO,eAAA,CAAgB,OAAA,KAAY,QAAA,IAAY,eAAA,CAAgB,OAAA,IAAW,QAAA,IAAY,eAAA,CAAgB,OAAA,GACjG,eAAA,CAAgB,OAAA,CAAQ,SACzB,EAAC;AACP,QAAA,SAAA,GAAY;AAAA,UACV,IAAA,EAAM,cAAc,IAAA,IAAQ,IAAA;AAAA,UAC5B,WAAA,EAAa,cAAc,WAAA,IAAe,IAAA;AAAA,UAC1C,IAAA,EAAM,eAAA,CAAgB,IAAA,IAAQ,mBAAA,EAAqB,UAAU,IAAA,IAAQ,IAAA;AAAA,UACrE,MAAA,EAAQ,qBAAqB,MAAA,IAAU,IAAA;AAAA,UACvC,UAAA,EAAY,CAAC,CAAC,mBAAA;AAAA,UACd,aAAA,EAAe,CAAC,CAAC,UAAA;AAAA,UACjB,UAAA,EAAY,CAAC,CAAC,OAAA;AAAA,UACd,kBAAA,EAAoB,gBAAgB,UAAU,CAAA;AAAA,UAC9C,eAAA,EAAiB,gBAAgB,OAAO,CAAA;AAAA,UACxC,MAAA,EAAQ;AAAA,YACN,GAAG,gBAAA,CAAiB,gBAAgB,CAAA,CAAE,IAAI,CAAA,KAAA,MAAU,EAAE,GAAG,KAAA,EAAO,GAAA,EAAK,CAAA,WAAA,EAAc,KAAA,CAAM,GAAG,IAAG,CAAE,CAAA;AAAA,YACjG,GAAG,gBAAA,CAAiB,aAAa,CAAA,CAAE,IAAI,CAAA,KAAA,MAAU,EAAE,GAAG,KAAA,EAAO,GAAA,EAAK,CAAA,QAAA,EAAW,KAAA,CAAM,GAAG,IAAG,CAAE;AAAA;AAC7F,SACF;AAAA,MACF;AAEA,MAAA,OAAO,EAAE,QAAA,EAAU,OAAA,EAAS,SAAA,EAAW,UAAA,EAAW;AAAA,IACpD,SAAS,KAAA,EAAO;AACd,MAAA,OAAOH,6BAAA,CAAY,OAAO,qCAAqC,CAAA;AAAA,IACjE;AAAA,EACF;AACF,CAAC","file":"chunk-KXKNHXU3.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 { listStoredSkillsResponseSchema, listStoredSkillsQuerySchema, getStoredSkillResponseSchema, storedSkillIdPathParams, createStoredSkillResponseSchema, createStoredSkillBodySchema, updateStoredSkillResponseSchema, updateStoredSkillBodySchema, deleteStoredSkillResponseSchema, publishStoredSkillResponseSchema, publishStoredSkillBodySchema } from './chunk-UIRQU4GW.js';
import { stripFavoriteFields, prepareFavoritesEnrichment, enrichOrStripFavorites } from './chunk-JZUUCCEO.js';
import { isBuilderFeatureEnabled } from './chunk-JVVAZD6P.js';
import { resolveAuthorFilter, getCallerAuthorId, matchesAuthorFilter, assertReadAccess, assertWriteAccess } from './chunk-SXZS6VZ3.js';
import { getStoredResourceScope, scopeStoredResourceMetadata, assertStoredResourceScope, toSlug } from './chunk-QIQWHDPH.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-LBH3CTYD.js.map
//# sourceMappingURL=chunk-LBH3CTYD.js.map
{"version":3,"sources":["../src/server/handlers/stored-skills.ts"],"names":["annotated"],"mappings":"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","file":"chunk-LBH3CTYD.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 chunk42WZN6MM_cjs = require('./chunk-42WZN6MM.cjs');
var chunkF3HP5HM6_cjs = require('./chunk-F3HP5HM6.cjs');
var chunkKIDHIRVO_cjs = require('./chunk-KIDHIRVO.cjs');
var chunkTMAUK4UG_cjs = require('./chunk-TMAUK4UG.cjs');
var chunk42M6Y2OD_cjs = require('./chunk-42M6Y2OD.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 chunkTMAUK4UG_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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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-MVHJTBLL.cjs.map
//# sourceMappingURL=chunk-MVHJTBLL.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":";;;;;;;;;;;;;;AAAA,IAAA,iBAAA,GAAA;AAAAA,0BAAA,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,IAAIC,gCAAc,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,GAAoBC,sCAAA,CAAqB,cAAA,EAAgB,MAAS,CAAA;AACxE,EAAA,MAAM,mBAAA,GAAsBC,wCAAA,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,IAAIF,gCAAc,GAAA,EAAK;AAAA,QAC3B,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,MAAMG,kBAAiB,MAAM,MAAA,CAAO,cAAc,EAAE,QAAA,EAAU,gBAAgB,CAAA;AAC9E,IAAA,IAAI,CAACA,eAAAA,EAAgB;AACnB,MAAA,MAAM,IAAIH,gCAAc,GAAA,EAAK,EAAE,SAAS,CAAA,aAAA,EAAgB,cAAc,kBAAkB,CAAA;AAAA,IAC1F;AAEA,IAAA,MAAMI,qCAAA,CAAoB;AAAA,MACxB,MAAA,EAAQ,MAAM,iBAAA,EAAkB;AAAA,MAChC,cAAA;AAAA,MACA,QAAA,EAAU,cAAA;AAAA,MACV,MAAA,EAAQD,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,MAAME,YAAWC,iBAAA,EAAW;AAC5B,IAAA,MAAMC,cAAAA,GAAgB,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MAC9C,QAAA,EAAAF,SAAAA;AAAA,MACA,YAAY,mBAAA,IAAuBA;AAAA,KACpC,CAAA;AAED,IAAA,OAAO;AAAA,MACL,UAAUE,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,MAAMH,qCAAA,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,IAAIJ,gCAAc,GAAA,EAAK;AAAA,MAC3B,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAIA,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0DAA0D,CAAA;AAAA,EACpG;AAEA,EAAA,OAAOQ,oCAAA,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,MAAMC,qCAAA,CAAoB,EAAE,KAAA,EAAO,gBAAgB,CAAA;AAC5E,EAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,IAAA,MAAM,IAAIT,+BAAA,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,EAAQU,kCAAA,CAAiB,MAAM,mBAAA,CAAoB,MAAM,CAAC,CAAA;AAAA,IAC1D,IAAA,EAAO,MAAM,WAAA,CAAY,MAAM,CAAA,IAAM,YAAA;AAAA,IACrC,KAAA;AAAA,IACA,YAAA,EAAcC,kCAAgB,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,MAAMC,2CAAA,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,MAAMC,uDAAA,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,WAAWC,wCAAA,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,GAAiBC,qDAAA,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,MAAMC,wCAAA,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,MAAMC,oDAAA,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,IAAIjB,gCAAc,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,IAAIA,gCAAc,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,IAAIA,+BAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0DAA0D,CAAA;AAAA,MACpG;AAEA,MAAA,0BAAA,GAA6B,MAAMiB,oDAAA,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,IAAIjB,gCAAc,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,IAAIA,gCAAc,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,GAAkBkB,+CAAA;AAAA,IACrB,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,UAAU,EAAE,cAAA,EAAgB,CAAC;AAAA,GAC5D;AAEA,EAAA,MAAM,aAAaC,iCAAA,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,IAAInB,gCAAc,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,kBAAkBoB,yCAAA,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,UACTC,iCAAe,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,GAAeC,sDAAoC,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,CAACC,sCAAA,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,wBAAwBC,6BAAA,CAAY;AAAA,EAC/C,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,eAAA;AAAA,EACN,YAAA,EAAc,qBAAA;AAAA,EACd,UAAA,EAAYC,0CAAA;AAAA,EACZ,cAAA,EAAgBC,sCAAA;AAAA,EAChB,OAAA,EAAS,mBAAA;AAAA,EACT,WAAA,EAAa,2EAAA;AAAA,EACb,IAAA,EAAM,CAAC,WAAW,CAAA;AAAA,EAClB,YAAA,EAAc,IAAA;AAAA,EACd,oBAAoBC,sCAAA,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,OAAOC,6BAAA,CAAY,OAAO,yBAAyB,CAAA;AAAA,IACrD;AAAA,EACF;AACF,CAAC;AAEM,IAAM,qBAAqBJ,6BAAA,CAAY;AAAA,EAC5C,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,2BAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiBK,sCAAA;AAAA,EACjB,cAAA,EAAgBH,sCAAA;AAAA,EAChB,OAAA,EAAS,4BAAA;AAAA,EACT,WAAA,EAAa,6CAAA;AAAA,EACb,IAAA,EAAM,CAAC,WAAW,CAAA;AAAA,EAClB,YAAA,EAAc,IAAA;AAAA,EACd,oBAAoBC,sCAAA,CAAqB,WAAA;AAAA,EACzC,SAAS,OAAO,EAAE,MAAA,EAAQ,cAAA,EAAgB,YAAW,KAAM;AACzD,IAAA,IAAI;AACF,MAAA,MAAM,qBAAqB,MAAMX,oDAAA,CAAmC,EAAE,MAAA,EAAQ,UAAA,EAAY,gBAAgB,CAAA;AAC1G,MAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,QAAA,MAAM,IAAIjB,gCAAc,GAAA,EAAK,EAAE,SAAS,CAAA,gBAAA,EAAmB,UAAU,kBAAkB,CAAA;AAAA,MACzF;AAEA,MAAA,OAAO+B,kDAAgC,kBAAkB,CAAA;AAAA,IAC3D,SAAS,KAAA,EAAO;AACd,MAAA,OAAOF,6BAAA,CAAY,OAAO,2BAA2B,CAAA;AAAA,IACvD;AAAA,EACF;AACF,CAAC;AAEM,IAAM,wBAAwBJ,6BAAA,CAAY;AAAA,EAC/C,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,2BAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiBK,sCAAA;AAAA,EACjB,cAAA,EAAgBE,sCAAA;AAAA,EAChB,OAAA,EAAS,0BAAA;AAAA,EACT,WAAA,EAAa,uEAAA;AAAA,EACb,IAAA,EAAM,CAAC,WAAW,CAAA;AAAA,EAClB,YAAA,EAAc,IAAA;AAAA,EACd,oBAAoBJ,sCAAA,CAAqB,aAAA;AAAA,EACzC,SAAS,OAAO,EAAE,MAAA,EAAQ,cAAA,EAAgB,YAAW,KAAM;AACzD,IAAA,IAAI;AACF,MAAA,MAAM,qBAAqB,MAAMX,oDAAA,CAAmC,EAAE,MAAA,EAAQ,UAAA,EAAY,gBAAgB,CAAA;AAC1G,MAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,QAAA,MAAM,IAAIjB,gCAAc,GAAA,EAAK,EAAE,SAAS,CAAA,gBAAA,EAAmB,UAAU,kBAAkB,CAAA;AAAA,MACzF;AAEA,MAAA,MAAMiC,0CAAA,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,OAAOJ,6BAAA,CAAY,OAAO,yBAAyB,CAAA;AAAA,IACrD;AAAA,EACF;AACF,CAAC","file":"chunk-MVHJTBLL.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 chunkRJPRSDIS_cjs = require('./chunk-RJPRSDIS.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 chunkDRDVJ35H_cjs = require('./chunk-DRDVJ35H.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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-RKXUXSLD.cjs').then((mod) => mod.agentBuilderWorkflows);
return agentBuilderWorkflowsPromise;
}
async function registerAgentBuilderWorkflows(mastra) {
const agentBuilderWorkflows = await loadAgentBuilderWorkflows();
chunkDRDVJ35H_cjs.WorkflowRegistry.registerTemporaryWorkflows(agentBuilderWorkflows, mastra);
return agentBuilderWorkflows;
}
var LIST_AGENT_BUILDER_ACTIONS_ROUTE = chunkN54Q3AQR_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var STREAM_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var START_ASYNC_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var START_AGENT_BUILDER_ACTION_RUN_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var RESUME_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_cjs.WorkflowRegistry.cleanup();
}
}
});
var OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE = chunkN54Q3AQR_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 && !chunkDRDVJ35H_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 chunkRJPRSDIS_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 {
chunkDRDVJ35H_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-Q56NQYUJ.cjs.map
//# sourceMappingURL=chunk-Q56NQYUJ.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-Q56NQYUJ.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"]}
'use strict';
var chunkTMAUK4UG_cjs = require('./chunk-TMAUK4UG.cjs');
var chunkZQ4GVMYG_cjs = require('./chunk-ZQ4GVMYG.cjs');
var chunk42M6Y2OD_cjs = require('./chunk-42M6Y2OD.cjs');
var chunkDIG2K5CV_cjs = require('./chunk-DIG2K5CV.cjs');
var chunkDRDVJ35H_cjs = require('./chunk-DRDVJ35H.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.cjs');
var chunk22EM2GBH_cjs = require('./chunk-22EM2GBH.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 chunk22EM2GBH_cjs.standardSchemaToJSONSchema(chunk22EM2GBH_cjs.toStandardSchema5(schema), { target: "draft-2020-12" });
}
function serializeSchema(schema) {
const jsonSchema = schemaToJsonSchema(resolveLazySchema(schema));
if (jsonSchema === void 0) return void 0;
return chunkDRDVJ35H_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 ? chunkDRDVJ35H_cjs.stringify(resolvedInput.jsonSchema) : void 0,
outputSchema: resolvedOutput && typeof resolvedOutput === "object" && "jsonSchema" in resolvedOutput ? chunkDRDVJ35H_cjs.stringify(resolvedOutput.jsonSchema) : void 0
};
}
return {
...tool,
inputSchema: serializeSchema(tool.inputSchema),
outputSchema: serializeSchema(tool.outputSchema),
requestContextSchema: serializeSchema(tool.requestContextSchema)
};
}
var LIST_TOOLS_ROUTE = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 = chunkN54Q3AQR_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 chunkTMAUK4UG_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 = chunkN54Q3AQR_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 chunkTMAUK4UG_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-TGHO7KPM.cjs.map
//# sourceMappingURL=chunk-TGHO7KPM.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-TGHO7KPM.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"]}

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

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

import { listScorersResponseSchema, scorerIdPathParams, scorerEntrySchema, scoresWithPaginationResponseSchema, listScoresByRunIdQuerySchema, listScoresByScorerIdQuerySchema, listScoresByEntityIdQuerySchema, entityPathParams, saveScoreResponseSchema, saveScoreBodySchema } from './chunk-I2LG5WYB.js';
import { getAgentFromSystem } from './chunk-5NREJ74P.js';
import { runIdSchema } from './chunk-2YY3EMMS.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-U3N4FCLP.js.map
//# sourceMappingURL=chunk-U3N4FCLP.js.map
{"version":3,"sources":["../src/server/handlers/scores.ts"],"names":[],"mappings":";;;;;;;;;AAAA,IAAA,cAAA,GAAA;AAAA,QAAA,CAAA,cAAA,EAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,kBAAA,EAAA,MAAA,kBAAA;AAAA,EAAA,8BAAA,EAAA,MAAA,8BAAA;AAAA,EAAA,2BAAA,EAAA,MAAA,2BAAA;AAAA,EAAA,8BAAA,EAAA,MAAA,8BAAA;AAAA,EAAA,gBAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAsBA,eAAe,qBAAA,CAAsB;AAAA,EACnC,MAAA;AAAA,EACA;AACF,CAAA,EAEG;AACD,EAAA,MAAM,MAAA,GAAS,OAAO,UAAA,EAAW;AACjC,EAAA,MAAM,SAAA,GAAY,OAAO,aAAA,EAAc;AAEvC,EAAA,MAAM,UAAA,uBAAiB,GAAA,EASrB;AAGF,EAAA,MAAM,mBAAA,GAAsB,OAAO,KAAA,KAI7B;AACJ,IAAA,MAAM,OAAA,GACH,MAAM,KAAA,CAAM,WAAA,CAAY;AAAA,MACvB;AAAA,KACD,KAAM,EAAC;AAEV,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,SAAS,CAAA,EAAG;AACnC,MAAA,KAAA,MAAW,CAAC,SAAA,EAAW,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AACzD,QAAA,MAAM,QAAA,GAAW,OAAO,MAAA,CAAO,EAAA;AAC/B,QAAA,IAAI,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC5B,UAAA,UAAA,CAAW,IAAI,QAAQ,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,MAAM,EAAE,CAAA;AAChD,UAAA,UAAA,CAAW,IAAI,QAAQ,CAAA,EAAG,UAAA,CAAW,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,QACtD,CAAA,MAAO;AACL,UAAA,UAAA,CAAW,IAAI,QAAA,EAAU;AAAA,YACvB,aAAa,EAAC;AAAA,YACd,GAAG,MAAA;AAAA,YACH,UAAA,EAAY,CAAC,KAAA,CAAM,IAAI,CAAA;AAAA,YACvB,QAAA,EAAU,CAAC,KAAA,CAAM,EAAE,CAAA;AAAA,YACnB,YAAA,EAAc,KAAA;AAAA,YACd,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,MAAA,IAAU;AAAA,WACjC,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AAGA,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC/C,IAAA,MAAM,oBAAoB,KAAK,CAAA;AAAA,EACjC;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,IAAA,MAAM,kBAAA,GAAqB,MAAM,MAAA,EAAQ,KAAA,CAAM,IAAA,EAAK;AACpD,IAAA,IAAI,oBAAoB,MAAA,EAAQ;AAC9B,MAAA,KAAA,MAAW,iBAAA,IAAqB,mBAAmB,MAAA,EAAQ;AACzD,QAAA,IAAI;AACF,UAAA,MAAM,QAAQ,MAAM,MAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,kBAAkB,EAAE,CAAA;AAC9D,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,MAAM,oBAAoB,KAAK,CAAA;AAAA,UACjC;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,IAAA,MAAM,mBAAA,GAAsB,MAAM,MAAA,EAAQ,MAAA,CAAO,IAAA,EAAK;AACtD,IAAA,IAAI,qBAAqB,iBAAA,EAAmB;AAC1C,MAAA,KAAA,MAAW,kBAAA,IAAsB,oBAAoB,iBAAA,EAAmB;AACtE,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,EAAQ,MAAA,CAAO,OAAA,CAAQ,kBAAA,CAAmB,EAAE,CAAA;AAAA,QACpD,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,KAAA,MAAW,CAAC,UAAA,EAAY,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC9D,IAAA,MAAM,OAAA,GACH,MAAM,QAAA,CAAS,WAAA,CAAY;AAAA,MAC1B;AAAA,KACD,KAAM,EAAC;AAEV,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,SAAS,CAAA,EAAG;AACnC,MAAA,KAAA,MAAW,CAAC,SAAA,EAAW,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AACzD,QAAA,MAAM,UAAA,GAAa,OAAO,MAAA,CAAO,IAAA;AACjC,QAAA,IAAI,UAAA,CAAW,GAAA,CAAI,UAAU,CAAA,EAAG;AAC9B,UAAA,UAAA,CAAW,GAAA,CAAI,UAAU,CAAA,EAAG,WAAA,CAAY,KAAK,UAAU,CAAA;AAAA,QACzD,CAAA,MAAO;AACL,UAAA,UAAA,CAAW,IAAI,UAAA,EAAY;AAAA,YACzB,UAAU,EAAC;AAAA,YACX,YAAY,EAAC;AAAA,YACb,GAAG,MAAA;AAAA,YACH,WAAA,EAAa,CAAC,UAAU,CAAA;AAAA,YACxB,YAAA,EAAc,KAAA;AAAA,YACd,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,MAAA,IAAU;AAAA,WACjC,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,iBAAA,GAAoB,MAAM,MAAA,CAAO,WAAA,EAAY;AACnD,EAAA,KAAA,MAAW,CAAC,WAAW,MAAM,CAAA,IAAK,OAAO,OAAA,CAAQ,iBAAA,IAAqB,EAAE,CAAA,EAAG;AACzE,IAAA,MAAM,WAAW,MAAA,CAAO,EAAA;AACxB,IAAA,IAAI,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC5B,MAAA,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA,CAAG,YAAA,GAAe,IAAA;AAAA,IAC3C,CAAA,MAAO;AACL,MAAA,UAAA,CAAW,IAAI,QAAA,EAAU;AAAA,QACvB,MAAA;AAAA,QACA,UAAU,EAAC;AAAA,QACX,YAAY,EAAC;AAAA,QACb,aAAa,EAAC;AAAA,QACd,YAAA,EAAc,IAAA;AAAA,QACd,MAAA,EAAQ,OAAO,MAAA,IAAU;AAAA,OAC1B,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,MAAA,CAAO,WAAA,CAAY,UAAA,CAAW,OAAA,EAAS,CAAA;AAChD;AAGA,SAAS,gBAAgB,iBAAA,EAA4B;AACnD,EAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,CAAC,OAAA,EAAS,MAAM,CAAA,GAAI,iBAAA,CAAkB,MAAM,GAAG,CAAA;AAErD,EAAA,OAAO;AAAA,IACL,GAAI,OAAA,GAAU,EAAE,OAAA,KAAY,EAAC;AAAA,IAC7B,GAAI,MAAA,GAAS,EAAE,MAAA,KAAW;AAAC,GAC7B;AACF;AAMO,IAAM,qBAAqB,WAAA,CAAY;AAAA,EAC5C,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,iBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,cAAA,EAAgB,yBAAA;AAAA,EAChB,OAAA,EAAS,kBAAA;AAAA,EACT,WAAA,EAAa,uGAAA;AAAA,EACb,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,EAChB,YAAA,EAAc,IAAA;AAAA,EACd,OAAA,GAAU,OAAO,EAAE,MAAA,EAAQ,gBAAe,KAAW;AACnD,IAAA,MAAM,OAAA,GAAU,MAAM,qBAAA,CAAsB;AAAA,MAC1C,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AACF,CAAC;AAEM,IAAM,mBAAmB,WAAA,CAAY;AAAA,EAC1C,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,2BAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,kBAAA;AAAA,EACjB,cAAA,EAAgB,kBAAkB,QAAA,EAAS;AAAA,EAC3C,OAAA,EAAS,kBAAA;AAAA,EACT,WAAA,EAAa,oFAAA;AAAA,EACb,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,EAChB,YAAA,EAAc,IAAA;AAAA,EACd,UAAU,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,gBAAe,KAAW;AAC7D,IAAA,MAAM,OAAA,GAAU,MAAM,qBAAA,CAAsB;AAAA,MAC1C,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,QAAQ,QAAQ,CAAA;AAE/B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF,CAAC;AAEM,IAAM,8BAA8B,WAAA,CAAY;AAAA,EACrD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,oBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,WAAA;AAAA,EACjB,gBAAA,EAAkB,4BAAA;AAAA,EAClB,cAAA,EAAgB,kCAAA;AAAA,EAChB,OAAA,EAAS,uBAAA;AAAA,EACT,WAAA,EAAa,iDAAA;AAAA,EACb,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,EAChB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO,EAAE,QAAQ,KAAA,EAAO,GAAG,QAAO,KAAM;AAC/C,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,MAAA;AAC1B,MAAA,MAAM,UAAA,GAAgC;AAAA,QACpC,MAAM,IAAA,IAAQ,CAAA;AAAA,QACd,SAAS,OAAA,IAAW;AAAA,OACtB;AACA,MAAA,MAAM,SAAS,MAAM,MAAA,CAAO,UAAA,EAAW,EAAG,SAAS,QAAQ,CAAA;AAC3D,MAAA,MAAM,YAAA,GAAgB,MAAM,MAAA,EAAQ,iBAAA,GAAoB;AAAA,QACtD,KAAA;AAAA,QACA;AAAA,OACD,CAAA,IAAM,EAAE,UAAA,EAAY,EAAE,OAAO,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,OAAA,EAAS,GAAG,OAAA,EAAS,KAAA,EAAM,EAAG,MAAA,EAAQ,EAAC,EAAE;AACnF,MAAA,OAAO;AAAA,QACL,YAAY,YAAA,CAAa,UAAA;AAAA,QACzB,MAAA,EAAQ,YAAA,CAAa,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAyB,EAAE,GAAG,KAAA,EAAO,GAAG,eAAA,CAAgB,KAAA,CAAM,OAAO,GAAE,CAAE;AAAA,OAC5G;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,gCAAgC,CAAA;AAAA,IAC5D;AAAA,EACF;AACF,CAAC;AAEM,IAAM,iCAAiC,WAAA,CAAY;AAAA,EACxD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,0BAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,kBAAA;AAAA,EACjB,gBAAA,EAAkB,+BAAA;AAAA,EAClB,cAAA,EAAgB,kCAAA;AAAA,EAChB,OAAA,EAAS,0BAAA;AAAA,EACT,WAAA,EAAa,mDAAA;AAAA,EACb,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,EAChB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO,EAAE,QAAQ,QAAA,EAAU,GAAG,QAAO,KAAM;AAClD,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,YAAW,GAAI,MAAA;AAChD,MAAA,MAAM,UAAU,MAAA,CAAO,WAAA,CAAY,OAAO,OAAA,CAAQ,EAAE,UAAU,UAAA,EAAY,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,KAAM,MAAS,CAAC,CAAA;AAC/G,MAAA,MAAM,SAAS,MAAM,MAAA,CAAO,UAAA,EAAW,EAAG,SAAS,QAAQ,CAAA;AAC3D,MAAA,MAAM,YAAA,GAAgB,MAAM,MAAA,EAAQ,oBAAA,GAAuB;AAAA,QACzD,QAAA;AAAA,QACA,YAAY,EAAE,IAAA,EAAM,QAAQ,CAAA,EAAG,OAAA,EAAS,WAAW,EAAA,EAAG;AAAA,QACtD,GAAG;AAAA,OACJ,CAAA,IAAM,EAAE,UAAA,EAAY,EAAE,OAAO,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,OAAA,EAAS,GAAG,OAAA,EAAS,KAAA,EAAM,EAAG,MAAA,EAAQ,EAAC,EAAE;AACnF,MAAA,OAAO;AAAA,QACL,YAAY,YAAA,CAAa,UAAA;AAAA,QACzB,MAAA,EAAQ,YAAA,CAAa,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAyB,EAAE,GAAG,KAAA,EAAO,GAAG,eAAA,CAAgB,KAAA,CAAM,OAAO,GAAE,CAAE;AAAA,OAC5G;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,mCAAmC,CAAA;AAAA,IAC/D;AAAA,EACF;AACF,CAAC;AAEM,IAAM,iCAAiC,WAAA,CAAY;AAAA,EACxD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,sCAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,gBAAA;AAAA,EACjB,gBAAA,EAAkB,+BAAA;AAAA,EAClB,cAAA,EAAgB,kCAAA;AAAA,EAChB,OAAA,EAAS,0BAAA;AAAA,EACT,WAAA,EAAa,8DAAA;AAAA,EACb,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,EAChB,YAAA,EAAc,IAAA;AAAA,EACd,OAAA,EAAS,OAAO,EAAE,MAAA,EAAQ,UAAU,UAAA,EAAY,GAAG,QAAO,KAAM;AAC9D,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,MAAA;AAC1B,MAAA,IAAI,aAAA,GAAgB,QAAA;AAEpB,MAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,QAAA,MAAM,QAAQ,MAAM,kBAAA,CAAmB,EAAE,MAAA,EAAQ,OAAA,EAAS,UAAU,CAAA;AACpE,QAAA,aAAA,GAAgB,KAAA,CAAM,EAAA;AAAA,MACxB,CAAA,MAAA,IAAW,eAAe,UAAA,EAAY;AACpC,QAAA,MAAM,QAAA,GAAW,MAAA,CAAO,eAAA,CAAgB,QAAQ,CAAA;AAChD,QAAA,aAAA,GAAgB,QAAA,CAAS,EAAA;AAAA,MAC3B;AAEA,MAAA,MAAM,UAAA,GAAgC;AAAA,QACpC,MAAM,IAAA,IAAQ,CAAA;AAAA,QACd,SAAS,OAAA,IAAW;AAAA,OACtB;AAEA,MAAA,MAAM,cAAc,MAAM,MAAA,CAAO,UAAA,EAAW,EAAG,SAAS,QAAQ,CAAA;AAChE,MAAA,MAAM,YAAA,GAAgB,MAAM,WAAA,EAAa,oBAAA,GAAuB;AAAA,QAC9D,QAAA,EAAU,aAAA;AAAA,QACV,UAAA;AAAA,QACA;AAAA,OACD,CAAA,IAAM,EAAE,UAAA,EAAY,EAAE,OAAO,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,OAAA,EAAS,GAAG,OAAA,EAAS,KAAA,EAAM,EAAG,MAAA,EAAQ,EAAC,EAAE;AAEnF,MAAA,OAAO;AAAA,QACL,YAAY,YAAA,CAAa,UAAA;AAAA,QACzB,MAAA,EAAQ,YAAA,CAAa,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAyB,EAAE,GAAG,KAAA,EAAO,GAAG,eAAA,CAAgB,KAAA,CAAM,OAAO,GAAE,CAAE;AAAA,OAC5G;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,mCAAmC,CAAA;AAAA,IAC/D;AAAA,EACF;AACF,CAAC;AAEM,IAAM,mBAAmB,WAAA,CAAY;AAAA,EAC1C,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,SAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,UAAA,EAAY,mBAAA;AAAA,EACZ,cAAA,EAAgB,uBAAA;AAAA,EAChB,OAAA,EAAS,YAAA;AAAA,EACT,WAAA,EAAa,qCAAA;AAAA,EACb,IAAA,EAAM,CAAC,SAAS,CAAA;AAAA,EAChB,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,OAAO,EAAE,MAAA,EAAQ,GAAG,QAAO,KAAM;AACxC,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,OAAM,GAAI,MAAA;AAClB,MAAA,MAAM,cAAc,MAAM,MAAA,CAAO,UAAA,EAAW,EAAG,SAAS,QAAQ,CAAA;AAChE,MAAA,MAAM,MAAA,GAAS,MAAM,WAAA,EAAa,SAAA,GAAY,KAAK,CAAA;AACnD,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0BAA0B,CAAA;AAAA,MACpE;AACA,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,oBAAoB,CAAA;AAAA,IAChD;AAAA,EACF;AACF,CAAC","file":"chunk-U3N4FCLP.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"]}

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

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

import { getAgentFromSystem } from './chunk-5NREJ74P.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-QIQWHDPH.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.js';
import { standardSchemaToJSONSchema, toStandardSchema5 } from './chunk-YZAQOU2I.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-WJXL7PJV.js.map
//# sourceMappingURL=chunk-WJXL7PJV.js.map
{"version":3,"sources":["../src/server/handlers/tools.ts"],"names":["tool"],"mappings":"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","file":"chunk-WJXL7PJV.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"]}

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 chunkFORER7LG_cjs = require('./chunk-FORER7LG.cjs');
var chunkKXKNHXU3_cjs = require('./chunk-KXKNHXU3.cjs');
var chunkHDIYJI2Z_cjs = require('./chunk-HDIYJI2Z.cjs');
var chunkDRDVJ35H_cjs = require('./chunk-DRDVJ35H.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 = chunkN54Q3AQR_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 chunkDRDVJ35H_cjs.getStoredResourceScope(mastra, requestContext);
const scopedMetadata = chunkDRDVJ35H_cjs.scopeStoredResourceMetadata(metadata, scope);
const callerId = chunkHDIYJI2Z_cjs.getCallerAuthorId(requestContext);
const favoritesEnabled = await chunkKXKNHXU3_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(chunkFORER7LG_cjs.stripFavoriteFields) };
}
const enrichment = await chunkFORER7LG_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(chunkFORER7LG_cjs.stripFavoriteFields);
return { ...result, skills: annotated };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error listing stored skills");
}
}
});
var GET_STORED_SKILL_ROUTE = chunkN54Q3AQR_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(skill, await chunkDRDVJ35H_cjs.getStoredResourceScope(mastra, requestContext));
chunkHDIYJI2Z_cjs.assertReadAccess({ requestContext, resource: "stored-skills", resourceId: storedSkillId, record: skill });
return chunkFORER7LG_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", skill);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error getting stored skill");
}
}
});
var CREATE_STORED_SKILL_ROUTE = chunkN54Q3AQR_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 || chunkDRDVJ35H_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: chunkDRDVJ35H_cjs.scopeStoredResourceMetadata(metadata, await chunkDRDVJ35H_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 chunkFORER7LG_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error creating stored skill");
}
}
});
var UPDATE_STORED_SKILL_ROUTE = chunkN54Q3AQR_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 chunkDRDVJ35H_cjs.getStoredResourceScope(mastra, requestContext);
chunkDRDVJ35H_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 = chunkDRDVJ35H_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 chunkFORER7LG_cjs.enrichOrStripFavorites(mastra, requestContext, "skill", resolved);
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "Error updating stored skill");
}
}
});
var DELETE_STORED_SKILL_ROUTE = chunkN54Q3AQR_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(existing, await chunkDRDVJ35H_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 = chunkN54Q3AQR_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` });
}
chunkDRDVJ35H_cjs.assertStoredResourceScope(existing, await chunkDRDVJ35H_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 chunkFORER7LG_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-XMBSW6DM.cjs.map
//# sourceMappingURL=chunk-XMBSW6DM.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-XMBSW6DM.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-LEKVIHSE.js';
import { mapMastraMessagesToConversationItems } from './chunk-TLLV2JP5.js';
import { getAgentMemoryStore, findConversationThreadAcrossAgents } from './chunk-L4DD3HSB.js';
import { getAgentFromSystem } from './chunk-5NREJ74P.js';
import { MastraFGAPermissions, getEffectiveResourceId } from './chunk-JBSUT5XF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-Y3CWM5PU.js.map
//# sourceMappingURL=chunk-Y3CWM5PU.js.map
{"version":3,"sources":["../src/server/handlers/conversations.ts"],"names":[],"mappings":"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","file":"chunk-Y3CWM5PU.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 chunkAKJAQVZ3_cjs = require('./chunk-AKJAQVZ3.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkN54Q3AQR_cjs = require('./chunk-N54Q3AQR.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 = chunkN54Q3AQR_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-YOGI6NFI.cjs');
return buildApiSchemaManifest();
}
});
var GET_SYSTEM_PACKAGES_ROUTE = chunkN54Q3AQR_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-Y44XPBTJ.cjs.map
//# sourceMappingURL=chunk-Y44XPBTJ.cjs.map
{"version":3,"sources":["../src/server/handlers/system.ts"],"names":["createRoute","apiSchemaManifestResponseSchema","systemPackagesResponseSchema","readFileSync","handleError"],"mappings":"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","file":"chunk-Y44XPBTJ.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-PIKPS6Q6.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-5GWYLM2E.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-Z4BKSPBZ.js.map
//# sourceMappingURL=chunk-Z4BKSPBZ.js.map
{"version":3,"sources":["../src/server/handlers/system.ts"],"names":[],"mappings":"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","file":"chunk-Z4BKSPBZ.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 { 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-5NREJ74P.js';
import { MastraFGAPermissions, getEffectiveThreadId, getEffectiveResourceId, enforceThreadAccess } from './chunk-JBSUT5XF.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-PIKPS6Q6.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-ZPILA2J2.js.map
//# sourceMappingURL=chunk-ZPILA2J2.js.map
{"version":3,"sources":["../src/server/handlers/responses.ts"],"names":["existingThread","threadId","createdThread","completedState"],"mappings":"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","file":"chunk-ZPILA2J2.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"]}

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

export { Extractor, ModelByInputTokens, OBSERVER_SYSTEM_PROMPT, ObservationalMemory, ObservationalMemoryProcessor, TokenCounter, WorkingMemoryExtractor, buildObserverPrompt, buildObserverSystemPrompt, combineObservationGroupRanges, deriveObservationGroupProvenance, extractCurrentTask, formatMessagesForObserver, getObservationsAsOf, hasCurrentTaskSection, injectAnchorIds, optimizeObservationsForContext, parseAnchorId, parseObservationGroups, parseObserverOutput, reconcileObservationGroupsFromReflection, renderObservationGroupsForReflection, stripEphemeralAnchorIds, stripObservationGroups, wrapInObservationGroup } from './chunk-C65RFM5P.js';
export { OBSERVATIONAL_MEMORY_DEFAULTS, OBSERVATION_CONTEXT_INSTRUCTIONS, OBSERVATION_CONTEXT_PROMPT, OBSERVATION_CONTINUATION_HINT } from './chunk-JMEMSVJ5.js';
//# sourceMappingURL=observational-memory-QL6BKIQX-2V7T3FLD.js.map
//# sourceMappingURL=observational-memory-QL6BKIQX-2V7T3FLD.js.map
{"version":3,"sources":[],"names":[],"mappings":"","file":"observational-memory-QL6BKIQX-2V7T3FLD.js"}
'use strict';
var chunkXASCEABS_cjs = require('./chunk-XASCEABS.cjs');
var chunk3D55EABW_cjs = require('./chunk-3D55EABW.cjs');
Object.defineProperty(exports, "Extractor", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.Extractor; }
});
Object.defineProperty(exports, "ModelByInputTokens", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.ModelByInputTokens; }
});
Object.defineProperty(exports, "OBSERVER_SYSTEM_PROMPT", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.OBSERVER_SYSTEM_PROMPT; }
});
Object.defineProperty(exports, "ObservationalMemory", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.ObservationalMemory; }
});
Object.defineProperty(exports, "ObservationalMemoryProcessor", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.ObservationalMemoryProcessor; }
});
Object.defineProperty(exports, "TokenCounter", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.TokenCounter; }
});
Object.defineProperty(exports, "WorkingMemoryExtractor", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.WorkingMemoryExtractor; }
});
Object.defineProperty(exports, "buildObserverPrompt", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.buildObserverPrompt; }
});
Object.defineProperty(exports, "buildObserverSystemPrompt", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.buildObserverSystemPrompt; }
});
Object.defineProperty(exports, "combineObservationGroupRanges", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.combineObservationGroupRanges; }
});
Object.defineProperty(exports, "deriveObservationGroupProvenance", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.deriveObservationGroupProvenance; }
});
Object.defineProperty(exports, "extractCurrentTask", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.extractCurrentTask; }
});
Object.defineProperty(exports, "formatMessagesForObserver", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.formatMessagesForObserver; }
});
Object.defineProperty(exports, "getObservationsAsOf", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.getObservationsAsOf; }
});
Object.defineProperty(exports, "hasCurrentTaskSection", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.hasCurrentTaskSection; }
});
Object.defineProperty(exports, "injectAnchorIds", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.injectAnchorIds; }
});
Object.defineProperty(exports, "optimizeObservationsForContext", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.optimizeObservationsForContext; }
});
Object.defineProperty(exports, "parseAnchorId", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.parseAnchorId; }
});
Object.defineProperty(exports, "parseObservationGroups", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.parseObservationGroups; }
});
Object.defineProperty(exports, "parseObserverOutput", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.parseObserverOutput; }
});
Object.defineProperty(exports, "reconcileObservationGroupsFromReflection", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.reconcileObservationGroupsFromReflection; }
});
Object.defineProperty(exports, "renderObservationGroupsForReflection", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.renderObservationGroupsForReflection; }
});
Object.defineProperty(exports, "stripEphemeralAnchorIds", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.stripEphemeralAnchorIds; }
});
Object.defineProperty(exports, "stripObservationGroups", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.stripObservationGroups; }
});
Object.defineProperty(exports, "wrapInObservationGroup", {
enumerable: true,
get: function () { return chunkXASCEABS_cjs.wrapInObservationGroup; }
});
Object.defineProperty(exports, "OBSERVATIONAL_MEMORY_DEFAULTS", {
enumerable: true,
get: function () { return chunk3D55EABW_cjs.OBSERVATIONAL_MEMORY_DEFAULTS; }
});
Object.defineProperty(exports, "OBSERVATION_CONTEXT_INSTRUCTIONS", {
enumerable: true,
get: function () { return chunk3D55EABW_cjs.OBSERVATION_CONTEXT_INSTRUCTIONS; }
});
Object.defineProperty(exports, "OBSERVATION_CONTEXT_PROMPT", {
enumerable: true,
get: function () { return chunk3D55EABW_cjs.OBSERVATION_CONTEXT_PROMPT; }
});
Object.defineProperty(exports, "OBSERVATION_CONTINUATION_HINT", {
enumerable: true,
get: function () { return chunk3D55EABW_cjs.OBSERVATION_CONTINUATION_HINT; }
});
//# sourceMappingURL=observational-memory-QL6BKIQX-QGB4L22X.cjs.map
//# sourceMappingURL=observational-memory-QL6BKIQX-QGB4L22X.cjs.map
{"version":3,"sources":[],"names":[],"mappings":"","file":"observational-memory-QL6BKIQX-QGB4L22X.cjs"}

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

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

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