@opensumi/ide-ai-native 3.7.1-next-1739252693.0 → 3.7.1-next-1739424847.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.
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.contribution.d.ts +1 -0
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.contribution.d.ts.map +1 -1
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.contribution.js +26 -4
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.contribution.js.map +1 -1
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.d.ts +3 -1
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.d.ts.map +1 -1
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.js +9 -1
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.js.map +1 -1
- package/lib/browser/contrib/terminal/component/terminal-command-suggest-controller.js +2 -2
- package/lib/browser/contrib/terminal/component/terminal-command-suggest-controller.js.map +1 -1
- package/lib/browser/layout/ai-layout.d.ts.map +1 -1
- package/lib/browser/layout/ai-layout.js +2 -2
- package/lib/browser/layout/ai-layout.js.map +1 -1
- package/lib/browser/model/enhanceDecorationsCollection.d.ts +14 -10
- package/lib/browser/model/enhanceDecorationsCollection.d.ts.map +1 -1
- package/lib/browser/model/enhanceDecorationsCollection.js +42 -53
- package/lib/browser/model/enhanceDecorationsCollection.js.map +1 -1
- package/lib/browser/widget/inline-chat/inline-chat-editor.controller.d.ts.map +1 -1
- package/lib/browser/widget/inline-chat/inline-chat-editor.controller.js +1 -2
- package/lib/browser/widget/inline-chat/inline-chat-editor.controller.js.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff-previewer.d.ts +21 -5
- package/lib/browser/widget/inline-diff/inline-diff-previewer.d.ts.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff-previewer.js +40 -29
- package/lib/browser/widget/inline-diff/inline-diff-previewer.js.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff.controller.d.ts +8 -12
- package/lib/browser/widget/inline-diff/inline-diff.controller.d.ts.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff.controller.js +68 -96
- package/lib/browser/widget/inline-diff/inline-diff.controller.js.map +1 -1
- package/lib/browser/widget/inline-input/inline-input.controller.d.ts.map +1 -1
- package/lib/browser/widget/inline-input/inline-input.controller.js +2 -22
- package/lib/browser/widget/inline-input/inline-input.controller.js.map +1 -1
- package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.d.ts +8 -19
- package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.d.ts.map +1 -1
- package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.js +45 -40
- package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.js.map +1 -1
- package/lib/browser/widget/inline-stream-diff/live-preview.component.d.ts +17 -4
- package/lib/browser/widget/inline-stream-diff/live-preview.component.d.ts.map +1 -1
- package/lib/browser/widget/inline-stream-diff/live-preview.component.js +37 -5
- package/lib/browser/widget/inline-stream-diff/live-preview.component.js.map +1 -1
- package/lib/browser/widget/inline-stream-diff/live-preview.decoration.d.ts +6 -10
- package/lib/browser/widget/inline-stream-diff/live-preview.decoration.d.ts.map +1 -1
- package/lib/browser/widget/inline-stream-diff/live-preview.decoration.js +31 -76
- package/lib/browser/widget/inline-stream-diff/live-preview.decoration.js.map +1 -1
- package/package.json +21 -21
- package/src/browser/contrib/intelligent-completions/intelligent-completions.contribution.ts +29 -8
- package/src/browser/contrib/intelligent-completions/intelligent-completions.controller.ts +13 -1
- package/src/browser/contrib/terminal/component/terminal-command-suggest-controller.tsx +1 -1
- package/src/browser/layout/ai-layout.tsx +5 -2
- package/src/browser/model/enhanceDecorationsCollection.ts +62 -77
- package/src/browser/widget/inline-chat/inline-chat-editor.controller.ts +1 -2
- package/src/browser/widget/inline-diff/inline-diff-previewer.ts +50 -33
- package/src/browser/widget/inline-diff/inline-diff.controller.ts +90 -114
- package/src/browser/widget/inline-input/inline-input.controller.ts +3 -27
- package/src/browser/widget/inline-stream-diff/inline-stream-diff.handler.tsx +55 -68
- package/src/browser/widget/inline-stream-diff/live-preview.component.tsx +45 -6
- package/src/browser/widget/inline-stream-diff/live-preview.decoration.tsx +38 -111
- package/lib/browser/model/styles.module.less +0 -7
- package/src/browser/model/styles.module.less +0 -7
|
@@ -15,18 +15,10 @@ import { StandaloneServices } from '@opensumi/ide-monaco/lib/browser/monaco-api/
|
|
|
15
15
|
import { EditOperation } from '@opensumi/monaco-editor-core/esm/vs/editor/common/core/editOperation';
|
|
16
16
|
import { LineRange } from '@opensumi/monaco-editor-core/esm/vs/editor/common/core/lineRange';
|
|
17
17
|
import { ModelDecorationOptions } from '@opensumi/monaco-editor-core/esm/vs/editor/common/model/textModel';
|
|
18
|
-
import {
|
|
19
|
-
IUndoRedoService,
|
|
20
|
-
ResourceEditStackSnapshot,
|
|
21
|
-
UndoRedoGroup,
|
|
22
|
-
} from '@opensumi/monaco-editor-core/esm/vs/platform/undoRedo/common/undoRedo';
|
|
18
|
+
import { IUndoRedoService, UndoRedoGroup } from '@opensumi/monaco-editor-core/esm/vs/platform/undoRedo/common/undoRedo';
|
|
23
19
|
|
|
24
20
|
import { AINativeContextKey } from '../../ai-core.contextkeys';
|
|
25
|
-
import {
|
|
26
|
-
EnhanceDecorationsCollection,
|
|
27
|
-
IDecorationSerializableState,
|
|
28
|
-
IEnhanceModelDeltaDecoration,
|
|
29
|
-
} from '../../model/enhanceDecorationsCollection';
|
|
21
|
+
import { IDecorationSerializableState, IEnhanceModelDeltaDecoration } from '../../model/enhanceDecorationsCollection';
|
|
30
22
|
import { InlineDiffService } from '../inline-diff';
|
|
31
23
|
|
|
32
24
|
import styles from './inline-stream-diff.module.less';
|
|
@@ -36,6 +28,7 @@ import {
|
|
|
36
28
|
AcceptPartialEditWidget,
|
|
37
29
|
ActiveLineDecoration,
|
|
38
30
|
AddedRangeDecoration,
|
|
31
|
+
AddedRangeDecorationsCollection,
|
|
39
32
|
EPartialEdit,
|
|
40
33
|
IPartialEditEvent,
|
|
41
34
|
IPartialEditWidgetOptions,
|
|
@@ -46,14 +39,6 @@ import {
|
|
|
46
39
|
RemovedZoneWidget,
|
|
47
40
|
} from './live-preview.component';
|
|
48
41
|
|
|
49
|
-
export interface ILivePreviewDiffDecorationSnapshotData {
|
|
50
|
-
addedDecList: IEnhanceModelDeltaDecoration[];
|
|
51
|
-
partialEditWidgetList: AcceptPartialEditWidget[];
|
|
52
|
-
removedWidgetList: RemovedZoneWidget[];
|
|
53
|
-
editStackSnapshot: ResourceEditStackSnapshot;
|
|
54
|
-
zone: LineRange;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
42
|
export interface ITotalCodeInfo {
|
|
58
43
|
totalAddedLinesCount: number;
|
|
59
44
|
totalDeletedLinesCount: number;
|
|
@@ -97,8 +82,7 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
97
82
|
|
|
98
83
|
protected model: ITextModel;
|
|
99
84
|
|
|
100
|
-
|
|
101
|
-
private addedRangeDec: EnhanceDecorationsCollection;
|
|
85
|
+
private addedRangeDec: AddedRangeDecorationsCollection;
|
|
102
86
|
private partialEditWidgetList: AcceptPartialEditWidget[] = [];
|
|
103
87
|
private removedZoneWidgets: RemovedZoneWidget[] = [];
|
|
104
88
|
private zone: LineRange;
|
|
@@ -108,12 +92,11 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
108
92
|
this.model = this.monacoEditor.getModel()!;
|
|
109
93
|
|
|
110
94
|
this.undoRedoService = StandaloneServices.get(IUndoRedoService);
|
|
95
|
+
this.aiNativeContextKey = this.injector.get(AINativeContextKey, [this.monacoEditor.contextKeyService]);
|
|
111
96
|
|
|
112
97
|
this.activeLineDec = this.monacoEditor.createDecorationsCollection();
|
|
113
98
|
this.pendingRangeDec = this.monacoEditor.createDecorationsCollection();
|
|
114
99
|
|
|
115
|
-
this.aiNativeContextKey = this.injector.get(AINativeContextKey, [this.monacoEditor.contextKeyService]);
|
|
116
|
-
|
|
117
100
|
this.addDispose(
|
|
118
101
|
this.inlineStreamDiffService.onAcceptDiscardPartialEdit((isAccept) => {
|
|
119
102
|
const currentPosition = this.monacoEditor.getPosition()!;
|
|
@@ -139,13 +122,13 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
139
122
|
}),
|
|
140
123
|
);
|
|
141
124
|
|
|
142
|
-
this.addedRangeDec = new
|
|
125
|
+
this.addedRangeDec = new AddedRangeDecorationsCollection(this.monacoEditor);
|
|
143
126
|
this.addDispose(
|
|
144
127
|
this.addedRangeDec.onDidDecorationsChange((newAddedRangeDec) => {
|
|
145
128
|
const inlineDiffPartialEditsIsVisible = this.aiNativeContextKey.inlineDiffPartialEditsIsVisible.get();
|
|
146
129
|
if (inlineDiffPartialEditsIsVisible) {
|
|
147
130
|
this.partialEditWidgetList.forEach((widget) => {
|
|
148
|
-
const addedWidget = newAddedRangeDec.find((a) => widget.
|
|
131
|
+
const addedWidget = newAddedRangeDec.find((a) => widget.getAddedRangeId() === a.id);
|
|
149
132
|
if (addedWidget) {
|
|
150
133
|
const range = addedWidget.getRange();
|
|
151
134
|
/**
|
|
@@ -159,11 +142,7 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
159
142
|
}),
|
|
160
143
|
);
|
|
161
144
|
|
|
162
|
-
this.addDispose(
|
|
163
|
-
Disposable.create(() => {
|
|
164
|
-
this.clear();
|
|
165
|
-
}),
|
|
166
|
-
);
|
|
145
|
+
this.addDispose(Disposable.create(() => this.clear()));
|
|
167
146
|
}
|
|
168
147
|
|
|
169
148
|
clear() {
|
|
@@ -174,82 +153,30 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
174
153
|
this.clearPartialEditWidgetList();
|
|
175
154
|
}
|
|
176
155
|
|
|
177
|
-
|
|
178
|
-
this.
|
|
179
|
-
|
|
156
|
+
hide() {
|
|
157
|
+
this.addedRangeDec.getDecorations().forEach((dec) => dec.hide());
|
|
158
|
+
this.partialEditWidgetList.forEach((widget) => widget.hide());
|
|
159
|
+
this.removedZoneWidgets.forEach((widget) => widget.hide());
|
|
180
160
|
|
|
181
|
-
|
|
182
|
-
|
|
161
|
+
this.activeLineDec.clear();
|
|
162
|
+
this.pendingRangeDec.clear();
|
|
183
163
|
}
|
|
184
164
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
165
|
+
/**
|
|
166
|
+
* 仅恢复渲染 status 为 pending 的部件
|
|
167
|
+
*/
|
|
168
|
+
resume() {
|
|
169
|
+
this.addedRangeDec.getDecorations().forEach((dec) => dec.status === 'pending' && dec.resume());
|
|
170
|
+
this.partialEditWidgetList.forEach((widget) => widget.status === 'pending' && widget.resume());
|
|
171
|
+
this.removedZoneWidgets.forEach((widget) => widget.status === 'pending' && widget.resume());
|
|
172
|
+
}
|
|
193
173
|
|
|
194
|
-
|
|
174
|
+
initialize(zone: LineRange): void {
|
|
195
175
|
this.updateZone(zone);
|
|
196
|
-
|
|
197
|
-
// restore added
|
|
198
|
-
this.addedRangeDec.set(addedDecList);
|
|
199
|
-
|
|
200
|
-
// restore removed
|
|
201
|
-
this.clearRemovedWidgets();
|
|
202
|
-
removedWidgetList.forEach((widget) => {
|
|
203
|
-
const position = widget.getLastPosition();
|
|
204
|
-
if (position) {
|
|
205
|
-
this.showRemovedWidgetByLineNumber(position.lineNumber, widget.textLines, {
|
|
206
|
-
isHidden: widget.isHidden,
|
|
207
|
-
recordPosition: widget.getLastPosition(),
|
|
208
|
-
undoRedoGroup: widget.group,
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
// restore partial edit widget
|
|
214
|
-
this.clearPartialEditWidgetList();
|
|
215
|
-
snapshotPartialEditWidgetList.forEach((snapshotWidget) => {
|
|
216
|
-
const lineNumber = snapshotWidget.getPosition()?.position?.lineNumber;
|
|
217
|
-
if (lineNumber) {
|
|
218
|
-
const newPartialEditWidget = this.createPartialEditWidget(lineNumber);
|
|
219
|
-
|
|
220
|
-
if (snapshotWidget.status === 'accept') {
|
|
221
|
-
newPartialEditWidget.accept(snapshotWidget.addedLinesCount, snapshotWidget.deletedLinesCount);
|
|
222
|
-
} else if (snapshotWidget.status === 'discard') {
|
|
223
|
-
newPartialEditWidget.discard(snapshotWidget.addedLinesCount, snapshotWidget.deletedLinesCount);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
newPartialEditWidget.setGroup(snapshotWidget.group);
|
|
227
|
-
this.partialEditWidgetList.push(newPartialEditWidget);
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
this.firePartialEditWidgetList();
|
|
231
|
-
this.recordPartialEditWidgetWithAddedDec();
|
|
232
|
-
|
|
233
|
-
// restore undo/redo stack
|
|
234
|
-
const uri = this.model.uri;
|
|
235
|
-
this.undoRedoService.restoreSnapshot(editStackSnapshot);
|
|
236
|
-
const elements = this.undoRedoService.getElements(uri);
|
|
237
|
-
elements.future.concat(elements.past).forEach((node) => {
|
|
238
|
-
if (node instanceof LivePreviewUndoRedoStackElement) {
|
|
239
|
-
// 在每次 restore 的时候需要将当前的类重新指向到 undo/redo 的 stack 中
|
|
240
|
-
node.attachModel(this);
|
|
241
|
-
}
|
|
242
|
-
});
|
|
243
176
|
}
|
|
244
177
|
|
|
245
|
-
|
|
246
|
-
return
|
|
247
|
-
addedDecList: this.addedRangeDec.getDecorations(),
|
|
248
|
-
partialEditWidgetList: this.partialEditWidgetList,
|
|
249
|
-
removedWidgetList: this.removedZoneWidgets,
|
|
250
|
-
editStackSnapshot: this.undoRedoService.createSnapshot(this.model.uri),
|
|
251
|
-
zone: this.zone,
|
|
252
|
-
};
|
|
178
|
+
getRemovedWidgets(): RemovedZoneWidget[] {
|
|
179
|
+
return this.removedZoneWidgets;
|
|
253
180
|
}
|
|
254
181
|
|
|
255
182
|
public showRemovedWidgetByLineNumber(
|
|
@@ -388,7 +315,7 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
388
315
|
const findAddedRangeDecByGroup = (model: LivePreviewDiffDecorationModel) =>
|
|
389
316
|
model.addedRangeDec.getDecorationByGroup(group);
|
|
390
317
|
|
|
391
|
-
let modifyContent;
|
|
318
|
+
let modifyContent: string;
|
|
392
319
|
const removeContent = removedWidget?.getRemovedTextLines().join('\n') || '';
|
|
393
320
|
const range = addedDec?.getRange();
|
|
394
321
|
if (range) {
|
|
@@ -411,10 +338,10 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
411
338
|
});
|
|
412
339
|
}
|
|
413
340
|
const removedWidget = findRemovedWidgetByGroup(decorationModel);
|
|
414
|
-
removedWidget?.
|
|
341
|
+
removedWidget?.discard();
|
|
415
342
|
|
|
416
343
|
const addedDec = findAddedRangeDecByGroup(decorationModel);
|
|
417
|
-
addedDec?.
|
|
344
|
+
addedDec?.discard();
|
|
418
345
|
|
|
419
346
|
const partialEditWidget = findPartialWidgetByGroup(decorationModel);
|
|
420
347
|
const operation = this.doDiscardPartialWidget(partialEditWidget!, addedDec, removedWidget);
|
|
@@ -422,7 +349,7 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
422
349
|
return operation;
|
|
423
350
|
};
|
|
424
351
|
|
|
425
|
-
const
|
|
352
|
+
const accept = (decorationModel: LivePreviewDiffDecorationModel) => {
|
|
426
353
|
// 只有点击行采纳时才会上报
|
|
427
354
|
if (isReport) {
|
|
428
355
|
this.aiReporter.end(relationId, {
|
|
@@ -439,10 +366,10 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
439
366
|
partialEditWidget?.accept(addedLinesCount, deletedLinesCount);
|
|
440
367
|
|
|
441
368
|
const removedWidget = findRemovedWidgetByGroup(decorationModel);
|
|
442
|
-
removedWidget?.
|
|
369
|
+
removedWidget?.accept();
|
|
443
370
|
|
|
444
371
|
const addedDec = findAddedRangeDecByGroup(decorationModel);
|
|
445
|
-
addedDec?.
|
|
372
|
+
addedDec?.accept();
|
|
446
373
|
};
|
|
447
374
|
|
|
448
375
|
const resume = (decorationModel: LivePreviewDiffDecorationModel) => {
|
|
@@ -458,7 +385,7 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
458
385
|
|
|
459
386
|
switch (type) {
|
|
460
387
|
case EPartialEdit.accept:
|
|
461
|
-
|
|
388
|
+
accept(this);
|
|
462
389
|
if (isPushStack) {
|
|
463
390
|
const stack = this.createEditStackElement(group);
|
|
464
391
|
stack.attachModel(this);
|
|
@@ -466,7 +393,7 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
466
393
|
resume(model);
|
|
467
394
|
});
|
|
468
395
|
stack.registerRedo((model: LivePreviewDiffDecorationModel) => {
|
|
469
|
-
|
|
396
|
+
accept(model);
|
|
470
397
|
});
|
|
471
398
|
}
|
|
472
399
|
break;
|
|
@@ -515,8 +442,8 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
515
442
|
|
|
516
443
|
private firePartialEditWidgetList(): void {
|
|
517
444
|
this._onPartialEditWidgetListChange.fire(this.partialEditWidgetList);
|
|
518
|
-
const
|
|
519
|
-
this.aiNativeContextKey.inlineDiffPartialEditsIsVisible.set(
|
|
445
|
+
const visibleLists = this.partialEditWidgetList.filter((widget) => !widget.isHidden);
|
|
446
|
+
this.aiNativeContextKey.inlineDiffPartialEditsIsVisible.set(visibleLists.length !== 0);
|
|
520
447
|
}
|
|
521
448
|
|
|
522
449
|
public createEditStackElement(group: UndoRedoGroup): LivePreviewUndoRedoStackElement {
|
|
@@ -535,7 +462,7 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
535
462
|
// 2. 删除 N 行 => N
|
|
536
463
|
// 3. 新增 M 行,删除 N 行 => max(M, N)
|
|
537
464
|
// 综上所述,变更行数 = sum(list.map(item => max(新增行数, 删除行数)))
|
|
538
|
-
const resolvedStatus =
|
|
465
|
+
const resolvedStatus = calculate(partialEditWidgetList);
|
|
539
466
|
const unresolvedStatus = { added: 0, deleted: 0, changed: 0 };
|
|
540
467
|
partialEditWidgetList.forEach((v, idx) => {
|
|
541
468
|
if (v.status === 'pending') {
|
|
@@ -558,7 +485,7 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
558
485
|
unresolvedChangedLinesCount: unresolvedStatus.changed,
|
|
559
486
|
};
|
|
560
487
|
|
|
561
|
-
function
|
|
488
|
+
function calculate(list: AcceptPartialEditWidget[]) {
|
|
562
489
|
const result = { added: 0, deleted: 0, changed: 0 };
|
|
563
490
|
list.forEach((widget) => {
|
|
564
491
|
const addedLinesCount = widget.addedLinesCount;
|
|
@@ -593,7 +520,7 @@ export class LivePreviewDiffDecorationModel extends Disposable {
|
|
|
593
520
|
if (lineNumber) {
|
|
594
521
|
const addedWidget = this.addedRangeDec.getDecorationByLineNumber(lineNumber);
|
|
595
522
|
if (addedWidget) {
|
|
596
|
-
widget.
|
|
523
|
+
widget.recordAddedRangeId(addedWidget.id);
|
|
597
524
|
}
|
|
598
525
|
}
|
|
599
526
|
});
|