@mastra/server
Advanced tools
| '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
| { | ||
| "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'; |
+6
-6
| { | ||
| "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":"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","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
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
47109251
0