From 7d6ea546b891b56ec4a29b41cf3723d8c308dcaa Mon Sep 17 00:00:00 2001 From: Shx Guo Date: Thu, 16 Apr 2026 00:09:38 +0800 Subject: [PATCH] Bump to Swift 6 and update composable architecture --- ChatPlugins/Package.swift | 2 +- Copilot for Xcode.xcodeproj/project.pbxproj | 4 +- Copilot for Xcode/App.swift | 6 +- Core/Package.swift | 2 +- Core/Sources/ChatGPTChatTab/Chat.swift | 2 +- .../ChatGPTChatTab/ChatContextMenu.swift | 2 +- .../ChatGPTChatTab/ChatGPTChatTab.swift | 2 +- Core/Sources/ChatGPTChatTab/ChatPanel.swift | 2 +- .../ChatGPTChatTab/CodeBlockHighlighter.swift | 2 +- .../ChatGPTChatTab/Views/BotMessage.swift | 2 +- .../ChatGPTChatTab/Views/Instructions.swift | 2 +- .../ChatGPTChatTab/Views/UserMessage.swift | 2 +- .../APIKeyManagementView.swift | 2 +- .../APIKeyManagement/APIKeyManangement.swift | 2 +- .../APIKeyManagement/APIKeyPicker.swift | 2 +- .../APIKeyManagement/APIKeySelection.swift | 2 +- .../APIKeyManagement/APIKeySubmission.swift | 2 +- .../ChatModelManagement/ChatModelEdit.swift | 2 +- .../ChatModelEditView.swift | 2 +- .../ChatModelManagement.swift | 2 +- .../ChatModelManagementView.swift | 2 +- .../EmbeddingModelEdit.swift | 2 +- .../EmbeddingModelEditView.swift | 2 +- .../EmbeddingModelManagement.swift | 2 +- .../EmbeddingModelManagementView.swift | 2 +- .../AIModelManagementVIew.swift | 2 +- .../SharedModelManagement/BaseURLPicker.swift | 2 +- .../BaseURLSelection.swift | 2 +- .../AccountSettings/WebSearchView.swift | 2 +- .../CustomCommandSettings/CustomCommand.swift | 6 +- .../CustomCommandView.swift | 4 +- .../EditCustomCommand.swift | 2 +- .../EditCustomCommandView.swift | 2 +- Core/Sources/HostApp/General.swift | 2 +- Core/Sources/HostApp/GeneralView.swift | 2 +- Core/Sources/HostApp/HostApp.swift | 2 +- Core/Sources/HostApp/ServiceView.swift | 2 +- Core/Sources/HostApp/TabContainer.swift | 2 +- .../GraphicalUserInterfaceController.swift | 2 +- .../Service/GUI/WidgetDataSource.swift | 2 +- .../PseudoCommandHandler.swift | 2 +- .../WindowBaseCommandHandler.swift | 4 +- .../SuggestionWidget/ChatPanelWindow.swift | 2 +- .../SuggestionWidget/ChatWindowView.swift | 2 +- .../FeatureReducers/ChatPanel.swift | 14 ++--- .../FeatureReducers/CircularWidget.swift | 8 +-- .../FeatureReducers/PromptToCodeGroup.swift | 15 ++--- .../FeatureReducers/PromptToCodePanel.swift | 63 ++++++++++++------- .../FeatureReducers/SharedPanel.swift | 2 +- .../FeatureReducers/SuggestionPanel.swift | 2 +- .../FeatureReducers/ToastPanel.swift | 8 +-- .../FeatureReducers/Widget.swift | 12 ++-- .../FeatureReducers/WidgetPanel.swift | 6 +- .../SuggestionWidget/ModuleDependency.swift | 2 +- .../PromptToCodePanelGroupView.swift | 2 +- .../SuggestionWidget/SharedPanelView.swift | 2 +- .../PromptToCodePanelView.swift | 8 +-- .../ToastPanelView.swift | 2 +- .../SuggestionPanelView.swift | 2 +- .../SuggestionWidgetController.swift | 2 +- .../Sources/SuggestionWidget/WidgetView.swift | 2 +- .../WidgetWindowsController.swift | 2 +- Tool/Package.swift | 4 +- Tool/Sources/ChatTab/ChatTab.swift | 4 +- Tool/Sources/ChatTab/ChatTabItem.swift | 2 +- Tool/Sources/ChatTab/ChatTabPool.swift | 2 +- .../ChatTab/CodeiumChatBrowser.swift | 2 +- .../ChatTab/CodeiumChatTab.swift | 2 +- .../ChatTab/CodeiumChatTabItem.swift | 2 +- .../ChatTab/CodeiumChatView.swift | 2 +- .../ChatTab/CodeiumWebView.swift | 2 +- .../CommandHandler/CommandHandler.swift | 2 +- .../ModificationBasic/ModificationAgent.swift | 2 +- .../PromptToCodeCustomization.swift | 2 +- Tool/Sources/Toast/Toast.swift | 2 +- Tool/Sources/WebScrapper/WebScrapper.swift | 4 +- Version.xcconfig | 2 +- 77 files changed, 156 insertions(+), 136 deletions(-) diff --git a/ChatPlugins/Package.swift b/ChatPlugins/Package.swift index 4defd772..f4f2ebe7 100644 --- a/ChatPlugins/Package.swift +++ b/ChatPlugins/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "ChatPlugins", - platforms: [.macOS(.v12)], + platforms: [.macOS(.v13)], products: [ .library( name: "ChatPlugins", diff --git a/Copilot for Xcode.xcodeproj/project.pbxproj b/Copilot for Xcode.xcodeproj/project.pbxproj index 056e5761..d34c9590 100644 --- a/Copilot for Xcode.xcodeproj/project.pbxproj +++ b/Copilot for Xcode.xcodeproj/project.pbxproj @@ -973,7 +973,7 @@ PRODUCT_MODULE_NAME = Copilot_for_Xcode; PRODUCT_NAME = "$(HOST_APP_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 6.0; }; name = Debug; }; @@ -1006,7 +1006,7 @@ PRODUCT_BUNDLE_IDENTIFIER = "$(BUNDLE_IDENTIFIER_BASE)"; PRODUCT_NAME = "$(HOST_APP_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 6.0; }; name = Release; }; diff --git a/Copilot for Xcode/App.swift b/Copilot for Xcode/App.swift index 99a0a044..0af86800 100644 --- a/Copilot for Xcode/App.swift +++ b/Copilot for Xcode/App.swift @@ -2,7 +2,7 @@ import Client import HostApp import LaunchAgentManager import SwiftUI -import UpdateChecker +@preconcurrency import UpdateChecker import XPCShared struct VisualEffect: NSViewRepresentable { @@ -11,7 +11,7 @@ struct VisualEffect: NSViewRepresentable { } class TheUpdateCheckerDelegate: UpdateCheckerDelegate { - func prepareForRelaunch(finish: @escaping () -> Void) { + func prepareForRelaunch(finish: @Sendable @escaping () -> Void) { Task { let service = try? getService() try? await service?.quitService() @@ -20,7 +20,7 @@ class TheUpdateCheckerDelegate: UpdateCheckerDelegate { } } -let updateCheckerDelegate = TheUpdateCheckerDelegate() +@MainActor let updateCheckerDelegate = TheUpdateCheckerDelegate() @main struct CopilotForXcodeApp: App { diff --git a/Core/Package.swift b/Core/Package.swift index 6cd0910a..84207236 100644 --- a/Core/Package.swift +++ b/Core/Package.swift @@ -46,7 +46,7 @@ let package = Package( .package(url: "https://github.com/pointfreeco/swift-dependencies", from: "1.0.0"), .package( url: "https://github.com/pointfreeco/swift-composable-architecture", - exact: "1.16.1" + exact: "1.25.5" ), // quick hack to support custom UserDefaults // https://github.com/sindresorhus/KeyboardShortcuts diff --git a/Core/Sources/ChatGPTChatTab/Chat.swift b/Core/Sources/ChatGPTChatTab/Chat.swift index 28443876..4d8b719d 100644 --- a/Core/Sources/ChatGPTChatTab/Chat.swift +++ b/Core/Sources/ChatGPTChatTab/Chat.swift @@ -1,7 +1,7 @@ import AppKit import ChatBasic import ChatService -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import MarkdownUI import OpenAIService diff --git a/Core/Sources/ChatGPTChatTab/ChatContextMenu.swift b/Core/Sources/ChatGPTChatTab/ChatContextMenu.swift index 9114a5dd..e86a53f4 100644 --- a/Core/Sources/ChatGPTChatTab/ChatContextMenu.swift +++ b/Core/Sources/ChatGPTChatTab/ChatContextMenu.swift @@ -1,6 +1,6 @@ import AppKit import ChatService -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import SharedUIComponents import SwiftUI diff --git a/Core/Sources/ChatGPTChatTab/ChatGPTChatTab.swift b/Core/Sources/ChatGPTChatTab/ChatGPTChatTab.swift index ad2c6887..09889d10 100644 --- a/Core/Sources/ChatGPTChatTab/ChatGPTChatTab.swift +++ b/Core/Sources/ChatGPTChatTab/ChatGPTChatTab.swift @@ -3,7 +3,7 @@ import ChatService import ChatTab import CodableWrappers import Combine -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import DebounceFunction import Foundation import OpenAIService diff --git a/Core/Sources/ChatGPTChatTab/ChatPanel.swift b/Core/Sources/ChatGPTChatTab/ChatPanel.swift index 9210a05d..f098ec46 100644 --- a/Core/Sources/ChatGPTChatTab/ChatPanel.swift +++ b/Core/Sources/ChatGPTChatTab/ChatPanel.swift @@ -1,6 +1,6 @@ import AppKit import Combine -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import MarkdownUI import OpenAIService import SharedUIComponents diff --git a/Core/Sources/ChatGPTChatTab/CodeBlockHighlighter.swift b/Core/Sources/ChatGPTChatTab/CodeBlockHighlighter.swift index 0e506b96..c9c11b82 100644 --- a/Core/Sources/ChatGPTChatTab/CodeBlockHighlighter.swift +++ b/Core/Sources/ChatGPTChatTab/CodeBlockHighlighter.swift @@ -1,5 +1,5 @@ import Combine -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import DebounceFunction import Foundation import MarkdownUI diff --git a/Core/Sources/ChatGPTChatTab/Views/BotMessage.swift b/Core/Sources/ChatGPTChatTab/Views/BotMessage.swift index bcd9a455..88269f11 100644 --- a/Core/Sources/ChatGPTChatTab/Views/BotMessage.swift +++ b/Core/Sources/ChatGPTChatTab/Views/BotMessage.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import MarkdownUI import SharedUIComponents diff --git a/Core/Sources/ChatGPTChatTab/Views/Instructions.swift b/Core/Sources/ChatGPTChatTab/Views/Instructions.swift index dba6bfbf..35f717e0 100644 --- a/Core/Sources/ChatGPTChatTab/Views/Instructions.swift +++ b/Core/Sources/ChatGPTChatTab/Views/Instructions.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import MarkdownUI import SwiftUI diff --git a/Core/Sources/ChatGPTChatTab/Views/UserMessage.swift b/Core/Sources/ChatGPTChatTab/Views/UserMessage.swift index edac231a..e46ea619 100644 --- a/Core/Sources/ChatGPTChatTab/Views/UserMessage.swift +++ b/Core/Sources/ChatGPTChatTab/Views/UserMessage.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import MarkdownUI import SwiftUI diff --git a/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeyManagementView.swift b/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeyManagementView.swift index bc6c910e..525aaac3 100644 --- a/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeyManagementView.swift +++ b/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeyManagementView.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import SharedUIComponents import SwiftUI diff --git a/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeyManangement.swift b/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeyManangement.swift index 2756ce1e..74bd32a2 100644 --- a/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeyManangement.swift +++ b/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeyManangement.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation @Reducer diff --git a/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeyPicker.swift b/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeyPicker.swift index 57e853d4..470db822 100644 --- a/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeyPicker.swift +++ b/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeyPicker.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import SwiftUI struct APIKeyPicker: View { diff --git a/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeySelection.swift b/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeySelection.swift index 47e8b33b..14e0e277 100644 --- a/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeySelection.swift +++ b/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeySelection.swift @@ -1,6 +1,6 @@ import Foundation import SwiftUI -import ComposableArchitecture +@preconcurrency import ComposableArchitecture @Reducer struct APIKeySelection { diff --git a/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeySubmission.swift b/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeySubmission.swift index 8fe390ee..d850189a 100644 --- a/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeySubmission.swift +++ b/Core/Sources/HostApp/AccountSettings/APIKeyManagement/APIKeySubmission.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation @Reducer diff --git a/Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelEdit.swift b/Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelEdit.swift index f0c673e5..8f39baae 100644 --- a/Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelEdit.swift +++ b/Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelEdit.swift @@ -1,5 +1,5 @@ import AIModel -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Dependencies import Keychain import OpenAIService diff --git a/Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelEditView.swift b/Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelEditView.swift index d16b7556..0958d3ed 100644 --- a/Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelEditView.swift +++ b/Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelEditView.swift @@ -1,5 +1,5 @@ import AIModel -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import OpenAIService import Preferences import SwiftUI diff --git a/Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelManagement.swift b/Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelManagement.swift index 64eadd57..e2ff54b8 100644 --- a/Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelManagement.swift +++ b/Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelManagement.swift @@ -1,5 +1,5 @@ import AIModel -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Keychain import Preferences import SwiftUI diff --git a/Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelManagementView.swift b/Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelManagementView.swift index e81b4a97..0ea1cf5c 100644 --- a/Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelManagementView.swift +++ b/Core/Sources/HostApp/AccountSettings/ChatModelManagement/ChatModelManagementView.swift @@ -1,5 +1,5 @@ import AIModel -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import SwiftUI struct ChatModelManagementView: View { diff --git a/Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelEdit.swift b/Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelEdit.swift index f057be21..8a1225f7 100644 --- a/Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelEdit.swift +++ b/Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelEdit.swift @@ -1,5 +1,5 @@ import AIModel -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Dependencies import Keychain import OpenAIService diff --git a/Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelEditView.swift b/Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelEditView.swift index 46f4effd..edd86835 100644 --- a/Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelEditView.swift +++ b/Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelEditView.swift @@ -1,5 +1,5 @@ import AIModel -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Preferences import SwiftUI diff --git a/Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelManagement.swift b/Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelManagement.swift index 156f58ac..ee6d56e5 100644 --- a/Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelManagement.swift +++ b/Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelManagement.swift @@ -1,5 +1,5 @@ import AIModel -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Keychain import Preferences import SwiftUI diff --git a/Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelManagementView.swift b/Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelManagementView.swift index e251af10..3f4e06f4 100644 --- a/Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelManagementView.swift +++ b/Core/Sources/HostApp/AccountSettings/EmbeddingModelManagement/EmbeddingModelManagementView.swift @@ -1,5 +1,5 @@ import AIModel -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import SwiftUI struct EmbeddingModelManagementView: View { diff --git a/Core/Sources/HostApp/AccountSettings/SharedModelManagement/AIModelManagementVIew.swift b/Core/Sources/HostApp/AccountSettings/SharedModelManagement/AIModelManagementVIew.swift index 2c1fd2d7..f839b3e7 100644 --- a/Core/Sources/HostApp/AccountSettings/SharedModelManagement/AIModelManagementVIew.swift +++ b/Core/Sources/HostApp/AccountSettings/SharedModelManagement/AIModelManagementVIew.swift @@ -1,5 +1,5 @@ import AIModel -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import PlusFeatureFlag import SharedUIComponents import SwiftUI diff --git a/Core/Sources/HostApp/AccountSettings/SharedModelManagement/BaseURLPicker.swift b/Core/Sources/HostApp/AccountSettings/SharedModelManagement/BaseURLPicker.swift index 9456946e..4e14f5a4 100644 --- a/Core/Sources/HostApp/AccountSettings/SharedModelManagement/BaseURLPicker.swift +++ b/Core/Sources/HostApp/AccountSettings/SharedModelManagement/BaseURLPicker.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import SwiftUI struct BaseURLPicker: View { diff --git a/Core/Sources/HostApp/AccountSettings/SharedModelManagement/BaseURLSelection.swift b/Core/Sources/HostApp/AccountSettings/SharedModelManagement/BaseURLSelection.swift index 502d79a7..17c0105d 100644 --- a/Core/Sources/HostApp/AccountSettings/SharedModelManagement/BaseURLSelection.swift +++ b/Core/Sources/HostApp/AccountSettings/SharedModelManagement/BaseURLSelection.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import Preferences import SwiftUI diff --git a/Core/Sources/HostApp/AccountSettings/WebSearchView.swift b/Core/Sources/HostApp/AccountSettings/WebSearchView.swift index d34686f9..9c022b17 100644 --- a/Core/Sources/HostApp/AccountSettings/WebSearchView.swift +++ b/Core/Sources/HostApp/AccountSettings/WebSearchView.swift @@ -1,6 +1,6 @@ import AppKit import Client -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import OpenAIService import Preferences import SuggestionBasic diff --git a/Core/Sources/HostApp/CustomCommandSettings/CustomCommand.swift b/Core/Sources/HostApp/CustomCommandSettings/CustomCommand.swift index 884c58f0..7fdc56d4 100644 --- a/Core/Sources/HostApp/CustomCommandSettings/CustomCommand.swift +++ b/Core/Sources/HostApp/CustomCommandSettings/CustomCommand.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import PlusFeatureFlag import Preferences @@ -6,9 +6,9 @@ import SwiftUI import Toast @Reducer -struct CustomCommandFeature { +struct CustomCommandFeature: Sendable { @ObservableState - struct State: Equatable { + struct State: Equatable, Sendable { var editCustomCommand: EditCustomCommand.State? } diff --git a/Core/Sources/HostApp/CustomCommandSettings/CustomCommandView.swift b/Core/Sources/HostApp/CustomCommandSettings/CustomCommandView.swift index 033b9850..ab4b6161 100644 --- a/Core/Sources/HostApp/CustomCommandSettings/CustomCommandView.swift +++ b/Core/Sources/HostApp/CustomCommandSettings/CustomCommandView.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import MarkdownUI import PlusFeatureFlag import Preferences @@ -25,7 +25,7 @@ let customCommandStore = StoreOf( ) struct CustomCommandView: View { - final class Settings: ObservableObject { + final class Settings: ObservableObject, @unchecked Sendable { @AppStorage(\.customCommands) var customCommands init(customCommands: AppStorage<[CustomCommand]>? = nil) { diff --git a/Core/Sources/HostApp/CustomCommandSettings/EditCustomCommand.swift b/Core/Sources/HostApp/CustomCommandSettings/EditCustomCommand.swift index e927a9ff..0e68da42 100644 --- a/Core/Sources/HostApp/CustomCommandSettings/EditCustomCommand.swift +++ b/Core/Sources/HostApp/CustomCommandSettings/EditCustomCommand.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import Preferences import SwiftUI diff --git a/Core/Sources/HostApp/CustomCommandSettings/EditCustomCommandView.swift b/Core/Sources/HostApp/CustomCommandSettings/EditCustomCommandView.swift index e2304f8b..aa4bedaa 100644 --- a/Core/Sources/HostApp/CustomCommandSettings/EditCustomCommandView.swift +++ b/Core/Sources/HostApp/CustomCommandSettings/EditCustomCommandView.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import MarkdownUI import Preferences import SwiftUI diff --git a/Core/Sources/HostApp/General.swift b/Core/Sources/HostApp/General.swift index 96ade16c..df33625c 100644 --- a/Core/Sources/HostApp/General.swift +++ b/Core/Sources/HostApp/General.swift @@ -1,5 +1,5 @@ import Client -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import LaunchAgentManager import SwiftUI diff --git a/Core/Sources/HostApp/GeneralView.swift b/Core/Sources/HostApp/GeneralView.swift index b69c0127..796fbde2 100644 --- a/Core/Sources/HostApp/GeneralView.swift +++ b/Core/Sources/HostApp/GeneralView.swift @@ -1,5 +1,5 @@ import Client -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import KeyboardShortcuts import LaunchAgentManager import Preferences diff --git a/Core/Sources/HostApp/HostApp.swift b/Core/Sources/HostApp/HostApp.swift index f2b90303..eb47ce05 100644 --- a/Core/Sources/HostApp/HostApp.swift +++ b/Core/Sources/HostApp/HostApp.swift @@ -1,5 +1,5 @@ import Client -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import KeyboardShortcuts diff --git a/Core/Sources/HostApp/ServiceView.swift b/Core/Sources/HostApp/ServiceView.swift index bf81eb51..1a4e953d 100644 --- a/Core/Sources/HostApp/ServiceView.swift +++ b/Core/Sources/HostApp/ServiceView.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import SwiftUI struct ServiceView: View { diff --git a/Core/Sources/HostApp/TabContainer.swift b/Core/Sources/HostApp/TabContainer.swift index 8616b5af..be159d9d 100644 --- a/Core/Sources/HostApp/TabContainer.swift +++ b/Core/Sources/HostApp/TabContainer.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Dependencies import Foundation import LaunchAgentManager diff --git a/Core/Sources/Service/GUI/GraphicalUserInterfaceController.swift b/Core/Sources/Service/GUI/GraphicalUserInterfaceController.swift index dfbd719a..51749669 100644 --- a/Core/Sources/Service/GUI/GraphicalUserInterfaceController.swift +++ b/Core/Sources/Service/GUI/GraphicalUserInterfaceController.swift @@ -4,7 +4,7 @@ import AppKit import BuiltinExtension import ChatGPTChatTab import ChatTab -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Dependencies import Logger import Preferences diff --git a/Core/Sources/Service/GUI/WidgetDataSource.swift b/Core/Sources/Service/GUI/WidgetDataSource.swift index ae1b6371..9bfdfdbb 100644 --- a/Core/Sources/Service/GUI/WidgetDataSource.swift +++ b/Core/Sources/Service/GUI/WidgetDataSource.swift @@ -2,7 +2,7 @@ import ActiveApplicationMonitor import AppActivator import AppKit import ChatService -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import GitHubCopilotService import OpenAIService diff --git a/Core/Sources/Service/SuggestionCommandHandler/PseudoCommandHandler.swift b/Core/Sources/Service/SuggestionCommandHandler/PseudoCommandHandler.swift index c1d38d78..7bf76f3a 100644 --- a/Core/Sources/Service/SuggestionCommandHandler/PseudoCommandHandler.swift +++ b/Core/Sources/Service/SuggestionCommandHandler/PseudoCommandHandler.swift @@ -3,7 +3,7 @@ import AppKit import BuiltinExtension import CodeiumService import CommandHandler -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import enum CopilotForXcodeKit.SuggestionServiceError import Dependencies import Logger diff --git a/Core/Sources/Service/SuggestionCommandHandler/WindowBaseCommandHandler.swift b/Core/Sources/Service/SuggestionCommandHandler/WindowBaseCommandHandler.swift index 53b0c833..b5200cea 100644 --- a/Core/Sources/Service/SuggestionCommandHandler/WindowBaseCommandHandler.swift +++ b/Core/Sources/Service/SuggestionCommandHandler/WindowBaseCommandHandler.swift @@ -1,6 +1,6 @@ import AppKit import ChatService -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import CustomCommandTemplateProcessor import Foundation import GitHubCopilotService @@ -471,7 +471,7 @@ extension WindowBaseCommandHandler { _ = await MainActor.run { store.send(.promptToCodeGroup(.activateOrCreatePromptToCode(.init( - promptToCodeState: Shared(.init( + promptToCodeState: Shared(value: .init( source: .init( language: codeLanguage, documentURL: fileURL, diff --git a/Core/Sources/SuggestionWidget/ChatPanelWindow.swift b/Core/Sources/SuggestionWidget/ChatPanelWindow.swift index 022b424c..54553bf3 100644 --- a/Core/Sources/SuggestionWidget/ChatPanelWindow.swift +++ b/Core/Sources/SuggestionWidget/ChatPanelWindow.swift @@ -1,6 +1,6 @@ import AppKit import ChatTab -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import SwiftUI diff --git a/Core/Sources/SuggestionWidget/ChatWindowView.swift b/Core/Sources/SuggestionWidget/ChatWindowView.swift index 58c6f4d7..5a61aa47 100644 --- a/Core/Sources/SuggestionWidget/ChatWindowView.swift +++ b/Core/Sources/SuggestionWidget/ChatWindowView.swift @@ -2,7 +2,7 @@ import ActiveApplicationMonitor import AppKit import ChatGPTChatTab import ChatTab -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import SwiftUI import SharedUIComponents diff --git a/Core/Sources/SuggestionWidget/FeatureReducers/ChatPanel.swift b/Core/Sources/SuggestionWidget/FeatureReducers/ChatPanel.swift index 28bf5bfc..a12d86de 100644 --- a/Core/Sources/SuggestionWidget/FeatureReducers/ChatPanel.swift +++ b/Core/Sources/SuggestionWidget/FeatureReducers/ChatPanel.swift @@ -1,15 +1,15 @@ import ActiveApplicationMonitor import AppKit -import ChatTab -import ComposableArchitecture +@preconcurrency import ChatTab +@preconcurrency import ComposableArchitecture import SwiftUI -public enum ChatTabBuilderCollection: Equatable { +public enum ChatTabBuilderCollection: Equatable, Sendable { case folder(title: String, kinds: [ChatTabKind]) case kind(ChatTabKind) } -public struct ChatTabKind: Equatable { +public struct ChatTabKind: Equatable, Sendable { public var builder: any ChatTabBuilder var title: String { builder.title } @@ -23,8 +23,8 @@ public struct ChatTabKind: Equatable { } @Reducer -public struct ChatPanel { - public struct ChatTabGroup: Equatable { +public struct ChatPanel: Sendable { + public struct ChatTabGroup: Equatable, Sendable { public var tabInfo: IdentifiedArray public var tabCollection: [ChatTabBuilderCollection] public var selectedTabId: String? @@ -46,7 +46,7 @@ public struct ChatPanel { } @ObservableState - public struct State: Equatable { + public struct State: Equatable, Sendable { public var chatTabGroup = ChatTabGroup() var colorScheme: ColorScheme = .light public internal(set) var isPanelDisplayed = false diff --git a/Core/Sources/SuggestionWidget/FeatureReducers/CircularWidget.swift b/Core/Sources/SuggestionWidget/FeatureReducers/CircularWidget.swift index 8b173c30..154b787e 100644 --- a/Core/Sources/SuggestionWidget/FeatureReducers/CircularWidget.swift +++ b/Core/Sources/SuggestionWidget/FeatureReducers/CircularWidget.swift @@ -1,17 +1,17 @@ import ActiveApplicationMonitor -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Preferences import SuggestionBasic import SwiftUI @Reducer -public struct CircularWidget { - public struct IsProcessingCounter: Equatable { +public struct CircularWidget: Sendable { + public struct IsProcessingCounter: Equatable, Sendable { var expirationDate: TimeInterval } @ObservableState - public struct State: Equatable { + public struct State: Equatable, Sendable { var isProcessingCounters = [IsProcessingCounter]() var isProcessing: Bool var isDisplayingContent: Bool diff --git a/Core/Sources/SuggestionWidget/FeatureReducers/PromptToCodeGroup.swift b/Core/Sources/SuggestionWidget/FeatureReducers/PromptToCodeGroup.swift index d844b336..23ae8c36 100644 --- a/Core/Sources/SuggestionWidget/FeatureReducers/PromptToCodeGroup.swift +++ b/Core/Sources/SuggestionWidget/FeatureReducers/PromptToCodeGroup.swift @@ -1,13 +1,13 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import PromptToCodeService import SuggestionBasic import XcodeInspector @Reducer -public struct PromptToCodeGroup { +public struct PromptToCodeGroup: Sendable { @ObservableState - public struct State { + public struct State: Sendable { public var promptToCodes: IdentifiedArrayOf = [] public var activeDocumentURL: PromptToCodePanel.State.ID? = XcodeInspector.shared .realtimeActiveDocumentURL @@ -84,9 +84,11 @@ public struct PromptToCodeGroup { ) case let .updatePromptToCodeRange(id, snippetId, range): - if let p = state.promptToCodes[id: id], p.promptToCodeState.isAttachedToTarget { - state.promptToCodes[id: id]?.promptToCodeState.snippets[id: snippetId]? - .attachedRange = range + if var panel = state.promptToCodes[id: id], panel.promptToCodeState.isAttachedToTarget { + panel.$promptToCodeState.withLock { sharedState in + sharedState.snippets[id: snippetId]?.attachedRange = range + } + state.promptToCodes[id: id] = panel } return .none @@ -183,4 +185,3 @@ public struct PromptToCodeGroup { } } } - diff --git a/Core/Sources/SuggestionWidget/FeatureReducers/PromptToCodePanel.swift b/Core/Sources/SuggestionWidget/FeatureReducers/PromptToCodePanel.swift index cb68435f..d6bf0bb5 100644 --- a/Core/Sources/SuggestionWidget/FeatureReducers/PromptToCodePanel.swift +++ b/Core/Sources/SuggestionWidget/FeatureReducers/PromptToCodePanel.swift @@ -1,6 +1,6 @@ import AppKit import ChatBasic -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import CustomAsyncAlgorithms import Dependencies import Foundation @@ -12,14 +12,14 @@ import SuggestionBasic import XcodeInspector @Reducer -public struct PromptToCodePanel { +public struct PromptToCodePanel: Sendable { @ObservableState - public struct State: Identifiable { - public enum FocusField: Equatable { + public struct State: Identifiable, Sendable { + public enum FocusField: Equatable, Sendable { case textField } - public enum ClickedButton: Equatable { + public enum ClickedButton: Equatable, Sendable { case accept case acceptAndContinue } @@ -55,9 +55,11 @@ public struct PromptToCodePanel { ) } set { - promptToCodeState.snippets = IdentifiedArrayOf( - uniqueElements: newValue.map(\.snippet) - ) + $promptToCodeState.withLock { sharedState in + sharedState.snippets = IdentifiedArrayOf( + uniqueElements: newValue.map(\.snippet) + ) + } } } @@ -123,18 +125,22 @@ public struct PromptToCodePanel { return .none case .selectionRangeToggleTapped: - state.promptToCodeState.isAttachedToTarget.toggle() + state.$promptToCodeState.withLock { sharedState in + sharedState.isAttachedToTarget.toggle() + } return .none case .modifyCodeButtonTapped: guard !state.promptToCodeState.isGenerating else { return .none } let copiedState = state let contextInputController = state.contextInputController - state.promptToCodeState.isGenerating = true - state.promptToCodeState.pushHistory(instruction: .init( - attributedString: contextInputController.instruction - )) - state.promptToCodeState.references = [] + state.$promptToCodeState.withLock { sharedState in + sharedState.isGenerating = true + sharedState.pushHistory(instruction: .init( + attributedString: contextInputController.instruction + )) + sharedState.references = [] + } let snippets = state.promptToCodeState.snippets return .run { send in @@ -239,20 +245,27 @@ public struct PromptToCodePanel { }.cancellable(id: CancellationKey.modifyCode(state.id), cancelInFlight: true) case .revertButtonTapped: - if let instruction = state.promptToCodeState.popHistory() { + let instruction = state.$promptToCodeState.withLock { sharedState in + sharedState.popHistory() + } + if let instruction { state.contextInputController.instruction = instruction } return .none case .stopRespondingButtonTapped: - state.promptToCodeState.isGenerating = false - state.promptToCodeState.status = [] + state.$promptToCodeState.withLock { sharedState in + sharedState.isGenerating = false + sharedState.status = [] + } return .cancel(id: CancellationKey.modifyCode(state.id)) case .modifyCodeFinished: state.contextInputController.instruction = .init("") - state.promptToCodeState.isGenerating = false - state.promptToCodeState.status = [] + state.$promptToCodeState.withLock { sharedState in + sharedState.isGenerating = false + sharedState.status = [] + } if state.promptToCodeState.snippets.allSatisfy({ snippet in snippet.modifiedCode.isEmpty && snippet.description.isEmpty && snippet @@ -266,7 +279,9 @@ public struct PromptToCodePanel { return .none case .modifyCodeCancelled: - state.promptToCodeState.isGenerating = false + state.$promptToCodeState.withLock { sharedState in + sharedState.isGenerating = false + } return .none case .cancelButtonTapped: @@ -294,11 +309,15 @@ public struct PromptToCodePanel { } case let .statusUpdated(status): - state.promptToCodeState.status = status + state.$promptToCodeState.withLock { sharedState in + sharedState.status = status + } return .none case let .referencesUpdated(references): - state.promptToCodeState.references = references + state.$promptToCodeState.withLock { sharedState in + sharedState.references = references + } return .none } } diff --git a/Core/Sources/SuggestionWidget/FeatureReducers/SharedPanel.swift b/Core/Sources/SuggestionWidget/FeatureReducers/SharedPanel.swift index 9f38210e..c16f1429 100644 --- a/Core/Sources/SuggestionWidget/FeatureReducers/SharedPanel.swift +++ b/Core/Sources/SuggestionWidget/FeatureReducers/SharedPanel.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Preferences import SwiftUI diff --git a/Core/Sources/SuggestionWidget/FeatureReducers/SuggestionPanel.swift b/Core/Sources/SuggestionWidget/FeatureReducers/SuggestionPanel.swift index 7baef1df..24972cc0 100644 --- a/Core/Sources/SuggestionWidget/FeatureReducers/SuggestionPanel.swift +++ b/Core/Sources/SuggestionWidget/FeatureReducers/SuggestionPanel.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import SwiftUI diff --git a/Core/Sources/SuggestionWidget/FeatureReducers/ToastPanel.swift b/Core/Sources/SuggestionWidget/FeatureReducers/ToastPanel.swift index 14ac9d4b..3b52706d 100644 --- a/Core/Sources/SuggestionWidget/FeatureReducers/ToastPanel.swift +++ b/Core/Sources/SuggestionWidget/FeatureReducers/ToastPanel.swift @@ -1,12 +1,12 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Preferences import SwiftUI -import Toast +@preconcurrency import Toast @Reducer -public struct ToastPanel { +public struct ToastPanel: Sendable { @ObservableState - public struct State: Equatable { + public struct State: Equatable, Sendable { var toast: Toast.State = .init() var colorScheme: ColorScheme = .light var alignTopToAnchor = false diff --git a/Core/Sources/SuggestionWidget/FeatureReducers/Widget.swift b/Core/Sources/SuggestionWidget/FeatureReducers/Widget.swift index 493628fc..fb4d921a 100644 --- a/Core/Sources/SuggestionWidget/FeatureReducers/Widget.swift +++ b/Core/Sources/SuggestionWidget/FeatureReducers/Widget.swift @@ -1,7 +1,7 @@ import ActiveApplicationMonitor import AppActivator import AsyncAlgorithms -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import Logger import Preferences @@ -10,19 +10,19 @@ import Toast import XcodeInspector @Reducer -public struct Widget { - public struct WindowState: Equatable { +public struct Widget: Sendable { + public struct WindowState: Equatable, Sendable { var alphaValue: Double = 0 var frame: CGRect = .zero } - public enum WindowCanBecomeKey: Equatable { + public enum WindowCanBecomeKey: Equatable, Sendable { case sharedPanel case chatPanel } @ObservableState - public struct State { + public struct State: Sendable { var focusingDocumentURL: URL? public var colorScheme: ColorScheme = .light @@ -38,7 +38,7 @@ public struct Widget { // MARK: CircularWidget - public struct CircularWidgetState: Equatable { + public struct CircularWidgetState: Equatable, Sendable { var isProcessingCounters = [CircularWidget.IsProcessingCounter]() var isProcessing: Bool = false } diff --git a/Core/Sources/SuggestionWidget/FeatureReducers/WidgetPanel.swift b/Core/Sources/SuggestionWidget/FeatureReducers/WidgetPanel.swift index 7d911f75..8f413931 100644 --- a/Core/Sources/SuggestionWidget/FeatureReducers/WidgetPanel.swift +++ b/Core/Sources/SuggestionWidget/FeatureReducers/WidgetPanel.swift @@ -1,11 +1,11 @@ import AppKit -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation @Reducer -public struct WidgetPanel { +public struct WidgetPanel: Sendable { @ObservableState - public struct State { + public struct State: Sendable { public var content: SharedPanel.Content { get { sharedPanelState.content } set { diff --git a/Core/Sources/SuggestionWidget/ModuleDependency.swift b/Core/Sources/SuggestionWidget/ModuleDependency.swift index 5ca16f76..59ea568c 100644 --- a/Core/Sources/SuggestionWidget/ModuleDependency.swift +++ b/Core/Sources/SuggestionWidget/ModuleDependency.swift @@ -1,7 +1,7 @@ import ActiveApplicationMonitor import AppKit import ChatTab -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Dependencies import Foundation import Preferences diff --git a/Core/Sources/SuggestionWidget/PromptToCodePanelGroupView.swift b/Core/Sources/SuggestionWidget/PromptToCodePanelGroupView.swift index 739fe6b7..65724842 100644 --- a/Core/Sources/SuggestionWidget/PromptToCodePanelGroupView.swift +++ b/Core/Sources/SuggestionWidget/PromptToCodePanelGroupView.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import SwiftUI diff --git a/Core/Sources/SuggestionWidget/SharedPanelView.swift b/Core/Sources/SuggestionWidget/SharedPanelView.swift index a00b2fee..4bf74e58 100644 --- a/Core/Sources/SuggestionWidget/SharedPanelView.swift +++ b/Core/Sources/SuggestionWidget/SharedPanelView.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Preferences import SwiftUI diff --git a/Core/Sources/SuggestionWidget/SuggestionPanelContent/PromptToCodePanelView.swift b/Core/Sources/SuggestionWidget/SuggestionPanelContent/PromptToCodePanelView.swift index ef3b560c..e1c9d747 100644 --- a/Core/Sources/SuggestionWidget/SuggestionPanelContent/PromptToCodePanelView.swift +++ b/Core/Sources/SuggestionWidget/SuggestionPanelContent/PromptToCodePanelView.swift @@ -1,6 +1,6 @@ import ChatBasic import Cocoa -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import MarkdownUI import ModificationBasic import PromptToCodeCustomization @@ -1082,7 +1082,7 @@ extension PromptToCodePanelView { #Preview("Multiple Snippets") { PromptToCodePanelView(store: .init(initialState: .init( - promptToCodeState: Shared(ModificationState( + promptToCodeState: Shared(value: ModificationState( source: .init( language: CodeLanguage.builtIn(.swift), documentURL: URL( @@ -1164,7 +1164,7 @@ extension PromptToCodePanelView { #Preview("Detached With Long File Name") { PromptToCodePanelView(store: .init(initialState: .init( - promptToCodeState: Shared(ModificationState( + promptToCodeState: Shared(value: ModificationState( source: .init( language: CodeLanguage.builtIn(.swift), documentURL: URL( @@ -1219,7 +1219,7 @@ extension PromptToCodePanelView { #Preview("Generating") { PromptToCodePanelView(store: .init(initialState: .init( - promptToCodeState: Shared(ModificationState( + promptToCodeState: Shared(value: ModificationState( source: .init( language: CodeLanguage.builtIn(.swift), documentURL: URL( diff --git a/Core/Sources/SuggestionWidget/SuggestionPanelContent/ToastPanelView.swift b/Core/Sources/SuggestionWidget/SuggestionPanelContent/ToastPanelView.swift index c7aca342..4bca750a 100644 --- a/Core/Sources/SuggestionWidget/SuggestionPanelContent/ToastPanelView.swift +++ b/Core/Sources/SuggestionWidget/SuggestionPanelContent/ToastPanelView.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Dependencies import Foundation import SwiftUI diff --git a/Core/Sources/SuggestionWidget/SuggestionPanelView.swift b/Core/Sources/SuggestionWidget/SuggestionPanelView.swift index b25eb0e9..cdd15e4b 100644 --- a/Core/Sources/SuggestionWidget/SuggestionPanelView.swift +++ b/Core/Sources/SuggestionWidget/SuggestionPanelView.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import SwiftUI diff --git a/Core/Sources/SuggestionWidget/SuggestionWidgetController.swift b/Core/Sources/SuggestionWidget/SuggestionWidgetController.swift index 09a0ae7a..46436998 100644 --- a/Core/Sources/SuggestionWidget/SuggestionWidgetController.swift +++ b/Core/Sources/SuggestionWidget/SuggestionWidgetController.swift @@ -3,7 +3,7 @@ import AppKit import AsyncAlgorithms import ChatTab import Combine -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Preferences import SwiftUI import UserDefaultsObserver diff --git a/Core/Sources/SuggestionWidget/WidgetView.swift b/Core/Sources/SuggestionWidget/WidgetView.swift index f07816bf..c4458c6c 100644 --- a/Core/Sources/SuggestionWidget/WidgetView.swift +++ b/Core/Sources/SuggestionWidget/WidgetView.swift @@ -1,5 +1,5 @@ import ActiveApplicationMonitor -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Preferences import SharedUIComponents import SuggestionBasic diff --git a/Core/Sources/SuggestionWidget/WidgetWindowsController.swift b/Core/Sources/SuggestionWidget/WidgetWindowsController.swift index 2f70e0e3..1367a1ba 100644 --- a/Core/Sources/SuggestionWidget/WidgetWindowsController.swift +++ b/Core/Sources/SuggestionWidget/WidgetWindowsController.swift @@ -1,7 +1,7 @@ import AppKit import AsyncAlgorithms import ChatTab -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Dependencies import Foundation import SharedUIComponents diff --git a/Tool/Package.swift b/Tool/Package.swift index f303e44c..cbb261b1 100644 --- a/Tool/Package.swift +++ b/Tool/Package.swift @@ -5,7 +5,7 @@ import PackageDescription let package = Package( name: "Tool", - platforms: [.macOS(.v12)], + platforms: [.macOS(.v13)], products: [ .library(name: "XPCShared", targets: ["XPCShared"]), .library(name: "Terminal", targets: ["Terminal"]), @@ -73,7 +73,7 @@ let package = Package( .package(url: "https://github.com/intitni/Highlightr", branch: "master"), .package( url: "https://github.com/pointfreeco/swift-composable-architecture", - exact: "1.16.1" + exact: "1.25.5" ), .package(url: "https://github.com/apple/swift-syntax.git", from: "600.0.0"), .package(url: "https://github.com/GottaGetSwifty/CodableWrappers", from: "2.0.7"), diff --git a/Tool/Sources/ChatTab/ChatTab.swift b/Tool/Sources/ChatTab/ChatTab.swift index e64e1728..dd0e7dac 100644 --- a/Tool/Sources/ChatTab/ChatTab.swift +++ b/Tool/Sources/ChatTab/ChatTab.swift @@ -1,11 +1,11 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Preferences import Foundation import SwiftUI /// The information of a tab. @ObservableState -public struct ChatTabInfo: Identifiable, Equatable { +public struct ChatTabInfo: Identifiable, Equatable, Sendable { public var id: String public var title: String public var focusTrigger: Int = 0 diff --git a/Tool/Sources/ChatTab/ChatTabItem.swift b/Tool/Sources/ChatTab/ChatTabItem.swift index abf7aaa2..bdcd4122 100644 --- a/Tool/Sources/ChatTab/ChatTabItem.swift +++ b/Tool/Sources/ChatTab/ChatTabItem.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation public struct AnyChatTabBuilder: Equatable { diff --git a/Tool/Sources/ChatTab/ChatTabPool.swift b/Tool/Sources/ChatTab/ChatTabPool.swift index 5f5b1c2f..781b34f5 100644 --- a/Tool/Sources/ChatTab/ChatTabPool.swift +++ b/Tool/Sources/ChatTab/ChatTabPool.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Dependencies import Foundation import SwiftUI diff --git a/Tool/Sources/CodeiumService/ChatTab/CodeiumChatBrowser.swift b/Tool/Sources/CodeiumService/ChatTab/CodeiumChatBrowser.swift index 5d7fab76..07dd892c 100644 --- a/Tool/Sources/CodeiumService/ChatTab/CodeiumChatBrowser.swift +++ b/Tool/Sources/CodeiumService/ChatTab/CodeiumChatBrowser.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import Preferences import WebKit diff --git a/Tool/Sources/CodeiumService/ChatTab/CodeiumChatTab.swift b/Tool/Sources/CodeiumService/ChatTab/CodeiumChatTab.swift index 1a889dfe..70c2e46a 100644 --- a/Tool/Sources/CodeiumService/ChatTab/CodeiumChatTab.swift +++ b/Tool/Sources/CodeiumService/ChatTab/CodeiumChatTab.swift @@ -1,7 +1,7 @@ import AppKit import ChatTab import Combine -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Logger import Preferences import SwiftUI diff --git a/Tool/Sources/CodeiumService/ChatTab/CodeiumChatTabItem.swift b/Tool/Sources/CodeiumService/ChatTab/CodeiumChatTabItem.swift index 1724b23f..57836598 100644 --- a/Tool/Sources/CodeiumService/ChatTab/CodeiumChatTabItem.swift +++ b/Tool/Sources/CodeiumService/ChatTab/CodeiumChatTabItem.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import Preferences import SwiftUI diff --git a/Tool/Sources/CodeiumService/ChatTab/CodeiumChatView.swift b/Tool/Sources/CodeiumService/ChatTab/CodeiumChatView.swift index a7b4ad9e..e4c784c5 100644 --- a/Tool/Sources/CodeiumService/ChatTab/CodeiumChatView.swift +++ b/Tool/Sources/CodeiumService/ChatTab/CodeiumChatView.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import SharedUIComponents import SwiftUI diff --git a/Tool/Sources/CodeiumService/ChatTab/CodeiumWebView.swift b/Tool/Sources/CodeiumService/ChatTab/CodeiumWebView.swift index a3729029..c2b516af 100644 --- a/Tool/Sources/CodeiumService/ChatTab/CodeiumWebView.swift +++ b/Tool/Sources/CodeiumService/ChatTab/CodeiumWebView.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import Logger import Preferences diff --git a/Tool/Sources/CommandHandler/CommandHandler.swift b/Tool/Sources/CommandHandler/CommandHandler.swift index f5067668..e0e77590 100644 --- a/Tool/Sources/CommandHandler/CommandHandler.swift +++ b/Tool/Sources/CommandHandler/CommandHandler.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Dependencies import Foundation import ModificationBasic diff --git a/Tool/Sources/ModificationBasic/ModificationAgent.swift b/Tool/Sources/ModificationBasic/ModificationAgent.swift index a29224af..1e3d5208 100644 --- a/Tool/Sources/ModificationBasic/ModificationAgent.swift +++ b/Tool/Sources/ModificationBasic/ModificationAgent.swift @@ -1,5 +1,5 @@ import ChatBasic -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Foundation import SuggestionBasic diff --git a/Tool/Sources/PromptToCodeCustomization/PromptToCodeCustomization.swift b/Tool/Sources/PromptToCodeCustomization/PromptToCodeCustomization.swift index a952311b..00080aa2 100644 --- a/Tool/Sources/PromptToCodeCustomization/PromptToCodeCustomization.swift +++ b/Tool/Sources/PromptToCodeCustomization/PromptToCodeCustomization.swift @@ -1,5 +1,5 @@ import ChatBasic -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Dependencies import Foundation import ModificationBasic diff --git a/Tool/Sources/Toast/Toast.swift b/Tool/Sources/Toast/Toast.swift index adcebfe1..fc287f77 100644 --- a/Tool/Sources/Toast/Toast.swift +++ b/Tool/Sources/Toast/Toast.swift @@ -1,4 +1,4 @@ -import ComposableArchitecture +@preconcurrency import ComposableArchitecture import Dependencies import Foundation import SwiftUI diff --git a/Tool/Sources/WebScrapper/WebScrapper.swift b/Tool/Sources/WebScrapper/WebScrapper.swift index e7c45725..e980597e 100644 --- a/Tool/Sources/WebScrapper/WebScrapper.swift +++ b/Tool/Sources/WebScrapper/WebScrapper.swift @@ -111,10 +111,10 @@ public final class WebScrapper { navigationError = nil var retryCount = 0 _ = webView.load(.init(url: url)) - while !webViewDidFinishLoading { + let deadline = Date().addingTimeInterval(timeout) + while !webViewDidFinishLoading, Date() < deadline { try await Task.sleep(nanoseconds: 10_000_000) } - let deadline = Date().addingTimeInterval(timeout) if let navigationError { throw navigationError } while retryCount < retryLimit, Date() < deadline { if let html = try? await getHTML(), !html.isEmpty, diff --git a/Version.xcconfig b/Version.xcconfig index 9fbbef26..1b3350ea 100644 --- a/Version.xcconfig +++ b/Version.xcconfig @@ -1,4 +1,4 @@ APP_VERSION = 0.38.0 -APP_BUILD = 504 +APP_BUILD = 507 RELEASE_CHANNEL = RELEASE_NUMBER = 1