Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
"publisher": "GitHub",
"engines": {
"node": ">=20",
"vscode": "^1.121.0"
"vscode": "^1.129.0"
},
"categories": [
"Other",
Expand Down
98 changes: 20 additions & 78 deletions src/@types/vscode.proposed.chatContextProvider.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

/**
Expand All @@ -33,7 +35,13 @@ declare module 'vscode' {
* @param id Unique identifier for the provider.
* @param provider The chat explicit context provider.
*/
export function registerChatExplicitContextProvider(id: string, provider: ChatExplicitContextProvider): Disposable;
export function registerChatAttachContextProvider(id: string, provider: ChatAttachContextProvider): Disposable;

/**
* @deprecated
*/
export function registerChatExplicitContextProvider(id: string, provider: any): Disposable;


/**
* Register a chat resource context provider. Resource context is provided for a specific resource.
Expand All @@ -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: any): Disposable;

}

Expand Down Expand Up @@ -112,14 +114,9 @@ declare module 'vscode' {
* @param token A cancellation token.
*/
provideWorkspaceChatContext(token: CancellationToken): ProviderResult<T[]>;

/**
* @deprecated
*/
provideChatContext?(token: CancellationToken): ProviderResult<T[]>;
}

export interface ChatExplicitContextProvider<T extends ChatContextItem = ChatContextItem> {
export interface ChatAttachContextProvider<T extends ChatContextItem = ChatContextItem> {

/**
* 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.
Expand All @@ -128,28 +125,18 @@ declare module 'vscode' {
*
* @param token A cancellation token.
*/
provideExplicitChatContext(token: CancellationToken): ProviderResult<T[]>;

/**
* @deprecated
*/
provideChatContext?(token: CancellationToken): ProviderResult<T[]>;
provideAttachChatContext(token: CancellationToken): ProviderResult<T[]>;

/**
* If a chat context item is provided without a `value`, this method is called to resolve the `value` for the item.
*
* @param context The context item to resolve.
* @param token A cancellation token.
*/
resolveExplicitChatContext(context: T, token: CancellationToken): ProviderResult<ChatContextItem>;

/**
* @deprecated
*/
resolveChatContext?(context: T, token: CancellationToken): ProviderResult<ChatContextItem>;
resolveAttachChatContext(context: T, token: CancellationToken): ProviderResult<ChatContextItem>;
}

export interface ChatResourceContextProvider<T extends ChatContextItem = ChatContextItem> {
export interface ChatTabContextProvider<T extends ChatContextItem = ChatContextItem> {

/**
* 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`).
Expand All @@ -161,61 +148,16 @@ 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<T | undefined>;

/**
* @deprecated
*/
provideChatContext?(options: { resource: Uri }, token: CancellationToken): ProviderResult<T | undefined>;
// Can use active editor?\
// Rename ChatTab to be consistent
provideChatTabContext(options: { tab: Tab }, token: CancellationToken): ProviderResult<T | undefined>;

/**
* If a chat context item is provided without a `value`, this method is called to resolve the `value` for the item.
*
* @param context The context item to resolve.
* @param token A cancellation token.
*/
resolveResourceChatContext(context: T, token: CancellationToken): ProviderResult<ChatContextItem>;

/**
* @deprecated
*/
resolveChatContext?(context: T, token: CancellationToken): ProviderResult<ChatContextItem>;
}

/**
* @deprecated Use {@link ChatWorkspaceContextProvider}, {@link ChatExplicitContextProvider}, or {@link ChatResourceContextProvider} instead.
*/
export interface ChatContextProvider<T extends ChatContextItem = ChatContextItem> {

/**
* An optional event that should be fired when the workspace chat context has changed.
* @deprecated Use {@link ChatWorkspaceContextProvider.onDidChangeWorkspaceChatContext} instead.
*/
onDidChangeWorkspaceChatContext?: Event<void>;

/**
* 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<T[]>;

/**
* Provide a list of chat context items that a user can choose from.
* @deprecated Use {@link ChatExplicitContextProvider.provideExplicitChatContext} instead.
*/
provideChatContextExplicit?(token: CancellationToken): ProviderResult<T[]>;

/**
* Given a particular resource, provide a chat context item for it.
* @deprecated Use {@link ChatResourceContextProvider.provideResourceChatContext} instead.
*/
provideChatContextForResource?(options: { resource: Uri }, token: CancellationToken): ProviderResult<T | undefined>;

/**
* 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<ChatContextItem>;
resolveChatTabContext(context: T, token: CancellationToken): ProviderResult<ChatContextItem>;
}

}
8 changes: 4 additions & 4 deletions src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
12 changes: 6 additions & 6 deletions src/lm/issueContextProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,24 +22,24 @@ export namespace IssueChatContextItem {
}
}

export class IssueContextProvider implements vscode.ChatExplicitContextProvider<IssueChatContextItem>, vscode.ChatResourceContextProvider<IssueChatContextItem> {
export class IssueContextProvider implements vscode.ChatAttachContextProvider<IssueChatContextItem>, vscode.ChatTabContextProvider<IssueChatContextItem> {
constructor(private readonly _stateManager: StateManager,
private readonly _reposManager: RepositoriesManager,
private readonly _context: vscode.ExtensionContext
) { }

async provideResourceChatContext(_options: { resource: vscode.Uri; }, _token: vscode.CancellationToken): Promise<IssueChatContextItem | undefined> {
const item = IssueOverviewPanel.getActivePanel()?.getCurrentItem();;
async provideChatTabContext(_options: { tab: vscode.Tab; }, _token: vscode.CancellationToken): Promise<IssueChatContextItem | undefined> {
const item = IssueOverviewPanel.getActivePanel()?.getCurrentItem();
if (item) {
return this._issueToUnresolvedContext(item);
}
}
Comment thread
alexr00 marked this conversation as resolved.

resolveExplicitChatContext(context: IssueChatContextItem, token: vscode.CancellationToken): vscode.ProviderResult<vscode.ChatContextItem> {
resolveAttachChatContext(context: IssueChatContextItem, token: vscode.CancellationToken): vscode.ProviderResult<vscode.ChatContextItem> {
return this._resolveChatContext(context, token);
}

resolveResourceChatContext(context: IssueChatContextItem, token: vscode.CancellationToken): vscode.ProviderResult<vscode.ChatContextItem> {
resolveChatTabContext(context: IssueChatContextItem, token: vscode.CancellationToken): vscode.ProviderResult<vscode.ChatContextItem> {
return this._resolveChatContext(context, token);
}

Expand All @@ -50,7 +50,7 @@ export class IssueContextProvider implements vscode.ChatExplicitContextProvider<
return context;
}

async provideExplicitChatContext(_token: vscode.CancellationToken): Promise<IssueChatContextItem[]> {
async provideAttachChatContext(_token: vscode.CancellationToken): Promise<IssueChatContextItem[]> {
const contextItems: IssueChatContextItem[] = [];
const seenIssues: Set<string> = new Set();
for (const folderManager of this._reposManager.folderManagers) {
Expand Down
10 changes: 5 additions & 5 deletions src/lm/pullRequestContextProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,33 +102,33 @@ Active pull request (may not be the same as open pull request): ${folderManager.
}
}

export class PullRequestContextProvider extends Disposable implements vscode.ChatExplicitContextProvider<PRChatContextItem>, vscode.ChatResourceContextProvider<PRChatContextItem> {
export class PullRequestContextProvider extends Disposable implements vscode.ChatAttachContextProvider<PRChatContextItem>, vscode.ChatTabContextProvider<PRChatContextItem> {
constructor(private readonly _prsTreeModel: PrsTreeModel,
private readonly _reposManager: RepositoriesManager,
private readonly _context: vscode.ExtensionContext
) {
super();
}

async provideExplicitChatContext(_token: vscode.CancellationToken): Promise<PRChatContextItem[]> {
async provideAttachChatContext(_token: vscode.CancellationToken): Promise<PRChatContextItem[]> {
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<PRChatContextItem | undefined> {
async provideChatTabContext(_options: { tab: vscode.Tab; }, _token: vscode.CancellationToken): Promise<PRChatContextItem | undefined> {
const item = PullRequestOverviewPanel.getActivePanel()?.getCurrentItem();
if (item) {
return this._prToUnresolvedContext(item);
}
}
Comment thread
alexr00 marked this conversation as resolved.

async resolveExplicitChatContext(context: PRChatContextItem, token: vscode.CancellationToken): Promise<vscode.ChatContextItem> {
async resolveAttachChatContext(context: PRChatContextItem, token: vscode.CancellationToken): Promise<vscode.ChatContextItem> {
return this._resolveChatContext(context, token);
}

async resolveResourceChatContext(context: PRChatContextItem, token: vscode.CancellationToken): Promise<vscode.ChatContextItem> {
async resolveChatTabContext(context: PRChatContextItem, token: vscode.CancellationToken): Promise<vscode.ChatContextItem> {
return this._resolveChatContext(context, token);
}

Expand Down