Skip to content

Commit 24b2ed8

Browse files
committed
Release 0.34.0
1 parent b2189de commit 24b2ed8

File tree

9 files changed

+47
-22
lines changed

9 files changed

+47
-22
lines changed

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,17 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## 0.34.0 - April 29, 2025
9+
### Added
10+
- Added support for new models in Chat: OpenAI GPT-4.1, o3 and o4-mini, Gemini 2.5 Pro
11+
12+
### Changed
13+
- Switched default model to GPT-4.1 for new installations
14+
- Enhanced model selection interface
15+
16+
### Fixed
17+
- Resolved critical error handling issues
18+
819
## 0.33.0 - April 17, 2025
920
### Added
1021
- Added support for new models in Chat: Claude 3.7 Sonnet and GPT 4.5

Core/Sources/ChatService/ChatService.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public final class ChatService: ChatServiceType, ObservableObject {
8888

8989
private func subscribeToWatchedFilesHandler() {
9090
self.watchedFilesHandler.onWatchedFiles.sink(receiveValue: { [weak self] (request, completion) in
91-
guard let self, request.params!.workspaceUri != "/" else { return }
91+
guard let self, request.params!.workspaceFolder.uri != "/" else { return }
9292
self.startFileChangeWatcher()
9393
}).store(in: &cancellables)
9494
}

Core/Sources/ChatService/Skills/ProjectContextSkill.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import XcodeInspector
1111
*/
1212
public class ProjectContextSkill {
1313
public static let ID = "project-context"
14+
public static let ProgressID = "collect-project-context"
1415

1516
public static var resolvedWorkspace: Set<String> = Set()
1617

@@ -33,7 +34,7 @@ public class ProjectContextSkill {
3334

3435
let params = request.params!
3536

36-
guard params.workspaceUri != "/" else { return }
37+
guard params.workspaceFolder.uri != "/" else { return }
3738

3839
/// build workspace URL
3940
let workspaceURL = URL(fileURLWithPath: workspacePath)
@@ -44,7 +45,7 @@ public class ProjectContextSkill {
4445
) ?? workspaceURL
4546

4647
/// ignore invalid resolve request
47-
guard projectURL.path == params.workspaceUri else { return }
48+
guard projectURL.absoluteString == params.workspaceFolder.uri else { return }
4849

4950
let files = WorkspaceFile.getWatchedFiles(
5051
workspaceURL: workspaceURL,

Core/Sources/ConversationTab/Views/ConversationProgressStepView.swift

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import SwiftUI
22
import ConversationServiceProvider
33
import ComposableArchitecture
44
import Combine
5+
import ChatService
56

67
struct ProgressStep: View {
78
let steps: [ConversationProgressStep]
@@ -33,24 +34,32 @@ struct StatusItemView: View {
3334
.scaleEffect(0.7)
3435
case .completed:
3536
Image(systemName: "checkmark")
36-
.foregroundColor(.green.opacity(0.5))
37+
.foregroundColor(.green)
3738
case .failed:
3839
Image(systemName: "xmark.circle")
39-
.foregroundColor(.red.opacity(0.5))
40+
.foregroundColor(.red)
4041
case .cancelled:
4142
Image(systemName: "slash.circle")
42-
.foregroundColor(.gray.opacity(0.5))
43+
.foregroundColor(.gray)
4344
}
4445
}
4546
}
4647

48+
var statusTitle: some View {
49+
var title = step.title
50+
if step.id == ProjectContextSkill.ProgressID && step.status == .failed {
51+
title = step.error?.message ?? step.title
52+
}
53+
return Text(title)
54+
}
55+
4756
var body: some View {
4857
WithPerceptionTracking {
4958
HStack(spacing: 4) {
5059
statusIcon
5160
.frame(width: 16, height: 16)
5261

53-
Text(step.title)
62+
statusTitle
5463
.font(.system(size: chatFontSize))
5564
.lineLimit(1)
5665

ReleaseNotes.md

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
1-
### GitHub Copilot for Xcode 0.33.0
1+
### GitHub Copilot for Xcode 0.34.0
22

33
**🚀 Highlights**
44

5-
* **New Models**: Claude 3.7 Sonnet and GPT 4.5 are now available in the Copilot Chat model selector.
6-
* **@workspace Context**: Ask questions about your entire codebase by referencing `@workspace` in Copilot Chat.
5+
* **New Models**: OpenAI GPT-4.1, o3 and o4-mini, Gemini 2.5 Pro are now available in the Copilot Chat model selector.
76

87
**💪 Improvements**
98

10-
* Open Copilot Chat with a single click from the Copilot for Xcode app
11-
* Clearer instructions for granting background permissions
9+
* Switched default model to GPT-4.1 for new installations
10+
* Enhanced model selection interface
1211

1312
**🛠️ Bug Fixes**
1413

15-
* Resolved false alarms for sign-in and free plan limit notifications
16-
* Improved app launch performance
17-
* Fixed workspace and context update issues
14+
* Resolved critical error handling issues

Tool/Sources/GitHubCopilotService/Conversation/WatchedFilesHandler.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public final class WatchedFilesHandlerImpl: WatchedFilesHandler {
1515
public let onWatchedFiles: PassthroughSubject<(WatchedFilesRequest, (AnyJSONRPCResponse) -> Void), Never> = .init()
1616

1717
public func handleWatchedFiles(_ request: WatchedFilesRequest, workspaceURL: URL, completion: @escaping (AnyJSONRPCResponse) -> Void, service: GitHubCopilotService?) {
18-
guard let params = request.params, params.workspaceUri != "/" else { return }
18+
guard let params = request.params, params.workspaceFolder.uri != "/" else { return }
1919

2020
let projectURL = WorkspaceXcodeWindowInspector.extractProjectURL(workspaceURL: workspaceURL, documentURL: nil) ?? workspaceURL
2121

@@ -28,7 +28,7 @@ public final class WatchedFilesHandlerImpl: WatchedFilesHandler {
2828

2929
let batchSize = BatchingFileChangeWatcher.maxEventPublishSize
3030
/// only `batchSize`(100) files to complete this event for setup watching workspace in CLS side
31-
let jsonResult: JSONValue = .array(files.prefix(batchSize).map { .string($0) })
31+
let jsonResult: JSONValue = .array(files.prefix(batchSize).map { .hash(["uri": .string($0)]) })
3232
let jsonValue: JSONValue = .hash(["files": jsonResult])
3333

3434
completion(AnyJSONRPCResponse(id: request.id, result: jsonValue))
@@ -39,7 +39,7 @@ public final class WatchedFilesHandlerImpl: WatchedFilesHandler {
3939
let endIndex = min(startIndex + batchSize, files.count)
4040
let batch = Array(files[startIndex..<endIndex])
4141
try? await service?.notifyDidChangeWatchedFiles(.init(
42-
workspaceUri: params.workspaceUri,
42+
workspaceUri: params.workspaceFolder.uri,
4343
changes: batch.map { .init(uri: $0, type: .created)}
4444
))
4545

Tool/Sources/GitHubCopilotService/LanguageServer/GitHubCopilotRequest+Conversation.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ public typealias ConversationContextRequest = JSONRPCRequest<ConversationContext
167167
// MARK: Watched Files
168168

169169
public struct WatchedFilesParams: Codable {
170-
public var workspaceUri: String
170+
public var workspaceFolder: WorkspaceFolder
171171
public var excludeGitignoredFiles: Bool
172172
public var excludeIDEIgnoredFiles: Bool
173173
}

Tool/Sources/GitHubCopilotService/LanguageServer/GitHubCopilotService.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ public class GitHubCopilotBaseService {
247247
capabilities: capabilities,
248248
trace: .off,
249249
workspaceFolders: [WorkspaceFolder(
250-
uri: projectRootURL.path,
250+
uri: projectRootURL.absoluteString,
251251
name: projectRootURL.lastPathComponent
252252
)]
253253
)
@@ -262,6 +262,13 @@ public class GitHubCopilotBaseService {
262262
let notifications = NotificationCenter.default
263263
.notifications(named: .gitHubCopilotShouldRefreshEditorInformation)
264264
Task { [weak self] in
265+
if projectRootURL.path != "/" {
266+
try? await server.sendNotification(
267+
.workspaceDidChangeWorkspaceFolders(
268+
.init(event: .init(added: [.init(uri: projectRootURL.absoluteString, name: projectRootURL.lastPathComponent)], removed: []))
269+
)
270+
)
271+
}
265272
// Send workspace/didChangeConfiguration once after initalize
266273
_ = try? await server.sendNotification(
267274
.workspaceDidChangeConfiguration(

Tool/Sources/GitHubCopilotService/Services/GitHubCopilotConversationService.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public final class GitHubCopilotConversationService: ConversationServiceType {
1616

1717
return try await service.createConversation(request.content,
1818
workDoneToken: request.workDoneToken,
19-
workspaceFolder: workspace.projectURL.path,
19+
workspaceFolder: workspace.projectURL.absoluteString,
2020
doc: nil,
2121
skills: request.skills,
2222
ignoredSkills: request.ignoredSkills,
@@ -35,7 +35,7 @@ public final class GitHubCopilotConversationService: ConversationServiceType {
3535
ignoredSkills: request.ignoredSkills,
3636
references: request.references ?? [],
3737
model: request.model,
38-
workspaceFolder: workspace.projectURL.path)
38+
workspaceFolder: workspace.projectURL.absoluteString)
3939
}
4040

4141
public func cancelProgress(_ workDoneToken: String, workspace: WorkspaceInfo) async throws {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy