Skip to content

Commit aa120b4

Browse files
Merge pull request #51308 from phillip-kruger/dev-mcp-installable-ext
Dev MCP: Reduce the payload for the extension list call
2 parents 3bf4920 + 8242caa commit aa120b4

File tree

1 file changed

+42
-20
lines changed

1 file changed

+42
-20
lines changed

extensions/devui/deployment/src/main/java/io/quarkus/devui/deployment/menu/ExtensionsProcessor.java

Lines changed: 42 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.nio.file.Path;
44
import java.nio.file.Paths;
55
import java.util.ArrayList;
6+
import java.util.HashMap;
67
import java.util.List;
78
import java.util.Map;
89
import java.util.Set;
@@ -71,7 +72,8 @@ void createBuildTimeActions(BuildProducer<BuildTimeActionBuildItem> buildTimeAct
7172

7273
BuildTimeActionBuildItem buildTimeActions = new BuildTimeActionBuildItem(NAMESPACE);
7374
getCategories(buildTimeActions);
74-
getInstallableExtensions(buildTimeActions);
75+
getInstallableExtensions(buildTimeActions); // For Dev UI
76+
listInstallableExtensions(buildTimeActions); // For Dev MCP
7577
getInstalledNamespaces(buildTimeActions);
7678
removeExtension(buildTimeActions);
7779
addExtension(buildTimeActions);
@@ -104,34 +106,59 @@ private void getCategories(BuildTimeActionBuildItem buildTimeActions) {
104106
}
105107

106108
private void getInstallableExtensions(BuildTimeActionBuildItem buildTimeActions) {
109+
buildTimeActions
110+
.actionBuilder().methodName(new Object() {
111+
}.getClass().getEnclosingMethod().getName())
112+
.function(ignored -> {
113+
return CompletableFuture.supplyAsync(() -> {
114+
return listExtensionInQuarkusProject();
115+
});
116+
})
117+
.build();
118+
}
119+
120+
private void listInstallableExtensions(BuildTimeActionBuildItem buildTimeActions) {
107121
buildTimeActions
108122
.actionBuilder().methodName(new Object() {
109123
}.getClass().getEnclosingMethod().getName())
110124
.description(
111125
"Get all extensions that can be added to the current project (i.e it's not currently added to the pom)")
112126
.function(ignored -> {
113127
return CompletableFuture.supplyAsync(() -> {
114-
try {
115-
QuarkusCommandOutcome outcome = new ListExtensions(getQuarkusProject())
116-
.installed(false)
117-
.all(false)
118-
.format("object")
119-
.execute();
120128

121-
if (outcome.isSuccess()) {
122-
return outcome.getResult();
123-
}
124-
125-
return null;
126-
} catch (QuarkusCommandException e) {
127-
throw new RuntimeException(e);
129+
List<Map<String, String>> filtered = new ArrayList<>();
130+
for (io.quarkus.registry.catalog.Extension e : listExtensionInQuarkusProject()) {
131+
Map<String, String> entry = new HashMap<>();
132+
entry.put("name", e.getName());
133+
entry.put("description", e.getDescription());
134+
entry.put("extensionArtifactId", e.getArtifact().toCompactCoords());
135+
filtered.add(entry);
128136
}
137+
return filtered;
129138
});
130139
})
131140
.enableMcpFuctionByDefault()
132141
.build();
133142
}
134143

144+
private List<io.quarkus.registry.catalog.Extension> listExtensionInQuarkusProject() throws RuntimeException {
145+
try {
146+
QuarkusCommandOutcome outcome = new ListExtensions(getQuarkusProject())
147+
.installed(false)
148+
.all(false)
149+
.format("object")
150+
.execute();
151+
152+
if (outcome.isSuccess()) {
153+
return (List) outcome.getResult();
154+
}
155+
156+
return null;
157+
} catch (QuarkusCommandException e) {
158+
throw new RuntimeException(e);
159+
}
160+
}
161+
135162
private void getInstalledNamespaces(BuildTimeActionBuildItem buildTimeActions) {
136163
buildTimeActions
137164
.actionBuilder().methodName(new Object() {
@@ -188,12 +215,7 @@ private void removeExtension(BuildTimeActionBuildItem buildTimeActions) {
188215
QuarkusCommandOutcome outcome = new RemoveExtensions(getQuarkusProject())
189216
.extensions(Set.of(extensionArtifactId))
190217
.execute();
191-
192-
if (outcome.isSuccess()) {
193-
return true;
194-
} else {
195-
return false;
196-
}
218+
return outcome.isSuccess();
197219
} catch (QuarkusCommandException e) {
198220
throw new RuntimeException(e);
199221
}

0 commit comments

Comments
 (0)