@mastra/code-sdk 0.0.0-esbuild-bundle-worker-20260807173433
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 +1349 -0
- package/LICENSE.md +30 -0
- package/README.md +70 -0
- package/dist/acp/agent.d.ts +35 -0
- package/dist/acp/agent.d.ts.map +1 -0
- package/dist/acp/agent.js +161 -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 +214 -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 +65 -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 +35 -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 +2 -0
- package/dist/agents/credential-resolver.d.ts +51 -0
- package/dist/agents/credential-resolver.d.ts.map +1 -0
- package/dist/agents/credential-resolver.js +52 -0
- package/dist/agents/credential-resolver.js.map +1 -0
- package/dist/agents/custom-provider-source.d.ts +35 -0
- package/dist/agents/custom-provider-source.d.ts.map +1 -0
- package/dist/agents/custom-provider-source.js +25 -0
- package/dist/agents/custom-provider-source.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 +32 -0
- package/dist/agents/instructions.js.map +1 -0
- package/dist/agents/mastracode-gateway.d.ts +74 -0
- package/dist/agents/mastracode-gateway.d.ts.map +1 -0
- package/dist/agents/mastracode-gateway.js +400 -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 +116 -0
- package/dist/agents/memory.js.map +1 -0
- package/dist/agents/model.d.ts +59 -0
- package/dist/agents/model.d.ts.map +1 -0
- package/dist/agents/model.js +132 -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 +44 -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 +39 -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 +37 -0
- package/dist/agents/modes/plan.js.map +1 -0
- package/dist/agents/prompts/agent-instructions.d.ts +61 -0
- package/dist/agents/prompts/agent-instructions.d.ts.map +1 -0
- package/dist/agents/prompts/agent-instructions.js +201 -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 +76 -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 +26 -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 +65 -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 +23 -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 +111 -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 +149 -0
- package/dist/agents/prompts/tool-guidance.js.map +1 -0
- package/dist/agents/sandbox-filesystem.d.ts +99 -0
- package/dist/agents/sandbox-filesystem.d.ts.map +1 -0
- package/dist/agents/sandbox-filesystem.js +328 -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 +15 -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 +107 -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 +87 -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 +105 -0
- package/dist/agents/tools.js.map +1 -0
- package/dist/agents/workspace.d.ts +32 -0
- package/dist/agents/workspace.d.ts.map +1 -0
- package/dist/agents/workspace.js +251 -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 +163 -0
- package/dist/analytics.js.map +1 -0
- package/dist/auth/authorization-input.d.ts +16 -0
- package/dist/auth/authorization-input.d.ts.map +1 -0
- package/dist/auth/authorization-input.js +42 -0
- package/dist/auth/authorization-input.js.map +1 -0
- package/dist/auth/device-code.d.ts +93 -0
- package/dist/auth/device-code.d.ts.map +1 -0
- package/dist/auth/device-code.js +129 -0
- package/dist/auth/device-code.js.map +1 -0
- package/dist/auth/index.d.ts +10 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +6 -0
- package/dist/auth/pkce.d.ts +13 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +32 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/providers/anthropic.d.ts +40 -0
- package/dist/auth/providers/anthropic.d.ts.map +1 -0
- package/dist/auth/providers/anthropic.js +126 -0
- package/dist/auth/providers/anthropic.js.map +1 -0
- package/dist/auth/providers/github-copilot.d.ts +154 -0
- package/dist/auth/providers/github-copilot.d.ts.map +1 -0
- package/dist/auth/providers/github-copilot.js +340 -0
- package/dist/auth/providers/github-copilot.js.map +1 -0
- package/dist/auth/providers/openai-codex.d.ts +139 -0
- package/dist/auth/providers/openai-codex.d.ts.map +1 -0
- package/dist/auth/providers/openai-codex.js +519 -0
- package/dist/auth/providers/openai-codex.js.map +1 -0
- package/dist/auth/providers/xai.d.ts +64 -0
- package/dist/auth/providers/xai.d.ts.map +1 -0
- package/dist/auth/providers/xai.js +205 -0
- package/dist/auth/providers/xai.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 +197 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/auth/types.d.ts +89 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +1 -0
- package/dist/clipboard/index.d.ts +26 -0
- package/dist/clipboard/index.d.ts.map +1 -0
- package/dist/clipboard/index.js +226 -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 +18 -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 +22 -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 +161 -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 +5 -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 +73 -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 +259 -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 +60 -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 +3 -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 +347 -0
- package/dist/evals/scorers/outcome.js.map +1 -0
- package/dist/goal-manager.d.ts +78 -0
- package/dist/goal-manager.d.ts.map +1 -0
- package/dist/goal-manager.js +273 -0
- package/dist/goal-manager.js.map +1 -0
- package/dist/goal-signal.d.ts +14 -0
- package/dist/goal-signal.d.ts.map +1 -0
- package/dist/goal-signal.js +17 -0
- package/dist/goal-signal.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 +195 -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 +190 -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 +89 -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 +6 -0
- package/dist/headless/policy.d.ts +17 -0
- package/dist/headless/policy.d.ts.map +1 -0
- package/dist/headless/policy.js +42 -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 +346 -0
- package/dist/headless/run-mc.js.map +1 -0
- package/dist/headless/types.d.ts +158 -0
- package/dist/headless/types.d.ts.map +1 -0
- package/dist/headless/types.js +18 -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 +73 -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 +128 -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 +5 -0
- package/dist/hooks/manager.d.ts +47 -0
- package/dist/hooks/manager.d.ts.map +1 -0
- package/dist/hooks/manager.js +225 -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 +8 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +258 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +740 -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 +21 -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 +251 -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 +4 -0
- package/dist/lsp/language.d.ts +9 -0
- package/dist/lsp/language.d.ts.map +1 -0
- package/dist/lsp/language.js +44 -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 +82 -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 +159 -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 +55 -0
- package/dist/lsp/workspace.js.map +1 -0
- package/dist/mcp/config.d.ts +54 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +240 -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 +3 -0
- package/dist/mcp/manager.d.ts +98 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +612 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/state.d.ts +33 -0
- package/dist/mcp/state.d.ts.map +1 -0
- package/dist/mcp/state.js +88 -0
- package/dist/mcp/state.js.map +1 -0
- package/dist/mcp/types.d.ts +120 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +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 +17 -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 +30 -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 +3 -0
- package/dist/onboarding/om-settings.d.ts +25 -0
- package/dist/onboarding/om-settings.d.ts.map +1 -0
- package/dist/onboarding/om-settings.js +47 -0
- package/dist/onboarding/om-settings.js.map +1 -0
- package/dist/onboarding/packs.d.ts +46 -0
- package/dist/onboarding/packs.d.ts.map +1 -0
- package/dist/onboarding/packs.js +160 -0
- package/dist/onboarding/packs.js.map +1 -0
- package/dist/onboarding/settings.d.ts +338 -0
- package/dist/onboarding/settings.d.ts.map +1 -0
- package/dist/onboarding/settings.js +673 -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 +132 -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 +28 -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 +88 -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 +190 -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 +206 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +64 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +384 -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 +50 -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 +61 -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 +25 -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 +112 -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 +116 -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/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 +54 -0
- package/dist/processors/plan-rejection-abort.js.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts +47 -0
- package/dist/providers/amazon-bedrock-gateway.d.ts.map +1 -0
- package/dist/providers/amazon-bedrock-gateway.js +152 -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 +83 -0
- package/dist/providers/amazon-bedrock.js.map +1 -0
- package/dist/providers/claude-max.d.ts +52 -0
- package/dist/providers/claude-max.d.ts.map +1 -0
- package/dist/providers/claude-max.js +171 -0
- package/dist/providers/claude-max.js.map +1 -0
- package/dist/providers/github-copilot.d.ts +60 -0
- package/dist/providers/github-copilot.d.ts.map +1 -0
- package/dist/providers/github-copilot.js +265 -0
- package/dist/providers/github-copilot.js.map +1 -0
- package/dist/providers/openai-codex.d.ts +72 -0
- package/dist/providers/openai-codex.d.ts.map +1 -0
- package/dist/providers/openai-codex.js +302 -0
- package/dist/providers/openai-codex.js.map +1 -0
- package/dist/providers/xai.d.ts +33 -0
- package/dist/providers/xai.d.ts.map +1 -0
- package/dist/providers/xai.js +70 -0
- package/dist/providers/xai.js.map +1 -0
- package/dist/schema.d.ts +192 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +98 -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 +21 -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 +52 -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 +3 -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 +79 -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 +32 -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 +61 -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 +78 -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 +59 -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 +172 -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 +61 -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 +10 -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 +62 -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 +117 -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 +364 -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 +122 -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 +141 -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 +105 -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 +96 -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 +121 -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 +274 -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 +112 -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 +101 -0
- package/dist/utils/update-check.d.ts.map +1 -0
- package/dist/utils/update-check.js +383 -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 +144 -0
- package/dist/voice/stt-registry.js.map +1 -0
- package/package.json +96 -0
|
@@ -0,0 +1,612 @@
|
|
|
1
|
+
import { DEFAULT_CONFIG_DIR } from "../constants.js";
|
|
2
|
+
import { getAppDataDir } from "../utils/project.js";
|
|
3
|
+
import { DEFAULT_OAUTH_REDIRECT_URL, getClaudeSettingsPath, getGlobalMcpPath, getProjectMcpPath, loadMcpConfig, resolveOAuthRedirectUrl } from "./config.js";
|
|
4
|
+
import { loadDisabledServers, loadGlobalDisableState, saveDisabledServers, saveGlobalDisableState } from "./state.js";
|
|
5
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "fs";
|
|
6
|
+
import { dirname, join } from "path";
|
|
7
|
+
import { MCPClient, MCPOAuthClientProvider } from "@mastra/mcp";
|
|
8
|
+
//#region src/mcp/manager.ts
|
|
9
|
+
/**
|
|
10
|
+
* MCP manager — orchestrates MCP server connections using MCPClient directly.
|
|
11
|
+
* Created once at startup, provides tools from connected MCP servers.
|
|
12
|
+
*/
|
|
13
|
+
const MASTRACODE_MCP_TIMEOUT_MS = 10080 * 60 * 1e3;
|
|
14
|
+
function getTransport(cfg) {
|
|
15
|
+
return "url" in cfg ? "http" : "stdio";
|
|
16
|
+
}
|
|
17
|
+
var FileOAuthStorage = class {
|
|
18
|
+
filePath;
|
|
19
|
+
constructor(filePath) {
|
|
20
|
+
this.filePath = filePath;
|
|
21
|
+
}
|
|
22
|
+
get(key) {
|
|
23
|
+
return this.read()[key];
|
|
24
|
+
}
|
|
25
|
+
set(key, value) {
|
|
26
|
+
const data = this.read();
|
|
27
|
+
data[key] = value;
|
|
28
|
+
this.write(data);
|
|
29
|
+
}
|
|
30
|
+
delete(key) {
|
|
31
|
+
const data = this.read();
|
|
32
|
+
delete data[key];
|
|
33
|
+
this.write(data);
|
|
34
|
+
}
|
|
35
|
+
read() {
|
|
36
|
+
if (!existsSync(this.filePath)) return {};
|
|
37
|
+
try {
|
|
38
|
+
return JSON.parse(readFileSync(this.filePath, "utf-8"));
|
|
39
|
+
} catch {
|
|
40
|
+
return {};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
write(data) {
|
|
44
|
+
const dir = dirname(this.filePath);
|
|
45
|
+
if (!existsSync(dir)) mkdirSync(dir, {
|
|
46
|
+
recursive: true,
|
|
47
|
+
mode: 448
|
|
48
|
+
});
|
|
49
|
+
const tmpPath = `${this.filePath}.tmp`;
|
|
50
|
+
writeFileSync(tmpPath, JSON.stringify(data, null, 2), {
|
|
51
|
+
encoding: "utf-8",
|
|
52
|
+
mode: 384
|
|
53
|
+
});
|
|
54
|
+
renameSync(tmpPath, this.filePath);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Zero-config OAuth defaults for servers with a bare `url` entry. Dynamic
|
|
59
|
+
* client registration provisions the client, so no `clientId` is needed.
|
|
60
|
+
*/
|
|
61
|
+
const DEFAULT_OAUTH_CONFIG = { redirectUrl: DEFAULT_OAUTH_REDIRECT_URL };
|
|
62
|
+
function getOAuthStoragePath(projectDir, name, cfg) {
|
|
63
|
+
const key = JSON.stringify({
|
|
64
|
+
projectDir,
|
|
65
|
+
name,
|
|
66
|
+
url: cfg.url,
|
|
67
|
+
redirectUrl: resolveOAuthRedirectUrl(cfg.oauth),
|
|
68
|
+
clientId: cfg.oauth?.clientId,
|
|
69
|
+
scopes: cfg.oauth?.scopes ?? []
|
|
70
|
+
});
|
|
71
|
+
return join(getAppDataDir(), "mcp-oauth", `${getStorageKeyFingerprint(key)}.json`);
|
|
72
|
+
}
|
|
73
|
+
function getStorageKeyFingerprint(value) {
|
|
74
|
+
let fingerprint = 14695981039346656037n;
|
|
75
|
+
for (let i = 0; i < value.length; i += 1) {
|
|
76
|
+
fingerprint ^= BigInt(value.charCodeAt(i));
|
|
77
|
+
fingerprint = BigInt.asUintN(64, fingerprint * 1099511628211n);
|
|
78
|
+
}
|
|
79
|
+
return fingerprint.toString(16).padStart(16, "0");
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Create an MCP manager that wraps MCPClient with config-file discovery
|
|
83
|
+
* and per-server status tracking.
|
|
84
|
+
*/
|
|
85
|
+
function createMcpManager(projectDir, configDirName = DEFAULT_CONFIG_DIR, extraServers) {
|
|
86
|
+
/** Merge programmatic servers into a base config (highest priority). */
|
|
87
|
+
const applyExtraServers = (base) => {
|
|
88
|
+
if (!extraServers || Object.keys(extraServers).length === 0) return base;
|
|
89
|
+
return {
|
|
90
|
+
...base,
|
|
91
|
+
mcpServers: {
|
|
92
|
+
...base.mcpServers,
|
|
93
|
+
...extraServers
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
let config = applyExtraServers(loadMcpConfig(projectDir, configDirName));
|
|
98
|
+
let disabledServers = new Set(loadDisabledServers(projectDir));
|
|
99
|
+
let globalDisableState = loadGlobalDisableState();
|
|
100
|
+
let globallyDisabledServers = new Set(globalDisableState.disabledServers);
|
|
101
|
+
/** Whether a server is disabled in any scope (global kill switch, global list, or project list). */
|
|
102
|
+
const isDisabled = (name) => globalDisableState.allDisabled || globallyDisabledServers.has(name) || disabledServers.has(name);
|
|
103
|
+
/** Which scope disables a server. Global takes precedence — project-level enable can't undo it. */
|
|
104
|
+
const disabledScopeOf = (name) => {
|
|
105
|
+
if (globalDisableState.allDisabled || globallyDisabledServers.has(name)) return "global";
|
|
106
|
+
if (disabledServers.has(name)) return "project";
|
|
107
|
+
};
|
|
108
|
+
let client = null;
|
|
109
|
+
let serverDefs = {};
|
|
110
|
+
let tools = {};
|
|
111
|
+
let serverStatuses = /* @__PURE__ */ new Map();
|
|
112
|
+
let stderrLogs = /* @__PURE__ */ new Map();
|
|
113
|
+
let initialized = false;
|
|
114
|
+
/** Per-server handlers that receive the OAuth authorization URL during authenticateServer(). */
|
|
115
|
+
const authUrlHandlers = /* @__PURE__ */ new Map();
|
|
116
|
+
/**
|
|
117
|
+
* Servers with an OAuth authorization flow currently in flight. Owned by the
|
|
118
|
+
* manager (not the TUI) so the state survives a `/mcp` selector being closed
|
|
119
|
+
* and reopened — the reopened selector reads it back off the server status and
|
|
120
|
+
* can still offer "Cancel authentication".
|
|
121
|
+
*/
|
|
122
|
+
const authenticatingServers = /* @__PURE__ */ new Set();
|
|
123
|
+
/**
|
|
124
|
+
* Servers whose in-flight authentication was cancelled by the caller. Set by
|
|
125
|
+
* cancelServerAuthentication() so the resolving authenticateServer() call can
|
|
126
|
+
* mark its failed status as a deliberate cancel rather than a genuine failure.
|
|
127
|
+
* This lives on the manager (not the TUI selector) so the signal survives the
|
|
128
|
+
* selector being closed and reopened mid-flow.
|
|
129
|
+
*/
|
|
130
|
+
const cancelledAuthServers = /* @__PURE__ */ new Set();
|
|
131
|
+
/** Overlay the manager-owned `authenticating` flag onto a status snapshot. */
|
|
132
|
+
const withAuthenticating = (status) => authenticatingServers.has(status.name) ? {
|
|
133
|
+
...status,
|
|
134
|
+
authenticating: true
|
|
135
|
+
} : status;
|
|
136
|
+
const MAX_STDERR_LINES = 200;
|
|
137
|
+
/** Hook into a server's stderr stream and buffer its output. */
|
|
138
|
+
function captureStderr(serverName) {
|
|
139
|
+
if (!client || typeof client.getServerStderr !== "function") return;
|
|
140
|
+
const stream = client.getServerStderr(serverName);
|
|
141
|
+
if (!stream) return;
|
|
142
|
+
let buffer = "";
|
|
143
|
+
const lines = stderrLogs.get(serverName) ?? [];
|
|
144
|
+
stderrLogs.set(serverName, lines);
|
|
145
|
+
stream.on("data", (chunk) => {
|
|
146
|
+
buffer += chunk.toString();
|
|
147
|
+
const parts = buffer.split("\n");
|
|
148
|
+
buffer = parts.pop();
|
|
149
|
+
for (const line of parts) if (line.trim()) {
|
|
150
|
+
lines.push(line);
|
|
151
|
+
if (lines.length > MAX_STDERR_LINES) lines.shift();
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
stream.on("end", () => {
|
|
155
|
+
if (buffer.trim()) {
|
|
156
|
+
lines.push(buffer);
|
|
157
|
+
if (lines.length > MAX_STDERR_LINES) lines.shift();
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
function createOAuthProvider(name, cfg) {
|
|
162
|
+
const oauth = cfg.oauth ?? (existsSync(getOAuthStoragePath(projectDir, name, cfg)) ? DEFAULT_OAUTH_CONFIG : void 0);
|
|
163
|
+
if (!oauth) return void 0;
|
|
164
|
+
const redirectUrl = resolveOAuthRedirectUrl(oauth);
|
|
165
|
+
return new MCPOAuthClientProvider({
|
|
166
|
+
redirectUrl,
|
|
167
|
+
clientMetadata: {
|
|
168
|
+
redirect_uris: [redirectUrl],
|
|
169
|
+
client_name: oauth.clientName ?? `Mastra Code MCP ${name}`,
|
|
170
|
+
grant_types: ["authorization_code", "refresh_token"],
|
|
171
|
+
response_types: ["code"],
|
|
172
|
+
...oauth.scopes?.length ? { scope: oauth.scopes.join(" ") } : {}
|
|
173
|
+
},
|
|
174
|
+
clientInformation: oauth.clientId ? {
|
|
175
|
+
client_id: oauth.clientId,
|
|
176
|
+
...oauth.clientSecret ? { client_secret: oauth.clientSecret } : {}
|
|
177
|
+
} : void 0,
|
|
178
|
+
storage: new FileOAuthStorage(getOAuthStoragePath(projectDir, name, cfg)),
|
|
179
|
+
onRedirectToAuthorization: (url) => {
|
|
180
|
+
authUrlHandlers.get(name)?.(url.toString());
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
function buildServerDefs(servers) {
|
|
185
|
+
const defs = {};
|
|
186
|
+
for (const [name, cfg] of Object.entries(servers)) if ("url" in cfg) {
|
|
187
|
+
const httpCfg = cfg;
|
|
188
|
+
defs[name] = {
|
|
189
|
+
url: new URL(httpCfg.url),
|
|
190
|
+
requestInit: httpCfg.headers ? { headers: httpCfg.headers } : void 0,
|
|
191
|
+
authProvider: createOAuthProvider(name, httpCfg)
|
|
192
|
+
};
|
|
193
|
+
} else defs[name] = {
|
|
194
|
+
command: cfg.command,
|
|
195
|
+
args: cfg.args,
|
|
196
|
+
env: cfg.env,
|
|
197
|
+
stderr: "pipe"
|
|
198
|
+
};
|
|
199
|
+
return defs;
|
|
200
|
+
}
|
|
201
|
+
/** Seed a `disabled` status for every disabled server so it stays visible. */
|
|
202
|
+
function setDisabledStatuses() {
|
|
203
|
+
for (const [name, cfg] of Object.entries(config.mcpServers ?? {})) {
|
|
204
|
+
const scope = disabledScopeOf(name);
|
|
205
|
+
if (!scope) continue;
|
|
206
|
+
serverStatuses.set(name, {
|
|
207
|
+
name,
|
|
208
|
+
connected: false,
|
|
209
|
+
toolCount: 0,
|
|
210
|
+
toolNames: [],
|
|
211
|
+
transport: getTransport(cfg),
|
|
212
|
+
disabled: true,
|
|
213
|
+
disabledScope: scope
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
async function connectAndCollectTools() {
|
|
218
|
+
setDisabledStatuses();
|
|
219
|
+
const servers = Object.fromEntries(Object.entries(config.mcpServers ?? {}).filter(([name]) => !isDisabled(name)));
|
|
220
|
+
if (Object.keys(servers).length === 0) return;
|
|
221
|
+
const serverNames = Object.keys(servers);
|
|
222
|
+
for (const name of serverNames) serverStatuses.set(name, {
|
|
223
|
+
name,
|
|
224
|
+
connected: false,
|
|
225
|
+
connecting: true,
|
|
226
|
+
toolCount: 0,
|
|
227
|
+
toolNames: [],
|
|
228
|
+
transport: getTransport(servers[name])
|
|
229
|
+
});
|
|
230
|
+
serverDefs = buildServerDefs(servers);
|
|
231
|
+
client = new MCPClient({
|
|
232
|
+
id: "mastra-code-mcp",
|
|
233
|
+
servers: serverDefs,
|
|
234
|
+
timeout: MASTRACODE_MCP_TIMEOUT_MS
|
|
235
|
+
});
|
|
236
|
+
try {
|
|
237
|
+
const { toolsets, errors } = await client.listToolsetsWithErrors();
|
|
238
|
+
const typedToolsets = toolsets;
|
|
239
|
+
for (const [serverName, serverTools] of Object.entries(typedToolsets)) for (const [toolName, toolConfig] of Object.entries(serverTools)) tools[`${serverName}_${toolName}`] = toolConfig;
|
|
240
|
+
for (const name of serverNames) {
|
|
241
|
+
const serverTools = typedToolsets[name];
|
|
242
|
+
if (serverTools && Object.keys(serverTools).length > 0) {
|
|
243
|
+
const toolNames = Object.keys(serverTools).map((t) => `${name}_${t}`);
|
|
244
|
+
serverStatuses.set(name, {
|
|
245
|
+
name,
|
|
246
|
+
connected: true,
|
|
247
|
+
toolCount: toolNames.length,
|
|
248
|
+
toolNames,
|
|
249
|
+
transport: getTransport(servers[name])
|
|
250
|
+
});
|
|
251
|
+
} else {
|
|
252
|
+
const error = errors[name] ?? "Failed to connect";
|
|
253
|
+
serverStatuses.set(name, {
|
|
254
|
+
name,
|
|
255
|
+
connected: false,
|
|
256
|
+
toolCount: 0,
|
|
257
|
+
toolNames: [],
|
|
258
|
+
transport: getTransport(servers[name]),
|
|
259
|
+
error,
|
|
260
|
+
...serverNeedsAuth(name, servers[name], error) ? { needsAuth: true } : {}
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
for (const name of serverNames) captureStderr(name);
|
|
265
|
+
} catch (error) {
|
|
266
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
267
|
+
for (const name of serverNames) serverStatuses.set(name, {
|
|
268
|
+
name,
|
|
269
|
+
connected: false,
|
|
270
|
+
toolCount: 0,
|
|
271
|
+
toolNames: [],
|
|
272
|
+
transport: getTransport(servers[name]),
|
|
273
|
+
error: errMsg,
|
|
274
|
+
...serverNeedsAuth(name, servers[name], errMsg) ? { needsAuth: true } : {}
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Whether a failed HTTP server is blocked on OAuth authorization.
|
|
280
|
+
*
|
|
281
|
+
* Provider-backed servers report the exact state tracked by `@mastra/mcp`.
|
|
282
|
+
* Bare `url` entries carry no provider until the user authenticates, so the
|
|
283
|
+
* signal is a 401 in the connect error — surfaced either as the status text
|
|
284
|
+
* or as the RFC 6750 `invalid_token` bearer error code in the response body.
|
|
285
|
+
*/
|
|
286
|
+
function serverNeedsAuth(name, cfg, error) {
|
|
287
|
+
if (getTransport(cfg) !== "http") return false;
|
|
288
|
+
if (client?.getServerAuthState?.(name) === "needs-auth") return true;
|
|
289
|
+
if (serverDefs[name]?.authProvider) return false;
|
|
290
|
+
return error !== void 0 && /\b401\b|unauthorized|invalid_token/i.test(error);
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Runs a single-server connect action (reconnect or authenticate), then
|
|
294
|
+
* refreshes that server's tools and status from the client.
|
|
295
|
+
*/
|
|
296
|
+
async function connectSingleServer(name, cfg, connect) {
|
|
297
|
+
const transport = getTransport(cfg);
|
|
298
|
+
const prefix = `${name}_`;
|
|
299
|
+
for (const key of Object.keys(tools)) if (key.startsWith(prefix)) delete tools[key];
|
|
300
|
+
stderrLogs.delete(name);
|
|
301
|
+
serverStatuses.set(name, {
|
|
302
|
+
name,
|
|
303
|
+
connected: false,
|
|
304
|
+
connecting: true,
|
|
305
|
+
toolCount: 0,
|
|
306
|
+
toolNames: [],
|
|
307
|
+
transport
|
|
308
|
+
});
|
|
309
|
+
try {
|
|
310
|
+
await connect();
|
|
311
|
+
captureStderr(name);
|
|
312
|
+
const { toolsets, errors } = await client.listToolsetsWithErrors();
|
|
313
|
+
const serverTools = toolsets[name];
|
|
314
|
+
const serverError = errors[name];
|
|
315
|
+
if (serverError) {
|
|
316
|
+
const status = {
|
|
317
|
+
name,
|
|
318
|
+
connected: false,
|
|
319
|
+
toolCount: 0,
|
|
320
|
+
toolNames: [],
|
|
321
|
+
transport,
|
|
322
|
+
error: serverError,
|
|
323
|
+
...serverNeedsAuth(name, cfg, serverError) ? { needsAuth: true } : {}
|
|
324
|
+
};
|
|
325
|
+
serverStatuses.set(name, status);
|
|
326
|
+
return status;
|
|
327
|
+
} else if (serverTools && Object.keys(serverTools).length > 0) {
|
|
328
|
+
const toolNames = Object.keys(serverTools).map((t) => `${name}_${t}`);
|
|
329
|
+
for (const [toolName, toolConfig] of Object.entries(serverTools)) tools[`${name}_${toolName}`] = toolConfig;
|
|
330
|
+
const status = {
|
|
331
|
+
name,
|
|
332
|
+
connected: true,
|
|
333
|
+
toolCount: toolNames.length,
|
|
334
|
+
toolNames,
|
|
335
|
+
transport
|
|
336
|
+
};
|
|
337
|
+
serverStatuses.set(name, status);
|
|
338
|
+
return status;
|
|
339
|
+
} else {
|
|
340
|
+
const status = {
|
|
341
|
+
name,
|
|
342
|
+
connected: false,
|
|
343
|
+
toolCount: 0,
|
|
344
|
+
toolNames: [],
|
|
345
|
+
transport,
|
|
346
|
+
error: "Failed to connect"
|
|
347
|
+
};
|
|
348
|
+
serverStatuses.set(name, status);
|
|
349
|
+
return status;
|
|
350
|
+
}
|
|
351
|
+
} catch (error) {
|
|
352
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
353
|
+
const status = {
|
|
354
|
+
name,
|
|
355
|
+
connected: false,
|
|
356
|
+
toolCount: 0,
|
|
357
|
+
toolNames: [],
|
|
358
|
+
transport,
|
|
359
|
+
error: errMsg,
|
|
360
|
+
...serverNeedsAuth(name, cfg, errMsg) ? { needsAuth: true } : {}
|
|
361
|
+
};
|
|
362
|
+
serverStatuses.set(name, status);
|
|
363
|
+
return status;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
async function disconnect() {
|
|
367
|
+
if (client) {
|
|
368
|
+
try {
|
|
369
|
+
await client.disconnect();
|
|
370
|
+
} catch {}
|
|
371
|
+
client = null;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
/** Tear down all connections and reconnect every enabled server. */
|
|
375
|
+
async function rebuildConnections() {
|
|
376
|
+
await disconnect();
|
|
377
|
+
tools = {};
|
|
378
|
+
serverStatuses = /* @__PURE__ */ new Map();
|
|
379
|
+
stderrLogs = /* @__PURE__ */ new Map();
|
|
380
|
+
initialized = false;
|
|
381
|
+
await connectAndCollectTools();
|
|
382
|
+
initialized = true;
|
|
383
|
+
}
|
|
384
|
+
function disabledStatus(name) {
|
|
385
|
+
const cfg = config.mcpServers?.[name];
|
|
386
|
+
return {
|
|
387
|
+
name,
|
|
388
|
+
connected: false,
|
|
389
|
+
toolCount: 0,
|
|
390
|
+
toolNames: [],
|
|
391
|
+
transport: cfg ? getTransport(cfg) : "stdio",
|
|
392
|
+
disabled: true,
|
|
393
|
+
disabledScope: disabledScopeOf(name)
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
function persistProjectDelta(mutate) {
|
|
397
|
+
const fresh = new Set(loadDisabledServers(projectDir));
|
|
398
|
+
mutate(fresh);
|
|
399
|
+
disabledServers = fresh;
|
|
400
|
+
saveDisabledServers(projectDir, Array.from(fresh));
|
|
401
|
+
}
|
|
402
|
+
function persistGlobalDelta(mutate) {
|
|
403
|
+
const onDisk = loadGlobalDisableState();
|
|
404
|
+
const fresh = {
|
|
405
|
+
allDisabled: onDisk.allDisabled,
|
|
406
|
+
disabledServers: new Set(onDisk.disabledServers)
|
|
407
|
+
};
|
|
408
|
+
mutate(fresh);
|
|
409
|
+
globallyDisabledServers = fresh.disabledServers;
|
|
410
|
+
globalDisableState = {
|
|
411
|
+
allDisabled: fresh.allDisabled,
|
|
412
|
+
disabledServers: Array.from(fresh.disabledServers)
|
|
413
|
+
};
|
|
414
|
+
saveGlobalDisableState(globalDisableState);
|
|
415
|
+
}
|
|
416
|
+
return {
|
|
417
|
+
async init() {
|
|
418
|
+
if (initialized) return;
|
|
419
|
+
await connectAndCollectTools();
|
|
420
|
+
initialized = true;
|
|
421
|
+
},
|
|
422
|
+
async initInBackground() {
|
|
423
|
+
await this.init();
|
|
424
|
+
const statuses = Array.from(serverStatuses.values());
|
|
425
|
+
const connected = statuses.filter((s) => s.connected);
|
|
426
|
+
return {
|
|
427
|
+
connected,
|
|
428
|
+
failed: statuses.filter((s) => !s.connected && !s.disabled),
|
|
429
|
+
skipped: [...config.skippedServers ?? []],
|
|
430
|
+
totalTools: connected.reduce((sum, s) => sum + s.toolCount, 0)
|
|
431
|
+
};
|
|
432
|
+
},
|
|
433
|
+
async reload() {
|
|
434
|
+
config = applyExtraServers(loadMcpConfig(projectDir, configDirName));
|
|
435
|
+
disabledServers = new Set(loadDisabledServers(projectDir));
|
|
436
|
+
globalDisableState = loadGlobalDisableState();
|
|
437
|
+
globallyDisabledServers = new Set(globalDisableState.disabledServers);
|
|
438
|
+
await rebuildConnections();
|
|
439
|
+
},
|
|
440
|
+
async setServerDisabled(name, disabled, options) {
|
|
441
|
+
if (!config.mcpServers?.[name]) return {
|
|
442
|
+
name,
|
|
443
|
+
connected: false,
|
|
444
|
+
toolCount: 0,
|
|
445
|
+
toolNames: [],
|
|
446
|
+
transport: "stdio",
|
|
447
|
+
error: `Server "${name}" not found in config`
|
|
448
|
+
};
|
|
449
|
+
const wasEffectivelyDisabled = isDisabled(name);
|
|
450
|
+
if (options?.global) persistGlobalDelta((state) => {
|
|
451
|
+
if (disabled) state.disabledServers.add(name);
|
|
452
|
+
else state.disabledServers.delete(name);
|
|
453
|
+
});
|
|
454
|
+
else persistProjectDelta((names) => {
|
|
455
|
+
if (disabled) names.add(name);
|
|
456
|
+
else names.delete(name);
|
|
457
|
+
});
|
|
458
|
+
if (isDisabled(name) !== wasEffectivelyDisabled) {
|
|
459
|
+
await rebuildConnections();
|
|
460
|
+
return withAuthenticating(serverStatuses.get(name) ?? disabledStatus(name));
|
|
461
|
+
}
|
|
462
|
+
return withAuthenticating(isDisabled(name) ? disabledStatus(name) : serverStatuses.get(name) ?? disabledStatus(name));
|
|
463
|
+
},
|
|
464
|
+
async setAllDisabled(disabled, options) {
|
|
465
|
+
const configuredNames = Object.keys(config.mcpServers ?? {});
|
|
466
|
+
const effectiveBefore = configuredNames.filter((name) => isDisabled(name)).join(",");
|
|
467
|
+
if (options?.global) persistGlobalDelta((state) => {
|
|
468
|
+
state.allDisabled = disabled;
|
|
469
|
+
if (!disabled) state.disabledServers.clear();
|
|
470
|
+
});
|
|
471
|
+
else persistProjectDelta((names) => {
|
|
472
|
+
if (disabled) for (const name of configuredNames) names.add(name);
|
|
473
|
+
else names.clear();
|
|
474
|
+
});
|
|
475
|
+
if (configuredNames.filter((name) => isDisabled(name)).join(",") !== effectiveBefore) await rebuildConnections();
|
|
476
|
+
},
|
|
477
|
+
getDisabledServers() {
|
|
478
|
+
return Object.keys(config.mcpServers ?? {}).filter((name) => isDisabled(name)).sort();
|
|
479
|
+
},
|
|
480
|
+
isAllDisabledGlobally() {
|
|
481
|
+
return globalDisableState.allDisabled;
|
|
482
|
+
},
|
|
483
|
+
async reconnectServer(name) {
|
|
484
|
+
if (isDisabled(name)) return {
|
|
485
|
+
...disabledStatus(name),
|
|
486
|
+
error: `Server "${name}" is disabled — enable it first`
|
|
487
|
+
};
|
|
488
|
+
const cfg = config.mcpServers?.[name];
|
|
489
|
+
if (!cfg) return {
|
|
490
|
+
name,
|
|
491
|
+
connected: false,
|
|
492
|
+
toolCount: 0,
|
|
493
|
+
toolNames: [],
|
|
494
|
+
transport: "stdio",
|
|
495
|
+
error: `Server "${name}" not found in config`
|
|
496
|
+
};
|
|
497
|
+
if (!client) return {
|
|
498
|
+
name,
|
|
499
|
+
connected: false,
|
|
500
|
+
toolCount: 0,
|
|
501
|
+
toolNames: [],
|
|
502
|
+
transport: getTransport(cfg),
|
|
503
|
+
error: "MCP client not initialized"
|
|
504
|
+
};
|
|
505
|
+
return connectSingleServer(name, cfg, () => client.reconnectServer(name));
|
|
506
|
+
},
|
|
507
|
+
async authenticateServer(name, options) {
|
|
508
|
+
const cfg = config.mcpServers?.[name];
|
|
509
|
+
if (!cfg) return {
|
|
510
|
+
name,
|
|
511
|
+
connected: false,
|
|
512
|
+
toolCount: 0,
|
|
513
|
+
toolNames: [],
|
|
514
|
+
transport: "stdio",
|
|
515
|
+
error: `Server "${name}" not found in config`
|
|
516
|
+
};
|
|
517
|
+
if (isDisabled(name)) return {
|
|
518
|
+
...disabledStatus(name),
|
|
519
|
+
error: `Server "${name}" is disabled — enable it first`
|
|
520
|
+
};
|
|
521
|
+
if (!client) return {
|
|
522
|
+
name,
|
|
523
|
+
connected: false,
|
|
524
|
+
toolCount: 0,
|
|
525
|
+
toolNames: [],
|
|
526
|
+
transport: getTransport(cfg),
|
|
527
|
+
error: "MCP client not initialized"
|
|
528
|
+
};
|
|
529
|
+
if (getTransport(cfg) !== "http") return {
|
|
530
|
+
name,
|
|
531
|
+
connected: false,
|
|
532
|
+
toolCount: 0,
|
|
533
|
+
toolNames: [],
|
|
534
|
+
transport: "stdio",
|
|
535
|
+
error: `Server "${name}" uses stdio transport, which does not support OAuth`
|
|
536
|
+
};
|
|
537
|
+
const def = serverDefs[name];
|
|
538
|
+
if (def?.url && !def.authProvider) def.authProvider = createOAuthProvider(name, {
|
|
539
|
+
...cfg,
|
|
540
|
+
oauth: DEFAULT_OAUTH_CONFIG
|
|
541
|
+
});
|
|
542
|
+
if (authenticatingServers.has(name)) {
|
|
543
|
+
const current = serverStatuses.get(name);
|
|
544
|
+
return {
|
|
545
|
+
name,
|
|
546
|
+
connected: current?.connected ?? false,
|
|
547
|
+
connecting: current?.connecting,
|
|
548
|
+
needsAuth: current?.needsAuth,
|
|
549
|
+
toolCount: current?.toolCount ?? 0,
|
|
550
|
+
toolNames: current?.toolNames ?? [],
|
|
551
|
+
transport: current?.transport ?? getTransport(cfg),
|
|
552
|
+
error: `Authentication for "${name}" is already in progress`
|
|
553
|
+
};
|
|
554
|
+
}
|
|
555
|
+
if (options?.onAuthorizationUrl) authUrlHandlers.set(name, options.onAuthorizationUrl);
|
|
556
|
+
authenticatingServers.add(name);
|
|
557
|
+
cancelledAuthServers.delete(name);
|
|
558
|
+
try {
|
|
559
|
+
const result = await connectSingleServer(name, cfg, () => client.authenticate(name, options?.timeoutMs === void 0 ? void 0 : { timeoutMs: options.timeoutMs }));
|
|
560
|
+
const finalStatus = cancelledAuthServers.has(name) && !result.connected ? {
|
|
561
|
+
...result,
|
|
562
|
+
cancelled: true
|
|
563
|
+
} : result;
|
|
564
|
+
serverStatuses.set(name, finalStatus);
|
|
565
|
+
return finalStatus;
|
|
566
|
+
} finally {
|
|
567
|
+
authUrlHandlers.delete(name);
|
|
568
|
+
authenticatingServers.delete(name);
|
|
569
|
+
cancelledAuthServers.delete(name);
|
|
570
|
+
}
|
|
571
|
+
},
|
|
572
|
+
async cancelServerAuthentication(name) {
|
|
573
|
+
if (!client) return false;
|
|
574
|
+
cancelledAuthServers.add(name);
|
|
575
|
+
const cancelled = await client.cancelAuthentication(name);
|
|
576
|
+
if (!cancelled) cancelledAuthServers.delete(name);
|
|
577
|
+
return cancelled;
|
|
578
|
+
},
|
|
579
|
+
disconnect,
|
|
580
|
+
getTools() {
|
|
581
|
+
return { ...tools };
|
|
582
|
+
},
|
|
583
|
+
hasServers() {
|
|
584
|
+
const hasConfigured = config.mcpServers !== void 0 && Object.keys(config.mcpServers).length > 0;
|
|
585
|
+
const hasSkipped = config.skippedServers !== void 0 && config.skippedServers.length > 0;
|
|
586
|
+
return hasConfigured || hasSkipped;
|
|
587
|
+
},
|
|
588
|
+
getServerStatuses() {
|
|
589
|
+
return Array.from(serverStatuses.values(), withAuthenticating);
|
|
590
|
+
},
|
|
591
|
+
getSkippedServers() {
|
|
592
|
+
return [...config.skippedServers ?? []];
|
|
593
|
+
},
|
|
594
|
+
getConfigPaths() {
|
|
595
|
+
return {
|
|
596
|
+
project: getProjectMcpPath(projectDir, configDirName),
|
|
597
|
+
global: getGlobalMcpPath(configDirName),
|
|
598
|
+
claude: getClaudeSettingsPath(projectDir)
|
|
599
|
+
};
|
|
600
|
+
},
|
|
601
|
+
getConfig() {
|
|
602
|
+
return config;
|
|
603
|
+
},
|
|
604
|
+
getServerLogs(name) {
|
|
605
|
+
return [...stderrLogs.get(name) ?? []];
|
|
606
|
+
}
|
|
607
|
+
};
|
|
608
|
+
}
|
|
609
|
+
//#endregion
|
|
610
|
+
export { createMcpManager };
|
|
611
|
+
|
|
612
|
+
//# sourceMappingURL=manager.js.map
|