fss-link 1.0.49 → 1.0.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +0 -0
- package/dist/package.json +2 -2
- package/dist/src/config/auth.js +8 -5
- package/dist/src/config/auth.js.map +1 -1
- package/dist/src/config/database.d.ts +103 -11
- package/dist/src/config/database.js +301 -59
- package/dist/src/config/database.js.map +1 -1
- package/dist/src/config/databaseBackup.d.ts +114 -0
- package/dist/src/config/databaseBackup.js +334 -0
- package/dist/src/config/databaseBackup.js.map +1 -0
- package/dist/src/config/databaseMigrations.d.ts +63 -0
- package/dist/src/config/databaseMigrations.js +379 -0
- package/dist/src/config/databaseMigrations.js.map +1 -0
- package/dist/src/config/databasePool.d.ts +70 -0
- package/dist/src/config/databasePool.js +193 -0
- package/dist/src/config/databasePool.js.map +1 -0
- package/dist/src/config/queryOptimizer.d.ts +127 -0
- package/dist/src/config/queryOptimizer.js +309 -0
- package/dist/src/config/queryOptimizer.js.map +1 -0
- package/dist/src/utils/sandbox.js +2 -8
- package/dist/src/utils/sandbox.js.map +1 -1
- package/dist/src/validateNonInterActiveAuth.js +3 -7
- package/dist/src/validateNonInterActiveAuth.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/dist/commands/mcp/add.test.ts +0 -122
- package/dist/commands/mcp/add.ts +0 -222
- package/dist/commands/mcp/list.test.ts +0 -154
- package/dist/commands/mcp/list.ts +0 -139
- package/dist/commands/mcp/remove.test.ts +0 -69
- package/dist/commands/mcp/remove.ts +0 -60
- package/dist/commands/mcp.test.ts +0 -55
- package/dist/commands/mcp.ts +0 -27
- package/dist/config/apiValidation.test.ts +0 -118
- package/dist/config/auth.test.ts +0 -79
- package/dist/config/auth.ts +0 -100
- package/dist/config/config.integration.test.ts +0 -407
- package/dist/config/config.test.ts +0 -1952
- package/dist/config/config.ts +0 -690
- package/dist/config/database.test.ts +0 -96
- package/dist/config/database.ts +0 -824
- package/dist/config/extension.test.ts +0 -236
- package/dist/config/extension.ts +0 -180
- package/dist/config/keyBindings.test.ts +0 -62
- package/dist/config/keyBindings.ts +0 -184
- package/dist/config/modelManager.ts +0 -326
- package/dist/config/providerManager.ts +0 -244
- package/dist/config/providerPersistence.test.ts +0 -377
- package/dist/config/providerPersistence.ts +0 -105
- package/dist/config/sandboxConfig.ts +0 -107
- package/dist/config/settings.test.ts +0 -1424
- package/dist/config/settings.ts +0 -517
- package/dist/config/settingsSchema.test.ts +0 -252
- package/dist/config/settingsSchema.ts +0 -728
- package/dist/config/trustedFolders.test.ts +0 -208
- package/dist/config/trustedFolders.ts +0 -167
- package/dist/gemini.test.tsx +0 -252
- package/dist/gemini.tsx +0 -357
- package/dist/generated/git-commit.ts +0 -10
- package/dist/index.ts +0 -21
- package/dist/nonInteractiveCli.test.ts +0 -276
- package/dist/nonInteractiveCli.ts +0 -143
- package/dist/patches/is-in-ci.ts +0 -17
- package/dist/services/BuiltinCommandLoader.test.ts +0 -127
- package/dist/services/BuiltinCommandLoader.ts +0 -95
- package/dist/services/CommandService.test.ts +0 -352
- package/dist/services/CommandService.ts +0 -103
- package/dist/services/FileCommandLoader.test.ts +0 -1002
- package/dist/services/FileCommandLoader.ts +0 -289
- package/dist/services/McpPromptLoader.ts +0 -231
- package/dist/services/SearchEngineConfigProvider.ts +0 -100
- package/dist/services/prompt-processors/argumentProcessor.test.ts +0 -41
- package/dist/services/prompt-processors/argumentProcessor.ts +0 -23
- package/dist/services/prompt-processors/shellProcessor.test.ts +0 -709
- package/dist/services/prompt-processors/shellProcessor.ts +0 -248
- package/dist/services/prompt-processors/types.ts +0 -44
- package/dist/services/types.ts +0 -24
- package/dist/src/config/apiValidation.test.d.ts +0 -6
- package/dist/src/config/apiValidation.test.js +0 -99
- package/dist/src/config/apiValidation.test.js.map +0 -1
- package/dist/src/config/database.test.d.ts +0 -6
- package/dist/src/config/database.test.js +0 -80
- package/dist/src/config/database.test.js.map +0 -1
- package/dist/src/config/providerManager.d.ts +0 -74
- package/dist/src/config/providerManager.js +0 -203
- package/dist/src/config/providerManager.js.map +0 -1
- package/dist/src/config/providerPersistence.test.d.ts +0 -6
- package/dist/src/config/providerPersistence.test.js +0 -283
- package/dist/src/config/providerPersistence.test.js.map +0 -1
- package/dist/src/ui/components/GeminiKeyDialog.d.ts +0 -11
- package/dist/src/ui/components/GeminiKeyDialog.js +0 -156
- package/dist/src/ui/components/GeminiKeyDialog.js.map +0 -1
- package/dist/src/ui/components/OpenAIEndpointDialog.d.ts +0 -19
- package/dist/src/ui/components/OpenAIEndpointDialog.js +0 -163
- package/dist/src/ui/components/OpenAIEndpointDialog.js.map +0 -1
- package/dist/test-setup.ts +0 -12
- package/dist/test-utils/customMatchers.ts +0 -65
- package/dist/test-utils/mockCommandContext.test.ts +0 -62
- package/dist/test-utils/mockCommandContext.ts +0 -105
- package/dist/test-utils/render.tsx +0 -18
- package/dist/ui/App.test.tsx +0 -2181
- package/dist/ui/App.tsx +0 -1344
- package/dist/ui/IdeIntegrationNudge.tsx +0 -98
- package/dist/ui/__snapshots__/App.test.tsx.snap +0 -124
- package/dist/ui/colors.ts +0 -56
- package/dist/ui/commands/aboutCommand.test.ts +0 -153
- package/dist/ui/commands/aboutCommand.ts +0 -49
- package/dist/ui/commands/authCommand.test.ts +0 -36
- package/dist/ui/commands/authCommand.ts +0 -17
- package/dist/ui/commands/bugCommand.test.ts +0 -114
- package/dist/ui/commands/bugCommand.ts +0 -92
- package/dist/ui/commands/chatCommand.test.ts +0 -414
- package/dist/ui/commands/chatCommand.ts +0 -280
- package/dist/ui/commands/clearCommand.test.ts +0 -100
- package/dist/ui/commands/clearCommand.ts +0 -29
- package/dist/ui/commands/compressCommand.test.ts +0 -129
- package/dist/ui/commands/compressCommand.ts +0 -78
- package/dist/ui/commands/contextCommand.ts +0 -132
- package/dist/ui/commands/copyCommand.test.ts +0 -296
- package/dist/ui/commands/copyCommand.ts +0 -67
- package/dist/ui/commands/corgiCommand.test.ts +0 -34
- package/dist/ui/commands/corgiCommand.ts +0 -16
- package/dist/ui/commands/directoryCommand.test.tsx +0 -185
- package/dist/ui/commands/directoryCommand.tsx +0 -179
- package/dist/ui/commands/docsCommand.test.ts +0 -99
- package/dist/ui/commands/docsCommand.ts +0 -42
- package/dist/ui/commands/editorCommand.test.ts +0 -30
- package/dist/ui/commands/editorCommand.ts +0 -21
- package/dist/ui/commands/extensionsCommand.test.ts +0 -67
- package/dist/ui/commands/extensionsCommand.ts +0 -46
- package/dist/ui/commands/helpCommand.test.ts +0 -52
- package/dist/ui/commands/helpCommand.ts +0 -23
- package/dist/ui/commands/ideCommand.test.ts +0 -255
- package/dist/ui/commands/ideCommand.ts +0 -283
- package/dist/ui/commands/initCommand.test.ts +0 -127
- package/dist/ui/commands/initCommand.ts +0 -117
- package/dist/ui/commands/mcpCommand.test.ts +0 -1057
- package/dist/ui/commands/mcpCommand.ts +0 -531
- package/dist/ui/commands/memoryCommand.test.ts +0 -344
- package/dist/ui/commands/memoryCommand.ts +0 -305
- package/dist/ui/commands/privacyCommand.test.ts +0 -38
- package/dist/ui/commands/privacyCommand.ts +0 -17
- package/dist/ui/commands/quitCommand.test.ts +0 -55
- package/dist/ui/commands/quitCommand.ts +0 -36
- package/dist/ui/commands/restoreCommand.test.ts +0 -250
- package/dist/ui/commands/restoreCommand.ts +0 -157
- package/dist/ui/commands/searchEngineSetupCommand.ts +0 -18
- package/dist/ui/commands/settingsCommand.test.ts +0 -36
- package/dist/ui/commands/settingsCommand.ts +0 -17
- package/dist/ui/commands/setupGithubCommand.test.ts +0 -238
- package/dist/ui/commands/setupGithubCommand.ts +0 -212
- package/dist/ui/commands/speakCommand.ts +0 -175
- package/dist/ui/commands/statsCommand.test.ts +0 -78
- package/dist/ui/commands/statsCommand.ts +0 -70
- package/dist/ui/commands/terminalSetupCommand.test.ts +0 -85
- package/dist/ui/commands/terminalSetupCommand.ts +0 -45
- package/dist/ui/commands/themeCommand.test.ts +0 -38
- package/dist/ui/commands/themeCommand.ts +0 -17
- package/dist/ui/commands/toolsCommand.test.ts +0 -105
- package/dist/ui/commands/toolsCommand.ts +0 -71
- package/dist/ui/commands/ttsCommand.ts +0 -143
- package/dist/ui/commands/types.ts +0 -204
- package/dist/ui/commands/vimCommand.ts +0 -25
- package/dist/ui/commands/voiceCommand.ts +0 -125
- package/dist/ui/components/AboutBox.tsx +0 -133
- package/dist/ui/components/AsciiArt.ts +0 -54
- package/dist/ui/components/AuthDialog.test.tsx +0 -334
- package/dist/ui/components/AuthDialog.tsx +0 -289
- package/dist/ui/components/AuthInProgress.tsx +0 -62
- package/dist/ui/components/AutoAcceptIndicator.tsx +0 -47
- package/dist/ui/components/ConsoleSummaryDisplay.tsx +0 -35
- package/dist/ui/components/ContextSummaryDisplay.test.tsx +0 -85
- package/dist/ui/components/ContextSummaryDisplay.tsx +0 -120
- package/dist/ui/components/ContextUsageDisplay.tsx +0 -77
- package/dist/ui/components/DebugProfiler.tsx +0 -36
- package/dist/ui/components/DetailedMessagesDisplay.tsx +0 -82
- package/dist/ui/components/EditorSettingsDialog.tsx +0 -172
- package/dist/ui/components/FolderTrustDialog.test.tsx +0 -36
- package/dist/ui/components/FolderTrustDialog.tsx +0 -74
- package/dist/ui/components/Footer.test.tsx +0 -159
- package/dist/ui/components/Footer.tsx +0 -158
- package/dist/ui/components/GeminiKeyDialog.tsx +0 -252
- package/dist/ui/components/GeminiRespondingSpinner.tsx +0 -34
- package/dist/ui/components/Header.test.tsx +0 -44
- package/dist/ui/components/Header.tsx +0 -70
- package/dist/ui/components/Help.tsx +0 -174
- package/dist/ui/components/HistoryItemDisplay.test.tsx +0 -125
- package/dist/ui/components/HistoryItemDisplay.tsx +0 -98
- package/dist/ui/components/InputPrompt.test.tsx +0 -1467
- package/dist/ui/components/InputPrompt.tsx +0 -641
- package/dist/ui/components/LMStudioModelPrompt.tsx +0 -215
- package/dist/ui/components/LoadingIndicator.test.tsx +0 -296
- package/dist/ui/components/LoadingIndicator.tsx +0 -82
- package/dist/ui/components/MemoryUsageDisplay.tsx +0 -36
- package/dist/ui/components/ModelStatsDisplay.test.tsx +0 -252
- package/dist/ui/components/ModelStatsDisplay.tsx +0 -197
- package/dist/ui/components/OllamaModelPrompt.tsx +0 -206
- package/dist/ui/components/OpenAIEndpointDialog.tsx +0 -261
- package/dist/ui/components/OpenAIKeyPrompt.test.tsx +0 -64
- package/dist/ui/components/OpenAIKeyPrompt.tsx +0 -197
- package/dist/ui/components/PrepareLabel.tsx +0 -48
- package/dist/ui/components/SearchEngineConfigDialog.tsx +0 -280
- package/dist/ui/components/SessionSummaryDisplay.test.tsx +0 -75
- package/dist/ui/components/SessionSummaryDisplay.tsx +0 -18
- package/dist/ui/components/SettingsDialog.test.tsx +0 -865
- package/dist/ui/components/SettingsDialog.tsx +0 -753
- package/dist/ui/components/ShellConfirmationDialog.test.tsx +0 -53
- package/dist/ui/components/ShellConfirmationDialog.tsx +0 -103
- package/dist/ui/components/ShellModeIndicator.tsx +0 -18
- package/dist/ui/components/ShowMoreLines.tsx +0 -40
- package/dist/ui/components/StatsDisplay.test.tsx +0 -401
- package/dist/ui/components/StatsDisplay.tsx +0 -273
- package/dist/ui/components/SuggestionsDisplay.tsx +0 -102
- package/dist/ui/components/ThemeDialog.tsx +0 -310
- package/dist/ui/components/Tips.tsx +0 -45
- package/dist/ui/components/TodoDisplay.test.tsx +0 -97
- package/dist/ui/components/TodoDisplay.tsx +0 -72
- package/dist/ui/components/ToolStatsDisplay.test.tsx +0 -180
- package/dist/ui/components/ToolStatsDisplay.tsx +0 -208
- package/dist/ui/components/UpdateNotification.tsx +0 -23
- package/dist/ui/components/WelcomeBackDialog.tsx +0 -290
- package/dist/ui/components/__snapshots__/IDEContextDetailDisplay.test.tsx.snap +0 -24
- package/dist/ui/components/__snapshots__/ModelStatsDisplay.test.tsx.snap +0 -121
- package/dist/ui/components/__snapshots__/SessionSummaryDisplay.test.tsx.snap +0 -30
- package/dist/ui/components/__snapshots__/ShellConfirmationDialog.test.tsx.snap +0 -21
- package/dist/ui/components/__snapshots__/StatsDisplay.test.tsx.snap +0 -264
- package/dist/ui/components/__snapshots__/ToolStatsDisplay.test.tsx.snap +0 -91
- package/dist/ui/components/messages/CompressionMessage.tsx +0 -49
- package/dist/ui/components/messages/DiffRenderer.test.tsx +0 -365
- package/dist/ui/components/messages/DiffRenderer.tsx +0 -358
- package/dist/ui/components/messages/ErrorMessage.tsx +0 -31
- package/dist/ui/components/messages/GeminiMessage.tsx +0 -43
- package/dist/ui/components/messages/GeminiMessageContent.tsx +0 -43
- package/dist/ui/components/messages/InfoMessage.tsx +0 -32
- package/dist/ui/components/messages/ToolConfirmationMessage.test.tsx +0 -58
- package/dist/ui/components/messages/ToolConfirmationMessage.tsx +0 -297
- package/dist/ui/components/messages/ToolGroupMessage.tsx +0 -126
- package/dist/ui/components/messages/ToolMessage.test.tsx +0 -183
- package/dist/ui/components/messages/ToolMessage.tsx +0 -296
- package/dist/ui/components/messages/UserMessage.tsx +0 -43
- package/dist/ui/components/messages/UserShellMessage.tsx +0 -25
- package/dist/ui/components/shared/MaxSizedBox.test.tsx +0 -425
- package/dist/ui/components/shared/MaxSizedBox.tsx +0 -624
- package/dist/ui/components/shared/RadioButtonSelect.test.tsx +0 -181
- package/dist/ui/components/shared/RadioButtonSelect.tsx +0 -234
- package/dist/ui/components/shared/__snapshots__/RadioButtonSelect.test.tsx.snap +0 -47
- package/dist/ui/components/shared/text-buffer.test.ts +0 -1728
- package/dist/ui/components/shared/text-buffer.ts +0 -2227
- package/dist/ui/components/shared/vim-buffer-actions.test.ts +0 -1119
- package/dist/ui/components/shared/vim-buffer-actions.ts +0 -814
- package/dist/ui/constants.ts +0 -17
- package/dist/ui/contexts/KeypressContext.test.tsx +0 -391
- package/dist/ui/contexts/KeypressContext.tsx +0 -440
- package/dist/ui/contexts/OverflowContext.tsx +0 -87
- package/dist/ui/contexts/SessionContext.test.tsx +0 -132
- package/dist/ui/contexts/SessionContext.tsx +0 -143
- package/dist/ui/contexts/SettingsContext.tsx +0 -20
- package/dist/ui/contexts/StreamingContext.tsx +0 -22
- package/dist/ui/contexts/VimModeContext.tsx +0 -79
- package/dist/ui/editors/editorSettingsManager.ts +0 -66
- package/dist/ui/hooks/atCommandProcessor.test.ts +0 -1102
- package/dist/ui/hooks/atCommandProcessor.ts +0 -485
- package/dist/ui/hooks/shellCommandProcessor.test.ts +0 -481
- package/dist/ui/hooks/shellCommandProcessor.ts +0 -314
- package/dist/ui/hooks/slashCommandProcessor.test.ts +0 -1044
- package/dist/ui/hooks/slashCommandProcessor.ts +0 -595
- package/dist/ui/hooks/useAtCompletion.test.ts +0 -497
- package/dist/ui/hooks/useAtCompletion.ts +0 -244
- package/dist/ui/hooks/useAuthCommand.ts +0 -129
- package/dist/ui/hooks/useAutoAcceptIndicator.test.ts +0 -300
- package/dist/ui/hooks/useAutoAcceptIndicator.ts +0 -52
- package/dist/ui/hooks/useBracketedPaste.ts +0 -37
- package/dist/ui/hooks/useCommandCompletion.test.ts +0 -518
- package/dist/ui/hooks/useCommandCompletion.tsx +0 -238
- package/dist/ui/hooks/useCompletion.ts +0 -128
- package/dist/ui/hooks/useConsoleMessages.test.ts +0 -147
- package/dist/ui/hooks/useConsoleMessages.ts +0 -110
- package/dist/ui/hooks/useEditorSettings.test.ts +0 -283
- package/dist/ui/hooks/useEditorSettings.ts +0 -75
- package/dist/ui/hooks/useFocus.test.ts +0 -119
- package/dist/ui/hooks/useFocus.ts +0 -48
- package/dist/ui/hooks/useFolderTrust.test.ts +0 -159
- package/dist/ui/hooks/useFolderTrust.ts +0 -72
- package/dist/ui/hooks/useGeminiStream.test.tsx +0 -1998
- package/dist/ui/hooks/useGeminiStream.ts +0 -1017
- package/dist/ui/hooks/useGitBranchName.test.ts +0 -280
- package/dist/ui/hooks/useGitBranchName.ts +0 -79
- package/dist/ui/hooks/useHistoryManager.test.ts +0 -202
- package/dist/ui/hooks/useHistoryManager.ts +0 -111
- package/dist/ui/hooks/useInputHistory.test.ts +0 -261
- package/dist/ui/hooks/useInputHistory.ts +0 -111
- package/dist/ui/hooks/useKeypress.test.ts +0 -280
- package/dist/ui/hooks/useKeypress.ts +0 -39
- package/dist/ui/hooks/useKittyKeyboardProtocol.ts +0 -31
- package/dist/ui/hooks/useLoadingIndicator.test.ts +0 -139
- package/dist/ui/hooks/useLoadingIndicator.ts +0 -57
- package/dist/ui/hooks/useLogger.ts +0 -32
- package/dist/ui/hooks/useMessageQueue.test.ts +0 -226
- package/dist/ui/hooks/useMessageQueue.ts +0 -69
- package/dist/ui/hooks/usePhraseCycler.test.ts +0 -145
- package/dist/ui/hooks/usePhraseCycler.ts +0 -198
- package/dist/ui/hooks/usePrivacySettings.test.ts +0 -242
- package/dist/ui/hooks/usePrivacySettings.ts +0 -150
- package/dist/ui/hooks/useReactToolScheduler.ts +0 -309
- package/dist/ui/hooks/useRefreshMemoryCommand.ts +0 -7
- package/dist/ui/hooks/useReverseSearchCompletion.test.tsx +0 -260
- package/dist/ui/hooks/useReverseSearchCompletion.tsx +0 -95
- package/dist/ui/hooks/useSettingsCommand.ts +0 -25
- package/dist/ui/hooks/useShellHistory.test.ts +0 -219
- package/dist/ui/hooks/useShellHistory.ts +0 -133
- package/dist/ui/hooks/useShowMemoryCommand.ts +0 -75
- package/dist/ui/hooks/useSlashCompletion.test.ts +0 -434
- package/dist/ui/hooks/useSlashCompletion.ts +0 -187
- package/dist/ui/hooks/useStateAndRef.ts +0 -36
- package/dist/ui/hooks/useTerminalSize.ts +0 -32
- package/dist/ui/hooks/useThemeCommand.ts +0 -110
- package/dist/ui/hooks/useTimer.test.ts +0 -120
- package/dist/ui/hooks/useTimer.ts +0 -65
- package/dist/ui/hooks/useToolScheduler.test.ts +0 -1123
- package/dist/ui/hooks/useWelcomeBack.ts +0 -253
- package/dist/ui/hooks/vim.test.ts +0 -1691
- package/dist/ui/hooks/vim.ts +0 -784
- package/dist/ui/keyMatchers.test.ts +0 -337
- package/dist/ui/keyMatchers.ts +0 -105
- package/dist/ui/privacy/CloudFreePrivacyNotice.tsx +0 -117
- package/dist/ui/privacy/CloudPaidPrivacyNotice.tsx +0 -59
- package/dist/ui/privacy/GeminiPrivacyNotice.tsx +0 -62
- package/dist/ui/privacy/PrivacyNotice.tsx +0 -42
- package/dist/ui/semantic-colors.ts +0 -26
- package/dist/ui/themes/ansi-light.ts +0 -150
- package/dist/ui/themes/ansi.ts +0 -159
- package/dist/ui/themes/atom-one-dark.ts +0 -147
- package/dist/ui/themes/ayu-light.ts +0 -139
- package/dist/ui/themes/ayu.ts +0 -113
- package/dist/ui/themes/color-utils.test.ts +0 -221
- package/dist/ui/themes/color-utils.ts +0 -231
- package/dist/ui/themes/default-light.ts +0 -108
- package/dist/ui/themes/default.ts +0 -151
- package/dist/ui/themes/dracula.ts +0 -124
- package/dist/ui/themes/fss-code-dark.ts +0 -156
- package/dist/ui/themes/fss-dark.ts +0 -113
- package/dist/ui/themes/fss-light.ts +0 -139
- package/dist/ui/themes/github-dark.ts +0 -147
- package/dist/ui/themes/github-light.ts +0 -149
- package/dist/ui/themes/googlecode.ts +0 -146
- package/dist/ui/themes/no-color.ts +0 -125
- package/dist/ui/themes/qwen-dark.ts +0 -118
- package/dist/ui/themes/qwen-light.ts +0 -144
- package/dist/ui/themes/semantic-tokens.ts +0 -127
- package/dist/ui/themes/shades-of-purple.ts +0 -352
- package/dist/ui/themes/theme-manager.test.ts +0 -99
- package/dist/ui/themes/theme-manager.ts +0 -257
- package/dist/ui/themes/theme.test.ts +0 -97
- package/dist/ui/themes/theme.ts +0 -451
- package/dist/ui/themes/xcode.ts +0 -154
- package/dist/ui/types.ts +0 -255
- package/dist/ui/utils/CodeColorizer.tsx +0 -217
- package/dist/ui/utils/ConsolePatcher.ts +0 -71
- package/dist/ui/utils/InlineMarkdownRenderer.tsx +0 -173
- package/dist/ui/utils/MarkdownDisplay.test.tsx +0 -244
- package/dist/ui/utils/MarkdownDisplay.tsx +0 -415
- package/dist/ui/utils/TableRenderer.tsx +0 -159
- package/dist/ui/utils/__snapshots__/MarkdownDisplay.test.tsx.snap +0 -93
- package/dist/ui/utils/clipboardUtils.test.ts +0 -76
- package/dist/ui/utils/clipboardUtils.ts +0 -149
- package/dist/ui/utils/commandUtils.test.ts +0 -384
- package/dist/ui/utils/commandUtils.ts +0 -106
- package/dist/ui/utils/computeStats.test.ts +0 -292
- package/dist/ui/utils/computeStats.ts +0 -86
- package/dist/ui/utils/displayUtils.test.ts +0 -58
- package/dist/ui/utils/displayUtils.ts +0 -32
- package/dist/ui/utils/formatters.test.ts +0 -72
- package/dist/ui/utils/formatters.ts +0 -63
- package/dist/ui/utils/isNarrowWidth.ts +0 -9
- package/dist/ui/utils/kittyProtocolDetector.ts +0 -105
- package/dist/ui/utils/markdownUtilities.test.ts +0 -50
- package/dist/ui/utils/markdownUtilities.ts +0 -125
- package/dist/ui/utils/platformConstants.ts +0 -52
- package/dist/ui/utils/terminalSetup.ts +0 -342
- package/dist/ui/utils/textUtils.ts +0 -40
- package/dist/ui/utils/updateCheck.test.ts +0 -163
- package/dist/ui/utils/updateCheck.ts +0 -100
- package/dist/utils/checks.ts +0 -28
- package/dist/utils/cleanup.test.ts +0 -68
- package/dist/utils/cleanup.ts +0 -36
- package/dist/utils/dialogScopeUtils.ts +0 -64
- package/dist/utils/events.ts +0 -14
- package/dist/utils/gitUtils.test.ts +0 -149
- package/dist/utils/gitUtils.ts +0 -116
- package/dist/utils/handleAutoUpdate.test.ts +0 -272
- package/dist/utils/handleAutoUpdate.ts +0 -145
- package/dist/utils/installationInfo.test.ts +0 -315
- package/dist/utils/installationInfo.ts +0 -176
- package/dist/utils/package.ts +0 -38
- package/dist/utils/readStdin.ts +0 -51
- package/dist/utils/resolvePath.ts +0 -21
- package/dist/utils/sandbox-macos-permissive-closed.sb +0 -32
- package/dist/utils/sandbox-macos-permissive-open.sb +0 -25
- package/dist/utils/sandbox-macos-permissive-proxied.sb +0 -37
- package/dist/utils/sandbox-macos-restrictive-closed.sb +0 -93
- package/dist/utils/sandbox-macos-restrictive-open.sb +0 -96
- package/dist/utils/sandbox-macos-restrictive-proxied.sb +0 -98
- package/dist/utils/sandbox.ts +0 -962
- package/dist/utils/settingsUtils.test.ts +0 -797
- package/dist/utils/settingsUtils.ts +0 -489
- package/dist/utils/spawnWrapper.ts +0 -9
- package/dist/utils/startupWarnings.test.ts +0 -83
- package/dist/utils/startupWarnings.ts +0 -40
- package/dist/utils/updateEventEmitter.ts +0 -13
- package/dist/utils/userStartupWarnings.test.ts +0 -87
- package/dist/utils/userStartupWarnings.ts +0 -69
- package/dist/utils/version.ts +0 -12
- package/dist/validateNonInterActiveAuth.test.ts +0 -260
- package/dist/validateNonInterActiveAuth.ts +0 -51
- package/dist/vitest.config.ts +0 -37
- package/dist/zed-integration/acp.ts +0 -366
- package/dist/zed-integration/fileSystemService.ts +0 -47
- package/dist/zed-integration/schema.ts +0 -466
- package/dist/zed-integration/zedIntegration.ts +0 -944
|
@@ -1,531 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
SlashCommand,
|
|
9
|
-
SlashCommandActionReturn,
|
|
10
|
-
CommandContext,
|
|
11
|
-
CommandKind,
|
|
12
|
-
MessageActionReturn,
|
|
13
|
-
} from './types.js';
|
|
14
|
-
import {
|
|
15
|
-
DiscoveredMCPPrompt,
|
|
16
|
-
DiscoveredMCPTool,
|
|
17
|
-
getMCPDiscoveryState,
|
|
18
|
-
getMCPServerStatus,
|
|
19
|
-
MCPDiscoveryState,
|
|
20
|
-
MCPServerStatus,
|
|
21
|
-
mcpServerRequiresOAuth,
|
|
22
|
-
getErrorMessage,
|
|
23
|
-
} from 'fss-link-core';
|
|
24
|
-
|
|
25
|
-
const COLOR_GREEN = '\u001b[32m';
|
|
26
|
-
const COLOR_YELLOW = '\u001b[33m';
|
|
27
|
-
const COLOR_RED = '\u001b[31m';
|
|
28
|
-
const COLOR_CYAN = '\u001b[36m';
|
|
29
|
-
const COLOR_GREY = '\u001b[90m';
|
|
30
|
-
const RESET_COLOR = '\u001b[0m';
|
|
31
|
-
|
|
32
|
-
const getMcpStatus = async (
|
|
33
|
-
context: CommandContext,
|
|
34
|
-
showDescriptions: boolean,
|
|
35
|
-
showSchema: boolean,
|
|
36
|
-
showTips: boolean = false,
|
|
37
|
-
): Promise<SlashCommandActionReturn> => {
|
|
38
|
-
const { config } = context.services;
|
|
39
|
-
if (!config) {
|
|
40
|
-
return {
|
|
41
|
-
type: 'message',
|
|
42
|
-
messageType: 'error',
|
|
43
|
-
content: 'Config not loaded.',
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const toolRegistry = config.getToolRegistry();
|
|
48
|
-
if (!toolRegistry) {
|
|
49
|
-
return {
|
|
50
|
-
type: 'message',
|
|
51
|
-
messageType: 'error',
|
|
52
|
-
content: 'Could not retrieve tool registry.',
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const mcpServers = config.getMcpServers() || {};
|
|
57
|
-
const serverNames = Object.keys(mcpServers);
|
|
58
|
-
const blockedMcpServers = config.getBlockedMcpServers() || [];
|
|
59
|
-
|
|
60
|
-
if (serverNames.length === 0 && blockedMcpServers.length === 0) {
|
|
61
|
-
const docsUrl =
|
|
62
|
-
'https://docs.anthropic.com/en/docs/claude-code/tools/mcp-server/#how-to-set-up-your-mcp-server';
|
|
63
|
-
return {
|
|
64
|
-
type: 'message',
|
|
65
|
-
messageType: 'info',
|
|
66
|
-
content: `No MCP servers configured. Please view MCP documentation in your browser: ${docsUrl} or use the cli /docs command`,
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Check if any servers are still connecting
|
|
71
|
-
const connectingServers = serverNames.filter(
|
|
72
|
-
(name) => getMCPServerStatus(name) === MCPServerStatus.CONNECTING,
|
|
73
|
-
);
|
|
74
|
-
const discoveryState = getMCPDiscoveryState();
|
|
75
|
-
|
|
76
|
-
let message = '';
|
|
77
|
-
|
|
78
|
-
// Add overall discovery status message if needed
|
|
79
|
-
if (
|
|
80
|
-
discoveryState === MCPDiscoveryState.IN_PROGRESS ||
|
|
81
|
-
connectingServers.length > 0
|
|
82
|
-
) {
|
|
83
|
-
message += `${COLOR_YELLOW}⏳ MCP servers are starting up (${connectingServers.length} initializing)...${RESET_COLOR}\n`;
|
|
84
|
-
message += `${COLOR_CYAN}Note: First startup may take longer. Tool availability will update automatically.${RESET_COLOR}\n\n`;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
message += 'Configured MCP servers:\n\n';
|
|
88
|
-
|
|
89
|
-
const allTools = toolRegistry.getAllTools();
|
|
90
|
-
for (const serverName of serverNames) {
|
|
91
|
-
const serverTools = allTools.filter(
|
|
92
|
-
(tool) =>
|
|
93
|
-
tool instanceof DiscoveredMCPTool && tool.serverName === serverName,
|
|
94
|
-
) as DiscoveredMCPTool[];
|
|
95
|
-
const promptRegistry = await config.getPromptRegistry();
|
|
96
|
-
const serverPrompts = promptRegistry.getPromptsByServer(serverName) || [];
|
|
97
|
-
|
|
98
|
-
const originalStatus = getMCPServerStatus(serverName);
|
|
99
|
-
const hasCachedItems = serverTools.length > 0 || serverPrompts.length > 0;
|
|
100
|
-
|
|
101
|
-
// If the server is "disconnected" but has prompts or cached tools, display it as Ready
|
|
102
|
-
// by using CONNECTED as the display status.
|
|
103
|
-
const status =
|
|
104
|
-
originalStatus === MCPServerStatus.DISCONNECTED && hasCachedItems
|
|
105
|
-
? MCPServerStatus.CONNECTED
|
|
106
|
-
: originalStatus;
|
|
107
|
-
|
|
108
|
-
// Add status indicator with descriptive text
|
|
109
|
-
let statusIndicator = '';
|
|
110
|
-
let statusText = '';
|
|
111
|
-
switch (status) {
|
|
112
|
-
case MCPServerStatus.CONNECTED:
|
|
113
|
-
statusIndicator = '🟢';
|
|
114
|
-
statusText = 'Ready';
|
|
115
|
-
break;
|
|
116
|
-
case MCPServerStatus.CONNECTING:
|
|
117
|
-
statusIndicator = '🔄';
|
|
118
|
-
statusText = 'Starting... (first startup may take longer)';
|
|
119
|
-
break;
|
|
120
|
-
case MCPServerStatus.DISCONNECTED:
|
|
121
|
-
default:
|
|
122
|
-
statusIndicator = '🔴';
|
|
123
|
-
statusText = 'Disconnected';
|
|
124
|
-
break;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Get server description if available
|
|
128
|
-
const server = mcpServers[serverName];
|
|
129
|
-
let serverDisplayName = serverName;
|
|
130
|
-
if (server.extensionName) {
|
|
131
|
-
serverDisplayName += ` (from ${server.extensionName})`;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
// Format server header with bold formatting and status
|
|
135
|
-
message += `${statusIndicator} \u001b[1m${serverDisplayName}\u001b[0m - ${statusText}`;
|
|
136
|
-
|
|
137
|
-
let needsAuthHint = mcpServerRequiresOAuth.get(serverName) || false;
|
|
138
|
-
// Add OAuth status if applicable
|
|
139
|
-
if (server?.oauth?.enabled) {
|
|
140
|
-
needsAuthHint = true;
|
|
141
|
-
try {
|
|
142
|
-
const { MCPOAuthTokenStorage } = await import(
|
|
143
|
-
'fss-link-core'
|
|
144
|
-
);
|
|
145
|
-
const hasToken = await MCPOAuthTokenStorage.getToken(serverName);
|
|
146
|
-
if (hasToken) {
|
|
147
|
-
const isExpired = MCPOAuthTokenStorage.isTokenExpired(hasToken.token);
|
|
148
|
-
if (isExpired) {
|
|
149
|
-
message += ` ${COLOR_YELLOW}(OAuth token expired)${RESET_COLOR}`;
|
|
150
|
-
} else {
|
|
151
|
-
message += ` ${COLOR_GREEN}(OAuth authenticated)${RESET_COLOR}`;
|
|
152
|
-
needsAuthHint = false;
|
|
153
|
-
}
|
|
154
|
-
} else {
|
|
155
|
-
message += ` ${COLOR_RED}(OAuth not authenticated)${RESET_COLOR}`;
|
|
156
|
-
}
|
|
157
|
-
} catch (_err) {
|
|
158
|
-
// If we can't check OAuth status, just continue
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
// Add tool count with conditional messaging
|
|
163
|
-
if (status === MCPServerStatus.CONNECTED) {
|
|
164
|
-
const parts = [];
|
|
165
|
-
if (serverTools.length > 0) {
|
|
166
|
-
parts.push(
|
|
167
|
-
`${serverTools.length} ${serverTools.length === 1 ? 'tool' : 'tools'}`,
|
|
168
|
-
);
|
|
169
|
-
}
|
|
170
|
-
if (serverPrompts.length > 0) {
|
|
171
|
-
parts.push(
|
|
172
|
-
`${serverPrompts.length} ${
|
|
173
|
-
serverPrompts.length === 1 ? 'prompt' : 'prompts'
|
|
174
|
-
}`,
|
|
175
|
-
);
|
|
176
|
-
}
|
|
177
|
-
if (parts.length > 0) {
|
|
178
|
-
message += ` (${parts.join(', ')})`;
|
|
179
|
-
} else {
|
|
180
|
-
message += ` (0 tools)`;
|
|
181
|
-
}
|
|
182
|
-
} else if (status === MCPServerStatus.CONNECTING) {
|
|
183
|
-
message += ` (tools and prompts will appear when ready)`;
|
|
184
|
-
} else {
|
|
185
|
-
message += ` (${serverTools.length} tools cached)`;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
// Add server description with proper handling of multi-line descriptions
|
|
189
|
-
if (showDescriptions && server?.description) {
|
|
190
|
-
const descLines = server.description.trim().split('\n');
|
|
191
|
-
if (descLines) {
|
|
192
|
-
message += ':\n';
|
|
193
|
-
for (const descLine of descLines) {
|
|
194
|
-
message += ` ${COLOR_GREEN}${descLine}${RESET_COLOR}\n`;
|
|
195
|
-
}
|
|
196
|
-
} else {
|
|
197
|
-
message += '\n';
|
|
198
|
-
}
|
|
199
|
-
} else {
|
|
200
|
-
message += '\n';
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
// Reset formatting after server entry
|
|
204
|
-
message += RESET_COLOR;
|
|
205
|
-
|
|
206
|
-
if (serverTools.length > 0) {
|
|
207
|
-
message += ` ${COLOR_CYAN}Tools:${RESET_COLOR}\n`;
|
|
208
|
-
serverTools.forEach((tool) => {
|
|
209
|
-
if (showDescriptions && tool.description) {
|
|
210
|
-
// Format tool name in cyan using simple ANSI cyan color
|
|
211
|
-
message += ` - ${COLOR_CYAN}${tool.name}${RESET_COLOR}`;
|
|
212
|
-
|
|
213
|
-
// Handle multi-line descriptions by properly indenting and preserving formatting
|
|
214
|
-
const descLines = tool.description.trim().split('\n');
|
|
215
|
-
if (descLines) {
|
|
216
|
-
message += ':\n';
|
|
217
|
-
for (const descLine of descLines) {
|
|
218
|
-
message += ` ${COLOR_GREEN}${descLine}${RESET_COLOR}\n`;
|
|
219
|
-
}
|
|
220
|
-
} else {
|
|
221
|
-
message += '\n';
|
|
222
|
-
}
|
|
223
|
-
// Reset is handled inline with each line now
|
|
224
|
-
} else {
|
|
225
|
-
// Use cyan color for the tool name even when not showing descriptions
|
|
226
|
-
message += ` - ${COLOR_CYAN}${tool.name}${RESET_COLOR}\n`;
|
|
227
|
-
}
|
|
228
|
-
const parameters =
|
|
229
|
-
tool.schema.parametersJsonSchema ?? tool.schema.parameters;
|
|
230
|
-
if (showSchema && parameters) {
|
|
231
|
-
// Prefix the parameters in cyan
|
|
232
|
-
message += ` ${COLOR_CYAN}Parameters:${RESET_COLOR}\n`;
|
|
233
|
-
|
|
234
|
-
const paramsLines = JSON.stringify(parameters, null, 2)
|
|
235
|
-
.trim()
|
|
236
|
-
.split('\n');
|
|
237
|
-
if (paramsLines) {
|
|
238
|
-
for (const paramsLine of paramsLines) {
|
|
239
|
-
message += ` ${COLOR_GREEN}${paramsLine}${RESET_COLOR}\n`;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
if (serverPrompts.length > 0) {
|
|
246
|
-
if (serverTools.length > 0) {
|
|
247
|
-
message += '\n';
|
|
248
|
-
}
|
|
249
|
-
message += ` ${COLOR_CYAN}Prompts:${RESET_COLOR}\n`;
|
|
250
|
-
serverPrompts.forEach((prompt: DiscoveredMCPPrompt) => {
|
|
251
|
-
if (showDescriptions && prompt.description) {
|
|
252
|
-
message += ` - ${COLOR_CYAN}${prompt.name}${RESET_COLOR}`;
|
|
253
|
-
const descLines = prompt.description.trim().split('\n');
|
|
254
|
-
if (descLines) {
|
|
255
|
-
message += ':\n';
|
|
256
|
-
for (const descLine of descLines) {
|
|
257
|
-
message += ` ${COLOR_GREEN}${descLine}${RESET_COLOR}\n`;
|
|
258
|
-
}
|
|
259
|
-
} else {
|
|
260
|
-
message += '\n';
|
|
261
|
-
}
|
|
262
|
-
} else {
|
|
263
|
-
message += ` - ${COLOR_CYAN}${prompt.name}${RESET_COLOR}\n`;
|
|
264
|
-
}
|
|
265
|
-
});
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
if (serverTools.length === 0 && serverPrompts.length === 0) {
|
|
269
|
-
message += ' No tools or prompts available\n';
|
|
270
|
-
} else if (serverTools.length === 0) {
|
|
271
|
-
message += ' No tools available';
|
|
272
|
-
if (originalStatus === MCPServerStatus.DISCONNECTED && needsAuthHint) {
|
|
273
|
-
message += ` ${COLOR_GREY}(type: "/mcp auth ${serverName}" to authenticate this server)${RESET_COLOR}`;
|
|
274
|
-
}
|
|
275
|
-
message += '\n';
|
|
276
|
-
} else if (
|
|
277
|
-
originalStatus === MCPServerStatus.DISCONNECTED &&
|
|
278
|
-
needsAuthHint
|
|
279
|
-
) {
|
|
280
|
-
// This case is for when serverTools.length > 0
|
|
281
|
-
message += ` ${COLOR_GREY}(type: "/mcp auth ${serverName}" to authenticate this server)${RESET_COLOR}\n`;
|
|
282
|
-
}
|
|
283
|
-
message += '\n';
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
for (const server of blockedMcpServers) {
|
|
287
|
-
let serverDisplayName = server.name;
|
|
288
|
-
if (server.extensionName) {
|
|
289
|
-
serverDisplayName += ` (from ${server.extensionName})`;
|
|
290
|
-
}
|
|
291
|
-
message += `🔴 \u001b[1m${serverDisplayName}\u001b[0m - Blocked\n\n`;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
// Add helpful tips when no arguments are provided
|
|
295
|
-
if (showTips) {
|
|
296
|
-
message += '\n';
|
|
297
|
-
message += `${COLOR_CYAN}💡 Tips:${RESET_COLOR}\n`;
|
|
298
|
-
message += ` • Use ${COLOR_CYAN}/mcp desc${RESET_COLOR} to show server and tool descriptions\n`;
|
|
299
|
-
message += ` • Use ${COLOR_CYAN}/mcp schema${RESET_COLOR} to show tool parameter schemas\n`;
|
|
300
|
-
message += ` • Use ${COLOR_CYAN}/mcp nodesc${RESET_COLOR} to hide descriptions\n`;
|
|
301
|
-
message += ` • Use ${COLOR_CYAN}/mcp auth <server-name>${RESET_COLOR} to authenticate with OAuth-enabled servers\n`;
|
|
302
|
-
message += ` • Press ${COLOR_CYAN}Ctrl+T${RESET_COLOR} to toggle tool descriptions on/off\n`;
|
|
303
|
-
message += '\n';
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
// Make sure to reset any ANSI formatting at the end to prevent it from affecting the terminal
|
|
307
|
-
message += RESET_COLOR;
|
|
308
|
-
|
|
309
|
-
return {
|
|
310
|
-
type: 'message',
|
|
311
|
-
messageType: 'info',
|
|
312
|
-
content: message,
|
|
313
|
-
};
|
|
314
|
-
};
|
|
315
|
-
|
|
316
|
-
const authCommand: SlashCommand = {
|
|
317
|
-
name: 'auth',
|
|
318
|
-
description: 'Authenticate with an OAuth-enabled MCP server',
|
|
319
|
-
kind: CommandKind.BUILT_IN,
|
|
320
|
-
action: async (
|
|
321
|
-
context: CommandContext,
|
|
322
|
-
args: string,
|
|
323
|
-
): Promise<MessageActionReturn> => {
|
|
324
|
-
const serverName = args.trim();
|
|
325
|
-
const { config } = context.services;
|
|
326
|
-
|
|
327
|
-
if (!config) {
|
|
328
|
-
return {
|
|
329
|
-
type: 'message',
|
|
330
|
-
messageType: 'error',
|
|
331
|
-
content: 'Config not loaded.',
|
|
332
|
-
};
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
const mcpServers = config.getMcpServers() || {};
|
|
336
|
-
|
|
337
|
-
if (!serverName) {
|
|
338
|
-
// List servers that support OAuth
|
|
339
|
-
const oauthServers = Object.entries(mcpServers)
|
|
340
|
-
.filter(([_, server]) => server.oauth?.enabled)
|
|
341
|
-
.map(([name, _]) => name);
|
|
342
|
-
|
|
343
|
-
if (oauthServers.length === 0) {
|
|
344
|
-
return {
|
|
345
|
-
type: 'message',
|
|
346
|
-
messageType: 'info',
|
|
347
|
-
content: 'No MCP servers configured with OAuth authentication.',
|
|
348
|
-
};
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
return {
|
|
352
|
-
type: 'message',
|
|
353
|
-
messageType: 'info',
|
|
354
|
-
content: `MCP servers with OAuth authentication:\n${oauthServers.map((s) => ` - ${s}`).join('\n')}\n\nUse /mcp auth <server-name> to authenticate.`,
|
|
355
|
-
};
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
const server = mcpServers[serverName];
|
|
359
|
-
if (!server) {
|
|
360
|
-
return {
|
|
361
|
-
type: 'message',
|
|
362
|
-
messageType: 'error',
|
|
363
|
-
content: `MCP server '${serverName}' not found.`,
|
|
364
|
-
};
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
// Always attempt OAuth authentication, even if not explicitly configured
|
|
368
|
-
// The authentication process will discover OAuth requirements automatically
|
|
369
|
-
|
|
370
|
-
try {
|
|
371
|
-
context.ui.addItem(
|
|
372
|
-
{
|
|
373
|
-
type: 'info',
|
|
374
|
-
text: `Starting OAuth authentication for MCP server '${serverName}'...`,
|
|
375
|
-
},
|
|
376
|
-
Date.now(),
|
|
377
|
-
);
|
|
378
|
-
|
|
379
|
-
// Import dynamically to avoid circular dependencies
|
|
380
|
-
const { MCPOAuthProvider } = await import('fss-link-core');
|
|
381
|
-
|
|
382
|
-
let oauthConfig = server.oauth;
|
|
383
|
-
if (!oauthConfig) {
|
|
384
|
-
oauthConfig = { enabled: false };
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
// Pass the MCP server URL for OAuth discovery
|
|
388
|
-
const mcpServerUrl = server.httpUrl || server.url;
|
|
389
|
-
await MCPOAuthProvider.authenticate(
|
|
390
|
-
serverName,
|
|
391
|
-
oauthConfig,
|
|
392
|
-
mcpServerUrl,
|
|
393
|
-
);
|
|
394
|
-
|
|
395
|
-
context.ui.addItem(
|
|
396
|
-
{
|
|
397
|
-
type: 'info',
|
|
398
|
-
text: `✅ Successfully authenticated with MCP server '${serverName}'!`,
|
|
399
|
-
},
|
|
400
|
-
Date.now(),
|
|
401
|
-
);
|
|
402
|
-
|
|
403
|
-
// Trigger tool re-discovery to pick up authenticated server
|
|
404
|
-
const toolRegistry = config.getToolRegistry();
|
|
405
|
-
if (toolRegistry) {
|
|
406
|
-
context.ui.addItem(
|
|
407
|
-
{
|
|
408
|
-
type: 'info',
|
|
409
|
-
text: `Re-discovering tools from '${serverName}'...`,
|
|
410
|
-
},
|
|
411
|
-
Date.now(),
|
|
412
|
-
);
|
|
413
|
-
await toolRegistry.discoverToolsForServer(serverName);
|
|
414
|
-
}
|
|
415
|
-
// Update the client with the new tools
|
|
416
|
-
const geminiClient = config.getGeminiClient();
|
|
417
|
-
if (geminiClient) {
|
|
418
|
-
await geminiClient.setTools();
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
// Reload the slash commands to reflect the changes.
|
|
422
|
-
context.ui.reloadCommands();
|
|
423
|
-
|
|
424
|
-
return {
|
|
425
|
-
type: 'message',
|
|
426
|
-
messageType: 'info',
|
|
427
|
-
content: `Successfully authenticated and refreshed tools for '${serverName}'.`,
|
|
428
|
-
};
|
|
429
|
-
} catch (error) {
|
|
430
|
-
return {
|
|
431
|
-
type: 'message',
|
|
432
|
-
messageType: 'error',
|
|
433
|
-
content: `Failed to authenticate with MCP server '${serverName}': ${getErrorMessage(error)}`,
|
|
434
|
-
};
|
|
435
|
-
}
|
|
436
|
-
},
|
|
437
|
-
completion: async (context: CommandContext, partialArg: string) => {
|
|
438
|
-
const { config } = context.services;
|
|
439
|
-
if (!config) return [];
|
|
440
|
-
|
|
441
|
-
const mcpServers = config.getMcpServers() || {};
|
|
442
|
-
return Object.keys(mcpServers).filter((name) =>
|
|
443
|
-
name.startsWith(partialArg),
|
|
444
|
-
);
|
|
445
|
-
},
|
|
446
|
-
};
|
|
447
|
-
|
|
448
|
-
const listCommand: SlashCommand = {
|
|
449
|
-
name: 'list',
|
|
450
|
-
description: 'List configured MCP servers and tools',
|
|
451
|
-
kind: CommandKind.BUILT_IN,
|
|
452
|
-
action: async (context: CommandContext, args: string) => {
|
|
453
|
-
const lowerCaseArgs = args.toLowerCase().split(/\s+/).filter(Boolean);
|
|
454
|
-
|
|
455
|
-
const hasDesc =
|
|
456
|
-
lowerCaseArgs.includes('desc') || lowerCaseArgs.includes('descriptions');
|
|
457
|
-
const hasNodesc =
|
|
458
|
-
lowerCaseArgs.includes('nodesc') ||
|
|
459
|
-
lowerCaseArgs.includes('nodescriptions');
|
|
460
|
-
const showSchema = lowerCaseArgs.includes('schema');
|
|
461
|
-
|
|
462
|
-
// Show descriptions if `desc` or `schema` is present,
|
|
463
|
-
// but `nodesc` takes precedence and disables them.
|
|
464
|
-
const showDescriptions = !hasNodesc && (hasDesc || showSchema);
|
|
465
|
-
|
|
466
|
-
// Show tips only when no arguments are provided
|
|
467
|
-
const showTips = lowerCaseArgs.length === 0;
|
|
468
|
-
|
|
469
|
-
return getMcpStatus(context, showDescriptions, showSchema, showTips);
|
|
470
|
-
},
|
|
471
|
-
};
|
|
472
|
-
|
|
473
|
-
const refreshCommand: SlashCommand = {
|
|
474
|
-
name: 'refresh',
|
|
475
|
-
description: 'Restarts MCP servers.',
|
|
476
|
-
kind: CommandKind.BUILT_IN,
|
|
477
|
-
action: async (
|
|
478
|
-
context: CommandContext,
|
|
479
|
-
): Promise<SlashCommandActionReturn> => {
|
|
480
|
-
const { config } = context.services;
|
|
481
|
-
if (!config) {
|
|
482
|
-
return {
|
|
483
|
-
type: 'message',
|
|
484
|
-
messageType: 'error',
|
|
485
|
-
content: 'Config not loaded.',
|
|
486
|
-
};
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
const toolRegistry = config.getToolRegistry();
|
|
490
|
-
if (!toolRegistry) {
|
|
491
|
-
return {
|
|
492
|
-
type: 'message',
|
|
493
|
-
messageType: 'error',
|
|
494
|
-
content: 'Could not retrieve tool registry.',
|
|
495
|
-
};
|
|
496
|
-
}
|
|
497
|
-
|
|
498
|
-
context.ui.addItem(
|
|
499
|
-
{
|
|
500
|
-
type: 'info',
|
|
501
|
-
text: 'Restarting MCP servers...',
|
|
502
|
-
},
|
|
503
|
-
Date.now(),
|
|
504
|
-
);
|
|
505
|
-
|
|
506
|
-
await toolRegistry.restartMcpServers();
|
|
507
|
-
|
|
508
|
-
// Update the client with the new tools
|
|
509
|
-
const geminiClient = config.getGeminiClient();
|
|
510
|
-
if (geminiClient) {
|
|
511
|
-
await geminiClient.setTools();
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
// Reload the slash commands to reflect the changes.
|
|
515
|
-
context.ui.reloadCommands();
|
|
516
|
-
|
|
517
|
-
return getMcpStatus(context, false, false, false);
|
|
518
|
-
},
|
|
519
|
-
};
|
|
520
|
-
|
|
521
|
-
export const mcpCommand: SlashCommand = {
|
|
522
|
-
name: 'mcp',
|
|
523
|
-
description:
|
|
524
|
-
'list configured MCP servers and tools, or authenticate with OAuth-enabled servers',
|
|
525
|
-
kind: CommandKind.BUILT_IN,
|
|
526
|
-
subCommands: [listCommand, authCommand, refreshCommand],
|
|
527
|
-
// Default action when no subcommand is provided
|
|
528
|
-
action: async (context: CommandContext, args: string) =>
|
|
529
|
-
// If no subcommand, run the list command
|
|
530
|
-
listCommand.action!(context, args),
|
|
531
|
-
};
|