@codingame/monaco-vscode-notebook-service-override 3.2.3 → 4.1.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.
Files changed (80) hide show
  1. package/notebook.js +13 -13
  2. package/package.json +2 -2
  3. package/external/rollup-plugin-styles/dist/runtime/inject-css.js +0 -3
  4. package/external/tslib/tslib.es6.js +0 -11
  5. package/override/vs/platform/dialogs/common/dialogs.js +0 -8
  6. package/vscode/src/vs/workbench/contrib/codeEditor/browser/emptyTextEditorHint/emptyTextEditorHint.css.js +0 -6
  7. package/vscode/src/vs/workbench/contrib/codeEditor/browser/emptyTextEditorHint/emptyTextEditorHint.js +0 -389
  8. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/cellCommands/cellCommands.js +0 -608
  9. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/cellStatusBar/contributedStatusBarItemController.js +0 -109
  10. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/cellStatusBar/statusBarProviders.js +0 -173
  11. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/clipboard/notebookClipboard.js +0 -488
  12. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/debug/notebookBreakpoints.js +0 -106
  13. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/debug/notebookCellPausing.js +0 -67
  14. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/debug/notebookDebugDecorations.js +0 -165
  15. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/editorHint/emptyCellEditorHint.js +0 -67
  16. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/editorStatusBar/editorStatusBar.js +0 -320
  17. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/execute/executionEditorProgress.js +0 -72
  18. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/media/notebookFind.css.js +0 -6
  19. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFind.js +0 -168
  20. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/format/formatting.js +0 -209
  21. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/gettingStarted/notebookGettingStarted.js +0 -84
  22. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/kernelDetection/notebookKernelDetection.js +0 -82
  23. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/layout/layoutActions.js +0 -67
  24. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/marker/markerProvider.js +0 -91
  25. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/navigation/arrow.js +0 -393
  26. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/notebookVariables/notebookVariableContextKeys.js +0 -5
  27. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/notebookVariables/notebookVariables.js +0 -97
  28. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/notebookVariables/notebookVariablesDataSource.js +0 -118
  29. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/notebookVariables/notebookVariablesTree.js +0 -59
  30. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/notebookVariables/notebookVariablesView.js +0 -148
  31. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/outline/notebookOutline.js +0 -383
  32. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/profile/notebookProfile.js +0 -77
  33. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/saveParticipants/saveParticipants.js +0 -511
  34. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/troubleshoot/layout.js +0 -159
  35. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/undoRedo/notebookUndoRedo.js +0 -56
  36. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/viewportWarmup/viewportWarmup.js +0 -94
  37. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/apiActions.js +0 -51
  38. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +0 -565
  39. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +0 -31
  40. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatController.js +0 -744
  41. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/executeActions.js +0 -707
  42. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/insertCellActions.js +0 -351
  43. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/layoutActions.js +0 -267
  44. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffCellEditorOptions.js +0 -45
  45. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffComponents.js +0 -1297
  46. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffElementOutputs.js +0 -284
  47. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffElementViewModel.js +0 -563
  48. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/diffNestedCellViewModel.js +0 -108
  49. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/eventDispatcher.js +0 -39
  50. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiff.css.js +0 -6
  51. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffActions.js +0 -313
  52. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffEditor.js +0 -890
  53. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffEditorBrowser.js +0 -13
  54. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffList.js +0 -393
  55. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/notebookDiffOverviewRuler.js +0 -175
  56. package/vscode/src/vs/workbench/contrib/notebook/browser/notebook.contribution.js +0 -1174
  57. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookAccessibility.js +0 -159
  58. package/vscode/src/vs/workbench/contrib/notebook/browser/notebookExtensionPoint.js +0 -451
  59. package/vscode/src/vs/workbench/contrib/notebook/browser/services/notebookEditorServiceImpl.js +0 -192
  60. package/vscode/src/vs/workbench/contrib/notebook/browser/services/notebookExecutionServiceImpl.js +0 -106
  61. package/vscode/src/vs/workbench/contrib/notebook/browser/services/notebookExecutionStateServiceImpl.js +0 -509
  62. package/vscode/src/vs/workbench/contrib/notebook/browser/services/notebookKernelHistoryServiceImpl.js +0 -130
  63. package/vscode/src/vs/workbench/contrib/notebook/browser/services/notebookKernelServiceImpl.js +0 -341
  64. package/vscode/src/vs/workbench/contrib/notebook/browser/services/notebookKeymapServiceImpl.js +0 -111
  65. package/vscode/src/vs/workbench/contrib/notebook/browser/services/notebookLoggingServiceImpl.js +0 -28
  66. package/vscode/src/vs/workbench/contrib/notebook/browser/services/notebookRendererMessagingServiceImpl.js +0 -65
  67. package/vscode/src/vs/workbench/contrib/notebook/browser/services/notebookServiceImpl.js +0 -641
  68. package/vscode/src/vs/workbench/contrib/notebook/browser/services/notebookWorkerServiceImpl.js +0 -200
  69. package/vscode/src/vs/workbench/contrib/notebook/common/model/cellEdit.js +0 -80
  70. package/vscode/src/vs/workbench/contrib/notebook/common/model/notebookTextModel.js +0 -1003
  71. package/vscode/src/vs/workbench/contrib/notebook/common/notebookDiffEditorInput.js +0 -103
  72. package/vscode/src/vs/workbench/contrib/notebook/common/notebookEditorModelResolverServiceImpl.js +0 -202
  73. package/vscode/src/vs/workbench/contrib/notebook/common/notebookOutputRenderer.js +0 -80
  74. package/vscode/src/vs/workbench/contrib/notebook/common/notebookProvider.js +0 -98
  75. package/vscode/src/vs/workbench/contrib/search/browser/notebookSearch/notebookSearchService.js +0 -237
  76. package/vscode/src/vs/workbench/services/workingCopy/common/abstractFileWorkingCopyManager.js +0 -89
  77. package/vscode/src/vs/workbench/services/workingCopy/common/fileWorkingCopyManager.js +0 -376
  78. package/vscode/src/vs/workbench/services/workingCopy/common/storedFileWorkingCopyManager.js +0 -408
  79. package/vscode/src/vs/workbench/services/workingCopy/common/untitledFileWorkingCopy.js +0 -144
  80. package/vscode/src/vs/workbench/services/workingCopy/common/untitledFileWorkingCopyManager.js +0 -129
