@mastra/code-sdk 0.0.0-fix-workflow-step-timing-and-parallel-status-20260715180716
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +285 -0
- package/LICENSE.md +30 -0
- package/README.md +50 -0
- package/dist/acp/agent.d.ts +35 -0
- package/dist/acp/agent.d.ts.map +1 -0
- package/dist/acp/agent.js +173 -0
- package/dist/acp/agent.js.map +1 -0
- package/dist/acp/event-mapper.d.ts +22 -0
- package/dist/acp/event-mapper.d.ts.map +1 -0
- package/dist/acp/event-mapper.js +166 -0
- package/dist/acp/event-mapper.js.map +1 -0
- package/dist/acp/index.d.ts +8 -0
- package/dist/acp/index.d.ts.map +1 -0
- package/dist/acp/index.js +54 -0
- package/dist/acp/index.js.map +1 -0
- package/dist/acp/server.d.ts +7 -0
- package/dist/acp/server.d.ts.map +1 -0
- package/dist/acp/server.js +34 -0
- package/dist/acp/server.js.map +1 -0
- package/dist/acp.d.ts +2 -0
- package/dist/acp.d.ts.map +1 -0
- package/dist/acp.js +5 -0
- package/dist/acp.js.map +1 -0
- package/dist/agents/instructions.d.ts +6 -0
- package/dist/agents/instructions.d.ts.map +1 -0
- package/dist/agents/instructions.js +41 -0
- package/dist/agents/instructions.js.map +1 -0
- package/dist/agents/mastracode-gateway.d.ts +67 -0
- package/dist/agents/mastracode-gateway.d.ts.map +1 -0
- package/dist/agents/mastracode-gateway.js +446 -0
- package/dist/agents/mastracode-gateway.js.map +1 -0
- package/dist/agents/memory.d.ts +13 -0
- package/dist/agents/memory.d.ts.map +1 -0
- package/dist/agents/memory.js +107 -0
- package/dist/agents/memory.js.map +1 -0
- package/dist/agents/model.d.ts +55 -0
- package/dist/agents/model.d.ts.map +1 -0
- package/dist/agents/model.js +115 -0
- package/dist/agents/model.js.map +1 -0
- package/dist/agents/modes/build.d.ts +10 -0
- package/dist/agents/modes/build.d.ts.map +1 -0
- package/dist/agents/modes/build.js +45 -0
- package/dist/agents/modes/build.js.map +1 -0
- package/dist/agents/modes/explore.d.ts +10 -0
- package/dist/agents/modes/explore.d.ts.map +1 -0
- package/dist/agents/modes/explore.js +38 -0
- package/dist/agents/modes/explore.js.map +1 -0
- package/dist/agents/modes/plan.d.ts +6 -0
- package/dist/agents/modes/plan.d.ts.map +1 -0
- package/dist/agents/modes/plan.js +38 -0
- package/dist/agents/modes/plan.js.map +1 -0
- package/dist/agents/prompts/agent-instructions.d.ts +20 -0
- package/dist/agents/prompts/agent-instructions.d.ts.map +1 -0
- package/dist/agents/prompts/agent-instructions.js +82 -0
- package/dist/agents/prompts/agent-instructions.js.map +1 -0
- package/dist/agents/prompts/build.d.ts +12 -0
- package/dist/agents/prompts/build.d.ts.map +1 -0
- package/dist/agents/prompts/build.js +73 -0
- package/dist/agents/prompts/build.js.map +1 -0
- package/dist/agents/prompts/fast.d.ts +5 -0
- package/dist/agents/prompts/fast.d.ts.map +1 -0
- package/dist/agents/prompts/fast.js +22 -0
- package/dist/agents/prompts/fast.js.map +1 -0
- package/dist/agents/prompts/index.d.ts +19 -0
- package/dist/agents/prompts/index.d.ts.map +1 -0
- package/dist/agents/prompts/index.js +57 -0
- package/dist/agents/prompts/index.js.map +1 -0
- package/dist/agents/prompts/model.d.ts +5 -0
- package/dist/agents/prompts/model.d.ts.map +1 -0
- package/dist/agents/prompts/model.js +22 -0
- package/dist/agents/prompts/model.js.map +1 -0
- package/dist/agents/prompts/plan.d.ts +6 -0
- package/dist/agents/prompts/plan.d.ts.map +1 -0
- package/dist/agents/prompts/plan.js +107 -0
- package/dist/agents/prompts/plan.js.map +1 -0
- package/dist/agents/prompts/tool-guidance.d.ts +13 -0
- package/dist/agents/prompts/tool-guidance.d.ts.map +1 -0
- package/dist/agents/prompts/tool-guidance.js +181 -0
- package/dist/agents/prompts/tool-guidance.js.map +1 -0
- package/dist/agents/sandbox-filesystem.d.ts +89 -0
- package/dist/agents/sandbox-filesystem.d.ts.map +1 -0
- package/dist/agents/sandbox-filesystem.js +268 -0
- package/dist/agents/sandbox-filesystem.js.map +1 -0
- package/dist/agents/sandbox-reattach.d.ts +19 -0
- package/dist/agents/sandbox-reattach.d.ts.map +1 -0
- package/dist/agents/sandbox-reattach.js +17 -0
- package/dist/agents/sandbox-reattach.js.map +1 -0
- package/dist/agents/thread-caveman-state.d.ts +17 -0
- package/dist/agents/thread-caveman-state.d.ts.map +1 -0
- package/dist/agents/thread-caveman-state.js +96 -0
- package/dist/agents/thread-caveman-state.js.map +1 -0
- package/dist/agents/tool-availability.d.ts +10 -0
- package/dist/agents/tool-availability.d.ts.map +1 -0
- package/dist/agents/tool-availability.js +105 -0
- package/dist/agents/tool-availability.js.map +1 -0
- package/dist/agents/tools.d.ts +19 -0
- package/dist/agents/tools.d.ts.map +1 -0
- package/dist/agents/tools.js +145 -0
- package/dist/agents/tools.js.map +1 -0
- package/dist/agents/workspace.d.ts +22 -0
- package/dist/agents/workspace.d.ts.map +1 -0
- package/dist/agents/workspace.js +226 -0
- package/dist/agents/workspace.js.map +1 -0
- package/dist/analytics.d.ts +18 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +152 -0
- package/dist/analytics.js.map +1 -0
- package/dist/auth/index.d.ts +9 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +11 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/pkce.d.ts +13 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +21 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/providers/anthropic.d.ts +17 -0
- package/dist/auth/providers/anthropic.d.ts.map +1 -0
- package/dist/auth/providers/anthropic.js +94 -0
- package/dist/auth/providers/anthropic.js.map +1 -0
- package/dist/auth/providers/github-copilot.d.ts +100 -0
- package/dist/auth/providers/github-copilot.d.ts.map +1 -0
- package/dist/auth/providers/github-copilot.js +302 -0
- package/dist/auth/providers/github-copilot.js.map +1 -0
- package/dist/auth/providers/openai-codex.d.ts +95 -0
- package/dist/auth/providers/openai-codex.d.ts.map +1 -0
- package/dist/auth/providers/openai-codex.js +527 -0
- package/dist/auth/providers/openai-codex.js.map +1 -0
- package/dist/auth/storage.d.ts +91 -0
- package/dist/auth/storage.d.ts.map +1 -0
- package/dist/auth/storage.js +187 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/auth/types.d.ts +68 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +1 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/clipboard/index.d.ts +26 -0
- package/dist/clipboard/index.d.ts.map +1 -0
- package/dist/clipboard/index.js +192 -0
- package/dist/clipboard/index.js.map +1 -0
- package/dist/constants.d.ts +10 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +23 -0
- package/dist/constants.js.map +1 -0
- package/dist/error-classification.d.ts +10 -0
- package/dist/error-classification.d.ts.map +1 -0
- package/dist/error-classification.js +14 -0
- package/dist/error-classification.js.map +1 -0
- package/dist/evals/context-builder.d.ts +41 -0
- package/dist/evals/context-builder.d.ts.map +1 -0
- package/dist/evals/context-builder.js +120 -0
- package/dist/evals/context-builder.js.map +1 -0
- package/dist/evals/index.d.ts +4 -0
- package/dist/evals/index.d.ts.map +1 -0
- package/dist/evals/index.js +8 -0
- package/dist/evals/index.js.map +1 -0
- package/dist/evals/scorers/classify-command.d.ts +31 -0
- package/dist/evals/scorers/classify-command.d.ts.map +1 -0
- package/dist/evals/scorers/classify-command.js +52 -0
- package/dist/evals/scorers/classify-command.js.map +1 -0
- package/dist/evals/scorers/efficiency.d.ts +44 -0
- package/dist/evals/scorers/efficiency.d.ts.map +1 -0
- package/dist/evals/scorers/efficiency.js +201 -0
- package/dist/evals/scorers/efficiency.js.map +1 -0
- package/dist/evals/scorers/extract-tools.d.ts +25 -0
- package/dist/evals/scorers/extract-tools.d.ts.map +1 -0
- package/dist/evals/scorers/extract-tools.js +56 -0
- package/dist/evals/scorers/extract-tools.js.map +1 -0
- package/dist/evals/scorers/index.d.ts +3 -0
- package/dist/evals/scorers/index.d.ts.map +1 -0
- package/dist/evals/scorers/index.js +7 -0
- package/dist/evals/scorers/index.js.map +1 -0
- package/dist/evals/scorers/outcome.d.ts +49 -0
- package/dist/evals/scorers/outcome.d.ts.map +1 -0
- package/dist/evals/scorers/outcome.js +238 -0
- package/dist/evals/scorers/outcome.js.map +1 -0
- package/dist/headless/cli.d.ts +42 -0
- package/dist/headless/cli.d.ts.map +1 -0
- package/dist/headless/cli.js +196 -0
- package/dist/headless/cli.js.map +1 -0
- package/dist/headless/flags.d.ts +33 -0
- package/dist/headless/flags.d.ts.map +1 -0
- package/dist/headless/flags.js +188 -0
- package/dist/headless/flags.js.map +1 -0
- package/dist/headless/format.d.ts +38 -0
- package/dist/headless/format.d.ts.map +1 -0
- package/dist/headless/format.js +85 -0
- package/dist/headless/format.js.map +1 -0
- package/dist/headless/index.d.ts +25 -0
- package/dist/headless/index.d.ts.map +1 -0
- package/dist/headless/index.js +32 -0
- package/dist/headless/index.js.map +1 -0
- package/dist/headless/policy.d.ts +17 -0
- package/dist/headless/policy.d.ts.map +1 -0
- package/dist/headless/policy.js +38 -0
- package/dist/headless/policy.js.map +1 -0
- package/dist/headless/run-mc.d.ts +7 -0
- package/dist/headless/run-mc.d.ts.map +1 -0
- package/dist/headless/run-mc.js +296 -0
- package/dist/headless/run-mc.js.map +1 -0
- package/dist/headless/types.d.ts +134 -0
- package/dist/headless/types.d.ts.map +1 -0
- package/dist/headless/types.js +9 -0
- package/dist/headless/types.js.map +1 -0
- package/dist/hooks/config.d.ts +11 -0
- package/dist/hooks/config.d.ts.map +1 -0
- package/dist/hooks/config.js +78 -0
- package/dist/hooks/config.js.map +1 -0
- package/dist/hooks/executor.d.ts +13 -0
- package/dist/hooks/executor.d.ts.map +1 -0
- package/dist/hooks/executor.js +125 -0
- package/dist/hooks/executor.js.map +1 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +16 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/manager.d.ts +47 -0
- package/dist/hooks/manager.d.ts.map +1 -0
- package/dist/hooks/manager.js +284 -0
- package/dist/hooks/manager.js.map +1 -0
- package/dist/hooks/types.d.ts +152 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +7 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +243 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +730 -0
- package/dist/index.js.map +1 -0
- package/dist/ipc/ipc-reporter.d.ts +14 -0
- package/dist/ipc/ipc-reporter.d.ts.map +1 -0
- package/dist/ipc/ipc-reporter.js +24 -0
- package/dist/ipc/ipc-reporter.js.map +1 -0
- package/dist/lsp/client.d.ts +56 -0
- package/dist/lsp/client.d.ts.map +1 -0
- package/dist/lsp/client.js +309 -0
- package/dist/lsp/client.js.map +1 -0
- package/dist/lsp/index.d.ts +4 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +9 -0
- package/dist/lsp/index.js.map +1 -0
- package/dist/lsp/language.d.ts +9 -0
- package/dist/lsp/language.d.ts.map +1 -0
- package/dist/lsp/language.js +48 -0
- package/dist/lsp/language.js.map +1 -0
- package/dist/lsp/manager.d.ts +34 -0
- package/dist/lsp/manager.d.ts.map +1 -0
- package/dist/lsp/manager.js +97 -0
- package/dist/lsp/manager.js.map +1 -0
- package/dist/lsp/server.d.ts +27 -0
- package/dist/lsp/server.d.ts.map +1 -0
- package/dist/lsp/server.js +128 -0
- package/dist/lsp/server.js.map +1 -0
- package/dist/lsp/workspace.d.ts +9 -0
- package/dist/lsp/workspace.d.ts.map +1 -0
- package/dist/lsp/workspace.js +52 -0
- package/dist/lsp/workspace.js.map +1 -0
- package/dist/mcp/config.d.ts +34 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +205 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +10 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +49 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +374 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/types.d.ts +85 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +1 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/onboarding/custom-packs.d.ts +7 -0
- package/dist/onboarding/custom-packs.d.ts.map +1 -0
- package/dist/onboarding/custom-packs.js +20 -0
- package/dist/onboarding/custom-packs.js.map +1 -0
- package/dist/onboarding/custom-providers.d.ts +4 -0
- package/dist/onboarding/custom-providers.d.ts.map +1 -0
- package/dist/onboarding/custom-providers.js +28 -0
- package/dist/onboarding/custom-providers.js.map +1 -0
- package/dist/onboarding/index.d.ts +5 -0
- package/dist/onboarding/index.d.ts.map +1 -0
- package/dist/onboarding/index.js +21 -0
- package/dist/onboarding/index.js.map +1 -0
- package/dist/onboarding/om-settings.d.ts +20 -0
- package/dist/onboarding/om-settings.d.ts.map +1 -0
- package/dist/onboarding/om-settings.js +26 -0
- package/dist/onboarding/om-settings.js.map +1 -0
- package/dist/onboarding/packs.d.ts +48 -0
- package/dist/onboarding/packs.d.ts.map +1 -0
- package/dist/onboarding/packs.js +111 -0
- package/dist/onboarding/packs.js.map +1 -0
- package/dist/onboarding/settings.d.ts +327 -0
- package/dist/onboarding/settings.d.ts.map +1 -0
- package/dist/onboarding/settings.js +598 -0
- package/dist/onboarding/settings.js.map +1 -0
- package/dist/permissions.d.ts +55 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +119 -0
- package/dist/permissions.js.map +1 -0
- package/dist/plugin.d.ts +81 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +30 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugins/dependencies.d.ts +9 -0
- package/dist/plugins/dependencies.d.ts.map +1 -0
- package/dist/plugins/dependencies.js +111 -0
- package/dist/plugins/dependencies.js.map +1 -0
- package/dist/plugins/install.d.ts +21 -0
- package/dist/plugins/install.d.ts.map +1 -0
- package/dist/plugins/install.js +200 -0
- package/dist/plugins/install.js.map +1 -0
- package/dist/plugins/loader.d.ts +15 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +221 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +60 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +378 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/manifest.d.ts +14 -0
- package/dist/plugins/manifest.d.ts.map +1 -0
- package/dist/plugins/manifest.js +75 -0
- package/dist/plugins/manifest.js.map +1 -0
- package/dist/plugins/package-link.d.ts +3 -0
- package/dist/plugins/package-link.d.ts.map +1 -0
- package/dist/plugins/package-link.js +77 -0
- package/dist/plugins/package-link.js.map +1 -0
- package/dist/plugins/paths.d.ts +10 -0
- package/dist/plugins/paths.d.ts.map +1 -0
- package/dist/plugins/paths.js +26 -0
- package/dist/plugins/paths.js.map +1 -0
- package/dist/plugins/registry.d.ts +8 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +96 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/scaffold.d.ts +10 -0
- package/dist/plugins/scaffold.d.ts.map +1 -0
- package/dist/plugins/scaffold.js +152 -0
- package/dist/plugins/scaffold.js.map +1 -0
- package/dist/plugins/types.d.ts +45 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +1 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/processors/plan-rejection-abort.d.ts +12 -0
- package/dist/processors/plan-rejection-abort.d.ts.map +1 -0
- package/dist/processors/plan-rejection-abort.js +53 -0
- package/dist/processors/plan-rejection-abort.js.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts +40 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.js +79 -0
- package/dist/providers/amazon-bedrock-gateway.js.map +1 -0
- package/dist/providers/amazon-bedrock.d.ts +28 -0
- package/dist/providers/amazon-bedrock.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock.js +62 -0
- package/dist/providers/amazon-bedrock.js.map +1 -0
- package/dist/providers/claude-max.d.ts +50 -0
- package/dist/providers/claude-max.d.ts.map +1 -0
- package/dist/providers/claude-max.js +151 -0
- package/dist/providers/claude-max.js.map +1 -0
- package/dist/providers/github-copilot.d.ts +58 -0
- package/dist/providers/github-copilot.d.ts.map +1 -0
- package/dist/providers/github-copilot.js +263 -0
- package/dist/providers/github-copilot.js.map +1 -0
- package/dist/providers/openai-codex.d.ts +70 -0
- package/dist/providers/openai-codex.d.ts.map +1 -0
- package/dist/providers/openai-codex.js +291 -0
- package/dist/providers/openai-codex.js.map +1 -0
- package/dist/schema.d.ts +167 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +92 -0
- package/dist/schema.js.map +1 -0
- package/dist/theme-palette.d.ts +17 -0
- package/dist/theme-palette.d.ts.map +1 -0
- package/dist/theme-palette.js +17 -0
- package/dist/theme-palette.js.map +1 -0
- package/dist/tool-names.d.ts +73 -0
- package/dist/tool-names.d.ts.map +1 -0
- package/dist/tool-names.js +43 -0
- package/dist/tool-names.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +9 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/request-sandbox-access.d.ts +6 -0
- package/dist/tools/request-sandbox-access.d.ts.map +1 -0
- package/dist/tools/request-sandbox-access.js +88 -0
- package/dist/tools/request-sandbox-access.js.map +1 -0
- package/dist/tools/utils.d.ts +20 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +22 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools/web-search.d.ts +35 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +65 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/utils/binaries.d.ts +7 -0
- package/dist/utils/binaries.d.ts.map +1 -0
- package/dist/utils/binaries.js +74 -0
- package/dist/utils/binaries.js.map +1 -0
- package/dist/utils/debug-log.d.ts +12 -0
- package/dist/utils/debug-log.d.ts.map +1 -0
- package/dist/utils/debug-log.js +55 -0
- package/dist/utils/debug-log.js.map +1 -0
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +207 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/gateway-sync.d.ts +26 -0
- package/dist/utils/gateway-sync.d.ts.map +1 -0
- package/dist/utils/gateway-sync.js +49 -0
- package/dist/utils/gateway-sync.js.map +1 -0
- package/dist/utils/path-security.d.ts +2 -0
- package/dist/utils/path-security.d.ts.map +1 -0
- package/dist/utils/path-security.js +9 -0
- package/dist/utils/path-security.js.map +1 -0
- package/dist/utils/plan-diff.d.ts +25 -0
- package/dist/utils/plan-diff.d.ts.map +1 -0
- package/dist/utils/plan-diff.js +43 -0
- package/dist/utils/plan-diff.js.map +1 -0
- package/dist/utils/plans.d.ts +56 -0
- package/dist/utils/plans.d.ts.map +1 -0
- package/dist/utils/plans.js +99 -0
- package/dist/utils/plans.js.map +1 -0
- package/dist/utils/project.d.ts +160 -0
- package/dist/utils/project.d.ts.map +1 -0
- package/dist/utils/project.js +302 -0
- package/dist/utils/project.js.map +1 -0
- package/dist/utils/signals-pubsub.d.ts +41 -0
- package/dist/utils/signals-pubsub.d.ts.map +1 -0
- package/dist/utils/signals-pubsub.js +104 -0
- package/dist/utils/signals-pubsub.js.map +1 -0
- package/dist/utils/slash-command-loader.d.ts +52 -0
- package/dist/utils/slash-command-loader.d.ts.map +1 -0
- package/dist/utils/slash-command-loader.js +177 -0
- package/dist/utils/slash-command-loader.js.map +1 -0
- package/dist/utils/slash-command-processor.d.ts +14 -0
- package/dist/utils/slash-command-processor.d.ts.map +1 -0
- package/dist/utils/slash-command-processor.js +96 -0
- package/dist/utils/slash-command-processor.js.map +1 -0
- package/dist/utils/stdin-pipe.d.ts +33 -0
- package/dist/utils/stdin-pipe.d.ts.map +1 -0
- package/dist/utils/stdin-pipe.js +72 -0
- package/dist/utils/stdin-pipe.js.map +1 -0
- package/dist/utils/storage-factory.d.ts +50 -0
- package/dist/utils/storage-factory.d.ts.map +1 -0
- package/dist/utils/storage-factory.js +101 -0
- package/dist/utils/storage-factory.js.map +1 -0
- package/dist/utils/storage-maintenance.d.ts +103 -0
- package/dist/utils/storage-maintenance.d.ts.map +1 -0
- package/dist/utils/storage-maintenance.js +236 -0
- package/dist/utils/storage-maintenance.js.map +1 -0
- package/dist/utils/thread-lock.d.ts +26 -0
- package/dist/utils/thread-lock.d.ts.map +1 -0
- package/dist/utils/thread-lock.js +108 -0
- package/dist/utils/thread-lock.js.map +1 -0
- package/dist/utils/token-estimator.d.ts +3 -0
- package/dist/utils/token-estimator.d.ts.map +1 -0
- package/dist/utils/token-estimator.js +21 -0
- package/dist/utils/token-estimator.js.map +1 -0
- package/dist/utils/update-check.d.ts +52 -0
- package/dist/utils/update-check.d.ts.map +1 -0
- package/dist/utils/update-check.js +177 -0
- package/dist/utils/update-check.js.map +1 -0
- package/dist/voice/stt-registry.d.ts +64 -0
- package/dist/voice/stt-registry.d.ts.map +1 -0
- package/dist/voice/stt-registry.js +126 -0
- package/dist/voice/stt-registry.js.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
import { createAnthropic } from "@ai-sdk/anthropic";
|
|
2
|
+
import { createOpenAI } from "@ai-sdk/openai";
|
|
3
|
+
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
|
|
4
|
+
import {
|
|
5
|
+
GATEWAY_AUTH_HEADER,
|
|
6
|
+
MastraGateway,
|
|
7
|
+
MastraModelGateway,
|
|
8
|
+
ModelRouterLanguageModel,
|
|
9
|
+
PROVIDER_REGISTRY
|
|
10
|
+
} from "@mastra/core/llm";
|
|
11
|
+
import { wrapLanguageModel } from "ai";
|
|
12
|
+
import { AuthStorage } from "../auth/storage.js";
|
|
13
|
+
import { getCustomProviderId, loadSettings, MASTRA_GATEWAY_PROVIDER } from "../onboarding/settings.js";
|
|
14
|
+
import {
|
|
15
|
+
buildAnthropicOAuthFetch,
|
|
16
|
+
claudeCodeMiddleware,
|
|
17
|
+
opencodeClaudeMaxProvider,
|
|
18
|
+
promptCacheMiddleware
|
|
19
|
+
} from "../providers/claude-max.js";
|
|
20
|
+
import { getCopilotModelCatalog, githubCopilotProvider } from "../providers/github-copilot.js";
|
|
21
|
+
import {
|
|
22
|
+
buildOpenAICodexOAuthFetch,
|
|
23
|
+
createCodexMiddleware,
|
|
24
|
+
getEffectiveThinkingLevel,
|
|
25
|
+
openaiCodexProvider,
|
|
26
|
+
THINKING_LEVEL_TO_REASONING_EFFORT
|
|
27
|
+
} from "../providers/openai-codex.js";
|
|
28
|
+
const OPENAI_PREFIX = "openai/";
|
|
29
|
+
const MASTRA_GATEWAY_PREFIX = "mastra/";
|
|
30
|
+
const MASTRACODE_GATEWAY_ID = "mastracode";
|
|
31
|
+
const CODEX_OPENAI_MODEL_REMAPS = {
|
|
32
|
+
"gpt-5.3": "gpt-5.3-codex",
|
|
33
|
+
"gpt-5.2": "gpt-5.2-codex",
|
|
34
|
+
"gpt-5.1": "gpt-5.1-codex",
|
|
35
|
+
"gpt-5.1-mini": "gpt-5.1-codex-mini",
|
|
36
|
+
"gpt-5": "gpt-5-codex"
|
|
37
|
+
};
|
|
38
|
+
const authStorage = new AuthStorage();
|
|
39
|
+
function reloadAuthStorage() {
|
|
40
|
+
authStorage.reload();
|
|
41
|
+
}
|
|
42
|
+
function stripMastraGatewayPrefix(modelId) {
|
|
43
|
+
return modelId.startsWith(MASTRA_GATEWAY_PREFIX) ? modelId.substring(MASTRA_GATEWAY_PREFIX.length) : modelId;
|
|
44
|
+
}
|
|
45
|
+
function normalizeAnthropicModelId(modelId) {
|
|
46
|
+
return modelId.replace(/\.(?=\d)/g, "-");
|
|
47
|
+
}
|
|
48
|
+
function remapOpenAIModelForCodexOAuth(modelId) {
|
|
49
|
+
const normalizedModelId = stripMastraGatewayPrefix(modelId);
|
|
50
|
+
if (!normalizedModelId.startsWith(OPENAI_PREFIX)) {
|
|
51
|
+
return modelId;
|
|
52
|
+
}
|
|
53
|
+
const openaiModelId = normalizedModelId.substring(OPENAI_PREFIX.length);
|
|
54
|
+
if (openaiModelId.includes("-codex")) {
|
|
55
|
+
return modelId;
|
|
56
|
+
}
|
|
57
|
+
const codexModelId = CODEX_OPENAI_MODEL_REMAPS[openaiModelId];
|
|
58
|
+
if (!codexModelId) {
|
|
59
|
+
return modelId;
|
|
60
|
+
}
|
|
61
|
+
const remappedModelId = `${OPENAI_PREFIX}${codexModelId}`;
|
|
62
|
+
return modelId.startsWith(MASTRA_GATEWAY_PREFIX) ? `${MASTRA_GATEWAY_PREFIX}${remappedModelId}` : remappedModelId;
|
|
63
|
+
}
|
|
64
|
+
function getAnthropicApiKey() {
|
|
65
|
+
const storedCred = authStorage.get("anthropic");
|
|
66
|
+
if (storedCred?.type === "api_key" && storedCred.key.trim().length > 0) {
|
|
67
|
+
return storedCred.key.trim();
|
|
68
|
+
}
|
|
69
|
+
const dedicatedKey = authStorage.getStoredApiKey("anthropic")?.trim();
|
|
70
|
+
if (dedicatedKey) return dedicatedKey;
|
|
71
|
+
return process.env.ANTHROPIC_API_KEY?.trim() || void 0;
|
|
72
|
+
}
|
|
73
|
+
function getOpenAIApiKey() {
|
|
74
|
+
const storedCred = authStorage.get("openai-codex");
|
|
75
|
+
if (storedCred?.type === "api_key" && storedCred.key.trim().length > 0) {
|
|
76
|
+
return storedCred.key.trim();
|
|
77
|
+
}
|
|
78
|
+
const dedicatedKey = authStorage.getStoredApiKey("openai-codex")?.trim();
|
|
79
|
+
if (dedicatedKey) return dedicatedKey;
|
|
80
|
+
return process.env.OPENAI_API_KEY?.trim() || void 0;
|
|
81
|
+
}
|
|
82
|
+
function anthropicApiKeyProvider(modelId, apiKey, headers) {
|
|
83
|
+
const anthropic = createAnthropic({ apiKey, headers });
|
|
84
|
+
return wrapLanguageModel({
|
|
85
|
+
model: anthropic(modelId),
|
|
86
|
+
middleware: [promptCacheMiddleware]
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
function openaiApiKeyProvider(modelId, apiKey, headers) {
|
|
90
|
+
const openai = createOpenAI({ apiKey, baseURL: process.env.OPENAI_BASE_URL, headers });
|
|
91
|
+
return wrapLanguageModel({
|
|
92
|
+
model: openai.responses(modelId),
|
|
93
|
+
middleware: []
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
function getAuthProviderId(providerId) {
|
|
97
|
+
return providerId === "openai" ? "openai-codex" : providerId;
|
|
98
|
+
}
|
|
99
|
+
function getProviderAuthKey(providerId) {
|
|
100
|
+
const authProviderId = getAuthProviderId(providerId);
|
|
101
|
+
const storedCred = authStorage.get(authProviderId);
|
|
102
|
+
if (storedCred?.type === "api_key" && storedCred.key.trim().length > 0) {
|
|
103
|
+
return storedCred.key.trim();
|
|
104
|
+
}
|
|
105
|
+
return authStorage.getStoredApiKey(authProviderId)?.trim() || void 0;
|
|
106
|
+
}
|
|
107
|
+
function resolveAuth(request, mastraGatewayApiKey) {
|
|
108
|
+
return MastraCodeGateway.resolveProviderAuth(request, mastraGatewayApiKey);
|
|
109
|
+
}
|
|
110
|
+
function getGatewayProviderKey(gatewayId, providerId) {
|
|
111
|
+
if (gatewayId === "models.dev") return providerId;
|
|
112
|
+
return providerId === gatewayId ? gatewayId : `${gatewayId}/${providerId}`;
|
|
113
|
+
}
|
|
114
|
+
function parseGatewayRouterId(routerId, gateway) {
|
|
115
|
+
const [firstPart = "", secondPart = "", ...restParts] = routerId.split("/");
|
|
116
|
+
const gatewayId = gateway.id;
|
|
117
|
+
if (firstPart === gatewayId && secondPart) {
|
|
118
|
+
return {
|
|
119
|
+
gatewayId,
|
|
120
|
+
providerId: secondPart,
|
|
121
|
+
modelId: restParts.join("/")
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
gatewayId,
|
|
126
|
+
providerId: firstPart,
|
|
127
|
+
modelId: [secondPart, ...restParts].filter(Boolean).join("/")
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
function hasResolvedAuth(auth) {
|
|
131
|
+
if (!auth) return false;
|
|
132
|
+
if (auth.apiKey || auth.bearerToken) return true;
|
|
133
|
+
return auth.headers ? Object.keys(auth.headers).length > 0 : false;
|
|
134
|
+
}
|
|
135
|
+
async function resolveGatewayProviderAuth(gateway, routerId) {
|
|
136
|
+
if (!gateway.resolveAuth) return void 0;
|
|
137
|
+
const parsed = parseGatewayRouterId(routerId, gateway);
|
|
138
|
+
try {
|
|
139
|
+
const result = await gateway.resolveAuth({
|
|
140
|
+
gatewayId: parsed.gatewayId,
|
|
141
|
+
providerId: parsed.providerId,
|
|
142
|
+
modelId: parsed.modelId,
|
|
143
|
+
routerId
|
|
144
|
+
});
|
|
145
|
+
return hasResolvedAuth(result) ? result : void 0;
|
|
146
|
+
} catch {
|
|
147
|
+
return void 0;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async function getMastraCodeProviderConfigs(gateway) {
|
|
151
|
+
const providers = { ...PROVIDER_REGISTRY };
|
|
152
|
+
try {
|
|
153
|
+
const gatewayProviders = await gateway.fetchProviders();
|
|
154
|
+
for (const [providerId, config] of Object.entries(gatewayProviders)) {
|
|
155
|
+
providers[getGatewayProviderKey(gateway.id, providerId)] = {
|
|
156
|
+
...config,
|
|
157
|
+
gateway: gateway.id
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
} catch (error) {
|
|
161
|
+
console.warn(`Failed to load providers from gateway ${gateway.id}:`, error);
|
|
162
|
+
}
|
|
163
|
+
return providers;
|
|
164
|
+
}
|
|
165
|
+
function getApiKeyEnvVar(providerConfig) {
|
|
166
|
+
const envVars = providerConfig?.apiKeyEnvVar;
|
|
167
|
+
return Array.isArray(envVars) ? envVars[0] : envVars;
|
|
168
|
+
}
|
|
169
|
+
class MastraCodeGateway extends MastraModelGateway {
|
|
170
|
+
id = MASTRACODE_GATEWAY_ID;
|
|
171
|
+
name = "MastraCode Gateway";
|
|
172
|
+
#mastraGateway;
|
|
173
|
+
#mastraGatewayBaseUrl;
|
|
174
|
+
#mastraGatewayApiKey;
|
|
175
|
+
#routeThroughMastraGateway;
|
|
176
|
+
#thinkingLevel;
|
|
177
|
+
#customProviders;
|
|
178
|
+
#settingsPath;
|
|
179
|
+
constructor({
|
|
180
|
+
mastraGatewayBaseUrl,
|
|
181
|
+
mastraGatewayApiKey,
|
|
182
|
+
routeThroughMastraGateway,
|
|
183
|
+
thinkingLevel,
|
|
184
|
+
customProviders,
|
|
185
|
+
settingsPath
|
|
186
|
+
}) {
|
|
187
|
+
super();
|
|
188
|
+
this.#mastraGateway = new MastraGateway({ baseUrl: mastraGatewayBaseUrl });
|
|
189
|
+
this.#mastraGatewayBaseUrl = mastraGatewayBaseUrl;
|
|
190
|
+
this.#mastraGatewayApiKey = mastraGatewayApiKey;
|
|
191
|
+
this.#routeThroughMastraGateway = routeThroughMastraGateway;
|
|
192
|
+
this.#thinkingLevel = thinkingLevel;
|
|
193
|
+
this.#customProviders = customProviders;
|
|
194
|
+
this.#settingsPath = settingsPath;
|
|
195
|
+
}
|
|
196
|
+
static getMastraGatewayApiKey() {
|
|
197
|
+
return authStorage.getStoredApiKey(MASTRA_GATEWAY_PROVIDER) ?? process.env["MASTRA_GATEWAY_API_KEY"];
|
|
198
|
+
}
|
|
199
|
+
/** @deprecated Renamed to {@link MastraCodeGateway.getMastraGatewayApiKey}. */
|
|
200
|
+
static getMemoryGatewayApiKey() {
|
|
201
|
+
return MastraCodeGateway.getMastraGatewayApiKey();
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Claim an unprefixed model id (e.g. a bare `anthropic/...`) when this gateway
|
|
205
|
+
* can authenticate it via OAuth or a stored/env credential. This lets the
|
|
206
|
+
* shared gateway router select MastraCode for auth resolution, so the status
|
|
207
|
+
* bar and `/api-keys` reflect OAuth logins instead of only checking env vars.
|
|
208
|
+
*/
|
|
209
|
+
handlesModel(modelId) {
|
|
210
|
+
const parsed = parseGatewayRouterId(modelId, this);
|
|
211
|
+
if (!parsed.providerId || !parsed.modelId) return false;
|
|
212
|
+
if (this.#routeThroughMastraGateway && this.#mastraGatewayApiKey) return true;
|
|
213
|
+
const customProvider = this.#getCustomProviders().find(
|
|
214
|
+
(provider) => parsed.providerId === getCustomProviderId(provider.name)
|
|
215
|
+
);
|
|
216
|
+
if (customProvider?.apiKey) return true;
|
|
217
|
+
return hasResolvedAuth(
|
|
218
|
+
MastraCodeGateway.resolveProviderAuth({
|
|
219
|
+
gatewayId: this.id,
|
|
220
|
+
providerId: parsed.providerId,
|
|
221
|
+
modelId: parsed.modelId,
|
|
222
|
+
routerId: modelId
|
|
223
|
+
})
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
static resolveProviderAuth(request, mastraGatewayApiKey) {
|
|
227
|
+
if (request.gatewayId === "mastra" && mastraGatewayApiKey) {
|
|
228
|
+
return { apiKey: mastraGatewayApiKey, source: "gateway" };
|
|
229
|
+
}
|
|
230
|
+
const storedCred = authStorage.get(getAuthProviderId(request.providerId));
|
|
231
|
+
if (storedCred?.type === "oauth") {
|
|
232
|
+
return { bearerToken: "oauth", source: "gateway" };
|
|
233
|
+
}
|
|
234
|
+
const apiKey = getProviderAuthKey(request.providerId);
|
|
235
|
+
return apiKey ? { apiKey, source: "gateway" } : void 0;
|
|
236
|
+
}
|
|
237
|
+
static createModelCatalogProvider(gateway) {
|
|
238
|
+
return async () => {
|
|
239
|
+
const registry = await getMastraCodeProviderConfigs(gateway);
|
|
240
|
+
const models = [];
|
|
241
|
+
for (const [provider, providerConfig] of Object.entries(registry)) {
|
|
242
|
+
const apiKeyEnvVar = getApiKeyEnvVar(providerConfig);
|
|
243
|
+
const hasEnvKey = apiKeyEnvVar ? Boolean(process.env[apiKeyEnvVar]) : false;
|
|
244
|
+
const modelNames = providerConfig.models;
|
|
245
|
+
if (!Array.isArray(modelNames)) continue;
|
|
246
|
+
const gatewayAuth = modelNames[0] ? await resolveGatewayProviderAuth(gateway, `${provider}/${modelNames[0]}`) : void 0;
|
|
247
|
+
for (const modelName of modelNames) {
|
|
248
|
+
const id = `${provider}/${modelName}`;
|
|
249
|
+
models.push({
|
|
250
|
+
id,
|
|
251
|
+
provider,
|
|
252
|
+
modelName,
|
|
253
|
+
hasApiKey: hasEnvKey || Boolean(gatewayAuth),
|
|
254
|
+
apiKeyEnvVar: apiKeyEnvVar || void 0
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return models;
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
createModelCatalogProvider() {
|
|
262
|
+
return MastraCodeGateway.createModelCatalogProvider(this);
|
|
263
|
+
}
|
|
264
|
+
#getCustomProviders() {
|
|
265
|
+
return this.#customProviders ?? loadSettings(this.#settingsPath).customProviders;
|
|
266
|
+
}
|
|
267
|
+
async fetchProviders() {
|
|
268
|
+
const providers = {};
|
|
269
|
+
for (const provider of this.#getCustomProviders()) {
|
|
270
|
+
const models = provider.models ?? [];
|
|
271
|
+
if (!models.length) continue;
|
|
272
|
+
providers[getCustomProviderId(provider.name)] = {
|
|
273
|
+
name: provider.name,
|
|
274
|
+
url: provider.url,
|
|
275
|
+
apiKeyEnvVar: "",
|
|
276
|
+
apiKeyHeader: "Authorization",
|
|
277
|
+
gateway: this.id,
|
|
278
|
+
models
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
try {
|
|
282
|
+
const copilotModels = await getCopilotModelCatalog({ authStorage });
|
|
283
|
+
providers["github-copilot"] = {
|
|
284
|
+
name: "GitHub Copilot",
|
|
285
|
+
apiKeyEnvVar: "",
|
|
286
|
+
apiKeyHeader: "Authorization",
|
|
287
|
+
gateway: this.id,
|
|
288
|
+
models: copilotModels.map((model) => model.id)
|
|
289
|
+
};
|
|
290
|
+
} catch (error) {
|
|
291
|
+
console.warn("Failed to load GitHub Copilot model catalog:", error);
|
|
292
|
+
}
|
|
293
|
+
return providers;
|
|
294
|
+
}
|
|
295
|
+
buildUrl(modelId) {
|
|
296
|
+
return this.#routeThroughMastraGateway ? this.#mastraGateway.buildUrl(modelId) : modelId;
|
|
297
|
+
}
|
|
298
|
+
async getApiKey(modelId) {
|
|
299
|
+
const providerId = stripMastraGatewayPrefix(modelId).split("/", 1)[0];
|
|
300
|
+
if (this.#routeThroughMastraGateway) return this.#mastraGatewayApiKey ?? "";
|
|
301
|
+
return providerId ? getProviderAuthKey(providerId) ?? "" : "";
|
|
302
|
+
}
|
|
303
|
+
resolveAuth(request) {
|
|
304
|
+
if (this.#routeThroughMastraGateway && this.#mastraGatewayApiKey) {
|
|
305
|
+
return { apiKey: this.#mastraGatewayApiKey, source: "gateway" };
|
|
306
|
+
}
|
|
307
|
+
const customProvider = this.#getCustomProviders().find(
|
|
308
|
+
(provider) => request.providerId === getCustomProviderId(provider.name)
|
|
309
|
+
);
|
|
310
|
+
if (customProvider?.apiKey) {
|
|
311
|
+
return { apiKey: customProvider.apiKey, source: "gateway" };
|
|
312
|
+
}
|
|
313
|
+
return MastraCodeGateway.resolveProviderAuth(request);
|
|
314
|
+
}
|
|
315
|
+
resolveLanguageModel(args) {
|
|
316
|
+
const customProvider = this.#getCustomProviders().find(
|
|
317
|
+
(provider) => args.providerId === getCustomProviderId(provider.name)
|
|
318
|
+
);
|
|
319
|
+
if (customProvider) {
|
|
320
|
+
const provider = createOpenAICompatible({
|
|
321
|
+
name: args.providerId,
|
|
322
|
+
baseURL: customProvider.url,
|
|
323
|
+
apiKey: args.apiKey,
|
|
324
|
+
headers: args.headers
|
|
325
|
+
});
|
|
326
|
+
return provider.chatModel(args.modelId);
|
|
327
|
+
}
|
|
328
|
+
if (args.providerId === "github-copilot") {
|
|
329
|
+
return githubCopilotProvider(args.modelId, { headers: args.headers });
|
|
330
|
+
}
|
|
331
|
+
if (args.providerId === "moonshotai") {
|
|
332
|
+
if (!process.env.MOONSHOT_AI_API_KEY) {
|
|
333
|
+
throw new Error(`Need MOONSHOT_AI_API_KEY`);
|
|
334
|
+
}
|
|
335
|
+
return createAnthropic({
|
|
336
|
+
apiKey: process.env.MOONSHOT_AI_API_KEY,
|
|
337
|
+
baseURL: "https://api.moonshot.ai/anthropic/v1",
|
|
338
|
+
name: "moonshotai.anthropicv1",
|
|
339
|
+
headers: args.headers
|
|
340
|
+
})(args.modelId);
|
|
341
|
+
}
|
|
342
|
+
if (args.providerId === "anthropic") {
|
|
343
|
+
return this.#resolveAnthropicModel(args);
|
|
344
|
+
}
|
|
345
|
+
if (args.providerId === "openai") {
|
|
346
|
+
const openaiModel = this.#resolveOpenAIModel(args);
|
|
347
|
+
if (openaiModel) return openaiModel;
|
|
348
|
+
}
|
|
349
|
+
if (this.#routeThroughMastraGateway) {
|
|
350
|
+
return this.#mastraGateway.resolveLanguageModel(args);
|
|
351
|
+
}
|
|
352
|
+
return new ModelRouterLanguageModel({
|
|
353
|
+
id: `${args.providerId}/${args.modelId}`,
|
|
354
|
+
headers: args.headers
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
#resolveAnthropicModel(args) {
|
|
358
|
+
const bareModelId = normalizeAnthropicModelId(args.modelId);
|
|
359
|
+
const storedCred = authStorage.get("anthropic");
|
|
360
|
+
if (this.#routeThroughMastraGateway) {
|
|
361
|
+
if (storedCred?.type === "oauth") {
|
|
362
|
+
const anthropic = createAnthropic({
|
|
363
|
+
apiKey: "oauth-gateway-placeholder",
|
|
364
|
+
baseURL: `${this.#mastraGatewayBaseUrl}/v1`,
|
|
365
|
+
headers: {
|
|
366
|
+
[GATEWAY_AUTH_HEADER]: `Bearer ${args.apiKey}`,
|
|
367
|
+
...args.headers
|
|
368
|
+
},
|
|
369
|
+
fetch: buildAnthropicOAuthFetch({ authStorage })
|
|
370
|
+
});
|
|
371
|
+
return wrapLanguageModel({
|
|
372
|
+
model: anthropic(bareModelId),
|
|
373
|
+
middleware: [claudeCodeMiddleware, promptCacheMiddleware]
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
return this.#mastraGateway.resolveLanguageModel({ ...args, modelId: bareModelId });
|
|
377
|
+
}
|
|
378
|
+
if (storedCred?.type === "oauth") {
|
|
379
|
+
return opencodeClaudeMaxProvider(bareModelId, { headers: args.headers });
|
|
380
|
+
}
|
|
381
|
+
if (storedCred?.type === "api_key" && storedCred.key.trim().length > 0) {
|
|
382
|
+
return anthropicApiKeyProvider(
|
|
383
|
+
bareModelId,
|
|
384
|
+
storedCred.key.trim(),
|
|
385
|
+
args.headers
|
|
386
|
+
);
|
|
387
|
+
}
|
|
388
|
+
const apiKey = getAnthropicApiKey();
|
|
389
|
+
if (apiKey) {
|
|
390
|
+
return anthropicApiKeyProvider(bareModelId, apiKey, args.headers);
|
|
391
|
+
}
|
|
392
|
+
return opencodeClaudeMaxProvider(bareModelId, { headers: args.headers });
|
|
393
|
+
}
|
|
394
|
+
#resolveOpenAIModel(args) {
|
|
395
|
+
const storedCred = authStorage.get("openai-codex");
|
|
396
|
+
if (this.#routeThroughMastraGateway) {
|
|
397
|
+
if (storedCred?.type === "oauth") {
|
|
398
|
+
const resolvedModelId = remapOpenAIModelForCodexOAuth(`openai/${args.modelId}`);
|
|
399
|
+
const resolvedBareModelId = resolvedModelId.substring(OPENAI_PREFIX.length);
|
|
400
|
+
const requestedLevel = this.#thinkingLevel ?? "medium";
|
|
401
|
+
const effectiveLevel = getEffectiveThinkingLevel(resolvedBareModelId, requestedLevel);
|
|
402
|
+
const reasoningEffort = THINKING_LEVEL_TO_REASONING_EFFORT[effectiveLevel];
|
|
403
|
+
const middleware = createCodexMiddleware(reasoningEffort);
|
|
404
|
+
const openai = createOpenAI({
|
|
405
|
+
apiKey: "oauth-gateway-placeholder",
|
|
406
|
+
baseURL: `${this.#mastraGatewayBaseUrl}/v1`,
|
|
407
|
+
headers: {
|
|
408
|
+
[GATEWAY_AUTH_HEADER]: `Bearer ${args.apiKey}`,
|
|
409
|
+
...args.headers
|
|
410
|
+
},
|
|
411
|
+
fetch: buildOpenAICodexOAuthFetch({ authStorage, rewriteUrl: false })
|
|
412
|
+
});
|
|
413
|
+
return wrapLanguageModel({
|
|
414
|
+
model: openai.responses(resolvedBareModelId),
|
|
415
|
+
middleware: [middleware]
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
return this.#mastraGateway.resolveLanguageModel(args);
|
|
419
|
+
}
|
|
420
|
+
if (storedCred?.type === "oauth") {
|
|
421
|
+
const resolvedModelId = remapOpenAIModelForCodexOAuth(`openai/${args.modelId}`);
|
|
422
|
+
return openaiCodexProvider(resolvedModelId.substring(OPENAI_PREFIX.length), {
|
|
423
|
+
thinkingLevel: this.#thinkingLevel,
|
|
424
|
+
headers: args.headers
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
const apiKey = getOpenAIApiKey();
|
|
428
|
+
if (apiKey) {
|
|
429
|
+
return openaiApiKeyProvider(args.modelId, apiKey, args.headers);
|
|
430
|
+
}
|
|
431
|
+
return void 0;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
export {
|
|
435
|
+
MASTRACODE_GATEWAY_ID,
|
|
436
|
+
MASTRA_GATEWAY_PREFIX,
|
|
437
|
+
MastraCodeGateway,
|
|
438
|
+
OPENAI_PREFIX,
|
|
439
|
+
getAnthropicApiKey,
|
|
440
|
+
getOpenAIApiKey,
|
|
441
|
+
reloadAuthStorage,
|
|
442
|
+
remapOpenAIModelForCodexOAuth,
|
|
443
|
+
resolveAuth,
|
|
444
|
+
stripMastraGatewayPrefix
|
|
445
|
+
};
|
|
446
|
+
//# sourceMappingURL=mastracode-gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"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 { getCustomProviderId, loadSettings, MASTRA_GATEWAY_PROVIDER } from '../onboarding/settings.js';\nimport {\n buildAnthropicOAuthFetch,\n claudeCodeMiddleware,\n opencodeClaudeMaxProvider,\n promptCacheMiddleware,\n} from '../providers/claude-max.js';\nimport { getCopilotModelCatalog, githubCopilotProvider } from '../providers/github-copilot.js';\nimport {\n buildOpenAICodexOAuthFetch,\n createCodexMiddleware,\n getEffectiveThinkingLevel,\n openaiCodexProvider,\n THINKING_LEVEL_TO_REASONING_EFFORT,\n} from '../providers/openai-codex.js';\nimport type { ThinkingLevel } from '../providers/openai-codex.js';\n\nexport const OPENAI_PREFIX = 'openai/';\nexport const MASTRA_GATEWAY_PREFIX = 'mastra/';\nexport const MASTRACODE_GATEWAY_ID = 'mastracode';\n\nconst CODEX_OPENAI_MODEL_REMAPS: Record<string, string> = {\n 'gpt-5.3': 'gpt-5.3-codex',\n 'gpt-5.2': 'gpt-5.2-codex',\n 'gpt-5.1': 'gpt-5.1-codex',\n 'gpt-5.1-mini': 'gpt-5.1-codex-mini',\n 'gpt-5': 'gpt-5-codex',\n};\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 customProviders?: MastraCodeCustomProvider[];\n settingsPath?: string;\n};\n\nconst authStorage = new AuthStorage();\n\nexport function reloadAuthStorage() {\n authStorage.reload();\n}\n\nexport function stripMastraGatewayPrefix(modelId: string): string {\n return modelId.startsWith(MASTRA_GATEWAY_PREFIX) ? modelId.substring(MASTRA_GATEWAY_PREFIX.length) : modelId;\n}\n\nfunction normalizeAnthropicModelId(modelId: string): string {\n return modelId.replace(/\\.(?=\\d)/g, '-');\n}\n\nexport function remapOpenAIModelForCodexOAuth(modelId: string): string {\n const normalizedModelId = stripMastraGatewayPrefix(modelId);\n\n if (!normalizedModelId.startsWith(OPENAI_PREFIX)) {\n return modelId;\n }\n\n const openaiModelId = normalizedModelId.substring(OPENAI_PREFIX.length);\n\n if (openaiModelId.includes('-codex')) {\n return modelId;\n }\n\n const codexModelId = CODEX_OPENAI_MODEL_REMAPS[openaiModelId];\n if (!codexModelId) {\n return modelId;\n }\n\n const remappedModelId = `${OPENAI_PREFIX}${codexModelId}`;\n return modelId.startsWith(MASTRA_GATEWAY_PREFIX) ? `${MASTRA_GATEWAY_PREFIX}${remappedModelId}` : remappedModelId;\n}\n\n/**\n * Resolve the Anthropic API key.\n * Main slot ā dedicated apikey: slot ā env var.\n */\nexport function getAnthropicApiKey(): string | undefined {\n const storedCred = authStorage.get('anthropic');\n if (storedCred?.type === 'api_key' && storedCred.key.trim().length > 0) {\n return storedCred.key.trim();\n }\n const dedicatedKey = authStorage.getStoredApiKey('anthropic')?.trim();\n if (dedicatedKey) return dedicatedKey;\n return 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(): string | undefined {\n const storedCred = authStorage.get('openai-codex');\n if (storedCred?.type === 'api_key' && storedCred.key.trim().length > 0) {\n return storedCred.key.trim();\n }\n const dedicatedKey = authStorage.getStoredApiKey('openai-codex')?.trim();\n if (dedicatedKey) return dedicatedKey;\n return process.env.OPENAI_API_KEY?.trim() || undefined;\n}\n\nfunction anthropicApiKeyProvider(modelId: string, apiKey: string, headers?: ModelRequestHeaders) {\n const anthropic = createAnthropic({ apiKey, headers });\n return wrapLanguageModel({\n model: anthropic(modelId),\n middleware: [promptCacheMiddleware],\n });\n}\n\nfunction openaiApiKeyProvider(modelId: string, apiKey: string, headers?: ModelRequestHeaders) {\n const openai = createOpenAI({ apiKey, baseURL: process.env.OPENAI_BASE_URL, headers });\n return wrapLanguageModel({\n model: openai.responses(modelId),\n middleware: [],\n });\n}\n\nfunction getAuthProviderId(providerId: string): string {\n return providerId === 'openai' ? 'openai-codex' : providerId;\n}\n\nfunction getProviderAuthKey(providerId: string): string | undefined {\n const authProviderId = getAuthProviderId(providerId);\n const storedCred = authStorage.get(authProviderId);\n if (storedCred?.type === 'api_key' && storedCred.key.trim().length > 0) {\n return storedCred.key.trim();\n }\n return authStorage.getStoredApiKey(authProviderId)?.trim() || undefined;\n}\n\nexport function resolveAuth(request: GatewayAuthRequest, mastraGatewayApiKey?: string): GatewayAuthResult | undefined {\n return MastraCodeGateway.resolveProviderAuth(request, mastraGatewayApiKey);\n}\n\nfunction getGatewayProviderKey(gatewayId: string, providerId: string): string {\n if (gatewayId === 'models.dev') return providerId;\n return providerId === gatewayId ? gatewayId : `${gatewayId}/${providerId}`;\n}\n\nfunction parseGatewayRouterId(\n routerId: string,\n gateway: MastraModelGatewayInterface,\n): { gatewayId: string; providerId: string; modelId: string } {\n const [firstPart = '', secondPart = '', ...restParts] = routerId.split('/');\n const gatewayId = gateway.id;\n\n if (firstPart === gatewayId && secondPart) {\n return {\n gatewayId,\n providerId: secondPart,\n modelId: restParts.join('/'),\n };\n }\n\n return {\n gatewayId,\n providerId: firstPart,\n modelId: [secondPart, ...restParts].filter(Boolean).join('/'),\n };\n}\n\nfunction hasResolvedAuth(auth: GatewayAuthResult | undefined): boolean {\n if (!auth) return false;\n if (auth.apiKey || auth.bearerToken) return true;\n return auth.headers ? Object.keys(auth.headers).length > 0 : false;\n}\n\nasync function resolveGatewayProviderAuth(\n gateway: MastraModelGatewayInterface,\n routerId: string,\n): Promise<GatewayAuthResult | undefined> {\n if (!gateway.resolveAuth) return undefined;\n\n const parsed = parseGatewayRouterId(routerId, gateway);\n try {\n const result = await gateway.resolveAuth({\n gatewayId: parsed.gatewayId,\n providerId: parsed.providerId,\n modelId: parsed.modelId,\n routerId,\n });\n return hasResolvedAuth(result) ? result : undefined;\n } catch {\n return undefined;\n }\n}\n\nasync function getMastraCodeProviderConfigs(\n gateway: MastraModelGatewayInterface,\n): Promise<Record<string, ProviderConfig>> {\n const providers: Record<string, ProviderConfig> = { ...(PROVIDER_REGISTRY as Record<string, ProviderConfig>) };\n\n try {\n const gatewayProviders = await gateway.fetchProviders();\n for (const [providerId, config] of Object.entries(gatewayProviders)) {\n providers[getGatewayProviderKey(gateway.id, providerId)] = {\n ...config,\n gateway: gateway.id,\n };\n }\n } catch (error) {\n console.warn(`Failed to load providers from gateway ${gateway.id}:`, error);\n }\n\n return providers;\n}\n\nfunction getApiKeyEnvVar(providerConfig: Pick<ProviderConfig, 'apiKeyEnvVar'> | undefined): string | undefined {\n const envVars = providerConfig?.apiKeyEnvVar;\n return Array.isArray(envVars) ? envVars[0] : envVars;\n}\n\nexport class MastraCodeGateway extends MastraModelGateway {\n readonly id = MASTRACODE_GATEWAY_ID;\n readonly name = 'MastraCode Gateway';\n\n readonly #mastraGateway: MastraGateway;\n readonly #mastraGatewayBaseUrl: string;\n readonly #mastraGatewayApiKey?: string;\n readonly #routeThroughMastraGateway: boolean;\n readonly #thinkingLevel?: ThinkingLevel;\n readonly #customProviders?: MastraCodeCustomProvider[];\n readonly #settingsPath?: string;\n\n constructor({\n mastraGatewayBaseUrl,\n mastraGatewayApiKey,\n routeThroughMastraGateway,\n thinkingLevel,\n customProviders,\n settingsPath,\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.#customProviders = customProviders;\n this.#settingsPath = settingsPath;\n }\n\n static getMastraGatewayApiKey(): string | undefined {\n return authStorage.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 gatewayId: this.id,\n providerId: parsed.providerId,\n modelId: parsed.modelId,\n routerId: modelId,\n }),\n );\n }\n\n static resolveProviderAuth(request: GatewayAuthRequest, mastraGatewayApiKey?: string): GatewayAuthResult | undefined {\n if (request.gatewayId === 'mastra' && mastraGatewayApiKey) {\n return { apiKey: mastraGatewayApiKey, source: 'gateway' };\n }\n\n const storedCred = authStorage.get(getAuthProviderId(request.providerId));\n if (storedCred?.type === 'oauth') {\n return { bearerToken: 'oauth', source: 'gateway' };\n }\n\n const apiKey = getProviderAuthKey(request.providerId);\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 return this.#customProviders ?? loadSettings(this.#settingsPath).customProviders;\n }\n\n async fetchProviders(): Promise<Record<string, ProviderConfig>> {\n const providers: Record<string, ProviderConfig> = {};\n for (const provider of this.#getCustomProviders()) {\n const models = provider.models ?? [];\n if (!models.length) continue;\n providers[getCustomProviderId(provider.name)] = {\n name: provider.name,\n url: provider.url,\n apiKeyEnvVar: '',\n apiKeyHeader: 'Authorization',\n gateway: this.id,\n models,\n };\n }\n\n try {\n const copilotModels = await getCopilotModelCatalog({ authStorage });\n providers['github-copilot'] = {\n name: 'GitHub Copilot',\n apiKeyEnvVar: '',\n apiKeyHeader: 'Authorization',\n gateway: this.id,\n models: copilotModels.map(model => model.id),\n };\n } catch (error) {\n console.warn('Failed to load GitHub Copilot model catalog:', error);\n }\n\n return providers;\n }\n\n buildUrl(modelId: string): string | undefined | Promise<string | undefined> {\n return this.#routeThroughMastraGateway ? this.#mastraGateway.buildUrl(modelId) : modelId;\n }\n\n async getApiKey(modelId: string): Promise<string> {\n const providerId = stripMastraGatewayPrefix(modelId).split('/', 1)[0];\n if (this.#routeThroughMastraGateway) return this.#mastraGatewayApiKey ?? '';\n return providerId ? (getProviderAuthKey(providerId) ?? '') : '';\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);\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 return provider.chatModel(args.modelId) as unknown as GatewayLanguageModel;\n }\n\n if (args.providerId === 'github-copilot') {\n return githubCopilotProvider(args.modelId, { headers: args.headers }) as unknown as GatewayLanguageModel;\n }\n\n if (args.providerId === 'moonshotai') {\n if (!process.env.MOONSHOT_AI_API_KEY) {\n throw new Error(`Need MOONSHOT_AI_API_KEY`);\n }\n return createAnthropic({\n apiKey: process.env.MOONSHOT_AI_API_KEY,\n baseURL: 'https://api.moonshot.ai/anthropic/v1',\n name: 'moonshotai.anthropicv1',\n headers: args.headers,\n })(args.modelId) as unknown as GatewayLanguageModel;\n }\n\n if (args.providerId === 'anthropic') {\n return this.#resolveAnthropicModel(args);\n }\n\n if (args.providerId === 'openai') {\n const openaiModel = this.#resolveOpenAIModel(args);\n if (openaiModel) return openaiModel;\n }\n\n if (this.#routeThroughMastraGateway) {\n return this.#mastraGateway.resolveLanguageModel(args) as GatewayLanguageModel;\n }\n\n return new ModelRouterLanguageModel({\n id: `${args.providerId}/${args.modelId}` as `${string}/${string}`,\n headers: args.headers,\n }) as unknown as GatewayLanguageModel;\n }\n\n #resolveAnthropicModel(args: {\n modelId: string;\n providerId: string;\n apiKey: string;\n headers?: Record<string, string>;\n transport?: any;\n responsesWebSocket?: any;\n }): GatewayLanguageModel {\n const bareModelId = normalizeAnthropicModelId(args.modelId);\n const storedCred = authStorage.get('anthropic');\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 }) as any,\n });\n\n return wrapLanguageModel({\n model: anthropic(bareModelId),\n middleware: [claudeCodeMiddleware, promptCacheMiddleware],\n }) as unknown as GatewayLanguageModel;\n }\n\n return this.#mastraGateway.resolveLanguageModel({ ...args, modelId: bareModelId }) as GatewayLanguageModel;\n }\n\n if (storedCred?.type === 'oauth') {\n return opencodeClaudeMaxProvider(bareModelId, { headers: args.headers }) 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 ) as unknown as GatewayLanguageModel;\n }\n\n const apiKey = getAnthropicApiKey();\n if (apiKey) {\n return anthropicApiKeyProvider(bareModelId, apiKey, args.headers) as unknown as GatewayLanguageModel;\n }\n\n // No stored credentials: use the OAuth-backed provider so the first request can trigger login.\n return opencodeClaudeMaxProvider(bareModelId, { headers: args.headers }) 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 = authStorage.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 requestedLevel: ThinkingLevel = this.#thinkingLevel ?? 'medium';\n const effectiveLevel = getEffectiveThinkingLevel(resolvedBareModelId, requestedLevel);\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, rewriteUrl: false }) as any,\n });\n\n return wrapLanguageModel({\n model: openai.responses(resolvedBareModelId),\n middleware: [middleware],\n }) as unknown as GatewayLanguageModel;\n }\n\n return this.#mastraGateway.resolveLanguageModel(args) as GatewayLanguageModel;\n }\n\n if (storedCred?.type === 'oauth') {\n const resolvedModelId = remapOpenAIModelForCodexOAuth(`openai/${args.modelId}`);\n return openaiCodexProvider(resolvedModelId.substring(OPENAI_PREFIX.length), {\n thinkingLevel: this.#thinkingLevel,\n headers: args.headers,\n }) as unknown as GatewayLanguageModel;\n }\n\n const apiKey = getOpenAIApiKey();\n if (apiKey) {\n return openaiApiKeyProvider(args.modelId, apiKey, args.headers) as unknown as GatewayLanguageModel;\n }\n\n return undefined;\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { RequestContext } from '@mastra/core/request-context';
|
|
2
|
+
import type { MastraCompositeStore } from '@mastra/core/storage';
|
|
3
|
+
import type { MastraVector } from '@mastra/core/vector';
|
|
4
|
+
import { Memory } from '@mastra/memory';
|
|
5
|
+
/**
|
|
6
|
+
* Dynamic memory factory function.
|
|
7
|
+
* Reads OM thresholds from controller state via requestContext.
|
|
8
|
+
* Model functions also read from requestContext (no mutable bridge needed).
|
|
9
|
+
*/
|
|
10
|
+
export declare function getDynamicMemory(storage: MastraCompositeStore, vector?: MastraVector): ({ requestContext }: {
|
|
11
|
+
requestContext: RequestContext;
|
|
12
|
+
}) => Memory;
|
|
13
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/agents/memory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAqExC;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,CAAC,EAAE,YAAY,IAC3E,oBAAoB;IAAE,cAAc,EAAE,cAAc,CAAA;CAAE,YA4D/D"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { fastembed } from "@mastra/fastembed";
|
|
2
|
+
import { Memory } from "@mastra/memory";
|
|
3
|
+
import { DEFAULT_OM_MODEL_ID, DEFAULT_OBS_THRESHOLD, DEFAULT_REF_THRESHOLD } from "../constants.js";
|
|
4
|
+
import { getOmScope } from "../utils/project.js";
|
|
5
|
+
import { resolveModel } from "./model.js";
|
|
6
|
+
let cachedMemory = null;
|
|
7
|
+
let cachedMemoryKey = null;
|
|
8
|
+
function getAgentControllerState(requestContext) {
|
|
9
|
+
const ctx = requestContext.get("controller");
|
|
10
|
+
return ctx?.getState();
|
|
11
|
+
}
|
|
12
|
+
function getObserverModel({ requestContext }) {
|
|
13
|
+
const state = getAgentControllerState(requestContext);
|
|
14
|
+
return resolveModel(state?.observerModelId ?? DEFAULT_OM_MODEL_ID, {
|
|
15
|
+
remapForCodexOAuth: true,
|
|
16
|
+
requestContext
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function getReflectorModel({ requestContext }) {
|
|
20
|
+
const state = getAgentControllerState(requestContext);
|
|
21
|
+
return resolveModel(state?.reflectorModelId ?? DEFAULT_OM_MODEL_ID, {
|
|
22
|
+
remapForCodexOAuth: true,
|
|
23
|
+
requestContext
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
const DYNAMIC_AGENTS_MD_INSTRUCTION = 'Messages wrapped in <system-reminder type="dynamic-agents-md" ...>...</system-reminder> are ephemeral project-context instructions injected from files on disk. Do NOT observe or extract information from these messages \u2014 they are reloaded automatically when needed and should not be stored in memory.';
|
|
27
|
+
const CAVEMAN_OM_INSTRUCTION = `Respond terse like smart caveman. All technical substance stay. Only fluff die.
|
|
28
|
+
|
|
29
|
+
Use full caveman compression style.
|
|
30
|
+
|
|
31
|
+
Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement a solution for"). Technical terms exact. Code blocks unchanged. Errors quoted exact. Leave out the words "agent" and "assistant" at the start of each observation line, it is assumed each line is referring to the assistant unless it specifically says it was about the user. Leave out parenthesis and other text characters like * that would not contribute to understanding the observations.
|
|
32
|
+
|
|
33
|
+
Pattern: \`[thing] [action] [reason]. [next step]\`
|
|
34
|
+
|
|
35
|
+
Not: "Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by..."
|
|
36
|
+
Yes: "Bug in auth middleware. Token expiry check use < not <=. Fix:"
|
|
37
|
+
|
|
38
|
+
Example 1
|
|
39
|
+
\u{1F534} 14:31 user asks why React component rerenders
|
|
40
|
+
\u{1F7E1} 14:32 saw inline object prop create new ref each render, cause rerender
|
|
41
|
+
\u2705 14:34 fixed render issue by wrap object in useMemo
|
|
42
|
+
|
|
43
|
+
Example 2
|
|
44
|
+
\u{1F7E1} 15:10 explained pool reuse DB connections, skip repeat handshake overhead
|
|
45
|
+
|
|
46
|
+
Don't say "Agent did x", say "did x". It will be assumed the agent did what was observed. The who should only be specified for the user or other third parties: "user asked x"
|
|
47
|
+
|
|
48
|
+
Drop caveman for: security warnings, irreversible action confirmations, multi-step sequences where fragment order risks misread, user asks to clarify or repeats question, and anything that requires remembering verbatim content. Resume caveman after clear part done`;
|
|
49
|
+
function getDynamicMemory(storage, vector) {
|
|
50
|
+
return ({ requestContext }) => {
|
|
51
|
+
const state = getAgentControllerState(requestContext);
|
|
52
|
+
const omScope = state?.omScope ?? getOmScope(state?.projectPath);
|
|
53
|
+
const obsThreshold = state?.observationThreshold ?? DEFAULT_OBS_THRESHOLD;
|
|
54
|
+
const refThreshold = state?.reflectionThreshold ?? DEFAULT_REF_THRESHOLD;
|
|
55
|
+
const caveman = state?.cavemanObservations ?? false;
|
|
56
|
+
const observerPreviousObservationTokens = 1e3;
|
|
57
|
+
const observeAttachments = state?.observeAttachments;
|
|
58
|
+
const cacheKey = `${obsThreshold}:${refThreshold}:${omScope}:${observerPreviousObservationTokens}:${caveman ? 1 : 0}:${observeAttachments}`;
|
|
59
|
+
if (cachedMemory && cachedMemoryKey === cacheKey) {
|
|
60
|
+
return cachedMemory;
|
|
61
|
+
}
|
|
62
|
+
const isResourceScope = omScope === "resource";
|
|
63
|
+
const observerInstruction = caveman ? `${DYNAMIC_AGENTS_MD_INSTRUCTION}
|
|
64
|
+
|
|
65
|
+
${CAVEMAN_OM_INSTRUCTION}` : DYNAMIC_AGENTS_MD_INSTRUCTION;
|
|
66
|
+
const reflectionInstruction = caveman ? CAVEMAN_OM_INSTRUCTION : void 0;
|
|
67
|
+
cachedMemory = new Memory({
|
|
68
|
+
storage,
|
|
69
|
+
vector: vector || false,
|
|
70
|
+
embedder: vector ? fastembed.small : void 0,
|
|
71
|
+
options: {
|
|
72
|
+
observationalMemory: {
|
|
73
|
+
enabled: true,
|
|
74
|
+
temporalMarkers: true,
|
|
75
|
+
retrieval: vector ? { vector: true } : true,
|
|
76
|
+
scope: omScope,
|
|
77
|
+
activateAfterIdle: "auto",
|
|
78
|
+
activateOnProviderChange: true,
|
|
79
|
+
observation: {
|
|
80
|
+
bufferTokens: isResourceScope ? false : 1 / 5,
|
|
81
|
+
bufferActivation: isResourceScope ? void 0 : 2e3,
|
|
82
|
+
model: getObserverModel,
|
|
83
|
+
messageTokens: obsThreshold,
|
|
84
|
+
blockAfter: 2,
|
|
85
|
+
previousObserverTokens: observerPreviousObservationTokens,
|
|
86
|
+
threadTitle: true,
|
|
87
|
+
instruction: observerInstruction,
|
|
88
|
+
observeAttachments
|
|
89
|
+
},
|
|
90
|
+
reflection: {
|
|
91
|
+
bufferActivation: isResourceScope ? void 0 : 1 / 2,
|
|
92
|
+
blockAfter: 1.1,
|
|
93
|
+
model: getReflectorModel,
|
|
94
|
+
observationTokens: refThreshold,
|
|
95
|
+
instruction: reflectionInstruction
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
cachedMemoryKey = cacheKey;
|
|
101
|
+
return cachedMemory;
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
export {
|
|
105
|
+
getDynamicMemory
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/agents/memory.ts"],"sourcesContent":["import type { AgentControllerRequestContext } from '@mastra/core/agent-controller';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { MastraCompositeStore } from '@mastra/core/storage';\nimport type { MastraVector } from '@mastra/core/vector';\nimport { fastembed } from '@mastra/fastembed';\nimport { Memory } from '@mastra/memory';\nimport { DEFAULT_OM_MODEL_ID, DEFAULT_OBS_THRESHOLD, DEFAULT_REF_THRESHOLD } from '../constants.js';\nimport type { MastraCodeState } from '../schema.js';\nimport { getOmScope } from '../utils/project.js';\nimport { resolveModel } from './model.js';\n\nlet cachedMemory: Memory | null = null;\nlet cachedMemoryKey: string | null = null;\n\n/**\n * Read controller state from requestContext.\n * Used by both the memory factory and the OM model functions.\n */\nfunction getAgentControllerState(requestContext: RequestContext): MastraCodeState | undefined {\n const ctx = requestContext.get('controller') as AgentControllerRequestContext<MastraCodeState> | undefined;\n return ctx?.getState() as MastraCodeState | undefined;\n}\n\n/**\n * Observer model function ā reads the current observer model ID from\n * controller state via requestContext (now propagated by OM's agent.generate).\n */\nfunction getObserverModel({ requestContext }: { requestContext: RequestContext }) {\n const state = getAgentControllerState(requestContext);\n return resolveModel(state?.observerModelId ?? DEFAULT_OM_MODEL_ID, {\n remapForCodexOAuth: true,\n requestContext,\n });\n}\n\n/**\n * Reflector model function ā reads the current reflector model ID from\n * controller state via requestContext (now propagated by OM's agent.generate).\n */\nfunction getReflectorModel({ requestContext }: { requestContext: RequestContext }) {\n const state = getAgentControllerState(requestContext);\n return resolveModel(state?.reflectorModelId ?? DEFAULT_OM_MODEL_ID, {\n remapForCodexOAuth: true,\n requestContext,\n });\n}\n\nconst DYNAMIC_AGENTS_MD_INSTRUCTION =\n 'Messages wrapped in <system-reminder type=\"dynamic-agents-md\" ...>...</system-reminder> are ephemeral project-context instructions injected from files on disk. Do NOT observe or extract information from these messages ā they are reloaded automatically when needed and should not be stored in memory.';\n\n// Derived from https://github.com/JuliusBrussee/caveman and adapted for OM use with fixed full-level compression.\nconst CAVEMAN_OM_INSTRUCTION = `Respond terse like smart caveman. All technical substance stay. Only fluff die.\n\nUse full caveman compression style.\n\nDrop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not \"implement a solution for\"). Technical terms exact. Code blocks unchanged. Errors quoted exact. Leave out the words \"agent\" and \"assistant\" at the start of each observation line, it is assumed each line is referring to the assistant unless it specifically says it was about the user. Leave out parenthesis and other text characters like * that would not contribute to understanding the observations.\n\nPattern: \\`[thing] [action] [reason]. [next step]\\`\n\nNot: \"Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by...\"\nYes: \"Bug in auth middleware. Token expiry check use < not <=. Fix:\"\n\nExample 1\nš“ 14:31 user asks why React component rerenders\nš” 14:32 saw inline object prop create new ref each render, cause rerender\nā
14:34 fixed render issue by wrap object in useMemo\n\nExample 2\nš” 15:10 explained pool reuse DB connections, skip repeat handshake overhead\n\nDon't say \"Agent did x\", say \"did x\". It will be assumed the agent did what was observed. The who should only be specified for the user or other third parties: \"user asked x\"\n\nDrop caveman for: security warnings, irreversible action confirmations, multi-step sequences where fragment order risks misread, user asks to clarify or repeats question, and anything that requires remembering verbatim content. Resume caveman after clear part done`;\n\n/**\n * Dynamic memory factory function.\n * Reads OM thresholds from controller state via requestContext.\n * Model functions also read from requestContext (no mutable bridge needed).\n */\nexport function getDynamicMemory(storage: MastraCompositeStore, vector?: MastraVector) {\n return ({ requestContext }: { requestContext: RequestContext }) => {\n const state = getAgentControllerState(requestContext);\n const omScope = state?.omScope ?? getOmScope(state?.projectPath);\n\n const obsThreshold = state?.observationThreshold ?? DEFAULT_OBS_THRESHOLD;\n const refThreshold = state?.reflectionThreshold ?? DEFAULT_REF_THRESHOLD;\n const caveman = state?.cavemanObservations ?? false;\n\n const observerPreviousObservationTokens = 1000;\n const observeAttachments = state?.observeAttachments;\n const cacheKey = `${obsThreshold}:${refThreshold}:${omScope}:${observerPreviousObservationTokens}:${caveman ? 1 : 0}:${observeAttachments}`;\n if (cachedMemory && cachedMemoryKey === cacheKey) {\n return cachedMemory;\n }\n\n // Async buffering is not supported with resource scope ā disable it\n const isResourceScope = omScope === 'resource';\n\n const observerInstruction = caveman\n ? `${DYNAMIC_AGENTS_MD_INSTRUCTION}\\n\\n${CAVEMAN_OM_INSTRUCTION}`\n : DYNAMIC_AGENTS_MD_INSTRUCTION;\n const reflectionInstruction = caveman ? CAVEMAN_OM_INSTRUCTION : undefined;\n\n cachedMemory = new Memory({\n storage,\n vector: vector || false,\n embedder: vector ? fastembed.small : undefined,\n options: {\n observationalMemory: {\n enabled: true,\n temporalMarkers: true,\n retrieval: vector ? { vector: true } : true,\n scope: omScope,\n activateAfterIdle: 'auto',\n activateOnProviderChange: true,\n observation: {\n bufferTokens: isResourceScope ? false : 1 / 5,\n bufferActivation: isResourceScope ? undefined : 2000,\n model: getObserverModel,\n messageTokens: obsThreshold,\n blockAfter: 2,\n previousObserverTokens: observerPreviousObservationTokens,\n threadTitle: true,\n instruction: observerInstruction,\n observeAttachments,\n },\n reflection: {\n bufferActivation: isResourceScope ? undefined : 1 / 2,\n blockAfter: 1.1,\n model: getReflectorModel,\n observationTokens: refThreshold,\n instruction: reflectionInstruction,\n },\n },\n },\n });\n cachedMemoryKey = cacheKey;\n\n return cachedMemory;\n };\n}\n"],"mappings":"AAIA,SAAS,iBAAiB;AAC1B,SAAS,cAAc;AACvB,SAAS,qBAAqB,uBAAuB,6BAA6B;AAElF,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAE7B,IAAI,eAA8B;AAClC,IAAI,kBAAiC;AAMrC,SAAS,wBAAwB,gBAA6D;AAC5F,QAAM,MAAM,eAAe,IAAI,YAAY;AAC3C,SAAO,KAAK,SAAS;AACvB;AAMA,SAAS,iBAAiB,EAAE,eAAe,GAAuC;AAChF,QAAM,QAAQ,wBAAwB,cAAc;AACpD,SAAO,aAAa,OAAO,mBAAmB,qBAAqB;AAAA,IACjE,oBAAoB;AAAA,IACpB;AAAA,EACF,CAAC;AACH;AAMA,SAAS,kBAAkB,EAAE,eAAe,GAAuC;AACjF,QAAM,QAAQ,wBAAwB,cAAc;AACpD,SAAO,aAAa,OAAO,oBAAoB,qBAAqB;AAAA,IAClE,oBAAoB;AAAA,IACpB;AAAA,EACF,CAAC;AACH;AAEA,MAAM,gCACJ;AAGF,MAAM,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4BxB,SAAS,iBAAiB,SAA+B,QAAuB;AACrF,SAAO,CAAC,EAAE,eAAe,MAA0C;AACjE,UAAM,QAAQ,wBAAwB,cAAc;AACpD,UAAM,UAAU,OAAO,WAAW,WAAW,OAAO,WAAW;AAE/D,UAAM,eAAe,OAAO,wBAAwB;AACpD,UAAM,eAAe,OAAO,uBAAuB;AACnD,UAAM,UAAU,OAAO,uBAAuB;AAE9C,UAAM,oCAAoC;AAC1C,UAAM,qBAAqB,OAAO;AAClC,UAAM,WAAW,GAAG,YAAY,IAAI,YAAY,IAAI,OAAO,IAAI,iCAAiC,IAAI,UAAU,IAAI,CAAC,IAAI,kBAAkB;AACzI,QAAI,gBAAgB,oBAAoB,UAAU;AAChD,aAAO;AAAA,IACT;AAGA,UAAM,kBAAkB,YAAY;AAEpC,UAAM,sBAAsB,UACxB,GAAG,6BAA6B;AAAA;AAAA,EAAO,sBAAsB,KAC7D;AACJ,UAAM,wBAAwB,UAAU,yBAAyB;AAEjE,mBAAe,IAAI,OAAO;AAAA,MACxB;AAAA,MACA,QAAQ,UAAU;AAAA,MAClB,UAAU,SAAS,UAAU,QAAQ;AAAA,MACrC,SAAS;AAAA,QACP,qBAAqB;AAAA,UACnB,SAAS;AAAA,UACT,iBAAiB;AAAA,UACjB,WAAW,SAAS,EAAE,QAAQ,KAAK,IAAI;AAAA,UACvC,OAAO;AAAA,UACP,mBAAmB;AAAA,UACnB,0BAA0B;AAAA,UAC1B,aAAa;AAAA,YACX,cAAc,kBAAkB,QAAQ,IAAI;AAAA,YAC5C,kBAAkB,kBAAkB,SAAY;AAAA,YAChD,OAAO;AAAA,YACP,eAAe;AAAA,YACf,YAAY;AAAA,YACZ,wBAAwB;AAAA,YACxB,aAAa;AAAA,YACb,aAAa;AAAA,YACb;AAAA,UACF;AAAA,UACA,YAAY;AAAA,YACV,kBAAkB,kBAAkB,SAAY,IAAI;AAAA,YACpD,YAAY;AAAA,YACZ,OAAO;AAAA,YACP,mBAAmB;AAAA,YACnB,aAAa;AAAA,UACf;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AACD,sBAAkB;AAElB,WAAO;AAAA,EACT;AACF;","names":[]}
|