|
1 | 1 | import AppKit |
2 | 2 | import ChatGPTChatTab |
3 | | -import ChatService |
4 | 3 | import ChatTab |
5 | 4 | import ComposableArchitecture |
6 | 5 | import Dependencies |
7 | 6 | import Environment |
8 | 7 | import Preferences |
9 | | -import PromptToCodeService |
10 | | -import SuggestionModel |
11 | 8 | import SuggestionWidget |
12 | | -import XcodeInspector |
13 | 9 |
|
14 | 10 | struct GUI: ReducerProtocol { |
15 | 11 | struct State: Equatable { |
@@ -41,7 +37,13 @@ struct GUI: ReducerProtocol { |
41 | 37 | Reduce { _, action in |
42 | 38 | switch action { |
43 | 39 | case let .createNewTapButtonClicked(kind): |
44 | | - guard let builder = kind?.builder, builder.buildable else { return .none } |
| 40 | + guard let builder = kind?.builder else { |
| 41 | + let chatTap = ChatGPTChatTab() |
| 42 | + return .run { send in |
| 43 | + await send(.appendAndSelectTab(chatTap)) |
| 44 | + } |
| 45 | + } |
| 46 | + guard builder.buildable else { return .none } |
45 | 47 | let chatTap = builder.build() |
46 | 48 | return .run { send in |
47 | 49 | await send(.appendAndSelectTab(chatTap)) |
@@ -166,113 +168,3 @@ public final class GraphicalUserInterfaceController { |
166 | 168 | } |
167 | 169 | } |
168 | 170 |
|
169 | | -#if canImport(ProChatTabs) |
170 | | -import ProChatTabs |
171 | | - |
172 | | -enum ChatTabFactory { |
173 | | - static var chatTabBuilderCollection: [ChatTabBuilderCollection] { |
174 | | - func folderIfNeeded( |
175 | | - _ builders: [any ChatTabBuilder], |
176 | | - title: String |
177 | | - ) -> ChatTabBuilderCollection? { |
178 | | - if builders.count > 1 { |
179 | | - return .folder(title: title, kinds: builders.map(ChatTabKind.init)) |
180 | | - } |
181 | | - if let first = builders.first { return .kind(ChatTabKind(first)) } |
182 | | - return nil |
183 | | - } |
184 | | - |
185 | | - let collection = [ |
186 | | - folderIfNeeded(ChatGPTChatTab.chatBuilders(), title: ChatGPTChatTab.name), |
187 | | - folderIfNeeded(BrowserChatTab.chatBuilders(externalDependency: .init( |
188 | | - getEditorContent: { |
189 | | - guard let editor = XcodeInspector.shared.focusedEditor else { |
190 | | - return .init(selectedText: "", language: "", fileContent: "") |
191 | | - } |
192 | | - let content = editor.content |
193 | | - return .init( |
194 | | - selectedText: content.selectedContent, |
195 | | - language: languageIdentifierFromFileURL( |
196 | | - XcodeInspector.shared |
197 | | - .activeDocumentURL |
198 | | - ) |
199 | | - .rawValue, |
200 | | - fileContent: content.content |
201 | | - ) |
202 | | - }, |
203 | | - handleCustomCommand: { command, prompt in |
204 | | - switch command.feature { |
205 | | - case let .chatWithSelection(extraSystemPrompt, _, useExtraSystemPrompt): |
206 | | - let service = ChatService() |
207 | | - return try await service.processMessage( |
208 | | - systemPrompt: nil, |
209 | | - extraSystemPrompt: (useExtraSystemPrompt ?? false) ? extraSystemPrompt : |
210 | | - nil, |
211 | | - prompt: prompt |
212 | | - ) |
213 | | - case let .customChat(systemPrompt, _): |
214 | | - let service = ChatService() |
215 | | - return try await service.processMessage( |
216 | | - systemPrompt: systemPrompt, |
217 | | - extraSystemPrompt: nil, |
218 | | - prompt: prompt |
219 | | - ) |
220 | | - case let .singleRoundDialog( |
221 | | - systemPrompt, |
222 | | - overwriteSystemPrompt, |
223 | | - _, |
224 | | - _ |
225 | | - ): |
226 | | - let service = ChatService() |
227 | | - return try await service.handleSingleRoundDialogCommand( |
228 | | - systemPrompt: systemPrompt, |
229 | | - overwriteSystemPrompt: overwriteSystemPrompt ?? false, |
230 | | - prompt: prompt |
231 | | - ) |
232 | | - case let .promptToCode(extraSystemPrompt, instruction, _, _): |
233 | | - let service = PromptToCodeService( |
234 | | - code: prompt, |
235 | | - selectionRange: .outOfScope, |
236 | | - language: .plaintext, |
237 | | - identSize: 4, |
238 | | - usesTabsForIndentation: true, |
239 | | - projectRootURL: .init(fileURLWithPath: "/"), |
240 | | - fileURL: .init(fileURLWithPath: "/"), |
241 | | - allCode: prompt, |
242 | | - extraSystemPrompt: extraSystemPrompt, |
243 | | - generateDescriptionRequirement: false |
244 | | - ) |
245 | | - try await service.modifyCode(prompt: instruction ?? "Modify content.") |
246 | | - return service.code |
247 | | - } |
248 | | - } |
249 | | - )), title: BrowserChatTab.name), |
250 | | - ].compactMap { $0 } |
251 | | - |
252 | | - return collection |
253 | | - } |
254 | | -} |
255 | | - |
256 | | -#else |
257 | | - |
258 | | -enum ChatTabFactory { |
259 | | - static var chatTabBuilderCollection: [ChatTabBuilderCollection] { |
260 | | - func folderIfNeeded( |
261 | | - _ builders: [any ChatTabBuilder], |
262 | | - title: String |
263 | | - ) -> ChatTabBuilderCollection? { |
264 | | - if builders.count > 1 { |
265 | | - return .folder(title: title, kinds: builders.map(ChatTabKind.init)) |
266 | | - } |
267 | | - if let first = builders.first { return .kind(ChatTabKind(first)) } |
268 | | - return nil |
269 | | - } |
270 | | - |
271 | | - return [ |
272 | | - folderIfNeeded(ChatGPTChatTab.chatBuilders(), title: ChatGPTChatTab.name), |
273 | | - ].compactMap { $0 } |
274 | | - } |
275 | | -} |
276 | | - |
277 | | -#endif |
278 | | - |
0 commit comments