@codingame/monaco-vscode-chat-service-override 32.0.0 → 32.0.2
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/index.js +1 -0
- package/package.json +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.d.ts +58 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.js +637 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentHost/agentHostPermissionUiContribution.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +53 -53
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +22 -22
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +17 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.js +14 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.js +97 -97
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.contribution.js +43 -43
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.js +58 -58
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWelcomePagePromptLaunchers.js +25 -25
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedAgentPluginDetail.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/embeddedMcpServerDetail.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.js +50 -50
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.js +51 -51
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +229 -229
- package/vscode/src/vs/workbench/contrib/chat/browser/chat.view.contribution.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chat.view.contribution.js +5 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.js +32 -32
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCacheExplorerView.js +99 -99
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditorInput.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.js +20 -20
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowChartView.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.js +22 -22
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHomeView.js +13 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHookContentRenderer.js +17 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.js +24 -24
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.js +23 -23
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.js +33 -33
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.js +11 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +14 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationWidget.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatImageCarouselService.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +43 -43
- package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +30 -30
- package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +16 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +10 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +26 -26
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.js +19 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.js +57 -57
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +13 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipCatalog.js +19 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/claudePluginRecommendations.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/defaultModelContribution.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/enablementActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/enablementStatusWidget.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/planReviewFeedback/planReviewFeedbackEditorActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/planReviewFeedback/planReviewFeedbackEditorContribution.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginGitCommandService.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.js +25 -25
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginSources.js +15 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginUrlHandler.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.js +27 -27
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.js +20 -20
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +39 -39
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +23 -23
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.js +9 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +9 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/chatQuick.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +18 -18
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +150 -150
- package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +1 -1
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +15 -15
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +2 -2
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +4 -4
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.js +14 -14
- package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +1 -1
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +10 -10
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +5 -5
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +1 -1
- package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +7 -7
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +16 -16
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +20 -20
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +2 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sendToTerminalTool.js +10 -10
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +14 -14
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +7 -7
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +14 -14
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +1 -1
|
@@ -119,7 +119,7 @@ let McpServerItemRenderer = class McpServerItemRenderer {
|
|
|
119
119
|
const plugin = this.agentPluginService.plugins.get().find(p => ( p.uri.toString()) === pluginUriStr);
|
|
120
120
|
if (plugin) {
|
|
121
121
|
return {
|
|
122
|
-
content: `${element.label}\n${( localize(
|
|
122
|
+
content: `${element.label}\n${( localize(5593, "Plugin: {0}", plugin.label))}`,
|
|
123
123
|
appearance: {
|
|
124
124
|
compact: true,
|
|
125
125
|
skipFadeInAnimation: true
|
|
@@ -161,26 +161,26 @@ let McpServerItemRenderer = class McpServerItemRenderer {
|
|
|
161
161
|
}
|
|
162
162
|
statusElement.style.display = "";
|
|
163
163
|
if (state === "disabled") {
|
|
164
|
-
statusElement.textContent = ( localize(
|
|
164
|
+
statusElement.textContent = ( localize(5594, "Disabled"));
|
|
165
165
|
statusElement.classList.add("disabled");
|
|
166
166
|
return;
|
|
167
167
|
}
|
|
168
168
|
switch (state) {
|
|
169
169
|
case McpConnectionState.Kind.Running:
|
|
170
|
-
statusElement.textContent = ( localize(
|
|
170
|
+
statusElement.textContent = ( localize(5595, "Running"));
|
|
171
171
|
statusElement.classList.add("running");
|
|
172
172
|
break;
|
|
173
173
|
case McpConnectionState.Kind.Starting:
|
|
174
|
-
statusElement.textContent = ( localize(
|
|
174
|
+
statusElement.textContent = ( localize(5596, "Starting"));
|
|
175
175
|
statusElement.classList.add("starting");
|
|
176
176
|
break;
|
|
177
177
|
case McpConnectionState.Kind.Error:
|
|
178
|
-
statusElement.textContent = ( localize(
|
|
178
|
+
statusElement.textContent = ( localize(5597, "Error"));
|
|
179
179
|
statusElement.classList.add("error");
|
|
180
180
|
break;
|
|
181
181
|
case McpConnectionState.Kind.Stopped:
|
|
182
182
|
default:
|
|
183
|
-
statusElement.textContent = ( localize(
|
|
183
|
+
statusElement.textContent = ( localize(5598, "Stopped"));
|
|
184
184
|
statusElement.classList.add("stopped");
|
|
185
185
|
break;
|
|
186
186
|
}
|
|
@@ -231,7 +231,7 @@ class McpGalleryItemRenderer {
|
|
|
231
231
|
templateData.elementDisposables.add(templateData.installButton.onDidClick(async () => {
|
|
232
232
|
const canInstall = this.mcpWorkbenchService.canInstall(element.server);
|
|
233
233
|
if (canInstall === true) {
|
|
234
|
-
templateData.installButton.label = ( localize(
|
|
234
|
+
templateData.installButton.label = ( localize(5599, "Installing..."));
|
|
235
235
|
templateData.installButton.enabled = false;
|
|
236
236
|
await this.mcpWorkbenchService.install(element.server);
|
|
237
237
|
}
|
|
@@ -245,15 +245,15 @@ class McpGalleryItemRenderer {
|
|
|
245
245
|
updateInstallButton(button, server) {
|
|
246
246
|
switch (server.installState) {
|
|
247
247
|
case McpServerInstallState.Installed:
|
|
248
|
-
button.label = ( localize(
|
|
248
|
+
button.label = ( localize(5600, "Installed"));
|
|
249
249
|
button.enabled = false;
|
|
250
250
|
break;
|
|
251
251
|
case McpServerInstallState.Installing:
|
|
252
|
-
button.label = ( localize(
|
|
252
|
+
button.label = ( localize(5599, "Installing..."));
|
|
253
253
|
button.enabled = false;
|
|
254
254
|
break;
|
|
255
255
|
default:
|
|
256
|
-
button.label = ( localize(
|
|
256
|
+
button.label = ( localize(5601, "Install"));
|
|
257
257
|
button.enabled = true;
|
|
258
258
|
break;
|
|
259
259
|
}
|
|
@@ -328,7 +328,7 @@ let McpListWidget = class McpListWidget extends Disposable {
|
|
|
328
328
|
this.searchAndButtonContainer = append(this.element, $(".list-search-and-button-container"));
|
|
329
329
|
const searchContainer = append(this.searchAndButtonContainer, $(".list-search-container"));
|
|
330
330
|
this.searchInput = this._register(( new InputBox(searchContainer, this.contextViewService, {
|
|
331
|
-
placeholder: ( localize(
|
|
331
|
+
placeholder: ( localize(5602, "Type to search...")),
|
|
332
332
|
inputBoxStyles: defaultInputBoxStyles
|
|
333
333
|
})));
|
|
334
334
|
this._register(this.searchInput.onDidChange(() => {
|
|
@@ -346,7 +346,7 @@ let McpListWidget = class McpListWidget extends Disposable {
|
|
|
346
346
|
secondary: true,
|
|
347
347
|
supportIcons: true
|
|
348
348
|
})));
|
|
349
|
-
this.browseButton.label = `$(${Codicon.library.id}) ${( localize(
|
|
349
|
+
this.browseButton.label = `$(${Codicon.library.id}) ${( localize(5603, "Browse Marketplace"))}`;
|
|
350
350
|
this.browseButton.element.classList.add("list-add-button");
|
|
351
351
|
this._register(this.browseButton.onDidClick(() => {
|
|
352
352
|
this.toggleBrowseMode(!this.browseMode);
|
|
@@ -355,13 +355,13 @@ let McpListWidget = class McpListWidget extends Disposable {
|
|
|
355
355
|
...defaultButtonStyles,
|
|
356
356
|
secondary: true,
|
|
357
357
|
supportIcons: true,
|
|
358
|
-
title: ( localize(
|
|
359
|
-
ariaLabel: ( localize(
|
|
358
|
+
title: ( localize(5604, "Add Server")),
|
|
359
|
+
ariaLabel: ( localize(5604, "Add Server"))
|
|
360
360
|
})));
|
|
361
361
|
this.addButton.label = `$(${Codicon.add.id})`;
|
|
362
362
|
this.addButton.element.classList.add("list-icon-button");
|
|
363
363
|
this._register(
|
|
364
|
-
this.hoverService.setupManagedHover(getDefaultHoverDelegate("element"), this.addButton.element, ( localize(
|
|
364
|
+
this.hoverService.setupManagedHover(getDefaultHoverDelegate("element"), this.addButton.element, ( localize(5605, "Add Server")))
|
|
365
365
|
);
|
|
366
366
|
this._register(this.addButton.onDidClick(() => {
|
|
367
367
|
this.commandService.executeCommand(McpCommandIds.AddConfiguration);
|
|
@@ -376,17 +376,17 @@ let McpListWidget = class McpListWidget extends Disposable {
|
|
|
376
376
|
const disabledHeader = append(this.disabledContainer, $(".empty-state-header"));
|
|
377
377
|
this.disabledIcon = append(disabledHeader, $(".empty-icon"));
|
|
378
378
|
const disabledText = append(disabledHeader, $(".empty-text"));
|
|
379
|
-
disabledText.textContent = ( localize(
|
|
379
|
+
disabledText.textContent = ( localize(5606, "MCP servers are disabled"));
|
|
380
380
|
this.disabledMessage = append(this.disabledContainer, $(".empty-subtext"));
|
|
381
381
|
this.listContainer = append(this.element, $(".mcp-list-container"));
|
|
382
382
|
this.sectionHeader = append(this.element, $(".section-footer"));
|
|
383
383
|
this.sectionDescription = append(this.sectionHeader, $("p.section-footer-description"));
|
|
384
384
|
this.sectionDescription.textContent = ( localize(
|
|
385
|
-
|
|
385
|
+
5607,
|
|
386
386
|
"An open standard that lets AI use external tools and services. MCP servers provide tools for file operations, databases, APIs, and more."
|
|
387
387
|
));
|
|
388
388
|
this.sectionLink = append(this.sectionHeader, $("a.section-footer-link"));
|
|
389
|
-
this.sectionLink.textContent = ( localize(
|
|
389
|
+
this.sectionLink.textContent = ( localize(5608, "Learn more about MCP servers"));
|
|
390
390
|
this.sectionLink.href = "https://code.visualstudio.com/docs/copilot/chat/mcp-servers";
|
|
391
391
|
this._register(addDisposableListener(this.sectionLink, "click", e => {
|
|
392
392
|
e.preventDefault();
|
|
@@ -413,17 +413,17 @@ let McpListWidget = class McpListWidget extends Disposable {
|
|
|
413
413
|
getAriaLabel: element => {
|
|
414
414
|
if (element.type === "group-header") {
|
|
415
415
|
return localize(
|
|
416
|
-
|
|
416
|
+
5609,
|
|
417
417
|
"{0}, {1} items, {2}",
|
|
418
418
|
element.label,
|
|
419
419
|
element.count,
|
|
420
|
-
element.collapsed ? ( localize(
|
|
420
|
+
element.collapsed ? ( localize(5610, "collapsed")) : ( localize(5611, "expanded"))
|
|
421
421
|
);
|
|
422
422
|
}
|
|
423
423
|
return element.type === "builtin-item" ? element.label : element.server.label;
|
|
424
424
|
},
|
|
425
425
|
getWidgetAriaLabel() {
|
|
426
|
-
return localize(
|
|
426
|
+
return localize(5612, "MCP Servers");
|
|
427
427
|
}
|
|
428
428
|
},
|
|
429
429
|
openOnSingleClick: true,
|
|
@@ -485,13 +485,13 @@ let McpListWidget = class McpListWidget extends Disposable {
|
|
|
485
485
|
this.disabledLinkListener.clear();
|
|
486
486
|
if (policyLocked) {
|
|
487
487
|
this.disabledMessage.textContent = ( localize(
|
|
488
|
-
|
|
488
|
+
5613,
|
|
489
489
|
"Access to MCP servers is disabled by your organization. Contact your organization administrator for more information."
|
|
490
490
|
));
|
|
491
491
|
} else {
|
|
492
|
-
this.disabledMessage.appendChild(createTextNode(( localize(
|
|
492
|
+
this.disabledMessage.appendChild(createTextNode(( localize(5614, "MCP servers are disabled in settings. "))));
|
|
493
493
|
const link = append(this.disabledMessage, $("a.mcp-disabled-settings-link"));
|
|
494
|
-
link.textContent = ( localize(
|
|
494
|
+
link.textContent = ( localize(5615, "Configure in settings."));
|
|
495
495
|
link.href = "#";
|
|
496
496
|
link.setAttribute("role", "button");
|
|
497
497
|
this.disabledLinkListener.value = addDisposableListener(link, "click", e => {
|
|
@@ -512,7 +512,7 @@ let McpListWidget = class McpListWidget extends Disposable {
|
|
|
512
512
|
this.searchQuery = "";
|
|
513
513
|
this.addButton.element.style.display = browse ? "none" : "";
|
|
514
514
|
this.browseButton.element.parentElement.style.display = browse ? "none" : "";
|
|
515
|
-
this.searchInput.setPlaceHolder(browse ? ( localize(
|
|
515
|
+
this.searchInput.setPlaceHolder(browse ? ( localize(5616, "Search MCP marketplace...")) : ( localize(5602, "Type to search...")));
|
|
516
516
|
if (browse) {
|
|
517
517
|
void this.queryGallery();
|
|
518
518
|
} else {
|
|
@@ -529,7 +529,7 @@ let McpListWidget = class McpListWidget extends Disposable {
|
|
|
529
529
|
const cts = this.galleryCts = ( new CancellationTokenSource());
|
|
530
530
|
this.emptyContainer.style.display = "flex";
|
|
531
531
|
this.listContainer.style.display = "none";
|
|
532
|
-
this.emptyText.textContent = ( localize(
|
|
532
|
+
this.emptyText.textContent = ( localize(5617, "Loading marketplace..."));
|
|
533
533
|
this.emptySubtext.textContent = "";
|
|
534
534
|
try {
|
|
535
535
|
const pager = await this.mcpWorkbenchService.queryGallery({
|
|
@@ -545,8 +545,8 @@ let McpListWidget = class McpListWidget extends Disposable {
|
|
|
545
545
|
this.galleryServers = [];
|
|
546
546
|
this.emptyContainer.style.display = "flex";
|
|
547
547
|
this.listContainer.style.display = "none";
|
|
548
|
-
this.emptyText.textContent = ( localize(
|
|
549
|
-
this.emptySubtext.textContent = ( localize(
|
|
548
|
+
this.emptyText.textContent = ( localize(5618, "Unable to load marketplace"));
|
|
549
|
+
this.emptySubtext.textContent = ( localize(5619, "Check your connection and try again"));
|
|
550
550
|
}
|
|
551
551
|
}
|
|
552
552
|
}
|
|
@@ -555,10 +555,10 @@ let McpListWidget = class McpListWidget extends Disposable {
|
|
|
555
555
|
this.emptyContainer.style.display = "flex";
|
|
556
556
|
this.listContainer.style.display = "none";
|
|
557
557
|
if (this.searchQuery.trim()) {
|
|
558
|
-
this.emptyText.textContent = ( localize(
|
|
559
|
-
this.emptySubtext.textContent = ( localize(
|
|
558
|
+
this.emptyText.textContent = ( localize(5620, "No servers match '{0}'", this.searchQuery));
|
|
559
|
+
this.emptySubtext.textContent = ( localize(5621, "Try a different search term"));
|
|
560
560
|
} else {
|
|
561
|
-
this.emptyText.textContent = ( localize(
|
|
561
|
+
this.emptyText.textContent = ( localize(5622, "No MCP servers available"));
|
|
562
562
|
this.emptySubtext.textContent = "";
|
|
563
563
|
}
|
|
564
564
|
} else {
|
|
@@ -586,11 +586,11 @@ let McpListWidget = class McpListWidget extends Disposable {
|
|
|
586
586
|
this.emptyContainer.style.display = "flex";
|
|
587
587
|
this.listContainer.style.display = "none";
|
|
588
588
|
if (this.searchQuery.trim()) {
|
|
589
|
-
this.emptyText.textContent = ( localize(
|
|
590
|
-
this.emptySubtext.textContent = ( localize(
|
|
589
|
+
this.emptyText.textContent = ( localize(5623, "No servers match '{0}'", this.searchQuery));
|
|
590
|
+
this.emptySubtext.textContent = ( localize(5621, "Try a different search term"));
|
|
591
591
|
} else {
|
|
592
|
-
this.emptyText.textContent = ( localize(
|
|
593
|
-
this.emptySubtext.textContent = ( localize(
|
|
592
|
+
this.emptyText.textContent = ( localize(5624, "No MCP servers configured"));
|
|
593
|
+
this.emptySubtext.textContent = ( localize(5625, "Add an MCP server configuration to get started"));
|
|
594
594
|
}
|
|
595
595
|
} else {
|
|
596
596
|
this.emptyContainer.style.display = "none";
|
|
@@ -598,19 +598,19 @@ let McpListWidget = class McpListWidget extends Disposable {
|
|
|
598
598
|
}
|
|
599
599
|
const groups = [{
|
|
600
600
|
scope: LocalMcpServerScope.Workspace,
|
|
601
|
-
label: ( localize(
|
|
601
|
+
label: ( localize(5626, "Workspace")),
|
|
602
602
|
icon: workspaceIcon,
|
|
603
603
|
description: ( localize(
|
|
604
|
-
|
|
604
|
+
5627,
|
|
605
605
|
"MCP servers configured in your workspace settings, shared with your team via version control."
|
|
606
606
|
)),
|
|
607
607
|
servers: []
|
|
608
608
|
}, {
|
|
609
609
|
scope: LocalMcpServerScope.User,
|
|
610
|
-
label: ( localize(
|
|
610
|
+
label: ( localize(5628, "User")),
|
|
611
611
|
icon: userIcon,
|
|
612
612
|
description: ( localize(
|
|
613
|
-
|
|
613
|
+
5629,
|
|
614
614
|
"MCP servers configured in your user settings. Private to you and available across all projects."
|
|
615
615
|
)),
|
|
616
616
|
servers: []
|
|
@@ -671,11 +671,11 @@ let McpListWidget = class McpListWidget extends Disposable {
|
|
|
671
671
|
type: "group-header",
|
|
672
672
|
id: "mcp-group-plugin",
|
|
673
673
|
scope: "plugin",
|
|
674
|
-
label: ( localize(
|
|
674
|
+
label: ( localize(5630, "Plugins")),
|
|
675
675
|
icon: pluginIcon,
|
|
676
676
|
count: pluginServers.length,
|
|
677
677
|
isFirst,
|
|
678
|
-
description: ( localize(
|
|
678
|
+
description: ( localize(5631, "MCP servers provided by installed plugins.")),
|
|
679
679
|
collapsed
|
|
680
680
|
});
|
|
681
681
|
if (!collapsed) {
|
|
@@ -697,11 +697,11 @@ let McpListWidget = class McpListWidget extends Disposable {
|
|
|
697
697
|
type: "group-header",
|
|
698
698
|
id: "mcp-group-extension",
|
|
699
699
|
scope: "extension",
|
|
700
|
-
label: ( localize(
|
|
700
|
+
label: ( localize(5632, "Extensions")),
|
|
701
701
|
icon: extensionIcon,
|
|
702
702
|
count: extensionServers.length,
|
|
703
703
|
isFirst,
|
|
704
|
-
description: ( localize(
|
|
704
|
+
description: ( localize(5633, "MCP servers contributed by installed VS Code extensions.")),
|
|
705
705
|
collapsed
|
|
706
706
|
});
|
|
707
707
|
if (!collapsed) {
|
|
@@ -723,11 +723,11 @@ let McpListWidget = class McpListWidget extends Disposable {
|
|
|
723
723
|
type: "group-header",
|
|
724
724
|
id: "mcp-group-builtin",
|
|
725
725
|
scope: "builtin",
|
|
726
|
-
label: ( localize(
|
|
726
|
+
label: ( localize(5634, "Built-in")),
|
|
727
727
|
icon: builtinIcon,
|
|
728
728
|
count: otherBuiltinServers.length,
|
|
729
729
|
isFirst,
|
|
730
|
-
description: ( localize(
|
|
730
|
+
description: ( localize(5635, "MCP servers built into VS Code. These are available automatically.")),
|
|
731
731
|
collapsed
|
|
732
732
|
});
|
|
733
733
|
if (!collapsed) {
|
|
@@ -824,7 +824,7 @@ let McpListWidget = class McpListWidget extends Disposable {
|
|
|
824
824
|
return;
|
|
825
825
|
}
|
|
826
826
|
const disposables = ( new DisposableStore());
|
|
827
|
-
const showPluginAction = disposables.add(( new Action("mcpServer.showPlugin", ( localize(
|
|
827
|
+
const showPluginAction = disposables.add(( new Action("mcpServer.showPlugin", ( localize(5636, "Show Plugin")), undefined, true, async () => {
|
|
828
828
|
const item = {
|
|
829
829
|
kind: AgentPluginItemKind.Installed,
|
|
830
830
|
name: plugin.label,
|
|
@@ -834,14 +834,14 @@ let McpListWidget = class McpListWidget extends Disposable {
|
|
|
834
834
|
};
|
|
835
835
|
this._onDidRequestShowPlugin.fire(item);
|
|
836
836
|
})));
|
|
837
|
-
const uninstallAction = disposables.add(( new Action("mcpServer.uninstallPlugin", ( localize(
|
|
837
|
+
const uninstallAction = disposables.add(( new Action("mcpServer.uninstallPlugin", ( localize(5637, "Uninstall Plugin")), undefined, true, async () => {
|
|
838
838
|
const result = await this.dialogService.confirm({
|
|
839
|
-
message: ( localize(
|
|
839
|
+
message: ( localize(5638, "This MCP server is provided by the plugin '{0}'", plugin.label)),
|
|
840
840
|
detail: ( localize(
|
|
841
|
-
|
|
841
|
+
5639,
|
|
842
842
|
"Individual MCP servers from a plugin cannot be removed separately. Would you like to uninstall the entire plugin?"
|
|
843
843
|
)),
|
|
844
|
-
primaryButton: ( localize(
|
|
844
|
+
primaryButton: ( localize(5640, "Uninstall Plugin")),
|
|
845
845
|
type: "question"
|
|
846
846
|
});
|
|
847
847
|
if (result.confirmed) {
|
|
@@ -108,7 +108,7 @@ class PluginInstalledItemRenderer {
|
|
|
108
108
|
templateData.syncCheckboxContainer.style.display = "";
|
|
109
109
|
const pluginUri = element.item.plugin.uri;
|
|
110
110
|
const disabled = syncProvider.isDisabled(pluginUri);
|
|
111
|
-
const title = disabled ? ( localize(
|
|
111
|
+
const title = disabled ? ( localize(5641, "Enable {0} for sync", element.item.name)) : ( localize(5642, "Disable {0} from sync", element.item.name));
|
|
112
112
|
const checkbox = templateData.disposables.add(( new Checkbox(title, !disabled, defaultCheckboxStyles)));
|
|
113
113
|
templateData.syncCheckboxContainer.replaceChildren(checkbox.domNode);
|
|
114
114
|
templateData.disposables.add(checkbox.onChange(() => {
|
|
@@ -167,25 +167,25 @@ class PluginRemoteItemRenderer {
|
|
|
167
167
|
templateData.container.classList.toggle("disabled", element.item.enabled === false);
|
|
168
168
|
templateData.status.className = "mcp-server-status";
|
|
169
169
|
if (element.item.enabled === false) {
|
|
170
|
-
templateData.status.textContent = ( localize(
|
|
170
|
+
templateData.status.textContent = ( localize(5643, "Disabled"));
|
|
171
171
|
templateData.status.classList.add("disabled");
|
|
172
172
|
return;
|
|
173
173
|
}
|
|
174
174
|
switch (element.item.status) {
|
|
175
175
|
case "loading":
|
|
176
|
-
templateData.status.textContent = ( localize(
|
|
176
|
+
templateData.status.textContent = ( localize(5644, "Loading"));
|
|
177
177
|
templateData.status.classList.add("running");
|
|
178
178
|
break;
|
|
179
179
|
case "loaded":
|
|
180
|
-
templateData.status.textContent = ( localize(
|
|
180
|
+
templateData.status.textContent = ( localize(5645, "Loaded"));
|
|
181
181
|
templateData.status.classList.add("running");
|
|
182
182
|
break;
|
|
183
183
|
case "degraded":
|
|
184
|
-
templateData.status.textContent = ( localize(
|
|
184
|
+
templateData.status.textContent = ( localize(5646, "Warning"));
|
|
185
185
|
templateData.status.classList.add("disabled");
|
|
186
186
|
break;
|
|
187
187
|
case "error":
|
|
188
|
-
templateData.status.textContent = ( localize(
|
|
188
|
+
templateData.status.textContent = ( localize(5647, "Error"));
|
|
189
189
|
templateData.status.classList.add("disabled");
|
|
190
190
|
break;
|
|
191
191
|
default:
|
|
@@ -231,7 +231,7 @@ class PluginMarketplaceItemRenderer {
|
|
|
231
231
|
renderElement(element, _index, templateData) {
|
|
232
232
|
templateData.elementDisposables.clear();
|
|
233
233
|
templateData.name.textContent = element.item.name;
|
|
234
|
-
templateData.publisher.textContent = element.item.marketplace ? ( localize(
|
|
234
|
+
templateData.publisher.textContent = element.item.marketplace ? ( localize(5648, "by {0}", element.item.marketplace)) : "";
|
|
235
235
|
templateData.description.textContent = element.item.description || "";
|
|
236
236
|
const installUri = this.pluginInstallService.getPluginInstallUri({
|
|
237
237
|
name: element.item.name,
|
|
@@ -245,14 +245,14 @@ class PluginMarketplaceItemRenderer {
|
|
|
245
245
|
});
|
|
246
246
|
const isAlreadyInstalled = ( this.agentPluginService.plugins.get().some(p => isEqual(p.uri, installUri)));
|
|
247
247
|
if (isAlreadyInstalled) {
|
|
248
|
-
templateData.installButton.label = ( localize(
|
|
248
|
+
templateData.installButton.label = ( localize(5649, "Installed"));
|
|
249
249
|
templateData.installButton.enabled = false;
|
|
250
250
|
return;
|
|
251
251
|
}
|
|
252
|
-
templateData.installButton.label = ( localize(
|
|
252
|
+
templateData.installButton.label = ( localize(5650, "Install"));
|
|
253
253
|
templateData.installButton.enabled = true;
|
|
254
254
|
templateData.elementDisposables.add(templateData.installButton.onDidClick(async () => {
|
|
255
|
-
templateData.installButton.label = ( localize(
|
|
255
|
+
templateData.installButton.label = ( localize(5651, "Installing..."));
|
|
256
256
|
templateData.installButton.enabled = false;
|
|
257
257
|
try {
|
|
258
258
|
await this.pluginInstallService.installPlugin({
|
|
@@ -266,9 +266,9 @@ class PluginMarketplaceItemRenderer {
|
|
|
266
266
|
marketplaceType: element.item.marketplaceType,
|
|
267
267
|
readmeUri: element.item.readmeUri
|
|
268
268
|
});
|
|
269
|
-
templateData.installButton.label = ( localize(
|
|
269
|
+
templateData.installButton.label = ( localize(5649, "Installed"));
|
|
270
270
|
} catch (_e) {
|
|
271
|
-
templateData.installButton.label = ( localize(
|
|
271
|
+
templateData.installButton.label = ( localize(5650, "Install"));
|
|
272
272
|
templateData.installButton.enabled = true;
|
|
273
273
|
}
|
|
274
274
|
}));
|
|
@@ -369,7 +369,7 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
369
369
|
this.searchAndButtonContainer = append(this.element, $(".list-search-and-button-container"));
|
|
370
370
|
const searchContainer = append(this.searchAndButtonContainer, $(".list-search-container"));
|
|
371
371
|
this.searchInput = this._register(( new InputBox(searchContainer, this.contextViewService, {
|
|
372
|
-
placeholder: ( localize(
|
|
372
|
+
placeholder: ( localize(5652, "Type to search...")),
|
|
373
373
|
inputBoxStyles: defaultInputBoxStyles
|
|
374
374
|
})));
|
|
375
375
|
this._register(this.searchInput.onDidChange(() => {
|
|
@@ -382,7 +382,7 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
382
382
|
}));
|
|
383
383
|
this.buttonContainer = append(this.searchAndButtonContainer, $(".list-button-group"));
|
|
384
384
|
const browseButtonContainer = append(this.buttonContainer, $(".list-add-button-container"));
|
|
385
|
-
const browseMarketplaceLabel = ( localize(
|
|
385
|
+
const browseMarketplaceLabel = ( localize(5653, "Browse Marketplace"));
|
|
386
386
|
this.browseButton = this._register(( new Button(browseButtonContainer, {
|
|
387
387
|
...defaultButtonStyles,
|
|
388
388
|
secondary: true,
|
|
@@ -393,7 +393,7 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
393
393
|
this.browseButton.element.classList.add("list-add-button");
|
|
394
394
|
this._register(this.browseButton.onDidClick(() => this.runPrimaryButtonAction()));
|
|
395
395
|
this.addButtonContainer = append(this.buttonContainer, $(".list-add-button-container"));
|
|
396
|
-
const addPluginLabel = ( localize(
|
|
396
|
+
const addPluginLabel = ( localize(5654, "Add Plugin"));
|
|
397
397
|
this.addButtonSimple = this._register(( new Button(this.addButtonContainer, {
|
|
398
398
|
...defaultButtonStyles,
|
|
399
399
|
secondary: true,
|
|
@@ -417,7 +417,7 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
417
417
|
})));
|
|
418
418
|
this.addButton.element.classList.add("list-add-button");
|
|
419
419
|
this._register(this.addButton.onDidClick(() => this.runPrimaryAddAction()));
|
|
420
|
-
const createPluginLabel = ( localize(
|
|
420
|
+
const createPluginLabel = ( localize(5655, "Create Plugin"));
|
|
421
421
|
this.createPluginButton = this._register(( new Button(this.buttonContainer, {
|
|
422
422
|
...defaultButtonStyles,
|
|
423
423
|
secondary: true,
|
|
@@ -438,17 +438,17 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
438
438
|
const disabledHeader = append(this.disabledContainer, $(".empty-state-header"));
|
|
439
439
|
this.disabledIcon = append(disabledHeader, $(".empty-icon"));
|
|
440
440
|
const disabledText = append(disabledHeader, $(".empty-text"));
|
|
441
|
-
disabledText.textContent = ( localize(
|
|
441
|
+
disabledText.textContent = ( localize(5656, "Plugins are disabled"));
|
|
442
442
|
this.disabledMessage = append(this.disabledContainer, $(".empty-subtext"));
|
|
443
443
|
this.listContainer = append(this.element, $(".mcp-list-container"));
|
|
444
444
|
this.sectionHeader = append(this.element, $(".section-footer"));
|
|
445
445
|
this.sectionDescription = append(this.sectionHeader, $("p.section-footer-description"));
|
|
446
446
|
this.sectionDescription.textContent = ( localize(
|
|
447
|
-
|
|
447
|
+
5657,
|
|
448
448
|
"Extend your AI agent with plugins that add commands, skills, agents, hooks, and MCP servers from reusable packages."
|
|
449
449
|
));
|
|
450
450
|
this.sectionLink = append(this.sectionHeader, $("a.section-footer-link"));
|
|
451
|
-
this.sectionLink.textContent = ( localize(
|
|
451
|
+
this.sectionLink.textContent = ( localize(5658, "Learn more about agent plugins"));
|
|
452
452
|
this.sectionLink.href = "https://code.visualstudio.com/docs/copilot/customization/agent-plugins";
|
|
453
453
|
this._register(addDisposableListener(this.sectionLink, "click", e => {
|
|
454
454
|
e.preventDefault();
|
|
@@ -476,24 +476,24 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
476
476
|
getAriaLabel(element) {
|
|
477
477
|
if (element.type === "group-header") {
|
|
478
478
|
return localize(
|
|
479
|
-
|
|
479
|
+
5659,
|
|
480
480
|
"{0}, {1} items, {2}",
|
|
481
481
|
element.label,
|
|
482
482
|
element.count,
|
|
483
|
-
element.collapsed ? ( localize(
|
|
483
|
+
element.collapsed ? ( localize(5660, "collapsed")) : ( localize(5661, "expanded"))
|
|
484
484
|
);
|
|
485
485
|
}
|
|
486
486
|
const name = formatDisplayName(element.item.name);
|
|
487
487
|
const description = element.item.description ? truncateToFirstLine(element.item.description) : undefined;
|
|
488
|
-
const nameAndDesc = description ? ( localize(
|
|
488
|
+
const nameAndDesc = description ? ( localize(5662, "{0}. {1}", name, description)) : name;
|
|
489
489
|
if (element.type === "plugin-item") {
|
|
490
490
|
const enabled = isContributionEnabled(element.item.plugin.enablement.get());
|
|
491
|
-
return enabled ? ( localize(
|
|
491
|
+
return enabled ? ( localize(5663, "{0}. Enabled", nameAndDesc)) : ( localize(5664, "{0}. Disabled", nameAndDesc));
|
|
492
492
|
}
|
|
493
493
|
return nameAndDesc;
|
|
494
494
|
},
|
|
495
495
|
getWidgetAriaLabel() {
|
|
496
|
-
return localize(
|
|
496
|
+
return localize(5665, "Plugins");
|
|
497
497
|
}
|
|
498
498
|
},
|
|
499
499
|
openOnSingleClick: true,
|
|
@@ -584,13 +584,13 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
584
584
|
this.disabledLinkListener.clear();
|
|
585
585
|
if (policyLocked) {
|
|
586
586
|
this.disabledMessage.textContent = ( localize(
|
|
587
|
-
|
|
587
|
+
5666,
|
|
588
588
|
"Plugin integration in chat is disabled by your organization. Contact your organization administrator for more information."
|
|
589
589
|
));
|
|
590
590
|
} else {
|
|
591
|
-
this.disabledMessage.appendChild(createTextNode(( localize(
|
|
591
|
+
this.disabledMessage.appendChild(createTextNode(( localize(5667, "Plugins are disabled in settings. "))));
|
|
592
592
|
const link = append(this.disabledMessage, $("a.mcp-disabled-settings-link"));
|
|
593
|
-
link.textContent = ( localize(
|
|
593
|
+
link.textContent = ( localize(5668, "Configure in settings."));
|
|
594
594
|
link.href = "#";
|
|
595
595
|
link.setAttribute("role", "button");
|
|
596
596
|
this.disabledLinkListener.value = addDisposableListener(link, "click", e => {
|
|
@@ -615,9 +615,9 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
615
615
|
this.toggleBrowseMode(false);
|
|
616
616
|
}
|
|
617
617
|
this.browseButton.element.parentElement.style.display = this.browseMode ? "none" : "";
|
|
618
|
-
this.browseButton.label = `$(${Codicon.library.id}) ${( localize(
|
|
618
|
+
this.browseButton.label = `$(${Codicon.library.id}) ${( localize(5653, "Browse Marketplace"))}`;
|
|
619
619
|
this.browseButton.enabled = browseMarketplaceAvailable;
|
|
620
|
-
const browseTitle = browseMarketplaceAvailable ? ( localize(
|
|
620
|
+
const browseTitle = browseMarketplaceAvailable ? ( localize(5653, "Browse Marketplace")) : ( localize(5669, "Browse Marketplace is not available in VS Code for the Web."));
|
|
621
621
|
this.browseButton.setTitle(browseTitle);
|
|
622
622
|
this.browseButton.element.setAttribute("aria-label", browseTitle);
|
|
623
623
|
this.updateAddButton();
|
|
@@ -643,7 +643,7 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
643
643
|
const addPrimaryTitle = primary.tooltip ?? primary.label;
|
|
644
644
|
this.addButton.primaryButton.setTitle(addPrimaryTitle);
|
|
645
645
|
this.addButton.primaryButton.element.setAttribute("aria-label", addPrimaryTitle);
|
|
646
|
-
const moreLabel = ( localize(
|
|
646
|
+
const moreLabel = ( localize(5670, "More Plugin Add Actions..."));
|
|
647
647
|
this.addButton.dropdownButton.setTitle(moreLabel);
|
|
648
648
|
this.addButton.dropdownButton.element.setAttribute("aria-label", moreLabel);
|
|
649
649
|
} else {
|
|
@@ -657,8 +657,8 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
657
657
|
buildAddActions() {
|
|
658
658
|
return [...this.pluginActions, {
|
|
659
659
|
id: "plugin.installFromSource",
|
|
660
|
-
label: ( localize(
|
|
661
|
-
tooltip: ( localize(
|
|
660
|
+
label: ( localize(5671, "Install Plugin from Source")),
|
|
661
|
+
tooltip: ( localize(5671, "Install Plugin from Source")),
|
|
662
662
|
icon: Codicon.add,
|
|
663
663
|
run: () => this.commandService.executeCommand("workbench.action.chat.installPluginFromSource")
|
|
664
664
|
}];
|
|
@@ -706,7 +706,7 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
706
706
|
this.searchInput.value = "";
|
|
707
707
|
this.searchQuery = "";
|
|
708
708
|
this.browseButton.element.parentElement.style.display = browse ? "none" : "";
|
|
709
|
-
this.searchInput.setPlaceHolder(browse ? ( localize(
|
|
709
|
+
this.searchInput.setPlaceHolder(browse ? ( localize(5672, "Search plugin marketplace...")) : ( localize(5652, "Type to search...")));
|
|
710
710
|
if (browse) {
|
|
711
711
|
void this.queryMarketplace();
|
|
712
712
|
} else {
|
|
@@ -723,7 +723,7 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
723
723
|
const cts = this.marketplaceCts = ( new CancellationTokenSource());
|
|
724
724
|
this.emptyContainer.style.display = "flex";
|
|
725
725
|
this.listContainer.style.display = "none";
|
|
726
|
-
this.emptyText.textContent = ( localize(
|
|
726
|
+
this.emptyText.textContent = ( localize(5673, "Loading marketplace..."));
|
|
727
727
|
this.emptySubtext.textContent = "";
|
|
728
728
|
try {
|
|
729
729
|
const plugins = await this.pluginMarketplaceService.fetchMarketplacePlugins(cts.token);
|
|
@@ -745,8 +745,8 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
745
745
|
this.marketplaceItems = [];
|
|
746
746
|
this.emptyContainer.style.display = "flex";
|
|
747
747
|
this.listContainer.style.display = "none";
|
|
748
|
-
this.emptyText.textContent = ( localize(
|
|
749
|
-
this.emptySubtext.textContent = ( localize(
|
|
748
|
+
this.emptyText.textContent = ( localize(5674, "Unable to load marketplace"));
|
|
749
|
+
this.emptySubtext.textContent = ( localize(5675, "Check your connection and try again"));
|
|
750
750
|
}
|
|
751
751
|
}
|
|
752
752
|
}
|
|
@@ -755,10 +755,10 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
755
755
|
this.emptyContainer.style.display = "flex";
|
|
756
756
|
this.listContainer.style.display = "none";
|
|
757
757
|
if (this.searchQuery.trim()) {
|
|
758
|
-
this.emptyText.textContent = ( localize(
|
|
759
|
-
this.emptySubtext.textContent = ( localize(
|
|
758
|
+
this.emptyText.textContent = ( localize(5676, "No plugins match '{0}'", this.searchQuery));
|
|
759
|
+
this.emptySubtext.textContent = ( localize(5677, "Try a different search term"));
|
|
760
760
|
} else {
|
|
761
|
-
this.emptyText.textContent = ( localize(
|
|
761
|
+
this.emptyText.textContent = ( localize(5678, "No plugins available"));
|
|
762
762
|
this.emptySubtext.textContent = "";
|
|
763
763
|
}
|
|
764
764
|
} else {
|
|
@@ -788,9 +788,9 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
788
788
|
getRemoteGroupMetadata(groupKey) {
|
|
789
789
|
return {
|
|
790
790
|
group: groupKey ?? "remote-host",
|
|
791
|
-
label: ( localize(
|
|
791
|
+
label: ( localize(5679, "Remote")),
|
|
792
792
|
description: ( localize(
|
|
793
|
-
|
|
793
|
+
5680,
|
|
794
794
|
"Plugins configured directly on the remote agent host and available without local sync."
|
|
795
795
|
))
|
|
796
796
|
};
|
|
@@ -827,17 +827,17 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
827
827
|
this.emptyContainer.style.display = "flex";
|
|
828
828
|
this.listContainer.style.display = "none";
|
|
829
829
|
if (this.searchQuery.trim()) {
|
|
830
|
-
this.emptyText.textContent = ( localize(
|
|
831
|
-
this.emptySubtext.textContent = ( localize(
|
|
830
|
+
this.emptyText.textContent = ( localize(5681, "No plugins match '{0}'", this.searchQuery));
|
|
831
|
+
this.emptySubtext.textContent = ( localize(5677, "Try a different search term"));
|
|
832
832
|
} else if (this.harnessService.getActiveDescriptor().itemProvider) {
|
|
833
|
-
this.emptyText.textContent = ( localize(
|
|
833
|
+
this.emptyText.textContent = ( localize(5682, "No plugins configured"));
|
|
834
834
|
this.emptySubtext.textContent = ( localize(
|
|
835
|
-
|
|
835
|
+
5683,
|
|
836
836
|
"Use the toolbar to add remote plugins or install plugins from a source."
|
|
837
837
|
));
|
|
838
838
|
} else {
|
|
839
|
-
this.emptyText.textContent = ( localize(
|
|
840
|
-
this.emptySubtext.textContent = ( localize(
|
|
839
|
+
this.emptyText.textContent = ( localize(5684, "No plugins installed"));
|
|
840
|
+
this.emptySubtext.textContent = ( localize(5685, "Browse the marketplace to discover and install plugins"));
|
|
841
841
|
}
|
|
842
842
|
} else {
|
|
843
843
|
this.emptyContainer.style.display = "none";
|
|
@@ -873,9 +873,9 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
873
873
|
if (enabledPlugins.length > 0) {
|
|
874
874
|
isFirst = this.appendGroup(entries, {
|
|
875
875
|
group: "enabled",
|
|
876
|
-
label: ( localize(
|
|
876
|
+
label: ( localize(5686, "Enabled Locally")),
|
|
877
877
|
description: ( localize(
|
|
878
|
-
|
|
878
|
+
5687,
|
|
879
879
|
"Plugins installed in this client and available for syncing to the remote session."
|
|
880
880
|
))
|
|
881
881
|
}, ( enabledPlugins.map(item => ({
|
|
@@ -886,8 +886,8 @@ let PluginListWidget = class PluginListWidget extends Disposable {
|
|
|
886
886
|
if (disabledPlugins.length > 0) {
|
|
887
887
|
this.appendGroup(entries, {
|
|
888
888
|
group: "disabled",
|
|
889
|
-
label: ( localize(
|
|
890
|
-
description: ( localize(
|
|
889
|
+
label: ( localize(5688, "Disabled Locally")),
|
|
890
|
+
description: ( localize(5689, "Plugins installed in this client but currently disabled."))
|
|
891
891
|
}, ( disabledPlugins.map(item => ({
|
|
892
892
|
type: "plugin-item",
|
|
893
893
|
item
|
package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js
CHANGED
|
@@ -147,7 +147,7 @@ let ChatAttachmentResolveService = class ChatAttachmentResolveService {
|
|
|
147
147
|
}
|
|
148
148
|
const readFile = await this.fileService.readFile(resource);
|
|
149
149
|
if (stat.size > 30 * 1024 * 1024) {
|
|
150
|
-
this.dialogService.error(( localize(
|
|
150
|
+
this.dialogService.error(( localize(5690, "Image is too large")), ( localize(5691, "The image {0} is too large to be attached.", fileName)));
|
|
151
151
|
throw ( new Error("Image is too large"));
|
|
152
152
|
}
|
|
153
153
|
dataBuffer = readFile.value;
|