Skip to content

Commit 8991d8a

Browse files
committed
Pre-release 0.44.149
1 parent d76757f commit 8991d8a

File tree

90 files changed

+4342
-850
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+4342
-850
lines changed

Copilot for Xcode.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
5EC511E42C90CE9800632BAB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C8189B1D2938973000C9DCDA /* Assets.xcassets */; };
1919
5EC511E52C90CFD600632BAB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C861E6142994F6080056CB02 /* Assets.xcassets */; };
2020
5EC511E62C90CFD700632BAB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C861E6142994F6080056CB02 /* Assets.xcassets */; };
21+
7E6CEC912EAB6774005F2076 /* RejectNESSuggestionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E6CEC902EAB6774005F2076 /* RejectNESSuggestionCommand.swift */; };
22+
7E856FF72E9F6D24005751CB /* AcceptNESSuggestionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E856FF62E9F6D1D005751CB /* AcceptNESSuggestionCommand.swift */; };
2123
C8009BFF2941C551007AA7E8 /* ToggleRealtimeSuggestionsCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8009BFE2941C551007AA7E8 /* ToggleRealtimeSuggestionsCommand.swift */; };
2224
C8009C032941C576007AA7E8 /* SyncTextSettingsCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8009C022941C576007AA7E8 /* SyncTextSettingsCommand.swift */; };
2325
C800DBB1294C624D00B04CAC /* PrefetchSuggestionsCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C800DBB0294C624D00B04CAC /* PrefetchSuggestionsCommand.swift */; };
@@ -193,6 +195,8 @@
193195
3E5DB74F2D6B88EE00418952 /* ReleaseNotes.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = ReleaseNotes.md; sourceTree = "<group>"; };
194196
424ACA202CA4697200FA20F2 /* Credits.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = Credits.rtf; sourceTree = "<group>"; };
195197
427C63272C6E868B000E557C /* OpenSettingsCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenSettingsCommand.swift; sourceTree = "<group>"; };
198+
7E6CEC902EAB6774005F2076 /* RejectNESSuggestionCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RejectNESSuggestionCommand.swift; sourceTree = "<group>"; };
199+
7E856FF62E9F6D1D005751CB /* AcceptNESSuggestionCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AcceptNESSuggestionCommand.swift; sourceTree = "<group>"; };
196200
C8009BFE2941C551007AA7E8 /* ToggleRealtimeSuggestionsCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToggleRealtimeSuggestionsCommand.swift; sourceTree = "<group>"; };
197201
C8009C022941C576007AA7E8 /* SyncTextSettingsCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncTextSettingsCommand.swift; sourceTree = "<group>"; };
198202
C800DBB0294C624D00B04CAC /* PrefetchSuggestionsCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefetchSuggestionsCommand.swift; sourceTree = "<group>"; };
@@ -330,8 +334,10 @@
330334
C8520300293C4D9000460097 /* Helpers.swift */,
331335
C81458952939EFDC00135263 /* GetSuggestionsCommand.swift */,
332336
C87B03A4293B261200C77EAE /* AcceptSuggestionCommand.swift */,
337+
7E856FF62E9F6D1D005751CB /* AcceptNESSuggestionCommand.swift */,
333338
C80FFB952A95F58200704A25 /* AcceptPromptToCodeCommand.swift */,
334339
C87B03A6293B261900C77EAE /* RejectSuggestionCommand.swift */,
340+
7E6CEC902EAB6774005F2076 /* RejectNESSuggestionCommand.swift */,
335341
C87B03A8293B262600C77EAE /* NextSuggestionCommand.swift */,
336342
C87B03AA293B262E00C77EAE /* PreviousSuggestionCommand.swift */,
337343
C8009BFE2941C551007AA7E8 /* ToggleRealtimeSuggestionsCommand.swift */,
@@ -734,12 +740,14 @@
734740
C8758E7029F04BFF00D29C1C /* CustomCommand.swift in Sources */,
735741
C8758E7229F04CF100D29C1C /* SeparatorCommand.swift in Sources */,
736742
C861A6A329E5503F005C41A3 /* PromptToCodeCommand.swift in Sources */,
743+
7E6CEC912EAB6774005F2076 /* RejectNESSuggestionCommand.swift in Sources */,
737744
C8520301293C4D9000460097 /* Helpers.swift in Sources */,
738745
C8009BFF2941C551007AA7E8 /* ToggleRealtimeSuggestionsCommand.swift in Sources */,
739746
C80FFB962A95F58200704A25 /* AcceptPromptToCodeCommand.swift in Sources */,
740747
427C63282C6E868B000E557C /* OpenSettingsCommand.swift in Sources */,
741748
C87B03A5293B261200C77EAE /* AcceptSuggestionCommand.swift in Sources */,
742749
C87B03A9293B262600C77EAE /* NextSuggestionCommand.swift in Sources */,
750+
7E856FF72E9F6D24005751CB /* AcceptNESSuggestionCommand.swift in Sources */,
743751
C87B03AB293B262E00C77EAE /* PreviousSuggestionCommand.swift in Sources */,
744752
C87B03A7293B261900C77EAE /* RejectSuggestionCommand.swift in Sources */,
745753
C8009C032941C576007AA7E8 /* SyncTextSettingsCommand.swift in Sources */,

