@codingame/monaco-vscode-chat-service-override 3.2.3 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,223 +0,0 @@
1
- import { __decorate, __param } from '../../../../../../../external/tslib/tslib.es6.js';
2
- import { Emitter, Event } from 'vscode/vscode/vs/base/common/event';
3
- import { IInlineChatService } from 'vscode/vscode/vs/workbench/contrib/inlineChat/common/inlineChat';
4
- import { Range } from 'vscode/vscode/vs/editor/common/core/range';
5
- import { ITelemetryService } from 'vscode/vscode/vs/platform/telemetry/common/telemetry';
6
- import { IModelService } from 'vscode/vscode/vs/editor/common/services/model';
7
- import { ITextModelService } from 'vscode/vscode/vs/editor/common/services/resolverService';
8
- import { DisposableStore, toDisposable } from 'vscode/vscode/vs/base/common/lifecycle';
9
- import { createTextBufferFactoryFromSnapshot } from 'vscode/vscode/vs/editor/common/model/textModel';
10
- import { ILogService } from 'vscode/vscode/vs/platform/log/common/log';
11
- import { Iterable } from 'vscode/vscode/vs/base/common/iterator';
12
- import { raceCancellation } from 'vscode/vscode/vs/base/common/async';
13
- import { Session, SessionWholeRange, HunkData, StashedSession } from 'vscode/vscode/vs/workbench/contrib/inlineChat/browser/inlineChatSession';
14
- import { IEditorWorkerService } from 'vscode/vscode/vs/editor/common/services/editorWorker';
15
- import { Schemas } from 'vscode/vscode/vs/base/common/network';
16
- import { IInstantiationService } from 'vscode/vscode/vs/platform/instantiation/common/instantiation';
17
- import { generateUuid } from 'vscode/vscode/vs/base/common/uuid';
18
- import { IEditorService } from 'vscode/vscode/vs/workbench/services/editor/common/editorService';
19
- import { UntitledTextEditorInput } from 'vscode/vscode/vs/workbench/services/untitled/common/untitledTextEditorInput';
20
- import { DEFAULT_EDITOR_ASSOCIATION } from 'vscode/vscode/vs/workbench/common/editor';
21
-
22
- let InlineChatSessionServiceImpl = class InlineChatSessionServiceImpl {
23
- constructor(_inlineChatService, _telemetryService, _modelService, _textModelService, _editorWorkerService, _logService, _instaService, _editorService) {
24
- this._inlineChatService = _inlineChatService;
25
- this._telemetryService = _telemetryService;
26
- this._modelService = _modelService;
27
- this._textModelService = _textModelService;
28
- this._editorWorkerService = _editorWorkerService;
29
- this._logService = _logService;
30
- this._instaService = _instaService;
31
- this._editorService = _editorService;
32
- this._onWillStartSession = ( new Emitter());
33
- this.onWillStartSession = this._onWillStartSession.event;
34
- this._onDidMoveSession = ( new Emitter());
35
- this.onDidMoveSession = this._onDidMoveSession.event;
36
- this._onDidEndSession = ( new Emitter());
37
- this.onDidEndSession = this._onDidEndSession.event;
38
- this._onDidStashSession = ( new Emitter());
39
- this.onDidStashSession = this._onDidStashSession.event;
40
- this._sessions = ( new Map());
41
- this._keyComputers = ( new Map());
42
- this._recordings = [];
43
- }
44
- dispose() {
45
- this._onWillStartSession.dispose();
46
- this._onDidEndSession.dispose();
47
- this._sessions.forEach(x => x.store.dispose());
48
- this._sessions.clear();
49
- }
50
- async createSession(editor, options, token) {
51
- const provider = Iterable.first(this._inlineChatService.getAllProvider());
52
- if (!provider) {
53
- this._logService.trace('[IE] NO provider found');
54
- return undefined;
55
- }
56
- this._onWillStartSession.fire(editor);
57
- const textModel = editor.getModel();
58
- const selection = editor.getSelection();
59
- let rawSession;
60
- try {
61
- rawSession = await raceCancellation(Promise.resolve(provider.prepareInlineChatSession(textModel, selection, token)), token);
62
- }
63
- catch (error) {
64
- this._logService.error('[IE] FAILED to prepare session', provider.debugName);
65
- this._logService.error(error);
66
- return undefined;
67
- }
68
- if (!rawSession) {
69
- this._logService.trace('[IE] NO session', provider.debugName);
70
- return undefined;
71
- }
72
- this._logService.trace('[IE] NEW session', provider.debugName);
73
- this._logService.trace(`[IE] creating NEW session for ${editor.getId()}, ${provider.debugName}`);
74
- const store = ( new DisposableStore());
75
- store.add(this._inlineChatService.onDidChangeProviders(e => {
76
- if (e.removed === provider) {
77
- this._logService.trace(`[IE] provider GONE for ${editor.getId()}, ${provider.debugName}`);
78
- this._releaseSession(session, true);
79
- }
80
- }));
81
- const id = generateUuid();
82
- const targetUri = textModel.uri;
83
- let textModelN;
84
- if (options.editMode === "preview" ) {
85
- textModelN = store.add(this._modelService.createModel(createTextBufferFactoryFromSnapshot(textModel.createSnapshot()), { languageId: textModel.getLanguageId(), onDidChange: Event.None }, targetUri.with({ scheme: Schemas.vscode, authority: 'inline-chat', path: '', query: ( ( new URLSearchParams({ id, 'textModelN': '' })).toString()) })));
86
- }
87
- else {
88
- store.add((await this._textModelService.createModelReference(textModel.uri)));
89
- textModelN = textModel;
90
- }
91
- const textModel0 = store.add(this._modelService.createModel(createTextBufferFactoryFromSnapshot(textModel.createSnapshot()), { languageId: textModel.getLanguageId(), onDidChange: Event.None }, targetUri.with({ scheme: Schemas.vscode, authority: 'inline-chat', path: '', query: ( ( new URLSearchParams({ id, 'textModel0': '' })).toString()) }), true));
92
- if (targetUri.scheme === Schemas.untitled) {
93
- store.add(this._editorService.onDidCloseEditor(() => {
94
- if (!this._editorService.isOpened({ resource: targetUri, typeId: UntitledTextEditorInput.ID, editorId: DEFAULT_EDITOR_ASSOCIATION.id })) {
95
- this._releaseSession(session, true);
96
- }
97
- }));
98
- }
99
- let wholeRange = options.wholeRange;
100
- if (!wholeRange) {
101
- wholeRange = rawSession.wholeRange ? Range.lift(rawSession.wholeRange) : editor.getSelection();
102
- }
103
- if (token.isCancellationRequested) {
104
- store.dispose();
105
- return undefined;
106
- }
107
- const session = ( new Session(
108
- options.editMode,
109
- targetUri,
110
- textModel0,
111
- textModelN,
112
- provider,
113
- rawSession,
114
- store.add(( new SessionWholeRange(textModelN, wholeRange))),
115
- store.add(( new HunkData(this._editorWorkerService, textModel0, textModelN)))
116
- ));
117
- const key = this._key(editor, session.targetUri);
118
- if (( this._sessions.has(key))) {
119
- store.dispose();
120
- throw new Error(`Session already stored for ${key}`);
121
- }
122
- this._sessions.set(key, { session, editor, store });
123
- return session;
124
- }
125
- moveSession(session, target) {
126
- const newKey = this._key(target, session.targetUri);
127
- const existing = this._sessions.get(newKey);
128
- if (existing) {
129
- if (existing.session !== session) {
130
- throw new Error(`Cannot move session because the target editor already/still has one`);
131
- }
132
- else {
133
- return;
134
- }
135
- }
136
- let found = false;
137
- for (const [oldKey, data] of this._sessions) {
138
- if (data.session === session) {
139
- found = true;
140
- this._sessions.delete(oldKey);
141
- this._sessions.set(newKey, { ...data, editor: target });
142
- this._logService.trace(`[IE] did MOVE session for ${data.editor.getId()} to NEW EDITOR ${target.getId()}, ${session.provider.debugName}`);
143
- this._onDidMoveSession.fire({ session, editor: target });
144
- break;
145
- }
146
- }
147
- if (!found) {
148
- throw new Error(`Cannot move session because it is not stored`);
149
- }
150
- }
151
- releaseSession(session) {
152
- this._releaseSession(session, false);
153
- }
154
- _releaseSession(session, byServer) {
155
- let tuple;
156
- for (const candidate of this._sessions) {
157
- if (candidate[1].session === session) {
158
- tuple = candidate;
159
- break;
160
- }
161
- }
162
- if (!tuple) {
163
- return;
164
- }
165
- this._keepRecording(session);
166
- this._telemetryService.publicLog2('interactiveEditor/session', session.asTelemetryData());
167
- const [key, value] = tuple;
168
- this._sessions.delete(key);
169
- this._logService.trace(`[IE] did RELEASED session for ${value.editor.getId()}, ${session.provider.debugName}`);
170
- this._onDidEndSession.fire({ editor: value.editor, session, endedByExternalCause: byServer });
171
- value.store.dispose();
172
- }
173
- stashSession(session, editor, undoCancelEdits) {
174
- this._keepRecording(session);
175
- const result = this._instaService.createInstance(StashedSession, editor, session, undoCancelEdits);
176
- this._onDidStashSession.fire({ editor, session });
177
- this._logService.trace(`[IE] did STASH session for ${editor.getId()}, ${session.provider.debugName}`);
178
- return result;
179
- }
180
- getCodeEditor(session) {
181
- for (const [, data] of this._sessions) {
182
- if (data.session === session) {
183
- return data.editor;
184
- }
185
- }
186
- throw new Error('session not found');
187
- }
188
- getSession(editor, uri) {
189
- const key = this._key(editor, uri);
190
- return this._sessions.get(key)?.session;
191
- }
192
- _key(editor, uri) {
193
- const item = this._keyComputers.get(uri.scheme);
194
- return item
195
- ? item.getComparisonKey(editor, uri)
196
- : `${editor.getId()}@${( uri.toString())}`;
197
- }
198
- registerSessionKeyComputer(scheme, value) {
199
- this._keyComputers.set(scheme, value);
200
- return toDisposable(() => this._keyComputers.delete(scheme));
201
- }
202
- _keepRecording(session) {
203
- const newLen = this._recordings.unshift(session.asRecording());
204
- if (newLen > 5) {
205
- this._recordings.pop();
206
- }
207
- }
208
- recordings() {
209
- return this._recordings;
210
- }
211
- };
212
- InlineChatSessionServiceImpl = ( __decorate([
213
- ( __param(0, IInlineChatService)),
214
- ( __param(1, ITelemetryService)),
215
- ( __param(2, IModelService)),
216
- ( __param(3, ITextModelService)),
217
- ( __param(4, IEditorWorkerService)),
218
- ( __param(5, ILogService)),
219
- ( __param(6, IInstantiationService)),
220
- ( __param(7, IEditorService))
221
- ], InlineChatSessionServiceImpl));
222
-
223
- export { InlineChatSessionServiceImpl };