@@ -45,7 +45,8 @@ public actor RealtimeSuggestionController {
4545 private func handleFocusElementChange( _ sourceEditor: SourceEditor ) {
4646 Task { // Notify suggestion service for open file.
4747 try await Task . sleep ( nanoseconds: 500_000_000 )
48- guard let fileURL = XcodeInspector . shared. realtimeActiveDocumentURL else { return }
48+ guard let fileURL = await XcodeInspector . shared. safe. realtimeActiveDocumentURL
49+ else { return }
4950 _ = try await Service . shared. workspacePool
5051 . fetchOrCreateWorkspaceAndFilespace ( fileURL: fileURL)
5152 }
@@ -58,15 +59,16 @@ public actor RealtimeSuggestionController {
5859 editorObservationTask = nil
5960
6061 editorObservationTask = Task { [ weak self] in
61- if let fileURL = XcodeInspector . shared. realtimeActiveDocumentURL {
62+ if let fileURL = await XcodeInspector . shared. safe . realtimeActiveDocumentURL {
6263 await PseudoCommandHandler ( ) . invalidateRealtimeSuggestionsIfNeeded (
6364 fileURL: fileURL,
6465 sourceEditor: sourceEditor
6566 )
6667 }
6768
68- let valueChange = notificationsFromEditor. filter { $0. kind == . valueChanged }
69- let selectedTextChanged = notificationsFromEditor
69+ let valueChange = await notificationsFromEditor. notifications ( )
70+ . filter { $0. kind == . valueChanged }
71+ let selectedTextChanged = await notificationsFromEditor. notifications ( )
7072 . filter { $0. kind == . selectedTextChanged }
7173
7274 await withTaskGroup( of: Void . self) { [ weak self] group in
@@ -92,7 +94,8 @@ public actor RealtimeSuggestionController {
9294 }
9395 group. addTask {
9496 let handler = {
95- guard let fileURL = XcodeInspector . shared. activeDocumentURL else { return }
97+ guard let fileURL = await XcodeInspector . shared. safe. activeDocumentURL
98+ else { return }
9699 await PseudoCommandHandler ( ) . invalidateRealtimeSuggestionsIfNeeded (
97100 fileURL: fileURL,
98101 sourceEditor: sourceEditor
@@ -118,7 +121,8 @@ public actor RealtimeSuggestionController {
118121
119122 Task { @WorkspaceActor in // Get cache ready for real-time suggestions.
120123 guard UserDefaults . shared. value ( for: \. preCacheOnFileOpen) else { return }
121- guard let fileURL = XcodeInspector . shared. realtimeActiveDocumentURL else { return }
124+ guard let fileURL = await XcodeInspector . shared. safe. realtimeActiveDocumentURL
125+ else { return }
122126 let ( _, filespace) = try await Service . shared. workspacePool
123127 . fetchOrCreateWorkspaceAndFilespace ( fileURL: fileURL)
124128
@@ -127,7 +131,7 @@ public actor RealtimeSuggestionController {
127131 // avoid the command get called twice
128132 filespace. codeMetadata. uti = " "
129133 do {
130- try await XcodeInspector . shared. latestActiveXcode?
134+ try await XcodeInspector . shared. safe . latestActiveXcode?
131135 . triggerCopilotCommand ( name: " Real-time Suggestions " )
132136 } catch {
133137 if filespace. codeMetadata. uti? . isEmpty ?? true {
@@ -141,7 +145,7 @@ public actor RealtimeSuggestionController {
141145 func triggerPrefetchDebounced( force: Bool = false ) {
142146 inflightPrefetchTask = Task ( priority: . utility) { @WorkspaceActor in
143147 try ? await Task . sleep ( nanoseconds: UInt64 (
144- max ( UserDefaults . shared. value ( for: \. realtimeSuggestionDebounce) , 0.15 )
148+ max ( UserDefaults . shared. value ( for: \. realtimeSuggestionDebounce) , 0.25 )
145149 * 1_000_000_000
146150 ) )
147151
@@ -151,7 +155,7 @@ public actor RealtimeSuggestionController {
151155 else { return }
152156
153157 if UserDefaults . shared. value ( for: \. disableSuggestionFeatureGlobally) ,
154- let fileURL = XcodeInspector . shared. activeDocumentURL,
158+ let fileURL = await XcodeInspector . shared. safe . activeDocumentURL,
155159 let ( workspace, _) = try ? await Service . shared. workspacePool
156160 . fetchOrCreateWorkspaceAndFilespace ( fileURL: fileURL)
157161 {
@@ -188,7 +192,7 @@ public actor RealtimeSuggestionController {
188192 }
189193
190194 func notifyEditingFileChange( editor: AXUIElement) async {
191- guard let fileURL = XcodeInspector . shared. activeDocumentURL,
195+ guard let fileURL = await XcodeInspector . shared. safe . activeDocumentURL,
192196 let ( workspace, _) = try ? await Service . shared. workspacePool
193197 . fetchOrCreateWorkspaceAndFilespace ( fileURL: fileURL)
194198 else { return }
0 commit comments