centaurus-cli 3.0.0 → 3.1.0
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/ai/types.js +0 -1
- package/dist/ai/types.js.map +1 -1
- package/dist/cli-adapter.js +5047 -5037
- package/dist/cli-adapter.js.map +1 -1
- package/dist/commands/CommandParser.js +372 -315
- package/dist/commands/CommandParser.js.map +1 -1
- package/dist/config/build-config.js +11 -42
- package/dist/config/build-config.js.map +1 -1
- package/dist/config/defaultConfig.js +94 -82
- package/dist/config/defaultConfig.js.map +1 -1
- package/dist/config/manager.js +144 -160
- package/dist/config/manager.js.map +1 -1
- package/dist/config/mcp-config-manager.js +411 -364
- package/dist/config/mcp-config-manager.js.map +1 -1
- package/dist/config/models.js +118 -185
- package/dist/config/models.js.map +1 -1
- package/dist/config/slash-commands.js +186 -184
- package/dist/config/slash-commands.js.map +1 -1
- package/dist/config/types.js +33 -26
- package/dist/config/types.js.map +1 -1
- package/dist/context/command-detector.js +63 -67
- package/dist/context/command-detector.js.map +1 -1
- package/dist/context/context-manager.js +533 -518
- package/dist/context/context-manager.js.map +1 -1
- package/dist/context/handlers/docker-handler.js +518 -576
- package/dist/context/handlers/docker-handler.js.map +1 -1
- package/dist/context/handlers/ssh-handler.js +1050 -1109
- package/dist/context/handlers/ssh-handler.js.map +1 -1
- package/dist/context/handlers/wsl-handler.js +558 -630
- package/dist/context/handlers/wsl-handler.js.map +1 -1
- package/dist/context/index.js +42 -6
- package/dist/context/index.js.map +1 -1
- package/dist/context/subshell-handler.js +0 -4
- package/dist/context/subshell-handler.js.map +1 -1
- package/dist/context/types.js +20 -31
- package/dist/context/types.js.map +1 -1
- package/dist/hooks/useConnectivity.js +13 -10
- package/dist/hooks/useConnectivity.js.map +1 -1
- package/dist/hooks/useTerminalDimensions.js +67 -79
- package/dist/hooks/useTerminalDimensions.js.map +1 -1
- package/dist/index.js +228 -251
- package/dist/index.js.map +1 -1
- package/dist/mcp/mcp-command-handler.js +297 -260
- package/dist/mcp/mcp-command-handler.js.map +1 -1
- package/dist/mcp/mcp-server-manager.js +139 -155
- package/dist/mcp/mcp-server-manager.js.map +1 -1
- package/dist/mcp/mcp-tool-wrapper.js +74 -94
- package/dist/mcp/mcp-tool-wrapper.js.map +1 -1
- package/dist/services/ai-autocomplete-agent.js +169 -181
- package/dist/services/ai-autocomplete-agent.js.map +1 -1
- package/dist/services/ai-context-injector.js +180 -93
- package/dist/services/ai-context-injector.js.map +1 -1
- package/dist/services/ai-service-client.js +513 -456
- package/dist/services/ai-service-client.js.map +1 -1
- package/dist/services/api-client.js +443 -441
- package/dist/services/api-client.js.map +1 -1
- package/dist/services/auth-handler.js +162 -198
- package/dist/services/auth-handler.js.map +1 -1
- package/dist/services/background-task-manager.js +258 -282
- package/dist/services/background-task-manager.js.map +1 -1
- package/dist/services/checkpoint-manager.js +1513 -973
- package/dist/services/checkpoint-manager.js.map +1 -1
- package/dist/services/clipboard-service.js +151 -200
- package/dist/services/clipboard-service.js.map +1 -1
- package/dist/services/connectivity-manager.js +63 -65
- package/dist/services/connectivity-manager.js.map +1 -1
- package/dist/services/conversation-manager.js +118 -121
- package/dist/services/conversation-manager.js.map +1 -1
- package/dist/services/environment-context-injector.js +160 -187
- package/dist/services/environment-context-injector.js.map +1 -1
- package/dist/services/fast-context-agent.js +203 -243
- package/dist/services/fast-context-agent.js.map +1 -1
- package/dist/services/input-detection-agent.js +190 -202
- package/dist/services/input-detection-agent.js.map +1 -1
- package/dist/services/input-requirement-detector.js +155 -189
- package/dist/services/input-requirement-detector.js.map +1 -1
- package/dist/services/local-chat-storage.js +342 -365
- package/dist/services/local-chat-storage.js.map +1 -1
- package/dist/services/monitored-shell-manager.js +225 -233
- package/dist/services/monitored-shell-manager.js.map +1 -1
- package/dist/services/ollama-service.js +293 -310
- package/dist/services/ollama-service.js.map +1 -1
- package/dist/services/rules-storage.js +142 -0
- package/dist/services/rules-storage.js.map +1 -0
- package/dist/services/session-quota-manager.js +219 -235
- package/dist/services/session-quota-manager.js.map +1 -1
- package/dist/services/shell-input-agent.js +299 -334
- package/dist/services/shell-input-agent.js.map +1 -1
- package/dist/services/sub-agent-manager.js +459 -501
- package/dist/services/sub-agent-manager.js.map +1 -1
- package/dist/services/warpify-detector.js +133 -183
- package/dist/services/warpify-detector.js.map +1 -1
- package/dist/services/workflow-storage.js +202 -217
- package/dist/services/workflow-storage.js.map +1 -1
- package/dist/test-ssh-handler.js +148 -193
- package/dist/test-ssh-handler.js.map +1 -1
- package/dist/tools/add-mcp.js +161 -0
- package/dist/tools/add-mcp.js.map +1 -0
- package/dist/tools/background-command.js +240 -273
- package/dist/tools/background-command.js.map +1 -1
- package/dist/tools/command.js +447 -440
- package/dist/tools/command.js.map +1 -1
- package/dist/tools/create-image.js +172 -202
- package/dist/tools/create-image.js.map +1 -1
- package/dist/tools/enter-remote-session.js +169 -215
- package/dist/tools/enter-remote-session.js.map +1 -1
- package/dist/tools/fast-context.js +60 -67
- package/dist/tools/fast-context.js.map +1 -1
- package/dist/tools/file-ops.js +605 -537
- package/dist/tools/file-ops.js.map +1 -1
- package/dist/tools/find-files.js +262 -303
- package/dist/tools/find-files.js.map +1 -1
- package/dist/tools/get-diff.js +423 -400
- package/dist/tools/get-diff.js.map +1 -1
- package/dist/tools/grep-search.js +966 -948
- package/dist/tools/grep-search.js.map +1 -1
- package/dist/tools/inspect-symbol.js +308 -323
- package/dist/tools/inspect-symbol.js.map +1 -1
- package/dist/tools/plan-mode.js +459 -503
- package/dist/tools/plan-mode.js.map +1 -1
- package/dist/tools/read-binary-file.js +160 -190
- package/dist/tools/read-binary-file.js.map +1 -1
- package/dist/tools/registry.js +100 -84
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/reproduce_issue.js +170 -151
- package/dist/tools/reproduce_issue.js.map +1 -1
- package/dist/tools/sub-agent.js +223 -228
- package/dist/tools/sub-agent.js.map +1 -1
- package/dist/tools/task-complete.js +28 -27
- package/dist/tools/task-complete.js.map +1 -1
- package/dist/tools/types.js +0 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/tools/validation.js +96 -118
- package/dist/tools/validation.js.map +1 -1
- package/dist/tools/web-search.js +194 -194
- package/dist/tools/web-search.js.map +1 -1
- package/dist/tools/workflow-tool.js +77 -82
- package/dist/tools/workflow-tool.js.map +1 -1
- package/dist/types/index.js +0 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/rule.js +1 -0
- package/dist/types/rule.js.map +1 -0
- package/dist/types/workflow.js +0 -7
- package/dist/types/workflow.js.map +1 -1
- package/dist/ui/components/AgentTimer.js +24 -25
- package/dist/ui/components/AgentTimer.js.map +1 -1
- package/dist/ui/components/App.js +3266 -3249
- package/dist/ui/components/App.js.map +1 -1
- package/dist/ui/components/AuthScreen.js +22 -34
- package/dist/ui/components/AuthScreen.js.map +1 -1
- package/dist/ui/components/AuthWelcomeScreen.js +30 -24
- package/dist/ui/components/AuthWelcomeScreen.js.map +1 -1
- package/dist/ui/components/Breadcrumbs.js +53 -82
- package/dist/ui/components/Breadcrumbs.js.map +1 -1
- package/dist/ui/components/CircularSelectInput.js +59 -67
- package/dist/ui/components/CircularSelectInput.js.map +1 -1
- package/dist/ui/components/ClipboardFileAutocomplete.js +78 -39
- package/dist/ui/components/ClipboardFileAutocomplete.js.map +1 -1
- package/dist/ui/components/CodeBlock.js +24 -42
- package/dist/ui/components/CodeBlock.js.map +1 -1
- package/dist/ui/components/ConfigViewer.js +18 -25
- package/dist/ui/components/ConfigViewer.js.map +1 -1
- package/dist/ui/components/ConfirmPrompt.js +49 -71
- package/dist/ui/components/ConfirmPrompt.js.map +1 -1
- package/dist/ui/components/ConnectionStatusMessage.js +32 -83
- package/dist/ui/components/ConnectionStatusMessage.js.map +1 -1
- package/dist/ui/components/ContextWindowIndicator.js +34 -49
- package/dist/ui/components/ContextWindowIndicator.js.map +1 -1
- package/dist/ui/components/DetailedPlanReviewScreen.js +104 -106
- package/dist/ui/components/DetailedPlanReviewScreen.js.map +1 -1
- package/dist/ui/components/DiffViewer.js +68 -121
- package/dist/ui/components/DiffViewer.js.map +1 -1
- package/dist/ui/components/ErrorBoundary.js +40 -48
- package/dist/ui/components/ErrorBoundary.js.map +1 -1
- package/dist/ui/components/FileCreationPreview.js +29 -60
- package/dist/ui/components/FileCreationPreview.js.map +1 -1
- package/dist/ui/components/FileOperation.js +34 -29
- package/dist/ui/components/FileOperation.js.map +1 -1
- package/dist/ui/components/FileTagAutocomplete.js +55 -25
- package/dist/ui/components/FileTagAutocomplete.js.map +1 -1
- package/dist/ui/components/FontRecommendation.js.map +1 -1
- package/dist/ui/components/GitDiffBreadcrumb.js +29 -0
- package/dist/ui/components/GitDiffBreadcrumb.js.map +1 -0
- package/dist/ui/components/InputBox.js +1620 -2150
- package/dist/ui/components/InputBox.js.map +1 -1
- package/dist/ui/components/InteractiveShell.js +234 -352
- package/dist/ui/components/InteractiveShell.js.map +1 -1
- package/dist/ui/components/KeyboardHelp.js +34 -35
- package/dist/ui/components/KeyboardHelp.js.map +1 -1
- package/dist/ui/components/LoadingIndicator.js +22 -25
- package/dist/ui/components/LoadingIndicator.js.map +1 -1
- package/dist/ui/components/MCPAddScreen.js +40 -51
- package/dist/ui/components/MCPAddScreen.js.map +1 -1
- package/dist/ui/components/MCPListScreen.js +40 -48
- package/dist/ui/components/MCPListScreen.js.map +1 -1
- package/dist/ui/components/MCPServerListScreen.js +49 -56
- package/dist/ui/components/MCPServerListScreen.js.map +1 -1
- package/dist/ui/components/MarkdownRenderer.js +69 -96
- package/dist/ui/components/MarkdownRenderer.js.map +1 -1
- package/dist/ui/components/MessageBox.js +66 -48
- package/dist/ui/components/MessageBox.js.map +1 -1
- package/dist/ui/components/MessageDisplay.js +150 -142
- package/dist/ui/components/MessageDisplay.js.map +1 -1
- package/dist/ui/components/MonitorModeAIPanel.js +46 -65
- package/dist/ui/components/MonitorModeAIPanel.js.map +1 -1
- package/dist/ui/components/MultiLineInput.js +243 -277
- package/dist/ui/components/MultiLineInput.js.map +1 -1
- package/dist/ui/components/PasswordPrompt.js +37 -18
- package/dist/ui/components/PasswordPrompt.js.map +1 -1
- package/dist/ui/components/PlanAcceptedMessage.js +27 -38
- package/dist/ui/components/PlanAcceptedMessage.js.map +1 -1
- package/dist/ui/components/PlanReviewScreen.js +46 -50
- package/dist/ui/components/PlanReviewScreen.js.map +1 -1
- package/dist/ui/components/RulesEditorScreen.js +81 -0
- package/dist/ui/components/RulesEditorScreen.js.map +1 -0
- package/dist/ui/components/SelectPrompt.js +19 -8
- package/dist/ui/components/SelectPrompt.js.map +1 -1
- package/dist/ui/components/ShimmerText.js +44 -0
- package/dist/ui/components/ShimmerText.js.map +1 -0
- package/dist/ui/components/SlashCommandAutocomplete.js +49 -22
- package/dist/ui/components/SlashCommandAutocomplete.js.map +1 -1
- package/dist/ui/components/StatusBar.js +56 -87
- package/dist/ui/components/StatusBar.js.map +1 -1
- package/dist/ui/components/StreamingMessageDisplay.js +116 -99
- package/dist/ui/components/StreamingMessageDisplay.js.map +1 -1
- package/dist/ui/components/TaskCompletedMessage.js +28 -23
- package/dist/ui/components/TaskCompletedMessage.js.map +1 -1
- package/dist/ui/components/TaskProgressIndicator.js +44 -70
- package/dist/ui/components/TaskProgressIndicator.js.map +1 -1
- package/dist/ui/components/ThinkingDisplay.js +44 -41
- package/dist/ui/components/ThinkingDisplay.js.map +1 -1
- package/dist/ui/components/ToolExecutionMessage.js +772 -1326
- package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
- package/dist/ui/components/ToolExecutionStatus.js +53 -84
- package/dist/ui/components/ToolExecutionStatus.js.map +1 -1
- package/dist/ui/components/ToolResult.js +22 -15
- package/dist/ui/components/ToolResult.js.map +1 -1
- package/dist/ui/components/VersionUpdatePrompt.js +88 -120
- package/dist/ui/components/VersionUpdatePrompt.js.map +1 -1
- package/dist/ui/components/WelcomeBanner.js +176 -26
- package/dist/ui/components/WelcomeBanner.js.map +1 -1
- package/dist/ui/components/WorkflowCreatorScreen.js +94 -161
- package/dist/ui/components/WorkflowCreatorScreen.js.map +1 -1
- package/dist/utils/ansi-encoder.js +30 -61
- package/dist/utils/ansi-encoder.js.map +1 -1
- package/dist/utils/chat-formatter.js +327 -305
- package/dist/utils/chat-formatter.js.map +1 -1
- package/dist/utils/command-history.js +152 -174
- package/dist/utils/command-history.js.map +1 -1
- package/dist/utils/context-sanitizer.js +49 -112
- package/dist/utils/context-sanitizer.js.map +1 -1
- package/dist/utils/conversation-logger.js +292 -324
- package/dist/utils/conversation-logger.js.map +1 -1
- package/dist/utils/custom-commands-manager.js +126 -131
- package/dist/utils/custom-commands-manager.js.map +1 -1
- package/dist/utils/editor-utils.js +732 -837
- package/dist/utils/editor-utils.js.map +1 -1
- package/dist/utils/file.js +174 -213
- package/dist/utils/file.js.map +1 -1
- package/dist/utils/git-stats.js +169 -0
- package/dist/utils/git-stats.js.map +1 -0
- package/dist/utils/input-classifier.js +960 -482
- package/dist/utils/input-classifier.js.map +1 -1
- package/dist/utils/logger.js +48 -73
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/markdown-parser.js +277 -310
- package/dist/utils/markdown-parser.js.map +1 -1
- package/dist/utils/rule-reference-resolver.js +54 -0
- package/dist/utils/rule-reference-resolver.js.map +1 -0
- package/dist/utils/shell.js +144 -156
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/state.js +23 -22
- package/dist/utils/state.js.map +1 -1
- package/dist/utils/syntax-checker.js +279 -327
- package/dist/utils/syntax-checker.js.map +1 -1
- package/dist/utils/terminal-output.js +199 -302
- package/dist/utils/terminal-output.js.map +1 -1
- package/dist/utils/text-clipboard.js +47 -70
- package/dist/utils/text-clipboard.js.map +1 -1
- package/dist/utils/unicode-sanitizer.js +134 -197
- package/dist/utils/unicode-sanitizer.js.map +1 -1
- package/dist/utils/version-checker.js +46 -56
- package/dist/utils/version-checker.js.map +1 -1
- package/package.json +6 -4
- package/dist/ai/types.d.ts +0 -20
- package/dist/ai/types.d.ts.map +0 -1
- package/dist/cli-adapter.d.ts +0 -511
- package/dist/cli-adapter.d.ts.map +0 -1
- package/dist/commands/CommandParser.d.ts +0 -27
- package/dist/commands/CommandParser.d.ts.map +0 -1
- package/dist/config/build-config.d.ts +0 -42
- package/dist/config/build-config.d.ts.map +0 -1
- package/dist/config/defaultConfig.d.ts +0 -79
- package/dist/config/defaultConfig.d.ts.map +0 -1
- package/dist/config/manager.d.ts +0 -62
- package/dist/config/manager.d.ts.map +0 -1
- package/dist/config/mcp-config-manager.d.ts +0 -79
- package/dist/config/mcp-config-manager.d.ts.map +0 -1
- package/dist/config/models.d.ts +0 -83
- package/dist/config/models.d.ts.map +0 -1
- package/dist/config/slash-commands.d.ts +0 -23
- package/dist/config/slash-commands.d.ts.map +0 -1
- package/dist/config/types.d.ts +0 -35
- package/dist/config/types.d.ts.map +0 -1
- package/dist/context/command-detector.d.ts +0 -50
- package/dist/context/command-detector.d.ts.map +0 -1
- package/dist/context/context-manager.d.ts +0 -157
- package/dist/context/context-manager.d.ts.map +0 -1
- package/dist/context/handlers/docker-handler.d.ts +0 -130
- package/dist/context/handlers/docker-handler.d.ts.map +0 -1
- package/dist/context/handlers/ssh-handler.d.ts +0 -201
- package/dist/context/handlers/ssh-handler.d.ts.map +0 -1
- package/dist/context/handlers/wsl-handler.d.ts +0 -146
- package/dist/context/handlers/wsl-handler.d.ts.map +0 -1
- package/dist/context/index.d.ts +0 -8
- package/dist/context/index.d.ts.map +0 -1
- package/dist/context/subshell-handler.d.ts +0 -165
- package/dist/context/subshell-handler.d.ts.map +0 -1
- package/dist/context/types.d.ts +0 -70
- package/dist/context/types.d.ts.map +0 -1
- package/dist/hooks/useConnectivity.d.ts +0 -2
- package/dist/hooks/useConnectivity.d.ts.map +0 -1
- package/dist/hooks/useTerminalDimensions.d.ts +0 -41
- package/dist/hooks/useTerminalDimensions.d.ts.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +0 -1
- package/dist/mcp/mcp-command-handler.d.ts +0 -47
- package/dist/mcp/mcp-command-handler.d.ts.map +0 -1
- package/dist/mcp/mcp-server-manager.d.ts +0 -30
- package/dist/mcp/mcp-server-manager.d.ts.map +0 -1
- package/dist/mcp/mcp-tool-wrapper.d.ts +0 -12
- package/dist/mcp/mcp-tool-wrapper.d.ts.map +0 -1
- package/dist/services/ai-autocomplete-agent.d.ts +0 -39
- package/dist/services/ai-autocomplete-agent.d.ts.map +0 -1
- package/dist/services/ai-context-injector.d.ts +0 -41
- package/dist/services/ai-context-injector.d.ts.map +0 -1
- package/dist/services/ai-service-client.d.ts +0 -128
- package/dist/services/ai-service-client.d.ts.map +0 -1
- package/dist/services/api-client.d.ts +0 -353
- package/dist/services/api-client.d.ts.map +0 -1
- package/dist/services/auth-handler.d.ts +0 -30
- package/dist/services/auth-handler.d.ts.map +0 -1
- package/dist/services/background-task-manager.d.ts +0 -114
- package/dist/services/background-task-manager.d.ts.map +0 -1
- package/dist/services/checkpoint-manager.d.ts +0 -167
- package/dist/services/checkpoint-manager.d.ts.map +0 -1
- package/dist/services/clipboard-service.d.ts +0 -37
- package/dist/services/clipboard-service.d.ts.map +0 -1
- package/dist/services/connectivity-manager.d.ts +0 -18
- package/dist/services/connectivity-manager.d.ts.map +0 -1
- package/dist/services/conversation-manager.d.ts +0 -73
- package/dist/services/conversation-manager.d.ts.map +0 -1
- package/dist/services/environment-context-injector.d.ts +0 -69
- package/dist/services/environment-context-injector.d.ts.map +0 -1
- package/dist/services/fast-context-agent.d.ts +0 -12
- package/dist/services/fast-context-agent.d.ts.map +0 -1
- package/dist/services/input-detection-agent.d.ts +0 -40
- package/dist/services/input-detection-agent.d.ts.map +0 -1
- package/dist/services/input-requirement-detector.d.ts +0 -28
- package/dist/services/input-requirement-detector.d.ts.map +0 -1
- package/dist/services/local-chat-storage.d.ts +0 -182
- package/dist/services/local-chat-storage.d.ts.map +0 -1
- package/dist/services/monitored-shell-manager.d.ts +0 -120
- package/dist/services/monitored-shell-manager.d.ts.map +0 -1
- package/dist/services/ollama-service.d.ts +0 -197
- package/dist/services/ollama-service.d.ts.map +0 -1
- package/dist/services/session-quota-manager.d.ts +0 -101
- package/dist/services/session-quota-manager.d.ts.map +0 -1
- package/dist/services/shell-input-agent.d.ts +0 -89
- package/dist/services/shell-input-agent.d.ts.map +0 -1
- package/dist/services/sub-agent-manager.d.ts +0 -140
- package/dist/services/sub-agent-manager.d.ts.map +0 -1
- package/dist/services/warpify-detector.d.ts +0 -43
- package/dist/services/warpify-detector.d.ts.map +0 -1
- package/dist/services/workflow-storage.d.ts +0 -72
- package/dist/services/workflow-storage.d.ts.map +0 -1
- package/dist/test-ssh-handler.d.ts +0 -8
- package/dist/test-ssh-handler.d.ts.map +0 -1
- package/dist/tools/background-command.d.ts +0 -11
- package/dist/tools/background-command.d.ts.map +0 -1
- package/dist/tools/command.d.ts +0 -3
- package/dist/tools/command.d.ts.map +0 -1
- package/dist/tools/create-image.d.ts +0 -10
- package/dist/tools/create-image.d.ts.map +0 -1
- package/dist/tools/enter-remote-session.d.ts +0 -48
- package/dist/tools/enter-remote-session.d.ts.map +0 -1
- package/dist/tools/fast-context.d.ts +0 -3
- package/dist/tools/fast-context.d.ts.map +0 -1
- package/dist/tools/file-ops.d.ts +0 -7
- package/dist/tools/file-ops.d.ts.map +0 -1
- package/dist/tools/find-files.d.ts +0 -49
- package/dist/tools/find-files.d.ts.map +0 -1
- package/dist/tools/get-diff.d.ts +0 -14
- package/dist/tools/get-diff.d.ts.map +0 -1
- package/dist/tools/grep-search.d.ts +0 -155
- package/dist/tools/grep-search.d.ts.map +0 -1
- package/dist/tools/inspect-symbol.d.ts +0 -32
- package/dist/tools/inspect-symbol.d.ts.map +0 -1
- package/dist/tools/plan-mode.d.ts +0 -140
- package/dist/tools/plan-mode.d.ts.map +0 -1
- package/dist/tools/read-binary-file.d.ts +0 -10
- package/dist/tools/read-binary-file.d.ts.map +0 -1
- package/dist/tools/registry.d.ts +0 -31
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/reproduce_issue.d.ts +0 -2
- package/dist/tools/reproduce_issue.d.ts.map +0 -1
- package/dist/tools/sub-agent.d.ts +0 -9
- package/dist/tools/sub-agent.d.ts.map +0 -1
- package/dist/tools/task-complete.d.ts +0 -3
- package/dist/tools/task-complete.d.ts.map +0 -1
- package/dist/tools/types.d.ts +0 -40
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/validation.d.ts +0 -47
- package/dist/tools/validation.d.ts.map +0 -1
- package/dist/tools/web-search.d.ts +0 -24
- package/dist/tools/web-search.d.ts.map +0 -1
- package/dist/tools/workflow-tool.d.ts +0 -11
- package/dist/tools/workflow-tool.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -123
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/workflow.d.ts +0 -110
- package/dist/types/workflow.d.ts.map +0 -1
- package/dist/ui/components/AgentTimer.d.ts +0 -7
- package/dist/ui/components/AgentTimer.d.ts.map +0 -1
- package/dist/ui/components/App.d.ts +0 -197
- package/dist/ui/components/App.d.ts.map +0 -1
- package/dist/ui/components/AuthScreen.d.ts +0 -8
- package/dist/ui/components/AuthScreen.d.ts.map +0 -1
- package/dist/ui/components/AuthWelcomeScreen.d.ts +0 -8
- package/dist/ui/components/AuthWelcomeScreen.d.ts.map +0 -1
- package/dist/ui/components/Breadcrumbs.d.ts +0 -13
- package/dist/ui/components/Breadcrumbs.d.ts.map +0 -1
- package/dist/ui/components/CircularSelectInput.d.ts +0 -24
- package/dist/ui/components/CircularSelectInput.d.ts.map +0 -1
- package/dist/ui/components/ClipboardFileAutocomplete.d.ts +0 -10
- package/dist/ui/components/ClipboardFileAutocomplete.d.ts.map +0 -1
- package/dist/ui/components/CodeBlock.d.ts +0 -9
- package/dist/ui/components/CodeBlock.d.ts.map +0 -1
- package/dist/ui/components/ConfigViewer.d.ts +0 -11
- package/dist/ui/components/ConfigViewer.d.ts.map +0 -1
- package/dist/ui/components/ConfirmPrompt.d.ts +0 -13
- package/dist/ui/components/ConfirmPrompt.d.ts.map +0 -1
- package/dist/ui/components/ConnectionStatusMessage.d.ts +0 -17
- package/dist/ui/components/ConnectionStatusMessage.d.ts.map +0 -1
- package/dist/ui/components/ContextWindowIndicator.d.ts +0 -8
- package/dist/ui/components/ContextWindowIndicator.d.ts.map +0 -1
- package/dist/ui/components/DetailedPlanReviewScreen.d.ts +0 -17
- package/dist/ui/components/DetailedPlanReviewScreen.d.ts.map +0 -1
- package/dist/ui/components/DiffViewer.d.ts +0 -9
- package/dist/ui/components/DiffViewer.d.ts.map +0 -1
- package/dist/ui/components/ErrorBoundary.d.ts +0 -17
- package/dist/ui/components/ErrorBoundary.d.ts.map +0 -1
- package/dist/ui/components/FileCreationPreview.d.ts +0 -8
- package/dist/ui/components/FileCreationPreview.d.ts.map +0 -1
- package/dist/ui/components/FileOperation.d.ts +0 -10
- package/dist/ui/components/FileOperation.d.ts.map +0 -1
- package/dist/ui/components/FileTagAutocomplete.d.ts +0 -11
- package/dist/ui/components/FileTagAutocomplete.d.ts.map +0 -1
- package/dist/ui/components/FontRecommendation.d.ts +0 -1
- package/dist/ui/components/FontRecommendation.d.ts.map +0 -1
- package/dist/ui/components/InputBox.d.ts +0 -42
- package/dist/ui/components/InputBox.d.ts.map +0 -1
- package/dist/ui/components/InteractiveShell.d.ts +0 -30
- package/dist/ui/components/InteractiveShell.d.ts.map +0 -1
- package/dist/ui/components/KeyboardHelp.d.ts +0 -7
- package/dist/ui/components/KeyboardHelp.d.ts.map +0 -1
- package/dist/ui/components/LoadingIndicator.d.ts +0 -3
- package/dist/ui/components/LoadingIndicator.d.ts.map +0 -1
- package/dist/ui/components/MCPAddScreen.d.ts +0 -13
- package/dist/ui/components/MCPAddScreen.d.ts.map +0 -1
- package/dist/ui/components/MCPListScreen.d.ts +0 -17
- package/dist/ui/components/MCPListScreen.d.ts.map +0 -1
- package/dist/ui/components/MCPServerListScreen.d.ts +0 -16
- package/dist/ui/components/MCPServerListScreen.d.ts.map +0 -1
- package/dist/ui/components/MarkdownRenderer.d.ts +0 -8
- package/dist/ui/components/MarkdownRenderer.d.ts.map +0 -1
- package/dist/ui/components/MessageBox.d.ts +0 -10
- package/dist/ui/components/MessageBox.d.ts.map +0 -1
- package/dist/ui/components/MessageDisplay.d.ts +0 -14
- package/dist/ui/components/MessageDisplay.d.ts.map +0 -1
- package/dist/ui/components/MonitorModeAIPanel.d.ts +0 -23
- package/dist/ui/components/MonitorModeAIPanel.d.ts.map +0 -1
- package/dist/ui/components/MultiLineInput.d.ts +0 -13
- package/dist/ui/components/MultiLineInput.d.ts.map +0 -1
- package/dist/ui/components/PasswordPrompt.d.ts +0 -9
- package/dist/ui/components/PasswordPrompt.d.ts.map +0 -1
- package/dist/ui/components/PlanAcceptedMessage.d.ts +0 -20
- package/dist/ui/components/PlanAcceptedMessage.d.ts.map +0 -1
- package/dist/ui/components/PlanReviewScreen.d.ts +0 -14
- package/dist/ui/components/PlanReviewScreen.d.ts.map +0 -1
- package/dist/ui/components/SelectPrompt.d.ts +0 -12
- package/dist/ui/components/SelectPrompt.d.ts.map +0 -1
- package/dist/ui/components/SlashCommandAutocomplete.d.ts +0 -13
- package/dist/ui/components/SlashCommandAutocomplete.d.ts.map +0 -1
- package/dist/ui/components/StatusBar.d.ts +0 -14
- package/dist/ui/components/StatusBar.d.ts.map +0 -1
- package/dist/ui/components/StreamingMessageDisplay.d.ts +0 -15
- package/dist/ui/components/StreamingMessageDisplay.d.ts.map +0 -1
- package/dist/ui/components/TaskCompletedMessage.d.ts +0 -14
- package/dist/ui/components/TaskCompletedMessage.d.ts.map +0 -1
- package/dist/ui/components/TaskProgressIndicator.d.ts +0 -18
- package/dist/ui/components/TaskProgressIndicator.d.ts.map +0 -1
- package/dist/ui/components/ThinkingDisplay.d.ts +0 -15
- package/dist/ui/components/ThinkingDisplay.d.ts.map +0 -1
- package/dist/ui/components/ToolExecutionMessage.d.ts +0 -8
- package/dist/ui/components/ToolExecutionMessage.d.ts.map +0 -1
- package/dist/ui/components/ToolExecutionStatus.d.ts +0 -10
- package/dist/ui/components/ToolExecutionStatus.d.ts.map +0 -1
- package/dist/ui/components/ToolResult.d.ts +0 -10
- package/dist/ui/components/ToolResult.d.ts.map +0 -1
- package/dist/ui/components/VersionUpdatePrompt.d.ts +0 -9
- package/dist/ui/components/VersionUpdatePrompt.d.ts.map +0 -1
- package/dist/ui/components/WelcomeBanner.d.ts +0 -3
- package/dist/ui/components/WelcomeBanner.d.ts.map +0 -1
- package/dist/ui/components/WorkflowCreatorScreen.d.ts +0 -25
- package/dist/ui/components/WorkflowCreatorScreen.d.ts.map +0 -1
- package/dist/utils/ansi-encoder.d.ts +0 -7
- package/dist/utils/ansi-encoder.d.ts.map +0 -1
- package/dist/utils/chat-formatter.d.ts +0 -12
- package/dist/utils/chat-formatter.d.ts.map +0 -1
- package/dist/utils/command-history.d.ts +0 -24
- package/dist/utils/command-history.d.ts.map +0 -1
- package/dist/utils/context-sanitizer.d.ts +0 -50
- package/dist/utils/context-sanitizer.d.ts.map +0 -1
- package/dist/utils/conversation-logger.d.ts +0 -142
- package/dist/utils/conversation-logger.d.ts.map +0 -1
- package/dist/utils/custom-commands-manager.d.ts +0 -59
- package/dist/utils/custom-commands-manager.d.ts.map +0 -1
- package/dist/utils/editor-utils.d.ts +0 -101
- package/dist/utils/editor-utils.d.ts.map +0 -1
- package/dist/utils/file.d.ts +0 -61
- package/dist/utils/file.d.ts.map +0 -1
- package/dist/utils/input-classifier.d.ts +0 -25
- package/dist/utils/input-classifier.d.ts.map +0 -1
- package/dist/utils/logger.d.ts +0 -17
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/markdown-parser.d.ts +0 -60
- package/dist/utils/markdown-parser.d.ts.map +0 -1
- package/dist/utils/shell.d.ts +0 -47
- package/dist/utils/shell.d.ts.map +0 -1
- package/dist/utils/state.d.ts +0 -13
- package/dist/utils/state.d.ts.map +0 -1
- package/dist/utils/syntax-checker.d.ts +0 -24
- package/dist/utils/syntax-checker.d.ts.map +0 -1
- package/dist/utils/terminal-output.d.ts +0 -25
- package/dist/utils/terminal-output.d.ts.map +0 -1
- package/dist/utils/text-clipboard.d.ts +0 -12
- package/dist/utils/text-clipboard.d.ts.map +0 -1
- package/dist/utils/unicode-sanitizer.d.ts +0 -44
- package/dist/utils/unicode-sanitizer.d.ts.map +0 -1
- package/dist/utils/version-checker.d.ts +0 -14
- package/dist/utils/version-checker.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-command-handler.js","sourceRoot":"","sources":["../../src/mcp/mcp-command-handler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/mcp/mcp-command-handler.ts"],"sourcesContent":["import { MCPConfigManager, MCPServerConfig } from '../config/mcp-config-manager.js';\r\nimport { MCPServerManager } from './mcp-server-manager.js';\r\nimport { createMCPToolWrappers } from './mcp-tool-wrapper.js';\r\nimport { ToolRegistry } from '../tools/registry.js';\r\nimport { logError, logWarning } from '../utils/logger.js';\r\n\r\nexport class MCPCommandHandler {\r\n private onShowMCPAddScreen?: () => void;\r\n private onShowMCPRemoveScreen?: (servers: MCPServerConfig[]) => void;\r\n private onShowMCPEnableScreen?: (servers: MCPServerConfig[]) => void;\r\n private onShowMCPDisableScreen?: (servers: MCPServerConfig[]) => void;\r\n private onShowMCPListScreen?: (servers: Array<{ name: string; enabled: boolean; status: 'connected' | 'disconnected' | 'error' | 'connecting'; tools: Array<{ name: string }> }>) => void;\r\n\r\n constructor(\r\n private mcpConfigManager: MCPConfigManager,\r\n private mcpServerManager: MCPServerManager,\r\n private toolRegistry: ToolRegistry\r\n ) { }\r\n\r\n // Callback setters for UI screens\r\n setOnShowMCPAddScreen(callback: () => void): void {\r\n this.onShowMCPAddScreen = callback;\r\n }\r\n\r\n setOnShowMCPRemoveScreen(callback: (servers: MCPServerConfig[]) => void): void {\r\n this.onShowMCPRemoveScreen = callback;\r\n }\r\n\r\n setOnShowMCPEnableScreen(callback: (servers: MCPServerConfig[]) => void): void {\r\n this.onShowMCPEnableScreen = callback;\r\n }\r\n\r\n setOnShowMCPDisableScreen(callback: (servers: MCPServerConfig[]) => void): void {\r\n this.onShowMCPDisableScreen = callback;\r\n }\r\n\r\n setOnShowMCPListScreen(callback: (servers: Array<{ name: string; enabled: boolean; status: 'connected' | 'disconnected' | 'error' | 'connecting'; tools: Array<{ name: string }> }>) => void): void {\r\n this.onShowMCPListScreen = callback;\r\n }\r\n\r\n async initializeMCP(): Promise<void> {\r\n try {\r\n // Auto-connect to configured servers\r\n const servers = this.mcpConfigManager.getServers();\r\n\r\n for (const serverConfig of servers) {\r\n try {\r\n await this.mcpServerManager.connect(serverConfig);\r\n\r\n // Register MCP tools to tool registry\r\n const tools = await this.mcpServerManager.listTools(serverConfig.name);\r\n const wrappedTools = createMCPToolWrappers(serverConfig.name, tools, this.mcpServerManager);\r\n\r\n for (const tool of wrappedTools) {\r\n this.toolRegistry.register(tool);\r\n }\r\n } catch (error) {\r\n // Silent fail - user can check status with /mcp status\r\n logWarning(`MCP server ${serverConfig.name} failed to connect during init`);\r\n }\r\n }\r\n } catch (error: any) {\r\n logError('Failed to initialize MCP', error instanceof Error ? error : new Error(error?.message || 'Unknown error'));\r\n }\r\n }\r\n\r\n async handleCommand(args: string[]): Promise<string> {\r\n const subcommand = args[0]?.toLowerCase();\r\n\r\n if (!subcommand) {\r\n return '## MCP (Model Context Protocol) Server Management\\n\\n' +\r\n 'Available subcommands:\\n\\n' +\r\n '/mcp list - List configured MCP servers and tools\\n' +\r\n '/mcp refresh - Restart all MCP servers\\n' +\r\n '/mcp add - Add a new MCP server\\n' +\r\n '/mcp remove - Remove an MCP server\\n' +\r\n '/mcp enable - Enable a disabled server\\n' +\r\n '/mcp disable - Disable an enabled server\\n\\n' +\r\n 'Type any subcommand for more details.';\r\n }\r\n\r\n switch (subcommand) {\r\n case 'list':\r\n return this.handleList();\r\n case 'refresh':\r\n return await this.handleRefresh();\r\n case 'add':\r\n if (this.onShowMCPAddScreen) {\r\n this.onShowMCPAddScreen();\r\n return ''; // UI will handle display\r\n }\r\n return '❌ MCP add screen not available. Please restart the CLI.';\r\n case 'remove':\r\n return this.handleRemove();\r\n case 'enable':\r\n return this.handleEnable();\r\n case 'disable':\r\n return this.handleDisable();\r\n default:\r\n return `❌ Unknown MCP subcommand: ${subcommand}\\nType /mcp for help.`;\r\n }\r\n }\r\n\r\n private handleList(): string {\r\n const servers = this.mcpConfigManager.getAllServers();\r\n\r\n if (servers.length === 0) {\r\n return '## No MCP Servers Configured\\n\\n' +\r\n `Configuration file: \\`${this.mcpConfigManager.getConfigPath()}\\`\\n\\n` +\r\n 'Use `/mcp add` to add your first MCP server.';\r\n }\r\n\r\n // Prepare data for the list screen\r\n const listData = servers.map(serverConfig => {\r\n const statuses = this.mcpServerManager.getStatus(serverConfig.name);\r\n const status = statuses[0];\r\n const tools = status?.tools || [];\r\n\r\n return {\r\n name: serverConfig.name,\r\n enabled: serverConfig.enabled !== false,\r\n status: serverConfig.enabled === false ? 'disconnected' as const : (status?.status || 'disconnected' as const),\r\n tools: tools.map(t => ({ name: t.name }))\r\n };\r\n });\r\n\r\n if (this.onShowMCPListScreen) {\r\n this.onShowMCPListScreen(listData);\r\n return ''; // UI will handle display\r\n }\r\n\r\n // Fallback to text output if screen not available\r\n let output = '## MCP Servers and Tools\\n\\n';\r\n\r\n for (const serverConfig of servers) {\r\n const statuses = this.mcpServerManager.getStatus(serverConfig.name);\r\n const status = statuses[0];\r\n const tools = status?.tools || [];\r\n\r\n const statusIcon = serverConfig.enabled === false ? '⏸️' :\r\n status?.status === 'connected' ? '✅' :\r\n status?.status === 'error' ? '❌' : '⚠️';\r\n\r\n const enabledLabel = serverConfig.enabled === false ? ' (disabled)' : '';\r\n\r\n output += `### ${statusIcon} ${serverConfig.name}${enabledLabel}\\n\\n`;\r\n output += `- **Command**: \\`${serverConfig.command}\\`\\n`;\r\n if (serverConfig.args && serverConfig.args.length > 0) {\r\n output += `- **Args**: \\`${serverConfig.args.join(' ')}\\`\\n`;\r\n }\r\n output += `- **Status**: ${serverConfig.enabled === false ? 'disabled' : (status?.status || 'unknown')}\\n`;\r\n output += `- **Tools**: ${tools.length}\\n\\n`;\r\n\r\n if (tools.length > 0) {\r\n for (const tool of tools) {\r\n output += ` - **${tool.name}**`;\r\n if (tool.description) {\r\n output += `: ${tool.description}`;\r\n }\r\n output += '\\n';\r\n }\r\n output += '\\n';\r\n }\r\n }\r\n\r\n return output;\r\n }\r\n\r\n private handleRemove(): string {\r\n const servers = this.mcpConfigManager.getAllServers();\r\n\r\n if (servers.length === 0) {\r\n return '❌ No MCP servers to remove.\\n\\nUse `/mcp add` to add servers first.';\r\n }\r\n\r\n if (this.onShowMCPRemoveScreen) {\r\n this.onShowMCPRemoveScreen(servers);\r\n return ''; // UI will handle display\r\n }\r\n return '❌ MCP remove screen not available. Please restart the CLI.';\r\n }\r\n\r\n private handleEnable(): string {\r\n const disabledServers = this.mcpConfigManager.getAllServers().filter(s => s.enabled === false);\r\n\r\n if (disabledServers.length === 0) {\r\n return '✅ All MCP servers are already enabled.\\n\\nUse `/mcp list` to see all servers.';\r\n }\r\n\r\n if (this.onShowMCPEnableScreen) {\r\n this.onShowMCPEnableScreen(disabledServers);\r\n return ''; // UI will handle display\r\n }\r\n return '❌ MCP enable screen not available. Please restart the CLI.';\r\n }\r\n\r\n private handleDisable(): string {\r\n const enabledServers = this.mcpConfigManager.getAllServers().filter(s => s.enabled !== false);\r\n\r\n if (enabledServers.length === 0) {\r\n return '⚠️ All MCP servers are already disabled.\\n\\nUse `/mcp list` to see all servers.';\r\n }\r\n\r\n if (this.onShowMCPDisableScreen) {\r\n this.onShowMCPDisableScreen(enabledServers);\r\n return ''; // UI will handle display\r\n }\r\n return '❌ MCP disable screen not available. Please restart the CLI.';\r\n }\r\n\r\n private async handleRefresh(): Promise<string> {\r\n try {\r\n // Reload config from disk (updates cache)\r\n const config = this.mcpConfigManager.reload();\r\n const servers = config.servers.filter(s => s.enabled !== false);\r\n\r\n if (servers.length === 0) {\r\n return '⚠️ No enabled MCP servers in configuration.';\r\n }\r\n\r\n // Refresh servers\r\n await this.mcpServerManager.refresh(servers);\r\n\r\n // Re-register tools\r\n for (const serverConfig of servers) {\r\n try {\r\n if (this.mcpServerManager.isConnected(serverConfig.name)) {\r\n const tools = await this.mcpServerManager.listTools(serverConfig.name);\r\n const wrappedTools = createMCPToolWrappers(serverConfig.name, tools, this.mcpServerManager);\r\n\r\n for (const tool of wrappedTools) {\r\n this.toolRegistry.register(tool);\r\n }\r\n }\r\n } catch (error) {\r\n // Continue with other servers\r\n }\r\n }\r\n\r\n // Get all servers (including disabled ones) for comprehensive status\r\n const allServers = this.mcpConfigManager.getAllServers();\r\n const statuses = this.mcpServerManager.getStatus();\r\n \r\n // Create a map for quick status lookup\r\n const statusMap = new Map(statuses.map(s => [s.name, s]));\r\n \r\n // Categorize servers\r\n const connectedServers: string[] = [];\r\n const disabledServers: string[] = [];\r\n const errorServers: string[] = [];\r\n \r\n for (const server of allServers) {\r\n if (server.enabled === false) {\r\n disabledServers.push(server.name);\r\n } else {\r\n const status = statusMap.get(server.name);\r\n if (status?.status === 'connected') {\r\n connectedServers.push(server.name);\r\n } else if (status?.status === 'error') {\r\n errorServers.push(server.name);\r\n }\r\n }\r\n }\r\n\r\n let output = '✓ MCP servers refreshed!\\n\\n';\r\n \r\n // Connected & Enabled section\r\n if (connectedServers.length > 0) {\r\n output += `**Connected & Enabled** (${connectedServers.length}):\\n`;\r\n for (const name of connectedServers) {\r\n output += ` - ${name}\\n`;\r\n }\r\n output += '\\n';\r\n }\r\n \r\n // Disabled section\r\n if (disabledServers.length > 0) {\r\n output += `**Disabled** (${disabledServers.length}):\\n`;\r\n for (const name of disabledServers) {\r\n output += ` - ${name}\\n`;\r\n }\r\n output += '\\n';\r\n }\r\n \r\n // Errors section\r\n if (errorServers.length > 0) {\r\n output += `**Errors** (${errorServers.length}):\\n`;\r\n for (const name of errorServers) {\r\n output += ` - ${name}\\n`;\r\n }\r\n output += '\\n';\r\n }\r\n \r\n output += `Use \\`/mcp list\\` for details.`;\r\n \r\n return output;\r\n } catch (error: any) {\r\n return `❌ Failed to refresh MCP servers: ${error.message}`;\r\n }\r\n }\r\n\r\n /**\r\n * Programmatically add an MCP server, connect to it, register its tools, and return status.\r\n * Used by the add_mcp AI tool for automatic MCP provisioning.\r\n */\r\n async addAndConnect(config: MCPServerConfig, timeoutMs: number = 60000): Promise<{\r\n success: boolean;\r\n serverName: string;\r\n tools: string[];\r\n error?: string;\r\n logs?: string;\r\n }> {\r\n const logs: string[] = [];\r\n\r\n try {\r\n // 1. Save config to disk\r\n logs.push(`[add_mcp] Saving config for server \"${config.name}\"...`);\r\n this.mcpConfigManager.addServer(config);\r\n logs.push(`[add_mcp] Config saved to ${this.mcpConfigManager.getConfigPath()}`);\r\n\r\n // 2. Connect to the server\r\n logs.push(`[add_mcp] Connecting to MCP server \"${config.name}\" (command: ${config.command} ${(config.args || []).join(' ')})...`);\r\n await this.mcpServerManager.connect(config, timeoutMs);\r\n logs.push(`[add_mcp] Connected successfully.`);\r\n\r\n // 3. List tools from the newly connected server\r\n const mcpTools = await this.mcpServerManager.listTools(config.name);\r\n logs.push(`[add_mcp] Server \"${config.name}\" provides ${mcpTools.length} tool(s).`);\r\n\r\n // 4. Remove any previously registered tools for this server (in case of re-add)\r\n this.toolRegistry.unregisterByPrefix(`mcp_${config.name}_`);\r\n\r\n // 5. Register the new tools\r\n const wrappedTools = createMCPToolWrappers(config.name, mcpTools, this.mcpServerManager);\r\n for (const tool of wrappedTools) {\r\n this.toolRegistry.register(tool);\r\n logs.push(`[add_mcp] Registered tool: ${tool.schema.name}`);\r\n }\r\n\r\n const toolNames = mcpTools.map(t => t.name);\r\n logs.push(`[add_mcp] All tools registered. Server \"${config.name}\" is ready.`);\r\n\r\n return {\r\n success: true,\r\n serverName: config.name,\r\n tools: toolNames,\r\n logs: logs.join('\\n'),\r\n };\r\n } catch (error: any) {\r\n logs.push(`[add_mcp] ERROR: ${error.message}`);\r\n\r\n // If connection failed, remove the config we just saved so we don't leave broken entries\r\n try {\r\n this.mcpConfigManager.removeServer(config.name);\r\n logs.push(`[add_mcp] Rolled back config for \"${config.name}\" due to connection failure.`);\r\n } catch (rollbackError: any) {\r\n logs.push(`[add_mcp] Warning: Could not rollback config: ${rollbackError.message}`);\r\n }\r\n\r\n return {\r\n success: false,\r\n serverName: config.name,\r\n tools: [],\r\n error: error.message,\r\n logs: logs.join('\\n'),\r\n };\r\n }\r\n }\r\n\r\n // Server management methods (called by CLI adapter after UI interaction)\r\n addServer(config: MCPServerConfig): { success: boolean; error?: string } {\r\n try {\r\n this.mcpConfigManager.addServer(config);\r\n return { success: true };\r\n } catch (error: any) {\r\n return { success: false, error: error.message };\r\n }\r\n }\r\n\r\n removeServer(name: string): void {\r\n this.mcpConfigManager.removeServer(name);\r\n }\r\n\r\n enableServer(name: string): void {\r\n this.mcpConfigManager.enableServer(name);\r\n }\r\n\r\n disableServer(name: string): void {\r\n this.mcpConfigManager.disableServer(name);\r\n }\r\n\r\n validateServerConfig(jsonString: string): { valid: boolean; config?: MCPServerConfig; error?: string } {\r\n return this.mcpConfigManager.validateServerConfigJSON(jsonString);\r\n }\r\n\r\n getConfigManager(): MCPConfigManager {\r\n return this.mcpConfigManager;\r\n }\r\n\r\n /**\r\n * Get the names of all currently connected MCP servers.\r\n */\r\n getConnectedServerNames(): string[] {\r\n const statuses = this.mcpServerManager.getStatus();\r\n return statuses\r\n .filter(s => s.status === 'connected')\r\n .map(s => s.name);\r\n }\r\n}\r\n\r\n"],"mappings":"AAEA,SAAS,6BAA6B;AAEtC,SAAS,UAAU,kBAAkB;AAE9B,MAAM,kBAAkB;AAAA,EAO3B,YACY,kBACA,kBACA,cACV;AAHU;AACA;AACA;AAAA,EACR;AAAA,EAVI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EASR,sBAAsB,UAA4B;AAC9C,SAAK,qBAAqB;AAAA,EAC9B;AAAA,EAEA,yBAAyB,UAAsD;AAC3E,SAAK,wBAAwB;AAAA,EACjC;AAAA,EAEA,yBAAyB,UAAsD;AAC3E,SAAK,wBAAwB;AAAA,EACjC;AAAA,EAEA,0BAA0B,UAAsD;AAC5E,SAAK,yBAAyB;AAAA,EAClC;AAAA,EAEA,uBAAuB,UAA6K;AAChM,SAAK,sBAAsB;AAAA,EAC/B;AAAA,EAEA,MAAM,gBAA+B;AACjC,QAAI;AAEA,YAAM,UAAU,KAAK,iBAAiB,WAAW;AAEjD,iBAAW,gBAAgB,SAAS;AAChC,YAAI;AACA,gBAAM,KAAK,iBAAiB,QAAQ,YAAY;AAGhD,gBAAM,QAAQ,MAAM,KAAK,iBAAiB,UAAU,aAAa,IAAI;AACrE,gBAAM,eAAe,sBAAsB,aAAa,MAAM,OAAO,KAAK,gBAAgB;AAE1F,qBAAW,QAAQ,cAAc;AAC7B,iBAAK,aAAa,SAAS,IAAI;AAAA,UACnC;AAAA,QACJ,SAAS,OAAO;AAEZ,qBAAW,cAAc,aAAa,IAAI,gCAAgC;AAAA,QAC9E;AAAA,MACJ;AAAA,IACJ,SAAS,OAAY;AACjB,eAAS,4BAA4B,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,WAAW,eAAe,CAAC;AAAA,IACtH;AAAA,EACJ;AAAA,EAEA,MAAM,cAAc,MAAiC;AACjD,UAAM,aAAa,KAAK,CAAC,GAAG,YAAY;AAExC,QAAI,CAAC,YAAY;AACb,aAAO;AAAA,IASX;AAEA,YAAQ,YAAY;AAAA,MAChB,KAAK;AACD,eAAO,KAAK,WAAW;AAAA,MAC3B,KAAK;AACD,eAAO,MAAM,KAAK,cAAc;AAAA,MACpC,KAAK;AACD,YAAI,KAAK,oBAAoB;AACzB,eAAK,mBAAmB;AACxB,iBAAO;AAAA,QACX;AACA,eAAO;AAAA,MACX,KAAK;AACD,eAAO,KAAK,aAAa;AAAA,MAC7B,KAAK;AACD,eAAO,KAAK,aAAa;AAAA,MAC7B,KAAK;AACD,eAAO,KAAK,cAAc;AAAA,MAC9B;AACI,eAAO,kCAA6B,UAAU;AAAA;AAAA,IACtD;AAAA,EACJ;AAAA,EAEQ,aAAqB;AACzB,UAAM,UAAU,KAAK,iBAAiB,cAAc;AAEpD,QAAI,QAAQ,WAAW,GAAG;AACtB,aAAO;AAAA;AAAA,wBACsB,KAAK,iBAAiB,cAAc,CAAC;AAAA;AAAA;AAAA,IAEtE;AAGA,UAAM,WAAW,QAAQ,IAAI,kBAAgB;AACzC,YAAM,WAAW,KAAK,iBAAiB,UAAU,aAAa,IAAI;AAClE,YAAM,SAAS,SAAS,CAAC;AACzB,YAAM,QAAQ,QAAQ,SAAS,CAAC;AAEhC,aAAO;AAAA,QACH,MAAM,aAAa;AAAA,QACnB,SAAS,aAAa,YAAY;AAAA,QAClC,QAAQ,aAAa,YAAY,QAAQ,iBAA2B,QAAQ,UAAU;AAAA,QACtF,OAAO,MAAM,IAAI,QAAM,EAAE,MAAM,EAAE,KAAK,EAAE;AAAA,MAC5C;AAAA,IACJ,CAAC;AAED,QAAI,KAAK,qBAAqB;AAC1B,WAAK,oBAAoB,QAAQ;AACjC,aAAO;AAAA,IACX;AAGA,QAAI,SAAS;AAEb,eAAW,gBAAgB,SAAS;AAChC,YAAM,WAAW,KAAK,iBAAiB,UAAU,aAAa,IAAI;AAClE,YAAM,SAAS,SAAS,CAAC;AACzB,YAAM,QAAQ,QAAQ,SAAS,CAAC;AAEhC,YAAM,aAAa,aAAa,YAAY,QAAQ,iBAChD,QAAQ,WAAW,cAAc,WAC7B,QAAQ,WAAW,UAAU,WAAM;AAE3C,YAAM,eAAe,aAAa,YAAY,QAAQ,gBAAgB;AAEtE,gBAAU,OAAO,UAAU,IAAI,aAAa,IAAI,GAAG,YAAY;AAAA;AAAA;AAC/D,gBAAU,oBAAoB,aAAa,OAAO;AAAA;AAClD,UAAI,aAAa,QAAQ,aAAa,KAAK,SAAS,GAAG;AACnD,kBAAU,iBAAiB,aAAa,KAAK,KAAK,GAAG,CAAC;AAAA;AAAA,MAC1D;AACA,gBAAU,iBAAiB,aAAa,YAAY,QAAQ,aAAc,QAAQ,UAAU,SAAU;AAAA;AACtG,gBAAU,gBAAgB,MAAM,MAAM;AAAA;AAAA;AAEtC,UAAI,MAAM,SAAS,GAAG;AAClB,mBAAW,QAAQ,OAAO;AACtB,oBAAU,SAAS,KAAK,IAAI;AAC5B,cAAI,KAAK,aAAa;AAClB,sBAAU,KAAK,KAAK,WAAW;AAAA,UACnC;AACA,oBAAU;AAAA,QACd;AACA,kBAAU;AAAA,MACd;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EAEQ,eAAuB;AAC3B,UAAM,UAAU,KAAK,iBAAiB,cAAc;AAEpD,QAAI,QAAQ,WAAW,GAAG;AACtB,aAAO;AAAA,IACX;AAEA,QAAI,KAAK,uBAAuB;AAC5B,WAAK,sBAAsB,OAAO;AAClC,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EAEQ,eAAuB;AAC3B,UAAM,kBAAkB,KAAK,iBAAiB,cAAc,EAAE,OAAO,OAAK,EAAE,YAAY,KAAK;AAE7F,QAAI,gBAAgB,WAAW,GAAG;AAC9B,aAAO;AAAA,IACX;AAEA,QAAI,KAAK,uBAAuB;AAC5B,WAAK,sBAAsB,eAAe;AAC1C,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EAEQ,gBAAwB;AAC5B,UAAM,iBAAiB,KAAK,iBAAiB,cAAc,EAAE,OAAO,OAAK,EAAE,YAAY,KAAK;AAE5F,QAAI,eAAe,WAAW,GAAG;AAC7B,aAAO;AAAA,IACX;AAEA,QAAI,KAAK,wBAAwB;AAC7B,WAAK,uBAAuB,cAAc;AAC1C,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAc,gBAAiC;AAC3C,QAAI;AAEA,YAAM,SAAS,KAAK,iBAAiB,OAAO;AAC5C,YAAM,UAAU,OAAO,QAAQ,OAAO,OAAK,EAAE,YAAY,KAAK;AAE9D,UAAI,QAAQ,WAAW,GAAG;AACtB,eAAO;AAAA,MACX;AAGA,YAAM,KAAK,iBAAiB,QAAQ,OAAO;AAG3C,iBAAW,gBAAgB,SAAS;AAChC,YAAI;AACA,cAAI,KAAK,iBAAiB,YAAY,aAAa,IAAI,GAAG;AACtD,kBAAM,QAAQ,MAAM,KAAK,iBAAiB,UAAU,aAAa,IAAI;AACrE,kBAAM,eAAe,sBAAsB,aAAa,MAAM,OAAO,KAAK,gBAAgB;AAE1F,uBAAW,QAAQ,cAAc;AAC7B,mBAAK,aAAa,SAAS,IAAI;AAAA,YACnC;AAAA,UACJ;AAAA,QACJ,SAAS,OAAO;AAAA,QAEhB;AAAA,MACJ;AAGA,YAAM,aAAa,KAAK,iBAAiB,cAAc;AACvD,YAAM,WAAW,KAAK,iBAAiB,UAAU;AAGjD,YAAM,YAAY,IAAI,IAAI,SAAS,IAAI,OAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAGxD,YAAM,mBAA6B,CAAC;AACpC,YAAM,kBAA4B,CAAC;AACnC,YAAM,eAAyB,CAAC;AAEhC,iBAAW,UAAU,YAAY;AAC7B,YAAI,OAAO,YAAY,OAAO;AAC1B,0BAAgB,KAAK,OAAO,IAAI;AAAA,QACpC,OAAO;AACH,gBAAM,SAAS,UAAU,IAAI,OAAO,IAAI;AACxC,cAAI,QAAQ,WAAW,aAAa;AAChC,6BAAiB,KAAK,OAAO,IAAI;AAAA,UACrC,WAAW,QAAQ,WAAW,SAAS;AACnC,yBAAa,KAAK,OAAO,IAAI;AAAA,UACjC;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,SAAS;AAGb,UAAI,iBAAiB,SAAS,GAAG;AAC7B,kBAAU,4BAA4B,iBAAiB,MAAM;AAAA;AAC7D,mBAAW,QAAQ,kBAAkB;AACjC,oBAAU,OAAO,IAAI;AAAA;AAAA,QACzB;AACA,kBAAU;AAAA,MACd;AAGA,UAAI,gBAAgB,SAAS,GAAG;AAC5B,kBAAU,iBAAiB,gBAAgB,MAAM;AAAA;AACjD,mBAAW,QAAQ,iBAAiB;AAChC,oBAAU,OAAO,IAAI;AAAA;AAAA,QACzB;AACA,kBAAU;AAAA,MACd;AAGA,UAAI,aAAa,SAAS,GAAG;AACzB,kBAAU,eAAe,aAAa,MAAM;AAAA;AAC5C,mBAAW,QAAQ,cAAc;AAC7B,oBAAU,OAAO,IAAI;AAAA;AAAA,QACzB;AACA,kBAAU;AAAA,MACd;AAEA,gBAAU;AAEV,aAAO;AAAA,IACX,SAAS,OAAY;AACjB,aAAO,yCAAoC,MAAM,OAAO;AAAA,IAC5D;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAc,QAAyB,YAAoB,KAM9D;AACC,UAAM,OAAiB,CAAC;AAExB,QAAI;AAEA,WAAK,KAAK,uCAAuC,OAAO,IAAI,MAAM;AAClE,WAAK,iBAAiB,UAAU,MAAM;AACtC,WAAK,KAAK,6BAA6B,KAAK,iBAAiB,cAAc,CAAC,EAAE;AAG9E,WAAK,KAAK,uCAAuC,OAAO,IAAI,eAAe,OAAO,OAAO,KAAK,OAAO,QAAQ,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM;AAChI,YAAM,KAAK,iBAAiB,QAAQ,QAAQ,SAAS;AACrD,WAAK,KAAK,mCAAmC;AAG7C,YAAM,WAAW,MAAM,KAAK,iBAAiB,UAAU,OAAO,IAAI;AAClE,WAAK,KAAK,qBAAqB,OAAO,IAAI,cAAc,SAAS,MAAM,WAAW;AAGlF,WAAK,aAAa,mBAAmB,OAAO,OAAO,IAAI,GAAG;AAG1D,YAAM,eAAe,sBAAsB,OAAO,MAAM,UAAU,KAAK,gBAAgB;AACvF,iBAAW,QAAQ,cAAc;AAC7B,aAAK,aAAa,SAAS,IAAI;AAC/B,aAAK,KAAK,8BAA8B,KAAK,OAAO,IAAI,EAAE;AAAA,MAC9D;AAEA,YAAM,YAAY,SAAS,IAAI,OAAK,EAAE,IAAI;AAC1C,WAAK,KAAK,2CAA2C,OAAO,IAAI,aAAa;AAE7E,aAAO;AAAA,QACH,SAAS;AAAA,QACT,YAAY,OAAO;AAAA,QACnB,OAAO;AAAA,QACP,MAAM,KAAK,KAAK,IAAI;AAAA,MACxB;AAAA,IACJ,SAAS,OAAY;AACjB,WAAK,KAAK,oBAAoB,MAAM,OAAO,EAAE;AAG7C,UAAI;AACA,aAAK,iBAAiB,aAAa,OAAO,IAAI;AAC9C,aAAK,KAAK,qCAAqC,OAAO,IAAI,8BAA8B;AAAA,MAC5F,SAAS,eAAoB;AACzB,aAAK,KAAK,iDAAiD,cAAc,OAAO,EAAE;AAAA,MACtF;AAEA,aAAO;AAAA,QACH,SAAS;AAAA,QACT,YAAY,OAAO;AAAA,QACnB,OAAO,CAAC;AAAA,QACR,OAAO,MAAM;AAAA,QACb,MAAM,KAAK,KAAK,IAAI;AAAA,MACxB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA,EAGA,UAAU,QAA+D;AACrE,QAAI;AACA,WAAK,iBAAiB,UAAU,MAAM;AACtC,aAAO,EAAE,SAAS,KAAK;AAAA,IAC3B,SAAS,OAAY;AACjB,aAAO,EAAE,SAAS,OAAO,OAAO,MAAM,QAAQ;AAAA,IAClD;AAAA,EACJ;AAAA,EAEA,aAAa,MAAoB;AAC7B,SAAK,iBAAiB,aAAa,IAAI;AAAA,EAC3C;AAAA,EAEA,aAAa,MAAoB;AAC7B,SAAK,iBAAiB,aAAa,IAAI;AAAA,EAC3C;AAAA,EAEA,cAAc,MAAoB;AAC9B,SAAK,iBAAiB,cAAc,IAAI;AAAA,EAC5C;AAAA,EAEA,qBAAqB,YAAkF;AACnG,WAAO,KAAK,iBAAiB,yBAAyB,UAAU;AAAA,EACpE;AAAA,EAEA,mBAAqC;AACjC,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,0BAAoC;AAChC,UAAM,WAAW,KAAK,iBAAiB,UAAU;AACjD,WAAO,SACF,OAAO,OAAK,EAAE,WAAW,WAAW,EACpC,IAAI,OAAK,EAAE,IAAI;AAAA,EACxB;AACJ;","names":[]}
|
|
@@ -1,167 +1,151 @@
|
|
|
1
|
-
import { Client } from
|
|
2
|
-
import { StdioClientTransport } from
|
|
3
|
-
import { logWarning } from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
2
|
+
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
3
|
+
import { logWarning } from "../utils/logger.js";
|
|
4
|
+
class MCPServerManager {
|
|
5
|
+
servers = /* @__PURE__ */ new Map();
|
|
6
|
+
statuses = /* @__PURE__ */ new Map();
|
|
7
|
+
startTimes = /* @__PURE__ */ new Map();
|
|
8
|
+
async connect(config, timeoutMs = 6e4) {
|
|
9
|
+
let transport;
|
|
10
|
+
try {
|
|
11
|
+
this.statuses.set(config.name, {
|
|
12
|
+
name: config.name,
|
|
13
|
+
status: "connecting",
|
|
14
|
+
tools: []
|
|
15
|
+
});
|
|
16
|
+
transport = new StdioClientTransport({
|
|
17
|
+
command: config.command,
|
|
18
|
+
args: config.args || [],
|
|
19
|
+
env: { ...process.env, ...config.env },
|
|
20
|
+
stderr: "ignore"
|
|
21
|
+
// Suppress stderr output to terminal
|
|
22
|
+
});
|
|
23
|
+
const client = new Client({
|
|
24
|
+
name: "centaurus-cli",
|
|
25
|
+
version: "1.0.0"
|
|
26
|
+
}, {
|
|
27
|
+
capabilities: {}
|
|
28
|
+
});
|
|
29
|
+
const connectPromise = client.connect(transport);
|
|
30
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
31
|
+
setTimeout(() => reject(new Error(`Connection to MCP server '${config.name}' timed out after ${timeoutMs}ms`)), timeoutMs);
|
|
32
|
+
});
|
|
33
|
+
await Promise.race([connectPromise, timeoutPromise]);
|
|
34
|
+
const toolsResponse = await client.listTools();
|
|
35
|
+
const tools = toolsResponse.tools.map((tool) => ({
|
|
36
|
+
name: tool.name,
|
|
37
|
+
description: tool.description,
|
|
38
|
+
inputSchema: tool.inputSchema
|
|
39
|
+
}));
|
|
40
|
+
this.servers.set(config.name, {
|
|
41
|
+
client,
|
|
42
|
+
process: transport.process,
|
|
43
|
+
// Access internal process for cleanup
|
|
44
|
+
config
|
|
45
|
+
});
|
|
46
|
+
this.startTimes.set(config.name, Date.now());
|
|
47
|
+
this.statuses.set(config.name, {
|
|
48
|
+
name: config.name,
|
|
49
|
+
status: "connected",
|
|
50
|
+
tools
|
|
51
|
+
});
|
|
52
|
+
} catch (error) {
|
|
53
|
+
if (transport && transport.process) {
|
|
10
54
|
try {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
name: config.name,
|
|
14
|
-
status: 'connecting',
|
|
15
|
-
tools: []
|
|
16
|
-
});
|
|
17
|
-
// Create transport with stderr suppressed to prevent logs in terminal
|
|
18
|
-
transport = new StdioClientTransport({
|
|
19
|
-
command: config.command,
|
|
20
|
-
args: config.args || [],
|
|
21
|
-
env: { ...process.env, ...config.env },
|
|
22
|
-
stderr: 'ignore' // Suppress stderr output to terminal
|
|
23
|
-
});
|
|
24
|
-
// Create client
|
|
25
|
-
const client = new Client({
|
|
26
|
-
name: 'centaurus-cli',
|
|
27
|
-
version: '1.0.0'
|
|
28
|
-
}, {
|
|
29
|
-
capabilities: {}
|
|
30
|
-
});
|
|
31
|
-
// Connect to the server with a timeout (OPS-15)
|
|
32
|
-
const connectPromise = client.connect(transport);
|
|
33
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
34
|
-
setTimeout(() => reject(new Error(`Connection to MCP server '${config.name}' timed out after 10000ms`)), 10000);
|
|
35
|
-
});
|
|
36
|
-
await Promise.race([connectPromise, timeoutPromise]);
|
|
37
|
-
// List available tools
|
|
38
|
-
const toolsResponse = await client.listTools();
|
|
39
|
-
const tools = toolsResponse.tools.map(tool => ({
|
|
40
|
-
name: tool.name,
|
|
41
|
-
description: tool.description,
|
|
42
|
-
inputSchema: tool.inputSchema
|
|
43
|
-
}));
|
|
44
|
-
// Store client (transport manages the process internally)
|
|
45
|
-
this.servers.set(config.name, {
|
|
46
|
-
client,
|
|
47
|
-
process: transport.process, // Access internal process for cleanup
|
|
48
|
-
config
|
|
49
|
-
});
|
|
50
|
-
this.startTimes.set(config.name, Date.now());
|
|
51
|
-
// Update status
|
|
52
|
-
this.statuses.set(config.name, {
|
|
53
|
-
name: config.name,
|
|
54
|
-
status: 'connected',
|
|
55
|
-
tools
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
// Cleanup orphan process if transport was initialized (OPS-16)
|
|
60
|
-
if (transport && transport.process) {
|
|
61
|
-
try {
|
|
62
|
-
transport.process.kill('SIGKILL');
|
|
63
|
-
}
|
|
64
|
-
catch (killError) {
|
|
65
|
-
// Ignore process kill errors
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
this.statuses.set(config.name, {
|
|
69
|
-
name: config.name,
|
|
70
|
-
status: 'error',
|
|
71
|
-
tools: [],
|
|
72
|
-
error: error.message || 'Failed to connect'
|
|
73
|
-
});
|
|
74
|
-
throw error;
|
|
55
|
+
transport.process.kill("SIGKILL");
|
|
56
|
+
} catch (killError) {
|
|
75
57
|
}
|
|
58
|
+
}
|
|
59
|
+
this.statuses.set(config.name, {
|
|
60
|
+
name: config.name,
|
|
61
|
+
status: "error",
|
|
62
|
+
tools: [],
|
|
63
|
+
error: error.message || "Failed to connect"
|
|
64
|
+
});
|
|
65
|
+
throw error;
|
|
76
66
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
tools: []
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
logWarning(`Error disconnecting from MCP server ${name}: ${error?.message || error}`);
|
|
98
|
-
}
|
|
67
|
+
}
|
|
68
|
+
async disconnect(name) {
|
|
69
|
+
const server = this.servers.get(name);
|
|
70
|
+
if (!server) return;
|
|
71
|
+
try {
|
|
72
|
+
await server.client.close();
|
|
73
|
+
server.process.kill();
|
|
74
|
+
this.servers.delete(name);
|
|
75
|
+
this.startTimes.delete(name);
|
|
76
|
+
this.statuses.set(name, {
|
|
77
|
+
name,
|
|
78
|
+
status: "disconnected",
|
|
79
|
+
tools: []
|
|
80
|
+
});
|
|
81
|
+
} catch (error) {
|
|
82
|
+
logWarning(`Error disconnecting from MCP server ${name}: ${error?.message || error}`);
|
|
99
83
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
84
|
+
}
|
|
85
|
+
async disconnectAll() {
|
|
86
|
+
const disconnectPromises = Array.from(this.servers.keys()).map(
|
|
87
|
+
(name) => this.disconnect(name)
|
|
88
|
+
);
|
|
89
|
+
await Promise.all(disconnectPromises);
|
|
90
|
+
}
|
|
91
|
+
getClient(name) {
|
|
92
|
+
return this.servers.get(name)?.client;
|
|
93
|
+
}
|
|
94
|
+
getStatus(serverName) {
|
|
95
|
+
if (serverName) {
|
|
96
|
+
const status = this.statuses.get(serverName);
|
|
97
|
+
return status ? [this.enrichStatus(status)] : [];
|
|
113
98
|
}
|
|
114
|
-
enrichStatus(status)
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
99
|
+
return Array.from(this.statuses.values()).map((status) => this.enrichStatus(status));
|
|
100
|
+
}
|
|
101
|
+
enrichStatus(status) {
|
|
102
|
+
const startTime = this.startTimes.get(status.name);
|
|
103
|
+
if (startTime && status.status === "connected") {
|
|
104
|
+
return {
|
|
105
|
+
...status,
|
|
106
|
+
uptime: Math.floor((Date.now() - startTime) / 1e3)
|
|
107
|
+
};
|
|
123
108
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
const allTools = [];
|
|
131
|
-
for (const status of this.statuses.values()) {
|
|
132
|
-
if (status.status === 'connected') {
|
|
133
|
-
allTools.push(...status.tools);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
return allTools;
|
|
109
|
+
return status;
|
|
110
|
+
}
|
|
111
|
+
async listTools(serverName) {
|
|
112
|
+
if (serverName) {
|
|
113
|
+
const status = this.statuses.get(serverName);
|
|
114
|
+
return status?.tools || [];
|
|
137
115
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
try {
|
|
144
|
-
const result = await server.client.callTool({ name: toolName, arguments: args });
|
|
145
|
-
return result;
|
|
146
|
-
}
|
|
147
|
-
catch (error) {
|
|
148
|
-
throw new Error(`Tool execution failed: ${error.message}`);
|
|
149
|
-
}
|
|
116
|
+
const allTools = [];
|
|
117
|
+
for (const status of this.statuses.values()) {
|
|
118
|
+
if (status.status === "connected") {
|
|
119
|
+
allTools.push(...status.tools);
|
|
120
|
+
}
|
|
150
121
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
.map(config => this.connect(config).catch(error => {
|
|
158
|
-
logWarning(`Failed to connect to MCP server ${config.name}: ${error?.message || error}`);
|
|
159
|
-
}));
|
|
160
|
-
await Promise.all(connectPromises);
|
|
122
|
+
return allTools;
|
|
123
|
+
}
|
|
124
|
+
async callTool(serverName, toolName, args) {
|
|
125
|
+
const server = this.servers.get(serverName);
|
|
126
|
+
if (!server) {
|
|
127
|
+
throw new Error(`Server ${serverName} not connected`);
|
|
161
128
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
129
|
+
try {
|
|
130
|
+
const result = await server.client.callTool({ name: toolName, arguments: args });
|
|
131
|
+
return result;
|
|
132
|
+
} catch (error) {
|
|
133
|
+
throw new Error(`Tool execution failed: ${error.message}`);
|
|
165
134
|
}
|
|
135
|
+
}
|
|
136
|
+
async refresh(configs) {
|
|
137
|
+
await this.disconnectAll();
|
|
138
|
+
const connectPromises = configs.filter((config) => config.enabled !== false).map((config) => this.connect(config).catch((error) => {
|
|
139
|
+
logWarning(`Failed to connect to MCP server ${config.name}: ${error?.message || error}`);
|
|
140
|
+
}));
|
|
141
|
+
await Promise.all(connectPromises);
|
|
142
|
+
}
|
|
143
|
+
isConnected(serverName) {
|
|
144
|
+
const status = this.statuses.get(serverName);
|
|
145
|
+
return status?.status === "connected";
|
|
146
|
+
}
|
|
166
147
|
}
|
|
148
|
+
export {
|
|
149
|
+
MCPServerManager
|
|
150
|
+
};
|
|
167
151
|
//# sourceMappingURL=mcp-server-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server-manager.js","sourceRoot":"","sources":["../../src/mcp/mcp-server-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/mcp/mcp-server-manager.ts"],"sourcesContent":["import { Client } from '@modelcontextprotocol/sdk/client/index.js';\r\nimport { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';\r\nimport { spawn, ChildProcess } from 'child_process';\r\nimport { MCPServerConfig } from '../config/mcp-config-manager.js';\r\nimport { logError, logWarning } from '../utils/logger.js';\r\n\r\nexport interface MCPTool {\r\n name: string;\r\n description?: string;\r\n inputSchema?: any;\r\n}\r\n\r\nexport interface MCPServerStatus {\r\n name: string;\r\n status: 'connected' | 'disconnected' | 'error' | 'connecting';\r\n tools: MCPTool[];\r\n error?: string;\r\n uptime?: number;\r\n}\r\n\r\nexport class MCPServerManager {\r\n private servers: Map<string, { client: Client; process: ChildProcess; config: MCPServerConfig }> = new Map();\r\n private statuses: Map<string, MCPServerStatus> = new Map();\r\n private startTimes: Map<string, number> = new Map();\r\n\r\n async connect(config: MCPServerConfig, timeoutMs: number = 60000): Promise<void> {\r\n let transport: StdioClientTransport | undefined;\r\n try {\r\n // Set status to connecting\r\n this.statuses.set(config.name, {\r\n name: config.name,\r\n status: 'connecting',\r\n tools: []\r\n });\r\n\r\n // Create transport with stderr suppressed to prevent logs in terminal\r\n transport = new StdioClientTransport({\r\n command: config.command,\r\n args: config.args || [],\r\n env: { ...process.env, ...config.env },\r\n stderr: 'ignore' // Suppress stderr output to terminal\r\n });\r\n\r\n // Create client\r\n const client = new Client({\r\n name: 'centaurus-cli',\r\n version: '1.0.0'\r\n }, {\r\n capabilities: {}\r\n });\r\n\r\n // Connect to the server with a timeout (OPS-15)\r\n const connectPromise = client.connect(transport);\r\n const timeoutPromise = new Promise<void>((_, reject) => {\r\n setTimeout(() => reject(new Error(`Connection to MCP server '${config.name}' timed out after ${timeoutMs}ms`)), timeoutMs);\r\n });\r\n\r\n await Promise.race([connectPromise, timeoutPromise]);\r\n\r\n // List available tools\r\n const toolsResponse = await client.listTools();\r\n const tools: MCPTool[] = toolsResponse.tools.map(tool => ({\r\n name: tool.name,\r\n description: tool.description,\r\n inputSchema: tool.inputSchema\r\n }));\r\n\r\n // Store client (transport manages the process internally)\r\n this.servers.set(config.name, {\r\n client,\r\n process: (transport as any).process, // Access internal process for cleanup\r\n config\r\n });\r\n this.startTimes.set(config.name, Date.now());\r\n\r\n // Update status\r\n this.statuses.set(config.name, {\r\n name: config.name,\r\n status: 'connected',\r\n tools\r\n });\r\n\r\n } catch (error: any) {\r\n // Cleanup orphan process if transport was initialized (OPS-16)\r\n if (transport && (transport as any).process) {\r\n try {\r\n ((transport as any).process as ChildProcess).kill('SIGKILL');\r\n } catch (killError) {\r\n // Ignore process kill errors\r\n }\r\n }\r\n\r\n this.statuses.set(config.name, {\r\n name: config.name,\r\n status: 'error',\r\n tools: [],\r\n error: error.message || 'Failed to connect'\r\n });\r\n throw error;\r\n }\r\n }\r\n\r\n async disconnect(name: string): Promise<void> {\r\n const server = this.servers.get(name);\r\n if (!server) return;\r\n\r\n try {\r\n // Gracefully close the client\r\n await server.client.close();\r\n\r\n // Kill the process\r\n server.process.kill();\r\n\r\n // Clean up\r\n this.servers.delete(name);\r\n this.startTimes.delete(name);\r\n\r\n // Update status\r\n this.statuses.set(name, {\r\n name,\r\n status: 'disconnected',\r\n tools: []\r\n });\r\n } catch (error: any) {\r\n logWarning(`Error disconnecting from MCP server ${name}: ${error?.message || error}`);\r\n }\r\n }\r\n\r\n async disconnectAll(): Promise<void> {\r\n const disconnectPromises = Array.from(this.servers.keys()).map(name =>\r\n this.disconnect(name)\r\n );\r\n await Promise.all(disconnectPromises);\r\n }\r\n\r\n getClient(name: string): Client | undefined {\r\n return this.servers.get(name)?.client;\r\n }\r\n\r\n getStatus(serverName?: string): MCPServerStatus[] {\r\n if (serverName) {\r\n const status = this.statuses.get(serverName);\r\n return status ? [this.enrichStatus(status)] : [];\r\n }\r\n\r\n return Array.from(this.statuses.values()).map(status => this.enrichStatus(status));\r\n }\r\n\r\n private enrichStatus(status: MCPServerStatus): MCPServerStatus {\r\n const startTime = this.startTimes.get(status.name);\r\n if (startTime && status.status === 'connected') {\r\n return {\r\n ...status,\r\n uptime: Math.floor((Date.now() - startTime) / 1000)\r\n };\r\n }\r\n return status;\r\n }\r\n\r\n async listTools(serverName?: string): Promise<MCPTool[]> {\r\n if (serverName) {\r\n const status = this.statuses.get(serverName);\r\n return status?.tools || [];\r\n }\r\n\r\n // Return tools from all connected servers\r\n const allTools: MCPTool[] = [];\r\n for (const status of this.statuses.values()) {\r\n if (status.status === 'connected') {\r\n allTools.push(...status.tools);\r\n }\r\n }\r\n return allTools;\r\n }\r\n\r\n async callTool(serverName: string, toolName: string, args: any): Promise<any> {\r\n const server = this.servers.get(serverName);\r\n if (!server) {\r\n throw new Error(`Server ${serverName} not connected`);\r\n }\r\n\r\n try {\r\n const result = await server.client.callTool({ name: toolName, arguments: args });\r\n return result;\r\n } catch (error: any) {\r\n throw new Error(`Tool execution failed: ${error.message}`);\r\n }\r\n }\r\n\r\n async refresh(configs: MCPServerConfig[]): Promise<void> {\r\n // Disconnect all servers\r\n await this.disconnectAll();\r\n\r\n // Reconnect enabled servers\r\n const connectPromises = configs\r\n .filter(config => config.enabled !== false)\r\n .map(config => this.connect(config).catch(error => {\r\n logWarning(`Failed to connect to MCP server ${config.name}: ${error?.message || error}`);\r\n }));\r\n\r\n await Promise.all(connectPromises);\r\n }\r\n\r\n isConnected(serverName: string): boolean {\r\n const status = this.statuses.get(serverName);\r\n return status?.status === 'connected';\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
|
|
@@ -1,102 +1,82 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sanitize JSON Schema for Gemini compatibility
|
|
3
|
-
* Removes properties that Gemini doesn't support
|
|
4
|
-
*/
|
|
5
1
|
function sanitizeSchemaForGemini(schema) {
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
if (!schema || typeof schema !== "object") {
|
|
3
|
+
return schema;
|
|
4
|
+
}
|
|
5
|
+
const sanitized = Array.isArray(schema) ? [...schema] : { ...schema };
|
|
6
|
+
const unsupportedProps = [
|
|
7
|
+
"exclusiveMinimum",
|
|
8
|
+
"exclusiveMaximum",
|
|
9
|
+
"const",
|
|
10
|
+
"contentMediaType",
|
|
11
|
+
"contentEncoding",
|
|
12
|
+
"examples",
|
|
13
|
+
"$schema",
|
|
14
|
+
"$id",
|
|
15
|
+
"$ref",
|
|
16
|
+
"definitions",
|
|
17
|
+
"$defs"
|
|
18
|
+
];
|
|
19
|
+
for (const prop of unsupportedProps) {
|
|
20
|
+
delete sanitized[prop];
|
|
21
|
+
}
|
|
22
|
+
for (const key in sanitized) {
|
|
23
|
+
if (typeof sanitized[key] === "object" && sanitized[key] !== null) {
|
|
24
|
+
sanitized[key] = sanitizeSchemaForGemini(sanitized[key]);
|
|
8
25
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
// Remove unsupported properties
|
|
12
|
-
const unsupportedProps = [
|
|
13
|
-
'exclusiveMinimum',
|
|
14
|
-
'exclusiveMaximum',
|
|
15
|
-
'const',
|
|
16
|
-
'contentMediaType',
|
|
17
|
-
'contentEncoding',
|
|
18
|
-
'examples',
|
|
19
|
-
'$schema',
|
|
20
|
-
'$id',
|
|
21
|
-
'$ref',
|
|
22
|
-
'definitions',
|
|
23
|
-
'$defs'
|
|
24
|
-
];
|
|
25
|
-
for (const prop of unsupportedProps) {
|
|
26
|
-
delete sanitized[prop];
|
|
27
|
-
}
|
|
28
|
-
// Recursively sanitize nested objects
|
|
29
|
-
for (const key in sanitized) {
|
|
30
|
-
if (typeof sanitized[key] === 'object' && sanitized[key] !== null) {
|
|
31
|
-
sanitized[key] = sanitizeSchemaForGemini(sanitized[key]);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return sanitized;
|
|
26
|
+
}
|
|
27
|
+
return sanitized;
|
|
35
28
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
// MCP tools return content as an array of content items
|
|
72
|
-
return result.content
|
|
73
|
-
.map((item) => {
|
|
74
|
-
if (item.type === 'text') {
|
|
75
|
-
return item.text;
|
|
76
|
-
}
|
|
77
|
-
else if (item.type === 'image') {
|
|
78
|
-
return `[Image: ${item.data}]`;
|
|
79
|
-
}
|
|
80
|
-
else if (item.type === 'resource') {
|
|
81
|
-
return `[Resource: ${item.resource?.uri}]`;
|
|
82
|
-
}
|
|
83
|
-
return JSON.stringify(item);
|
|
84
|
-
})
|
|
85
|
-
.join('\n');
|
|
86
|
-
}
|
|
87
|
-
// Fallback: return JSON stringified result
|
|
88
|
-
return JSON.stringify(result, null, 2);
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
throw new Error(`MCP tool execution failed: ${error.message}`);
|
|
29
|
+
function createMCPToolWrapper(serverName, mcpTool, serverManager) {
|
|
30
|
+
const sanitizedSchema = sanitizeSchemaForGemini(mcpTool.inputSchema || {
|
|
31
|
+
type: "object",
|
|
32
|
+
properties: {},
|
|
33
|
+
required: []
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
schema: {
|
|
37
|
+
name: `mcp_${serverName}_${mcpTool.name}`,
|
|
38
|
+
description: mcpTool.description || `${mcpTool.name} from ${serverName} MCP server`,
|
|
39
|
+
parameters: sanitizedSchema
|
|
40
|
+
},
|
|
41
|
+
async execute(args, context) {
|
|
42
|
+
try {
|
|
43
|
+
if (!serverManager.isConnected(serverName)) {
|
|
44
|
+
throw new Error(`MCP server '${serverName}' is not connected`);
|
|
45
|
+
}
|
|
46
|
+
const toolDisplayName = `mcp_${serverName}_${mcpTool.name}`;
|
|
47
|
+
const approved = await context.requireApproval(
|
|
48
|
+
`Execute MCP tool: ${serverName} ${mcpTool.name}`,
|
|
49
|
+
true
|
|
50
|
+
// MCP tools are considered risky as they can have side effects
|
|
51
|
+
);
|
|
52
|
+
if (!approved || typeof approved === "object" && !approved.approved) {
|
|
53
|
+
return "MCP tool execution cancelled by user.";
|
|
54
|
+
}
|
|
55
|
+
const result = await serverManager.callTool(serverName, mcpTool.name, args);
|
|
56
|
+
if (result.content && Array.isArray(result.content)) {
|
|
57
|
+
return result.content.map((item) => {
|
|
58
|
+
if (item.type === "text") {
|
|
59
|
+
return item.text;
|
|
60
|
+
} else if (item.type === "image") {
|
|
61
|
+
return `[Image: ${item.data}]`;
|
|
62
|
+
} else if (item.type === "resource") {
|
|
63
|
+
return `[Resource: ${item.resource?.uri}]`;
|
|
92
64
|
}
|
|
65
|
+
return JSON.stringify(item);
|
|
66
|
+
}).join("\n");
|
|
93
67
|
}
|
|
94
|
-
|
|
68
|
+
return JSON.stringify(result, null, 2);
|
|
69
|
+
} catch (error) {
|
|
70
|
+
throw new Error(`MCP tool execution failed: ${error.message}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
};
|
|
95
74
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
*/
|
|
99
|
-
export function createMCPToolWrappers(serverName, tools, serverManager) {
|
|
100
|
-
return tools.map(tool => createMCPToolWrapper(serverName, tool, serverManager));
|
|
75
|
+
function createMCPToolWrappers(serverName, tools, serverManager) {
|
|
76
|
+
return tools.map((tool) => createMCPToolWrapper(serverName, tool, serverManager));
|
|
101
77
|
}
|
|
78
|
+
export {
|
|
79
|
+
createMCPToolWrapper,
|
|
80
|
+
createMCPToolWrappers
|
|
81
|
+
};
|
|
102
82
|
//# sourceMappingURL=mcp-tool-wrapper.js.map
|