From dfaff48e6d9e458a7fd1b35701e0f304a20936b4 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 19 May 2026 07:27:03 +0000 Subject: [PATCH 1/2] Pre-release 0.49.175 --- .github/workflows/auto-create-release-pr.yml | 18 ++++++++++++++- ExtensionService/AppDelegate.swift | 22 +++++-------------- .../Services/QuotaNotifier.swift | 13 ++++++----- .../Services/WarningState.swift | 11 +++++++++- 4 files changed, 41 insertions(+), 23 deletions(-) diff --git a/.github/workflows/auto-create-release-pr.yml b/.github/workflows/auto-create-release-pr.yml index 02aa4566..dc6995b0 100644 --- a/.github/workflows/auto-create-release-pr.yml +++ b/.github/workflows/auto-create-release-pr.yml @@ -45,7 +45,23 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - gh pr checks "${{ github.ref_name }}" --watch + for i in $(seq 1 60); do + other_checks=$(gh pr checks "${{ github.ref_name }}" | grep -v "create-pr" || true) + if echo "$other_checks" | grep -wq "fail"; then + echo "Required checks failed." + exit 1 + fi + if [ -z "$other_checks" ]; then + echo "No other checks found yet, waiting..." + elif ! echo "$other_checks" | grep -wq "pending"; then + echo "All required checks passed." + exit 0 + fi + echo "Waiting for checks..." + sleep 10 + done + echo "Timed out waiting for required checks." + exit 1 - name: Merge pull request env: diff --git a/ExtensionService/AppDelegate.swift b/ExtensionService/AppDelegate.swift index 5b88200c..fcbad9d6 100644 --- a/ExtensionService/AppDelegate.swift +++ b/ExtensionService/AppDelegate.swift @@ -516,6 +516,7 @@ enum CLSMessageType { case chatLimitReached case completionLimitReached case byokLimitedReached + case monthlyAICreditsLimitReached case other var summary: String { @@ -526,6 +527,8 @@ enum CLSMessageType { return "Monthly Completion Limit Reached" case .byokLimitedReached: return "BYOK Limit Reached" + case .monthlyAICreditsLimitReached: + return "Monthly AI Credits Limit Reached" case .other: return "CLS Error" } @@ -537,14 +540,6 @@ struct CLSMessage { let detail: String } -func extractDateFromCLSMessage(_ message: String) -> String? { - let pattern = #"until (\d{1,2}/\d{1,2}/\d{4}, \d{1,2}:\d{2}:\d{2} [AP]M)"# - if let range = message.range(of: pattern, options: .regularExpression) { - return String(message[range].dropFirst(6)) - } - return nil -} - func getCLSMessageSummary(_ message: String) -> CLSMessage { let messageType: CLSMessageType @@ -555,16 +550,11 @@ func getCLSMessageSummary(_ message: String) -> CLSMessage { messageType = .completionLimitReached } else if message.contains("BYOK") { messageType = .byokLimitedReached + } else if message.contains("You've used your monthly AI Credits") { + messageType = .monthlyAICreditsLimitReached } else { messageType = .other } - let detail: String - if let date = extractDateFromCLSMessage(message) { - detail = "Visit GitHub to check your usage and upgrade to Copilot Pro or wait until \(date) for your limit to reset." - } else { - detail = message - } - - return CLSMessage(summary: messageType.summary, detail: detail) + return CLSMessage(summary: messageType.summary, detail: message) } diff --git a/Tool/Sources/GitHubCopilotService/Services/QuotaNotifier.swift b/Tool/Sources/GitHubCopilotService/Services/QuotaNotifier.swift index ef505545..a526e979 100644 --- a/Tool/Sources/GitHubCopilotService/Services/QuotaNotifier.swift +++ b/Tool/Sources/GitHubCopilotService/Services/QuotaNotifier.swift @@ -179,11 +179,14 @@ public class QuotaNotifierImpl: NSObject, QuotaNotifier { Task { @MainActor in let quotaInfo = await Status.shared.getQuotaInfo() let actions = buildWarningActions(params: params, quotaInfo: quotaInfo) - WarningStateManager.shared.setWarning(WarningContent( - message: params.message, - severity: params.severity, - actions: actions - )) + let isCompletionsWarning = params.message.localizedCaseInsensitiveContains("completions") + if !isCompletionsWarning { + WarningStateManager.shared.setWarning(WarningContent( + message: params.message, + severity: params.severity, + actions: actions + )) + } await NotificationCenterCoordinator.shared.setupIfNeeded() self.registerCategoriesIfNeeded() await sendAppleNotification(params, categoryID: notificationCategoryID(for: actions)) diff --git a/Tool/Sources/GitHubCopilotService/Services/WarningState.swift b/Tool/Sources/GitHubCopilotService/Services/WarningState.swift index e6fb8ede..ef5577e3 100644 --- a/Tool/Sources/GitHubCopilotService/Services/WarningState.swift +++ b/Tool/Sources/GitHubCopilotService/Services/WarningState.swift @@ -1,4 +1,5 @@ import Foundation +import Status public struct WarningAction: Equatable { public var title: String @@ -27,7 +28,15 @@ public class WarningStateManager: ObservableObject { @Published public var currentWarning: WarningContent? - private init() {} + private init() { + DistributedNotificationCenter.default().addObserver( + forName: .authStatusDidChange, + object: nil, + queue: .main + ) { [weak self] _ in + self?.dismissWarning() + } + } public func setWarning(_ warning: WarningContent) { DispatchQueue.main.async { [weak self] in From 1b210631197a231418135765158c7c0e54b63792 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Wed, 20 May 2026 06:41:41 +0000 Subject: [PATCH 2/2] Release 0.50.0 --- CHANGELOG.md | 8 ++++++++ README.md | 9 +++++++++ ReleaseNotes.md | 13 +++++++------ 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 861c5037..42463f66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 0.50.0 - May 20, 2026 +### Added +- Reasoning effort control for supported models: Low, Medium, or High from the model picker to balance response speed and quality. +- Added internal support for upcoming usage-based billing, including billing updates for the usage panel, usage notifications, and model picker. This will be visible to the user once usage-based billing rolls out. + +### Changed +- Bring Your Own Key (BYOK) is now generally available. + ## 0.49.0 - May 15, 2026 ### Added - Native Anthropic Messages API (`/v1/messages`) endpoint support. diff --git a/README.md b/README.md index 5cfeeabf..74db8114 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,15 @@ [GitHub Copilot](https://github.com/features/copilot) for Xcode is the leading AI coding assistant for Swift, Objective-C and iOS/macOS development. It delivers intelligent Completions, Chat, and Code Review—plus advanced features like Agent Mode, Next Edit Suggestions, MCP Registry, and Copilot Vision to make Xcode development faster and smarter. +> [!IMPORTANT] +> Starting from version v0.50.0, we have added internal support for the upcoming usage-based billing experience, including experience updates to the usage panel, usage notifications, and model picker. These changes will become visible once usage-based billing is rolled out. +> +> To ensure compatibility with the new billing experience, we strongly recommend upgrading to the latest plugin version as soon as possible: +> +> * **GitHub Copilot for Xcode: v0.50.0 or later** +> +> Clients using older plugin versions will continue to function. However, the billing and usage experience may not be optimal and may not accurately reflect the latest usage-based billing experience. + ## Chat GitHub Copilot Chat provides suggestions to your specific coding tasks via chat. diff --git a/ReleaseNotes.md b/ReleaseNotes.md index 787aab78..3c922d4a 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -1,12 +1,13 @@ -### GitHub Copilot for Xcode 0.49.0 +### GitHub Copilot for Xcode 0.50.0 **🚀 Highlights** -- **Native Anthropic Messages API**: Adds support for the native Anthropic Messages API (`/v1/messages`) endpoint, enabling direct integration with Anthropic-compatible providers. -- **Thinking in Chat**: Reasoning-capable models can now show their thinking process in chat for greater transparency. -- **Better Rate Limit Feedback**: Enhanced notifications and error messages help you understand and respond to rate limit events. +- **Reasoning Effort**: Control how deeply reasoning-capable models think before responding. You can now select reasoning efforts directly from the model picker for supported models, letting you balance response speed against answer quality. + +- **Bring Your Own Key (BYOK) is now Generally Available**: Bring Your Own Key support has graduated from preview and is now available to all users. Configure your own API keys for third-party models directly in Copilot for Xcode settings. **💪 Changes** -- Refined the tool call item UI in agent progress for a cleaner, more readable layout. -- Updated Copilot language server to 1.465.5. +- Added internal support for upcoming [usage-based billing](https://github.blog/news-insights/company-news/github-copilot-is-moving-to-usage-based-billing/), including billing updates for the usage panel, usage notifications, and model picker. This will be visible once usage-based billing rolls out. + + We **strongly recommend** upgrading to this version as soon as possible.