Copilot for Xcode/App.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,17 @@ struct CopilotForXcodeApp: App {
213213
hostAppStore.send(.setActiveTab(.byok))
214214
}
215215
}
216+
217+
DistributedNotificationCenter.default().addObserver(
218+
forName: .openAdvancedSettingsWindowRequest,
219+
object: nil,
220+
queue: .main
221+
) { _ in
222+
DispatchQueue.main.async {
223+
activateAndOpenSettings()
224+
hostAppStore.send(.setActiveTab(.advanced))
225+
}
226+
}
216227
}
217228

218229
var body: some Scene {

Core/Package.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ let package = Package(
264264
.target(
265265
name: "KeyBindingManager",
266266
dependencies: [
267+
"SuggestionWidget",
267268
.product(name: "Workspace", package: "Tool"),
268269
.product(name: "Preferences", package: "Tool"),
269270
.product(name: "Logger", package: "Tool"),

Core/Sources/ChatService/ToolCalls/InsertEditIntoFileTool.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,6 @@ public class InsertEditIntoFileTool: ICopilotTool {
194194
)
195195

196196
Task {
197-
// Force to notify the CLS about the new change within the document before edit_file completion.
198-
try? await contextProvider.notifyChangeTextDocument(fileURL: fileURL, content: newContent, version: 0)
199197
if let completion = completion { completion(newContent, nil) }
200198
}
201199
} catch {

Core/Sources/ConversationTab/ChatPanel.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ struct ChatPanelMessages: View {
151151
Group {
152152

153153
ChatHistory(chat: chat)
154+
.fixedSize(horizontal: false, vertical: true)
154155

155156
ExtraSpacingInResponding(chat: chat)
156157

@@ -302,11 +303,13 @@ struct ChatPanelMessages: View {
302303

303304
struct ExtraSpacingInResponding: View {
304305
let chat: StoreOf<Chat>
306+
307+
@AppStorage(\.fontScale) private var fontScale: Double
305308

306309
var body: some View {
307310
WithPerceptionTracking {
308311
if chat.isReceivingMessage {
309-
Spacer(minLength: 12)
312+
Spacer(minLength: 12 * fontScale)
310313
}
311314
}
312315
}

Core/Sources/ConversationTab/CodeBlockHighlighter.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,13 @@ struct AsyncCodeBlockView: View {
8686
Group {
8787
if let highlighted = storage.highlighted {
8888
Text(highlighted)
89-
.frame(maxWidth: .infinity, alignment: .leading)
9089
} else {
9190
Text(content).font(.init(font))
92-
.frame(maxWidth: .infinity, alignment: .leading)
9391
}
9492
}
95-
.frame(maxWidth: .infinity)
93+
.lineLimit(nil)
94+
.fixedSize(horizontal: false, vertical: true)
95+
.frame(maxWidth: .infinity, alignment: .leading)
9696
.onAppear {
9797
storage.highlight(debounce: false, for: self)
9898
}

Core/Sources/ConversationTab/TerminalViews/RunInTerminalToolView.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,12 @@ struct RunInTerminalToolView: View {
121121
.scaledFrame(width: 16, height: 16)
122122

123123
Text(command!)
124+
.lineLimit(nil)
124125
.textSelection(.enabled)
125126
.scaledFont(size: chatFontSize, design: .monospaced)
126127
.scaledPadding(8)
127128
.frame(maxWidth: .infinity, alignment: .leading)
129+
.fixedSize(horizontal: false, vertical: true)
128130
.foregroundStyle(codeForegroundColor)
129131
.background(codeBackgroundColor)
130132
.clipShape(RoundedRectangle(cornerRadius: 6))
@@ -141,7 +143,7 @@ struct RunInTerminalToolView: View {
141143
terminalSession: terminalSession,
142144
onTerminalInput: terminalSession.handleTerminalInput
143145
)
144-
.frame(minHeight: 200, maxHeight: 400)
146+
.scaledFrame(minHeight: 200, maxHeight: 400)
145147
} else if tool.status == .waitForConfirmation {
146148
ThemedMarkdownText(text: explanation ?? "", chat: chat)
147149
.frame(maxWidth: .infinity, alignment: .leading)

Core/Sources/ConversationTab/Views/BotMessage.swift

Lines changed: 80 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -140,99 +140,101 @@ struct BotMessage: View {
140140
}
141141

142142
var body: some View {
143-
HStack {
144-
VStack(alignment: .leading, spacing: 8) {
145-
if !references.isEmpty {
146-
WithPerceptionTracking {
147-
ReferenceButton(
148-
references: references,
149-
chat: chat,
150-
isReferencesPresented: $isReferencesPresented
151-
)
143+
WithPerceptionTracking {
144+
HStack {
145+
VStack(alignment: .leading, spacing: 8) {
146+
if !references.isEmpty {
147+
WithPerceptionTracking {
148+
ReferenceButton(
149+
references: references,
150+
chat: chat,
151+
isReferencesPresented: $isReferencesPresented
152+
)
153+
}
152154
}
153-
}
154-
155-
// progress step
156-
if steps.count > 0 {
157-
ProgressStep(steps: steps)
155+
156+
// progress step
157+
if steps.count > 0 {
158+
ProgressStep(steps: steps)
158159

159-
}
160-
161-
if !panelMessages.isEmpty {
162-
WithPerceptionTracking {
163-
ForEach(panelMessages.indices, id: \.self) { index in
164-
FunctionMessage(text: panelMessages[index].message, chat: chat)
160+
}
161+
162+
if !panelMessages.isEmpty {
163+
WithPerceptionTracking {
164+
ForEach(panelMessages.indices, id: \.self) { index in
165+
FunctionMessage(text: panelMessages[index].message, chat: chat)
166+
}
165167
}
166168
}
167-
}
168-
169-
if editAgentRounds.count > 0 {
170-
ProgressAgentRound(rounds: editAgentRounds, chat: chat)
171-
}
172-
173-
if !text.isEmpty {
174-
Group{
175-
ThemedMarkdownText(text: text, chat: chat)
169+
170+
if editAgentRounds.count > 0 {
171+
ProgressAgentRound(rounds: editAgentRounds, chat: chat)
176172
}
177-
.scaledPadding(.leading, 2)
178-
.scaledPadding(.vertical, 4)
179-
}
180-
181-
if let codeReviewRound = codeReviewRound {
182-
CodeReviewMainView(
183-
store: chat, round: codeReviewRound
184-
)
185-
.frame(maxWidth: .infinity)
186-
}
187-
188-
if !errorMessages.isEmpty {
189-
VStack(spacing: 4) {
190-
ForEach(errorMessages.indices, id: \.self) { index in
191-
if let attributedString = try? AttributedString(markdown: errorMessages[index]) {
192-
NotificationBanner(style: .warning) {
193-
Text(attributedString)
173+
174+
if !text.isEmpty {
175+
Group{
176+
ThemedMarkdownText(text: text, chat: chat)
177+
}
178+
.scaledPadding(.leading, 2)
179+
.scaledPadding(.vertical, 4)
180+
}
181+
182+
if let codeReviewRound = codeReviewRound {
183+
CodeReviewMainView(
184+
store: chat, round: codeReviewRound
185+
)
186+
.frame(maxWidth: .infinity)
187+
}
188+
189+
if !errorMessages.isEmpty {
190+
VStack(spacing: 4) {
191+
ForEach(errorMessages.indices, id: \.self) { index in
192+
if let attributedString = try? AttributedString(markdown: errorMessages[index]) {
193+
NotificationBanner(style: .warning) {
194+
Text(attributedString)
195+
}
194196
}
195197
}
196198
}
199+
.scaledPadding(.vertical, 4)
200+
}
201+
202+
HStack {
203+
if shouldShowTurnStatus() {
204+
TurnStatusView(message: message)
205+
}
206+
207+
Spacer()
208+
209+
ResponseToolBar(id: id, chat: chat, text: text)
210+
.conditionalFontWeight(.medium)
211+
.opacity(shouldShowToolBar() ? 1 : 0)
212+
.scaledPadding(.trailing, -20)
197213
}
198-
.scaledPadding(.vertical, 4)
199214
}
200-
201-
HStack {
202-
if shouldShowTurnStatus() {
203-
TurnStatusView(message: message)
215+
.shadow(color: .black.opacity(0.05), radius: 6)
216+
.contextMenu {
217+
Button("Copy") {
218+
NSPasteboard.general.clearContents()
219+
NSPasteboard.general.setString(text, forType: .string)
204220
}
221+
.scaledFont(.body)
205222

206-
Spacer()
223+
Button("Set as Extra System Prompt") {
224+
chat.send(.setAsExtraPromptButtonTapped(id))
225+
}
226+
.scaledFont(.body)
207227

208-
ResponseToolBar(id: id, chat: chat, text: text)
209-
.conditionalFontWeight(.medium)
210-
.opacity(shouldShowToolBar() ? 1 : 0)
211-
.scaledPadding(.trailing, -20)
212-
}
213-
}
214-
.shadow(color: .black.opacity(0.05), radius: 6)
215-
.contextMenu {
216-
Button("Copy") {
217-
NSPasteboard.general.clearContents()
218-
NSPasteboard.general.setString(text, forType: .string)
219-
}
220-
.scaledFont(.body)
221-
222-
Button("Set as Extra System Prompt") {
223-
chat.send(.setAsExtraPromptButtonTapped(id))
228+
Divider()
229+
230+
Button("Delete") {
231+
chat.send(.deleteMessageButtonTapped(id))
232+
}
233+
.scaledFont(.body)
224234
}
225-
.scaledFont(.body)
226-
227-
Divider()
228-
229-
Button("Delete") {
230-
chat.send(.deleteMessageButtonTapped(id))
235+
.onHover {
236+
isHovering = $0
231237
}
232-
.scaledFont(.body)
233-
}
234-
.onHover {
235-
isHovering = $0
236238
}
237239
}
238240
}

Core/Sources/ConversationTab/Views/ChatPanelInputArea/InputAreaTextEditor.swift

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,9 @@ struct InputAreaTextEditor: View {
7979
return false
8080
}
8181

82-
var typedMessage: String {
83-
chat.state.getChatContext(of: editorMode).typedMessage
84-
}
85-
8682
var body: some View {
8783
WithPerceptionTracking {
84+
let typedMessage = chat.state.getChatContext(of: editorMode).typedMessage
8885
VStack(spacing: 0) {
8986
chatContextView
9087

Core/Sources/HostApp/AdvancedSettings/SuggestionSection.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ struct SuggestionSection: View {
44
@AppStorage(\.realtimeSuggestionToggle) var realtimeSuggestionToggle
55
@AppStorage(\.suggestionFeatureEnabledProjectList) var suggestionFeatureEnabledProjectList
66
@AppStorage(\.acceptSuggestionWithTab) var acceptSuggestionWithTab
7+
@AppStorage(\.realtimeNESToggle) var realtimeNESToggle
78
@State var isSuggestionFeatureDisabledLanguageListViewOpen = false
89
@State private var shouldPresentTurnoffSheet = false
910

@@ -23,10 +24,15 @@ struct SuggestionSection: View {
2324
var body: some View {
2425
SettingsSection(title: "Suggestion Settings") {
2526
SettingsToggle(
26-
title: "Request suggestions while typing",
27+
title: "Enable completions while typing",
2728
isOn: realtimeSuggestionBinding
2829
)
2930
Divider()
31+
SettingsToggle(
32+
title: "Enable Next Edit Suggestions (NES)",
33+
isOn: $realtimeNESToggle
34+
)
35+
Divider()
3036
SettingsToggle(
3137
title: "Accept suggestions with Tab",
3238
isOn: $acceptSuggestionWithTab

0 commit comments

Comments
 (0)