@1mcp/agent 0.27.4 → 0.28.1
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/build/commands/app/consolidate.js +1 -1
- package/build/commands/app/consolidate.js.map +1 -1
- package/build/commands/mcp/add.js +1 -1
- package/build/commands/mcp/add.js.map +1 -1
- package/build/commands/mcp/enable.js +1 -1
- package/build/commands/mcp/enable.js.map +1 -1
- package/build/commands/mcp/index.d.ts.map +1 -1
- package/build/commands/mcp/index.js +64 -1
- package/build/commands/mcp/index.js.map +1 -1
- package/build/commands/mcp/install.d.ts +28 -0
- package/build/commands/mcp/install.d.ts.map +1 -0
- package/build/commands/mcp/install.js +472 -0
- package/build/commands/mcp/install.js.map +1 -0
- package/build/commands/mcp/list.d.ts +3 -0
- package/build/commands/mcp/list.d.ts.map +1 -1
- package/build/commands/mcp/list.js +49 -4
- package/build/commands/mcp/list.js.map +1 -1
- package/build/commands/mcp/remove.js +1 -1
- package/build/commands/mcp/remove.js.map +1 -1
- package/build/commands/mcp/status.js +1 -1
- package/build/commands/mcp/status.js.map +1 -1
- package/build/commands/mcp/tokens.js +1 -1
- package/build/commands/mcp/tokens.js.map +1 -1
- package/build/commands/mcp/uninstall.d.ts +28 -0
- package/build/commands/mcp/uninstall.d.ts.map +1 -0
- package/build/commands/mcp/uninstall.js +103 -0
- package/build/commands/mcp/uninstall.js.map +1 -0
- package/build/commands/mcp/update.d.ts +16 -1
- package/build/commands/mcp/update.d.ts.map +1 -1
- package/build/commands/mcp/update.js +33 -2
- package/build/commands/mcp/update.js.map +1 -1
- package/build/commands/mcp/utils/installWizard.d.ts +35 -0
- package/build/commands/mcp/utils/installWizard.d.ts.map +1 -0
- package/build/commands/mcp/utils/installWizard.js +137 -0
- package/build/commands/mcp/utils/installWizard.js.map +1 -0
- package/build/commands/mcp/utils/mcpServerConfig.d.ts +31 -0
- package/build/commands/mcp/utils/mcpServerConfig.d.ts.map +1 -0
- package/build/commands/mcp/utils/mcpServerConfig.js +79 -0
- package/build/commands/mcp/utils/mcpServerConfig.js.map +1 -0
- package/build/commands/mcp/utils/serverUtils.d.ts +40 -0
- package/build/commands/mcp/utils/serverUtils.d.ts.map +1 -0
- package/build/commands/mcp/utils/serverUtils.js +103 -0
- package/build/commands/mcp/utils/serverUtils.js.map +1 -0
- package/build/commands/mcp/wizard/components/serverDetailsDisplay.d.ts +14 -0
- package/build/commands/mcp/wizard/components/serverDetailsDisplay.d.ts.map +1 -0
- package/build/commands/mcp/wizard/components/serverDetailsDisplay.js +56 -0
- package/build/commands/mcp/wizard/components/serverDetailsDisplay.js.map +1 -0
- package/build/commands/mcp/wizard/components/stepIndicator.d.ts +11 -0
- package/build/commands/mcp/wizard/components/stepIndicator.d.ts.map +1 -0
- package/build/commands/mcp/wizard/components/stepIndicator.js +38 -0
- package/build/commands/mcp/wizard/components/stepIndicator.js.map +1 -0
- package/build/commands/mcp/wizard/components/welcomeScreen.d.ts +5 -0
- package/build/commands/mcp/wizard/components/welcomeScreen.d.ts.map +1 -0
- package/build/commands/mcp/wizard/components/welcomeScreen.js +25 -0
- package/build/commands/mcp/wizard/components/welcomeScreen.js.map +1 -0
- package/build/commands/mcp/wizard/configuration.d.ts +31 -0
- package/build/commands/mcp/wizard/configuration.d.ts.map +1 -0
- package/build/commands/mcp/wizard/configuration.js +360 -0
- package/build/commands/mcp/wizard/configuration.js.map +1 -0
- package/build/commands/mcp/wizard/display.d.ts +31 -0
- package/build/commands/mcp/wizard/display.d.ts.map +1 -0
- package/build/commands/mcp/wizard/display.js +131 -0
- package/build/commands/mcp/wizard/display.js.map +1 -0
- package/build/commands/mcp/wizard/index.d.ts +8 -0
- package/build/commands/mcp/wizard/index.d.ts.map +1 -0
- package/build/commands/mcp/wizard/index.js +10 -0
- package/build/commands/mcp/wizard/index.js.map +1 -0
- package/build/commands/mcp/wizard/metadata.d.ts +48 -0
- package/build/commands/mcp/wizard/metadata.d.ts.map +1 -0
- package/build/commands/mcp/wizard/metadata.js +126 -0
- package/build/commands/mcp/wizard/metadata.js.map +1 -0
- package/build/commands/mcp/wizard/navigation/keyboardHandler.d.ts +14 -0
- package/build/commands/mcp/wizard/navigation/keyboardHandler.d.ts.map +1 -0
- package/build/commands/mcp/wizard/navigation/keyboardHandler.js +99 -0
- package/build/commands/mcp/wizard/navigation/keyboardHandler.js.map +1 -0
- package/build/commands/mcp/wizard/navigation.d.ts +12 -0
- package/build/commands/mcp/wizard/navigation.d.ts.map +1 -0
- package/build/commands/mcp/wizard/navigation.js +99 -0
- package/build/commands/mcp/wizard/navigation.js.map +1 -0
- package/build/commands/mcp/wizard/search.d.ts +23 -0
- package/build/commands/mcp/wizard/search.d.ts.map +1 -0
- package/build/commands/mcp/wizard/search.js +101 -0
- package/build/commands/mcp/wizard/search.js.map +1 -0
- package/build/commands/mcp/wizard/selection.d.ts +14 -0
- package/build/commands/mcp/wizard/selection.d.ts.map +1 -0
- package/build/commands/mcp/wizard/selection.js +40 -0
- package/build/commands/mcp/wizard/selection.js.map +1 -0
- package/build/commands/registry/search.d.ts +1 -1
- package/build/commands/registry/search.d.ts.map +1 -1
- package/build/commands/registry/search.js +10 -7
- package/build/commands/registry/search.js.map +1 -1
- package/build/commands/serve/index.d.ts +10 -0
- package/build/commands/serve/index.d.ts.map +1 -1
- package/build/commands/serve/index.js +28 -1
- package/build/commands/serve/index.js.map +1 -1
- package/build/commands/serve/serve.d.ts +2 -0
- package/build/commands/serve/serve.d.ts.map +1 -1
- package/build/commands/serve/serve.js +33 -8
- package/build/commands/serve/serve.js.map +1 -1
- package/build/commands/shared/{configUtils.d.ts → baseConfigUtils.d.ts} +1 -1
- package/build/commands/shared/baseConfigUtils.d.ts.map +1 -0
- package/build/commands/shared/{configUtils.js → baseConfigUtils.js} +1 -1
- package/build/commands/shared/baseConfigUtils.js.map +1 -0
- package/build/config/configManager.d.ts +125 -0
- package/build/config/configManager.d.ts.map +1 -0
- package/build/config/configManager.js +412 -0
- package/build/config/configManager.js.map +1 -0
- package/build/constants/mcp.d.ts +1 -1
- package/build/constants/mcp.js +1 -1
- package/build/core/capabilities/asyncLoadingOrchestrator.d.ts +1 -1
- package/build/core/capabilities/asyncLoadingOrchestrator.d.ts.map +1 -1
- package/build/core/capabilities/asyncLoadingOrchestrator.js +6 -1
- package/build/core/capabilities/asyncLoadingOrchestrator.js.map +1 -1
- package/build/core/capabilities/capabilityAggregator.d.ts +1 -0
- package/build/core/capabilities/capabilityAggregator.d.ts.map +1 -1
- package/build/core/capabilities/capabilityAggregator.js +21 -0
- package/build/core/capabilities/capabilityAggregator.js.map +1 -1
- package/build/core/capabilities/capabilityManager.d.ts +3 -10
- package/build/core/capabilities/capabilityManager.d.ts.map +1 -1
- package/build/core/capabilities/internal/discoveryTools.d.ts +28 -0
- package/build/core/capabilities/internal/discoveryTools.d.ts.map +1 -0
- package/build/core/capabilities/internal/discoveryTools.js +84 -0
- package/build/core/capabilities/internal/discoveryTools.js.map +1 -0
- package/build/core/capabilities/internal/installationTools.d.ts +20 -0
- package/build/core/capabilities/internal/installationTools.d.ts.map +1 -0
- package/build/core/capabilities/internal/installationTools.js +50 -0
- package/build/core/capabilities/internal/installationTools.js.map +1 -0
- package/build/core/capabilities/internal/managementTools.d.ts +32 -0
- package/build/core/capabilities/internal/managementTools.d.ts.map +1 -0
- package/build/core/capabilities/internal/managementTools.js +94 -0
- package/build/core/capabilities/internal/managementTools.js.map +1 -0
- package/build/core/capabilities/internalCapabilitiesProvider.d.ts +41 -0
- package/build/core/capabilities/internalCapabilitiesProvider.d.ts.map +1 -0
- package/build/core/capabilities/internalCapabilitiesProvider.js +275 -0
- package/build/core/capabilities/internalCapabilitiesProvider.js.map +1 -0
- package/build/core/client/clientManager.d.ts +5 -0
- package/build/core/client/clientManager.d.ts.map +1 -1
- package/build/core/client/clientManager.js +34 -0
- package/build/core/client/clientManager.js.map +1 -1
- package/build/core/configChangeHandler.d.ts +78 -0
- package/build/core/configChangeHandler.d.ts.map +1 -0
- package/build/core/configChangeHandler.js +310 -0
- package/build/core/configChangeHandler.js.map +1 -0
- package/build/core/flags/flagManager.d.ts +90 -0
- package/build/core/flags/flagManager.d.ts.map +1 -0
- package/build/core/flags/flagManager.js +209 -0
- package/build/core/flags/flagManager.js.map +1 -0
- package/build/core/protocol/requestHandlers.d.ts.map +1 -1
- package/build/core/protocol/requestHandlers.js +32 -1
- package/build/core/protocol/requestHandlers.js.map +1 -1
- package/build/core/server/agentConfig.d.ts +20 -0
- package/build/core/server/agentConfig.d.ts.map +1 -1
- package/build/core/server/agentConfig.js +40 -0
- package/build/core/server/agentConfig.js.map +1 -1
- package/build/core/server/pidFileManager.d.ts +14 -1
- package/build/core/server/pidFileManager.d.ts.map +1 -1
- package/build/core/server/pidFileManager.js +24 -2
- package/build/core/server/pidFileManager.js.map +1 -1
- package/build/core/server/serverManager.d.ts +46 -1
- package/build/core/server/serverManager.d.ts.map +1 -1
- package/build/core/server/serverManager.js +260 -3
- package/build/core/server/serverManager.js.map +1 -1
- package/build/core/tools/handlers/searchHandler.js +1 -1
- package/build/core/tools/handlers/searchHandler.js.map +1 -1
- package/build/core/tools/handlers/serverManagementHandler.d.ts +262 -0
- package/build/core/tools/handlers/serverManagementHandler.d.ts.map +1 -0
- package/build/core/tools/handlers/serverManagementHandler.js +430 -0
- package/build/core/tools/handlers/serverManagementHandler.js.map +1 -0
- package/build/core/tools/internal/adapters/discoveryAdapter.d.ts +148 -0
- package/build/core/tools/internal/adapters/discoveryAdapter.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/discoveryAdapter.js +163 -0
- package/build/core/tools/internal/adapters/discoveryAdapter.js.map +1 -0
- package/build/core/tools/internal/adapters/helpers/configTransformers.d.ts +62 -0
- package/build/core/tools/internal/adapters/helpers/configTransformers.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/helpers/configTransformers.js +79 -0
- package/build/core/tools/internal/adapters/helpers/configTransformers.js.map +1 -0
- package/build/core/tools/internal/adapters/index.d.ts +58 -0
- package/build/core/tools/internal/adapters/index.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/index.js +85 -0
- package/build/core/tools/internal/adapters/index.js.map +1 -0
- package/build/core/tools/internal/adapters/installation/directInstallation.d.ts +16 -0
- package/build/core/tools/internal/adapters/installation/directInstallation.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/installation/directInstallation.js +103 -0
- package/build/core/tools/internal/adapters/installation/directInstallation.js.map +1 -0
- package/build/core/tools/internal/adapters/installation/packageResolver.d.ts +7 -0
- package/build/core/tools/internal/adapters/installation/packageResolver.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/installation/packageResolver.js +86 -0
- package/build/core/tools/internal/adapters/installation/packageResolver.js.map +1 -0
- package/build/core/tools/internal/adapters/installation/types.d.ts +100 -0
- package/build/core/tools/internal/adapters/installation/types.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/installation/types.js +2 -0
- package/build/core/tools/internal/adapters/installation/types.js.map +1 -0
- package/build/core/tools/internal/adapters/installationAdapter.d.ts +89 -0
- package/build/core/tools/internal/adapters/installationAdapter.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/installationAdapter.js +335 -0
- package/build/core/tools/internal/adapters/installationAdapter.js.map +1 -0
- package/build/core/tools/internal/adapters/management/index.d.ts +5 -0
- package/build/core/tools/internal/adapters/management/index.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/management/index.js +5 -0
- package/build/core/tools/internal/adapters/management/index.js.map +1 -0
- package/build/core/tools/internal/adapters/management/managementAdapter.d.ts +51 -0
- package/build/core/tools/internal/adapters/management/managementAdapter.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/management/managementAdapter.js +402 -0
- package/build/core/tools/internal/adapters/management/managementAdapter.js.map +1 -0
- package/build/core/tools/internal/adapters/management/toolHandlers.d.ts +6 -0
- package/build/core/tools/internal/adapters/management/toolHandlers.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/management/toolHandlers.js +154 -0
- package/build/core/tools/internal/adapters/management/toolHandlers.js.map +1 -0
- package/build/core/tools/internal/adapters/management/types.d.ts +179 -0
- package/build/core/tools/internal/adapters/management/types.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/management/types.js +2 -0
- package/build/core/tools/internal/adapters/management/types.js.map +1 -0
- package/build/core/tools/internal/adapters/management/validation.d.ts +9 -0
- package/build/core/tools/internal/adapters/management/validation.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/management/validation.js +204 -0
- package/build/core/tools/internal/adapters/management/validation.js.map +1 -0
- package/build/core/tools/internal/adapters/validation/configValidation.d.ts +22 -0
- package/build/core/tools/internal/adapters/validation/configValidation.d.ts.map +1 -0
- package/build/core/tools/internal/adapters/validation/configValidation.js +185 -0
- package/build/core/tools/internal/adapters/validation/configValidation.js.map +1 -0
- package/build/core/tools/internal/discoveryHandlers.d.ts +26 -0
- package/build/core/tools/internal/discoveryHandlers.d.ts.map +1 -0
- package/build/core/tools/internal/discoveryHandlers.js +283 -0
- package/build/core/tools/internal/discoveryHandlers.js.map +1 -0
- package/build/core/tools/internal/index.d.ts +279 -0
- package/build/core/tools/internal/index.d.ts.map +1 -0
- package/build/core/tools/internal/index.js +236 -0
- package/build/core/tools/internal/index.js.map +1 -0
- package/build/core/tools/internal/installationHandlers.d.ts +18 -0
- package/build/core/tools/internal/installationHandlers.d.ts.map +1 -0
- package/build/core/tools/internal/installationHandlers.js +314 -0
- package/build/core/tools/internal/installationHandlers.js.map +1 -0
- package/build/core/tools/internal/managementHandlers.d.ts +26 -0
- package/build/core/tools/internal/managementHandlers.d.ts.map +1 -0
- package/build/core/tools/internal/managementHandlers.js +306 -0
- package/build/core/tools/internal/managementHandlers.js.map +1 -0
- package/build/core/tools/internal/schemas/discovery.d.ts +233 -0
- package/build/core/tools/internal/schemas/discovery.d.ts.map +1 -0
- package/build/core/tools/internal/schemas/discovery.js +189 -0
- package/build/core/tools/internal/schemas/discovery.js.map +1 -0
- package/build/core/tools/internal/schemas/edit.d.ts +96 -0
- package/build/core/tools/internal/schemas/edit.d.ts.map +1 -0
- package/build/core/tools/internal/schemas/edit.js +76 -0
- package/build/core/tools/internal/schemas/edit.js.map +1 -0
- package/build/core/tools/internal/schemas/index.d.ts +629 -0
- package/build/core/tools/internal/schemas/index.d.ts.map +1 -0
- package/build/core/tools/internal/schemas/index.js +158 -0
- package/build/core/tools/internal/schemas/index.js.map +1 -0
- package/build/core/tools/internal/schemas/installation.d.ts +210 -0
- package/build/core/tools/internal/schemas/installation.d.ts.map +1 -0
- package/build/core/tools/internal/schemas/installation.js +212 -0
- package/build/core/tools/internal/schemas/installation.js.map +1 -0
- package/build/core/tools/internal/schemas/management.d.ts +232 -0
- package/build/core/tools/internal/schemas/management.d.ts.map +1 -0
- package/build/core/tools/internal/schemas/management.js +188 -0
- package/build/core/tools/internal/schemas/management.js.map +1 -0
- package/build/core/tools/internal/toolHandlers.d.ts +7 -0
- package/build/core/tools/internal/toolHandlers.d.ts.map +1 -0
- package/build/core/tools/internal/toolHandlers.js +8 -0
- package/build/core/tools/internal/toolHandlers.js.map +1 -0
- package/build/core/tools/internal/toolSchemas.d.ts +16 -0
- package/build/core/tools/internal/toolSchemas.d.ts.map +1 -0
- package/build/core/tools/internal/toolSchemas.js +22 -0
- package/build/core/tools/internal/toolSchemas.js.map +1 -0
- package/build/domains/installation/configurators/cliArgsConfigurator.d.ts +7 -0
- package/build/domains/installation/configurators/cliArgsConfigurator.d.ts.map +1 -0
- package/build/domains/installation/configurators/cliArgsConfigurator.js +146 -0
- package/build/domains/installation/configurators/cliArgsConfigurator.js.map +1 -0
- package/build/domains/installation/configurators/envVarConfigurator.d.ts +7 -0
- package/build/domains/installation/configurators/envVarConfigurator.d.ts.map +1 -0
- package/build/domains/installation/configurators/envVarConfigurator.js +122 -0
- package/build/domains/installation/configurators/envVarConfigurator.js.map +1 -0
- package/build/domains/installation/configurators/tagsConfigurator.d.ts +23 -0
- package/build/domains/installation/configurators/tagsConfigurator.d.ts.map +1 -0
- package/build/domains/installation/configurators/tagsConfigurator.js +46 -0
- package/build/domains/installation/configurators/tagsConfigurator.js.map +1 -0
- package/build/domains/installation/index.d.ts +12 -0
- package/build/domains/installation/index.d.ts.map +1 -0
- package/build/domains/installation/index.js +16 -0
- package/build/domains/installation/index.js.map +1 -0
- package/build/domains/installation/metadata/defaultsProvider.d.ts +12 -0
- package/build/domains/installation/metadata/defaultsProvider.d.ts.map +1 -0
- package/build/domains/installation/metadata/defaultsProvider.js +43 -0
- package/build/domains/installation/metadata/defaultsProvider.js.map +1 -0
- package/build/domains/installation/metadata/metadataExtractor.d.ts +11 -0
- package/build/domains/installation/metadata/metadataExtractor.d.ts.map +1 -0
- package/build/domains/installation/metadata/metadataExtractor.js +59 -0
- package/build/domains/installation/metadata/metadataExtractor.js.map +1 -0
- package/build/domains/installation/types.d.ts +27 -0
- package/build/domains/installation/types.d.ts.map +1 -0
- package/build/domains/installation/types.js +5 -0
- package/build/domains/installation/types.js.map +1 -0
- package/build/domains/installation/validators/conflictDetector.d.ts +24 -0
- package/build/domains/installation/validators/conflictDetector.d.ts.map +1 -0
- package/build/domains/installation/validators/conflictDetector.js +41 -0
- package/build/domains/installation/validators/conflictDetector.js.map +1 -0
- package/build/domains/installation/validators/serverNameValidator.d.ts +17 -0
- package/build/domains/installation/validators/serverNameValidator.d.ts.map +1 -0
- package/build/domains/installation/validators/serverNameValidator.js +58 -0
- package/build/domains/installation/validators/serverNameValidator.js.map +1 -0
- package/build/domains/registry/formatters/serverDetailFormatter.js +22 -9
- package/build/domains/registry/formatters/serverDetailFormatter.js.map +1 -1
- package/build/domains/registry/mcpRegistryClient.d.ts.map +1 -1
- package/build/domains/registry/mcpRegistryClient.js +46 -18
- package/build/domains/registry/mcpRegistryClient.js.map +1 -1
- package/build/domains/registry/mcpToolSchemas.d.ts +2 -2
- package/build/domains/registry/mcpToolSchemas.d.ts.map +1 -1
- package/build/domains/registry/mcpToolSchemas.js +1 -1
- package/build/domains/registry/mcpToolSchemas.js.map +1 -1
- package/build/domains/registry/types.d.ts +2 -3
- package/build/domains/registry/types.d.ts.map +1 -1
- package/build/domains/server-management/index.d.ts +11 -0
- package/build/domains/server-management/index.d.ts.map +1 -0
- package/build/domains/server-management/index.js +13 -0
- package/build/domains/server-management/index.js.map +1 -0
- package/build/domains/server-management/progressTrackingService.d.ts +49 -0
- package/build/domains/server-management/progressTrackingService.d.ts.map +1 -0
- package/build/domains/server-management/progressTrackingService.js +102 -0
- package/build/domains/server-management/progressTrackingService.js.map +1 -0
- package/build/domains/server-management/serverInstallationService.d.ts +48 -0
- package/build/domains/server-management/serverInstallationService.d.ts.map +1 -0
- package/build/domains/server-management/serverInstallationService.js +299 -0
- package/build/domains/server-management/serverInstallationService.js.map +1 -0
- package/build/domains/server-management/services/versionResolver.d.ts +36 -0
- package/build/domains/server-management/services/versionResolver.d.ts.map +1 -0
- package/build/domains/server-management/services/versionResolver.js +74 -0
- package/build/domains/server-management/services/versionResolver.js.map +1 -0
- package/build/domains/server-management/types.d.ts +215 -0
- package/build/domains/server-management/types.d.ts.map +1 -0
- package/build/domains/server-management/types.js +28 -0
- package/build/domains/server-management/types.js.map +1 -0
- package/build/server.d.ts +1 -1
- package/build/server.d.ts.map +1 -1
- package/build/server.js +18 -12
- package/build/server.js.map +1 -1
- package/build/transport/http/middlewares/mcpAvailabilityMiddleware.js +2 -2
- package/build/transport/http/middlewares/mcpAvailabilityMiddleware.js.map +1 -1
- package/build/utils/schemaUtils.d.ts +25 -0
- package/build/utils/schemaUtils.d.ts.map +1 -0
- package/build/utils/schemaUtils.js +43 -0
- package/build/utils/schemaUtils.js.map +1 -0
- package/package.json +5 -4
- package/build/application/services/configReloadService.d.ts +0 -55
- package/build/application/services/configReloadService.d.ts.map +0 -1
- package/build/application/services/configReloadService.js +0 -195
- package/build/application/services/configReloadService.js.map +0 -1
- package/build/commands/mcp/utils/configUtils.d.ts +0 -71
- package/build/commands/mcp/utils/configUtils.d.ts.map +0 -1
- package/build/commands/mcp/utils/configUtils.js +0 -326
- package/build/commands/mcp/utils/configUtils.js.map +0 -1
- package/build/commands/shared/configUtils.d.ts.map +0 -1
- package/build/commands/shared/configUtils.js.map +0 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
/**
|
|
3
|
+
* Progress tracking service for server management operations
|
|
4
|
+
* Provides step-by-step progress indicators with dynamic progress bars
|
|
5
|
+
*/
|
|
6
|
+
export interface OperationProgress {
|
|
7
|
+
operationId: string;
|
|
8
|
+
operationType: string;
|
|
9
|
+
currentStep: number;
|
|
10
|
+
totalSteps: number;
|
|
11
|
+
stepName: string;
|
|
12
|
+
progress: number;
|
|
13
|
+
message?: string;
|
|
14
|
+
startedAt: Date;
|
|
15
|
+
updatedAt: Date;
|
|
16
|
+
}
|
|
17
|
+
export interface OperationResult {
|
|
18
|
+
success: boolean;
|
|
19
|
+
operationId: string;
|
|
20
|
+
duration: number;
|
|
21
|
+
message?: string;
|
|
22
|
+
error?: Error;
|
|
23
|
+
}
|
|
24
|
+
export type OperationType = 'install' | 'update' | 'uninstall' | 'search';
|
|
25
|
+
export declare class ProgressTrackingService extends EventEmitter {
|
|
26
|
+
private operations;
|
|
27
|
+
/**
|
|
28
|
+
* Start tracking an operation
|
|
29
|
+
*/
|
|
30
|
+
startOperation(operationId: string, operationType: OperationType, totalSteps?: number): void;
|
|
31
|
+
/**
|
|
32
|
+
* Update progress for an operation
|
|
33
|
+
*/
|
|
34
|
+
updateProgress(operationId: string, currentStep: number, stepName: string, message?: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* Complete an operation
|
|
37
|
+
*/
|
|
38
|
+
completeOperation(operationId: string, result?: OperationResult): void;
|
|
39
|
+
/**
|
|
40
|
+
* Fail an operation
|
|
41
|
+
*/
|
|
42
|
+
failOperation(operationId: string, error: Error): void;
|
|
43
|
+
/**
|
|
44
|
+
* Get operation status
|
|
45
|
+
*/
|
|
46
|
+
getOperationStatus(operationId: string): OperationProgress | undefined;
|
|
47
|
+
}
|
|
48
|
+
export declare function getProgressTrackingService(): ProgressTrackingService;
|
|
49
|
+
//# sourceMappingURL=progressTrackingService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progressTrackingService.d.ts","sourceRoot":"","sources":["../../../src/domains/server-management/progressTrackingService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC;;;GAGG;AAEH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE1E,qBAAa,uBAAwB,SAAQ,YAAY;IACvD,OAAO,CAAC,UAAU,CAA6C;IAE/D;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,GAAE,MAAU,GAAG,IAAI;IAoB/F;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAuBlG;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI;IAsBtE;;OAEG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAuBtD;;OAEG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;CAGvE;AAOD,wBAAgB,0BAA0B,IAAI,uBAAuB,CAKpE"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import logger from '../../logger/logger.js';
|
|
3
|
+
export class ProgressTrackingService extends EventEmitter {
|
|
4
|
+
operations = new Map();
|
|
5
|
+
/**
|
|
6
|
+
* Start tracking an operation
|
|
7
|
+
*/
|
|
8
|
+
startOperation(operationId, operationType, totalSteps = 5) {
|
|
9
|
+
const progress = {
|
|
10
|
+
operationId,
|
|
11
|
+
operationType,
|
|
12
|
+
currentStep: 0,
|
|
13
|
+
totalSteps,
|
|
14
|
+
stepName: 'Initializing...',
|
|
15
|
+
progress: 0,
|
|
16
|
+
startedAt: new Date(),
|
|
17
|
+
updatedAt: new Date(),
|
|
18
|
+
};
|
|
19
|
+
this.operations.set(operationId, progress);
|
|
20
|
+
this.emit('operation-started', progress);
|
|
21
|
+
logger.info(`🚀 ${operationType.charAt(0).toUpperCase() + operationType.slice(1)} operation started: ${operationId}`);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Update progress for an operation
|
|
25
|
+
*/
|
|
26
|
+
updateProgress(operationId, currentStep, stepName, message) {
|
|
27
|
+
const progress = this.operations.get(operationId);
|
|
28
|
+
if (!progress) {
|
|
29
|
+
logger.warn(`No progress tracked for operation: ${operationId}`);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const newProgress = progress.totalSteps > 0 ? Math.round((currentStep / progress.totalSteps) * 100) : 0;
|
|
33
|
+
progress.currentStep = currentStep;
|
|
34
|
+
progress.stepName = stepName;
|
|
35
|
+
progress.progress = Math.max(0, Math.min(100, newProgress));
|
|
36
|
+
progress.message = message;
|
|
37
|
+
progress.updatedAt = new Date();
|
|
38
|
+
this.emit('progress-updated', progress);
|
|
39
|
+
const progressPercentage = Math.max(0, Math.min(100, newProgress));
|
|
40
|
+
const progressBarWidth = Math.floor(progressPercentage / 5);
|
|
41
|
+
const progressBar = '█'.repeat(Math.max(0, progressBarWidth)) + '░'.repeat(Math.max(0, 20 - progressBarWidth));
|
|
42
|
+
logger.info(` [${progressBar}] ${progressPercentage}% - ${stepName}`);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Complete an operation
|
|
46
|
+
*/
|
|
47
|
+
completeOperation(operationId, result) {
|
|
48
|
+
const progress = this.operations.get(operationId);
|
|
49
|
+
if (!progress) {
|
|
50
|
+
logger.warn(`No progress tracked for operation: ${operationId}`);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const duration = new Date().getTime() - progress.startedAt.getTime();
|
|
54
|
+
const operationResult = {
|
|
55
|
+
success: true,
|
|
56
|
+
operationId,
|
|
57
|
+
duration,
|
|
58
|
+
...result,
|
|
59
|
+
};
|
|
60
|
+
this.emit('operation-completed', operationResult);
|
|
61
|
+
this.operations.delete(operationId);
|
|
62
|
+
logger.info(`✅ Operation completed in ${duration}ms: ${operationId}`);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Fail an operation
|
|
66
|
+
*/
|
|
67
|
+
failOperation(operationId, error) {
|
|
68
|
+
const progress = this.operations.get(operationId);
|
|
69
|
+
if (!progress) {
|
|
70
|
+
logger.warn(`No progress tracked for operation: ${operationId}`);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const duration = new Date().getTime() - progress.startedAt.getTime();
|
|
74
|
+
const operationResult = {
|
|
75
|
+
success: false,
|
|
76
|
+
operationId,
|
|
77
|
+
duration,
|
|
78
|
+
error,
|
|
79
|
+
message: error.message,
|
|
80
|
+
};
|
|
81
|
+
this.emit('operation-failed', operationResult);
|
|
82
|
+
this.operations.delete(operationId);
|
|
83
|
+
logger.error(`❌ Operation failed after ${duration}ms: ${operationId} - ${error.message}`);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get operation status
|
|
87
|
+
*/
|
|
88
|
+
getOperationStatus(operationId) {
|
|
89
|
+
return this.operations.get(operationId);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Singleton instance of progress tracking service
|
|
94
|
+
*/
|
|
95
|
+
let progressTrackingServiceInstance = null;
|
|
96
|
+
export function getProgressTrackingService() {
|
|
97
|
+
if (!progressTrackingServiceInstance) {
|
|
98
|
+
progressTrackingServiceInstance = new ProgressTrackingService();
|
|
99
|
+
}
|
|
100
|
+
return progressTrackingServiceInstance;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=progressTrackingService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progressTrackingService.js","sourceRoot":"","sources":["../../../src/domains/server-management/progressTrackingService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { InstallOptions, InstallResult, ListOptions, UninstallOptions, UninstallResult, UpdateCheckResult, UpdateOptions, UpdateResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Server installation service
|
|
4
|
+
* Handles install, update, uninstall, and status operations for MCP servers
|
|
5
|
+
*/
|
|
6
|
+
export declare class ServerInstallationService {
|
|
7
|
+
private registryClient;
|
|
8
|
+
private progressTracker;
|
|
9
|
+
constructor();
|
|
10
|
+
/**
|
|
11
|
+
* Install a server from the registry
|
|
12
|
+
*/
|
|
13
|
+
installServer(serverName: string, version?: string, options?: InstallOptions): Promise<InstallResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Select appropriate installation endpoint (packages first, remotes fallback)
|
|
16
|
+
*/
|
|
17
|
+
private selectInstallationEndpoint;
|
|
18
|
+
/**
|
|
19
|
+
* Resolve server ID with fallback mechanism
|
|
20
|
+
* Tries direct lookup first, then search-based resolution if that fails
|
|
21
|
+
*/
|
|
22
|
+
private resolveServerById;
|
|
23
|
+
/**
|
|
24
|
+
* Create server configuration from registry data
|
|
25
|
+
*/
|
|
26
|
+
private createServerConfig;
|
|
27
|
+
/**
|
|
28
|
+
* Update a server to latest or specific version
|
|
29
|
+
*/
|
|
30
|
+
updateServer(serverName: string, version?: string, _options?: UpdateOptions): Promise<UpdateResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Uninstall a server
|
|
33
|
+
*/
|
|
34
|
+
uninstallServer(serverName: string, _options?: UninstallOptions): Promise<UninstallResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Check for available updates
|
|
37
|
+
*/
|
|
38
|
+
checkForUpdates(_serverNames?: string[]): Promise<UpdateCheckResult[]>;
|
|
39
|
+
/**
|
|
40
|
+
* List installed servers
|
|
41
|
+
*/
|
|
42
|
+
listInstalledServers(_options?: ListOptions): Promise<string[]>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create a server installation service instance
|
|
46
|
+
*/
|
|
47
|
+
export declare function createServerInstallationService(): ServerInstallationService;
|
|
48
|
+
//# sourceMappingURL=serverInstallationService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverInstallationService.d.ts","sourceRoot":"","sources":["../../../src/domains/server-management/serverInstallationService.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,eAAe,CAAC;;IAOxB;;OAEG;IACG,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAqE3G;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAiClC;;;OAGG;YACW,iBAAiB;IA8C/B;;OAEG;YACW,kBAAkB;IAoChC;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAyDzG;;OAEG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAkBhG;;OAEG;IACG,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA0C5E;;OAEG;IACG,oBAAoB,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAkBtE;AAED;;GAEG;AACH,wBAAgB,+BAA+B,IAAI,yBAAyB,CAE3E"}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import { getAllServers, getInstallationMetadata, getServer, setServer, } from '../../commands/mcp/utils/mcpServerConfig.js';
|
|
2
|
+
import logger from '../../logger/logger.js';
|
|
3
|
+
import { createRegistryClient } from '../registry/mcpRegistryClient.js';
|
|
4
|
+
import { getProgressTrackingService } from './progressTrackingService.js';
|
|
5
|
+
import { compareVersions, getUpdateType } from './services/versionResolver.js';
|
|
6
|
+
/**
|
|
7
|
+
* Server installation service
|
|
8
|
+
* Handles install, update, uninstall, and status operations for MCP servers
|
|
9
|
+
*/
|
|
10
|
+
export class ServerInstallationService {
|
|
11
|
+
registryClient;
|
|
12
|
+
progressTracker;
|
|
13
|
+
constructor() {
|
|
14
|
+
this.registryClient = createRegistryClient();
|
|
15
|
+
this.progressTracker = getProgressTrackingService();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Install a server from the registry
|
|
19
|
+
*/
|
|
20
|
+
async installServer(serverName, version, options) {
|
|
21
|
+
const operationId = `op_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
|
|
22
|
+
const warnings = [];
|
|
23
|
+
const errors = [];
|
|
24
|
+
try {
|
|
25
|
+
logger.info(`Starting installation of ${serverName}${version ? `@${version}` : ''}`);
|
|
26
|
+
// Get server information from registry with ID resolution fallback
|
|
27
|
+
const registryServer = await this.resolveServerById(serverName, version);
|
|
28
|
+
if (!registryServer) {
|
|
29
|
+
throw new Error(`Server '${serverName}' not found in registry`);
|
|
30
|
+
}
|
|
31
|
+
// Select appropriate installation method (package first, remote fallback)
|
|
32
|
+
const selectedEndpoint = this.selectInstallationEndpoint(registryServer);
|
|
33
|
+
if (!selectedEndpoint) {
|
|
34
|
+
// Provide comprehensive error message showing what's available
|
|
35
|
+
const packages = registryServer.packages?.map((p) => `${p.registryType}:${p.identifier}`) || [];
|
|
36
|
+
const remotes = registryServer.remotes?.map((r) => r.type) || [];
|
|
37
|
+
const packageList = packages.length > 0 ? `Available packages: ${packages.join(', ')}` : '';
|
|
38
|
+
const remoteList = remotes.length > 0 ? `Available remote types: ${remotes.join(', ')}` : '';
|
|
39
|
+
const combinedList = [packageList, remoteList].filter(Boolean).join(' | ');
|
|
40
|
+
throw new Error(`No compatible installation method found for ${serverName}. ${combinedList || 'No installation methods available'}. This server may not be compatible with your system or installation method.`);
|
|
41
|
+
}
|
|
42
|
+
// Determine the local server name and registry server ID for tagging
|
|
43
|
+
const localServerName = options?.localServerName || serverName;
|
|
44
|
+
const registryServerId = options?.registryServerId || registryServer.name;
|
|
45
|
+
// Generate server configuration with tags
|
|
46
|
+
const _serverConfig = await this.createServerConfig(registryServer, selectedEndpoint, registryServerId, localServerName, options?.tags);
|
|
47
|
+
// Create installation result
|
|
48
|
+
const result = {
|
|
49
|
+
success: true,
|
|
50
|
+
serverName: localServerName,
|
|
51
|
+
version: registryServer.version,
|
|
52
|
+
installedAt: new Date(),
|
|
53
|
+
configPath: '', // Will be set by command handler
|
|
54
|
+
config: _serverConfig,
|
|
55
|
+
backupPath: undefined,
|
|
56
|
+
warnings,
|
|
57
|
+
errors,
|
|
58
|
+
operationId,
|
|
59
|
+
};
|
|
60
|
+
logger.info(`Successfully prepared installation configuration for ${localServerName}`);
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
65
|
+
errors.push(errorMessage);
|
|
66
|
+
logger.error(`Installation failed for ${serverName}: ${errorMessage}`);
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Select appropriate installation endpoint (packages first, remotes fallback)
|
|
72
|
+
*/
|
|
73
|
+
selectInstallationEndpoint(registryServer) {
|
|
74
|
+
// PRIORITY 1: Check for packages first (primary installation method)
|
|
75
|
+
const packages = registryServer.packages || [];
|
|
76
|
+
if (packages.length > 0) {
|
|
77
|
+
// Prefer npm packages for broad compatibility
|
|
78
|
+
const npmPackage = packages.find((p) => p.registryType === 'npm');
|
|
79
|
+
if (npmPackage) {
|
|
80
|
+
return { type: 'npm', url: npmPackage.identifier, isPackage: true };
|
|
81
|
+
}
|
|
82
|
+
// Fallback to first available package type (pypi, docker, etc.)
|
|
83
|
+
const firstPackage = packages[0];
|
|
84
|
+
return { type: firstPackage.registryType, url: firstPackage.identifier, isPackage: true };
|
|
85
|
+
}
|
|
86
|
+
// PRIORITY 2: Fallback to remotes if no packages available
|
|
87
|
+
const remotes = registryServer.remotes || [];
|
|
88
|
+
if (remotes.length > 0) {
|
|
89
|
+
// Prefer streamable-http (npx-based) as most common
|
|
90
|
+
const streamableHttp = remotes.find((r) => r.type === 'streamable-http');
|
|
91
|
+
if (streamableHttp) {
|
|
92
|
+
return { type: streamableHttp.type, url: streamableHttp.url, isPackage: false };
|
|
93
|
+
}
|
|
94
|
+
// Fallback to first available remote
|
|
95
|
+
return { type: remotes[0].type, url: remotes[0].url, isPackage: false };
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Resolve server ID with fallback mechanism
|
|
101
|
+
* Tries direct lookup first, then search-based resolution if that fails
|
|
102
|
+
*/
|
|
103
|
+
async resolveServerById(serverName, version) {
|
|
104
|
+
try {
|
|
105
|
+
// Try direct lookup first (for exact registry ID matches)
|
|
106
|
+
return await this.registryClient.getServerById(serverName, version);
|
|
107
|
+
}
|
|
108
|
+
catch (_error) {
|
|
109
|
+
// If direct lookup fails, try search-based resolution
|
|
110
|
+
logger.debug(`Direct lookup failed for ${serverName}, trying search-based resolution`);
|
|
111
|
+
try {
|
|
112
|
+
// Search for servers matching this name
|
|
113
|
+
const searchResults = await this.registryClient.searchServers({
|
|
114
|
+
query: serverName,
|
|
115
|
+
limit: 10,
|
|
116
|
+
});
|
|
117
|
+
// Find exact or partial matches with priority order
|
|
118
|
+
const matchedServer = searchResults.find((server) =>
|
|
119
|
+
// Exact match first
|
|
120
|
+
server.name === serverName ||
|
|
121
|
+
// Then match if it ends with the server name (e.g., "io.github/user/mysql-read-only-server" matches "mysql-read-only-server")
|
|
122
|
+
server.name.endsWith(`/${serverName}`) ||
|
|
123
|
+
// Then match if it contains the server name
|
|
124
|
+
server.name.includes(serverName));
|
|
125
|
+
if (matchedServer) {
|
|
126
|
+
logger.info(`Found server "${serverName}" as "${matchedServer.name}" in registry`);
|
|
127
|
+
return await this.registryClient.getServerById(matchedServer.name, version);
|
|
128
|
+
}
|
|
129
|
+
// If no matches found, provide helpful error message
|
|
130
|
+
throw new Error(`Server '${serverName}' not found in registry. Try searching with '1mcp registry search ${serverName}' to find available servers.`);
|
|
131
|
+
}
|
|
132
|
+
catch (_searchError) {
|
|
133
|
+
// If search also fails, provide more comprehensive error
|
|
134
|
+
throw new Error(`Server '${serverName}' not found in registry. Suggestions:
|
|
135
|
+
1. Check spelling: ${serverName}
|
|
136
|
+
2. Search for available servers: 1mcp registry search ${serverName}
|
|
137
|
+
3. Use interactive mode: 1mcp mcp install --interactive
|
|
138
|
+
4. Use full registry ID (e.g., 'io.github.username/server-name')`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Create server configuration from registry data
|
|
144
|
+
*/
|
|
145
|
+
async createServerConfig(_registryServer, endpoint, registryServerId, localServerName, existingTags) {
|
|
146
|
+
// Add both local server name and registry ID as default tags
|
|
147
|
+
const defaultTags = [localServerName, registryServerId];
|
|
148
|
+
const tags = existingTags ? [...existingTags, ...defaultTags] : defaultTags;
|
|
149
|
+
// Remove duplicates while preserving order
|
|
150
|
+
const uniqueTags = Array.from(new Set(tags));
|
|
151
|
+
// Handle package-based installation
|
|
152
|
+
if (endpoint.isPackage) {
|
|
153
|
+
const config = {
|
|
154
|
+
type: 'stdio',
|
|
155
|
+
command: 'npx',
|
|
156
|
+
args: [endpoint.url],
|
|
157
|
+
tags: uniqueTags,
|
|
158
|
+
};
|
|
159
|
+
return config;
|
|
160
|
+
}
|
|
161
|
+
// Handle remote-based installation
|
|
162
|
+
const config = {
|
|
163
|
+
type: 'stdio',
|
|
164
|
+
command: endpoint.url,
|
|
165
|
+
tags: uniqueTags,
|
|
166
|
+
};
|
|
167
|
+
return config;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Update a server to latest or specific version
|
|
171
|
+
*/
|
|
172
|
+
async updateServer(serverName, version, _options) {
|
|
173
|
+
logger.info(`Updating server ${serverName}${version ? ` to ${version}` : ' to latest'}`);
|
|
174
|
+
const operationId = `op_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
|
|
175
|
+
try {
|
|
176
|
+
// Import config utilities to update configuration
|
|
177
|
+
// Get current configuration first - if server isn't installed, we can't update it
|
|
178
|
+
const currentConfig = getServer(serverName);
|
|
179
|
+
if (!currentConfig) {
|
|
180
|
+
throw new Error(`Server '${serverName}' not found in configuration`);
|
|
181
|
+
}
|
|
182
|
+
// Get latest version from registry if not specified
|
|
183
|
+
const targetVersion = version || 'latest';
|
|
184
|
+
const registryServer = await this.registryClient.getServerById(serverName, targetVersion);
|
|
185
|
+
if (!registryServer) {
|
|
186
|
+
throw new Error(`Server '${serverName}' not found in registry`);
|
|
187
|
+
}
|
|
188
|
+
// Create updated configuration with new version info
|
|
189
|
+
const updatedConfig = {
|
|
190
|
+
...currentConfig,
|
|
191
|
+
// Store version in metadata (future enhancement)
|
|
192
|
+
};
|
|
193
|
+
// Save updated configuration
|
|
194
|
+
setServer(serverName, updatedConfig);
|
|
195
|
+
return {
|
|
196
|
+
success: true,
|
|
197
|
+
serverName,
|
|
198
|
+
previousVersion: 'unknown',
|
|
199
|
+
newVersion: registryServer.version,
|
|
200
|
+
updatedAt: new Date(),
|
|
201
|
+
warnings: [],
|
|
202
|
+
errors: [],
|
|
203
|
+
operationId,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
208
|
+
logger.error(`Update failed for ${serverName}: ${errorMessage}`);
|
|
209
|
+
return {
|
|
210
|
+
success: false,
|
|
211
|
+
serverName,
|
|
212
|
+
previousVersion: 'unknown',
|
|
213
|
+
newVersion: version || 'unknown',
|
|
214
|
+
updatedAt: new Date(),
|
|
215
|
+
warnings: [],
|
|
216
|
+
errors: [errorMessage],
|
|
217
|
+
operationId,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Uninstall a server
|
|
223
|
+
*/
|
|
224
|
+
async uninstallServer(serverName, _options) {
|
|
225
|
+
logger.info(`Uninstalling server ${serverName}`);
|
|
226
|
+
const operationId = `op_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
|
|
227
|
+
const result = {
|
|
228
|
+
success: true,
|
|
229
|
+
serverName,
|
|
230
|
+
removedAt: new Date(),
|
|
231
|
+
configRemoved: true,
|
|
232
|
+
warnings: [],
|
|
233
|
+
errors: [],
|
|
234
|
+
operationId,
|
|
235
|
+
};
|
|
236
|
+
return result;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Check for available updates
|
|
240
|
+
*/
|
|
241
|
+
async checkForUpdates(_serverNames) {
|
|
242
|
+
logger.info(`Checking for updates${_serverNames ? ` for ${_serverNames.length} servers` : ''}`);
|
|
243
|
+
const results = [];
|
|
244
|
+
// Get list of servers to check
|
|
245
|
+
const serversToCheck = _serverNames || (await this.listInstalledServers());
|
|
246
|
+
// Check each server for available updates
|
|
247
|
+
for (const serverName of serversToCheck) {
|
|
248
|
+
try {
|
|
249
|
+
// Get current installed version
|
|
250
|
+
const metadata = getInstallationMetadata(serverName);
|
|
251
|
+
const currentVersion = metadata?.version || 'unknown';
|
|
252
|
+
// Fetch latest version from registry
|
|
253
|
+
const latestServer = await this.registryClient.getServerById(serverName);
|
|
254
|
+
if (latestServer) {
|
|
255
|
+
// Compare versions using semantic versioning
|
|
256
|
+
const hasUpdate = currentVersion !== 'unknown' && compareVersions(latestServer.version, currentVersion) > 0;
|
|
257
|
+
const updateType = currentVersion !== 'unknown' ? getUpdateType(currentVersion, latestServer.version) : undefined;
|
|
258
|
+
results.push({
|
|
259
|
+
serverName,
|
|
260
|
+
currentVersion,
|
|
261
|
+
latestVersion: latestServer.version,
|
|
262
|
+
hasUpdate,
|
|
263
|
+
updateAvailable: hasUpdate,
|
|
264
|
+
updateType,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
// Silently skip servers that can't be checked
|
|
270
|
+
logger.debug(`Could not check updates for ${serverName}: ${error}`);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return results;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* List installed servers
|
|
277
|
+
*/
|
|
278
|
+
async listInstalledServers(_options) {
|
|
279
|
+
logger.info('Listing installed servers');
|
|
280
|
+
// Import config utilities dynamically to avoid circular dependencies
|
|
281
|
+
// Get all servers from configuration
|
|
282
|
+
const allServers = getAllServers();
|
|
283
|
+
// Extract server names
|
|
284
|
+
const serverNames = Object.keys(allServers);
|
|
285
|
+
// Apply filters if options provided
|
|
286
|
+
if (_options?.filterActive) {
|
|
287
|
+
// Filter to only non-disabled servers
|
|
288
|
+
return serverNames.filter((name) => !allServers[name]?.disabled);
|
|
289
|
+
}
|
|
290
|
+
return serverNames;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Create a server installation service instance
|
|
295
|
+
*/
|
|
296
|
+
export function createServerInstallationService() {
|
|
297
|
+
return new ServerInstallationService();
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=serverInstallationService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverInstallationService.js","sourceRoot":"","sources":["../../../src/domains/server-management/serverInstallationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Version parsing, comparison, and resolution utilities
|
|
3
|
+
*/
|
|
4
|
+
export interface ParsedVersion {
|
|
5
|
+
major: number;
|
|
6
|
+
minor: number;
|
|
7
|
+
patch: number;
|
|
8
|
+
}
|
|
9
|
+
export type UpdateType = 'major' | 'minor' | 'patch';
|
|
10
|
+
/**
|
|
11
|
+
* Parse semantic version string into components
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseVersion(version: string): ParsedVersion | null;
|
|
14
|
+
/**
|
|
15
|
+
* Compare two semantic versions
|
|
16
|
+
* Returns: 1 if v1 > v2, -1 if v1 < v2, 0 if equal
|
|
17
|
+
*/
|
|
18
|
+
export declare function compareVersions(v1: string, v2: string): number;
|
|
19
|
+
/**
|
|
20
|
+
* Determine update type based on version comparison
|
|
21
|
+
* Returns the type of update (major/minor/patch) if newVersion > currentVersion, undefined otherwise
|
|
22
|
+
*/
|
|
23
|
+
export declare function getUpdateType(currentVersion: string, newVersion: string): UpdateType | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Check if a version is valid semver
|
|
26
|
+
*/
|
|
27
|
+
export declare function isValidVersion(version: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Clean version string (remove 'v' prefix, etc.)
|
|
30
|
+
*/
|
|
31
|
+
export declare function cleanVersion(version: string): string | null;
|
|
32
|
+
/**
|
|
33
|
+
* Check if version1 is greater than version2
|
|
34
|
+
*/
|
|
35
|
+
export declare function isNewerVersion(v1: string, v2: string): boolean;
|
|
36
|
+
//# sourceMappingURL=versionResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versionResolver.d.ts","sourceRoot":"","sources":["../../../../src/domains/server-management/services/versionResolver.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAErD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAWlE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAU9D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CA6BhG;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE3D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAE9D"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import semver from 'semver';
|
|
2
|
+
/**
|
|
3
|
+
* Parse semantic version string into components
|
|
4
|
+
*/
|
|
5
|
+
export function parseVersion(version) {
|
|
6
|
+
const parsed = semver.parse(version);
|
|
7
|
+
if (!parsed) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
return {
|
|
11
|
+
major: parsed.major,
|
|
12
|
+
minor: parsed.minor,
|
|
13
|
+
patch: parsed.patch,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Compare two semantic versions
|
|
18
|
+
* Returns: 1 if v1 > v2, -1 if v1 < v2, 0 if equal
|
|
19
|
+
*/
|
|
20
|
+
export function compareVersions(v1, v2) {
|
|
21
|
+
// Clean versions to handle 'v' prefix and other formats
|
|
22
|
+
const clean1 = semver.clean(v1);
|
|
23
|
+
const clean2 = semver.clean(v2);
|
|
24
|
+
if (!clean1 || !clean2) {
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
return semver.compare(clean1, clean2);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Determine update type based on version comparison
|
|
31
|
+
* Returns the type of update (major/minor/patch) if newVersion > currentVersion, undefined otherwise
|
|
32
|
+
*/
|
|
33
|
+
export function getUpdateType(currentVersion, newVersion) {
|
|
34
|
+
const clean1 = semver.clean(currentVersion);
|
|
35
|
+
const clean2 = semver.clean(newVersion);
|
|
36
|
+
if (!clean1 || !clean2) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
// First check if new version is actually greater
|
|
40
|
+
if (!semver.gt(clean2, clean1)) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
// Now determine the type of update
|
|
44
|
+
const diff = semver.diff(clean1, clean2);
|
|
45
|
+
if (diff === 'major' || diff === 'premajor') {
|
|
46
|
+
return 'major';
|
|
47
|
+
}
|
|
48
|
+
if (diff === 'minor' || diff === 'preminor') {
|
|
49
|
+
return 'minor';
|
|
50
|
+
}
|
|
51
|
+
if (diff === 'patch' || diff === 'prepatch') {
|
|
52
|
+
return 'patch';
|
|
53
|
+
}
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Check if a version is valid semver
|
|
58
|
+
*/
|
|
59
|
+
export function isValidVersion(version) {
|
|
60
|
+
return semver.valid(version) !== null;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Clean version string (remove 'v' prefix, etc.)
|
|
64
|
+
*/
|
|
65
|
+
export function cleanVersion(version) {
|
|
66
|
+
return semver.clean(version);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if version1 is greater than version2
|
|
70
|
+
*/
|
|
71
|
+
export function isNewerVersion(v1, v2) {
|
|
72
|
+
return compareVersions(v1, v2) > 0;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=versionResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versionResolver.js","sourceRoot":"","sources":["../../../../src/domains/server-management/services/versionResolver.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAc5B;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,EAAU,EAAE,EAAU;IACpD,wDAAwD;IACxD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAEhC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,cAAsB,EAAE,UAAkB;IACtE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAExC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,iDAAiD;IACjD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,mCAAmC;IACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEzC,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU,EAAE,EAAU;IACnD,OAAO,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC"}
|