@codingame/monaco-vscode-mcp-service-override 32.0.0 → 32.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +1 -0
- package/package.json +2 -2
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcp.contribution.js +3 -3
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcp.view.contribution.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcp.view.contribution.js +5 -0
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpAddContextContribution.js +2 -2
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpCommands.js +61 -61
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpElicitationService.js +25 -25
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpLanguageFeatures.js +22 -22
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpMigration.js +4 -4
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpResourceQuickAccess.js +8 -8
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpServerEditor.js +37 -37
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpServerEditorInput.js +2 -2
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpServerIcons.js +5 -5
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpServerWidgets.js +98 -6
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpServersView.d.ts +59 -0
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpServersView.js +576 -0
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpWorkbenchService.js +10 -10
- package/vscode/src/vs/workbench/contrib/mcp/browser/media/mcpServersView.css +53 -0
- package/vscode/src/vs/workbench/contrib/mcp/common/discovery/extensionMcpDiscovery.js +4 -4
- package/vscode/src/vs/workbench/contrib/mcp/common/discovery/nativeMcpDiscoveryAbstract.js +1 -1
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpContextKeys.js +4 -4
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpLanguageModelToolContribution.js +6 -6
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpRegistry.js +13 -13
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpSamplingLog.js +1 -1
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpSamplingService.js +11 -11
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpSandboxService.js +3 -3
- package/vscode/src/vs/workbench/contrib/mcp/common/mcpServerConnection.js +3 -3
- package/vscode/src/vs/workbench/services/authentication/browser/authenticationMcpService.js +9 -9
|
@@ -192,7 +192,7 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
192
192
|
tabIndex: 0
|
|
193
193
|
}));
|
|
194
194
|
this._register(
|
|
195
|
-
this.hoverService.setupManagedHover(getDefaultHoverDelegate("mouse"), name, ( localize(
|
|
195
|
+
this.hoverService.setupManagedHover(getDefaultHoverDelegate("mouse"), name, ( localize(11078, "Extension name")))
|
|
196
196
|
);
|
|
197
197
|
const subtitle = append(details, $(".subtitle"));
|
|
198
198
|
const subTitleEntryContainers = [];
|
|
@@ -352,18 +352,18 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
352
352
|
this.currentIdentifier = extension.id;
|
|
353
353
|
}
|
|
354
354
|
if (extension.readmeUrl || extension.gallery?.readme) {
|
|
355
|
-
template.navbar.push(McpServerEditorTab.Readme, ( localize(
|
|
355
|
+
template.navbar.push(McpServerEditorTab.Readme, ( localize(11079, "Details")), ( localize(11080, "Extension details, rendered from the extension's 'README.md' file")));
|
|
356
356
|
}
|
|
357
357
|
if (extension.gallery || extension.local?.manifest) {
|
|
358
|
-
template.navbar.push(McpServerEditorTab.Manifest, ( localize(
|
|
358
|
+
template.navbar.push(McpServerEditorTab.Manifest, ( localize(11081, "Manifest")), ( localize(11082, "Server manifest details")));
|
|
359
359
|
}
|
|
360
360
|
if (extension.config) {
|
|
361
|
-
template.navbar.push(McpServerEditorTab.Configuration, ( localize(
|
|
361
|
+
template.navbar.push(McpServerEditorTab.Configuration, ( localize(11083, "Configuration")), ( localize(11084, "Server configuration details")));
|
|
362
362
|
}
|
|
363
363
|
this.transientDisposables.add(this.mcpWorkbenchService.onChange(e => {
|
|
364
364
|
if (e === extension) {
|
|
365
365
|
if (e.config && !( template.navbar.has(McpServerEditorTab.Configuration))) {
|
|
366
|
-
template.navbar.push(McpServerEditorTab.Configuration, ( localize(
|
|
366
|
+
template.navbar.push(McpServerEditorTab.Configuration, ( localize(11083, "Configuration")), ( localize(11084, "Server configuration details")), extension.readmeUrl ? 1 : 0);
|
|
367
367
|
}
|
|
368
368
|
if (!e.config && ( template.navbar.has(McpServerEditorTab.Configuration))) {
|
|
369
369
|
template.navbar.remove(McpServerEditorTab.Configuration);
|
|
@@ -591,7 +591,7 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
591
591
|
this.contentDisposables.add(toDisposable(insert(this.layoutParticipants, {
|
|
592
592
|
layout
|
|
593
593
|
})));
|
|
594
|
-
const activeElement = await this.openMarkdown(extension, this.mcpServerReadme.get(), ( localize(
|
|
594
|
+
const activeElement = await this.openMarkdown(extension, this.mcpServerReadme.get(), ( localize(11085, "No README available.")), readmeContainer, WebviewIndex.Readme, ( localize(11086, "Readme")), token);
|
|
595
595
|
this.renderAdditionalDetails(additionalDetailsContainer, extension);
|
|
596
596
|
return activeElement;
|
|
597
597
|
}
|
|
@@ -640,7 +640,7 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
640
640
|
content.removeChild(content.firstChild);
|
|
641
641
|
}
|
|
642
642
|
const noManifestMessage = append(content, $(".no-manifest"));
|
|
643
|
-
noManifestMessage.textContent = ( localize(
|
|
643
|
+
noManifestMessage.textContent = ( localize(11087, "No manifest available for this MCP server."));
|
|
644
644
|
}
|
|
645
645
|
const scrollableContent = ( new DomScrollableElement(content, {}));
|
|
646
646
|
const layout = () => scrollableContent.scanDomNode();
|
|
@@ -657,36 +657,36 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
657
657
|
const config = mcpServer.config;
|
|
658
658
|
if (!config) {
|
|
659
659
|
const noConfigMessage = append(container, $(".no-config"));
|
|
660
|
-
noConfigMessage.textContent = ( localize(
|
|
660
|
+
noConfigMessage.textContent = ( localize(11088, "No configuration available for this MCP server."));
|
|
661
661
|
return;
|
|
662
662
|
}
|
|
663
663
|
const nameSection = append(container, $(".config-section"));
|
|
664
664
|
const nameLabel = append(nameSection, $(".config-label"));
|
|
665
|
-
nameLabel.textContent = ( localize(
|
|
665
|
+
nameLabel.textContent = ( localize(11089, "Name:"));
|
|
666
666
|
const nameValue = append(nameSection, $(".config-value"));
|
|
667
667
|
nameValue.textContent = mcpServer.name;
|
|
668
668
|
const typeSection = append(container, $(".config-section"));
|
|
669
669
|
const typeLabel = append(typeSection, $(".config-label"));
|
|
670
|
-
typeLabel.textContent = ( localize(
|
|
670
|
+
typeLabel.textContent = ( localize(11090, "Type:"));
|
|
671
671
|
const typeValue = append(typeSection, $(".config-value"));
|
|
672
672
|
typeValue.textContent = config.type;
|
|
673
673
|
if (config.type === McpServerType.LOCAL) {
|
|
674
674
|
const commandSection = append(container, $(".config-section"));
|
|
675
675
|
const commandLabel = append(commandSection, $(".config-label"));
|
|
676
|
-
commandLabel.textContent = ( localize(
|
|
676
|
+
commandLabel.textContent = ( localize(11091, "Command:"));
|
|
677
677
|
const commandValue = append(commandSection, $("code.config-value"));
|
|
678
678
|
commandValue.textContent = config.command;
|
|
679
679
|
if (config.args && config.args.length > 0) {
|
|
680
680
|
const argsSection = append(container, $(".config-section"));
|
|
681
681
|
const argsLabel = append(argsSection, $(".config-label"));
|
|
682
|
-
argsLabel.textContent = ( localize(
|
|
682
|
+
argsLabel.textContent = ( localize(11092, "Arguments:"));
|
|
683
683
|
const argsValue = append(argsSection, $("code.config-value"));
|
|
684
684
|
argsValue.textContent = config.args.join(" ");
|
|
685
685
|
}
|
|
686
686
|
if (config.env && ( Object.keys(config.env)).length > 0) {
|
|
687
687
|
const envSection = append(container, $(".config-section"));
|
|
688
688
|
const envLabel = append(envSection, $(".config-label"));
|
|
689
|
-
envLabel.textContent = ( localize(
|
|
689
|
+
envLabel.textContent = ( localize(11093, "Environment:"));
|
|
690
690
|
const envValue = append(envSection, $(".config-value"));
|
|
691
691
|
for (const [key, value] of Object.entries(config.env)) {
|
|
692
692
|
append(envValue, $("code.env-entry", undefined, `${key}=${value ?? ""}`));
|
|
@@ -695,20 +695,20 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
695
695
|
if (config.envFile) {
|
|
696
696
|
const envFileSection = append(container, $(".config-section"));
|
|
697
697
|
const envFileLabel = append(envFileSection, $(".config-label"));
|
|
698
|
-
envFileLabel.textContent = ( localize(
|
|
698
|
+
envFileLabel.textContent = ( localize(11094, "Environment File:"));
|
|
699
699
|
const envFileValue = append(envFileSection, $("code.config-value"));
|
|
700
700
|
envFileValue.textContent = config.envFile;
|
|
701
701
|
}
|
|
702
702
|
} else if (config.type === McpServerType.REMOTE) {
|
|
703
703
|
const urlSection = append(container, $(".config-section"));
|
|
704
704
|
const urlLabel = append(urlSection, $(".config-label"));
|
|
705
|
-
urlLabel.textContent = ( localize(
|
|
705
|
+
urlLabel.textContent = ( localize(11095, "URL:"));
|
|
706
706
|
const urlValue = append(urlSection, $("code.config-value"));
|
|
707
707
|
urlValue.textContent = config.url;
|
|
708
708
|
if (config.headers && ( Object.keys(config.headers)).length > 0) {
|
|
709
709
|
const headersSection = append(container, $(".config-section"));
|
|
710
710
|
const headersLabel = append(headersSection, $(".config-label"));
|
|
711
|
-
headersLabel.textContent = ( localize(
|
|
711
|
+
headersLabel.textContent = ( localize(11096, "Headers:"));
|
|
712
712
|
const headersValue = append(headersSection, $(".config-value"));
|
|
713
713
|
for (const [key, value] of Object.entries(config.headers)) {
|
|
714
714
|
append(headersValue, $("code.env-entry", undefined, `${key}: ${value ?? ""}`));
|
|
@@ -731,7 +731,7 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
731
731
|
append(container, $(
|
|
732
732
|
".manifest-section",
|
|
733
733
|
undefined,
|
|
734
|
-
$(".manifest-section-title", undefined, ( localize(
|
|
734
|
+
$(".manifest-section-title", undefined, ( localize(11097, "Packages")))
|
|
735
735
|
));
|
|
736
736
|
for (const [packageType, packages] of packagesByType) {
|
|
737
737
|
const packageSection = append(container, $(
|
|
@@ -744,7 +744,7 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
744
744
|
const pkg = packages[i];
|
|
745
745
|
append(
|
|
746
746
|
packagesGrid,
|
|
747
|
-
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(
|
|
747
|
+
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(11098, "Package:"))), $(".detail-value", undefined, pkg.identifier))
|
|
748
748
|
);
|
|
749
749
|
if (pkg.packageArguments && pkg.packageArguments.length > 0) {
|
|
750
750
|
const argStrings = [];
|
|
@@ -764,7 +764,7 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
764
764
|
}
|
|
765
765
|
append(
|
|
766
766
|
packagesGrid,
|
|
767
|
-
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(
|
|
767
|
+
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(11099, "Package Arguments:"))), $("code.detail-value", undefined, argStrings.join(" ")))
|
|
768
768
|
);
|
|
769
769
|
}
|
|
770
770
|
if (pkg.runtimeArguments && pkg.runtimeArguments.length > 0) {
|
|
@@ -785,14 +785,14 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
785
785
|
}
|
|
786
786
|
append(
|
|
787
787
|
packagesGrid,
|
|
788
|
-
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(
|
|
788
|
+
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(11100, "Runtime Arguments:"))), $("code.detail-value", undefined, argStrings.join(" ")))
|
|
789
789
|
);
|
|
790
790
|
}
|
|
791
791
|
if (pkg.environmentVariables && pkg.environmentVariables.length > 0) {
|
|
792
792
|
const envStrings = ( pkg.environmentVariables.map(envVar => `${envVar.name}=${envVar.value ?? ""}`));
|
|
793
793
|
append(
|
|
794
794
|
packagesGrid,
|
|
795
|
-
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(
|
|
795
|
+
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(11101, "Environment Variables:"))), $("code.detail-value", undefined, envStrings.join(" ")))
|
|
796
796
|
);
|
|
797
797
|
}
|
|
798
798
|
if (i < packages.length - 1) {
|
|
@@ -805,25 +805,25 @@ let McpServerEditor = class McpServerEditor extends EditorPane {
|
|
|
805
805
|
const packageSection = append(container, $(
|
|
806
806
|
".package-section",
|
|
807
807
|
undefined,
|
|
808
|
-
$(".package-section-title", undefined, ( localize(
|
|
808
|
+
$(".package-section-title", undefined, ( localize(11102, "Remote")).toLocaleUpperCase())
|
|
809
809
|
));
|
|
810
810
|
for (const remote of manifest.remotes) {
|
|
811
811
|
const packagesGrid = append(packageSection, $(".package-details"));
|
|
812
812
|
append(
|
|
813
813
|
packagesGrid,
|
|
814
|
-
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(
|
|
814
|
+
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(11095, "URL:"))), $(".detail-value", undefined, remote.url))
|
|
815
815
|
);
|
|
816
816
|
if (remote.type) {
|
|
817
817
|
append(
|
|
818
818
|
packagesGrid,
|
|
819
|
-
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(
|
|
819
|
+
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(11103, "Transport:"))), $(".detail-value", undefined, remote.type))
|
|
820
820
|
);
|
|
821
821
|
}
|
|
822
822
|
if (remote.headers && remote.headers.length > 0) {
|
|
823
823
|
const headerStrings = ( remote.headers.map(header => `${header.name}: ${header.value ?? ""}`));
|
|
824
824
|
append(
|
|
825
825
|
packagesGrid,
|
|
826
|
-
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(
|
|
826
|
+
$(".package-detail", undefined, $(".detail-label", undefined, ( localize(11096, "Headers:"))), $(".detail-value", undefined, headerStrings.join(", ")))
|
|
827
827
|
);
|
|
828
828
|
}
|
|
829
829
|
}
|
|
@@ -902,7 +902,7 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
902
902
|
const categoriesContainer = append(container, $(".categories-container.additional-details-element"));
|
|
903
903
|
append(
|
|
904
904
|
categoriesContainer,
|
|
905
|
-
$(".additional-details-title", undefined, ( localize(
|
|
905
|
+
$(".additional-details-title", undefined, ( localize(11104, "Tags")))
|
|
906
906
|
);
|
|
907
907
|
const categoriesElement = append(categoriesContainer, $(".categories"));
|
|
908
908
|
for (const category of extension.gallery.topics) {
|
|
@@ -917,14 +917,14 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
917
917
|
const manifest = await this.mcpGalleryManifestService.getMcpGalleryManifest();
|
|
918
918
|
if (extension.repository) {
|
|
919
919
|
try {
|
|
920
|
-
resources.push([( localize(
|
|
920
|
+
resources.push([( localize(11105, "Repository")), ThemeIcon.fromId(Codicon.repo.id), ( URI.parse(extension.repository))]);
|
|
921
921
|
} catch (error) {}
|
|
922
922
|
}
|
|
923
923
|
if (manifest) {
|
|
924
924
|
const supportUri = getMcpGalleryManifestResourceUri(manifest, McpGalleryResourceType.ContactSupportUri);
|
|
925
925
|
if (supportUri) {
|
|
926
926
|
try {
|
|
927
|
-
resources.push([( localize(
|
|
927
|
+
resources.push([( localize(11106, "Contact Support")), ThemeIcon.fromId(Codicon.commentDiscussion.id), ( URI.parse(supportUri))]);
|
|
928
928
|
} catch (error) {}
|
|
929
929
|
}
|
|
930
930
|
}
|
|
@@ -932,7 +932,7 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
932
932
|
const extensionResourcesContainer = append(container, $(".resources-container.additional-details-element"));
|
|
933
933
|
append(
|
|
934
934
|
extensionResourcesContainer,
|
|
935
|
-
$(".additional-details-title", undefined, ( localize(
|
|
935
|
+
$(".additional-details-title", undefined, ( localize(11107, "Resources")))
|
|
936
936
|
);
|
|
937
937
|
const resourcesElement = append(extensionResourcesContainer, $(".resources"));
|
|
938
938
|
for (const [label, icon, uri] of resources) {
|
|
@@ -952,20 +952,20 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
952
952
|
const installInfoContainer = append(container, $(".more-info-container.additional-details-element"));
|
|
953
953
|
append(
|
|
954
954
|
installInfoContainer,
|
|
955
|
-
$(".additional-details-title", undefined, ( localize(
|
|
955
|
+
$(".additional-details-title", undefined, ( localize(11108, "Installation")))
|
|
956
956
|
);
|
|
957
957
|
const installInfo = append(installInfoContainer, $(".more-info"));
|
|
958
958
|
append(installInfo, $(
|
|
959
959
|
".more-info-entry",
|
|
960
960
|
undefined,
|
|
961
|
-
$("div.more-info-entry-name", undefined, ( localize(
|
|
961
|
+
$("div.more-info-entry-name", undefined, ( localize(11109, "Identifier"))),
|
|
962
962
|
$("code", undefined, extension.name)
|
|
963
963
|
));
|
|
964
964
|
if (extension.version) {
|
|
965
965
|
append(installInfo, $(
|
|
966
966
|
".more-info-entry",
|
|
967
967
|
undefined,
|
|
968
|
-
$("div.more-info-entry-name", undefined, ( localize(
|
|
968
|
+
$("div.more-info-entry-name", undefined, ( localize(11110, "Version"))),
|
|
969
969
|
$("code", undefined, extension.version)
|
|
970
970
|
));
|
|
971
971
|
}
|
|
@@ -975,7 +975,7 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
975
975
|
const moreInfoContainer = append(container, $(".more-info-container.additional-details-element"));
|
|
976
976
|
append(
|
|
977
977
|
moreInfoContainer,
|
|
978
|
-
$(".additional-details-title", undefined, ( localize(
|
|
978
|
+
$(".additional-details-title", undefined, ( localize(11111, "Marketplace")))
|
|
979
979
|
);
|
|
980
980
|
const moreInfo = append(moreInfoContainer, $(".more-info"));
|
|
981
981
|
if (gallery) {
|
|
@@ -983,14 +983,14 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
983
983
|
append(moreInfo, $(
|
|
984
984
|
".more-info-entry",
|
|
985
985
|
undefined,
|
|
986
|
-
$("div.more-info-entry-name", undefined, ( localize(
|
|
986
|
+
$("div.more-info-entry-name", undefined, ( localize(11109, "Identifier"))),
|
|
987
987
|
$("code", undefined, extension.name)
|
|
988
988
|
));
|
|
989
989
|
if (gallery.version) {
|
|
990
990
|
append(moreInfo, $(
|
|
991
991
|
".more-info-entry",
|
|
992
992
|
undefined,
|
|
993
|
-
$("div.more-info-entry-name", undefined, ( localize(
|
|
993
|
+
$("div.more-info-entry-name", undefined, ( localize(11110, "Version"))),
|
|
994
994
|
$("code", undefined, gallery.version)
|
|
995
995
|
));
|
|
996
996
|
}
|
|
@@ -999,7 +999,7 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
999
999
|
append(moreInfo, $(
|
|
1000
1000
|
".more-info-entry",
|
|
1001
1001
|
undefined,
|
|
1002
|
-
$("div.more-info-entry-name", undefined, ( localize(
|
|
1002
|
+
$("div.more-info-entry-name", undefined, ( localize(11112, "Last Released"))),
|
|
1003
1003
|
$("div", {
|
|
1004
1004
|
"title": ( ( new Date(gallery.lastUpdated)).toString())
|
|
1005
1005
|
}, fromNow(gallery.lastUpdated, true, true, true))
|
|
@@ -1009,7 +1009,7 @@ let AdditionalDetailsWidget = class AdditionalDetailsWidget extends Disposable {
|
|
|
1009
1009
|
append(moreInfo, $(
|
|
1010
1010
|
".more-info-entry",
|
|
1011
1011
|
undefined,
|
|
1012
|
-
$("div.more-info-entry-name", undefined, ( localize(
|
|
1012
|
+
$("div.more-info-entry-name", undefined, ( localize(11113, "Published"))),
|
|
1013
1013
|
$("div", {
|
|
1014
1014
|
"title": ( ( new Date(gallery.publishDate)).toString())
|
|
1015
1015
|
}, fromNow(gallery.publishDate, true, true, true))
|
|
@@ -8,7 +8,7 @@ import { join } from '@codingame/monaco-vscode-api/vscode/vs/base/common/path';
|
|
|
8
8
|
import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
|
|
9
9
|
import { registerIcon } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/iconRegistry';
|
|
10
10
|
|
|
11
|
-
const MCPServerEditorIcon = registerIcon("mcp-server-editor-icon", Codicon.mcp, ( localize(
|
|
11
|
+
const MCPServerEditorIcon = registerIcon("mcp-server-editor-icon", Codicon.mcp, ( localize(11114, "Icon of the MCP Server editor.")));
|
|
12
12
|
class McpServerEditorInput extends EditorInput {
|
|
13
13
|
static {
|
|
14
14
|
this.ID = "workbench.mcpServer.input2";
|
|
@@ -33,7 +33,7 @@ class McpServerEditorInput extends EditorInput {
|
|
|
33
33
|
return this._mcpServer;
|
|
34
34
|
}
|
|
35
35
|
getName() {
|
|
36
|
-
return localize(
|
|
36
|
+
return localize(11115, "MCP Server: {0}", this._mcpServer.label);
|
|
37
37
|
}
|
|
38
38
|
getIcon() {
|
|
39
39
|
return MCPServerEditorIcon;
|
|
@@ -3,10 +3,10 @@ import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codi
|
|
|
3
3
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
4
4
|
import { registerIcon } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/iconRegistry';
|
|
5
5
|
|
|
6
|
-
const mcpServerIcon = registerIcon("mcp-server", Codicon.mcp, ( localize(
|
|
7
|
-
const mcpServerRemoteIcon = registerIcon("mcp-server-remote", Codicon.remote, ( localize(
|
|
8
|
-
const mcpServerWorkspaceIcon = registerIcon("mcp-server-workspace", Codicon.rootFolder, ( localize(
|
|
9
|
-
const mcpStarredIcon = registerIcon("mcp-server-starred", Codicon.starFull, ( localize(
|
|
10
|
-
const mcpLicenseIcon = registerIcon("mcp-server-license", Codicon.law, ( localize(
|
|
6
|
+
const mcpServerIcon = registerIcon("mcp-server", Codicon.mcp, ( localize(11116, "Icon used for the MCP server.")));
|
|
7
|
+
const mcpServerRemoteIcon = registerIcon("mcp-server-remote", Codicon.remote, ( localize(11117, "Icon to indicate that an MCP server is for the remote user scope.")));
|
|
8
|
+
const mcpServerWorkspaceIcon = registerIcon("mcp-server-workspace", Codicon.rootFolder, ( localize(11118, "Icon to indicate that an MCP server is for the workspace scope.")));
|
|
9
|
+
const mcpStarredIcon = registerIcon("mcp-server-starred", Codicon.starFull, ( localize(11119, "Icon shown along with the starred status.")));
|
|
10
|
+
const mcpLicenseIcon = registerIcon("mcp-server-license", Codicon.law, ( localize(11120, "Icon shown along with the license status.")));
|
|
11
11
|
|
|
12
12
|
export { mcpLicenseIcon, mcpServerIcon, mcpServerRemoteIcon, mcpServerWorkspaceIcon, mcpStarredIcon };
|
|
@@ -17,11 +17,12 @@ import { registerThemingParticipant } from '@codingame/monaco-vscode-api/vscode/
|
|
|
17
17
|
import { IThemeService } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/themeService.service';
|
|
18
18
|
import { isDark } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/theme';
|
|
19
19
|
import { Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
|
|
20
|
-
import { mcpServerIcon, mcpStarredIcon, mcpLicenseIcon,
|
|
20
|
+
import { mcpServerIcon, mcpStarredIcon, mcpLicenseIcon, mcpServerWorkspaceIcon, mcpServerRemoteIcon } from './mcpServerIcons.js';
|
|
21
21
|
import { MarkdownString } from '@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent';
|
|
22
22
|
import { ExtensionIconBadge } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/extensions/browser/extensionsWidgets';
|
|
23
|
-
import {
|
|
23
|
+
import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
|
|
24
24
|
import { LocalMcpServerScope } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/mcp/common/mcpWorkbenchManagementService';
|
|
25
|
+
import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
|
|
25
26
|
import { registerColor } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/colorUtils';
|
|
26
27
|
import { textLinkForeground } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/colors/baseColors';
|
|
27
28
|
import '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/colors/chartsColors';
|
|
@@ -166,7 +167,7 @@ let PublisherWidget = class PublisherWidget extends McpServerWidget {
|
|
|
166
167
|
this.element.setAttribute("role", "button");
|
|
167
168
|
this.element.tabIndex = 0;
|
|
168
169
|
this.containerHover = this.disposables.add(
|
|
169
|
-
this.hoverService.setupManagedHover(getDefaultHoverDelegate("mouse"), this.element, ( localize(
|
|
170
|
+
this.hoverService.setupManagedHover(getDefaultHoverDelegate("mouse"), this.element, ( localize(11121, "Publisher ({0})", this.mcpServer.publisherDisplayName)))
|
|
170
171
|
);
|
|
171
172
|
append(this.element, publisherDisplayName);
|
|
172
173
|
if (this.mcpServer.gallery?.publisherDomain?.verified) {
|
|
@@ -175,7 +176,7 @@ let PublisherWidget = class PublisherWidget extends McpServerWidget {
|
|
|
175
176
|
verifiedPublisher.tabIndex = 0;
|
|
176
177
|
verifiedPublisher.setAttribute("role", "button");
|
|
177
178
|
this.containerHover.update(( localize(
|
|
178
|
-
|
|
179
|
+
11122,
|
|
179
180
|
"This publisher has verified ownership of {0}",
|
|
180
181
|
this.mcpServer.gallery?.publisherDomain.link
|
|
181
182
|
)));
|
|
@@ -273,6 +274,97 @@ class LicenseWidget extends McpServerWidget {
|
|
|
273
274
|
licenseElement.style.paddingLeft = "3px";
|
|
274
275
|
}
|
|
275
276
|
}
|
|
277
|
+
let McpServerHoverWidget = class McpServerHoverWidget extends McpServerWidget {
|
|
278
|
+
constructor(options, mcpServerStatusAction, hoverService, configurationService) {
|
|
279
|
+
super();
|
|
280
|
+
this.options = options;
|
|
281
|
+
this.mcpServerStatusAction = mcpServerStatusAction;
|
|
282
|
+
this.hoverService = hoverService;
|
|
283
|
+
this.configurationService = configurationService;
|
|
284
|
+
this.hover = this._register(( new MutableDisposable()));
|
|
285
|
+
}
|
|
286
|
+
render() {
|
|
287
|
+
this.hover.value = undefined;
|
|
288
|
+
if (this.mcpServer) {
|
|
289
|
+
this.hover.value = this.hoverService.setupManagedHover({
|
|
290
|
+
delay: this.configurationService.getValue("workbench.hover.delay"),
|
|
291
|
+
showHover: (options, focus) => {
|
|
292
|
+
return this.hoverService.showInstantHover({
|
|
293
|
+
...options,
|
|
294
|
+
additionalClasses: ["extension-hover"],
|
|
295
|
+
position: {
|
|
296
|
+
hoverPosition: this.options.position(),
|
|
297
|
+
forcePosition: true
|
|
298
|
+
},
|
|
299
|
+
persistence: {
|
|
300
|
+
hideOnKeyDown: true
|
|
301
|
+
}
|
|
302
|
+
}, focus);
|
|
303
|
+
},
|
|
304
|
+
placement: "element"
|
|
305
|
+
}, this.options.target, {
|
|
306
|
+
markdown: () => Promise.resolve(this.getHoverMarkdown()),
|
|
307
|
+
markdownNotSupportedFallback: undefined
|
|
308
|
+
}, {
|
|
309
|
+
appearance: {
|
|
310
|
+
showHoverHint: true
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
getHoverMarkdown() {
|
|
316
|
+
if (!this.mcpServer) {
|
|
317
|
+
return undefined;
|
|
318
|
+
}
|
|
319
|
+
const markdown = ( new MarkdownString("", {
|
|
320
|
+
isTrusted: true,
|
|
321
|
+
supportThemeIcons: true
|
|
322
|
+
}));
|
|
323
|
+
markdown.appendMarkdown(`**${this.mcpServer.label}**`);
|
|
324
|
+
markdown.appendText(`\n`);
|
|
325
|
+
let addSeparator = false;
|
|
326
|
+
if (this.mcpServer.local?.scope === LocalMcpServerScope.Workspace) {
|
|
327
|
+
markdown.appendMarkdown(`$(${mcpServerWorkspaceIcon.id}) `);
|
|
328
|
+
markdown.appendMarkdown(( localize(11123, "Workspace MCP Server")));
|
|
329
|
+
addSeparator = true;
|
|
330
|
+
}
|
|
331
|
+
if (this.mcpServer.local?.scope === LocalMcpServerScope.RemoteUser) {
|
|
332
|
+
markdown.appendMarkdown(`$(${mcpServerRemoteIcon.id}) `);
|
|
333
|
+
markdown.appendMarkdown(( localize(11124, "Remote MCP Server")));
|
|
334
|
+
addSeparator = true;
|
|
335
|
+
}
|
|
336
|
+
if (this.mcpServer.installState === McpServerInstallState.Installed) {
|
|
337
|
+
if (this.mcpServer.starsCount) {
|
|
338
|
+
if (addSeparator) {
|
|
339
|
+
markdown.appendText(` | `);
|
|
340
|
+
}
|
|
341
|
+
const starsCountLabel = StarredWidget.getCountLabel(this.mcpServer.starsCount);
|
|
342
|
+
markdown.appendMarkdown(`$(${mcpStarredIcon.id}) ${starsCountLabel}`);
|
|
343
|
+
addSeparator = true;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
if (addSeparator) {
|
|
347
|
+
markdown.appendText(`\n`);
|
|
348
|
+
}
|
|
349
|
+
if (this.mcpServer.description) {
|
|
350
|
+
markdown.appendMarkdown(`${this.mcpServer.description}`);
|
|
351
|
+
}
|
|
352
|
+
const extensionStatus = this.mcpServerStatusAction.status;
|
|
353
|
+
if (extensionStatus.length) {
|
|
354
|
+
markdown.appendMarkdown(`---`);
|
|
355
|
+
markdown.appendText(`\n`);
|
|
356
|
+
for (const status of extensionStatus) {
|
|
357
|
+
if (status.icon) {
|
|
358
|
+
markdown.appendMarkdown(`$(${status.icon.id}) `);
|
|
359
|
+
}
|
|
360
|
+
markdown.appendMarkdown(status.message.value);
|
|
361
|
+
markdown.appendText(`\n`);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
return markdown;
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
McpServerHoverWidget = ( __decorate([( __param(2, IHoverService)), ( __param(3, IConfigurationService))], McpServerHoverWidget));
|
|
276
368
|
let McpServerScopeBadgeWidget = class McpServerScopeBadgeWidget extends McpServerWidget {
|
|
277
369
|
constructor(container, instantiationService) {
|
|
278
370
|
super();
|
|
@@ -356,7 +448,7 @@ const mcpStarredIconColor = registerColor("mcpIcon.starForeground", {
|
|
|
356
448
|
dark: "#FF8E00",
|
|
357
449
|
hcDark: "#FF8E00",
|
|
358
450
|
hcLight: textLinkForeground
|
|
359
|
-
}, ( localize(
|
|
451
|
+
}, ( localize(11125, "The icon color for mcp starred.")), false);
|
|
360
452
|
registerThemingParticipant((theme, collector) => {
|
|
361
453
|
const mcpStarredIconColorValue = theme.getColor(mcpStarredIconColor);
|
|
362
454
|
if (mcpStarredIconColorValue) {
|
|
@@ -369,4 +461,4 @@ registerThemingParticipant((theme, collector) => {
|
|
|
369
461
|
}
|
|
370
462
|
});
|
|
371
463
|
|
|
372
|
-
export { LicenseWidget, McpServerIconWidget, McpServerScopeBadgeWidget, McpServerStatusWidget, McpServerWidget, PublisherWidget, StarredWidget, mcpStarredIconColor, onClick };
|
|
464
|
+
export { LicenseWidget, McpServerHoverWidget, McpServerIconWidget, McpServerScopeBadgeWidget, McpServerStatusWidget, McpServerWidget, PublisherWidget, StarredWidget, mcpStarredIconColor, onClick };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
|
|
2
|
+
import { IPagedModel } from "@codingame/monaco-vscode-api/vscode/vs/base/common/paging";
|
|
3
|
+
import { IConfigurationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service";
|
|
4
|
+
import { IContextKeyService } from "@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service";
|
|
5
|
+
import { IContextMenuService } from "@codingame/monaco-vscode-api/vscode/vs/platform/contextview/browser/contextView.service";
|
|
6
|
+
import { IDialogService } from "@codingame/monaco-vscode-api/vscode/vs/platform/dialogs/common/dialogs.service";
|
|
7
|
+
import { IHoverService } from "@codingame/monaco-vscode-api/vscode/vs/platform/hover/browser/hover.service";
|
|
8
|
+
import { IInstantiationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation";
|
|
9
|
+
import { IKeybindingService } from "@codingame/monaco-vscode-api/vscode/vs/platform/keybinding/common/keybinding.service";
|
|
10
|
+
import { IOpenerService } from "@codingame/monaco-vscode-api/vscode/vs/platform/opener/common/opener.service";
|
|
11
|
+
import { IThemeService } from "@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/themeService.service";
|
|
12
|
+
import { IViewletViewOptions } from "@codingame/monaco-vscode-api/vscode/vs/workbench/browser/parts/views/viewsViewlet";
|
|
13
|
+
import { IViewDescriptorService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/common/views.service";
|
|
14
|
+
import { IWorkbenchMcpServer } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpTypes";
|
|
15
|
+
import { IMcpWorkbenchService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpTypes.service";
|
|
16
|
+
import { IWorkbenchContribution } from "@codingame/monaco-vscode-api/vscode/vs/workbench/common/contributions";
|
|
17
|
+
import { AbstractExtensionsListView } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/extensions/browser/extensionsViews";
|
|
18
|
+
import { IWorkbenchLayoutService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/layout/browser/layoutService.service";
|
|
19
|
+
import { IMcpGalleryManifestService } from "@codingame/monaco-vscode-api/vscode/vs/platform/mcp/common/mcpGalleryManifest.service";
|
|
20
|
+
import { IMarkdownRendererService } from "@codingame/monaco-vscode-api/vscode/vs/platform/markdown/browser/markdownRenderer.service";
|
|
21
|
+
import { ILogService } from "@codingame/monaco-vscode-api/vscode/vs/platform/log/common/log.service";
|
|
22
|
+
export interface McpServerListViewOptions {
|
|
23
|
+
showWelcome?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export declare class McpServersListView extends AbstractExtensionsListView<IWorkbenchMcpServer> {
|
|
26
|
+
private readonly mpcViewOptions;
|
|
27
|
+
private readonly dialogService;
|
|
28
|
+
private readonly mcpWorkbenchService;
|
|
29
|
+
protected readonly mcpGalleryManifestService: IMcpGalleryManifestService;
|
|
30
|
+
private readonly layoutService;
|
|
31
|
+
protected readonly markdownRendererService: IMarkdownRendererService;
|
|
32
|
+
private readonly logService;
|
|
33
|
+
private list;
|
|
34
|
+
private listContainer;
|
|
35
|
+
private welcomeContainer;
|
|
36
|
+
private bodyTemplate;
|
|
37
|
+
private readonly contextMenuActionRunner;
|
|
38
|
+
private readonly modalNavigationDisposable;
|
|
39
|
+
private input;
|
|
40
|
+
constructor(mpcViewOptions: McpServerListViewOptions, options: IViewletViewOptions, keybindingService: IKeybindingService, contextMenuService: IContextMenuService, instantiationService: IInstantiationService, themeService: IThemeService, hoverService: IHoverService, configurationService: IConfigurationService, contextKeyService: IContextKeyService, viewDescriptorService: IViewDescriptorService, openerService: IOpenerService, dialogService: IDialogService, mcpWorkbenchService: IMcpWorkbenchService, mcpGalleryManifestService: IMcpGalleryManifestService, layoutService: IWorkbenchLayoutService, markdownRendererService: IMarkdownRendererService, logService: ILogService);
|
|
41
|
+
protected renderBody(container: HTMLElement): void;
|
|
42
|
+
private onContextMenu;
|
|
43
|
+
protected layoutBody(height: number, width: number): void;
|
|
44
|
+
show(query: string): Promise<IPagedModel<IWorkbenchMcpServer>>;
|
|
45
|
+
private renderInput;
|
|
46
|
+
private showWelcomeContent;
|
|
47
|
+
private createWelcomeContent;
|
|
48
|
+
private updateBody;
|
|
49
|
+
private query;
|
|
50
|
+
private mergeChangedMcpServers;
|
|
51
|
+
}
|
|
52
|
+
export declare class DefaultBrowseMcpServersView extends McpServersListView {
|
|
53
|
+
protected renderBody(container: HTMLElement): void;
|
|
54
|
+
show(): Promise<IPagedModel<IWorkbenchMcpServer>>;
|
|
55
|
+
}
|
|
56
|
+
export declare class McpServersViewsContribution extends Disposable implements IWorkbenchContribution {
|
|
57
|
+
static ID: string;
|
|
58
|
+
constructor();
|
|
59
|
+
}
|