mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-19 09:33:53 +00:00
fix(mcp): clear prompt registry on refresh to prevent duplicates (#5385)
Co-authored-by: Jacob Richman <jacob314@gmail.com> Co-authored-by: Sandy Tao <sandytao520@icloud.com>
This commit is contained in:
committed by
GitHub
parent
faf6a5497a
commit
29c3825604
@@ -53,4 +53,22 @@ export class PromptRegistry {
|
|||||||
}
|
}
|
||||||
return serverPrompts.sort((a, b) => a.name.localeCompare(b.name));
|
return serverPrompts.sort((a, b) => a.name.localeCompare(b.name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears all the prompts from the registry.
|
||||||
|
*/
|
||||||
|
clear(): void {
|
||||||
|
this.prompts.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes all prompts from a specific server.
|
||||||
|
*/
|
||||||
|
removePromptsByServer(serverName: string): void {
|
||||||
|
for (const [name, prompt] of this.prompts.entries()) {
|
||||||
|
if (prompt.serverName === serverName) {
|
||||||
|
this.prompts.delete(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -172,6 +172,10 @@ describe('ToolRegistry', () => {
|
|||||||
);
|
);
|
||||||
vi.spyOn(config, 'getMcpServers');
|
vi.spyOn(config, 'getMcpServers');
|
||||||
vi.spyOn(config, 'getMcpServerCommand');
|
vi.spyOn(config, 'getMcpServerCommand');
|
||||||
|
vi.spyOn(config, 'getPromptRegistry').mockReturnValue({
|
||||||
|
clear: vi.fn(),
|
||||||
|
removePromptsByServer: vi.fn(),
|
||||||
|
} as any);
|
||||||
mockDiscoverMcpTools.mockReset().mockResolvedValue(undefined);
|
mockDiscoverMcpTools.mockReset().mockResolvedValue(undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -353,7 +357,7 @@ describe('ToolRegistry', () => {
|
|||||||
mcpServerConfigVal,
|
mcpServerConfigVal,
|
||||||
undefined,
|
undefined,
|
||||||
toolRegistry,
|
toolRegistry,
|
||||||
undefined,
|
config.getPromptRegistry(),
|
||||||
false,
|
false,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@@ -376,7 +380,7 @@ describe('ToolRegistry', () => {
|
|||||||
mcpServerConfigVal,
|
mcpServerConfigVal,
|
||||||
undefined,
|
undefined,
|
||||||
toolRegistry,
|
toolRegistry,
|
||||||
undefined,
|
config.getPromptRegistry(),
|
||||||
false,
|
false,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -150,6 +150,14 @@ export class ToolRegistry {
|
|||||||
this.tools.set(tool.name, tool);
|
this.tools.set(tool.name, tool);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private removeDiscoveredTools(): void {
|
||||||
|
for (const tool of this.tools.values()) {
|
||||||
|
if (tool instanceof DiscoveredTool || tool instanceof DiscoveredMCPTool) {
|
||||||
|
this.tools.delete(tool.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Discovers tools from project (if available and configured).
|
* Discovers tools from project (if available and configured).
|
||||||
* Can be called multiple times to update discovered tools.
|
* Can be called multiple times to update discovered tools.
|
||||||
@@ -157,11 +165,9 @@ export class ToolRegistry {
|
|||||||
*/
|
*/
|
||||||
async discoverAllTools(): Promise<void> {
|
async discoverAllTools(): Promise<void> {
|
||||||
// remove any previously discovered tools
|
// remove any previously discovered tools
|
||||||
for (const tool of this.tools.values()) {
|
this.removeDiscoveredTools();
|
||||||
if (tool instanceof DiscoveredTool || tool instanceof DiscoveredMCPTool) {
|
|
||||||
this.tools.delete(tool.name);
|
this.config.getPromptRegistry().clear();
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
await this.discoverAndRegisterToolsFromCommand();
|
await this.discoverAndRegisterToolsFromCommand();
|
||||||
|
|
||||||
@@ -182,11 +188,9 @@ export class ToolRegistry {
|
|||||||
*/
|
*/
|
||||||
async discoverMcpTools(): Promise<void> {
|
async discoverMcpTools(): Promise<void> {
|
||||||
// remove any previously discovered tools
|
// remove any previously discovered tools
|
||||||
for (const tool of this.tools.values()) {
|
this.removeDiscoveredTools();
|
||||||
if (tool instanceof DiscoveredMCPTool) {
|
|
||||||
this.tools.delete(tool.name);
|
this.config.getPromptRegistry().clear();
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// discover tools using MCP servers, if configured
|
// discover tools using MCP servers, if configured
|
||||||
await discoverMcpTools(
|
await discoverMcpTools(
|
||||||
@@ -210,6 +214,8 @@ export class ToolRegistry {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.config.getPromptRegistry().removePromptsByServer(serverName);
|
||||||
|
|
||||||
const mcpServers = this.config.getMcpServers() ?? {};
|
const mcpServers = this.config.getMcpServers() ?? {};
|
||||||
const serverConfig = mcpServers[serverName];
|
const serverConfig = mcpServers[serverName];
|
||||||
if (serverConfig) {
|
if (serverConfig) {
|
||||||
|
|||||||
Reference in New Issue
Block a user