From deb33c5de683ab250f5d9abdcc88e16cd031dc3b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 7 May 2026 12:00:35 +0000 Subject: [PATCH 1/2] Initial plan From 463dd02b50814c43dc2a3414f7464003ffb10951 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 7 May 2026 12:09:09 +0000 Subject: [PATCH 2/2] Fix unhandled rejections when upstream ref is not a GitHub repo Agent-Logs-Url: https://github.com/microsoft/vscode-pull-request-github/sessions/0f354983-7de0-48fd-83e4-7af7fe874a8d Co-authored-by: alexr00 <38270282+alexr00@users.noreply.github.com> --- src/lm/pullRequestContextProvider.ts | 13 ++++++++++++- src/view/treeNodes/categoryNode.ts | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/lm/pullRequestContextProvider.ts b/src/lm/pullRequestContextProvider.ts index 42e7659bb4..c75ad6381e 100644 --- a/src/lm/pullRequestContextProvider.ts +++ b/src/lm/pullRequestContextProvider.ts @@ -6,6 +6,7 @@ import * as vscode from 'vscode'; import { GitApiImpl } from '../api/api1'; import { Disposable } from '../common/lifecycle'; +import Logger from '../common/logger'; import { onceEvent } from '../common/utils'; import { issueMarkdown } from '../github/markdownUtils'; import { PullRequestModel } from '../github/pullRequestModel'; @@ -24,6 +25,8 @@ export namespace PRChatContextItem { } export class WorkspaceContextProvider extends Disposable implements vscode.ChatWorkspaceContextProvider { + private static readonly ID = 'WorkspaceContextProvider'; + private readonly _onDidChangeWorkspaceChatContext = this._register(new vscode.EventEmitter()); readonly onDidChangeWorkspaceChatContext = this._onDidChangeWorkspaceChatContext.event; @@ -70,7 +73,15 @@ export class WorkspaceContextProvider extends Disposable implements vscode.ChatW if (folderManager.gitHubRepositories.length === 0) { continue; } - const defaults = await folderManager.getPullRequestDefaults(); + let defaults; + try { + defaults = await folderManager.getPullRequestDefaults(); + } catch (e) { + // The folder may have no upstream, a detached HEAD, or an upstream that is not a GitHub + // repository. Skip it instead of letting the rejection escape as an unhandled promise. + Logger.debug(`Skipping workspace chat context for folder ${folderManager.repository.rootUri.toString()}: ${e.message ?? e}`, WorkspaceContextProvider.ID); + continue; + } let value = `Repository name: ${defaults.repo} Owner: ${defaults.owner} diff --git a/src/view/treeNodes/categoryNode.ts b/src/view/treeNodes/categoryNode.ts index b7f0d2baa2..b3551d2b3f 100644 --- a/src/view/treeNodes/categoryNode.ts +++ b/src/view/treeNodes/categoryNode.ts @@ -297,7 +297,7 @@ export class CategoryTreeNode extends TreeNode implements vscode.TreeItem { hasMorePages = response.hasMorePages; hasUnsearchedRepositories = response.hasUnsearchedRepositories; } catch (e) { - if (this.isCopilot && (e.response.status === 422) && e.message.includes('the users do not exist')) { + if (this.isCopilot && (e?.response?.status === 422) && e.message?.includes('the users do not exist')) { // Skip it, it's copilot and the repo doesn't have copilot } else { const error = formatError(e);