Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/chat/common/chatSessionsService.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { CancellationToken } from '../../../../base/common/cancellation.js';
7
import { Event } from '../../../../base/common/event.js';
8
import { IMarkdownString } from '../../../../base/common/htmlContent.js';
9
import { IDisposable } from '../../../../base/common/lifecycle.js';
10
import { IObservable } from '../../../../base/common/observable.js';
11
import { ThemeIcon } from '../../../../base/common/themables.js';
12
import { IRelaxedExtensionDescription } from '../../../../platform/extensions/common/extensions.js';
13
import { createDecorator } from '../../../../platform/instantiation/common/instantiation.js';
14
import { IEditableData } from '../../../common/views.js';
15
import { IChatAgentRequest } from './chatAgents.js';
16
import { IChatProgress } from './chatService.js';
17
18
export const enum ChatSessionStatus {
19
Failed = 0,
20
Completed = 1,
21
InProgress = 2
22
}
23
24
export interface IChatSessionsExtensionPoint {
25
readonly type: string;
26
readonly name: string;
27
readonly displayName: string;
28
readonly description: string;
29
readonly extensionDescription: IRelaxedExtensionDescription;
30
readonly when?: string;
31
readonly capabilities?: {
32
supportsFileAttachments?: boolean;
33
supportsToolAttachments?: boolean;
34
};
35
}
36
export interface IChatSessionItem {
37
id: string;
38
label: string;
39
iconPath?: ThemeIcon;
40
description?: string | IMarkdownString;
41
status?: ChatSessionStatus;
42
tooltip?: string | IMarkdownString;
43
timing?: {
44
startTime: number;
45
endTime?: number;
46
};
47
statistics?: {
48
insertions: number;
49
deletions: number;
50
};
51
52
}
53
54
export type IChatSessionHistoryItem = { type: 'request'; prompt: string; participant: string } | { type: 'response'; parts: IChatProgress[]; participant: string };
55
56
export interface ChatSession extends IDisposable {
57
readonly sessionId: string;
58
readonly onWillDispose: Event<void>;
59
history: Array<IChatSessionHistoryItem>;
60
readonly progressObs?: IObservable<IChatProgress[]>;
61
readonly isCompleteObs?: IObservable<boolean>;
62
readonly interruptActiveResponseCallback?: () => Promise<boolean>;
63
64
requestHandler?: (
65
request: IChatAgentRequest,
66
progress: (progress: IChatProgress[]) => void,
67
history: any[], // TODO: Nail down types
68
token: CancellationToken
69
) => Promise<void>;
70
}
71
72
export interface IChatSessionItemProvider {
73
readonly chatSessionType: string;
74
readonly onDidChangeChatSessionItems: Event<void>;
75
provideChatSessionItems(token: CancellationToken): Promise<IChatSessionItem[]>;
76
provideNewChatSessionItem?(options: {
77
request: IChatAgentRequest;
78
prompt?: string;
79
history?: any[];
80
metadata?: any;
81
}, token: CancellationToken): Promise<IChatSessionItem>;
82
}
83
84
export interface IChatSessionContentProvider {
85
provideChatSessionContent(sessionId: string, token: CancellationToken): Promise<ChatSession>;
86
}
87
88
export interface IChatSessionsService {
89
readonly _serviceBrand: undefined;
90
91
readonly onDidChangeItemsProviders: Event<IChatSessionItemProvider>;
92
readonly onDidChangeSessionItems: Event<string>;
93
readonly onDidChangeAvailability: Event<void>;
94
readonly onDidChangeInProgress: Event<void>;
95
96
registerChatSessionItemProvider(provider: IChatSessionItemProvider): IDisposable;
97
getAllChatSessionContributions(): IChatSessionsExtensionPoint[];
98
canResolveItemProvider(chatSessionType: string): Promise<boolean>;
99
getAllChatSessionItemProviders(): IChatSessionItemProvider[];
100
provideNewChatSessionItem(chatSessionType: string, options: {
101
request: IChatAgentRequest;
102
prompt?: string;
103
history?: any[];
104
metadata?: any;
105
}, token: CancellationToken): Promise<IChatSessionItem>;
106
provideChatSessionItems(chatSessionType: string, token: CancellationToken): Promise<IChatSessionItem[]>;
107
reportInProgress(chatSessionType: string, count: number): void;
108
getInProgress(): { displayName: string; count: number }[];
109
110
registerChatSessionContentProvider(chatSessionType: string, provider: IChatSessionContentProvider): IDisposable;
111
canResolveContentProvider(chatSessionType: string): Promise<boolean>;
112
provideChatSessionContent(chatSessionType: string, id: string, token: CancellationToken): Promise<ChatSession>;
113
114
// Editable session support
115
setEditableSession(sessionId: string, data: IEditableData | null): Promise<void>;
116
getEditableData(sessionId: string): IEditableData | undefined;
117
isEditable(sessionId: string): boolean;
118
119
// Notify providers about session items changes
120
notifySessionItemsChanged(chatSessionType: string): void;
121
}
122
123
export const IChatSessionsService = createDecorator<IChatSessionsService>('chatSessionsService');
124
125