@@ -1,744 +0,0 @@
1
- import { __decorate, __param } from '../../../../../../../../../external/tslib/tslib.es6.js';
2
- import { getWindow, scheduleAtNextAnimationFrame, trackFocus, WindowIntervalTimer, Dimension } from 'vscode/vscode/vs/base/browser/dom';
3
- import { disposableTimeout, createCancelablePromise, Queue, raceCancellationError } from 'vscode/vscode/vs/base/common/async';
4
- import { CancellationTokenSource } from 'vscode/vscode/vs/base/common/cancellation';
5
- import { Event } from 'vscode/vscode/vs/base/common/event';
6
- import { MarkdownString } from 'vscode/vscode/vs/base/common/htmlContent';
7
- import { Disposable, DisposableStore } from 'vscode/vscode/vs/base/common/lifecycle';
8
- import { Schemas } from 'vscode/vscode/vs/base/common/network';
9
- import { MovingAverage } from 'vscode/vscode/vs/base/common/numbers';
10
- import { StopWatch } from 'vscode/vscode/vs/base/common/stopwatch';
11
- import { assertType } from 'vscode/vscode/vs/base/common/types';
12
- import { generateUuid } from 'vscode/vscode/vs/base/common/uuid';
13
- import { CodeEditorWidget } from 'vscode/vscode/vs/editor/browser/widget/codeEditorWidget';
14
- import { Selection } from 'vscode/vscode/vs/editor/common/core/selection';
15
- import { TextEdit } from 'vscode/vscode/vs/editor/common/languages';
16
- import { ILanguageService } from 'vscode/vscode/vs/editor/common/languages/language';
17
- import { IEditorWorkerService } from 'vscode/vscode/vs/editor/common/services/editorWorker';
18
- import { IModelService } from 'vscode/vscode/vs/editor/common/services/model';
19
- import { localizeWithPath } from 'vscode/vscode/vs/nls';
20
- import { ICommandService } from 'vscode/vscode/vs/platform/commands/common/commands';
21
- import { IContextKeyService } from 'vscode/vscode/vs/platform/contextkey/common/contextkey';
22
- import { IInstantiationService } from 'vscode/vscode/vs/platform/instantiation/common/instantiation';
23
- import { AsyncProgress } from 'vscode/vscode/vs/platform/progress/common/progress';
24
- import { countWords } from 'vscode/vscode/vs/workbench/contrib/chat/common/chatWordCounter';
25
- import { IInlineChatSavingService } from 'vscode/vscode/vs/workbench/contrib/inlineChat/browser/inlineChatSavingService';
26
- import { SessionPrompt, EmptyResponse, ReplyResponse, ErrorResponse, SessionExchange } from 'vscode/vscode/vs/workbench/contrib/inlineChat/browser/inlineChatSession';
27
- import { IInlineChatSessionService } from 'vscode/vscode/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService';
28
- import { InlineChatWidget } from 'vscode/vscode/vs/workbench/contrib/inlineChat/browser/inlineChatWidget';
29
- import { performAsyncTextEdit, asProgressiveEdit } from 'vscode/vscode/vs/workbench/contrib/inlineChat/browser/utils';
30
- import { CTX_INLINE_CHAT_LAST_RESPONSE_TYPE } from 'vscode/vscode/vs/workbench/contrib/inlineChat/common/inlineChat';
31
- import { insertCell, runDeleteAction } from 'vscode/vscode/vs/workbench/contrib/notebook/browser/controller/cellOperations';
32
- import { CTX_NOTEBOOK_CHAT_HAS_ACTIVE_REQUEST, CTX_NOTEBOOK_CELL_CHAT_FOCUSED, CTX_NOTEBOOK_CHAT_USER_DID_EDIT, CTX_NOTEBOOK_CHAT_OUTER_FOCUS_POSITION, MENU_CELL_CHAT_INPUT, MENU_CELL_CHAT_WIDGET, MENU_CELL_CHAT_WIDGET_STATUS, MENU_CELL_CHAT_WIDGET_FEEDBACK } from './notebookChatContext.js';
33
- import { ScrollToRevealBehavior } from 'vscode/vscode/vs/workbench/contrib/notebook/browser/notebookBrowser';
34
- import { registerNotebookContribution } from 'vscode/vscode/vs/workbench/contrib/notebook/browser/notebookEditorExtensions';
35
- import { CellKind } from 'vscode/vscode/vs/workbench/contrib/notebook/common/notebookCommon';
36
- import { NotebookExecutionType, INotebookExecutionStateService } from 'vscode/vscode/vs/workbench/contrib/notebook/common/notebookExecutionStateService';
37
-
38
- var NotebookChatController_1;
39
- const WIDGET_MARGIN_BOTTOM = 16;
40
- class NotebookChatWidget extends Disposable {
41
- set afterModelPosition(afterModelPosition) {
42
- this.notebookViewZone.afterModelPosition = afterModelPosition;
43
- }
44
- get afterModelPosition() {
45
- return this.notebookViewZone.afterModelPosition;
46
- }
47
- set heightInPx(heightInPx) {
48
- this.notebookViewZone.heightInPx = heightInPx;
49
- }
50
- get heightInPx() {
51
- return this.notebookViewZone.heightInPx;
52
- }
53
- get editingCell() {
54
- return this._editingCell;
55
- }
56
- constructor(_notebookEditor, id, notebookViewZone, domNode, widgetContainer, inlineChatWidget, parentEditor, _languageService) {
57
- super();
58
- this._notebookEditor = _notebookEditor;
59
- this.id = id;
60
- this.notebookViewZone = notebookViewZone;
61
- this.domNode = domNode;
62
- this.widgetContainer = widgetContainer;
63
- this.inlineChatWidget = inlineChatWidget;
64
- this.parentEditor = parentEditor;
65
- this._languageService = _languageService;
66
- this._editingCell = null;
67
- this._register(inlineChatWidget.onDidChangeHeight(() => {
68
- this.heightInPx = inlineChatWidget.getHeight() + WIDGET_MARGIN_BOTTOM;
69
- this._notebookEditor.changeViewZones(accessor => {
70
- accessor.layoutZone(id);
71
- });
72
- this._layoutWidget(inlineChatWidget, widgetContainer);
73
- }));
74
- this._layoutWidget(inlineChatWidget, widgetContainer);
75
- }
76
- focus() {
77
- this.inlineChatWidget.focus();
78
- }
79
- getEditingCell() {
80
- return this._editingCell;
81
- }
82
- async getOrCreateEditingCell() {
83
- if (this._editingCell) {
84
- await this._notebookEditor.focusNotebookCell(this._editingCell, 'editor');
85
- if (this._notebookEditor.activeCodeEditor?.hasModel()) {
86
- return {
87
- cell: this._editingCell,
88
- editor: this._notebookEditor.activeCodeEditor
89
- };
90
- }
91
- else {
92
- return undefined;
93
- }
94
- }
95
- if (!this._notebookEditor.hasModel()) {
96
- return undefined;
97
- }
98
- this._editingCell = insertCell(this._languageService, this._notebookEditor, this.afterModelPosition, CellKind.Code, 'above');
99
- if (!this._editingCell) {
100
- return undefined;
101
- }
102
- await this._notebookEditor.focusNotebookCell(this._editingCell, 'editor', { revealBehavior: ScrollToRevealBehavior.firstLine });
103
- if (this._notebookEditor.activeCodeEditor?.hasModel()) {
104
- return {
105
- cell: this._editingCell,
106
- editor: this._notebookEditor.activeCodeEditor
107
- };
108
- }
109
- return undefined;
110
- }
111
- async discardChange() {
112
- if (this._notebookEditor.hasModel() && this._editingCell) {
113
- runDeleteAction(this._notebookEditor, this._editingCell);
114
- }
115
- }
116
- _layoutWidget(inlineChatWidget, widgetContainer) {
117
- const layoutConfiguration = this._notebookEditor.notebookOptions.getLayoutConfiguration();
118
- const rightMargin = layoutConfiguration.cellRightMargin;
119
- const leftMargin = this._notebookEditor.notebookOptions.getCellEditorContainerLeftMargin();
120
- const maxWidth = !inlineChatWidget.showsAnyPreview() ? 640 : Number.MAX_SAFE_INTEGER;
121
- const width = Math.min(maxWidth, this._notebookEditor.getLayoutInfo().width - leftMargin - rightMargin);
122
- inlineChatWidget.layout(( new Dimension(width, 80 + WIDGET_MARGIN_BOTTOM)));
123
- inlineChatWidget.domNode.style.width = `${width}px`;
124
- widgetContainer.style.left = `${leftMargin}px`;
125
- }
126
- dispose() {
127
- this._notebookEditor.changeViewZones(accessor => {
128
- accessor.removeZone(this.id);
129
- });
130
- this.domNode.remove();
131
- super.dispose();
132
- }
133
- }
134
- let NotebookChatController = class NotebookChatController extends Disposable {
135
- static { NotebookChatController_1 = this; }
136
- static { this.id = 'workbench.notebook.chatController'; }
137
- static { this.counter = 0; }
138
- static get(editor) {
139
- return editor.getContribution(NotebookChatController_1.id);
140
- }
141
- constructor(_notebookEditor, _instantiationService, _inlineChatSessionService, _contextKeyService, _commandService, _editorWorkerService, _inlineChatSavingService, _modelService, _languageService, _executionStateService) {
142
- super();
143
- this._notebookEditor = _notebookEditor;
144
- this._instantiationService = _instantiationService;
145
- this._inlineChatSessionService = _inlineChatSessionService;
146
- this._contextKeyService = _contextKeyService;
147
- this._commandService = _commandService;
148
- this._editorWorkerService = _editorWorkerService;
149
- this._inlineChatSavingService = _inlineChatSavingService;
150
- this._modelService = _modelService;
151
- this._languageService = _languageService;
152
- this._executionStateService = _executionStateService;
153
- this._userEditingDisposables = this._register(( new DisposableStore()));
154
- this._widgetDisposableStore = this._register(( new DisposableStore()));
155
- this._ctxHasActiveRequest = CTX_NOTEBOOK_CHAT_HAS_ACTIVE_REQUEST.bindTo(this._contextKeyService);
156
- this._ctxCellWidgetFocused = CTX_NOTEBOOK_CELL_CHAT_FOCUSED.bindTo(this._contextKeyService);
157
- this._ctxLastResponseType = CTX_INLINE_CHAT_LAST_RESPONSE_TYPE.bindTo(this._contextKeyService);
158
- this._ctxUserDidEdit = CTX_NOTEBOOK_CHAT_USER_DID_EDIT.bindTo(this._contextKeyService);
159
- this._ctxOuterFocusPosition = CTX_NOTEBOOK_CHAT_OUTER_FOCUS_POSITION.bindTo(this._contextKeyService);
160
- this._registerFocusTracker();
161
- }
162
- _registerFocusTracker() {
163
- this._register(this._notebookEditor.onDidChangeFocus(() => {
164
- if (!this._widget) {
165
- this._ctxOuterFocusPosition.set('');
166
- return;
167
- }
168
- const widgetIndex = this._widget.afterModelPosition;
169
- const focus = this._notebookEditor.getFocus().start;
170
- if (focus + 1 === widgetIndex) {
171
- this._ctxOuterFocusPosition.set('above');
172
- }
173
- else if (focus === widgetIndex) {
174
- this._ctxOuterFocusPosition.set('below');
175
- }
176
- else {
177
- this._ctxOuterFocusPosition.set('');
178
- }
179
- }));
180
- }
181
- run(index, input, autoSend) {
182
- if (this._widget) {
183
- if (this._widget.afterModelPosition === index) ;
184
- else {
185
- const window = getWindow(this._widget.domNode);
186
- this._widget.dispose();
187
- this._widget = undefined;
188
- this._widgetDisposableStore.clear();
189
- scheduleAtNextAnimationFrame(window, () => {
190
- this._createWidget(index, input, autoSend);
191
- });
192
- }
193
- return;
194
- }
195
- this._createWidget(index, input, autoSend);
196
- }
197
- _createWidget(index, input, autoSend) {
198
- if (!this._notebookEditor.hasModel()) {
199
- return;
200
- }
201
- this._widgetDisposableStore.clear();
202
- const viewZoneContainer = document.createElement('div');
203
- viewZoneContainer.classList.add('monaco-editor');
204
- const widgetContainer = document.createElement('div');
205
- widgetContainer.style.position = 'absolute';
206
- viewZoneContainer.appendChild(widgetContainer);
207
- this._focusTracker = this._widgetDisposableStore.add(trackFocus(viewZoneContainer));
208
- this._widgetDisposableStore.add(this._focusTracker.onDidFocus(() => {
209
- this._updateNotebookEditorFocusNSelections();
210
- }));
211
- const fakeParentEditorElement = document.createElement('div');
212
- const fakeParentEditor = this._widgetDisposableStore.add(this._instantiationService.createInstance(CodeEditorWidget, fakeParentEditorElement, {}, { isSimpleWidget: true }));
213
- const inputBoxFragment = `notebook-chat-input-${NotebookChatController_1.counter++}`;
214
- const notebookUri = this._notebookEditor.textModel.uri;
215
- const inputUri = notebookUri.with({ scheme: Schemas.untitled, fragment: inputBoxFragment });
216
- const result = this._modelService.createModel('', null, inputUri, false);
217
- fakeParentEditor.setModel(result);
218
- const inlineChatWidget = this._widgetDisposableStore.add(this._instantiationService.createInstance(InlineChatWidget, fakeParentEditor, {
219
- menuId: MENU_CELL_CHAT_INPUT,
220
- widgetMenuId: MENU_CELL_CHAT_WIDGET,
221
- statusMenuId: MENU_CELL_CHAT_WIDGET_STATUS,
222
- feedbackMenuId: MENU_CELL_CHAT_WIDGET_FEEDBACK
223
- }));
224
- inlineChatWidget.placeholder = ( localizeWithPath(
225
- 'vs/workbench/contrib/notebook/browser/controller/chat/notebookChatController',
226
- 'default.placeholder',
227
- "Ask a question"
228
- ));
229
- inlineChatWidget.updateInfo(( localizeWithPath(
230
- 'vs/workbench/contrib/notebook/browser/controller/chat/notebookChatController',
231
- 'welcome.1',
232
- "AI-generated code may be incorrect"
233
- )));
234
- widgetContainer.appendChild(inlineChatWidget.domNode);
235
- this._widgetDisposableStore.add(inlineChatWidget.onDidChangeInput(() => {
236
- this._warmupRequestCts?.dispose(true);
237
- this._warmupRequestCts = undefined;
238
- }));
239
- this._notebookEditor.changeViewZones(accessor => {
240
- const notebookViewZone = {
241
- afterModelPosition: index,
242
- heightInPx: 80 + WIDGET_MARGIN_BOTTOM,
243
- domNode: viewZoneContainer
244
- };
245
- const id = accessor.addZone(notebookViewZone);
246
- this._scrollWidgetIntoView(index);
247
- this._widget = ( new NotebookChatWidget(
248
- this._notebookEditor,
249
- id,
250
- notebookViewZone,
251
- viewZoneContainer,
252
- widgetContainer,
253
- inlineChatWidget,
254
- fakeParentEditor,
255
- this._languageService
256
- ));
257
- this._ctxCellWidgetFocused.set(true);
258
- disposableTimeout(() => {
259
- this._focusWidget();
260
- }, 0, this._store);
261
- this._sessionCtor = createCancelablePromise(async (token) => {
262
- if (fakeParentEditor.hasModel()) {
263
- await this._startSession(fakeParentEditor, token);
264
- this._warmupRequestCts = ( new CancellationTokenSource());
265
- this._startInitialFolowups(fakeParentEditor, this._warmupRequestCts.token);
266
- if (this._widget) {
267
- this._widget.inlineChatWidget.placeholder = this._activeSession?.session.placeholder ?? ( localizeWithPath(
268
- 'vs/workbench/contrib/notebook/browser/controller/chat/notebookChatController',
269
- 'default.placeholder',
270
- "Ask a question"
271
- ));
272
- this._widget.inlineChatWidget.updateInfo(this._activeSession?.session.message ?? ( localizeWithPath(
273
- 'vs/workbench/contrib/notebook/browser/controller/chat/notebookChatController',
274
- 'welcome.1',
275
- "AI-generated code may be incorrect"
276
- )));
277
- this._widget.inlineChatWidget.updateSlashCommands(this._activeSession?.session.slashCommands ?? []);
278
- this._focusWidget();
279
- }
280
- if (this._widget && input) {
281
- this._widget.inlineChatWidget.value = input;
282
- if (autoSend) {
283
- this.acceptInput();
284
- }
285
- }
286
- }
287
- });
288
- });
289
- }
290
- _scrollWidgetIntoView(index) {
291
- if (index === 0 || this._notebookEditor.getLength() === 0) {
292
- this._notebookEditor.revealOffsetInCenterIfOutsideViewport(0);
293
- }
294
- else {
295
- const previousCell = this._notebookEditor.cellAt(Math.min(index - 1, this._notebookEditor.getLength() - 1));
296
- if (previousCell) {
297
- const cellTop = this._notebookEditor.getAbsoluteTopOfElement(previousCell);
298
- const cellHeight = this._notebookEditor.getHeightOfElement(previousCell);
299
- this._notebookEditor.revealOffsetInCenterIfOutsideViewport(cellTop + cellHeight + 48 );
300
- }
301
- }
302
- }
303
- _focusWidget() {
304
- if (!this._widget) {
305
- return;
306
- }
307
- this._updateNotebookEditorFocusNSelections();
308
- this._widget.focus();
309
- }
310
- _updateNotebookEditorFocusNSelections() {
311
- if (!this._widget) {
312
- return;
313
- }
314
- this._notebookEditor.focusContainer(true);
315
- this._notebookEditor.setFocus({ start: this._widget.afterModelPosition, end: this._widget.afterModelPosition });
316
- this._notebookEditor.setSelections([{
317
- start: this._widget.afterModelPosition,
318
- end: this._widget.afterModelPosition
319
- }]);
320
- }
321
- async acceptInput() {
322
- assertType(this._widget);
323
- await this._sessionCtor;
324
- assertType(this._activeSession);
325
- this._warmupRequestCts?.dispose(true);
326
- this._warmupRequestCts = undefined;
327
- this._activeSession.addInput(( new SessionPrompt(this._widget.inlineChatWidget.value)));
328
- assertType(this._activeSession.lastInput);
329
- const value = this._activeSession.lastInput.value;
330
- const editor = this._widget.parentEditor;
331
- const model = editor.getModel();
332
- if (!editor.hasModel() || !model) {
333
- return;
334
- }
335
- if (this._widget.editingCell && this._widget.editingCell.textBuffer.getLength() > 0) {
336
- const ref = await this._widget.editingCell.resolveTextModel();
337
- ref.setValue('');
338
- }
339
- const editingCellIndex = this._widget.editingCell ? this._notebookEditor.getCellIndex(this._widget.editingCell) : undefined;
340
- if (editingCellIndex !== undefined) {
341
- this._notebookEditor.setSelections([{
342
- start: editingCellIndex,
343
- end: editingCellIndex + 1
344
- }]);
345
- }
346
- else {
347
- this._notebookEditor.setSelections([{
348
- start: this._widget.afterModelPosition,
349
- end: this._widget.afterModelPosition
350
- }]);
351
- }
352
- this._ctxHasActiveRequest.set(true);
353
- this._widget.inlineChatWidget.updateSlashCommands(this._activeSession.session.slashCommands ?? []);
354
- this._widget?.inlineChatWidget.updateProgress(true);
355
- const request = {
356
- requestId: generateUuid(),
357
- prompt: value,
358
- attempt: this._activeSession.lastInput.attempt,
359
- selection: { selectionStartLineNumber: 1, selectionStartColumn: 1, positionLineNumber: 1, positionColumn: 1 },
360
- wholeRange: { startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 1 },
361
- live: true,
362
- previewDocument: model.uri,
363
- withIntentDetection: true,
364
- };
365
- this._activeRequestCts?.cancel();
366
- this._activeRequestCts = ( new CancellationTokenSource());
367
- const progressEdits = [];
368
- const progressiveEditsQueue = ( new Queue());
369
- const progressiveEditsClock = StopWatch.create();
370
- const progressiveEditsAvgDuration = ( new MovingAverage());
371
- const progressiveEditsCts = ( new CancellationTokenSource(this._activeRequestCts.token));
372
- let progressiveChatResponse;
373
- const progress = ( new AsyncProgress(async (data) => {
374
- if (this._activeRequestCts?.token.isCancellationRequested) {
375
- return;
376
- }
377
- if (data.message) {
378
- this._widget?.inlineChatWidget.updateToolbar(false);
379
- this._widget?.inlineChatWidget.updateInfo(data.message);
380
- }
381
- if (data.edits?.length) {
382
- if (!request.live) {
383
- throw new Error('Progress in NOT supported in non-live mode');
384
- }
385
- progressEdits.push(data.edits);
386
- progressiveEditsAvgDuration.update(progressiveEditsClock.elapsed());
387
- progressiveEditsClock.reset();
388
- progressiveEditsQueue.queue(async () => {
389
- await this._makeChanges(data.edits, data.editsShouldBeInstant
390
- ? undefined
391
- : { duration: progressiveEditsAvgDuration.value, token: progressiveEditsCts.token });
392
- });
393
- }
394
- if (data.markdownFragment) {
395
- if (!progressiveChatResponse) {
396
- const message = {
397
- message: ( new MarkdownString(
398
- data.markdownFragment,
399
- { supportThemeIcons: true, supportHtml: true, isTrusted: false }
400
- )),
401
- providerId: this._activeSession.provider.debugName,
402
- requestId: request.requestId,
403
- };
404
- progressiveChatResponse = this._widget?.inlineChatWidget.updateChatMessage(message, true);
405
- }
406
- else {
407
- progressiveChatResponse.appendContent(data.markdownFragment);
408
- }
409
- }
410
- }));
411
- const task = this._activeSession.provider.provideResponse(this._activeSession.session, request, progress, this._activeRequestCts.token);
412
- let response;
413
- try {
414
- this._widget?.inlineChatWidget.updateChatMessage(undefined);
415
- this._widget?.inlineChatWidget.updateFollowUps(undefined);
416
- this._widget?.inlineChatWidget.updateProgress(true);
417
- this._widget?.inlineChatWidget.updateInfo(!this._activeSession.lastExchange ? ( localizeWithPath(
418
- 'vs/workbench/contrib/notebook/browser/controller/chat/notebookChatController',
419
- 'thinking',
420
- "Thinking\u2026"
421
- )) : '');
422
- this._ctxHasActiveRequest.set(true);
423
- const reply = await raceCancellationError(Promise.resolve(task), this._activeRequestCts.token);
424
- if (progressiveEditsQueue.size > 0) {
425
- await Event.toPromise(progressiveEditsQueue.onDrained);
426
- }
427
- await progress.drain();
428
- if (!reply) {
429
- response = ( new EmptyResponse());
430
- }
431
- else {
432
- const markdownContents = ( new MarkdownString('', { supportThemeIcons: true, supportHtml: true, isTrusted: false }));
433
- const replyResponse = response = this._instantiationService.createInstance(ReplyResponse, reply, markdownContents, this._activeSession.textModelN.uri, this._activeSession.textModelN.getAlternativeVersionId(), progressEdits, request.requestId);
434
- for (let i = progressEdits.length; i < replyResponse.allLocalEdits.length; i++) {
435
- await this._makeChanges(replyResponse.allLocalEdits[i], undefined);
436
- }
437
- if (this._activeSession?.provider.provideFollowups) {
438
- const followupCts = ( new CancellationTokenSource());
439
- const followups = await this._activeSession.provider.provideFollowups(this._activeSession.session, replyResponse.raw, followupCts.token);
440
- if (followups && this._widget) {
441
- const widget = this._widget;
442
- widget.inlineChatWidget.updateFollowUps(followups, async (followup) => {
443
- if (followup.kind === 'reply') {
444
- widget.inlineChatWidget.value = followup.message;
445
- this.acceptInput();
446
- }
447
- else {
448
- await this.acceptSession();
449
- this._commandService.executeCommand(followup.commandId, ...(followup.args ?? []));
450
- }
451
- });
452
- }
453
- }
454
- this._userEditingDisposables.clear();
455
- const editingCell = this._widget.getEditingCell();
456
- if (editingCell) {
457
- this._userEditingDisposables.add(editingCell.model.onDidChangeContent(() => this._updateUserEditingState()));
458
- this._userEditingDisposables.add(editingCell.model.onDidChangeLanguage(() => this._updateUserEditingState()));
459
- this._userEditingDisposables.add(editingCell.model.onDidChangeMetadata(() => this._updateUserEditingState()));
460
- this._userEditingDisposables.add(editingCell.model.onDidChangeInternalMetadata(() => this._updateUserEditingState()));
461
- this._userEditingDisposables.add(editingCell.model.onDidChangeOutputs(() => this._updateUserEditingState()));
462
- this._userEditingDisposables.add(this._executionStateService.onDidChangeExecution(e => {
463
- if (e.type === NotebookExecutionType.cell && e.affectsCell(editingCell.uri)) {
464
- this._updateUserEditingState();
465
- }
466
- }));
467
- }
468
- }
469
- }
470
- catch (e) {
471
- response = ( new ErrorResponse(e));
472
- }
473
- finally {
474
- this._ctxHasActiveRequest.set(false);
475
- this._widget?.inlineChatWidget.updateProgress(false);
476
- this._widget?.inlineChatWidget.updateInfo('');
477
- this._widget?.inlineChatWidget.updateToolbar(true);
478
- }
479
- this._ctxHasActiveRequest.set(false);
480
- this._widget?.inlineChatWidget.updateProgress(false);
481
- this._widget?.inlineChatWidget.updateInfo('');
482
- this._widget?.inlineChatWidget.updateToolbar(true);
483
- this._activeSession?.addExchange(( new SessionExchange(this._activeSession.lastInput, response)));
484
- this._ctxLastResponseType.set(response instanceof ReplyResponse ? response.raw.type : undefined);
485
- }
486
- async _startSession(editor, token) {
487
- if (this._activeSession) {
488
- this._inlineChatSessionService.releaseSession(this._activeSession);
489
- }
490
- const session = await this._inlineChatSessionService.createSession(editor, { editMode: "live" }, token);
491
- if (!session) {
492
- return;
493
- }
494
- this._activeSession = session;
495
- this._strategy = ( new EditStrategy(session));
496
- }
497
- async _startInitialFolowups(editor, token) {
498
- if (!this._activeSession || !this._activeSession.provider.provideFollowups) {
499
- return;
500
- }
501
- const request = {
502
- requestId: generateUuid(),
503
- prompt: '',
504
- attempt: 0,
505
- selection: { selectionStartLineNumber: 1, selectionStartColumn: 1, positionLineNumber: 1, positionColumn: 1 },
506
- wholeRange: { startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 1 },
507
- live: true,
508
- previewDocument: editor.getModel().uri,
509
- withIntentDetection: true
510
- };
511
- const progress = ( new AsyncProgress(async (data) => { }));
512
- const task = this._activeSession.provider.provideResponse(this._activeSession.session, request, progress, token);
513
- const reply = await raceCancellationError(Promise.resolve(task), token);
514
- if (token.isCancellationRequested) {
515
- return;
516
- }
517
- if (!reply) {
518
- return;
519
- }
520
- const markdownContents = ( new MarkdownString('', { supportThemeIcons: true, supportHtml: true, isTrusted: false }));
521
- const response = this._instantiationService.createInstance(ReplyResponse, reply, markdownContents, this._activeSession.textModelN.uri, this._activeSession.textModelN.getAlternativeVersionId(), [], request.requestId);
522
- const followups = await this._activeSession.provider.provideFollowups(this._activeSession.session, response.raw, token);
523
- if (followups && this._widget) {
524
- const widget = this._widget;
525
- widget.inlineChatWidget.updateFollowUps(followups, async (followup) => {
526
- if (followup.kind === 'reply') {
527
- widget.inlineChatWidget.value = followup.message;
528
- this.acceptInput();
529
- }
530
- else {
531
- await this.acceptSession();
532
- this._commandService.executeCommand(followup.commandId, ...(followup.args ?? []));
533
- }
534
- });
535
- }
536
- }
537
- async _makeChanges(edits, opts) {
538
- assertType(this._activeSession);
539
- assertType(this._strategy);
540
- assertType(this._widget);
541
- const editingCell = await this._widget.getOrCreateEditingCell();
542
- if (!editingCell) {
543
- return;
544
- }
545
- const editor = editingCell.editor;
546
- const moreMinimalEdits = await this._editorWorkerService.computeMoreMinimalEdits(editor.getModel().uri, edits);
547
- if (moreMinimalEdits?.length === 0) {
548
- return;
549
- }
550
- const actualEdits = !opts && moreMinimalEdits ? moreMinimalEdits : edits;
551
- const editOperations = ( actualEdits.map(TextEdit.asEditOperation));
552
- this._inlineChatSavingService.markChanged(this._activeSession);
553
- try {
554
- this._activeSession.wholeRange.trackEdits(editOperations);
555
- if (opts) {
556
- await this._strategy.makeProgressiveChanges(editor, editOperations, opts);
557
- }
558
- else {
559
- await this._strategy.makeChanges(editor, editOperations);
560
- }
561
- }
562
- finally {
563
- }
564
- }
565
- _updateUserEditingState() {
566
- this._ctxUserDidEdit.set(true);
567
- }
568
- async acceptSession() {
569
- assertType(this._activeSession);
570
- assertType(this._strategy);
571
- const editor = this._widget?.parentEditor;
572
- if (!editor?.hasModel()) {
573
- return;
574
- }
575
- try {
576
- await this._strategy.apply(editor);
577
- this._inlineChatSessionService.releaseSession(this._activeSession);
578
- }
579
- catch (_err) { }
580
- this.dismiss();
581
- }
582
- async focusAbove() {
583
- if (!this._widget) {
584
- return;
585
- }
586
- const index = this._widget.afterModelPosition;
587
- const prev = index - 1;
588
- if (prev < 0) {
589
- return;
590
- }
591
- const cell = this._notebookEditor.cellAt(prev);
592
- if (!cell) {
593
- return;
594
- }
595
- await this._notebookEditor.focusNotebookCell(cell, 'editor');
596
- }
597
- async focusNext() {
598
- if (!this._widget) {
599
- return;
600
- }
601
- const index = this._widget.afterModelPosition;
602
- const cell = this._notebookEditor.cellAt(index);
603
- if (!cell) {
604
- return;
605
- }
606
- await this._notebookEditor.focusNotebookCell(cell, 'editor');
607
- }
608
- focus() {
609
- this._focusWidget();
610
- }
611
- focusNearestWidget(index, direction) {
612
- switch (direction) {
613
- case 'above':
614
- if (this._widget?.afterModelPosition === index) {
615
- this._focusWidget();
616
- }
617
- break;
618
- case 'below':
619
- if (this._widget?.afterModelPosition === index + 1) {
620
- this._focusWidget();
621
- }
622
- break;
623
- }
624
- }
625
- async cancelCurrentRequest(discard) {
626
- if (discard) {
627
- this._strategy?.cancel();
628
- }
629
- this._activeRequestCts?.cancel();
630
- }
631
- discard() {
632
- this._strategy?.cancel();
633
- this._activeRequestCts?.cancel();
634
- this._widget?.discardChange();
635
- this.dismiss();
636
- }
637
- async feedbackLast(kind) {
638
- if (this._activeSession?.lastExchange && this._activeSession.lastExchange.response instanceof ReplyResponse) {
639
- this._activeSession.provider.handleInlineChatResponseFeedback?.(this._activeSession.session, this._activeSession.lastExchange.response.raw, kind);
640
- this._widget?.inlineChatWidget.updateStatus('Thank you for your feedback!', { resetAfter: 1250 });
641
- }
642
- }
643
- dismiss() {
644
- if (this._widget) {
645
- const widgetIndex = this._widget.afterModelPosition;
646
- const currentFocus = this._notebookEditor.getFocus();
647
- if (currentFocus.start === widgetIndex && currentFocus.end === widgetIndex) {
648
- if (widgetIndex === 0) {
649
- if (this._notebookEditor.getLength() > 0) {
650
- this._notebookEditor.focusNotebookCell(this._notebookEditor.cellAt(0), 'container');
651
- }
652
- }
653
- else {
654
- const cell = this._notebookEditor.cellAt(widgetIndex - 1);
655
- if (cell) {
656
- this._notebookEditor.focusNotebookCell(cell, 'container');
657
- }
658
- }
659
- }
660
- }
661
- this._ctxCellWidgetFocused.set(false);
662
- this._ctxUserDidEdit.set(false);
663
- this._sessionCtor?.cancel();
664
- this._sessionCtor = undefined;
665
- this._widget?.dispose();
666
- this._widget = undefined;
667
- this._widgetDisposableStore.clear();
668
- }
669
- dispose() {
670
- this.dismiss();
671
- super.dispose();
672
- }
673
- };
674
- NotebookChatController = NotebookChatController_1 = ( __decorate([
675
- ( __param(1, IInstantiationService)),
676
- ( __param(2, IInlineChatSessionService)),
677
- ( __param(3, IContextKeyService)),
678
- ( __param(4, ICommandService)),
679
- ( __param(5, IEditorWorkerService)),
680
- ( __param(6, IInlineChatSavingService)),
681
- ( __param(7, IModelService)),
682
- ( __param(8, ILanguageService)),
683
- ( __param(9, INotebookExecutionStateService))
684
- ], NotebookChatController));
685
- class EditStrategy {
686
- constructor(_session) {
687
- this._session = _session;
688
- this._editCount = 0;
689
- }
690
- async makeProgressiveChanges(editor, edits, opts) {
691
- if (++this._editCount === 1) {
692
- editor.pushUndoStop();
693
- }
694
- const durationInSec = opts.duration / 1000;
695
- for (const edit of edits) {
696
- const wordCount = countWords(edit.text ?? '');
697
- const speed = wordCount / durationInSec;
698
- await performAsyncTextEdit(editor.getModel(), asProgressiveEdit(( new WindowIntervalTimer()), edit, speed, opts.token));
699
- }
700
- }
701
- async makeChanges(editor, edits) {
702
- const cursorStateComputerAndInlineDiffCollection = (undoEdits) => {
703
- let last = null;
704
- for (const edit of undoEdits) {
705
- last = !last || last.isBefore(edit.range.getEndPosition()) ? edit.range.getEndPosition() : last;
706
- }
707
- return last && [Selection.fromPositions(last)];
708
- };
709
- if (++this._editCount === 1) {
710
- editor.pushUndoStop();
711
- }
712
- editor.executeEdits('inline-chat-live', edits, cursorStateComputerAndInlineDiffCollection);
713
- }
714
- async apply(editor) {
715
- if (this._editCount > 0) {
716
- editor.pushUndoStop();
717
- }
718
- if (!(this._session.lastExchange?.response instanceof ReplyResponse)) {
719
- return;
720
- }
721
- const { untitledTextModel } = this._session.lastExchange.response;
722
- if (untitledTextModel && !untitledTextModel.isDisposed() && untitledTextModel.isDirty()) {
723
- await untitledTextModel.save({ reason: 1 });
724
- }
725
- }
726
- async cancel() {
727
- const { textModelN: modelN, textModelNAltVersion, textModelNSnapshotAltVersion } = this._session;
728
- if (modelN.isDisposed()) {
729
- return;
730
- }
731
- const targetAltVersion = textModelNSnapshotAltVersion ?? textModelNAltVersion;
732
- while (targetAltVersion < modelN.getAlternativeVersionId() && modelN.canUndo()) {
733
- modelN.undo();
734
- }
735
- }
736
- createSnapshot() {
737
- if (this._session && !this._session.textModel0.equalsTextBuffer(this._session.textModelN.getTextBuffer())) {
738
- this._session.createSnapshot();
739
- }
740
- }
741
- }
742
- registerNotebookContribution(NotebookChatController.id, NotebookChatController);
743
-
744
- export { EditStrategy, NotebookChatController };