@machina.ai/cell-cli-core 1.11.0-rc1 → 1.13.0-rc2
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/dist/index.d.ts +5 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/package.json +9 -3
- package/dist/src/agents/executor.d.ts +19 -0
- package/dist/src/agents/executor.js +226 -32
- package/dist/src/agents/executor.js.map +1 -1
- package/dist/src/agents/executor.test.js +335 -9
- package/dist/src/agents/executor.test.js.map +1 -1
- package/dist/src/agents/subagent-tool-wrapper.test.js +2 -4
- package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
- package/dist/src/agents/types.d.ts +2 -1
- package/dist/src/agents/types.js +1 -0
- package/dist/src/agents/types.js.map +1 -1
- package/dist/src/code_assist/experiments/client_metadata.d.ts +12 -0
- package/dist/src/code_assist/experiments/client_metadata.js +49 -0
- package/dist/src/code_assist/experiments/client_metadata.js.map +1 -0
- package/dist/src/code_assist/experiments/experiments.d.ts +17 -0
- package/dist/src/code_assist/experiments/experiments.js +36 -0
- package/dist/src/code_assist/experiments/experiments.js.map +1 -0
- package/dist/src/code_assist/experiments/types.d.ts +35 -0
- package/dist/src/code_assist/experiments/types.js +7 -0
- package/dist/src/code_assist/experiments/types.js.map +1 -0
- package/dist/src/code_assist/oauth-credential-storage.js +5 -4
- package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
- package/dist/src/code_assist/oauth-credential-storage.test.js +15 -3
- package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
- package/dist/src/code_assist/oauth2.d.ts +2 -2
- package/dist/src/code_assist/oauth2.js +53 -41
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +65 -33
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +6 -4
- package/dist/src/code_assist/server.js +11 -0
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +17 -0
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/setup.d.ts +2 -2
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/types.d.ts +1 -1
- package/dist/src/code_assist/types.js.map +1 -1
- package/dist/src/commands/extensions.d.ts +7 -0
- package/dist/src/commands/extensions.js +9 -0
- package/dist/src/commands/extensions.js.map +1 -0
- package/dist/src/commands/extensions.test.d.ts +6 -0
- package/dist/src/commands/extensions.test.js +19 -0
- package/dist/src/commands/extensions.test.js.map +1 -0
- package/dist/src/config/config.d.ts +72 -24
- package/dist/src/config/config.js +168 -55
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +59 -23
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/models.d.ts +1 -1
- package/dist/src/config/models.js +2 -2
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/storage.d.ts +3 -0
- package/dist/src/config/storage.js +20 -0
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/core/apiKeyCredentialStorage.d.ts +17 -0
- package/dist/src/core/apiKeyCredentialStorage.js +64 -0
- package/dist/src/core/apiKeyCredentialStorage.js.map +1 -0
- package/dist/src/core/apiKeyCredentialStorage.test.d.ts +6 -0
- package/dist/src/core/apiKeyCredentialStorage.test.js +71 -0
- package/dist/src/core/apiKeyCredentialStorage.test.js.map +1 -0
- package/dist/src/core/client.d.ts +2 -11
- package/dist/src/core/client.js +28 -168
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +107 -409
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.js +64 -59
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +38 -4
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +7 -8
- package/dist/src/core/coreToolScheduler.js +316 -187
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +240 -10
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/fakeContentGenerator.d.ts +33 -0
- package/dist/src/core/fakeContentGenerator.js +58 -0
- package/dist/src/core/fakeContentGenerator.js.map +1 -0
- package/dist/src/core/fakeContentGenerator.test.d.ts +6 -0
- package/dist/src/core/fakeContentGenerator.test.js +127 -0
- package/dist/src/core/fakeContentGenerator.test.js.map +1 -0
- package/dist/src/core/geminiChat.d.ts +2 -0
- package/dist/src/core/geminiChat.js +6 -2
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +15 -3
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/logger.js +10 -9
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.d.ts +1 -0
- package/dist/src/core/loggingContentGenerator.js +113 -33
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.js +5 -4
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/prompts.js +104 -55
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +30 -108
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/recordingContentGenerator.d.ts +18 -0
- package/dist/src/core/recordingContentGenerator.js +77 -0
- package/dist/src/core/recordingContentGenerator.js.map +1 -0
- package/dist/src/core/recordingContentGenerator.test.d.ts +6 -0
- package/dist/src/core/recordingContentGenerator.test.js +101 -0
- package/dist/src/core/recordingContentGenerator.test.js.map +1 -0
- package/dist/src/fallback/handler.js +2 -0
- package/dist/src/fallback/handler.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/hooks/hookPlanner.d.ts +46 -0
- package/dist/src/hooks/hookPlanner.js +108 -0
- package/dist/src/hooks/hookPlanner.js.map +1 -0
- package/dist/src/hooks/hookPlanner.test.d.ts +6 -0
- package/dist/src/hooks/hookPlanner.test.js +255 -0
- package/dist/src/hooks/hookPlanner.test.js.map +1 -0
- package/dist/src/hooks/hookRegistry.d.ts +87 -0
- package/dist/src/hooks/hookRegistry.js +198 -0
- package/dist/src/hooks/hookRegistry.js.map +1 -0
- package/dist/src/hooks/hookRegistry.test.d.ts +6 -0
- package/dist/src/hooks/hookRegistry.test.js +341 -0
- package/dist/src/hooks/hookRegistry.test.js.map +1 -0
- package/dist/src/hooks/hookTranslator.d.ts +113 -0
- package/dist/src/hooks/hookTranslator.js +232 -0
- package/dist/src/hooks/hookTranslator.js.map +1 -0
- package/dist/src/hooks/hookTranslator.test.d.ts +6 -0
- package/dist/src/hooks/hookTranslator.test.js +192 -0
- package/dist/src/hooks/hookTranslator.test.js.map +1 -0
- package/dist/src/hooks/types.d.ts +384 -0
- package/dist/src/hooks/types.js +284 -0
- package/dist/src/hooks/types.js.map +1 -0
- package/dist/src/hooks/types.test.d.ts +6 -0
- package/dist/src/hooks/types.test.js +35 -0
- package/dist/src/hooks/types.test.js.map +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.js +14 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/google-auth-provider.d.ts +2 -0
- package/dist/src/mcp/google-auth-provider.js +21 -3
- package/dist/src/mcp/google-auth-provider.js.map +1 -1
- package/dist/src/mcp/google-auth-provider.test.js +42 -9
- package/dist/src/mcp/google-auth-provider.test.js.map +1 -1
- package/dist/src/mcp/mcpLauncher.d.ts +26 -0
- package/dist/src/mcp/mcpLauncher.js +238 -0
- package/dist/src/mcp/mcpLauncher.js.map +1 -0
- package/dist/src/mcp/oauth-provider.d.ts +8 -5
- package/dist/src/mcp/oauth-provider.js +120 -36
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +191 -2
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.js +5 -4
- package/dist/src/mcp/oauth-token-storage.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.test.js +17 -11
- package/dist/src/mcp/oauth-token-storage.test.js.map +1 -1
- package/dist/src/mcp/oauth-utils.d.ts +7 -0
- package/dist/src/mcp/oauth-utils.js +19 -0
- package/dist/src/mcp/oauth-utils.js.map +1 -1
- package/dist/src/mcp/oauth-utils.test.js +32 -0
- package/dist/src/mcp/oauth-utils.test.js.map +1 -1
- package/dist/src/mcp/sa-impersonation-provider.d.ts +0 -6
- package/dist/src/mcp/sa-impersonation-provider.js +6 -23
- package/dist/src/mcp/sa-impersonation-provider.js.map +1 -1
- package/dist/src/mcp/token-storage/base-token-storage.test.js +75 -84
- package/dist/src/mcp/token-storage/base-token-storage.test.js.map +1 -1
- package/dist/src/mcp/token-storage/file-token-storage.js +1 -1
- package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
- package/dist/src/mcp/token-storage/file-token-storage.test.js +7 -5
- package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -1
- package/dist/src/mcp/token-storage/hybrid-token-storage.js +1 -1
- package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -1
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.js +2 -2
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.js.map +1 -1
- package/dist/src/mcp/token-storage/keychain-token-storage.d.ts +6 -2
- package/dist/src/mcp/token-storage/keychain-token-storage.js +63 -7
- package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js +54 -3
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -1
- package/dist/src/mcp/token-storage/types.d.ts +6 -0
- package/dist/src/mcp/token-storage/types.js.map +1 -1
- package/dist/src/policy/config.d.ts +31 -0
- package/dist/src/policy/config.js +197 -0
- package/dist/src/policy/config.js.map +1 -0
- package/dist/src/policy/config.test.d.ts +6 -0
- package/dist/src/policy/config.test.js +404 -0
- package/dist/src/policy/config.test.js.map +1 -0
- package/dist/src/policy/index.d.ts +2 -0
- package/dist/src/policy/index.js +2 -0
- package/dist/src/policy/index.js.map +1 -1
- package/dist/src/policy/policies/read-only.toml +56 -0
- package/dist/src/policy/policies/write.toml +63 -0
- package/dist/src/policy/policies/yolo.toml +31 -0
- package/dist/src/policy/policy-engine.js +4 -0
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/toml-loader.d.ts +46 -0
- package/dist/src/policy/toml-loader.js +314 -0
- package/dist/src/policy/toml-loader.js.map +1 -0
- package/dist/src/policy/toml-loader.test.d.ts +6 -0
- package/dist/src/policy/toml-loader.test.js +522 -0
- package/dist/src/policy/toml-loader.test.js.map +1 -0
- package/dist/src/policy/types.d.ts +18 -0
- package/dist/src/policy/types.js +6 -0
- package/dist/src/policy/types.js.map +1 -1
- package/dist/src/services/chatCompressionService.d.ts +32 -0
- package/dist/src/services/chatCompressionService.js +162 -0
- package/dist/src/services/chatCompressionService.js.map +1 -0
- package/dist/src/services/chatCompressionService.test.d.ts +6 -0
- package/dist/src/services/chatCompressionService.test.js +209 -0
- package/dist/src/services/chatCompressionService.test.js.map +1 -0
- package/dist/src/services/chatRecordingService.js +9 -8
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/fileDiscoveryService.d.ts +2 -14
- package/dist/src/services/fileDiscoveryService.js +19 -55
- package/dist/src/services/fileDiscoveryService.js.map +1 -1
- package/dist/src/services/fileDiscoveryService.test.js +91 -11
- package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
- package/dist/src/services/loopDetectionService.d.ts +1 -1
- package/dist/src/services/loopDetectionService.js +26 -13
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +119 -11
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.js +22 -6
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +32 -6
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +4 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +84 -33
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +40 -61
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +4 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +6 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/gcp-exporters.js +0 -1
- package/dist/src/telemetry/gcp-exporters.js.map +1 -1
- package/dist/src/telemetry/gcp-exporters.test.js +1 -1
- package/dist/src/telemetry/gcp-exporters.test.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +2 -1
- package/dist/src/telemetry/index.js +3 -2
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +2 -1
- package/dist/src/telemetry/loggers.js +37 -26
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +199 -44
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +55 -6
- package/dist/src/telemetry/metrics.js +89 -1
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +172 -213
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/semantic.d.ts +82 -0
- package/dist/src/telemetry/semantic.js +269 -0
- package/dist/src/telemetry/semantic.js.map +1 -0
- package/dist/src/telemetry/semantic.test.d.ts +6 -0
- package/dist/src/telemetry/semantic.test.js +387 -0
- package/dist/src/telemetry/semantic.test.js.map +1 -0
- package/dist/src/telemetry/telemetry-utils.test.js +29 -28
- package/dist/src/telemetry/telemetry-utils.test.js.map +1 -1
- package/dist/src/telemetry/trace.d.ts +46 -0
- package/dist/src/telemetry/trace.js +121 -0
- package/dist/src/telemetry/trace.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +64 -28
- package/dist/src/telemetry/types.js +163 -55
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.js +6 -6
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +88 -66
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/tools/edit.d.ts +3 -2
- package/dist/src/tools/edit.js +16 -12
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +78 -1
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/glob.js +9 -13
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +203 -199
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.js +2 -2
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/ls.js +7 -13
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.js +2 -9
- package/dist/src/tools/ls.test.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.d.ts +49 -4
- package/dist/src/tools/mcp-client-manager.js +209 -23
- package/dist/src/tools/mcp-client-manager.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.test.js +130 -33
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +5 -1
- package/dist/src/tools/mcp-client.js +72 -92
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +65 -6
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +4 -2
- package/dist/src/tools/mcp-tool.js +14 -10
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +5 -3
- package/dist/src/tools/memoryTool.js +10 -8
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/modifiable-tool.js +3 -2
- package/dist/src/tools/modifiable-tool.js.map +1 -1
- package/dist/src/tools/read-file.js +7 -3
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +25 -2
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.js +8 -29
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/shell.d.ts +6 -4
- package/dist/src/tools/shell.js +23 -16
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +8 -1
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/smart-edit.d.ts +3 -2
- package/dist/src/tools/smart-edit.js +23 -12
- package/dist/src/tools/smart-edit.js.map +1 -1
- package/dist/src/tools/smart-edit.test.js +62 -1
- package/dist/src/tools/smart-edit.test.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +6 -19
- package/dist/src/tools/tool-registry.js +11 -47
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +2 -24
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +8 -1
- package/dist/src/tools/tools.js +32 -18
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.js +4 -18
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-fetch.test.js +3 -3
- package/dist/src/tools/web-fetch.test.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +2 -1
- package/dist/src/tools/write-file.js +7 -7
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +1 -1
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/tools/write-todos.d.ts +2 -1
- package/dist/src/tools/write-todos.js +5 -2
- package/dist/src/tools/write-todos.js.map +1 -1
- package/dist/src/utils/channel.d.ts +19 -0
- package/dist/src/utils/channel.js +49 -0
- package/dist/src/utils/channel.js.map +1 -0
- package/dist/src/utils/channel.test.d.ts +6 -0
- package/dist/src/utils/channel.test.js +170 -0
- package/dist/src/utils/channel.test.js.map +1 -0
- package/dist/src/utils/environmentContext.d.ts +2 -1
- package/dist/src/utils/environmentContext.js +18 -0
- package/dist/src/utils/environmentContext.js.map +1 -1
- package/dist/src/utils/errorParsing.d.ts +1 -1
- package/dist/src/utils/errorParsing.js +5 -33
- package/dist/src/utils/errorParsing.js.map +1 -1
- package/dist/src/utils/errorParsing.test.js +0 -88
- package/dist/src/utils/errorParsing.test.js.map +1 -1
- package/dist/src/utils/errors.d.ts +3 -0
- package/dist/src/utils/errors.js +6 -0
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/events.d.ts +88 -0
- package/dist/src/utils/events.js +77 -0
- package/dist/src/utils/events.js.map +1 -0
- package/dist/src/utils/events.test.d.ts +6 -0
- package/dist/src/utils/events.test.js +131 -0
- package/dist/src/utils/events.test.js.map +1 -0
- package/dist/src/utils/extensionLoader.d.ts +78 -0
- package/dist/src/utils/extensionLoader.js +162 -0
- package/dist/src/utils/extensionLoader.js.map +1 -0
- package/dist/src/utils/extensionLoader.test.d.ts +6 -0
- package/dist/src/utils/extensionLoader.test.js +90 -0
- package/dist/src/utils/extensionLoader.test.js.map +1 -0
- package/dist/src/utils/fetch.js +1 -6
- package/dist/src/utils/fetch.js.map +1 -1
- package/dist/src/utils/flashFallback.test.js +26 -45
- package/dist/src/utils/flashFallback.test.js.map +1 -1
- package/dist/src/utils/getFolderStructure.js +7 -16
- package/dist/src/utils/getFolderStructure.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.d.ts +4 -1
- package/dist/src/utils/gitIgnoreParser.js +21 -4
- package/dist/src/utils/gitIgnoreParser.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.test.js +28 -0
- package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
- package/dist/src/utils/googleErrors.d.ts +104 -0
- package/dist/src/utils/googleErrors.js +152 -0
- package/dist/src/utils/googleErrors.js.map +1 -0
- package/dist/src/utils/googleErrors.test.d.ts +6 -0
- package/dist/src/utils/googleErrors.test.js +301 -0
- package/dist/src/utils/googleErrors.test.js.map +1 -0
- package/dist/src/utils/googleQuotaErrors.d.ts +36 -0
- package/dist/src/utils/googleQuotaErrors.js +149 -0
- package/dist/src/utils/googleQuotaErrors.js.map +1 -0
- package/dist/src/utils/googleQuotaErrors.test.d.ts +6 -0
- package/dist/src/utils/googleQuotaErrors.test.js +311 -0
- package/dist/src/utils/googleQuotaErrors.test.js.map +1 -0
- package/dist/src/utils/ignorePatterns.test.js +26 -30
- package/dist/src/utils/ignorePatterns.test.js.map +1 -1
- package/dist/src/utils/installationManager.js +2 -1
- package/dist/src/utils/installationManager.js.map +1 -1
- package/dist/src/utils/installationManager.test.js +3 -3
- package/dist/src/utils/installationManager.test.js.map +1 -1
- package/dist/src/utils/llm-edit-fixer.d.ts +1 -1
- package/dist/src/utils/llm-edit-fixer.js +27 -3
- package/dist/src/utils/llm-edit-fixer.js.map +1 -1
- package/dist/src/utils/llm-edit-fixer.test.js +21 -0
- package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.d.ts +11 -2
- package/dist/src/utils/memoryDiscovery.js +140 -2
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +153 -37
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/package.d.ts +12 -0
- package/dist/src/utils/package.js +15 -0
- package/dist/src/utils/package.js.map +1 -0
- package/dist/src/utils/paths.js +126 -26
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/paths.test.js +200 -68
- package/dist/src/utils/paths.test.js.map +1 -1
- package/dist/src/utils/quotaErrorDetection.d.ts +0 -2
- package/dist/src/utils/quotaErrorDetection.js +0 -46
- package/dist/src/utils/quotaErrorDetection.js.map +1 -1
- package/dist/src/utils/retry.js +41 -145
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +31 -110
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/shell-utils.js +29 -1
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.test.js +88 -0
- package/dist/src/utils/shell-utils.test.js.map +1 -1
- package/dist/src/utils/summarizer.js +2 -1
- package/dist/src/utils/summarizer.js.map +1 -1
- package/dist/src/utils/summarizer.test.js +0 -1
- package/dist/src/utils/summarizer.test.js.map +1 -1
- package/dist/src/utils/workspaceContext.js +1 -1
- package/dist/src/utils/workspaceContext.js.map +1 -1
- package/dist/src/utils/workspaceContext.test.js +2 -2
- package/dist/src/utils/workspaceContext.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -3
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
6
|
+
import { afterEach, beforeEach, describe, expect, it, vi, } from 'vitest';
|
|
7
7
|
import { McpClientManager } from './mcp-client-manager.js';
|
|
8
8
|
import { McpClient } from './mcp-client.js';
|
|
9
9
|
vi.mock('./mcp-client.js', async () => {
|
|
@@ -11,58 +11,155 @@ vi.mock('./mcp-client.js', async () => {
|
|
|
11
11
|
return {
|
|
12
12
|
...originalModule,
|
|
13
13
|
McpClient: vi.fn(),
|
|
14
|
-
populateMcpServerCommand: vi.fn(() => ({
|
|
15
|
-
'test-server': {},
|
|
16
|
-
})),
|
|
17
14
|
};
|
|
18
15
|
});
|
|
19
16
|
describe('McpClientManager', () => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const mockedMcpClient = {
|
|
17
|
+
let mockedMcpClient;
|
|
18
|
+
let mockConfig;
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
mockedMcpClient = vi.mockObject({
|
|
25
21
|
connect: vi.fn(),
|
|
26
22
|
discover: vi.fn(),
|
|
27
23
|
disconnect: vi.fn(),
|
|
28
24
|
getStatus: vi.fn(),
|
|
29
|
-
|
|
25
|
+
getServerConfig: vi.fn(),
|
|
26
|
+
});
|
|
30
27
|
vi.mocked(McpClient).mockReturnValue(mockedMcpClient);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
getMcpServers: () => ({
|
|
35
|
-
'test-server': {},
|
|
36
|
-
}),
|
|
37
|
-
getMcpServerCommand: () => '',
|
|
28
|
+
mockConfig = vi.mockObject({
|
|
29
|
+
isTrustedFolder: vi.fn().mockReturnValue(true),
|
|
30
|
+
getMcpServers: vi.fn().mockReturnValue({}),
|
|
38
31
|
getPromptRegistry: () => { },
|
|
39
32
|
getDebugMode: () => false,
|
|
40
33
|
getWorkspaceContext: () => { },
|
|
34
|
+
getAllowedMcpServers: vi.fn().mockReturnValue([]),
|
|
35
|
+
getBlockedMcpServers: vi.fn().mockReturnValue([]),
|
|
36
|
+
getMcpServerCommand: vi.fn().mockReturnValue(''),
|
|
37
|
+
getGeminiClient: vi.fn().mockReturnValue({
|
|
38
|
+
isInitialized: vi.fn(),
|
|
39
|
+
}),
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
afterEach(() => {
|
|
43
|
+
vi.restoreAllMocks();
|
|
44
|
+
});
|
|
45
|
+
it('should discover tools from all configured', async () => {
|
|
46
|
+
mockConfig.getMcpServers.mockReturnValue({
|
|
47
|
+
'test-server': {},
|
|
41
48
|
});
|
|
49
|
+
const manager = new McpClientManager({}, mockConfig);
|
|
50
|
+
await manager.startConfiguredMcpServers();
|
|
42
51
|
expect(mockedMcpClient.connect).toHaveBeenCalledOnce();
|
|
43
52
|
expect(mockedMcpClient.discover).toHaveBeenCalledOnce();
|
|
44
53
|
});
|
|
45
54
|
it('should not discover tools if folder is not trusted', async () => {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
mockConfig.getMcpServers.mockReturnValue({
|
|
56
|
+
'test-server': {},
|
|
57
|
+
});
|
|
58
|
+
mockConfig.isTrustedFolder.mockReturnValue(false);
|
|
59
|
+
const manager = new McpClientManager({}, mockConfig);
|
|
60
|
+
await manager.startConfiguredMcpServers();
|
|
61
|
+
expect(mockedMcpClient.connect).not.toHaveBeenCalled();
|
|
62
|
+
expect(mockedMcpClient.discover).not.toHaveBeenCalled();
|
|
63
|
+
});
|
|
64
|
+
it('should not start blocked servers', async () => {
|
|
65
|
+
mockConfig.getMcpServers.mockReturnValue({
|
|
66
|
+
'test-server': {},
|
|
67
|
+
});
|
|
68
|
+
mockConfig.getBlockedMcpServers.mockReturnValue(['test-server']);
|
|
69
|
+
const manager = new McpClientManager({}, mockConfig);
|
|
70
|
+
await manager.startConfiguredMcpServers();
|
|
71
|
+
expect(mockedMcpClient.connect).not.toHaveBeenCalled();
|
|
72
|
+
expect(mockedMcpClient.discover).not.toHaveBeenCalled();
|
|
73
|
+
});
|
|
74
|
+
it('should only start allowed servers if allow list is not empty', async () => {
|
|
75
|
+
mockConfig.getMcpServers.mockReturnValue({
|
|
76
|
+
'test-server': {},
|
|
77
|
+
'another-server': {},
|
|
78
|
+
});
|
|
79
|
+
mockConfig.getAllowedMcpServers.mockReturnValue(['another-server']);
|
|
80
|
+
const manager = new McpClientManager({}, mockConfig);
|
|
81
|
+
await manager.startConfiguredMcpServers();
|
|
82
|
+
expect(mockedMcpClient.connect).toHaveBeenCalledOnce();
|
|
83
|
+
expect(mockedMcpClient.discover).toHaveBeenCalledOnce();
|
|
84
|
+
});
|
|
85
|
+
it('should start servers from extensions', async () => {
|
|
86
|
+
const manager = new McpClientManager({}, mockConfig);
|
|
87
|
+
await manager.startExtension({
|
|
88
|
+
name: 'test-extension',
|
|
89
|
+
mcpServers: {
|
|
57
90
|
'test-server': {},
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
91
|
+
},
|
|
92
|
+
isActive: true,
|
|
93
|
+
version: '1.0.0',
|
|
94
|
+
path: '/some-path',
|
|
95
|
+
contextFiles: [],
|
|
96
|
+
id: '123',
|
|
97
|
+
});
|
|
98
|
+
expect(mockedMcpClient.connect).toHaveBeenCalledOnce();
|
|
99
|
+
expect(mockedMcpClient.discover).toHaveBeenCalledOnce();
|
|
100
|
+
});
|
|
101
|
+
it('should not start servers from disabled extensions', async () => {
|
|
102
|
+
const manager = new McpClientManager({}, mockConfig);
|
|
103
|
+
await manager.startExtension({
|
|
104
|
+
name: 'test-extension',
|
|
105
|
+
mcpServers: {
|
|
106
|
+
'test-server': {},
|
|
107
|
+
},
|
|
108
|
+
isActive: false,
|
|
109
|
+
version: '1.0.0',
|
|
110
|
+
path: '/some-path',
|
|
111
|
+
contextFiles: [],
|
|
112
|
+
id: '123',
|
|
63
113
|
});
|
|
64
114
|
expect(mockedMcpClient.connect).not.toHaveBeenCalled();
|
|
65
115
|
expect(mockedMcpClient.discover).not.toHaveBeenCalled();
|
|
66
116
|
});
|
|
117
|
+
it('should add blocked servers to the blockedMcpServers list', async () => {
|
|
118
|
+
mockConfig.getMcpServers.mockReturnValue({
|
|
119
|
+
'test-server': {},
|
|
120
|
+
});
|
|
121
|
+
mockConfig.getBlockedMcpServers.mockReturnValue(['test-server']);
|
|
122
|
+
const manager = new McpClientManager({}, mockConfig);
|
|
123
|
+
await manager.startConfiguredMcpServers();
|
|
124
|
+
expect(manager.getBlockedMcpServers()).toEqual([
|
|
125
|
+
{ name: 'test-server', extensionName: '' },
|
|
126
|
+
]);
|
|
127
|
+
});
|
|
128
|
+
describe('restart', () => {
|
|
129
|
+
it('should restart all running servers', async () => {
|
|
130
|
+
mockConfig.getMcpServers.mockReturnValue({
|
|
131
|
+
'test-server': {},
|
|
132
|
+
});
|
|
133
|
+
mockedMcpClient.getServerConfig.mockReturnValue({});
|
|
134
|
+
const manager = new McpClientManager({}, mockConfig);
|
|
135
|
+
await manager.startConfiguredMcpServers();
|
|
136
|
+
expect(mockedMcpClient.connect).toHaveBeenCalledTimes(1);
|
|
137
|
+
expect(mockedMcpClient.discover).toHaveBeenCalledTimes(1);
|
|
138
|
+
await manager.restart();
|
|
139
|
+
expect(mockedMcpClient.disconnect).toHaveBeenCalledTimes(1);
|
|
140
|
+
expect(mockedMcpClient.connect).toHaveBeenCalledTimes(2);
|
|
141
|
+
expect(mockedMcpClient.discover).toHaveBeenCalledTimes(2);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
describe('restartServer', () => {
|
|
145
|
+
it('should restart the specified server', async () => {
|
|
146
|
+
mockConfig.getMcpServers.mockReturnValue({
|
|
147
|
+
'test-server': {},
|
|
148
|
+
});
|
|
149
|
+
mockedMcpClient.getServerConfig.mockReturnValue({});
|
|
150
|
+
const manager = new McpClientManager({}, mockConfig);
|
|
151
|
+
await manager.startConfiguredMcpServers();
|
|
152
|
+
expect(mockedMcpClient.connect).toHaveBeenCalledTimes(1);
|
|
153
|
+
expect(mockedMcpClient.discover).toHaveBeenCalledTimes(1);
|
|
154
|
+
await manager.restartServer('test-server');
|
|
155
|
+
expect(mockedMcpClient.disconnect).toHaveBeenCalledTimes(1);
|
|
156
|
+
expect(mockedMcpClient.connect).toHaveBeenCalledTimes(2);
|
|
157
|
+
expect(mockedMcpClient.discover).toHaveBeenCalledTimes(2);
|
|
158
|
+
});
|
|
159
|
+
it('should throw an error if the server does not exist', async () => {
|
|
160
|
+
const manager = new McpClientManager({}, mockConfig);
|
|
161
|
+
await expect(manager.restartServer('non-existent')).rejects.toThrow('No MCP server registered with the name "non-existent"');
|
|
162
|
+
});
|
|
163
|
+
});
|
|
67
164
|
});
|
|
68
165
|
//# sourceMappingURL=mcp-client-manager.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client-manager.test.js","sourceRoot":"","sources":["../../../src/tools/mcp-client-manager.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"mcp-client-manager.test.js","sourceRoot":"","sources":["../../../src/tools/mcp-client-manager.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ import type { FunctionDeclaration } from '@google/genai';
|
|
|
12
12
|
import type { PromptRegistry } from '../prompts/prompt-registry.js';
|
|
13
13
|
import type { WorkspaceContext } from '../utils/workspaceContext.js';
|
|
14
14
|
import type { ToolRegistry } from './tool-registry.js';
|
|
15
|
+
import type { MessageBus } from '../confirmation-bus/message-bus.js';
|
|
15
16
|
export declare const MCP_DEFAULT_TIMEOUT_MSEC: number;
|
|
16
17
|
export type DiscoveredMCPPrompt = Prompt & {
|
|
17
18
|
serverName: string;
|
|
@@ -78,6 +79,7 @@ export declare class McpClient {
|
|
|
78
79
|
private assertConnected;
|
|
79
80
|
private discoverTools;
|
|
80
81
|
private discoverPrompts;
|
|
82
|
+
getServerConfig(): MCPServerConfig;
|
|
81
83
|
}
|
|
82
84
|
/**
|
|
83
85
|
* Map to track which MCP servers have been discovered to require OAuth
|
|
@@ -143,10 +145,12 @@ export declare function connectAndDiscover(mcpServerName: string, mcpServerConfi
|
|
|
143
145
|
* @param mcpServerName The name of the MCP server.
|
|
144
146
|
* @param mcpServerConfig The configuration for the MCP server.
|
|
145
147
|
* @param mcpClient The active MCP client instance.
|
|
148
|
+
* @param cliConfig The CLI configuration object.
|
|
149
|
+
* @param messageBus Optional message bus for policy engine integration.
|
|
146
150
|
* @returns A promise that resolves to an array of discovered and enabled tools.
|
|
147
151
|
* @throws An error if no enabled tools are found or if the server provides invalid function declarations.
|
|
148
152
|
*/
|
|
149
|
-
export declare function discoverTools(mcpServerName: string, mcpServerConfig: MCPServerConfig, mcpClient: Client, cliConfig: Config): Promise<DiscoveredMCPTool[]>;
|
|
153
|
+
export declare function discoverTools(mcpServerName: string, mcpServerConfig: MCPServerConfig, mcpClient: Client, cliConfig: Config, messageBus?: MessageBus): Promise<DiscoveredMCPTool[]>;
|
|
150
154
|
/**
|
|
151
155
|
* Discovers and logs prompts from a connected MCP client.
|
|
152
156
|
* It retrieves prompt declarations from the client and logs their names.
|
|
@@ -59,6 +59,7 @@ import { MCPOAuthTokenStorage } from '../mcp/oauth-token-storage.js';
|
|
|
59
59
|
import { OAuthUtils } from '../mcp/oauth-utils.js';
|
|
60
60
|
import { getErrorMessage } from '../utils/errors.js';
|
|
61
61
|
import { debugLogger } from '../utils/debugLogger.js';
|
|
62
|
+
import { coreEvents } from '../utils/events.js';
|
|
62
63
|
export const MCP_DEFAULT_TIMEOUT_MSEC = 10 * 60 * 1000; // default to 10 minutes
|
|
63
64
|
/**
|
|
64
65
|
* Enum representing the connection status of an MCP server
|
|
@@ -127,7 +128,7 @@ export class McpClient {
|
|
|
127
128
|
}
|
|
128
129
|
if (originalOnError)
|
|
129
130
|
originalOnError(error);
|
|
130
|
-
|
|
131
|
+
coreEvents.emitFeedback('error', `MCP ERROR (${this.serverName})`, error);
|
|
131
132
|
this.updateStatus(MCPServerStatus.DISCONNECTED);
|
|
132
133
|
};
|
|
133
134
|
this.updateStatus(MCPServerStatus.CONNECTED);
|
|
@@ -158,6 +159,8 @@ export class McpClient {
|
|
|
158
159
|
if (this.status !== MCPServerStatus.CONNECTED) {
|
|
159
160
|
return;
|
|
160
161
|
}
|
|
162
|
+
this.toolRegistry.removeMcpToolsByServer(this.serverName);
|
|
163
|
+
this.promptRegistry.removePromptsByServer(this.serverName);
|
|
161
164
|
this.updateStatus(MCPServerStatus.DISCONNECTING);
|
|
162
165
|
const client = this.client;
|
|
163
166
|
this.client = undefined;
|
|
@@ -186,12 +189,15 @@ export class McpClient {
|
|
|
186
189
|
}
|
|
187
190
|
async discoverTools(cliConfig) {
|
|
188
191
|
this.assertConnected();
|
|
189
|
-
return discoverTools(this.serverName, this.serverConfig, this.client, cliConfig);
|
|
192
|
+
return discoverTools(this.serverName, this.serverConfig, this.client, cliConfig, this.toolRegistry.getMessageBus());
|
|
190
193
|
}
|
|
191
194
|
async discoverPrompts() {
|
|
192
195
|
this.assertConnected();
|
|
193
196
|
return discoverPrompts(this.serverName, this.client, this.promptRegistry);
|
|
194
197
|
}
|
|
198
|
+
getServerConfig() {
|
|
199
|
+
return this.serverConfig;
|
|
200
|
+
}
|
|
195
201
|
}
|
|
196
202
|
/**
|
|
197
203
|
* Map to track the status of each MCP server within the core package
|
|
@@ -296,7 +302,7 @@ async function handleAutomaticOAuth(mcpServerName, mcpServerConfig, wwwAuthentic
|
|
|
296
302
|
oauthConfig = await OAuthUtils.discoverOAuthConfig(baseUrl);
|
|
297
303
|
}
|
|
298
304
|
if (!oauthConfig) {
|
|
299
|
-
|
|
305
|
+
coreEvents.emitFeedback('error', `Could not configure OAuth for '${mcpServerName}' - please authenticate manually with /mcp auth ${mcpServerName}`);
|
|
300
306
|
return false;
|
|
301
307
|
}
|
|
302
308
|
// OAuth configuration discovered - proceed with authentication
|
|
@@ -317,7 +323,7 @@ async function handleAutomaticOAuth(mcpServerName, mcpServerConfig, wwwAuthentic
|
|
|
317
323
|
return true;
|
|
318
324
|
}
|
|
319
325
|
catch (error) {
|
|
320
|
-
|
|
326
|
+
coreEvents.emitFeedback('error', `Failed to handle automatic OAuth for server '${mcpServerName}': ${getErrorMessage(error)}`, error);
|
|
321
327
|
return false;
|
|
322
328
|
}
|
|
323
329
|
}
|
|
@@ -357,7 +363,7 @@ async function createTransportWithOAuth(mcpServerName, mcpServerConfig, accessTo
|
|
|
357
363
|
return null;
|
|
358
364
|
}
|
|
359
365
|
catch (error) {
|
|
360
|
-
|
|
366
|
+
coreEvents.emitFeedback('error', `Failed to create OAuth transport for server '${mcpServerName}': ${getErrorMessage(error)}`, error);
|
|
361
367
|
return null;
|
|
362
368
|
}
|
|
363
369
|
}
|
|
@@ -414,12 +420,12 @@ export async function connectAndDiscover(mcpServerName, mcpServerConfig, toolReg
|
|
|
414
420
|
try {
|
|
415
421
|
mcpClient = await connectToMcpServer(mcpServerName, mcpServerConfig, debugMode, workspaceContext);
|
|
416
422
|
mcpClient.onerror = (error) => {
|
|
417
|
-
|
|
423
|
+
coreEvents.emitFeedback('error', `MCP ERROR (${mcpServerName}):`, error);
|
|
418
424
|
updateMCPServerStatus(mcpServerName, MCPServerStatus.DISCONNECTED);
|
|
419
425
|
};
|
|
420
426
|
// Attempt to discover both prompts and tools
|
|
421
427
|
const prompts = await discoverPrompts(mcpServerName, mcpClient, promptRegistry);
|
|
422
|
-
const tools = await discoverTools(mcpServerName, mcpServerConfig, mcpClient, cliConfig);
|
|
428
|
+
const tools = await discoverTools(mcpServerName, mcpServerConfig, mcpClient, cliConfig, toolRegistry.getMessageBus());
|
|
423
429
|
// If we have neither prompts nor tools, it's a failed discovery
|
|
424
430
|
if (prompts.length === 0 && tools.length === 0) {
|
|
425
431
|
throw new Error('No prompts or tools found on the server.');
|
|
@@ -435,7 +441,7 @@ export async function connectAndDiscover(mcpServerName, mcpServerConfig, toolReg
|
|
|
435
441
|
if (mcpClient) {
|
|
436
442
|
mcpClient.close();
|
|
437
443
|
}
|
|
438
|
-
|
|
444
|
+
coreEvents.emitFeedback('error', `Error connecting to MCP server '${mcpServerName}': ${getErrorMessage(error)}`, error);
|
|
439
445
|
updateMCPServerStatus(mcpServerName, MCPServerStatus.DISCONNECTED);
|
|
440
446
|
}
|
|
441
447
|
}
|
|
@@ -447,10 +453,12 @@ export async function connectAndDiscover(mcpServerName, mcpServerConfig, toolReg
|
|
|
447
453
|
* @param mcpServerName The name of the MCP server.
|
|
448
454
|
* @param mcpServerConfig The configuration for the MCP server.
|
|
449
455
|
* @param mcpClient The active MCP client instance.
|
|
456
|
+
* @param cliConfig The CLI configuration object.
|
|
457
|
+
* @param messageBus Optional message bus for policy engine integration.
|
|
450
458
|
* @returns A promise that resolves to an array of discovered and enabled tools.
|
|
451
459
|
* @throws An error if no enabled tools are found or if the server provides invalid function declarations.
|
|
452
460
|
*/
|
|
453
|
-
export async function discoverTools(mcpServerName, mcpServerConfig, mcpClient, cliConfig) {
|
|
461
|
+
export async function discoverTools(mcpServerName, mcpServerConfig, mcpClient, cliConfig, messageBus) {
|
|
454
462
|
try {
|
|
455
463
|
// Only request tools if the server supports them.
|
|
456
464
|
if (mcpClient.getServerCapabilities()?.tools == null)
|
|
@@ -469,10 +477,11 @@ export async function discoverTools(mcpServerName, mcpServerConfig, mcpClient, c
|
|
|
469
477
|
if (!isEnabled(funcDecl, mcpServerName, mcpServerConfig)) {
|
|
470
478
|
continue;
|
|
471
479
|
}
|
|
472
|
-
|
|
480
|
+
const tool = new DiscoveredMCPTool(mcpCallableTool, mcpServerName, funcDecl.name, funcDecl.description ?? '', funcDecl.parametersJsonSchema ?? { type: 'object', properties: {} }, mcpServerConfig.trust, undefined, cliConfig, mcpServerConfig.extension?.name, mcpServerConfig.extension?.id, messageBus);
|
|
481
|
+
discoveredTools.push(tool);
|
|
473
482
|
}
|
|
474
483
|
catch (error) {
|
|
475
|
-
|
|
484
|
+
coreEvents.emitFeedback('error', `Error discovering tool: '${funcDecl.name}' from MCP server '${mcpServerName}': ${error.message}`, error);
|
|
476
485
|
}
|
|
477
486
|
}
|
|
478
487
|
return discoveredTools;
|
|
@@ -480,7 +489,7 @@ export async function discoverTools(mcpServerName, mcpServerConfig, mcpClient, c
|
|
|
480
489
|
catch (error) {
|
|
481
490
|
if (error instanceof Error &&
|
|
482
491
|
!error.message?.includes('Method not found')) {
|
|
483
|
-
|
|
492
|
+
coreEvents.emitFeedback('error', `Error discovering tools from ${mcpServerName}: ${getErrorMessage(error)}`, error);
|
|
484
493
|
}
|
|
485
494
|
return [];
|
|
486
495
|
}
|
|
@@ -512,7 +521,7 @@ export async function discoverPrompts(mcpServerName, mcpClient, promptRegistry)
|
|
|
512
521
|
// Don't log an error if the method is not found, which is a common case.
|
|
513
522
|
if (error instanceof Error &&
|
|
514
523
|
!error.message?.includes('Method not found')) {
|
|
515
|
-
|
|
524
|
+
coreEvents.emitFeedback('error', `Error discovering prompts from ${mcpServerName}: ${getErrorMessage(error)}`, error);
|
|
516
525
|
}
|
|
517
526
|
return [];
|
|
518
527
|
}
|
|
@@ -540,7 +549,7 @@ export async function invokeMcpPrompt(mcpServerName, mcpClient, promptName, prom
|
|
|
540
549
|
catch (error) {
|
|
541
550
|
if (error instanceof Error &&
|
|
542
551
|
!error.message?.includes('Method not found')) {
|
|
543
|
-
|
|
552
|
+
coreEvents.emitFeedback('error', `Error invoking prompt '${promptName}' from ${mcpServerName} ${promptParams}: ${getErrorMessage(error)}`, error);
|
|
544
553
|
}
|
|
545
554
|
throw error;
|
|
546
555
|
}
|
|
@@ -642,11 +651,11 @@ export async function connectToMcpServer(mcpServerName, mcpServerConfig, debugMo
|
|
|
642
651
|
clientId: credentials.clientId,
|
|
643
652
|
});
|
|
644
653
|
if (hasStoredTokens) {
|
|
645
|
-
|
|
654
|
+
coreEvents.emitFeedback('error', `Stored OAuth token for SSE server '${mcpServerName}' was rejected. ` +
|
|
646
655
|
`Please re-authenticate using: /mcp auth ${mcpServerName}`);
|
|
647
656
|
}
|
|
648
657
|
else {
|
|
649
|
-
|
|
658
|
+
coreEvents.emitFeedback('error', `401 error received for SSE server '${mcpServerName}' without OAuth configuration. ` +
|
|
650
659
|
`Please authenticate using: /mcp auth ${mcpServerName}`);
|
|
651
660
|
}
|
|
652
661
|
}
|
|
@@ -701,35 +710,25 @@ export async function connectToMcpServer(mcpServerName, mcpServerConfig, debugMo
|
|
|
701
710
|
// Create transport with OAuth token
|
|
702
711
|
const oauthTransport = await createTransportWithOAuth(mcpServerName, mcpServerConfig, accessToken);
|
|
703
712
|
if (oauthTransport) {
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
return mcpClient;
|
|
710
|
-
}
|
|
711
|
-
catch (retryError) {
|
|
712
|
-
console.error(`Failed to connect with OAuth token: ${getErrorMessage(retryError)}`);
|
|
713
|
-
throw retryError;
|
|
714
|
-
}
|
|
713
|
+
await mcpClient.connect(oauthTransport, {
|
|
714
|
+
timeout: mcpServerConfig.timeout ?? MCP_DEFAULT_TIMEOUT_MSEC,
|
|
715
|
+
});
|
|
716
|
+
// Connection successful with OAuth
|
|
717
|
+
return mcpClient;
|
|
715
718
|
}
|
|
716
719
|
else {
|
|
717
|
-
console.error(`Failed to create OAuth transport for server '${mcpServerName}'`);
|
|
718
720
|
throw new Error(`Failed to create OAuth transport for server '${mcpServerName}'`);
|
|
719
721
|
}
|
|
720
722
|
}
|
|
721
723
|
else {
|
|
722
|
-
console.error(`Failed to get OAuth token for server '${mcpServerName}'`);
|
|
723
724
|
throw new Error(`Failed to get OAuth token for server '${mcpServerName}'`);
|
|
724
725
|
}
|
|
725
726
|
}
|
|
726
727
|
else {
|
|
727
|
-
console.error(`Failed to get credentials for server '${mcpServerName}' after successful OAuth authentication`);
|
|
728
728
|
throw new Error(`Failed to get credentials for server '${mcpServerName}' after successful OAuth authentication`);
|
|
729
729
|
}
|
|
730
730
|
}
|
|
731
731
|
else {
|
|
732
|
-
console.error(`Failed to handle automatic OAuth for server '${mcpServerName}'`);
|
|
733
732
|
throw new Error(`Failed to handle automatic OAuth for server '${mcpServerName}'`);
|
|
734
733
|
}
|
|
735
734
|
}
|
|
@@ -748,11 +747,11 @@ export async function connectToMcpServer(mcpServerName, mcpServerConfig, debugMo
|
|
|
748
747
|
clientId: credentials.clientId,
|
|
749
748
|
});
|
|
750
749
|
if (hasStoredTokens) {
|
|
751
|
-
|
|
750
|
+
coreEvents.emitFeedback('error', `Stored OAuth token for SSE server '${mcpServerName}' was rejected. ` +
|
|
752
751
|
`Please re-authenticate using: /mcp auth ${mcpServerName}`);
|
|
753
752
|
}
|
|
754
753
|
else {
|
|
755
|
-
|
|
754
|
+
coreEvents.emitFeedback('error', `401 error received for SSE server '${mcpServerName}' without OAuth configuration. ` +
|
|
756
755
|
`Please authenticate using: /mcp auth ${mcpServerName}`);
|
|
757
756
|
}
|
|
758
757
|
}
|
|
@@ -764,76 +763,59 @@ export async function connectToMcpServer(mcpServerName, mcpServerConfig, debugMo
|
|
|
764
763
|
if (hasNetworkTransport(mcpServerConfig)) {
|
|
765
764
|
const serverUrl = new URL(mcpServerConfig.httpUrl || mcpServerConfig.url);
|
|
766
765
|
const baseUrl = `${serverUrl.protocol}//${serverUrl.host}`;
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
// Connection successful with OAuth
|
|
803
|
-
return mcpClient;
|
|
804
|
-
}
|
|
805
|
-
catch (retryError) {
|
|
806
|
-
console.error(`Failed to connect with OAuth token: ${getErrorMessage(retryError)}`);
|
|
807
|
-
throw retryError;
|
|
808
|
-
}
|
|
809
|
-
}
|
|
810
|
-
else {
|
|
811
|
-
console.error(`Failed to create OAuth transport for server '${mcpServerName}'`);
|
|
812
|
-
throw new Error(`Failed to create OAuth transport for server '${mcpServerName}'`);
|
|
813
|
-
}
|
|
766
|
+
// Try to discover OAuth configuration from the base URL
|
|
767
|
+
const oauthConfig = await OAuthUtils.discoverOAuthConfig(baseUrl);
|
|
768
|
+
if (oauthConfig) {
|
|
769
|
+
debugLogger.log(`Discovered OAuth configuration from base URL for server '${mcpServerName}'`);
|
|
770
|
+
// Create OAuth configuration for authentication
|
|
771
|
+
const oauthAuthConfig = {
|
|
772
|
+
enabled: true,
|
|
773
|
+
authorizationUrl: oauthConfig.authorizationUrl,
|
|
774
|
+
tokenUrl: oauthConfig.tokenUrl,
|
|
775
|
+
scopes: oauthConfig.scopes || [],
|
|
776
|
+
};
|
|
777
|
+
// Perform OAuth authentication
|
|
778
|
+
// Pass the server URL for proper discovery
|
|
779
|
+
const authServerUrl = mcpServerConfig.httpUrl || mcpServerConfig.url;
|
|
780
|
+
debugLogger.log(`Starting OAuth authentication for server '${mcpServerName}'...`);
|
|
781
|
+
const authProvider = new MCPOAuthProvider(new MCPOAuthTokenStorage());
|
|
782
|
+
await authProvider.authenticate(mcpServerName, oauthAuthConfig, authServerUrl);
|
|
783
|
+
// Retry connection with OAuth token
|
|
784
|
+
const tokenStorage = new MCPOAuthTokenStorage();
|
|
785
|
+
const credentials = await tokenStorage.getCredentials(mcpServerName);
|
|
786
|
+
if (credentials) {
|
|
787
|
+
const authProvider = new MCPOAuthProvider(tokenStorage);
|
|
788
|
+
const accessToken = await authProvider.getValidToken(mcpServerName, {
|
|
789
|
+
// Pass client ID if available
|
|
790
|
+
clientId: credentials.clientId,
|
|
791
|
+
});
|
|
792
|
+
if (accessToken) {
|
|
793
|
+
// Create transport with OAuth token
|
|
794
|
+
const oauthTransport = await createTransportWithOAuth(mcpServerName, mcpServerConfig, accessToken);
|
|
795
|
+
if (oauthTransport) {
|
|
796
|
+
await mcpClient.connect(oauthTransport, {
|
|
797
|
+
timeout: mcpServerConfig.timeout ?? MCP_DEFAULT_TIMEOUT_MSEC,
|
|
798
|
+
});
|
|
799
|
+
// Connection successful with OAuth
|
|
800
|
+
return mcpClient;
|
|
814
801
|
}
|
|
815
802
|
else {
|
|
816
|
-
|
|
817
|
-
throw new Error(`Failed to get OAuth token for server '${mcpServerName}'`);
|
|
803
|
+
throw new Error(`Failed to create OAuth transport for server '${mcpServerName}'`);
|
|
818
804
|
}
|
|
819
805
|
}
|
|
820
806
|
else {
|
|
821
|
-
|
|
822
|
-
throw new Error(`Failed to get stored credentials for server '${mcpServerName}'`);
|
|
807
|
+
throw new Error(`Failed to get OAuth token for server '${mcpServerName}'`);
|
|
823
808
|
}
|
|
824
809
|
}
|
|
825
810
|
else {
|
|
826
|
-
|
|
827
|
-
throw new Error(`OAuth configuration failed for '${mcpServerName}'. Please authenticate manually with /mcp auth ${mcpServerName}`);
|
|
811
|
+
throw new Error(`Failed to get stored credentials for server '${mcpServerName}'`);
|
|
828
812
|
}
|
|
829
813
|
}
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
throw discoveryError;
|
|
814
|
+
else {
|
|
815
|
+
throw new Error(`OAuth configuration failed for '${mcpServerName}'. Please authenticate manually with /mcp auth ${mcpServerName}`);
|
|
833
816
|
}
|
|
834
817
|
}
|
|
835
818
|
else {
|
|
836
|
-
console.error(`❌ '${mcpServerName}' requires authentication but no OAuth configuration found`);
|
|
837
819
|
throw new Error(`MCP server '${mcpServerName}' requires authentication. Please configure OAuth or check server settings.`);
|
|
838
820
|
}
|
|
839
821
|
}
|
|
@@ -896,8 +878,6 @@ export async function createTransport(mcpServerName, mcpServerConfig, debugMode)
|
|
|
896
878
|
const authProvider = new MCPOAuthProvider(tokenStorage);
|
|
897
879
|
accessToken = await authProvider.getValidToken(mcpServerName, mcpServerConfig.oauth);
|
|
898
880
|
if (!accessToken) {
|
|
899
|
-
console.error(`MCP server '${mcpServerName}' requires OAuth authentication. ` +
|
|
900
|
-
`Please authenticate using the /mcp auth command.`);
|
|
901
881
|
throw new Error(`MCP server '${mcpServerName}' requires OAuth authentication. ` +
|
|
902
882
|
`Please authenticate using the /mcp auth command.`);
|
|
903
883
|
}
|