@mastra/code-sdk 1.12.0-alpha.3 → 1.12.0-alpha.4

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 (51) hide show
  1. package/dist/acp/agent.d.ts.map +1 -1
  2. package/dist/acp/agent.js +0 -6
  3. package/dist/acp/agent.js.map +1 -1
  4. package/dist/acp/runtime.js +1 -1
  5. package/dist/agents/mastracode-gateway.d.ts.map +1 -1
  6. package/dist/agents/mastracode-gateway.js +9 -5
  7. package/dist/agents/mastracode-gateway.js.map +1 -1
  8. package/dist/agents/memory.d.ts +2 -1
  9. package/dist/agents/memory.d.ts.map +1 -1
  10. package/dist/agents/memory.js +92 -34
  11. package/dist/agents/memory.js.map +1 -1
  12. package/dist/agents/model.d.ts +33 -2
  13. package/dist/agents/model.d.ts.map +1 -1
  14. package/dist/agents/model.js +32 -4
  15. package/dist/agents/model.js.map +1 -1
  16. package/dist/index.d.ts +17 -4
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +80 -22
  19. package/dist/index.js.map +1 -1
  20. package/dist/knowledge-inspector.d.ts +4 -0
  21. package/dist/knowledge-inspector.d.ts.map +1 -1
  22. package/dist/knowledge-inspector.js +10 -1
  23. package/dist/knowledge-inspector.js.map +1 -1
  24. package/dist/onboarding/om-settings.d.ts +29 -8
  25. package/dist/onboarding/om-settings.d.ts.map +1 -1
  26. package/dist/onboarding/om-settings.js +42 -15
  27. package/dist/onboarding/om-settings.js.map +1 -1
  28. package/dist/onboarding/packs.d.ts +12 -3
  29. package/dist/onboarding/packs.d.ts.map +1 -1
  30. package/dist/onboarding/packs.js +20 -2
  31. package/dist/onboarding/packs.js.map +1 -1
  32. package/dist/onboarding/settings.d.ts +5 -0
  33. package/dist/onboarding/settings.d.ts.map +1 -1
  34. package/dist/onboarding/settings.js +7 -2
  35. package/dist/onboarding/settings.js.map +1 -1
  36. package/dist/providers/claude-max.js +1 -1
  37. package/dist/providers/deepseek-thinking.d.ts +4 -0
  38. package/dist/providers/deepseek-thinking.d.ts.map +1 -0
  39. package/dist/providers/deepseek-thinking.js +16 -0
  40. package/dist/providers/deepseek-thinking.js.map +1 -0
  41. package/dist/providers/openai-codex.js +1 -1
  42. package/dist/providers/provider-thinking.d.ts +18 -0
  43. package/dist/providers/provider-thinking.d.ts.map +1 -0
  44. package/dist/providers/provider-thinking.js +34 -0
  45. package/dist/providers/provider-thinking.js.map +1 -0
  46. package/dist/schema.d.ts +199 -6
  47. package/dist/schema.d.ts.map +1 -1
  48. package/dist/schema.js +10 -4
  49. package/dist/schema.js.map +1 -1
  50. package/dist/thinking.js +1 -1
  51. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/acp/agent.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,KAAK,EACL,mBAAmB,EACnB,mBAAmB,EAEnB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,YAAY,EAEZ,6BAA6B,EAC7B,8BAA8B,EAE/B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAKnG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAO3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,eAAe,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,oBAAoB,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AA6E3F,yFAAyF;AACzF,qBAAa,kBAAmB,YAAW,KAAK;IAQ5C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa;IARhC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA0C;IAC3E,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAiB;IACxD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAgB;gBAGd,UAAU,EAAE,mBAAmB,EAC/B,aAAa,EAAE,iBAAiB;IAGnD,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,OAAO;IASf,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgClB,UAAU,CAAC,EAAE,kBAAkB,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IASlF,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BpE,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAUrD,gBAAgB;YAkGhB,eAAe;IAa7B,OAAO,CAAC,aAAa;IAqCrB,OAAO,CAAC,aAAa;IAKf,sBAAsB,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,8BAA8B,CAAC;IAuBtG,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IA2DvD,MAAM,CAAC,YAAY,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BvD,cAAc,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5E,wBAAwB,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAiB9F;AASD,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAiB3E;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GACrD,UAAU,GAAG,WAAW,GAAG,YAAY,GAAG,mBAAmB,GAAG,SAAS,CAW3E"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/acp/agent.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,KAAK,EACL,mBAAmB,EACnB,mBAAmB,EAEnB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,YAAY,EAEZ,6BAA6B,EAC7B,8BAA8B,EAE/B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAInG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAO3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,eAAe,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,oBAAoB,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AA6E3F,yFAAyF;AACzF,qBAAa,kBAAmB,YAAW,KAAK;IAQ5C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,aAAa;IARhC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA0C;IAC3E,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAiB;IACxD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAgB;gBAGd,UAAU,EAAE,mBAAmB,EAC/B,aAAa,EAAE,iBAAiB;IAGnD,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,OAAO;IASf,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgClB,UAAU,CAAC,EAAE,kBAAkB,EAAE,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IASlF,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBpE,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAUrD,gBAAgB;YAkGhB,eAAe;IAa7B,OAAO,CAAC,aAAa;IAqCrB,OAAO,CAAC,aAAa;IAKf,sBAAsB,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,8BAA8B,CAAC;IAuBtG,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IA2DvD,MAAM,CAAC,YAAY,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BvD,cAAc,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5E,wBAAwB,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAiB9F;AASD,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAiB3E;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GACrD,UAAU,GAAG,WAAW,GAAG,YAAY,GAAG,mBAAmB,GAAG,SAAS,CAW3E"}
package/dist/acp/agent.js CHANGED
@@ -2,7 +2,6 @@ import { getCurrentVersion } from "../utils/update-check.js";
2
2
  import { AuthStorage, PROVIDER_DEFAULT_MODELS, getOAuthProviders } from "../auth/storage.js";
3
3
  import { isThinkingLevelSetting } from "../thinking.js";
4
4
  import { getCatalogThinkingLevels, runCatalogThinkingLevel } from "../thinking-catalog.js";
5
- import { seedProviderOMDefault } from "../onboarding/om-settings.js";
6
5
  import { openUrlInBrowser } from "../utils/open-url.js";
7
6
  import { withCleanupFailure } from "./errors.js";
8
7
  import { handleAgentControllerEvent } from "./event-mapper.js";
@@ -140,11 +139,6 @@ var MastraCodeAcpAgent = class {
140
139
  throw needsTerminal();
141
140
  }
142
141
  });
143
- try {
144
- seedProviderOMDefault(methodId);
145
- } catch (error) {
146
- process.stderr.write(`[acp] memory model unchanged after sign-in: ${error}\n`);
147
- }
148
142
  }
