@opensumi/ide-ai-native 3.7.1-next-1739756477.0 → 3.7.1-next-1739761524.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 (49) hide show
  1. package/lib/browser/components/utils.d.ts +2 -2
  2. package/lib/browser/contrib/intelligent-completions/index.d.ts +12 -8
  3. package/lib/browser/contrib/intelligent-completions/index.d.ts.map +1 -1
  4. package/lib/browser/contrib/intelligent-completions/index.js.map +1 -1
  5. package/lib/browser/contrib/intelligent-completions/source/base.d.ts +1 -8
  6. package/lib/browser/contrib/intelligent-completions/source/base.d.ts.map +1 -1
  7. package/lib/browser/contrib/intelligent-completions/source/base.js +3 -21
  8. package/lib/browser/contrib/intelligent-completions/source/base.js.map +1 -1
  9. package/lib/browser/contrib/intelligent-completions/source/line-change.source.d.ts +2 -0
  10. package/lib/browser/contrib/intelligent-completions/source/line-change.source.d.ts.map +1 -1
  11. package/lib/browser/contrib/intelligent-completions/source/line-change.source.js +37 -5
  12. package/lib/browser/contrib/intelligent-completions/source/line-change.source.js.map +1 -1
  13. package/lib/browser/contrib/intelligent-completions/source/lint-error.source.d.ts +3 -1
  14. package/lib/browser/contrib/intelligent-completions/source/lint-error.source.d.ts.map +1 -1
  15. package/lib/browser/contrib/intelligent-completions/source/lint-error.source.js +20 -13
  16. package/lib/browser/contrib/intelligent-completions/source/lint-error.source.js.map +1 -1
  17. package/lib/browser/contrib/intelligent-completions/source/typing.source.d.ts +2 -2
  18. package/lib/browser/contrib/intelligent-completions/source/typing.source.d.ts.map +1 -1
  19. package/lib/browser/contrib/intelligent-completions/source/typing.source.js +8 -6
  20. package/lib/browser/contrib/intelligent-completions/source/typing.source.js.map +1 -1
  21. package/lib/browser/layout/layout.module.less +9 -9
  22. package/lib/browser/layout/tabbar.view.d.ts.map +1 -1
  23. package/lib/browser/layout/tabbar.view.js +5 -6
  24. package/lib/browser/layout/tabbar.view.js.map +1 -1
  25. package/lib/browser/types.d.ts +1 -5
  26. package/lib/browser/types.d.ts.map +1 -1
  27. package/lib/browser/types.js.map +1 -1
  28. package/lib/browser/widget/inline-chat/inline-chat-editor.controller.js +7 -7
  29. package/lib/browser/widget/inline-chat/inline-chat-editor.controller.js.map +1 -1
  30. package/lib/browser/widget/inline-diff/inline-diff.controller.js +1 -1
  31. package/lib/browser/widget/inline-diff/inline-diff.controller.js.map +1 -1
  32. package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.d.ts.map +1 -1
  33. package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.js +7 -5
  34. package/lib/browser/widget/inline-stream-diff/inline-stream-diff.handler.js.map +1 -1
  35. package/lib/common/utils.js +2 -2
  36. package/lib/common/utils.js.map +1 -1
  37. package/package.json +21 -21
  38. package/src/browser/contrib/intelligent-completions/index.ts +4 -9
  39. package/src/browser/contrib/intelligent-completions/source/base.ts +5 -28
  40. package/src/browser/contrib/intelligent-completions/source/line-change.source.ts +57 -7
  41. package/src/browser/contrib/intelligent-completions/source/lint-error.source.ts +31 -19
  42. package/src/browser/contrib/intelligent-completions/source/typing.source.ts +9 -7
  43. package/src/browser/layout/layout.module.less +9 -9
  44. package/src/browser/layout/tabbar.view.tsx +10 -8
  45. package/src/browser/types.ts +1 -3
  46. package/src/browser/widget/inline-chat/inline-chat-editor.controller.ts +8 -8
  47. package/src/browser/widget/inline-diff/inline-diff.controller.ts +1 -1
  48. package/src/browser/widget/inline-stream-diff/inline-stream-diff.handler.tsx +7 -5
  49. package/src/common/utils.ts +2 -2
@@ -1,23 +1,26 @@
1
1
  import { Injectable } from '@opensumi/di';
2
2
  import { AINativeSettingSectionsId, ECodeEditsSourceTyping, IDisposable } from '@opensumi/ide-core-common';
