mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
fix: notify all open tabs when MCP settings change
- Modified McpHub.notifyWebviewOfServerChanges() to use McpServerManager.notifyProviders() - This ensures all open tabs receive updates when MCP settings change - Updated tests to mock McpServerManager instead of direct provider calls - Fixes #8634
This commit is contained in:
parent
6b8c21f873
commit
afc8e073f7
2 changed files with 30 additions and 22 deletions
|
|
@ -1319,27 +1319,19 @@ export class McpHub {
|
|||
return aIsGlobal ? 1 : -1
|
||||
})
|
||||
|
||||
// Send sorted servers to webview
|
||||
const targetProvider: ClineProvider | undefined = this.providerRef.deref()
|
||||
// Send sorted servers to all registered providers (all open tabs)
|
||||
const serversToSend = sortedConnections.map((connection) => connection.server)
|
||||
|
||||
if (targetProvider) {
|
||||
const serversToSend = sortedConnections.map((connection) => connection.server)
|
||||
|
||||
const message = {
|
||||
type: "mcpServers" as const,
|
||||
mcpServers: serversToSend,
|
||||
}
|
||||
|
||||
try {
|
||||
await targetProvider.postMessageToWebview(message)
|
||||
} catch (error) {
|
||||
console.error("[McpHub] Error calling targetProvider.postMessageToWebview:", error)
|
||||
}
|
||||
} else {
|
||||
console.error(
|
||||
"[McpHub] No target provider available (neither from getInstance nor providerRef) - cannot send mcpServers message to webview",
|
||||
)
|
||||
const message = {
|
||||
type: "mcpServers" as const,
|
||||
mcpServers: serversToSend,
|
||||
}
|
||||
|
||||
// Import McpServerManager dynamically to avoid circular dependency
|
||||
const { McpServerManager } = await import("./McpServerManager")
|
||||
|
||||
// Notify all registered providers to ensure all tabs are synchronized
|
||||
McpServerManager.notifyProviders(message)
|
||||
}
|
||||
|
||||
public async toggleServerDisabled(
|
||||
|
|
|
|||
|
|
@ -49,6 +49,16 @@ vi.mock("../../../utils/safeWriteJson", () => ({
|
|||
}),
|
||||
}))
|
||||
|
||||
// Mock McpServerManager
|
||||
vi.mock("../McpServerManager", () => ({
|
||||
McpServerManager: {
|
||||
notifyProviders: vi.fn(),
|
||||
getInstance: vi.fn(),
|
||||
unregisterProvider: vi.fn(),
|
||||
cleanup: vi.fn(),
|
||||
},
|
||||
}))
|
||||
|
||||
vi.mock("vscode", () => ({
|
||||
workspace: {
|
||||
createFileSystemWatcher: vi.fn().mockReturnValue({
|
||||
|
|
@ -1502,9 +1512,12 @@ describe("McpHub", () => {
|
|||
}
|
||||
mcpHub.connections = [mockConnection]
|
||||
|
||||
// Get the mock McpServerManager
|
||||
const { McpServerManager } = await import("../McpServerManager")
|
||||
|
||||
await mcpHub.updateServerTimeout("test-server", 120)
|
||||
|
||||
expect(mockProvider.postMessageToWebview).toHaveBeenCalledWith(
|
||||
expect(McpServerManager.notifyProviders).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
type: "mcpServers",
|
||||
}),
|
||||
|
|
@ -1733,6 +1746,9 @@ describe("McpHub", () => {
|
|||
const mcpHub = new McpHub(disabledMockProvider as unknown as ClineProvider)
|
||||
await new Promise((resolve) => setTimeout(resolve, 100))
|
||||
|
||||
// Get the mock McpServerManager
|
||||
const { McpServerManager } = await import("../McpServerManager")
|
||||
|
||||
// Clear previous calls
|
||||
vi.clearAllMocks()
|
||||
|
||||
|
|
@ -1746,8 +1762,8 @@ describe("McpHub", () => {
|
|||
expect(server!.client).toBeNull()
|
||||
expect(server!.transport).toBeNull()
|
||||
|
||||
// Verify postMessageToWebview was called to update the UI
|
||||
expect(disabledMockProvider.postMessageToWebview).toHaveBeenCalledWith(
|
||||
// Verify McpServerManager.notifyProviders was called to update the UI
|
||||
expect(McpServerManager.notifyProviders).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
type: "mcpServers",
|
||||
}),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue