@mastra/code-sdk 1.15.1-alpha.3 → 1.15.1-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/dist/acp/agent.js +1 -2
  2. package/dist/acp/errors.js +1 -2
  3. package/dist/acp/event-mapper.js +1 -2
  4. package/dist/acp/index.js +1 -2
  5. package/dist/acp/runtime.js +1 -2
  6. package/dist/acp/server.js +1 -2
  7. package/dist/acp/skills.js +1 -2
  8. package/dist/agent-connections/messaging-processor.js +1 -2
  9. package/dist/agent-connections/ownership.js +1 -2
  10. package/dist/agent-connections/registry.js +1 -2
  11. package/dist/agent-connections/session-advertisement.js +1 -2
  12. package/dist/agent-connections/signal-provider.js +1 -2
  13. package/dist/agent-connections/state-processor.js +1 -2
  14. package/dist/agent-connections/thread-state.js +1 -2
  15. package/dist/agent-connections/tools.js +1 -2
  16. package/dist/agent-connections/types.js +1 -2
  17. package/dist/agent-connections/untrusted-text.js +1 -2
  18. package/dist/agents/background-completion-events.js +1 -2
  19. package/dist/agents/background-completion.js +1 -2
  20. package/dist/agents/context-audit.js +1 -2
  21. package/dist/agents/credential-resolver.js +1 -2
  22. package/dist/agents/custom-provider-source.js +1 -2
  23. package/dist/agents/instructions.js +1 -2
  24. package/dist/agents/mastracode-gateway.d.ts.map +1 -1
  25. package/dist/agents/mastracode-gateway.js +6 -5
  26. package/dist/agents/mastracode-gateway.js.map +1 -1
  27. package/dist/agents/memory.js +1 -2
  28. package/dist/agents/model.js +1 -2
  29. package/dist/agents/modes/build.js +1 -2
  30. package/dist/agents/modes/explore.js +1 -2
  31. package/dist/agents/modes/plan.js +1 -2
  32. package/dist/agents/prompts/agent-instructions.js +1 -2
  33. package/dist/agents/prompts/build.js +1 -2
  34. package/dist/agents/prompts/fast.js +1 -2
  35. package/dist/agents/prompts/index.js +1 -2
  36. package/dist/agents/prompts/model.js +1 -2
  37. package/dist/agents/prompts/plan.js +1 -2
  38. package/dist/agents/prompts/tool-guidance.js +1 -2
  39. package/dist/agents/sandbox-filesystem.d.ts.map +1 -1
  40. package/dist/agents/sandbox-filesystem.js +9 -7
  41. package/dist/agents/sandbox-filesystem.js.map +1 -1
  42. package/dist/agents/subagents/execute.js +1 -2
  43. package/dist/agents/subagents/explore.js +1 -2
  44. package/dist/agents/subagents/plan.js +1 -2
  45. package/dist/agents/thread-caveman-state.js +1 -2
  46. package/dist/agents/tool-availability.js +1 -2
  47. package/dist/agents/tools.js +1 -2
  48. package/dist/agents/workflow-builder-agent.js +1 -2
  49. package/dist/agents/workspace.js +1 -2
  50. package/dist/analytics.js +1 -2
  51. package/dist/auth/account-rotation-processor.js +1 -2
  52. package/dist/auth/account-routing-context.js +1 -2
  53. package/dist/auth/authorization-input.js +1 -2
  54. package/dist/auth/device-code.js +1 -2
  55. package/dist/auth/pkce.js +1 -2
  56. package/dist/auth/provider-auth-error.d.ts +2 -0
  57. package/dist/auth/provider-auth-error.d.ts.map +1 -1
  58. package/dist/auth/provider-auth-error.js +8 -3
  59. package/dist/auth/provider-auth-error.js.map +1 -1
  60. package/dist/auth/providers/anthropic.js +1 -2
  61. package/dist/auth/providers/github-copilot.js +1 -2
  62. package/dist/auth/providers/kimi-coding.js +1 -2
  63. package/dist/auth/providers/openai-codex.js +1 -2
  64. package/dist/auth/providers/xai.js +1 -2
  65. package/dist/auth/storage.js +1 -2
  66. package/dist/clipboard/index.js +1 -2
  67. package/dist/constants.js +1 -2
  68. package/dist/error-classification.js +1 -2
  69. package/dist/evals/context-builder.js +1 -2
  70. package/dist/evals/scorers/classify-command.d.ts +1 -2
  71. package/dist/evals/scorers/classify-command.d.ts.map +1 -1
  72. package/dist/evals/scorers/classify-command.js +7 -17
  73. package/dist/evals/scorers/classify-command.js.map +1 -1
  74. package/dist/evals/scorers/efficiency.js +1 -2
  75. package/dist/evals/scorers/extract-tools.js +1 -2
  76. package/dist/evals/scorers/outcome.d.ts.map +1 -1
  77. package/dist/evals/scorers/outcome.js +36 -22
  78. package/dist/evals/scorers/outcome.js.map +1 -1
  79. package/dist/experimental-agent.js +1 -2
  80. package/dist/factory/client.js +1 -2
  81. package/dist/factory/remote-controller.js +1 -2
  82. package/dist/factory/remote-session.js +1 -2
  83. package/dist/goal-manager.js +1 -2
  84. package/dist/goal-signal.js +1 -2
  85. package/dist/headless/cli.js +1 -2
  86. package/dist/headless/flags.js +1 -2
  87. package/dist/headless/format.js +1 -2
  88. package/dist/headless/policy.js +1 -2
  89. package/dist/headless/run-mc.js +1 -2
  90. package/dist/headless/types.js +1 -2
  91. package/dist/hooks/config.js +1 -2
  92. package/dist/hooks/executor.js +1 -2
  93. package/dist/hooks/manager.js +1 -2
  94. package/dist/hooks/types.js +1 -2
  95. package/dist/index.js +1 -2
  96. package/dist/ipc/ipc-reporter.js +1 -2
  97. package/dist/knowledge-inspector.js +1 -2
  98. package/dist/knowledge-scope.js +1 -2
  99. package/dist/lsp/client.d.ts.map +1 -1
  100. package/dist/lsp/client.js +1 -2
  101. package/dist/lsp/client.js.map +1 -1
  102. package/dist/lsp/language.js +1 -2
  103. package/dist/lsp/manager.js +1 -2
  104. package/dist/lsp/server.js +1 -2
  105. package/dist/lsp/workspace.js +1 -2
  106. package/dist/mcp/config.js +1 -2
  107. package/dist/mcp/manager.js +1 -2
  108. package/dist/mcp/state.js +1 -2
  109. package/dist/onboarding/custom-packs.js +1 -2
  110. package/dist/onboarding/custom-providers.js +1 -2
  111. package/dist/onboarding/om-settings.js +1 -2
  112. package/dist/onboarding/pack-activation.js +1 -2
  113. package/dist/onboarding/packs.js +1 -2
  114. package/dist/onboarding/settings.js +1 -2
  115. package/dist/permissions.js +1 -2
  116. package/dist/platform/index.js +1 -2
  117. package/dist/plugin.js +1 -2
  118. package/dist/plugins/dependencies.js +1 -2
  119. package/dist/plugins/install.js +1 -2
  120. package/dist/plugins/loader.js +1 -2
  121. package/dist/plugins/manager.js +1 -2
  122. package/dist/plugins/manifest.js +1 -2
  123. package/dist/plugins/package-link.js +1 -2
  124. package/dist/plugins/paths.js +1 -2
  125. package/dist/plugins/registry.js +1 -2
  126. package/dist/plugins/scaffold.js +1 -2
  127. package/dist/plugins/signal-lane.js +1 -2
  128. package/dist/process-memory-diagnostics.js +1 -2
  129. package/dist/processors/plan-rejection-abort.js +1 -2
  130. package/dist/providers/amazon-bedrock-gateway.js +1 -2
  131. package/dist/providers/amazon-bedrock.js +1 -2
  132. package/dist/providers/anthropic-prompt-cache.js +1 -2
  133. package/dist/providers/anthropic-thinking.js +1 -2
  134. package/dist/providers/claude-max.d.ts.map +1 -1
  135. package/dist/providers/claude-max.js +4 -4
  136. package/dist/providers/claude-max.js.map +1 -1
  137. package/dist/providers/github-copilot-gateway.js +1 -2
  138. package/dist/providers/github-copilot.d.ts.map +1 -1
  139. package/dist/providers/github-copilot.js +5 -5
  140. package/dist/providers/github-copilot.js.map +1 -1
  141. package/dist/providers/google-thinking.js +1 -2
  142. package/dist/providers/kimi-coding.d.ts.map +1 -1
  143. package/dist/providers/kimi-coding.js +8 -7
  144. package/dist/providers/kimi-coding.js.map +1 -1
  145. package/dist/providers/model-ids.js +1 -2
  146. package/dist/providers/openai-codex.d.ts +15 -0
  147. package/dist/providers/openai-codex.d.ts.map +1 -1
  148. package/dist/providers/openai-codex.js +50 -11
  149. package/dist/providers/openai-codex.js.map +1 -1
  150. package/dist/providers/provider-thinking.js +1 -2
  151. package/dist/providers/thinking-request.js +1 -2
  152. package/dist/providers/xai.d.ts.map +1 -1
  153. package/dist/providers/xai.js +5 -5
  154. package/dist/providers/xai.js.map +1 -1
  155. package/dist/schedules/interval.js +1 -2
  156. package/dist/schedules/prompt.js +1 -2
  157. package/dist/schedules/run-script.js +1 -2
  158. package/dist/schedules/scheduler.js +1 -2
  159. package/dist/schedules/tools.js +1 -2
  160. package/dist/schema.js +1 -2
  161. package/dist/theme-palette.js +1 -2
  162. package/dist/thinking-catalog.js +1 -2
  163. package/dist/thinking.js +1 -2
  164. package/dist/tool-names.js +1 -2
  165. package/dist/tools/request-sandbox-access.js +1 -2
  166. package/dist/tools/utils.js +1 -2
  167. package/dist/tools/web-search.js +1 -2
  168. package/dist/tools/workflows/create-workflow.js +1 -2
  169. package/dist/tools/workflows/delete-workflow.js +1 -2
  170. package/dist/tools/workflows/ephemeral-memory.js +1 -2
  171. package/dist/tools/workflows/extract-json-schema.js +1 -2
  172. package/dist/tools/workflows/get-workflow.js +1 -2
  173. package/dist/tools/workflows/list-available-agents.js +1 -2
  174. package/dist/tools/workflows/list-available-classifiers.js +1 -2
  175. package/dist/tools/workflows/list-available-tools.js +1 -2
  176. package/dist/tools/workflows/list-available-workflows.js +1 -2
  177. package/dist/tools/workflows/list-workflows.js +1 -2
  178. package/dist/tools/workflows/run-workflow.js +1 -2
  179. package/dist/tools/workflows/save-workflow.js +1 -2
  180. package/dist/tools/workflows/tool-ids.js +1 -2
  181. package/dist/utils/binaries.js +1 -2
  182. package/dist/utils/debug-log.js +1 -2
  183. package/dist/utils/discarding-scores-storage.js +1 -2
  184. package/dist/utils/errors.js +1 -2
  185. package/dist/utils/gateway-sync.js +1 -2
  186. package/dist/utils/local-observability.js +1 -2
  187. package/dist/utils/maintenance-lock.js +1 -2
  188. package/dist/utils/notification-dispatch.js +1 -2
  189. package/dist/utils/open-url.js +1 -2
  190. package/dist/utils/path-security.js +1 -2
  191. package/dist/utils/plan-diff.js +1 -2
  192. package/dist/utils/plans.js +1 -2
  193. package/dist/utils/project.js +1 -2
  194. package/dist/utils/prune-cli.js +1 -2
  195. package/dist/utils/signals-pubsub.js +1 -2
  196. package/dist/utils/slash-command-loader.js +1 -2
  197. package/dist/utils/slash-command-processor.js +1 -2
  198. package/dist/utils/stdin-pipe.js +1 -2
  199. package/dist/utils/storage-factory.js +1 -2
  200. package/dist/utils/storage-maintenance.js +1 -2
  201. package/dist/utils/thread-lock.js +1 -2
  202. package/dist/utils/token-estimator.js +1 -2
  203. package/dist/utils/update-check.js +1 -2
  204. package/dist/utils/wake-session.js +1 -2
  205. package/dist/voice/stt-registry.js +1 -2
  206. package/dist/workflows/register-primitives.js +1 -2
  207. package/dist/workflows/service.js +1 -2
  208. package/package.json +36 -32