3
- import { IModelContentChangedEvent } from '@opensumi/ide-monaco';
3
+ import { IModelContentChangedEvent, Position } from '@opensumi/ide-monaco';
4
4
 
5
5
  import { BaseCodeEditsSource } from './base';
6
6
 
7
7
  @Injectable({ multiple: true })
8
8
  export class TypingCodeEditsSource extends BaseCodeEditsSource {
9
- public priority = 2;
9
+ public priority = 0;
10
10
 
11
11
  public mount(): IDisposable {
12
12
  this.addDispose(
13
13
  this.monacoEditor.onDidChangeModelContent((event: IModelContentChangedEvent) => {
14
- this.doTrigger(event);
14
+ const position = this.monacoEditor.getPosition();
15
+ if (position) {
16
+ this.doTrigger(position, event);
17
+ }
15
18
  }),
16
19
  );
17
20
  return this;
18
21
  }
19
22
 
20
- protected async doTrigger(data: IModelContentChangedEvent) {
23
+ protected async doTrigger(position: Position, data: IModelContentChangedEvent) {
21
24
  const isTypingEnabled = this.preferenceService.getValid(AINativeSettingSectionsId.CodeEditsTyping, false);
22
25
 
23
26
  if (!isTypingEnabled || !this.model) {
@@ -26,9 +29,8 @@ export class TypingCodeEditsSource extends BaseCodeEditsSource {
26
29
 
27
30
  this.setBean({
28
31
  typing: ECodeEditsSourceTyping.Typing,
29
- data: {
30
- [ECodeEditsSourceTyping.Typing]: data,
31
- },
32
+ position,
33
+ data,
32
34
  });
33
35
  }
34
36
  }
@@ -119,20 +119,20 @@
119
119
  border: none;
120
120
  }
121
121
 
122
+ .header {
123
+ height: 36px;
124
+ display: flex;
125
+ align-items: center;
126
+ justify-content: space-between;
127
+ padding: 0 10px;
128
+ background-color: var(--editorGroupHeader-tabsBackground);
129
+ }
130
+
122
131
  .right_slot_container_wrap {
123
132
  height: 100%;
124
133
  display: flex;
125
134
  flex-direction: column;
126
135
 
127
- .header {
128
- height: 36px;
129
- display: flex;
130
- align-items: center;
131
- justify-content: space-between;
132
- padding: 0 10px;
133
- background-color: var(--editorGroupHeader-tabsBackground);
134
- }
135
-
136
136
  .container {
137
137
  flex: 1;
138
138
  }
@@ -174,16 +174,18 @@ export const AIRightTabRenderer = ({
174
174
  return (
175
175
  <ContainerView
176
176
  {...props}
177
+ customTitleBar={
178
+ <div className={styles.header}>
179
+ <span className={styles.title}>{options && options.title}</span>
180
+ <div className={styles.side}>
181
+ <EnhancePopover id={'ai_right_panel_header_close'} title={localize('editor.title.context.close')}>
182
+ <EnhanceIcon icon='close' onClick={handleClose} />
183
+ </EnhancePopover>
184
+ </div>
185
+ </div>
186
+ }
177
187
  renderContainerWrap={({ children }) => (
178
188
  <div className={styles.right_slot_container_wrap}>
179
- <div className={styles.header}>
180
- <span className={styles.title}>{options && options.title}</span>
181
- <div className={styles.side}>
182
- <EnhancePopover id={'ai_right_panel_header_close'} title={localize('editor.title.context.close')}>
183
- <EnhanceIcon icon='close' onClick={handleClose} />
184
- </EnhancePopover>
185
- </div>
186
- </div>
187
189
  <div className={styles.container}>{children}</div>
188
190
  </div>
189
191
  )}
@@ -42,9 +42,7 @@ interface IBaseInlineChatHandler<T extends any[]> {
42
42
  providerDiffPreviewStrategy?: (...args: T) => MaybePromise<ChatResponse | InlineChatController>;
43
43
  }
44
44
 
45
- export type IEditorInlineChatHandler = IBaseInlineChatHandler<
46
- [editor: ICodeEditor, selection: ISelection, token: CancellationToken]
47
- >;
45
+ export type IEditorInlineChatHandler = IBaseInlineChatHandler<[editor: ICodeEditor, token: CancellationToken]>;
48
46
  export type IInteractiveInputHandler = IBaseInlineChatHandler<
49
47
  [editor: ICodeEditor, selection: ISelection, value: string, token: CancellationToken]
50
48
  >;
@@ -280,7 +280,7 @@ export class InlineChatEditorController extends BaseAIMonacoEditorController {
280
280
  return undefined;
281
281
  }
282
282
 
283
- return strategy.bind(this, monacoEditor, crossSelection, this.token);
283
+ return strategy.bind(this, monacoEditor, this.token);
284
284
  };
285
285
 
286
286
  this.runAction({
@@ -297,7 +297,7 @@ export class InlineChatEditorController extends BaseAIMonacoEditorController {
297
297
  });
298
298
  return relationId;
299
299
  },
300
- execute: handler.execute ? handler.execute!.bind(this, monacoEditor, crossSelection, this.token) : undefined,
300
+ execute: handler.execute ? handler.execute!.bind(this, monacoEditor, this.token) : undefined,
301
301
  providerPreview: previewer(),
302
302
  extraData: {
303
303
  actionSource: source === 'codeAction' ? ActionSourceEnum.CodeAction : ActionSourceEnum.InlineChat,
@@ -508,6 +508,12 @@ export class InlineChatEditorController extends BaseAIMonacoEditorController {
508
508
  return;
509
509
  }
510
510
 
511
+ this.visibleDiffWidget({
512
+ monacoEditor,
513
+ options: { crossSelection, chatResponse: response },
514
+ reportInfo: { relationId, startTime, isRetry, actionType, actionSource },
515
+ });
516
+
511
517
  this.aiInlineChatOperationDisposable.addDispose([
512
518
  this.aiInlineContentWidget.onResultClick((kind: EResultKind) => {
513
519
  const modifyContent = this.inlineDiffController.getModifyContent();
@@ -573,12 +579,6 @@ export class InlineChatEditorController extends BaseAIMonacoEditorController {
573
579
  });
574
580
  }),
575
581
  ]);
576
-
577
- this.visibleDiffWidget({
578
- monacoEditor,
579
- options: { crossSelection, chatResponse: response },
580
- reportInfo: { relationId, startTime, isRetry, actionType, actionSource },
581
- });
582
582
  }
583
583
 
584
584
  public async runAction(params: {
@@ -74,7 +74,7 @@ export class InlineDiffController extends BaseAIMonacoEditorController {
74
74
  * 保留 previewer 的实例,仅卸载 previewer 的渲染层
75
75
  */
76
76
  const id = model.id;
77
- const previewer = this.currentPreviewer.get();
77
+ const previewer = this.currentPreviewer.read(reader);
78
78
  if (previewer && previewer.modelId !== id && !previewer.disposed) {
79
79
  previewer.hide();
80
80
  }
@@ -467,15 +467,17 @@ export class InlineStreamDiffHandler extends Disposable implements IInlineDiffPr
467
467
  }
468
468
 
469
469
  public pushRateFinallyDiffStack(diffModel: IComputeDiffData): void {
470
- // 可能存在 rate editor controller 处理完之后接口层流式才结束
471
- if (this.isEditing === false) {
472
- this.finallyRender(diffModel);
473
- }
470
+ transaction((tx) => {
471
+ this.finallyDiffModel.set(diffModel, tx);
472
+ // 可能存在 rate editor controller 处理完之后接口层流式才结束
473
+ if (this.isEditing === false) {
474
+ this.finallyRender(diffModel);
475
+ }
476
+ });
474
477
  }
475
478
 
476
479
  public finallyRender(diffModel: IComputeDiffData): void {
477
480
  transaction((tx) => {
478
- this.finallyDiffModel.set(diffModel, tx);
479
481
  this.diffModel.set(diffModel, tx);
480
482
  });
481
483
 
@@ -32,10 +32,10 @@ export const extractCodeBlocks = (content: string): string => {
32
32
  let startLine = 0;
33
33
 
34
34
  lines.forEach((line, i) => {
35
- if (!inBlock && line.trim().startsWith(BACK_QUOTE_3_SYMBOL)) {
35
+ if (!inBlock && line.startsWith(BACK_QUOTE_3_SYMBOL)) {
36
36
  inBlock = true;
37
37
  startLine = i + 1;
38
- } else if (inBlock && line.trim().startsWith(BACK_QUOTE_3_SYMBOL)) {
38
+ } else if (inBlock && line.startsWith(BACK_QUOTE_3_SYMBOL)) {
39
39
  inBlock = false;
40
40
  const endLine = i;
41
41
  newContents = lines.slice(startLine, endLine);