Skip to content

Commit 1193e69

Browse files
committed
chat session content provider
1 parent b07d301 commit 1193e69

File tree

2 files changed

+35
-17
lines changed

2 files changed

+35
-17
lines changed

src/@types/vscode.proposed.chatSessionsProvider.d.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ declare module 'vscode' {
2222
* Provides a list of chat sessions.
2323
*/
2424
provideChatSessionItems(token: CancellationToken): ProviderResult<ChatSessionItem[]>;
25-
26-
provideChatSessionContent(id: string, token: CancellationToken): Thenable<ChatSession>;
2725
}
2826

2927
export interface ChatSessionItem {
@@ -47,7 +45,7 @@ declare module 'vscode' {
4745
/**
4846
* The content that was received from the chat participant. Only the stream parts that represent actual content (not metadata) are represented.
4947
*/
50-
readonly response: ReadonlyArray<ChatResponseMarkdownPart | ChatResponseFileTreePart | ChatResponseAnchorPart | ChatResponseCommandButtonPart | ExtendedChatResponsePart>;
48+
readonly response: ReadonlyArray<ChatResponseMarkdownPart | ChatResponseFileTreePart | ChatResponseAnchorPart | ChatResponseCommandButtonPart | ExtendedChatResponsePart | ChatToolInvocationPart>;
5149

5250
/**
5351
* The result that was received from the chat participant.
@@ -64,9 +62,6 @@ declare module 'vscode' {
6462
*/
6563
readonly command?: string;
6664

67-
/**
68-
* @hidden
69-
*/
7065
constructor(response: ReadonlyArray<ChatResponseMarkdownPart | ChatResponseFileTreePart | ChatResponseAnchorPart | ChatResponseCommandButtonPart | ExtendedChatResponsePart>, result: ChatResult, participant: string);
7166
}
7267

@@ -101,7 +96,23 @@ declare module 'vscode' {
10196
readonly requestHandler: ChatRequestHandler | undefined;
10297
}
10398

99+
export interface ChatSessionContentProvider {
100+
/**
101+
* Resolves a chat session into a full `ChatSession` object.
102+
*
103+
* @param uri The URI of the chat session to open. Uris as structured as `vscode-chat-session:<chatSessionType>/id`
104+
* @param token A cancellation token that can be used to cancel the operation.
105+
*/
106+
provideChatSessionContent(id: string, token: CancellationToken): Thenable<ChatSession>;
107+
}
108+
104109
export namespace chat {
105110
export function registerChatSessionItemProvider(chatSessionType: string, provider: ChatSessionItemProvider): Disposable;
111+
112+
/**
113+
* @param chatSessionType A unique identifier for the chat session type. This is used to differentiate between different chat session providers.
114+
*/
115+
export function registerChatSessionContentProvider(chatSessionType: string, provider: ChatSessionContentProvider): Disposable;
116+
106117
}
107118
}

src/extension.ts

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -412,19 +412,26 @@ async function deferredActivate(context: vscode.ExtensionContext, showPRControll
412412
const copilotRemoteAgentManager = new CopilotRemoteAgentManager(credentialStore, reposManager, telemetry);
413413
context.subscriptions.push(copilotRemoteAgentManager);
414414
if (vscode.chat?.registerChatSessionItemProvider) {
415+
const provider = new class implements vscode.ChatSessionContentProvider, vscode.ChatSessionItemProvider {
416+
label = vscode.l10n.t('GitHub Copilot Coding Agent');
417+
provideChatSessionItems = async (token) => {
418+
return await copilotRemoteAgentManager.provideChatSessions(token);
419+
};
420+
provideChatSessionContent = async (id, token) => {
421+
return await copilotRemoteAgentManager.provideChatSessionContent(id, token);
422+
};
423+
// Events not used yet, but required by interface.
424+
onDidChangeChatSessionItems = new vscode.EventEmitter<void>().event;
425+
}();
426+
415427
context.subscriptions.push(vscode.chat?.registerChatSessionItemProvider(
416428
'copilot-swe-agent',
417-
{
418-
label: vscode.l10n.t('GitHub Copilot Coding Agent'),
419-
provideChatSessionItems: async (token) => {
420-
return await copilotRemoteAgentManager.provideChatSessions(token);
421-
},
422-
provideChatSessionContent: async (id, token) => {
423-
return await copilotRemoteAgentManager.provideChatSessionContent(id, token);
424-
},
425-
// Events not used yet, but required by interface.
426-
onDidChangeChatSessionItems: new vscode.EventEmitter<void>().event,
427-
}
429+
provider
430+
));
431+
432+
context.subscriptions.push(vscode.chat?.registerChatSessionContentProvider(
433+
'copilot-swe-agent',
434+
provider
428435
));
429436
}
430437

0 commit comments

Comments
 (0)