@opensumi/ide-ai-native 3.7.1-next-1739430207.0 → 3.7.1-next-1739439717.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/ai-core.contextkeys.d.ts +0 -1
- package/lib/browser/ai-core.contextkeys.d.ts.map +1 -1
- package/lib/browser/ai-core.contextkeys.js +0 -1
- package/lib/browser/ai-core.contextkeys.js.map +1 -1
- package/lib/browser/ai-core.contribution.d.ts +1 -2
- package/lib/browser/ai-core.contribution.d.ts.map +1 -1
- package/lib/browser/ai-core.contribution.js +14 -55
- package/lib/browser/ai-core.contribution.js.map +1 -1
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.contribution.d.ts +0 -1
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.contribution.d.ts.map +1 -1
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.contribution.js +4 -26
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.contribution.js.map +1 -1
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.d.ts +1 -3
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.d.ts.map +1 -1
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.js +1 -9
- package/lib/browser/contrib/intelligent-completions/intelligent-completions.controller.js.map +1 -1
- package/lib/browser/contrib/intelligent-completions/source/base.d.ts +2 -1
- package/lib/browser/contrib/intelligent-completions/source/base.d.ts.map +1 -1
- package/lib/browser/contrib/intelligent-completions/source/base.js.map +1 -1
- package/lib/browser/contrib/intelligent-completions/source/line-change.source.d.ts +3 -2
- package/lib/browser/contrib/intelligent-completions/source/line-change.source.d.ts.map +1 -1
- package/lib/browser/contrib/intelligent-completions/source/line-change.source.js +21 -51
- package/lib/browser/contrib/intelligent-completions/source/line-change.source.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/index.js +1 -1
- package/lib/browser/index.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 +10 -14
- package/lib/browser/model/enhanceDecorationsCollection.d.ts.map +1 -1
- package/lib/browser/model/enhanceDecorationsCollection.js +53 -42
- package/lib/browser/model/enhanceDecorationsCollection.js.map +1 -1
- package/lib/browser/model/styles.module.less +7 -0
- package/lib/browser/types.d.ts +1 -2
- package/lib/browser/types.d.ts.map +1 -1
- package/lib/browser/widget/inline-chat/inline-chat-editor.controller.d.ts +1 -2
- 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 +41 -13
- package/lib/browser/widget/inline-chat/inline-chat-editor.controller.js.map +1 -1
- package/lib/browser/widget/inline-chat/inline-chat.feature.registry.d.ts +13 -3
- package/lib/browser/widget/inline-chat/inline-chat.feature.registry.d.ts.map +1 -1
- package/lib/browser/widget/inline-chat/inline-chat.feature.registry.js +72 -24
- package/lib/browser/widget/inline-chat/inline-chat.feature.registry.js.map +1 -1
- package/lib/browser/widget/inline-chat/inline-chat.service.d.ts +6 -1
- package/lib/browser/widget/inline-chat/inline-chat.service.d.ts.map +1 -1
- package/lib/browser/widget/inline-chat/inline-chat.service.js +19 -5
- package/lib/browser/widget/inline-chat/inline-chat.service.js.map +1 -1
- package/lib/browser/widget/inline-chat/inline-content-widget.d.ts +5 -2
- package/lib/browser/widget/inline-chat/inline-content-widget.d.ts.map +1 -1
- package/lib/browser/widget/inline-chat/inline-content-widget.js +42 -17
- package/lib/browser/widget/inline-chat/inline-content-widget.js.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff-previewer.d.ts +5 -22
- package/lib/browser/widget/inline-diff/inline-diff-previewer.d.ts.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff-previewer.js +30 -61
- package/lib/browser/widget/inline-diff/inline-diff-previewer.js.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff.controller.d.ts +12 -8
- package/lib/browser/widget/inline-diff/inline-diff.controller.d.ts.map +1 -1
- package/lib/browser/widget/inline-diff/inline-diff.controller.js +96 -68
- package/lib/browser/widget/inline-diff/inline-diff.controller.js.map +1 -1
- package/lib/browser/widget/inline-hint/inline-hint.controller.d.ts +1 -0
- package/lib/browser/widget/inline-hint/inline-hint.controller.d.ts.map +1 -1
- package/lib/browser/widget/inline-hint/inline-hint.controller.js +5 -0
- package/lib/browser/widget/inline-hint/inline-hint.controller.js.map +1 -1
- package/lib/browser/widget/inline-input/inline-input-widget.d.ts +2 -12
- package/lib/browser/widget/inline-input/inline-input-widget.d.ts.map +1 -1
- package/lib/browser/widget/inline-input/inline-input-widget.js +18 -26
- package/lib/browser/widget/inline-input/inline-input-widget.js.map +1 -1
- package/lib/browser/widget/inline-input/inline-input.controller.d.ts +6 -14
- package/lib/browser/widget/inline-input/inline-input.controller.d.ts.map +1 -1
- package/lib/browser/widget/inline-input/inline-input.controller.js +169 -320
- package/lib/browser/widget/inline-input/inline-input.controller.js.map +1 -1
- package/lib/browser/widget/inline-input/inline-input.module.less +0 -4
- package/lib/browser/widget/inline-input/inline-input.service.d.ts +7 -19
- package/lib/browser/widget/inline-input/inline-input.service.d.ts.map +1 -1
- package/lib/browser/widget/inline-input/inline-input.service.js +12 -72
- package/lib/browser/widget/inline-input/inline-input.service.js.map +1 -1
- package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.d.ts +19 -8
- 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 +41 -48
- 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 +4 -17
- 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 +5 -37
- 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 +11 -7
- 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 +77 -33
- package/lib/browser/widget/inline-stream-diff/live-preview.decoration.js.map +1 -1
- package/package.json +21 -21
- package/src/browser/ai-core.contextkeys.ts +0 -3
- package/src/browser/ai-core.contribution.ts +16 -63
- package/src/browser/contrib/intelligent-completions/intelligent-completions.contribution.ts +8 -29
- package/src/browser/contrib/intelligent-completions/intelligent-completions.controller.ts +1 -13
- package/src/browser/contrib/intelligent-completions/source/base.ts +2 -0
- package/src/browser/contrib/intelligent-completions/source/line-change.source.ts +24 -79
- package/src/browser/contrib/terminal/component/terminal-command-suggest-controller.tsx +1 -1
- package/src/browser/index.ts +2 -2
- package/src/browser/layout/ai-layout.tsx +2 -5
- package/src/browser/model/enhanceDecorationsCollection.ts +77 -62
- package/src/browser/model/styles.module.less +7 -0
- package/src/browser/types.ts +2 -2
- package/src/browser/widget/inline-chat/inline-chat-editor.controller.ts +56 -21
- package/src/browser/widget/inline-chat/inline-chat.feature.registry.ts +90 -23
- package/src/browser/widget/inline-chat/inline-chat.service.ts +19 -2
- package/src/browser/widget/inline-chat/inline-content-widget.tsx +71 -14
- package/src/browser/widget/inline-diff/inline-diff-previewer.ts +32 -87
- package/src/browser/widget/inline-diff/inline-diff.controller.ts +114 -90
- package/src/browser/widget/inline-hint/inline-hint.controller.ts +7 -1
- package/src/browser/widget/inline-input/inline-input-widget.tsx +12 -34
- package/src/browser/widget/inline-input/inline-input.controller.ts +247 -453
- package/src/browser/widget/inline-input/inline-input.module.less +0 -4
- package/src/browser/widget/inline-input/inline-input.service.ts +13 -92
- package/src/browser/widget/inline-stream-diff/inline-stream-diff.handler.tsx +69 -58
- package/src/browser/widget/inline-stream-diff/live-preview.component.tsx +6 -45
- package/src/browser/widget/inline-stream-diff/live-preview.decoration.tsx +112 -40
- package/lib/browser/widget/inline-input/model.d.ts +0 -34
- package/lib/browser/widget/inline-input/model.d.ts.map +0 -1
- package/lib/browser/widget/inline-input/model.js +0 -63
- package/lib/browser/widget/inline-input/model.js.map +0 -1
- package/src/browser/widget/inline-input/model.ts +0 -74
|
@@ -6,18 +6,12 @@ import {
|
|
|
6
6
|
Emitter,
|
|
7
7
|
Event,
|
|
8
8
|
IDisposable,
|
|
9
|
+
IEventBus,
|
|
9
10
|
ReplyResponse,
|
|
10
11
|
} from '@opensumi/ide-core-common';
|
|
12
|
+
import { EditorGroupCloseEvent } from '@opensumi/ide-editor/lib/browser';
|
|
11
13
|
import * as monaco from '@opensumi/ide-monaco';
|
|
12
14
|
import { ICodeEditor } from '@opensumi/ide-monaco';
|
|
13
|
-
import {
|
|
14
|
-
IObservable,
|
|
15
|
-
ISettableObservable,
|
|
16
|
-
autorun,
|
|
17
|
-
observableFromEvent,
|
|
18
|
-
observableValue,
|
|
19
|
-
transaction,
|
|
20
|
-
} from '@opensumi/ide-monaco/lib/common/observable';
|
|
21
15
|
|
|
22
16
|
import { BaseAIMonacoEditorController } from '../../contrib/base';
|
|
23
17
|
import { EInlineDiffPreviewMode } from '../../preferences/schema';
|
|
@@ -33,8 +27,6 @@ import {
|
|
|
33
27
|
} from './inline-diff-previewer';
|
|
34
28
|
import { InlineDiffWidget } from './inline-diff-widget';
|
|
35
29
|
|
|
36
|
-
type IInlineDiffPreviewer = BaseInlineDiffPreviewer<InlineDiffWidget | InlineStreamDiffHandler>;
|
|
37
|
-
|
|
38
30
|
export class InlineDiffController extends BaseAIMonacoEditorController {
|
|
39
31
|
public static readonly ID = 'editor.contrib.ai.inline.diff';
|
|
40
32
|
|
|
@@ -46,68 +38,106 @@ export class InlineDiffController extends BaseAIMonacoEditorController {
|
|
|
46
38
|
return this.injector.get(PreferenceService);
|
|
47
39
|
}
|
|
48
40
|
|
|
41
|
+
private get eventBus(): IEventBus {
|
|
42
|
+
return this.injector.get(IEventBus);
|
|
43
|
+
}
|
|
44
|
+
|
|
49
45
|
private readonly _onMaxLineCount = new Emitter<number>();
|
|
50
46
|
public readonly onMaxLineCount: Event<number> = this._onMaxLineCount.event;
|
|
51
47
|
|
|
52
|
-
private
|
|
53
|
-
private
|
|
54
|
-
private modelChangeObs: IObservable<monaco.editor.ITextModel, unknown>;
|
|
48
|
+
private previewer: BaseInlineDiffPreviewer<InlineDiffWidget | InlineStreamDiffHandler> | undefined;
|
|
49
|
+
private _previewerNodeStore = new Map<string, InlineStreamDiffHandler | null>();
|
|
55
50
|
|
|
56
51
|
mount(): IDisposable {
|
|
57
|
-
this.previewerStore = new Map();
|
|
58
|
-
this.currentPreviewer = observableValue(this, undefined);
|
|
59
|
-
this.modelChangeObs = observableFromEvent<monaco.editor.ITextModel>(
|
|
60
|
-
this,
|
|
61
|
-
this.monacoEditor.onDidChangeModel,
|
|
62
|
-
() => this.monacoEditor.getModel()!,
|
|
63
|
-
);
|
|
64
|
-
|
|
65
52
|
this.featureDisposable.addDispose(
|
|
66
|
-
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
53
|
+
this.eventBus.on(EditorGroupCloseEvent, (e: EditorGroupCloseEvent) => {
|
|
54
|
+
const uriString = e.payload.resource.uri.toString();
|
|
55
|
+
const node = this.getStoredState(uriString);
|
|
71
56
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
* 保留 previewer 的实例,仅卸载 previewer 的渲染层
|
|
75
|
-
*/
|
|
76
|
-
const id = model.id;
|
|
77
|
-
const previewer = this.currentPreviewer.read(reader);
|
|
78
|
-
if (previewer && previewer.modelId !== id && !previewer.disposed) {
|
|
79
|
-
previewer.hide();
|
|
57
|
+
if (node && node.previewerOptions.disposeWhenEditorClosed) {
|
|
58
|
+
this.destroyPreviewer(uriString);
|
|
80
59
|
}
|
|
81
|
-
|
|
82
|
-
const storedPreview = this.previewerStore.get(model.id);
|
|
83
|
-
transaction((tx) => {
|
|
84
|
-
if (storedPreview && storedPreview.modelId === id) {
|
|
85
|
-
this.currentPreviewer.set(storedPreview, tx);
|
|
86
|
-
storedPreview.resume();
|
|
87
|
-
} else {
|
|
88
|
-
this.currentPreviewer.set(undefined, tx);
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
60
|
}),
|
|
92
61
|
);
|
|
93
62
|
|
|
63
|
+
this.registerInlineDiffFeature(this.monacoEditor);
|
|
64
|
+
|
|
94
65
|
return this.featureDisposable;
|
|
95
66
|
}
|
|
96
67
|
|
|
97
|
-
|
|
98
|
-
|
|
68
|
+
storeState(key: string) {
|
|
69
|
+
if (!this.previewer) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// 存储的是快照
|
|
74
|
+
const node = this.previewer.createNodeSnapshot();
|
|
75
|
+
if (node) {
|
|
76
|
+
this._previewerNodeStore.set(key, node as InlineStreamDiffHandler);
|
|
77
|
+
}
|
|
99
78
|
}
|
|
100
79
|
|
|
101
|
-
|
|
102
|
-
|
|
80
|
+
tryRestoreState(monacoEditor: monaco.ICodeEditor, key: string) {
|
|
81
|
+
const node = this.getStoredState(key);
|
|
82
|
+
if (!node) {
|
|
103
83
|
return;
|
|
104
84
|
}
|
|
105
85
|
|
|
106
|
-
|
|
86
|
+
if (node.disposed) {
|
|
87
|
+
this.destroyPreviewer(key);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return this.restoreState(monacoEditor, node);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
restoreState(monacoEditor: monaco.ICodeEditor, node: InlineStreamDiffHandler) {
|
|
95
|
+
const uri = monacoEditor.getModel()?.uri;
|
|
96
|
+
|
|
97
|
+
if (uri) {
|
|
98
|
+
this.previewer = this.injector.get(LiveInlineDiffPreviewer, [monacoEditor]);
|
|
99
|
+
this.previewer.attachNode(node);
|
|
100
|
+
this.listenPreviewer(this.previewer);
|
|
101
|
+
|
|
102
|
+
const dispose = this.previewer.onDispose(() => {
|
|
103
|
+
this.destroyPreviewer();
|
|
104
|
+
dispose.dispose();
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
registerInlineDiffFeature(monacoEditor: monaco.ICodeEditor): void {
|
|
110
|
+
const model = monacoEditor.getModel();
|
|
111
|
+
|
|
112
|
+
this.featureDisposable.addDispose(
|
|
113
|
+
monacoEditor.onWillChangeModel((e) => {
|
|
114
|
+
if (!e.oldModelUrl) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const urlString = e.oldModelUrl.toString();
|
|
119
|
+
this.storeState(urlString);
|
|
120
|
+
|
|
121
|
+
this.destroyPreviewer();
|
|
122
|
+
}),
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
this.featureDisposable.addDispose(
|
|
126
|
+
monacoEditor.onDidChangeModel((e) => {
|
|
127
|
+
if (!e.newModelUrl) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
this.tryRestoreState(monacoEditor, e.newModelUrl.toString());
|
|
131
|
+
}),
|
|
132
|
+
);
|
|
107
133
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
134
|
+
if (model) {
|
|
135
|
+
this.featureDisposable.addDispose(
|
|
136
|
+
model.onWillDispose(() => {
|
|
137
|
+
const uriString = model.uri.toString();
|
|
138
|
+
this.destroyPreviewer(uriString);
|
|
139
|
+
}),
|
|
140
|
+
);
|
|
111
141
|
}
|
|
112
142
|
}
|
|
113
143
|
|
|
@@ -124,10 +154,6 @@ export class InlineDiffController extends BaseAIMonacoEditorController {
|
|
|
124
154
|
const disposable = new Disposable();
|
|
125
155
|
|
|
126
156
|
const previewer = this.createDiffPreviewer(monacoEditor, crossSelection, options.previewerOptions);
|
|
127
|
-
transaction((tx) => {
|
|
128
|
-
this.currentPreviewer.set(previewer, tx);
|
|
129
|
-
this.previewerStore.set(previewer.modelId, previewer);
|
|
130
|
-
});
|
|
131
157
|
|
|
132
158
|
const onFinish = () => {
|
|
133
159
|
previewer.layout();
|
|
@@ -142,7 +168,7 @@ export class InlineDiffController extends BaseAIMonacoEditorController {
|
|
|
142
168
|
disposable.addDispose([
|
|
143
169
|
controller.onData((data) => {
|
|
144
170
|
if (ReplyResponse.is(data)) {
|
|
145
|
-
|
|
171
|
+
previewer.onData(data);
|
|
146
172
|
}
|
|
147
173
|
}),
|
|
148
174
|
controller.onError((error) => {
|
|
@@ -177,61 +203,59 @@ export class InlineDiffController extends BaseAIMonacoEditorController {
|
|
|
177
203
|
EInlineDiffPreviewMode.inlineLive,
|
|
178
204
|
);
|
|
179
205
|
|
|
180
|
-
|
|
206
|
+
this.destroyPreviewer();
|
|
181
207
|
|
|
182
208
|
if (inlineDiffMode === EInlineDiffPreviewMode.sideBySide) {
|
|
183
|
-
previewer = this.injector.get(SideBySideInlineDiffWidget, [monacoEditor]);
|
|
209
|
+
this.previewer = this.injector.get(SideBySideInlineDiffWidget, [monacoEditor]);
|
|
184
210
|
} else {
|
|
185
|
-
previewer = this.injector.get(LiveInlineDiffPreviewer, [monacoEditor]);
|
|
211
|
+
this.previewer = this.injector.get(LiveInlineDiffPreviewer, [monacoEditor]);
|
|
186
212
|
}
|
|
187
213
|
|
|
188
|
-
previewer.create(selection, options);
|
|
189
|
-
previewer.show(selection.startLineNumber - 1, selection.endLineNumber - selection.startLineNumber + 2);
|
|
214
|
+
this.previewer.create(selection, options);
|
|
215
|
+
this.previewer.show(selection.startLineNumber - 1, selection.endLineNumber - selection.startLineNumber + 2);
|
|
190
216
|
|
|
191
|
-
|
|
217
|
+
this.listenPreviewer(this.previewer);
|
|
192
218
|
|
|
193
|
-
previewer
|
|
194
|
-
Disposable.create(() => {
|
|
195
|
-
this.previewerStore.delete(previewer.modelId);
|
|
196
|
-
}),
|
|
197
|
-
);
|
|
198
|
-
|
|
199
|
-
return previewer;
|
|
219
|
+
return this.previewer;
|
|
200
220
|
}
|
|
201
221
|
|
|
202
|
-
|
|
203
|
-
const previewer = this.getPreviewer();
|
|
222
|
+
private listenPreviewer(previewer: BaseInlineDiffPreviewer<InlineDiffWidget | InlineStreamDiffHandler> | undefined) {
|
|
204
223
|
if (!previewer) {
|
|
205
224
|
return;
|
|
206
225
|
}
|
|
207
226
|
|
|
208
|
-
previewer.
|
|
227
|
+
previewer.addDispose(previewer.onLineCount((lineCount) => this._onMaxLineCount.fire(lineCount)));
|
|
209
228
|
}
|
|
210
229
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
230
|
+
getPreviewer(): BaseInlineDiffPreviewer<InlineDiffWidget | InlineStreamDiffHandler> | undefined {
|
|
231
|
+
return this.previewer;
|
|
232
|
+
}
|
|
216
233
|
|
|
217
|
-
|
|
234
|
+
getStoredState(uri: string) {
|
|
235
|
+
return this._previewerNodeStore.get(uri);
|
|
218
236
|
}
|
|
219
237
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
238
|
+
handleAction(action: EResultKind): void {
|
|
239
|
+
this.previewer?.handleAction(action);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
getModifyContent() {
|
|
243
|
+
return this.previewer?.getValue();
|
|
244
|
+
}
|
|
225
245
|
|
|
226
|
-
|
|
246
|
+
getOriginContent() {
|
|
247
|
+
return this.previewer?.getOriginValue();
|
|
227
248
|
}
|
|
228
249
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
250
|
+
destroyPreviewer(uriString?: string) {
|
|
251
|
+
this.previewer?.dispose();
|
|
252
|
+
this.previewer = undefined;
|
|
253
|
+
if (uriString) {
|
|
254
|
+
this._previewerNodeStore.delete(uriString);
|
|
233
255
|
}
|
|
256
|
+
}
|
|
234
257
|
|
|
235
|
-
|
|
258
|
+
revealFirstDiff() {
|
|
259
|
+
this.previewer?.revealFirstDiff();
|
|
236
260
|
}
|
|
237
261
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import throttle from 'lodash/throttle';
|
|
2
2
|
|
|
3
3
|
import { Disposable, IDisposable } from '@opensumi/ide-core-common';
|
|
4
|
-
import * as monaco from '@opensumi/ide-monaco';
|
|
5
4
|
import { ICodeEditor } from '@opensumi/ide-monaco';
|
|
5
|
+
import * as monaco from '@opensumi/ide-monaco';
|
|
6
6
|
|
|
7
7
|
import { AINativeContextKey } from '../../ai-core.contextkeys';
|
|
8
8
|
import { BaseAIMonacoEditorController } from '../../contrib/base';
|
|
9
9
|
import { AICompletionsService } from '../../contrib/inline-completions/service/ai-completions.service';
|
|
10
|
+
import { InlineInputChatService } from '../inline-input/inline-input.service';
|
|
10
11
|
import { InlineInputPreviewDecorationID } from '../internal.type';
|
|
11
12
|
|
|
12
13
|
import { InlineHintLineDecoration } from './inline-hint-line-widget';
|
|
@@ -22,6 +23,10 @@ export class InlineHintController extends BaseAIMonacoEditorController {
|
|
|
22
23
|
return this.injector.get(AICompletionsService);
|
|
23
24
|
}
|
|
24
25
|
|
|
26
|
+
private get inlineInputChatService(): InlineInputChatService {
|
|
27
|
+
return this.injector.get(InlineInputChatService);
|
|
28
|
+
}
|
|
29
|
+
|
|
25
30
|
mount(): IDisposable {
|
|
26
31
|
return this.registerHintLineFeature(this.monacoEditor);
|
|
27
32
|
}
|
|
@@ -54,6 +59,7 @@ export class InlineHintController extends BaseAIMonacoEditorController {
|
|
|
54
59
|
if (!lineContent?.trim()) {
|
|
55
60
|
inlineHintLineDecoration.show(position);
|
|
56
61
|
}
|
|
62
|
+
this.inlineInputChatService.setCurrentVisiblePosition(position);
|
|
57
63
|
|
|
58
64
|
aiNativeContextKey.inlineHintWidgetIsVisible.set(true);
|
|
59
65
|
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import React, { ReactNode, useCallback, useEffect, useMemo, useState } from 'react';
|
|
2
2
|
|
|
3
|
-
import { Injectable } from '@opensumi/di';
|
|
4
|
-
import { AINativeConfigService, useInjectable } from '@opensumi/ide-core-browser';
|
|
3
|
+
import { Autowired, Injectable } from '@opensumi/di';
|
|
5
4
|
import { AIAction, InteractiveInput } from '@opensumi/ide-core-browser/lib/components/ai-native/index';
|
|
6
|
-
import { AIInlineInputChatContentWidgetId, Disposable,
|
|
5
|
+
import { AIInlineInputChatContentWidgetId, Disposable, Event, localize } from '@opensumi/ide-core-common';
|
|
7
6
|
import { ContentWidgetPositionPreference } from '@opensumi/ide-monaco/lib/browser/monaco-exports/editor';
|
|
8
7
|
|
|
9
8
|
import { InlineResultAction } from '../inline-actions/result-items/index';
|
|
@@ -11,24 +10,19 @@ import { EInlineChatStatus, EResultKind } from '../inline-chat/inline-chat.servi
|
|
|
11
10
|
import { AIInlineContentWidget } from '../inline-chat/inline-content-widget';
|
|
12
11
|
|
|
13
12
|
import styles from './inline-input.module.less';
|
|
14
|
-
|
|
15
|
-
import type { ICodeEditor as IMonacoCodeEditor } from '@opensumi/ide-monaco';
|
|
13
|
+
import { InlineInputChatService } from './inline-input.service';
|
|
16
14
|
|
|
17
15
|
interface IInlineInputWidgetRenderProps {
|
|
18
|
-
defaultValue?: string;
|
|
19
16
|
onLayoutChange: (height: number) => void;
|
|
20
17
|
onClose?: () => void;
|
|
21
18
|
onInteractiveInputSend?: (value: string) => void;
|
|
22
19
|
onChatStatus: Event<EInlineChatStatus>;
|
|
23
20
|
onResultClick: (k: EResultKind) => void;
|
|
24
|
-
onValueChange?: (value: string) => void;
|
|
25
21
|
}
|
|
26
22
|
|
|
27
23
|
const InlineInputWidgetRender = (props: IInlineInputWidgetRenderProps) => {
|
|
28
|
-
const {
|
|
29
|
-
props;
|
|
24
|
+
const { onClose, onInteractiveInputSend, onLayoutChange, onChatStatus, onResultClick } = props;
|
|
30
25
|
const [status, setStatus] = useState<EInlineChatStatus>(EInlineChatStatus.READY);
|
|
31
|
-
const aiNativeConfigService = useInjectable<AINativeConfigService>(AINativeConfigService);
|
|
32
26
|
|
|
33
27
|
useEffect(() => {
|
|
34
28
|
const dis = new Disposable();
|
|
@@ -70,12 +64,10 @@ const InlineInputWidgetRender = (props: IInlineInputWidgetRenderProps) => {
|
|
|
70
64
|
customOperationRender={
|
|
71
65
|
<InteractiveInput
|
|
72
66
|
autoFocus
|
|
73
|
-
defaultValue={defaultValue}
|
|
74
|
-
onValueChange={onValueChange}
|
|
75
67
|
onHeightChange={(height) => onLayoutChange(height)}
|
|
76
68
|
size='small'
|
|
77
69
|
placeholder={localize('aiNative.inline.chat.input.placeholder.default')}
|
|
78
|
-
width={
|
|
70
|
+
width={320}
|
|
79
71
|
disabled={isLoading}
|
|
80
72
|
onSend={handleInteractiveInputSend}
|
|
81
73
|
/>
|
|
@@ -85,26 +77,16 @@ const InlineInputWidgetRender = (props: IInlineInputWidgetRenderProps) => {
|
|
|
85
77
|
};
|
|
86
78
|
|
|
87
79
|
@Injectable({ multiple: true })
|
|
88
|
-
export class
|
|
80
|
+
export class InlineInputChatWidget extends AIInlineContentWidget {
|
|
81
|
+
@Autowired(InlineInputChatService)
|
|
82
|
+
private inlineInputChatService: InlineInputChatService;
|
|
83
|
+
|
|
89
84
|
allowEditorOverflow = true;
|
|
90
85
|
positionPreference = [ContentWidgetPositionPreference.ABOVE];
|
|
91
86
|
|
|
92
|
-
protected readonly _onSend = new Emitter<string>();
|
|
93
|
-
public readonly onSend = this._onSend.event;
|
|
94
|
-
|
|
95
|
-
protected readonly _onClose = new Emitter<void>();
|
|
96
|
-
public readonly onClose = this._onClose.event;
|
|
97
|
-
|
|
98
|
-
protected readonly _onValueChange = new Emitter<string>();
|
|
99
|
-
public readonly onValueChange = this._onValueChange.event;
|
|
100
|
-
|
|
101
|
-
constructor(protected readonly editor: IMonacoCodeEditor, protected readonly defaultValue?: string) {
|
|
102
|
-
super(editor);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
87
|
override dispose(): void {
|
|
106
88
|
super.dispose();
|
|
107
|
-
this.
|
|
89
|
+
this.inlineInputChatService.hide();
|
|
108
90
|
}
|
|
109
91
|
|
|
110
92
|
override id(): string {
|
|
@@ -115,18 +97,14 @@ export class InlineInputWidget extends AIInlineContentWidget {
|
|
|
115
97
|
return (
|
|
116
98
|
<div className={styles.input_wrapper}>
|
|
117
99
|
<InlineInputWidgetRender
|
|
118
|
-
|
|
119
|
-
onClose={() => this._onClose.fire()}
|
|
100
|
+
onClose={() => this.dispose()}
|
|
120
101
|
onChatStatus={this.onStatusChange.bind(this)}
|
|
121
102
|
onLayoutChange={() => {
|
|
122
103
|
this.editor.layoutContentWidget(this);
|
|
123
104
|
}}
|
|
124
|
-
onValueChange={(value) => {
|
|
125
|
-
this._onValueChange.fire(value);
|
|
126
|
-
}}
|
|
127
105
|
onInteractiveInputSend={(value) => {
|
|
128
106
|
this.launchChatStatus(EInlineChatStatus.THINKING);
|
|
129
|
-
this.
|
|
107
|
+
this._onInteractiveInputValue.fire(value);
|
|
130
108
|
}}
|
|
131
109
|
onResultClick={(k: EResultKind) => {
|
|
132
110
|
this._onResultClick.fire(k);
|