From 5dad9398c993717fdc76434b49cd9c276b94ebcb Mon Sep 17 00:00:00 2001 From: Alex Ross <38270282+alexr00@users.noreply.github.com> Date: Wed, 8 Jul 2026 12:20:54 +0200 Subject: [PATCH 1/3] Adopt chat context API changes --- .../vscode.proposed.chatContextProvider.d.ts | 96 ++++--------------- src/extension.ts | 8 +- src/lm/issueContextProvider.ts | 10 +- src/lm/pullRequestContextProvider.ts | 10 +- 4 files changed, 33 insertions(+), 91 deletions(-) diff --git a/src/@types/vscode.proposed.chatContextProvider.d.ts b/src/@types/vscode.proposed.chatContextProvider.d.ts index e7cd493ae5..d115aa03ae 100644 --- a/src/@types/vscode.proposed.chatContextProvider.d.ts +++ b/src/@types/vscode.proposed.chatContextProvider.d.ts @@ -8,6 +8,8 @@ declare module 'vscode' { // https://github.com/microsoft/vscode/issues/271104 @alexr00 + export type TabSelector = { uri: DocumentSelector } | { viewType: string }; + export namespace chat { /** @@ -33,8 +35,14 @@ declare module 'vscode' { * @param id Unique identifier for the provider. * @param provider The chat explicit context provider. */ + export function registerChatAttachContextProvider(id: string, provider: ChatAttachContextProvider): Disposable; + + /** + * @deprecated + */ export function registerChatExplicitContextProvider(id: string, provider: ChatExplicitContextProvider): Disposable; + /** * Register a chat resource context provider. Resource context is provided for a specific resource. * Make sure to pass a selector that matches the resource you want to provide context for. @@ -45,18 +53,12 @@ declare module 'vscode' { * @param id Unique identifier for the provider. * @param provider The chat resource context provider. */ - export function registerChatResourceContextProvider(selector: DocumentSelector, id: string, provider: ChatResourceContextProvider): Disposable; + export function registerChatTabContextProvider(selector: TabSelector, id: string, provider: ChatTabContextProvider): Disposable; /** - * Register a chat context provider. - * - * @deprecated Use {@link registerChatWorkspaceContextProvider}, {@link registerChatExplicitContextProvider}, or {@link registerChatResourceContextProvider} instead. - * - * @param selector Optional document selector to filter which resources the provider is called for. If omitted, the provider will only be called for explicit context requests. - * @param id Unique identifier for the provider. - * @param provider The chat context provider. + * @deprecated */ - export function registerChatContextProvider(selector: DocumentSelector | undefined, id: string, provider: ChatContextProvider): Disposable; + export function registerChatResourceContextProvider(selector: DocumentSelector, id: string, provider: ChatResourceContextProvider): Disposable; } @@ -112,14 +114,9 @@ declare module 'vscode' { * @param token A cancellation token. */ provideWorkspaceChatContext(token: CancellationToken): ProviderResult; - - /** - * @deprecated - */ - provideChatContext?(token: CancellationToken): ProviderResult; } - export interface ChatExplicitContextProvider { + export interface ChatAttachContextProvider { /** * Provide a list of chat context items that a user can choose from. These context items are shown as options when the user explicitly attaches context. @@ -128,12 +125,7 @@ declare module 'vscode' { * * @param token A cancellation token. */ - provideExplicitChatContext(token: CancellationToken): ProviderResult; - - /** - * @deprecated - */ - provideChatContext?(token: CancellationToken): ProviderResult; + provideAttachChatContext(token: CancellationToken): ProviderResult; /** * If a chat context item is provided without a `value`, this method is called to resolve the `value` for the item. @@ -141,15 +133,10 @@ declare module 'vscode' { * @param context The context item to resolve. * @param token A cancellation token. */ - resolveExplicitChatContext(context: T, token: CancellationToken): ProviderResult; - - /** - * @deprecated - */ - resolveChatContext?(context: T, token: CancellationToken): ProviderResult; + resolveAttachChatContext(context: T, token: CancellationToken): ProviderResult; } - export interface ChatResourceContextProvider { + export interface ChatTabContextProvider { /** * Given a particular resource, provide a chat context item for it. This is used for implicit context (see the settings `chat.implicitContext.enabled` and `chat.implicitContext.suggestedContext`). @@ -161,12 +148,9 @@ declare module 'vscode' { * @param options Options include the resource for which to provide context. * @param token A cancellation token. */ - provideResourceChatContext(options: { resource: Uri }, token: CancellationToken): ProviderResult; - - /** - * @deprecated - */ - provideChatContext?(options: { resource: Uri }, token: CancellationToken): ProviderResult; + // Can use active editor?\ + // Rename ChatTab to be consistent + provideChatTabContext(options: { tab: Tab }, token: CancellationToken): ProviderResult; /** * If a chat context item is provided without a `value`, this method is called to resolve the `value` for the item. @@ -174,48 +158,6 @@ declare module 'vscode' { * @param context The context item to resolve. * @param token A cancellation token. */ - resolveResourceChatContext(context: T, token: CancellationToken): ProviderResult; - - /** - * @deprecated - */ - resolveChatContext?(context: T, token: CancellationToken): ProviderResult; + resolveChatTabContext(context: T, token: CancellationToken): ProviderResult; } - - /** - * @deprecated Use {@link ChatWorkspaceContextProvider}, {@link ChatExplicitContextProvider}, or {@link ChatResourceContextProvider} instead. - */ - export interface ChatContextProvider { - - /** - * An optional event that should be fired when the workspace chat context has changed. - * @deprecated Use {@link ChatWorkspaceContextProvider.onDidChangeWorkspaceChatContext} instead. - */ - onDidChangeWorkspaceChatContext?: Event; - - /** - * Provide a list of chat context items to be included as workspace context for all chat requests. - * @deprecated Use {@link ChatWorkspaceContextProvider.provideWorkspaceChatContext} instead. - */ - provideWorkspaceChatContext?(token: CancellationToken): ProviderResult; - - /** - * Provide a list of chat context items that a user can choose from. - * @deprecated Use {@link ChatExplicitContextProvider.provideExplicitChatContext} instead. - */ - provideChatContextExplicit?(token: CancellationToken): ProviderResult; - - /** - * Given a particular resource, provide a chat context item for it. - * @deprecated Use {@link ChatResourceContextProvider.provideResourceChatContext} instead. - */ - provideChatContextForResource?(options: { resource: Uri }, token: CancellationToken): ProviderResult; - - /** - * If a chat context item is provided without a `value`, this method is called to resolve the `value` for the item. - * @deprecated Use the `resolveChatContext` method on the specific provider type instead. - */ - resolveChatContext?(context: T, token: CancellationToken): ProviderResult; - } - } diff --git a/src/extension.ts b/src/extension.ts index deaff01cb5..d3a4c65a38 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -282,11 +282,11 @@ async function init( workspaceContextProvider.initialize(); const pullRequestContextProvider = new PullRequestContextProvider(prsTreeModel, reposManager, context); context.subscriptions.push(pullRequestContextProvider); - context.subscriptions.push(vscode.chat.registerChatExplicitContextProvider('githubpr', pullRequestContextProvider)); - context.subscriptions.push(vscode.chat.registerChatResourceContextProvider({ scheme: 'webview-panel', pattern: '**/webview-PullRequestOverview**' }, 'githubpr', pullRequestContextProvider)); + context.subscriptions.push(vscode.chat.registerChatAttachContextProvider('githubpr', pullRequestContextProvider)); + context.subscriptions.push(vscode.chat.registerChatTabContextProvider({ uri: { scheme: 'webview-panel', pattern: '**/webview-PullRequestOverview**' } }, 'githubpr', pullRequestContextProvider)); const issueContextProvider = new IssueContextProvider(issueStateManager, reposManager, context); - context.subscriptions.push(vscode.chat.registerChatExplicitContextProvider('githubissue', issueContextProvider)); - context.subscriptions.push(vscode.chat.registerChatResourceContextProvider({ scheme: 'webview-panel', pattern: '**/webview-IssueOverview**' }, 'githubissue', issueContextProvider)); + context.subscriptions.push(vscode.chat.registerChatAttachContextProvider('githubissue', issueContextProvider)); + context.subscriptions.push(vscode.chat.registerChatTabContextProvider({ uri: { scheme: 'webview-panel', pattern: '**/webview-IssueOverview**' } }, 'githubissue', issueContextProvider)); const notificationsFeatures = new NotificationsFeatureRegister(credentialStore, reposManager, telemetry, notificationsManager); context.subscriptions.push(notificationsFeatures); diff --git a/src/lm/issueContextProvider.ts b/src/lm/issueContextProvider.ts index f7ee33ab40..1b6fcc874c 100644 --- a/src/lm/issueContextProvider.ts +++ b/src/lm/issueContextProvider.ts @@ -22,24 +22,24 @@ export namespace IssueChatContextItem { } } -export class IssueContextProvider implements vscode.ChatExplicitContextProvider, vscode.ChatResourceContextProvider { +export class IssueContextProvider implements vscode.ChatAttachContextProvider, vscode.ChatTabContextProvider { constructor(private readonly _stateManager: StateManager, private readonly _reposManager: RepositoriesManager, private readonly _context: vscode.ExtensionContext ) { } - async provideResourceChatContext(_options: { resource: vscode.Uri; }, _token: vscode.CancellationToken): Promise { + async provideChatTabContext(_options: { tab: vscode.Tab; }, _token: vscode.CancellationToken): Promise { const item = IssueOverviewPanel.getActivePanel()?.getCurrentItem();; if (item) { return this._issueToUnresolvedContext(item); } } - resolveExplicitChatContext(context: IssueChatContextItem, token: vscode.CancellationToken): vscode.ProviderResult { + resolveAttachChatContext(context: IssueChatContextItem, token: vscode.CancellationToken): vscode.ProviderResult { return this._resolveChatContext(context, token); } - resolveResourceChatContext(context: IssueChatContextItem, token: vscode.CancellationToken): vscode.ProviderResult { + resolveChatTabContext(context: IssueChatContextItem, token: vscode.CancellationToken): vscode.ProviderResult { return this._resolveChatContext(context, token); } @@ -50,7 +50,7 @@ export class IssueContextProvider implements vscode.ChatExplicitContextProvider< return context; } - async provideExplicitChatContext(_token: vscode.CancellationToken): Promise { + async provideAttachChatContext(_token: vscode.CancellationToken): Promise { const contextItems: IssueChatContextItem[] = []; const seenIssues: Set = new Set(); for (const folderManager of this._reposManager.folderManagers) { diff --git a/src/lm/pullRequestContextProvider.ts b/src/lm/pullRequestContextProvider.ts index c75ad6381e..99df8474b8 100644 --- a/src/lm/pullRequestContextProvider.ts +++ b/src/lm/pullRequestContextProvider.ts @@ -102,7 +102,7 @@ Active pull request (may not be the same as open pull request): ${folderManager. } } -export class PullRequestContextProvider extends Disposable implements vscode.ChatExplicitContextProvider, vscode.ChatResourceContextProvider { +export class PullRequestContextProvider extends Disposable implements vscode.ChatAttachContextProvider, vscode.ChatTabContextProvider { constructor(private readonly _prsTreeModel: PrsTreeModel, private readonly _reposManager: RepositoriesManager, private readonly _context: vscode.ExtensionContext @@ -110,25 +110,25 @@ export class PullRequestContextProvider extends Disposable implements vscode.Cha super(); } - async provideExplicitChatContext(_token: vscode.CancellationToken): Promise { + async provideAttachChatContext(_token: vscode.CancellationToken): Promise { const prs = await this._prsTreeModel.getAllPullRequests(this._reposManager.folderManagers[0], false); return prs.items.map(pr => { return this._prToUnresolvedContext(pr); }); } - async provideResourceChatContext(_options: { resource: vscode.Uri; }, _token: vscode.CancellationToken): Promise { + async provideChatTabContext(_options: { tab: vscode.Tab; }, _token: vscode.CancellationToken): Promise { const item = PullRequestOverviewPanel.getActivePanel()?.getCurrentItem(); if (item) { return this._prToUnresolvedContext(item); } } - async resolveExplicitChatContext(context: PRChatContextItem, token: vscode.CancellationToken): Promise { + async resolveAttachChatContext(context: PRChatContextItem, token: vscode.CancellationToken): Promise { return this._resolveChatContext(context, token); } - async resolveResourceChatContext(context: PRChatContextItem, token: vscode.CancellationToken): Promise { + async resolveChatTabContext(context: PRChatContextItem, token: vscode.CancellationToken): Promise { return this._resolveChatContext(context, token); } From db1bf35274a51e063f08bd6ee359e6dad5cc317c Mon Sep 17 00:00:00 2001 From: Alex Ross <38270282+alexr00@users.noreply.github.com> Date: Wed, 8 Jul 2026 15:54:24 +0200 Subject: [PATCH 2/3] Update VS Code version --- package-lock.json | 2 +- package.json | 2 +- src/@types/vscode.proposed.chatContextProvider.d.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7a1708fc43..c366497ef7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -114,7 +114,7 @@ }, "engines": { "node": ">=20", - "vscode": "^1.121.0" + "vscode": "^1.129.0" } }, "node_modules/@acemir/cssom": { diff --git a/package.json b/package.json index 5c86731da1..e33f921997 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "publisher": "GitHub", "engines": { "node": ">=20", - "vscode": "^1.121.0" + "vscode": "^1.129.0" }, "categories": [ "Other", diff --git a/src/@types/vscode.proposed.chatContextProvider.d.ts b/src/@types/vscode.proposed.chatContextProvider.d.ts index d115aa03ae..00f8a62081 100644 --- a/src/@types/vscode.proposed.chatContextProvider.d.ts +++ b/src/@types/vscode.proposed.chatContextProvider.d.ts @@ -40,7 +40,7 @@ declare module 'vscode' { /** * @deprecated */ - export function registerChatExplicitContextProvider(id: string, provider: ChatExplicitContextProvider): Disposable; + export function registerChatExplicitContextProvider(id: string, provider: any): Disposable; /** @@ -58,7 +58,7 @@ declare module 'vscode' { /** * @deprecated */ - export function registerChatResourceContextProvider(selector: DocumentSelector, id: string, provider: ChatResourceContextProvider): Disposable; + export function registerChatResourceContextProvider(selector: DocumentSelector, id: string, provider: any): Disposable; } From f8ba4d917685643903a30d13fa7e0402a7853eee Mon Sep 17 00:00:00 2001 From: Alex Ross <38270282+alexr00@users.noreply.github.com> Date: Wed, 8 Jul 2026 16:02:22 +0200 Subject: [PATCH 3/3] ccr feedback --- src/lm/issueContextProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lm/issueContextProvider.ts b/src/lm/issueContextProvider.ts index 1b6fcc874c..e33fa4a741 100644 --- a/src/lm/issueContextProvider.ts +++ b/src/lm/issueContextProvider.ts @@ -29,7 +29,7 @@ export class IssueContextProvider implements vscode.ChatAttachContextProvider { - const item = IssueOverviewPanel.getActivePanel()?.getCurrentItem();; + const item = IssueOverviewPanel.getActivePanel()?.getCurrentItem(); if (item) { return this._issueToUnresolvedContext(item); }