forked from github/CopilotForXcode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCopilotMCPToolManagerObservable.swift
More file actions
32 lines (27 loc) · 1.17 KB
/
CopilotMCPToolManagerObservable.swift
File metadata and controls
32 lines (27 loc) · 1.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import SwiftUI
import Combine
import Persist
import GitHubCopilotService
class CopilotMCPToolManagerObservable: ObservableObject {
static let shared = CopilotMCPToolManagerObservable()
@Published var availableMCPServerTools: [MCPServerToolsCollection] = []
private var cancellables = Set<AnyCancellable>()
private init() {
// Initial load
availableMCPServerTools = CopilotMCPToolManager.getAvailableMCPServerToolsCollections()
// Setup notification to update when MCP server tools collections change
NotificationCenter.default
.publisher(for: .gitHubCopilotMCPToolsDidChange)
.receive(on: DispatchQueue.main)
.sink { [weak self] _ in
guard let self = self else { return }
self.refreshTools()
}
.store(in: &cancellables)
}
private func refreshTools() {
self.availableMCPServerTools = CopilotMCPToolManager.getAvailableMCPServerToolsCollections()
AppState.shared.cleanupMCPToolsStatus(availableTools: self.availableMCPServerTools)
AppState.shared.createMCPToolsStatus(self.availableMCPServerTools)
}
}