@mastra/server 1.83.0-alpha.0 → 1.83.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{a2a-DCpd3CTv.js → a2a-CQlJ-SZr.js} +2 -2
- package/dist/{a2a-DCpd3CTv.js.map → a2a-CQlJ-SZr.js.map} +1 -1
- package/dist/{a2a-kz7NjjCg.cjs → a2a-mDspNbWX.cjs} +2 -2
- package/dist/{a2a-kz7NjjCg.cjs.map → a2a-mDspNbWX.cjs.map} +1 -1
- package/dist/{agent-builder-uDstZROq.cjs → agent-builder-B9gEkbch.cjs} +3 -3
- package/dist/{agent-builder-uDstZROq.cjs.map → agent-builder-B9gEkbch.cjs.map} +1 -1
- package/dist/{agent-builder-CocfOSi8.js → agent-builder-BF7OAl_R.js} +3 -3
- package/dist/{agent-builder-CocfOSi8.js.map → agent-builder-BF7OAl_R.js.map} +1 -1
- package/dist/{agent-versions-BccL4mEW.cjs → agent-versions-CwWhEoU5.cjs} +2 -2
- package/dist/{agent-versions-BccL4mEW.cjs.map → agent-versions-CwWhEoU5.cjs.map} +1 -1
- package/dist/{agent-versions-DFJyxWY1.js → agent-versions-DfcKpYNW.js} +2 -2
- package/dist/{agent-versions-DFJyxWY1.js.map → agent-versions-DfcKpYNW.js.map} +1 -1
- package/dist/{agents-BXqMKoOz.js → agents-BCgiMlDq.js} +2 -2
- package/dist/{agents-BXqMKoOz.js.map → agents-BCgiMlDq.js.map} +1 -1
- package/dist/{agents-DsfsDhIT.cjs → agents-CMEeZr5y.cjs} +217 -57
- package/dist/agents-CMEeZr5y.cjs.map +1 -0
- package/dist/{agents-DbnPZXIN.cjs → agents-CjcvdF2e.cjs} +2 -2
- package/dist/{agents-DbnPZXIN.cjs.map → agents-CjcvdF2e.cjs.map} +1 -1
- package/dist/{agents-BI8ez-FT.js → agents-DXlVewzD.js} +217 -57
- package/dist/agents-DXlVewzD.js.map +1 -0
- package/dist/{api-schema-manifest-DtYTPvh9.cjs → api-schema-manifest-BKnghL_k.cjs} +2 -2
- package/dist/{api-schema-manifest-DtYTPvh9.cjs.map → api-schema-manifest-BKnghL_k.cjs.map} +1 -1
- package/dist/{api-schema-manifest-ChxbN16M.js → api-schema-manifest-DOuSq4rG.js} +2 -2
- package/dist/{api-schema-manifest-ChxbN16M.js.map → api-schema-manifest-DOuSq4rG.js.map} +1 -1
- package/dist/{conversations-QuKJVEFe.cjs → conversations-CFj4BnNb.cjs} +2 -2
- package/dist/{conversations-QuKJVEFe.cjs.map → conversations-CFj4BnNb.cjs.map} +1 -1
- package/dist/{conversations-BbZYXKIa.js → conversations-DjTKtaUi.js} +2 -2
- package/dist/{conversations-BbZYXKIa.js.map → conversations-DjTKtaUi.js.map} +1 -1
- package/dist/docs/SKILL.md +3 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/docs-agents-resumable-streams.md +140 -0
- package/dist/docs/references/docs-server-server-adapters.md +679 -0
- package/dist/docs/references/reference-observability-tracing-advanced-queries.md +47 -58
- package/dist/{editor-builder-CjJlqR9a.cjs → editor-builder-CBBZxQhO.cjs} +3 -3
- package/dist/{editor-builder-CjJlqR9a.cjs.map → editor-builder-CBBZxQhO.cjs.map} +1 -1
- package/dist/{editor-builder-Bln4Pg1U.js → editor-builder-fe70YP8g.js} +2 -2
- package/dist/{editor-builder-Bln4Pg1U.js.map → editor-builder-fe70YP8g.js.map} +1 -1
- package/dist/{editor-builder-CbfX5bvL.js → editor-builder-o9xJHa96.js} +3 -3
- package/dist/{editor-builder-CbfX5bvL.js.map → editor-builder-o9xJHa96.js.map} +1 -1
- package/dist/{editor-builder-BaI8pttR.cjs → editor-builder-xQmDgVgJ.cjs} +2 -2
- package/dist/{editor-builder-BaI8pttR.cjs.map → editor-builder-xQmDgVgJ.cjs.map} +1 -1
- package/dist/{observability-mnHHbnoc.cjs → observability-BB0DeGo4.cjs} +3 -2
- package/dist/{observability-mnHHbnoc.cjs.map → observability-BB0DeGo4.cjs.map} +1 -1
- package/dist/{observability-BCTkIhJT.js → observability-Cl3qZKTD.js} +3 -2
- package/dist/{observability-BCTkIhJT.js.map → observability-Cl3qZKTD.js.map} +1 -1
- package/dist/{observability-new-endpoints-B6fo20v5.cjs → observability-new-endpoints-DugFsWBU.cjs} +27 -3
- package/dist/observability-new-endpoints-DugFsWBU.cjs.map +1 -0
- package/dist/{observability-new-endpoints-DHn8uKyr.js → observability-new-endpoints-qE2NutZ1.js} +22 -4
- package/dist/observability-new-endpoints-qE2NutZ1.js.map +1 -0
- package/dist/{plans-DMs8SVBG.cjs → plans-CQijj_Am.cjs} +3 -3
- package/dist/{plans-DMs8SVBG.cjs.map → plans-CQijj_Am.cjs.map} +1 -1
- package/dist/{plans-9hdkc-t8.js → plans-DVx9N2re.js} +3 -3
- package/dist/{plans-9hdkc-t8.js.map → plans-DVx9N2re.js.map} +1 -1
- package/dist/{responses-CNKJoC5a.cjs → responses-DYGS0aiI.cjs} +2 -2
- package/dist/{responses-CNKJoC5a.cjs.map → responses-DYGS0aiI.cjs.map} +1 -1
- package/dist/{responses-B5_syoSo.js → responses-NM-kLq8b.js} +2 -2
- package/dist/{responses-B5_syoSo.js.map → responses-NM-kLq8b.js.map} +1 -1
- package/dist/{routes-C0pgNcG-.js → routes-B2XGdvlv.js} +15 -14
- package/dist/routes-B2XGdvlv.js.map +1 -0
- package/dist/{routes-BYQ38dFx.cjs → routes-CWrdLnBc.cjs} +15 -14
- package/dist/routes-CWrdLnBc.cjs.map +1 -0
- package/dist/{scorer-versions-vQVWyYWA.cjs → scorer-versions-Bhdvt-cX.cjs} +2 -2
- package/dist/{scorer-versions-vQVWyYWA.cjs.map → scorer-versions-Bhdvt-cX.cjs.map} +1 -1
- package/dist/{scorer-versions-BZ58s09W.js → scorer-versions-DhT7Lj33.js} +2 -2
- package/dist/{scorer-versions-BZ58s09W.js.map → scorer-versions-DhT7Lj33.js.map} +1 -1
- package/dist/{scores-Dxa8dDfV.cjs → scores-CWx6H3Z8.cjs} +2 -2
- package/dist/{scores-Dxa8dDfV.cjs.map → scores-CWx6H3Z8.cjs.map} +1 -1
- package/dist/{scores-B3mS6vqB.js → scores-DTVV_OaX.js} +2 -2
- package/dist/{scores-B3mS6vqB.js.map → scores-DTVV_OaX.js.map} +1 -1
- package/dist/server/handlers/a2a.cjs +1 -1
- package/dist/server/handlers/a2a.js +1 -1
- package/dist/server/handlers/agent-builder.cjs +1 -1
- package/dist/server/handlers/agent-builder.js +1 -1
- package/dist/server/handlers/agent-controller.cjs +13 -2
- package/dist/server/handlers/agent-controller.cjs.map +1 -1
- package/dist/server/handlers/agent-controller.d.ts.map +1 -1
- package/dist/server/handlers/agent-controller.js +13 -2
- package/dist/server/handlers/agent-controller.js.map +1 -1
- package/dist/server/handlers/agent-versions.cjs +1 -1
- package/dist/server/handlers/agent-versions.js +1 -1
- package/dist/server/handlers/agents.cjs +1 -1
- package/dist/server/handlers/agents.d.ts.map +1 -1
- package/dist/server/handlers/agents.js +1 -1
- package/dist/server/handlers/conversations.cjs +1 -1
- package/dist/server/handlers/conversations.js +1 -1
- package/dist/server/handlers/datasets.cjs +4 -2
- package/dist/server/handlers/datasets.cjs.map +1 -1
- package/dist/server/handlers/datasets.d.ts.map +1 -1
- package/dist/server/handlers/datasets.js +4 -2
- package/dist/server/handlers/datasets.js.map +1 -1
- package/dist/server/handlers/editor-builder.cjs +1 -1
- package/dist/server/handlers/editor-builder.js +1 -1
- package/dist/server/handlers/error.cjs +1 -0
- package/dist/server/handlers/error.cjs.map +1 -1
- package/dist/server/handlers/error.d.ts.map +1 -1
- package/dist/server/handlers/error.js +1 -0
- package/dist/server/handlers/error.js.map +1 -1
- package/dist/server/handlers/favorites-enrichment.cjs +1 -1
- package/dist/server/handlers/favorites-enrichment.js +1 -1
- package/dist/server/handlers/observability-new-endpoints.cjs +2 -1
- package/dist/server/handlers/observability-new-endpoints.d.ts +244 -0
- package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
- package/dist/server/handlers/observability-new-endpoints.js +1 -1
- package/dist/server/handlers/observability-shared.cjs +6 -0
- package/dist/server/handlers/observability-shared.cjs.map +1 -1
- package/dist/server/handlers/observability-shared.d.ts +6 -0
- package/dist/server/handlers/observability-shared.d.ts.map +1 -1
- package/dist/server/handlers/observability-shared.js +6 -0
- package/dist/server/handlers/observability-shared.js.map +1 -1
- package/dist/server/handlers/observability.cjs +3 -2
- package/dist/server/handlers/observability.js +3 -3
- package/dist/server/handlers/plans.cjs +1 -1
- package/dist/server/handlers/plans.js +1 -1
- package/dist/server/handlers/responses.cjs +1 -1
- package/dist/server/handlers/responses.js +1 -1
- package/dist/server/handlers/scorer-versions.cjs +1 -1
- package/dist/server/handlers/scorer-versions.js +1 -1
- package/dist/server/handlers/scores.cjs +1 -1
- package/dist/server/handlers/scores.js +1 -1
- package/dist/server/handlers/stored-agent-favorites.cjs +2 -2
- package/dist/server/handlers/stored-agent-favorites.js +2 -2
- package/dist/server/handlers/stored-agents.cjs +4 -3
- package/dist/server/handlers/stored-agents.cjs.map +1 -1
- package/dist/server/handlers/stored-agents.d.ts +2 -6
- package/dist/server/handlers/stored-agents.d.ts.map +1 -1
- package/dist/server/handlers/stored-agents.js +4 -3
- package/dist/server/handlers/stored-agents.js.map +1 -1
- package/dist/server/handlers/stored-scorers.cjs +1 -1
- package/dist/server/handlers/stored-scorers.js +1 -1
- package/dist/server/handlers/stored-skill-favorites.cjs +1 -1
- package/dist/server/handlers/stored-skill-favorites.js +1 -1
- package/dist/server/handlers/stored-skills.cjs +1 -1
- package/dist/server/handlers/stored-skills.js +1 -1
- package/dist/server/handlers/system.cjs +1 -1
- package/dist/server/handlers/system.js +1 -1
- package/dist/server/handlers/tools.cjs +1 -1
- package/dist/server/handlers/tools.js +1 -1
- package/dist/server/handlers/workflow-builder.cjs +1 -1
- package/dist/server/handlers/workflow-builder.js +1 -1
- package/dist/server/handlers/workflows.cjs +1 -1
- package/dist/server/handlers/workflows.js +1 -1
- package/dist/server/handlers.cjs +10 -10
- package/dist/server/handlers.js +10 -10
- package/dist/server/schemas/agents.d.ts.map +1 -1
- package/dist/server/schemas/feedback.d.ts +49 -0
- package/dist/server/schemas/feedback.d.ts.map +1 -1
- package/dist/server/schemas/index.cjs +6 -6
- package/dist/server/schemas/index.js +6 -6
- package/dist/server/schemas/stored-agents.d.ts +5 -10
- package/dist/server/schemas/stored-agents.d.ts.map +1 -1
- package/dist/server/server-adapter/index.cjs +1 -1
- package/dist/server/server-adapter/index.js +1 -1
- package/dist/server/server-adapter/routes/observability.d.ts +121 -0
- package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
- package/dist/server/utils/agent-stream-events.d.ts +2 -0
- package/dist/server/utils/agent-stream-events.d.ts.map +1 -1
- package/dist/{stored-agents-DA8Zx6o9.js → stored-agents-DmN_pIIl.js} +10 -10
- package/dist/stored-agents-DmN_pIIl.js.map +1 -0
- package/dist/{stored-agents-TQ2lIFbx.cjs → stored-agents-m0Knvv29.cjs} +10 -10
- package/dist/stored-agents-m0Knvv29.cjs.map +1 -0
- package/dist/{stored-scorers-DhOq8ZQC.js → stored-scorers-2F2k6XSx.js} +2 -2
- package/dist/{stored-scorers-DhOq8ZQC.js.map → stored-scorers-2F2k6XSx.js.map} +1 -1
- package/dist/{stored-scorers-FJOs5774.cjs → stored-scorers-iM2Qq9Nh.cjs} +2 -2
- package/dist/{stored-scorers-FJOs5774.cjs.map → stored-scorers-iM2Qq9Nh.cjs.map} +1 -1
- package/dist/{tools-C9W7WvyI.cjs → tools-7O8cd_4u.cjs} +3 -3
- package/dist/{tools-C9W7WvyI.cjs.map → tools-7O8cd_4u.cjs.map} +1 -1
- package/dist/{tools-Ce7SFoT1.js → tools-Bf3vq-HD.js} +3 -3
- package/dist/{tools-Ce7SFoT1.js.map → tools-Bf3vq-HD.js.map} +1 -1
- package/dist/{workflow-builder-BNk301jl.js → workflow-builder-BUQfzD4L.js} +3 -3
- package/dist/{workflow-builder-BNk301jl.js.map → workflow-builder-BUQfzD4L.js.map} +1 -1
- package/dist/{workflow-builder-CsOEskDo.cjs → workflow-builder-C6J_1s56.cjs} +3 -3
- package/dist/{workflow-builder-CsOEskDo.cjs.map → workflow-builder-C6J_1s56.cjs.map} +1 -1
- package/dist/{workflows-BAFGmHCW.js → workflows-BkTNzH-i.js} +2 -2
- package/dist/{workflows-BAFGmHCW.js.map → workflows-BkTNzH-i.js.map} +1 -1
- package/dist/{workflows-CJz5Eh0B.cjs → workflows-CHUG5jh4.cjs} +2 -2
- package/dist/{workflows-CJz5Eh0B.cjs.map → workflows-CHUG5jh4.cjs.map} +1 -1
- package/package.json +5 -5
- package/dist/agents-BI8ez-FT.js.map +0 -1
- package/dist/agents-DsfsDhIT.cjs.map +0 -1
- package/dist/observability-new-endpoints-B6fo20v5.cjs.map +0 -1
- package/dist/observability-new-endpoints-DHn8uKyr.js.map +0 -1
- package/dist/routes-BYQ38dFx.cjs.map +0 -1
- package/dist/routes-C0pgNcG-.js.map +0 -1
- package/dist/stored-agents-DA8Zx6o9.js.map +0 -1
- package/dist/stored-agents-TQ2lIFbx.cjs.map +0 -1
|
@@ -3,7 +3,7 @@ const require_http_exception = require("./http-exception-Co3MbFUf.cjs");
|
|
|
3
3
|
const require_common = require("./common-D5XxSuvu.cjs");
|
|
4
4
|
const require_scores = require("./scores-CWCaN4jf.cjs");
|
|
5
5
|
const require_route_builder = require("./route-builder-DHqDrSSy.cjs");
|
|
6
|
-
const require_agents = require("./agents-
|
|
6
|
+
const require_agents = require("./agents-CMEeZr5y.cjs");
|
|
7
7
|
const require_server_handlers_error = require("./server/handlers/error.cjs");
|
|
8
8
|
// src/server/handlers/scores.ts
|
|
9
9
|
var scores_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
|
|
@@ -325,4 +325,4 @@ Object.defineProperty(exports, "scores_exports", {
|
|
|
325
325
|
}
|
|
326
326
|
});
|
|
327
327
|
|
|
328
|
-
//# sourceMappingURL=scores-
|
|
328
|
+
//# sourceMappingURL=scores-CWx6H3Z8.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scores-Dxa8dDfV.cjs","names":["createRoute","listScorersResponseSchema","scorerIdPathParams","scorerEntrySchema","runIdSchema","listScoresByRunIdQuerySchema","scoresWithPaginationResponseSchema","handleError","listScoresByScorerIdQuerySchema","entityPathParams","listScoresByEntityIdQuerySchema","getAgentFromSystem","saveScoreBodySchema","saveScoreResponseSchema","HTTPException"],"sources":["../src/server/handlers/scores.ts"],"sourcesContent":["import type { MastraScorerEntry, ScoreRowData } from '@mastra/core/evals';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { StoragePagination } from '@mastra/core/storage';\nimport { HTTPException } from '../http-exception';\nimport { runIdSchema } from '../schemas/common';\nimport {\n listScorersResponseSchema,\n scorerEntrySchema,\n scorerIdPathParams,\n entityPathParams,\n listScoresByRunIdQuerySchema,\n listScoresByScorerIdQuerySchema,\n listScoresByEntityIdQuerySchema,\n saveScoreBodySchema,\n scoresWithPaginationResponseSchema,\n saveScoreResponseSchema,\n} from '../schemas/scores';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport type { Context } from '../types';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\n\nasync function listScorersFromSystem({\n mastra,\n requestContext,\n}: Context & {\n requestContext: RequestContext;\n}) {\n const agents = mastra.listAgents();\n const workflows = mastra.listWorkflows();\n\n const scorersMap = new Map<\n string,\n MastraScorerEntry & {\n agentIds: string[];\n agentNames: string[];\n workflowIds: string[];\n isRegistered: boolean;\n source: 'code' | 'stored' | 'fs';\n }\n >();\n\n // Helper function to process an agent's scorers\n const processAgentScorers = async (agent: {\n id: string;\n name: string;\n listScorers: (typeof agents)[string]['listScorers'];\n }) => {\n const scorers =\n (await agent.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerId = scorer.scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)?.agentIds.push(agent.id);\n scorersMap.get(scorerId)?.agentNames.push(agent.name);\n } else {\n scorersMap.set(scorerId, {\n workflowIds: [],\n ...scorer,\n agentNames: [agent.name],\n agentIds: [agent.id],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n };\n\n // Process code-defined agents\n for (const [_, agent] of Object.entries(agents)) {\n await processAgentScorers(agent);\n }\n\n // Process stored agents (database-backed agents)\n try {\n const editor = mastra.getEditor();\n const storedAgentsResult = await editor?.agent.list();\n if (storedAgentsResult?.agents) {\n for (const storedAgentConfig of storedAgentsResult.agents) {\n try {\n const agent = await editor?.agent.getById(storedAgentConfig.id);\n if (agent) {\n await processAgentScorers(agent);\n }\n } catch {\n // Skip individual agents that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured - not all setups have storage\n }\n\n // Process stored scorers (standalone CMS-created scorers)\n try {\n const editor = mastra.getEditor();\n const storedScorersResult = await editor?.scorer.list();\n if (storedScorersResult?.scorerDefinitions) {\n for (const storedScorerConfig of storedScorersResult.scorerDefinitions) {\n try {\n await editor?.scorer.getById(storedScorerConfig.id);\n } catch {\n // Skip individual scorers that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured\n }\n\n for (const [workflowId, workflow] of Object.entries(workflows)) {\n const scorers =\n (await workflow.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerName = scorer.scorer.name;\n if (scorersMap.has(scorerName)) {\n scorersMap.get(scorerName)?.workflowIds.push(workflowId);\n } else {\n scorersMap.set(scorerName, {\n agentIds: [],\n agentNames: [],\n ...scorer,\n workflowIds: [workflowId],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n }\n\n const registeredScorers = await mastra.listScorers();\n for (const [_scorerId, scorer] of Object.entries(registeredScorers || {})) {\n const scorerId = scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)!.isRegistered = true;\n } else {\n scorersMap.set(scorerId, {\n scorer: scorer,\n agentIds: [],\n agentNames: [],\n workflowIds: [],\n isRegistered: true,\n source: scorer.source ?? 'code',\n });\n }\n }\n\n return Object.fromEntries(scorersMap.entries());\n}\n\n// Legacy function to get trace and span details\nfunction getTraceDetails(traceIdWithSpanId?: string) {\n if (!traceIdWithSpanId) {\n return {};\n }\n\n const [traceId, spanId] = traceIdWithSpanId.split('-');\n\n return {\n ...(traceId ? { traceId } : {}),\n ...(spanId ? { spanId } : {}),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_SCORERS_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers',\n responseType: 'json',\n responseSchema: listScorersResponseSchema,\n summary: 'List all scorers',\n description: 'Returns a list of all registered scorers with their configuration and associated agents and workflows',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n return scorers;\n }) as any,\n});\n\nexport const GET_SCORER_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n responseSchema: scorerEntrySchema.nullable(),\n summary: 'Get scorer by ID',\n description: 'Returns details for a specific scorer including its configuration and associations',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, scorerId, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n\n const scorer = scorers[scorerId];\n\n if (!scorer) {\n return null;\n }\n\n return scorer;\n }) as any,\n});\n\nexport const LIST_SCORES_BY_RUN_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/run/:runId',\n responseType: 'json',\n pathParamSchema: runIdSchema,\n queryParamSchema: listScoresByRunIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by run ID',\n description: 'Returns all scores for a specific execution run',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, runId, ...params }) => {\n try {\n const { page, perPage } = params;\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByRunId?.({\n runId,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by run id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SCORER_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorer/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n queryParamSchema: listScoresByScorerIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by scorer ID',\n description: 'Returns all scores generated by a specific scorer',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, scorerId, ...params }) => {\n try {\n const { page, perPage, entityId, entityType } = params;\n const filters = Object.fromEntries(Object.entries({ entityId, entityType }).filter(([_, v]) => v !== undefined));\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByScorerId?.({\n scorerId,\n pagination: { page: page ?? 0, perPage: perPage ?? 10 },\n ...filters,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by scorer id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_ENTITY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/entity/:entityType/:entityId',\n responseType: 'json',\n pathParamSchema: entityPathParams,\n queryParamSchema: listScoresByEntityIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by entity ID',\n description: 'Returns all scores for a specific entity (agent or workflow)',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, entityId, entityType, ...params }) => {\n try {\n const { page, perPage } = params;\n let entityIdToUse = entityId;\n\n if (entityType === 'AGENT') {\n const agent = await getAgentFromSystem({ mastra, agentId: entityId });\n entityIdToUse = agent.id;\n } else if (entityType === 'WORKFLOW') {\n const workflow = mastra.getWorkflowById(entityId);\n entityIdToUse = workflow.id;\n }\n\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scoresStore?.listScoresByEntityId?.({\n entityId: entityIdToUse,\n entityType,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by entity id');\n }\n },\n});\n\nexport const SAVE_SCORE_ROUTE = createRoute({\n method: 'POST',\n path: '/scores',\n responseType: 'json',\n bodySchema: saveScoreBodySchema,\n responseSchema: saveScoreResponseSchema,\n summary: 'Save score',\n description: 'Saves a new score record to storage',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const { score } = params as { score: ScoreRowData };\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const result = await scoresStore?.saveScore?.(score);\n if (!result) {\n throw new HTTPException(500, { message: 'Storage not configured' });\n }\n return result;\n } catch (error) {\n return handleError(error, 'Error saving score');\n }\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scores-CWx6H3Z8.cjs","names":["createRoute","listScorersResponseSchema","scorerIdPathParams","scorerEntrySchema","runIdSchema","listScoresByRunIdQuerySchema","scoresWithPaginationResponseSchema","handleError","listScoresByScorerIdQuerySchema","entityPathParams","listScoresByEntityIdQuerySchema","getAgentFromSystem","saveScoreBodySchema","saveScoreResponseSchema","HTTPException"],"sources":["../src/server/handlers/scores.ts"],"sourcesContent":["import type { MastraScorerEntry, ScoreRowData } from '@mastra/core/evals';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { StoragePagination } from '@mastra/core/storage';\nimport { HTTPException } from '../http-exception';\nimport { runIdSchema } from '../schemas/common';\nimport {\n listScorersResponseSchema,\n scorerEntrySchema,\n scorerIdPathParams,\n entityPathParams,\n listScoresByRunIdQuerySchema,\n listScoresByScorerIdQuerySchema,\n listScoresByEntityIdQuerySchema,\n saveScoreBodySchema,\n scoresWithPaginationResponseSchema,\n saveScoreResponseSchema,\n} from '../schemas/scores';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport type { Context } from '../types';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\n\nasync function listScorersFromSystem({\n mastra,\n requestContext,\n}: Context & {\n requestContext: RequestContext;\n}) {\n const agents = mastra.listAgents();\n const workflows = mastra.listWorkflows();\n\n const scorersMap = new Map<\n string,\n MastraScorerEntry & {\n agentIds: string[];\n agentNames: string[];\n workflowIds: string[];\n isRegistered: boolean;\n source: 'code' | 'stored' | 'fs';\n }\n >();\n\n // Helper function to process an agent's scorers\n const processAgentScorers = async (agent: {\n id: string;\n name: string;\n listScorers: (typeof agents)[string]['listScorers'];\n }) => {\n const scorers =\n (await agent.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerId = scorer.scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)?.agentIds.push(agent.id);\n scorersMap.get(scorerId)?.agentNames.push(agent.name);\n } else {\n scorersMap.set(scorerId, {\n workflowIds: [],\n ...scorer,\n agentNames: [agent.name],\n agentIds: [agent.id],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n };\n\n // Process code-defined agents\n for (const [_, agent] of Object.entries(agents)) {\n await processAgentScorers(agent);\n }\n\n // Process stored agents (database-backed agents)\n try {\n const editor = mastra.getEditor();\n const storedAgentsResult = await editor?.agent.list();\n if (storedAgentsResult?.agents) {\n for (const storedAgentConfig of storedAgentsResult.agents) {\n try {\n const agent = await editor?.agent.getById(storedAgentConfig.id);\n if (agent) {\n await processAgentScorers(agent);\n }\n } catch {\n // Skip individual agents that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured - not all setups have storage\n }\n\n // Process stored scorers (standalone CMS-created scorers)\n try {\n const editor = mastra.getEditor();\n const storedScorersResult = await editor?.scorer.list();\n if (storedScorersResult?.scorerDefinitions) {\n for (const storedScorerConfig of storedScorersResult.scorerDefinitions) {\n try {\n await editor?.scorer.getById(storedScorerConfig.id);\n } catch {\n // Skip individual scorers that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured\n }\n\n for (const [workflowId, workflow] of Object.entries(workflows)) {\n const scorers =\n (await workflow.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerName = scorer.scorer.name;\n if (scorersMap.has(scorerName)) {\n scorersMap.get(scorerName)?.workflowIds.push(workflowId);\n } else {\n scorersMap.set(scorerName, {\n agentIds: [],\n agentNames: [],\n ...scorer,\n workflowIds: [workflowId],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n }\n\n const registeredScorers = await mastra.listScorers();\n for (const [_scorerId, scorer] of Object.entries(registeredScorers || {})) {\n const scorerId = scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)!.isRegistered = true;\n } else {\n scorersMap.set(scorerId, {\n scorer: scorer,\n agentIds: [],\n agentNames: [],\n workflowIds: [],\n isRegistered: true,\n source: scorer.source ?? 'code',\n });\n }\n }\n\n return Object.fromEntries(scorersMap.entries());\n}\n\n// Legacy function to get trace and span details\nfunction getTraceDetails(traceIdWithSpanId?: string) {\n if (!traceIdWithSpanId) {\n return {};\n }\n\n const [traceId, spanId] = traceIdWithSpanId.split('-');\n\n return {\n ...(traceId ? { traceId } : {}),\n ...(spanId ? { spanId } : {}),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_SCORERS_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers',\n responseType: 'json',\n responseSchema: listScorersResponseSchema,\n summary: 'List all scorers',\n description: 'Returns a list of all registered scorers with their configuration and associated agents and workflows',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n return scorers;\n }) as any,\n});\n\nexport const GET_SCORER_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n responseSchema: scorerEntrySchema.nullable(),\n summary: 'Get scorer by ID',\n description: 'Returns details for a specific scorer including its configuration and associations',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, scorerId, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n\n const scorer = scorers[scorerId];\n\n if (!scorer) {\n return null;\n }\n\n return scorer;\n }) as any,\n});\n\nexport const LIST_SCORES_BY_RUN_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/run/:runId',\n responseType: 'json',\n pathParamSchema: runIdSchema,\n queryParamSchema: listScoresByRunIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by run ID',\n description: 'Returns all scores for a specific execution run',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, runId, ...params }) => {\n try {\n const { page, perPage } = params;\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByRunId?.({\n runId,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by run id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SCORER_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorer/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n queryParamSchema: listScoresByScorerIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by scorer ID',\n description: 'Returns all scores generated by a specific scorer',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, scorerId, ...params }) => {\n try {\n const { page, perPage, entityId, entityType } = params;\n const filters = Object.fromEntries(Object.entries({ entityId, entityType }).filter(([_, v]) => v !== undefined));\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByScorerId?.({\n scorerId,\n pagination: { page: page ?? 0, perPage: perPage ?? 10 },\n ...filters,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by scorer id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_ENTITY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/entity/:entityType/:entityId',\n responseType: 'json',\n pathParamSchema: entityPathParams,\n queryParamSchema: listScoresByEntityIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by entity ID',\n description: 'Returns all scores for a specific entity (agent or workflow)',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, entityId, entityType, ...params }) => {\n try {\n const { page, perPage } = params;\n let entityIdToUse = entityId;\n\n if (entityType === 'AGENT') {\n const agent = await getAgentFromSystem({ mastra, agentId: entityId });\n entityIdToUse = agent.id;\n } else if (entityType === 'WORKFLOW') {\n const workflow = mastra.getWorkflowById(entityId);\n entityIdToUse = workflow.id;\n }\n\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scoresStore?.listScoresByEntityId?.({\n entityId: entityIdToUse,\n entityType,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by entity id');\n }\n },\n});\n\nexport const SAVE_SCORE_ROUTE = createRoute({\n method: 'POST',\n path: '/scores',\n responseType: 'json',\n bodySchema: saveScoreBodySchema,\n responseSchema: saveScoreResponseSchema,\n summary: 'Save score',\n description: 'Saves a new score record to storage',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const { score } = params as { score: ScoreRowData };\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const result = await scoresStore?.saveScore?.(score);\n if (!result) {\n throw new HTTPException(500, { message: 'Storage not configured' });\n }\n return result;\n } catch (error) {\n return handleError(error, 'Error saving score');\n }\n },\n});\n"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { t as HTTPException } from "./http-exception-CzaWkxMl.js";
|
|
|
3
3
|
import { u as runIdSchema } from "./common-J-yUnHk9.js";
|
|
4
4
|
import { a as listScoresByScorerIdQuerySchema, c as scorerEntrySchema, i as listScoresByRunIdQuerySchema, l as scorerIdPathParams, n as listScorersResponseSchema, o as saveScoreBodySchema, r as listScoresByEntityIdQuerySchema, s as saveScoreResponseSchema, t as entityPathParams, u as scoresWithPaginationResponseSchema } from "./scores-BULd4ZBI.js";
|
|
5
5
|
import { n as createRoute } from "./route-builder-BKEzjw_M.js";
|
|
6
|
-
import { G as getAgentFromSystem } from "./agents-
|
|
6
|
+
import { G as getAgentFromSystem } from "./agents-DXlVewzD.js";
|
|
7
7
|
import { handleError } from "./server/handlers/error.js";
|
|
8
8
|
// src/server/handlers/scores.ts
|
|
9
9
|
var scores_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -284,4 +284,4 @@ const SAVE_SCORE_ROUTE = createRoute({
|
|
|
284
284
|
});
|
|
285
285
|
export { LIST_SCORES_BY_SCORER_ID_ROUTE as a, LIST_SCORES_BY_RUN_ID_ROUTE as i, LIST_SCORERS_ROUTE as n, SAVE_SCORE_ROUTE as o, LIST_SCORES_BY_ENTITY_ID_ROUTE as r, scores_exports as s, GET_SCORER_ROUTE as t };
|
|
286
286
|
|
|
287
|
-
//# sourceMappingURL=scores-
|
|
287
|
+
//# sourceMappingURL=scores-DTVV_OaX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scores-B3mS6vqB.js","names":[],"sources":["../src/server/handlers/scores.ts"],"sourcesContent":["import type { MastraScorerEntry, ScoreRowData } from '@mastra/core/evals';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { StoragePagination } from '@mastra/core/storage';\nimport { HTTPException } from '../http-exception';\nimport { runIdSchema } from '../schemas/common';\nimport {\n listScorersResponseSchema,\n scorerEntrySchema,\n scorerIdPathParams,\n entityPathParams,\n listScoresByRunIdQuerySchema,\n listScoresByScorerIdQuerySchema,\n listScoresByEntityIdQuerySchema,\n saveScoreBodySchema,\n scoresWithPaginationResponseSchema,\n saveScoreResponseSchema,\n} from '../schemas/scores';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport type { Context } from '../types';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\n\nasync function listScorersFromSystem({\n mastra,\n requestContext,\n}: Context & {\n requestContext: RequestContext;\n}) {\n const agents = mastra.listAgents();\n const workflows = mastra.listWorkflows();\n\n const scorersMap = new Map<\n string,\n MastraScorerEntry & {\n agentIds: string[];\n agentNames: string[];\n workflowIds: string[];\n isRegistered: boolean;\n source: 'code' | 'stored' | 'fs';\n }\n >();\n\n // Helper function to process an agent's scorers\n const processAgentScorers = async (agent: {\n id: string;\n name: string;\n listScorers: (typeof agents)[string]['listScorers'];\n }) => {\n const scorers =\n (await agent.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerId = scorer.scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)?.agentIds.push(agent.id);\n scorersMap.get(scorerId)?.agentNames.push(agent.name);\n } else {\n scorersMap.set(scorerId, {\n workflowIds: [],\n ...scorer,\n agentNames: [agent.name],\n agentIds: [agent.id],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n };\n\n // Process code-defined agents\n for (const [_, agent] of Object.entries(agents)) {\n await processAgentScorers(agent);\n }\n\n // Process stored agents (database-backed agents)\n try {\n const editor = mastra.getEditor();\n const storedAgentsResult = await editor?.agent.list();\n if (storedAgentsResult?.agents) {\n for (const storedAgentConfig of storedAgentsResult.agents) {\n try {\n const agent = await editor?.agent.getById(storedAgentConfig.id);\n if (agent) {\n await processAgentScorers(agent);\n }\n } catch {\n // Skip individual agents that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured - not all setups have storage\n }\n\n // Process stored scorers (standalone CMS-created scorers)\n try {\n const editor = mastra.getEditor();\n const storedScorersResult = await editor?.scorer.list();\n if (storedScorersResult?.scorerDefinitions) {\n for (const storedScorerConfig of storedScorersResult.scorerDefinitions) {\n try {\n await editor?.scorer.getById(storedScorerConfig.id);\n } catch {\n // Skip individual scorers that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured\n }\n\n for (const [workflowId, workflow] of Object.entries(workflows)) {\n const scorers =\n (await workflow.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerName = scorer.scorer.name;\n if (scorersMap.has(scorerName)) {\n scorersMap.get(scorerName)?.workflowIds.push(workflowId);\n } else {\n scorersMap.set(scorerName, {\n agentIds: [],\n agentNames: [],\n ...scorer,\n workflowIds: [workflowId],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n }\n\n const registeredScorers = await mastra.listScorers();\n for (const [_scorerId, scorer] of Object.entries(registeredScorers || {})) {\n const scorerId = scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)!.isRegistered = true;\n } else {\n scorersMap.set(scorerId, {\n scorer: scorer,\n agentIds: [],\n agentNames: [],\n workflowIds: [],\n isRegistered: true,\n source: scorer.source ?? 'code',\n });\n }\n }\n\n return Object.fromEntries(scorersMap.entries());\n}\n\n// Legacy function to get trace and span details\nfunction getTraceDetails(traceIdWithSpanId?: string) {\n if (!traceIdWithSpanId) {\n return {};\n }\n\n const [traceId, spanId] = traceIdWithSpanId.split('-');\n\n return {\n ...(traceId ? { traceId } : {}),\n ...(spanId ? { spanId } : {}),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_SCORERS_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers',\n responseType: 'json',\n responseSchema: listScorersResponseSchema,\n summary: 'List all scorers',\n description: 'Returns a list of all registered scorers with their configuration and associated agents and workflows',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n return scorers;\n }) as any,\n});\n\nexport const GET_SCORER_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n responseSchema: scorerEntrySchema.nullable(),\n summary: 'Get scorer by ID',\n description: 'Returns details for a specific scorer including its configuration and associations',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, scorerId, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n\n const scorer = scorers[scorerId];\n\n if (!scorer) {\n return null;\n }\n\n return scorer;\n }) as any,\n});\n\nexport const LIST_SCORES_BY_RUN_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/run/:runId',\n responseType: 'json',\n pathParamSchema: runIdSchema,\n queryParamSchema: listScoresByRunIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by run ID',\n description: 'Returns all scores for a specific execution run',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, runId, ...params }) => {\n try {\n const { page, perPage } = params;\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByRunId?.({\n runId,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by run id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SCORER_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorer/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n queryParamSchema: listScoresByScorerIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by scorer ID',\n description: 'Returns all scores generated by a specific scorer',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, scorerId, ...params }) => {\n try {\n const { page, perPage, entityId, entityType } = params;\n const filters = Object.fromEntries(Object.entries({ entityId, entityType }).filter(([_, v]) => v !== undefined));\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByScorerId?.({\n scorerId,\n pagination: { page: page ?? 0, perPage: perPage ?? 10 },\n ...filters,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by scorer id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_ENTITY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/entity/:entityType/:entityId',\n responseType: 'json',\n pathParamSchema: entityPathParams,\n queryParamSchema: listScoresByEntityIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by entity ID',\n description: 'Returns all scores for a specific entity (agent or workflow)',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, entityId, entityType, ...params }) => {\n try {\n const { page, perPage } = params;\n let entityIdToUse = entityId;\n\n if (entityType === 'AGENT') {\n const agent = await getAgentFromSystem({ mastra, agentId: entityId });\n entityIdToUse = agent.id;\n } else if (entityType === 'WORKFLOW') {\n const workflow = mastra.getWorkflowById(entityId);\n entityIdToUse = workflow.id;\n }\n\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scoresStore?.listScoresByEntityId?.({\n entityId: entityIdToUse,\n entityType,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by entity id');\n }\n },\n});\n\nexport const SAVE_SCORE_ROUTE = createRoute({\n method: 'POST',\n path: '/scores',\n responseType: 'json',\n bodySchema: saveScoreBodySchema,\n responseSchema: saveScoreResponseSchema,\n summary: 'Save score',\n description: 'Saves a new score record to storage',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const { score } = params as { score: ScoreRowData };\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const result = await scoresStore?.saveScore?.(score);\n if (!result) {\n throw new HTTPException(500, { message: 'Storage not configured' });\n }\n return result;\n } catch (error) {\n return handleError(error, 'Error saving score');\n }\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scores-DTVV_OaX.js","names":[],"sources":["../src/server/handlers/scores.ts"],"sourcesContent":["import type { MastraScorerEntry, ScoreRowData } from '@mastra/core/evals';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { StoragePagination } from '@mastra/core/storage';\nimport { HTTPException } from '../http-exception';\nimport { runIdSchema } from '../schemas/common';\nimport {\n listScorersResponseSchema,\n scorerEntrySchema,\n scorerIdPathParams,\n entityPathParams,\n listScoresByRunIdQuerySchema,\n listScoresByScorerIdQuerySchema,\n listScoresByEntityIdQuerySchema,\n saveScoreBodySchema,\n scoresWithPaginationResponseSchema,\n saveScoreResponseSchema,\n} from '../schemas/scores';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport type { Context } from '../types';\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\n\nasync function listScorersFromSystem({\n mastra,\n requestContext,\n}: Context & {\n requestContext: RequestContext;\n}) {\n const agents = mastra.listAgents();\n const workflows = mastra.listWorkflows();\n\n const scorersMap = new Map<\n string,\n MastraScorerEntry & {\n agentIds: string[];\n agentNames: string[];\n workflowIds: string[];\n isRegistered: boolean;\n source: 'code' | 'stored' | 'fs';\n }\n >();\n\n // Helper function to process an agent's scorers\n const processAgentScorers = async (agent: {\n id: string;\n name: string;\n listScorers: (typeof agents)[string]['listScorers'];\n }) => {\n const scorers =\n (await agent.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerId = scorer.scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)?.agentIds.push(agent.id);\n scorersMap.get(scorerId)?.agentNames.push(agent.name);\n } else {\n scorersMap.set(scorerId, {\n workflowIds: [],\n ...scorer,\n agentNames: [agent.name],\n agentIds: [agent.id],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n };\n\n // Process code-defined agents\n for (const [_, agent] of Object.entries(agents)) {\n await processAgentScorers(agent);\n }\n\n // Process stored agents (database-backed agents)\n try {\n const editor = mastra.getEditor();\n const storedAgentsResult = await editor?.agent.list();\n if (storedAgentsResult?.agents) {\n for (const storedAgentConfig of storedAgentsResult.agents) {\n try {\n const agent = await editor?.agent.getById(storedAgentConfig.id);\n if (agent) {\n await processAgentScorers(agent);\n }\n } catch {\n // Skip individual agents that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured - not all setups have storage\n }\n\n // Process stored scorers (standalone CMS-created scorers)\n try {\n const editor = mastra.getEditor();\n const storedScorersResult = await editor?.scorer.list();\n if (storedScorersResult?.scorerDefinitions) {\n for (const storedScorerConfig of storedScorersResult.scorerDefinitions) {\n try {\n await editor?.scorer.getById(storedScorerConfig.id);\n } catch {\n // Skip individual scorers that fail to hydrate\n }\n }\n }\n } catch {\n // Silently ignore if storage is not configured\n }\n\n for (const [workflowId, workflow] of Object.entries(workflows)) {\n const scorers =\n (await workflow.listScorers({\n requestContext,\n })) || {};\n\n if (Object.keys(scorers).length > 0) {\n for (const [_scorerId, scorer] of Object.entries(scorers)) {\n const scorerName = scorer.scorer.name;\n if (scorersMap.has(scorerName)) {\n scorersMap.get(scorerName)?.workflowIds.push(workflowId);\n } else {\n scorersMap.set(scorerName, {\n agentIds: [],\n agentNames: [],\n ...scorer,\n workflowIds: [workflowId],\n isRegistered: false,\n source: scorer.scorer.source ?? 'code',\n });\n }\n }\n }\n }\n\n const registeredScorers = await mastra.listScorers();\n for (const [_scorerId, scorer] of Object.entries(registeredScorers || {})) {\n const scorerId = scorer.id;\n if (scorersMap.has(scorerId)) {\n scorersMap.get(scorerId)!.isRegistered = true;\n } else {\n scorersMap.set(scorerId, {\n scorer: scorer,\n agentIds: [],\n agentNames: [],\n workflowIds: [],\n isRegistered: true,\n source: scorer.source ?? 'code',\n });\n }\n }\n\n return Object.fromEntries(scorersMap.entries());\n}\n\n// Legacy function to get trace and span details\nfunction getTraceDetails(traceIdWithSpanId?: string) {\n if (!traceIdWithSpanId) {\n return {};\n }\n\n const [traceId, spanId] = traceIdWithSpanId.split('-');\n\n return {\n ...(traceId ? { traceId } : {}),\n ...(spanId ? { spanId } : {}),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_SCORERS_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers',\n responseType: 'json',\n responseSchema: listScorersResponseSchema,\n summary: 'List all scorers',\n description: 'Returns a list of all registered scorers with their configuration and associated agents and workflows',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n return scorers;\n }) as any,\n});\n\nexport const GET_SCORER_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorers/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n responseSchema: scorerEntrySchema.nullable(),\n summary: 'Get scorer by ID',\n description: 'Returns details for a specific scorer including its configuration and associations',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: (async ({ mastra, scorerId, requestContext }: any) => {\n const scorers = await listScorersFromSystem({\n mastra,\n requestContext,\n });\n\n const scorer = scorers[scorerId];\n\n if (!scorer) {\n return null;\n }\n\n return scorer;\n }) as any,\n});\n\nexport const LIST_SCORES_BY_RUN_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/run/:runId',\n responseType: 'json',\n pathParamSchema: runIdSchema,\n queryParamSchema: listScoresByRunIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by run ID',\n description: 'Returns all scores for a specific execution run',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, runId, ...params }) => {\n try {\n const { page, perPage } = params;\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByRunId?.({\n runId,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by run id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SCORER_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/scorer/:scorerId',\n responseType: 'json',\n pathParamSchema: scorerIdPathParams,\n queryParamSchema: listScoresByScorerIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by scorer ID',\n description: 'Returns all scores generated by a specific scorer',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, scorerId, ...params }) => {\n try {\n const { page, perPage, entityId, entityType } = params;\n const filters = Object.fromEntries(Object.entries({ entityId, entityType }).filter(([_, v]) => v !== undefined));\n const scores = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scores?.listScoresByScorerId?.({\n scorerId,\n pagination: { page: page ?? 0, perPage: perPage ?? 10 },\n ...filters,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by scorer id');\n }\n },\n});\n\nexport const LIST_SCORES_BY_ENTITY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/scores/entity/:entityType/:entityId',\n responseType: 'json',\n pathParamSchema: entityPathParams,\n queryParamSchema: listScoresByEntityIdQuerySchema,\n responseSchema: scoresWithPaginationResponseSchema,\n summary: 'List scores by entity ID',\n description: 'Returns all scores for a specific entity (agent or workflow)',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, entityId, entityType, ...params }) => {\n try {\n const { page, perPage } = params;\n let entityIdToUse = entityId;\n\n if (entityType === 'AGENT') {\n const agent = await getAgentFromSystem({ mastra, agentId: entityId });\n entityIdToUse = agent.id;\n } else if (entityType === 'WORKFLOW') {\n const workflow = mastra.getWorkflowById(entityId);\n entityIdToUse = workflow.id;\n }\n\n const pagination: StoragePagination = {\n page: page ?? 0,\n perPage: perPage ?? 10,\n };\n\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const scoreResults = (await scoresStore?.listScoresByEntityId?.({\n entityId: entityIdToUse,\n entityType,\n pagination,\n })) || { pagination: { total: 0, page: 0, perPage: 0, hasMore: false }, scores: [] };\n\n return {\n pagination: scoreResults.pagination,\n scores: scoreResults.scores.map((score: ScoreRowData) => ({ ...score, ...getTraceDetails(score.traceId) })),\n };\n } catch (error) {\n return handleError(error, 'Error getting scores by entity id');\n }\n },\n});\n\nexport const SAVE_SCORE_ROUTE = createRoute({\n method: 'POST',\n path: '/scores',\n responseType: 'json',\n bodySchema: saveScoreBodySchema,\n responseSchema: saveScoreResponseSchema,\n summary: 'Save score',\n description: 'Saves a new score record to storage',\n tags: ['Scoring'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const { score } = params as { score: ScoreRowData };\n const scoresStore = await mastra.getStorage()?.getStore('scores');\n const result = await scoresStore?.saveScore?.(score);\n if (!result) {\n throw new HTTPException(500, { message: 'Storage not configured' });\n }\n return result;\n } catch (error) {\n return handleError(error, 'Error saving score');\n }\n },\n});\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("../../rolldown-runtime-10nMEhjP.cjs");
|
|
3
|
-
const require_a2a = require("../../a2a-
|
|
3
|
+
const require_a2a = require("../../a2a-mDspNbWX.cjs");
|
|
4
4
|
exports.AGENT_EXECUTION_ROUTE = require_a2a.AGENT_EXECUTION_ROUTE;
|
|
5
5
|
exports.GET_AGENT_CARD_ROUTE = require_a2a.GET_AGENT_CARD_ROUTE;
|
|
6
6
|
exports.getAgentCardByIdHandler = require_a2a.getAgentCardByIdHandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as AGENT_EXECUTION_ROUTE, n as GET_AGENT_CARD_ROUTE, i as getAgentCardByIdHandler, a as getAgentExecutionHandler, o as handleDeleteTaskPushNotificationConfig, s as handleGetTaskPushNotificationConfig, c as handleListTaskPushNotificationConfig, l as handleMessageSend, u as handleMessageStream, d as handleSetTaskPushNotificationConfig, f as handleTaskCancel, p as handleTaskGet, m as handleTaskList, h as handleTaskResubscribe, g as resolveA2AProtocolVersion } from "../../a2a-
|
|
1
|
+
export { t as AGENT_EXECUTION_ROUTE, n as GET_AGENT_CARD_ROUTE, i as getAgentCardByIdHandler, a as getAgentExecutionHandler, o as handleDeleteTaskPushNotificationConfig, s as handleGetTaskPushNotificationConfig, c as handleListTaskPushNotificationConfig, l as handleMessageSend, u as handleMessageStream, d as handleSetTaskPushNotificationConfig, f as handleTaskCancel, p as handleTaskGet, m as handleTaskList, h as handleTaskResubscribe, g as resolveA2AProtocolVersion } from "../../a2a-CQlJ-SZr.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
require("../../rolldown-runtime-10nMEhjP.cjs");
|
|
3
|
-
const require_agent_builder = require("../../agent-builder-
|
|
3
|
+
const require_agent_builder = require("../../agent-builder-B9gEkbch.cjs");
|
|
4
4
|
exports.CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE = require_agent_builder.CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE;
|
|
5
5
|
exports.CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE = require_agent_builder.CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE;
|
|
6
6
|
exports.GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE = require_agent_builder.GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE, n as CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE, r as GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE, i as GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE, a as LIST_AGENT_BUILDER_ACTIONS_ROUTE, o as LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE, s as OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE, c as OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE, l as RESUME_AGENT_BUILDER_ACTION_ROUTE, u as RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE, d as RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE, f as RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE, p as START_AGENT_BUILDER_ACTION_RUN_ROUTE, m as START_ASYNC_AGENT_BUILDER_ACTION_ROUTE, h as STREAM_AGENT_BUILDER_ACTION_ROUTE, g as STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE } from "../../agent-builder-
|
|
1
|
+
export { t as CANCEL_AGENT_BUILDER_ACTION_RUN_ROUTE, n as CREATE_AGENT_BUILDER_ACTION_RUN_ROUTE, r as GET_AGENT_BUILDER_ACTION_BY_ID_ROUTE, i as GET_AGENT_BUILDER_ACTION_RUN_BY_ID_ROUTE, a as LIST_AGENT_BUILDER_ACTIONS_ROUTE, o as LIST_AGENT_BUILDER_ACTION_RUNS_ROUTE, s as OBSERVE_STREAM_AGENT_BUILDER_ACTION_ROUTE, c as OBSERVE_STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE, l as RESUME_AGENT_BUILDER_ACTION_ROUTE, u as RESUME_ASYNC_AGENT_BUILDER_ACTION_ROUTE, d as RESUME_NO_WAIT_AGENT_BUILDER_ACTION_ROUTE, f as RESUME_STREAM_AGENT_BUILDER_ACTION_ROUTE, p as START_AGENT_BUILDER_ACTION_RUN_ROUTE, m as START_ASYNC_AGENT_BUILDER_ACTION_ROUTE, h as STREAM_AGENT_BUILDER_ACTION_ROUTE, g as STREAM_LEGACY_AGENT_BUILDER_ACTION_ROUTE } from "../../agent-builder-BF7OAl_R.js";
|
|
@@ -8,6 +8,7 @@ const require_route_builder = require("../../route-builder-DHqDrSSy.cjs");
|
|
|
8
8
|
const require_server_handlers_error = require("./error.cjs");
|
|
9
9
|
let zod_v4 = require("zod/v4");
|
|
10
10
|
let _mastra_core_error = require("@mastra/core/error");
|
|
11
|
+
let _mastra_core_storage = require("@mastra/core/storage");
|
|
11
12
|
// src/server/handlers/agent-controller.ts
|
|
12
13
|
/**
|
|
13
14
|
* AgentController session routes.
|
|
@@ -50,6 +51,13 @@ const RESERVED_THREAD_METADATA_KEYS = {
|
|
|
50
51
|
function isReservedThreadMetadataKey(key) {
|
|
51
52
|
return Object.hasOwn(RESERVED_THREAD_METADATA_KEYS, key) || key.startsWith("modeModelId_");
|
|
52
53
|
}
|
|
54
|
+
function storageTagFilter(tags) {
|
|
55
|
+
try {
|
|
56
|
+
return (0, _mastra_core_storage.validateStorageMetadataFilter)(tags);
|
|
57
|
+
} catch {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
53
61
|
function getRequestMessageAuthor(requestContext) {
|
|
54
62
|
const user = requestContext?.get(require_constants.MASTRA_USER_KEY);
|
|
55
63
|
if (!user || typeof user !== "object" || Array.isArray(user)) return void 0;
|
|
@@ -1088,14 +1096,17 @@ const LIST_AGENT_CONTROLLER_THREADS_ROUTE = require_route_builder.createRoute({
|
|
|
1088
1096
|
try {
|
|
1089
1097
|
const controller = getAgentControllerOrThrow(mastra, controllerId);
|
|
1090
1098
|
const resourceId = await resolveSessionResourceId(controller, sessionId);
|
|
1091
|
-
const
|
|
1099
|
+
const tagEntries = tags ? Object.entries(tags).filter(([key]) => !isReservedThreadMetadataKey(key)) : [];
|
|
1100
|
+
const threads = await controller.queryThreads({
|
|
1101
|
+
resourceId,
|
|
1102
|
+
metadata: storageTagFilter(Object.fromEntries(tagEntries))
|
|
1103
|
+
});
|
|
1092
1104
|
const getTags = (t) => {
|
|
1093
1105
|
const metadata = t.metadata ?? {};
|
|
1094
1106
|
const result = {};
|
|
1095
1107
|
for (const [key, value] of Object.entries(metadata)) if (typeof value === "string" && !isReservedThreadMetadataKey(key)) result[key] = value;
|
|
1096
1108
|
return result;
|
|
1097
1109
|
};
|
|
1098
|
-
const tagEntries = tags ? Object.entries(tags).filter(([key]) => !isReservedThreadMetadataKey(key)) : [];
|
|
1099
1110
|
const scoped = tagEntries.length > 0 ? threads.filter((t) => {
|
|
1100
1111
|
const metadata = t.metadata ?? {};
|
|
1101
1112
|
return tagEntries.every(([key, value]) => metadata[key] === value);
|