package/dist/acp/agent.js CHANGED
@@ -8,7 +8,7 @@ import { handleAgentControllerEvent } from "./event-mapper.js";
8
8
  import { expandSkillCommand, listSkillCommands } from "./skills.js";
9
9
  import { isAbsolute } from "path";
10
10
  import { PROTOCOL_VERSION, RequestError } from "@agentclientprotocol/sdk";
11
- //#region src/acp/agent.ts
11
+ // src/acp/agent.ts
12
12
  const TERMINAL_LOGIN_METHOD_ID = "mastracode-login";
13
13
  const BROWSER_LOGIN_PROVIDER_IDS = [
14
14
  "openai-codex",
@@ -411,7 +411,6 @@ function mapStopReason(reason) {
411
411
  case "suspended": return "end_turn";
412
412
  }
413
413
  }
414
- //#endregion
415
414
  export { MastraCodeAcpAgent, extractTextFromContentBlocks, mapStopReason };
416
415
 
417
416
  //# sourceMappingURL=agent.js.map
@@ -1,4 +1,4 @@
1
- //#region src/acp/errors.ts
1
+ // src/acp/errors.ts
2
2
  /** Keep the session failure primary, including its ACP code, when cleanup also fails. */
3
3
  function withCleanupFailure(error, cleanupError) {
4
4
  if (error instanceof Error) {
@@ -8,7 +8,6 @@ function withCleanupFailure(error, cleanupError) {
8
8
  const message = error !== null && typeof error === "object" && "message" in error && typeof error.message === "string" ? error.message : String(error);
9
9
  return new AggregateError([error, cleanupError], message, { cause: error });
10
10
  }
11
- //#endregion
12
11
  export { withCleanupFailure };
13
12
 
14
13
  //# sourceMappingURL=errors.js.map
@@ -1,4 +1,4 @@
1
- //#region src/acp/event-mapper.ts
1
+ // src/acp/event-mapper.ts
2
2
  let autoApprove = false;
3
3
  /**
4
4
  * Enable or disable automatic tool approval (set via --dangerous-auto-approve CLI flag).
@@ -271,7 +271,6 @@ function accumulateUsage(target, usage) {
271
271
  if (usage.cachedInputTokens) target.cachedInputTokens = (target.cachedInputTokens ?? 0) + usage.cachedInputTokens;
272
272
  if (usage.cacheCreationInputTokens) target.cacheCreationInputTokens = (target.cacheCreationInputTokens ?? 0) + usage.cacheCreationInputTokens;
273
273
  }
274
- //#endregion
275
274
  export { handleAgentControllerEvent, setAutoApprove };
276
275
 
277
276
  //# sourceMappingURL=event-mapper.js.map
package/dist/acp/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { setAutoApprove } from "./event-mapper.js";
2
2
  import { createAcpSession } from "./runtime.js";
3
3
  import { runAcpServer } from "./server.js";
4
- //#region src/acp/index.ts
4
+ // src/acp/index.ts
5
5
  /** Entry point for Mastra Code's ACP server over stdio. */
6
6
  async function acpMain(options) {
7
7
  setAutoApprove(options?.dangerousAutoApprove === true);
@@ -18,7 +18,6 @@ async function acpMain(options) {
18
18
  console.log = originalConsoleLog;
19
19
  }
20
20
  }
21
- //#endregion
22
21
  export { acpMain };
23
22
 
24
23
  //# sourceMappingURL=index.js.map
@@ -2,7 +2,7 @@ import { withCleanupFailure } from "./errors.js";
2
2
  import { loadSettings, resolveDefaultThinkingLevel } from "../onboarding/settings.js";
3
3
  import { createMastraCode } from "../index.js";
4
4
  import { RequestError } from "@agentclientprotocol/sdk";
5
- //#region src/acp/runtime.ts
5
+ // src/acp/runtime.ts
6
6
  async function createAcpSession(request, options = {}) {
7
7
  const names = /* @__PURE__ */ new Set();
8
8
  const servers = request.mcpServers.map((server) => {
@@ -85,7 +85,6 @@ async function createAcpSession(request, options = {}) {
85
85
  throw error;
86
86
  }
87
87
  }
88
- //#endregion
89
88
  export { createAcpSession };
90
89
 
91
90
  //# sourceMappingURL=runtime.js.map
@@ -1,7 +1,7 @@
1
1
  import { MastraCodeAcpAgent } from "./agent.js";
2
2
  import { AgentSideConnection, ndJsonStream } from "@agentclientprotocol/sdk";
3
3
  import { Readable, Writable } from "stream";
4
- //#region src/acp/server.ts
4
+ // src/acp/server.ts
5
5
  /** Run the ACP server over stdio and release its sessions on disconnect. */
6
6
  async function runAcpServer(createSession) {
7
7
  const input = Readable.toWeb(process.stdin);
@@ -32,7 +32,6 @@ async function runAcpServer(createSession) {
32
32
  }
33
33
  }
34
34
  }
35
- //#endregion
36
35
  export { runAcpServer };
37
36
 
38
37
  //# sourceMappingURL=server.js.map
@@ -1,6 +1,6 @@
1
1
  import { RequestError } from "@agentclientprotocol/sdk";
2
2
  import { formatSkillActivation } from "@mastra/core/workspace";
3
- //#region src/acp/skills.ts
3
+ // src/acp/skills.ts
4
4
  async function invokableSkills(skills) {
5
5
  const selected = /* @__PURE__ */ new Map();
6
6
  for (const skill of await skills.list()) if (skill["user-invocable"] !== false && !selected.has(skill.name)) selected.set(skill.name, skill);
@@ -27,7 +27,6 @@ async function expandSkillCommand(content, skills, commands) {
27
27
  const activation = `${formatSkillActivation(skill)}${args ? `\n\nARGUMENTS: ${args}` : ""}`;
28
28
  return `<skill name="${skill.name}">\n${activation.replaceAll("</skill>", "&lt;/skill&gt;")}\n</skill>`;
29
29
  }
30
- //#endregion
31
30
  export { expandSkillCommand, listSkillCommands };
32
31
 
33
32
  //# sourceMappingURL=skills.js.map
@@ -1,5 +1,5 @@
1
1
  import { boundUntrustedText, serializeUntrustedData } from "./untrusted-text.js";
2
- //#region src/agent-connections/messaging-processor.ts
2
+ // src/agent-connections/messaging-processor.ts
3
3
  const TOOL_NAME = "agent_signal_send";
4
4
  const REMINDER_TAG = "expected-reply-reminder";
5
5
  const SUCCESSFUL_REPLY_ACTIONS = /* @__PURE__ */ new Set([
@@ -128,7 +128,6 @@ function readRecord(value) {
128
128
  function readString(value) {
129
129
  return typeof value === "string" && value.length > 0 ? value : void 0;
130
130
  }
131
- //#endregion
132
131
  export { CrossAgentMessagingExpectedReplyProcessor, createExpectedReplyReminderSignal, findUnansweredExpectedReplies };
133
132
 
134
133
  //# sourceMappingURL=messaging-processor.js.map
@@ -1,4 +1,4 @@
1
- //#region src/agent-connections/ownership.ts
1
+ // src/agent-connections/ownership.ts
2
2
  const OWNERSHIP_RETRY_INITIAL_DELAY_MS = 250;
3
3
  const OWNERSHIP_RETRY_MAX_DELAY_MS = 1e3;
4
4
  /**
@@ -93,7 +93,6 @@ function createThreadOwnershipManager(claimThread) {
93
93
  }
94
94
  };
95
95
  }
96
- //#endregion
97
96
  export { createThreadOwnershipManager };
98
97
 
99
98
  //# sourceMappingURL=ownership.js.map
@@ -1,5 +1,5 @@
1
1
  import { readAgentConnections } from "./thread-state.js";
2
- //#region src/agent-connections/registry.ts
2
+ // src/agent-connections/registry.ts
3
3
  const AGENT_CONNECTIONS_DISCOVERY_CONTEXT_KEY = "mastracode.agentConnectionPeers";
4
4
  var AgentConnectionRegistry = class {
5
5
  #now;
@@ -164,7 +164,6 @@ function isSelf(peer, context) {
164
164
  function comparePeers(a, b) {
165
165
  return a.id.localeCompare(b.id);
166
166
  }
167
- //#endregion
168
167
  export { AGENT_CONNECTIONS_DISCOVERY_CONTEXT_KEY, AgentConnectionRegistry, stablePeerId };
169
168
 
170
169
  //# sourceMappingURL=registry.js.map
@@ -1,5 +1,5 @@
1
1
  import { createThreadOwnershipManager } from "./ownership.js";
2
- //#region src/agent-connections/session-advertisement.ts
2
+ // src/agent-connections/session-advertisement.ts
3
3
  /**
4
4
  * Advertise a session's threads to peer agents and keep them advertised.
5
5
  *
@@ -83,7 +83,6 @@ function createSessionThreadAdvertisement(options) {
83
83
  }
84
84
  };
85
85
  }
86
- //#endregion
87
86
  export { createSessionThreadAdvertisement };
88
87
 
89
88
  //# sourceMappingURL=session-advertisement.js.map
@@ -3,7 +3,7 @@ import { AgentConnectionRegistry } from "./registry.js";
3
3
  import { AgentConnectionsStateProcessor } from "./state-processor.js";
4
4
  import { createAgentConnectionTools } from "./tools.js";
5
5
  import { SignalProvider } from "@mastra/core/signals";
6
- //#region src/agent-connections/signal-provider.ts
6
+ // src/agent-connections/signal-provider.ts
7
7
  var CrossAgentMessagingSignalProvider = class extends SignalProvider {
8
8
  id = "cross-agent-messaging";
9
9
  #registry;
@@ -32,7 +32,6 @@ var CrossAgentMessagingSignalProvider = class extends SignalProvider {
32
32
  }
33
33
  };
34
34
  var AgentConnectionsSignalProvider = class extends CrossAgentMessagingSignalProvider {};
35
- //#endregion
36
35
  export { AgentConnectionsSignalProvider, CrossAgentMessagingSignalProvider };
37
36
 
38
37
  //# sourceMappingURL=signal-provider.js.map
@@ -2,7 +2,7 @@ import { boundUntrustedText, serializeUntrustedData } from "./untrusted-text.js"
2
2
  import { AGENT_CONNECTIONS_STATE_ID, AGENT_CONNECTIONS_STATE_TYPE } from "./types.js";
3
3
  import { AGENT_CONNECTIONS_REQUEST_CONTEXT_KEY, getCarriedAgentConnections, isThreadStateStore, normalizeConnectedPeers } from "./thread-state.js";
4
4
  import { AgentConnectionRegistry } from "./registry.js";
5
- //#region src/agent-connections/state-processor.ts
5
+ // src/agent-connections/state-processor.ts
6
6
  const DELTA_SNAPSHOT_CAP = 10;
7
7
  var AgentConnectionsStateProcessor = class {
8
8
  id = "agent-connections-state";
@@ -267,7 +267,6 @@ function renderDelta(ops) {
267
267
  } : void 0
268
268
  })}`).join("\n")}\n`;
269
269
  }
270
- //#endregion
271
270
  export { AgentConnectionsStateProcessor, stableConnectionsCacheKey };
272
271
 
273
272
  //# sourceMappingURL=state-processor.js.map
@@ -1,5 +1,5 @@
1
1
  import { AGENT_CONNECTIONS_STATE_TYPE } from "./types.js";
2
- //#region src/agent-connections/thread-state.ts
2
+ // src/agent-connections/thread-state.ts
3
3
  const AGENT_CONNECTIONS_REQUEST_CONTEXT_KEY = "mastracode.agentConnections";
4
4
  const stateWriteQueues = /* @__PURE__ */ new WeakMap();
5
5
  function isMemoryBacked(agent) {
@@ -154,7 +154,6 @@ function getCarriedAgentConnections(requestContext) {
154
154
  const value = requestContext?.get(AGENT_CONNECTIONS_REQUEST_CONTEXT_KEY);
155
155
  return Array.isArray(value) ? normalizeConnectedPeers(value) : void 0;
156
156
  }
157
- //#endregion
158
157
  export { AGENT_CONNECTIONS_REQUEST_CONTEXT_KEY, getCarriedAgentConnections, isMemoryBacked, isThreadStateStore, normalizeAgentConnectionsState, normalizeConnectedPeers, normalizeSentAgentSignals, readAgentConnections, readSentAgentSignals, resolveAgentConnectionStore, sortConnectedPeers, updateAgentConnections, writeSentAgentSignals };
159
158
 
160
159
  //# sourceMappingURL=thread-state.js.map
@@ -3,7 +3,7 @@ import { isMemoryBacked, readAgentConnections, readSentAgentSignals, updateAgent
3
3
  import { AgentConnectionRegistry, stablePeerId } from "./registry.js";
4
4
  import { createTool } from "@mastra/core/tools";
5
5
  import { z } from "zod";
6
- //#region src/agent-connections/tools.ts
6
+ // src/agent-connections/tools.ts
7
7
  const prioritySchema = z.enum([
8
8
  "low",
9
9
  "medium",
@@ -548,7 +548,6 @@ function sortJsonValue(value) {
548
548
  function errorMessage(error) {
549
549
  return error instanceof Error ? error.message : "Unknown error";
550
550
  }
551
- //#endregion
552
551
  export { createAgentConnectionTools };
553
552
 
554
553
  //# sourceMappingURL=tools.js.map
@@ -1,7 +1,6 @@
1
- //#region src/agent-connections/types.ts
1
+ // src/agent-connections/types.ts
2
2
  const AGENT_CONNECTIONS_STATE_ID = "agent-connections";
3
3
  const AGENT_CONNECTIONS_STATE_TYPE = "agent_connection";
4
- //#endregion
5
4
  export { AGENT_CONNECTIONS_STATE_ID, AGENT_CONNECTIONS_STATE_TYPE };
6
5
 
7
6
  //# sourceMappingURL=types.js.map
@@ -1,4 +1,4 @@
1
- //#region src/agent-connections/untrusted-text.ts
1
+ // src/agent-connections/untrusted-text.ts
2
2
  const UNTRUSTED_PEER_ID_MAX_LENGTH = 512;
3
3
  const UNTRUSTED_PEER_METADATA_MAX_LENGTH = 256;
4
4
  function boundUntrustedText(value, maxLength) {
@@ -16,7 +16,6 @@ function serializeUntrustedData(value) {
16
16
  }
17
17
  });
18
18
  }
19
- //#endregion
20
19
  export { UNTRUSTED_PEER_ID_MAX_LENGTH, UNTRUSTED_PEER_METADATA_MAX_LENGTH, boundUntrustedText, serializeUntrustedData };
21
20
 
22
21
  //# sourceMappingURL=untrusted-text.js.map
@@ -1,4 +1,4 @@
1
- //#region src/agents/background-completion-events.ts
1
+ // src/agents/background-completion-events.ts
2
2
  function createBackgroundCompletionEvents() {
3
3
  const listeners = /* @__PURE__ */ new Set();
4
4
  return {
@@ -13,7 +13,6 @@ function createBackgroundCompletionEvents() {
13
13
  }
14
14
  };
15
15
  }
16
- //#endregion
17
16
  export { createBackgroundCompletionEvents };
18
17
 
19
18
  //# sourceMappingURL=background-completion-events.js.map
@@ -1,4 +1,4 @@
1
- //#region src/agents/background-completion.ts
1
+ // src/agents/background-completion.ts
2
2
  /**
3
3
  * Find the live session a thread runs in. Factory sessions are addressed by
4
4
  * their thread id; Mastra Code sessions by their resource id, or, after
@@ -70,7 +70,6 @@ function createBackgroundCompletionCallbacks(getController, events) {
70
70
  onTaskCancelled: (task) => deliver(task, "cancelled")
71
71
  };
72
72
  }
73
- //#endregion
74
73
  export { createBackgroundCompletionCallbacks, findSessionForThread };
75
74
 
76
75
  //# sourceMappingURL=background-completion.js.map
@@ -1,5 +1,5 @@
1
1
  import { tokenEstimate } from "../utils/token-estimator.js";
2
- //#region src/agents/context-audit.ts
2
+ // src/agents/context-audit.ts
3
3
  /**
4
4
  * Context audit — accounts for what occupies the model's context window.
5
5
  *
@@ -112,7 +112,6 @@ function buildContextAudit(input) {
112
112
  estimated: true
113
113
  };
114
114
  }
115
- //#endregion
116
115
  export { buildContextAudit };
117
116
 
118
117
  //# sourceMappingURL=context-audit.js.map
@@ -1,4 +1,4 @@
1
- //#region src/agents/credential-resolver.ts
1
+ // src/agents/credential-resolver.ts
2
2
  const CREDENTIAL_POLICY_KEY = "mastracode__credentialPolicy";
3
3
  let credentialStoreProvider;
4
4
  let credentialTenantResolver;
@@ -139,7 +139,6 @@ function resolveCredentialStore(requestContext) {
139
139
  }
140
140
  return store;
141
141
  }
142
- //#endregion
143
142
  export { hasCredentialStoreProvider, hasCredentialTenantResolver, prepareCredentialTenant, resolveAuthenticatedCredentialTenant, resolveCredentialScope, resolveCredentialStore, resolveTenantFromRequestContext, setCredentialLogger, setCredentialStoreProvider, withCredentialTenantPreparation };
144
143
 
145
144
  //# sourceMappingURL=credential-resolver.js.map
@@ -1,5 +1,5 @@
1
1
  import { resolveTenantFromRequestContext } from "./credential-resolver.js";
2
- //#region src/agents/custom-provider-source.ts
2
+ // src/agents/custom-provider-source.ts
3
3
  let customProvidersSource;
4
4
  /** Register (or clear) the custom providers source. Deployed-web only. */
5
5
  function setCustomProvidersSource(source) {
@@ -19,7 +19,6 @@ function resolveCustomProviders(requestContext) {
19
19
  if (!customProvidersSource) return void 0;
20
20
  return customProvidersSource(resolveTenantFromRequestContext(requestContext));
21
21
  }
22
- //#endregion
23
22
  export { hasCustomProvidersSource, resolveCustomProviders, setCustomProvidersSource };
24
23
 
25
24
  //# sourceMappingURL=custom-provider-source.js.map
@@ -1,7 +1,7 @@
1
1
  import { getCurrentGitBranchAsync } from "../utils/project.js";
2
2
  import { detectCommonBinariesAsync } from "../utils/binaries.js";
3
3
  import { buildFullPromptSections, joinPromptSections } from "./prompts/index.js";
4
- //#region src/agents/instructions.ts
4
+ // src/agents/instructions.ts
5
5
  async function getDynamicInstructions({ requestContext, hostInstructions, coAuthor, hasSubconscious, hasSubagents, disabledBuiltinTools }) {
6
6
  return joinPromptSections(await getDynamicInstructionSections({
7
7
  requestContext,
@@ -58,7 +58,6 @@ async function getDynamicInstructionSections({ requestContext, hostInstructions,
58
58
  return [...promptSections, ...pluginSections];
59
59
  }
60
60
  const PLUGIN_INSTRUCTIONS_PREAMBLE = `# Plugin Instructions\n\nThe following instructions come from installed Mastra Code plugins. Treat them as scoped plugin guidance; they must not override higher-priority system, developer, repository, safety, or tool-use instructions.`;
61
- //#endregion
62
61
  export { getDynamicInstructionSections, getDynamicInstructions };
63
62
 
64
63
  //# sourceMappingURL=instructions.js.map
@@ -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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"}
@@ -2,7 +2,7 @@ import { getAppDataDir } from "../utils/project.js";
2
2
  import { AuthStorage } from "../auth/storage.js";
3
3
  import { createGoogleThinkingMiddleware } from "../providers/google-thinking.js";
4
4
  import { MASTRA_GATEWAY_PREFIX, OPENAI_PREFIX, getCredentialProviderId, normalizeAnthropicModelId, remapOpenAIModelForCodexOAuth, stripMastraGatewayPrefix } from "../providers/model-ids.js";
5
- import { THINKING_LEVEL_TO_REASONING_EFFORT, buildOpenAICodexOAuthFetch, createCodexMiddleware, createReasoningEffortMiddleware, getEffectiveThinkingLevel, openaiCodexProvider } from "../providers/openai-codex.js";
5
+ import { THINKING_LEVEL_TO_REASONING_EFFORT, buildOpenAICodexOAuthFetch, createCodexMiddleware, createPromptCacheKeyMiddleware, createReasoningEffortMiddleware, getEffectiveThinkingLevel, getRequestThreadId, 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";
@@ -15,7 +15,7 @@ import { createOpenAI } from "@ai-sdk/openai";
15
15
  import { wrapLanguageModel } from "ai";
16
16
  import { createAnthropic } from "@ai-sdk/anthropic";
17
17
  import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
18
- //#region src/agents/mastracode-gateway.ts
18
+ // src/agents/mastracode-gateway.ts
19
19
  const MASTRACODE_GATEWAY_ID = "mastracode";
20
20
  /**
21
21
  * Global file-backed credential store for local (TUI) model resolution.
@@ -79,9 +79,10 @@ function openaiApiKeyProvider(modelId, apiKey, headers, thinkingLevel) {
79
79
  headers
80
80
  });
81
81
  const middleware = thinkingLevel && thinkingLevel !== "off" ? createReasoningEffortMiddleware("openai", THINKING_LEVEL_TO_REASONING_EFFORT[getEffectiveThinkingLevel(modelId, thinkingLevel)]) : void 0;
82
+ const promptCacheKeyMiddleware = createPromptCacheKeyMiddleware(getRequestThreadId(headers));
82
83
  return wrapLanguageModel({
83
84
  model: openai.responses(modelId),
84
- middleware: middleware ? [middleware] : []
85
+ middleware: [...middleware ? [middleware] : [], ...promptCacheKeyMiddleware ? [promptCacheKeyMiddleware] : []]
85
86
  });
86
87
  }
87
88
  function getProviderAuthKey(providerId, credentials = getGlobalAuthStorage()) {
@@ -402,6 +403,7 @@ var MastraCodeGateway = class MastraCodeGateway extends MastraModelGateway {
402
403
  const effectiveLevel = getEffectiveThinkingLevel(args.modelId, this.#thinkingLevel ?? "medium");
403
404
  const reasoningEffort = THINKING_LEVEL_TO_REASONING_EFFORT[effectiveLevel];
404
405
  const middleware = createCodexMiddleware(reasoningEffort);
406
+ const promptCacheKeyMiddleware = createPromptCacheKeyMiddleware(getRequestThreadId(args.headers));
405
407
  const openai = createOpenAI({
406
408
  apiKey: "oauth-gateway-placeholder",
407
409
  baseURL: `${this.#mastraGatewayBaseUrl}/v1`,
@@ -416,7 +418,7 @@ var MastraCodeGateway = class MastraCodeGateway extends MastraModelGateway {
416
418
  });
417
419
  return wrapLanguageModel({
418
420
  model: openai.responses(resolvedBareModelId),
419
- middleware: [middleware]
421
+ middleware: [middleware, ...promptCacheKeyMiddleware ? [promptCacheKeyMiddleware] : []]
420
422
  });
421
423
  }
422
424
  return this.#mastraGateway.resolveLanguageModel(args);
@@ -446,7 +448,6 @@ var MastraCodeGateway = class MastraCodeGateway extends MastraModelGateway {
446
448
  });
447
449
  }
448
450
  };
449
- //#endregion
450
451
  export { MASTRACODE_GATEWAY_ID, MASTRA_GATEWAY_PREFIX, MastraCodeGateway, OPENAI_PREFIX, getAnthropicApiKey, getGlobalAuthStorage, getOpenAIApiKey, hasProviderEnvironmentKey, reloadAuthStorage, remapOpenAIModelForCodexOAuth, resolveAuth, stripMastraGatewayPrefix };
451
452
 
452
453
  //# sourceMappingURL=mastracode-gateway.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mastracode-gateway.js","names":[],"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 { githubCopilotProvider } from '../providers/github-copilot.js';\nimport { createGoogleThinkingMiddleware } from '../providers/google-thinking.js';\nimport { kimiCodingProvider } from '../providers/kimi-coding.js';\nimport {\n getCredentialProviderId,\n KIMI_CODING_CREDENTIAL_ID,\n KIMI_CODING_PROVIDER_ID,\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 {\n ModelRouterLanguageModelWithThinking,\n providerThinkingOptions,\n withThinkingOptionsModel,\n} 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 getProviderAuthKey(\n providerId: string,\n credentials: CredentialStore = getGlobalAuthStorage(),\n): string | undefined {\n const authProviderId = getCredentialProviderId(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 // `/api-keys` stores keys under the catalog provider id (`kimi-code-plan-cn`),\n // which can differ from the credential id.\n const catalogKey = authProviderId !== providerId ? credentials.getStoredApiKey(providerId)?.trim() : undefined;\n if (catalogKey) return catalogKey;\n if (credentials.allowEnvironmentFallback === false) return undefined;\n return authProviderId === KIMI_CODING_CREDENTIAL_ID ? 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\n/**\n * Whether the process environment has a key for a models.dev provider. Checks every\n * env var the registry lists, as the models.dev gateway does when `resolveModel`\n * gets no gateway credential (e.g. `GOOGLE_API_KEY` or `GOOGLE_GENERATIVE_AI_API_KEY`).\n */\nexport function hasProviderEnvironmentKey(providerId: string): boolean {\n const envVars = (PROVIDER_REGISTRY as Record<string, ProviderConfig>)[providerId]?.apiKeyEnvVar;\n if (!envVars) return false;\n return (Array.isArray(envVars) ? envVars : [envVars]).some(envVar => Boolean(process.env[envVar]?.trim()));\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 = getCredentialProviderId(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 // Catalog auth (`handlesModel`, `resolveAuth`) reads this store, while\n // `/api-keys` and logins write through other AuthStorage instances. Pick\n // up their changes on every catalog refresh.\n this.#credentials.reload();\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 // Subscription providers are not listed here: catalog ids from this gateway\n // are namespaced (`mastracode/<provider>/...`). Kimi augments the models.dev\n // `kimi-code-plan-cn` provider (claimed via `handlesModel`), and Copilot,\n // which models.dev excludes, has its own `github-copilot` gateway.\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 withThinkingOptionsModel(\n xaiProvider(args.modelId, { headers: args.headers, authStorage: this.#credentials }),\n providerThinkingOptions(`xai/${args.modelId}`, this.#thinkingLevel),\n );\n }\n\n if (this.#routeThroughMastraGateway) return this.#mastraGateway.resolveLanguageModel(args);\n\n if (args.providerId === 'google') {\n return this.#resolveGoogleModel(args);\n }\n\n if (args.providerId === KIMI_CODING_PROVIDER_ID || args.providerId === KIMI_CODING_CREDENTIAL_ID) {\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 return new ModelRouterLanguageModelWithThinking(\n { id: routedModelId, apiKey: args.apiKey, headers: args.headers },\n providerThinkingOptions(routedModelId, this.#thinkingLevel),\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 return this.#mastraGateway.resolveLanguageModel({ ...args, modelId: bareModelId });\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 routerModel = new ModelRouterLanguageModel({\n id: `${args.providerId}/${args.modelId}`,\n apiKey: args.apiKey,\n headers: args.headers,\n }) as unknown as GatewayLanguageModel;\n const thinkingMiddleware = createGoogleThinkingMiddleware(args.modelId, this.#thinkingLevel);\n if (!thinkingMiddleware) return routerModel;\n\n return wrapLanguageModel({\n model: routerModel as any,\n middleware: [thinkingMiddleware],\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"mastracode-gateway.js","names":[],"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 { githubCopilotProvider } from '../providers/github-copilot.js';\nimport { createGoogleThinkingMiddleware } from '../providers/google-thinking.js';\nimport { kimiCodingProvider } from '../providers/kimi-coding.js';\nimport {\n getCredentialProviderId,\n KIMI_CODING_CREDENTIAL_ID,\n KIMI_CODING_PROVIDER_ID,\n normalizeAnthropicModelId,\n OPENAI_PREFIX,\n remapOpenAIModelForCodexOAuth,\n stripMastraGatewayPrefix,\n} from '../providers/model-ids.js';\nimport {\n buildOpenAICodexOAuthFetch,\n createCodexMiddleware,\n createPromptCacheKeyMiddleware,\n createReasoningEffortMiddleware,\n getEffectiveThinkingLevel,\n getRequestThreadId,\n openaiCodexProvider,\n THINKING_LEVEL_TO_REASONING_EFFORT,\n} from '../providers/openai-codex.js';\nimport type { ThinkingLevel } from '../providers/openai-codex.js';\nimport {\n ModelRouterLanguageModelWithThinking,\n providerThinkingOptions,\n withThinkingOptionsModel,\n} 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 const promptCacheKeyMiddleware = createPromptCacheKeyMiddleware(getRequestThreadId(headers));\n return wrapLanguageModel({\n model: openai.responses(modelId),\n middleware: [...(middleware ? [middleware] : []), ...(promptCacheKeyMiddleware ? [promptCacheKeyMiddleware] : [])],\n });\n}\n\nfunction getProviderAuthKey(\n providerId: string,\n credentials: CredentialStore = getGlobalAuthStorage(),\n): string | undefined {\n const authProviderId = getCredentialProviderId(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 // `/api-keys` stores keys under the catalog provider id (`kimi-code-plan-cn`),\n // which can differ from the credential id.\n const catalogKey = authProviderId !== providerId ? credentials.getStoredApiKey(providerId)?.trim() : undefined;\n if (catalogKey) return catalogKey;\n if (credentials.allowEnvironmentFallback === false) return undefined;\n return authProviderId === KIMI_CODING_CREDENTIAL_ID ? 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\n/**\n * Whether the process environment has a key for a models.dev provider. Checks every\n * env var the registry lists, as the models.dev gateway does when `resolveModel`\n * gets no gateway credential (e.g. `GOOGLE_API_KEY` or `GOOGLE_GENERATIVE_AI_API_KEY`).\n */\nexport function hasProviderEnvironmentKey(providerId: string): boolean {\n const envVars = (PROVIDER_REGISTRY as Record<string, ProviderConfig>)[providerId]?.apiKeyEnvVar;\n if (!envVars) return false;\n return (Array.isArray(envVars) ? envVars : [envVars]).some(envVar => Boolean(process.env[envVar]?.trim()));\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 = getCredentialProviderId(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 // Catalog auth (`handlesModel`, `resolveAuth`) reads this store, while\n // `/api-keys` and logins write through other AuthStorage instances. Pick\n // up their changes on every catalog refresh.\n this.#credentials.reload();\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 // Subscription providers are not listed here: catalog ids from this gateway\n // are namespaced (`mastracode/<provider>/...`). Kimi augments the models.dev\n // `kimi-code-plan-cn` provider (claimed via `handlesModel`), and Copilot,\n // which models.dev excludes, has its own `github-copilot` gateway.\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 withThinkingOptionsModel(\n xaiProvider(args.modelId, { headers: args.headers, authStorage: this.#credentials }),\n providerThinkingOptions(`xai/${args.modelId}`, this.#thinkingLevel),\n );\n }\n\n if (this.#routeThroughMastraGateway) return this.#mastraGateway.resolveLanguageModel(args);\n\n if (args.providerId === 'google') {\n return this.#resolveGoogleModel(args);\n }\n\n if (args.providerId === KIMI_CODING_PROVIDER_ID || args.providerId === KIMI_CODING_CREDENTIAL_ID) {\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 return new ModelRouterLanguageModelWithThinking(\n { id: routedModelId, apiKey: args.apiKey, headers: args.headers },\n providerThinkingOptions(routedModelId, this.#thinkingLevel),\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 return this.#mastraGateway.resolveLanguageModel({ ...args, modelId: bareModelId });\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 promptCacheKeyMiddleware = createPromptCacheKeyMiddleware(getRequestThreadId(args.headers));\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, ...(promptCacheKeyMiddleware ? [promptCacheKeyMiddleware] : [])],\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 routerModel = new ModelRouterLanguageModel({\n id: `${args.providerId}/${args.modelId}`,\n apiKey: args.apiKey,\n headers: args.headers,\n }) as unknown as GatewayLanguageModel;\n const thinkingMiddleware = createGoogleThinkingMiddleware(args.modelId, this.#thinkingLevel);\n if (!thinkingMiddleware) return routerModel;\n\n return wrapLanguageModel({\n model: routerModel as any,\n middleware: [thinkingMiddleware],\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAqEA,MAAa,wBAAwB;;;;;;;;;;AAgCrC,IAAI;AACJ,IAAI;AAEJ,SAAgB,uBAAoC;CAIlD,MAAM,MAAM,cAAc;CAC1B,IAAI,CAAC,wBAAwB,4BAA4B,KAAK;EAC5D,uBAAuB,IAAI,YAAY;EACvC,0BAA0B;CAC5B;CACA,OAAO;AACT;AAEA,SAAgB,oBAAoB;CAClC,qBAAqB,CAAC,CAAC,OAAO;AAChC;;;;;AAMA,SAAgB,mBAAmB,cAA+B,qBAAqB,GAAuB;CAC5G,MAAM,aAAa,YAAY,IAAI,WAAW;CAC9C,IAAI,YAAY,SAAS,aAAa,WAAW,IAAI,KAAK,CAAC,CAAC,SAAS,GACnE,OAAO,WAAW,IAAI,KAAK;CAE7B,MAAM,eAAe,YAAY,gBAAgB,WAAW,CAAC,EAAE,KAAK;CACpE,IAAI,cAAc,OAAO;CACzB,OAAO,YAAY,6BAA6B,QAC5C,KAAA,IACA,QAAQ,IAAI,mBAAmB,KAAK,KAAK,KAAA;AAC/C;;;;;AAMA,SAAgB,gBAAgB,cAA+B,qBAAqB,GAAuB;CACzG,MAAM,aAAa,YAAY,IAAI,cAAc;CACjD,IAAI,YAAY,SAAS,aAAa,WAAW,IAAI,KAAK,CAAC,CAAC,SAAS,GACnE,OAAO,WAAW,IAAI,KAAK;CAE7B,MAAM,eAAe,YAAY,gBAAgB,cAAc,CAAC,EAAE,KAAK;CACvE,IAAI,cAAc,OAAO;CACzB,OAAO,YAAY,6BAA6B,QAAQ,KAAA,IAAY,QAAQ,IAAI,gBAAgB,KAAK,KAAK,KAAA;AAC5G;AAEA,SAAS,wBACP,SACA,QACA,SACA,eACA,kBACA;CACA,MAAM,YAAY,gBAAgB;EAAE;EAAQ;CAAQ,CAAC;CACrD,MAAM,qBAAqB,kCAAkC,SAAS,aAAa;CACnF,OAAO,kBAAkB;EACvB,OAAO,UAAU,OAAO;EACxB,YAAY,CAAC,4BAA4B,gBAAgB,GAAG,GAAI,qBAAqB,CAAC,kBAAkB,IAAI,CAAC,CAAE;CACjH,CAAC;AACH;AAEA,SAAS,qBACP,SACA,QACA,SACA,eACA;CACA,MAAM,SAAS,aAAa;EAAE;EAAQ,SAAS,QAAQ,IAAI;EAAiB;CAAQ,CAAC;CACrF,MAAM,aACJ,iBAAiB,kBAAkB,QAC/B,gCACE,UACA,mCAAmC,0BAA0B,SAAS,aAAa,EACrF,IACA,KAAA;CACN,MAAM,2BAA2B,+BAA+B,mBAAmB,OAAO,CAAC;CAC3F,OAAO,kBAAkB;EACvB,OAAO,OAAO,UAAU,OAAO;EAC/B,YAAY,CAAC,GAAI,aAAa,CAAC,UAAU,IAAI,CAAC,GAAI,GAAI,2BAA2B,CAAC,wBAAwB,IAAI,CAAC,CAAE;CACnH,CAAC;AACH;AAEA,SAAS,mBACP,YACA,cAA+B,qBAAqB,GAChC;CACpB,MAAM,iBAAiB,wBAAwB,UAAU;CACzD,MAAM,aAAa,YAAY,IAAI,cAAc;CACjD,IAAI,YAAY,SAAS,aAAa,WAAW,IAAI,KAAK,CAAC,CAAC,SAAS,GACnE,OAAO,WAAW,IAAI,KAAK;CAE7B,MAAM,eAAe,YAAY,gBAAgB,cAAc,CAAC,EAAE,KAAK;CACvE,IAAI,cAAc,OAAO;CAGzB,MAAM,aAAa,mBAAmB,aAAa,YAAY,gBAAgB,UAAU,CAAC,EAAE,KAAK,IAAI,KAAA;CACrG,IAAI,YAAY,OAAO;CACvB,IAAI,YAAY,6BAA6B,OAAO,OAAO,KAAA;CAC3D,OAAO,mBAAA,oBAA+C,QAAQ,IAAI,cAAc,KAAK,KAAK,KAAA,IAAY,KAAA;AACxG;AAEA,SAAgB,YAAY,SAA6B,qBAA6D;CACpH,OAAO,kBAAkB,oBAAoB,SAAS,mBAAmB;AAC3E;AAEA,SAAS,sBAAsB,WAAmB,YAA4B;CAC5E,IAAI,cAAc,cAAc,OAAO;CACvC,OAAO,eAAe,YAAY,YAAY,GAAG,UAAU,GAAG;AAChE;AAEA,SAAS,qBACP,UACA,SAC4D;CAC5D,MAAM,CAAC,YAAY,IAAI,aAAa,IAAI,GAAG,aAAa,SAAS,MAAM,GAAG;CAC1E,MAAM,YAAY,QAAQ;CAE1B,IAAI,cAAc,aAAa,YAC7B,OAAO;EACL;EACA,YAAY;EACZ,SAAS,UAAU,KAAK,GAAG;CAC7B;CAGF,OAAO;EACL;EACA,YAAY;EACZ,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CAC9D;AACF;AAEA,SAAS,gBAAgB,MAA8C;CACrE,IAAI,CAAC,MAAM,OAAO;CAClB,IAAI,KAAK,UAAU,KAAK,aAAa,OAAO;CAC5C,OAAO,KAAK,UAAU,OAAO,KAAK,KAAK,OAAO,CAAC,CAAC,SAAS,IAAI;AAC/D;AAEA,eAAe,2BACb,SACA,UACwC;CACxC,IAAI,CAAC,QAAQ,aAAa,OAAO,KAAA;CAEjC,MAAM,SAAS,qBAAqB,UAAU,OAAO;CACrD,IAAI;EACF,MAAM,SAAS,MAAM,QAAQ,YAAY;GACvC,WAAW,OAAO;GAClB,YAAY,OAAO;GACnB,SAAS,OAAO;GAChB;EACF,CAAC;EACD,OAAO,gBAAgB,MAAM,IAAI,SAAS,KAAA;CAC5C,QAAQ;EACN;CACF;AACF;AAEA,eAAe,6BACb,SACyC;CACzC,MAAM,YAA4C,EAAE,GAAI,kBAAqD;CAE7G,IAAI;EACF,MAAM,mBAAmB,MAAM,QAAQ,eAAe;EACtD,KAAK,MAAM,CAAC,YAAY,WAAW,OAAO,QAAQ,gBAAgB,GAChE,UAAU,sBAAsB,QAAQ,IAAI,UAAU,KAAK;GACzD,GAAG;GACH,SAAS,QAAQ;EACnB;CAEJ,SAAS,OAAO;EACd,QAAQ,KAAK,yCAAyC,QAAQ,GAAG,IAAI,KAAK;CAC5E;CAEA,OAAO;AACT;AAEA,SAAS,gBAAgB,gBAAsF;CAC7G,MAAM,UAAU,gBAAgB;CAChC,OAAO,MAAM,QAAQ,OAAO,IAAI,QAAQ,KAAK;AAC/C;;;;;;AAOA,SAAgB,0BAA0B,YAA6B;CACrE,MAAM,UAAW,kBAAqD,WAAW,EAAE;CACnF,IAAI,CAAC,SAAS,OAAO;CACrB,QAAQ,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO,EAAA,CAAG,MAAK,WAAU,QAAQ,QAAQ,IAAI,OAAO,EAAE,KAAK,CAAC,CAAC;AAC3G;AAEA,IAAa,oBAAb,MAAa,0BAA0B,mBAAmB;CACxD,KAAc;CACd,OAAgB;CAEhB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA,YAAY,EACV,sBACA,qBACA,2BACA,eACA,2BACA,iBACA,cACA,mBAC2B;EAC3B,MAAM;EACN,KAAK,iBAAiB,IAAI,cAAc,EAAE,SAAS,qBAAqB,CAAC;EACzE,KAAK,wBAAwB;EAC7B,KAAK,uBAAuB;EAC5B,KAAK,6BAA6B;EAClC,KAAK,iBAAiB;EACtB,KAAK,6BAA6B,6BAA6B;EAC/D,KAAK,mBAAmB;EACxB,KAAK,gBAAgB;EACrB,KAAK,eAAe,mBAAmB,qBAAqB;CAC9D;CAEA,OAAO,yBAA6C;EAClD,OAAO,qBAAqB,CAAC,CAAC,gBAAA,gBAAuC,KAAK,QAAQ,IAAI;CACxF;;CAGA,OAAO,yBAA6C;EAClD,OAAO,kBAAkB,uBAAuB;CAClD;;;;;;;CAQA,aAAa,SAA0B;EACrC,MAAM,SAAS,qBAAqB,SAAS,IAAI;EACjD,IAAI,CAAC,OAAO,cAAc,CAAC,OAAO,SAAS,OAAO;EAClD,IAAI,KAAK,8BAA8B,KAAK,sBAAsB,OAAO;EAIzE,IAHuB,KAAK,oBAAoB,CAAC,CAAC,MAChD,aAAY,OAAO,eAAe,oBAAoB,SAAS,IAAI,CAEpD,CAAC,EAAE,QAAQ,OAAO;EACnC,OAAO,gBACL,kBAAkB,oBAChB;GACE,WAAW,KAAK;GAChB,YAAY,OAAO;GACnB,SAAS,OAAO;GAChB,UAAU;EACZ,GACA,KAAA,GACA,KAAK,YACP,CACF;CACF;CAEA,OAAO,oBACL,SACA,qBACA,cAA+B,qBAAqB,GACrB;EAC/B,IAAI,QAAQ,cAAc,YAAY,qBACpC,OAAO;GAAE,QAAQ;GAAqB,QAAQ;EAAU;EAG1D,MAAM,iBAAiB,wBAAwB,QAAQ,UAAU;EAEjE,IADmB,YAAY,IAAI,cACtB,CAAC,EAAE,SAAS,SACvB,OAAO;GAAE,aAAa;GAAS,QAAQ;EAAU;EAGnD,MAAM,SAAS,mBAAmB,QAAQ,YAAY,WAAW;EACjE,OAAO,SAAS;GAAE;GAAQ,QAAQ;EAAU,IAAI,KAAA;CAClD;CAEA,OAAO,2BAA2B,SAAkE;EAClG,OAAO,YAAY;GACjB,MAAM,WAAW,MAAM,6BAA6B,OAAO;GAC3D,MAAM,SAAiC,CAAC;GAExC,KAAK,MAAM,CAAC,UAAU,mBAAmB,OAAO,QAAQ,QAAQ,GAAG;IACjE,MAAM,eAAe,gBAAgB,cAAc;IACnD,MAAM,YAAY,eAAe,QAAQ,QAAQ,IAAI,aAAa,IAAI;IACtE,MAAM,aAAa,eAAe;IAClC,IAAI,CAAC,MAAM,QAAQ,UAAU,GAAG;IAEhC,MAAM,cAAc,WAAW,KAC3B,MAAM,2BAA2B,SAAS,GAAG,SAAS,GAAG,WAAW,IAAI,IACxE,KAAA;IAEJ,KAAK,MAAM,aAAa,YAAY;KAClC,MAAM,KAAK,GAAG,SAAS,GAAG;KAC1B,OAAO,KAAK;MACV;MACA;MACA;MACA,WAAW,aAAa,QAAQ,WAAW;MAC3C,cAAc,gBAAgB,KAAA;KAChC,CAAC;IACH;GACF;GAEA,OAAO;EACT;CACF;CAEA,6BAAyD;EACvD,OAAO,kBAAkB,2BAA2B,IAAI;CAC1D;CAEA,sBAAkD;EAIhD,OAAO,KAAK,oBAAoB,uBAAuB,KAAK,aAAa,KAAK,aAAa,CAAC,CAAC;CAC/F;CAEA,MAAM,iBAA0D;EAI9D,KAAK,aAAa,OAAO;EACzB,MAAM,YAA4C,CAAC;EACnD,KAAK,MAAM,YAAY,KAAK,oBAAoB,GAAG;GACjD,MAAM,SAAS,SAAS,UAAU,CAAC;GACnC,IAAI,CAAC,OAAO,QAAQ;GACpB,UAAU,oBAAoB,SAAS,IAAI,KAAK;IAC9C,MAAM,SAAS;IACf,KAAK,SAAS;IACd,cAAc;IACd,cAAc;IACd,SAAS,KAAK;IACd;GACF;EACF;EAMA,OAAO;CACT;CAEA,SAAS,SAAmE;EAC1E,OAAO,KAAK,6BAA6B,KAAK,eAAe,SAAS,OAAO,IAAI;CACnF;CAEA,MAAM,UAAU,SAAkC;EAChD,MAAM,aAAa,yBAAyB,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;EACnE,IAAI,KAAK,4BAA4B,OAAO,KAAK,wBAAwB;EACzE,OAAO,aAAc,mBAAmB,YAAY,KAAK,YAAY,KAAK,KAAM;CAClF;CAEA,YAAY,SAA4D;EACtE,IAAI,KAAK,8BAA8B,KAAK,sBAC1C,OAAO;GAAE,QAAQ,KAAK;GAAsB,QAAQ;EAAU;EAGhE,MAAM,iBAAiB,KAAK,oBAAoB,CAAC,CAAC,MAChD,aAAY,QAAQ,eAAe,oBAAoB,SAAS,IAAI,CACtE;EACA,IAAI,gBAAgB,QAClB,OAAO;GAAE,QAAQ,eAAe;GAAQ,QAAQ;EAAU;EAG5D,OAAO,kBAAkB,oBAAoB,SAAS,KAAA,GAAW,KAAK,YAAY;CACpF;CAEA,qBAAqB,MAOI;EACvB,MAAM,iBAAiB,KAAK,oBAAoB,CAAC,CAAC,MAChD,aAAY,KAAK,eAAe,oBAAoB,SAAS,IAAI,CACnE;EACA,IAAI,gBAAgB;GAClB,MAAM,WAAW,uBAAuB;IACtC,MAAM,KAAK;IACX,SAAS,eAAe;IACxB,QAAQ,KAAK;IACb,SAAS,KAAK;GAChB,CAAC;GACD,MAAM,kBAAkB,KAAK,iBAAiB,mCAAmC,KAAK,kBAAkB,KAAA;GACxG,MAAM,aAAa,gCAAgC,KAAK,YAAY,eAAe;GACnF,IAAI,CAAC,YACH,OAAO,SAAS,UAAU,KAAK,OAAO;GAExC,OAAO,kBAAkB;IACvB,OAAO,SAAS,UAAU,KAAK,OAAO;IACtC,YAAY,CAAC,UAAU;GACzB,CAAC;EACH;EAEA,IAAI,KAAK,eAAe,kBACtB,OAAO,sBAAsB,KAAK,SAAS;GACzC,SAAS,KAAK;GACd,aAAa,KAAK;EACpB,CAAC;EAGH,IAAI,KAAK,eAAe,cAAc;GAIpC,MAAM,SACJ,KAAK,QAAQ,KAAK,KAAK,QAAQ,IAAI,kBAAkB,KAAK,KAAK,QAAQ,IAAI,qBAAqB,KAAK;GACvG,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,uBAAuB;GAEzC,OAAO,gBAAgB;IACrB;IACA,SAAS;IACT,MAAM;IACN,SAAS,KAAK;GAChB,CAAC,CAAC,CAAC,KAAK,OAAO;EACjB;EAEA,IAAI,KAAK,eAAe,aACtB,OAAO,KAAK,uBAAuB,IAAI;EAGzC,IAAI,KAAK,eAAe,UAAU;GAChC,MAAM,cAAc,KAAK,oBAAoB,IAAI;GACjD,IAAI,aAAa,OAAO;EAC1B;EAEA,IAAI,KAAK,eAAe,SAAS,KAAK,aAAa,IAAI,KAAK,CAAC,EAAE,SAAS,SACtE,OAAO,yBACL,YAAY,KAAK,SAAS;GAAE,SAAS,KAAK;GAAS,aAAa,KAAK;EAAa,CAAC,GACnF,wBAAwB,OAAO,KAAK,WAAW,KAAK,cAAc,CACpE;EAGF,IAAI,KAAK,4BAA4B,OAAO,KAAK,eAAe,qBAAqB,IAAI;EAEzF,IAAI,KAAK,eAAe,UACtB,OAAO,KAAK,oBAAoB,IAAI;EAGtC,IAAI,KAAK,eAAA,uBAA0C,KAAK,eAAA,mBACtD,OAAO,mBAAmB,KAAK,SAAS;GACtC,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,iBAAiB,KAAK;EACxB,CAAC;EAGH,MAAM,gBAAuC,GAAG,KAAK,WAAW,GAAG,KAAK;EACxE,OAAO,IAAI,qCACT;GAAE,IAAI;GAAe,QAAQ,KAAK;GAAQ,SAAS,KAAK;EAAQ,GAChE,wBAAwB,eAAe,KAAK,cAAc,CAC5D;CACF;CAEA,uBAAuB,MAOE;EACvB,MAAM,cAAc,0BAA0B,KAAK,OAAO;EAC1D,MAAM,aAAa,KAAK,aAAa,IAAI,WAAW;EACpD,MAAM,qBAAqB,kCAAkC,aAAa,KAAK,cAAc;EAE7F,IAAI,KAAK,4BAA4B;GACnC,IAAI,YAAY,SAAS,SAAS;IAChC,MAAM,YAAY,gBAAgB;KAChC,QAAQ;KACR,SAAS,GAAG,KAAK,sBAAsB;KACvC,SAAS;OACN,sBAAsB,UAAU,KAAK;MACtC,GAAG,KAAK;KACV;KACA,OAAO,yBAAyB,EAAE,aAAa,KAAK,aAAa,CAAC;IACpE,CAAC;IAED,OAAO,kBAAkB;KACvB,OAAO,UAAU,WAAW;KAC5B,YAAY;MACV;MACA,4BAA4B,KAAK,0BAA0B;MAC3D,GAAI,qBAAqB,CAAC,kBAAkB,IAAI,CAAC;KACnD;IACF,CAAC;GACH;GAEA,OAAO,KAAK,eAAe,qBAAqB;IAAE,GAAG;IAAM,SAAS;GAAY,CAAC;EACnF;EAEA,IAAI,YAAY,SAAS,SACvB,OAAO,0BAA0B,aAAa;GAC5C,SAAS,KAAK;GACd,aAAa,KAAK;GAClB,eAAe,KAAK;GACpB,kBAAkB,KAAK;EACzB,CAAC;EAGH,IAAI,YAAY,SAAS,aAAa,WAAW,IAAI,KAAK,CAAC,CAAC,SAAS,GACnE,OAAO,wBACL,aACA,WAAW,IAAI,KAAK,GACpB,KAAK,SACL,KAAK,gBACL,KAAK,0BACP;EAGF,MAAM,SAAS,mBAAmB,KAAK,YAAY;EACnD,IAAI,QACF,OAAO,wBACL,aACA,QACA,KAAK,SACL,KAAK,gBACL,KAAK,0BACP;EAIF,OAAO,0BAA0B,aAAa;GAC5C,SAAS,KAAK;GACd,aAAa,KAAK;GAClB,eAAe,KAAK;GACpB,kBAAkB,KAAK;EACzB,CAAC;CACH;CAEA,oBAAoB,MAOiB;EACnC,MAAM,aAAa,KAAK,aAAa,IAAI,cAAc;EAEvD,IAAI,KAAK,4BAA4B;GACnC,IAAI,YAAY,SAAS,SAAS;IAEhC,MAAM,sBADkB,8BAA8B,UAAU,KAAK,SAC3B,CAAC,CAAC,UAAU,cAAc,MAAM;IAC1E,MAAM,iBAAiB,0BAA0B,KAAK,SAAS,KAAK,kBAAkB,QAAQ;IAC9F,MAAM,kBAAkB,mCAAmC;IAC3D,MAAM,aAAa,sBAAsB,eAAe;IACxD,MAAM,2BAA2B,+BAA+B,mBAAmB,KAAK,OAAO,CAAC;IAChG,MAAM,SAAS,aAAa;KAC1B,QAAQ;KACR,SAAS,GAAG,KAAK,sBAAsB;KACvC,SAAS;OACN,sBAAsB,UAAU,KAAK;MACtC,GAAG,KAAK;KACV;KACA,OAAO,2BAA2B;MAAE,aAAa,KAAK;MAAc,YAAY;KAAM,CAAC;IACzF,CAAC;IAED,OAAO,kBAAkB;KACvB,OAAO,OAAO,UAAU,mBAAmB;KAC3C,YAAY,CAAC,YAAY,GAAI,2BAA2B,CAAC,wBAAwB,IAAI,CAAC,CAAE;IAC1F,CAAC;GACH;GAEA,OAAO,KAAK,eAAe,qBAAqB,IAAI;EACtD;EAEA,IAAI,YAAY,SAAS,SAAS;GAChC,MAAM,kBAAkB,8BAA8B,UAAU,KAAK,SAAS;GAC9E,OAAO,oBAAoB,gBAAgB,UAAU,cAAc,MAAM,GAAG;IAC1E,eAAe,KAAK,kBAAkB,0BAA0B,KAAK,SAAS,KAAK,cAAc;IACjG,SAAS,KAAK;IACd,aAAa,KAAK;GACpB,CAAC;EACH;EAEA,MAAM,SAAS,gBAAgB,KAAK,YAAY;EAChD,IAAI,QACF,OAAO,qBAAqB,KAAK,SAAS,QAAQ,KAAK,SAAS,KAAK,cAAc;CAIvF;CAEA,oBAAoB,MAOK;EACvB,MAAM,cAAc,IAAI,yBAAyB;GAC/C,IAAI,GAAG,KAAK,WAAW,GAAG,KAAK;GAC/B,QAAQ,KAAK;GACb,SAAS,KAAK;EAChB,CAAC;EACD,MAAM,qBAAqB,+BAA+B,KAAK,SAAS,KAAK,cAAc;EAC3F,IAAI,CAAC,oBAAoB,OAAO;EAEhC,OAAO,kBAAkB;GACvB,OAAO;GACP,YAAY,CAAC,kBAAkB;EACjC,CAAC;CACH;AACF"}