@mastra/server 1.51.0-alpha.4 → 1.51.0-alpha.5

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.
Files changed (38) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/{api-schema-manifest-BCWC4H3M.cjs → api-schema-manifest-AYK5QEZV.cjs} +4 -4
  3. package/dist/{api-schema-manifest-BCWC4H3M.cjs.map → api-schema-manifest-AYK5QEZV.cjs.map} +1 -1
  4. package/dist/{api-schema-manifest-JAOVUVBL.js → api-schema-manifest-K3NKXMAN.js} +3 -3
  5. package/dist/{api-schema-manifest-JAOVUVBL.js.map → api-schema-manifest-K3NKXMAN.js.map} +1 -1
  6. package/dist/{chunk-J55527SD.js → chunk-7IFWS7OK.js} +5 -5
  7. package/dist/{chunk-J55527SD.js.map → chunk-7IFWS7OK.js.map} +1 -1
  8. package/dist/{chunk-3CNMKXGF.cjs → chunk-BS75OYMS.cjs} +4 -3
  9. package/dist/chunk-BS75OYMS.cjs.map +1 -0
  10. package/dist/{chunk-XSU5P3J4.cjs → chunk-CD5HMC3B.cjs} +3 -3
  11. package/dist/{chunk-XSU5P3J4.cjs.map → chunk-CD5HMC3B.cjs.map} +1 -1
  12. package/dist/{chunk-D4X25DCY.js → chunk-CRKVDQD7.js} +3 -3
  13. package/dist/{chunk-D4X25DCY.js.map → chunk-CRKVDQD7.js.map} +1 -1
  14. package/dist/{chunk-4DCAAYEK.cjs → chunk-G3VJMWQN.cjs} +53 -53
  15. package/dist/{chunk-4DCAAYEK.cjs.map → chunk-G3VJMWQN.cjs.map} +1 -1
  16. package/dist/{chunk-UZMZNZGE.js → chunk-RZXHWEO7.js} +4 -3
  17. package/dist/chunk-RZXHWEO7.js.map +1 -0
  18. package/dist/{chunk-KC6AKFMQ.js → chunk-SB3YYDCD.js} +10 -3
  19. package/dist/chunk-SB3YYDCD.js.map +1 -0
  20. package/dist/{chunk-WITBUHHW.cjs → chunk-VTA32BYJ.cjs} +10 -3
  21. package/dist/chunk-VTA32BYJ.cjs.map +1 -0
  22. package/dist/docs/SKILL.md +1 -1
  23. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  24. package/dist/server/handlers/agent-controller.cjs +35 -35
  25. package/dist/server/handlers/agent-controller.d.ts.map +1 -1
  26. package/dist/server/handlers/agent-controller.js +1 -1
  27. package/dist/server/handlers/system.cjs +3 -3
  28. package/dist/server/handlers/system.js +1 -1
  29. package/dist/server/handlers/tool-providers.cjs +14 -14
  30. package/dist/server/handlers/tool-providers.d.ts.map +1 -1
  31. package/dist/server/handlers/tool-providers.js +1 -1
  32. package/dist/server/server-adapter/index.cjs +13 -13
  33. package/dist/server/server-adapter/index.js +2 -2
  34. package/package.json +6 -6
  35. package/dist/chunk-3CNMKXGF.cjs.map +0 -1
  36. package/dist/chunk-KC6AKFMQ.js.map +0 -1
  37. package/dist/chunk-UZMZNZGE.js.map +0 -1
  38. package/dist/chunk-WITBUHHW.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/server/handlers/agent-controller.ts"],"names":["controller"],"mappings":"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","file":"chunk-KC6AKFMQ.js","sourcesContent":["import type { Agent } from '@mastra/core/agent';\nimport type { AgentController, Session } from '@mastra/core/agent-controller';\n// Type-only import: erased at runtime, so this cannot crash against an older\n// @mastra/core that lacks the `./agent-controller` subpath export. Controller\n// resolution at runtime goes through mastra.getAgentController?.(), never a\n// value import.\nimport { z } from 'zod/v4';\n\nimport { HTTPException } from '../http-exception';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\n\n/**\n * AgentController session routes.\n *\n * An AgentController registered on a Mastra instance (via\n * `new Mastra({ agentControllers })`) exposes its sessions over HTTP so\n * non-terminal clients — e.g. a browser-based MastraCode — can create sessions,\n * send messages, stream events, and drive run-control. Each route resolves its\n * target AgentController by id, then operates on a session bound to a\n * `resourceId` (get-or-create, so reconnects resume rather than fork the\n * conversation).\n */\n\n/**\n * Internal thread-metadata keys that `Session.loadMetadata()` reads back as\n * runtime bookkeeping (selected model/mode, observer/reflector config, token\n * usage). They share the flat thread `metadata` bag with user-provided session\n * scoping tags, so they must never be treated as tags here.\n *\n * Mirrors core's `isReservedThreadMetadataKey`; kept local because importing the\n * value from `@mastra/core` would exceed this package's peer-dependency floor.\n */\nfunction isReservedThreadMetadataKey(key: string): boolean {\n return (\n key === 'currentModelId' ||\n key === 'currentModeId' ||\n key === 'observerModelId' ||\n key === 'reflectorModelId' ||\n key === 'observationThreshold' ||\n key === 'reflectionThreshold' ||\n key === 'tokenUsage' ||\n key.startsWith('modeModelId_')\n );\n}\n\n/**\n * Resolves a controller by id via the canonical `mastra.getAgentController`\n * accessor, throwing a 404 if no controller is registered under that id.\n */\nfunction getAgentControllerOrThrow(\n mastra: {\n getAgentController?: (id: string) => AgentController<any> | undefined;\n },\n controllerId: string,\n): AgentController<any> {\n const controller = mastra.getAgentController?.(controllerId);\n if (!controller) {\n throw new HTTPException(404, { message: `agent controller \"${controllerId}\" not found` });\n }\n return controller;\n}\n\nasync function getSession(\n controller: AgentController<any>,\n resourceId: string,\n tags?: Record<string, string>,\n): Promise<Session<any>> {\n await controller.init();\n return controller.createSession({ resourceId, id: resourceId, ownerId: controller.id, tags });\n}\n\n// ---------------------------------------------------------------------------\n// Schemas\n// ---------------------------------------------------------------------------\n\nconst controllerIdPathParams = z.object({ controllerId: z.string() });\nconst sessionPathParams = z.object({ controllerId: z.string(), resourceId: z.string() });\n\nconst createSessionBodySchema = z.object({\n resourceId: z.string(),\n tags: z.record(z.string(), z.string()).optional(),\n});\nconst sendMessageBodySchema = z.object({ message: z.string() });\nconst steerBodySchema = z.object({ message: z.string() });\nconst toolApprovalBodySchema = z.object({\n toolCallId: z.string(),\n approved: z.boolean(),\n});\nconst toolSuspensionBodySchema = z.object({\n toolCallId: z.string(),\n // Free-form resume payload. For ask_user this is a string (or string[] for\n // multi-select); for submit_plan it's `{ action, feedback? }`; for\n // request_access it's \"Yes\"/\"No\".\n resumeData: z.any(),\n});\nconst switchModeBodySchema = z.object({ modeId: z.string() });\nconst switchModelBodySchema = z.object({\n modelId: z.string(),\n scope: z.enum(['global', 'thread']).optional(),\n modeId: z.string().optional(),\n});\nconst switchThreadBodySchema = z.object({ threadId: z.string() });\nconst createThreadBodySchema = z.object({ title: z.string().optional() });\nconst renameThreadBodySchema = z.object({ title: z.string() });\nconst threadPathParams = z.object({ controllerId: z.string(), resourceId: z.string(), threadId: z.string() });\nconst cloneThreadBodySchema = z.object({\n sourceThreadId: z.string().optional(),\n title: z.string().optional(),\n});\nconst listMessagesQuerySchema = z.object({ limit: z.coerce.number().optional() });\n/**\n * `tags` arrives as a JSON-encoded object in the query string (query params are\n * flat strings). It scopes the listing to threads whose metadata matches every\n * tag — e.g. `{ projectPath }` so git worktrees sharing a resourceId each see\n * only their own threads. Malformed JSON is treated as \"no filter\".\n */\nconst listThreadsQuerySchema = z.object({\n limit: z.coerce.number().optional(),\n tags: z\n .preprocess(value => {\n if (typeof value !== 'string' || value.length === 0) return undefined;\n try {\n return JSON.parse(value);\n } catch {\n return undefined;\n }\n }, z.record(z.string(), z.string()).optional())\n .optional(),\n});\nconst followUpBodySchema = z.object({ message: z.string() });\n\nconst sendNotificationBodySchema = z.object({\n source: z.string(),\n kind: z.string(),\n summary: z.string(),\n priority: z.enum(['low', 'medium', 'high', 'urgent']).optional(),\n payload: z.any().optional(),\n sourceId: z.string().optional(),\n dedupeKey: z.string().optional(),\n coalesceKey: z.string().optional(),\n attributes: z.record(z.string(), z.unknown()).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\n\nconst listAgentControllersResponseSchema = z.object({\n agentControllers: z.array(z.object({ id: z.string() })),\n});\nconst createSessionResponseSchema = z.object({\n controllerId: z.string(),\n resourceId: z.string(),\n threadId: z.string().optional(),\n});\nconst ackResponseSchema = z.object({ ok: z.boolean() });\n/**\n * Status-line relevant slice of the session's observational-memory progress.\n * Mirrors the TUI status line: `msg pending/threshold ↓removal` (the active\n * message window before an observation fires) and `mem observed/reflection\n * ↓savings` (accumulated observations before a reflection fires).\n */\nconst omProgressSummarySchema = z.object({\n status: z.string(),\n pendingTokens: z.number(),\n threshold: z.number(),\n thresholdPercent: z.number(),\n observationTokens: z.number(),\n reflectionThreshold: z.number(),\n reflectionThresholdPercent: z.number(),\n /** Tokens the next observation will remove from the message window. */\n projectedMessageRemoval: z.number(),\n /** Tokens the next reflection is projected to save. */\n projectedReflectionSavings: z.number(),\n});\nconst sessionSettingsSchema = z.object({\n yolo: z.boolean(),\n thinkingLevel: z.enum(['off', 'low', 'medium', 'high', 'xhigh']),\n notifications: z.enum(['off', 'bell', 'system', 'both']),\n smartEditing: z.boolean(),\n});\nconst sessionStateResponseSchema = z.object({\n controllerId: z.string(),\n resourceId: z.string(),\n threadId: z.string().optional(),\n modeId: z.string(),\n modelId: z.string(),\n omProgress: omProgressSummarySchema.optional(),\n tokenUsage: z.record(z.string(), z.unknown()).optional(),\n settings: sessionSettingsSchema.optional(),\n});\nconst listModesResponseSchema = z.object({\n modes: z.array(z.object({ id: z.string(), name: z.string().optional() })),\n});\nconst listThreadsResponseSchema = z.object({\n threads: z.array(\n z.object({\n id: z.string(),\n title: z.string().optional(),\n updatedAt: z.string().optional(),\n /** The session scoping tags stamped on this thread (e.g. `{ projectPath }`). */\n tags: z.record(z.string(), z.string()).optional(),\n }),\n ),\n});\nconst threadResponseSchema = z.object({\n id: z.string(),\n title: z.string().optional(),\n resourceId: z.string().optional(),\n createdAt: z.string().optional(),\n updatedAt: z.string().optional(),\n});\nconst messageContentSchema = z\n .object({\n type: z.string(),\n })\n .passthrough();\nconst listMessagesResponseSchema = z.object({\n messages: z.array(\n z.object({\n id: z.string(),\n role: z.enum(['user', 'assistant', 'system']),\n content: z.array(messageContentSchema),\n createdAt: z.string().optional(),\n }),\n ),\n});\nconst listModelsResponseSchema = z.object({\n models: z.array(\n z.object({\n id: z.string(),\n provider: z.string(),\n modelName: z.string(),\n hasApiKey: z.boolean(),\n useCount: z.number(),\n }),\n ),\n});\nconst workspaceStatusResponseSchema = z.object({\n hasWorkspace: z.boolean(),\n isReady: z.boolean(),\n});\nconst omRecordResponseSchema = z.object({\n record: z.any().optional(),\n});\nconst permissionPolicyEnum = z.enum(['allow', 'ask', 'deny']);\nconst toolCategoryEnum = z.enum(['read', 'edit', 'execute', 'mcp', 'other']);\nconst permissionRulesResponseSchema = z.object({\n categories: z.record(z.string(), permissionPolicyEnum).optional(),\n tools: z.record(z.string(), permissionPolicyEnum).optional(),\n});\nconst setCategoryPermissionBodySchema = z.object({\n category: toolCategoryEnum,\n policy: permissionPolicyEnum,\n});\nconst setToolPermissionBodySchema = z.object({\n toolName: z.string(),\n policy: permissionPolicyEnum,\n});\n\n// ---------------------------------------------------------------------------\n// Routes\n// ---------------------------------------------------------------------------\n\nexport const LIST_AGENT_CONTROLLERS_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-controller',\n responseType: 'json' as const,\n responseSchema: listAgentControllersResponseSchema,\n summary: 'List agent controllers',\n description: 'Lists the agent controllers hosted on this Mastra instance.',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:read',\n handler: async ({ mastra }) => {\n try {\n const ids = new Set<string>();\n if (mastra.listAgentControllers) {\n for (const id of Object.keys(mastra.listAgentControllers())) ids.add(id);\n }\n return { agentControllers: Array.from(ids).map(id => ({ id })) };\n } catch (error) {\n return handleError(error, 'error listing agent controllers');\n }\n },\n});\n\nexport const CREATE_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-controller/:controllerId/sessions',\n responseType: 'json' as const,\n pathParamSchema: controllerIdPathParams,\n bodySchema: createSessionBodySchema,\n responseSchema: createSessionResponseSchema,\n summary: 'Create or resume a controller session',\n description:\n 'Creates a session for the given resourceId, or returns the existing one (get-or-create), so reconnects resume the conversation.',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, tags }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId, tags);\n return {\n controllerId,\n resourceId,\n threadId: session.thread.getId() ?? undefined,\n };\n } catch (error) {\n return handleError(error, 'error creating controller session');\n }\n },\n});\n\nexport const STREAM_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-controller/:controllerId/sessions/:resourceId/stream',\n responseType: 'stream' as const,\n streamFormat: 'sse' as const,\n sseFlushOnConnect: true,\n pathParamSchema: sessionPathParams,\n summary: 'Stream controller session events',\n description: 'Subscribes to a session\\u2019s event bus and streams events to the client over SSE.',\n tags: ['AgentController', 'Streaming'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:read',\n handler: async ({ mastra, controllerId, resourceId, abortSignal }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n\n let cleanedUp = false;\n let heartbeat: ReturnType<typeof setTimeout> | undefined;\n let unsubscribe: (() => void) | undefined;\n const clearHeartbeat = () => {\n if (heartbeat) {\n clearTimeout(heartbeat);\n heartbeat = undefined;\n }\n };\n const cleanup = (controller?: ReadableStreamDefaultController) => {\n if (cleanedUp) return;\n cleanedUp = true;\n clearHeartbeat();\n unsubscribe?.();\n if (controller) {\n try {\n controller.close();\n } catch {}\n }\n };\n\n // The stream yields raw event objects plus `:`-prefixed SSE comments\n // (heartbeats); the server adapter frames events and passes comments\n // through verbatim.\n return new ReadableStream<unknown>({\n start(controller) {\n const scheduleHeartbeat = () => {\n if (cleanedUp) return;\n clearHeartbeat();\n heartbeat = setTimeout(() => {\n heartbeat = undefined;\n if (cleanedUp) return;\n try {\n controller.enqueue(': heartbeat\\n\\n');\n } catch {\n cleanup();\n return;\n }\n scheduleHeartbeat();\n }, 25_000);\n };\n\n unsubscribe = session.subscribe(event => {\n if (cleanedUp) return;\n try {\n // Enqueue the raw event object. The server adapter is responsible\n // for SSE framing (`data: <json>\\n\\n`); enqueuing a pre-framed\n // string here would double-encode it.\n controller.enqueue(event);\n scheduleHeartbeat();\n } catch {\n cleanup();\n }\n });\n\n const abortCleanup = () => cleanup(controller);\n abortSignal?.addEventListener('abort', abortCleanup, { once: true });\n scheduleHeartbeat();\n },\n cancel() {\n cleanup();\n },\n });\n } catch (error) {\n return handleError(error, 'error streaming controller session');\n }\n },\n});\n\nexport const SEND_AGENT_CONTROLLER_MESSAGE_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-controller/:controllerId/sessions/:resourceId/messages',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n bodySchema: sendMessageBodySchema,\n responseSchema: ackResponseSchema,\n summary: 'Send a message to a controller session',\n description: 'Sends a user message to the session. The reply streams as events on the session\\u2019s SSE stream.',\n tags: ['AgentController', 'Streaming'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, message, requestContext }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n // Forward the server middleware's requestContext so identity injected in\n // `server.middleware` reaches dynamic instructions and tools (same as the\n // plain agent message route).\n void session.sendMessage({ content: message, requestContext });\n return { ok: true };\n } catch (error) {\n return handleError(error, 'error sending controller message');\n }\n },\n});\n\nexport const ABORT_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-controller/:controllerId/sessions/:resourceId/abort',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n responseSchema: ackResponseSchema,\n summary: 'Abort a controller session run',\n description: 'Aborts the in-flight run for the session, if any.',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n session.abort();\n return { ok: true };\n } catch (error) {\n return handleError(error, 'error aborting controller session');\n }\n },\n});\n\nexport const AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-controller/:controllerId/sessions/:resourceId/tool-approval',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n bodySchema: toolApprovalBodySchema,\n responseSchema: ackResponseSchema,\n summary: 'Respond to a controller tool approval',\n description: 'Approves or declines a pending tool call surfaced by the session.',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, toolCallId, approved, requestContext }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n // Resolve the parked approval gate so the session's own run loop drives the\n // continuation and emits its events to subscribers (the open SSE stream).\n // Calling approveToolCall/declineToolCall directly would bypass the gate,\n // leaving the run loop hung and duplicating the resumed stream.\n // Pass toolCallId so a stale request cannot resolve a different pending gate.\n session.respondToToolApproval({ toolCallId, decision: approved ? 'approve' : 'decline', requestContext });\n return { ok: true };\n } catch (error) {\n return handleError(error, 'error responding to controller tool approval');\n }\n },\n});\n\nexport const AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-controller/:controllerId/sessions/:resourceId/tool-suspension',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n bodySchema: toolSuspensionBodySchema,\n responseSchema: ackResponseSchema,\n summary: 'Respond to a suspended controller tool',\n description:\n 'Resumes a suspended interactive tool (ask_user, request_access, submit_plan) with the provided resume data.',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, toolCallId, resumeData, requestContext }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n await session.respondToToolSuspension({ toolCallId, resumeData, requestContext });\n return { ok: true };\n } catch (error) {\n return handleError(error, 'error responding to controller tool suspension');\n }\n },\n});\n\nexport const STEER_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-controller/:controllerId/sessions/:resourceId/steer',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n bodySchema: steerBodySchema,\n responseSchema: ackResponseSchema,\n summary: 'Steer the in-flight run',\n description: 'Injects a message into the running turn (interjection) without starting a new run.',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, message, requestContext }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n void session.steer({ content: message, requestContext });\n return { ok: true };\n } catch (error) {\n return handleError(error, 'error steering controller session');\n }\n },\n});\n\nexport const SWITCH_AGENT_CONTROLLER_MODE_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-controller/:controllerId/sessions/:resourceId/mode',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n bodySchema: switchModeBodySchema,\n responseSchema: ackResponseSchema,\n summary: 'Switch the session mode',\n description: 'Switches the active mode (e.g. build, plan) for the session.',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, modeId }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n await session.mode.switch({ modeId });\n return { ok: true };\n } catch (error) {\n return handleError(error, 'error switching controller mode');\n }\n },\n});\n\nexport const SWITCH_AGENT_CONTROLLER_MODEL_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-controller/:controllerId/sessions/:resourceId/model',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n bodySchema: switchModelBodySchema,\n responseSchema: ackResponseSchema,\n summary: 'Switch the session model',\n description: 'Switches the model for the session, scoped to the thread by default.',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, modelId, scope, modeId }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n await session.model.switch({ modelId, scope, modeId });\n return { ok: true };\n } catch (error) {\n return handleError(error, 'error switching controller model');\n }\n },\n});\n\nexport const SWITCH_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-controller/:controllerId/sessions/:resourceId/thread',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n bodySchema: switchThreadBodySchema,\n responseSchema: ackResponseSchema,\n summary: 'Switch the session thread',\n description: 'Switches the session to an existing thread (rebinding its stream and state).',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, threadId }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n await session.thread.switch({ threadId });\n return { ok: true };\n } catch (error) {\n return handleError(error, 'error switching controller thread');\n }\n },\n});\n\nexport const GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-controller/:controllerId/sessions/:resourceId',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n responseSchema: sessionStateResponseSchema,\n summary: 'Get session state',\n description: 'Returns the current mode, model, and thread for the session (for initial UI hydration).',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:read',\n handler: async ({ mastra, controllerId, resourceId }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n const ds = session.displayState.get();\n const om = ds.omProgress;\n const reflectionSavings =\n om.buffered.reflection.inputObservationTokens - om.buffered.reflection.observationTokens;\n const st = session.state.get() as Record<string, unknown>;\n const oneOf = <T extends string>(value: unknown, allowed: readonly T[], fallback: T): T =>\n allowed.includes(value as T) ? (value as T) : fallback;\n return {\n controllerId,\n resourceId,\n threadId: session.thread.getId() ?? undefined,\n modeId: session.mode.get(),\n modelId: session.model.get(),\n omProgress: {\n status: om.status,\n pendingTokens: om.pendingTokens,\n threshold: om.threshold,\n thresholdPercent: om.thresholdPercent,\n observationTokens: om.observationTokens,\n reflectionThreshold: om.reflectionThreshold,\n reflectionThresholdPercent: om.reflectionThresholdPercent,\n projectedMessageRemoval: om.buffered.observations.projectedMessageRemoval,\n projectedReflectionSavings: reflectionSavings > 0 ? reflectionSavings : 0,\n },\n tokenUsage: ds.tokenUsage as unknown as Record<string, unknown>,\n settings: {\n yolo: st.yolo === true,\n thinkingLevel: oneOf(st.thinkingLevel, ['off', 'low', 'medium', 'high', 'xhigh'] as const, 'off'),\n notifications: oneOf(st.notifications, ['off', 'bell', 'system', 'both'] as const, 'off'),\n smartEditing: st.smartEditing !== false,\n },\n };\n } catch (error) {\n return handleError(error, 'error reading controller session state');\n }\n },\n});\n\nexport const LIST_AGENT_CONTROLLER_MODES_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-controller/:controllerId/modes',\n responseType: 'json' as const,\n pathParamSchema: controllerIdPathParams,\n responseSchema: listModesResponseSchema,\n summary: 'List controller modes',\n description: 'Lists the modes configured on the controller (e.g. build, plan).',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:read',\n handler: async ({ mastra, controllerId }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n return {\n modes: controller.listModes().map(mode => ({ id: mode.id, name: mode.name })),\n };\n } catch (error) {\n return handleError(error, 'error listing controller modes');\n }\n },\n});\n\nexport const LIST_AGENT_CONTROLLER_THREADS_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-controller/:controllerId/sessions/:resourceId/threads',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n queryParamSchema: listThreadsQuerySchema,\n responseSchema: listThreadsResponseSchema,\n summary: 'List session threads',\n description:\n '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). Pass `tags` (a JSON-encoded object) to scope the list to threads matching every tag \\u2014 e.g. `{ projectPath }` so git worktrees sharing a resourceId each see only their own threads.',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:read',\n handler: async ({ mastra, controllerId, resourceId, limit, tags }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n const threads = await session.thread.list();\n // A thread's metadata mixes the session scoping tags (stamped at creation,\n // e.g. `projectPath`) with internal session bookkeeping that\n // `Session.loadMetadata()` reads back (selected model/mode, observer/\n // reflector config, token usage). Return only the string-valued scoping\n // tags, skipping reserved internal keys so they never leak out as \"tags\"\n // or become matchable via the `tags` filter.\n const getTags = (t: { metadata?: unknown }): Record<string, string> => {\n const metadata = (t.metadata as Record<string, unknown> | undefined) ?? {};\n const result: Record<string, string> = {};\n for (const [key, value] of Object.entries(metadata)) {\n if (typeof value === 'string' && !isReservedThreadMetadataKey(key)) result[key] = value;\n }\n return result;\n };\n // A single resourceId can be shared across git worktrees of the same repo\n // (the id is derived from the git URL). When tags are supplied, scope to\n // threads whose metadata matches every tag and drop the rest, so worktree A\n // never shows worktree B's threads. Mirrors the controller's tag-aware\n // selection and the TUI's worktree-strict listing. Reserved internal keys\n // are ignored as filter tags so callers can't match on session bookkeeping.\n const tagEntries = tags ? Object.entries(tags).filter(([key]) => !isReservedThreadMetadataKey(key)) : [];\n const scoped =\n tagEntries.length > 0\n ? threads.filter(t => {\n const metadata = (t.metadata as Record<string, unknown> | undefined) ?? {};\n return tagEntries.every(([key, value]) => metadata[key] === value);\n })\n : threads;\n const toTime = (t: { updatedAt?: Date; createdAt?: Date }) => (t.updatedAt ?? t.createdAt)?.getTime() ?? 0;\n const sorted = [...scoped].sort((a, b) => toTime(b) - toTime(a));\n const max = Number(limit);\n const limited = Number.isFinite(max) && max > 0 ? sorted.slice(0, max) : sorted;\n return {\n threads: limited.map(t => {\n const threadTags = getTags(t);\n return {\n id: t.id,\n title: t.title,\n tags: Object.keys(threadTags).length > 0 ? threadTags : undefined,\n updatedAt: t.updatedAt instanceof Date ? t.updatedAt.toISOString() : undefined,\n };\n }),\n };\n } catch (error) {\n return handleError(error, 'error listing controller threads');\n }\n },\n});\n\nexport const SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-controller/:controllerId/sessions/:resourceId/notifications',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n bodySchema: sendNotificationBodySchema,\n responseSchema: z.object({\n accepted: z.boolean(),\n notificationId: z.string().optional(),\n decision: z.string().optional(),\n runId: z.string().optional(),\n }),\n summary: 'Send a notification signal to a session',\n description:\n '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.',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({\n mastra,\n controllerId,\n resourceId,\n source,\n kind,\n summary,\n priority,\n payload,\n sourceId,\n dedupeKey,\n coalesceKey,\n attributes,\n metadata,\n }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n const result = await session.sendNotificationSignal({\n source,\n kind,\n summary,\n priority,\n payload,\n sourceId,\n dedupeKey,\n coalesceKey,\n attributes: attributes as Record<string, string | number | boolean | null | undefined> | undefined,\n metadata,\n });\n return {\n accepted: result.accepted !== undefined,\n notificationId: result.record?.id,\n decision: result.decision?.action,\n runId: result.runId,\n };\n } catch (error) {\n return handleError(error, 'error sending controller notification');\n }\n },\n});\n\n// ---------------------------------------------------------------------------\n// Thread lifecycle\n// ---------------------------------------------------------------------------\n\nexport const CREATE_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-controller/:controllerId/sessions/:resourceId/threads',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n bodySchema: createThreadBodySchema,\n responseSchema: threadResponseSchema,\n summary: 'Create a new thread',\n description: 'Creates a new thread in the session (unbinds the previous thread, binds the new one).',\n tags: ['AgentController', 'Threads'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, title }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n const thread = await session.thread.create({ title });\n return {\n id: thread.id,\n title: thread.title,\n resourceId: thread.resourceId,\n createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : undefined,\n updatedAt: thread.updatedAt instanceof Date ? thread.updatedAt.toISOString() : undefined,\n };\n } catch (error) {\n return handleError(error, 'error creating controller thread');\n }\n },\n});\n\nexport const DELETE_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({\n method: 'DELETE',\n path: '/agent-controller/:controllerId/sessions/:resourceId/threads/:threadId',\n responseType: 'json' as const,\n pathParamSchema: threadPathParams,\n responseSchema: ackResponseSchema,\n summary: 'Delete a thread',\n description: 'Deletes a thread. If the deleted thread is the active one, the session is unbound.',\n tags: ['AgentController', 'Threads'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, threadId }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n await session.thread.delete({ threadId });\n return { ok: true };\n } catch (error) {\n return handleError(error, 'error deleting controller thread');\n }\n },\n});\n\nexport const RENAME_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({\n method: 'PUT',\n path: '/agent-controller/:controllerId/sessions/:resourceId/threads/:threadId',\n responseType: 'json' as const,\n pathParamSchema: threadPathParams,\n bodySchema: renameThreadBodySchema,\n responseSchema: ackResponseSchema,\n summary: 'Rename a thread',\n description: 'Renames the specified thread.',\n tags: ['AgentController', 'Threads'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, threadId, title }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n // Ensure the thread is the active one (switch if not)\n if (session.thread.getId() !== threadId) {\n await session.thread.switch({ threadId });\n }\n await session.thread.rename({ title });\n return { ok: true };\n } catch (error) {\n return handleError(error, 'error renaming controller thread');\n }\n },\n});\n\nexport const CLONE_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-controller/:controllerId/sessions/:resourceId/threads/clone',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n bodySchema: cloneThreadBodySchema,\n responseSchema: threadResponseSchema,\n summary: 'Clone a thread',\n description: 'Clones a thread (and its messages). The session binds to the new clone.',\n tags: ['AgentController', 'Threads'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, sourceThreadId, title }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n const thread = await session.thread.clone({ sourceThreadId, title });\n return {\n id: thread.id,\n title: thread.title,\n resourceId: thread.resourceId,\n createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : undefined,\n updatedAt: thread.updatedAt instanceof Date ? thread.updatedAt.toISOString() : undefined,\n };\n } catch (error) {\n return handleError(error, 'error cloning controller thread');\n }\n },\n});\n\nexport const LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-controller/:controllerId/sessions/:resourceId/threads/:threadId/messages',\n responseType: 'json' as const,\n pathParamSchema: threadPathParams,\n queryParamSchema: listMessagesQuerySchema,\n responseSchema: listMessagesResponseSchema,\n summary: 'List thread messages',\n description: 'Lists messages for a specific thread. Returns most recent messages first.',\n tags: ['AgentController', 'Threads'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:read',\n handler: async ({ mastra, controllerId, resourceId, threadId, limit }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n const messages = await session.thread.listMessages({ threadId, limit });\n return {\n messages: messages.map(m => ({\n id: m.id,\n role: m.role,\n content: m.content as Array<{ type: string; [key: string]: unknown }>,\n createdAt: m.createdAt instanceof Date ? m.createdAt.toISOString() : undefined,\n })),\n };\n } catch (error) {\n return handleError(error, 'error listing controller thread messages');\n }\n },\n});\n\n// ---------------------------------------------------------------------------\n// Follow-up\n// ---------------------------------------------------------------------------\n\nexport const FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-controller/:controllerId/sessions/:resourceId/follow-up',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n bodySchema: followUpBodySchema,\n responseSchema: ackResponseSchema,\n summary: 'Queue a follow-up message',\n description:\n 'Queues a follow-up message. If the session is idle it sends immediately; if a run is active it queues for after completion.',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, message, requestContext }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n void session.followUp({ content: message, requestContext });\n return { ok: true };\n } catch (error) {\n return handleError(error, 'error queuing controller follow-up');\n }\n },\n});\n\n// ---------------------------------------------------------------------------\n// Models\n// ---------------------------------------------------------------------------\n\nexport const LIST_AGENT_CONTROLLER_MODELS_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-controller/:controllerId/models',\n responseType: 'json' as const,\n pathParamSchema: controllerIdPathParams,\n responseSchema: listModelsResponseSchema,\n summary: 'List available models',\n description: 'Lists all models available on this controller (with auth status and use counts).',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:read',\n handler: async ({ mastra, controllerId }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n await controller.init();\n const models = await controller.listAvailableModels();\n return {\n models: models.map(m => ({\n id: m.id,\n provider: m.provider,\n modelName: m.modelName,\n hasApiKey: m.hasApiKey,\n useCount: m.useCount,\n })),\n };\n } catch (error) {\n return handleError(error, 'error listing controller models');\n }\n },\n});\n\n// ---------------------------------------------------------------------------\n// Workspace status\n// ---------------------------------------------------------------------------\n\nexport const GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-controller/:controllerId/workspace',\n responseType: 'json' as const,\n pathParamSchema: controllerIdPathParams,\n responseSchema: workspaceStatusResponseSchema,\n summary: 'Get workspace status',\n description: 'Returns whether the controller has a workspace configured and whether it is ready.',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:read',\n handler: async ({ mastra, controllerId }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n await controller.init();\n return {\n hasWorkspace: controller.hasWorkspace(),\n isReady: controller.isWorkspaceReady(),\n };\n } catch (error) {\n return handleError(error, 'error reading controller workspace status');\n }\n },\n});\n\n// ---------------------------------------------------------------------------\n// Observational Memory\n// ---------------------------------------------------------------------------\n\nexport const GET_AGENT_CONTROLLER_OM_RECORD_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-controller/:controllerId/sessions/:resourceId/om',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n responseSchema: omRecordResponseSchema,\n summary: 'Get observational memory record',\n description: 'Returns the current observational memory record for the session\\u2019s thread/resource.',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:read',\n handler: async ({ mastra, controllerId, resourceId }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n const record = await controller.getObservationalMemoryRecord(session);\n return { record: record ?? undefined };\n } catch (error) {\n return handleError(error, 'error reading controller OM record');\n }\n },\n});\n\n// ---------------------------------------------------------------------------\n// Resource identity\n// ---------------------------------------------------------------------------\n\nexport const SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-controller/:controllerId/sessions/:resourceId/resource',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n bodySchema: z.object({ newResourceId: z.string() }),\n responseSchema: ackResponseSchema,\n summary: 'Change the session resource ID',\n description: 'Updates the session\\u2019s resource identity (e.g. when a user logs in).',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, newResourceId }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n await controller.setResourceId(session, { resourceId: newResourceId });\n return { ok: true };\n } catch (error) {\n return handleError(error, 'error setting controller resource ID');\n }\n },\n});\n\nexport const GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-controller/:controllerId/sessions/:resourceId/resources',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n responseSchema: z.object({ resourceIds: z.array(z.string()) }),\n summary: 'Get known resource IDs',\n description: 'Lists the resource IDs known to this session (from threads).',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:read',\n handler: async ({ mastra, controllerId, resourceId }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n const resourceIds = await controller.getKnownResourceIds(session);\n return { resourceIds };\n } catch (error) {\n return handleError(error, 'error listing controller resource IDs');\n }\n },\n});\n\n// ---------------------------------------------------------------------------\n// Goals\n// ---------------------------------------------------------------------------\n\nconst setGoalBodySchema = z.object({\n objective: z.string(),\n judgeModelId: z.string().optional(),\n maxRuns: z.number().optional(),\n});\nconst updateGoalBodySchema = z.object({\n judgeModelId: z.string().optional(),\n maxRuns: z.number().optional(),\n status: z.enum(['active', 'paused', 'done']).optional(),\n});\nconst goalRecordSchema = z.object({\n id: z.string().optional(),\n objective: z.string(),\n status: z.enum(['active', 'paused', 'done']),\n runsUsed: z.number(),\n maxRuns: z.number().optional(),\n judgeModelId: z.string().optional(),\n startedAt: z.number(),\n updatedAt: z.number(),\n pausedReason: z.string().optional(),\n});\nconst goalResponseSchema = z.object({ goal: goalRecordSchema.optional() });\n\nfunction getAgentForSession(controller: AgentController<any>, session: Session<any>): Agent {\n return controller.getCurrentAgent(session);\n}\n\nexport const GET_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-controller/:controllerId/sessions/:resourceId/goal',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n responseSchema: goalResponseSchema,\n summary: 'Get the current goal',\n description: 'Returns the active/paused/done goal objective for the session\\u2019s thread, if any.',\n tags: ['AgentController', 'Goals'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:read',\n handler: async ({ mastra, controllerId, resourceId }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n const threadId = session.thread.getId();\n if (!threadId) return { goal: undefined };\n const agent = getAgentForSession(controller, session);\n const record = await agent.getObjective({ threadId });\n return { goal: record ?? undefined };\n } catch (error) {\n return handleError(error, 'error reading controller goal');\n }\n },\n});\n\nexport const SET_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({\n method: 'POST',\n path: '/agent-controller/:controllerId/sessions/:resourceId/goal',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n bodySchema: setGoalBodySchema,\n responseSchema: goalResponseSchema,\n summary: 'Set a goal',\n description:\n 'Sets a new objective for the session\\u2019s thread. The agent\\u2019s in-loop goal judge evaluates progress after each turn.',\n tags: ['AgentController', 'Goals'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, objective, judgeModelId, maxRuns }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n const threadId = session.thread.getId();\n if (!threadId) throw new HTTPException(400, { message: 'session has no active thread' });\n const agent = getAgentForSession(controller, session);\n const record = await agent.setObjective(objective, {\n threadId,\n resourceId: session.identity.getResourceId(),\n ...(judgeModelId ? { judgeModelId } : {}),\n ...(maxRuns != null ? { maxRuns } : {}),\n });\n return { goal: record ?? undefined };\n } catch (error) {\n return handleError(error, 'error setting controller goal');\n }\n },\n});\n\nexport const UPDATE_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({\n method: 'PUT',\n path: '/agent-controller/:controllerId/sessions/:resourceId/goal',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n bodySchema: updateGoalBodySchema,\n responseSchema: goalResponseSchema,\n summary: 'Update goal options',\n description: 'Updates the judge model, max runs, or status of the active goal. No-op when no goal is set.',\n tags: ['AgentController', 'Goals'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, judgeModelId, maxRuns, status }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n const threadId = session.thread.getId();\n if (!threadId) throw new HTTPException(400, { message: 'session has no active thread' });\n const agent = getAgentForSession(controller, session);\n const record = await agent.updateObjectiveOptions({\n threadId,\n ...(judgeModelId !== undefined ? { judgeModelId } : {}),\n ...(maxRuns !== undefined ? { maxRuns } : {}),\n ...(status !== undefined ? { status } : {}),\n });\n return { goal: record ?? undefined };\n } catch (error) {\n return handleError(error, 'error updating controller goal');\n }\n },\n});\n\nexport const CLEAR_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({\n method: 'DELETE',\n path: '/agent-controller/:controllerId/sessions/:resourceId/goal',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n responseSchema: ackResponseSchema,\n summary: 'Clear the goal',\n description: 'Removes the active goal from the session\\u2019s thread.',\n tags: ['AgentController', 'Goals'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n const threadId = session.thread.getId();\n if (!threadId) throw new HTTPException(400, { message: 'session has no active thread' });\n const agent = getAgentForSession(controller, session);\n await agent.clearObjective({ threadId });\n return { ok: true };\n } catch (error) {\n return handleError(error, 'error clearing controller goal');\n }\n },\n});\n\n// ---------------------------------------------------------------------------\n// Permissions\n// ---------------------------------------------------------------------------\n\nexport const GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/agent-controller/:controllerId/sessions/:resourceId/permissions',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n responseSchema: permissionRulesResponseSchema,\n summary: 'Get permission rules',\n description: 'Returns the current permission rules (per-category and per-tool policies) for the session.',\n tags: ['AgentController', 'Permissions'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:read',\n handler: async ({ mastra, controllerId, resourceId }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n const rules = session.permissions.getRules();\n return {\n categories: rules.categories as Record<string, 'allow' | 'ask' | 'deny'> | undefined,\n tools: rules.tools as Record<string, 'allow' | 'ask' | 'deny'> | undefined,\n };\n } catch (error) {\n return handleError(error, 'error getting controller permissions');\n }\n },\n});\n\nexport const SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE = createRoute({\n method: 'PUT',\n path: '/agent-controller/:controllerId/sessions/:resourceId/permissions/category',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n bodySchema: setCategoryPermissionBodySchema,\n responseSchema: ackResponseSchema,\n summary: 'Set permission for a tool category',\n description: 'Sets the approval policy (allow/ask/deny) for all tools in a category.',\n tags: ['AgentController', 'Permissions'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, category, policy }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n await session.permissions.setForCategory({ category, policy });\n return { ok: true };\n } catch (error) {\n return handleError(error, 'error setting controller category permission');\n }\n },\n});\n\nexport const SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE = createRoute({\n method: 'PUT',\n path: '/agent-controller/:controllerId/sessions/:resourceId/permissions/tool',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n bodySchema: setToolPermissionBodySchema,\n responseSchema: ackResponseSchema,\n summary: 'Set permission for a specific tool',\n description:\n 'Sets the approval policy (allow/ask/deny) for a specific tool by name. Per-tool overrides take precedence over category policies.',\n tags: ['AgentController', 'Permissions'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, toolName, policy }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n await session.permissions.setForTool({ toolName, policy });\n return { ok: true };\n } catch (error) {\n return handleError(error, 'error setting controller tool permission');\n }\n },\n});\n\n// ---------------------------------------------------------------------------\n// Session State\n// ---------------------------------------------------------------------------\n\nconst setSessionStateBodySchema = z.object({ state: z.record(z.string(), z.unknown()) });\n\nexport const SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE = createRoute({\n method: 'PUT',\n path: '/agent-controller/:controllerId/sessions/:resourceId/state',\n responseType: 'json' as const,\n pathParamSchema: sessionPathParams,\n bodySchema: setSessionStateBodySchema,\n responseSchema: ackResponseSchema,\n summary: 'Set session state',\n description:\n 'Merges the provided key-value pairs into the session state. Existing keys not in the payload are preserved.',\n tags: ['AgentController'],\n requiresAuth: true,\n requiresPermission: 'agent-controller:execute',\n handler: async ({ mastra, controllerId, resourceId, state }) => {\n try {\n const controller = getAgentControllerOrThrow(mastra, controllerId);\n const session = await getSession(controller, resourceId);\n await session.state.set(state as Record<string, unknown>);\n return { ok: true };\n } catch (error) {\n return handleError(error, 'error setting controller session state');\n }\n },\n});\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/server/handlers/tool-providers.ts"],"names":[],"mappings":"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","file":"chunk-UZMZNZGE.js","sourcesContent":["import type { IMastraEditor } from '@mastra/core/editor';\nimport type { IMastraLogger } from '@mastra/core/logger';\nimport { MASTRA_RESOURCE_ID_KEY } from '@mastra/core/request-context';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type * as ToolProviderModule from '@mastra/core/tool-provider';\nimport type { ToolProvider } from '@mastra/core/tool-provider';\n\nimport { MASTRA_USER_KEY } from '../constants';\nimport { HTTPException } from '../http-exception';\nimport {\n authorizeToolProviderBodySchema,\n authorizeToolProviderResponseSchema,\n authStatusToolProviderResponseSchema,\n connectionStatusToolProviderBodySchema,\n connectionStatusToolProviderResponseSchema,\n connectionUsageQuerySchema,\n connectionUsageResponseSchema,\n disconnectConnectionQuerySchema,\n disconnectConnectionResponseSchema,\n getToolProviderToolSchemaResponseSchema,\n listConnectionFieldsQuerySchema,\n listConnectionFieldsResponseSchema,\n listConnectionsQuerySchema,\n listConnectionsResponseSchema,\n listToolProviderToolkitsResponseSchema,\n listToolProviderToolsQuerySchema,\n listToolProviderToolsResponseSchema,\n listToolProvidersResponseSchema,\n toolProviderAuthStatusPathParams,\n toolProviderConnectionPathParams,\n toolProviderHealthResponseSchema,\n toolProviderIdPathParams,\n toolSlugPathParams,\n updateConnectionBodySchema,\n updateConnectionResponseSchema,\n} from '../schemas/tool-providers';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { hasAdminBypass } from './authorship';\nimport { handleError } from './error';\n\nconst TOOL_PROVIDERS_RESOURCE = 'tool-providers' as const;\n\n/**\n * Mirrors `@mastra/core/tool-provider#SHARED_BUCKET_ID`. Inlined locally so this\n * module evaluates under any peer-compatible core; a regression test in\n * `tool-providers.test.ts` verifies the literal stays in lockstep with core.\n */\nconst SHARED_BUCKET_ID = 'shared' as const;\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\n/**\n * Lazily import `@mastra/core/tool-provider` so this server module can evaluate\n * under any peer-compatible core. The new value exports (`UnknownToolProviderError`,\n * `SHARED_BUCKET_ID`) ship in core `>=1.39.0-0`; users on older cores who never\n * configure a `MastraEditor` short-circuit via `requireEditor` long before this\n * runs. ESM caches one module instance per resolved specifier so the\n * `instanceof` check below sees the same class identity that `@mastra/editor`\n * throws.\n */\nlet _toolProviderModule: typeof ToolProviderModule | undefined;\nasync function loadToolProviderModule() {\n if (!_toolProviderModule) {\n _toolProviderModule = await import('@mastra/core/tool-provider');\n }\n return _toolProviderModule;\n}\n\nfunction requireEditor(editor: IMastraEditor | undefined): IMastraEditor {\n if (!editor) {\n throw new HTTPException(500, { message: 'Editor is not configured' });\n }\n return editor;\n}\n\nasync function resolveProvider(editor: IMastraEditor, providerId: string): Promise<ToolProvider> {\n try {\n return editor.getToolProviderOrThrow(providerId);\n } catch (error) {\n const { UnknownToolProviderError } = await loadToolProviderModule();\n if (error instanceof UnknownToolProviderError) {\n throw new HTTPException(404, { message: error.message });\n }\n throw error;\n }\n}\n\n// Emit a single warn per process when the connection-owner fallback fires.\n// Multi-tenant deployments that forget to wire `mapUserToResourceId` (or\n// `MASTRA_USER_KEY`) silently funnel every `caller-supplied` pin into one\n// shared OAuth account — surface that misconfiguration once.\nlet defaultBucketWarned = false;\nfunction warnDefaultBucketFallback(logger: IMastraLogger | undefined): void {\n if (defaultBucketWarned) return;\n defaultBucketWarned = true;\n logger?.warn(\n '[tool-providers] caller-supplied scope falling back to shared \"default\" bucket — ' +\n 'wire mapUserToResourceId or set MASTRA_USER_KEY to avoid cross-tenant OAuth sharing',\n );\n}\n\n/**\n * Resolve the connection owner (provider `userId` bucket) from the caller's\n * `RequestContext`. Mirrors the runtime fan-out fallback to `'default'` when\n * no auth context is present so OSS deployments still work.\n */\nfunction resolveOwnerId(requestContext: RequestContext | undefined, logger: IMastraLogger | undefined): string {\n const resourceId = requestContext?.get(MASTRA_RESOURCE_ID_KEY);\n if (typeof resourceId === 'string' && resourceId.length > 0) {\n return resourceId;\n }\n\n const user = requestContext?.get(MASTRA_USER_KEY);\n if (user && typeof user === 'object' && 'id' in user) {\n const id = (user as { id: unknown }).id;\n if (typeof id === 'string' && id.length > 0) {\n return id;\n }\n }\n\n warnDefaultBucketFallback(logger);\n return 'default';\n}\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /tool-providers — List all registered tool providers with their\n * capabilities (when the provider exposes them).\n */\nexport const LIST_TOOL_PROVIDERS_ROUTE = createRoute({\n method: 'GET',\n path: '/tool-providers',\n responseType: 'json',\n responseSchema: listToolProvidersResponseSchema,\n summary: 'List tool providers',\n description: 'Returns a list of all registered tool providers with their info and capabilities',\n tags: ['Tool Providers'],\n requiresAuth: true,\n handler: async ({ mastra }) => {\n try {\n const editor = requireEditor(mastra.getEditor());\n const providers = editor.getToolProviders();\n return {\n providers: Object.values(providers).map(provider => ({\n ...provider.info,\n ...(provider.displayName ? { displayName: provider.displayName } : {}),\n ...(provider.capabilities ? { capabilities: provider.capabilities } : {}),\n })),\n };\n } catch (error) {\n return handleError(error, 'Error listing tool providers');\n }\n },\n});\n\n/**\n * GET /tool-providers/:providerId/toolkits — Toolkits exposed by a provider.\n */\nexport const LIST_TOOL_PROVIDER_TOOLKITS_ROUTE = createRoute({\n method: 'GET',\n path: '/tool-providers/:providerId/toolkits',\n responseType: 'json',\n pathParamSchema: toolProviderIdPathParams,\n responseSchema: listToolProviderToolkitsResponseSchema,\n summary: 'List tool provider toolkits',\n description: 'Returns the toolkits available from a specific tool provider',\n tags: ['Tool Providers'],\n requiresAuth: true,\n handler: async ({ mastra, providerId }) => {\n try {\n const editor = requireEditor(mastra.getEditor());\n const provider = await resolveProvider(editor, providerId);\n if (provider.listToolkitsVNext) {\n return await provider.listToolkitsVNext();\n }\n if (provider.listToolkits) {\n return await provider.listToolkits();\n }\n return { data: [] };\n } catch (error) {\n return handleError(error, 'Error listing tool provider toolkits');\n }\n },\n});\n\n/**\n * GET /tool-providers/:providerId/tools — List tools, optionally filtered.\n */\nexport const LIST_TOOL_PROVIDER_TOOLS_ROUTE = createRoute({\n method: 'GET',\n path: '/tool-providers/:providerId/tools',\n responseType: 'json',\n pathParamSchema: toolProviderIdPathParams,\n queryParamSchema: listToolProviderToolsQuerySchema,\n responseSchema: listToolProviderToolsResponseSchema,\n summary: 'List tool provider tools',\n description: 'Returns the tools available from a specific tool provider, with optional filtering',\n tags: ['Tool Providers'],\n requiresAuth: true,\n handler: async ({ mastra, providerId, toolkit, search, page, perPage }) => {\n try {\n const editor = requireEditor(mastra.getEditor());\n const provider = await resolveProvider(editor, providerId);\n const opts: { toolkit?: string; search?: string; page?: number; perPage?: number } = {};\n if (toolkit !== undefined) opts.toolkit = toolkit;\n if (search !== undefined) opts.search = search;\n if (page !== undefined) opts.page = page;\n if (perPage !== undefined) opts.perPage = perPage;\n if (provider.listToolsVNext) {\n return await provider.listToolsVNext(Object.keys(opts).length > 0 ? opts : undefined);\n }\n return await provider.listTools(Object.keys(opts).length > 0 ? opts : undefined);\n } catch (error) {\n return handleError(error, 'Error listing tool provider tools');\n }\n },\n});\n\n/**\n * GET /tool-providers/:providerId/tools/:toolSlug/schema — Tool schema.\n */\nexport const GET_TOOL_PROVIDER_TOOL_SCHEMA_ROUTE = createRoute({\n method: 'GET',\n path: '/tool-providers/:providerId/tools/:toolSlug/schema',\n responseType: 'json',\n pathParamSchema: toolSlugPathParams,\n responseSchema: getToolProviderToolSchemaResponseSchema,\n summary: 'Get tool provider tool schema',\n description: 'Returns the schema for a specific tool from a tool provider',\n tags: ['Tool Providers'],\n requiresAuth: true,\n handler: async ({ mastra, providerId, toolSlug }) => {\n try {\n const editor = requireEditor(mastra.getEditor());\n const provider = await resolveProvider(editor, providerId);\n if (!provider.getToolSchema) {\n throw new HTTPException(404, { message: `Tool provider ${providerId} does not support getToolSchema` });\n }\n const schema = await provider.getToolSchema(toolSlug);\n if (!schema) {\n throw new HTTPException(404, { message: `Schema for tool ${toolSlug} not found in provider ${providerId}` });\n }\n return schema;\n } catch (error) {\n return handleError(error, 'Error getting tool provider tool schema');\n }\n },\n});\n\n/**\n * POST /tool-providers/:providerId/authorize — Start an OAuth flow and persist\n * a `tool_provider_connections` row for label / scope joins.\n */\nexport const AUTHORIZE_TOOL_PROVIDER_ROUTE = createRoute({\n method: 'POST',\n path: '/tool-providers/:providerId/authorize',\n responseType: 'json',\n pathParamSchema: toolProviderIdPathParams,\n bodySchema: authorizeToolProviderBodySchema,\n responseSchema: authorizeToolProviderResponseSchema,\n summary: 'Authorize tool provider connection',\n description: 'Starts an OAuth flow and returns a redirect URL + opaque auth handle',\n tags: ['Tool Providers'],\n requiresAuth: true,\n handler: async ({ mastra, providerId, toolkit, connectionId, toolName, config, label, scope, requestContext }) => {\n try {\n const editor = requireEditor(mastra.getEditor());\n const provider = await resolveProvider(editor, providerId);\n if (!provider.authorize) {\n throw new HTTPException(400, { message: `Tool provider ${providerId} does not support authorize` });\n }\n // Per-pin scope:\n // - 'shared' buckets under SHARED_BUCKET_ID.\n // - 'caller-supplied' buckets under request-context resourceId (400 if missing).\n // - 'per-author' (default) buckets under the caller's resolved authorId.\n const effectiveScope: 'shared' | 'per-author' | 'caller-supplied' =\n scope === 'shared' || scope === 'caller-supplied' ? scope : 'per-author';\n const callerResourceId = requestContext?.get(MASTRA_RESOURCE_ID_KEY);\n if (effectiveScope === 'caller-supplied') {\n if (typeof callerResourceId !== 'string' || callerResourceId.length === 0) {\n throw new HTTPException(400, {\n message: `Cannot authorize caller-supplied connection: request context has no '${MASTRA_RESOURCE_ID_KEY}'. Set requestContext.set('${MASTRA_RESOURCE_ID_KEY}', <userId>) before calling /authorize.`,\n });\n }\n }\n const callerAuthorId = resolveOwnerId(requestContext, mastra.getLogger());\n const ownerAuthorId =\n effectiveScope === 'shared'\n ? SHARED_BUCKET_ID\n : effectiveScope === 'caller-supplied'\n ? (callerResourceId as string)\n : callerAuthorId;\n\n // Fresh connect (no connectionId) uses the resolved owner id as the\n // provider bucket so the adapter creates the connection under the same\n // userId the runtime will resolve to at execution time. Re-auth (caller\n // passed an existing connectionId) is left untouched.\n const bucket = connectionId && connectionId.length > 0 ? connectionId : ownerAuthorId;\n const result = await provider.authorize({ toolkit, connectionId: bucket, toolName, config });\n\n // Persist label + scope. Upsert even when label is null/undefined so the\n // row exists for later list-join in the picker.\n const persistedConnectionId = connectionId && connectionId.length > 0 ? connectionId : result.authId;\n try {\n const storage = mastra.getStorage();\n const store = await storage?.getStore('toolProviderConnections');\n if (store && persistedConnectionId) {\n await store.upsertConnection({\n authorId: ownerAuthorId,\n providerId: provider.info.id,\n toolkit,\n connectionId: persistedConnectionId,\n label: typeof label === 'string' && label.length > 0 ? label : null,\n scope: effectiveScope,\n });\n }\n } catch (upsertError) {\n mastra.getLogger?.()?.warn?.('[tool-providers] failed to upsert tool_provider_connections label', {\n error: upsertError instanceof Error ? upsertError.message : String(upsertError),\n providerId,\n toolkit,\n connectionId: persistedConnectionId,\n });\n }\n\n return result;\n } catch (error) {\n return handleError(error, 'Error authorizing tool provider');\n }\n },\n});\n\n/**\n * GET /tool-providers/:providerId/auth-status/:authId — Poll OAuth flow status.\n */\nexport const GET_TOOL_PROVIDER_AUTH_STATUS_ROUTE = createRoute({\n method: 'GET',\n path: '/tool-providers/:providerId/auth-status/:authId',\n responseType: 'json',\n pathParamSchema: toolProviderAuthStatusPathParams,\n responseSchema: authStatusToolProviderResponseSchema,\n summary: 'Get tool provider auth status',\n description: 'Polls the OAuth flow status for an outstanding authorize call',\n tags: ['Tool Providers'],\n requiresAuth: true,\n handler: async ({ mastra, providerId, authId }) => {\n try {\n const editor = requireEditor(mastra.getEditor());\n const provider = await resolveProvider(editor, providerId);\n if (!provider.getAuthStatus) {\n throw new HTTPException(400, { message: `Tool provider ${providerId} does not support getAuthStatus` });\n }\n const status = await provider.getAuthStatus(authId);\n return { status };\n } catch (error) {\n return handleError(error, 'Error getting tool provider auth status');\n }\n },\n});\n\n/**\n * POST /tool-providers/:providerId/connection-status — Batch-check connection liveness.\n */\nexport const TOOL_PROVIDER_CONNECTION_STATUS_ROUTE = createRoute({\n method: 'POST',\n path: '/tool-providers/:providerId/connection-status',\n responseType: 'json',\n pathParamSchema: toolProviderIdPathParams,\n bodySchema: connectionStatusToolProviderBodySchema,\n responseSchema: connectionStatusToolProviderResponseSchema,\n summary: 'Get connection status for a provider',\n description: 'Batch-checks whether a set of (connectionId, toolkit) tuples are still connected',\n tags: ['Tool Providers'],\n requiresAuth: true,\n handler: async ({ mastra, providerId, items }) => {\n try {\n const editor = requireEditor(mastra.getEditor());\n const provider = await resolveProvider(editor, providerId);\n if (!provider.getConnectionStatus) {\n throw new HTTPException(400, { message: `Tool provider ${providerId} does not support getConnectionStatus` });\n }\n const result = await provider.getConnectionStatus({ items });\n return { items: result };\n } catch (error) {\n return handleError(error, 'Error getting connection status');\n }\n },\n});\n\n/**\n * GET /tool-providers/:providerId/connections — Existing provider connections\n * scoped to a toolkit. Admin callers can pass `authorId` and `scope` filters;\n * non-admins always see only their own + shared rows.\n */\nexport const LIST_TOOL_PROVIDER_CONNECTIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/tool-providers/:providerId/connections',\n responseType: 'json',\n pathParamSchema: toolProviderIdPathParams,\n queryParamSchema: listConnectionsQuerySchema,\n responseSchema: listConnectionsResponseSchema,\n summary: 'List existing connections',\n description:\n 'Returns existing provider connections on a toolkit, so the picker can offer them for pinning without re-running OAuth',\n tags: ['Tool Providers'],\n requiresAuth: true,\n handler: async ({\n mastra,\n providerId,\n toolkit,\n authorId: queryAuthorId,\n scope: queryScope,\n page,\n perPage,\n requestContext,\n }) => {\n try {\n const editor = requireEditor(mastra.getEditor());\n const provider = await resolveProvider(editor, providerId);\n if (!provider.listConnections) {\n throw new HTTPException(400, { message: `Tool provider ${providerId} does not support listConnections` });\n }\n const callerAuthorId = resolveOwnerId(requestContext, mastra.getLogger());\n const isAdmin = requestContext ? hasAdminBypass(requestContext, TOOL_PROVIDERS_RESOURCE) : false;\n\n const requestedAuthorId =\n isAdmin && typeof queryAuthorId === 'string' && queryAuthorId.length > 0 ? queryAuthorId : undefined;\n const effectiveAuthorId = isAdmin ? requestedAuthorId : callerAuthorId;\n\n const storage = mastra.getStorage();\n const store = await storage?.getStore('toolProviderConnections');\n\n // Strategy B: seed userIds[] from persisted rows so admins can enumerate\n // connections owned by other authors.\n let labelRows: Array<{\n authorId: string;\n connectionId: string;\n label: string | null;\n scope: 'shared' | 'per-author' | 'caller-supplied';\n }> = [];\n if (store) {\n try {\n const rows = await store.listConnectionsByAuthor({\n providerId: provider.info.id,\n toolkit,\n });\n labelRows = rows.map(r => ({\n authorId: r.authorId,\n connectionId: r.connectionId,\n label: r.label,\n scope: r.scope ?? 'per-author',\n }));\n } catch (joinError) {\n mastra.getLogger?.()?.warn?.('[tool-providers] failed to join tool_provider_connections labels', {\n error: joinError instanceof Error ? joinError.message : String(joinError),\n providerId,\n toolkit,\n });\n }\n }\n\n const userIdSet = new Set<string>();\n const wantShared = !queryScope || queryScope === 'shared';\n const wantPerAuthor = !queryScope || queryScope === 'per-author';\n const wantCallerSupplied = !queryScope || queryScope === 'caller-supplied';\n const hasSharedRow = labelRows.some(r => r.scope === 'shared');\n if (isAdmin && effectiveAuthorId === undefined) {\n for (const r of labelRows) {\n if (r.scope === 'shared' && wantShared) userIdSet.add(r.authorId);\n if (r.scope === 'per-author' && wantPerAuthor) userIdSet.add(r.authorId);\n if (r.scope === 'caller-supplied' && wantCallerSupplied) userIdSet.add(r.authorId);\n }\n } else if (isAdmin && effectiveAuthorId) {\n if (wantPerAuthor || wantCallerSupplied) userIdSet.add(effectiveAuthorId);\n if (wantShared && hasSharedRow) userIdSet.add(SHARED_BUCKET_ID);\n } else {\n if (wantPerAuthor) userIdSet.add(callerAuthorId);\n if (wantShared && hasSharedRow) userIdSet.add(SHARED_BUCKET_ID);\n // Non-admins never enumerate caller-supplied connections.\n }\n\n const userIds = Array.from(userIdSet);\n if (userIds.length === 0) {\n return {\n items: [],\n pagination: { page: page ?? 1, perPage, hasMore: false },\n };\n }\n\n const adapterResult = await provider.listConnections({\n toolkit,\n userIds,\n ...(typeof page === 'number' ? { page } : {}),\n ...(typeof perPage === 'number' ? { perPage } : {}),\n });\n\n const rowByConnId = new Map(labelRows.map(r => [r.connectionId, r]));\n\n const visibleItems = adapterResult.items.filter(item => {\n if (!queryScope) return true;\n const scope = rowByConnId.get(item.connectionId)?.scope ?? 'per-author';\n return scope === queryScope;\n });\n\n return {\n items: visibleItems.map(item => {\n const row = rowByConnId.get(item.connectionId);\n return {\n ...item,\n label: row?.label ?? null,\n ...(row?.scope ? { scope: row.scope } : {}),\n };\n }),\n pagination: adapterResult.pagination,\n };\n } catch (error) {\n return handleError(error, 'Error listing tool provider connections');\n }\n },\n});\n\n/**\n * GET /tool-providers/:providerId/connection-fields — Dynamic auth fields\n * the picker should collect before authorize (e.g. Confluence subdomain).\n */\nexport const LIST_TOOL_PROVIDER_CONNECTION_FIELDS_ROUTE = createRoute({\n method: 'GET',\n path: '/tool-providers/:providerId/connection-fields',\n responseType: 'json',\n pathParamSchema: toolProviderIdPathParams,\n queryParamSchema: listConnectionFieldsQuerySchema,\n responseSchema: listConnectionFieldsResponseSchema,\n summary: 'List connection field schema',\n description: 'Returns a list of provider-specific fields the UI should collect before initiating an authorize call',\n tags: ['Tool Providers'],\n requiresAuth: true,\n handler: async ({ mastra, providerId, toolkit }) => {\n try {\n const editor = requireEditor(mastra.getEditor());\n const provider = await resolveProvider(editor, providerId);\n if (!provider.listConnectionFields) {\n return { fields: [] };\n }\n const fields = await provider.listConnectionFields({ toolkit });\n return { fields };\n } catch (error) {\n return handleError(error, 'Error listing tool provider connection fields');\n }\n },\n});\n\n/**\n * DELETE /tool-providers/:providerId/connections/:connectionId — Disconnect.\n * Without `?force=true` rejects when the connection is still pinned by any\n * agent. With `?force=true` revokes at the provider (best-effort) and drops\n * the persisted row.\n */\nexport const DISCONNECT_TOOL_PROVIDER_CONNECTION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/tool-providers/:providerId/connections/:connectionId',\n responseType: 'json',\n pathParamSchema: toolProviderConnectionPathParams,\n queryParamSchema: disconnectConnectionQuerySchema,\n responseSchema: disconnectConnectionResponseSchema,\n summary: 'Disconnect a connection',\n description:\n 'Revokes the provider-side connection (if supported) and removes the persisted tool_provider_connections row. Use `?force=true` to bypass usage checks.',\n tags: ['Tool Providers'],\n requiresAuth: true,\n handler: async ({ mastra, providerId, connectionId, force, requestContext }) => {\n try {\n const editor = requireEditor(mastra.getEditor());\n const provider = await resolveProvider(editor, providerId);\n const callerAuthorId = resolveOwnerId(requestContext, mastra.getLogger());\n const isAdmin = requestContext ? hasAdminBypass(requestContext, TOOL_PROVIDERS_RESOURCE) : false;\n const isForce = force === true || force === 'true';\n\n const storage = mastra.getStorage();\n const store = await storage?.getStore('toolProviderConnections');\n\n let ownerAuthorId: string | undefined;\n let ownerScope: 'shared' | 'per-author' | 'caller-supplied' | undefined;\n let matched = false;\n if (store) {\n const rows = await store.listConnectionsByAuthor({ providerId: provider.info.id });\n const match = rows.find(r => r.connectionId === connectionId);\n if (match) {\n matched = true;\n ownerAuthorId = match.authorId;\n ownerScope = match.scope;\n }\n }\n\n // Fail closed: if storage is configured and no row matches the\n // requested connectionId, refuse the call for non-admins. Without\n // this guard, a caller could trigger provider-side `revokeConnection`\n // against another tenant's connectionId by guessing it.\n if (store && !matched && !isAdmin) {\n throw new HTTPException(403, {\n message: 'You do not have permission to disconnect this connection',\n });\n }\n\n const effectiveOwner = ownerAuthorId ?? callerAuthorId;\n const isShared = ownerScope === 'shared';\n if (!isShared && effectiveOwner !== callerAuthorId && !isAdmin) {\n throw new HTTPException(403, {\n message: 'You do not have permission to disconnect this connection',\n });\n }\n\n if (!isForce) {\n const usage = await countConnectionUsage(mastra, connectionId);\n if (usage > 0) {\n throw new HTTPException(409, {\n message: `Connection ${connectionId} is still pinned by ${usage} agent(s). Pass ?force=true to disconnect anyway.`,\n });\n }\n }\n\n let revoked = false;\n if (provider.capabilities?.supportsRevoke && typeof provider.revokeConnection === 'function') {\n await provider.revokeConnection(connectionId);\n revoked = true;\n }\n\n if (store) {\n await store.deleteConnection({\n authorId: effectiveOwner,\n providerId: provider.info.id,\n connectionId,\n });\n }\n\n return { ok: true as const, revoked };\n } catch (error) {\n return handleError(error, 'Error disconnecting tool provider connection');\n }\n },\n});\n\n/**\n * PATCH /tool-providers/:providerId/connections/:connectionId — Update a\n * connection's persisted display label. Idempotent. Ownership-gated the same\n * way as DISCONNECT: only the connection owner (or an admin) may rename,\n * unless the row is `scope: 'shared'`.\n *\n * Pass `label: null` (or an empty string) to clear the existing label.\n */\nexport const UPDATE_TOOL_PROVIDER_CONNECTION_ROUTE = createRoute({\n method: 'PATCH',\n path: '/tool-providers/:providerId/connections/:connectionId',\n responseType: 'json',\n pathParamSchema: toolProviderConnectionPathParams,\n bodySchema: updateConnectionBodySchema,\n responseSchema: updateConnectionResponseSchema,\n summary: 'Update a connection label',\n description:\n 'Updates the persisted display label on tool_provider_connections. Returns 403 when caller is neither the owner nor admin (and the row is not shared), 404 when the row does not exist.',\n tags: ['Tool Providers'],\n requiresAuth: true,\n handler: async ({ mastra, providerId, connectionId, label, requestContext }) => {\n try {\n const editor = requireEditor(mastra.getEditor());\n const provider = await resolveProvider(editor, providerId);\n const callerAuthorId = resolveOwnerId(requestContext, mastra.getLogger());\n const isAdmin = requestContext ? hasAdminBypass(requestContext, TOOL_PROVIDERS_RESOURCE) : false;\n\n const storage = mastra.getStorage();\n const store = await storage?.getStore('toolProviderConnections');\n if (!store) {\n throw new HTTPException(500, {\n message: 'Tool provider connections storage is not configured',\n });\n }\n\n const rows = await store.listConnectionsByAuthor({ providerId: provider.info.id });\n const match = rows.find(r => r.connectionId === connectionId);\n if (!match) {\n throw new HTTPException(404, {\n message: `Connection ${connectionId} not found for provider ${providerId}`,\n });\n }\n\n const isShared = match.scope === 'shared';\n if (!isShared && match.authorId !== callerAuthorId && !isAdmin) {\n throw new HTTPException(403, {\n message: 'You do not have permission to update this connection',\n });\n }\n\n // Normalize: empty string and explicit null both clear the label.\n const nextLabel: string | null = typeof label === 'string' && label.trim().length > 0 ? label.trim() : null;\n\n await store.upsertConnection({\n authorId: match.authorId,\n providerId: provider.info.id,\n toolkit: match.toolkit,\n connectionId,\n label: nextLabel,\n scope: match.scope,\n });\n\n return { ok: true as const, label: nextLabel };\n } catch (error) {\n return handleError(error, 'Error updating tool provider connection');\n }\n },\n});\n\n/**\n * GET /tool-providers/:providerId/connections/:connectionId/usage — Lists agents\n * that currently pin the given connection in their `toolProviders` config.\n */\nexport const GET_TOOL_PROVIDER_CONNECTION_USAGE_ROUTE = createRoute({\n method: 'GET',\n path: '/tool-providers/:providerId/connections/:connectionId/usage',\n responseType: 'json',\n pathParamSchema: toolProviderConnectionPathParams,\n queryParamSchema: connectionUsageQuerySchema,\n responseSchema: connectionUsageResponseSchema,\n summary: 'List agents using a connection',\n description: 'Returns the agents that pin this connection in their toolProviders config',\n tags: ['Tool Providers'],\n requiresAuth: true,\n handler: async ({ mastra, providerId, connectionId, toolkit, requestContext }) => {\n try {\n const editor = requireEditor(mastra.getEditor());\n const provider = await resolveProvider(editor, providerId);\n const callerAuthorId = resolveOwnerId(requestContext, mastra.getLogger());\n const isAdmin = requestContext ? hasAdminBypass(requestContext, TOOL_PROVIDERS_RESOURCE) : false;\n\n const storage = mastra.getStorage();\n const store = await storage?.getStore('toolProviderConnections');\n let ownerAuthorId: string | undefined;\n let ownerScope: 'shared' | 'per-author' | 'caller-supplied' | undefined;\n let matched = false;\n if (store) {\n const rows = await store.listConnectionsByAuthor({ providerId: provider.info.id });\n const match = rows.find(r => r.connectionId === connectionId);\n if (match) {\n matched = true;\n ownerAuthorId = match.authorId;\n ownerScope = match.scope;\n }\n }\n\n // Fail closed: if storage is configured and no row matches the\n // requested connectionId, refuse the call for non-admins so callers\n // cannot probe for other tenants' connections.\n if (store && !matched && !isAdmin) {\n throw new HTTPException(403, {\n message: 'You do not have permission to view usage for this connection',\n });\n }\n\n const effectiveOwner = ownerAuthorId ?? callerAuthorId;\n const isShared = ownerScope === 'shared';\n if (!isShared && effectiveOwner !== callerAuthorId && !isAdmin) {\n throw new HTTPException(403, {\n message: 'You do not have permission to view usage for this connection',\n });\n }\n\n const agents = await scanConnectionUsage(mastra, { providerId: provider.info.id, connectionId, toolkit });\n return { agents };\n } catch (error) {\n return handleError(error, 'Error listing tool provider connection usage');\n }\n },\n});\n\n/**\n * GET /tool-providers/:providerId/health — Provider-level health check.\n */\nexport const GET_TOOL_PROVIDER_HEALTH_ROUTE = createRoute({\n method: 'GET',\n path: '/tool-providers/:providerId/health',\n responseType: 'json',\n pathParamSchema: toolProviderIdPathParams,\n responseSchema: toolProviderHealthResponseSchema,\n summary: 'Get tool provider health',\n description: 'Returns provider-level health (config, reachability, etc.)',\n tags: ['Tool Providers'],\n requiresAuth: true,\n handler: async ({ mastra, providerId }) => {\n try {\n const editor = requireEditor(mastra.getEditor());\n const provider = await resolveProvider(editor, providerId);\n if (!provider.getHealth) {\n return { ok: true };\n }\n return await provider.getHealth();\n } catch (error) {\n return handleError(error, 'Error getting tool provider health');\n }\n },\n});\n\n// ============================================================================\n// Usage scan helpers\n// ============================================================================\n\nasync function scanConnectionUsage(\n mastra: any,\n args: { providerId: string; connectionId: string; toolkit?: string },\n): Promise<Array<{ id: string; name: string }>> {\n const storage = mastra.getStorage();\n const agentsStore = await storage?.getStore('agents');\n if (!agentsStore) return [];\n\n const { agents } = await agentsStore.listResolved({ perPage: false });\n const out: Array<{ id: string; name: string }> = [];\n for (const agent of agents) {\n const config = agent?.toolProviders?.[args.providerId];\n if (!config?.connections) continue;\n for (const [toolkit, connections] of Object.entries(config.connections)) {\n if (args.toolkit && toolkit !== args.toolkit) continue;\n const match = (connections as Array<{ connectionId: string }>).some(c => c.connectionId === args.connectionId);\n if (match) {\n out.push({ id: agent.id, name: agent.name ?? agent.id });\n break;\n }\n }\n }\n return out;\n}\n\nasync function countConnectionUsage(mastra: any, connectionId: string): Promise<number> {\n const storage = mastra.getStorage();\n const agentsStore = await storage?.getStore('agents');\n if (!agentsStore) return 0;\n const { agents } = await agentsStore.listResolved({ perPage: false });\n let count = 0;\n for (const agent of agents) {\n const tp = agent?.toolProviders;\n if (!tp) continue;\n for (const config of Object.values(tp) as Array<{\n connections?: Record<string, Array<{ connectionId: string }>>;\n }>) {\n const pinned = Object.values(config?.connections ?? {}).some(arr =>\n arr.some(c => c.connectionId === connectionId),\n );\n if (pinned) {\n count += 1;\n break;\n }\n }\n }\n return count;\n}\n"]}