@@ -8,26 +8,20 @@ import SuggestionBasic
88import SuggestionWidget
99import XcodeInspector
1010
11- #if canImport(ProChatTabs)
12- import ProChatTabs
13- #endif
14-
1511enum ChatTabFactory {
1612 static func chatTabBuilderCollection( ) -> [ ChatTabBuilderCollection ] {
17- #if canImport(ProChatTabs)
18- _ = lazyLoadDependency
19- let collection = [
20- folderIfNeeded ( ChatGPTChatTab . chatBuilders ( ) , title: ChatGPTChatTab . name) ,
21- folderIfNeeded ( BrowserChatTab . chatBuilders ( ) , title: BrowserChatTab . name) ,
22- folderIfNeeded ( TerminalChatTab . chatBuilders ( ) , title: TerminalChatTab . name) ,
23- ]
24- #else
25- let collection = [
26- folderIfNeeded ( ChatGPTChatTab . chatBuilders ( ) , title: ChatGPTChatTab . name) ,
27- ]
28- #endif
29-
30- return collection. compactMap { $0 } + chatTabsFromExtensions( )
13+ let chatGPTChatTab = folderIfNeeded (
14+ ChatGPTChatTab . chatBuilders ( ) ,
15+ title: ChatGPTChatTab . name
16+ )
17+
18+ let ( defaultChatTab, othersChatTabs) = chatTabsFromExtensions ( )
19+
20+ if let defaultChatTab {
21+ return [ defaultChatTab] + othersChatTabs + [ chatGPTChatTab] . compactMap ( \. self)
22+ } else {
23+ return [ chatGPTChatTab ] . compactMap ( \. self) + othersChatTabs
24+ }
3125 }
3226
3327 private static func folderIfNeeded(
@@ -41,70 +35,85 @@ enum ChatTabFactory {
4135 return nil
4236 }
4337
44- static func chatTabsFromExtensions( ) -> [ ChatTabBuilderCollection ] {
38+ static func chatTabsFromExtensions( )
39+ -> ( default: ChatTabBuilderCollection ? , others: [ ChatTabBuilderCollection ] )
40+ {
4541 let extensions = BuiltinExtensionManager . shared. extensions
4642 let chatTabTypes = extensions. flatMap ( \. chatTabTypes)
47- return chatTabTypes. compactMap { folderIfNeeded ( $0. chatBuilders ( ) , title: $0. name) }
43+ var defaultChatTab : ChatTabBuilderCollection ?
44+ var otherChatTabs = [ ChatTabBuilderCollection] ( )
45+ for chatTabType in chatTabTypes {
46+ if chatTabType. isDefaultChatTabReplacement {
47+ defaultChatTab = folderIfNeeded ( chatTabType. chatBuilders ( ) , title: chatTabType. name)
48+ } else if let tab = folderIfNeeded (
49+ chatTabType. chatBuilders ( ) ,
50+ title: chatTabType. name
51+ ) {
52+ otherChatTabs. append ( tab)
53+ }
54+ }
55+ return ( defaultChatTab, otherChatTabs)
4856 }
4957}
5058
51- #if canImport(ProChatTabs)
52- let lazyLoadDependency : ( ) = {
53- BrowserChatTab . externalDependency = . init(
54- handleCustomCommand: { command, prompt in
55- switch command. feature {
56- case let . chatWithSelection( extraSystemPrompt, _, useExtraSystemPrompt) :
57- let service = ChatService ( )
58- return try await service. processMessage (
59- systemPrompt: nil ,
60- extraSystemPrompt: ( useExtraSystemPrompt ?? false ) ? extraSystemPrompt :
61- nil ,
62- prompt: prompt
63- )
64- case let . customChat( systemPrompt, _) :
65- let service = ChatService ( )
66- return try await service. processMessage (
67- systemPrompt: systemPrompt,
68- extraSystemPrompt: nil ,
69- prompt: prompt
70- )
71- case let . singleRoundDialog(
72- systemPrompt,
73- overwriteSystemPrompt,
74- _,
75- _
76- ) :
77- let service = ChatService ( )
78- return try await service. handleSingleRoundDialogCommand (
79- systemPrompt: systemPrompt,
80- overwriteSystemPrompt: overwriteSystemPrompt ?? false ,
81- prompt: prompt
82- )
83- case let . promptToCode( extraSystemPrompt, instruction, _, _) :
84- let service = OpenAIPromptToCodeService ( )
59+ // #if canImport(ProChatTabs)
60+ // let lazyLoadDependency: () = {
61+ // BrowserChatTab.externalDependency = .init(
62+ // handleCustomCommand: { command, prompt in
63+ // switch command.feature {
64+ // case let .chatWithSelection(extraSystemPrompt, _, useExtraSystemPrompt):
65+ // let service = ChatService()
66+ // return try await service.processMessage(
67+ // systemPrompt: nil,
68+ // extraSystemPrompt: (useExtraSystemPrompt ?? false) ? extraSystemPrompt :
69+ // nil,
70+ // prompt: prompt
71+ // )
72+ // case let .customChat(systemPrompt, _):
73+ // let service = ChatService()
74+ // return try await service.processMessage(
75+ // systemPrompt: systemPrompt,
76+ // extraSystemPrompt: nil,
77+ // prompt: prompt
78+ // )
79+ // case let .singleRoundDialog(
80+ // systemPrompt,
81+ // overwriteSystemPrompt,
82+ // _,
83+ // _
84+ // ):
85+ // let service = ChatService()
86+ // return try await service.handleSingleRoundDialogCommand(
87+ // systemPrompt: systemPrompt,
88+ // overwriteSystemPrompt: overwriteSystemPrompt ?? false,
89+ // prompt: prompt
90+ // )
91+ // case let .promptToCode(extraSystemPrompt, instruction, _, _):
92+ // let service = OpenAIPromptToCodeService()
93+ //
94+ // let result = try await service.modifyCode(
95+ // code: prompt,
96+ // requirement: instruction ?? "Modify content.",
97+ // source: .init(
98+ // language: .plaintext,
99+ // documentURL: .init(fileURLWithPath: "/"),
100+ // projectRootURL: .init(fileURLWithPath: "/"),
101+ // content: prompt,
102+ // lines: prompt.breakLines(),
103+ // range: .outOfScope
104+ // ),
105+ // isDetached: true,
106+ // extraSystemPrompt: extraSystemPrompt,
107+ // generateDescriptionRequirement: false
108+ // )
109+ // var code = ""
110+ // for try await (newCode, _) in result {
111+ // code = newCode
112+ // }
113+ // return code
114+ // }
115+ // }
116+ // )
117+ // }()
118+ // #endif
85119
86- let result = try await service. modifyCode (
87- code: prompt,
88- requirement: instruction ?? " Modify content. " ,
89- source: . init(
90- language: . plaintext,
91- documentURL: . init( fileURLWithPath: " / " ) ,
92- projectRootURL: . init( fileURLWithPath: " / " ) ,
93- content: prompt,
94- lines: prompt. breakLines ( ) ,
95- range: . outOfScope
96- ) ,
97- isDetached: true ,
98- extraSystemPrompt: extraSystemPrompt,
99- generateDescriptionRequirement: false
100- )
101- var code = " "
102- for try await (newCode, _) in result {
103- code = newCode
104- }
105- return code
106- }
107- }
108- )
109- } ( )
110- #endif
0 commit comments