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

@mastra/server

Package Overview
Dependencies
Maintainers
7
Versions
1082
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.46.1-alpha.0
to
1.46.1-alpha.1
+58
dist/api-schema-manifest-UURVUNXQ.cjs
'use strict';
var chunkMIIC4RAA_cjs = require('./chunk-MIIC4RAA.cjs');
var chunkG54X6VE6_cjs = require('./chunk-G54X6VE6.cjs');
// src/server/server-adapter/api-schema-manifest.ts
function convertSchema(schema) {
return schema ? chunkG54X6VE6_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 = chunkMIIC4RAA_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-UURVUNXQ.cjs.map
//# sourceMappingURL=api-schema-manifest-UURVUNXQ.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-UURVUNXQ.cjs","sourcesContent":["import type { JSONSchema7 } from '@mastra/schema-compat';\nimport { schemaToJsonSchema } from './openapi-utils';\nimport { SERVER_ROUTES } from './routes/index';\nimport type { ServerRoute } from './routes/index';\n\nexport interface ApiSchemaResponseShape {\n kind: 'array' | 'record' | 'object-property' | 'single' | 'unknown';\n listProperty?: string;\n paginationProperty?: string;\n}\n\nexport interface ApiSchemaManifestRoute {\n method: string;\n path: string;\n responseType: string;\n pathParamSchema?: JSONSchema7;\n queryParamSchema?: JSONSchema7;\n bodySchema?: JSONSchema7;\n responseSchema?: JSONSchema7;\n responseShape: ApiSchemaResponseShape;\n}\n\nexport interface ApiSchemaManifest {\n version: 1;\n routes: ApiSchemaManifestRoute[];\n}\n\nfunction convertSchema(schema: ServerRoute['bodySchema']): JSONSchema7 | undefined {\n return schema ? schemaToJsonSchema(schema) : undefined;\n}\n\nfunction asJsonSchema(value: unknown): JSONSchema7 | undefined {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as JSONSchema7) : undefined;\n}\n\nfunction schemaType(schema: JSONSchema7 | undefined): JSONSchema7['type'] | undefined {\n const type = schema?.type;\n return Array.isArray(type) ? type.find(Boolean) : type;\n}\n\nfunction inferResponseShape(responseSchema: JSONSchema7 | undefined): ApiSchemaResponseShape {\n if (!responseSchema) return { kind: 'unknown' };\n\n const type = schemaType(responseSchema);\n if (type === 'array') return { kind: 'array' };\n if (type !== 'object') return { kind: 'single' };\n\n const properties =\n responseSchema.properties && !Array.isArray(responseSchema.properties) ? responseSchema.properties : {};\n const propertyNames = Object.keys(properties);\n const paginationProperty = 'page' in properties ? 'page' : 'pagination' in properties ? 'pagination' : undefined;\n const listProperty = Object.entries(properties).find(\n ([, property]) => schemaType(asJsonSchema(property)) === 'array',\n )?.[0];\n\n if (listProperty && (paginationProperty || propertyNames.length <= 2)) {\n return { kind: 'object-property', listProperty, paginationProperty };\n }\n if (responseSchema.additionalProperties && propertyNames.length === 0) return { kind: 'record' };\n return { kind: 'single' };\n}\n\nfunction isManifestRoute(route: ServerRoute): boolean {\n return route.responseType === 'json' && !route.deprecated;\n}\n\nexport function buildApiSchemaManifest(routes: readonly ServerRoute[] = SERVER_ROUTES): ApiSchemaManifest {\n return {\n version: 1,\n routes: routes.filter(isManifestRoute).map(route => {\n const responseSchema = convertSchema(route.responseSchema);\n return {\n method: route.method,\n path: route.path,\n responseType: route.responseType,\n pathParamSchema: convertSchema(route.pathParamSchema),\n queryParamSchema: convertSchema(route.queryParamSchema),\n bodySchema: convertSchema(route.bodySchema),\n responseSchema,\n responseShape: inferResponseShape(responseSchema),\n };\n }),\n };\n}\n"]}
import { SERVER_ROUTES } from './chunk-6UL3DHZP.js';
import { schemaToJsonSchema } from './chunk-BRC4XSFG.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-YB7LBQHE.js.map
//# sourceMappingURL=api-schema-manifest-YB7LBQHE.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-YB7LBQHE.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 chunkAKJAQVZ3_cjs = require('./chunk-AKJAQVZ3.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkG54X6VE6_cjs = require('./chunk-G54X6VE6.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 = chunkG54X6VE6_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-UURVUNXQ.cjs');
return buildApiSchemaManifest();
}
});
var GET_SYSTEM_PACKAGES_ROUTE = chunkG54X6VE6_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-55YQXUOE.cjs.map
//# sourceMappingURL=chunk-55YQXUOE.cjs.map
{"version":3,"sources":["../src/server/handlers/system.ts"],"names":["createRoute","apiSchemaManifestResponseSchema","systemPackagesResponseSchema","readFileSync","handleError"],"mappings":"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","file":"chunk-55YQXUOE.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 { 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-TS5QYSEZ.js';
import { LIST_STORED_WORKSPACES_ROUTE, GET_STORED_WORKSPACE_ROUTE, CREATE_STORED_WORKSPACE_ROUTE, UPDATE_STORED_WORKSPACE_ROUTE, DELETE_STORED_WORKSPACE_ROUTE } from './chunk-M25LVAUH.js';
import { GET_SYSTEM_PACKAGES_ROUTE, GET_API_SCHEMA_ROUTE } from './chunk-BIYCTKL5.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-2Z3TLC4L.js';
import { FAVORITE_STORED_AGENT_ROUTE, UNFAVORITE_STORED_AGENT_ROUTE } from './chunk-ZZOHO2FT.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-C4U5EL4H.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-KBOC52HT.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-SJPWXUKZ.js';
import { LIST_STORED_SCORERS_ROUTE, GET_STORED_SCORER_ROUTE, CREATE_STORED_SCORER_ROUTE, UPDATE_STORED_SCORER_ROUTE, DELETE_STORED_SCORER_ROUTE } from './chunk-E2JNW3QM.js';
import { FAVORITE_STORED_SKILL_ROUTE, UNFAVORITE_STORED_SKILL_ROUTE } from './chunk-5V2QWK2S.js';
import { LIST_PROCESSORS_ROUTE, GET_PROCESSOR_BY_ID_ROUTE, EXECUTE_PROCESSOR_ROUTE } from './chunk-MQMPNMZH.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-BB6RVOJY.js';
import { LIST_SCHEDULES_ROUTE, GET_SCHEDULE_ROUTE, LIST_SCHEDULE_TRIGGERS_ROUTE, PAUSE_SCHEDULE_ROUTE, RESUME_SCHEDULE_ROUTE } from './chunk-WAIWLM6T.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-46Y4Y2RB.js';
import { LIST_PROCESSOR_PROVIDERS_ROUTE, GET_PROCESSOR_PROVIDER_ROUTE } from './chunk-IDCRGQOI.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-GADWAAGI.js';
import { GET_EDITOR_BUILDER_SETTINGS_ROUTE, GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE, GET_INFRASTRUCTURE_STATUS_ROUTE } from './chunk-TPGA2ZTS.js';
import { LIST_HARNESSES_ROUTE, LIST_HARNESS_MODES_ROUTE, LIST_HARNESS_MODELS_ROUTE, CREATE_HARNESS_SESSION_ROUTE, GET_HARNESS_SESSION_STATE_ROUTE, LIST_HARNESS_THREADS_ROUTE, CREATE_HARNESS_THREAD_ROUTE, DELETE_HARNESS_THREAD_ROUTE, RENAME_HARNESS_THREAD_ROUTE, CLONE_HARNESS_THREAD_ROUTE, LIST_HARNESS_THREAD_MESSAGES_ROUTE, STREAM_HARNESS_SESSION_ROUTE, SEND_HARNESS_MESSAGE_ROUTE, STEER_HARNESS_SESSION_ROUTE, FOLLOW_UP_HARNESS_SESSION_ROUTE, ABORT_HARNESS_SESSION_ROUTE, HARNESS_TOOL_APPROVAL_ROUTE, HARNESS_TOOL_SUSPENSION_ROUTE, SWITCH_HARNESS_MODE_ROUTE, SWITCH_HARNESS_MODEL_ROUTE, SWITCH_HARNESS_THREAD_ROUTE, SEND_HARNESS_NOTIFICATION_ROUTE, GET_HARNESS_WORKSPACE_STATUS_ROUTE, GET_HARNESS_OM_RECORD_ROUTE, SET_HARNESS_RESOURCE_ID_ROUTE, GET_HARNESS_RESOURCE_IDS_ROUTE, GET_HARNESS_GOAL_ROUTE, SET_HARNESS_GOAL_ROUTE, UPDATE_HARNESS_GOAL_ROUTE, CLEAR_HARNESS_GOAL_ROUTE, GET_HARNESS_PERMISSIONS_ROUTE, SET_HARNESS_CATEGORY_PERMISSION_ROUTE, SET_HARNESS_TOOL_PERMISSION_ROUTE, SET_HARNESS_SESSION_STATE_ROUTE } from './chunk-PWU43QJA.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-MMY24AC4.js';
import { BACKGROUND_TASK_STREAM_ROUTE, LIST_BACKGROUND_TASKS_ROUTE, GET_BACKGROUND_TASK_ROUTE } from './chunk-JUORD32P.js';
import { LIST_BUILDER_REGISTRIES_ROUTE, BUILDER_REGISTRY_SEARCH_ROUTE, BUILDER_REGISTRY_POPULAR_ROUTE, BUILDER_REGISTRY_PREVIEW_ROUTE, BUILDER_REGISTRY_INSTALL_ROUTE } from './chunk-C2A2BZFY.js';
import { LIST_CHANNEL_PLATFORMS_ROUTE, LIST_CHANNEL_INSTALLATIONS_ROUTE, CONNECT_CHANNEL_ROUTE, DISCONNECT_CHANNEL_ROUTE } from './chunk-VRERZRJQ.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-MMZL6I4C.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-WF6VLJGR.js';
import { EXECUTE_AGENT_TOOL_ROUTE, GET_AGENT_TOOL_ROUTE, LIST_TOOLS_ROUTE, GET_TOOL_BY_ID_ROUTE, EXECUTE_TOOL_ROUTE } from './chunk-F5EEKLC4.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-MLLGO6XZ.js';
import { CREATE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE } from './chunk-PLWZVSGT.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-RQGQAYCL.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-HZWJL5Y4.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-TIXNAAKQ.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-5FFEBJ3X.js';
import { LIST_LOG_TRANSPORTS_ROUTE, LIST_LOGS_ROUTE, LIST_LOGS_BY_RUN_ID_ROUTE } from './chunk-OHWAEEZJ.js';
import { CREATE_CONVERSATION_ROUTE, GET_CONVERSATION_ROUTE, GET_CONVERSATION_ITEMS_ROUTE, DELETE_CONVERSATION_ROUTE } from './chunk-E345K7K7.js';
import { GET_AGENT_CARD_ROUTE, AGENT_EXECUTION_ROUTE } from './chunk-NEPOKWAA.js';
import { AUTH_ROUTES } from './chunk-R4O5HVDI.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, 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-WKSF3TVK.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-ILVGJFCT.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-R7624SPL.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-56TEDJND.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/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,
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/harness.ts
var HARNESS_ROUTES = [
LIST_HARNESSES_ROUTE,
LIST_HARNESS_MODES_ROUTE,
LIST_HARNESS_MODELS_ROUTE,
CREATE_HARNESS_SESSION_ROUTE,
GET_HARNESS_SESSION_STATE_ROUTE,
LIST_HARNESS_THREADS_ROUTE,
CREATE_HARNESS_THREAD_ROUTE,
DELETE_HARNESS_THREAD_ROUTE,
RENAME_HARNESS_THREAD_ROUTE,
CLONE_HARNESS_THREAD_ROUTE,
LIST_HARNESS_THREAD_MESSAGES_ROUTE,
STREAM_HARNESS_SESSION_ROUTE,
SEND_HARNESS_MESSAGE_ROUTE,
STEER_HARNESS_SESSION_ROUTE,
FOLLOW_UP_HARNESS_SESSION_ROUTE,
ABORT_HARNESS_SESSION_ROUTE,
HARNESS_TOOL_APPROVAL_ROUTE,
HARNESS_TOOL_SUSPENSION_ROUTE,
SWITCH_HARNESS_MODE_ROUTE,
SWITCH_HARNESS_MODEL_ROUTE,
SWITCH_HARNESS_THREAD_ROUTE,
SEND_HARNESS_NOTIFICATION_ROUTE,
GET_HARNESS_WORKSPACE_STATUS_ROUTE,
GET_HARNESS_OM_RECORD_ROUTE,
SET_HARNESS_RESOURCE_ID_ROUTE,
GET_HARNESS_RESOURCE_IDS_ROUTE,
GET_HARNESS_GOAL_ROUTE,
SET_HARNESS_GOAL_ROUTE,
UPDATE_HARNESS_GOAL_ROUTE,
CLEAR_HARNESS_GOAL_ROUTE,
GET_HARNESS_PERMISSIONS_ROUTE,
SET_HARNESS_CATEGORY_PERMISSION_ROUTE,
SET_HARNESS_TOOL_PERMISSION_ROUTE,
SET_HARNESS_SESSION_STATE_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,
...CHANNELS_ROUTES,
...HARNESS_ROUTES
];
export { SERVER_ROUTES, deriveAction, derivePermission, extractResource, getEffectivePermission };
//# sourceMappingURL=chunk-6UL3DHZP.js.map
//# sourceMappingURL=chunk-6UL3DHZP.js.map
{"version":3,"sources":["../src/server/server-adapter/routes/permissions.ts","../src/server/server-adapter/routes/a2a.ts","../src/server/server-adapter/routes/agent-builder.ts","../src/server/server-adapter/routes/agents.ts","../src/server/server-adapter/routes/background-tasks.ts","../src/server/server-adapter/routes/channels.ts","../src/server/server-adapter/routes/conversations.ts","../src/server/server-adapter/routes/datasets.ts","../src/server/server-adapter/routes/editor-builder.ts","../src/server/server-adapter/routes/harness.ts","../src/server/server-adapter/routes/legacy.ts","../src/server/server-adapter/routes/logs.ts","../src/server/server-adapter/routes/mcp.ts","../src/server/server-adapter/routes/memory.ts","../src/server/server-adapter/routes/observability.ts","../src/server/server-adapter/routes/processor-providers.ts","../src/server/server-adapter/routes/processors.ts","../src/server/server-adapter/routes/responses.ts","../src/server/server-adapter/routes/schedules.ts","../src/server/server-adapter/routes/scorers.ts","../src/server/server-adapter/routes/stored-agents.ts","../src/server/server-adapter/routes/stored-mcp-clients.ts","../src/server/server-adapter/routes/stored-prompt-blocks.ts","../src/server/server-adapter/routes/stored-scorers.ts","../src/server/server-adapter/routes/stored-skills.ts","../src/server/server-adapter/routes/stored-workspaces.ts","../src/server/server-adapter/routes/system.ts","../src/server/server-adapter/routes/tool-providers.ts","../src/server/server-adapter/routes/tools.ts","../src/server/server-adapter/routes/vectors.ts","../src/server/server-adapter/routes/workflows.ts","../src/server/server-adapter/routes/workspace.ts","../src/server/server-adapter/routes/index.ts"],"names":[],"mappings":"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","file":"chunk-6UL3DHZP.js","sourcesContent":["/**\n * Permission derivation utilities for automatic route permission assignment.\n *\n * This module provides convention-based permission derivation from route paths and methods,\n * reducing the need to manually specify permissions on each route.\n *\n * Convention: `{resource}:{action}`\n * - resource: First path segment after common prefixes (e.g., 'agents', 'workflows', 'memory')\n * - action: Derived from HTTP method (GET→read, POST→write/execute, DELETE→delete, etc.)\n */\n\nimport type { ServerRoute } from './index';\n\n/**\n * Map HTTP methods to permission actions.\n * POST is context-dependent (write for data, execute for operations).\n */\nconst METHOD_TO_ACTION: Record<string, string> = {\n GET: 'read',\n POST: 'write', // Default for POST, may be overridden to 'execute'\n PUT: 'write',\n PATCH: 'write',\n DELETE: 'delete',\n};\n\n/**\n * Path patterns that indicate an \"execute\" action rather than \"write\" for POST requests.\n * These are typically operation endpoints rather than data creation endpoints.\n */\nconst EXECUTE_PATTERNS = [\n '/generate',\n '/stream',\n '/execute',\n '/start',\n '/resume',\n '/restart',\n '/cancel',\n '/approve',\n '/decline',\n '/speak',\n '/listen',\n '/query',\n '/search',\n '/observe',\n '/time-travel',\n '/enhance',\n '/clone',\n];\n\nconst PUBLISH_PATTERNS = ['/publish', '/activate', '/restore'];\n\n/**\n * Maps `/stored/<family>` URL segments to canonical permission resource slugs.\n */\nconst STORED_RESOURCE_SEGMENTS: Record<string, string> = {\n agents: 'stored-agents',\n 'mcp-clients': 'stored-mcp-clients',\n 'prompt-blocks': 'stored-prompt-blocks',\n scorers: 'stored-scorers',\n skills: 'stored-skills',\n workspaces: 'stored-workspaces',\n};\n\n/**\n * Extracts the primary resource name from a route path.\n *\n * The resource is derived from the first path segment, with special handling\n * for compound resources and well-known paths.\n *\n * Note: The canonical list of resources is generated in permissions.generated.ts\n * from SERVER_ROUTES via `pnpm generate:permissions`.\n *\n * @param path - The route path (e.g., '/agents/:agentId/generate')\n * @returns The resource name (e.g., 'agents') or null if not identifiable\n *\n * @example\n * extractResource('/agents/:agentId') // → 'agents'\n * extractResource('/memory/threads/:threadId') // → 'memory'\n * extractResource('/stored/agents/:agentId') // → 'stored-agents'\n * extractResource('/stored/skills/:skillId') // → 'stored-skills'\n */\nexport function extractResource(path: string): string | null {\n // Remove leading slash and split by segments\n const segments = path.replace(/^\\//, '').split('/');\n\n if (segments.length === 0) {\n return null;\n }\n\n const firstSegment = segments[0];\n\n // Handle special case: /stored/<family> → 'stored-<family>' (or mapped slug).\n // Uses exact segment match (not startsWith) so paths like /stored/skills-archive\n // don't incorrectly collapse into a stored family.\n if (firstSegment === 'stored' && segments[1]) {\n return STORED_RESOURCE_SEGMENTS[segments[1]] ?? null;\n }\n\n // Handle .well-known paths (A2A protocol)\n if (firstSegment === '.well-known') {\n return 'a2a';\n }\n\n return firstSegment || null;\n}\n\n/**\n * Determines the action based on HTTP method and path context.\n *\n * @param method - HTTP method (GET, POST, PUT, DELETE, etc.)\n * @param path - The route path for context\n * @returns The action string (read, write, execute, delete)\n */\nexport function deriveAction(method: string, path: string): string {\n const upperMethod = method.toUpperCase();\n\n // For POST requests, check if it's a publish, execute, or write operation.\n // Publish takes precedence over execute since these suffixes are distinct\n // version-lifecycle operations on stored resources. Restrict publish-suffix\n // matching to /stored/* paths so unrelated routes that happen to end with\n // /activate or /restore aren't accidentally classified as publish.\n if (upperMethod === 'POST') {\n // Restrict publish-suffix matching to /stored/* paths so unrelated routes\n // that happen to end with /activate or /restore aren't accidentally\n // classified as publish.\n if (path.startsWith('/stored/')) {\n const isPublishOperation = PUBLISH_PATTERNS.some(pattern => path.endsWith(pattern));\n if (isPublishOperation) {\n return 'publish';\n }\n }\n const isExecuteOperation = EXECUTE_PATTERNS.some(pattern => path.includes(pattern));\n return isExecuteOperation ? 'execute' : 'write';\n }\n\n return METHOD_TO_ACTION[upperMethod] || 'read';\n}\n\n/**\n * Derives a permission string from a route's path and method.\n *\n * Uses convention: `{resource}:{action}`\n *\n * @param route - The server route to derive permission for\n * @returns The derived permission string, or null if cannot be derived\n *\n * @example\n * derivePermission({ path: '/agents', method: 'GET' }) // → 'agents:read'\n * derivePermission({ path: '/agents/:id/generate', method: 'POST' }) // → 'agents:execute'\n * derivePermission({ path: '/workflows/:id', method: 'DELETE' }) // → 'workflows:delete'\n */\nexport function derivePermission(route: Pick<ServerRoute, 'path' | 'method'>): string | null {\n // Skip for ALL method (typically MCP transports)\n if (route.method === 'ALL') {\n return null;\n }\n\n const resource = extractResource(route.path);\n if (!resource) {\n return null;\n }\n\n const action = deriveAction(route.method, route.path);\n\n return `${resource}:${action}`;\n}\n\n/**\n * Gets the effective permission for a route.\n *\n * Priority:\n * 1. Explicit requiresPermission on the route (string or string[])\n * 2. Derived permission from path/method convention\n * 3. null (no permission required - should only happen for public routes)\n *\n * When the route specifies an array of permissions, the user needs ANY ONE\n * of them (logical OR). This is useful for routes that serve multiple\n * resource types.\n *\n * @param route - The server route\n * @returns The permission string, array of alternative permissions, or null\n */\nexport function getEffectivePermission(route: ServerRoute): string | string[] | null {\n // If route is explicitly public, no permission needed\n if (route.requiresAuth === false) {\n return null;\n }\n\n // Use explicit permission if set\n if (route.requiresPermission) {\n return route.requiresPermission;\n }\n\n // Derive permission from convention\n return derivePermission(route);\n}\n","import { GET_AGENT_CARD_ROUTE, AGENT_EXECUTION_ROUTE } from '../../handlers/a2a';\n\nexport const A2A_ROUTES = [GET_AGENT_CARD_ROUTE, AGENT_EXECUTION_ROUTE] as const;\n","import {\n LIST_AGENT_BUILDER_ACTIONS_ROUTE,\n GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,\n LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,\n GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,\n CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,\n STREAM_AGENT_BUILDER_ACTION_ROUTE,\n STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,\n START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,\n START_AGENT_BUILDER_ACTION_RUN_ROUTE,\n OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,\n OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,\n CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE,\n} from '../../handlers/agent-builder';\n\nexport const AGENT_BUILDER_ROUTES = [\n LIST_AGENT_BUILDER_ACTIONS_ROUTE,\n GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,\n LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,\n GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,\n CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,\n STREAM_AGENT_BUILDER_ACTION_ROUTE,\n STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,\n START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,\n START_AGENT_BUILDER_ACTION_RUN_ROUTE,\n OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,\n OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,\n CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE,\n] as const;\n","import {\n // Agent route objects\n LIST_AGENTS_ROUTE,\n GET_AGENT_BY_ID_ROUTE,\n CLONE_AGENT_ROUTE,\n GENERATE_AGENT_ROUTE,\n GENERATE_AGENT_VNEXT_ROUTE,\n STREAM_GENERATE_ROUTE,\n STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,\n OBSERVE_AGENT_STREAM_ROUTE,\n SEND_AGENT_MESSAGE_ROUTE,\n QUEUE_AGENT_MESSAGE_ROUTE,\n SEND_AGENT_SIGNAL_ROUTE,\n ABORT_AGENT_THREAD_ROUTE,\n SUBSCRIBE_AGENT_THREAD_ROUTE,\n GET_PROVIDERS_ROUTE,\n APPROVE_TOOL_CALL_ROUTE,\n SEND_TOOL_APPROVAL_ROUTE,\n DECLINE_TOOL_CALL_ROUTE,\n RESUME_STREAM_ROUTE,\n APPROVE_TOOL_CALL_GENERATE_ROUTE,\n DECLINE_TOOL_CALL_GENERATE_ROUTE,\n STREAM_NETWORK_ROUTE,\n UPDATE_AGENT_MODEL_ROUTE,\n RESET_AGENT_MODEL_ROUTE,\n REORDER_AGENT_MODEL_LIST_ROUTE,\n UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,\n ENHANCE_INSTRUCTIONS_ROUTE,\n STREAM_VNEXT_DEPRECATED_ROUTE,\n STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,\n STREAM_UI_MESSAGE_DEPRECATED_ROUTE,\n APPROVE_NETWORK_TOOL_CALL_ROUTE,\n DECLINE_NETWORK_TOOL_CALL_ROUTE,\n GET_AGENT_SKILL_ROUTE,\n STREAM_UNTIL_IDLE_GENERATE_ROUTE,\n RESUME_STREAM_UNTIL_IDLE_ROUTE,\n} from '../../handlers/agents';\nimport { GET_AGENT_TOOL_ROUTE, EXECUTE_AGENT_TOOL_ROUTE } from '../../handlers/tools';\nimport {\n GET_SPEAKERS_ROUTE,\n GET_SPEAKERS_DEPRECATED_ROUTE,\n GENERATE_SPEECH_ROUTE,\n GENERATE_SPEECH_DEPRECATED_ROUTE,\n TRANSCRIBE_SPEECH_ROUTE,\n TRANSCRIBE_SPEECH_DEPRECATED_ROUTE,\n GET_LISTENER_ROUTE,\n} from '../../handlers/voice';\nimport type { ServerRoute } from '.';\n\nexport const AGENTS_ROUTES: readonly ServerRoute[] = [\n // ============================================================================\n // Agent Core Routes\n // ============================================================================\n LIST_AGENTS_ROUTE,\n GET_PROVIDERS_ROUTE,\n GET_AGENT_BY_ID_ROUTE,\n CLONE_AGENT_ROUTE,\n\n // ============================================================================\n // Voice Routes\n // ============================================================================\n GET_SPEAKERS_ROUTE,\n GET_SPEAKERS_DEPRECATED_ROUTE,\n\n // ============================================================================\n // Agent Execution Routes\n // ============================================================================\n GENERATE_AGENT_ROUTE,\n GENERATE_AGENT_VNEXT_ROUTE,\n STREAM_GENERATE_ROUTE,\n STREAM_UNTIL_IDLE_GENERATE_ROUTE,\n STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,\n\n // ============================================================================\n // Resumable Stream Routes\n // ============================================================================\n OBSERVE_AGENT_STREAM_ROUTE,\n SEND_AGENT_MESSAGE_ROUTE,\n QUEUE_AGENT_MESSAGE_ROUTE,\n SEND_AGENT_SIGNAL_ROUTE,\n ABORT_AGENT_THREAD_ROUTE,\n SUBSCRIBE_AGENT_THREAD_ROUTE,\n\n // ============================================================================\n // Tool Routes\n // ============================================================================\n EXECUTE_AGENT_TOOL_ROUTE,\n APPROVE_TOOL_CALL_ROUTE,\n SEND_TOOL_APPROVAL_ROUTE,\n DECLINE_TOOL_CALL_ROUTE,\n RESUME_STREAM_ROUTE,\n APPROVE_TOOL_CALL_GENERATE_ROUTE,\n DECLINE_TOOL_CALL_GENERATE_ROUTE,\n APPROVE_NETWORK_TOOL_CALL_ROUTE,\n DECLINE_NETWORK_TOOL_CALL_ROUTE,\n RESUME_STREAM_UNTIL_IDLE_ROUTE,\n\n // ============================================================================\n // Network Routes\n // ============================================================================\n STREAM_NETWORK_ROUTE,\n\n // ============================================================================\n // Model Management Routes\n // ============================================================================\n UPDATE_AGENT_MODEL_ROUTE,\n RESET_AGENT_MODEL_ROUTE,\n REORDER_AGENT_MODEL_LIST_ROUTE,\n UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,\n\n // ============================================================================\n // Instruction Enhancement Routes\n // ============================================================================\n ENHANCE_INSTRUCTIONS_ROUTE,\n\n // ============================================================================\n // Agent Tool Routes\n // ============================================================================\n GET_AGENT_TOOL_ROUTE,\n\n // ============================================================================\n // Agent Skill Routes\n // ============================================================================\n GET_AGENT_SKILL_ROUTE,\n\n // ============================================================================\n // Voice/Speech Routes\n // ============================================================================\n GENERATE_SPEECH_ROUTE,\n GENERATE_SPEECH_DEPRECATED_ROUTE,\n TRANSCRIBE_SPEECH_ROUTE,\n TRANSCRIBE_SPEECH_DEPRECATED_ROUTE,\n GET_LISTENER_ROUTE,\n\n // ============================================================================\n // Deprecated Routes\n // ============================================================================\n STREAM_VNEXT_DEPRECATED_ROUTE,\n STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,\n STREAM_UI_MESSAGE_DEPRECATED_ROUTE,\n];\n\n/**\n * Type-level tuple preserving each agent route's specific schema types.\n * Used by ServerRoutes to build the type-level route map.\n */\nexport type AgentRoutes = readonly [\n typeof LIST_AGENTS_ROUTE,\n typeof GET_PROVIDERS_ROUTE,\n typeof GET_AGENT_BY_ID_ROUTE,\n typeof CLONE_AGENT_ROUTE,\n typeof GET_SPEAKERS_ROUTE,\n typeof GET_SPEAKERS_DEPRECATED_ROUTE,\n typeof GENERATE_AGENT_ROUTE,\n typeof GENERATE_AGENT_VNEXT_ROUTE,\n typeof STREAM_GENERATE_ROUTE,\n typeof STREAM_UNTIL_IDLE_GENERATE_ROUTE,\n typeof STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,\n typeof SEND_AGENT_MESSAGE_ROUTE,\n typeof QUEUE_AGENT_MESSAGE_ROUTE,\n typeof SEND_AGENT_SIGNAL_ROUTE,\n typeof ABORT_AGENT_THREAD_ROUTE,\n typeof SUBSCRIBE_AGENT_THREAD_ROUTE,\n typeof EXECUTE_AGENT_TOOL_ROUTE,\n typeof APPROVE_TOOL_CALL_ROUTE,\n typeof SEND_TOOL_APPROVAL_ROUTE,\n typeof DECLINE_TOOL_CALL_ROUTE,\n typeof RESUME_STREAM_ROUTE,\n typeof RESUME_STREAM_UNTIL_IDLE_ROUTE,\n typeof APPROVE_TOOL_CALL_GENERATE_ROUTE,\n typeof DECLINE_TOOL_CALL_GENERATE_ROUTE,\n typeof APPROVE_NETWORK_TOOL_CALL_ROUTE,\n typeof DECLINE_NETWORK_TOOL_CALL_ROUTE,\n typeof STREAM_NETWORK_ROUTE,\n typeof UPDATE_AGENT_MODEL_ROUTE,\n typeof RESET_AGENT_MODEL_ROUTE,\n typeof REORDER_AGENT_MODEL_LIST_ROUTE,\n typeof UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,\n typeof ENHANCE_INSTRUCTIONS_ROUTE,\n typeof GET_AGENT_TOOL_ROUTE,\n typeof GET_AGENT_SKILL_ROUTE,\n typeof GENERATE_SPEECH_ROUTE,\n typeof GENERATE_SPEECH_DEPRECATED_ROUTE,\n typeof TRANSCRIBE_SPEECH_ROUTE,\n typeof TRANSCRIBE_SPEECH_DEPRECATED_ROUTE,\n typeof GET_LISTENER_ROUTE,\n typeof STREAM_VNEXT_DEPRECATED_ROUTE,\n typeof STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,\n typeof STREAM_UI_MESSAGE_DEPRECATED_ROUTE,\n];\n","import {\n BACKGROUND_TASK_STREAM_ROUTE,\n GET_BACKGROUND_TASK_ROUTE,\n LIST_BACKGROUND_TASKS_ROUTE,\n} from '../../handlers/background-tasks';\nimport type { ServerRoute } from '.';\n\nexport const BACKGROUND_TASK_ROUTES: ServerRoute<any, any, any>[] = [\n BACKGROUND_TASK_STREAM_ROUTE,\n LIST_BACKGROUND_TASKS_ROUTE,\n GET_BACKGROUND_TASK_ROUTE,\n];\n","import {\n LIST_CHANNEL_PLATFORMS_ROUTE,\n LIST_CHANNEL_INSTALLATIONS_ROUTE,\n CONNECT_CHANNEL_ROUTE,\n DISCONNECT_CHANNEL_ROUTE,\n} from '../../handlers/channels';\n\nexport const CHANNELS_ROUTES = [\n LIST_CHANNEL_PLATFORMS_ROUTE,\n LIST_CHANNEL_INSTALLATIONS_ROUTE,\n CONNECT_CHANNEL_ROUTE,\n DISCONNECT_CHANNEL_ROUTE,\n] as const;\n","import {\n CREATE_CONVERSATION_ROUTE,\n DELETE_CONVERSATION_ROUTE,\n GET_CONVERSATION_ITEMS_ROUTE,\n GET_CONVERSATION_ROUTE,\n} from '../../handlers/conversations';\n\nexport const CONVERSATIONS_ROUTES = [\n CREATE_CONVERSATION_ROUTE,\n GET_CONVERSATION_ROUTE,\n GET_CONVERSATION_ITEMS_ROUTE,\n DELETE_CONVERSATION_ROUTE,\n] as const;\n","import {\n LIST_DATASETS_ROUTE,\n CREATE_DATASET_ROUTE,\n GET_DATASET_ROUTE,\n UPDATE_DATASET_ROUTE,\n DELETE_DATASET_ROUTE,\n LIST_ITEMS_ROUTE,\n ADD_ITEM_ROUTE,\n GET_ITEM_ROUTE,\n UPDATE_ITEM_ROUTE,\n DELETE_ITEM_ROUTE,\n LIST_ALL_EXPERIMENTS_ROUTE,\n EXPERIMENT_REVIEW_SUMMARY_ROUTE,\n LIST_EXPERIMENTS_ROUTE,\n TRIGGER_EXPERIMENT_ROUTE,\n GET_EXPERIMENT_ROUTE,\n LIST_EXPERIMENT_RESULTS_ROUTE,\n UPDATE_EXPERIMENT_RESULT_ROUTE,\n COMPARE_EXPERIMENTS_ROUTE,\n LIST_DATASET_VERSIONS_ROUTE,\n LIST_ITEM_VERSIONS_ROUTE,\n GET_ITEM_VERSION_ROUTE,\n BATCH_INSERT_ITEMS_ROUTE,\n BATCH_DELETE_ITEMS_ROUTE,\n GENERATE_ITEMS_ROUTE,\n CLUSTER_FAILURES_ROUTE,\n} from '../../handlers/datasets';\n\nexport const DATASETS_ROUTES = [\n // Dataset CRUD\n LIST_DATASETS_ROUTE,\n CREATE_DATASET_ROUTE,\n GET_DATASET_ROUTE,\n UPDATE_DATASET_ROUTE,\n DELETE_DATASET_ROUTE,\n // Item list and add\n LIST_ITEMS_ROUTE,\n ADD_ITEM_ROUTE,\n // Batch operations - MUST come before item-specific routes to avoid /items/batch matching /items/:itemId\n BATCH_INSERT_ITEMS_ROUTE,\n BATCH_DELETE_ITEMS_ROUTE,\n // Item-specific CRUD (uses :itemId param)\n GET_ITEM_ROUTE,\n UPDATE_ITEM_ROUTE,\n DELETE_ITEM_ROUTE,\n // Version operations\n LIST_DATASET_VERSIONS_ROUTE,\n LIST_ITEM_VERSIONS_ROUTE,\n GET_ITEM_VERSION_ROUTE,\n // All experiments (cross-dataset) - MUST come before dataset-scoped experiments\n LIST_ALL_EXPERIMENTS_ROUTE,\n // Experiment review summary (cross-dataset) - MUST come before dataset-scoped experiments\n EXPERIMENT_REVIEW_SUMMARY_ROUTE,\n // Experiment operations (dataset-scoped)\n LIST_EXPERIMENTS_ROUTE,\n TRIGGER_EXPERIMENT_ROUTE,\n GET_EXPERIMENT_ROUTE,\n LIST_EXPERIMENT_RESULTS_ROUTE,\n UPDATE_EXPERIMENT_RESULT_ROUTE,\n // Analytics\n COMPARE_EXPERIMENTS_ROUTE,\n // AI generation\n GENERATE_ITEMS_ROUTE,\n // Failure analysis\n CLUSTER_FAILURES_ROUTE,\n] as const;\n","import {\n BUILDER_REGISTRY_INSTALL_ROUTE,\n BUILDER_REGISTRY_POPULAR_ROUTE,\n BUILDER_REGISTRY_PREVIEW_ROUTE,\n BUILDER_REGISTRY_SEARCH_ROUTE,\n LIST_BUILDER_REGISTRIES_ROUTE,\n} from '../../handlers/builder-registry';\nimport {\n GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE,\n GET_EDITOR_BUILDER_SETTINGS_ROUTE,\n GET_INFRASTRUCTURE_STATUS_ROUTE,\n} from '../../handlers/editor-builder';\n\n/**\n * Editor Builder Routes\n *\n * Routes for agent builder settings, infrastructure status, and external\n * skill registries.\n */\nexport const EDITOR_BUILDER_ROUTES = [\n GET_EDITOR_BUILDER_SETTINGS_ROUTE,\n GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE,\n GET_INFRASTRUCTURE_STATUS_ROUTE,\n LIST_BUILDER_REGISTRIES_ROUTE,\n BUILDER_REGISTRY_SEARCH_ROUTE,\n BUILDER_REGISTRY_POPULAR_ROUTE,\n BUILDER_REGISTRY_PREVIEW_ROUTE,\n BUILDER_REGISTRY_INSTALL_ROUTE,\n] as const;\n","import {\n LIST_HARNESSES_ROUTE,\n CREATE_HARNESS_SESSION_ROUTE,\n GET_HARNESS_SESSION_STATE_ROUTE,\n STREAM_HARNESS_SESSION_ROUTE,\n SEND_HARNESS_MESSAGE_ROUTE,\n STEER_HARNESS_SESSION_ROUTE,\n ABORT_HARNESS_SESSION_ROUTE,\n HARNESS_TOOL_APPROVAL_ROUTE,\n HARNESS_TOOL_SUSPENSION_ROUTE,\n SWITCH_HARNESS_MODE_ROUTE,\n SWITCH_HARNESS_MODEL_ROUTE,\n SWITCH_HARNESS_THREAD_ROUTE,\n LIST_HARNESS_MODES_ROUTE,\n LIST_HARNESS_THREADS_ROUTE,\n SEND_HARNESS_NOTIFICATION_ROUTE,\n CREATE_HARNESS_THREAD_ROUTE,\n DELETE_HARNESS_THREAD_ROUTE,\n RENAME_HARNESS_THREAD_ROUTE,\n CLONE_HARNESS_THREAD_ROUTE,\n LIST_HARNESS_THREAD_MESSAGES_ROUTE,\n FOLLOW_UP_HARNESS_SESSION_ROUTE,\n LIST_HARNESS_MODELS_ROUTE,\n GET_HARNESS_WORKSPACE_STATUS_ROUTE,\n GET_HARNESS_OM_RECORD_ROUTE,\n SET_HARNESS_RESOURCE_ID_ROUTE,\n GET_HARNESS_RESOURCE_IDS_ROUTE,\n GET_HARNESS_GOAL_ROUTE,\n SET_HARNESS_GOAL_ROUTE,\n UPDATE_HARNESS_GOAL_ROUTE,\n CLEAR_HARNESS_GOAL_ROUTE,\n GET_HARNESS_PERMISSIONS_ROUTE,\n SET_HARNESS_CATEGORY_PERMISSION_ROUTE,\n SET_HARNESS_TOOL_PERMISSION_ROUTE,\n SET_HARNESS_SESSION_STATE_ROUTE,\n} from '../../handlers/harness';\nimport type { ServerRoute } from '.';\n\nexport const HARNESS_ROUTES: readonly ServerRoute[] = [\n LIST_HARNESSES_ROUTE,\n LIST_HARNESS_MODES_ROUTE,\n LIST_HARNESS_MODELS_ROUTE,\n CREATE_HARNESS_SESSION_ROUTE,\n GET_HARNESS_SESSION_STATE_ROUTE,\n LIST_HARNESS_THREADS_ROUTE,\n CREATE_HARNESS_THREAD_ROUTE,\n DELETE_HARNESS_THREAD_ROUTE,\n RENAME_HARNESS_THREAD_ROUTE,\n CLONE_HARNESS_THREAD_ROUTE,\n LIST_HARNESS_THREAD_MESSAGES_ROUTE,\n STREAM_HARNESS_SESSION_ROUTE,\n SEND_HARNESS_MESSAGE_ROUTE,\n STEER_HARNESS_SESSION_ROUTE,\n FOLLOW_UP_HARNESS_SESSION_ROUTE,\n ABORT_HARNESS_SESSION_ROUTE,\n HARNESS_TOOL_APPROVAL_ROUTE,\n HARNESS_TOOL_SUSPENSION_ROUTE,\n SWITCH_HARNESS_MODE_ROUTE,\n SWITCH_HARNESS_MODEL_ROUTE,\n SWITCH_HARNESS_THREAD_ROUTE,\n SEND_HARNESS_NOTIFICATION_ROUTE,\n GET_HARNESS_WORKSPACE_STATUS_ROUTE,\n GET_HARNESS_OM_RECORD_ROUTE,\n SET_HARNESS_RESOURCE_ID_ROUTE,\n GET_HARNESS_RESOURCE_IDS_ROUTE,\n GET_HARNESS_GOAL_ROUTE,\n SET_HARNESS_GOAL_ROUTE,\n UPDATE_HARNESS_GOAL_ROUTE,\n CLEAR_HARNESS_GOAL_ROUTE,\n GET_HARNESS_PERMISSIONS_ROUTE,\n SET_HARNESS_CATEGORY_PERMISSION_ROUTE,\n SET_HARNESS_TOOL_PERMISSION_ROUTE,\n SET_HARNESS_SESSION_STATE_ROUTE,\n];\n","/**\n * Legacy routes that are deprecated but still exist in deployer for backward compatibility.\n * These routes should not be used in new code and will be removed in a future version.\n */\n\nimport { GENERATE_LEGACY_ROUTE, STREAM_GENERATE_LEGACY_ROUTE } from '../../handlers/agents';\nimport { STREAM_LEGACY_WORKFLOW_ROUTE, OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE } from '../../handlers/workflows';\n\nexport const LEGACY_ROUTES = [\n // ============================================================================\n // Legacy Agent Routes\n // ============================================================================\n GENERATE_LEGACY_ROUTE,\n STREAM_GENERATE_LEGACY_ROUTE,\n\n // ============================================================================\n // Legacy Workflow Routes\n // ============================================================================\n STREAM_LEGACY_WORKFLOW_ROUTE,\n OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE,\n] as const;\n","import { LIST_LOG_TRANSPORTS_ROUTE, LIST_LOGS_ROUTE, LIST_LOGS_BY_RUN_ID_ROUTE } from '../../handlers/logs';\n\nexport const LOGS_ROUTES = [LIST_LOG_TRANSPORTS_ROUTE, LIST_LOGS_ROUTE, LIST_LOGS_BY_RUN_ID_ROUTE] as const;\n","import {\n LIST_MCP_SERVERS_ROUTE,\n GET_MCP_SERVER_DETAIL_ROUTE,\n LIST_MCP_SERVER_TOOLS_ROUTE,\n GET_MCP_SERVER_TOOL_DETAIL_ROUTE,\n EXECUTE_MCP_SERVER_TOOL_ROUTE,\n LIST_MCP_SERVER_RESOURCES_ROUTE,\n READ_MCP_SERVER_RESOURCE_ROUTE,\n MCP_HTTP_TRANSPORT_ROUTE,\n MCP_SSE_TRANSPORT_ROUTE,\n MCP_SSE_MESSAGES_ROUTE,\n} from '../../handlers/mcp';\n\n/**\n * MCP Routes\n *\n * Registry routes provide access to the MCP server registry and tools.\n * Transport routes handle the MCP protocol communication (HTTP and SSE).\n */\nexport const MCP_ROUTES = [\n // ============================================================================\n // MCP Server Registry Routes\n // ============================================================================\n LIST_MCP_SERVERS_ROUTE,\n GET_MCP_SERVER_DETAIL_ROUTE,\n\n // ============================================================================\n // MCP Server Tool Routes\n // ============================================================================\n LIST_MCP_SERVER_TOOLS_ROUTE,\n GET_MCP_SERVER_TOOL_DETAIL_ROUTE,\n EXECUTE_MCP_SERVER_TOOL_ROUTE,\n\n // ============================================================================\n // MCP Server Resource Routes\n // ============================================================================\n LIST_MCP_SERVER_RESOURCES_ROUTE,\n READ_MCP_SERVER_RESOURCE_ROUTE,\n\n // ============================================================================\n // MCP Transport Routes (handled by adapters)\n // ============================================================================\n MCP_HTTP_TRANSPORT_ROUTE,\n MCP_SSE_TRANSPORT_ROUTE,\n MCP_SSE_MESSAGES_ROUTE,\n] as const;\n","import {\n GET_MEMORY_STATUS_ROUTE,\n GET_MEMORY_CONFIG_ROUTE,\n GET_OBSERVATIONAL_MEMORY_ROUTE,\n AWAIT_BUFFER_STATUS_ROUTE,\n LIST_THREADS_ROUTE,\n GET_THREAD_BY_ID_ROUTE,\n LIST_MESSAGES_ROUTE,\n GET_WORKING_MEMORY_ROUTE,\n SAVE_MESSAGES_ROUTE,\n CREATE_THREAD_ROUTE,\n UPDATE_THREAD_ROUTE,\n DELETE_THREAD_ROUTE,\n CLONE_THREAD_ROUTE,\n UPDATE_WORKING_MEMORY_ROUTE,\n DELETE_MESSAGES_ROUTE,\n SEARCH_MEMORY_ROUTE,\n GET_MEMORY_STATUS_NETWORK_ROUTE,\n LIST_THREADS_NETWORK_ROUTE,\n GET_THREAD_BY_ID_NETWORK_ROUTE,\n LIST_MESSAGES_NETWORK_ROUTE,\n SAVE_MESSAGES_NETWORK_ROUTE,\n CREATE_THREAD_NETWORK_ROUTE,\n UPDATE_THREAD_NETWORK_ROUTE,\n DELETE_THREAD_NETWORK_ROUTE,\n DELETE_MESSAGES_NETWORK_ROUTE,\n} from '../../handlers/memory';\n\nexport const MEMORY_ROUTES = [\n GET_MEMORY_STATUS_ROUTE,\n GET_MEMORY_CONFIG_ROUTE,\n GET_OBSERVATIONAL_MEMORY_ROUTE,\n AWAIT_BUFFER_STATUS_ROUTE,\n LIST_THREADS_ROUTE,\n GET_THREAD_BY_ID_ROUTE,\n LIST_MESSAGES_ROUTE,\n GET_WORKING_MEMORY_ROUTE,\n SAVE_MESSAGES_ROUTE,\n CREATE_THREAD_ROUTE,\n UPDATE_THREAD_ROUTE,\n DELETE_THREAD_ROUTE,\n CLONE_THREAD_ROUTE,\n UPDATE_WORKING_MEMORY_ROUTE,\n DELETE_MESSAGES_ROUTE,\n SEARCH_MEMORY_ROUTE,\n GET_MEMORY_STATUS_NETWORK_ROUTE,\n LIST_THREADS_NETWORK_ROUTE,\n GET_THREAD_BY_ID_NETWORK_ROUTE,\n LIST_MESSAGES_NETWORK_ROUTE,\n SAVE_MESSAGES_NETWORK_ROUTE,\n CREATE_THREAD_NETWORK_ROUTE,\n UPDATE_THREAD_NETWORK_ROUTE,\n DELETE_THREAD_NETWORK_ROUTE,\n DELETE_MESSAGES_NETWORK_ROUTE,\n] as const;\n","import {\n LIST_TRACES_ROUTE,\n LIST_TRACES_LIGHT_ROUTE,\n LIST_BRANCHES_ROUTE,\n GET_BRANCH_ROUTE,\n GET_TRACE_ROUTE,\n GET_TRACE_LIGHT_ROUTE,\n GET_SPAN_ROUTE,\n GET_TRACE_TRAJECTORY_ROUTE,\n SCORE_TRACES_ROUTE,\n LIST_SCORES_BY_SPAN_ROUTE,\n} from '../../handlers/observability';\nimport {\n LIST_METRICS,\n LIST_LOGS,\n LIST_SCORES,\n CREATE_SCORE,\n GET_SCORE,\n GET_SCORE_AGGREGATE,\n GET_SCORE_BREAKDOWN,\n GET_SCORE_TIME_SERIES,\n GET_SCORE_PERCENTILES,\n LIST_FEEDBACK,\n CREATE_FEEDBACK,\n GET_FEEDBACK_AGGREGATE,\n GET_FEEDBACK_BREAKDOWN,\n GET_FEEDBACK_TIME_SERIES,\n GET_FEEDBACK_PERCENTILES,\n GET_METRIC_AGGREGATE,\n GET_METRIC_BREAKDOWN,\n GET_METRIC_TIME_SERIES,\n GET_METRIC_PERCENTILES,\n GET_METRIC_NAMES,\n GET_METRIC_LABEL_KEYS,\n GET_METRIC_LABEL_VALUES,\n GET_ENTITY_TYPES,\n GET_ENTITY_NAMES,\n GET_SERVICE_NAMES,\n GET_ENVIRONMENTS,\n GET_TAGS,\n} from '../../handlers/observability-new-endpoints';\n\nexport const OBSERVABILITY_ROUTES = [\n // Legacy\n LIST_TRACES_ROUTE,\n LIST_TRACES_LIGHT_ROUTE,\n LIST_BRANCHES_ROUTE,\n GET_BRANCH_ROUTE,\n GET_TRACE_ROUTE,\n GET_TRACE_LIGHT_ROUTE,\n GET_SPAN_ROUTE,\n GET_TRACE_TRAJECTORY_ROUTE,\n SCORE_TRACES_ROUTE,\n LIST_SCORES_BY_SPAN_ROUTE,\n // New observability routes\n LIST_METRICS,\n LIST_LOGS,\n LIST_SCORES,\n CREATE_SCORE,\n GET_SCORE,\n GET_SCORE_AGGREGATE,\n GET_SCORE_BREAKDOWN,\n GET_SCORE_TIME_SERIES,\n GET_SCORE_PERCENTILES,\n LIST_FEEDBACK,\n CREATE_FEEDBACK,\n GET_FEEDBACK_AGGREGATE,\n GET_FEEDBACK_BREAKDOWN,\n GET_FEEDBACK_TIME_SERIES,\n GET_FEEDBACK_PERCENTILES,\n GET_METRIC_AGGREGATE,\n GET_METRIC_BREAKDOWN,\n GET_METRIC_TIME_SERIES,\n GET_METRIC_PERCENTILES,\n GET_METRIC_NAMES,\n GET_METRIC_LABEL_KEYS,\n GET_METRIC_LABEL_VALUES,\n GET_ENTITY_TYPES,\n GET_ENTITY_NAMES,\n GET_SERVICE_NAMES,\n GET_ENVIRONMENTS,\n GET_TAGS,\n] as const;\n","import { LIST_PROCESSOR_PROVIDERS_ROUTE, GET_PROCESSOR_PROVIDER_ROUTE } from '../../handlers/processor-providers';\n\nexport const PROCESSOR_PROVIDER_ROUTES = [LIST_PROCESSOR_PROVIDERS_ROUTE, GET_PROCESSOR_PROVIDER_ROUTE] as const;\n","import { LIST_PROCESSORS_ROUTE, GET_PROCESSOR_BY_ID_ROUTE, EXECUTE_PROCESSOR_ROUTE } from '../../handlers/processors';\n\nexport const PROCESSORS_ROUTES = [LIST_PROCESSORS_ROUTE, GET_PROCESSOR_BY_ID_ROUTE, EXECUTE_PROCESSOR_ROUTE] as const;\n","import { CREATE_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE } from '../../handlers/responses';\n\nexport const RESPONSES_ROUTES = [CREATE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE] as const;\n","import {\n GET_SCHEDULE_ROUTE,\n LIST_SCHEDULES_ROUTE,\n LIST_SCHEDULE_TRIGGERS_ROUTE,\n PAUSE_SCHEDULE_ROUTE,\n RESUME_SCHEDULE_ROUTE,\n} from '../../handlers/schedules';\nimport type { ServerRoute } from '.';\n\nexport const SCHEDULES_ROUTES: ServerRoute<any, any, any>[] = [\n LIST_SCHEDULES_ROUTE,\n GET_SCHEDULE_ROUTE,\n LIST_SCHEDULE_TRIGGERS_ROUTE,\n PAUSE_SCHEDULE_ROUTE,\n RESUME_SCHEDULE_ROUTE,\n];\n","import {\n LIST_SCORERS_ROUTE,\n GET_SCORER_ROUTE,\n LIST_SCORES_BY_RUN_ID_ROUTE,\n LIST_SCORES_BY_SCORER_ID_ROUTE,\n LIST_SCORES_BY_ENTITY_ID_ROUTE,\n SAVE_SCORE_ROUTE,\n} from '../../handlers/scores';\n\nexport const SCORES_ROUTES = [\n LIST_SCORERS_ROUTE,\n GET_SCORER_ROUTE,\n LIST_SCORES_BY_RUN_ID_ROUTE,\n LIST_SCORES_BY_SCORER_ID_ROUTE,\n LIST_SCORES_BY_ENTITY_ID_ROUTE,\n SAVE_SCORE_ROUTE,\n] as const;\n","import {\n LIST_AGENT_VERSIONS_ROUTE,\n CREATE_AGENT_VERSION_ROUTE,\n GET_AGENT_VERSION_ROUTE,\n ACTIVATE_AGENT_VERSION_ROUTE,\n RESTORE_AGENT_VERSION_ROUTE,\n DELETE_AGENT_VERSION_ROUTE,\n COMPARE_AGENT_VERSIONS_ROUTE,\n} from '../../handlers/agent-versions';\nimport { FAVORITE_STORED_AGENT_ROUTE, UNFAVORITE_STORED_AGENT_ROUTE } from '../../handlers/stored-agent-favorites';\nimport {\n LIST_STORED_AGENTS_ROUTE,\n GET_STORED_AGENT_ROUTE,\n GET_STORED_AGENT_DEPENDENTS_ROUTE,\n CREATE_STORED_AGENT_ROUTE,\n UPDATE_STORED_AGENT_ROUTE,\n DELETE_STORED_AGENT_ROUTE,\n PREVIEW_INSTRUCTIONS_ROUTE,\n EXPORT_STORED_AGENT_ROUTE,\n OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE,\n} from '../../handlers/stored-agents';\nimport type { ServerRoute } from '.';\n\n/**\n * Routes for stored agents CRUD operations and version management.\n * These routes provide API access to agent configurations stored in the database,\n * enabling dynamic creation and management of agents via Mastra Studio.\n */\nexport const STORED_AGENTS_ROUTES: readonly ServerRoute[] = [\n // ============================================================================\n // Stored Agents CRUD Routes\n // IMPORTANT: Routes with literal paths (e.g., /preview-instructions) must come\n // BEFORE routes with path parameters (e.g., /:storedAgentId) to ensure correct matching.\n // ============================================================================\n LIST_STORED_AGENTS_ROUTE,\n PREVIEW_INSTRUCTIONS_ROUTE, // Must be before GET_STORED_AGENT_ROUTE\n GET_STORED_AGENT_DEPENDENTS_ROUTE, // Must be before GET_STORED_AGENT_ROUTE (longer literal)\n EXPORT_STORED_AGENT_ROUTE, // Must be before GET_STORED_AGENT_ROUTE\n OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE, // Must be before GET_STORED_AGENT_ROUTE\n GET_STORED_AGENT_ROUTE,\n CREATE_STORED_AGENT_ROUTE,\n UPDATE_STORED_AGENT_ROUTE,\n DELETE_STORED_AGENT_ROUTE,\n\n // ============================================================================\n // Agent Versions Routes\n // IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE\n // routes with path parameters (e.g., /:versionId) to ensure correct matching.\n // ============================================================================\n LIST_AGENT_VERSIONS_ROUTE,\n CREATE_AGENT_VERSION_ROUTE,\n COMPARE_AGENT_VERSIONS_ROUTE, // Must be before GET_AGENT_VERSION_ROUTE\n GET_AGENT_VERSION_ROUTE,\n ACTIVATE_AGENT_VERSION_ROUTE,\n RESTORE_AGENT_VERSION_ROUTE,\n DELETE_AGENT_VERSION_ROUTE,\n\n // ============================================================================\n // Favorites (EE)\n // ============================================================================\n FAVORITE_STORED_AGENT_ROUTE,\n UNFAVORITE_STORED_AGENT_ROUTE,\n];\n\n/**\n * Type-level tuple preserving each stored agent route's specific schema types.\n * Used by ServerRoutes to build the type-level route map.\n */\nexport type StoredAgentRoutes = readonly [\n typeof LIST_STORED_AGENTS_ROUTE,\n typeof PREVIEW_INSTRUCTIONS_ROUTE,\n typeof GET_STORED_AGENT_DEPENDENTS_ROUTE,\n typeof EXPORT_STORED_AGENT_ROUTE,\n typeof OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE,\n typeof GET_STORED_AGENT_ROUTE,\n typeof CREATE_STORED_AGENT_ROUTE,\n typeof UPDATE_STORED_AGENT_ROUTE,\n typeof DELETE_STORED_AGENT_ROUTE,\n typeof LIST_AGENT_VERSIONS_ROUTE,\n typeof CREATE_AGENT_VERSION_ROUTE,\n typeof COMPARE_AGENT_VERSIONS_ROUTE,\n typeof GET_AGENT_VERSION_ROUTE,\n typeof ACTIVATE_AGENT_VERSION_ROUTE,\n typeof RESTORE_AGENT_VERSION_ROUTE,\n typeof DELETE_AGENT_VERSION_ROUTE,\n typeof FAVORITE_STORED_AGENT_ROUTE,\n typeof UNFAVORITE_STORED_AGENT_ROUTE,\n];\n","import {\n LIST_MCP_CLIENT_VERSIONS_ROUTE,\n CREATE_MCP_CLIENT_VERSION_ROUTE,\n GET_MCP_CLIENT_VERSION_ROUTE,\n ACTIVATE_MCP_CLIENT_VERSION_ROUTE,\n RESTORE_MCP_CLIENT_VERSION_ROUTE,\n DELETE_MCP_CLIENT_VERSION_ROUTE,\n COMPARE_MCP_CLIENT_VERSIONS_ROUTE,\n} from '../../handlers/mcp-client-versions';\nimport {\n LIST_STORED_MCP_CLIENTS_ROUTE,\n GET_STORED_MCP_CLIENT_ROUTE,\n CREATE_STORED_MCP_CLIENT_ROUTE,\n UPDATE_STORED_MCP_CLIENT_ROUTE,\n DELETE_STORED_MCP_CLIENT_ROUTE,\n} from '../../handlers/stored-mcp-clients';\n\nexport const STORED_MCP_CLIENTS_ROUTES = [\n // Stored MCP Clients CRUD Routes\n LIST_STORED_MCP_CLIENTS_ROUTE,\n GET_STORED_MCP_CLIENT_ROUTE,\n CREATE_STORED_MCP_CLIENT_ROUTE,\n UPDATE_STORED_MCP_CLIENT_ROUTE,\n DELETE_STORED_MCP_CLIENT_ROUTE,\n\n // MCP Client Versions Routes\n // IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE\n // routes with path parameters (e.g., /:versionId) to ensure correct matching.\n LIST_MCP_CLIENT_VERSIONS_ROUTE,\n CREATE_MCP_CLIENT_VERSION_ROUTE,\n COMPARE_MCP_CLIENT_VERSIONS_ROUTE,\n GET_MCP_CLIENT_VERSION_ROUTE,\n ACTIVATE_MCP_CLIENT_VERSION_ROUTE,\n RESTORE_MCP_CLIENT_VERSION_ROUTE,\n DELETE_MCP_CLIENT_VERSION_ROUTE,\n] as const;\n","import {\n LIST_PROMPT_BLOCK_VERSIONS_ROUTE,\n CREATE_PROMPT_BLOCK_VERSION_ROUTE,\n GET_PROMPT_BLOCK_VERSION_ROUTE,\n ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE,\n RESTORE_PROMPT_BLOCK_VERSION_ROUTE,\n DELETE_PROMPT_BLOCK_VERSION_ROUTE,\n COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE,\n} from '../../handlers/prompt-block-versions';\nimport {\n LIST_STORED_PROMPT_BLOCKS_ROUTE,\n GET_STORED_PROMPT_BLOCK_ROUTE,\n CREATE_STORED_PROMPT_BLOCK_ROUTE,\n UPDATE_STORED_PROMPT_BLOCK_ROUTE,\n DELETE_STORED_PROMPT_BLOCK_ROUTE,\n} from '../../handlers/stored-prompt-blocks';\n\nexport const STORED_PROMPT_BLOCKS_ROUTES = [\n // Stored Prompt Blocks CRUD Routes\n LIST_STORED_PROMPT_BLOCKS_ROUTE,\n GET_STORED_PROMPT_BLOCK_ROUTE,\n CREATE_STORED_PROMPT_BLOCK_ROUTE,\n UPDATE_STORED_PROMPT_BLOCK_ROUTE,\n DELETE_STORED_PROMPT_BLOCK_ROUTE,\n\n // Prompt Block Versions Routes\n // IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE\n // routes with path parameters (e.g., /:versionId) to ensure correct matching.\n LIST_PROMPT_BLOCK_VERSIONS_ROUTE,\n CREATE_PROMPT_BLOCK_VERSION_ROUTE,\n COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE,\n GET_PROMPT_BLOCK_VERSION_ROUTE,\n ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE,\n RESTORE_PROMPT_BLOCK_VERSION_ROUTE,\n DELETE_PROMPT_BLOCK_VERSION_ROUTE,\n] as const;\n","import {\n LIST_SCORER_VERSIONS_ROUTE,\n CREATE_SCORER_VERSION_ROUTE,\n GET_SCORER_VERSION_ROUTE,\n ACTIVATE_SCORER_VERSION_ROUTE,\n RESTORE_SCORER_VERSION_ROUTE,\n DELETE_SCORER_VERSION_ROUTE,\n COMPARE_SCORER_VERSIONS_ROUTE,\n} from '../../handlers/scorer-versions';\nimport {\n LIST_STORED_SCORERS_ROUTE,\n GET_STORED_SCORER_ROUTE,\n CREATE_STORED_SCORER_ROUTE,\n UPDATE_STORED_SCORER_ROUTE,\n DELETE_STORED_SCORER_ROUTE,\n} from '../../handlers/stored-scorers';\n\nexport const STORED_SCORERS_ROUTES = [\n // Stored Scorers CRUD Routes\n LIST_STORED_SCORERS_ROUTE,\n GET_STORED_SCORER_ROUTE,\n CREATE_STORED_SCORER_ROUTE,\n UPDATE_STORED_SCORER_ROUTE,\n DELETE_STORED_SCORER_ROUTE,\n\n // Scorer Versions Routes\n // IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE\n // routes with path parameters (e.g., /:versionId) to ensure correct matching.\n LIST_SCORER_VERSIONS_ROUTE,\n CREATE_SCORER_VERSION_ROUTE,\n COMPARE_SCORER_VERSIONS_ROUTE,\n GET_SCORER_VERSION_ROUTE,\n ACTIVATE_SCORER_VERSION_ROUTE,\n RESTORE_SCORER_VERSION_ROUTE,\n DELETE_SCORER_VERSION_ROUTE,\n] as const;\n","import { FAVORITE_STORED_SKILL_ROUTE, UNFAVORITE_STORED_SKILL_ROUTE } from '../../handlers/stored-skill-favorites';\nimport {\n LIST_STORED_SKILLS_ROUTE,\n GET_STORED_SKILL_ROUTE,\n CREATE_STORED_SKILL_ROUTE,\n UPDATE_STORED_SKILL_ROUTE,\n DELETE_STORED_SKILL_ROUTE,\n PUBLISH_STORED_SKILL_ROUTE,\n} from '../../handlers/stored-skills';\n\nexport const STORED_SKILLS_ROUTES = [\n // Stored Skills CRUD Routes\n LIST_STORED_SKILLS_ROUTE,\n GET_STORED_SKILL_ROUTE,\n CREATE_STORED_SKILL_ROUTE,\n UPDATE_STORED_SKILL_ROUTE,\n DELETE_STORED_SKILL_ROUTE,\n // Publish\n PUBLISH_STORED_SKILL_ROUTE,\n // Favorites (EE)\n FAVORITE_STORED_SKILL_ROUTE,\n UNFAVORITE_STORED_SKILL_ROUTE,\n] as const;\n","import {\n LIST_STORED_WORKSPACES_ROUTE,\n GET_STORED_WORKSPACE_ROUTE,\n CREATE_STORED_WORKSPACE_ROUTE,\n UPDATE_STORED_WORKSPACE_ROUTE,\n DELETE_STORED_WORKSPACE_ROUTE,\n} from '../../handlers/stored-workspaces';\n\nexport const STORED_WORKSPACES_ROUTES = [\n // Stored Workspaces CRUD Routes\n LIST_STORED_WORKSPACES_ROUTE,\n GET_STORED_WORKSPACE_ROUTE,\n CREATE_STORED_WORKSPACE_ROUTE,\n UPDATE_STORED_WORKSPACE_ROUTE,\n DELETE_STORED_WORKSPACE_ROUTE,\n] as const;\n","import { GET_API_SCHEMA_ROUTE, GET_SYSTEM_PACKAGES_ROUTE } from '../../handlers/system';\n\n/**\n * System Routes\n *\n * Routes for system information and diagnostics.\n */\nexport const SYSTEM_ROUTES = [GET_SYSTEM_PACKAGES_ROUTE, GET_API_SCHEMA_ROUTE] as const;\n","import {\n AUTHORIZE_TOOL_PROVIDER_ROUTE,\n DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE,\n GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE,\n GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE,\n GET_TOOL_PROVIDER_HEALTH_ROUTE,\n GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE,\n LIST_TOOL_PROVIDERS_ROUTE,\n LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE,\n LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE,\n LIST_TOOL_PROVIDER_TOOLKITS_ROUTE,\n LIST_TOOL_PROVIDER_TOOLS_ROUTE,\n TOOL_PROVIDER_CONNECTION_STATUS_ROUTE,\n UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE,\n} from '../../handlers/tool-providers';\n\nexport const TOOL_PROVIDER_ROUTES = [\n LIST_TOOL_PROVIDERS_ROUTE,\n LIST_TOOL_PROVIDER_TOOLKITS_ROUTE,\n LIST_TOOL_PROVIDER_TOOLS_ROUTE,\n GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE,\n AUTHORIZE_TOOL_PROVIDER_ROUTE,\n GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE,\n TOOL_PROVIDER_CONNECTION_STATUS_ROUTE,\n LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE,\n LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE,\n DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE,\n UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE,\n GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE,\n GET_TOOL_PROVIDER_HEALTH_ROUTE,\n] as const;\n","import { LIST_TOOLS_ROUTE, GET_TOOL_BY_ID_ROUTE, EXECUTE_TOOL_ROUTE } from '../../handlers/tools';\n\nexport const TOOLS_ROUTES = [LIST_TOOLS_ROUTE, GET_TOOL_BY_ID_ROUTE, EXECUTE_TOOL_ROUTE] as const;\n","import {\n UPSERT_VECTORS_ROUTE,\n CREATE_INDEX_ROUTE,\n QUERY_VECTORS_ROUTE,\n LIST_INDEXES_ROUTE,\n DESCRIBE_INDEX_ROUTE,\n DELETE_INDEX_ROUTE,\n LIST_VECTORS_ROUTE,\n LIST_EMBEDDERS_ROUTE,\n} from '../../handlers/vector';\n\nexport const VECTORS_ROUTES = [\n UPSERT_VECTORS_ROUTE,\n CREATE_INDEX_ROUTE,\n QUERY_VECTORS_ROUTE,\n LIST_INDEXES_ROUTE,\n DESCRIBE_INDEX_ROUTE,\n DELETE_INDEX_ROUTE,\n LIST_VECTORS_ROUTE,\n LIST_EMBEDDERS_ROUTE,\n] as const;\n","import {\n LIST_WORKFLOWS_ROUTE,\n GET_WORKFLOW_BY_ID_ROUTE,\n LIST_WORKFLOW_RUNS_ROUTE,\n GET_WORKFLOW_RUN_BY_ID_ROUTE,\n CREATE_WORKFLOW_RUN_ROUTE,\n STREAM_WORKFLOW_ROUTE,\n RESUME_STREAM_WORKFLOW_ROUTE,\n START_ASYNC_WORKFLOW_ROUTE,\n START_WORKFLOW_RUN_ROUTE,\n OBSERVE_STREAM_WORKFLOW_ROUTE,\n RESUME_ASYNC_WORKFLOW_ROUTE,\n RESUME_NO_WAIT_WORKFLOW_ROUTE,\n RESUME_WORKFLOW_ROUTE,\n CANCEL_WORKFLOW_RUN_ROUTE,\n TIME_TRAVEL_WORKFLOW_ROUTE,\n TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,\n RESTART_WORKFLOW_ROUTE,\n RESTART_ASYNC_WORKFLOW_ROUTE,\n RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,\n RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,\n TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,\n DELETE_WORKFLOW_RUN_BY_ID_ROUTE,\n EXECUTE_WORKFLOW_STEP_ROUTE,\n RECEIVE_WORKFLOW_EVENT_ROUTE,\n} from '../../handlers/workflows';\n\nexport const WORKFLOWS_ROUTES = [\n LIST_WORKFLOWS_ROUTE,\n GET_WORKFLOW_BY_ID_ROUTE,\n LIST_WORKFLOW_RUNS_ROUTE,\n GET_WORKFLOW_RUN_BY_ID_ROUTE,\n DELETE_WORKFLOW_RUN_BY_ID_ROUTE,\n CREATE_WORKFLOW_RUN_ROUTE,\n STREAM_WORKFLOW_ROUTE,\n RESUME_STREAM_WORKFLOW_ROUTE,\n START_ASYNC_WORKFLOW_ROUTE,\n START_WORKFLOW_RUN_ROUTE,\n OBSERVE_STREAM_WORKFLOW_ROUTE,\n RESUME_ASYNC_WORKFLOW_ROUTE,\n RESUME_NO_WAIT_WORKFLOW_ROUTE,\n RESUME_WORKFLOW_ROUTE,\n CANCEL_WORKFLOW_RUN_ROUTE,\n TIME_TRAVEL_WORKFLOW_ROUTE,\n TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,\n TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,\n RESTART_WORKFLOW_ROUTE,\n RESTART_ASYNC_WORKFLOW_ROUTE,\n RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,\n RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,\n EXECUTE_WORKFLOW_STEP_ROUTE,\n RECEIVE_WORKFLOW_EVENT_ROUTE,\n] as const;\n","/**\n * Workspace Routes\n *\n * All routes for workspace operations under /api/workspaces/*\n */\n\nimport {\n LIST_WORKSPACES_ROUTE,\n GET_WORKSPACE_ROUTE,\n WORKSPACE_FS_ROUTES,\n WORKSPACE_SEARCH_ROUTES,\n WORKSPACE_SKILLS_ROUTES,\n WORKSPACE_SKILLS_SH_ROUTES,\n} from '../../handlers/workspace';\n\nexport const WORKSPACE_ROUTES = [\n // List all workspaces route (at /api/workspaces)\n LIST_WORKSPACES_ROUTE,\n\n // Get workspace route (at /api/workspaces/:workspaceId)\n GET_WORKSPACE_ROUTE,\n\n // Filesystem routes (at /api/workspaces/:workspaceId/fs/*)\n ...WORKSPACE_FS_ROUTES,\n\n // Search routes (at /api/workspaces/:workspaceId/search, /api/workspaces/:workspaceId/index)\n ...WORKSPACE_SEARCH_ROUTES,\n\n // Skills routes (search must come before parameterized routes)\n ...WORKSPACE_SKILLS_ROUTES,\n\n // skills.sh proxy routes (at /api/workspaces/:workspaceId/skills-sh/*)\n ...WORKSPACE_SKILLS_SH_ROUTES,\n] as const;\n","import type { Mastra } from '@mastra/core';\nimport type { ToolsInput } from '@mastra/core/agent';\nimport type { FGARouteConfig, MastraFGAPermissionInput } from '@mastra/core/auth/ee';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { ApiRoute, ValidationErrorHook } from '@mastra/core/server';\nimport type * as z from 'zod/v4';\nimport type { InMemoryTaskStore } from '../../a2a/store';\nimport type { OpenAPIRoute } from '../openapi-utils';\nimport { A2A_ROUTES } from './a2a';\nimport { AGENT_BUILDER_ROUTES } from './agent-builder';\nimport { AGENTS_ROUTES } from './agents';\nimport type { AgentRoutes } from './agents';\nimport { AUTH_ROUTES } from './auth';\nimport { BACKGROUND_TASK_ROUTES } from './background-tasks';\nimport { CHANNELS_ROUTES } from './channels';\nimport { CONVERSATIONS_ROUTES } from './conversations';\nimport { DATASETS_ROUTES } from './datasets';\nimport { EDITOR_BUILDER_ROUTES } from './editor-builder';\nimport { HARNESS_ROUTES } from './harness';\nimport { LEGACY_ROUTES } from './legacy';\nimport { LOGS_ROUTES } from './logs';\nimport { MCP_ROUTES } from './mcp';\nimport { MEMORY_ROUTES } from './memory';\nimport { OBSERVABILITY_ROUTES } from './observability';\nimport { PROCESSOR_PROVIDER_ROUTES } from './processor-providers';\nimport { PROCESSORS_ROUTES } from './processors';\nimport { RESPONSES_ROUTES } from './responses';\nimport { SCHEDULES_ROUTES } from './schedules';\nimport { SCORES_ROUTES } from './scorers';\nimport { STORED_AGENTS_ROUTES } from './stored-agents';\nimport type { StoredAgentRoutes } from './stored-agents';\nimport { STORED_MCP_CLIENTS_ROUTES } from './stored-mcp-clients';\nimport { STORED_PROMPT_BLOCKS_ROUTES } from './stored-prompt-blocks';\nimport { STORED_SCORERS_ROUTES } from './stored-scorers';\nimport { STORED_SKILLS_ROUTES } from './stored-skills';\nimport { STORED_WORKSPACES_ROUTES } from './stored-workspaces';\nimport type { MastraStreamReturn } from './stream-types';\nimport { SYSTEM_ROUTES } from './system';\nimport { TOOL_PROVIDER_ROUTES } from './tool-providers';\nimport { TOOLS_ROUTES } from './tools';\nimport { VECTORS_ROUTES } from './vectors';\nimport { WORKFLOWS_ROUTES } from './workflows';\nimport { WORKSPACE_ROUTES } from './workspace';\n\n/**\n * Server context fields that are available to route handlers.\n * These are injected by the server adapters (Express, Hono, etc.)\n * Fields other than `mastra` are optional to allow direct handler testing.\n */\nexport type ServerContext = {\n mastra: Mastra;\n requestContext: RequestContext;\n registeredTools?: ToolsInput;\n taskStore?: InMemoryTaskStore;\n abortSignal: AbortSignal;\n /** The route prefix configured for the server (e.g., '/api') */\n routePrefix?: string;\n /** The web-standard Request object for accessing headers, cookies, etc. */\n request?: Request;\n};\n\n/**\n * Utility type to infer parameters from Zod schemas.\n * Merges path params, query params, and body params into a single type.\n */\nexport type InferParams<\n TPathSchema extends z.ZodTypeAny | undefined,\n TQuerySchema extends z.ZodTypeAny | undefined,\n TBodySchema extends z.ZodTypeAny | undefined,\n> = (TPathSchema extends z.ZodTypeAny ? z.infer<TPathSchema> : {}) &\n (TQuerySchema extends z.ZodTypeAny ? z.infer<TQuerySchema> : {}) &\n (TBodySchema extends z.ZodTypeAny ? z.infer<TBodySchema> : {});\n\n/**\n * All supported response types for server routes.\n * - 'json': Standard JSON response\n * - 'stream': Streaming response (SSE or raw stream)\n * - 'datastream-response': Pre-built Response object for data streams\n * - 'mcp-http': MCP Streamable HTTP transport (handled by adapter)\n * - 'mcp-sse': MCP SSE transport (handled by adapter)\n */\nexport type ResponseType = 'stream' | 'json' | 'datastream-response' | 'mcp-http' | 'mcp-sse';\n\nexport type ServerRouteHandler<\n TParams = Record<string, unknown>,\n TResponse = unknown,\n TResponseType extends ResponseType = 'json',\n> = (\n params: TParams & ServerContext,\n) => Promise<\n TResponseType extends 'stream'\n ? MastraStreamReturn\n : TResponseType extends 'datastream-response'\n ? Response\n : TResponse\n>;\n\n/**\n * Phantom type for preserving Zod schema types on routes.\n * Not present at runtime — used only for type-level inference via RouteMap.\n */\nexport interface RouteSchemas<\n TPathSchema = unknown,\n TQuerySchema = unknown,\n TBodySchema = unknown,\n TResponseSchema = unknown,\n> {\n readonly pathParams: TPathSchema;\n readonly queryParams: TQuerySchema;\n readonly body: TBodySchema;\n readonly response: TResponseSchema;\n}\n\nexport type ServerRoute<\n TParams = Record<string, unknown>,\n TResponse = unknown,\n TResponseType extends ResponseType = ResponseType,\n TSchemas extends RouteSchemas = RouteSchemas,\n TMethod extends string = string,\n TPath extends string = string,\n> = Omit<ApiRoute, 'handler' | 'createHandler' | 'method' | 'path' | 'openapi'> & {\n method: TMethod;\n path: TPath;\n responseType: TResponseType;\n streamFormat?: 'sse' | 'stream'; // Only used when responseType is 'stream', defaults to 'stream'\n sseFlushOnConnect?: boolean;\n // Method signature is bivariant in params, allowing heterogeneous route arrays\n // while still preserving specific param types on individual routes.\n handler(params: TParams & ServerContext): ReturnType<ServerRouteHandler<TParams, TResponse, TResponseType>>;\n pathParamSchema?: z.ZodSchema;\n queryParamSchema?: z.ZodSchema;\n bodySchema?: z.ZodSchema;\n responseSchema?: z.ZodSchema;\n openapi?: OpenAPIRoute; // Auto-generated OpenAPI spec for this route\n maxBodySize?: number; // Optional route-specific body size limit in bytes\n deprecated?: boolean; // Flag for deprecated routes (used for route parity, skipped in tests)\n /**\n * Permission required to access this route (EE feature).\n * If set, the user must have this permission to access the route.\n * Uses the format: `resource:action` or `resource:action:resourceId`\n *\n * When an array is provided, the user needs ANY ONE of the listed permissions\n * (logical OR). This is useful for routes that serve multiple resource types,\n * e.g. a streaming endpoint used by both runtime and stored agents.\n *\n * @example\n * requiresPermission: MastraFGAPermissions.AGENTS_READ\n * requiresPermission: MastraFGAPermissions.WORKFLOWS_EXECUTE\n */\n requiresPermission?: MastraFGAPermissionInput | MastraFGAPermissionInput[];\n /**\n * FGA authorization config for this route (EE feature).\n * If set, the user must have the specified permission on the resource.\n *\n * @example\n * fga: { resourceType: 'agent', resourceIdParam: 'agentId', permission: MastraFGAPermissions.AGENTS_EXECUTE }\n */\n fga?: FGARouteConfig;\n onValidationError?: ValidationErrorHook;\n /** @internal Phantom type — not present at runtime. Used for type-level schema inference. */\n readonly __schemas?: TSchemas;\n};\n\nexport const SERVER_ROUTES: readonly ServerRoute[] = [\n ...AGENTS_ROUTES,\n ...AUTH_ROUTES,\n ...WORKFLOWS_ROUTES,\n ...TOOLS_ROUTES,\n ...PROCESSORS_ROUTES,\n ...RESPONSES_ROUTES,\n ...CONVERSATIONS_ROUTES,\n ...MEMORY_ROUTES,\n ...SCORES_ROUTES,\n ...OBSERVABILITY_ROUTES,\n ...LOGS_ROUTES,\n ...VECTORS_ROUTES,\n ...A2A_ROUTES,\n ...WORKSPACE_ROUTES,\n ...LEGACY_ROUTES,\n ...MCP_ROUTES,\n ...STORED_AGENTS_ROUTES,\n ...STORED_MCP_CLIENTS_ROUTES,\n ...STORED_PROMPT_BLOCKS_ROUTES,\n ...STORED_SCORERS_ROUTES,\n ...STORED_WORKSPACES_ROUTES,\n ...STORED_SKILLS_ROUTES,\n ...TOOL_PROVIDER_ROUTES,\n ...PROCESSOR_PROVIDER_ROUTES,\n ...SYSTEM_ROUTES,\n ...DATASETS_ROUTES,\n ...BACKGROUND_TASK_ROUTES,\n ...EDITOR_BUILDER_ROUTES,\n ...AGENT_BUILDER_ROUTES,\n ...SCHEDULES_ROUTES,\n ...CHANNELS_ROUTES,\n ...HARNESS_ROUTES,\n];\n\n/**\n * Union type of all individual route arrays.\n * Built from the per-domain `as const` tuples to preserve each route's specific schema types.\n */\nexport type ServerRoutes = readonly [\n ...AgentRoutes,\n ...typeof AUTH_ROUTES,\n ...typeof WORKFLOWS_ROUTES,\n ...typeof TOOLS_ROUTES,\n ...typeof PROCESSORS_ROUTES,\n ...typeof RESPONSES_ROUTES,\n ...typeof CONVERSATIONS_ROUTES,\n ...typeof MEMORY_ROUTES,\n ...typeof SCORES_ROUTES,\n ...typeof OBSERVABILITY_ROUTES,\n ...typeof LOGS_ROUTES,\n ...typeof VECTORS_ROUTES,\n ...typeof A2A_ROUTES,\n ...typeof AGENT_BUILDER_ROUTES,\n ...typeof WORKSPACE_ROUTES,\n ...typeof LEGACY_ROUTES,\n ...typeof MCP_ROUTES,\n ...StoredAgentRoutes,\n ...typeof STORED_MCP_CLIENTS_ROUTES,\n ...typeof STORED_PROMPT_BLOCKS_ROUTES,\n ...typeof STORED_SCORERS_ROUTES,\n ...typeof STORED_WORKSPACES_ROUTES,\n ...typeof STORED_SKILLS_ROUTES,\n ...typeof TOOL_PROVIDER_ROUTES,\n ...typeof PROCESSOR_PROVIDER_ROUTES,\n ...typeof SYSTEM_ROUTES,\n ...typeof DATASETS_ROUTES,\n ...typeof EDITOR_BUILDER_ROUTES,\n ...typeof CHANNELS_ROUTES,\n];\n\n// Export route builder and OpenAPI utilities\nexport { createRoute, createPublicRoute, pickParams, jsonQueryParam, wrapSchemaForQueryParams } from './route-builder';\nexport { generateOpenAPIDocument } from '../openapi-utils';\n\n// Export permission utilities\nexport { derivePermission, extractResource, deriveAction, getEffectivePermission } from './permissions';\n"]}
import { apiSchemaManifestResponseSchema, systemPackagesResponseSchema } from './chunk-ZA2G7XV3.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-BRC4XSFG.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-YB7LBQHE.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-BIYCTKL5.js.map
//# sourceMappingURL=chunk-BIYCTKL5.js.map
{"version":3,"sources":["../src/server/handlers/system.ts"],"names":[],"mappings":"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","file":"chunk-BIYCTKL5.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 chunkXOQEKMY2_cjs = require('./chunk-XOQEKMY2.cjs');
var chunkVNWPOCOT_cjs = require('./chunk-VNWPOCOT.cjs');
var chunk55YQXUOE_cjs = require('./chunk-55YQXUOE.cjs');
var chunkOT2JWWCT_cjs = require('./chunk-OT2JWWCT.cjs');
var chunkDULEYONH_cjs = require('./chunk-DULEYONH.cjs');
var chunkUD7JBYUI_cjs = require('./chunk-UD7JBYUI.cjs');
var chunkUZ43QCIA_cjs = require('./chunk-UZ43QCIA.cjs');
var chunkBTMYAVRX_cjs = require('./chunk-BTMYAVRX.cjs');
var chunkIRJJ2JJG_cjs = require('./chunk-IRJJ2JJG.cjs');
var chunkY3MYKCTO_cjs = require('./chunk-Y3MYKCTO.cjs');
var chunkUZINJHAF_cjs = require('./chunk-UZINJHAF.cjs');
var chunkRM4ITWAQ_cjs = require('./chunk-RM4ITWAQ.cjs');
var chunkCZ5EDK57_cjs = require('./chunk-CZ5EDK57.cjs');
var chunkONBABU5V_cjs = require('./chunk-ONBABU5V.cjs');
var chunk4NYA6U6Y_cjs = require('./chunk-4NYA6U6Y.cjs');
var chunkPJLW25AQ_cjs = require('./chunk-PJLW25AQ.cjs');
var chunkS2HKHYJ3_cjs = require('./chunk-S2HKHYJ3.cjs');
var chunkUSOMBGLF_cjs = require('./chunk-USOMBGLF.cjs');
var chunkJZJ3PP2H_cjs = require('./chunk-JZJ3PP2H.cjs');
var chunkZFRMJ23H_cjs = require('./chunk-ZFRMJ23H.cjs');
var chunk7FIDKZUG_cjs = require('./chunk-7FIDKZUG.cjs');
var chunkBTIK5TXF_cjs = require('./chunk-BTIK5TXF.cjs');
var chunkJGLVYJ3S_cjs = require('./chunk-JGLVYJ3S.cjs');
var chunkPMGFP7II_cjs = require('./chunk-PMGFP7II.cjs');
var chunkUSU23GYD_cjs = require('./chunk-USU23GYD.cjs');
var chunkUITLSJUW_cjs = require('./chunk-UITLSJUW.cjs');
var chunkM5DAKMVZ_cjs = require('./chunk-M5DAKMVZ.cjs');
var chunkJY2LHUT4_cjs = require('./chunk-JY2LHUT4.cjs');
var chunkIMHKYH3U_cjs = require('./chunk-IMHKYH3U.cjs');
var chunk6HRGFBAF_cjs = require('./chunk-6HRGFBAF.cjs');
var chunk7X243C5K_cjs = require('./chunk-7X243C5K.cjs');
var chunk7B36J5MV_cjs = require('./chunk-7B36J5MV.cjs');
var chunkGU4AEOGA_cjs = require('./chunk-GU4AEOGA.cjs');
var chunkDEK4ZGUR_cjs = require('./chunk-DEK4ZGUR.cjs');
var chunkK3FM6RLZ_cjs = require('./chunk-K3FM6RLZ.cjs');
var chunk4ZHHKMDQ_cjs = require('./chunk-4ZHHKMDQ.cjs');
var chunk7DKSWNOM_cjs = require('./chunk-7DKSWNOM.cjs');
var chunkL4V4FQDA_cjs = require('./chunk-L4V4FQDA.cjs');
var chunkU72IZ5BP_cjs = require('./chunk-U72IZ5BP.cjs');
var chunkT32FQPWH_cjs = require('./chunk-T32FQPWH.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 = [chunkK3FM6RLZ_cjs.GET_AGENT_CARD_ROUTE, chunkK3FM6RLZ_cjs.AGENT_EXECUTION_ROUTE];
// src/server/server-adapter/routes/agent-builder.ts
var AGENT_BUILDER_ROUTES = [
chunkL4V4FQDA_cjs.LIST_AGENT_BUILDER_ACTIONS_ROUTE,
chunkL4V4FQDA_cjs.GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,
chunkL4V4FQDA_cjs.LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,
chunkL4V4FQDA_cjs.GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,
chunkL4V4FQDA_cjs.CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,
chunkL4V4FQDA_cjs.STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.START_AGENT_BUILDER_ACTION_RUN_ROUTE,
chunkL4V4FQDA_cjs.OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.RESUME_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE
];
// src/server/server-adapter/routes/agents.ts
var AGENTS_ROUTES = [
// ============================================================================
// Agent Core Routes
// ============================================================================
chunk7DKSWNOM_cjs.LIST_AGENTS_ROUTE,
chunk7DKSWNOM_cjs.GET_PROVIDERS_ROUTE,
chunk7DKSWNOM_cjs.GET_AGENT_BY_ID_ROUTE,
chunk7DKSWNOM_cjs.CLONE_AGENT_ROUTE,
// ============================================================================
// Voice Routes
// ============================================================================
chunkPMGFP7II_cjs.GET_SPEAKERS_ROUTE,
chunkPMGFP7II_cjs.GET_SPEAKERS_DEPRECATED_ROUTE,
// ============================================================================
// Agent Execution Routes
// ============================================================================
chunk7DKSWNOM_cjs.GENERATE_AGENT_ROUTE,
chunk7DKSWNOM_cjs.GENERATE_AGENT_VNEXT_ROUTE,
chunk7DKSWNOM_cjs.STREAM_GENERATE_ROUTE,
chunk7DKSWNOM_cjs.STREAM_UNTIL_IDLE_GENERATE_ROUTE,
chunk7DKSWNOM_cjs.STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,
// ============================================================================
// Resumable Stream Routes
// ============================================================================
chunk7DKSWNOM_cjs.OBSERVE_AGENT_STREAM_ROUTE,
chunk7DKSWNOM_cjs.SEND_AGENT_MESSAGE_ROUTE,
chunk7DKSWNOM_cjs.QUEUE_AGENT_MESSAGE_ROUTE,
chunk7DKSWNOM_cjs.SEND_AGENT_SIGNAL_ROUTE,
chunk7DKSWNOM_cjs.ABORT_AGENT_THREAD_ROUTE,
chunk7DKSWNOM_cjs.SUBSCRIBE_AGENT_THREAD_ROUTE,
// ============================================================================
// Tool Routes
// ============================================================================
chunkUITLSJUW_cjs.EXECUTE_AGENT_TOOL_ROUTE,
chunk7DKSWNOM_cjs.APPROVE_TOOL_CALL_ROUTE,
chunk7DKSWNOM_cjs.SEND_TOOL_APPROVAL_ROUTE,
chunk7DKSWNOM_cjs.DECLINE_TOOL_CALL_ROUTE,
chunk7DKSWNOM_cjs.RESUME_STREAM_ROUTE,
chunk7DKSWNOM_cjs.APPROVE_TOOL_CALL_GENERATE_ROUTE,
chunk7DKSWNOM_cjs.DECLINE_TOOL_CALL_GENERATE_ROUTE,
chunk7DKSWNOM_cjs.APPROVE_NETWORK_TOOL_CALL_ROUTE,
chunk7DKSWNOM_cjs.DECLINE_NETWORK_TOOL_CALL_ROUTE,
chunk7DKSWNOM_cjs.RESUME_STREAM_UNTIL_IDLE_ROUTE,
// ============================================================================
// Network Routes
// ============================================================================
chunk7DKSWNOM_cjs.STREAM_NETWORK_ROUTE,
// ============================================================================
// Model Management Routes
// ============================================================================
chunk7DKSWNOM_cjs.UPDATE_AGENT_MODEL_ROUTE,
chunk7DKSWNOM_cjs.RESET_AGENT_MODEL_ROUTE,
chunk7DKSWNOM_cjs.REORDER_AGENT_MODEL_LIST_ROUTE,
chunk7DKSWNOM_cjs.UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,
// ============================================================================
// Instruction Enhancement Routes
// ============================================================================
chunk7DKSWNOM_cjs.ENHANCE_INSTRUCTIONS_ROUTE,
// ============================================================================
// Agent Tool Routes
// ============================================================================
chunkUITLSJUW_cjs.GET_AGENT_TOOL_ROUTE,
// ============================================================================
// Agent Skill Routes
// ============================================================================
chunk7DKSWNOM_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
// ============================================================================
chunk7DKSWNOM_cjs.STREAM_VNEXT_DEPRECATED_ROUTE,
chunk7DKSWNOM_cjs.STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,
chunk7DKSWNOM_cjs.STREAM_UI_MESSAGE_DEPRECATED_ROUTE
];
// src/server/server-adapter/routes/background-tasks.ts
var BACKGROUND_TASK_ROUTES = [
chunkZFRMJ23H_cjs.BACKGROUND_TASK_STREAM_ROUTE,
chunkZFRMJ23H_cjs.LIST_BACKGROUND_TASKS_ROUTE,
chunkZFRMJ23H_cjs.GET_BACKGROUND_TASK_ROUTE
];
// src/server/server-adapter/routes/channels.ts
var CHANNELS_ROUTES = [
chunkBTIK5TXF_cjs.LIST_CHANNEL_PLATFORMS_ROUTE,
chunkBTIK5TXF_cjs.LIST_CHANNEL_INSTALLATIONS_ROUTE,
chunkBTIK5TXF_cjs.CONNECT_CHANNEL_ROUTE,
chunkBTIK5TXF_cjs.DISCONNECT_CHANNEL_ROUTE
];
// src/server/server-adapter/routes/conversations.ts
var CONVERSATIONS_ROUTES = [
chunkDEK4ZGUR_cjs.CREATE_CONVERSATION_ROUTE,
chunkDEK4ZGUR_cjs.GET_CONVERSATION_ROUTE,
chunkDEK4ZGUR_cjs.GET_CONVERSATION_ITEMS_ROUTE,
chunkDEK4ZGUR_cjs.DELETE_CONVERSATION_ROUTE
];
// src/server/server-adapter/routes/datasets.ts
var DATASETS_ROUTES = [
// Dataset CRUD
chunkPJLW25AQ_cjs.LIST_DATASETS_ROUTE,
chunkPJLW25AQ_cjs.CREATE_DATASET_ROUTE,
chunkPJLW25AQ_cjs.GET_DATASET_ROUTE,
chunkPJLW25AQ_cjs.UPDATE_DATASET_ROUTE,
chunkPJLW25AQ_cjs.DELETE_DATASET_ROUTE,
// Item list and add
chunkPJLW25AQ_cjs.LIST_ITEMS_ROUTE,
chunkPJLW25AQ_cjs.ADD_ITEM_ROUTE,
// Batch operations - MUST come before item-specific routes to avoid /items/batch matching /items/:itemId
chunkPJLW25AQ_cjs.BATCH_INSERT_ITEMS_ROUTE,
chunkPJLW25AQ_cjs.BATCH_DELETE_ITEMS_ROUTE,
// Item-specific CRUD (uses :itemId param)
chunkPJLW25AQ_cjs.GET_ITEM_ROUTE,
chunkPJLW25AQ_cjs.UPDATE_ITEM_ROUTE,
chunkPJLW25AQ_cjs.DELETE_ITEM_ROUTE,
// Version operations
chunkPJLW25AQ_cjs.LIST_DATASET_VERSIONS_ROUTE,
chunkPJLW25AQ_cjs.LIST_ITEM_VERSIONS_ROUTE,
chunkPJLW25AQ_cjs.GET_ITEM_VERSION_ROUTE,
// All experiments (cross-dataset) - MUST come before dataset-scoped experiments
chunkPJLW25AQ_cjs.LIST_ALL_EXPERIMENTS_ROUTE,
// Experiment review summary (cross-dataset) - MUST come before dataset-scoped experiments
chunkPJLW25AQ_cjs.EXPERIMENT_REVIEW_SUMMARY_ROUTE,
// Experiment operations (dataset-scoped)
chunkPJLW25AQ_cjs.LIST_EXPERIMENTS_ROUTE,
chunkPJLW25AQ_cjs.TRIGGER_EXPERIMENT_ROUTE,
chunkPJLW25AQ_cjs.GET_EXPERIMENT_ROUTE,
chunkPJLW25AQ_cjs.LIST_EXPERIMENT_RESULTS_ROUTE,
chunkPJLW25AQ_cjs.UPDATE_EXPERIMENT_RESULT_ROUTE,
// Analytics
chunkPJLW25AQ_cjs.COMPARE_EXPERIMENTS_ROUTE,
// AI generation
chunkPJLW25AQ_cjs.GENERATE_ITEMS_ROUTE,
// Failure analysis
chunkPJLW25AQ_cjs.CLUSTER_FAILURES_ROUTE
];
// src/server/server-adapter/routes/editor-builder.ts
var EDITOR_BUILDER_ROUTES = [
chunkS2HKHYJ3_cjs.GET_EDITOR_BUILDER_SETTINGS_ROUTE,
chunkS2HKHYJ3_cjs.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE,
chunkS2HKHYJ3_cjs.GET_INFRASTRUCTURE_STATUS_ROUTE,
chunk7FIDKZUG_cjs.LIST_BUILDER_REGISTRIES_ROUTE,
chunk7FIDKZUG_cjs.BUILDER_REGISTRY_SEARCH_ROUTE,
chunk7FIDKZUG_cjs.BUILDER_REGISTRY_POPULAR_ROUTE,
chunk7FIDKZUG_cjs.BUILDER_REGISTRY_PREVIEW_ROUTE,
chunk7FIDKZUG_cjs.BUILDER_REGISTRY_INSTALL_ROUTE
];
// src/server/server-adapter/routes/harness.ts
var HARNESS_ROUTES = [
chunkUSOMBGLF_cjs.LIST_HARNESSES_ROUTE,
chunkUSOMBGLF_cjs.LIST_HARNESS_MODES_ROUTE,
chunkUSOMBGLF_cjs.LIST_HARNESS_MODELS_ROUTE,
chunkUSOMBGLF_cjs.CREATE_HARNESS_SESSION_ROUTE,
chunkUSOMBGLF_cjs.GET_HARNESS_SESSION_STATE_ROUTE,
chunkUSOMBGLF_cjs.LIST_HARNESS_THREADS_ROUTE,
chunkUSOMBGLF_cjs.CREATE_HARNESS_THREAD_ROUTE,
chunkUSOMBGLF_cjs.DELETE_HARNESS_THREAD_ROUTE,
chunkUSOMBGLF_cjs.RENAME_HARNESS_THREAD_ROUTE,
chunkUSOMBGLF_cjs.CLONE_HARNESS_THREAD_ROUTE,
chunkUSOMBGLF_cjs.LIST_HARNESS_THREAD_MESSAGES_ROUTE,
chunkUSOMBGLF_cjs.STREAM_HARNESS_SESSION_ROUTE,
chunkUSOMBGLF_cjs.SEND_HARNESS_MESSAGE_ROUTE,
chunkUSOMBGLF_cjs.STEER_HARNESS_SESSION_ROUTE,
chunkUSOMBGLF_cjs.FOLLOW_UP_HARNESS_SESSION_ROUTE,
chunkUSOMBGLF_cjs.ABORT_HARNESS_SESSION_ROUTE,
chunkUSOMBGLF_cjs.HARNESS_TOOL_APPROVAL_ROUTE,
chunkUSOMBGLF_cjs.HARNESS_TOOL_SUSPENSION_ROUTE,
chunkUSOMBGLF_cjs.SWITCH_HARNESS_MODE_ROUTE,
chunkUSOMBGLF_cjs.SWITCH_HARNESS_MODEL_ROUTE,
chunkUSOMBGLF_cjs.SWITCH_HARNESS_THREAD_ROUTE,
chunkUSOMBGLF_cjs.SEND_HARNESS_NOTIFICATION_ROUTE,
chunkUSOMBGLF_cjs.GET_HARNESS_WORKSPACE_STATUS_ROUTE,
chunkUSOMBGLF_cjs.GET_HARNESS_OM_RECORD_ROUTE,
chunkUSOMBGLF_cjs.SET_HARNESS_RESOURCE_ID_ROUTE,
chunkUSOMBGLF_cjs.GET_HARNESS_RESOURCE_IDS_ROUTE,
chunkUSOMBGLF_cjs.GET_HARNESS_GOAL_ROUTE,
chunkUSOMBGLF_cjs.SET_HARNESS_GOAL_ROUTE,
chunkUSOMBGLF_cjs.UPDATE_HARNESS_GOAL_ROUTE,
chunkUSOMBGLF_cjs.CLEAR_HARNESS_GOAL_ROUTE,
chunkUSOMBGLF_cjs.GET_HARNESS_PERMISSIONS_ROUTE,
chunkUSOMBGLF_cjs.SET_HARNESS_CATEGORY_PERMISSION_ROUTE,
chunkUSOMBGLF_cjs.SET_HARNESS_TOOL_PERMISSION_ROUTE,
chunkUSOMBGLF_cjs.SET_HARNESS_SESSION_STATE_ROUTE
];
// src/server/server-adapter/routes/legacy.ts
var LEGACY_ROUTES = [
// ============================================================================
// Legacy Agent Routes
// ============================================================================
chunk7DKSWNOM_cjs.GENERATE_LEGACY_ROUTE,
chunk7DKSWNOM_cjs.STREAM_GENERATE_LEGACY_ROUTE,
// ============================================================================
// Legacy Workflow Routes
// ============================================================================
chunkU72IZ5BP_cjs.STREAM_LEGACY_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE
];
// src/server/server-adapter/routes/logs.ts
var LOGS_ROUTES = [chunkGU4AEOGA_cjs.LIST_LOG_TRANSPORTS_ROUTE, chunkGU4AEOGA_cjs.LIST_LOGS_ROUTE, chunkGU4AEOGA_cjs.LIST_LOGS_BY_RUN_ID_ROUTE];
// src/server/server-adapter/routes/mcp.ts
var MCP_ROUTES = [
// ============================================================================
// MCP Server Registry Routes
// ============================================================================
chunkIMHKYH3U_cjs.LIST_MCP_SERVERS_ROUTE,
chunkIMHKYH3U_cjs.GET_MCP_SERVER_DETAIL_ROUTE,
// ============================================================================
// MCP Server Tool Routes
// ============================================================================
chunkIMHKYH3U_cjs.LIST_MCP_SERVER_TOOLS_ROUTE,
chunkIMHKYH3U_cjs.GET_MCP_SERVER_TOOL_DETAIL_ROUTE,
chunkIMHKYH3U_cjs.EXECUTE_MCP_SERVER_TOOL_ROUTE,
// ============================================================================
// MCP Server Resource Routes
// ============================================================================
chunkIMHKYH3U_cjs.LIST_MCP_SERVER_RESOURCES_ROUTE,
chunkIMHKYH3U_cjs.READ_MCP_SERVER_RESOURCE_ROUTE,
// ============================================================================
// MCP Transport Routes (handled by adapters)
// ============================================================================
chunkIMHKYH3U_cjs.MCP_HTTP_TRANSPORT_ROUTE,
chunkIMHKYH3U_cjs.MCP_SSE_TRANSPORT_ROUTE,
chunkIMHKYH3U_cjs.MCP_SSE_MESSAGES_ROUTE
];
// src/server/server-adapter/routes/memory.ts
var MEMORY_ROUTES = [
chunk6HRGFBAF_cjs.GET_MEMORY_STATUS_ROUTE,
chunk6HRGFBAF_cjs.GET_MEMORY_CONFIG_ROUTE,
chunk6HRGFBAF_cjs.GET_OBSERVATIONAL_MEMORY_ROUTE,
chunk6HRGFBAF_cjs.AWAIT_BUFFER_STATUS_ROUTE,
chunk6HRGFBAF_cjs.LIST_THREADS_ROUTE,
chunk6HRGFBAF_cjs.GET_THREAD_BY_ID_ROUTE,
chunk6HRGFBAF_cjs.LIST_MESSAGES_ROUTE,
chunk6HRGFBAF_cjs.GET_WORKING_MEMORY_ROUTE,
chunk6HRGFBAF_cjs.SAVE_MESSAGES_ROUTE,
chunk6HRGFBAF_cjs.CREATE_THREAD_ROUTE,
chunk6HRGFBAF_cjs.UPDATE_THREAD_ROUTE,
chunk6HRGFBAF_cjs.DELETE_THREAD_ROUTE,
chunk6HRGFBAF_cjs.CLONE_THREAD_ROUTE,
chunk6HRGFBAF_cjs.UPDATE_WORKING_MEMORY_ROUTE,
chunk6HRGFBAF_cjs.DELETE_MESSAGES_ROUTE,
chunk6HRGFBAF_cjs.SEARCH_MEMORY_ROUTE,
chunk6HRGFBAF_cjs.GET_MEMORY_STATUS_NETWORK_ROUTE,
chunk6HRGFBAF_cjs.LIST_THREADS_NETWORK_ROUTE,
chunk6HRGFBAF_cjs.GET_THREAD_BY_ID_NETWORK_ROUTE,
chunk6HRGFBAF_cjs.LIST_MESSAGES_NETWORK_ROUTE,
chunk6HRGFBAF_cjs.SAVE_MESSAGES_NETWORK_ROUTE,
chunk6HRGFBAF_cjs.CREATE_THREAD_NETWORK_ROUTE,
chunk6HRGFBAF_cjs.UPDATE_THREAD_NETWORK_ROUTE,
chunk6HRGFBAF_cjs.DELETE_THREAD_NETWORK_ROUTE,
chunk6HRGFBAF_cjs.DELETE_MESSAGES_NETWORK_ROUTE
];
// src/server/server-adapter/routes/observability.ts
var OBSERVABILITY_ROUTES = [
// Legacy
chunk7X243C5K_cjs.LIST_TRACES_ROUTE,
chunk7X243C5K_cjs.LIST_TRACES_LIGHT_ROUTE,
chunk7X243C5K_cjs.LIST_BRANCHES_ROUTE,
chunk7X243C5K_cjs.GET_BRANCH_ROUTE,
chunk7X243C5K_cjs.GET_TRACE_ROUTE,
chunk7X243C5K_cjs.GET_TRACE_LIGHT_ROUTE,
chunk7X243C5K_cjs.GET_SPAN_ROUTE,
chunk7X243C5K_cjs.GET_TRACE_TRAJECTORY_ROUTE,
chunk7X243C5K_cjs.SCORE_TRACES_ROUTE,
chunk7X243C5K_cjs.LIST_SCORES_BY_SPAN_ROUTE,
// New observability routes
chunk7B36J5MV_cjs.LIST_METRICS,
chunk7B36J5MV_cjs.LIST_LOGS,
chunk7B36J5MV_cjs.LIST_SCORES,
chunk7B36J5MV_cjs.CREATE_SCORE,
chunk7B36J5MV_cjs.GET_SCORE,
chunk7B36J5MV_cjs.GET_SCORE_AGGREGATE,
chunk7B36J5MV_cjs.GET_SCORE_BREAKDOWN,
chunk7B36J5MV_cjs.GET_SCORE_TIME_SERIES,
chunk7B36J5MV_cjs.GET_SCORE_PERCENTILES,
chunk7B36J5MV_cjs.LIST_FEEDBACK,
chunk7B36J5MV_cjs.CREATE_FEEDBACK,
chunk7B36J5MV_cjs.GET_FEEDBACK_AGGREGATE,
chunk7B36J5MV_cjs.GET_FEEDBACK_BREAKDOWN,
chunk7B36J5MV_cjs.GET_FEEDBACK_TIME_SERIES,
chunk7B36J5MV_cjs.GET_FEEDBACK_PERCENTILES,
chunk7B36J5MV_cjs.GET_METRIC_AGGREGATE,
chunk7B36J5MV_cjs.GET_METRIC_BREAKDOWN,
chunk7B36J5MV_cjs.GET_METRIC_TIME_SERIES,
chunk7B36J5MV_cjs.GET_METRIC_PERCENTILES,
chunk7B36J5MV_cjs.GET_METRIC_NAMES,
chunk7B36J5MV_cjs.GET_METRIC_LABEL_KEYS,
chunk7B36J5MV_cjs.GET_METRIC_LABEL_VALUES,
chunk7B36J5MV_cjs.GET_ENTITY_TYPES,
chunk7B36J5MV_cjs.GET_ENTITY_NAMES,
chunk7B36J5MV_cjs.GET_SERVICE_NAMES,
chunk7B36J5MV_cjs.GET_ENVIRONMENTS,
chunk7B36J5MV_cjs.GET_TAGS
];
// src/server/server-adapter/routes/processor-providers.ts
var PROCESSOR_PROVIDER_ROUTES = [chunk4NYA6U6Y_cjs.LIST_PROCESSOR_PROVIDERS_ROUTE, chunk4NYA6U6Y_cjs.GET_PROCESSOR_PROVIDER_ROUTE];
// src/server/server-adapter/routes/processors.ts
var PROCESSORS_ROUTES = [chunkUZINJHAF_cjs.LIST_PROCESSORS_ROUTE, chunkUZINJHAF_cjs.GET_PROCESSOR_BY_ID_ROUTE, chunkUZINJHAF_cjs.EXECUTE_PROCESSOR_ROUTE];
// src/server/server-adapter/routes/responses.ts
var RESPONSES_ROUTES = [chunkJY2LHUT4_cjs.CREATE_RESPONSE_ROUTE, chunkJY2LHUT4_cjs.GET_RESPONSE_ROUTE, chunkJY2LHUT4_cjs.DELETE_RESPONSE_ROUTE];
// src/server/server-adapter/routes/schedules.ts
var SCHEDULES_ROUTES = [
chunkCZ5EDK57_cjs.LIST_SCHEDULES_ROUTE,
chunkCZ5EDK57_cjs.GET_SCHEDULE_ROUTE,
chunkCZ5EDK57_cjs.LIST_SCHEDULE_TRIGGERS_ROUTE,
chunkCZ5EDK57_cjs.PAUSE_SCHEDULE_ROUTE,
chunkCZ5EDK57_cjs.RESUME_SCHEDULE_ROUTE
];
// src/server/server-adapter/routes/scorers.ts
var SCORES_ROUTES = [
chunkM5DAKMVZ_cjs.LIST_SCORERS_ROUTE,
chunkM5DAKMVZ_cjs.GET_SCORER_ROUTE,
chunkM5DAKMVZ_cjs.LIST_SCORES_BY_RUN_ID_ROUTE,
chunkM5DAKMVZ_cjs.LIST_SCORES_BY_SCORER_ID_ROUTE,
chunkM5DAKMVZ_cjs.LIST_SCORES_BY_ENTITY_ID_ROUTE,
chunkM5DAKMVZ_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.
// ============================================================================
chunkUD7JBYUI_cjs.LIST_STORED_AGENTS_ROUTE,
chunkUD7JBYUI_cjs.PREVIEW_INSTRUCTIONS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkUD7JBYUI_cjs.GET_STORED_AGENT_DEPENDENTS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE (longer literal)
chunkUD7JBYUI_cjs.EXPORT_STORED_AGENT_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkUD7JBYUI_cjs.OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkUD7JBYUI_cjs.GET_STORED_AGENT_ROUTE,
chunkUD7JBYUI_cjs.CREATE_STORED_AGENT_ROUTE,
chunkUD7JBYUI_cjs.UPDATE_STORED_AGENT_ROUTE,
chunkUD7JBYUI_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.
// ============================================================================
chunkT32FQPWH_cjs.LIST_AGENT_VERSIONS_ROUTE,
chunkT32FQPWH_cjs.CREATE_AGENT_VERSION_ROUTE,
chunkT32FQPWH_cjs.COMPARE_AGENT_VERSIONS_ROUTE,
// Must be before GET_AGENT_VERSION_ROUTE
chunkT32FQPWH_cjs.GET_AGENT_VERSION_ROUTE,
chunkT32FQPWH_cjs.ACTIVATE_AGENT_VERSION_ROUTE,
chunkT32FQPWH_cjs.RESTORE_AGENT_VERSION_ROUTE,
chunkT32FQPWH_cjs.DELETE_AGENT_VERSION_ROUTE,
// ============================================================================
// Favorites (EE)
// ============================================================================
chunkDULEYONH_cjs.FAVORITE_STORED_AGENT_ROUTE,
chunkDULEYONH_cjs.UNFAVORITE_STORED_AGENT_ROUTE
];
// src/server/server-adapter/routes/stored-mcp-clients.ts
var STORED_MCP_CLIENTS_ROUTES = [
// Stored MCP Clients CRUD Routes
chunkUZ43QCIA_cjs.LIST_STORED_MCP_CLIENTS_ROUTE,
chunkUZ43QCIA_cjs.GET_STORED_MCP_CLIENT_ROUTE,
chunkUZ43QCIA_cjs.CREATE_STORED_MCP_CLIENT_ROUTE,
chunkUZ43QCIA_cjs.UPDATE_STORED_MCP_CLIENT_ROUTE,
chunkUZ43QCIA_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.
chunkJZJ3PP2H_cjs.LIST_MCP_CLIENT_VERSIONS_ROUTE,
chunkJZJ3PP2H_cjs.CREATE_MCP_CLIENT_VERSION_ROUTE,
chunkJZJ3PP2H_cjs.COMPARE_MCP_CLIENT_VERSIONS_ROUTE,
chunkJZJ3PP2H_cjs.GET_MCP_CLIENT_VERSION_ROUTE,
chunkJZJ3PP2H_cjs.ACTIVATE_MCP_CLIENT_VERSION_ROUTE,
chunkJZJ3PP2H_cjs.RESTORE_MCP_CLIENT_VERSION_ROUTE,
chunkJZJ3PP2H_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
chunkBTMYAVRX_cjs.LIST_STORED_PROMPT_BLOCKS_ROUTE,
chunkBTMYAVRX_cjs.GET_STORED_PROMPT_BLOCK_ROUTE,
chunkBTMYAVRX_cjs.CREATE_STORED_PROMPT_BLOCK_ROUTE,
chunkBTMYAVRX_cjs.UPDATE_STORED_PROMPT_BLOCK_ROUTE,
chunkBTMYAVRX_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.
chunkRM4ITWAQ_cjs.LIST_PROMPT_BLOCK_VERSIONS_ROUTE,
chunkRM4ITWAQ_cjs.CREATE_PROMPT_BLOCK_VERSION_ROUTE,
chunkRM4ITWAQ_cjs.COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE,
chunkRM4ITWAQ_cjs.GET_PROMPT_BLOCK_VERSION_ROUTE,
chunkRM4ITWAQ_cjs.ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE,
chunkRM4ITWAQ_cjs.RESTORE_PROMPT_BLOCK_VERSION_ROUTE,
chunkRM4ITWAQ_cjs.DELETE_PROMPT_BLOCK_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-scorers.ts
var STORED_SCORERS_ROUTES = [
// Stored Scorers CRUD Routes
chunkIRJJ2JJG_cjs.LIST_STORED_SCORERS_ROUTE,
chunkIRJJ2JJG_cjs.GET_STORED_SCORER_ROUTE,
chunkIRJJ2JJG_cjs.CREATE_STORED_SCORER_ROUTE,
chunkIRJJ2JJG_cjs.UPDATE_STORED_SCORER_ROUTE,
chunkIRJJ2JJG_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.
chunkONBABU5V_cjs.LIST_SCORER_VERSIONS_ROUTE,
chunkONBABU5V_cjs.CREATE_SCORER_VERSION_ROUTE,
chunkONBABU5V_cjs.COMPARE_SCORER_VERSIONS_ROUTE,
chunkONBABU5V_cjs.GET_SCORER_VERSION_ROUTE,
chunkONBABU5V_cjs.ACTIVATE_SCORER_VERSION_ROUTE,
chunkONBABU5V_cjs.RESTORE_SCORER_VERSION_ROUTE,
chunkONBABU5V_cjs.DELETE_SCORER_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-skills.ts
var STORED_SKILLS_ROUTES = [
// Stored Skills CRUD Routes
chunkXOQEKMY2_cjs.LIST_STORED_SKILLS_ROUTE,
chunkXOQEKMY2_cjs.GET_STORED_SKILL_ROUTE,
chunkXOQEKMY2_cjs.CREATE_STORED_SKILL_ROUTE,
chunkXOQEKMY2_cjs.UPDATE_STORED_SKILL_ROUTE,
chunkXOQEKMY2_cjs.DELETE_STORED_SKILL_ROUTE,
// Publish
chunkXOQEKMY2_cjs.PUBLISH_STORED_SKILL_ROUTE,
// Favorites (EE)
chunkY3MYKCTO_cjs.FAVORITE_STORED_SKILL_ROUTE,
chunkY3MYKCTO_cjs.UNFAVORITE_STORED_SKILL_ROUTE
];
// src/server/server-adapter/routes/stored-workspaces.ts
var STORED_WORKSPACES_ROUTES = [
// Stored Workspaces CRUD Routes
chunkVNWPOCOT_cjs.LIST_STORED_WORKSPACES_ROUTE,
chunkVNWPOCOT_cjs.GET_STORED_WORKSPACE_ROUTE,
chunkVNWPOCOT_cjs.CREATE_STORED_WORKSPACE_ROUTE,
chunkVNWPOCOT_cjs.UPDATE_STORED_WORKSPACE_ROUTE,
chunkVNWPOCOT_cjs.DELETE_STORED_WORKSPACE_ROUTE
];
// src/server/server-adapter/routes/system.ts
var SYSTEM_ROUTES = [chunk55YQXUOE_cjs.GET_SYSTEM_PACKAGES_ROUTE, chunk55YQXUOE_cjs.GET_API_SCHEMA_ROUTE];
// src/server/server-adapter/routes/tool-providers.ts
var TOOL_PROVIDER_ROUTES = [
chunkOT2JWWCT_cjs.LIST_TOOL_PROVIDERS_ROUTE,
chunkOT2JWWCT_cjs.LIST_TOOL_PROVIDER_TOOLKITS_ROUTE,
chunkOT2JWWCT_cjs.LIST_TOOL_PROVIDER_TOOLS_ROUTE,
chunkOT2JWWCT_cjs.GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE,
chunkOT2JWWCT_cjs.AUTHORIZE_TOOL_PROVIDER_ROUTE,
chunkOT2JWWCT_cjs.GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE,
chunkOT2JWWCT_cjs.TOOL_PROVIDER_CONNECTION_STATUS_ROUTE,
chunkOT2JWWCT_cjs.LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE,
chunkOT2JWWCT_cjs.LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE,
chunkOT2JWWCT_cjs.DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE,
chunkOT2JWWCT_cjs.UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE,
chunkOT2JWWCT_cjs.GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE,
chunkOT2JWWCT_cjs.GET_TOOL_PROVIDER_HEALTH_ROUTE
];
// src/server/server-adapter/routes/tools.ts
var TOOLS_ROUTES = [chunkUITLSJUW_cjs.LIST_TOOLS_ROUTE, chunkUITLSJUW_cjs.GET_TOOL_BY_ID_ROUTE, chunkUITLSJUW_cjs.EXECUTE_TOOL_ROUTE];
// src/server/server-adapter/routes/vectors.ts
var VECTORS_ROUTES = [
chunkJGLVYJ3S_cjs.UPSERT_VECTORS_ROUTE,
chunkJGLVYJ3S_cjs.CREATE_INDEX_ROUTE,
chunkJGLVYJ3S_cjs.QUERY_VECTORS_ROUTE,
chunkJGLVYJ3S_cjs.LIST_INDEXES_ROUTE,
chunkJGLVYJ3S_cjs.DESCRIBE_INDEX_ROUTE,
chunkJGLVYJ3S_cjs.DELETE_INDEX_ROUTE,
chunkJGLVYJ3S_cjs.LIST_VECTORS_ROUTE,
chunkJGLVYJ3S_cjs.LIST_EMBEDDERS_ROUTE
];
// src/server/server-adapter/routes/workflows.ts
var WORKFLOWS_ROUTES = [
chunkU72IZ5BP_cjs.LIST_WORKFLOWS_ROUTE,
chunkU72IZ5BP_cjs.GET_WORKFLOW_BY_ID_ROUTE,
chunkU72IZ5BP_cjs.LIST_WORKFLOW_RUNS_ROUTE,
chunkU72IZ5BP_cjs.GET_WORKFLOW_RUN_BY_ID_ROUTE,
chunkU72IZ5BP_cjs.DELETE_WORKFLOW_RUN_BY_ID_ROUTE,
chunkU72IZ5BP_cjs.CREATE_WORKFLOW_RUN_ROUTE,
chunkU72IZ5BP_cjs.STREAM_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.RESUME_STREAM_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.START_ASYNC_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.START_WORKFLOW_RUN_ROUTE,
chunkU72IZ5BP_cjs.OBSERVE_STREAM_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.RESUME_ASYNC_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.RESUME_NO_WAIT_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.RESUME_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.CANCEL_WORKFLOW_RUN_ROUTE,
chunkU72IZ5BP_cjs.TIME_TRAVEL_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.RESTART_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.RESTART_ASYNC_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,
chunkU72IZ5BP_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,
chunkU72IZ5BP_cjs.EXECUTE_WORKFLOW_STEP_ROUTE,
chunkU72IZ5BP_cjs.RECEIVE_WORKFLOW_EVENT_ROUTE
];
// src/server/server-adapter/routes/workspace.ts
var WORKSPACE_ROUTES = [
// List all workspaces route (at /api/workspaces)
chunkUSU23GYD_cjs.LIST_WORKSPACES_ROUTE,
// Get workspace route (at /api/workspaces/:workspaceId)
chunkUSU23GYD_cjs.GET_WORKSPACE_ROUTE,
// Filesystem routes (at /api/workspaces/:workspaceId/fs/*)
...chunkUSU23GYD_cjs.WORKSPACE_FS_ROUTES,
// Search routes (at /api/workspaces/:workspaceId/search, /api/workspaces/:workspaceId/index)
...chunkUSU23GYD_cjs.WORKSPACE_SEARCH_ROUTES,
// Skills routes (search must come before parameterized routes)
...chunkUSU23GYD_cjs.WORKSPACE_SKILLS_ROUTES,
// skills.sh proxy routes (at /api/workspaces/:workspaceId/skills-sh/*)
...chunkUSU23GYD_cjs.WORKSPACE_SKILLS_SH_ROUTES
];
// src/server/server-adapter/routes/index.ts
var SERVER_ROUTES = [
...AGENTS_ROUTES,
...chunk4ZHHKMDQ_cjs.AUTH_ROUTES,
...WORKFLOWS_ROUTES,
...TOOLS_ROUTES,
...PROCESSORS_ROUTES,
...RESPONSES_ROUTES,
...CONVERSATIONS_ROUTES,
...MEMORY_ROUTES,
...SCORES_ROUTES,
...OBSERVABILITY_ROUTES,
...LOGS_ROUTES,
...VECTORS_ROUTES,
...A2A_ROUTES,
...WORKSPACE_ROUTES,
...LEGACY_ROUTES,
...MCP_ROUTES,
...STORED_AGENTS_ROUTES,
...STORED_MCP_CLIENTS_ROUTES,
...STORED_PROMPT_BLOCKS_ROUTES,
...STORED_SCORERS_ROUTES,
...STORED_WORKSPACES_ROUTES,
...STORED_SKILLS_ROUTES,
...TOOL_PROVIDER_ROUTES,
...PROCESSOR_PROVIDER_ROUTES,
...SYSTEM_ROUTES,
...DATASETS_ROUTES,
...BACKGROUND_TASK_ROUTES,
...EDITOR_BUILDER_ROUTES,
...AGENT_BUILDER_ROUTES,
...SCHEDULES_ROUTES,
...CHANNELS_ROUTES,
...HARNESS_ROUTES
];
exports.SERVER_ROUTES = SERVER_ROUTES;
exports.deriveAction = deriveAction;
exports.derivePermission = derivePermission;
exports.extractResource = extractResource;
exports.getEffectivePermission = getEffectivePermission;
//# sourceMappingURL=chunk-MIIC4RAA.cjs.map
//# sourceMappingURL=chunk-MIIC4RAA.cjs.map

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

import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-BRC4XSFG.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
import { z } from 'zod/v4';
function getHarnessOrThrow(mastra, harnessId) {
const harness = mastra.getHarness(harnessId);
if (!harness) {
throw new HTTPException(404, { message: `harness "${harnessId}" not found` });
}
return harness;
}
async function getSession(harness, resourceId) {
await harness.init();
return harness.createSession({ resourceId, id: resourceId, ownerId: harness.id });
}
var harnessIdPathParams = z.object({ harnessId: z.string() });
var sessionPathParams = z.object({ harnessId: z.string(), resourceId: z.string() });
var createSessionBodySchema = z.object({ resourceId: z.string() });
var sendMessageBodySchema = z.object({ message: z.string() });
var steerBodySchema = z.object({ message: z.string() });
var toolApprovalBodySchema = z.object({
toolCallId: z.string(),
approved: z.boolean()
});
var toolSuspensionBodySchema = z.object({
toolCallId: z.string(),
// Free-form resume payload. For ask_user this is a string (or string[] for
// multi-select); for submit_plan it's `{ action, feedback? }`; for
// request_access it's "Yes"/"No".
resumeData: z.any()
});
var switchModeBodySchema = z.object({ modeId: z.string() });
var switchModelBodySchema = z.object({
modelId: z.string(),
scope: z.enum(["global", "thread"]).optional(),
modeId: z.string().optional()
});
var switchThreadBodySchema = z.object({ threadId: z.string() });
var createThreadBodySchema = z.object({ title: z.string().optional() });
var renameThreadBodySchema = z.object({ title: z.string() });
var threadPathParams = z.object({ harnessId: z.string(), resourceId: z.string(), threadId: z.string() });
var cloneThreadBodySchema = z.object({
sourceThreadId: z.string().optional(),
title: z.string().optional()
});
var listMessagesQuerySchema = z.object({ limit: z.coerce.number().optional() });
var listThreadsQuerySchema = z.object({ limit: z.coerce.number().optional() });
var followUpBodySchema = z.object({ message: z.string() });
var sendNotificationBodySchema = z.object({
source: z.string(),
kind: z.string(),
summary: z.string(),
priority: z.enum(["low", "medium", "high", "urgent"]).optional(),
payload: z.any().optional(),
sourceId: z.string().optional(),
dedupeKey: z.string().optional(),
coalesceKey: z.string().optional(),
attributes: z.record(z.string(), z.unknown()).optional(),
metadata: z.record(z.string(), z.unknown()).optional()
});
var listHarnessesResponseSchema = z.object({
harnesses: z.array(z.object({ id: z.string() }))
});
var createSessionResponseSchema = z.object({
harnessId: z.string(),
resourceId: z.string(),
threadId: z.string().optional()
});
var ackResponseSchema = z.object({ ok: z.boolean() });
var sessionStateResponseSchema = z.object({
harnessId: z.string(),
resourceId: z.string(),
threadId: z.string().optional(),
modeId: z.string(),
modelId: z.string()
});
var listModesResponseSchema = z.object({
modes: z.array(z.object({ id: z.string(), name: z.string().optional() }))
});
var listThreadsResponseSchema = z.object({
threads: z.array(
z.object({
id: z.string(),
title: z.string().optional(),
updatedAt: z.string().optional()
})
)
});
var threadResponseSchema = z.object({
id: z.string(),
title: z.string().optional(),
resourceId: z.string().optional(),
createdAt: z.string().optional(),
updatedAt: z.string().optional()
});
var messageContentSchema = z.object({
type: z.string()
}).passthrough();
var listMessagesResponseSchema = z.object({
messages: z.array(
z.object({
id: z.string(),
role: z.enum(["user", "assistant", "system"]),
content: z.array(messageContentSchema),
createdAt: z.string().optional()
})
)
});
var listModelsResponseSchema = z.object({
models: z.array(
z.object({
id: z.string(),
provider: z.string(),
modelName: z.string(),
hasApiKey: z.boolean(),
useCount: z.number()
})
)
});
var workspaceStatusResponseSchema = z.object({
hasWorkspace: z.boolean(),
isReady: z.boolean()
});
var omRecordResponseSchema = z.object({
record: z.any().optional()
});
var permissionPolicyEnum = z.enum(["allow", "ask", "deny"]);
var toolCategoryEnum = z.enum(["read", "edit", "execute", "mcp", "other"]);
var permissionRulesResponseSchema = z.object({
categories: z.record(z.string(), permissionPolicyEnum).optional(),
tools: z.record(z.string(), permissionPolicyEnum).optional()
});
var setCategoryPermissionBodySchema = z.object({
category: toolCategoryEnum,
policy: permissionPolicyEnum
});
var setToolPermissionBodySchema = z.object({
toolName: z.string(),
policy: permissionPolicyEnum
});
var LIST_HARNESSES_ROUTE = createRoute({
method: "GET",
path: "/harness",
responseType: "json",
responseSchema: listHarnessesResponseSchema,
summary: "List harnesses",
description: "Lists the harnesses hosted on this Mastra instance.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra }) => {
try {
const harnesses = mastra.listHarnesses();
return { harnesses: Object.keys(harnesses).map((id) => ({ id })) };
} catch (error) {
return handleError(error, "error listing harnesses");
}
}
});
var CREATE_HARNESS_SESSION_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions",
responseType: "json",
pathParamSchema: harnessIdPathParams,
bodySchema: createSessionBodySchema,
responseSchema: createSessionResponseSchema,
summary: "Create or resume a harness session",
description: "Creates a session for the given resourceId, or returns the existing one (get-or-create), so reconnects resume the conversation.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
return {
harnessId,
resourceId,
threadId: session.thread.getId() ?? void 0
};
} catch (error) {
return handleError(error, "error creating harness session");
}
}
});
var STREAM_HARNESS_SESSION_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/stream",
responseType: "stream",
streamFormat: "sse",
sseFlushOnConnect: true,
pathParamSchema: sessionPathParams,
summary: "Stream harness session events",
description: "Subscribes to a session\u2019s event bus and streams events to the client over SSE.",
tags: ["Harness", "Streaming"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId, abortSignal }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
let cleanedUp = false;
let heartbeat;
let unsubscribe;
const clearHeartbeat = () => {
if (heartbeat) {
clearTimeout(heartbeat);
heartbeat = void 0;
}
};
const cleanup = (controller) => {
if (cleanedUp) return;
cleanedUp = true;
clearHeartbeat();
unsubscribe?.();
if (controller) {
try {
controller.close();
} catch {
}
}
};
return new ReadableStream({
start(controller) {
const scheduleHeartbeat = () => {
if (cleanedUp) return;
clearHeartbeat();
heartbeat = setTimeout(() => {
heartbeat = void 0;
if (cleanedUp) return;
try {
controller.enqueue(": heartbeat\n\n");
} catch {
cleanup();
return;
}
scheduleHeartbeat();
}, 25e3);
};
unsubscribe = session.subscribe((event) => {
if (cleanedUp) return;
try {
controller.enqueue(`data: ${JSON.stringify(event)}
`);
scheduleHeartbeat();
} catch {
cleanup();
}
});
const abortCleanup = () => cleanup(controller);
abortSignal?.addEventListener("abort", abortCleanup, { once: true });
scheduleHeartbeat();
},
cancel() {
cleanup();
}
});
} catch (error) {
return handleError(error, "error streaming harness session");
}
}
});
var SEND_HARNESS_MESSAGE_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/messages",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: sendMessageBodySchema,
responseSchema: ackResponseSchema,
summary: "Send a message to a harness session",
description: "Sends a user message to the session. The reply streams as events on the session\u2019s SSE stream.",
tags: ["Harness", "Streaming"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, message }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
void session.sendMessage({ content: message });
return { ok: true };
} catch (error) {
return handleError(error, "error sending harness message");
}
}
});
var ABORT_HARNESS_SESSION_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/abort",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: ackResponseSchema,
summary: "Abort a harness session run",
description: "Aborts the in-flight run for the session, if any.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
session.abort();
return { ok: true };
} catch (error) {
return handleError(error, "error aborting harness session");
}
}
});
var HARNESS_TOOL_APPROVAL_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/tool-approval",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: toolApprovalBodySchema,
responseSchema: ackResponseSchema,
summary: "Respond to a harness tool approval",
description: "Approves or declines a pending tool call surfaced by the session.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, toolCallId, approved }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
session.respondToToolApproval({ toolCallId, decision: approved ? "approve" : "decline" });
return { ok: true };
} catch (error) {
return handleError(error, "error responding to harness tool approval");
}
}
});
var HARNESS_TOOL_SUSPENSION_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/tool-suspension",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: toolSuspensionBodySchema,
responseSchema: ackResponseSchema,
summary: "Respond to a suspended harness tool",
description: "Resumes a suspended interactive tool (ask_user, request_access, submit_plan) with the provided resume data.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, toolCallId, resumeData }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.respondToToolSuspension({ toolCallId, resumeData });
return { ok: true };
} catch (error) {
return handleError(error, "error responding to harness tool suspension");
}
}
});
var STEER_HARNESS_SESSION_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/steer",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: steerBodySchema,
responseSchema: ackResponseSchema,
summary: "Steer the in-flight run",
description: "Injects a message into the running turn (interjection) without starting a new run.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, message }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
void session.steer({ content: message });
return { ok: true };
} catch (error) {
return handleError(error, "error steering harness session");
}
}
});
var SWITCH_HARNESS_MODE_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/mode",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: switchModeBodySchema,
responseSchema: ackResponseSchema,
summary: "Switch the session mode",
description: "Switches the active mode (e.g. build, plan) for the session.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, modeId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.mode.switch({ modeId });
return { ok: true };
} catch (error) {
return handleError(error, "error switching harness mode");
}
}
});
var SWITCH_HARNESS_MODEL_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/model",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: switchModelBodySchema,
responseSchema: ackResponseSchema,
summary: "Switch the session model",
description: "Switches the model for the session, scoped to the thread by default.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, modelId, scope, modeId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.model.switch({ modelId, scope, modeId });
return { ok: true };
} catch (error) {
return handleError(error, "error switching harness model");
}
}
});
var SWITCH_HARNESS_THREAD_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/thread",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: switchThreadBodySchema,
responseSchema: ackResponseSchema,
summary: "Switch the session thread",
description: "Switches the session to an existing thread (rebinding its stream and state).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, threadId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.thread.switch({ threadId });
return { ok: true };
} catch (error) {
return handleError(error, "error switching harness thread");
}
}
});
var GET_HARNESS_SESSION_STATE_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: sessionStateResponseSchema,
summary: "Get session state",
description: "Returns the current mode, model, and thread for the session (for initial UI hydration).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
return {
harnessId,
resourceId,
threadId: session.thread.getId() ?? void 0,
modeId: session.mode.get(),
modelId: session.model.get()
};
} catch (error) {
return handleError(error, "error reading harness session state");
}
}
});
var LIST_HARNESS_MODES_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/modes",
responseType: "json",
pathParamSchema: harnessIdPathParams,
responseSchema: listModesResponseSchema,
summary: "List harness modes",
description: "Lists the modes configured on the harness (e.g. build, plan).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
return {
modes: harness.listModes().map((mode) => ({ id: mode.id, name: mode.name }))
};
} catch (error) {
return handleError(error, "error listing harness modes");
}
}
});
var LIST_HARNESS_THREADS_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/threads",
responseType: "json",
pathParamSchema: sessionPathParams,
queryParamSchema: listThreadsQuerySchema,
responseSchema: listThreadsResponseSchema,
summary: "List session threads",
description: "Lists the threads for the session\u2019s resource, most-recently-updated first. Pass `limit` to return only the newest N (e.g. for a sidebar).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId, limit }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threads = await session.thread.list();
const toTime = (t) => (t.updatedAt ?? t.createdAt)?.getTime() ?? 0;
const sorted = [...threads].sort((a, b) => toTime(b) - toTime(a));
const max = Number(limit);
const limited = Number.isFinite(max) && max > 0 ? sorted.slice(0, max) : sorted;
return {
threads: limited.map((t) => ({
id: t.id,
title: t.title,
updatedAt: t.updatedAt instanceof Date ? t.updatedAt.toISOString() : void 0
}))
};
} catch (error) {
return handleError(error, "error listing harness threads");
}
}
});
var SEND_HARNESS_NOTIFICATION_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/notifications",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: sendNotificationBodySchema,
responseSchema: z.object({
accepted: z.boolean(),
notificationId: z.string().optional(),
decision: z.string().optional(),
runId: z.string().optional()
}),
summary: "Send a notification signal to a session",
description: "Delivers a notification to the session\u2019s current agent/thread. The agent\u2019s delivery policy determines whether the notification wakes an idle thread, is summarised, or is persisted for later.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({
mastra,
harnessId,
resourceId,
source,
kind,
summary,
priority,
payload,
sourceId,
dedupeKey,
coalesceKey,
attributes,
metadata
}) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const result = await session.sendNotificationSignal({
source,
kind,
summary,
priority,
payload,
sourceId,
dedupeKey,
coalesceKey,
attributes,
metadata
});
return {
accepted: result.accepted !== void 0,
notificationId: result.record?.id,
decision: result.decision?.action,
runId: result.runId
};
} catch (error) {
return handleError(error, "error sending harness notification");
}
}
});
var CREATE_HARNESS_THREAD_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/threads",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: createThreadBodySchema,
responseSchema: threadResponseSchema,
summary: "Create a new thread",
description: "Creates a new thread in the session (unbinds the previous thread, binds the new one).",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, title }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const thread = await session.thread.create({ title });
return {
id: thread.id,
title: thread.title,
resourceId: thread.resourceId,
createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : void 0,
updatedAt: thread.updatedAt instanceof Date ? thread.updatedAt.toISOString() : void 0
};
} catch (error) {
return handleError(error, "error creating harness thread");
}
}
});
var DELETE_HARNESS_THREAD_ROUTE = createRoute({
method: "DELETE",
path: "/harness/:harnessId/sessions/:resourceId/threads/:threadId",
responseType: "json",
pathParamSchema: threadPathParams,
responseSchema: ackResponseSchema,
summary: "Delete a thread",
description: "Deletes a thread. If the deleted thread is the active one, the session is unbound.",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, threadId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.thread.delete({ threadId });
return { ok: true };
} catch (error) {
return handleError(error, "error deleting harness thread");
}
}
});
var RENAME_HARNESS_THREAD_ROUTE = createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/threads/:threadId",
responseType: "json",
pathParamSchema: threadPathParams,
bodySchema: renameThreadBodySchema,
responseSchema: ackResponseSchema,
summary: "Rename a thread",
description: "Renames the specified thread.",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, threadId, title }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
if (session.thread.getId() !== threadId) {
await session.thread.switch({ threadId });
}
await session.thread.rename({ title });
return { ok: true };
} catch (error) {
return handleError(error, "error renaming harness thread");
}
}
});
var CLONE_HARNESS_THREAD_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/threads/clone",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: cloneThreadBodySchema,
responseSchema: threadResponseSchema,
summary: "Clone a thread",
description: "Clones a thread (and its messages). The session binds to the new clone.",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, sourceThreadId, title }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const thread = await session.thread.clone({ sourceThreadId, title });
return {
id: thread.id,
title: thread.title,
resourceId: thread.resourceId,
createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : void 0,
updatedAt: thread.updatedAt instanceof Date ? thread.updatedAt.toISOString() : void 0
};
} catch (error) {
return handleError(error, "error cloning harness thread");
}
}
});
var LIST_HARNESS_THREAD_MESSAGES_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/threads/:threadId/messages",
responseType: "json",
pathParamSchema: threadPathParams,
queryParamSchema: listMessagesQuerySchema,
responseSchema: listMessagesResponseSchema,
summary: "List thread messages",
description: "Lists messages for a specific thread. Returns most recent messages first.",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId, threadId, limit }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const messages = await session.thread.listMessages({ threadId, limit });
return {
messages: messages.map((m) => ({
id: m.id,
role: m.role,
content: m.content,
createdAt: m.createdAt instanceof Date ? m.createdAt.toISOString() : void 0
}))
};
} catch (error) {
return handleError(error, "error listing harness thread messages");
}
}
});
var FOLLOW_UP_HARNESS_SESSION_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/follow-up",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: followUpBodySchema,
responseSchema: ackResponseSchema,
summary: "Queue a follow-up message",
description: "Queues a follow-up message. If the session is idle it sends immediately; if a run is active it queues for after completion.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, message }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
void session.followUp({ content: message });
return { ok: true };
} catch (error) {
return handleError(error, "error queuing harness follow-up");
}
}
});
var LIST_HARNESS_MODELS_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/models",
responseType: "json",
pathParamSchema: harnessIdPathParams,
responseSchema: listModelsResponseSchema,
summary: "List available models",
description: "Lists all models available on this harness (with auth status and use counts).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
await harness.init();
const models = await harness.listAvailableModels();
return {
models: models.map((m) => ({
id: m.id,
provider: m.provider,
modelName: m.modelName,
hasApiKey: m.hasApiKey,
useCount: m.useCount
}))
};
} catch (error) {
return handleError(error, "error listing harness models");
}
}
});
var GET_HARNESS_WORKSPACE_STATUS_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/workspace",
responseType: "json",
pathParamSchema: harnessIdPathParams,
responseSchema: workspaceStatusResponseSchema,
summary: "Get workspace status",
description: "Returns whether the harness has a workspace configured and whether it is ready.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
await harness.init();
return {
hasWorkspace: harness.hasWorkspace(),
isReady: harness.isWorkspaceReady()
};
} catch (error) {
return handleError(error, "error reading harness workspace status");
}
}
});
var GET_HARNESS_OM_RECORD_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/om",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: omRecordResponseSchema,
summary: "Get observational memory record",
description: "Returns the current observational memory record for the session\u2019s thread/resource.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const record = await harness.getObservationalMemoryRecord(session);
return { record: record ?? void 0 };
} catch (error) {
return handleError(error, "error reading harness OM record");
}
}
});
var SET_HARNESS_RESOURCE_ID_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/resource",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: z.object({ newResourceId: z.string() }),
responseSchema: ackResponseSchema,
summary: "Change the session resource ID",
description: "Updates the session\u2019s resource identity (e.g. when a user logs in).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, newResourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await harness.setResourceId(session, { resourceId: newResourceId });
return { ok: true };
} catch (error) {
return handleError(error, "error setting harness resource ID");
}
}
});
var GET_HARNESS_RESOURCE_IDS_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/resources",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: z.object({ resourceIds: z.array(z.string()) }),
summary: "Get known resource IDs",
description: "Lists the resource IDs known to this session (from threads).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const resourceIds = await harness.getKnownResourceIds(session);
return { resourceIds };
} catch (error) {
return handleError(error, "error listing harness resource IDs");
}
}
});
var setGoalBodySchema = z.object({
objective: z.string(),
judgeModelId: z.string().optional(),
maxRuns: z.number().optional()
});
var updateGoalBodySchema = z.object({
judgeModelId: z.string().optional(),
maxRuns: z.number().optional(),
status: z.enum(["active", "paused", "done"]).optional()
});
var goalRecordSchema = z.object({
id: z.string().optional(),
objective: z.string(),
status: z.enum(["active", "paused", "done"]),
runsUsed: z.number(),
maxRuns: z.number().optional(),
judgeModelId: z.string().optional(),
startedAt: z.number(),
updatedAt: z.number(),
pausedReason: z.string().optional()
});
var goalResponseSchema = z.object({ goal: goalRecordSchema.optional() });
function getAgentForSession(harness, session) {
return harness.getCurrentAgent(session);
}
var GET_HARNESS_GOAL_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/goal",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: goalResponseSchema,
summary: "Get the current goal",
description: "Returns the active/paused/done goal objective for the session\u2019s thread, if any.",
tags: ["Harness", "Goals"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threadId = session.thread.getId();
if (!threadId) return { goal: void 0 };
const agent = getAgentForSession(harness, session);
const record = await agent.getObjective({ threadId });
return { goal: record ?? void 0 };
} catch (error) {
return handleError(error, "error reading harness goal");
}
}
});
var SET_HARNESS_GOAL_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/goal",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: setGoalBodySchema,
responseSchema: goalResponseSchema,
summary: "Set a goal",
description: "Sets a new objective for the session\u2019s thread. The agent\u2019s in-loop goal judge evaluates progress after each turn.",
tags: ["Harness", "Goals"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, objective, judgeModelId, maxRuns }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threadId = session.thread.getId();
if (!threadId) throw new HTTPException(400, { message: "session has no active thread" });
const agent = getAgentForSession(harness, session);
const record = await agent.setObjective(objective, {
threadId,
resourceId: session.identity.getResourceId(),
...judgeModelId ? { judgeModelId } : {},
...maxRuns != null ? { maxRuns } : {}
});
return { goal: record ?? void 0 };
} catch (error) {
return handleError(error, "error setting harness goal");
}
}
});
var UPDATE_HARNESS_GOAL_ROUTE = createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/goal",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: updateGoalBodySchema,
responseSchema: goalResponseSchema,
summary: "Update goal options",
description: "Updates the judge model, max runs, or status of the active goal. No-op when no goal is set.",
tags: ["Harness", "Goals"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, judgeModelId, maxRuns, status }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threadId = session.thread.getId();
if (!threadId) throw new HTTPException(400, { message: "session has no active thread" });
const agent = getAgentForSession(harness, session);
const record = await agent.updateObjectiveOptions({
threadId,
...judgeModelId !== void 0 ? { judgeModelId } : {},
...maxRuns !== void 0 ? { maxRuns } : {},
...status !== void 0 ? { status } : {}
});
return { goal: record ?? void 0 };
} catch (error) {
return handleError(error, "error updating harness goal");
}
}
});
var CLEAR_HARNESS_GOAL_ROUTE = createRoute({
method: "DELETE",
path: "/harness/:harnessId/sessions/:resourceId/goal",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: ackResponseSchema,
summary: "Clear the goal",
description: "Removes the active goal from the session\u2019s thread.",
tags: ["Harness", "Goals"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threadId = session.thread.getId();
if (!threadId) throw new HTTPException(400, { message: "session has no active thread" });
const agent = getAgentForSession(harness, session);
await agent.clearObjective({ threadId });
return { ok: true };
} catch (error) {
return handleError(error, "error clearing harness goal");
}
}
});
var GET_HARNESS_PERMISSIONS_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/permissions",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: permissionRulesResponseSchema,
summary: "Get permission rules",
description: "Returns the current permission rules (per-category and per-tool policies) for the session.",
tags: ["Harness", "Permissions"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const rules = session.permissions.getRules();
return {
categories: rules.categories,
tools: rules.tools
};
} catch (error) {
return handleError(error, "error getting harness permissions");
}
}
});
var SET_HARNESS_CATEGORY_PERMISSION_ROUTE = createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/permissions/category",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: setCategoryPermissionBodySchema,
responseSchema: ackResponseSchema,
summary: "Set permission for a tool category",
description: "Sets the approval policy (allow/ask/deny) for all tools in a category.",
tags: ["Harness", "Permissions"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, category, policy }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.permissions.setForCategory({ category, policy });
return { ok: true };
} catch (error) {
return handleError(error, "error setting harness category permission");
}
}
});
var SET_HARNESS_TOOL_PERMISSION_ROUTE = createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/permissions/tool",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: setToolPermissionBodySchema,
responseSchema: ackResponseSchema,
summary: "Set permission for a specific tool",
description: "Sets the approval policy (allow/ask/deny) for a specific tool by name. Per-tool overrides take precedence over category policies.",
tags: ["Harness", "Permissions"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, toolName, policy }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.permissions.setForTool({ toolName, policy });
return { ok: true };
} catch (error) {
return handleError(error, "error setting harness tool permission");
}
}
});
var setSessionStateBodySchema = z.object({ state: z.record(z.string(), z.unknown()) });
var SET_HARNESS_SESSION_STATE_ROUTE = createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/state",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: setSessionStateBodySchema,
responseSchema: ackResponseSchema,
summary: "Set session state",
description: "Merges the provided key-value pairs into the session state. Existing keys not in the payload are preserved.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, state }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.state.set(state);
return { ok: true };
} catch (error) {
return handleError(error, "error setting harness session state");
}
}
});
export { ABORT_HARNESS_SESSION_ROUTE, CLEAR_HARNESS_GOAL_ROUTE, CLONE_HARNESS_THREAD_ROUTE, CREATE_HARNESS_SESSION_ROUTE, CREATE_HARNESS_THREAD_ROUTE, DELETE_HARNESS_THREAD_ROUTE, FOLLOW_UP_HARNESS_SESSION_ROUTE, GET_HARNESS_GOAL_ROUTE, GET_HARNESS_OM_RECORD_ROUTE, GET_HARNESS_PERMISSIONS_ROUTE, GET_HARNESS_RESOURCE_IDS_ROUTE, GET_HARNESS_SESSION_STATE_ROUTE, GET_HARNESS_WORKSPACE_STATUS_ROUTE, HARNESS_TOOL_APPROVAL_ROUTE, HARNESS_TOOL_SUSPENSION_ROUTE, LIST_HARNESSES_ROUTE, LIST_HARNESS_MODELS_ROUTE, LIST_HARNESS_MODES_ROUTE, LIST_HARNESS_THREADS_ROUTE, LIST_HARNESS_THREAD_MESSAGES_ROUTE, RENAME_HARNESS_THREAD_ROUTE, SEND_HARNESS_MESSAGE_ROUTE, SEND_HARNESS_NOTIFICATION_ROUTE, SET_HARNESS_CATEGORY_PERMISSION_ROUTE, SET_HARNESS_GOAL_ROUTE, SET_HARNESS_RESOURCE_ID_ROUTE, SET_HARNESS_SESSION_STATE_ROUTE, SET_HARNESS_TOOL_PERMISSION_ROUTE, STEER_HARNESS_SESSION_ROUTE, STREAM_HARNESS_SESSION_ROUTE, SWITCH_HARNESS_MODEL_ROUTE, SWITCH_HARNESS_MODE_ROUTE, SWITCH_HARNESS_THREAD_ROUTE, UPDATE_HARNESS_GOAL_ROUTE };
//# sourceMappingURL=chunk-PWU43QJA.js.map
//# sourceMappingURL=chunk-PWU43QJA.js.map

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

'use strict';
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkG54X6VE6_cjs = require('./chunk-G54X6VE6.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
var v4 = require('zod/v4');
function getHarnessOrThrow(mastra, harnessId) {
const harness = mastra.getHarness(harnessId);
if (!harness) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `harness "${harnessId}" not found` });
}
return harness;
}
async function getSession(harness, resourceId) {
await harness.init();
return harness.createSession({ resourceId, id: resourceId, ownerId: harness.id });
}
var harnessIdPathParams = v4.z.object({ harnessId: v4.z.string() });
var sessionPathParams = v4.z.object({ harnessId: v4.z.string(), resourceId: v4.z.string() });
var createSessionBodySchema = v4.z.object({ resourceId: v4.z.string() });
var sendMessageBodySchema = v4.z.object({ message: v4.z.string() });
var steerBodySchema = v4.z.object({ message: v4.z.string() });
var toolApprovalBodySchema = v4.z.object({
toolCallId: v4.z.string(),
approved: v4.z.boolean()
});
var toolSuspensionBodySchema = v4.z.object({
toolCallId: v4.z.string(),
// Free-form resume payload. For ask_user this is a string (or string[] for
// multi-select); for submit_plan it's `{ action, feedback? }`; for
// request_access it's "Yes"/"No".
resumeData: v4.z.any()
});
var switchModeBodySchema = v4.z.object({ modeId: v4.z.string() });
var switchModelBodySchema = v4.z.object({
modelId: v4.z.string(),
scope: v4.z.enum(["global", "thread"]).optional(),
modeId: v4.z.string().optional()
});
var switchThreadBodySchema = v4.z.object({ threadId: v4.z.string() });
var createThreadBodySchema = v4.z.object({ title: v4.z.string().optional() });
var renameThreadBodySchema = v4.z.object({ title: v4.z.string() });
var threadPathParams = v4.z.object({ harnessId: v4.z.string(), resourceId: v4.z.string(), threadId: v4.z.string() });
var cloneThreadBodySchema = v4.z.object({
sourceThreadId: v4.z.string().optional(),
title: v4.z.string().optional()
});
var listMessagesQuerySchema = v4.z.object({ limit: v4.z.coerce.number().optional() });
var listThreadsQuerySchema = v4.z.object({ limit: v4.z.coerce.number().optional() });
var followUpBodySchema = v4.z.object({ message: v4.z.string() });
var sendNotificationBodySchema = v4.z.object({
source: v4.z.string(),
kind: v4.z.string(),
summary: v4.z.string(),
priority: v4.z.enum(["low", "medium", "high", "urgent"]).optional(),
payload: v4.z.any().optional(),
sourceId: v4.z.string().optional(),
dedupeKey: v4.z.string().optional(),
coalesceKey: v4.z.string().optional(),
attributes: v4.z.record(v4.z.string(), v4.z.unknown()).optional(),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional()
});
var listHarnessesResponseSchema = v4.z.object({
harnesses: v4.z.array(v4.z.object({ id: v4.z.string() }))
});
var createSessionResponseSchema = v4.z.object({
harnessId: v4.z.string(),
resourceId: v4.z.string(),
threadId: v4.z.string().optional()
});
var ackResponseSchema = v4.z.object({ ok: v4.z.boolean() });
var sessionStateResponseSchema = v4.z.object({
harnessId: v4.z.string(),
resourceId: v4.z.string(),
threadId: v4.z.string().optional(),
modeId: v4.z.string(),
modelId: v4.z.string()
});
var listModesResponseSchema = v4.z.object({
modes: v4.z.array(v4.z.object({ id: v4.z.string(), name: v4.z.string().optional() }))
});
var listThreadsResponseSchema = v4.z.object({
threads: v4.z.array(
v4.z.object({
id: v4.z.string(),
title: v4.z.string().optional(),
updatedAt: v4.z.string().optional()
})
)
});
var threadResponseSchema = v4.z.object({
id: v4.z.string(),
title: v4.z.string().optional(),
resourceId: v4.z.string().optional(),
createdAt: v4.z.string().optional(),
updatedAt: v4.z.string().optional()
});
var messageContentSchema = v4.z.object({
type: v4.z.string()
}).passthrough();
var listMessagesResponseSchema = v4.z.object({
messages: v4.z.array(
v4.z.object({
id: v4.z.string(),
role: v4.z.enum(["user", "assistant", "system"]),
content: v4.z.array(messageContentSchema),
createdAt: v4.z.string().optional()
})
)
});
var listModelsResponseSchema = v4.z.object({
models: v4.z.array(
v4.z.object({
id: v4.z.string(),
provider: v4.z.string(),
modelName: v4.z.string(),
hasApiKey: v4.z.boolean(),
useCount: v4.z.number()
})
)
});
var workspaceStatusResponseSchema = v4.z.object({
hasWorkspace: v4.z.boolean(),
isReady: v4.z.boolean()
});
var omRecordResponseSchema = v4.z.object({
record: v4.z.any().optional()
});
var permissionPolicyEnum = v4.z.enum(["allow", "ask", "deny"]);
var toolCategoryEnum = v4.z.enum(["read", "edit", "execute", "mcp", "other"]);
var permissionRulesResponseSchema = v4.z.object({
categories: v4.z.record(v4.z.string(), permissionPolicyEnum).optional(),
tools: v4.z.record(v4.z.string(), permissionPolicyEnum).optional()
});
var setCategoryPermissionBodySchema = v4.z.object({
category: toolCategoryEnum,
policy: permissionPolicyEnum
});
var setToolPermissionBodySchema = v4.z.object({
toolName: v4.z.string(),
policy: permissionPolicyEnum
});
var LIST_HARNESSES_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness",
responseType: "json",
responseSchema: listHarnessesResponseSchema,
summary: "List harnesses",
description: "Lists the harnesses hosted on this Mastra instance.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra }) => {
try {
const harnesses = mastra.listHarnesses();
return { harnesses: Object.keys(harnesses).map((id) => ({ id })) };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error listing harnesses");
}
}
});
var CREATE_HARNESS_SESSION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions",
responseType: "json",
pathParamSchema: harnessIdPathParams,
bodySchema: createSessionBodySchema,
responseSchema: createSessionResponseSchema,
summary: "Create or resume a harness session",
description: "Creates a session for the given resourceId, or returns the existing one (get-or-create), so reconnects resume the conversation.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
return {
harnessId,
resourceId,
threadId: session.thread.getId() ?? void 0
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error creating harness session");
}
}
});
var STREAM_HARNESS_SESSION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/stream",
responseType: "stream",
streamFormat: "sse",
sseFlushOnConnect: true,
pathParamSchema: sessionPathParams,
summary: "Stream harness session events",
description: "Subscribes to a session\u2019s event bus and streams events to the client over SSE.",
tags: ["Harness", "Streaming"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId, abortSignal }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
let cleanedUp = false;
let heartbeat;
let unsubscribe;
const clearHeartbeat = () => {
if (heartbeat) {
clearTimeout(heartbeat);
heartbeat = void 0;
}
};
const cleanup = (controller) => {
if (cleanedUp) return;
cleanedUp = true;
clearHeartbeat();
unsubscribe?.();
if (controller) {
try {
controller.close();
} catch {
}
}
};
return new ReadableStream({
start(controller) {
const scheduleHeartbeat = () => {
if (cleanedUp) return;
clearHeartbeat();
heartbeat = setTimeout(() => {
heartbeat = void 0;
if (cleanedUp) return;
try {
controller.enqueue(": heartbeat\n\n");
} catch {
cleanup();
return;
}
scheduleHeartbeat();
}, 25e3);
};
unsubscribe = session.subscribe((event) => {
if (cleanedUp) return;
try {
controller.enqueue(`data: ${JSON.stringify(event)}
`);
scheduleHeartbeat();
} catch {
cleanup();
}
});
const abortCleanup = () => cleanup(controller);
abortSignal?.addEventListener("abort", abortCleanup, { once: true });
scheduleHeartbeat();
},
cancel() {
cleanup();
}
});
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error streaming harness session");
}
}
});
var SEND_HARNESS_MESSAGE_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/messages",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: sendMessageBodySchema,
responseSchema: ackResponseSchema,
summary: "Send a message to a harness session",
description: "Sends a user message to the session. The reply streams as events on the session\u2019s SSE stream.",
tags: ["Harness", "Streaming"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, message }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
void session.sendMessage({ content: message });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error sending harness message");
}
}
});
var ABORT_HARNESS_SESSION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/abort",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: ackResponseSchema,
summary: "Abort a harness session run",
description: "Aborts the in-flight run for the session, if any.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
session.abort();
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error aborting harness session");
}
}
});
var HARNESS_TOOL_APPROVAL_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/tool-approval",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: toolApprovalBodySchema,
responseSchema: ackResponseSchema,
summary: "Respond to a harness tool approval",
description: "Approves or declines a pending tool call surfaced by the session.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, toolCallId, approved }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
session.respondToToolApproval({ toolCallId, decision: approved ? "approve" : "decline" });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error responding to harness tool approval");
}
}
});
var HARNESS_TOOL_SUSPENSION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/tool-suspension",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: toolSuspensionBodySchema,
responseSchema: ackResponseSchema,
summary: "Respond to a suspended harness tool",
description: "Resumes a suspended interactive tool (ask_user, request_access, submit_plan) with the provided resume data.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, toolCallId, resumeData }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.respondToToolSuspension({ toolCallId, resumeData });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error responding to harness tool suspension");
}
}
});
var STEER_HARNESS_SESSION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/steer",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: steerBodySchema,
responseSchema: ackResponseSchema,
summary: "Steer the in-flight run",
description: "Injects a message into the running turn (interjection) without starting a new run.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, message }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
void session.steer({ content: message });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error steering harness session");
}
}
});
var SWITCH_HARNESS_MODE_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/mode",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: switchModeBodySchema,
responseSchema: ackResponseSchema,
summary: "Switch the session mode",
description: "Switches the active mode (e.g. build, plan) for the session.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, modeId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.mode.switch({ modeId });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error switching harness mode");
}
}
});
var SWITCH_HARNESS_MODEL_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/model",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: switchModelBodySchema,
responseSchema: ackResponseSchema,
summary: "Switch the session model",
description: "Switches the model for the session, scoped to the thread by default.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, modelId, scope, modeId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.model.switch({ modelId, scope, modeId });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error switching harness model");
}
}
});
var SWITCH_HARNESS_THREAD_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/thread",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: switchThreadBodySchema,
responseSchema: ackResponseSchema,
summary: "Switch the session thread",
description: "Switches the session to an existing thread (rebinding its stream and state).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, threadId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.thread.switch({ threadId });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error switching harness thread");
}
}
});
var GET_HARNESS_SESSION_STATE_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: sessionStateResponseSchema,
summary: "Get session state",
description: "Returns the current mode, model, and thread for the session (for initial UI hydration).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
return {
harnessId,
resourceId,
threadId: session.thread.getId() ?? void 0,
modeId: session.mode.get(),
modelId: session.model.get()
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error reading harness session state");
}
}
});
var LIST_HARNESS_MODES_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/modes",
responseType: "json",
pathParamSchema: harnessIdPathParams,
responseSchema: listModesResponseSchema,
summary: "List harness modes",
description: "Lists the modes configured on the harness (e.g. build, plan).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
return {
modes: harness.listModes().map((mode) => ({ id: mode.id, name: mode.name }))
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error listing harness modes");
}
}
});
var LIST_HARNESS_THREADS_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/threads",
responseType: "json",
pathParamSchema: sessionPathParams,
queryParamSchema: listThreadsQuerySchema,
responseSchema: listThreadsResponseSchema,
summary: "List session threads",
description: "Lists the threads for the session\u2019s resource, most-recently-updated first. Pass `limit` to return only the newest N (e.g. for a sidebar).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId, limit }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threads = await session.thread.list();
const toTime = (t) => (t.updatedAt ?? t.createdAt)?.getTime() ?? 0;
const sorted = [...threads].sort((a, b) => toTime(b) - toTime(a));
const max = Number(limit);
const limited = Number.isFinite(max) && max > 0 ? sorted.slice(0, max) : sorted;
return {
threads: limited.map((t) => ({
id: t.id,
title: t.title,
updatedAt: t.updatedAt instanceof Date ? t.updatedAt.toISOString() : void 0
}))
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error listing harness threads");
}
}
});
var SEND_HARNESS_NOTIFICATION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/notifications",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: sendNotificationBodySchema,
responseSchema: v4.z.object({
accepted: v4.z.boolean(),
notificationId: v4.z.string().optional(),
decision: v4.z.string().optional(),
runId: v4.z.string().optional()
}),
summary: "Send a notification signal to a session",
description: "Delivers a notification to the session\u2019s current agent/thread. The agent\u2019s delivery policy determines whether the notification wakes an idle thread, is summarised, or is persisted for later.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({
mastra,
harnessId,
resourceId,
source,
kind,
summary,
priority,
payload,
sourceId,
dedupeKey,
coalesceKey,
attributes,
metadata
}) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const result = await session.sendNotificationSignal({
source,
kind,
summary,
priority,
payload,
sourceId,
dedupeKey,
coalesceKey,
attributes,
metadata
});
return {
accepted: result.accepted !== void 0,
notificationId: result.record?.id,
decision: result.decision?.action,
runId: result.runId
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error sending harness notification");
}
}
});
var CREATE_HARNESS_THREAD_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/threads",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: createThreadBodySchema,
responseSchema: threadResponseSchema,
summary: "Create a new thread",
description: "Creates a new thread in the session (unbinds the previous thread, binds the new one).",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, title }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const thread = await session.thread.create({ title });
return {
id: thread.id,
title: thread.title,
resourceId: thread.resourceId,
createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : void 0,
updatedAt: thread.updatedAt instanceof Date ? thread.updatedAt.toISOString() : void 0
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error creating harness thread");
}
}
});
var DELETE_HARNESS_THREAD_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "DELETE",
path: "/harness/:harnessId/sessions/:resourceId/threads/:threadId",
responseType: "json",
pathParamSchema: threadPathParams,
responseSchema: ackResponseSchema,
summary: "Delete a thread",
description: "Deletes a thread. If the deleted thread is the active one, the session is unbound.",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, threadId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.thread.delete({ threadId });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error deleting harness thread");
}
}
});
var RENAME_HARNESS_THREAD_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/threads/:threadId",
responseType: "json",
pathParamSchema: threadPathParams,
bodySchema: renameThreadBodySchema,
responseSchema: ackResponseSchema,
summary: "Rename a thread",
description: "Renames the specified thread.",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, threadId, title }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
if (session.thread.getId() !== threadId) {
await session.thread.switch({ threadId });
}
await session.thread.rename({ title });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error renaming harness thread");
}
}
});
var CLONE_HARNESS_THREAD_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/threads/clone",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: cloneThreadBodySchema,
responseSchema: threadResponseSchema,
summary: "Clone a thread",
description: "Clones a thread (and its messages). The session binds to the new clone.",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, sourceThreadId, title }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const thread = await session.thread.clone({ sourceThreadId, title });
return {
id: thread.id,
title: thread.title,
resourceId: thread.resourceId,
createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : void 0,
updatedAt: thread.updatedAt instanceof Date ? thread.updatedAt.toISOString() : void 0
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error cloning harness thread");
}
}
});
var LIST_HARNESS_THREAD_MESSAGES_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/threads/:threadId/messages",
responseType: "json",
pathParamSchema: threadPathParams,
queryParamSchema: listMessagesQuerySchema,
responseSchema: listMessagesResponseSchema,
summary: "List thread messages",
description: "Lists messages for a specific thread. Returns most recent messages first.",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId, threadId, limit }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const messages = await session.thread.listMessages({ threadId, limit });
return {
messages: messages.map((m) => ({
id: m.id,
role: m.role,
content: m.content,
createdAt: m.createdAt instanceof Date ? m.createdAt.toISOString() : void 0
}))
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error listing harness thread messages");
}
}
});
var FOLLOW_UP_HARNESS_SESSION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/follow-up",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: followUpBodySchema,
responseSchema: ackResponseSchema,
summary: "Queue a follow-up message",
description: "Queues a follow-up message. If the session is idle it sends immediately; if a run is active it queues for after completion.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, message }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
void session.followUp({ content: message });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error queuing harness follow-up");
}
}
});
var LIST_HARNESS_MODELS_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/models",
responseType: "json",
pathParamSchema: harnessIdPathParams,
responseSchema: listModelsResponseSchema,
summary: "List available models",
description: "Lists all models available on this harness (with auth status and use counts).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
await harness.init();
const models = await harness.listAvailableModels();
return {
models: models.map((m) => ({
id: m.id,
provider: m.provider,
modelName: m.modelName,
hasApiKey: m.hasApiKey,
useCount: m.useCount
}))
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error listing harness models");
}
}
});
var GET_HARNESS_WORKSPACE_STATUS_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/workspace",
responseType: "json",
pathParamSchema: harnessIdPathParams,
responseSchema: workspaceStatusResponseSchema,
summary: "Get workspace status",
description: "Returns whether the harness has a workspace configured and whether it is ready.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
await harness.init();
return {
hasWorkspace: harness.hasWorkspace(),
isReady: harness.isWorkspaceReady()
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error reading harness workspace status");
}
}
});
var GET_HARNESS_OM_RECORD_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/om",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: omRecordResponseSchema,
summary: "Get observational memory record",
description: "Returns the current observational memory record for the session\u2019s thread/resource.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const record = await harness.getObservationalMemoryRecord(session);
return { record: record ?? void 0 };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error reading harness OM record");
}
}
});
var SET_HARNESS_RESOURCE_ID_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/resource",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: v4.z.object({ newResourceId: v4.z.string() }),
responseSchema: ackResponseSchema,
summary: "Change the session resource ID",
description: "Updates the session\u2019s resource identity (e.g. when a user logs in).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, newResourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await harness.setResourceId(session, { resourceId: newResourceId });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error setting harness resource ID");
}
}
});
var GET_HARNESS_RESOURCE_IDS_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/resources",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: v4.z.object({ resourceIds: v4.z.array(v4.z.string()) }),
summary: "Get known resource IDs",
description: "Lists the resource IDs known to this session (from threads).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const resourceIds = await harness.getKnownResourceIds(session);
return { resourceIds };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error listing harness resource IDs");
}
}
});
var setGoalBodySchema = v4.z.object({
objective: v4.z.string(),
judgeModelId: v4.z.string().optional(),
maxRuns: v4.z.number().optional()
});
var updateGoalBodySchema = v4.z.object({
judgeModelId: v4.z.string().optional(),
maxRuns: v4.z.number().optional(),
status: v4.z.enum(["active", "paused", "done"]).optional()
});
var goalRecordSchema = v4.z.object({
id: v4.z.string().optional(),
objective: v4.z.string(),
status: v4.z.enum(["active", "paused", "done"]),
runsUsed: v4.z.number(),
maxRuns: v4.z.number().optional(),
judgeModelId: v4.z.string().optional(),
startedAt: v4.z.number(),
updatedAt: v4.z.number(),
pausedReason: v4.z.string().optional()
});
var goalResponseSchema = v4.z.object({ goal: goalRecordSchema.optional() });
function getAgentForSession(harness, session) {
return harness.getCurrentAgent(session);
}
var GET_HARNESS_GOAL_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/goal",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: goalResponseSchema,
summary: "Get the current goal",
description: "Returns the active/paused/done goal objective for the session\u2019s thread, if any.",
tags: ["Harness", "Goals"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threadId = session.thread.getId();
if (!threadId) return { goal: void 0 };
const agent = getAgentForSession(harness, session);
const record = await agent.getObjective({ threadId });
return { goal: record ?? void 0 };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error reading harness goal");
}
}
});
var SET_HARNESS_GOAL_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/goal",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: setGoalBodySchema,
responseSchema: goalResponseSchema,
summary: "Set a goal",
description: "Sets a new objective for the session\u2019s thread. The agent\u2019s in-loop goal judge evaluates progress after each turn.",
tags: ["Harness", "Goals"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, objective, judgeModelId, maxRuns }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threadId = session.thread.getId();
if (!threadId) throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "session has no active thread" });
const agent = getAgentForSession(harness, session);
const record = await agent.setObjective(objective, {
threadId,
resourceId: session.identity.getResourceId(),
...judgeModelId ? { judgeModelId } : {},
...maxRuns != null ? { maxRuns } : {}
});
return { goal: record ?? void 0 };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error setting harness goal");
}
}
});
var UPDATE_HARNESS_GOAL_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/goal",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: updateGoalBodySchema,
responseSchema: goalResponseSchema,
summary: "Update goal options",
description: "Updates the judge model, max runs, or status of the active goal. No-op when no goal is set.",
tags: ["Harness", "Goals"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, judgeModelId, maxRuns, status }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threadId = session.thread.getId();
if (!threadId) throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "session has no active thread" });
const agent = getAgentForSession(harness, session);
const record = await agent.updateObjectiveOptions({
threadId,
...judgeModelId !== void 0 ? { judgeModelId } : {},
...maxRuns !== void 0 ? { maxRuns } : {},
...status !== void 0 ? { status } : {}
});
return { goal: record ?? void 0 };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error updating harness goal");
}
}
});
var CLEAR_HARNESS_GOAL_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "DELETE",
path: "/harness/:harnessId/sessions/:resourceId/goal",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: ackResponseSchema,
summary: "Clear the goal",
description: "Removes the active goal from the session\u2019s thread.",
tags: ["Harness", "Goals"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threadId = session.thread.getId();
if (!threadId) throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "session has no active thread" });
const agent = getAgentForSession(harness, session);
await agent.clearObjective({ threadId });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error clearing harness goal");
}
}
});
var GET_HARNESS_PERMISSIONS_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/permissions",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: permissionRulesResponseSchema,
summary: "Get permission rules",
description: "Returns the current permission rules (per-category and per-tool policies) for the session.",
tags: ["Harness", "Permissions"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const rules = session.permissions.getRules();
return {
categories: rules.categories,
tools: rules.tools
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error getting harness permissions");
}
}
});
var SET_HARNESS_CATEGORY_PERMISSION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/permissions/category",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: setCategoryPermissionBodySchema,
responseSchema: ackResponseSchema,
summary: "Set permission for a tool category",
description: "Sets the approval policy (allow/ask/deny) for all tools in a category.",
tags: ["Harness", "Permissions"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, category, policy }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.permissions.setForCategory({ category, policy });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error setting harness category permission");
}
}
});
var SET_HARNESS_TOOL_PERMISSION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/permissions/tool",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: setToolPermissionBodySchema,
responseSchema: ackResponseSchema,
summary: "Set permission for a specific tool",
description: "Sets the approval policy (allow/ask/deny) for a specific tool by name. Per-tool overrides take precedence over category policies.",
tags: ["Harness", "Permissions"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, toolName, policy }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.permissions.setForTool({ toolName, policy });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error setting harness tool permission");
}
}
});
var setSessionStateBodySchema = v4.z.object({ state: v4.z.record(v4.z.string(), v4.z.unknown()) });
var SET_HARNESS_SESSION_STATE_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/state",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: setSessionStateBodySchema,
responseSchema: ackResponseSchema,
summary: "Set session state",
description: "Merges the provided key-value pairs into the session state. Existing keys not in the payload are preserved.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, state }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.state.set(state);
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error setting harness session state");
}
}
});
exports.ABORT_HARNESS_SESSION_ROUTE = ABORT_HARNESS_SESSION_ROUTE;
exports.CLEAR_HARNESS_GOAL_ROUTE = CLEAR_HARNESS_GOAL_ROUTE;
exports.CLONE_HARNESS_THREAD_ROUTE = CLONE_HARNESS_THREAD_ROUTE;
exports.CREATE_HARNESS_SESSION_ROUTE = CREATE_HARNESS_SESSION_ROUTE;
exports.CREATE_HARNESS_THREAD_ROUTE = CREATE_HARNESS_THREAD_ROUTE;
exports.DELETE_HARNESS_THREAD_ROUTE = DELETE_HARNESS_THREAD_ROUTE;
exports.FOLLOW_UP_HARNESS_SESSION_ROUTE = FOLLOW_UP_HARNESS_SESSION_ROUTE;
exports.GET_HARNESS_GOAL_ROUTE = GET_HARNESS_GOAL_ROUTE;
exports.GET_HARNESS_OM_RECORD_ROUTE = GET_HARNESS_OM_RECORD_ROUTE;
exports.GET_HARNESS_PERMISSIONS_ROUTE = GET_HARNESS_PERMISSIONS_ROUTE;
exports.GET_HARNESS_RESOURCE_IDS_ROUTE = GET_HARNESS_RESOURCE_IDS_ROUTE;
exports.GET_HARNESS_SESSION_STATE_ROUTE = GET_HARNESS_SESSION_STATE_ROUTE;
exports.GET_HARNESS_WORKSPACE_STATUS_ROUTE = GET_HARNESS_WORKSPACE_STATUS_ROUTE;
exports.HARNESS_TOOL_APPROVAL_ROUTE = HARNESS_TOOL_APPROVAL_ROUTE;
exports.HARNESS_TOOL_SUSPENSION_ROUTE = HARNESS_TOOL_SUSPENSION_ROUTE;
exports.LIST_HARNESSES_ROUTE = LIST_HARNESSES_ROUTE;
exports.LIST_HARNESS_MODELS_ROUTE = LIST_HARNESS_MODELS_ROUTE;
exports.LIST_HARNESS_MODES_ROUTE = LIST_HARNESS_MODES_ROUTE;
exports.LIST_HARNESS_THREADS_ROUTE = LIST_HARNESS_THREADS_ROUTE;
exports.LIST_HARNESS_THREAD_MESSAGES_ROUTE = LIST_HARNESS_THREAD_MESSAGES_ROUTE;
exports.RENAME_HARNESS_THREAD_ROUTE = RENAME_HARNESS_THREAD_ROUTE;
exports.SEND_HARNESS_MESSAGE_ROUTE = SEND_HARNESS_MESSAGE_ROUTE;
exports.SEND_HARNESS_NOTIFICATION_ROUTE = SEND_HARNESS_NOTIFICATION_ROUTE;
exports.SET_HARNESS_CATEGORY_PERMISSION_ROUTE = SET_HARNESS_CATEGORY_PERMISSION_ROUTE;
exports.SET_HARNESS_GOAL_ROUTE = SET_HARNESS_GOAL_ROUTE;
exports.SET_HARNESS_RESOURCE_ID_ROUTE = SET_HARNESS_RESOURCE_ID_ROUTE;
exports.SET_HARNESS_SESSION_STATE_ROUTE = SET_HARNESS_SESSION_STATE_ROUTE;
exports.SET_HARNESS_TOOL_PERMISSION_ROUTE = SET_HARNESS_TOOL_PERMISSION_ROUTE;
exports.STEER_HARNESS_SESSION_ROUTE = STEER_HARNESS_SESSION_ROUTE;
exports.STREAM_HARNESS_SESSION_ROUTE = STREAM_HARNESS_SESSION_ROUTE;
exports.SWITCH_HARNESS_MODEL_ROUTE = SWITCH_HARNESS_MODEL_ROUTE;
exports.SWITCH_HARNESS_MODE_ROUTE = SWITCH_HARNESS_MODE_ROUTE;
exports.SWITCH_HARNESS_THREAD_ROUTE = SWITCH_HARNESS_THREAD_ROUTE;
exports.UPDATE_HARNESS_GOAL_ROUTE = UPDATE_HARNESS_GOAL_ROUTE;
//# sourceMappingURL=chunk-USOMBGLF.cjs.map
//# sourceMappingURL=chunk-USOMBGLF.cjs.map

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

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

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

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

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

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

'use strict';
var chunkI6AIWII6_cjs = require('../../chunk-I6AIWII6.cjs');
var chunkUSOMBGLF_cjs = require('../../chunk-USOMBGLF.cjs');

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

enumerable: true,
get: function () { return chunkI6AIWII6_cjs.ABORT_HARNESS_SESSION_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.ABORT_HARNESS_SESSION_ROUTE; }
});
Object.defineProperty(exports, "CLEAR_HARNESS_GOAL_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.CLEAR_HARNESS_GOAL_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.CLEAR_HARNESS_GOAL_ROUTE; }
});
Object.defineProperty(exports, "CLONE_HARNESS_THREAD_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.CLONE_HARNESS_THREAD_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.CLONE_HARNESS_THREAD_ROUTE; }
});
Object.defineProperty(exports, "CREATE_HARNESS_SESSION_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.CREATE_HARNESS_SESSION_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.CREATE_HARNESS_SESSION_ROUTE; }
});
Object.defineProperty(exports, "CREATE_HARNESS_THREAD_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.CREATE_HARNESS_THREAD_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.CREATE_HARNESS_THREAD_ROUTE; }
});
Object.defineProperty(exports, "DELETE_HARNESS_THREAD_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.DELETE_HARNESS_THREAD_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.DELETE_HARNESS_THREAD_ROUTE; }
});
Object.defineProperty(exports, "FOLLOW_UP_HARNESS_SESSION_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.FOLLOW_UP_HARNESS_SESSION_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.FOLLOW_UP_HARNESS_SESSION_ROUTE; }
});
Object.defineProperty(exports, "GET_HARNESS_GOAL_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.GET_HARNESS_GOAL_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.GET_HARNESS_GOAL_ROUTE; }
});
Object.defineProperty(exports, "GET_HARNESS_OM_RECORD_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.GET_HARNESS_OM_RECORD_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.GET_HARNESS_OM_RECORD_ROUTE; }
});
Object.defineProperty(exports, "GET_HARNESS_PERMISSIONS_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.GET_HARNESS_PERMISSIONS_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.GET_HARNESS_PERMISSIONS_ROUTE; }
});
Object.defineProperty(exports, "GET_HARNESS_RESOURCE_IDS_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.GET_HARNESS_RESOURCE_IDS_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.GET_HARNESS_RESOURCE_IDS_ROUTE; }
});
Object.defineProperty(exports, "GET_HARNESS_SESSION_STATE_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.GET_HARNESS_SESSION_STATE_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.GET_HARNESS_SESSION_STATE_ROUTE; }
});
Object.defineProperty(exports, "GET_HARNESS_WORKSPACE_STATUS_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.GET_HARNESS_WORKSPACE_STATUS_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.GET_HARNESS_WORKSPACE_STATUS_ROUTE; }
});
Object.defineProperty(exports, "HARNESS_TOOL_APPROVAL_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.HARNESS_TOOL_APPROVAL_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.HARNESS_TOOL_APPROVAL_ROUTE; }
});
Object.defineProperty(exports, "HARNESS_TOOL_SUSPENSION_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.HARNESS_TOOL_SUSPENSION_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.HARNESS_TOOL_SUSPENSION_ROUTE; }
});
Object.defineProperty(exports, "LIST_HARNESSES_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.LIST_HARNESSES_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.LIST_HARNESSES_ROUTE; }
});
Object.defineProperty(exports, "LIST_HARNESS_MODELS_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.LIST_HARNESS_MODELS_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.LIST_HARNESS_MODELS_ROUTE; }
});
Object.defineProperty(exports, "LIST_HARNESS_MODES_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.LIST_HARNESS_MODES_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.LIST_HARNESS_MODES_ROUTE; }
});
Object.defineProperty(exports, "LIST_HARNESS_THREADS_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.LIST_HARNESS_THREADS_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.LIST_HARNESS_THREADS_ROUTE; }
});
Object.defineProperty(exports, "LIST_HARNESS_THREAD_MESSAGES_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.LIST_HARNESS_THREAD_MESSAGES_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.LIST_HARNESS_THREAD_MESSAGES_ROUTE; }
});
Object.defineProperty(exports, "RENAME_HARNESS_THREAD_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.RENAME_HARNESS_THREAD_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.RENAME_HARNESS_THREAD_ROUTE; }
});
Object.defineProperty(exports, "SEND_HARNESS_MESSAGE_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.SEND_HARNESS_MESSAGE_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.SEND_HARNESS_MESSAGE_ROUTE; }
});
Object.defineProperty(exports, "SEND_HARNESS_NOTIFICATION_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.SEND_HARNESS_NOTIFICATION_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.SEND_HARNESS_NOTIFICATION_ROUTE; }
});
Object.defineProperty(exports, "SET_HARNESS_CATEGORY_PERMISSION_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.SET_HARNESS_CATEGORY_PERMISSION_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.SET_HARNESS_CATEGORY_PERMISSION_ROUTE; }
});
Object.defineProperty(exports, "SET_HARNESS_GOAL_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.SET_HARNESS_GOAL_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.SET_HARNESS_GOAL_ROUTE; }
});
Object.defineProperty(exports, "SET_HARNESS_RESOURCE_ID_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.SET_HARNESS_RESOURCE_ID_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.SET_HARNESS_RESOURCE_ID_ROUTE; }
});
Object.defineProperty(exports, "SET_HARNESS_SESSION_STATE_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.SET_HARNESS_SESSION_STATE_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.SET_HARNESS_SESSION_STATE_ROUTE; }
});
Object.defineProperty(exports, "SET_HARNESS_TOOL_PERMISSION_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.SET_HARNESS_TOOL_PERMISSION_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.SET_HARNESS_TOOL_PERMISSION_ROUTE; }
});
Object.defineProperty(exports, "STEER_HARNESS_SESSION_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.STEER_HARNESS_SESSION_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.STEER_HARNESS_SESSION_ROUTE; }
});
Object.defineProperty(exports, "STREAM_HARNESS_SESSION_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.STREAM_HARNESS_SESSION_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.STREAM_HARNESS_SESSION_ROUTE; }
});
Object.defineProperty(exports, "SWITCH_HARNESS_MODEL_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.SWITCH_HARNESS_MODEL_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.SWITCH_HARNESS_MODEL_ROUTE; }
});
Object.defineProperty(exports, "SWITCH_HARNESS_MODE_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.SWITCH_HARNESS_MODE_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.SWITCH_HARNESS_MODE_ROUTE; }
});
Object.defineProperty(exports, "SWITCH_HARNESS_THREAD_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.SWITCH_HARNESS_THREAD_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.SWITCH_HARNESS_THREAD_ROUTE; }
});
Object.defineProperty(exports, "UPDATE_HARNESS_GOAL_ROUTE", {
enumerable: true,
get: function () { return chunkI6AIWII6_cjs.UPDATE_HARNESS_GOAL_ROUTE; }
get: function () { return chunkUSOMBGLF_cjs.UPDATE_HARNESS_GOAL_ROUTE; }
});
//# sourceMappingURL=harness.cjs.map
//# sourceMappingURL=harness.cjs.map

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

export { ABORT_HARNESS_SESSION_ROUTE, CLEAR_HARNESS_GOAL_ROUTE, CLONE_HARNESS_THREAD_ROUTE, CREATE_HARNESS_SESSION_ROUTE, CREATE_HARNESS_THREAD_ROUTE, DELETE_HARNESS_THREAD_ROUTE, FOLLOW_UP_HARNESS_SESSION_ROUTE, GET_HARNESS_GOAL_ROUTE, GET_HARNESS_OM_RECORD_ROUTE, GET_HARNESS_PERMISSIONS_ROUTE, GET_HARNESS_RESOURCE_IDS_ROUTE, GET_HARNESS_SESSION_STATE_ROUTE, GET_HARNESS_WORKSPACE_STATUS_ROUTE, HARNESS_TOOL_APPROVAL_ROUTE, HARNESS_TOOL_SUSPENSION_ROUTE, LIST_HARNESSES_ROUTE, LIST_HARNESS_MODELS_ROUTE, LIST_HARNESS_MODES_ROUTE, LIST_HARNESS_THREADS_ROUTE, LIST_HARNESS_THREAD_MESSAGES_ROUTE, RENAME_HARNESS_THREAD_ROUTE, SEND_HARNESS_MESSAGE_ROUTE, SEND_HARNESS_NOTIFICATION_ROUTE, SET_HARNESS_CATEGORY_PERMISSION_ROUTE, SET_HARNESS_GOAL_ROUTE, SET_HARNESS_RESOURCE_ID_ROUTE, SET_HARNESS_SESSION_STATE_ROUTE, SET_HARNESS_TOOL_PERMISSION_ROUTE, STEER_HARNESS_SESSION_ROUTE, STREAM_HARNESS_SESSION_ROUTE, SWITCH_HARNESS_MODEL_ROUTE, SWITCH_HARNESS_MODE_ROUTE, SWITCH_HARNESS_THREAD_ROUTE, UPDATE_HARNESS_GOAL_ROUTE } from '../../chunk-MYNSU6B4.js';
export { ABORT_HARNESS_SESSION_ROUTE, CLEAR_HARNESS_GOAL_ROUTE, CLONE_HARNESS_THREAD_ROUTE, CREATE_HARNESS_SESSION_ROUTE, CREATE_HARNESS_THREAD_ROUTE, DELETE_HARNESS_THREAD_ROUTE, FOLLOW_UP_HARNESS_SESSION_ROUTE, GET_HARNESS_GOAL_ROUTE, GET_HARNESS_OM_RECORD_ROUTE, GET_HARNESS_PERMISSIONS_ROUTE, GET_HARNESS_RESOURCE_IDS_ROUTE, GET_HARNESS_SESSION_STATE_ROUTE, GET_HARNESS_WORKSPACE_STATUS_ROUTE, HARNESS_TOOL_APPROVAL_ROUTE, HARNESS_TOOL_SUSPENSION_ROUTE, LIST_HARNESSES_ROUTE, LIST_HARNESS_MODELS_ROUTE, LIST_HARNESS_MODES_ROUTE, LIST_HARNESS_THREADS_ROUTE, LIST_HARNESS_THREAD_MESSAGES_ROUTE, RENAME_HARNESS_THREAD_ROUTE, SEND_HARNESS_MESSAGE_ROUTE, SEND_HARNESS_NOTIFICATION_ROUTE, SET_HARNESS_CATEGORY_PERMISSION_ROUTE, SET_HARNESS_GOAL_ROUTE, SET_HARNESS_RESOURCE_ID_ROUTE, SET_HARNESS_SESSION_STATE_ROUTE, SET_HARNESS_TOOL_PERMISSION_ROUTE, STEER_HARNESS_SESSION_ROUTE, STREAM_HARNESS_SESSION_ROUTE, SWITCH_HARNESS_MODEL_ROUTE, SWITCH_HARNESS_MODE_ROUTE, SWITCH_HARNESS_THREAD_ROUTE, UPDATE_HARNESS_GOAL_ROUTE } from '../../chunk-PWU43QJA.js';
//# sourceMappingURL=harness.js.map
//# sourceMappingURL=harness.js.map
'use strict';
var chunkE2EYPHRE_cjs = require('../../chunk-E2EYPHRE.cjs');
var chunk55YQXUOE_cjs = require('../../chunk-55YQXUOE.cjs');

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

enumerable: true,
get: function () { return chunkE2EYPHRE_cjs.GET_API_SCHEMA_ROUTE; }
get: function () { return chunk55YQXUOE_cjs.GET_API_SCHEMA_ROUTE; }
});
Object.defineProperty(exports, "GET_SYSTEM_PACKAGES_ROUTE", {
enumerable: true,
get: function () { return chunkE2EYPHRE_cjs.GET_SYSTEM_PACKAGES_ROUTE; }
get: function () { return chunk55YQXUOE_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-7HMXQIPK.js';
export { GET_API_SCHEMA_ROUTE, GET_SYSTEM_PACKAGES_ROUTE } from '../../chunk-BIYCTKL5.js';
//# sourceMappingURL=system.js.map
//# sourceMappingURL=system.js.map
'use strict';
var chunk2CLXY7EU_cjs = require('../../chunk-2CLXY7EU.cjs');
var chunkMIIC4RAA_cjs = require('../../chunk-MIIC4RAA.cjs');
var chunk4PQR3D5Y_cjs = require('../../chunk-4PQR3D5Y.cjs');

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

}
const permission = chunk2CLXY7EU_cjs.getEffectivePermission(route);
const permission = chunkMIIC4RAA_cjs.getEffectivePermission(route);
if (!permission) {

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

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

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

);
const routes = [...chunk2CLXY7EU_cjs.SERVER_ROUTES, ...customRoutes];
const routes = [...chunkMIIC4RAA_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 = chunkG54X6VE6_cjs.generateOpenAPIDocument(chunk2CLXY7EU_cjs.SERVER_ROUTES, config);
const openApiSpec = chunkG54X6VE6_cjs.generateOpenAPIDocument(chunkMIIC4RAA_cjs.SERVER_ROUTES, config);
if (prefix) {

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

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

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

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

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

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

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

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

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

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

"zod-to-ts": "^2.1.0",
"@internal/storage-test-utils": "0.0.104",
"@internal/core": "0.1.0",
"@internal/lint": "0.0.108",
"@internal/storage-test-utils": "0.0.104",
"@internal/test-utils": "0.0.44",
"@internal/types-builder": "0.0.83",
"@internal/voice": "0.0.8",
"@internal/test-utils": "0.0.44",
"@mastra/agent-builder": "1.1.1",
"@mastra/agent-builder": "1.1.2-alpha.0",
"@mastra/schema-compat": "1.3.0",
"@mastra/core": "1.46.1-alpha.0",
"@internal/types-builder": "0.0.83"
"@mastra/core": "1.46.1-alpha.1"
},

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

import { SERVER_ROUTES } from './chunk-FYBFIW5N.js';
import { schemaToJsonSchema } from './chunk-BRC4XSFG.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-F6SF6FJT.js.map
//# sourceMappingURL=api-schema-manifest-F6SF6FJT.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-F6SF6FJT.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 chunk2CLXY7EU_cjs = require('./chunk-2CLXY7EU.cjs');
var chunkG54X6VE6_cjs = require('./chunk-G54X6VE6.cjs');
// src/server/server-adapter/api-schema-manifest.ts
function convertSchema(schema) {
return schema ? chunkG54X6VE6_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 = chunk2CLXY7EU_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-PVHR2FGG.cjs.map
//# sourceMappingURL=api-schema-manifest-PVHR2FGG.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-PVHR2FGG.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 chunkXOQEKMY2_cjs = require('./chunk-XOQEKMY2.cjs');
var chunkVNWPOCOT_cjs = require('./chunk-VNWPOCOT.cjs');
var chunkE2EYPHRE_cjs = require('./chunk-E2EYPHRE.cjs');
var chunkOT2JWWCT_cjs = require('./chunk-OT2JWWCT.cjs');
var chunkDULEYONH_cjs = require('./chunk-DULEYONH.cjs');
var chunkUD7JBYUI_cjs = require('./chunk-UD7JBYUI.cjs');
var chunkUZ43QCIA_cjs = require('./chunk-UZ43QCIA.cjs');
var chunkBTMYAVRX_cjs = require('./chunk-BTMYAVRX.cjs');
var chunkIRJJ2JJG_cjs = require('./chunk-IRJJ2JJG.cjs');
var chunkY3MYKCTO_cjs = require('./chunk-Y3MYKCTO.cjs');
var chunkUZINJHAF_cjs = require('./chunk-UZINJHAF.cjs');
var chunkRM4ITWAQ_cjs = require('./chunk-RM4ITWAQ.cjs');
var chunkCZ5EDK57_cjs = require('./chunk-CZ5EDK57.cjs');
var chunkONBABU5V_cjs = require('./chunk-ONBABU5V.cjs');
var chunk4NYA6U6Y_cjs = require('./chunk-4NYA6U6Y.cjs');
var chunkPJLW25AQ_cjs = require('./chunk-PJLW25AQ.cjs');
var chunkS2HKHYJ3_cjs = require('./chunk-S2HKHYJ3.cjs');
var chunkI6AIWII6_cjs = require('./chunk-I6AIWII6.cjs');
var chunkJZJ3PP2H_cjs = require('./chunk-JZJ3PP2H.cjs');
var chunkZFRMJ23H_cjs = require('./chunk-ZFRMJ23H.cjs');
var chunk7FIDKZUG_cjs = require('./chunk-7FIDKZUG.cjs');
var chunkBTIK5TXF_cjs = require('./chunk-BTIK5TXF.cjs');
var chunkJGLVYJ3S_cjs = require('./chunk-JGLVYJ3S.cjs');
var chunkPMGFP7II_cjs = require('./chunk-PMGFP7II.cjs');
var chunkUSU23GYD_cjs = require('./chunk-USU23GYD.cjs');
var chunkUITLSJUW_cjs = require('./chunk-UITLSJUW.cjs');
var chunkM5DAKMVZ_cjs = require('./chunk-M5DAKMVZ.cjs');
var chunkJY2LHUT4_cjs = require('./chunk-JY2LHUT4.cjs');
var chunkIMHKYH3U_cjs = require('./chunk-IMHKYH3U.cjs');
var chunk6HRGFBAF_cjs = require('./chunk-6HRGFBAF.cjs');
var chunk7X243C5K_cjs = require('./chunk-7X243C5K.cjs');
var chunk7B36J5MV_cjs = require('./chunk-7B36J5MV.cjs');
var chunkGU4AEOGA_cjs = require('./chunk-GU4AEOGA.cjs');
var chunkDEK4ZGUR_cjs = require('./chunk-DEK4ZGUR.cjs');
var chunkK3FM6RLZ_cjs = require('./chunk-K3FM6RLZ.cjs');
var chunk4ZHHKMDQ_cjs = require('./chunk-4ZHHKMDQ.cjs');
var chunk7DKSWNOM_cjs = require('./chunk-7DKSWNOM.cjs');
var chunkL4V4FQDA_cjs = require('./chunk-L4V4FQDA.cjs');
var chunkU72IZ5BP_cjs = require('./chunk-U72IZ5BP.cjs');
var chunkT32FQPWH_cjs = require('./chunk-T32FQPWH.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 = [chunkK3FM6RLZ_cjs.GET_AGENT_CARD_ROUTE, chunkK3FM6RLZ_cjs.AGENT_EXECUTION_ROUTE];
// src/server/server-adapter/routes/agent-builder.ts
var AGENT_BUILDER_ROUTES = [
chunkL4V4FQDA_cjs.LIST_AGENT_BUILDER_ACTIONS_ROUTE,
chunkL4V4FQDA_cjs.GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,
chunkL4V4FQDA_cjs.LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,
chunkL4V4FQDA_cjs.GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,
chunkL4V4FQDA_cjs.CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,
chunkL4V4FQDA_cjs.STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.START_AGENT_BUILDER_ACTION_RUN_ROUTE,
chunkL4V4FQDA_cjs.OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.RESUME_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,
chunkL4V4FQDA_cjs.CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE
];
// src/server/server-adapter/routes/agents.ts
var AGENTS_ROUTES = [
// ============================================================================
// Agent Core Routes
// ============================================================================
chunk7DKSWNOM_cjs.LIST_AGENTS_ROUTE,
chunk7DKSWNOM_cjs.GET_PROVIDERS_ROUTE,
chunk7DKSWNOM_cjs.GET_AGENT_BY_ID_ROUTE,
chunk7DKSWNOM_cjs.CLONE_AGENT_ROUTE,
// ============================================================================
// Voice Routes
// ============================================================================
chunkPMGFP7II_cjs.GET_SPEAKERS_ROUTE,
chunkPMGFP7II_cjs.GET_SPEAKERS_DEPRECATED_ROUTE,
// ============================================================================
// Agent Execution Routes
// ============================================================================
chunk7DKSWNOM_cjs.GENERATE_AGENT_ROUTE,
chunk7DKSWNOM_cjs.GENERATE_AGENT_VNEXT_ROUTE,
chunk7DKSWNOM_cjs.STREAM_GENERATE_ROUTE,
chunk7DKSWNOM_cjs.STREAM_UNTIL_IDLE_GENERATE_ROUTE,
chunk7DKSWNOM_cjs.STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,
// ============================================================================
// Resumable Stream Routes
// ============================================================================
chunk7DKSWNOM_cjs.OBSERVE_AGENT_STREAM_ROUTE,
chunk7DKSWNOM_cjs.SEND_AGENT_MESSAGE_ROUTE,
chunk7DKSWNOM_cjs.QUEUE_AGENT_MESSAGE_ROUTE,
chunk7DKSWNOM_cjs.SEND_AGENT_SIGNAL_ROUTE,
chunk7DKSWNOM_cjs.ABORT_AGENT_THREAD_ROUTE,
chunk7DKSWNOM_cjs.SUBSCRIBE_AGENT_THREAD_ROUTE,
// ============================================================================
// Tool Routes
// ============================================================================
chunkUITLSJUW_cjs.EXECUTE_AGENT_TOOL_ROUTE,
chunk7DKSWNOM_cjs.APPROVE_TOOL_CALL_ROUTE,
chunk7DKSWNOM_cjs.SEND_TOOL_APPROVAL_ROUTE,
chunk7DKSWNOM_cjs.DECLINE_TOOL_CALL_ROUTE,
chunk7DKSWNOM_cjs.RESUME_STREAM_ROUTE,
chunk7DKSWNOM_cjs.APPROVE_TOOL_CALL_GENERATE_ROUTE,
chunk7DKSWNOM_cjs.DECLINE_TOOL_CALL_GENERATE_ROUTE,
chunk7DKSWNOM_cjs.APPROVE_NETWORK_TOOL_CALL_ROUTE,
chunk7DKSWNOM_cjs.DECLINE_NETWORK_TOOL_CALL_ROUTE,
chunk7DKSWNOM_cjs.RESUME_STREAM_UNTIL_IDLE_ROUTE,
// ============================================================================
// Network Routes
// ============================================================================
chunk7DKSWNOM_cjs.STREAM_NETWORK_ROUTE,
// ============================================================================
// Model Management Routes
// ============================================================================
chunk7DKSWNOM_cjs.UPDATE_AGENT_MODEL_ROUTE,
chunk7DKSWNOM_cjs.RESET_AGENT_MODEL_ROUTE,
chunk7DKSWNOM_cjs.REORDER_AGENT_MODEL_LIST_ROUTE,
chunk7DKSWNOM_cjs.UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,
// ============================================================================
// Instruction Enhancement Routes
// ============================================================================
chunk7DKSWNOM_cjs.ENHANCE_INSTRUCTIONS_ROUTE,
// ============================================================================
// Agent Tool Routes
// ============================================================================
chunkUITLSJUW_cjs.GET_AGENT_TOOL_ROUTE,
// ============================================================================
// Agent Skill Routes
// ============================================================================
chunk7DKSWNOM_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
// ============================================================================
chunk7DKSWNOM_cjs.STREAM_VNEXT_DEPRECATED_ROUTE,
chunk7DKSWNOM_cjs.STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,
chunk7DKSWNOM_cjs.STREAM_UI_MESSAGE_DEPRECATED_ROUTE
];
// src/server/server-adapter/routes/background-tasks.ts
var BACKGROUND_TASK_ROUTES = [
chunkZFRMJ23H_cjs.BACKGROUND_TASK_STREAM_ROUTE,
chunkZFRMJ23H_cjs.LIST_BACKGROUND_TASKS_ROUTE,
chunkZFRMJ23H_cjs.GET_BACKGROUND_TASK_ROUTE
];
// src/server/server-adapter/routes/channels.ts
var CHANNELS_ROUTES = [
chunkBTIK5TXF_cjs.LIST_CHANNEL_PLATFORMS_ROUTE,
chunkBTIK5TXF_cjs.LIST_CHANNEL_INSTALLATIONS_ROUTE,
chunkBTIK5TXF_cjs.CONNECT_CHANNEL_ROUTE,
chunkBTIK5TXF_cjs.DISCONNECT_CHANNEL_ROUTE
];
// src/server/server-adapter/routes/conversations.ts
var CONVERSATIONS_ROUTES = [
chunkDEK4ZGUR_cjs.CREATE_CONVERSATION_ROUTE,
chunkDEK4ZGUR_cjs.GET_CONVERSATION_ROUTE,
chunkDEK4ZGUR_cjs.GET_CONVERSATION_ITEMS_ROUTE,
chunkDEK4ZGUR_cjs.DELETE_CONVERSATION_ROUTE
];
// src/server/server-adapter/routes/datasets.ts
var DATASETS_ROUTES = [
// Dataset CRUD
chunkPJLW25AQ_cjs.LIST_DATASETS_ROUTE,
chunkPJLW25AQ_cjs.CREATE_DATASET_ROUTE,
chunkPJLW25AQ_cjs.GET_DATASET_ROUTE,
chunkPJLW25AQ_cjs.UPDATE_DATASET_ROUTE,
chunkPJLW25AQ_cjs.DELETE_DATASET_ROUTE,
// Item list and add
chunkPJLW25AQ_cjs.LIST_ITEMS_ROUTE,
chunkPJLW25AQ_cjs.ADD_ITEM_ROUTE,
// Batch operations - MUST come before item-specific routes to avoid /items/batch matching /items/:itemId
chunkPJLW25AQ_cjs.BATCH_INSERT_ITEMS_ROUTE,
chunkPJLW25AQ_cjs.BATCH_DELETE_ITEMS_ROUTE,
// Item-specific CRUD (uses :itemId param)
chunkPJLW25AQ_cjs.GET_ITEM_ROUTE,
chunkPJLW25AQ_cjs.UPDATE_ITEM_ROUTE,
chunkPJLW25AQ_cjs.DELETE_ITEM_ROUTE,
// Version operations
chunkPJLW25AQ_cjs.LIST_DATASET_VERSIONS_ROUTE,
chunkPJLW25AQ_cjs.LIST_ITEM_VERSIONS_ROUTE,
chunkPJLW25AQ_cjs.GET_ITEM_VERSION_ROUTE,
// All experiments (cross-dataset) - MUST come before dataset-scoped experiments
chunkPJLW25AQ_cjs.LIST_ALL_EXPERIMENTS_ROUTE,
// Experiment review summary (cross-dataset) - MUST come before dataset-scoped experiments
chunkPJLW25AQ_cjs.EXPERIMENT_REVIEW_SUMMARY_ROUTE,
// Experiment operations (dataset-scoped)
chunkPJLW25AQ_cjs.LIST_EXPERIMENTS_ROUTE,
chunkPJLW25AQ_cjs.TRIGGER_EXPERIMENT_ROUTE,
chunkPJLW25AQ_cjs.GET_EXPERIMENT_ROUTE,
chunkPJLW25AQ_cjs.LIST_EXPERIMENT_RESULTS_ROUTE,
chunkPJLW25AQ_cjs.UPDATE_EXPERIMENT_RESULT_ROUTE,
// Analytics
chunkPJLW25AQ_cjs.COMPARE_EXPERIMENTS_ROUTE,
// AI generation
chunkPJLW25AQ_cjs.GENERATE_ITEMS_ROUTE,
// Failure analysis
chunkPJLW25AQ_cjs.CLUSTER_FAILURES_ROUTE
];
// src/server/server-adapter/routes/editor-builder.ts
var EDITOR_BUILDER_ROUTES = [
chunkS2HKHYJ3_cjs.GET_EDITOR_BUILDER_SETTINGS_ROUTE,
chunkS2HKHYJ3_cjs.GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE,
chunkS2HKHYJ3_cjs.GET_INFRASTRUCTURE_STATUS_ROUTE,
chunk7FIDKZUG_cjs.LIST_BUILDER_REGISTRIES_ROUTE,
chunk7FIDKZUG_cjs.BUILDER_REGISTRY_SEARCH_ROUTE,
chunk7FIDKZUG_cjs.BUILDER_REGISTRY_POPULAR_ROUTE,
chunk7FIDKZUG_cjs.BUILDER_REGISTRY_PREVIEW_ROUTE,
chunk7FIDKZUG_cjs.BUILDER_REGISTRY_INSTALL_ROUTE
];
// src/server/server-adapter/routes/harness.ts
var HARNESS_ROUTES = [
chunkI6AIWII6_cjs.LIST_HARNESSES_ROUTE,
chunkI6AIWII6_cjs.LIST_HARNESS_MODES_ROUTE,
chunkI6AIWII6_cjs.LIST_HARNESS_MODELS_ROUTE,
chunkI6AIWII6_cjs.CREATE_HARNESS_SESSION_ROUTE,
chunkI6AIWII6_cjs.GET_HARNESS_SESSION_STATE_ROUTE,
chunkI6AIWII6_cjs.LIST_HARNESS_THREADS_ROUTE,
chunkI6AIWII6_cjs.CREATE_HARNESS_THREAD_ROUTE,
chunkI6AIWII6_cjs.DELETE_HARNESS_THREAD_ROUTE,
chunkI6AIWII6_cjs.RENAME_HARNESS_THREAD_ROUTE,
chunkI6AIWII6_cjs.CLONE_HARNESS_THREAD_ROUTE,
chunkI6AIWII6_cjs.LIST_HARNESS_THREAD_MESSAGES_ROUTE,
chunkI6AIWII6_cjs.STREAM_HARNESS_SESSION_ROUTE,
chunkI6AIWII6_cjs.SEND_HARNESS_MESSAGE_ROUTE,
chunkI6AIWII6_cjs.STEER_HARNESS_SESSION_ROUTE,
chunkI6AIWII6_cjs.FOLLOW_UP_HARNESS_SESSION_ROUTE,
chunkI6AIWII6_cjs.ABORT_HARNESS_SESSION_ROUTE,
chunkI6AIWII6_cjs.HARNESS_TOOL_APPROVAL_ROUTE,
chunkI6AIWII6_cjs.HARNESS_TOOL_SUSPENSION_ROUTE,
chunkI6AIWII6_cjs.SWITCH_HARNESS_MODE_ROUTE,
chunkI6AIWII6_cjs.SWITCH_HARNESS_MODEL_ROUTE,
chunkI6AIWII6_cjs.SWITCH_HARNESS_THREAD_ROUTE,
chunkI6AIWII6_cjs.SEND_HARNESS_NOTIFICATION_ROUTE,
chunkI6AIWII6_cjs.GET_HARNESS_WORKSPACE_STATUS_ROUTE,
chunkI6AIWII6_cjs.GET_HARNESS_OM_RECORD_ROUTE,
chunkI6AIWII6_cjs.SET_HARNESS_RESOURCE_ID_ROUTE,
chunkI6AIWII6_cjs.GET_HARNESS_RESOURCE_IDS_ROUTE,
chunkI6AIWII6_cjs.GET_HARNESS_GOAL_ROUTE,
chunkI6AIWII6_cjs.SET_HARNESS_GOAL_ROUTE,
chunkI6AIWII6_cjs.UPDATE_HARNESS_GOAL_ROUTE,
chunkI6AIWII6_cjs.CLEAR_HARNESS_GOAL_ROUTE,
chunkI6AIWII6_cjs.GET_HARNESS_PERMISSIONS_ROUTE,
chunkI6AIWII6_cjs.SET_HARNESS_CATEGORY_PERMISSION_ROUTE,
chunkI6AIWII6_cjs.SET_HARNESS_TOOL_PERMISSION_ROUTE,
chunkI6AIWII6_cjs.SET_HARNESS_SESSION_STATE_ROUTE
];
// src/server/server-adapter/routes/legacy.ts
var LEGACY_ROUTES = [
// ============================================================================
// Legacy Agent Routes
// ============================================================================
chunk7DKSWNOM_cjs.GENERATE_LEGACY_ROUTE,
chunk7DKSWNOM_cjs.STREAM_GENERATE_LEGACY_ROUTE,
// ============================================================================
// Legacy Workflow Routes
// ============================================================================
chunkU72IZ5BP_cjs.STREAM_LEGACY_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE
];
// src/server/server-adapter/routes/logs.ts
var LOGS_ROUTES = [chunkGU4AEOGA_cjs.LIST_LOG_TRANSPORTS_ROUTE, chunkGU4AEOGA_cjs.LIST_LOGS_ROUTE, chunkGU4AEOGA_cjs.LIST_LOGS_BY_RUN_ID_ROUTE];
// src/server/server-adapter/routes/mcp.ts
var MCP_ROUTES = [
// ============================================================================
// MCP Server Registry Routes
// ============================================================================
chunkIMHKYH3U_cjs.LIST_MCP_SERVERS_ROUTE,
chunkIMHKYH3U_cjs.GET_MCP_SERVER_DETAIL_ROUTE,
// ============================================================================
// MCP Server Tool Routes
// ============================================================================
chunkIMHKYH3U_cjs.LIST_MCP_SERVER_TOOLS_ROUTE,
chunkIMHKYH3U_cjs.GET_MCP_SERVER_TOOL_DETAIL_ROUTE,
chunkIMHKYH3U_cjs.EXECUTE_MCP_SERVER_TOOL_ROUTE,
// ============================================================================
// MCP Server Resource Routes
// ============================================================================
chunkIMHKYH3U_cjs.LIST_MCP_SERVER_RESOURCES_ROUTE,
chunkIMHKYH3U_cjs.READ_MCP_SERVER_RESOURCE_ROUTE,
// ============================================================================
// MCP Transport Routes (handled by adapters)
// ============================================================================
chunkIMHKYH3U_cjs.MCP_HTTP_TRANSPORT_ROUTE,
chunkIMHKYH3U_cjs.MCP_SSE_TRANSPORT_ROUTE,
chunkIMHKYH3U_cjs.MCP_SSE_MESSAGES_ROUTE
];
// src/server/server-adapter/routes/memory.ts
var MEMORY_ROUTES = [
chunk6HRGFBAF_cjs.GET_MEMORY_STATUS_ROUTE,
chunk6HRGFBAF_cjs.GET_MEMORY_CONFIG_ROUTE,
chunk6HRGFBAF_cjs.GET_OBSERVATIONAL_MEMORY_ROUTE,
chunk6HRGFBAF_cjs.AWAIT_BUFFER_STATUS_ROUTE,
chunk6HRGFBAF_cjs.LIST_THREADS_ROUTE,
chunk6HRGFBAF_cjs.GET_THREAD_BY_ID_ROUTE,
chunk6HRGFBAF_cjs.LIST_MESSAGES_ROUTE,
chunk6HRGFBAF_cjs.GET_WORKING_MEMORY_ROUTE,
chunk6HRGFBAF_cjs.SAVE_MESSAGES_ROUTE,
chunk6HRGFBAF_cjs.CREATE_THREAD_ROUTE,
chunk6HRGFBAF_cjs.UPDATE_THREAD_ROUTE,
chunk6HRGFBAF_cjs.DELETE_THREAD_ROUTE,
chunk6HRGFBAF_cjs.CLONE_THREAD_ROUTE,
chunk6HRGFBAF_cjs.UPDATE_WORKING_MEMORY_ROUTE,
chunk6HRGFBAF_cjs.DELETE_MESSAGES_ROUTE,
chunk6HRGFBAF_cjs.SEARCH_MEMORY_ROUTE,
chunk6HRGFBAF_cjs.GET_MEMORY_STATUS_NETWORK_ROUTE,
chunk6HRGFBAF_cjs.LIST_THREADS_NETWORK_ROUTE,
chunk6HRGFBAF_cjs.GET_THREAD_BY_ID_NETWORK_ROUTE,
chunk6HRGFBAF_cjs.LIST_MESSAGES_NETWORK_ROUTE,
chunk6HRGFBAF_cjs.SAVE_MESSAGES_NETWORK_ROUTE,
chunk6HRGFBAF_cjs.CREATE_THREAD_NETWORK_ROUTE,
chunk6HRGFBAF_cjs.UPDATE_THREAD_NETWORK_ROUTE,
chunk6HRGFBAF_cjs.DELETE_THREAD_NETWORK_ROUTE,
chunk6HRGFBAF_cjs.DELETE_MESSAGES_NETWORK_ROUTE
];
// src/server/server-adapter/routes/observability.ts
var OBSERVABILITY_ROUTES = [
// Legacy
chunk7X243C5K_cjs.LIST_TRACES_ROUTE,
chunk7X243C5K_cjs.LIST_TRACES_LIGHT_ROUTE,
chunk7X243C5K_cjs.LIST_BRANCHES_ROUTE,
chunk7X243C5K_cjs.GET_BRANCH_ROUTE,
chunk7X243C5K_cjs.GET_TRACE_ROUTE,
chunk7X243C5K_cjs.GET_TRACE_LIGHT_ROUTE,
chunk7X243C5K_cjs.GET_SPAN_ROUTE,
chunk7X243C5K_cjs.GET_TRACE_TRAJECTORY_ROUTE,
chunk7X243C5K_cjs.SCORE_TRACES_ROUTE,
chunk7X243C5K_cjs.LIST_SCORES_BY_SPAN_ROUTE,
// New observability routes
chunk7B36J5MV_cjs.LIST_METRICS,
chunk7B36J5MV_cjs.LIST_LOGS,
chunk7B36J5MV_cjs.LIST_SCORES,
chunk7B36J5MV_cjs.CREATE_SCORE,
chunk7B36J5MV_cjs.GET_SCORE,
chunk7B36J5MV_cjs.GET_SCORE_AGGREGATE,
chunk7B36J5MV_cjs.GET_SCORE_BREAKDOWN,
chunk7B36J5MV_cjs.GET_SCORE_TIME_SERIES,
chunk7B36J5MV_cjs.GET_SCORE_PERCENTILES,
chunk7B36J5MV_cjs.LIST_FEEDBACK,
chunk7B36J5MV_cjs.CREATE_FEEDBACK,
chunk7B36J5MV_cjs.GET_FEEDBACK_AGGREGATE,
chunk7B36J5MV_cjs.GET_FEEDBACK_BREAKDOWN,
chunk7B36J5MV_cjs.GET_FEEDBACK_TIME_SERIES,
chunk7B36J5MV_cjs.GET_FEEDBACK_PERCENTILES,
chunk7B36J5MV_cjs.GET_METRIC_AGGREGATE,
chunk7B36J5MV_cjs.GET_METRIC_BREAKDOWN,
chunk7B36J5MV_cjs.GET_METRIC_TIME_SERIES,
chunk7B36J5MV_cjs.GET_METRIC_PERCENTILES,
chunk7B36J5MV_cjs.GET_METRIC_NAMES,
chunk7B36J5MV_cjs.GET_METRIC_LABEL_KEYS,
chunk7B36J5MV_cjs.GET_METRIC_LABEL_VALUES,
chunk7B36J5MV_cjs.GET_ENTITY_TYPES,
chunk7B36J5MV_cjs.GET_ENTITY_NAMES,
chunk7B36J5MV_cjs.GET_SERVICE_NAMES,
chunk7B36J5MV_cjs.GET_ENVIRONMENTS,
chunk7B36J5MV_cjs.GET_TAGS
];
// src/server/server-adapter/routes/processor-providers.ts
var PROCESSOR_PROVIDER_ROUTES = [chunk4NYA6U6Y_cjs.LIST_PROCESSOR_PROVIDERS_ROUTE, chunk4NYA6U6Y_cjs.GET_PROCESSOR_PROVIDER_ROUTE];
// src/server/server-adapter/routes/processors.ts
var PROCESSORS_ROUTES = [chunkUZINJHAF_cjs.LIST_PROCESSORS_ROUTE, chunkUZINJHAF_cjs.GET_PROCESSOR_BY_ID_ROUTE, chunkUZINJHAF_cjs.EXECUTE_PROCESSOR_ROUTE];
// src/server/server-adapter/routes/responses.ts
var RESPONSES_ROUTES = [chunkJY2LHUT4_cjs.CREATE_RESPONSE_ROUTE, chunkJY2LHUT4_cjs.GET_RESPONSE_ROUTE, chunkJY2LHUT4_cjs.DELETE_RESPONSE_ROUTE];
// src/server/server-adapter/routes/schedules.ts
var SCHEDULES_ROUTES = [
chunkCZ5EDK57_cjs.LIST_SCHEDULES_ROUTE,
chunkCZ5EDK57_cjs.GET_SCHEDULE_ROUTE,
chunkCZ5EDK57_cjs.LIST_SCHEDULE_TRIGGERS_ROUTE,
chunkCZ5EDK57_cjs.PAUSE_SCHEDULE_ROUTE,
chunkCZ5EDK57_cjs.RESUME_SCHEDULE_ROUTE
];
// src/server/server-adapter/routes/scorers.ts
var SCORES_ROUTES = [
chunkM5DAKMVZ_cjs.LIST_SCORERS_ROUTE,
chunkM5DAKMVZ_cjs.GET_SCORER_ROUTE,
chunkM5DAKMVZ_cjs.LIST_SCORES_BY_RUN_ID_ROUTE,
chunkM5DAKMVZ_cjs.LIST_SCORES_BY_SCORER_ID_ROUTE,
chunkM5DAKMVZ_cjs.LIST_SCORES_BY_ENTITY_ID_ROUTE,
chunkM5DAKMVZ_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.
// ============================================================================
chunkUD7JBYUI_cjs.LIST_STORED_AGENTS_ROUTE,
chunkUD7JBYUI_cjs.PREVIEW_INSTRUCTIONS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkUD7JBYUI_cjs.GET_STORED_AGENT_DEPENDENTS_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE (longer literal)
chunkUD7JBYUI_cjs.EXPORT_STORED_AGENT_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkUD7JBYUI_cjs.OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE,
// Must be before GET_STORED_AGENT_ROUTE
chunkUD7JBYUI_cjs.GET_STORED_AGENT_ROUTE,
chunkUD7JBYUI_cjs.CREATE_STORED_AGENT_ROUTE,
chunkUD7JBYUI_cjs.UPDATE_STORED_AGENT_ROUTE,
chunkUD7JBYUI_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.
// ============================================================================
chunkT32FQPWH_cjs.LIST_AGENT_VERSIONS_ROUTE,
chunkT32FQPWH_cjs.CREATE_AGENT_VERSION_ROUTE,
chunkT32FQPWH_cjs.COMPARE_AGENT_VERSIONS_ROUTE,
// Must be before GET_AGENT_VERSION_ROUTE
chunkT32FQPWH_cjs.GET_AGENT_VERSION_ROUTE,
chunkT32FQPWH_cjs.ACTIVATE_AGENT_VERSION_ROUTE,
chunkT32FQPWH_cjs.RESTORE_AGENT_VERSION_ROUTE,
chunkT32FQPWH_cjs.DELETE_AGENT_VERSION_ROUTE,
// ============================================================================
// Favorites (EE)
// ============================================================================
chunkDULEYONH_cjs.FAVORITE_STORED_AGENT_ROUTE,
chunkDULEYONH_cjs.UNFAVORITE_STORED_AGENT_ROUTE
];
// src/server/server-adapter/routes/stored-mcp-clients.ts
var STORED_MCP_CLIENTS_ROUTES = [
// Stored MCP Clients CRUD Routes
chunkUZ43QCIA_cjs.LIST_STORED_MCP_CLIENTS_ROUTE,
chunkUZ43QCIA_cjs.GET_STORED_MCP_CLIENT_ROUTE,
chunkUZ43QCIA_cjs.CREATE_STORED_MCP_CLIENT_ROUTE,
chunkUZ43QCIA_cjs.UPDATE_STORED_MCP_CLIENT_ROUTE,
chunkUZ43QCIA_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.
chunkJZJ3PP2H_cjs.LIST_MCP_CLIENT_VERSIONS_ROUTE,
chunkJZJ3PP2H_cjs.CREATE_MCP_CLIENT_VERSION_ROUTE,
chunkJZJ3PP2H_cjs.COMPARE_MCP_CLIENT_VERSIONS_ROUTE,
chunkJZJ3PP2H_cjs.GET_MCP_CLIENT_VERSION_ROUTE,
chunkJZJ3PP2H_cjs.ACTIVATE_MCP_CLIENT_VERSION_ROUTE,
chunkJZJ3PP2H_cjs.RESTORE_MCP_CLIENT_VERSION_ROUTE,
chunkJZJ3PP2H_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
chunkBTMYAVRX_cjs.LIST_STORED_PROMPT_BLOCKS_ROUTE,
chunkBTMYAVRX_cjs.GET_STORED_PROMPT_BLOCK_ROUTE,
chunkBTMYAVRX_cjs.CREATE_STORED_PROMPT_BLOCK_ROUTE,
chunkBTMYAVRX_cjs.UPDATE_STORED_PROMPT_BLOCK_ROUTE,
chunkBTMYAVRX_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.
chunkRM4ITWAQ_cjs.LIST_PROMPT_BLOCK_VERSIONS_ROUTE,
chunkRM4ITWAQ_cjs.CREATE_PROMPT_BLOCK_VERSION_ROUTE,
chunkRM4ITWAQ_cjs.COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE,
chunkRM4ITWAQ_cjs.GET_PROMPT_BLOCK_VERSION_ROUTE,
chunkRM4ITWAQ_cjs.ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE,
chunkRM4ITWAQ_cjs.RESTORE_PROMPT_BLOCK_VERSION_ROUTE,
chunkRM4ITWAQ_cjs.DELETE_PROMPT_BLOCK_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-scorers.ts
var STORED_SCORERS_ROUTES = [
// Stored Scorers CRUD Routes
chunkIRJJ2JJG_cjs.LIST_STORED_SCORERS_ROUTE,
chunkIRJJ2JJG_cjs.GET_STORED_SCORER_ROUTE,
chunkIRJJ2JJG_cjs.CREATE_STORED_SCORER_ROUTE,
chunkIRJJ2JJG_cjs.UPDATE_STORED_SCORER_ROUTE,
chunkIRJJ2JJG_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.
chunkONBABU5V_cjs.LIST_SCORER_VERSIONS_ROUTE,
chunkONBABU5V_cjs.CREATE_SCORER_VERSION_ROUTE,
chunkONBABU5V_cjs.COMPARE_SCORER_VERSIONS_ROUTE,
chunkONBABU5V_cjs.GET_SCORER_VERSION_ROUTE,
chunkONBABU5V_cjs.ACTIVATE_SCORER_VERSION_ROUTE,
chunkONBABU5V_cjs.RESTORE_SCORER_VERSION_ROUTE,
chunkONBABU5V_cjs.DELETE_SCORER_VERSION_ROUTE
];
// src/server/server-adapter/routes/stored-skills.ts
var STORED_SKILLS_ROUTES = [
// Stored Skills CRUD Routes
chunkXOQEKMY2_cjs.LIST_STORED_SKILLS_ROUTE,
chunkXOQEKMY2_cjs.GET_STORED_SKILL_ROUTE,
chunkXOQEKMY2_cjs.CREATE_STORED_SKILL_ROUTE,
chunkXOQEKMY2_cjs.UPDATE_STORED_SKILL_ROUTE,
chunkXOQEKMY2_cjs.DELETE_STORED_SKILL_ROUTE,
// Publish
chunkXOQEKMY2_cjs.PUBLISH_STORED_SKILL_ROUTE,
// Favorites (EE)
chunkY3MYKCTO_cjs.FAVORITE_STORED_SKILL_ROUTE,
chunkY3MYKCTO_cjs.UNFAVORITE_STORED_SKILL_ROUTE
];
// src/server/server-adapter/routes/stored-workspaces.ts
var STORED_WORKSPACES_ROUTES = [
// Stored Workspaces CRUD Routes
chunkVNWPOCOT_cjs.LIST_STORED_WORKSPACES_ROUTE,
chunkVNWPOCOT_cjs.GET_STORED_WORKSPACE_ROUTE,
chunkVNWPOCOT_cjs.CREATE_STORED_WORKSPACE_ROUTE,
chunkVNWPOCOT_cjs.UPDATE_STORED_WORKSPACE_ROUTE,
chunkVNWPOCOT_cjs.DELETE_STORED_WORKSPACE_ROUTE
];
// src/server/server-adapter/routes/system.ts
var SYSTEM_ROUTES = [chunkE2EYPHRE_cjs.GET_SYSTEM_PACKAGES_ROUTE, chunkE2EYPHRE_cjs.GET_API_SCHEMA_ROUTE];
// src/server/server-adapter/routes/tool-providers.ts
var TOOL_PROVIDER_ROUTES = [
chunkOT2JWWCT_cjs.LIST_TOOL_PROVIDERS_ROUTE,
chunkOT2JWWCT_cjs.LIST_TOOL_PROVIDER_TOOLKITS_ROUTE,
chunkOT2JWWCT_cjs.LIST_TOOL_PROVIDER_TOOLS_ROUTE,
chunkOT2JWWCT_cjs.GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE,
chunkOT2JWWCT_cjs.AUTHORIZE_TOOL_PROVIDER_ROUTE,
chunkOT2JWWCT_cjs.GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE,
chunkOT2JWWCT_cjs.TOOL_PROVIDER_CONNECTION_STATUS_ROUTE,
chunkOT2JWWCT_cjs.LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE,
chunkOT2JWWCT_cjs.LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE,
chunkOT2JWWCT_cjs.DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE,
chunkOT2JWWCT_cjs.UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE,
chunkOT2JWWCT_cjs.GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE,
chunkOT2JWWCT_cjs.GET_TOOL_PROVIDER_HEALTH_ROUTE
];
// src/server/server-adapter/routes/tools.ts
var TOOLS_ROUTES = [chunkUITLSJUW_cjs.LIST_TOOLS_ROUTE, chunkUITLSJUW_cjs.GET_TOOL_BY_ID_ROUTE, chunkUITLSJUW_cjs.EXECUTE_TOOL_ROUTE];
// src/server/server-adapter/routes/vectors.ts
var VECTORS_ROUTES = [
chunkJGLVYJ3S_cjs.UPSERT_VECTORS_ROUTE,
chunkJGLVYJ3S_cjs.CREATE_INDEX_ROUTE,
chunkJGLVYJ3S_cjs.QUERY_VECTORS_ROUTE,
chunkJGLVYJ3S_cjs.LIST_INDEXES_ROUTE,
chunkJGLVYJ3S_cjs.DESCRIBE_INDEX_ROUTE,
chunkJGLVYJ3S_cjs.DELETE_INDEX_ROUTE,
chunkJGLVYJ3S_cjs.LIST_VECTORS_ROUTE,
chunkJGLVYJ3S_cjs.LIST_EMBEDDERS_ROUTE
];
// src/server/server-adapter/routes/workflows.ts
var WORKFLOWS_ROUTES = [
chunkU72IZ5BP_cjs.LIST_WORKFLOWS_ROUTE,
chunkU72IZ5BP_cjs.GET_WORKFLOW_BY_ID_ROUTE,
chunkU72IZ5BP_cjs.LIST_WORKFLOW_RUNS_ROUTE,
chunkU72IZ5BP_cjs.GET_WORKFLOW_RUN_BY_ID_ROUTE,
chunkU72IZ5BP_cjs.DELETE_WORKFLOW_RUN_BY_ID_ROUTE,
chunkU72IZ5BP_cjs.CREATE_WORKFLOW_RUN_ROUTE,
chunkU72IZ5BP_cjs.STREAM_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.RESUME_STREAM_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.START_ASYNC_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.START_WORKFLOW_RUN_ROUTE,
chunkU72IZ5BP_cjs.OBSERVE_STREAM_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.RESUME_ASYNC_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.RESUME_NO_WAIT_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.RESUME_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.CANCEL_WORKFLOW_RUN_ROUTE,
chunkU72IZ5BP_cjs.TIME_TRAVEL_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.RESTART_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.RESTART_ASYNC_WORKFLOW_ROUTE,
chunkU72IZ5BP_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,
chunkU72IZ5BP_cjs.RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,
chunkU72IZ5BP_cjs.EXECUTE_WORKFLOW_STEP_ROUTE,
chunkU72IZ5BP_cjs.RECEIVE_WORKFLOW_EVENT_ROUTE
];
// src/server/server-adapter/routes/workspace.ts
var WORKSPACE_ROUTES = [
// List all workspaces route (at /api/workspaces)
chunkUSU23GYD_cjs.LIST_WORKSPACES_ROUTE,
// Get workspace route (at /api/workspaces/:workspaceId)
chunkUSU23GYD_cjs.GET_WORKSPACE_ROUTE,
// Filesystem routes (at /api/workspaces/:workspaceId/fs/*)
...chunkUSU23GYD_cjs.WORKSPACE_FS_ROUTES,
// Search routes (at /api/workspaces/:workspaceId/search, /api/workspaces/:workspaceId/index)
...chunkUSU23GYD_cjs.WORKSPACE_SEARCH_ROUTES,
// Skills routes (search must come before parameterized routes)
...chunkUSU23GYD_cjs.WORKSPACE_SKILLS_ROUTES,
// skills.sh proxy routes (at /api/workspaces/:workspaceId/skills-sh/*)
...chunkUSU23GYD_cjs.WORKSPACE_SKILLS_SH_ROUTES
];
// src/server/server-adapter/routes/index.ts
var SERVER_ROUTES = [
...AGENTS_ROUTES,
...chunk4ZHHKMDQ_cjs.AUTH_ROUTES,
...WORKFLOWS_ROUTES,
...TOOLS_ROUTES,
...PROCESSORS_ROUTES,
...RESPONSES_ROUTES,
...CONVERSATIONS_ROUTES,
...MEMORY_ROUTES,
...SCORES_ROUTES,
...OBSERVABILITY_ROUTES,
...LOGS_ROUTES,
...VECTORS_ROUTES,
...A2A_ROUTES,
...WORKSPACE_ROUTES,
...LEGACY_ROUTES,
...MCP_ROUTES,
...STORED_AGENTS_ROUTES,
...STORED_MCP_CLIENTS_ROUTES,
...STORED_PROMPT_BLOCKS_ROUTES,
...STORED_SCORERS_ROUTES,
...STORED_WORKSPACES_ROUTES,
...STORED_SKILLS_ROUTES,
...TOOL_PROVIDER_ROUTES,
...PROCESSOR_PROVIDER_ROUTES,
...SYSTEM_ROUTES,
...DATASETS_ROUTES,
...BACKGROUND_TASK_ROUTES,
...EDITOR_BUILDER_ROUTES,
...AGENT_BUILDER_ROUTES,
...SCHEDULES_ROUTES,
...CHANNELS_ROUTES,
...HARNESS_ROUTES
];
exports.SERVER_ROUTES = SERVER_ROUTES;
exports.deriveAction = deriveAction;
exports.derivePermission = derivePermission;
exports.extractResource = extractResource;
exports.getEffectivePermission = getEffectivePermission;
//# sourceMappingURL=chunk-2CLXY7EU.cjs.map
//# sourceMappingURL=chunk-2CLXY7EU.cjs.map

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

import { apiSchemaManifestResponseSchema, systemPackagesResponseSchema } from './chunk-ZA2G7XV3.js';
import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-BRC4XSFG.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-F6SF6FJT.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-7HMXQIPK.js.map
//# sourceMappingURL=chunk-7HMXQIPK.js.map
{"version":3,"sources":["../src/server/handlers/system.ts"],"names":[],"mappings":";;;;;AAOA,IAAM,uCAAA,GAA0C,GAAA;AAEhD,eAAe,8BACb,eAAA,EAKA;AACA,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,QAAQ,IAAA,CAAK;AAAA,MACxB,eAAA,EAAgB;AAAA,MAChB,IAAI,OAAA,CAAe,CAAC,CAAA,EAAG,MAAA,KAAW;AAChC,QAAA,OAAA,GAAU,UAAA;AAAA,UACR,MAAM,MAAA,CAAO,IAAI,KAAA,CAAM,wCAAwC,CAAC,CAAA;AAAA,UAChE;AAAA,SACF;AAAA,MACF,CAAC;AAAA,KACF,CAAA;AAAA,EACH,CAAA,SAAE;AACA,IAAA,IAAI,OAAA,eAAsB,OAAO,CAAA;AAAA,EACnC;AACF;AAEA,eAAe,4BAA4B,MAAA,EAaxC;AACD,EAAA,MAAM,YAAA,GAAe,OAAO,SAAA,IAAY;AACxC,EAAA,IAAI,CAAC,cAAc,OAAO,MAAA;AAE1B,EAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,YAAA;AAAA,MACR,OAAA,EAAS,UAAA;AAAA,MACT,OAAA,EAAS,IAAA;AAAA,MACT,oBAAA,EAAsB;AAAA,KACxB;AAAA,EACF;AAEA,EAAA,MAAM,kBAAA,GAAqB,OAAO,wBAAA,IAA2B;AAC7D,EAAA,IAAI,kBAAA,EAAoB;AACtB,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,IAAI,kBAAA,CAAmB,EAAA;AAAA,MACvB,aAAa,kBAAA,CAAmB;AAAA,KAClC;AACA,IAAA,IAAI;AACF,MAAA,MAAM,eAAe,MAAM,6BAAA,CAA8B,MAAM,kBAAA,CAAmB,iBAAiB,CAAA;AACnG,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,YAAA;AAAA,QACR,OAAA,EAAS,iBAAA;AAAA,QACT,QAAA;AAAA,QACA,SAAS,YAAA,CAAa,QAAA;AAAA,QACtB,sBAAsB,YAAA,CAAa,oBAAA;AAAA,QACnC,iBAAA,EAAmB,YAAA,CAAa,QAAA,GAAW,MAAA,GAAY,YAAA,CAAa;AAAA,OACtE;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,YAAA;AAAA,QACR,OAAA,EAAS,iBAAA;AAAA,QACT,QAAA;AAAA,QACA,OAAA,EAAS,KAAA;AAAA,QACT,oBAAA,EAAsB,KAAA;AAAA,QACtB,iBAAA,EAAmB;AAAA,OACrB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB,QAAQ,GAAA,CAAI,sBAAA;AAEnC,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,YAAA;AAAA,MACR,OAAA,EAAS,iBAAA;AAAA,MACT,QAAA,EAAU;AAAA,QACR,EAAA,EAAI,cAAA;AAAA,QACJ,WAAA,EAAa,OAAA,CAAQ,GAAA,CAAI,2BAAA,IAA+B;AAAA,OAC1D;AAAA,MACA,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,+BAAA,KAAoC,OAAA;AAAA,MACzD,oBAAA,EAAsB,OAAA,CAAQ,GAAA,CAAI,6CAAA,KAAkD;AAAA,KACtF;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GACJ,QAAQ,GAAA,CAAI,oBAAA,IAAwB,QAAQ,GAAA,CAAI,yBAAA,IAA6B,QAAQ,GAAA,CAAI,0BAAA;AAE3F,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,YAAA;AAAA,MACR,OAAA,EAAS,aAAA;AAAA,MACT,OAAA,EAAS,KAAA;AAAA,MACT,oBAAA,EAAsB,KAAA;AAAA,MACtB,iBAAA,EAAmB;AAAA,KACrB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,YAAA;AAAA,IACR,OAAA,EAAS,YAAA;AAAA,IACT,OAAA,EAAS,IAAA;AAAA,IACT,oBAAA,EAAsB;AAAA,GACxB;AACF;AAEO,IAAM,uBAAuB,WAAA,CAAY;AAAA,EAC9C,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,oBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,cAAA,EAAgB,+BAAA;AAAA,EAChB,OAAA,EAAS,yBAAA;AAAA,EACT,WAAA,EAAa,qFAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,EACf,YAAA,EAAc,IAAA;AAAA,EACd,SAAS,YAAY;AAEnB,IAAA,MAAM,EAAE,sBAAA,EAAuB,GAAI,MAAM,OAAO,mCAAuC,CAAA;AACvF,IAAA,OAAO,sBAAA,EAAuB;AAAA,EAChC;AACF,CAAC;AAEM,IAAM,4BAA4B,WAAA,CAAY;AAAA,EACnD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,kBAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,cAAA,EAAgB,4BAAA;AAAA,EAChB,OAAA,EAAS,+BAAA;AAAA,EACT,WAAA,EAAa,qFAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,EACf,YAAA,EAAc,IAAA;AAAA,EACd,OAAA,EAAS,OAAO,EAAE,MAAA,EAAO,KAAM;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,gBAAA,GAAmB,QAAQ,GAAA,CAAI,oBAAA;AAErC,MAAA,IAAI,WAA4B,EAAC;AAEjC,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,IAAI;AACF,UAAA,MAAM,WAAA,GAAc,YAAA,CAAa,gBAAA,EAAkB,OAAO,CAAA;AAC1D,UAAA,QAAA,GAAW,IAAA,CAAK,MAAM,WAAW,CAAA;AAAA,QACnC,CAAA,CAAA,MAAQ;AACN,UAAA,QAAA,GAAW,EAAC;AAAA,QACd;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAClC,MAAA,MAAM,cAAc,OAAA,EAAS,IAAA;AAC7B,MAAA,MAAM,oBAAA,GAAuB,SAAS,MAAA,EAAQ,aAAA;AAC9C,MAAA,MAAM,wBAAA,GAA2B,sBAAsB,WAAA,CAAY,IAAA;AACnE,MAAA,MAAM,+BAA+B,oBAAA,EAAsB,sBAAA;AAC3D,MAAA,MAAM,oBAAA,GAAuB,CAAC,CAAC,MAAA,CAAO,cAAc,kBAAA,EAAmB;AAEvE,MAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,MAAA,MAAM,YAAA,GAAe,QAAQ,SAAA,IAAY;AACzC,MAAA,MAAM,wBAAA,GAA2B,MAAA,GAAS,MAAM,2BAAA,CAA4B,MAAM,CAAA,GAAI,MAAA;AAEtF,MAAA,OAAO;AAAA,QACL,QAAA;AAAA,QACA,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,UAAA,KAAe,MAAA;AAAA,QAClC,UAAA,EAAY,CAAC,CAAC,MAAA;AAAA,QACd,YAAA;AAAA,QACA,wBAAA;AAAA,QACA,oBAAA;AAAA,QACA,WAAA;AAAA,QACA,wBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,+BAA+B,CAAA;AAAA,IAC3D;AAAA,EACF;AACF,CAAC","file":"chunk-7HMXQIPK.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 chunkAKJAQVZ3_cjs = require('./chunk-AKJAQVZ3.cjs');
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkG54X6VE6_cjs = require('./chunk-G54X6VE6.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 = chunkG54X6VE6_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-PVHR2FGG.cjs');
return buildApiSchemaManifest();
}
});
var GET_SYSTEM_PACKAGES_ROUTE = chunkG54X6VE6_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-E2EYPHRE.cjs.map
//# sourceMappingURL=chunk-E2EYPHRE.cjs.map
{"version":3,"sources":["../src/server/handlers/system.ts"],"names":["createRoute","apiSchemaManifestResponseSchema","systemPackagesResponseSchema","readFileSync","handleError"],"mappings":"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","file":"chunk-E2EYPHRE.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 { 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-TS5QYSEZ.js';
import { LIST_STORED_WORKSPACES_ROUTE, GET_STORED_WORKSPACE_ROUTE, CREATE_STORED_WORKSPACE_ROUTE, UPDATE_STORED_WORKSPACE_ROUTE, DELETE_STORED_WORKSPACE_ROUTE } from './chunk-M25LVAUH.js';
import { GET_SYSTEM_PACKAGES_ROUTE, GET_API_SCHEMA_ROUTE } from './chunk-7HMXQIPK.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-2Z3TLC4L.js';
import { FAVORITE_STORED_AGENT_ROUTE, UNFAVORITE_STORED_AGENT_ROUTE } from './chunk-ZZOHO2FT.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-C4U5EL4H.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-KBOC52HT.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-SJPWXUKZ.js';
import { LIST_STORED_SCORERS_ROUTE, GET_STORED_SCORER_ROUTE, CREATE_STORED_SCORER_ROUTE, UPDATE_STORED_SCORER_ROUTE, DELETE_STORED_SCORER_ROUTE } from './chunk-E2JNW3QM.js';
import { FAVORITE_STORED_SKILL_ROUTE, UNFAVORITE_STORED_SKILL_ROUTE } from './chunk-5V2QWK2S.js';
import { LIST_PROCESSORS_ROUTE, GET_PROCESSOR_BY_ID_ROUTE, EXECUTE_PROCESSOR_ROUTE } from './chunk-MQMPNMZH.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-BB6RVOJY.js';
import { LIST_SCHEDULES_ROUTE, GET_SCHEDULE_ROUTE, LIST_SCHEDULE_TRIGGERS_ROUTE, PAUSE_SCHEDULE_ROUTE, RESUME_SCHEDULE_ROUTE } from './chunk-WAIWLM6T.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-46Y4Y2RB.js';
import { LIST_PROCESSOR_PROVIDERS_ROUTE, GET_PROCESSOR_PROVIDER_ROUTE } from './chunk-IDCRGQOI.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-GADWAAGI.js';
import { GET_EDITOR_BUILDER_SETTINGS_ROUTE, GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE, GET_INFRASTRUCTURE_STATUS_ROUTE } from './chunk-TPGA2ZTS.js';
import { LIST_HARNESSES_ROUTE, LIST_HARNESS_MODES_ROUTE, LIST_HARNESS_MODELS_ROUTE, CREATE_HARNESS_SESSION_ROUTE, GET_HARNESS_SESSION_STATE_ROUTE, LIST_HARNESS_THREADS_ROUTE, CREATE_HARNESS_THREAD_ROUTE, DELETE_HARNESS_THREAD_ROUTE, RENAME_HARNESS_THREAD_ROUTE, CLONE_HARNESS_THREAD_ROUTE, LIST_HARNESS_THREAD_MESSAGES_ROUTE, STREAM_HARNESS_SESSION_ROUTE, SEND_HARNESS_MESSAGE_ROUTE, STEER_HARNESS_SESSION_ROUTE, FOLLOW_UP_HARNESS_SESSION_ROUTE, ABORT_HARNESS_SESSION_ROUTE, HARNESS_TOOL_APPROVAL_ROUTE, HARNESS_TOOL_SUSPENSION_ROUTE, SWITCH_HARNESS_MODE_ROUTE, SWITCH_HARNESS_MODEL_ROUTE, SWITCH_HARNESS_THREAD_ROUTE, SEND_HARNESS_NOTIFICATION_ROUTE, GET_HARNESS_WORKSPACE_STATUS_ROUTE, GET_HARNESS_OM_RECORD_ROUTE, SET_HARNESS_RESOURCE_ID_ROUTE, GET_HARNESS_RESOURCE_IDS_ROUTE, GET_HARNESS_GOAL_ROUTE, SET_HARNESS_GOAL_ROUTE, UPDATE_HARNESS_GOAL_ROUTE, CLEAR_HARNESS_GOAL_ROUTE, GET_HARNESS_PERMISSIONS_ROUTE, SET_HARNESS_CATEGORY_PERMISSION_ROUTE, SET_HARNESS_TOOL_PERMISSION_ROUTE, SET_HARNESS_SESSION_STATE_ROUTE } from './chunk-MYNSU6B4.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-MMY24AC4.js';
import { BACKGROUND_TASK_STREAM_ROUTE, LIST_BACKGROUND_TASKS_ROUTE, GET_BACKGROUND_TASK_ROUTE } from './chunk-JUORD32P.js';
import { LIST_BUILDER_REGISTRIES_ROUTE, BUILDER_REGISTRY_SEARCH_ROUTE, BUILDER_REGISTRY_POPULAR_ROUTE, BUILDER_REGISTRY_PREVIEW_ROUTE, BUILDER_REGISTRY_INSTALL_ROUTE } from './chunk-C2A2BZFY.js';
import { LIST_CHANNEL_PLATFORMS_ROUTE, LIST_CHANNEL_INSTALLATIONS_ROUTE, CONNECT_CHANNEL_ROUTE, DISCONNECT_CHANNEL_ROUTE } from './chunk-VRERZRJQ.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-MMZL6I4C.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-WF6VLJGR.js';
import { EXECUTE_AGENT_TOOL_ROUTE, GET_AGENT_TOOL_ROUTE, LIST_TOOLS_ROUTE, GET_TOOL_BY_ID_ROUTE, EXECUTE_TOOL_ROUTE } from './chunk-F5EEKLC4.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-MLLGO6XZ.js';
import { CREATE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE } from './chunk-PLWZVSGT.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-RQGQAYCL.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-HZWJL5Y4.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-TIXNAAKQ.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-5FFEBJ3X.js';
import { LIST_LOG_TRANSPORTS_ROUTE, LIST_LOGS_ROUTE, LIST_LOGS_BY_RUN_ID_ROUTE } from './chunk-OHWAEEZJ.js';
import { CREATE_CONVERSATION_ROUTE, GET_CONVERSATION_ROUTE, GET_CONVERSATION_ITEMS_ROUTE, DELETE_CONVERSATION_ROUTE } from './chunk-E345K7K7.js';
import { GET_AGENT_CARD_ROUTE, AGENT_EXECUTION_ROUTE } from './chunk-NEPOKWAA.js';
import { AUTH_ROUTES } from './chunk-R4O5HVDI.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, 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-WKSF3TVK.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-ILVGJFCT.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-R7624SPL.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-56TEDJND.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/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,
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/harness.ts
var HARNESS_ROUTES = [
LIST_HARNESSES_ROUTE,
LIST_HARNESS_MODES_ROUTE,
LIST_HARNESS_MODELS_ROUTE,
CREATE_HARNESS_SESSION_ROUTE,
GET_HARNESS_SESSION_STATE_ROUTE,
LIST_HARNESS_THREADS_ROUTE,
CREATE_HARNESS_THREAD_ROUTE,
DELETE_HARNESS_THREAD_ROUTE,
RENAME_HARNESS_THREAD_ROUTE,
CLONE_HARNESS_THREAD_ROUTE,
LIST_HARNESS_THREAD_MESSAGES_ROUTE,
STREAM_HARNESS_SESSION_ROUTE,
SEND_HARNESS_MESSAGE_ROUTE,
STEER_HARNESS_SESSION_ROUTE,
FOLLOW_UP_HARNESS_SESSION_ROUTE,
ABORT_HARNESS_SESSION_ROUTE,
HARNESS_TOOL_APPROVAL_ROUTE,
HARNESS_TOOL_SUSPENSION_ROUTE,
SWITCH_HARNESS_MODE_ROUTE,
SWITCH_HARNESS_MODEL_ROUTE,
SWITCH_HARNESS_THREAD_ROUTE,
SEND_HARNESS_NOTIFICATION_ROUTE,
GET_HARNESS_WORKSPACE_STATUS_ROUTE,
GET_HARNESS_OM_RECORD_ROUTE,
SET_HARNESS_RESOURCE_ID_ROUTE,
GET_HARNESS_RESOURCE_IDS_ROUTE,
GET_HARNESS_GOAL_ROUTE,
SET_HARNESS_GOAL_ROUTE,
UPDATE_HARNESS_GOAL_ROUTE,
CLEAR_HARNESS_GOAL_ROUTE,
GET_HARNESS_PERMISSIONS_ROUTE,
SET_HARNESS_CATEGORY_PERMISSION_ROUTE,
SET_HARNESS_TOOL_PERMISSION_ROUTE,
SET_HARNESS_SESSION_STATE_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,
...CHANNELS_ROUTES,
...HARNESS_ROUTES
];
export { SERVER_ROUTES, deriveAction, derivePermission, extractResource, getEffectivePermission };
//# sourceMappingURL=chunk-FYBFIW5N.js.map
//# sourceMappingURL=chunk-FYBFIW5N.js.map
{"version":3,"sources":["../src/server/server-adapter/routes/permissions.ts","../src/server/server-adapter/routes/a2a.ts","../src/server/server-adapter/routes/agent-builder.ts","../src/server/server-adapter/routes/agents.ts","../src/server/server-adapter/routes/background-tasks.ts","../src/server/server-adapter/routes/channels.ts","../src/server/server-adapter/routes/conversations.ts","../src/server/server-adapter/routes/datasets.ts","../src/server/server-adapter/routes/editor-builder.ts","../src/server/server-adapter/routes/harness.ts","../src/server/server-adapter/routes/legacy.ts","../src/server/server-adapter/routes/logs.ts","../src/server/server-adapter/routes/mcp.ts","../src/server/server-adapter/routes/memory.ts","../src/server/server-adapter/routes/observability.ts","../src/server/server-adapter/routes/processor-providers.ts","../src/server/server-adapter/routes/processors.ts","../src/server/server-adapter/routes/responses.ts","../src/server/server-adapter/routes/schedules.ts","../src/server/server-adapter/routes/scorers.ts","../src/server/server-adapter/routes/stored-agents.ts","../src/server/server-adapter/routes/stored-mcp-clients.ts","../src/server/server-adapter/routes/stored-prompt-blocks.ts","../src/server/server-adapter/routes/stored-scorers.ts","../src/server/server-adapter/routes/stored-skills.ts","../src/server/server-adapter/routes/stored-workspaces.ts","../src/server/server-adapter/routes/system.ts","../src/server/server-adapter/routes/tool-providers.ts","../src/server/server-adapter/routes/tools.ts","../src/server/server-adapter/routes/vectors.ts","../src/server/server-adapter/routes/workflows.ts","../src/server/server-adapter/routes/workspace.ts","../src/server/server-adapter/routes/index.ts"],"names":[],"mappings":"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","file":"chunk-FYBFIW5N.js","sourcesContent":["/**\n * Permission derivation utilities for automatic route permission assignment.\n *\n * This module provides convention-based permission derivation from route paths and methods,\n * reducing the need to manually specify permissions on each route.\n *\n * Convention: `{resource}:{action}`\n * - resource: First path segment after common prefixes (e.g., 'agents', 'workflows', 'memory')\n * - action: Derived from HTTP method (GET→read, POST→write/execute, DELETE→delete, etc.)\n */\n\nimport type { ServerRoute } from './index';\n\n/**\n * Map HTTP methods to permission actions.\n * POST is context-dependent (write for data, execute for operations).\n */\nconst METHOD_TO_ACTION: Record<string, string> = {\n GET: 'read',\n POST: 'write', // Default for POST, may be overridden to 'execute'\n PUT: 'write',\n PATCH: 'write',\n DELETE: 'delete',\n};\n\n/**\n * Path patterns that indicate an \"execute\" action rather than \"write\" for POST requests.\n * These are typically operation endpoints rather than data creation endpoints.\n */\nconst EXECUTE_PATTERNS = [\n '/generate',\n '/stream',\n '/execute',\n '/start',\n '/resume',\n '/restart',\n '/cancel',\n '/approve',\n '/decline',\n '/speak',\n '/listen',\n '/query',\n '/search',\n '/observe',\n '/time-travel',\n '/enhance',\n '/clone',\n];\n\nconst PUBLISH_PATTERNS = ['/publish', '/activate', '/restore'];\n\n/**\n * Maps `/stored/<family>` URL segments to canonical permission resource slugs.\n */\nconst STORED_RESOURCE_SEGMENTS: Record<string, string> = {\n agents: 'stored-agents',\n 'mcp-clients': 'stored-mcp-clients',\n 'prompt-blocks': 'stored-prompt-blocks',\n scorers: 'stored-scorers',\n skills: 'stored-skills',\n workspaces: 'stored-workspaces',\n};\n\n/**\n * Extracts the primary resource name from a route path.\n *\n * The resource is derived from the first path segment, with special handling\n * for compound resources and well-known paths.\n *\n * Note: The canonical list of resources is generated in permissions.generated.ts\n * from SERVER_ROUTES via `pnpm generate:permissions`.\n *\n * @param path - The route path (e.g., '/agents/:agentId/generate')\n * @returns The resource name (e.g., 'agents') or null if not identifiable\n *\n * @example\n * extractResource('/agents/:agentId') // → 'agents'\n * extractResource('/memory/threads/:threadId') // → 'memory'\n * extractResource('/stored/agents/:agentId') // → 'stored-agents'\n * extractResource('/stored/skills/:skillId') // → 'stored-skills'\n */\nexport function extractResource(path: string): string | null {\n // Remove leading slash and split by segments\n const segments = path.replace(/^\\//, '').split('/');\n\n if (segments.length === 0) {\n return null;\n }\n\n const firstSegment = segments[0];\n\n // Handle special case: /stored/<family> → 'stored-<family>' (or mapped slug).\n // Uses exact segment match (not startsWith) so paths like /stored/skills-archive\n // don't incorrectly collapse into a stored family.\n if (firstSegment === 'stored' && segments[1]) {\n return STORED_RESOURCE_SEGMENTS[segments[1]] ?? null;\n }\n\n // Handle .well-known paths (A2A protocol)\n if (firstSegment === '.well-known') {\n return 'a2a';\n }\n\n return firstSegment || null;\n}\n\n/**\n * Determines the action based on HTTP method and path context.\n *\n * @param method - HTTP method (GET, POST, PUT, DELETE, etc.)\n * @param path - The route path for context\n * @returns The action string (read, write, execute, delete)\n */\nexport function deriveAction(method: string, path: string): string {\n const upperMethod = method.toUpperCase();\n\n // For POST requests, check if it's a publish, execute, or write operation.\n // Publish takes precedence over execute since these suffixes are distinct\n // version-lifecycle operations on stored resources. Restrict publish-suffix\n // matching to /stored/* paths so unrelated routes that happen to end with\n // /activate or /restore aren't accidentally classified as publish.\n if (upperMethod === 'POST') {\n // Restrict publish-suffix matching to /stored/* paths so unrelated routes\n // that happen to end with /activate or /restore aren't accidentally\n // classified as publish.\n if (path.startsWith('/stored/')) {\n const isPublishOperation = PUBLISH_PATTERNS.some(pattern => path.endsWith(pattern));\n if (isPublishOperation) {\n return 'publish';\n }\n }\n const isExecuteOperation = EXECUTE_PATTERNS.some(pattern => path.includes(pattern));\n return isExecuteOperation ? 'execute' : 'write';\n }\n\n return METHOD_TO_ACTION[upperMethod] || 'read';\n}\n\n/**\n * Derives a permission string from a route's path and method.\n *\n * Uses convention: `{resource}:{action}`\n *\n * @param route - The server route to derive permission for\n * @returns The derived permission string, or null if cannot be derived\n *\n * @example\n * derivePermission({ path: '/agents', method: 'GET' }) // → 'agents:read'\n * derivePermission({ path: '/agents/:id/generate', method: 'POST' }) // → 'agents:execute'\n * derivePermission({ path: '/workflows/:id', method: 'DELETE' }) // → 'workflows:delete'\n */\nexport function derivePermission(route: Pick<ServerRoute, 'path' | 'method'>): string | null {\n // Skip for ALL method (typically MCP transports)\n if (route.method === 'ALL') {\n return null;\n }\n\n const resource = extractResource(route.path);\n if (!resource) {\n return null;\n }\n\n const action = deriveAction(route.method, route.path);\n\n return `${resource}:${action}`;\n}\n\n/**\n * Gets the effective permission for a route.\n *\n * Priority:\n * 1. Explicit requiresPermission on the route (string or string[])\n * 2. Derived permission from path/method convention\n * 3. null (no permission required - should only happen for public routes)\n *\n * When the route specifies an array of permissions, the user needs ANY ONE\n * of them (logical OR). This is useful for routes that serve multiple\n * resource types.\n *\n * @param route - The server route\n * @returns The permission string, array of alternative permissions, or null\n */\nexport function getEffectivePermission(route: ServerRoute): string | string[] | null {\n // If route is explicitly public, no permission needed\n if (route.requiresAuth === false) {\n return null;\n }\n\n // Use explicit permission if set\n if (route.requiresPermission) {\n return route.requiresPermission;\n }\n\n // Derive permission from convention\n return derivePermission(route);\n}\n","import { GET_AGENT_CARD_ROUTE, AGENT_EXECUTION_ROUTE } from '../../handlers/a2a';\n\nexport const A2A_ROUTES = [GET_AGENT_CARD_ROUTE, AGENT_EXECUTION_ROUTE] as const;\n","import {\n LIST_AGENT_BUILDER_ACTIONS_ROUTE,\n GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,\n LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,\n GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,\n CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,\n STREAM_AGENT_BUILDER_ACTION_ROUTE,\n STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,\n START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,\n START_AGENT_BUILDER_ACTION_RUN_ROUTE,\n OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,\n OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,\n CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE,\n} from '../../handlers/agent-builder';\n\nexport const AGENT_BUILDER_ROUTES = [\n LIST_AGENT_BUILDER_ACTIONS_ROUTE,\n GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE,\n LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE,\n GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE,\n CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE,\n STREAM_AGENT_BUILDER_ACTION_ROUTE,\n STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,\n START_ASYNC_AGENT_BUILDER_ACTION_ROUTE,\n START_AGENT_BUILDER_ACTION_RUN_ROUTE,\n OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE,\n OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_AGENT_BUILDER_ACTION_ROUTE,\n RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE,\n CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE,\n] as const;\n","import {\n // Agent route objects\n LIST_AGENTS_ROUTE,\n GET_AGENT_BY_ID_ROUTE,\n CLONE_AGENT_ROUTE,\n GENERATE_AGENT_ROUTE,\n GENERATE_AGENT_VNEXT_ROUTE,\n STREAM_GENERATE_ROUTE,\n STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,\n OBSERVE_AGENT_STREAM_ROUTE,\n SEND_AGENT_MESSAGE_ROUTE,\n QUEUE_AGENT_MESSAGE_ROUTE,\n SEND_AGENT_SIGNAL_ROUTE,\n ABORT_AGENT_THREAD_ROUTE,\n SUBSCRIBE_AGENT_THREAD_ROUTE,\n GET_PROVIDERS_ROUTE,\n APPROVE_TOOL_CALL_ROUTE,\n SEND_TOOL_APPROVAL_ROUTE,\n DECLINE_TOOL_CALL_ROUTE,\n RESUME_STREAM_ROUTE,\n APPROVE_TOOL_CALL_GENERATE_ROUTE,\n DECLINE_TOOL_CALL_GENERATE_ROUTE,\n STREAM_NETWORK_ROUTE,\n UPDATE_AGENT_MODEL_ROUTE,\n RESET_AGENT_MODEL_ROUTE,\n REORDER_AGENT_MODEL_LIST_ROUTE,\n UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,\n ENHANCE_INSTRUCTIONS_ROUTE,\n STREAM_VNEXT_DEPRECATED_ROUTE,\n STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,\n STREAM_UI_MESSAGE_DEPRECATED_ROUTE,\n APPROVE_NETWORK_TOOL_CALL_ROUTE,\n DECLINE_NETWORK_TOOL_CALL_ROUTE,\n GET_AGENT_SKILL_ROUTE,\n STREAM_UNTIL_IDLE_GENERATE_ROUTE,\n RESUME_STREAM_UNTIL_IDLE_ROUTE,\n} from '../../handlers/agents';\nimport { GET_AGENT_TOOL_ROUTE, EXECUTE_AGENT_TOOL_ROUTE } from '../../handlers/tools';\nimport {\n GET_SPEAKERS_ROUTE,\n GET_SPEAKERS_DEPRECATED_ROUTE,\n GENERATE_SPEECH_ROUTE,\n GENERATE_SPEECH_DEPRECATED_ROUTE,\n TRANSCRIBE_SPEECH_ROUTE,\n TRANSCRIBE_SPEECH_DEPRECATED_ROUTE,\n GET_LISTENER_ROUTE,\n} from '../../handlers/voice';\nimport type { ServerRoute } from '.';\n\nexport const AGENTS_ROUTES: readonly ServerRoute[] = [\n // ============================================================================\n // Agent Core Routes\n // ============================================================================\n LIST_AGENTS_ROUTE,\n GET_PROVIDERS_ROUTE,\n GET_AGENT_BY_ID_ROUTE,\n CLONE_AGENT_ROUTE,\n\n // ============================================================================\n // Voice Routes\n // ============================================================================\n GET_SPEAKERS_ROUTE,\n GET_SPEAKERS_DEPRECATED_ROUTE,\n\n // ============================================================================\n // Agent Execution Routes\n // ============================================================================\n GENERATE_AGENT_ROUTE,\n GENERATE_AGENT_VNEXT_ROUTE,\n STREAM_GENERATE_ROUTE,\n STREAM_UNTIL_IDLE_GENERATE_ROUTE,\n STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,\n\n // ============================================================================\n // Resumable Stream Routes\n // ============================================================================\n OBSERVE_AGENT_STREAM_ROUTE,\n SEND_AGENT_MESSAGE_ROUTE,\n QUEUE_AGENT_MESSAGE_ROUTE,\n SEND_AGENT_SIGNAL_ROUTE,\n ABORT_AGENT_THREAD_ROUTE,\n SUBSCRIBE_AGENT_THREAD_ROUTE,\n\n // ============================================================================\n // Tool Routes\n // ============================================================================\n EXECUTE_AGENT_TOOL_ROUTE,\n APPROVE_TOOL_CALL_ROUTE,\n SEND_TOOL_APPROVAL_ROUTE,\n DECLINE_TOOL_CALL_ROUTE,\n RESUME_STREAM_ROUTE,\n APPROVE_TOOL_CALL_GENERATE_ROUTE,\n DECLINE_TOOL_CALL_GENERATE_ROUTE,\n APPROVE_NETWORK_TOOL_CALL_ROUTE,\n DECLINE_NETWORK_TOOL_CALL_ROUTE,\n RESUME_STREAM_UNTIL_IDLE_ROUTE,\n\n // ============================================================================\n // Network Routes\n // ============================================================================\n STREAM_NETWORK_ROUTE,\n\n // ============================================================================\n // Model Management Routes\n // ============================================================================\n UPDATE_AGENT_MODEL_ROUTE,\n RESET_AGENT_MODEL_ROUTE,\n REORDER_AGENT_MODEL_LIST_ROUTE,\n UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,\n\n // ============================================================================\n // Instruction Enhancement Routes\n // ============================================================================\n ENHANCE_INSTRUCTIONS_ROUTE,\n\n // ============================================================================\n // Agent Tool Routes\n // ============================================================================\n GET_AGENT_TOOL_ROUTE,\n\n // ============================================================================\n // Agent Skill Routes\n // ============================================================================\n GET_AGENT_SKILL_ROUTE,\n\n // ============================================================================\n // Voice/Speech Routes\n // ============================================================================\n GENERATE_SPEECH_ROUTE,\n GENERATE_SPEECH_DEPRECATED_ROUTE,\n TRANSCRIBE_SPEECH_ROUTE,\n TRANSCRIBE_SPEECH_DEPRECATED_ROUTE,\n GET_LISTENER_ROUTE,\n\n // ============================================================================\n // Deprecated Routes\n // ============================================================================\n STREAM_VNEXT_DEPRECATED_ROUTE,\n STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,\n STREAM_UI_MESSAGE_DEPRECATED_ROUTE,\n];\n\n/**\n * Type-level tuple preserving each agent route's specific schema types.\n * Used by ServerRoutes to build the type-level route map.\n */\nexport type AgentRoutes = readonly [\n typeof LIST_AGENTS_ROUTE,\n typeof GET_PROVIDERS_ROUTE,\n typeof GET_AGENT_BY_ID_ROUTE,\n typeof CLONE_AGENT_ROUTE,\n typeof GET_SPEAKERS_ROUTE,\n typeof GET_SPEAKERS_DEPRECATED_ROUTE,\n typeof GENERATE_AGENT_ROUTE,\n typeof GENERATE_AGENT_VNEXT_ROUTE,\n typeof STREAM_GENERATE_ROUTE,\n typeof STREAM_UNTIL_IDLE_GENERATE_ROUTE,\n typeof STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,\n typeof SEND_AGENT_MESSAGE_ROUTE,\n typeof QUEUE_AGENT_MESSAGE_ROUTE,\n typeof SEND_AGENT_SIGNAL_ROUTE,\n typeof ABORT_AGENT_THREAD_ROUTE,\n typeof SUBSCRIBE_AGENT_THREAD_ROUTE,\n typeof EXECUTE_AGENT_TOOL_ROUTE,\n typeof APPROVE_TOOL_CALL_ROUTE,\n typeof SEND_TOOL_APPROVAL_ROUTE,\n typeof DECLINE_TOOL_CALL_ROUTE,\n typeof RESUME_STREAM_ROUTE,\n typeof RESUME_STREAM_UNTIL_IDLE_ROUTE,\n typeof APPROVE_TOOL_CALL_GENERATE_ROUTE,\n typeof DECLINE_TOOL_CALL_GENERATE_ROUTE,\n typeof APPROVE_NETWORK_TOOL_CALL_ROUTE,\n typeof DECLINE_NETWORK_TOOL_CALL_ROUTE,\n typeof STREAM_NETWORK_ROUTE,\n typeof UPDATE_AGENT_MODEL_ROUTE,\n typeof RESET_AGENT_MODEL_ROUTE,\n typeof REORDER_AGENT_MODEL_LIST_ROUTE,\n typeof UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE,\n typeof ENHANCE_INSTRUCTIONS_ROUTE,\n typeof GET_AGENT_TOOL_ROUTE,\n typeof GET_AGENT_SKILL_ROUTE,\n typeof GENERATE_SPEECH_ROUTE,\n typeof GENERATE_SPEECH_DEPRECATED_ROUTE,\n typeof TRANSCRIBE_SPEECH_ROUTE,\n typeof TRANSCRIBE_SPEECH_DEPRECATED_ROUTE,\n typeof GET_LISTENER_ROUTE,\n typeof STREAM_VNEXT_DEPRECATED_ROUTE,\n typeof STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE,\n typeof STREAM_UI_MESSAGE_DEPRECATED_ROUTE,\n];\n","import {\n BACKGROUND_TASK_STREAM_ROUTE,\n GET_BACKGROUND_TASK_ROUTE,\n LIST_BACKGROUND_TASKS_ROUTE,\n} from '../../handlers/background-tasks';\nimport type { ServerRoute } from '.';\n\nexport const BACKGROUND_TASK_ROUTES: ServerRoute<any, any, any>[] = [\n BACKGROUND_TASK_STREAM_ROUTE,\n LIST_BACKGROUND_TASKS_ROUTE,\n GET_BACKGROUND_TASK_ROUTE,\n];\n","import {\n LIST_CHANNEL_PLATFORMS_ROUTE,\n LIST_CHANNEL_INSTALLATIONS_ROUTE,\n CONNECT_CHANNEL_ROUTE,\n DISCONNECT_CHANNEL_ROUTE,\n} from '../../handlers/channels';\n\nexport const CHANNELS_ROUTES = [\n LIST_CHANNEL_PLATFORMS_ROUTE,\n LIST_CHANNEL_INSTALLATIONS_ROUTE,\n CONNECT_CHANNEL_ROUTE,\n DISCONNECT_CHANNEL_ROUTE,\n] as const;\n","import {\n CREATE_CONVERSATION_ROUTE,\n DELETE_CONVERSATION_ROUTE,\n GET_CONVERSATION_ITEMS_ROUTE,\n GET_CONVERSATION_ROUTE,\n} from '../../handlers/conversations';\n\nexport const CONVERSATIONS_ROUTES = [\n CREATE_CONVERSATION_ROUTE,\n GET_CONVERSATION_ROUTE,\n GET_CONVERSATION_ITEMS_ROUTE,\n DELETE_CONVERSATION_ROUTE,\n] as const;\n","import {\n LIST_DATASETS_ROUTE,\n CREATE_DATASET_ROUTE,\n GET_DATASET_ROUTE,\n UPDATE_DATASET_ROUTE,\n DELETE_DATASET_ROUTE,\n LIST_ITEMS_ROUTE,\n ADD_ITEM_ROUTE,\n GET_ITEM_ROUTE,\n UPDATE_ITEM_ROUTE,\n DELETE_ITEM_ROUTE,\n LIST_ALL_EXPERIMENTS_ROUTE,\n EXPERIMENT_REVIEW_SUMMARY_ROUTE,\n LIST_EXPERIMENTS_ROUTE,\n TRIGGER_EXPERIMENT_ROUTE,\n GET_EXPERIMENT_ROUTE,\n LIST_EXPERIMENT_RESULTS_ROUTE,\n UPDATE_EXPERIMENT_RESULT_ROUTE,\n COMPARE_EXPERIMENTS_ROUTE,\n LIST_DATASET_VERSIONS_ROUTE,\n LIST_ITEM_VERSIONS_ROUTE,\n GET_ITEM_VERSION_ROUTE,\n BATCH_INSERT_ITEMS_ROUTE,\n BATCH_DELETE_ITEMS_ROUTE,\n GENERATE_ITEMS_ROUTE,\n CLUSTER_FAILURES_ROUTE,\n} from '../../handlers/datasets';\n\nexport const DATASETS_ROUTES = [\n // Dataset CRUD\n LIST_DATASETS_ROUTE,\n CREATE_DATASET_ROUTE,\n GET_DATASET_ROUTE,\n UPDATE_DATASET_ROUTE,\n DELETE_DATASET_ROUTE,\n // Item list and add\n LIST_ITEMS_ROUTE,\n ADD_ITEM_ROUTE,\n // Batch operations - MUST come before item-specific routes to avoid /items/batch matching /items/:itemId\n BATCH_INSERT_ITEMS_ROUTE,\n BATCH_DELETE_ITEMS_ROUTE,\n // Item-specific CRUD (uses :itemId param)\n GET_ITEM_ROUTE,\n UPDATE_ITEM_ROUTE,\n DELETE_ITEM_ROUTE,\n // Version operations\n LIST_DATASET_VERSIONS_ROUTE,\n LIST_ITEM_VERSIONS_ROUTE,\n GET_ITEM_VERSION_ROUTE,\n // All experiments (cross-dataset) - MUST come before dataset-scoped experiments\n LIST_ALL_EXPERIMENTS_ROUTE,\n // Experiment review summary (cross-dataset) - MUST come before dataset-scoped experiments\n EXPERIMENT_REVIEW_SUMMARY_ROUTE,\n // Experiment operations (dataset-scoped)\n LIST_EXPERIMENTS_ROUTE,\n TRIGGER_EXPERIMENT_ROUTE,\n GET_EXPERIMENT_ROUTE,\n LIST_EXPERIMENT_RESULTS_ROUTE,\n UPDATE_EXPERIMENT_RESULT_ROUTE,\n // Analytics\n COMPARE_EXPERIMENTS_ROUTE,\n // AI generation\n GENERATE_ITEMS_ROUTE,\n // Failure analysis\n CLUSTER_FAILURES_ROUTE,\n] as const;\n","import {\n BUILDER_REGISTRY_INSTALL_ROUTE,\n BUILDER_REGISTRY_POPULAR_ROUTE,\n BUILDER_REGISTRY_PREVIEW_ROUTE,\n BUILDER_REGISTRY_SEARCH_ROUTE,\n LIST_BUILDER_REGISTRIES_ROUTE,\n} from '../../handlers/builder-registry';\nimport {\n GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE,\n GET_EDITOR_BUILDER_SETTINGS_ROUTE,\n GET_INFRASTRUCTURE_STATUS_ROUTE,\n} from '../../handlers/editor-builder';\n\n/**\n * Editor Builder Routes\n *\n * Routes for agent builder settings, infrastructure status, and external\n * skill registries.\n */\nexport const EDITOR_BUILDER_ROUTES = [\n GET_EDITOR_BUILDER_SETTINGS_ROUTE,\n GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE,\n GET_INFRASTRUCTURE_STATUS_ROUTE,\n LIST_BUILDER_REGISTRIES_ROUTE,\n BUILDER_REGISTRY_SEARCH_ROUTE,\n BUILDER_REGISTRY_POPULAR_ROUTE,\n BUILDER_REGISTRY_PREVIEW_ROUTE,\n BUILDER_REGISTRY_INSTALL_ROUTE,\n] as const;\n","import {\n LIST_HARNESSES_ROUTE,\n CREATE_HARNESS_SESSION_ROUTE,\n GET_HARNESS_SESSION_STATE_ROUTE,\n STREAM_HARNESS_SESSION_ROUTE,\n SEND_HARNESS_MESSAGE_ROUTE,\n STEER_HARNESS_SESSION_ROUTE,\n ABORT_HARNESS_SESSION_ROUTE,\n HARNESS_TOOL_APPROVAL_ROUTE,\n HARNESS_TOOL_SUSPENSION_ROUTE,\n SWITCH_HARNESS_MODE_ROUTE,\n SWITCH_HARNESS_MODEL_ROUTE,\n SWITCH_HARNESS_THREAD_ROUTE,\n LIST_HARNESS_MODES_ROUTE,\n LIST_HARNESS_THREADS_ROUTE,\n SEND_HARNESS_NOTIFICATION_ROUTE,\n CREATE_HARNESS_THREAD_ROUTE,\n DELETE_HARNESS_THREAD_ROUTE,\n RENAME_HARNESS_THREAD_ROUTE,\n CLONE_HARNESS_THREAD_ROUTE,\n LIST_HARNESS_THREAD_MESSAGES_ROUTE,\n FOLLOW_UP_HARNESS_SESSION_ROUTE,\n LIST_HARNESS_MODELS_ROUTE,\n GET_HARNESS_WORKSPACE_STATUS_ROUTE,\n GET_HARNESS_OM_RECORD_ROUTE,\n SET_HARNESS_RESOURCE_ID_ROUTE,\n GET_HARNESS_RESOURCE_IDS_ROUTE,\n GET_HARNESS_GOAL_ROUTE,\n SET_HARNESS_GOAL_ROUTE,\n UPDATE_HARNESS_GOAL_ROUTE,\n CLEAR_HARNESS_GOAL_ROUTE,\n GET_HARNESS_PERMISSIONS_ROUTE,\n SET_HARNESS_CATEGORY_PERMISSION_ROUTE,\n SET_HARNESS_TOOL_PERMISSION_ROUTE,\n SET_HARNESS_SESSION_STATE_ROUTE,\n} from '../../handlers/harness';\nimport type { ServerRoute } from '.';\n\nexport const HARNESS_ROUTES: readonly ServerRoute[] = [\n LIST_HARNESSES_ROUTE,\n LIST_HARNESS_MODES_ROUTE,\n LIST_HARNESS_MODELS_ROUTE,\n CREATE_HARNESS_SESSION_ROUTE,\n GET_HARNESS_SESSION_STATE_ROUTE,\n LIST_HARNESS_THREADS_ROUTE,\n CREATE_HARNESS_THREAD_ROUTE,\n DELETE_HARNESS_THREAD_ROUTE,\n RENAME_HARNESS_THREAD_ROUTE,\n CLONE_HARNESS_THREAD_ROUTE,\n LIST_HARNESS_THREAD_MESSAGES_ROUTE,\n STREAM_HARNESS_SESSION_ROUTE,\n SEND_HARNESS_MESSAGE_ROUTE,\n STEER_HARNESS_SESSION_ROUTE,\n FOLLOW_UP_HARNESS_SESSION_ROUTE,\n ABORT_HARNESS_SESSION_ROUTE,\n HARNESS_TOOL_APPROVAL_ROUTE,\n HARNESS_TOOL_SUSPENSION_ROUTE,\n SWITCH_HARNESS_MODE_ROUTE,\n SWITCH_HARNESS_MODEL_ROUTE,\n SWITCH_HARNESS_THREAD_ROUTE,\n SEND_HARNESS_NOTIFICATION_ROUTE,\n GET_HARNESS_WORKSPACE_STATUS_ROUTE,\n GET_HARNESS_OM_RECORD_ROUTE,\n SET_HARNESS_RESOURCE_ID_ROUTE,\n GET_HARNESS_RESOURCE_IDS_ROUTE,\n GET_HARNESS_GOAL_ROUTE,\n SET_HARNESS_GOAL_ROUTE,\n UPDATE_HARNESS_GOAL_ROUTE,\n CLEAR_HARNESS_GOAL_ROUTE,\n GET_HARNESS_PERMISSIONS_ROUTE,\n SET_HARNESS_CATEGORY_PERMISSION_ROUTE,\n SET_HARNESS_TOOL_PERMISSION_ROUTE,\n SET_HARNESS_SESSION_STATE_ROUTE,\n];\n","/**\n * Legacy routes that are deprecated but still exist in deployer for backward compatibility.\n * These routes should not be used in new code and will be removed in a future version.\n */\n\nimport { GENERATE_LEGACY_ROUTE, STREAM_GENERATE_LEGACY_ROUTE } from '../../handlers/agents';\nimport { STREAM_LEGACY_WORKFLOW_ROUTE, OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE } from '../../handlers/workflows';\n\nexport const LEGACY_ROUTES = [\n // ============================================================================\n // Legacy Agent Routes\n // ============================================================================\n GENERATE_LEGACY_ROUTE,\n STREAM_GENERATE_LEGACY_ROUTE,\n\n // ============================================================================\n // Legacy Workflow Routes\n // ============================================================================\n STREAM_LEGACY_WORKFLOW_ROUTE,\n OBSERVE_STREAM_LEGACY_WORKFLOW_ROUTE,\n] as const;\n","import { LIST_LOG_TRANSPORTS_ROUTE, LIST_LOGS_ROUTE, LIST_LOGS_BY_RUN_ID_ROUTE } from '../../handlers/logs';\n\nexport const LOGS_ROUTES = [LIST_LOG_TRANSPORTS_ROUTE, LIST_LOGS_ROUTE, LIST_LOGS_BY_RUN_ID_ROUTE] as const;\n","import {\n LIST_MCP_SERVERS_ROUTE,\n GET_MCP_SERVER_DETAIL_ROUTE,\n LIST_MCP_SERVER_TOOLS_ROUTE,\n GET_MCP_SERVER_TOOL_DETAIL_ROUTE,\n EXECUTE_MCP_SERVER_TOOL_ROUTE,\n LIST_MCP_SERVER_RESOURCES_ROUTE,\n READ_MCP_SERVER_RESOURCE_ROUTE,\n MCP_HTTP_TRANSPORT_ROUTE,\n MCP_SSE_TRANSPORT_ROUTE,\n MCP_SSE_MESSAGES_ROUTE,\n} from '../../handlers/mcp';\n\n/**\n * MCP Routes\n *\n * Registry routes provide access to the MCP server registry and tools.\n * Transport routes handle the MCP protocol communication (HTTP and SSE).\n */\nexport const MCP_ROUTES = [\n // ============================================================================\n // MCP Server Registry Routes\n // ============================================================================\n LIST_MCP_SERVERS_ROUTE,\n GET_MCP_SERVER_DETAIL_ROUTE,\n\n // ============================================================================\n // MCP Server Tool Routes\n // ============================================================================\n LIST_MCP_SERVER_TOOLS_ROUTE,\n GET_MCP_SERVER_TOOL_DETAIL_ROUTE,\n EXECUTE_MCP_SERVER_TOOL_ROUTE,\n\n // ============================================================================\n // MCP Server Resource Routes\n // ============================================================================\n LIST_MCP_SERVER_RESOURCES_ROUTE,\n READ_MCP_SERVER_RESOURCE_ROUTE,\n\n // ============================================================================\n // MCP Transport Routes (handled by adapters)\n // ============================================================================\n MCP_HTTP_TRANSPORT_ROUTE,\n MCP_SSE_TRANSPORT_ROUTE,\n MCP_SSE_MESSAGES_ROUTE,\n] as const;\n","import {\n GET_MEMORY_STATUS_ROUTE,\n GET_MEMORY_CONFIG_ROUTE,\n GET_OBSERVATIONAL_MEMORY_ROUTE,\n AWAIT_BUFFER_STATUS_ROUTE,\n LIST_THREADS_ROUTE,\n GET_THREAD_BY_ID_ROUTE,\n LIST_MESSAGES_ROUTE,\n GET_WORKING_MEMORY_ROUTE,\n SAVE_MESSAGES_ROUTE,\n CREATE_THREAD_ROUTE,\n UPDATE_THREAD_ROUTE,\n DELETE_THREAD_ROUTE,\n CLONE_THREAD_ROUTE,\n UPDATE_WORKING_MEMORY_ROUTE,\n DELETE_MESSAGES_ROUTE,\n SEARCH_MEMORY_ROUTE,\n GET_MEMORY_STATUS_NETWORK_ROUTE,\n LIST_THREADS_NETWORK_ROUTE,\n GET_THREAD_BY_ID_NETWORK_ROUTE,\n LIST_MESSAGES_NETWORK_ROUTE,\n SAVE_MESSAGES_NETWORK_ROUTE,\n CREATE_THREAD_NETWORK_ROUTE,\n UPDATE_THREAD_NETWORK_ROUTE,\n DELETE_THREAD_NETWORK_ROUTE,\n DELETE_MESSAGES_NETWORK_ROUTE,\n} from '../../handlers/memory';\n\nexport const MEMORY_ROUTES = [\n GET_MEMORY_STATUS_ROUTE,\n GET_MEMORY_CONFIG_ROUTE,\n GET_OBSERVATIONAL_MEMORY_ROUTE,\n AWAIT_BUFFER_STATUS_ROUTE,\n LIST_THREADS_ROUTE,\n GET_THREAD_BY_ID_ROUTE,\n LIST_MESSAGES_ROUTE,\n GET_WORKING_MEMORY_ROUTE,\n SAVE_MESSAGES_ROUTE,\n CREATE_THREAD_ROUTE,\n UPDATE_THREAD_ROUTE,\n DELETE_THREAD_ROUTE,\n CLONE_THREAD_ROUTE,\n UPDATE_WORKING_MEMORY_ROUTE,\n DELETE_MESSAGES_ROUTE,\n SEARCH_MEMORY_ROUTE,\n GET_MEMORY_STATUS_NETWORK_ROUTE,\n LIST_THREADS_NETWORK_ROUTE,\n GET_THREAD_BY_ID_NETWORK_ROUTE,\n LIST_MESSAGES_NETWORK_ROUTE,\n SAVE_MESSAGES_NETWORK_ROUTE,\n CREATE_THREAD_NETWORK_ROUTE,\n UPDATE_THREAD_NETWORK_ROUTE,\n DELETE_THREAD_NETWORK_ROUTE,\n DELETE_MESSAGES_NETWORK_ROUTE,\n] as const;\n","import {\n LIST_TRACES_ROUTE,\n LIST_TRACES_LIGHT_ROUTE,\n LIST_BRANCHES_ROUTE,\n GET_BRANCH_ROUTE,\n GET_TRACE_ROUTE,\n GET_TRACE_LIGHT_ROUTE,\n GET_SPAN_ROUTE,\n GET_TRACE_TRAJECTORY_ROUTE,\n SCORE_TRACES_ROUTE,\n LIST_SCORES_BY_SPAN_ROUTE,\n} from '../../handlers/observability';\nimport {\n LIST_METRICS,\n LIST_LOGS,\n LIST_SCORES,\n CREATE_SCORE,\n GET_SCORE,\n GET_SCORE_AGGREGATE,\n GET_SCORE_BREAKDOWN,\n GET_SCORE_TIME_SERIES,\n GET_SCORE_PERCENTILES,\n LIST_FEEDBACK,\n CREATE_FEEDBACK,\n GET_FEEDBACK_AGGREGATE,\n GET_FEEDBACK_BREAKDOWN,\n GET_FEEDBACK_TIME_SERIES,\n GET_FEEDBACK_PERCENTILES,\n GET_METRIC_AGGREGATE,\n GET_METRIC_BREAKDOWN,\n GET_METRIC_TIME_SERIES,\n GET_METRIC_PERCENTILES,\n GET_METRIC_NAMES,\n GET_METRIC_LABEL_KEYS,\n GET_METRIC_LABEL_VALUES,\n GET_ENTITY_TYPES,\n GET_ENTITY_NAMES,\n GET_SERVICE_NAMES,\n GET_ENVIRONMENTS,\n GET_TAGS,\n} from '../../handlers/observability-new-endpoints';\n\nexport const OBSERVABILITY_ROUTES = [\n // Legacy\n LIST_TRACES_ROUTE,\n LIST_TRACES_LIGHT_ROUTE,\n LIST_BRANCHES_ROUTE,\n GET_BRANCH_ROUTE,\n GET_TRACE_ROUTE,\n GET_TRACE_LIGHT_ROUTE,\n GET_SPAN_ROUTE,\n GET_TRACE_TRAJECTORY_ROUTE,\n SCORE_TRACES_ROUTE,\n LIST_SCORES_BY_SPAN_ROUTE,\n // New observability routes\n LIST_METRICS,\n LIST_LOGS,\n LIST_SCORES,\n CREATE_SCORE,\n GET_SCORE,\n GET_SCORE_AGGREGATE,\n GET_SCORE_BREAKDOWN,\n GET_SCORE_TIME_SERIES,\n GET_SCORE_PERCENTILES,\n LIST_FEEDBACK,\n CREATE_FEEDBACK,\n GET_FEEDBACK_AGGREGATE,\n GET_FEEDBACK_BREAKDOWN,\n GET_FEEDBACK_TIME_SERIES,\n GET_FEEDBACK_PERCENTILES,\n GET_METRIC_AGGREGATE,\n GET_METRIC_BREAKDOWN,\n GET_METRIC_TIME_SERIES,\n GET_METRIC_PERCENTILES,\n GET_METRIC_NAMES,\n GET_METRIC_LABEL_KEYS,\n GET_METRIC_LABEL_VALUES,\n GET_ENTITY_TYPES,\n GET_ENTITY_NAMES,\n GET_SERVICE_NAMES,\n GET_ENVIRONMENTS,\n GET_TAGS,\n] as const;\n","import { LIST_PROCESSOR_PROVIDERS_ROUTE, GET_PROCESSOR_PROVIDER_ROUTE } from '../../handlers/processor-providers';\n\nexport const PROCESSOR_PROVIDER_ROUTES = [LIST_PROCESSOR_PROVIDERS_ROUTE, GET_PROCESSOR_PROVIDER_ROUTE] as const;\n","import { LIST_PROCESSORS_ROUTE, GET_PROCESSOR_BY_ID_ROUTE, EXECUTE_PROCESSOR_ROUTE } from '../../handlers/processors';\n\nexport const PROCESSORS_ROUTES = [LIST_PROCESSORS_ROUTE, GET_PROCESSOR_BY_ID_ROUTE, EXECUTE_PROCESSOR_ROUTE] as const;\n","import { CREATE_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE } from '../../handlers/responses';\n\nexport const RESPONSES_ROUTES = [CREATE_RESPONSE_ROUTE, GET_RESPONSE_ROUTE, DELETE_RESPONSE_ROUTE] as const;\n","import {\n GET_SCHEDULE_ROUTE,\n LIST_SCHEDULES_ROUTE,\n LIST_SCHEDULE_TRIGGERS_ROUTE,\n PAUSE_SCHEDULE_ROUTE,\n RESUME_SCHEDULE_ROUTE,\n} from '../../handlers/schedules';\nimport type { ServerRoute } from '.';\n\nexport const SCHEDULES_ROUTES: ServerRoute<any, any, any>[] = [\n LIST_SCHEDULES_ROUTE,\n GET_SCHEDULE_ROUTE,\n LIST_SCHEDULE_TRIGGERS_ROUTE,\n PAUSE_SCHEDULE_ROUTE,\n RESUME_SCHEDULE_ROUTE,\n];\n","import {\n LIST_SCORERS_ROUTE,\n GET_SCORER_ROUTE,\n LIST_SCORES_BY_RUN_ID_ROUTE,\n LIST_SCORES_BY_SCORER_ID_ROUTE,\n LIST_SCORES_BY_ENTITY_ID_ROUTE,\n SAVE_SCORE_ROUTE,\n} from '../../handlers/scores';\n\nexport const SCORES_ROUTES = [\n LIST_SCORERS_ROUTE,\n GET_SCORER_ROUTE,\n LIST_SCORES_BY_RUN_ID_ROUTE,\n LIST_SCORES_BY_SCORER_ID_ROUTE,\n LIST_SCORES_BY_ENTITY_ID_ROUTE,\n SAVE_SCORE_ROUTE,\n] as const;\n","import {\n LIST_AGENT_VERSIONS_ROUTE,\n CREATE_AGENT_VERSION_ROUTE,\n GET_AGENT_VERSION_ROUTE,\n ACTIVATE_AGENT_VERSION_ROUTE,\n RESTORE_AGENT_VERSION_ROUTE,\n DELETE_AGENT_VERSION_ROUTE,\n COMPARE_AGENT_VERSIONS_ROUTE,\n} from '../../handlers/agent-versions';\nimport { FAVORITE_STORED_AGENT_ROUTE, UNFAVORITE_STORED_AGENT_ROUTE } from '../../handlers/stored-agent-favorites';\nimport {\n LIST_STORED_AGENTS_ROUTE,\n GET_STORED_AGENT_ROUTE,\n GET_STORED_AGENT_DEPENDENTS_ROUTE,\n CREATE_STORED_AGENT_ROUTE,\n UPDATE_STORED_AGENT_ROUTE,\n DELETE_STORED_AGENT_ROUTE,\n PREVIEW_INSTRUCTIONS_ROUTE,\n EXPORT_STORED_AGENT_ROUTE,\n OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE,\n} from '../../handlers/stored-agents';\nimport type { ServerRoute } from '.';\n\n/**\n * Routes for stored agents CRUD operations and version management.\n * These routes provide API access to agent configurations stored in the database,\n * enabling dynamic creation and management of agents via Mastra Studio.\n */\nexport const STORED_AGENTS_ROUTES: readonly ServerRoute[] = [\n // ============================================================================\n // Stored Agents CRUD Routes\n // IMPORTANT: Routes with literal paths (e.g., /preview-instructions) must come\n // BEFORE routes with path parameters (e.g., /:storedAgentId) to ensure correct matching.\n // ============================================================================\n LIST_STORED_AGENTS_ROUTE,\n PREVIEW_INSTRUCTIONS_ROUTE, // Must be before GET_STORED_AGENT_ROUTE\n GET_STORED_AGENT_DEPENDENTS_ROUTE, // Must be before GET_STORED_AGENT_ROUTE (longer literal)\n EXPORT_STORED_AGENT_ROUTE, // Must be before GET_STORED_AGENT_ROUTE\n OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE, // Must be before GET_STORED_AGENT_ROUTE\n GET_STORED_AGENT_ROUTE,\n CREATE_STORED_AGENT_ROUTE,\n UPDATE_STORED_AGENT_ROUTE,\n DELETE_STORED_AGENT_ROUTE,\n\n // ============================================================================\n // Agent Versions Routes\n // IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE\n // routes with path parameters (e.g., /:versionId) to ensure correct matching.\n // ============================================================================\n LIST_AGENT_VERSIONS_ROUTE,\n CREATE_AGENT_VERSION_ROUTE,\n COMPARE_AGENT_VERSIONS_ROUTE, // Must be before GET_AGENT_VERSION_ROUTE\n GET_AGENT_VERSION_ROUTE,\n ACTIVATE_AGENT_VERSION_ROUTE,\n RESTORE_AGENT_VERSION_ROUTE,\n DELETE_AGENT_VERSION_ROUTE,\n\n // ============================================================================\n // Favorites (EE)\n // ============================================================================\n FAVORITE_STORED_AGENT_ROUTE,\n UNFAVORITE_STORED_AGENT_ROUTE,\n];\n\n/**\n * Type-level tuple preserving each stored agent route's specific schema types.\n * Used by ServerRoutes to build the type-level route map.\n */\nexport type StoredAgentRoutes = readonly [\n typeof LIST_STORED_AGENTS_ROUTE,\n typeof PREVIEW_INSTRUCTIONS_ROUTE,\n typeof GET_STORED_AGENT_DEPENDENTS_ROUTE,\n typeof EXPORT_STORED_AGENT_ROUTE,\n typeof OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE,\n typeof GET_STORED_AGENT_ROUTE,\n typeof CREATE_STORED_AGENT_ROUTE,\n typeof UPDATE_STORED_AGENT_ROUTE,\n typeof DELETE_STORED_AGENT_ROUTE,\n typeof LIST_AGENT_VERSIONS_ROUTE,\n typeof CREATE_AGENT_VERSION_ROUTE,\n typeof COMPARE_AGENT_VERSIONS_ROUTE,\n typeof GET_AGENT_VERSION_ROUTE,\n typeof ACTIVATE_AGENT_VERSION_ROUTE,\n typeof RESTORE_AGENT_VERSION_ROUTE,\n typeof DELETE_AGENT_VERSION_ROUTE,\n typeof FAVORITE_STORED_AGENT_ROUTE,\n typeof UNFAVORITE_STORED_AGENT_ROUTE,\n];\n","import {\n LIST_MCP_CLIENT_VERSIONS_ROUTE,\n CREATE_MCP_CLIENT_VERSION_ROUTE,\n GET_MCP_CLIENT_VERSION_ROUTE,\n ACTIVATE_MCP_CLIENT_VERSION_ROUTE,\n RESTORE_MCP_CLIENT_VERSION_ROUTE,\n DELETE_MCP_CLIENT_VERSION_ROUTE,\n COMPARE_MCP_CLIENT_VERSIONS_ROUTE,\n} from '../../handlers/mcp-client-versions';\nimport {\n LIST_STORED_MCP_CLIENTS_ROUTE,\n GET_STORED_MCP_CLIENT_ROUTE,\n CREATE_STORED_MCP_CLIENT_ROUTE,\n UPDATE_STORED_MCP_CLIENT_ROUTE,\n DELETE_STORED_MCP_CLIENT_ROUTE,\n} from '../../handlers/stored-mcp-clients';\n\nexport const STORED_MCP_CLIENTS_ROUTES = [\n // Stored MCP Clients CRUD Routes\n LIST_STORED_MCP_CLIENTS_ROUTE,\n GET_STORED_MCP_CLIENT_ROUTE,\n CREATE_STORED_MCP_CLIENT_ROUTE,\n UPDATE_STORED_MCP_CLIENT_ROUTE,\n DELETE_STORED_MCP_CLIENT_ROUTE,\n\n // MCP Client Versions Routes\n // IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE\n // routes with path parameters (e.g., /:versionId) to ensure correct matching.\n LIST_MCP_CLIENT_VERSIONS_ROUTE,\n CREATE_MCP_CLIENT_VERSION_ROUTE,\n COMPARE_MCP_CLIENT_VERSIONS_ROUTE,\n GET_MCP_CLIENT_VERSION_ROUTE,\n ACTIVATE_MCP_CLIENT_VERSION_ROUTE,\n RESTORE_MCP_CLIENT_VERSION_ROUTE,\n DELETE_MCP_CLIENT_VERSION_ROUTE,\n] as const;\n","import {\n LIST_PROMPT_BLOCK_VERSIONS_ROUTE,\n CREATE_PROMPT_BLOCK_VERSION_ROUTE,\n GET_PROMPT_BLOCK_VERSION_ROUTE,\n ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE,\n RESTORE_PROMPT_BLOCK_VERSION_ROUTE,\n DELETE_PROMPT_BLOCK_VERSION_ROUTE,\n COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE,\n} from '../../handlers/prompt-block-versions';\nimport {\n LIST_STORED_PROMPT_BLOCKS_ROUTE,\n GET_STORED_PROMPT_BLOCK_ROUTE,\n CREATE_STORED_PROMPT_BLOCK_ROUTE,\n UPDATE_STORED_PROMPT_BLOCK_ROUTE,\n DELETE_STORED_PROMPT_BLOCK_ROUTE,\n} from '../../handlers/stored-prompt-blocks';\n\nexport const STORED_PROMPT_BLOCKS_ROUTES = [\n // Stored Prompt Blocks CRUD Routes\n LIST_STORED_PROMPT_BLOCKS_ROUTE,\n GET_STORED_PROMPT_BLOCK_ROUTE,\n CREATE_STORED_PROMPT_BLOCK_ROUTE,\n UPDATE_STORED_PROMPT_BLOCK_ROUTE,\n DELETE_STORED_PROMPT_BLOCK_ROUTE,\n\n // Prompt Block Versions Routes\n // IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE\n // routes with path parameters (e.g., /:versionId) to ensure correct matching.\n LIST_PROMPT_BLOCK_VERSIONS_ROUTE,\n CREATE_PROMPT_BLOCK_VERSION_ROUTE,\n COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE,\n GET_PROMPT_BLOCK_VERSION_ROUTE,\n ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE,\n RESTORE_PROMPT_BLOCK_VERSION_ROUTE,\n DELETE_PROMPT_BLOCK_VERSION_ROUTE,\n] as const;\n","import {\n LIST_SCORER_VERSIONS_ROUTE,\n CREATE_SCORER_VERSION_ROUTE,\n GET_SCORER_VERSION_ROUTE,\n ACTIVATE_SCORER_VERSION_ROUTE,\n RESTORE_SCORER_VERSION_ROUTE,\n DELETE_SCORER_VERSION_ROUTE,\n COMPARE_SCORER_VERSIONS_ROUTE,\n} from '../../handlers/scorer-versions';\nimport {\n LIST_STORED_SCORERS_ROUTE,\n GET_STORED_SCORER_ROUTE,\n CREATE_STORED_SCORER_ROUTE,\n UPDATE_STORED_SCORER_ROUTE,\n DELETE_STORED_SCORER_ROUTE,\n} from '../../handlers/stored-scorers';\n\nexport const STORED_SCORERS_ROUTES = [\n // Stored Scorers CRUD Routes\n LIST_STORED_SCORERS_ROUTE,\n GET_STORED_SCORER_ROUTE,\n CREATE_STORED_SCORER_ROUTE,\n UPDATE_STORED_SCORER_ROUTE,\n DELETE_STORED_SCORER_ROUTE,\n\n // Scorer Versions Routes\n // IMPORTANT: Routes with literal paths (e.g., /compare) must come BEFORE\n // routes with path parameters (e.g., /:versionId) to ensure correct matching.\n LIST_SCORER_VERSIONS_ROUTE,\n CREATE_SCORER_VERSION_ROUTE,\n COMPARE_SCORER_VERSIONS_ROUTE,\n GET_SCORER_VERSION_ROUTE,\n ACTIVATE_SCORER_VERSION_ROUTE,\n RESTORE_SCORER_VERSION_ROUTE,\n DELETE_SCORER_VERSION_ROUTE,\n] as const;\n","import { FAVORITE_STORED_SKILL_ROUTE, UNFAVORITE_STORED_SKILL_ROUTE } from '../../handlers/stored-skill-favorites';\nimport {\n LIST_STORED_SKILLS_ROUTE,\n GET_STORED_SKILL_ROUTE,\n CREATE_STORED_SKILL_ROUTE,\n UPDATE_STORED_SKILL_ROUTE,\n DELETE_STORED_SKILL_ROUTE,\n PUBLISH_STORED_SKILL_ROUTE,\n} from '../../handlers/stored-skills';\n\nexport const STORED_SKILLS_ROUTES = [\n // Stored Skills CRUD Routes\n LIST_STORED_SKILLS_ROUTE,\n GET_STORED_SKILL_ROUTE,\n CREATE_STORED_SKILL_ROUTE,\n UPDATE_STORED_SKILL_ROUTE,\n DELETE_STORED_SKILL_ROUTE,\n // Publish\n PUBLISH_STORED_SKILL_ROUTE,\n // Favorites (EE)\n FAVORITE_STORED_SKILL_ROUTE,\n UNFAVORITE_STORED_SKILL_ROUTE,\n] as const;\n","import {\n LIST_STORED_WORKSPACES_ROUTE,\n GET_STORED_WORKSPACE_ROUTE,\n CREATE_STORED_WORKSPACE_ROUTE,\n UPDATE_STORED_WORKSPACE_ROUTE,\n DELETE_STORED_WORKSPACE_ROUTE,\n} from '../../handlers/stored-workspaces';\n\nexport const STORED_WORKSPACES_ROUTES = [\n // Stored Workspaces CRUD Routes\n LIST_STORED_WORKSPACES_ROUTE,\n GET_STORED_WORKSPACE_ROUTE,\n CREATE_STORED_WORKSPACE_ROUTE,\n UPDATE_STORED_WORKSPACE_ROUTE,\n DELETE_STORED_WORKSPACE_ROUTE,\n] as const;\n","import { GET_API_SCHEMA_ROUTE, GET_SYSTEM_PACKAGES_ROUTE } from '../../handlers/system';\n\n/**\n * System Routes\n *\n * Routes for system information and diagnostics.\n */\nexport const SYSTEM_ROUTES = [GET_SYSTEM_PACKAGES_ROUTE, GET_API_SCHEMA_ROUTE] as const;\n","import {\n AUTHORIZE_TOOL_PROVIDER_ROUTE,\n DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE,\n GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE,\n GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE,\n GET_TOOL_PROVIDER_HEALTH_ROUTE,\n GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE,\n LIST_TOOL_PROVIDERS_ROUTE,\n LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE,\n LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE,\n LIST_TOOL_PROVIDER_TOOLKITS_ROUTE,\n LIST_TOOL_PROVIDER_TOOLS_ROUTE,\n TOOL_PROVIDER_CONNECTION_STATUS_ROUTE,\n UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE,\n} from '../../handlers/tool-providers';\n\nexport const TOOL_PROVIDER_ROUTES = [\n LIST_TOOL_PROVIDERS_ROUTE,\n LIST_TOOL_PROVIDER_TOOLKITS_ROUTE,\n LIST_TOOL_PROVIDER_TOOLS_ROUTE,\n GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE,\n AUTHORIZE_TOOL_PROVIDER_ROUTE,\n GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE,\n TOOL_PROVIDER_CONNECTION_STATUS_ROUTE,\n LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE,\n LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE,\n DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE,\n UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE,\n GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE,\n GET_TOOL_PROVIDER_HEALTH_ROUTE,\n] as const;\n","import { LIST_TOOLS_ROUTE, GET_TOOL_BY_ID_ROUTE, EXECUTE_TOOL_ROUTE } from '../../handlers/tools';\n\nexport const TOOLS_ROUTES = [LIST_TOOLS_ROUTE, GET_TOOL_BY_ID_ROUTE, EXECUTE_TOOL_ROUTE] as const;\n","import {\n UPSERT_VECTORS_ROUTE,\n CREATE_INDEX_ROUTE,\n QUERY_VECTORS_ROUTE,\n LIST_INDEXES_ROUTE,\n DESCRIBE_INDEX_ROUTE,\n DELETE_INDEX_ROUTE,\n LIST_VECTORS_ROUTE,\n LIST_EMBEDDERS_ROUTE,\n} from '../../handlers/vector';\n\nexport const VECTORS_ROUTES = [\n UPSERT_VECTORS_ROUTE,\n CREATE_INDEX_ROUTE,\n QUERY_VECTORS_ROUTE,\n LIST_INDEXES_ROUTE,\n DESCRIBE_INDEX_ROUTE,\n DELETE_INDEX_ROUTE,\n LIST_VECTORS_ROUTE,\n LIST_EMBEDDERS_ROUTE,\n] as const;\n","import {\n LIST_WORKFLOWS_ROUTE,\n GET_WORKFLOW_BY_ID_ROUTE,\n LIST_WORKFLOW_RUNS_ROUTE,\n GET_WORKFLOW_RUN_BY_ID_ROUTE,\n CREATE_WORKFLOW_RUN_ROUTE,\n STREAM_WORKFLOW_ROUTE,\n RESUME_STREAM_WORKFLOW_ROUTE,\n START_ASYNC_WORKFLOW_ROUTE,\n START_WORKFLOW_RUN_ROUTE,\n OBSERVE_STREAM_WORKFLOW_ROUTE,\n RESUME_ASYNC_WORKFLOW_ROUTE,\n RESUME_NO_WAIT_WORKFLOW_ROUTE,\n RESUME_WORKFLOW_ROUTE,\n CANCEL_WORKFLOW_RUN_ROUTE,\n TIME_TRAVEL_WORKFLOW_ROUTE,\n TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,\n RESTART_WORKFLOW_ROUTE,\n RESTART_ASYNC_WORKFLOW_ROUTE,\n RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,\n RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,\n TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,\n DELETE_WORKFLOW_RUN_BY_ID_ROUTE,\n EXECUTE_WORKFLOW_STEP_ROUTE,\n RECEIVE_WORKFLOW_EVENT_ROUTE,\n} from '../../handlers/workflows';\n\nexport const WORKFLOWS_ROUTES = [\n LIST_WORKFLOWS_ROUTE,\n GET_WORKFLOW_BY_ID_ROUTE,\n LIST_WORKFLOW_RUNS_ROUTE,\n GET_WORKFLOW_RUN_BY_ID_ROUTE,\n DELETE_WORKFLOW_RUN_BY_ID_ROUTE,\n CREATE_WORKFLOW_RUN_ROUTE,\n STREAM_WORKFLOW_ROUTE,\n RESUME_STREAM_WORKFLOW_ROUTE,\n START_ASYNC_WORKFLOW_ROUTE,\n START_WORKFLOW_RUN_ROUTE,\n OBSERVE_STREAM_WORKFLOW_ROUTE,\n RESUME_ASYNC_WORKFLOW_ROUTE,\n RESUME_NO_WAIT_WORKFLOW_ROUTE,\n RESUME_WORKFLOW_ROUTE,\n CANCEL_WORKFLOW_RUN_ROUTE,\n TIME_TRAVEL_WORKFLOW_ROUTE,\n TIME_TRAVEL_ASYNC_WORKFLOW_ROUTE,\n TIME_TRAVEL_STREAM_WORKFLOW_ROUTE,\n RESTART_WORKFLOW_ROUTE,\n RESTART_ASYNC_WORKFLOW_ROUTE,\n RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ROUTE,\n RESTART_ALL_ACTIVE_WORKFLOW_RUNS_ASYNC_ROUTE,\n EXECUTE_WORKFLOW_STEP_ROUTE,\n RECEIVE_WORKFLOW_EVENT_ROUTE,\n] as const;\n","/**\n * Workspace Routes\n *\n * All routes for workspace operations under /api/workspaces/*\n */\n\nimport {\n LIST_WORKSPACES_ROUTE,\n GET_WORKSPACE_ROUTE,\n WORKSPACE_FS_ROUTES,\n WORKSPACE_SEARCH_ROUTES,\n WORKSPACE_SKILLS_ROUTES,\n WORKSPACE_SKILLS_SH_ROUTES,\n} from '../../handlers/workspace';\n\nexport const WORKSPACE_ROUTES = [\n // List all workspaces route (at /api/workspaces)\n LIST_WORKSPACES_ROUTE,\n\n // Get workspace route (at /api/workspaces/:workspaceId)\n GET_WORKSPACE_ROUTE,\n\n // Filesystem routes (at /api/workspaces/:workspaceId/fs/*)\n ...WORKSPACE_FS_ROUTES,\n\n // Search routes (at /api/workspaces/:workspaceId/search, /api/workspaces/:workspaceId/index)\n ...WORKSPACE_SEARCH_ROUTES,\n\n // Skills routes (search must come before parameterized routes)\n ...WORKSPACE_SKILLS_ROUTES,\n\n // skills.sh proxy routes (at /api/workspaces/:workspaceId/skills-sh/*)\n ...WORKSPACE_SKILLS_SH_ROUTES,\n] as const;\n","import type { Mastra } from '@mastra/core';\nimport type { ToolsInput } from '@mastra/core/agent';\nimport type { FGARouteConfig, MastraFGAPermissionInput } from '@mastra/core/auth/ee';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { ApiRoute, ValidationErrorHook } from '@mastra/core/server';\nimport type * as z from 'zod/v4';\nimport type { InMemoryTaskStore } from '../../a2a/store';\nimport type { OpenAPIRoute } from '../openapi-utils';\nimport { A2A_ROUTES } from './a2a';\nimport { AGENT_BUILDER_ROUTES } from './agent-builder';\nimport { AGENTS_ROUTES } from './agents';\nimport type { AgentRoutes } from './agents';\nimport { AUTH_ROUTES } from './auth';\nimport { BACKGROUND_TASK_ROUTES } from './background-tasks';\nimport { CHANNELS_ROUTES } from './channels';\nimport { CONVERSATIONS_ROUTES } from './conversations';\nimport { DATASETS_ROUTES } from './datasets';\nimport { EDITOR_BUILDER_ROUTES } from './editor-builder';\nimport { HARNESS_ROUTES } from './harness';\nimport { LEGACY_ROUTES } from './legacy';\nimport { LOGS_ROUTES } from './logs';\nimport { MCP_ROUTES } from './mcp';\nimport { MEMORY_ROUTES } from './memory';\nimport { OBSERVABILITY_ROUTES } from './observability';\nimport { PROCESSOR_PROVIDER_ROUTES } from './processor-providers';\nimport { PROCESSORS_ROUTES } from './processors';\nimport { RESPONSES_ROUTES } from './responses';\nimport { SCHEDULES_ROUTES } from './schedules';\nimport { SCORES_ROUTES } from './scorers';\nimport { STORED_AGENTS_ROUTES } from './stored-agents';\nimport type { StoredAgentRoutes } from './stored-agents';\nimport { STORED_MCP_CLIENTS_ROUTES } from './stored-mcp-clients';\nimport { STORED_PROMPT_BLOCKS_ROUTES } from './stored-prompt-blocks';\nimport { STORED_SCORERS_ROUTES } from './stored-scorers';\nimport { STORED_SKILLS_ROUTES } from './stored-skills';\nimport { STORED_WORKSPACES_ROUTES } from './stored-workspaces';\nimport type { MastraStreamReturn } from './stream-types';\nimport { SYSTEM_ROUTES } from './system';\nimport { TOOL_PROVIDER_ROUTES } from './tool-providers';\nimport { TOOLS_ROUTES } from './tools';\nimport { VECTORS_ROUTES } from './vectors';\nimport { WORKFLOWS_ROUTES } from './workflows';\nimport { WORKSPACE_ROUTES } from './workspace';\n\n/**\n * Server context fields that are available to route handlers.\n * These are injected by the server adapters (Express, Hono, etc.)\n * Fields other than `mastra` are optional to allow direct handler testing.\n */\nexport type ServerContext = {\n mastra: Mastra;\n requestContext: RequestContext;\n registeredTools?: ToolsInput;\n taskStore?: InMemoryTaskStore;\n abortSignal: AbortSignal;\n /** The route prefix configured for the server (e.g., '/api') */\n routePrefix?: string;\n /** The web-standard Request object for accessing headers, cookies, etc. */\n request?: Request;\n};\n\n/**\n * Utility type to infer parameters from Zod schemas.\n * Merges path params, query params, and body params into a single type.\n */\nexport type InferParams<\n TPathSchema extends z.ZodTypeAny | undefined,\n TQuerySchema extends z.ZodTypeAny | undefined,\n TBodySchema extends z.ZodTypeAny | undefined,\n> = (TPathSchema extends z.ZodTypeAny ? z.infer<TPathSchema> : {}) &\n (TQuerySchema extends z.ZodTypeAny ? z.infer<TQuerySchema> : {}) &\n (TBodySchema extends z.ZodTypeAny ? z.infer<TBodySchema> : {});\n\n/**\n * All supported response types for server routes.\n * - 'json': Standard JSON response\n * - 'stream': Streaming response (SSE or raw stream)\n * - 'datastream-response': Pre-built Response object for data streams\n * - 'mcp-http': MCP Streamable HTTP transport (handled by adapter)\n * - 'mcp-sse': MCP SSE transport (handled by adapter)\n */\nexport type ResponseType = 'stream' | 'json' | 'datastream-response' | 'mcp-http' | 'mcp-sse';\n\nexport type ServerRouteHandler<\n TParams = Record<string, unknown>,\n TResponse = unknown,\n TResponseType extends ResponseType = 'json',\n> = (\n params: TParams & ServerContext,\n) => Promise<\n TResponseType extends 'stream'\n ? MastraStreamReturn\n : TResponseType extends 'datastream-response'\n ? Response\n : TResponse\n>;\n\n/**\n * Phantom type for preserving Zod schema types on routes.\n * Not present at runtime — used only for type-level inference via RouteMap.\n */\nexport interface RouteSchemas<\n TPathSchema = unknown,\n TQuerySchema = unknown,\n TBodySchema = unknown,\n TResponseSchema = unknown,\n> {\n readonly pathParams: TPathSchema;\n readonly queryParams: TQuerySchema;\n readonly body: TBodySchema;\n readonly response: TResponseSchema;\n}\n\nexport type ServerRoute<\n TParams = Record<string, unknown>,\n TResponse = unknown,\n TResponseType extends ResponseType = ResponseType,\n TSchemas extends RouteSchemas = RouteSchemas,\n TMethod extends string = string,\n TPath extends string = string,\n> = Omit<ApiRoute, 'handler' | 'createHandler' | 'method' | 'path' | 'openapi'> & {\n method: TMethod;\n path: TPath;\n responseType: TResponseType;\n streamFormat?: 'sse' | 'stream'; // Only used when responseType is 'stream', defaults to 'stream'\n sseFlushOnConnect?: boolean;\n // Method signature is bivariant in params, allowing heterogeneous route arrays\n // while still preserving specific param types on individual routes.\n handler(params: TParams & ServerContext): ReturnType<ServerRouteHandler<TParams, TResponse, TResponseType>>;\n pathParamSchema?: z.ZodSchema;\n queryParamSchema?: z.ZodSchema;\n bodySchema?: z.ZodSchema;\n responseSchema?: z.ZodSchema;\n openapi?: OpenAPIRoute; // Auto-generated OpenAPI spec for this route\n maxBodySize?: number; // Optional route-specific body size limit in bytes\n deprecated?: boolean; // Flag for deprecated routes (used for route parity, skipped in tests)\n /**\n * Permission required to access this route (EE feature).\n * If set, the user must have this permission to access the route.\n * Uses the format: `resource:action` or `resource:action:resourceId`\n *\n * When an array is provided, the user needs ANY ONE of the listed permissions\n * (logical OR). This is useful for routes that serve multiple resource types,\n * e.g. a streaming endpoint used by both runtime and stored agents.\n *\n * @example\n * requiresPermission: MastraFGAPermissions.AGENTS_READ\n * requiresPermission: MastraFGAPermissions.WORKFLOWS_EXECUTE\n */\n requiresPermission?: MastraFGAPermissionInput | MastraFGAPermissionInput[];\n /**\n * FGA authorization config for this route (EE feature).\n * If set, the user must have the specified permission on the resource.\n *\n * @example\n * fga: { resourceType: 'agent', resourceIdParam: 'agentId', permission: MastraFGAPermissions.AGENTS_EXECUTE }\n */\n fga?: FGARouteConfig;\n onValidationError?: ValidationErrorHook;\n /** @internal Phantom type — not present at runtime. Used for type-level schema inference. */\n readonly __schemas?: TSchemas;\n};\n\nexport const SERVER_ROUTES: readonly ServerRoute[] = [\n ...AGENTS_ROUTES,\n ...AUTH_ROUTES,\n ...WORKFLOWS_ROUTES,\n ...TOOLS_ROUTES,\n ...PROCESSORS_ROUTES,\n ...RESPONSES_ROUTES,\n ...CONVERSATIONS_ROUTES,\n ...MEMORY_ROUTES,\n ...SCORES_ROUTES,\n ...OBSERVABILITY_ROUTES,\n ...LOGS_ROUTES,\n ...VECTORS_ROUTES,\n ...A2A_ROUTES,\n ...WORKSPACE_ROUTES,\n ...LEGACY_ROUTES,\n ...MCP_ROUTES,\n ...STORED_AGENTS_ROUTES,\n ...STORED_MCP_CLIENTS_ROUTES,\n ...STORED_PROMPT_BLOCKS_ROUTES,\n ...STORED_SCORERS_ROUTES,\n ...STORED_WORKSPACES_ROUTES,\n ...STORED_SKILLS_ROUTES,\n ...TOOL_PROVIDER_ROUTES,\n ...PROCESSOR_PROVIDER_ROUTES,\n ...SYSTEM_ROUTES,\n ...DATASETS_ROUTES,\n ...BACKGROUND_TASK_ROUTES,\n ...EDITOR_BUILDER_ROUTES,\n ...AGENT_BUILDER_ROUTES,\n ...SCHEDULES_ROUTES,\n ...CHANNELS_ROUTES,\n ...HARNESS_ROUTES,\n];\n\n/**\n * Union type of all individual route arrays.\n * Built from the per-domain `as const` tuples to preserve each route's specific schema types.\n */\nexport type ServerRoutes = readonly [\n ...AgentRoutes,\n ...typeof AUTH_ROUTES,\n ...typeof WORKFLOWS_ROUTES,\n ...typeof TOOLS_ROUTES,\n ...typeof PROCESSORS_ROUTES,\n ...typeof RESPONSES_ROUTES,\n ...typeof CONVERSATIONS_ROUTES,\n ...typeof MEMORY_ROUTES,\n ...typeof SCORES_ROUTES,\n ...typeof OBSERVABILITY_ROUTES,\n ...typeof LOGS_ROUTES,\n ...typeof VECTORS_ROUTES,\n ...typeof A2A_ROUTES,\n ...typeof AGENT_BUILDER_ROUTES,\n ...typeof WORKSPACE_ROUTES,\n ...typeof LEGACY_ROUTES,\n ...typeof MCP_ROUTES,\n ...StoredAgentRoutes,\n ...typeof STORED_MCP_CLIENTS_ROUTES,\n ...typeof STORED_PROMPT_BLOCKS_ROUTES,\n ...typeof STORED_SCORERS_ROUTES,\n ...typeof STORED_WORKSPACES_ROUTES,\n ...typeof STORED_SKILLS_ROUTES,\n ...typeof TOOL_PROVIDER_ROUTES,\n ...typeof PROCESSOR_PROVIDER_ROUTES,\n ...typeof SYSTEM_ROUTES,\n ...typeof DATASETS_ROUTES,\n ...typeof EDITOR_BUILDER_ROUTES,\n ...typeof CHANNELS_ROUTES,\n];\n\n// Export route builder and OpenAPI utilities\nexport { createRoute, createPublicRoute, pickParams, jsonQueryParam, wrapSchemaForQueryParams } from './route-builder';\nexport { generateOpenAPIDocument } from '../openapi-utils';\n\n// Export permission utilities\nexport { derivePermission, extractResource, deriveAction, getEffectivePermission } from './permissions';\n"]}
'use strict';
var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
var chunkG54X6VE6_cjs = require('./chunk-G54X6VE6.cjs');
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
var v4 = require('zod/v4');
function getHarnessOrThrow(mastra, harnessId) {
const harness = mastra.getHarness(harnessId);
if (!harness) {
throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `harness "${harnessId}" not found` });
}
return harness;
}
async function getSession(harness, resourceId) {
await harness.init();
return harness.createSession({ resourceId });
}
var harnessIdPathParams = v4.z.object({ harnessId: v4.z.string() });
var sessionPathParams = v4.z.object({ harnessId: v4.z.string(), resourceId: v4.z.string() });
var createSessionBodySchema = v4.z.object({ resourceId: v4.z.string() });
var sendMessageBodySchema = v4.z.object({ message: v4.z.string() });
var steerBodySchema = v4.z.object({ message: v4.z.string() });
var toolApprovalBodySchema = v4.z.object({
toolCallId: v4.z.string(),
approved: v4.z.boolean()
});
var toolSuspensionBodySchema = v4.z.object({
toolCallId: v4.z.string(),
// Free-form resume payload. For ask_user this is a string (or string[] for
// multi-select); for submit_plan it's `{ action, feedback? }`; for
// request_access it's "Yes"/"No".
resumeData: v4.z.any()
});
var switchModeBodySchema = v4.z.object({ modeId: v4.z.string() });
var switchModelBodySchema = v4.z.object({
modelId: v4.z.string(),
scope: v4.z.enum(["global", "thread"]).optional(),
modeId: v4.z.string().optional()
});
var switchThreadBodySchema = v4.z.object({ threadId: v4.z.string() });
var createThreadBodySchema = v4.z.object({ title: v4.z.string().optional() });
var renameThreadBodySchema = v4.z.object({ title: v4.z.string() });
var threadPathParams = v4.z.object({ harnessId: v4.z.string(), resourceId: v4.z.string(), threadId: v4.z.string() });
var cloneThreadBodySchema = v4.z.object({
sourceThreadId: v4.z.string().optional(),
title: v4.z.string().optional()
});
var listMessagesQuerySchema = v4.z.object({ limit: v4.z.coerce.number().optional() });
var listThreadsQuerySchema = v4.z.object({ limit: v4.z.coerce.number().optional() });
var followUpBodySchema = v4.z.object({ message: v4.z.string() });
var sendNotificationBodySchema = v4.z.object({
source: v4.z.string(),
kind: v4.z.string(),
summary: v4.z.string(),
priority: v4.z.enum(["low", "medium", "high", "urgent"]).optional(),
payload: v4.z.any().optional(),
sourceId: v4.z.string().optional(),
dedupeKey: v4.z.string().optional(),
coalesceKey: v4.z.string().optional(),
attributes: v4.z.record(v4.z.string(), v4.z.unknown()).optional(),
metadata: v4.z.record(v4.z.string(), v4.z.unknown()).optional()
});
var listHarnessesResponseSchema = v4.z.object({
harnesses: v4.z.array(v4.z.object({ id: v4.z.string() }))
});
var createSessionResponseSchema = v4.z.object({
harnessId: v4.z.string(),
resourceId: v4.z.string(),
threadId: v4.z.string().optional()
});
var ackResponseSchema = v4.z.object({ ok: v4.z.boolean() });
var sessionStateResponseSchema = v4.z.object({
harnessId: v4.z.string(),
resourceId: v4.z.string(),
threadId: v4.z.string().optional(),
modeId: v4.z.string(),
modelId: v4.z.string()
});
var listModesResponseSchema = v4.z.object({
modes: v4.z.array(v4.z.object({ id: v4.z.string(), name: v4.z.string().optional() }))
});
var listThreadsResponseSchema = v4.z.object({
threads: v4.z.array(
v4.z.object({
id: v4.z.string(),
title: v4.z.string().optional(),
updatedAt: v4.z.string().optional()
})
)
});
var threadResponseSchema = v4.z.object({
id: v4.z.string(),
title: v4.z.string().optional(),
resourceId: v4.z.string().optional(),
createdAt: v4.z.string().optional(),
updatedAt: v4.z.string().optional()
});
var messageContentSchema = v4.z.object({
type: v4.z.string()
}).passthrough();
var listMessagesResponseSchema = v4.z.object({
messages: v4.z.array(
v4.z.object({
id: v4.z.string(),
role: v4.z.enum(["user", "assistant", "system"]),
content: v4.z.array(messageContentSchema),
createdAt: v4.z.string().optional()
})
)
});
var listModelsResponseSchema = v4.z.object({
models: v4.z.array(
v4.z.object({
id: v4.z.string(),
provider: v4.z.string(),
modelName: v4.z.string(),
hasApiKey: v4.z.boolean(),
useCount: v4.z.number()
})
)
});
var workspaceStatusResponseSchema = v4.z.object({
hasWorkspace: v4.z.boolean(),
isReady: v4.z.boolean()
});
var omRecordResponseSchema = v4.z.object({
record: v4.z.any().optional()
});
var permissionPolicyEnum = v4.z.enum(["allow", "ask", "deny"]);
var toolCategoryEnum = v4.z.enum(["read", "edit", "execute", "mcp", "other"]);
var permissionRulesResponseSchema = v4.z.object({
categories: v4.z.record(v4.z.string(), permissionPolicyEnum).optional(),
tools: v4.z.record(v4.z.string(), permissionPolicyEnum).optional()
});
var setCategoryPermissionBodySchema = v4.z.object({
category: toolCategoryEnum,
policy: permissionPolicyEnum
});
var setToolPermissionBodySchema = v4.z.object({
toolName: v4.z.string(),
policy: permissionPolicyEnum
});
var LIST_HARNESSES_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness",
responseType: "json",
responseSchema: listHarnessesResponseSchema,
summary: "List harnesses",
description: "Lists the harnesses hosted on this Mastra instance.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra }) => {
try {
const harnesses = mastra.listHarnesses();
return { harnesses: Object.keys(harnesses).map((id) => ({ id })) };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error listing harnesses");
}
}
});
var CREATE_HARNESS_SESSION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions",
responseType: "json",
pathParamSchema: harnessIdPathParams,
bodySchema: createSessionBodySchema,
responseSchema: createSessionResponseSchema,
summary: "Create or resume a harness session",
description: "Creates a session for the given resourceId, or returns the existing one (get-or-create), so reconnects resume the conversation.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
return {
harnessId,
resourceId,
threadId: session.thread.getId() ?? void 0
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error creating harness session");
}
}
});
var STREAM_HARNESS_SESSION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/stream",
responseType: "stream",
streamFormat: "sse",
sseFlushOnConnect: true,
pathParamSchema: sessionPathParams,
summary: "Stream harness session events",
description: "Subscribes to a session\u2019s event bus and streams events to the client over SSE.",
tags: ["Harness", "Streaming"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId, abortSignal }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
let cleanedUp = false;
let heartbeat;
let unsubscribe;
const clearHeartbeat = () => {
if (heartbeat) {
clearTimeout(heartbeat);
heartbeat = void 0;
}
};
const cleanup = (controller) => {
if (cleanedUp) return;
cleanedUp = true;
clearHeartbeat();
unsubscribe?.();
if (controller) {
try {
controller.close();
} catch {
}
}
};
return new ReadableStream({
start(controller) {
const scheduleHeartbeat = () => {
if (cleanedUp) return;
clearHeartbeat();
heartbeat = setTimeout(() => {
heartbeat = void 0;
if (cleanedUp) return;
try {
controller.enqueue(": heartbeat\n\n");
} catch {
cleanup();
return;
}
scheduleHeartbeat();
}, 25e3);
};
unsubscribe = session.subscribe((event) => {
if (cleanedUp) return;
try {
controller.enqueue(`data: ${JSON.stringify(event)}
`);
scheduleHeartbeat();
} catch {
cleanup();
}
});
const abortCleanup = () => cleanup(controller);
abortSignal?.addEventListener("abort", abortCleanup, { once: true });
scheduleHeartbeat();
},
cancel() {
cleanup();
}
});
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error streaming harness session");
}
}
});
var SEND_HARNESS_MESSAGE_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/messages",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: sendMessageBodySchema,
responseSchema: ackResponseSchema,
summary: "Send a message to a harness session",
description: "Sends a user message to the session. The reply streams as events on the session\u2019s SSE stream.",
tags: ["Harness", "Streaming"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, message }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
void session.sendMessage({ content: message });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error sending harness message");
}
}
});
var ABORT_HARNESS_SESSION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/abort",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: ackResponseSchema,
summary: "Abort a harness session run",
description: "Aborts the in-flight run for the session, if any.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
session.abort();
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error aborting harness session");
}
}
});
var HARNESS_TOOL_APPROVAL_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/tool-approval",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: toolApprovalBodySchema,
responseSchema: ackResponseSchema,
summary: "Respond to a harness tool approval",
description: "Approves or declines a pending tool call surfaced by the session.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, toolCallId, approved }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
session.respondToToolApproval({ toolCallId, decision: approved ? "approve" : "decline" });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error responding to harness tool approval");
}
}
});
var HARNESS_TOOL_SUSPENSION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/tool-suspension",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: toolSuspensionBodySchema,
responseSchema: ackResponseSchema,
summary: "Respond to a suspended harness tool",
description: "Resumes a suspended interactive tool (ask_user, request_access, submit_plan) with the provided resume data.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, toolCallId, resumeData }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.respondToToolSuspension({ toolCallId, resumeData });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error responding to harness tool suspension");
}
}
});
var STEER_HARNESS_SESSION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/steer",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: steerBodySchema,
responseSchema: ackResponseSchema,
summary: "Steer the in-flight run",
description: "Injects a message into the running turn (interjection) without starting a new run.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, message }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
void session.steer({ content: message });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error steering harness session");
}
}
});
var SWITCH_HARNESS_MODE_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/mode",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: switchModeBodySchema,
responseSchema: ackResponseSchema,
summary: "Switch the session mode",
description: "Switches the active mode (e.g. build, plan) for the session.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, modeId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.mode.switch({ modeId });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error switching harness mode");
}
}
});
var SWITCH_HARNESS_MODEL_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/model",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: switchModelBodySchema,
responseSchema: ackResponseSchema,
summary: "Switch the session model",
description: "Switches the model for the session, scoped to the thread by default.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, modelId, scope, modeId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.model.switch({ modelId, scope, modeId });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error switching harness model");
}
}
});
var SWITCH_HARNESS_THREAD_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/thread",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: switchThreadBodySchema,
responseSchema: ackResponseSchema,
summary: "Switch the session thread",
description: "Switches the session to an existing thread (rebinding its stream and state).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, threadId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.thread.switch({ threadId });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error switching harness thread");
}
}
});
var GET_HARNESS_SESSION_STATE_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: sessionStateResponseSchema,
summary: "Get session state",
description: "Returns the current mode, model, and thread for the session (for initial UI hydration).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
return {
harnessId,
resourceId,
threadId: session.thread.getId() ?? void 0,
modeId: session.mode.get(),
modelId: session.model.get()
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error reading harness session state");
}
}
});
var LIST_HARNESS_MODES_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/modes",
responseType: "json",
pathParamSchema: harnessIdPathParams,
responseSchema: listModesResponseSchema,
summary: "List harness modes",
description: "Lists the modes configured on the harness (e.g. build, plan).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
return {
modes: harness.listModes().map((mode) => ({ id: mode.id, name: mode.name }))
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error listing harness modes");
}
}
});
var LIST_HARNESS_THREADS_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/threads",
responseType: "json",
pathParamSchema: sessionPathParams,
queryParamSchema: listThreadsQuerySchema,
responseSchema: listThreadsResponseSchema,
summary: "List session threads",
description: "Lists the threads for the session\u2019s resource, most-recently-updated first. Pass `limit` to return only the newest N (e.g. for a sidebar).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId, limit }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threads = await session.thread.list();
const toTime = (t) => (t.updatedAt ?? t.createdAt)?.getTime() ?? 0;
const sorted = [...threads].sort((a, b) => toTime(b) - toTime(a));
const max = Number(limit);
const limited = Number.isFinite(max) && max > 0 ? sorted.slice(0, max) : sorted;
return {
threads: limited.map((t) => ({
id: t.id,
title: t.title,
updatedAt: t.updatedAt instanceof Date ? t.updatedAt.toISOString() : void 0
}))
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error listing harness threads");
}
}
});
var SEND_HARNESS_NOTIFICATION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/notifications",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: sendNotificationBodySchema,
responseSchema: v4.z.object({
accepted: v4.z.boolean(),
notificationId: v4.z.string().optional(),
decision: v4.z.string().optional(),
runId: v4.z.string().optional()
}),
summary: "Send a notification signal to a session",
description: "Delivers a notification to the session\u2019s current agent/thread. The agent\u2019s delivery policy determines whether the notification wakes an idle thread, is summarised, or is persisted for later.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({
mastra,
harnessId,
resourceId,
source,
kind,
summary,
priority,
payload,
sourceId,
dedupeKey,
coalesceKey,
attributes,
metadata
}) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const result = await session.sendNotificationSignal({
source,
kind,
summary,
priority,
payload,
sourceId,
dedupeKey,
coalesceKey,
attributes,
metadata
});
return {
accepted: result.accepted !== void 0,
notificationId: result.record?.id,
decision: result.decision?.action,
runId: result.runId
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error sending harness notification");
}
}
});
var CREATE_HARNESS_THREAD_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/threads",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: createThreadBodySchema,
responseSchema: threadResponseSchema,
summary: "Create a new thread",
description: "Creates a new thread in the session (unbinds the previous thread, binds the new one).",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, title }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const thread = await session.thread.create({ title });
return {
id: thread.id,
title: thread.title,
resourceId: thread.resourceId,
createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : void 0,
updatedAt: thread.updatedAt instanceof Date ? thread.updatedAt.toISOString() : void 0
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error creating harness thread");
}
}
});
var DELETE_HARNESS_THREAD_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "DELETE",
path: "/harness/:harnessId/sessions/:resourceId/threads/:threadId",
responseType: "json",
pathParamSchema: threadPathParams,
responseSchema: ackResponseSchema,
summary: "Delete a thread",
description: "Deletes a thread. If the deleted thread is the active one, the session is unbound.",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, threadId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.thread.delete({ threadId });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error deleting harness thread");
}
}
});
var RENAME_HARNESS_THREAD_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/threads/:threadId",
responseType: "json",
pathParamSchema: threadPathParams,
bodySchema: renameThreadBodySchema,
responseSchema: ackResponseSchema,
summary: "Rename a thread",
description: "Renames the specified thread.",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, threadId, title }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
if (session.thread.getId() !== threadId) {
await session.thread.switch({ threadId });
}
await session.thread.rename({ title });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error renaming harness thread");
}
}
});
var CLONE_HARNESS_THREAD_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/threads/clone",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: cloneThreadBodySchema,
responseSchema: threadResponseSchema,
summary: "Clone a thread",
description: "Clones a thread (and its messages). The session binds to the new clone.",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, sourceThreadId, title }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const thread = await session.thread.clone({ sourceThreadId, title });
return {
id: thread.id,
title: thread.title,
resourceId: thread.resourceId,
createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : void 0,
updatedAt: thread.updatedAt instanceof Date ? thread.updatedAt.toISOString() : void 0
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error cloning harness thread");
}
}
});
var LIST_HARNESS_THREAD_MESSAGES_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/threads/:threadId/messages",
responseType: "json",
pathParamSchema: threadPathParams,
queryParamSchema: listMessagesQuerySchema,
responseSchema: listMessagesResponseSchema,
summary: "List thread messages",
description: "Lists messages for a specific thread. Returns most recent messages first.",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId, threadId, limit }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const messages = await session.thread.listMessages({ threadId, limit });
return {
messages: messages.map((m) => ({
id: m.id,
role: m.role,
content: m.content,
createdAt: m.createdAt instanceof Date ? m.createdAt.toISOString() : void 0
}))
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error listing harness thread messages");
}
}
});
var FOLLOW_UP_HARNESS_SESSION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/follow-up",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: followUpBodySchema,
responseSchema: ackResponseSchema,
summary: "Queue a follow-up message",
description: "Queues a follow-up message. If the session is idle it sends immediately; if a run is active it queues for after completion.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, message }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
void session.followUp({ content: message });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error queuing harness follow-up");
}
}
});
var LIST_HARNESS_MODELS_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/models",
responseType: "json",
pathParamSchema: harnessIdPathParams,
responseSchema: listModelsResponseSchema,
summary: "List available models",
description: "Lists all models available on this harness (with auth status and use counts).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
await harness.init();
const models = await harness.listAvailableModels();
return {
models: models.map((m) => ({
id: m.id,
provider: m.provider,
modelName: m.modelName,
hasApiKey: m.hasApiKey,
useCount: m.useCount
}))
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error listing harness models");
}
}
});
var GET_HARNESS_WORKSPACE_STATUS_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/workspace",
responseType: "json",
pathParamSchema: harnessIdPathParams,
responseSchema: workspaceStatusResponseSchema,
summary: "Get workspace status",
description: "Returns whether the harness has a workspace configured and whether it is ready.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
await harness.init();
return {
hasWorkspace: harness.hasWorkspace(),
isReady: harness.isWorkspaceReady()
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error reading harness workspace status");
}
}
});
var GET_HARNESS_OM_RECORD_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/om",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: omRecordResponseSchema,
summary: "Get observational memory record",
description: "Returns the current observational memory record for the session\u2019s thread/resource.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const record = await harness.getObservationalMemoryRecord(session);
return { record: record ?? void 0 };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error reading harness OM record");
}
}
});
var SET_HARNESS_RESOURCE_ID_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/resource",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: v4.z.object({ newResourceId: v4.z.string() }),
responseSchema: ackResponseSchema,
summary: "Change the session resource ID",
description: "Updates the session\u2019s resource identity (e.g. when a user logs in).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, newResourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await harness.setResourceId(session, { resourceId: newResourceId });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error setting harness resource ID");
}
}
});
var GET_HARNESS_RESOURCE_IDS_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/resources",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: v4.z.object({ resourceIds: v4.z.array(v4.z.string()) }),
summary: "Get known resource IDs",
description: "Lists the resource IDs known to this session (from threads).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const resourceIds = await harness.getKnownResourceIds(session);
return { resourceIds };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error listing harness resource IDs");
}
}
});
var setGoalBodySchema = v4.z.object({
objective: v4.z.string(),
judgeModelId: v4.z.string().optional(),
maxRuns: v4.z.number().optional()
});
var updateGoalBodySchema = v4.z.object({
judgeModelId: v4.z.string().optional(),
maxRuns: v4.z.number().optional(),
status: v4.z.enum(["active", "paused", "done"]).optional()
});
var goalRecordSchema = v4.z.object({
id: v4.z.string().optional(),
objective: v4.z.string(),
status: v4.z.enum(["active", "paused", "done"]),
runsUsed: v4.z.number(),
maxRuns: v4.z.number().optional(),
judgeModelId: v4.z.string().optional(),
startedAt: v4.z.number(),
updatedAt: v4.z.number(),
pausedReason: v4.z.string().optional()
});
var goalResponseSchema = v4.z.object({ goal: goalRecordSchema.optional() });
function getAgentForSession(harness, session) {
return harness.getCurrentAgent(session);
}
var GET_HARNESS_GOAL_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/goal",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: goalResponseSchema,
summary: "Get the current goal",
description: "Returns the active/paused/done goal objective for the session\u2019s thread, if any.",
tags: ["Harness", "Goals"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threadId = session.thread.getId();
if (!threadId) return { goal: void 0 };
const agent = getAgentForSession(harness, session);
const record = await agent.getObjective({ threadId });
return { goal: record ?? void 0 };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error reading harness goal");
}
}
});
var SET_HARNESS_GOAL_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/goal",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: setGoalBodySchema,
responseSchema: goalResponseSchema,
summary: "Set a goal",
description: "Sets a new objective for the session\u2019s thread. The agent\u2019s in-loop goal judge evaluates progress after each turn.",
tags: ["Harness", "Goals"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, objective, judgeModelId, maxRuns }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threadId = session.thread.getId();
if (!threadId) throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "session has no active thread" });
const agent = getAgentForSession(harness, session);
const record = await agent.setObjective(objective, {
threadId,
resourceId: session.identity.getResourceId(),
...judgeModelId ? { judgeModelId } : {},
...maxRuns != null ? { maxRuns } : {}
});
return { goal: record ?? void 0 };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error setting harness goal");
}
}
});
var UPDATE_HARNESS_GOAL_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/goal",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: updateGoalBodySchema,
responseSchema: goalResponseSchema,
summary: "Update goal options",
description: "Updates the judge model, max runs, or status of the active goal. No-op when no goal is set.",
tags: ["Harness", "Goals"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, judgeModelId, maxRuns, status }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threadId = session.thread.getId();
if (!threadId) throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "session has no active thread" });
const agent = getAgentForSession(harness, session);
const record = await agent.updateObjectiveOptions({
threadId,
...judgeModelId !== void 0 ? { judgeModelId } : {},
...maxRuns !== void 0 ? { maxRuns } : {},
...status !== void 0 ? { status } : {}
});
return { goal: record ?? void 0 };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error updating harness goal");
}
}
});
var CLEAR_HARNESS_GOAL_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "DELETE",
path: "/harness/:harnessId/sessions/:resourceId/goal",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: ackResponseSchema,
summary: "Clear the goal",
description: "Removes the active goal from the session\u2019s thread.",
tags: ["Harness", "Goals"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threadId = session.thread.getId();
if (!threadId) throw new chunk64ITUOXI_cjs.HTTPException(400, { message: "session has no active thread" });
const agent = getAgentForSession(harness, session);
await agent.clearObjective({ threadId });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error clearing harness goal");
}
}
});
var GET_HARNESS_PERMISSIONS_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/permissions",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: permissionRulesResponseSchema,
summary: "Get permission rules",
description: "Returns the current permission rules (per-category and per-tool policies) for the session.",
tags: ["Harness", "Permissions"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const rules = session.permissions.getRules();
return {
categories: rules.categories,
tools: rules.tools
};
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error getting harness permissions");
}
}
});
var SET_HARNESS_CATEGORY_PERMISSION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/permissions/category",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: setCategoryPermissionBodySchema,
responseSchema: ackResponseSchema,
summary: "Set permission for a tool category",
description: "Sets the approval policy (allow/ask/deny) for all tools in a category.",
tags: ["Harness", "Permissions"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, category, policy }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.permissions.setForCategory({ category, policy });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error setting harness category permission");
}
}
});
var SET_HARNESS_TOOL_PERMISSION_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/permissions/tool",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: setToolPermissionBodySchema,
responseSchema: ackResponseSchema,
summary: "Set permission for a specific tool",
description: "Sets the approval policy (allow/ask/deny) for a specific tool by name. Per-tool overrides take precedence over category policies.",
tags: ["Harness", "Permissions"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, toolName, policy }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.permissions.setForTool({ toolName, policy });
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error setting harness tool permission");
}
}
});
var setSessionStateBodySchema = v4.z.object({ state: v4.z.record(v4.z.string(), v4.z.unknown()) });
var SET_HARNESS_SESSION_STATE_ROUTE = chunkG54X6VE6_cjs.createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/state",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: setSessionStateBodySchema,
responseSchema: ackResponseSchema,
summary: "Set session state",
description: "Merges the provided key-value pairs into the session state. Existing keys not in the payload are preserved.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, state }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.state.set(state);
return { ok: true };
} catch (error) {
return chunkZ7LCIYK7_cjs.handleError(error, "error setting harness session state");
}
}
});
exports.ABORT_HARNESS_SESSION_ROUTE = ABORT_HARNESS_SESSION_ROUTE;
exports.CLEAR_HARNESS_GOAL_ROUTE = CLEAR_HARNESS_GOAL_ROUTE;
exports.CLONE_HARNESS_THREAD_ROUTE = CLONE_HARNESS_THREAD_ROUTE;
exports.CREATE_HARNESS_SESSION_ROUTE = CREATE_HARNESS_SESSION_ROUTE;
exports.CREATE_HARNESS_THREAD_ROUTE = CREATE_HARNESS_THREAD_ROUTE;
exports.DELETE_HARNESS_THREAD_ROUTE = DELETE_HARNESS_THREAD_ROUTE;
exports.FOLLOW_UP_HARNESS_SESSION_ROUTE = FOLLOW_UP_HARNESS_SESSION_ROUTE;
exports.GET_HARNESS_GOAL_ROUTE = GET_HARNESS_GOAL_ROUTE;
exports.GET_HARNESS_OM_RECORD_ROUTE = GET_HARNESS_OM_RECORD_ROUTE;
exports.GET_HARNESS_PERMISSIONS_ROUTE = GET_HARNESS_PERMISSIONS_ROUTE;
exports.GET_HARNESS_RESOURCE_IDS_ROUTE = GET_HARNESS_RESOURCE_IDS_ROUTE;
exports.GET_HARNESS_SESSION_STATE_ROUTE = GET_HARNESS_SESSION_STATE_ROUTE;
exports.GET_HARNESS_WORKSPACE_STATUS_ROUTE = GET_HARNESS_WORKSPACE_STATUS_ROUTE;
exports.HARNESS_TOOL_APPROVAL_ROUTE = HARNESS_TOOL_APPROVAL_ROUTE;
exports.HARNESS_TOOL_SUSPENSION_ROUTE = HARNESS_TOOL_SUSPENSION_ROUTE;
exports.LIST_HARNESSES_ROUTE = LIST_HARNESSES_ROUTE;
exports.LIST_HARNESS_MODELS_ROUTE = LIST_HARNESS_MODELS_ROUTE;
exports.LIST_HARNESS_MODES_ROUTE = LIST_HARNESS_MODES_ROUTE;
exports.LIST_HARNESS_THREADS_ROUTE = LIST_HARNESS_THREADS_ROUTE;
exports.LIST_HARNESS_THREAD_MESSAGES_ROUTE = LIST_HARNESS_THREAD_MESSAGES_ROUTE;
exports.RENAME_HARNESS_THREAD_ROUTE = RENAME_HARNESS_THREAD_ROUTE;
exports.SEND_HARNESS_MESSAGE_ROUTE = SEND_HARNESS_MESSAGE_ROUTE;
exports.SEND_HARNESS_NOTIFICATION_ROUTE = SEND_HARNESS_NOTIFICATION_ROUTE;
exports.SET_HARNESS_CATEGORY_PERMISSION_ROUTE = SET_HARNESS_CATEGORY_PERMISSION_ROUTE;
exports.SET_HARNESS_GOAL_ROUTE = SET_HARNESS_GOAL_ROUTE;
exports.SET_HARNESS_RESOURCE_ID_ROUTE = SET_HARNESS_RESOURCE_ID_ROUTE;
exports.SET_HARNESS_SESSION_STATE_ROUTE = SET_HARNESS_SESSION_STATE_ROUTE;
exports.SET_HARNESS_TOOL_PERMISSION_ROUTE = SET_HARNESS_TOOL_PERMISSION_ROUTE;
exports.STEER_HARNESS_SESSION_ROUTE = STEER_HARNESS_SESSION_ROUTE;
exports.STREAM_HARNESS_SESSION_ROUTE = STREAM_HARNESS_SESSION_ROUTE;
exports.SWITCH_HARNESS_MODEL_ROUTE = SWITCH_HARNESS_MODEL_ROUTE;
exports.SWITCH_HARNESS_MODE_ROUTE = SWITCH_HARNESS_MODE_ROUTE;
exports.SWITCH_HARNESS_THREAD_ROUTE = SWITCH_HARNESS_THREAD_ROUTE;
exports.UPDATE_HARNESS_GOAL_ROUTE = UPDATE_HARNESS_GOAL_ROUTE;
//# sourceMappingURL=chunk-I6AIWII6.cjs.map
//# sourceMappingURL=chunk-I6AIWII6.cjs.map

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

import { handleError } from './chunk-7ZWJX3AN.js';
import { createRoute } from './chunk-BRC4XSFG.js';
import { HTTPException } from './chunk-6QWQZI4Q.js';
import { z } from 'zod/v4';
function getHarnessOrThrow(mastra, harnessId) {
const harness = mastra.getHarness(harnessId);
if (!harness) {
throw new HTTPException(404, { message: `harness "${harnessId}" not found` });
}
return harness;
}
async function getSession(harness, resourceId) {
await harness.init();
return harness.createSession({ resourceId });
}
var harnessIdPathParams = z.object({ harnessId: z.string() });
var sessionPathParams = z.object({ harnessId: z.string(), resourceId: z.string() });
var createSessionBodySchema = z.object({ resourceId: z.string() });
var sendMessageBodySchema = z.object({ message: z.string() });
var steerBodySchema = z.object({ message: z.string() });
var toolApprovalBodySchema = z.object({
toolCallId: z.string(),
approved: z.boolean()
});
var toolSuspensionBodySchema = z.object({
toolCallId: z.string(),
// Free-form resume payload. For ask_user this is a string (or string[] for
// multi-select); for submit_plan it's `{ action, feedback? }`; for
// request_access it's "Yes"/"No".
resumeData: z.any()
});
var switchModeBodySchema = z.object({ modeId: z.string() });
var switchModelBodySchema = z.object({
modelId: z.string(),
scope: z.enum(["global", "thread"]).optional(),
modeId: z.string().optional()
});
var switchThreadBodySchema = z.object({ threadId: z.string() });
var createThreadBodySchema = z.object({ title: z.string().optional() });
var renameThreadBodySchema = z.object({ title: z.string() });
var threadPathParams = z.object({ harnessId: z.string(), resourceId: z.string(), threadId: z.string() });
var cloneThreadBodySchema = z.object({
sourceThreadId: z.string().optional(),
title: z.string().optional()
});
var listMessagesQuerySchema = z.object({ limit: z.coerce.number().optional() });
var listThreadsQuerySchema = z.object({ limit: z.coerce.number().optional() });
var followUpBodySchema = z.object({ message: z.string() });
var sendNotificationBodySchema = z.object({
source: z.string(),
kind: z.string(),
summary: z.string(),
priority: z.enum(["low", "medium", "high", "urgent"]).optional(),
payload: z.any().optional(),
sourceId: z.string().optional(),
dedupeKey: z.string().optional(),
coalesceKey: z.string().optional(),
attributes: z.record(z.string(), z.unknown()).optional(),
metadata: z.record(z.string(), z.unknown()).optional()
});
var listHarnessesResponseSchema = z.object({
harnesses: z.array(z.object({ id: z.string() }))
});
var createSessionResponseSchema = z.object({
harnessId: z.string(),
resourceId: z.string(),
threadId: z.string().optional()
});
var ackResponseSchema = z.object({ ok: z.boolean() });
var sessionStateResponseSchema = z.object({
harnessId: z.string(),
resourceId: z.string(),
threadId: z.string().optional(),
modeId: z.string(),
modelId: z.string()
});
var listModesResponseSchema = z.object({
modes: z.array(z.object({ id: z.string(), name: z.string().optional() }))
});
var listThreadsResponseSchema = z.object({
threads: z.array(
z.object({
id: z.string(),
title: z.string().optional(),
updatedAt: z.string().optional()
})
)
});
var threadResponseSchema = z.object({
id: z.string(),
title: z.string().optional(),
resourceId: z.string().optional(),
createdAt: z.string().optional(),
updatedAt: z.string().optional()
});
var messageContentSchema = z.object({
type: z.string()
}).passthrough();
var listMessagesResponseSchema = z.object({
messages: z.array(
z.object({
id: z.string(),
role: z.enum(["user", "assistant", "system"]),
content: z.array(messageContentSchema),
createdAt: z.string().optional()
})
)
});
var listModelsResponseSchema = z.object({
models: z.array(
z.object({
id: z.string(),
provider: z.string(),
modelName: z.string(),
hasApiKey: z.boolean(),
useCount: z.number()
})
)
});
var workspaceStatusResponseSchema = z.object({
hasWorkspace: z.boolean(),
isReady: z.boolean()
});
var omRecordResponseSchema = z.object({
record: z.any().optional()
});
var permissionPolicyEnum = z.enum(["allow", "ask", "deny"]);
var toolCategoryEnum = z.enum(["read", "edit", "execute", "mcp", "other"]);
var permissionRulesResponseSchema = z.object({
categories: z.record(z.string(), permissionPolicyEnum).optional(),
tools: z.record(z.string(), permissionPolicyEnum).optional()
});
var setCategoryPermissionBodySchema = z.object({
category: toolCategoryEnum,
policy: permissionPolicyEnum
});
var setToolPermissionBodySchema = z.object({
toolName: z.string(),
policy: permissionPolicyEnum
});
var LIST_HARNESSES_ROUTE = createRoute({
method: "GET",
path: "/harness",
responseType: "json",
responseSchema: listHarnessesResponseSchema,
summary: "List harnesses",
description: "Lists the harnesses hosted on this Mastra instance.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra }) => {
try {
const harnesses = mastra.listHarnesses();
return { harnesses: Object.keys(harnesses).map((id) => ({ id })) };
} catch (error) {
return handleError(error, "error listing harnesses");
}
}
});
var CREATE_HARNESS_SESSION_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions",
responseType: "json",
pathParamSchema: harnessIdPathParams,
bodySchema: createSessionBodySchema,
responseSchema: createSessionResponseSchema,
summary: "Create or resume a harness session",
description: "Creates a session for the given resourceId, or returns the existing one (get-or-create), so reconnects resume the conversation.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
return {
harnessId,
resourceId,
threadId: session.thread.getId() ?? void 0
};
} catch (error) {
return handleError(error, "error creating harness session");
}
}
});
var STREAM_HARNESS_SESSION_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/stream",
responseType: "stream",
streamFormat: "sse",
sseFlushOnConnect: true,
pathParamSchema: sessionPathParams,
summary: "Stream harness session events",
description: "Subscribes to a session\u2019s event bus and streams events to the client over SSE.",
tags: ["Harness", "Streaming"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId, abortSignal }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
let cleanedUp = false;
let heartbeat;
let unsubscribe;
const clearHeartbeat = () => {
if (heartbeat) {
clearTimeout(heartbeat);
heartbeat = void 0;
}
};
const cleanup = (controller) => {
if (cleanedUp) return;
cleanedUp = true;
clearHeartbeat();
unsubscribe?.();
if (controller) {
try {
controller.close();
} catch {
}
}
};
return new ReadableStream({
start(controller) {
const scheduleHeartbeat = () => {
if (cleanedUp) return;
clearHeartbeat();
heartbeat = setTimeout(() => {
heartbeat = void 0;
if (cleanedUp) return;
try {
controller.enqueue(": heartbeat\n\n");
} catch {
cleanup();
return;
}
scheduleHeartbeat();
}, 25e3);
};
unsubscribe = session.subscribe((event) => {
if (cleanedUp) return;
try {
controller.enqueue(`data: ${JSON.stringify(event)}
`);
scheduleHeartbeat();
} catch {
cleanup();
}
});
const abortCleanup = () => cleanup(controller);
abortSignal?.addEventListener("abort", abortCleanup, { once: true });
scheduleHeartbeat();
},
cancel() {
cleanup();
}
});
} catch (error) {
return handleError(error, "error streaming harness session");
}
}
});
var SEND_HARNESS_MESSAGE_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/messages",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: sendMessageBodySchema,
responseSchema: ackResponseSchema,
summary: "Send a message to a harness session",
description: "Sends a user message to the session. The reply streams as events on the session\u2019s SSE stream.",
tags: ["Harness", "Streaming"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, message }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
void session.sendMessage({ content: message });
return { ok: true };
} catch (error) {
return handleError(error, "error sending harness message");
}
}
});
var ABORT_HARNESS_SESSION_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/abort",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: ackResponseSchema,
summary: "Abort a harness session run",
description: "Aborts the in-flight run for the session, if any.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
session.abort();
return { ok: true };
} catch (error) {
return handleError(error, "error aborting harness session");
}
}
});
var HARNESS_TOOL_APPROVAL_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/tool-approval",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: toolApprovalBodySchema,
responseSchema: ackResponseSchema,
summary: "Respond to a harness tool approval",
description: "Approves or declines a pending tool call surfaced by the session.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, toolCallId, approved }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
session.respondToToolApproval({ toolCallId, decision: approved ? "approve" : "decline" });
return { ok: true };
} catch (error) {
return handleError(error, "error responding to harness tool approval");
}
}
});
var HARNESS_TOOL_SUSPENSION_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/tool-suspension",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: toolSuspensionBodySchema,
responseSchema: ackResponseSchema,
summary: "Respond to a suspended harness tool",
description: "Resumes a suspended interactive tool (ask_user, request_access, submit_plan) with the provided resume data.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, toolCallId, resumeData }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.respondToToolSuspension({ toolCallId, resumeData });
return { ok: true };
} catch (error) {
return handleError(error, "error responding to harness tool suspension");
}
}
});
var STEER_HARNESS_SESSION_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/steer",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: steerBodySchema,
responseSchema: ackResponseSchema,
summary: "Steer the in-flight run",
description: "Injects a message into the running turn (interjection) without starting a new run.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, message }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
void session.steer({ content: message });
return { ok: true };
} catch (error) {
return handleError(error, "error steering harness session");
}
}
});
var SWITCH_HARNESS_MODE_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/mode",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: switchModeBodySchema,
responseSchema: ackResponseSchema,
summary: "Switch the session mode",
description: "Switches the active mode (e.g. build, plan) for the session.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, modeId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.mode.switch({ modeId });
return { ok: true };
} catch (error) {
return handleError(error, "error switching harness mode");
}
}
});
var SWITCH_HARNESS_MODEL_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/model",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: switchModelBodySchema,
responseSchema: ackResponseSchema,
summary: "Switch the session model",
description: "Switches the model for the session, scoped to the thread by default.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, modelId, scope, modeId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.model.switch({ modelId, scope, modeId });
return { ok: true };
} catch (error) {
return handleError(error, "error switching harness model");
}
}
});
var SWITCH_HARNESS_THREAD_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/thread",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: switchThreadBodySchema,
responseSchema: ackResponseSchema,
summary: "Switch the session thread",
description: "Switches the session to an existing thread (rebinding its stream and state).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, threadId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.thread.switch({ threadId });
return { ok: true };
} catch (error) {
return handleError(error, "error switching harness thread");
}
}
});
var GET_HARNESS_SESSION_STATE_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: sessionStateResponseSchema,
summary: "Get session state",
description: "Returns the current mode, model, and thread for the session (for initial UI hydration).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
return {
harnessId,
resourceId,
threadId: session.thread.getId() ?? void 0,
modeId: session.mode.get(),
modelId: session.model.get()
};
} catch (error) {
return handleError(error, "error reading harness session state");
}
}
});
var LIST_HARNESS_MODES_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/modes",
responseType: "json",
pathParamSchema: harnessIdPathParams,
responseSchema: listModesResponseSchema,
summary: "List harness modes",
description: "Lists the modes configured on the harness (e.g. build, plan).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
return {
modes: harness.listModes().map((mode) => ({ id: mode.id, name: mode.name }))
};
} catch (error) {
return handleError(error, "error listing harness modes");
}
}
});
var LIST_HARNESS_THREADS_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/threads",
responseType: "json",
pathParamSchema: sessionPathParams,
queryParamSchema: listThreadsQuerySchema,
responseSchema: listThreadsResponseSchema,
summary: "List session threads",
description: "Lists the threads for the session\u2019s resource, most-recently-updated first. Pass `limit` to return only the newest N (e.g. for a sidebar).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId, limit }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threads = await session.thread.list();
const toTime = (t) => (t.updatedAt ?? t.createdAt)?.getTime() ?? 0;
const sorted = [...threads].sort((a, b) => toTime(b) - toTime(a));
const max = Number(limit);
const limited = Number.isFinite(max) && max > 0 ? sorted.slice(0, max) : sorted;
return {
threads: limited.map((t) => ({
id: t.id,
title: t.title,
updatedAt: t.updatedAt instanceof Date ? t.updatedAt.toISOString() : void 0
}))
};
} catch (error) {
return handleError(error, "error listing harness threads");
}
}
});
var SEND_HARNESS_NOTIFICATION_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/notifications",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: sendNotificationBodySchema,
responseSchema: z.object({
accepted: z.boolean(),
notificationId: z.string().optional(),
decision: z.string().optional(),
runId: z.string().optional()
}),
summary: "Send a notification signal to a session",
description: "Delivers a notification to the session\u2019s current agent/thread. The agent\u2019s delivery policy determines whether the notification wakes an idle thread, is summarised, or is persisted for later.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({
mastra,
harnessId,
resourceId,
source,
kind,
summary,
priority,
payload,
sourceId,
dedupeKey,
coalesceKey,
attributes,
metadata
}) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const result = await session.sendNotificationSignal({
source,
kind,
summary,
priority,
payload,
sourceId,
dedupeKey,
coalesceKey,
attributes,
metadata
});
return {
accepted: result.accepted !== void 0,
notificationId: result.record?.id,
decision: result.decision?.action,
runId: result.runId
};
} catch (error) {
return handleError(error, "error sending harness notification");
}
}
});
var CREATE_HARNESS_THREAD_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/threads",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: createThreadBodySchema,
responseSchema: threadResponseSchema,
summary: "Create a new thread",
description: "Creates a new thread in the session (unbinds the previous thread, binds the new one).",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, title }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const thread = await session.thread.create({ title });
return {
id: thread.id,
title: thread.title,
resourceId: thread.resourceId,
createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : void 0,
updatedAt: thread.updatedAt instanceof Date ? thread.updatedAt.toISOString() : void 0
};
} catch (error) {
return handleError(error, "error creating harness thread");
}
}
});
var DELETE_HARNESS_THREAD_ROUTE = createRoute({
method: "DELETE",
path: "/harness/:harnessId/sessions/:resourceId/threads/:threadId",
responseType: "json",
pathParamSchema: threadPathParams,
responseSchema: ackResponseSchema,
summary: "Delete a thread",
description: "Deletes a thread. If the deleted thread is the active one, the session is unbound.",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, threadId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.thread.delete({ threadId });
return { ok: true };
} catch (error) {
return handleError(error, "error deleting harness thread");
}
}
});
var RENAME_HARNESS_THREAD_ROUTE = createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/threads/:threadId",
responseType: "json",
pathParamSchema: threadPathParams,
bodySchema: renameThreadBodySchema,
responseSchema: ackResponseSchema,
summary: "Rename a thread",
description: "Renames the specified thread.",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, threadId, title }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
if (session.thread.getId() !== threadId) {
await session.thread.switch({ threadId });
}
await session.thread.rename({ title });
return { ok: true };
} catch (error) {
return handleError(error, "error renaming harness thread");
}
}
});
var CLONE_HARNESS_THREAD_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/threads/clone",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: cloneThreadBodySchema,
responseSchema: threadResponseSchema,
summary: "Clone a thread",
description: "Clones a thread (and its messages). The session binds to the new clone.",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, sourceThreadId, title }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const thread = await session.thread.clone({ sourceThreadId, title });
return {
id: thread.id,
title: thread.title,
resourceId: thread.resourceId,
createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : void 0,
updatedAt: thread.updatedAt instanceof Date ? thread.updatedAt.toISOString() : void 0
};
} catch (error) {
return handleError(error, "error cloning harness thread");
}
}
});
var LIST_HARNESS_THREAD_MESSAGES_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/threads/:threadId/messages",
responseType: "json",
pathParamSchema: threadPathParams,
queryParamSchema: listMessagesQuerySchema,
responseSchema: listMessagesResponseSchema,
summary: "List thread messages",
description: "Lists messages for a specific thread. Returns most recent messages first.",
tags: ["Harness", "Threads"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId, threadId, limit }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const messages = await session.thread.listMessages({ threadId, limit });
return {
messages: messages.map((m) => ({
id: m.id,
role: m.role,
content: m.content,
createdAt: m.createdAt instanceof Date ? m.createdAt.toISOString() : void 0
}))
};
} catch (error) {
return handleError(error, "error listing harness thread messages");
}
}
});
var FOLLOW_UP_HARNESS_SESSION_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/follow-up",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: followUpBodySchema,
responseSchema: ackResponseSchema,
summary: "Queue a follow-up message",
description: "Queues a follow-up message. If the session is idle it sends immediately; if a run is active it queues for after completion.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, message }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
void session.followUp({ content: message });
return { ok: true };
} catch (error) {
return handleError(error, "error queuing harness follow-up");
}
}
});
var LIST_HARNESS_MODELS_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/models",
responseType: "json",
pathParamSchema: harnessIdPathParams,
responseSchema: listModelsResponseSchema,
summary: "List available models",
description: "Lists all models available on this harness (with auth status and use counts).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
await harness.init();
const models = await harness.listAvailableModels();
return {
models: models.map((m) => ({
id: m.id,
provider: m.provider,
modelName: m.modelName,
hasApiKey: m.hasApiKey,
useCount: m.useCount
}))
};
} catch (error) {
return handleError(error, "error listing harness models");
}
}
});
var GET_HARNESS_WORKSPACE_STATUS_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/workspace",
responseType: "json",
pathParamSchema: harnessIdPathParams,
responseSchema: workspaceStatusResponseSchema,
summary: "Get workspace status",
description: "Returns whether the harness has a workspace configured and whether it is ready.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
await harness.init();
return {
hasWorkspace: harness.hasWorkspace(),
isReady: harness.isWorkspaceReady()
};
} catch (error) {
return handleError(error, "error reading harness workspace status");
}
}
});
var GET_HARNESS_OM_RECORD_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/om",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: omRecordResponseSchema,
summary: "Get observational memory record",
description: "Returns the current observational memory record for the session\u2019s thread/resource.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const record = await harness.getObservationalMemoryRecord(session);
return { record: record ?? void 0 };
} catch (error) {
return handleError(error, "error reading harness OM record");
}
}
});
var SET_HARNESS_RESOURCE_ID_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/resource",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: z.object({ newResourceId: z.string() }),
responseSchema: ackResponseSchema,
summary: "Change the session resource ID",
description: "Updates the session\u2019s resource identity (e.g. when a user logs in).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, newResourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await harness.setResourceId(session, { resourceId: newResourceId });
return { ok: true };
} catch (error) {
return handleError(error, "error setting harness resource ID");
}
}
});
var GET_HARNESS_RESOURCE_IDS_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/resources",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: z.object({ resourceIds: z.array(z.string()) }),
summary: "Get known resource IDs",
description: "Lists the resource IDs known to this session (from threads).",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const resourceIds = await harness.getKnownResourceIds(session);
return { resourceIds };
} catch (error) {
return handleError(error, "error listing harness resource IDs");
}
}
});
var setGoalBodySchema = z.object({
objective: z.string(),
judgeModelId: z.string().optional(),
maxRuns: z.number().optional()
});
var updateGoalBodySchema = z.object({
judgeModelId: z.string().optional(),
maxRuns: z.number().optional(),
status: z.enum(["active", "paused", "done"]).optional()
});
var goalRecordSchema = z.object({
id: z.string().optional(),
objective: z.string(),
status: z.enum(["active", "paused", "done"]),
runsUsed: z.number(),
maxRuns: z.number().optional(),
judgeModelId: z.string().optional(),
startedAt: z.number(),
updatedAt: z.number(),
pausedReason: z.string().optional()
});
var goalResponseSchema = z.object({ goal: goalRecordSchema.optional() });
function getAgentForSession(harness, session) {
return harness.getCurrentAgent(session);
}
var GET_HARNESS_GOAL_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/goal",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: goalResponseSchema,
summary: "Get the current goal",
description: "Returns the active/paused/done goal objective for the session\u2019s thread, if any.",
tags: ["Harness", "Goals"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threadId = session.thread.getId();
if (!threadId) return { goal: void 0 };
const agent = getAgentForSession(harness, session);
const record = await agent.getObjective({ threadId });
return { goal: record ?? void 0 };
} catch (error) {
return handleError(error, "error reading harness goal");
}
}
});
var SET_HARNESS_GOAL_ROUTE = createRoute({
method: "POST",
path: "/harness/:harnessId/sessions/:resourceId/goal",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: setGoalBodySchema,
responseSchema: goalResponseSchema,
summary: "Set a goal",
description: "Sets a new objective for the session\u2019s thread. The agent\u2019s in-loop goal judge evaluates progress after each turn.",
tags: ["Harness", "Goals"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, objective, judgeModelId, maxRuns }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threadId = session.thread.getId();
if (!threadId) throw new HTTPException(400, { message: "session has no active thread" });
const agent = getAgentForSession(harness, session);
const record = await agent.setObjective(objective, {
threadId,
resourceId: session.identity.getResourceId(),
...judgeModelId ? { judgeModelId } : {},
...maxRuns != null ? { maxRuns } : {}
});
return { goal: record ?? void 0 };
} catch (error) {
return handleError(error, "error setting harness goal");
}
}
});
var UPDATE_HARNESS_GOAL_ROUTE = createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/goal",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: updateGoalBodySchema,
responseSchema: goalResponseSchema,
summary: "Update goal options",
description: "Updates the judge model, max runs, or status of the active goal. No-op when no goal is set.",
tags: ["Harness", "Goals"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, judgeModelId, maxRuns, status }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threadId = session.thread.getId();
if (!threadId) throw new HTTPException(400, { message: "session has no active thread" });
const agent = getAgentForSession(harness, session);
const record = await agent.updateObjectiveOptions({
threadId,
...judgeModelId !== void 0 ? { judgeModelId } : {},
...maxRuns !== void 0 ? { maxRuns } : {},
...status !== void 0 ? { status } : {}
});
return { goal: record ?? void 0 };
} catch (error) {
return handleError(error, "error updating harness goal");
}
}
});
var CLEAR_HARNESS_GOAL_ROUTE = createRoute({
method: "DELETE",
path: "/harness/:harnessId/sessions/:resourceId/goal",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: ackResponseSchema,
summary: "Clear the goal",
description: "Removes the active goal from the session\u2019s thread.",
tags: ["Harness", "Goals"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const threadId = session.thread.getId();
if (!threadId) throw new HTTPException(400, { message: "session has no active thread" });
const agent = getAgentForSession(harness, session);
await agent.clearObjective({ threadId });
return { ok: true };
} catch (error) {
return handleError(error, "error clearing harness goal");
}
}
});
var GET_HARNESS_PERMISSIONS_ROUTE = createRoute({
method: "GET",
path: "/harness/:harnessId/sessions/:resourceId/permissions",
responseType: "json",
pathParamSchema: sessionPathParams,
responseSchema: permissionRulesResponseSchema,
summary: "Get permission rules",
description: "Returns the current permission rules (per-category and per-tool policies) for the session.",
tags: ["Harness", "Permissions"],
requiresAuth: true,
requiresPermission: "harness:read",
handler: async ({ mastra, harnessId, resourceId }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
const rules = session.permissions.getRules();
return {
categories: rules.categories,
tools: rules.tools
};
} catch (error) {
return handleError(error, "error getting harness permissions");
}
}
});
var SET_HARNESS_CATEGORY_PERMISSION_ROUTE = createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/permissions/category",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: setCategoryPermissionBodySchema,
responseSchema: ackResponseSchema,
summary: "Set permission for a tool category",
description: "Sets the approval policy (allow/ask/deny) for all tools in a category.",
tags: ["Harness", "Permissions"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, category, policy }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.permissions.setForCategory({ category, policy });
return { ok: true };
} catch (error) {
return handleError(error, "error setting harness category permission");
}
}
});
var SET_HARNESS_TOOL_PERMISSION_ROUTE = createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/permissions/tool",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: setToolPermissionBodySchema,
responseSchema: ackResponseSchema,
summary: "Set permission for a specific tool",
description: "Sets the approval policy (allow/ask/deny) for a specific tool by name. Per-tool overrides take precedence over category policies.",
tags: ["Harness", "Permissions"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, toolName, policy }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.permissions.setForTool({ toolName, policy });
return { ok: true };
} catch (error) {
return handleError(error, "error setting harness tool permission");
}
}
});
var setSessionStateBodySchema = z.object({ state: z.record(z.string(), z.unknown()) });
var SET_HARNESS_SESSION_STATE_ROUTE = createRoute({
method: "PUT",
path: "/harness/:harnessId/sessions/:resourceId/state",
responseType: "json",
pathParamSchema: sessionPathParams,
bodySchema: setSessionStateBodySchema,
responseSchema: ackResponseSchema,
summary: "Set session state",
description: "Merges the provided key-value pairs into the session state. Existing keys not in the payload are preserved.",
tags: ["Harness"],
requiresAuth: true,
requiresPermission: "harness:execute",
handler: async ({ mastra, harnessId, resourceId, state }) => {
try {
const harness = getHarnessOrThrow(mastra, harnessId);
const session = await getSession(harness, resourceId);
await session.state.set(state);
return { ok: true };
} catch (error) {
return handleError(error, "error setting harness session state");
}
}
});
export { ABORT_HARNESS_SESSION_ROUTE, CLEAR_HARNESS_GOAL_ROUTE, CLONE_HARNESS_THREAD_ROUTE, CREATE_HARNESS_SESSION_ROUTE, CREATE_HARNESS_THREAD_ROUTE, DELETE_HARNESS_THREAD_ROUTE, FOLLOW_UP_HARNESS_SESSION_ROUTE, GET_HARNESS_GOAL_ROUTE, GET_HARNESS_OM_RECORD_ROUTE, GET_HARNESS_PERMISSIONS_ROUTE, GET_HARNESS_RESOURCE_IDS_ROUTE, GET_HARNESS_SESSION_STATE_ROUTE, GET_HARNESS_WORKSPACE_STATUS_ROUTE, HARNESS_TOOL_APPROVAL_ROUTE, HARNESS_TOOL_SUSPENSION_ROUTE, LIST_HARNESSES_ROUTE, LIST_HARNESS_MODELS_ROUTE, LIST_HARNESS_MODES_ROUTE, LIST_HARNESS_THREADS_ROUTE, LIST_HARNESS_THREAD_MESSAGES_ROUTE, RENAME_HARNESS_THREAD_ROUTE, SEND_HARNESS_MESSAGE_ROUTE, SEND_HARNESS_NOTIFICATION_ROUTE, SET_HARNESS_CATEGORY_PERMISSION_ROUTE, SET_HARNESS_GOAL_ROUTE, SET_HARNESS_RESOURCE_ID_ROUTE, SET_HARNESS_SESSION_STATE_ROUTE, SET_HARNESS_TOOL_PERMISSION_ROUTE, STEER_HARNESS_SESSION_ROUTE, STREAM_HARNESS_SESSION_ROUTE, SWITCH_HARNESS_MODEL_ROUTE, SWITCH_HARNESS_MODE_ROUTE, SWITCH_HARNESS_THREAD_ROUTE, UPDATE_HARNESS_GOAL_ROUTE };
//# sourceMappingURL=chunk-MYNSU6B4.js.map
//# sourceMappingURL=chunk-MYNSU6B4.js.map

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

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