149
143
  newSession(request) {
150
144
  const creating = Promise.resolve().then(() => this.createNewSession(request));
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","names":[],"sources":["../../src/acp/agent.ts"],"sourcesContent":["import { isAbsolute } from 'node:path';\nimport { PROTOCOL_VERSION, RequestError } from '@agentclientprotocol/sdk';\nimport type {\n Agent,\n AgentSideConnection,\n AuthenticateRequest,\n AuthMethod,\n InitializeRequest,\n InitializeResponse,\n NewSessionRequest,\n NewSessionResponse,\n PromptRequest,\n PromptResponse,\n CancelNotification,\n ContentBlock,\n SessionConfigOption,\n SetSessionConfigOptionRequest,\n SetSessionConfigOptionResponse,\n AvailableCommand,\n} from '@agentclientprotocol/sdk';\nimport type { AgentController, AgentControllerMode, Session } from '@mastra/core/agent-controller';\nimport { AuthStorage, getOAuthProviders, PROVIDER_DEFAULT_MODELS } from '../auth/storage.js';\nimport { seedProviderOMDefault } from '../onboarding/om-settings.js';\nimport { getCatalogThinkingLevels, runCatalogThinkingLevel } from '../thinking-catalog.js';\nimport { isThinkingLevelSetting } from '../thinking.js';\nimport type { ThinkingLevelSetting } from '../thinking.js';\nimport { openUrlInBrowser } from '../utils/open-url.js';\nimport { getCurrentVersion } from '../utils/update-check.js';\nimport { withCleanupFailure } from './errors.js';\nimport { handleAgentControllerEvent } from './event-mapper.js';\nimport type { PromptState } from './event-mapper.js';\nimport { expandSkillCommand, listSkillCommands } from './skills.js';\nimport type { AcpSkills } from './skills.js';\n\nexport interface AcpSessionRuntime {\n controller: AgentController;\n session: Session;\n modes: AgentControllerMode[];\n getThinkingLevel?: () => ThinkingLevelSetting;\n getSkills?: () => Promise<AcpSkills | undefined>;\n cleanup?: () => Promise<void>;\n}\n\nexport type AcpSessionFactory = (request: NewSessionRequest) => Promise<AcpSessionRuntime>;\n\ninterface SessionEntry extends AcpSessionRuntime {\n models: { modelId: string; name: string }[];\n state: PromptState | null;\n queue: Promise<void>;\n turns: Set<{ cancelled: boolean }>;\n unsubscribe: () => void;\n commands?: AvailableCommand[];\n}\n\nconst TERMINAL_LOGIN_METHOD_ID = 'mastracode-login';\nconst BROWSER_LOGIN_PROVIDER_IDS = ['openai-codex', 'kimi-for-coding', 'xai'];\nconst TERMINAL_LOGIN_PROVIDER_IDS = ['anthropic', 'github-copilot'];\n\nfunction terminalLogin(id: string, name: string, description: string, loginArgs: string[]): AuthMethod {\n return {\n id,\n name,\n description,\n type: 'terminal',\n args: loginArgs,\n _meta: {\n 'terminal-auth': {\n command: process.execPath,\n args: [...process.argv.slice(1, 2), ...loginArgs],\n label: name,\n },\n },\n };\n}\n\nfunction listAuthMethods({ auth, _meta }: InitializeRequest['clientCapabilities'] = {}): AuthMethod[] {\n const providers = getOAuthProviders();\n const methods: AuthMethod[] = providers\n .filter(provider => BROWSER_LOGIN_PROVIDER_IDS.includes(provider.id))\n .map(provider => ({\n id: provider.id,\n name: `Log in with ${provider.name}`,\n description: 'Opens your browser to sign in',\n }));\n if (!auth?.terminal && _meta?.['terminal-auth'] !== true) return methods;\n return [\n ...methods,\n ...providers\n .filter(provider => TERMINAL_LOGIN_PROVIDER_IDS.includes(provider.id))\n .map(provider =>\n terminalLogin(provider.id, `Log in with ${provider.name}`, 'Sign in from a terminal', [\n 'login',\n '--provider',\n provider.id,\n ]),\n ),\n terminalLogin(\n TERMINAL_LOGIN_METHOD_ID,\n 'Log in with Mastra Code',\n 'Sign in to another provider or add an API key from a terminal',\n ['login'],\n ),\n ];\n}\n\nfunction hasUsableModel(available: { id: string; hasApiKey: boolean }[], currentModelId: string): boolean {\n if (available.some(model => model.hasApiKey)) return true;\n return currentModelId !== '' && !available.some(model => model.id === currentModelId);\n}\n\nfunction credentialedDefaultModel(\n available: { id: string; hasApiKey: boolean }[],\n currentModelId: string,\n): string | undefined {\n const current = available.find(model => model.id === currentModelId);\n if (!current || current.hasApiKey) return undefined;\n const credentialed = new Set(available.filter(model => model.hasApiKey).map(model => model.id));\n return Object.values(PROVIDER_DEFAULT_MODELS).find(modelId => credentialed.has(modelId));\n}\n\n/** One ACP connection, with an independent Mastra Code runtime for each conversation. */\nexport class MastraCodeAcpAgent implements Agent {\n private readonly sessions = new Map<string, SessionEntry>();\n private readonly pendingCreations = new Set<Promise<NewSessionResponse>>();\n private readonly startupCleanupFailures: unknown[] = [];\n private disposed = false;\n private disposal?: Promise<void>;\n\n constructor(\n private readonly connection: AgentSideConnection,\n private readonly createSession: AcpSessionFactory,\n ) {}\n\n private getSession(sessionId: string): SessionEntry {\n const entry = this.sessions.get(sessionId);\n if (!entry || this.disposed) throw RequestError.invalidParams({ sessionId }, 'Unknown ACP session');\n return entry;\n }\n\n private enqueue<T>(entry: SessionEntry, operation: () => Promise<T>): Promise<T> {\n const result = entry.queue.then(operation);\n entry.queue = result.then(\n () => {},\n () => {},\n );\n return result;\n }\n\n dispose(): Promise<void> {\n if (this.disposal) return this.disposal;\n this.disposed = true;\n const entries = [...this.sessions.values()];\n this.sessions.clear();\n const cleanup = Promise.allSettled([\n // A runtime under construction owns its cleanup until it joins sessions.\n Promise.allSettled([...this.pendingCreations]),\n ...entries.map(async entry => {\n for (const turn of entry.turns) turn.cancelled = true;\n if (entry.state) {\n entry.state.cancelled = true;\n entry.session.abort();\n entry.state?.resolve('aborted');\n }\n entry.unsubscribe();\n await entry.cleanup?.();\n }),\n ]).then(results => {\n const failures = results.filter(result => result.status === 'rejected').map(result => result.reason);\n failures.push(...this.startupCleanupFailures);\n if (failures.length) throw new AggregateError(failures, 'ACP session cleanup failed');\n });\n // A provider or MCP startup can stall. Keep its cleanup ownership, but let\n // the host terminate the connection if shutdown cannot finish in time.\n this.disposal = new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => reject(new Error('ACP shutdown timed out after 10 seconds')), 10_000);\n void cleanup.then(resolve, reject).finally(() => clearTimeout(timeout));\n });\n return this.disposal;\n }\n\n async initialize({ clientCapabilities }: InitializeRequest): Promise<InitializeResponse> {\n return {\n protocolVersion: PROTOCOL_VERSION,\n agentInfo: { name: 'mastracode', title: 'Mastra Code', version: getCurrentVersion() },\n agentCapabilities: { loadSession: false, mcpCapabilities: { http: true, sse: false } },\n authMethods: listAuthMethods(clientCapabilities),\n };\n }\n\n async authenticate({ methodId }: AuthenticateRequest): Promise<void> {\n if (methodId === TERMINAL_LOGIN_METHOD_ID || TERMINAL_LOGIN_PROVIDER_IDS.includes(methodId)) return;\n if (!BROWSER_LOGIN_PROVIDER_IDS.includes(methodId)) {\n throw RequestError.invalidParams(undefined, `Unknown authentication method: ${methodId}`);\n }\n const needsTerminal = () =>\n RequestError.internalError(\n undefined,\n \"Browser sign-in can't finish on its own. Run `mastracode login` in a terminal to sign in.\",\n );\n await new AuthStorage().login(methodId, {\n authMode: 'browser',\n onAuth: ({ url, userCode }) => {\n if (userCode && !url.includes(userCode)) throw needsTerminal();\n process.stderr.write(`Open ${url} to sign in\\n`);\n openUrlInBrowser(url);\n },\n onPrompt: async () => {\n throw needsTerminal();\n },\n });\n try {\n seedProviderOMDefault(methodId);\n } catch (error) {\n process.stderr.write(`[acp] memory model unchanged after sign-in: ${error}\\n`);\n }\n }\n\n newSession(request: NewSessionRequest): Promise<NewSessionResponse> {\n const creating = Promise.resolve().then(() => this.createNewSession(request));\n this.pendingCreations.add(creating);\n void creating.then(\n () => this.pendingCreations.delete(creating),\n () => this.pendingCreations.delete(creating),\n );\n return creating;\n }\n\n private async createNewSession(request: NewSessionRequest): Promise<NewSessionResponse> {\n if (this.disposed) throw RequestError.internalError(undefined, 'ACP connection is closed');\n if (!isAbsolute(request.cwd)) throw RequestError.invalidParams(undefined, 'cwd must be an absolute path');\n const runtime = await this.createSession(request);\n try {\n if (this.disposed) throw RequestError.internalError(undefined, 'ACP connection is closed');\n const available = await runtime.controller.listAvailableModels();\n if (!hasUsableModel(available, runtime.session.model.get() ?? '')) {\n throw RequestError.authRequired(undefined, 'Sign in to a model provider or add an API key to use Mastra Code');\n }\n const thread = await runtime.session.thread.create();\n await runtime.session.thread.switch({ threadId: thread.id });\n const defaultModelId = credentialedDefaultModel(available, runtime.session.model.get() ?? '');\n if (defaultModelId) await runtime.session.model.switch(defaultModelId);\n const models: NewSessionResponse['models'] = {\n currentModelId: runtime.session.model.get() ?? '',\n availableModels: includeCurrentModel(\n [\n ...new Map(\n available\n .filter(model => model.hasApiKey || model.id === runtime.session.model.get())\n .map(\n model =>\n [\n model.id,\n {\n modelId: model.id,\n name: model.hasApiKey ? model.id : `${model.id} (provider not configured)`,\n },\n ] as const,\n ),\n ).values(),\n ],\n runtime.session.model.get() ?? '',\n ),\n };\n if (this.disposed) throw RequestError.internalError(undefined, 'ACP connection is closed');\n const entry: SessionEntry = {\n ...runtime,\n models: models.availableModels,\n state: null,\n queue: Promise.resolve(),\n turns: new Set(),\n unsubscribe: () => {},\n commands: [],\n };\n if (this.disposed) throw RequestError.internalError(undefined, 'ACP connection is closed');\n entry.unsubscribe = runtime.session.subscribe(event => {\n handleAgentControllerEvent(event, entry.state, this.connection, entry.session);\n if (event.type === 'mode_changed') {\n void this.connection\n .sessionUpdate({\n sessionId: thread.id,\n update: { sessionUpdate: 'current_mode_update', currentModeId: entry.session.mode.get() },\n })\n .catch(error => process.stderr.write(`[acp] mode update failed: ${error}\\n`));\n }\n if (\n event.type === 'mode_changed' ||\n event.type === 'model_changed' ||\n (event.type === 'state_changed' && event.changedKeys.includes('thinkingLevel'))\n ) {\n void this.connection\n .sessionUpdate({\n sessionId: thread.id,\n update: { sessionUpdate: 'config_option_update', configOptions: this.configOptions(entry) },\n })\n .catch(error => process.stderr.write(`[acp] configuration update failed: ${error}\\n`));\n }\n });\n const response: NewSessionResponse = {\n sessionId: thread.id,\n modes: {\n currentModeId: runtime.session.mode.get(),\n availableModes: runtime.modes.map(mode => ({ id: mode.id, name: mode.name ?? mode.id })),\n },\n models,\n configOptions: this.configOptions(entry),\n };\n this.sessions.set(thread.id, entry);\n // Let the SDK send session/new before clients receive updates for this ID.\n setImmediate(() => {\n void this.enqueue(entry, async () => {\n if (!this.disposed) await this.refreshCommands(thread.id, entry);\n }).catch(error => process.stderr.write(`[acp] command discovery failed: ${error}\\n`));\n });\n return response;\n } catch (error) {\n try {\n await runtime.cleanup?.();\n } catch (cleanupError) {\n if (this.disposed) this.startupCleanupFailures.push(cleanupError);\n throw withCleanupFailure(error, cleanupError);\n }\n throw error;\n }\n }\n\n private async refreshCommands(sessionId: string, entry: SessionEntry): Promise<AcpSkills | undefined> {\n const skills = await entry.getSkills?.();\n const commands = await listSkillCommands(skills);\n if (JSON.stringify(commands) !== JSON.stringify(entry.commands)) {\n await this.connection.sessionUpdate({\n sessionId,\n update: { sessionUpdate: 'available_commands_update', availableCommands: commands },\n });\n entry.commands = commands;\n }\n return skills;\n }\n\n private configOptions(entry: SessionEntry): SessionConfigOption[] {\n const modelId = entry.session.model.get() ?? '';\n const options: SessionConfigOption[] = [];\n const models = includeCurrentModel(entry.models, modelId);\n if (models.length)\n options.push({\n id: 'model',\n name: 'Model',\n category: 'model',\n type: 'select',\n currentValue: modelId,\n options: models.map(model => ({ value: model.modelId, name: model.name })),\n });\n options.push({\n id: 'mode',\n name: 'Mode',\n category: 'mode',\n type: 'select',\n currentValue: entry.session.mode.get(),\n options: entry.modes.map(mode => ({ value: mode.id, name: mode.name ?? mode.id })),\n });\n if (entry.getThinkingLevel)\n options.push({\n id: 'thought_level',\n name: 'Reasoning effort',\n category: 'thought_level',\n type: 'select',\n description: 'Requested reasoning level. The provider may adjust it for the selected model.',\n currentValue: this.thinkingLevel(entry),\n options: getCatalogThinkingLevels(modelId).map(value => ({\n value,\n name: value[0]!.toUpperCase() + value.slice(1),\n })),\n });\n return options;\n }\n\n private thinkingLevel(entry: SessionEntry, modelId = entry.session.model.get() ?? ''): ThinkingLevelSetting {\n const level = entry.getThinkingLevel?.() ?? 'off';\n return runCatalogThinkingLevel(modelId, level);\n }\n\n async setSessionConfigOption(params: SetSessionConfigOptionRequest): Promise<SetSessionConfigOptionResponse> {\n const entry = this.getSession(params.sessionId);\n return this.enqueue(entry, async () => {\n this.getSession(params.sessionId);\n const option = this.configOptions(entry).find(option => option.id === params.configId);\n if (\n !option ||\n option.type !== 'select' ||\n !option.options.some(item => 'value' in item && item.value === params.value)\n ) {\n throw RequestError.invalidParams(undefined, 'Unknown session configuration selection');\n }\n if (params.configId === 'model') {\n await entry.session.model.switch(String(params.value));\n } else if (params.configId === 'mode') {\n await entry.session.mode.switch({ modeId: String(params.value) });\n } else if (isThinkingLevelSetting(params.value)) {\n await entry.session.state.set({ thinkingLevel: params.value });\n }\n return { configOptions: this.configOptions(entry) };\n });\n }\n\n async prompt(request: PromptRequest): Promise<PromptResponse> {\n const entry = this.getSession(request.sessionId);\n const content = extractTextFromContentBlocks(request.prompt);\n const turn = { cancelled: false };\n entry.turns.add(turn);\n try {\n return await this.enqueue(entry, async () => {\n if (turn.cancelled || this.disposed) return { stopReason: 'cancelled' };\n const usage: PromptState['usage'] = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };\n let complete!: PromptState['resolve'];\n const completion = new Promise<Parameters<PromptState['resolve']>[0]>(resolve => {\n complete = resolve;\n });\n const state: PromptState = {\n sessionId: request.sessionId,\n usage,\n resolve: reason => {\n state.finished = true;\n complete(reason);\n },\n };\n entry.state = state;\n try {\n const skills = await this.refreshCommands(request.sessionId, entry);\n const expanded = await expandSkillCommand(content, skills, entry.commands ?? []);\n if (turn.cancelled || this.disposed) return { stopReason: 'cancelled' };\n await entry.session.sendMessage({ content: expanded });\n const reason = await completion;\n if (reason === 'error' && !state.cancelled && !state.stopReason) {\n throw RequestError.internalError(undefined, state.error?.message ?? 'Mastra Code turn failed');\n }\n return {\n stopReason: state.cancelled ? 'cancelled' : (state.stopReason ?? mapStopReason(reason)),\n usage: {\n inputTokens: usage.promptTokens,\n outputTokens: usage.completionTokens,\n totalTokens: usage.totalTokens,\n thoughtTokens: usage.reasoningTokens,\n cachedReadTokens: usage.cachedInputTokens,\n cachedWriteTokens: usage.cacheCreationInputTokens,\n },\n };\n } catch (error) {\n if (state.cancelled) return { stopReason: 'cancelled' };\n if (error instanceof RequestError) throw error;\n throw RequestError.internalError(\n undefined,\n error instanceof Error ? error.message : 'Mastra Code turn failed',\n );\n } finally {\n state.finished = true;\n if (entry.state === state) entry.state = null;\n }\n });\n } finally {\n entry.turns.delete(turn);\n }\n }\n\n async cancel(notification: CancelNotification): Promise<void> {\n const entry = this.sessions.get(notification.sessionId);\n if (!entry) return;\n for (const turn of entry.turns) turn.cancelled = true;\n if (entry.state && !entry.state.finished && !entry.state.cancelled) {\n const state = entry.state;\n state.cancelled = true;\n // Persist denial before aborting, otherwise a parked snapshot can replay on the next turn.\n for (const deny of state.cancelSuspensions?.values() ?? []) {\n try {\n await deny();\n } catch {\n /* Still abort if the suspended run is no longer available. */\n }\n }\n state.cancelSuspensions?.clear();\n if (entry.state !== state) return;\n entry.session.abort();\n // A suspended run has already ended and will not emit another agent_end.\n if (entry.state?.suspended) {\n entry.session.stream.detach();\n entry.state.resolve('aborted');\n }\n }\n }\n\n async setSessionMode(params: { sessionId: string; modeId: string }): Promise<void> {\n const entry = this.getSession(params.sessionId);\n if (!entry.modes.some(mode => mode.id === params.modeId))\n throw RequestError.invalidParams(undefined, 'Unknown mode');\n await this.enqueue(entry, async () => {\n if (this.disposed) return;\n await entry.session.mode.switch({ modeId: params.modeId });\n });\n }\n\n async unstable_setSessionModel(params: { sessionId: string; modelId: string }): Promise<void> {\n const entry = this.getSession(params.sessionId);\n await this.enqueue(entry, async () => {\n if (this.disposed) return;\n if (\n !includeCurrentModel(entry.models, entry.session.model.get() ?? '').some(\n model => model.modelId === params.modelId,\n )\n ) {\n throw RequestError.invalidParams(\n undefined,\n 'Model is unavailable or its provider is not configured. Refresh the model list.',\n );\n }\n await entry.session.model.switch(params.modelId);\n });\n }\n}\n\nfunction includeCurrentModel(models: SessionEntry['models'], currentModelId: string): SessionEntry['models'] {\n // Saved/custom model IDs may work even when discovery only returns a gateway-qualified alias.\n return currentModelId && !models.some(model => model.modelId === currentModelId)\n ? [{ modelId: currentModelId, name: currentModelId }, ...models]\n : models;\n}\n\nexport function extractTextFromContentBlocks(blocks: ContentBlock[]): string {\n const parts: string[] = [];\n for (const block of blocks) {\n if (block.type === 'text') {\n parts.push(block.text);\n } else if (block.type === 'resource_link') {\n parts.push(`[resource: ${block.uri}]`);\n } else if (block.type === 'resource') {\n parts.push(`[resource: ${block.resource.uri}]`);\n if (!('text' in block.resource))\n throw RequestError.invalidParams(undefined, 'Binary prompt resources are not supported');\n parts.push(block.resource.text);\n } else {\n throw RequestError.invalidParams(undefined, `Unsupported prompt content: ${block.type}`);\n }\n }\n return parts.join('\\n');\n}\n\nexport function mapStopReason(\n reason: 'complete' | 'aborted' | 'error' | 'suspended',\n): 'end_turn' | 'cancelled' | 'max_tokens' | 'max_turn_requests' | 'refusal' {\n switch (reason) {\n case 'complete':\n return 'end_turn';\n case 'aborted':\n return 'cancelled';\n case 'error':\n throw RequestError.internalError(undefined, 'Mastra Code turn failed');\n case 'suspended':\n return 'end_turn';\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","names":[],"sources":["../../src/acp/agent.ts"],"sourcesContent":["import { isAbsolute } from 'node:path';\nimport { PROTOCOL_VERSION, RequestError } from '@agentclientprotocol/sdk';\nimport type {\n Agent,\n AgentSideConnection,\n AuthenticateRequest,\n AuthMethod,\n InitializeRequest,\n InitializeResponse,\n NewSessionRequest,\n NewSessionResponse,\n PromptRequest,\n PromptResponse,\n CancelNotification,\n ContentBlock,\n SessionConfigOption,\n SetSessionConfigOptionRequest,\n SetSessionConfigOptionResponse,\n AvailableCommand,\n} from '@agentclientprotocol/sdk';\nimport type { AgentController, AgentControllerMode, Session } from '@mastra/core/agent-controller';\nimport { AuthStorage, getOAuthProviders, PROVIDER_DEFAULT_MODELS } from '../auth/storage.js';\nimport { getCatalogThinkingLevels, runCatalogThinkingLevel } from '../thinking-catalog.js';\nimport { isThinkingLevelSetting } from '../thinking.js';\nimport type { ThinkingLevelSetting } from '../thinking.js';\nimport { openUrlInBrowser } from '../utils/open-url.js';\nimport { getCurrentVersion } from '../utils/update-check.js';\nimport { withCleanupFailure } from './errors.js';\nimport { handleAgentControllerEvent } from './event-mapper.js';\nimport type { PromptState } from './event-mapper.js';\nimport { expandSkillCommand, listSkillCommands } from './skills.js';\nimport type { AcpSkills } from './skills.js';\n\nexport interface AcpSessionRuntime {\n controller: AgentController;\n session: Session;\n modes: AgentControllerMode[];\n getThinkingLevel?: () => ThinkingLevelSetting;\n getSkills?: () => Promise<AcpSkills | undefined>;\n cleanup?: () => Promise<void>;\n}\n\nexport type AcpSessionFactory = (request: NewSessionRequest) => Promise<AcpSessionRuntime>;\n\ninterface SessionEntry extends AcpSessionRuntime {\n models: { modelId: string; name: string }[];\n state: PromptState | null;\n queue: Promise<void>;\n turns: Set<{ cancelled: boolean }>;\n unsubscribe: () => void;\n commands?: AvailableCommand[];\n}\n\nconst TERMINAL_LOGIN_METHOD_ID = 'mastracode-login';\nconst BROWSER_LOGIN_PROVIDER_IDS = ['openai-codex', 'kimi-for-coding', 'xai'];\nconst TERMINAL_LOGIN_PROVIDER_IDS = ['anthropic', 'github-copilot'];\n\nfunction terminalLogin(id: string, name: string, description: string, loginArgs: string[]): AuthMethod {\n return {\n id,\n name,\n description,\n type: 'terminal',\n args: loginArgs,\n _meta: {\n 'terminal-auth': {\n command: process.execPath,\n args: [...process.argv.slice(1, 2), ...loginArgs],\n label: name,\n },\n },\n };\n}\n\nfunction listAuthMethods({ auth, _meta }: InitializeRequest['clientCapabilities'] = {}): AuthMethod[] {\n const providers = getOAuthProviders();\n const methods: AuthMethod[] = providers\n .filter(provider => BROWSER_LOGIN_PROVIDER_IDS.includes(provider.id))\n .map(provider => ({\n id: provider.id,\n name: `Log in with ${provider.name}`,\n description: 'Opens your browser to sign in',\n }));\n if (!auth?.terminal && _meta?.['terminal-auth'] !== true) return methods;\n return [\n ...methods,\n ...providers\n .filter(provider => TERMINAL_LOGIN_PROVIDER_IDS.includes(provider.id))\n .map(provider =>\n terminalLogin(provider.id, `Log in with ${provider.name}`, 'Sign in from a terminal', [\n 'login',\n '--provider',\n provider.id,\n ]),\n ),\n terminalLogin(\n TERMINAL_LOGIN_METHOD_ID,\n 'Log in with Mastra Code',\n 'Sign in to another provider or add an API key from a terminal',\n ['login'],\n ),\n ];\n}\n\nfunction hasUsableModel(available: { id: string; hasApiKey: boolean }[], currentModelId: string): boolean {\n if (available.some(model => model.hasApiKey)) return true;\n return currentModelId !== '' && !available.some(model => model.id === currentModelId);\n}\n\nfunction credentialedDefaultModel(\n available: { id: string; hasApiKey: boolean }[],\n currentModelId: string,\n): string | undefined {\n const current = available.find(model => model.id === currentModelId);\n if (!current || current.hasApiKey) return undefined;\n const credentialed = new Set(available.filter(model => model.hasApiKey).map(model => model.id));\n return Object.values(PROVIDER_DEFAULT_MODELS).find(modelId => credentialed.has(modelId));\n}\n\n/** One ACP connection, with an independent Mastra Code runtime for each conversation. */\nexport class MastraCodeAcpAgent implements Agent {\n private readonly sessions = new Map<string, SessionEntry>();\n private readonly pendingCreations = new Set<Promise<NewSessionResponse>>();\n private readonly startupCleanupFailures: unknown[] = [];\n private disposed = false;\n private disposal?: Promise<void>;\n\n constructor(\n private readonly connection: AgentSideConnection,\n private readonly createSession: AcpSessionFactory,\n ) {}\n\n private getSession(sessionId: string): SessionEntry {\n const entry = this.sessions.get(sessionId);\n if (!entry || this.disposed) throw RequestError.invalidParams({ sessionId }, 'Unknown ACP session');\n return entry;\n }\n\n private enqueue<T>(entry: SessionEntry, operation: () => Promise<T>): Promise<T> {\n const result = entry.queue.then(operation);\n entry.queue = result.then(\n () => {},\n () => {},\n );\n return result;\n }\n\n dispose(): Promise<void> {\n if (this.disposal) return this.disposal;\n this.disposed = true;\n const entries = [...this.sessions.values()];\n this.sessions.clear();\n const cleanup = Promise.allSettled([\n // A runtime under construction owns its cleanup until it joins sessions.\n Promise.allSettled([...this.pendingCreations]),\n ...entries.map(async entry => {\n for (const turn of entry.turns) turn.cancelled = true;\n if (entry.state) {\n entry.state.cancelled = true;\n entry.session.abort();\n entry.state?.resolve('aborted');\n }\n entry.unsubscribe();\n await entry.cleanup?.();\n }),\n ]).then(results => {\n const failures = results.filter(result => result.status === 'rejected').map(result => result.reason);\n failures.push(...this.startupCleanupFailures);\n if (failures.length) throw new AggregateError(failures, 'ACP session cleanup failed');\n });\n // A provider or MCP startup can stall. Keep its cleanup ownership, but let\n // the host terminate the connection if shutdown cannot finish in time.\n this.disposal = new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => reject(new Error('ACP shutdown timed out after 10 seconds')), 10_000);\n void cleanup.then(resolve, reject).finally(() => clearTimeout(timeout));\n });\n return this.disposal;\n }\n\n async initialize({ clientCapabilities }: InitializeRequest): Promise<InitializeResponse> {\n return {\n protocolVersion: PROTOCOL_VERSION,\n agentInfo: { name: 'mastracode', title: 'Mastra Code', version: getCurrentVersion() },\n agentCapabilities: { loadSession: false, mcpCapabilities: { http: true, sse: false } },\n authMethods: listAuthMethods(clientCapabilities),\n };\n }\n\n async authenticate({ methodId }: AuthenticateRequest): Promise<void> {\n if (methodId === TERMINAL_LOGIN_METHOD_ID || TERMINAL_LOGIN_PROVIDER_IDS.includes(methodId)) return;\n if (!BROWSER_LOGIN_PROVIDER_IDS.includes(methodId)) {\n throw RequestError.invalidParams(undefined, `Unknown authentication method: ${methodId}`);\n }\n const needsTerminal = () =>\n RequestError.internalError(\n undefined,\n \"Browser sign-in can't finish on its own. Run `mastracode login` in a terminal to sign in.\",\n );\n await new AuthStorage().login(methodId, {\n authMode: 'browser',\n onAuth: ({ url, userCode }) => {\n if (userCode && !url.includes(userCode)) throw needsTerminal();\n process.stderr.write(`Open ${url} to sign in\\n`);\n openUrlInBrowser(url);\n },\n onPrompt: async () => {\n throw needsTerminal();\n },\n });\n }\n\n newSession(request: NewSessionRequest): Promise<NewSessionResponse> {\n const creating = Promise.resolve().then(() => this.createNewSession(request));\n this.pendingCreations.add(creating);\n void creating.then(\n () => this.pendingCreations.delete(creating),\n () => this.pendingCreations.delete(creating),\n );\n return creating;\n }\n\n private async createNewSession(request: NewSessionRequest): Promise<NewSessionResponse> {\n if (this.disposed) throw RequestError.internalError(undefined, 'ACP connection is closed');\n if (!isAbsolute(request.cwd)) throw RequestError.invalidParams(undefined, 'cwd must be an absolute path');\n const runtime = await this.createSession(request);\n try {\n if (this.disposed) throw RequestError.internalError(undefined, 'ACP connection is closed');\n const available = await runtime.controller.listAvailableModels();\n if (!hasUsableModel(available, runtime.session.model.get() ?? '')) {\n throw RequestError.authRequired(undefined, 'Sign in to a model provider or add an API key to use Mastra Code');\n }\n const thread = await runtime.session.thread.create();\n await runtime.session.thread.switch({ threadId: thread.id });\n const defaultModelId = credentialedDefaultModel(available, runtime.session.model.get() ?? '');\n if (defaultModelId) await runtime.session.model.switch(defaultModelId);\n const models: NewSessionResponse['models'] = {\n currentModelId: runtime.session.model.get() ?? '',\n availableModels: includeCurrentModel(\n [\n ...new Map(\n available\n .filter(model => model.hasApiKey || model.id === runtime.session.model.get())\n .map(\n model =>\n [\n model.id,\n {\n modelId: model.id,\n name: model.hasApiKey ? model.id : `${model.id} (provider not configured)`,\n },\n ] as const,\n ),\n ).values(),\n ],\n runtime.session.model.get() ?? '',\n ),\n };\n if (this.disposed) throw RequestError.internalError(undefined, 'ACP connection is closed');\n const entry: SessionEntry = {\n ...runtime,\n models: models.availableModels,\n state: null,\n queue: Promise.resolve(),\n turns: new Set(),\n unsubscribe: () => {},\n commands: [],\n };\n if (this.disposed) throw RequestError.internalError(undefined, 'ACP connection is closed');\n entry.unsubscribe = runtime.session.subscribe(event => {\n handleAgentControllerEvent(event, entry.state, this.connection, entry.session);\n if (event.type === 'mode_changed') {\n void this.connection\n .sessionUpdate({\n sessionId: thread.id,\n update: { sessionUpdate: 'current_mode_update', currentModeId: entry.session.mode.get() },\n })\n .catch(error => process.stderr.write(`[acp] mode update failed: ${error}\\n`));\n }\n if (\n event.type === 'mode_changed' ||\n event.type === 'model_changed' ||\n (event.type === 'state_changed' && event.changedKeys.includes('thinkingLevel'))\n ) {\n void this.connection\n .sessionUpdate({\n sessionId: thread.id,\n update: { sessionUpdate: 'config_option_update', configOptions: this.configOptions(entry) },\n })\n .catch(error => process.stderr.write(`[acp] configuration update failed: ${error}\\n`));\n }\n });\n const response: NewSessionResponse = {\n sessionId: thread.id,\n modes: {\n currentModeId: runtime.session.mode.get(),\n availableModes: runtime.modes.map(mode => ({ id: mode.id, name: mode.name ?? mode.id })),\n },\n models,\n configOptions: this.configOptions(entry),\n };\n this.sessions.set(thread.id, entry);\n // Let the SDK send session/new before clients receive updates for this ID.\n setImmediate(() => {\n void this.enqueue(entry, async () => {\n if (!this.disposed) await this.refreshCommands(thread.id, entry);\n }).catch(error => process.stderr.write(`[acp] command discovery failed: ${error}\\n`));\n });\n return response;\n } catch (error) {\n try {\n await runtime.cleanup?.();\n } catch (cleanupError) {\n if (this.disposed) this.startupCleanupFailures.push(cleanupError);\n throw withCleanupFailure(error, cleanupError);\n }\n throw error;\n }\n }\n\n private async refreshCommands(sessionId: string, entry: SessionEntry): Promise<AcpSkills | undefined> {\n const skills = await entry.getSkills?.();\n const commands = await listSkillCommands(skills);\n if (JSON.stringify(commands) !== JSON.stringify(entry.commands)) {\n await this.connection.sessionUpdate({\n sessionId,\n update: { sessionUpdate: 'available_commands_update', availableCommands: commands },\n });\n entry.commands = commands;\n }\n return skills;\n }\n\n private configOptions(entry: SessionEntry): SessionConfigOption[] {\n const modelId = entry.session.model.get() ?? '';\n const options: SessionConfigOption[] = [];\n const models = includeCurrentModel(entry.models, modelId);\n if (models.length)\n options.push({\n id: 'model',\n name: 'Model',\n category: 'model',\n type: 'select',\n currentValue: modelId,\n options: models.map(model => ({ value: model.modelId, name: model.name })),\n });\n options.push({\n id: 'mode',\n name: 'Mode',\n category: 'mode',\n type: 'select',\n currentValue: entry.session.mode.get(),\n options: entry.modes.map(mode => ({ value: mode.id, name: mode.name ?? mode.id })),\n });\n if (entry.getThinkingLevel)\n options.push({\n id: 'thought_level',\n name: 'Reasoning effort',\n category: 'thought_level',\n type: 'select',\n description: 'Requested reasoning level. The provider may adjust it for the selected model.',\n currentValue: this.thinkingLevel(entry),\n options: getCatalogThinkingLevels(modelId).map(value => ({\n value,\n name: value[0]!.toUpperCase() + value.slice(1),\n })),\n });\n return options;\n }\n\n private thinkingLevel(entry: SessionEntry, modelId = entry.session.model.get() ?? ''): ThinkingLevelSetting {\n const level = entry.getThinkingLevel?.() ?? 'off';\n return runCatalogThinkingLevel(modelId, level);\n }\n\n async setSessionConfigOption(params: SetSessionConfigOptionRequest): Promise<SetSessionConfigOptionResponse> {\n const entry = this.getSession(params.sessionId);\n return this.enqueue(entry, async () => {\n this.getSession(params.sessionId);\n const option = this.configOptions(entry).find(option => option.id === params.configId);\n if (\n !option ||\n option.type !== 'select' ||\n !option.options.some(item => 'value' in item && item.value === params.value)\n ) {\n throw RequestError.invalidParams(undefined, 'Unknown session configuration selection');\n }\n if (params.configId === 'model') {\n await entry.session.model.switch(String(params.value));\n } else if (params.configId === 'mode') {\n await entry.session.mode.switch({ modeId: String(params.value) });\n } else if (isThinkingLevelSetting(params.value)) {\n await entry.session.state.set({ thinkingLevel: params.value });\n }\n return { configOptions: this.configOptions(entry) };\n });\n }\n\n async prompt(request: PromptRequest): Promise<PromptResponse> {\n const entry = this.getSession(request.sessionId);\n const content = extractTextFromContentBlocks(request.prompt);\n const turn = { cancelled: false };\n entry.turns.add(turn);\n try {\n return await this.enqueue(entry, async () => {\n if (turn.cancelled || this.disposed) return { stopReason: 'cancelled' };\n const usage: PromptState['usage'] = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };\n let complete!: PromptState['resolve'];\n const completion = new Promise<Parameters<PromptState['resolve']>[0]>(resolve => {\n complete = resolve;\n });\n const state: PromptState = {\n sessionId: request.sessionId,\n usage,\n resolve: reason => {\n state.finished = true;\n complete(reason);\n },\n };\n entry.state = state;\n try {\n const skills = await this.refreshCommands(request.sessionId, entry);\n const expanded = await expandSkillCommand(content, skills, entry.commands ?? []);\n if (turn.cancelled || this.disposed) return { stopReason: 'cancelled' };\n await entry.session.sendMessage({ content: expanded });\n const reason = await completion;\n if (reason === 'error' && !state.cancelled && !state.stopReason) {\n throw RequestError.internalError(undefined, state.error?.message ?? 'Mastra Code turn failed');\n }\n return {\n stopReason: state.cancelled ? 'cancelled' : (state.stopReason ?? mapStopReason(reason)),\n usage: {\n inputTokens: usage.promptTokens,\n outputTokens: usage.completionTokens,\n totalTokens: usage.totalTokens,\n thoughtTokens: usage.reasoningTokens,\n cachedReadTokens: usage.cachedInputTokens,\n cachedWriteTokens: usage.cacheCreationInputTokens,\n },\n };\n } catch (error) {\n if (state.cancelled) return { stopReason: 'cancelled' };\n if (error instanceof RequestError) throw error;\n throw RequestError.internalError(\n undefined,\n error instanceof Error ? error.message : 'Mastra Code turn failed',\n );\n } finally {\n state.finished = true;\n if (entry.state === state) entry.state = null;\n }\n });\n } finally {\n entry.turns.delete(turn);\n }\n }\n\n async cancel(notification: CancelNotification): Promise<void> {\n const entry = this.sessions.get(notification.sessionId);\n if (!entry) return;\n for (const turn of entry.turns) turn.cancelled = true;\n if (entry.state && !entry.state.finished && !entry.state.cancelled) {\n const state = entry.state;\n state.cancelled = true;\n // Persist denial before aborting, otherwise a parked snapshot can replay on the next turn.\n for (const deny of state.cancelSuspensions?.values() ?? []) {\n try {\n await deny();\n } catch {\n /* Still abort if the suspended run is no longer available. */\n }\n }\n state.cancelSuspensions?.clear();\n if (entry.state !== state) return;\n entry.session.abort();\n // A suspended run has already ended and will not emit another agent_end.\n if (entry.state?.suspended) {\n entry.session.stream.detach();\n entry.state.resolve('aborted');\n }\n }\n }\n\n async setSessionMode(params: { sessionId: string; modeId: string }): Promise<void> {\n const entry = this.getSession(params.sessionId);\n if (!entry.modes.some(mode => mode.id === params.modeId))\n throw RequestError.invalidParams(undefined, 'Unknown mode');\n await this.enqueue(entry, async () => {\n if (this.disposed) return;\n await entry.session.mode.switch({ modeId: params.modeId });\n });\n }\n\n async unstable_setSessionModel(params: { sessionId: string; modelId: string }): Promise<void> {\n const entry = this.getSession(params.sessionId);\n await this.enqueue(entry, async () => {\n if (this.disposed) return;\n if (\n !includeCurrentModel(entry.models, entry.session.model.get() ?? '').some(\n model => model.modelId === params.modelId,\n )\n ) {\n throw RequestError.invalidParams(\n undefined,\n 'Model is unavailable or its provider is not configured. Refresh the model list.',\n );\n }\n await entry.session.model.switch(params.modelId);\n });\n }\n}\n\nfunction includeCurrentModel(models: SessionEntry['models'], currentModelId: string): SessionEntry['models'] {\n // Saved/custom model IDs may work even when discovery only returns a gateway-qualified alias.\n return currentModelId && !models.some(model => model.modelId === currentModelId)\n ? [{ modelId: currentModelId, name: currentModelId }, ...models]\n : models;\n}\n\nexport function extractTextFromContentBlocks(blocks: ContentBlock[]): string {\n const parts: string[] = [];\n for (const block of blocks) {\n if (block.type === 'text') {\n parts.push(block.text);\n } else if (block.type === 'resource_link') {\n parts.push(`[resource: ${block.uri}]`);\n } else if (block.type === 'resource') {\n parts.push(`[resource: ${block.resource.uri}]`);\n if (!('text' in block.resource))\n throw RequestError.invalidParams(undefined, 'Binary prompt resources are not supported');\n parts.push(block.resource.text);\n } else {\n throw RequestError.invalidParams(undefined, `Unsupported prompt content: ${block.type}`);\n }\n }\n return parts.join('\\n');\n}\n\nexport function mapStopReason(\n reason: 'complete' | 'aborted' | 'error' | 'suspended',\n): 'end_turn' | 'cancelled' | 'max_tokens' | 'max_turn_requests' | 'refusal' {\n switch (reason) {\n case 'complete':\n return 'end_turn';\n case 'aborted':\n return 'cancelled';\n case 'error':\n throw RequestError.internalError(undefined, 'Mastra Code turn failed');\n case 'suspended':\n return 'end_turn';\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { loadSettings, resolveDefaultThinkingLevel } from "../onboarding/settings.js";
2
1
  import { withCleanupFailure } from "./errors.js";
2
+ import { loadSettings, resolveDefaultThinkingLevel } from "../onboarding/settings.js";
3
3
  import { createMastraCode } from "../index.js";
4
4
  import { RequestError } from "@agentclientprotocol/sdk";
5
5
  //#region src/acp/runtime.ts
@@ -1 +1 @@
1
- {"version":3,"file":"mastracode-gateway.d.ts","sourceRoot":"","sources":["../../src/agents/mastracode-gateway.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mastracode-gateway.d.ts","sourceRoot":"","sources":["../../src/agents/mastracode-gateway.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,19 @@
1
1
  import { getAppDataDir } from "../utils/project.js";
2
2
  import { AuthStorage } from "../auth/storage.js";
3
- import { MASTRA_GATEWAY_PREFIX, OPENAI_PREFIX, normalizeAnthropicModelId, remapOpenAIModelForCodexOAuth, stripMastraGatewayPrefix } from "../providers/model-ids.js";
4
3
  import { createGoogleThinkingMiddleware } from "../providers/google-thinking.js";
4
+ import { MASTRA_GATEWAY_PREFIX, OPENAI_PREFIX, normalizeAnthropicModelId, remapOpenAIModelForCodexOAuth, stripMastraGatewayPrefix } from "../providers/model-ids.js";
5
5
  import { THINKING_LEVEL_TO_REASONING_EFFORT, buildOpenAICodexOAuthFetch, createCodexMiddleware, createReasoningEffortMiddleware, getEffectiveThinkingLevel, openaiCodexProvider } from "../providers/openai-codex.js";
6
6
  import { getCustomProviderId, loadSettings } from "../onboarding/settings.js";
7
7
  import { resolveCustomProviders } from "./custom-provider-source.js";
8
8
  import { buildAnthropicOAuthFetch, claudeCodeMiddleware, createAnthropicThinkingMiddleware, createPromptCacheMiddleware, opencodeClaudeMaxProvider } from "../providers/claude-max.js";
9
+ import { deepseekThinkingOptions } from "../providers/deepseek-thinking.js";
9
10
  import { getCopilotModelCatalog, githubCopilotProvider } from "../providers/github-copilot.js";
10
11
  import { KIMI_CODING_MODELS, kimiCodingProvider } from "../providers/kimi-coding.js";
12
+ import { ModelRouterLanguageModelWithThinking } from "../providers/provider-thinking.js";
11
13
  import { xaiProvider } from "../providers/xai.js";
14
+ import { GATEWAY_AUTH_HEADER, MastraGateway, MastraModelGateway, ModelRouterLanguageModel, PROVIDER_REGISTRY } from "@mastra/core/llm";
12
15
  import { createOpenAI } from "@ai-sdk/openai";
13
16
  import { wrapLanguageModel } from "ai";
14
- import { GATEWAY_AUTH_HEADER, MastraGateway, MastraModelGateway, ModelRouterLanguageModel, PROVIDER_REGISTRY } from "@mastra/core/llm";
15
17
  import { createAnthropic } from "@ai-sdk/anthropic";
16
18
  import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
17
19
  //#region src/agents/mastracode-gateway.ts
@@ -350,11 +352,13 @@ var MastraCodeGateway = class MastraCodeGateway extends MastraModelGateway {
350
352
  headers: args.headers,
351
353
  credentialStore: this.#credentials
352
354
  });
353
- return new ModelRouterLanguageModel({
354
- id: `${args.providerId}/${args.modelId}`,
355
+ const routedModelId = `${args.providerId}/${args.modelId}`;
356
+ const thinking = args.providerId === "deepseek" ? deepseekThinkingOptions(routedModelId, this.#thinkingLevel) : void 0;
357
+ return new ModelRouterLanguageModelWithThinking({
358
+ id: routedModelId,
355
359
  apiKey: args.apiKey,
356
360
  headers: args.headers
357
- });
361
+ }, thinking);
358
362
  }
359
363
  #resolveAnthropicModel(args) {
360
364
  const bareModelId = normalizeAnthropicModelId(args.modelId);
@@ -1 +1 @@
1
- {"version":3,"file":"mastracode-gateway.js","names":["#mastraGateway","#mastraGatewayBaseUrl","#mastraGatewayApiKey","#routeThroughMastraGateway","#thinkingLevel","#anthropicPromptCacheScope","#customProviders","#settingsPath","#credentials","#getCustomProviders","#resolveAnthropicModel","#resolveOpenAIModel","#resolveGoogleModel"],"sources":["../../src/agents/mastracode-gateway.ts"],"sourcesContent":["import { createAnthropic } from '@ai-sdk/anthropic';\nimport { createOpenAI } from '@ai-sdk/openai';\nimport { createOpenAICompatible } from '@ai-sdk/openai-compatible';\nimport type { CustomAvailableModel, CustomModelCatalogProvider } from '@mastra/core/agent-controller';\nimport {\n GATEWAY_AUTH_HEADER,\n MastraGateway,\n MastraModelGateway,\n ModelRouterLanguageModel,\n PROVIDER_REGISTRY,\n} from '@mastra/core/llm';\nimport type {\n GatewayAuthRequest,\n GatewayAuthResult,\n GatewayLanguageModel,\n MastraModelGatewayInterface,\n ProviderConfig,\n} from '@mastra/core/llm';\nimport { wrapLanguageModel } from 'ai';\nimport { AuthStorage } from '../auth/storage.js';\nimport type { CredentialStore } from '../auth/types.js';\nimport { getCustomProviderId, loadSettings, MASTRA_GATEWAY_PROVIDER } from '../onboarding/settings.js';\nimport type { AnthropicPromptCacheScope } from '../providers/anthropic-prompt-cache.js';\nimport {\n buildAnthropicOAuthFetch,\n claudeCodeMiddleware,\n createAnthropicThinkingMiddleware,\n createPromptCacheMiddleware,\n opencodeClaudeMaxProvider,\n} from '../providers/claude-max.js';\nimport { getCopilotModelCatalog, githubCopilotProvider } from '../providers/github-copilot.js';\nimport { createGoogleThinkingMiddleware } from '../providers/google-thinking.js';\nimport { KIMI_CODING_MODELS, kimiCodingProvider } from '../providers/kimi-coding.js';\nimport {\n normalizeAnthropicModelId,\n OPENAI_PREFIX,\n remapOpenAIModelForCodexOAuth,\n stripMastraGatewayPrefix,\n} from '../providers/model-ids.js';\nimport {\n buildOpenAICodexOAuthFetch,\n createCodexMiddleware,\n createReasoningEffortMiddleware,\n getEffectiveThinkingLevel,\n openaiCodexProvider,\n THINKING_LEVEL_TO_REASONING_EFFORT,\n} from '../providers/openai-codex.js';\nimport type { ThinkingLevel } from '../providers/openai-codex.js';\nimport { xaiProvider } from '../providers/xai.js';\nimport { getAppDataDir } from '../utils/project.js';\nimport { resolveCustomProviders } from './custom-provider-source.js';\n\nexport {\n MASTRA_GATEWAY_PREFIX,\n OPENAI_PREFIX,\n remapOpenAIModelForCodexOAuth,\n stripMastraGatewayPrefix,\n} from '../providers/model-ids.js';\n\nexport const MASTRACODE_GATEWAY_ID = 'mastracode';\n\ntype ModelRequestHeaders = Record<string, string>;\n\nexport type MastraCodeCustomProvider = { name: string; url: string; apiKey?: string; models?: string[] };\n\nexport type MastraCodeGatewayOptions = {\n mastraGatewayBaseUrl: string;\n mastraGatewayApiKey?: string;\n routeThroughMastraGateway: boolean;\n thinkingLevel?: ThinkingLevel;\n /** Anthropic prompt-cache breakpoints to write. Defaults to `conversation`. */\n anthropicPromptCacheScope?: AnthropicPromptCacheScope;\n customProviders?: MastraCodeCustomProvider[];\n settingsPath?: string;\n /**\n * Per-tenant credential source for this gateway instance. Defaults to the\n * server-global file-backed `AuthStorage`; deployed web passes the calling\n * tenant's store so model calls use the caller's own credentials.\n */\n credentialStore?: CredentialStore;\n};\n\n/**\n * Global file-backed credential store for local (TUI) model resolution.\n *\n * Constructed lazily, NOT at module scope: `AuthStorage`'s default path is\n * resolved from `MASTRA_APP_DATA_DIR` at construction, and this module is\n * routinely imported before test harnesses / embedders point that variable at\n * an isolated directory — an import-time construction would permanently pin\n * the developer's real app-data dir for every credential read.\n */\nlet authStorageSingleton: AuthStorage | undefined;\nlet authStorageSingletonDir: string | undefined;\n\nexport function getGlobalAuthStorage(): AuthStorage {\n // Keyed by the resolved app-data dir: in-process harnesses re-point\n // MASTRA_APP_DATA_DIR per run inside one long-lived worker, so a store\n // pinned to a previous dir must be discarded, not reused.\n const dir = getAppDataDir();\n if (!authStorageSingleton || authStorageSingletonDir !== dir) {\n authStorageSingleton = new AuthStorage();\n authStorageSingletonDir = dir;\n }\n return authStorageSingleton;\n}\n\nexport function reloadAuthStorage() {\n getGlobalAuthStorage().reload();\n}\n\n/**\n * Resolve the Anthropic API key.\n * Main slot → dedicated apikey: slot → env var.\n */\nexport function getAnthropicApiKey(credentials: CredentialStore = getGlobalAuthStorage()): string | undefined {\n const storedCred = credentials.get('anthropic');\n if (storedCred?.type === 'api_key' && storedCred.key.trim().length > 0) {\n return storedCred.key.trim();\n }\n const dedicatedKey = credentials.getStoredApiKey('anthropic')?.trim();\n if (dedicatedKey) return dedicatedKey;\n return credentials.allowEnvironmentFallback === false\n ? undefined\n : process.env.ANTHROPIC_API_KEY?.trim() || undefined;\n}\n\n/**\n * Resolve the OpenAI API key.\n * Main slot → dedicated apikey: slot → env var.\n */\nexport function getOpenAIApiKey(credentials: CredentialStore = getGlobalAuthStorage()): string | undefined {\n const storedCred = credentials.get('openai-codex');\n if (storedCred?.type === 'api_key' && storedCred.key.trim().length > 0) {\n return storedCred.key.trim();\n }\n const dedicatedKey = credentials.getStoredApiKey('openai-codex')?.trim();\n if (dedicatedKey) return dedicatedKey;\n return credentials.allowEnvironmentFallback === false ? undefined : process.env.OPENAI_API_KEY?.trim() || undefined;\n}\n\nfunction anthropicApiKeyProvider(\n modelId: string,\n apiKey: string,\n headers: ModelRequestHeaders | undefined,\n thinkingLevel: ThinkingLevel | undefined,\n promptCacheScope: AnthropicPromptCacheScope,\n) {\n const anthropic = createAnthropic({ apiKey, headers });\n const thinkingMiddleware = createAnthropicThinkingMiddleware(modelId, thinkingLevel);\n return wrapLanguageModel({\n model: anthropic(modelId),\n middleware: [createPromptCacheMiddleware(promptCacheScope), ...(thinkingMiddleware ? [thinkingMiddleware] : [])],\n });\n}\n\nfunction openaiApiKeyProvider(\n modelId: string,\n apiKey: string,\n headers?: ModelRequestHeaders,\n thinkingLevel?: ThinkingLevel,\n) {\n const openai = createOpenAI({ apiKey, baseURL: process.env.OPENAI_BASE_URL, headers });\n const middleware =\n thinkingLevel && thinkingLevel !== 'off'\n ? createReasoningEffortMiddleware(\n 'openai',\n THINKING_LEVEL_TO_REASONING_EFFORT[getEffectiveThinkingLevel(modelId, thinkingLevel)],\n )\n : undefined;\n return wrapLanguageModel({\n model: openai.responses(modelId),\n middleware: middleware ? [middleware] : [],\n });\n}\n\nfunction getAuthProviderId(providerId: string): string {\n return providerId === 'openai' ? 'openai-codex' : providerId;\n}\n\nfunction getProviderAuthKey(\n providerId: string,\n credentials: CredentialStore = getGlobalAuthStorage(),\n): string | undefined {\n const authProviderId = getAuthProviderId(providerId);\n const storedCred = credentials.get(authProviderId);\n if (storedCred?.type === 'api_key' && storedCred.key.trim().length > 0) {\n return storedCred.key.trim();\n }\n const dedicatedKey = credentials.getStoredApiKey(authProviderId)?.trim();\n if (dedicatedKey) return dedicatedKey;\n if (credentials.allowEnvironmentFallback === false) return undefined;\n return authProviderId === 'kimi-for-coding' ? process.env.KIMI_API_KEY?.trim() || undefined : undefined;\n}\n\nexport function resolveAuth(request: GatewayAuthRequest, mastraGatewayApiKey?: string): GatewayAuthResult | undefined {\n return MastraCodeGateway.resolveProviderAuth(request, mastraGatewayApiKey);\n}\n\nfunction getGatewayProviderKey(gatewayId: string, providerId: string): string {\n if (gatewayId === 'models.dev') return providerId;\n return providerId === gatewayId ? gatewayId : `${gatewayId}/${providerId}`;\n}\n\nfunction parseGatewayRouterId(\n routerId: string,\n gateway: MastraModelGatewayInterface,\n): { gatewayId: string; providerId: string; modelId: string } {\n const [firstPart = '', secondPart = '', ...restParts] = routerId.split('/');\n const gatewayId = gateway.id;\n\n if (firstPart === gatewayId && secondPart) {\n return {\n gatewayId,\n providerId: secondPart,\n modelId: restParts.join('/'),\n };\n }\n\n return {\n gatewayId,\n providerId: firstPart,\n modelId: [secondPart, ...restParts].filter(Boolean).join('/'),\n };\n}\n\nfunction hasResolvedAuth(auth: GatewayAuthResult | undefined): boolean {\n if (!auth) return false;\n if (auth.apiKey || auth.bearerToken) return true;\n return auth.headers ? Object.keys(auth.headers).length > 0 : false;\n}\n\nasync function resolveGatewayProviderAuth(\n gateway: MastraModelGatewayInterface,\n routerId: string,\n): Promise<GatewayAuthResult | undefined> {\n if (!gateway.resolveAuth) return undefined;\n\n const parsed = parseGatewayRouterId(routerId, gateway);\n try {\n const result = await gateway.resolveAuth({\n gatewayId: parsed.gatewayId,\n providerId: parsed.providerId,\n modelId: parsed.modelId,\n routerId,\n });\n return hasResolvedAuth(result) ? result : undefined;\n } catch {\n return undefined;\n }\n}\n\nasync function getMastraCodeProviderConfigs(\n gateway: MastraModelGatewayInterface,\n): Promise<Record<string, ProviderConfig>> {\n const providers: Record<string, ProviderConfig> = { ...(PROVIDER_REGISTRY as Record<string, ProviderConfig>) };\n\n try {\n const gatewayProviders = await gateway.fetchProviders();\n for (const [providerId, config] of Object.entries(gatewayProviders)) {\n providers[getGatewayProviderKey(gateway.id, providerId)] = {\n ...config,\n gateway: gateway.id,\n };\n }\n } catch (error) {\n console.warn(`Failed to load providers from gateway ${gateway.id}:`, error);\n }\n\n return providers;\n}\n\nfunction getApiKeyEnvVar(providerConfig: Pick<ProviderConfig, 'apiKeyEnvVar'> | undefined): string | undefined {\n const envVars = providerConfig?.apiKeyEnvVar;\n return Array.isArray(envVars) ? envVars[0] : envVars;\n}\n\nexport class MastraCodeGateway extends MastraModelGateway {\n readonly id = MASTRACODE_GATEWAY_ID;\n readonly name = 'MastraCode Gateway';\n\n readonly #mastraGateway: MastraGateway;\n readonly #mastraGatewayBaseUrl: string;\n readonly #mastraGatewayApiKey?: string;\n readonly #routeThroughMastraGateway: boolean;\n readonly #thinkingLevel?: ThinkingLevel;\n readonly #anthropicPromptCacheScope: AnthropicPromptCacheScope;\n readonly #customProviders?: MastraCodeCustomProvider[];\n readonly #settingsPath?: string;\n readonly #credentials: CredentialStore;\n\n constructor({\n mastraGatewayBaseUrl,\n mastraGatewayApiKey,\n routeThroughMastraGateway,\n thinkingLevel,\n anthropicPromptCacheScope,\n customProviders,\n settingsPath,\n credentialStore,\n }: MastraCodeGatewayOptions) {\n super();\n this.#mastraGateway = new MastraGateway({ baseUrl: mastraGatewayBaseUrl });\n this.#mastraGatewayBaseUrl = mastraGatewayBaseUrl;\n this.#mastraGatewayApiKey = mastraGatewayApiKey;\n this.#routeThroughMastraGateway = routeThroughMastraGateway;\n this.#thinkingLevel = thinkingLevel;\n this.#anthropicPromptCacheScope = anthropicPromptCacheScope ?? 'conversation';\n this.#customProviders = customProviders;\n this.#settingsPath = settingsPath;\n this.#credentials = credentialStore ?? getGlobalAuthStorage();\n }\n\n static getMastraGatewayApiKey(): string | undefined {\n return getGlobalAuthStorage().getStoredApiKey(MASTRA_GATEWAY_PROVIDER) ?? process.env['MASTRA_GATEWAY_API_KEY'];\n }\n\n /** @deprecated Renamed to {@link MastraCodeGateway.getMastraGatewayApiKey}. */\n static getMemoryGatewayApiKey(): string | undefined {\n return MastraCodeGateway.getMastraGatewayApiKey();\n }\n\n /**\n * Claim an unprefixed model id (e.g. a bare `anthropic/...`) when this gateway\n * can authenticate it via OAuth or a stored/env credential. This lets the\n * shared gateway router select MastraCode for auth resolution, so the status\n * bar and `/api-keys` reflect OAuth logins instead of only checking env vars.\n */\n handlesModel(modelId: string): boolean {\n const parsed = parseGatewayRouterId(modelId, this);\n if (!parsed.providerId || !parsed.modelId) return false;\n if (this.#routeThroughMastraGateway && this.#mastraGatewayApiKey) return true;\n const customProvider = this.#getCustomProviders().find(\n provider => parsed.providerId === getCustomProviderId(provider.name),\n );\n if (customProvider?.apiKey) return true;\n return hasResolvedAuth(\n MastraCodeGateway.resolveProviderAuth(\n {\n gatewayId: this.id,\n providerId: parsed.providerId,\n modelId: parsed.modelId,\n routerId: modelId,\n },\n undefined,\n this.#credentials,\n ),\n );\n }\n\n static resolveProviderAuth(\n request: GatewayAuthRequest,\n mastraGatewayApiKey?: string,\n credentials: CredentialStore = getGlobalAuthStorage(),\n ): GatewayAuthResult | undefined {\n if (request.gatewayId === 'mastra' && mastraGatewayApiKey) {\n return { apiKey: mastraGatewayApiKey, source: 'gateway' };\n }\n\n const authProviderId = getAuthProviderId(request.providerId);\n const storedCred = credentials.get(authProviderId);\n if (storedCred?.type === 'oauth') {\n return { bearerToken: 'oauth', source: 'gateway' };\n }\n\n const apiKey = getProviderAuthKey(request.providerId, credentials);\n return apiKey ? { apiKey, source: 'gateway' } : undefined;\n }\n\n static createModelCatalogProvider(gateway: MastraModelGatewayInterface): CustomModelCatalogProvider {\n return async () => {\n const registry = await getMastraCodeProviderConfigs(gateway);\n const models: CustomAvailableModel[] = [];\n\n for (const [provider, providerConfig] of Object.entries(registry)) {\n const apiKeyEnvVar = getApiKeyEnvVar(providerConfig);\n const hasEnvKey = apiKeyEnvVar ? Boolean(process.env[apiKeyEnvVar]) : false;\n const modelNames = providerConfig.models;\n if (!Array.isArray(modelNames)) continue;\n\n const gatewayAuth = modelNames[0]\n ? await resolveGatewayProviderAuth(gateway, `${provider}/${modelNames[0]}`)\n : undefined;\n\n for (const modelName of modelNames) {\n const id = `${provider}/${modelName}`;\n models.push({\n id,\n provider,\n modelName,\n hasApiKey: hasEnvKey || Boolean(gatewayAuth),\n apiKeyEnvVar: apiKeyEnvVar || undefined,\n });\n }\n }\n\n return models;\n };\n }\n\n createModelCatalogProvider(): CustomModelCatalogProvider {\n return MastraCodeGateway.createModelCatalogProvider(this);\n }\n\n #getCustomProviders(): MastraCodeCustomProvider[] {\n // Explicit constructor list wins; then a registered source (deployed web,\n // DB-backed — authoritative, so settings.json is never consulted); then\n // the local file-backed settings.\n return this.#customProviders ?? resolveCustomProviders() ?? loadSettings(this.#settingsPath).customProviders;\n }\n\n async fetchProviders(): Promise<Record<string, ProviderConfig>> {\n const providers: Record<string, ProviderConfig> = {};\n for (const provider of this.#getCustomProviders()) {\n const models = provider.models ?? [];\n if (!models.length) continue;\n providers[getCustomProviderId(provider.name)] = {\n name: provider.name,\n url: provider.url,\n apiKeyEnvVar: '',\n apiKeyHeader: 'Authorization',\n gateway: this.id,\n models,\n };\n }\n\n providers['kimi-for-coding'] = {\n name: 'Kimi For Coding',\n apiKeyEnvVar: 'KIMI_API_KEY',\n apiKeyHeader: 'Authorization',\n gateway: this.id,\n models: [...KIMI_CODING_MODELS],\n };\n\n try {\n const copilotModels = await getCopilotModelCatalog({ authStorage: this.#credentials });\n providers['github-copilot'] = {\n name: 'GitHub Copilot',\n apiKeyEnvVar: '',\n apiKeyHeader: 'Authorization',\n gateway: this.id,\n models: copilotModels.map(model => model.id),\n };\n } catch (error) {\n console.warn('Failed to load GitHub Copilot model catalog:', error);\n }\n\n return providers;\n }\n\n buildUrl(modelId: string): string | undefined | Promise<string | undefined> {\n return this.#routeThroughMastraGateway ? this.#mastraGateway.buildUrl(modelId) : modelId;\n }\n\n async getApiKey(modelId: string): Promise<string> {\n const providerId = stripMastraGatewayPrefix(modelId).split('/', 1)[0];\n if (this.#routeThroughMastraGateway) return this.#mastraGatewayApiKey ?? '';\n return providerId ? (getProviderAuthKey(providerId, this.#credentials) ?? '') : '';\n }\n\n resolveAuth(request: GatewayAuthRequest): GatewayAuthResult | undefined {\n if (this.#routeThroughMastraGateway && this.#mastraGatewayApiKey) {\n return { apiKey: this.#mastraGatewayApiKey, source: 'gateway' };\n }\n\n const customProvider = this.#getCustomProviders().find(\n provider => request.providerId === getCustomProviderId(provider.name),\n );\n if (customProvider?.apiKey) {\n return { apiKey: customProvider.apiKey, source: 'gateway' };\n }\n\n return MastraCodeGateway.resolveProviderAuth(request, undefined, this.#credentials);\n }\n\n resolveLanguageModel(args: {\n modelId: string;\n providerId: string;\n apiKey: string;\n headers?: Record<string, string>;\n transport?: any;\n responsesWebSocket?: any;\n }): GatewayLanguageModel {\n const customProvider = this.#getCustomProviders().find(\n provider => args.providerId === getCustomProviderId(provider.name),\n );\n if (customProvider) {\n const provider = createOpenAICompatible({\n name: args.providerId,\n baseURL: customProvider.url,\n apiKey: args.apiKey,\n headers: args.headers,\n });\n const reasoningEffort = this.#thinkingLevel ? THINKING_LEVEL_TO_REASONING_EFFORT[this.#thinkingLevel] : undefined;\n const middleware = createReasoningEffortMiddleware(args.providerId, reasoningEffort);\n if (!middleware) {\n return provider.chatModel(args.modelId) as unknown as GatewayLanguageModel;\n }\n return wrapLanguageModel({\n model: provider.chatModel(args.modelId),\n middleware: [middleware],\n }) as unknown as GatewayLanguageModel;\n }\n\n if (args.providerId === 'github-copilot') {\n return githubCopilotProvider(args.modelId, {\n headers: args.headers,\n authStorage: this.#credentials,\n }) as unknown as GatewayLanguageModel;\n }\n\n if (args.providerId === 'moonshotai') {\n // Prefer the gateway-resolved key (stored credentials), then the canonical\n // registry env var. Keep the legacy typo name as a fallback for anyone who\n // set it because of the previous error message.\n const apiKey =\n args.apiKey?.trim() || process.env.MOONSHOT_API_KEY?.trim() || process.env.MOONSHOT_AI_API_KEY?.trim();\n if (!apiKey) {\n throw new Error('Need MOONSHOT_API_KEY');\n }\n return createAnthropic({\n apiKey,\n baseURL: 'https://api.moonshot.ai/anthropic/v1',\n name: 'moonshotai.anthropicv1',\n headers: args.headers,\n })(args.modelId) as unknown as GatewayLanguageModel;\n }\n\n if (args.providerId === 'anthropic') {\n return this.#resolveAnthropicModel(args);\n }\n\n if (args.providerId === 'openai') {\n const openaiModel = this.#resolveOpenAIModel(args);\n if (openaiModel) return openaiModel;\n }\n\n if (args.providerId === 'xai' && this.#credentials.get('xai')?.type === 'oauth') {\n return xaiProvider(args.modelId, {\n headers: args.headers,\n authStorage: this.#credentials,\n }) as unknown as GatewayLanguageModel;\n }\n\n if (args.providerId === 'google') {\n return this.#resolveGoogleModel(args);\n }\n\n if (this.#routeThroughMastraGateway) {\n return this.#mastraGateway.resolveLanguageModel(args) as GatewayLanguageModel;\n }\n\n if (args.providerId === 'kimi-for-coding') {\n return kimiCodingProvider(args.modelId, {\n apiKey: args.apiKey,\n headers: args.headers,\n credentialStore: this.#credentials,\n }) as unknown as GatewayLanguageModel;\n }\n\n return new ModelRouterLanguageModel({\n id: `${args.providerId}/${args.modelId}` as `${string}/${string}`,\n apiKey: args.apiKey,\n headers: args.headers,\n }) as unknown as GatewayLanguageModel;\n }\n\n #resolveAnthropicModel(args: {\n modelId: string;\n providerId: string;\n apiKey: string;\n headers?: Record<string, string>;\n transport?: any;\n responsesWebSocket?: any;\n }): GatewayLanguageModel {\n const bareModelId = normalizeAnthropicModelId(args.modelId);\n const storedCred = this.#credentials.get('anthropic');\n const thinkingMiddleware = createAnthropicThinkingMiddleware(bareModelId, this.#thinkingLevel);\n\n if (this.#routeThroughMastraGateway) {\n if (storedCred?.type === 'oauth') {\n const anthropic = createAnthropic({\n apiKey: 'oauth-gateway-placeholder',\n baseURL: `${this.#mastraGatewayBaseUrl}/v1`,\n headers: {\n [GATEWAY_AUTH_HEADER]: `Bearer ${args.apiKey}`,\n ...args.headers,\n },\n fetch: buildAnthropicOAuthFetch({ authStorage: this.#credentials }) as any,\n });\n\n return wrapLanguageModel({\n model: anthropic(bareModelId),\n middleware: [\n claudeCodeMiddleware,\n createPromptCacheMiddleware(this.#anthropicPromptCacheScope),\n ...(thinkingMiddleware ? [thinkingMiddleware] : []),\n ],\n }) as unknown as GatewayLanguageModel;\n }\n\n const gatewayModel = this.#mastraGateway.resolveLanguageModel({\n ...args,\n modelId: bareModelId,\n }) as GatewayLanguageModel;\n if (!thinkingMiddleware) return gatewayModel;\n return wrapLanguageModel({\n model: gatewayModel as any,\n middleware: [thinkingMiddleware],\n }) as unknown as GatewayLanguageModel;\n }\n\n if (storedCred?.type === 'oauth') {\n return opencodeClaudeMaxProvider(bareModelId, {\n headers: args.headers,\n authStorage: this.#credentials,\n thinkingLevel: this.#thinkingLevel,\n promptCacheScope: this.#anthropicPromptCacheScope,\n }) as unknown as GatewayLanguageModel;\n }\n\n if (storedCred?.type === 'api_key' && storedCred.key.trim().length > 0) {\n return anthropicApiKeyProvider(\n bareModelId,\n storedCred.key.trim(),\n args.headers,\n this.#thinkingLevel,\n this.#anthropicPromptCacheScope,\n ) as unknown as GatewayLanguageModel;\n }\n\n const apiKey = getAnthropicApiKey(this.#credentials);\n if (apiKey) {\n return anthropicApiKeyProvider(\n bareModelId,\n apiKey,\n args.headers,\n this.#thinkingLevel,\n this.#anthropicPromptCacheScope,\n ) as unknown as GatewayLanguageModel;\n }\n\n // No stored credentials: use the OAuth-backed provider so the first request can trigger login.\n return opencodeClaudeMaxProvider(bareModelId, {\n headers: args.headers,\n authStorage: this.#credentials,\n thinkingLevel: this.#thinkingLevel,\n promptCacheScope: this.#anthropicPromptCacheScope,\n }) as unknown as GatewayLanguageModel;\n }\n\n #resolveOpenAIModel(args: {\n modelId: string;\n providerId: string;\n apiKey: string;\n headers?: Record<string, string>;\n transport?: any;\n responsesWebSocket?: any;\n }): GatewayLanguageModel | undefined {\n const storedCred = this.#credentials.get('openai-codex');\n\n if (this.#routeThroughMastraGateway) {\n if (storedCred?.type === 'oauth') {\n const resolvedModelId = remapOpenAIModelForCodexOAuth(`openai/${args.modelId}`);\n const resolvedBareModelId = resolvedModelId.substring(OPENAI_PREFIX.length);\n const effectiveLevel = getEffectiveThinkingLevel(args.modelId, this.#thinkingLevel ?? 'medium');\n const reasoningEffort = THINKING_LEVEL_TO_REASONING_EFFORT[effectiveLevel];\n const middleware = createCodexMiddleware(reasoningEffort);\n const openai = createOpenAI({\n apiKey: 'oauth-gateway-placeholder',\n baseURL: `${this.#mastraGatewayBaseUrl}/v1`,\n headers: {\n [GATEWAY_AUTH_HEADER]: `Bearer ${args.apiKey}`,\n ...args.headers,\n },\n fetch: buildOpenAICodexOAuthFetch({ authStorage: this.#credentials, rewriteUrl: false }) as any,\n });\n\n return wrapLanguageModel({\n model: openai.responses(resolvedBareModelId),\n middleware: [middleware],\n }) as unknown as GatewayLanguageModel;\n }\n\n return this.#mastraGateway.resolveLanguageModel(args) as GatewayLanguageModel;\n }\n\n if (storedCred?.type === 'oauth') {\n const resolvedModelId = remapOpenAIModelForCodexOAuth(`openai/${args.modelId}`);\n return openaiCodexProvider(resolvedModelId.substring(OPENAI_PREFIX.length), {\n thinkingLevel: this.#thinkingLevel && getEffectiveThinkingLevel(args.modelId, this.#thinkingLevel),\n headers: args.headers,\n authStorage: this.#credentials,\n }) as unknown as GatewayLanguageModel;\n }\n\n const apiKey = getOpenAIApiKey(this.#credentials);\n if (apiKey) {\n return openaiApiKeyProvider(\n args.modelId,\n apiKey,\n args.headers,\n this.#thinkingLevel,\n ) as unknown as GatewayLanguageModel;\n }\n\n return undefined;\n }\n\n #resolveGoogleModel(args: {\n modelId: string;\n providerId: string;\n apiKey: string;\n headers?: Record<string, string>;\n transport?: any;\n responsesWebSocket?: any;\n }): GatewayLanguageModel {\n const baseModel = this.#routeThroughMastraGateway\n ? (this.#mastraGateway.resolveLanguageModel(args) as GatewayLanguageModel)\n : (new ModelRouterLanguageModel({\n id: `${args.providerId}/${args.modelId}` as `${string}/${string}`,\n apiKey: args.apiKey,\n headers: args.headers,\n }) as unknown as GatewayLanguageModel);\n\n const thinkingMiddleware = createGoogleThinkingMiddleware(args.modelId, this.#thinkingLevel);\n if (!thinkingMiddleware) return baseModel;\n\n return wrapLanguageModel({\n model: baseModel as any,\n middleware: [thinkingMiddleware],\n }) as unknown as GatewayLanguageModel;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"mastracode-gateway.js","names":["#mastraGateway","#mastraGatewayBaseUrl","#mastraGatewayApiKey","#routeThroughMastraGateway","#thinkingLevel","#anthropicPromptCacheScope","#customProviders","#settingsPath","#credentials","#getCustomProviders","#resolveAnthropicModel","#resolveOpenAIModel","#resolveGoogleModel"],"sources":["../../src/agents/mastracode-gateway.ts"],"sourcesContent":["import { createAnthropic } from '@ai-sdk/anthropic';\nimport { createOpenAI } from '@ai-sdk/openai';\nimport { createOpenAICompatible } from '@ai-sdk/openai-compatible';\nimport type { CustomAvailableModel, CustomModelCatalogProvider } from '@mastra/core/agent-controller';\nimport {\n GATEWAY_AUTH_HEADER,\n MastraGateway,\n MastraModelGateway,\n ModelRouterLanguageModel,\n PROVIDER_REGISTRY,\n} from '@mastra/core/llm';\nimport type {\n GatewayAuthRequest,\n GatewayAuthResult,\n GatewayLanguageModel,\n MastraModelGatewayInterface,\n ProviderConfig,\n} from '@mastra/core/llm';\nimport { wrapLanguageModel } from 'ai';\nimport { AuthStorage } from '../auth/storage.js';\nimport type { CredentialStore } from '../auth/types.js';\nimport { getCustomProviderId, loadSettings, MASTRA_GATEWAY_PROVIDER } from '../onboarding/settings.js';\nimport type { AnthropicPromptCacheScope } from '../providers/anthropic-prompt-cache.js';\nimport {\n buildAnthropicOAuthFetch,\n claudeCodeMiddleware,\n createAnthropicThinkingMiddleware,\n createPromptCacheMiddleware,\n opencodeClaudeMaxProvider,\n} from '../providers/claude-max.js';\nimport { deepseekThinkingOptions } from '../providers/deepseek-thinking.js';\nimport { getCopilotModelCatalog, githubCopilotProvider } from '../providers/github-copilot.js';\nimport { createGoogleThinkingMiddleware } from '../providers/google-thinking.js';\nimport { KIMI_CODING_MODELS, kimiCodingProvider } from '../providers/kimi-coding.js';\nimport {\n normalizeAnthropicModelId,\n OPENAI_PREFIX,\n remapOpenAIModelForCodexOAuth,\n stripMastraGatewayPrefix,\n} from '../providers/model-ids.js';\nimport {\n buildOpenAICodexOAuthFetch,\n createCodexMiddleware,\n createReasoningEffortMiddleware,\n getEffectiveThinkingLevel,\n openaiCodexProvider,\n THINKING_LEVEL_TO_REASONING_EFFORT,\n} from '../providers/openai-codex.js';\nimport type { ThinkingLevel } from '../providers/openai-codex.js';\nimport { ModelRouterLanguageModelWithThinking } from '../providers/provider-thinking.js';\nimport { xaiProvider } from '../providers/xai.js';\nimport { getAppDataDir } from '../utils/project.js';\nimport { resolveCustomProviders } from './custom-provider-source.js';\n\nexport {\n MASTRA_GATEWAY_PREFIX,\n OPENAI_PREFIX,\n remapOpenAIModelForCodexOAuth,\n stripMastraGatewayPrefix,\n} from '../providers/model-ids.js';\n\nexport const MASTRACODE_GATEWAY_ID = 'mastracode';\n\ntype ModelRequestHeaders = Record<string, string>;\n\nexport type MastraCodeCustomProvider = { name: string; url: string; apiKey?: string; models?: string[] };\n\nexport type MastraCodeGatewayOptions = {\n mastraGatewayBaseUrl: string;\n mastraGatewayApiKey?: string;\n routeThroughMastraGateway: boolean;\n thinkingLevel?: ThinkingLevel;\n /** Anthropic prompt-cache breakpoints to write. Defaults to `conversation`. */\n anthropicPromptCacheScope?: AnthropicPromptCacheScope;\n customProviders?: MastraCodeCustomProvider[];\n settingsPath?: string;\n /**\n * Per-tenant credential source for this gateway instance. Defaults to the\n * server-global file-backed `AuthStorage`; deployed web passes the calling\n * tenant's store so model calls use the caller's own credentials.\n */\n credentialStore?: CredentialStore;\n};\n\n/**\n * Global file-backed credential store for local (TUI) model resolution.\n *\n * Constructed lazily, NOT at module scope: `AuthStorage`'s default path is\n * resolved from `MASTRA_APP_DATA_DIR` at construction, and this module is\n * routinely imported before test harnesses / embedders point that variable at\n * an isolated directory — an import-time construction would permanently pin\n * the developer's real app-data dir for every credential read.\n */\nlet authStorageSingleton: AuthStorage | undefined;\nlet authStorageSingletonDir: string | undefined;\n\nexport function getGlobalAuthStorage(): AuthStorage {\n // Keyed by the resolved app-data dir: in-process harnesses re-point\n // MASTRA_APP_DATA_DIR per run inside one long-lived worker, so a store\n // pinned to a previous dir must be discarded, not reused.\n const dir = getAppDataDir();\n if (!authStorageSingleton || authStorageSingletonDir !== dir) {\n authStorageSingleton = new AuthStorage();\n authStorageSingletonDir = dir;\n }\n return authStorageSingleton;\n}\n\nexport function reloadAuthStorage() {\n getGlobalAuthStorage().reload();\n}\n\n/**\n * Resolve the Anthropic API key.\n * Main slot → dedicated apikey: slot → env var.\n */\nexport function getAnthropicApiKey(credentials: CredentialStore = getGlobalAuthStorage()): string | undefined {\n const storedCred = credentials.get('anthropic');\n if (storedCred?.type === 'api_key' && storedCred.key.trim().length > 0) {\n return storedCred.key.trim();\n }\n const dedicatedKey = credentials.getStoredApiKey('anthropic')?.trim();\n if (dedicatedKey) return dedicatedKey;\n return credentials.allowEnvironmentFallback === false\n ? undefined\n : process.env.ANTHROPIC_API_KEY?.trim() || undefined;\n}\n\n/**\n * Resolve the OpenAI API key.\n * Main slot → dedicated apikey: slot → env var.\n */\nexport function getOpenAIApiKey(credentials: CredentialStore = getGlobalAuthStorage()): string | undefined {\n const storedCred = credentials.get('openai-codex');\n if (storedCred?.type === 'api_key' && storedCred.key.trim().length > 0) {\n return storedCred.key.trim();\n }\n const dedicatedKey = credentials.getStoredApiKey('openai-codex')?.trim();\n if (dedicatedKey) return dedicatedKey;\n return credentials.allowEnvironmentFallback === false ? undefined : process.env.OPENAI_API_KEY?.trim() || undefined;\n}\n\nfunction anthropicApiKeyProvider(\n modelId: string,\n apiKey: string,\n headers: ModelRequestHeaders | undefined,\n thinkingLevel: ThinkingLevel | undefined,\n promptCacheScope: AnthropicPromptCacheScope,\n) {\n const anthropic = createAnthropic({ apiKey, headers });\n const thinkingMiddleware = createAnthropicThinkingMiddleware(modelId, thinkingLevel);\n return wrapLanguageModel({\n model: anthropic(modelId),\n middleware: [createPromptCacheMiddleware(promptCacheScope), ...(thinkingMiddleware ? [thinkingMiddleware] : [])],\n });\n}\n\nfunction openaiApiKeyProvider(\n modelId: string,\n apiKey: string,\n headers?: ModelRequestHeaders,\n thinkingLevel?: ThinkingLevel,\n) {\n const openai = createOpenAI({ apiKey, baseURL: process.env.OPENAI_BASE_URL, headers });\n const middleware =\n thinkingLevel && thinkingLevel !== 'off'\n ? createReasoningEffortMiddleware(\n 'openai',\n THINKING_LEVEL_TO_REASONING_EFFORT[getEffectiveThinkingLevel(modelId, thinkingLevel)],\n )\n : undefined;\n return wrapLanguageModel({\n model: openai.responses(modelId),\n middleware: middleware ? [middleware] : [],\n });\n}\n\nfunction getAuthProviderId(providerId: string): string {\n return providerId === 'openai' ? 'openai-codex' : providerId;\n}\n\nfunction getProviderAuthKey(\n providerId: string,\n credentials: CredentialStore = getGlobalAuthStorage(),\n): string | undefined {\n const authProviderId = getAuthProviderId(providerId);\n const storedCred = credentials.get(authProviderId);\n if (storedCred?.type === 'api_key' && storedCred.key.trim().length > 0) {\n return storedCred.key.trim();\n }\n const dedicatedKey = credentials.getStoredApiKey(authProviderId)?.trim();\n if (dedicatedKey) return dedicatedKey;\n if (credentials.allowEnvironmentFallback === false) return undefined;\n return authProviderId === 'kimi-for-coding' ? process.env.KIMI_API_KEY?.trim() || undefined : undefined;\n}\n\nexport function resolveAuth(request: GatewayAuthRequest, mastraGatewayApiKey?: string): GatewayAuthResult | undefined {\n return MastraCodeGateway.resolveProviderAuth(request, mastraGatewayApiKey);\n}\n\nfunction getGatewayProviderKey(gatewayId: string, providerId: string): string {\n if (gatewayId === 'models.dev') return providerId;\n return providerId === gatewayId ? gatewayId : `${gatewayId}/${providerId}`;\n}\n\nfunction parseGatewayRouterId(\n routerId: string,\n gateway: MastraModelGatewayInterface,\n): { gatewayId: string; providerId: string; modelId: string } {\n const [firstPart = '', secondPart = '', ...restParts] = routerId.split('/');\n const gatewayId = gateway.id;\n\n if (firstPart === gatewayId && secondPart) {\n return {\n gatewayId,\n providerId: secondPart,\n modelId: restParts.join('/'),\n };\n }\n\n return {\n gatewayId,\n providerId: firstPart,\n modelId: [secondPart, ...restParts].filter(Boolean).join('/'),\n };\n}\n\nfunction hasResolvedAuth(auth: GatewayAuthResult | undefined): boolean {\n if (!auth) return false;\n if (auth.apiKey || auth.bearerToken) return true;\n return auth.headers ? Object.keys(auth.headers).length > 0 : false;\n}\n\nasync function resolveGatewayProviderAuth(\n gateway: MastraModelGatewayInterface,\n routerId: string,\n): Promise<GatewayAuthResult | undefined> {\n if (!gateway.resolveAuth) return undefined;\n\n const parsed = parseGatewayRouterId(routerId, gateway);\n try {\n const result = await gateway.resolveAuth({\n gatewayId: parsed.gatewayId,\n providerId: parsed.providerId,\n modelId: parsed.modelId,\n routerId,\n });\n return hasResolvedAuth(result) ? result : undefined;\n } catch {\n return undefined;\n }\n}\n\nasync function getMastraCodeProviderConfigs(\n gateway: MastraModelGatewayInterface,\n): Promise<Record<string, ProviderConfig>> {\n const providers: Record<string, ProviderConfig> = { ...(PROVIDER_REGISTRY as Record<string, ProviderConfig>) };\n\n try {\n const gatewayProviders = await gateway.fetchProviders();\n for (const [providerId, config] of Object.entries(gatewayProviders)) {\n providers[getGatewayProviderKey(gateway.id, providerId)] = {\n ...config,\n gateway: gateway.id,\n };\n }\n } catch (error) {\n console.warn(`Failed to load providers from gateway ${gateway.id}:`, error);\n }\n\n return providers;\n}\n\nfunction getApiKeyEnvVar(providerConfig: Pick<ProviderConfig, 'apiKeyEnvVar'> | undefined): string | undefined {\n const envVars = providerConfig?.apiKeyEnvVar;\n return Array.isArray(envVars) ? envVars[0] : envVars;\n}\n\nexport class MastraCodeGateway extends MastraModelGateway {\n readonly id = MASTRACODE_GATEWAY_ID;\n readonly name = 'MastraCode Gateway';\n\n readonly #mastraGateway: MastraGateway;\n readonly #mastraGatewayBaseUrl: string;\n readonly #mastraGatewayApiKey?: string;\n readonly #routeThroughMastraGateway: boolean;\n readonly #thinkingLevel?: ThinkingLevel;\n readonly #anthropicPromptCacheScope: AnthropicPromptCacheScope;\n readonly #customProviders?: MastraCodeCustomProvider[];\n readonly #settingsPath?: string;\n readonly #credentials: CredentialStore;\n\n constructor({\n mastraGatewayBaseUrl,\n mastraGatewayApiKey,\n routeThroughMastraGateway,\n thinkingLevel,\n anthropicPromptCacheScope,\n customProviders,\n settingsPath,\n credentialStore,\n }: MastraCodeGatewayOptions) {\n super();\n this.#mastraGateway = new MastraGateway({ baseUrl: mastraGatewayBaseUrl });\n this.#mastraGatewayBaseUrl = mastraGatewayBaseUrl;\n this.#mastraGatewayApiKey = mastraGatewayApiKey;\n this.#routeThroughMastraGateway = routeThroughMastraGateway;\n this.#thinkingLevel = thinkingLevel;\n this.#anthropicPromptCacheScope = anthropicPromptCacheScope ?? 'conversation';\n this.#customProviders = customProviders;\n this.#settingsPath = settingsPath;\n this.#credentials = credentialStore ?? getGlobalAuthStorage();\n }\n\n static getMastraGatewayApiKey(): string | undefined {\n return getGlobalAuthStorage().getStoredApiKey(MASTRA_GATEWAY_PROVIDER) ?? process.env['MASTRA_GATEWAY_API_KEY'];\n }\n\n /** @deprecated Renamed to {@link MastraCodeGateway.getMastraGatewayApiKey}. */\n static getMemoryGatewayApiKey(): string | undefined {\n return MastraCodeGateway.getMastraGatewayApiKey();\n }\n\n /**\n * Claim an unprefixed model id (e.g. a bare `anthropic/...`) when this gateway\n * can authenticate it via OAuth or a stored/env credential. This lets the\n * shared gateway router select MastraCode for auth resolution, so the status\n * bar and `/api-keys` reflect OAuth logins instead of only checking env vars.\n */\n handlesModel(modelId: string): boolean {\n const parsed = parseGatewayRouterId(modelId, this);\n if (!parsed.providerId || !parsed.modelId) return false;\n if (this.#routeThroughMastraGateway && this.#mastraGatewayApiKey) return true;\n const customProvider = this.#getCustomProviders().find(\n provider => parsed.providerId === getCustomProviderId(provider.name),\n );\n if (customProvider?.apiKey) return true;\n return hasResolvedAuth(\n MastraCodeGateway.resolveProviderAuth(\n {\n gatewayId: this.id,\n providerId: parsed.providerId,\n modelId: parsed.modelId,\n routerId: modelId,\n },\n undefined,\n this.#credentials,\n ),\n );\n }\n\n static resolveProviderAuth(\n request: GatewayAuthRequest,\n mastraGatewayApiKey?: string,\n credentials: CredentialStore = getGlobalAuthStorage(),\n ): GatewayAuthResult | undefined {\n if (request.gatewayId === 'mastra' && mastraGatewayApiKey) {\n return { apiKey: mastraGatewayApiKey, source: 'gateway' };\n }\n\n const authProviderId = getAuthProviderId(request.providerId);\n const storedCred = credentials.get(authProviderId);\n if (storedCred?.type === 'oauth') {\n return { bearerToken: 'oauth', source: 'gateway' };\n }\n\n const apiKey = getProviderAuthKey(request.providerId, credentials);\n return apiKey ? { apiKey, source: 'gateway' } : undefined;\n }\n\n static createModelCatalogProvider(gateway: MastraModelGatewayInterface): CustomModelCatalogProvider {\n return async () => {\n const registry = await getMastraCodeProviderConfigs(gateway);\n const models: CustomAvailableModel[] = [];\n\n for (const [provider, providerConfig] of Object.entries(registry)) {\n const apiKeyEnvVar = getApiKeyEnvVar(providerConfig);\n const hasEnvKey = apiKeyEnvVar ? Boolean(process.env[apiKeyEnvVar]) : false;\n const modelNames = providerConfig.models;\n if (!Array.isArray(modelNames)) continue;\n\n const gatewayAuth = modelNames[0]\n ? await resolveGatewayProviderAuth(gateway, `${provider}/${modelNames[0]}`)\n : undefined;\n\n for (const modelName of modelNames) {\n const id = `${provider}/${modelName}`;\n models.push({\n id,\n provider,\n modelName,\n hasApiKey: hasEnvKey || Boolean(gatewayAuth),\n apiKeyEnvVar: apiKeyEnvVar || undefined,\n });\n }\n }\n\n return models;\n };\n }\n\n createModelCatalogProvider(): CustomModelCatalogProvider {\n return MastraCodeGateway.createModelCatalogProvider(this);\n }\n\n #getCustomProviders(): MastraCodeCustomProvider[] {\n // Explicit constructor list wins; then a registered source (deployed web,\n // DB-backed — authoritative, so settings.json is never consulted); then\n // the local file-backed settings.\n return this.#customProviders ?? resolveCustomProviders() ?? loadSettings(this.#settingsPath).customProviders;\n }\n\n async fetchProviders(): Promise<Record<string, ProviderConfig>> {\n const providers: Record<string, ProviderConfig> = {};\n for (const provider of this.#getCustomProviders()) {\n const models = provider.models ?? [];\n if (!models.length) continue;\n providers[getCustomProviderId(provider.name)] = {\n name: provider.name,\n url: provider.url,\n apiKeyEnvVar: '',\n apiKeyHeader: 'Authorization',\n gateway: this.id,\n models,\n };\n }\n\n providers['kimi-for-coding'] = {\n name: 'Kimi For Coding',\n apiKeyEnvVar: 'KIMI_API_KEY',\n apiKeyHeader: 'Authorization',\n gateway: this.id,\n models: [...KIMI_CODING_MODELS],\n };\n\n try {\n const copilotModels = await getCopilotModelCatalog({ authStorage: this.#credentials });\n providers['github-copilot'] = {\n name: 'GitHub Copilot',\n apiKeyEnvVar: '',\n apiKeyHeader: 'Authorization',\n gateway: this.id,\n models: copilotModels.map(model => model.id),\n };\n } catch (error) {\n console.warn('Failed to load GitHub Copilot model catalog:', error);\n }\n\n return providers;\n }\n\n buildUrl(modelId: string): string | undefined | Promise<string | undefined> {\n return this.#routeThroughMastraGateway ? this.#mastraGateway.buildUrl(modelId) : modelId;\n }\n\n async getApiKey(modelId: string): Promise<string> {\n const providerId = stripMastraGatewayPrefix(modelId).split('/', 1)[0];\n if (this.#routeThroughMastraGateway) return this.#mastraGatewayApiKey ?? '';\n return providerId ? (getProviderAuthKey(providerId, this.#credentials) ?? '') : '';\n }\n\n resolveAuth(request: GatewayAuthRequest): GatewayAuthResult | undefined {\n if (this.#routeThroughMastraGateway && this.#mastraGatewayApiKey) {\n return { apiKey: this.#mastraGatewayApiKey, source: 'gateway' };\n }\n\n const customProvider = this.#getCustomProviders().find(\n provider => request.providerId === getCustomProviderId(provider.name),\n );\n if (customProvider?.apiKey) {\n return { apiKey: customProvider.apiKey, source: 'gateway' };\n }\n\n return MastraCodeGateway.resolveProviderAuth(request, undefined, this.#credentials);\n }\n\n resolveLanguageModel(args: {\n modelId: string;\n providerId: string;\n apiKey: string;\n headers?: Record<string, string>;\n transport?: any;\n responsesWebSocket?: any;\n }): GatewayLanguageModel {\n const customProvider = this.#getCustomProviders().find(\n provider => args.providerId === getCustomProviderId(provider.name),\n );\n if (customProvider) {\n const provider = createOpenAICompatible({\n name: args.providerId,\n baseURL: customProvider.url,\n apiKey: args.apiKey,\n headers: args.headers,\n });\n const reasoningEffort = this.#thinkingLevel ? THINKING_LEVEL_TO_REASONING_EFFORT[this.#thinkingLevel] : undefined;\n const middleware = createReasoningEffortMiddleware(args.providerId, reasoningEffort);\n if (!middleware) {\n return provider.chatModel(args.modelId);\n }\n return wrapLanguageModel({\n model: provider.chatModel(args.modelId),\n middleware: [middleware],\n });\n }\n\n if (args.providerId === 'github-copilot') {\n return githubCopilotProvider(args.modelId, {\n headers: args.headers,\n authStorage: this.#credentials,\n }) as unknown as GatewayLanguageModel;\n }\n\n if (args.providerId === 'moonshotai') {\n // Prefer the gateway-resolved key (stored credentials), then the canonical\n // registry env var. Keep the legacy typo name as a fallback for anyone who\n // set it because of the previous error message.\n const apiKey =\n args.apiKey?.trim() || process.env.MOONSHOT_API_KEY?.trim() || process.env.MOONSHOT_AI_API_KEY?.trim();\n if (!apiKey) {\n throw new Error('Need MOONSHOT_API_KEY');\n }\n return createAnthropic({\n apiKey,\n baseURL: 'https://api.moonshot.ai/anthropic/v1',\n name: 'moonshotai.anthropicv1',\n headers: args.headers,\n })(args.modelId);\n }\n\n if (args.providerId === 'anthropic') {\n return this.#resolveAnthropicModel(args);\n }\n\n if (args.providerId === 'openai') {\n const openaiModel = this.#resolveOpenAIModel(args);\n if (openaiModel) return openaiModel;\n }\n\n if (args.providerId === 'xai' && this.#credentials.get('xai')?.type === 'oauth') {\n return xaiProvider(args.modelId, {\n headers: args.headers,\n authStorage: this.#credentials,\n }) as unknown as GatewayLanguageModel;\n }\n\n if (args.providerId === 'google') {\n return this.#resolveGoogleModel(args);\n }\n\n if (this.#routeThroughMastraGateway) {\n return this.#mastraGateway.resolveLanguageModel(args);\n }\n\n if (args.providerId === 'kimi-for-coding') {\n return kimiCodingProvider(args.modelId, {\n apiKey: args.apiKey,\n headers: args.headers,\n credentialStore: this.#credentials,\n }) as unknown as GatewayLanguageModel;\n }\n\n const routedModelId: `${string}/${string}` = `${args.providerId}/${args.modelId}`;\n const thinking =\n args.providerId === 'deepseek' ? deepseekThinkingOptions(routedModelId, this.#thinkingLevel) : undefined;\n return new ModelRouterLanguageModelWithThinking(\n { id: routedModelId, apiKey: args.apiKey, headers: args.headers },\n thinking,\n ) as unknown as GatewayLanguageModel;\n }\n\n #resolveAnthropicModel(args: {\n modelId: string;\n providerId: string;\n apiKey: string;\n headers?: Record<string, string>;\n transport?: any;\n responsesWebSocket?: any;\n }): GatewayLanguageModel {\n const bareModelId = normalizeAnthropicModelId(args.modelId);\n const storedCred = this.#credentials.get('anthropic');\n const thinkingMiddleware = createAnthropicThinkingMiddleware(bareModelId, this.#thinkingLevel);\n\n if (this.#routeThroughMastraGateway) {\n if (storedCred?.type === 'oauth') {\n const anthropic = createAnthropic({\n apiKey: 'oauth-gateway-placeholder',\n baseURL: `${this.#mastraGatewayBaseUrl}/v1`,\n headers: {\n [GATEWAY_AUTH_HEADER]: `Bearer ${args.apiKey}`,\n ...args.headers,\n },\n fetch: buildAnthropicOAuthFetch({ authStorage: this.#credentials }),\n });\n\n return wrapLanguageModel({\n model: anthropic(bareModelId),\n middleware: [\n claudeCodeMiddleware,\n createPromptCacheMiddleware(this.#anthropicPromptCacheScope),\n ...(thinkingMiddleware ? [thinkingMiddleware] : []),\n ],\n });\n }\n\n const gatewayModel = this.#mastraGateway.resolveLanguageModel({\n ...args,\n modelId: bareModelId,\n });\n if (!thinkingMiddleware) return gatewayModel;\n return wrapLanguageModel({\n model: gatewayModel as any,\n middleware: [thinkingMiddleware],\n });\n }\n\n if (storedCred?.type === 'oauth') {\n return opencodeClaudeMaxProvider(bareModelId, {\n headers: args.headers,\n authStorage: this.#credentials,\n thinkingLevel: this.#thinkingLevel,\n promptCacheScope: this.#anthropicPromptCacheScope,\n }) as unknown as GatewayLanguageModel;\n }\n\n if (storedCred?.type === 'api_key' && storedCred.key.trim().length > 0) {\n return anthropicApiKeyProvider(\n bareModelId,\n storedCred.key.trim(),\n args.headers,\n this.#thinkingLevel,\n this.#anthropicPromptCacheScope,\n );\n }\n\n const apiKey = getAnthropicApiKey(this.#credentials);\n if (apiKey) {\n return anthropicApiKeyProvider(\n bareModelId,\n apiKey,\n args.headers,\n this.#thinkingLevel,\n this.#anthropicPromptCacheScope,\n );\n }\n\n // No stored credentials: use the OAuth-backed provider so the first request can trigger login.\n return opencodeClaudeMaxProvider(bareModelId, {\n headers: args.headers,\n authStorage: this.#credentials,\n thinkingLevel: this.#thinkingLevel,\n promptCacheScope: this.#anthropicPromptCacheScope,\n }) as unknown as GatewayLanguageModel;\n }\n\n #resolveOpenAIModel(args: {\n modelId: string;\n providerId: string;\n apiKey: string;\n headers?: Record<string, string>;\n transport?: any;\n responsesWebSocket?: any;\n }): GatewayLanguageModel | undefined {\n const storedCred = this.#credentials.get('openai-codex');\n\n if (this.#routeThroughMastraGateway) {\n if (storedCred?.type === 'oauth') {\n const resolvedModelId = remapOpenAIModelForCodexOAuth(`openai/${args.modelId}`);\n const resolvedBareModelId = resolvedModelId.substring(OPENAI_PREFIX.length);\n const effectiveLevel = getEffectiveThinkingLevel(args.modelId, this.#thinkingLevel ?? 'medium');\n const reasoningEffort = THINKING_LEVEL_TO_REASONING_EFFORT[effectiveLevel];\n const middleware = createCodexMiddleware(reasoningEffort);\n const openai = createOpenAI({\n apiKey: 'oauth-gateway-placeholder',\n baseURL: `${this.#mastraGatewayBaseUrl}/v1`,\n headers: {\n [GATEWAY_AUTH_HEADER]: `Bearer ${args.apiKey}`,\n ...args.headers,\n },\n fetch: buildOpenAICodexOAuthFetch({ authStorage: this.#credentials, rewriteUrl: false }),\n });\n\n return wrapLanguageModel({\n model: openai.responses(resolvedBareModelId),\n middleware: [middleware],\n });\n }\n\n return this.#mastraGateway.resolveLanguageModel(args);\n }\n\n if (storedCred?.type === 'oauth') {\n const resolvedModelId = remapOpenAIModelForCodexOAuth(`openai/${args.modelId}`);\n return openaiCodexProvider(resolvedModelId.substring(OPENAI_PREFIX.length), {\n thinkingLevel: this.#thinkingLevel && getEffectiveThinkingLevel(args.modelId, this.#thinkingLevel),\n headers: args.headers,\n authStorage: this.#credentials,\n }) as unknown as GatewayLanguageModel;\n }\n\n const apiKey = getOpenAIApiKey(this.#credentials);\n if (apiKey) {\n return openaiApiKeyProvider(args.modelId, apiKey, args.headers, this.#thinkingLevel);\n }\n\n return undefined;\n }\n\n #resolveGoogleModel(args: {\n modelId: string;\n providerId: string;\n apiKey: string;\n headers?: Record<string, string>;\n transport?: any;\n responsesWebSocket?: any;\n }): GatewayLanguageModel {\n const baseModel = this.#routeThroughMastraGateway\n ? this.#mastraGateway.resolveLanguageModel(args)\n : (new ModelRouterLanguageModel({\n id: `${args.providerId}/${args.modelId}`,\n apiKey: args.apiKey,\n headers: args.headers,\n }) as unknown as GatewayLanguageModel);\n\n const thinkingMiddleware = createGoogleThinkingMiddleware(args.modelId, this.#thinkingLevel);\n if (!thinkingMiddleware) return baseModel;\n\n return wrapLanguageModel({\n model: baseModel as any,\n middleware: [thinkingMiddleware],\n });\n }\n}\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { Knowledge } from '@mastra/core/knowledge';
1
2
  import type { RequestContext } from '@mastra/core/request-context';
2
3
  import type { MastraCompositeStore } from '@mastra/core/storage';
3
4
  import type { MastraVector } from '@mastra/core/vector';
@@ -26,7 +27,7 @@ export declare function hasSubconsciousTools(vector: MastraVector | undefined, s
26
27
  */
27
28
  export declare function getDynamicMemory(storage: MastraCompositeStore, vector?: MastraVector, settingsPath?: string, options?: {
28
29
  disableSettingsOmSeed?: boolean;
29
- }): ({ requestContext }: {
30
+ }, knowledge?: Knowledge): ({ requestContext }: {
30
31
  requestContext: RequestContext;
31
32
  }) => Memory;
32
33
  //# sourceMappingURL=memory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/agents/memory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,MAAM,EAAgB,MAAM,gBAAgB,CAAC;AAOtD,OAAO,EAAE,sBAAsB,EAAiC,MAAM,uBAAuB,CAAC;AAG9F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAoFpD,OAAO,EAAE,sBAAsB,EAAE,CAAC;AA8BlC;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAE/E;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,EAAE,KAAK,EAAE,eAAe,GAAG,SAAS,GAAG,OAAO,CAElH;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,oBAAoB,EAC7B,MAAM,CAAC,EAAE,YAAY,EACrB,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;IAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAAE,IAgBrC,oBAAoB;IAAE,cAAc,EAAE,cAAc,CAAA;CAAE,YA0G/D"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/agents/memory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,MAAM,EAAgB,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAiC,MAAM,uBAAuB,CAAC;AAI9F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAsLpD,OAAO,EAAE,sBAAsB,EAAE,CAAC;AA8BlC;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAE/E;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,EAAE,KAAK,EAAE,eAAe,GAAG,SAAS,GAAG,OAAO,CAElH;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,oBAAoB,EAC7B,MAAM,CAAC,EAAE,YAAY,EACrB,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;IAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAAE,EAC7C,SAAS,CAAC,EAAE,SAAS,IAoBb,oBAAoB;IAAE,cAAc,EAAE,cAAc,CAAA;CAAE,YAsI/D"}