@mastra/code-sdk 0.0.0-mastracode-cloud-20260706153555
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 +22 -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 +65 -0
- package/dist/agents/mastracode-gateway.d.ts.map +1 -0
- package/dist/agents/mastracode-gateway.js +442 -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 +18 -0
- package/dist/agents/tools.d.ts.map +1 -0
- package/dist/agents/tools.js +126 -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 +194 -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 +241 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +712 -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 +323 -0
- package/dist/onboarding/settings.d.ts.map +1 -0
- package/dist/onboarding/settings.js +594 -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/install.d.ts +20 -0
- package/dist/plugins/install.d.ts.map +1 -0
- package/dist/plugins/install.js +179 -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 +369 -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 +2 -0
- package/dist/plugins/package-link.d.ts.map +1 -0
- package/dist/plugins/package-link.js +20 -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/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 +161 -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 +48 -0
- package/dist/utils/slash-command-loader.d.ts.map +1 -0
- package/dist/utils/slash-command-loader.js +155 -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 +98 -0
- package/dist/utils/storage-factory.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 +92 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
const EMPTY_PLUGIN_REGISTRY = { plugins: {}, disabledPlugins: [] };
|
|
4
|
+
function loadPluginRegistry(registryPath) {
|
|
5
|
+
try {
|
|
6
|
+
if (!fs.existsSync(registryPath)) return { plugins: {}, disabledPlugins: [] };
|
|
7
|
+
const raw = JSON.parse(fs.readFileSync(registryPath, "utf-8"));
|
|
8
|
+
return validatePluginRegistry(raw);
|
|
9
|
+
} catch {
|
|
10
|
+
return { plugins: {}, disabledPlugins: [] };
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function savePluginRegistry(registryPath, registry) {
|
|
14
|
+
fs.mkdirSync(path.dirname(registryPath), { recursive: true });
|
|
15
|
+
fs.writeFileSync(registryPath, `${JSON.stringify(validatePluginRegistry(registry), null, 2)}
|
|
16
|
+
`);
|
|
17
|
+
}
|
|
18
|
+
function mergePluginRegistries(globalRegistry, projectRegistry) {
|
|
19
|
+
const merged = /* @__PURE__ */ new Map();
|
|
20
|
+
const disabledPlugins = /* @__PURE__ */ new Set([
|
|
21
|
+
...globalRegistry.disabledPlugins ?? [],
|
|
22
|
+
...projectRegistry.disabledPlugins ?? []
|
|
23
|
+
]);
|
|
24
|
+
for (const [id, record] of Object.entries(globalRegistry.plugins)) {
|
|
25
|
+
merged.set(id, { id, scope: "global", ...record });
|
|
26
|
+
}
|
|
27
|
+
for (const [id, record] of Object.entries(projectRegistry.plugins)) {
|
|
28
|
+
merged.set(id, { id, scope: "project", ...record });
|
|
29
|
+
}
|
|
30
|
+
return [...merged.values()].map((record) => disabledPlugins.has(record.id) ? { ...record, blocked: true } : record).sort((a, b) => {
|
|
31
|
+
if (a.scope !== b.scope) return a.scope === "project" ? -1 : 1;
|
|
32
|
+
return a.id.localeCompare(b.id);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function setPluginRecord(registry, pluginId, record) {
|
|
36
|
+
return {
|
|
37
|
+
plugins: {
|
|
38
|
+
...registry.plugins,
|
|
39
|
+
[pluginId]: record
|
|
40
|
+
},
|
|
41
|
+
disabledPlugins: registry.disabledPlugins ?? []
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function removePluginRecord(registry, pluginId) {
|
|
45
|
+
const plugins = { ...registry.plugins };
|
|
46
|
+
delete plugins[pluginId];
|
|
47
|
+
return { plugins, disabledPlugins: registry.disabledPlugins ?? [] };
|
|
48
|
+
}
|
|
49
|
+
function validatePluginRegistry(raw) {
|
|
50
|
+
if (!raw || typeof raw !== "object") return { plugins: {}, disabledPlugins: [] };
|
|
51
|
+
const plugins = raw.plugins;
|
|
52
|
+
if (!plugins || typeof plugins !== "object" || Array.isArray(plugins)) return { plugins: {}, disabledPlugins: [] };
|
|
53
|
+
const disabledPlugins = raw.disabledPlugins;
|
|
54
|
+
const validated = {
|
|
55
|
+
plugins: {},
|
|
56
|
+
disabledPlugins: Array.isArray(disabledPlugins) ? [...new Set(disabledPlugins.filter((pluginId) => typeof pluginId === "string"))].sort() : []
|
|
57
|
+
};
|
|
58
|
+
for (const [id, value] of Object.entries(plugins)) {
|
|
59
|
+
if (typeof id !== "string" || id.trim().length === 0) continue;
|
|
60
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) continue;
|
|
61
|
+
const record = value;
|
|
62
|
+
if (typeof record.enabled !== "boolean") continue;
|
|
63
|
+
if (record.source !== "local" && record.source !== "github") continue;
|
|
64
|
+
if (typeof record.specifier !== "string") continue;
|
|
65
|
+
if (typeof record.path !== "string") continue;
|
|
66
|
+
if (typeof record.entry !== "string") continue;
|
|
67
|
+
validated.plugins[id] = {
|
|
68
|
+
enabled: record.enabled,
|
|
69
|
+
source: record.source,
|
|
70
|
+
specifier: record.specifier,
|
|
71
|
+
path: record.path,
|
|
72
|
+
entry: record.entry,
|
|
73
|
+
...typeof record.ref === "string" ? { ref: record.ref } : {},
|
|
74
|
+
...typeof record.version === "string" ? { version: record.version } : {},
|
|
75
|
+
...record.config && typeof record.config === "object" && !Array.isArray(record.config) ? { config: validatePluginConfigValues(record.config) } : {}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return validated;
|
|
79
|
+
}
|
|
80
|
+
function validatePluginConfigValues(raw) {
|
|
81
|
+
const values = {};
|
|
82
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
83
|
+
if (typeof key !== "string" || key.trim().length === 0) continue;
|
|
84
|
+
if (typeof value === "string" || typeof value === "boolean") values[key] = value;
|
|
85
|
+
}
|
|
86
|
+
return values;
|
|
87
|
+
}
|
|
88
|
+
export {
|
|
89
|
+
EMPTY_PLUGIN_REGISTRY,
|
|
90
|
+
loadPluginRegistry,
|
|
91
|
+
mergePluginRegistries,
|
|
92
|
+
removePluginRecord,
|
|
93
|
+
savePluginRegistry,
|
|
94
|
+
setPluginRecord
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/plugins/registry.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { InstalledPluginRecord, PluginRegistry, ScopedInstalledPluginRecord } from './types.js';\n\nexport const EMPTY_PLUGIN_REGISTRY: PluginRegistry = { plugins: {}, disabledPlugins: [] };\n\nexport function loadPluginRegistry(registryPath: string): PluginRegistry {\n try {\n if (!fs.existsSync(registryPath)) return { plugins: {}, disabledPlugins: [] };\n const raw = JSON.parse(fs.readFileSync(registryPath, 'utf-8')) as unknown;\n return validatePluginRegistry(raw);\n } catch {\n return { plugins: {}, disabledPlugins: [] };\n }\n}\n\nexport function savePluginRegistry(registryPath: string, registry: PluginRegistry): void {\n fs.mkdirSync(path.dirname(registryPath), { recursive: true });\n fs.writeFileSync(registryPath, `${JSON.stringify(validatePluginRegistry(registry), null, 2)}\\n`);\n}\n\nexport function mergePluginRegistries(\n globalRegistry: PluginRegistry,\n projectRegistry: PluginRegistry,\n): ScopedInstalledPluginRecord[] {\n const merged = new Map<string, ScopedInstalledPluginRecord>();\n const disabledPlugins = new Set([\n ...(globalRegistry.disabledPlugins ?? []),\n ...(projectRegistry.disabledPlugins ?? []),\n ]);\n\n for (const [id, record] of Object.entries(globalRegistry.plugins)) {\n merged.set(id, { id, scope: 'global', ...record });\n }\n\n for (const [id, record] of Object.entries(projectRegistry.plugins)) {\n merged.set(id, { id, scope: 'project', ...record });\n }\n\n return [...merged.values()]\n .map(record => (disabledPlugins.has(record.id) ? { ...record, blocked: true } : record))\n .sort((a, b) => {\n if (a.scope !== b.scope) return a.scope === 'project' ? -1 : 1;\n return a.id.localeCompare(b.id);\n });\n}\n\nexport function setPluginRecord(\n registry: PluginRegistry,\n pluginId: string,\n record: InstalledPluginRecord,\n): PluginRegistry {\n return {\n plugins: {\n ...registry.plugins,\n [pluginId]: record,\n },\n disabledPlugins: registry.disabledPlugins ?? [],\n };\n}\n\nexport function removePluginRecord(registry: PluginRegistry, pluginId: string): PluginRegistry {\n const plugins = { ...registry.plugins };\n delete plugins[pluginId];\n return { plugins, disabledPlugins: registry.disabledPlugins ?? [] };\n}\n\nfunction validatePluginRegistry(raw: unknown): PluginRegistry {\n if (!raw || typeof raw !== 'object') return { plugins: {}, disabledPlugins: [] };\n const plugins = (raw as { plugins?: unknown }).plugins;\n if (!plugins || typeof plugins !== 'object' || Array.isArray(plugins)) return { plugins: {}, disabledPlugins: [] };\n\n const disabledPlugins = (raw as { disabledPlugins?: unknown }).disabledPlugins;\n const validated: PluginRegistry = {\n plugins: {},\n disabledPlugins: Array.isArray(disabledPlugins)\n ? [...new Set(disabledPlugins.filter((pluginId): pluginId is string => typeof pluginId === 'string'))].sort()\n : [],\n };\n for (const [id, value] of Object.entries(plugins)) {\n if (typeof id !== 'string' || id.trim().length === 0) continue;\n if (!value || typeof value !== 'object' || Array.isArray(value)) continue;\n const record = value as Record<string, unknown>;\n if (typeof record.enabled !== 'boolean') continue;\n if (record.source !== 'local' && record.source !== 'github') continue;\n if (typeof record.specifier !== 'string') continue;\n if (typeof record.path !== 'string') continue;\n if (typeof record.entry !== 'string') continue;\n\n validated.plugins[id] = {\n enabled: record.enabled,\n source: record.source,\n specifier: record.specifier,\n path: record.path,\n entry: record.entry,\n ...(typeof record.ref === 'string' ? { ref: record.ref } : {}),\n ...(typeof record.version === 'string' ? { version: record.version } : {}),\n ...(record.config && typeof record.config === 'object' && !Array.isArray(record.config)\n ? { config: validatePluginConfigValues(record.config) }\n : {}),\n };\n }\n\n return validated;\n}\n\nfunction validatePluginConfigValues(raw: object): Record<string, string | boolean> {\n const values: Record<string, string | boolean> = {};\n for (const [key, value] of Object.entries(raw)) {\n if (typeof key !== 'string' || key.trim().length === 0) continue;\n if (typeof value === 'string' || typeof value === 'boolean') values[key] = value;\n }\n return values;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type ScaffoldPluginOptions = {
|
|
2
|
+
id?: string;
|
|
3
|
+
name?: string;
|
|
4
|
+
projectRoot?: string;
|
|
5
|
+
configDir?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function resolveScaffoldTarget(target: string, options?: Pick<ScaffoldPluginOptions, 'projectRoot' | 'configDir'>): string;
|
|
8
|
+
export declare function scaffoldPlugin(targetDir: string, options?: ScaffoldPluginOptions): string;
|
|
9
|
+
export declare function formatScaffoldSuccess(targetDir: string): string;
|
|
10
|
+
//# sourceMappingURL=scaffold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/plugins/scaffold.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,IAAI,CAAC,qBAAqB,EAAE,aAAa,GAAG,WAAW,CAAM,GACrE,MAAM,CAYR;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,MAAM,CA8D7F;AAqBD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAY/D"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { DEFAULT_CONFIG_DIR } from "../constants.js";
|
|
4
|
+
import { upsertPluginManifestEntry } from "./manifest.js";
|
|
5
|
+
import { ensureMastraCodePackageLink } from "./package-link.js";
|
|
6
|
+
function resolveScaffoldTarget(target, options = {}) {
|
|
7
|
+
if (isBarePluginName(target)) {
|
|
8
|
+
return path.join(
|
|
9
|
+
options.projectRoot ?? process.cwd(),
|
|
10
|
+
options.configDir ?? DEFAULT_CONFIG_DIR,
|
|
11
|
+
"plugins",
|
|
12
|
+
"sources",
|
|
13
|
+
"local",
|
|
14
|
+
target
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
return path.resolve(options.projectRoot ?? process.cwd(), target);
|
|
18
|
+
}
|
|
19
|
+
function scaffoldPlugin(targetDir, options = {}) {
|
|
20
|
+
const dir = resolveScaffoldTarget(targetDir, options);
|
|
21
|
+
if (fs.existsSync(dir) && fs.readdirSync(dir).length > 0) {
|
|
22
|
+
throw new Error(`Directory already exists and is not empty: ${targetDir}`);
|
|
23
|
+
}
|
|
24
|
+
const packageName = path.basename(dir).toLowerCase().replace(/[^a-z0-9_.-]+/g, "-").replace(/^-|-$/g, "") || "mastracode-plugin";
|
|
25
|
+
const pluginId = options.id ?? packageName;
|
|
26
|
+
const pluginName = options.name ?? humanizeName(packageName);
|
|
27
|
+
fs.mkdirSync(path.join(dir, "src"), { recursive: true });
|
|
28
|
+
fs.writeFileSync(
|
|
29
|
+
path.join(dir, "package.json"),
|
|
30
|
+
`${JSON.stringify(
|
|
31
|
+
{
|
|
32
|
+
name: packageName,
|
|
33
|
+
type: "module",
|
|
34
|
+
exports: "./src/index.ts",
|
|
35
|
+
peerDependencies: {
|
|
36
|
+
mastracode: "*"
|
|
37
|
+
},
|
|
38
|
+
devDependencies: {
|
|
39
|
+
typescript: "^5.9.3"
|
|
40
|
+
},
|
|
41
|
+
scripts: {
|
|
42
|
+
check: "tsc --noEmit"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
null,
|
|
46
|
+
2
|
|
47
|
+
)}
|
|
48
|
+
`
|
|
49
|
+
);
|
|
50
|
+
fs.writeFileSync(
|
|
51
|
+
path.join(dir, "tsconfig.json"),
|
|
52
|
+
`${JSON.stringify(
|
|
53
|
+
{
|
|
54
|
+
compilerOptions: {
|
|
55
|
+
target: "ES2024",
|
|
56
|
+
module: "NodeNext",
|
|
57
|
+
moduleResolution: "NodeNext",
|
|
58
|
+
strict: true,
|
|
59
|
+
verbatimModuleSyntax: true,
|
|
60
|
+
erasableSyntaxOnly: true,
|
|
61
|
+
skipLibCheck: true,
|
|
62
|
+
noEmit: true
|
|
63
|
+
},
|
|
64
|
+
include: ["src/**/*.ts"]
|
|
65
|
+
},
|
|
66
|
+
null,
|
|
67
|
+
2
|
|
68
|
+
)}
|
|
69
|
+
`
|
|
70
|
+
);
|
|
71
|
+
fs.writeFileSync(path.join(dir, "src/index.ts"), renderIndex(pluginId, pluginName));
|
|
72
|
+
fs.writeFileSync(path.join(dir, "README.md"), renderReadme(pluginName, pluginId));
|
|
73
|
+
writeScaffoldManifest(targetDir, dir, pluginId, pluginName, options);
|
|
74
|
+
ensureMastraCodePackageLink(dir);
|
|
75
|
+
return dir;
|
|
76
|
+
}
|
|
77
|
+
function writeScaffoldManifest(originalTarget, scaffoldDir, pluginId, pluginName, options) {
|
|
78
|
+
const projectRoot = options.projectRoot ?? process.cwd();
|
|
79
|
+
const manifestRoot = isBarePluginName(originalTarget) ? projectRoot : scaffoldDir;
|
|
80
|
+
const entry = isBarePluginName(originalTarget) ? path.join(path.relative(projectRoot, scaffoldDir), "src/index.ts") : "src/index.ts";
|
|
81
|
+
upsertPluginManifestEntry(manifestRoot, {
|
|
82
|
+
id: pluginId,
|
|
83
|
+
name: pluginName,
|
|
84
|
+
entry: entry.split(path.sep).join("/")
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
function formatScaffoldSuccess(targetDir) {
|
|
88
|
+
return [
|
|
89
|
+
`Created Mastra Code plugin scaffold at ${targetDir}`,
|
|
90
|
+
"",
|
|
91
|
+
"Next steps:",
|
|
92
|
+
` cd ${targetDir}`,
|
|
93
|
+
" pnpm install",
|
|
94
|
+
" pnpm check",
|
|
95
|
+
" mastracode",
|
|
96
|
+
" /plugins",
|
|
97
|
+
" Install new plugin \u2192 Local path"
|
|
98
|
+
].join("\n");
|
|
99
|
+
}
|
|
100
|
+
function isBarePluginName(target) {
|
|
101
|
+
return !path.isAbsolute(target) && !target.startsWith(".") && !target.includes("/") && !target.includes("\\");
|
|
102
|
+
}
|
|
103
|
+
function renderIndex(pluginId, pluginName) {
|
|
104
|
+
return `import { createTool, defineMastraCodePlugin, z } from 'mastracode/plugin';
|
|
105
|
+
|
|
106
|
+
export default defineMastraCodePlugin({
|
|
107
|
+
id: ${JSON.stringify(pluginId)},
|
|
108
|
+
name: ${JSON.stringify(pluginName)},
|
|
109
|
+
description: 'A Mastra Code tool plugin.',
|
|
110
|
+
tools: {
|
|
111
|
+
example_tool: {
|
|
112
|
+
tool: createTool({
|
|
113
|
+
id: 'example_tool',
|
|
114
|
+
description: 'Echo a message from the scaffolded plugin.',
|
|
115
|
+
inputSchema: z.object({
|
|
116
|
+
message: z.string(),
|
|
117
|
+
}),
|
|
118
|
+
execute: async context => {
|
|
119
|
+
return { message: context.message };
|
|
120
|
+
},
|
|
121
|
+
}),
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
`;
|
|
126
|
+
}
|
|
127
|
+
function renderReadme(pluginName, pluginId) {
|
|
128
|
+
return `# ${pluginName}
|
|
129
|
+
|
|
130
|
+
Mastra Code tool plugin: \`${pluginId}\`.
|
|
131
|
+
|
|
132
|
+
## Develop
|
|
133
|
+
|
|
134
|
+
\`\`\`sh
|
|
135
|
+
pnpm install
|
|
136
|
+
pnpm check
|
|
137
|
+
\`\`\`
|
|
138
|
+
|
|
139
|
+
## Install locally
|
|
140
|
+
|
|
141
|
+
Open Mastra Code, run \`/plugins\`, and install this directory as a local plugin.
|
|
142
|
+
`;
|
|
143
|
+
}
|
|
144
|
+
function humanizeName(value) {
|
|
145
|
+
return value.split(/[-_.]+/g).filter(Boolean).map((part) => part[0]?.toUpperCase() + part.slice(1)).join(" ") || "Mastra Code Plugin";
|
|
146
|
+
}
|
|
147
|
+
export {
|
|
148
|
+
formatScaffoldSuccess,
|
|
149
|
+
resolveScaffoldTarget,
|
|
150
|
+
scaffoldPlugin
|
|
151
|
+
};
|
|
152
|
+
//# sourceMappingURL=scaffold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/plugins/scaffold.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { DEFAULT_CONFIG_DIR } from '../constants.js';\nimport { upsertPluginManifestEntry } from './manifest.js';\nimport { ensureMastraCodePackageLink } from './package-link.js';\n\nexport type ScaffoldPluginOptions = {\n id?: string;\n name?: string;\n projectRoot?: string;\n configDir?: string;\n};\n\nexport function resolveScaffoldTarget(\n target: string,\n options: Pick<ScaffoldPluginOptions, 'projectRoot' | 'configDir'> = {},\n): string {\n if (isBarePluginName(target)) {\n return path.join(\n options.projectRoot ?? process.cwd(),\n options.configDir ?? DEFAULT_CONFIG_DIR,\n 'plugins',\n 'sources',\n 'local',\n target,\n );\n }\n return path.resolve(options.projectRoot ?? process.cwd(), target);\n}\n\nexport function scaffoldPlugin(targetDir: string, options: ScaffoldPluginOptions = {}): string {\n const dir = resolveScaffoldTarget(targetDir, options);\n if (fs.existsSync(dir) && fs.readdirSync(dir).length > 0) {\n throw new Error(`Directory already exists and is not empty: ${targetDir}`);\n }\n\n const packageName =\n path\n .basename(dir)\n .toLowerCase()\n .replace(/[^a-z0-9_.-]+/g, '-')\n .replace(/^-|-$/g, '') || 'mastracode-plugin';\n const pluginId = options.id ?? packageName;\n const pluginName = options.name ?? humanizeName(packageName);\n\n fs.mkdirSync(path.join(dir, 'src'), { recursive: true });\n fs.writeFileSync(\n path.join(dir, 'package.json'),\n `${JSON.stringify(\n {\n name: packageName,\n type: 'module',\n exports: './src/index.ts',\n peerDependencies: {\n mastracode: '*',\n },\n devDependencies: {\n typescript: '^5.9.3',\n },\n scripts: {\n check: 'tsc --noEmit',\n },\n },\n null,\n 2,\n )}\\n`,\n );\n fs.writeFileSync(\n path.join(dir, 'tsconfig.json'),\n `${JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2024',\n module: 'NodeNext',\n moduleResolution: 'NodeNext',\n strict: true,\n verbatimModuleSyntax: true,\n erasableSyntaxOnly: true,\n skipLibCheck: true,\n noEmit: true,\n },\n include: ['src/**/*.ts'],\n },\n null,\n 2,\n )}\\n`,\n );\n fs.writeFileSync(path.join(dir, 'src/index.ts'), renderIndex(pluginId, pluginName));\n fs.writeFileSync(path.join(dir, 'README.md'), renderReadme(pluginName, pluginId));\n writeScaffoldManifest(targetDir, dir, pluginId, pluginName, options);\n ensureMastraCodePackageLink(dir);\n return dir;\n}\n\nfunction writeScaffoldManifest(\n originalTarget: string,\n scaffoldDir: string,\n pluginId: string,\n pluginName: string,\n options: ScaffoldPluginOptions,\n): void {\n const projectRoot = options.projectRoot ?? process.cwd();\n const manifestRoot = isBarePluginName(originalTarget) ? projectRoot : scaffoldDir;\n const entry = isBarePluginName(originalTarget)\n ? path.join(path.relative(projectRoot, scaffoldDir), 'src/index.ts')\n : 'src/index.ts';\n upsertPluginManifestEntry(manifestRoot, {\n id: pluginId,\n name: pluginName,\n entry: entry.split(path.sep).join('/'),\n });\n}\n\nexport function formatScaffoldSuccess(targetDir: string): string {\n return [\n `Created Mastra Code plugin scaffold at ${targetDir}`,\n '',\n 'Next steps:',\n ` cd ${targetDir}`,\n ' pnpm install',\n ' pnpm check',\n ' mastracode',\n ' /plugins',\n ' Install new plugin → Local path',\n ].join('\\n');\n}\n\nfunction isBarePluginName(target: string): boolean {\n return !path.isAbsolute(target) && !target.startsWith('.') && !target.includes('/') && !target.includes('\\\\');\n}\n\nfunction renderIndex(pluginId: string, pluginName: string): string {\n return `import { createTool, defineMastraCodePlugin, z } from 'mastracode/plugin';\n\nexport default defineMastraCodePlugin({\n id: ${JSON.stringify(pluginId)},\n name: ${JSON.stringify(pluginName)},\n description: 'A Mastra Code tool plugin.',\n tools: {\n example_tool: {\n tool: createTool({\n id: 'example_tool',\n description: 'Echo a message from the scaffolded plugin.',\n inputSchema: z.object({\n message: z.string(),\n }),\n execute: async context => {\n return { message: context.message };\n },\n }),\n },\n },\n});\n`;\n}\n\nfunction renderReadme(pluginName: string, pluginId: string): string {\n return `# ${pluginName}\n\nMastra Code tool plugin: \\`${pluginId}\\`.\n\n## Develop\n\n\\`\\`\\`sh\npnpm install\npnpm check\n\\`\\`\\`\n\n## Install locally\n\nOpen Mastra Code, run \\`/plugins\\`, and install this directory as a local plugin.\n`;\n}\n\nfunction humanizeName(value: string): string {\n return (\n value\n .split(/[-_.]+/g)\n .filter(Boolean)\n .map(part => part[0]?.toUpperCase() + part.slice(1))\n .join(' ') || 'Mastra Code Plugin'\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { MastraCodePluginConfigSchema, MastraCodePluginConfigValue, MastraCodePluginTools, MastraCodeToolRenderConfig } from '../plugin.js';
|
|
2
|
+
export type PluginScope = 'global' | 'project';
|
|
3
|
+
export type PluginSource = 'local' | 'github';
|
|
4
|
+
export type PluginStatus = 'active' | 'inactive' | 'blocked' | 'load failed' | 'conflicted';
|
|
5
|
+
export type InstalledPluginRecord = {
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
source: PluginSource;
|
|
8
|
+
specifier: string;
|
|
9
|
+
path: string;
|
|
10
|
+
entry: string;
|
|
11
|
+
ref?: string;
|
|
12
|
+
version?: string;
|
|
13
|
+
config?: Record<string, MastraCodePluginConfigValue>;
|
|
14
|
+
};
|
|
15
|
+
export type PluginRegistry = {
|
|
16
|
+
plugins: Record<string, InstalledPluginRecord>;
|
|
17
|
+
disabledPlugins?: string[];
|
|
18
|
+
};
|
|
19
|
+
export type ScopedInstalledPluginRecord = InstalledPluginRecord & {
|
|
20
|
+
id: string;
|
|
21
|
+
scope: PluginScope;
|
|
22
|
+
blocked?: boolean;
|
|
23
|
+
};
|
|
24
|
+
export type LoadedPlugin = ScopedInstalledPluginRecord & {
|
|
25
|
+
name?: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
instructions?: string;
|
|
28
|
+
status: PluginStatus;
|
|
29
|
+
error?: string;
|
|
30
|
+
tools: MastraCodePluginTools;
|
|
31
|
+
renderConfigs?: Record<string, MastraCodeToolRenderConfig>;
|
|
32
|
+
toolNames: string[];
|
|
33
|
+
skillPaths?: string[];
|
|
34
|
+
commandPaths?: string[];
|
|
35
|
+
configSchema?: MastraCodePluginConfigSchema;
|
|
36
|
+
configValues?: Record<string, MastraCodePluginConfigValue>;
|
|
37
|
+
conflicts?: string[];
|
|
38
|
+
};
|
|
39
|
+
export type PluginScopePaths = {
|
|
40
|
+
scope: PluginScope;
|
|
41
|
+
root: string;
|
|
42
|
+
registryPath: string;
|
|
43
|
+
sourcesPath: string;
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,2BAA2B,EAC3B,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC/C,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC9C,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,YAAY,CAAC;AAE5F,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC/C,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,qBAAqB,GAAG;IAChE,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,2BAA2B,GAAG;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,qBAAqB,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IAC3D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,4BAA4B,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Processor that aborts the agentic loop immediately after a `submit_plan` tool
|
|
3
|
+
* returns a rejection result. This prevents the model from generating any text
|
|
4
|
+
* after the user clicks "Request Changes" — the tool result is persisted in
|
|
5
|
+
* thread history (for context on the next run) but no follow-up LLM call is made.
|
|
6
|
+
*/
|
|
7
|
+
import type { Processor, ProcessInputStepArgs } from '@mastra/core/processors';
|
|
8
|
+
export declare class PlanRejectionAbortProcessor implements Processor<'plan-rejection-abort'> {
|
|
9
|
+
id: "plan-rejection-abort";
|
|
10
|
+
processInputStep({ messages, stepNumber, abort }: ProcessInputStepArgs): Promise<undefined>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=plan-rejection-abort.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-rejection-abort.d.ts","sourceRoot":"","sources":["../../src/processors/plan-rejection-abort.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAyC/E,qBAAa,2BAA4B,YAAW,SAAS,CAAC,sBAAsB,CAAC;IACnF,EAAE,EAAG,sBAAsB,CAAU;IAE/B,gBAAgB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC;CA6ClG"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const PLAN_REJECTED_PREFIX = "Plan was not approved";
|
|
2
|
+
function resultText(result) {
|
|
3
|
+
if (typeof result === "string") return result;
|
|
4
|
+
if (result && typeof result === "object") {
|
|
5
|
+
const content = result.content;
|
|
6
|
+
if (typeof content === "string") return content;
|
|
7
|
+
}
|
|
8
|
+
return "";
|
|
9
|
+
}
|
|
10
|
+
function isPlanRejection(inv) {
|
|
11
|
+
if (!inv || inv.state !== "result" || inv.toolName !== "submit_plan") return false;
|
|
12
|
+
return resultText(inv.result).startsWith(PLAN_REJECTED_PREFIX);
|
|
13
|
+
}
|
|
14
|
+
function isPlanRejectionResultPart(part) {
|
|
15
|
+
return part.type === "tool_result" && part.name === "submit_plan" && resultText(part.result).startsWith(PLAN_REJECTED_PREFIX);
|
|
16
|
+
}
|
|
17
|
+
class PlanRejectionAbortProcessor {
|
|
18
|
+
id = "plan-rejection-abort";
|
|
19
|
+
async processInputStep({ messages, stepNumber, abort }) {
|
|
20
|
+
if (stepNumber === 0) return void 0;
|
|
21
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
22
|
+
const msg = messages[i];
|
|
23
|
+
if (!msg || msg.role !== "assistant") continue;
|
|
24
|
+
const content = msg.content;
|
|
25
|
+
const parts = Array.isArray(content) ? content : Array.isArray(content?.parts) ? content.parts : [];
|
|
26
|
+
for (const part of parts) {
|
|
27
|
+
if (!part || typeof part !== "object") continue;
|
|
28
|
+
const p = part;
|
|
29
|
+
if (p.type === "tool-invocation" && isPlanRejection(p.toolInvocation)) {
|
|
30
|
+
abort("Plan rejected by user \u2014 no further response needed");
|
|
31
|
+
return void 0;
|
|
32
|
+
}
|
|
33
|
+
if (isPlanRejectionResultPart(p)) {
|
|
34
|
+
abort("Plan rejected by user \u2014 no further response needed");
|
|
35
|
+
return void 0;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const legacy = !Array.isArray(content) && Array.isArray(content?.toolInvocations) ? content.toolInvocations : [];
|
|
39
|
+
for (const inv of legacy) {
|
|
40
|
+
if (isPlanRejection(inv)) {
|
|
41
|
+
abort("Plan rejected by user \u2014 no further response needed");
|
|
42
|
+
return void 0;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
return void 0;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export {
|
|
51
|
+
PlanRejectionAbortProcessor
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=plan-rejection-abort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/processors/plan-rejection-abort.ts"],"sourcesContent":["/**\n * Processor that aborts the agentic loop immediately after a `submit_plan` tool\n * returns a rejection result. This prevents the model from generating any text\n * after the user clicks \"Request Changes\" — the tool result is persisted in\n * thread history (for context on the next run) but no follow-up LLM call is made.\n */\nimport type { Processor, ProcessInputStepArgs } from '@mastra/core/processors';\n\nconst PLAN_REJECTED_PREFIX = 'Plan was not approved';\n\ntype ToolInvocation = {\n state?: string;\n toolName?: string;\n result?: unknown;\n};\n\ntype ToolResultPart = {\n type?: string;\n name?: string;\n result?: unknown;\n};\n\nfunction resultText(result: unknown): string {\n if (typeof result === 'string') return result;\n if (result && typeof result === 'object') {\n const content = (result as { content?: unknown }).content;\n if (typeof content === 'string') return content;\n }\n return '';\n}\n\n/**\n * Returns true when the invocation is a completed `submit_plan` rejection.\n */\nfunction isPlanRejection(inv: ToolInvocation | undefined): boolean {\n if (!inv || inv.state !== 'result' || inv.toolName !== 'submit_plan') return false;\n return resultText(inv.result).startsWith(PLAN_REJECTED_PREFIX);\n}\n\nfunction isPlanRejectionResultPart(part: ToolResultPart): boolean {\n return (\n part.type === 'tool_result' &&\n part.name === 'submit_plan' &&\n resultText(part.result).startsWith(PLAN_REJECTED_PREFIX)\n );\n}\n\nexport class PlanRejectionAbortProcessor implements Processor<'plan-rejection-abort'> {\n id = 'plan-rejection-abort' as const;\n\n async processInputStep({ messages, stepNumber, abort }: ProcessInputStepArgs): Promise<undefined> {\n // Only act on continuation steps (stepNumber > 0) — step 0 is the initial\n // prompt where the model hasn't responded yet. After tool resume, the tool\n // result is part of step 0 and the loop advances to step 1 for the next\n // model call.\n if (stepNumber === 0) return undefined;\n\n // Walk messages from the end to find the last assistant message.\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (!msg || msg.role !== 'assistant') continue;\n\n // Check for a submit_plan rejection tool result. Handle the primary\n // `content.parts` shapes (tool-invocation and harness-style tool_result)\n // plus the legacy `content.toolInvocations` array.\n const content = msg.content as { parts?: unknown[]; toolInvocations?: unknown[] } | unknown[] | undefined;\n\n const parts = Array.isArray(content) ? content : Array.isArray(content?.parts) ? content.parts : [];\n for (const part of parts) {\n if (!part || typeof part !== 'object') continue;\n const p = part as { type?: string; toolInvocation?: ToolInvocation } & ToolResultPart;\n if (p.type === 'tool-invocation' && isPlanRejection(p.toolInvocation)) {\n abort('Plan rejected by user — no further response needed');\n return undefined;\n }\n if (isPlanRejectionResultPart(p)) {\n abort('Plan rejected by user — no further response needed');\n return undefined;\n }\n }\n\n const legacy = !Array.isArray(content) && Array.isArray(content?.toolInvocations) ? content.toolInvocations : [];\n for (const inv of legacy) {\n if (isPlanRejection(inv as ToolInvocation)) {\n abort('Plan rejected by user — no further response needed');\n return undefined;\n }\n }\n\n // Only check the most recent assistant message.\n break;\n }\n\n return undefined;\n }\n}\n"],"mappings":"AAQA,MAAM,uBAAuB;AAc7B,SAAS,WAAW,QAAyB;AAC3C,MAAI,OAAO,WAAW,SAAU,QAAO;AACvC,MAAI,UAAU,OAAO,WAAW,UAAU;AACxC,UAAM,UAAW,OAAiC;AAClD,QAAI,OAAO,YAAY,SAAU,QAAO;AAAA,EAC1C;AACA,SAAO;AACT;AAKA,SAAS,gBAAgB,KAA0C;AACjE,MAAI,CAAC,OAAO,IAAI,UAAU,YAAY,IAAI,aAAa,cAAe,QAAO;AAC7E,SAAO,WAAW,IAAI,MAAM,EAAE,WAAW,oBAAoB;AAC/D;AAEA,SAAS,0BAA0B,MAA+B;AAChE,SACE,KAAK,SAAS,iBACd,KAAK,SAAS,iBACd,WAAW,KAAK,MAAM,EAAE,WAAW,oBAAoB;AAE3D;AAEO,MAAM,4BAAyE;AAAA,EACpF,KAAK;AAAA,EAEL,MAAM,iBAAiB,EAAE,UAAU,YAAY,MAAM,GAA6C;AAKhG,QAAI,eAAe,EAAG,QAAO;AAG7B,aAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC7C,YAAM,MAAM,SAAS,CAAC;AACtB,UAAI,CAAC,OAAO,IAAI,SAAS,YAAa;AAKtC,YAAM,UAAU,IAAI;AAEpB,YAAM,QAAQ,MAAM,QAAQ,OAAO,IAAI,UAAU,MAAM,QAAQ,SAAS,KAAK,IAAI,QAAQ,QAAQ,CAAC;AAClG,iBAAW,QAAQ,OAAO;AACxB,YAAI,CAAC,QAAQ,OAAO,SAAS,SAAU;AACvC,cAAM,IAAI;AACV,YAAI,EAAE,SAAS,qBAAqB,gBAAgB,EAAE,cAAc,GAAG;AACrE,gBAAM,yDAAoD;AAC1D,iBAAO;AAAA,QACT;AACA,YAAI,0BAA0B,CAAC,GAAG;AAChC,gBAAM,yDAAoD;AAC1D,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,YAAM,SAAS,CAAC,MAAM,QAAQ,OAAO,KAAK,MAAM,QAAQ,SAAS,eAAe,IAAI,QAAQ,kBAAkB,CAAC;AAC/G,iBAAW,OAAO,QAAQ;AACxB,YAAI,gBAAgB,GAAqB,GAAG;AAC1C,gBAAM,yDAAoD;AAC1D,iBAAO;AAAA,QACT;AAAA,MACF;AAGA;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { MastraModelGateway } from '@mastra/core/llm';
|
|
2
|
+
import type { GatewayAuthRequest, GatewayAuthResult, GatewayLanguageModel, ProviderConfig } from '@mastra/core/llm';
|
|
3
|
+
export declare const AMAZON_BEDROCK_GATEWAY_ID = "amazon-bedrock";
|
|
4
|
+
/**
|
|
5
|
+
* Whether AWS credentials look available for Bedrock.
|
|
6
|
+
*
|
|
7
|
+
* Amazon Bedrock authenticates with AWS SigV4 rather than a bearer API key, so
|
|
8
|
+
* this only governs whether Bedrock models are offered as "authenticated" in the
|
|
9
|
+
* picker. We look for the common signals (env vars, bearer token, a configured
|
|
10
|
+
* profile, or a shared credentials/config file) rather than resolving
|
|
11
|
+
* credentials here, since the auth checker must stay sync.
|
|
12
|
+
*/
|
|
13
|
+
export declare function hasAwsCredentials(): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Standalone Amazon Bedrock gateway.
|
|
16
|
+
*
|
|
17
|
+
* Bedrock is resolved directly via AWS SigV4 (not through the model router) and
|
|
18
|
+
* its models are surfaced from the public models.dev catalog. It is exposed as
|
|
19
|
+
* its own gateway/provider (`amazon-bedrock/...`) rather than nested under the
|
|
20
|
+
* MastraCode gateway namespace.
|
|
21
|
+
*/
|
|
22
|
+
export declare class AmazonBedrockGateway extends MastraModelGateway {
|
|
23
|
+
readonly id = "amazon-bedrock";
|
|
24
|
+
readonly name = "Amazon Bedrock";
|
|
25
|
+
shouldEnable(): boolean;
|
|
26
|
+
fetchProviders(): Promise<Record<string, ProviderConfig>>;
|
|
27
|
+
buildUrl(_modelId: string): string | undefined;
|
|
28
|
+
getApiKey(_modelId: string): Promise<string>;
|
|
29
|
+
resolveAuth(_request: GatewayAuthRequest): GatewayAuthResult | undefined;
|
|
30
|
+
resolveLanguageModel(args: {
|
|
31
|
+
modelId: string;
|
|
32
|
+
providerId: string;
|
|
33
|
+
apiKey: string;
|
|
34
|
+
headers?: Record<string, string>;
|
|
35
|
+
transport?: any;
|
|
36
|
+
responsesWebSocket?: any;
|
|
37
|
+
}): GatewayLanguageModel;
|
|
38
|
+
}
|
|
39
|
+
export declare function createAmazonBedrockGateway(): AmazonBedrockGateway;
|
|
40
|
+
//# sourceMappingURL=amazon-bedrock-gateway.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amazon-bedrock-gateway.d.ts","sourceRoot":"","sources":["../../src/providers/amazon-bedrock-gateway.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKpH,eAAO,MAAM,yBAAyB,mBAAmB,CAAC;AAE1D;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAuB3C;AAyBD;;;;;;;GAOG;AACH,qBAAa,oBAAqB,SAAQ,kBAAkB;IAC1D,QAAQ,CAAC,EAAE,oBAA6B;IACxC,QAAQ,CAAC,IAAI,oBAAoB;IAEjC,YAAY,IAAI,OAAO;IAIjB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAiB/D,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIxC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlD,WAAW,CAAC,QAAQ,EAAE,kBAAkB,GAAG,iBAAiB,GAAG,SAAS;IAUxE,oBAAoB,CAAC,IAAI,EAAE;QACzB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,SAAS,CAAC,EAAE,GAAG,CAAC;QAChB,kBAAkB,CAAC,EAAE,GAAG,CAAC;KAC1B,GAAG,oBAAoB;CAGzB;AAED,wBAAgB,0BAA0B,IAAI,oBAAoB,CAEjE"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { createAmazonBedrock } from "@ai-sdk/amazon-bedrock";
|
|
4
|
+
import { fromNodeProviderChain } from "@aws-sdk/credential-providers";
|
|
5
|
+
import { MastraModelGateway } from "@mastra/core/llm";
|
|
6
|
+
import { getBedrockModelCatalog } from "./amazon-bedrock.js";
|
|
7
|
+
const AMAZON_BEDROCK_GATEWAY_ID = "amazon-bedrock";
|
|
8
|
+
function hasAwsCredentials() {
|
|
9
|
+
if (process.env.AWS_BEARER_TOKEN_BEDROCK || process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY || process.env.AWS_SHARED_CREDENTIALS_FILE || process.env.AWS_CONFIG_FILE || process.env.AWS_PROFILE || process.env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI || process.env.AWS_CONTAINER_CREDENTIALS_FULL_URI || process.env.AWS_WEB_IDENTITY_TOKEN_FILE) {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
const home = process.env.HOME || process.env.USERPROFILE;
|
|
13
|
+
if (home) {
|
|
14
|
+
const awsDir = path.join(home, ".aws");
|
|
15
|
+
const credentialsPath = process.env.AWS_SHARED_CREDENTIALS_FILE ?? path.join(awsDir, "credentials");
|
|
16
|
+
const configPath = process.env.AWS_CONFIG_FILE ?? path.join(awsDir, "config");
|
|
17
|
+
if (existsSync(credentialsPath) || existsSync(configPath)) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
function bedrockProvider(modelId, headers) {
|
|
24
|
+
const region = process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION || "us-east-1";
|
|
25
|
+
const bedrock = createAmazonBedrock({
|
|
26
|
+
region,
|
|
27
|
+
credentialProvider: fromNodeProviderChain(),
|
|
28
|
+
headers
|
|
29
|
+
});
|
|
30
|
+
return bedrock(modelId);
|
|
31
|
+
}
|
|
32
|
+
class AmazonBedrockGateway extends MastraModelGateway {
|
|
33
|
+
id = AMAZON_BEDROCK_GATEWAY_ID;
|
|
34
|
+
name = "Amazon Bedrock";
|
|
35
|
+
shouldEnable() {
|
|
36
|
+
return hasAwsCredentials();
|
|
37
|
+
}
|
|
38
|
+
async fetchProviders() {
|
|
39
|
+
const providers = {};
|
|
40
|
+
try {
|
|
41
|
+
const bedrockModels = await getBedrockModelCatalog();
|
|
42
|
+
providers["amazon-bedrock"] = {
|
|
43
|
+
name: "Amazon Bedrock",
|
|
44
|
+
apiKeyEnvVar: "",
|
|
45
|
+
apiKeyHeader: "Authorization",
|
|
46
|
+
gateway: this.id,
|
|
47
|
+
models: bedrockModels.map((model) => model.id)
|
|
48
|
+
};
|
|
49
|
+
} catch (error) {
|
|
50
|
+
console.warn("Failed to load Amazon Bedrock model catalog:", error);
|
|
51
|
+
}
|
|
52
|
+
return providers;
|
|
53
|
+
}
|
|
54
|
+
buildUrl(_modelId) {
|
|
55
|
+
return void 0;
|
|
56
|
+
}
|
|
57
|
+
async getApiKey(_modelId) {
|
|
58
|
+
return hasAwsCredentials() ? "aws-credential-chain" : "";
|
|
59
|
+
}
|
|
60
|
+
resolveAuth(_request) {
|
|
61
|
+
if (hasAwsCredentials()) {
|
|
62
|
+
return { apiKey: "aws-credential-chain", source: "gateway" };
|
|
63
|
+
}
|
|
64
|
+
return void 0;
|
|
65
|
+
}
|
|
66
|
+
resolveLanguageModel(args) {
|
|
67
|
+
return bedrockProvider(args.modelId, args.headers);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function createAmazonBedrockGateway() {
|
|
71
|
+
return new AmazonBedrockGateway();
|
|
72
|
+
}
|
|
73
|
+
export {
|
|
74
|
+
AMAZON_BEDROCK_GATEWAY_ID,
|
|
75
|
+
AmazonBedrockGateway,
|
|
76
|
+
createAmazonBedrockGateway,
|
|
77
|
+
hasAwsCredentials
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=amazon-bedrock-gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/providers/amazon-bedrock-gateway.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport path from 'node:path';\nimport { createAmazonBedrock } from '@ai-sdk/amazon-bedrock';\nimport { fromNodeProviderChain } from '@aws-sdk/credential-providers';\nimport { MastraModelGateway } from '@mastra/core/llm';\nimport type { GatewayAuthRequest, GatewayAuthResult, GatewayLanguageModel, ProviderConfig } from '@mastra/core/llm';\nimport { getBedrockModelCatalog } from './amazon-bedrock.js';\n\ntype ModelRequestHeaders = Record<string, string>;\n\nexport const AMAZON_BEDROCK_GATEWAY_ID = 'amazon-bedrock';\n\n/**\n * Whether AWS credentials look available for Bedrock.\n *\n * Amazon Bedrock authenticates with AWS SigV4 rather than a bearer API key, so\n * this only governs whether Bedrock models are offered as \"authenticated\" in the\n * picker. We look for the common signals (env vars, bearer token, a configured\n * profile, or a shared credentials/config file) rather than resolving\n * credentials here, since the auth checker must stay sync.\n */\nexport function hasAwsCredentials(): boolean {\n if (\n process.env.AWS_BEARER_TOKEN_BEDROCK ||\n (process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY) ||\n process.env.AWS_SHARED_CREDENTIALS_FILE ||\n process.env.AWS_CONFIG_FILE ||\n process.env.AWS_PROFILE ||\n process.env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI ||\n process.env.AWS_CONTAINER_CREDENTIALS_FULL_URI ||\n process.env.AWS_WEB_IDENTITY_TOKEN_FILE\n ) {\n return true;\n }\n const home = process.env.HOME || process.env.USERPROFILE;\n if (home) {\n const awsDir = path.join(home, '.aws');\n const credentialsPath = process.env.AWS_SHARED_CREDENTIALS_FILE ?? path.join(awsDir, 'credentials');\n const configPath = process.env.AWS_CONFIG_FILE ?? path.join(awsDir, 'config');\n if (existsSync(credentialsPath) || existsSync(configPath)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Create an Amazon Bedrock model.\n *\n * Bedrock authenticates with AWS SigV4 rather than a bearer API key, so this\n * resolves credentials through the standard AWS provider chain\n * (`fromNodeProviderChain`): environment variables, shared `~/.aws` config and\n * SSO profiles, and container/instance roles — the same resolution order the AWS\n * CLI uses. The region falls back to `us-east-1` to match the AWS SDK default.\n *\n * When `AWS_BEARER_TOKEN_BEDROCK` is set, `@ai-sdk/amazon-bedrock` uses bearer\n * auth instead and ignores the credential provider, so we leave that path to the\n * SDK and only wire up SigV4 here.\n */\nfunction bedrockProvider(modelId: string, headers?: ModelRequestHeaders) {\n const region = process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION || 'us-east-1';\n const bedrock = createAmazonBedrock({\n region,\n credentialProvider: fromNodeProviderChain(),\n headers,\n });\n return bedrock(modelId);\n}\n\n/**\n * Standalone Amazon Bedrock gateway.\n *\n * Bedrock is resolved directly via AWS SigV4 (not through the model router) and\n * its models are surfaced from the public models.dev catalog. It is exposed as\n * its own gateway/provider (`amazon-bedrock/...`) rather than nested under the\n * MastraCode gateway namespace.\n */\nexport class AmazonBedrockGateway extends MastraModelGateway {\n readonly id = AMAZON_BEDROCK_GATEWAY_ID;\n readonly name = 'Amazon Bedrock';\n\n shouldEnable(): boolean {\n return hasAwsCredentials();\n }\n\n async fetchProviders(): Promise<Record<string, ProviderConfig>> {\n const providers: Record<string, ProviderConfig> = {};\n try {\n const bedrockModels = await getBedrockModelCatalog();\n providers['amazon-bedrock'] = {\n name: 'Amazon Bedrock',\n apiKeyEnvVar: '',\n apiKeyHeader: 'Authorization',\n gateway: this.id,\n models: bedrockModels.map(model => model.id),\n };\n } catch (error) {\n console.warn('Failed to load Amazon Bedrock model catalog:', error);\n }\n return providers;\n }\n\n buildUrl(_modelId: string): string | undefined {\n return undefined;\n }\n\n async getApiKey(_modelId: string): Promise<string> {\n return hasAwsCredentials() ? 'aws-credential-chain' : '';\n }\n\n resolveAuth(_request: GatewayAuthRequest): GatewayAuthResult | undefined {\n // Amazon Bedrock authenticates via the AWS credential chain rather than a\n // stored API key, so report it as authenticated whenever AWS credentials look\n // available. The actual SigV4 signing happens inside `bedrockProvider()`.\n if (hasAwsCredentials()) {\n return { apiKey: 'aws-credential-chain', source: 'gateway' };\n }\n return undefined;\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 return bedrockProvider(args.modelId, args.headers) as unknown as GatewayLanguageModel;\n }\n}\n\nexport function createAmazonBedrockGateway(): AmazonBedrockGateway {\n return new AmazonBedrockGateway();\n}\n"],"mappings":"AAAA,SAAS,kBAAkB;AAC3B,OAAO,UAAU;AACjB,SAAS,2BAA2B;AACpC,SAAS,6BAA6B;AACtC,SAAS,0BAA0B;AAEnC,SAAS,8BAA8B;AAIhC,MAAM,4BAA4B;AAWlC,SAAS,oBAA6B;AAC3C,MACE,QAAQ,IAAI,4BACX,QAAQ,IAAI,qBAAqB,QAAQ,IAAI,yBAC9C,QAAQ,IAAI,+BACZ,QAAQ,IAAI,mBACZ,QAAQ,IAAI,eACZ,QAAQ,IAAI,0CACZ,QAAQ,IAAI,sCACZ,QAAQ,IAAI,6BACZ;AACA,WAAO;AAAA,EACT;AACA,QAAM,OAAO,QAAQ,IAAI,QAAQ,QAAQ,IAAI;AAC7C,MAAI,MAAM;AACR,UAAM,SAAS,KAAK,KAAK,MAAM,MAAM;AACrC,UAAM,kBAAkB,QAAQ,IAAI,+BAA+B,KAAK,KAAK,QAAQ,aAAa;AAClG,UAAM,aAAa,QAAQ,IAAI,mBAAmB,KAAK,KAAK,QAAQ,QAAQ;AAC5E,QAAI,WAAW,eAAe,KAAK,WAAW,UAAU,GAAG;AACzD,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAeA,SAAS,gBAAgB,SAAiB,SAA+B;AACvE,QAAM,SAAS,QAAQ,IAAI,cAAc,QAAQ,IAAI,sBAAsB;AAC3E,QAAM,UAAU,oBAAoB;AAAA,IAClC;AAAA,IACA,oBAAoB,sBAAsB;AAAA,IAC1C;AAAA,EACF,CAAC;AACD,SAAO,QAAQ,OAAO;AACxB;AAUO,MAAM,6BAA6B,mBAAmB;AAAA,EAClD,KAAK;AAAA,EACL,OAAO;AAAA,EAEhB,eAAwB;AACtB,WAAO,kBAAkB;AAAA,EAC3B;AAAA,EAEA,MAAM,iBAA0D;AAC9D,UAAM,YAA4C,CAAC;AACnD,QAAI;AACF,YAAM,gBAAgB,MAAM,uBAAuB;AACnD,gBAAU,gBAAgB,IAAI;AAAA,QAC5B,MAAM;AAAA,QACN,cAAc;AAAA,QACd,cAAc;AAAA,QACd,SAAS,KAAK;AAAA,QACd,QAAQ,cAAc,IAAI,WAAS,MAAM,EAAE;AAAA,MAC7C;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,KAAK,gDAAgD,KAAK;AAAA,IACpE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,UAAsC;AAC7C,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,UAAU,UAAmC;AACjD,WAAO,kBAAkB,IAAI,yBAAyB;AAAA,EACxD;AAAA,EAEA,YAAY,UAA6D;AAIvE,QAAI,kBAAkB,GAAG;AACvB,aAAO,EAAE,QAAQ,wBAAwB,QAAQ,UAAU;AAAA,IAC7D;AACA,WAAO;AAAA,EACT;AAAA,EAEA,qBAAqB,MAOI;AACvB,WAAO,gBAAgB,KAAK,SAAS,KAAK,OAAO;AAAA,EACnD;AACF;AAEO,SAAS,6BAAmD;AACjE,SAAO,IAAI,qBAAqB;AAClC;","names":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Amazon Bedrock model catalog.
|
|
3
|
+
*
|
|
4
|
+
* Bedrock is not part of mastracode's gateway-synced model router (it
|
|
5
|
+
* authenticates with AWS SigV4 rather than an API key / base URL, so it is
|
|
6
|
+
* resolved directly in `agents/model.ts`). To still offer Bedrock models in the
|
|
7
|
+
* `/models` picker and packs, we fetch the public models.dev catalog — the same
|
|
8
|
+
* source the model router uses — and expose the `amazon-bedrock` provider's
|
|
9
|
+
* model list. This mirrors the GitHub Copilot catalog approach.
|
|
10
|
+
*/
|
|
11
|
+
export interface BedrockModelEntry {
|
|
12
|
+
id: string;
|
|
13
|
+
}
|
|
14
|
+
/** Reset the in-process Bedrock catalog cache (test seam). */
|
|
15
|
+
export declare function clearBedrockCatalogCache(): void;
|
|
16
|
+
/**
|
|
17
|
+
* Return the available Amazon Bedrock models.
|
|
18
|
+
*
|
|
19
|
+
* - Returns the cached list when a recent fetch succeeded.
|
|
20
|
+
* - On cache miss / expiry, fetches the models.dev catalog with a 5s timeout and
|
|
21
|
+
* caches it for an hour.
|
|
22
|
+
* - On fetch failure, returns a small hard-coded fallback (so packs still work
|
|
23
|
+
* offline) and caches that briefly to avoid hammering the network.
|
|
24
|
+
*
|
|
25
|
+
* Concurrent calls during a fetch share the inflight promise.
|
|
26
|
+
*/
|
|
27
|
+
export declare function getBedrockModelCatalog(): Promise<BedrockModelEntry[]>;
|
|
28
|
+
//# sourceMappingURL=amazon-bedrock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amazon-bedrock.d.ts","sourceRoot":"","sources":["../../src/providers/amazon-bedrock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;CACZ;AAsBD,8DAA8D;AAC9D,wBAAgB,wBAAwB,IAAI,IAAI,CAG/C;AAeD;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAiC3E"}
|