@theia/ai-code-completion 1.62.0-next.3 → 1.62.1
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-code-completion-preference.d.ts +1 -0
- package/lib/browser/ai-code-completion-preference.d.ts.map +1 -1
- package/lib/browser/ai-code-completion-preference.js +9 -1
- package/lib/browser/ai-code-completion-preference.js.map +1 -1
- package/lib/browser/ai-code-frontend-application-contribution.d.ts +3 -1
- package/lib/browser/ai-code-frontend-application-contribution.d.ts.map +1 -1
- package/lib/browser/ai-code-frontend-application-contribution.js +29 -9
- package/lib/browser/ai-code-frontend-application-contribution.js.map +1 -1
- package/lib/browser/code-completion-agent.d.ts +2 -3
- package/lib/browser/code-completion-agent.d.ts.map +1 -1
- package/lib/browser/code-completion-agent.js +2 -18
- package/lib/browser/code-completion-agent.js.map +1 -1
- package/lib/browser/code-completion-debouncer.d.ts +5 -0
- package/lib/browser/code-completion-debouncer.d.ts.map +1 -0
- package/lib/browser/code-completion-debouncer.js +35 -0
- package/lib/browser/code-completion-debouncer.js.map +1 -0
- package/lib/browser/code-completion-prompt-template.d.ts +2 -2
- package/lib/browser/code-completion-prompt-template.d.ts.map +1 -1
- package/lib/browser/code-completion-prompt-template.js +12 -11
- package/lib/browser/code-completion-prompt-template.js.map +1 -1
- package/package.json +8 -8
- package/src/browser/ai-code-completion-preference.ts +9 -0
- package/src/browser/ai-code-frontend-application-contribution.ts +37 -5
- package/src/browser/code-completion-agent.ts +6 -20
- package/src/browser/code-completion-debouncer.ts +35 -0
- package/src/browser/code-completion-prompt-template.ts +8 -7
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { PreferenceSchema } from '@theia/core/lib/browser/preferences/preference-contribution';
|
|
2
2
|
export declare const PREF_AI_INLINE_COMPLETION_AUTOMATIC_ENABLE = "ai-features.codeCompletion.automaticCodeCompletion";
|
|
3
|
+
export declare const PREF_AI_INLINE_COMPLETION_DEBOUNCE_DELAY = "ai-features.codeCompletion.debounceDelay";
|
|
3
4
|
export declare const PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS = "ai-features.codeCompletion.excludedFileExtensions";
|
|
4
5
|
export declare const PREF_AI_INLINE_COMPLETION_MAX_CONTEXT_LINES = "ai-features.codeCompletion.maxContextLines";
|
|
5
6
|
export declare const PREF_AI_INLINE_COMPLETION_STRIP_BACKTICKS = "ai-features.codeCompletion.stripBackticks";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-code-completion-preference.d.ts","sourceRoot":"","sources":["../../src/browser/ai-code-completion-preference.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6DAA6D,CAAC;AAI/F,eAAO,MAAM,0CAA0C,uDAAuD,CAAC;AAC/G,eAAO,MAAM,6CAA6C,sDAAsD,CAAC;AACjH,eAAO,MAAM,2CAA2C,+CAA+C,CAAC;AACxG,eAAO,MAAM,yCAAyC,8CAA8C,CAAC;AAErG,eAAO,MAAM,iCAAiC,EAAE,
|
|
1
|
+
{"version":3,"file":"ai-code-completion-preference.d.ts","sourceRoot":"","sources":["../../src/browser/ai-code-completion-preference.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6DAA6D,CAAC;AAI/F,eAAO,MAAM,0CAA0C,uDAAuD,CAAC;AAC/G,eAAO,MAAM,wCAAwC,6CAA6C,CAAC;AACnG,eAAO,MAAM,6CAA6C,sDAAsD,CAAC;AACjH,eAAO,MAAM,2CAA2C,+CAA+C,CAAC;AACxG,eAAO,MAAM,yCAAyC,8CAA8C,CAAC;AAErG,eAAO,MAAM,iCAAiC,EAAE,gBA+C/C,CAAC"}
|
|
@@ -15,10 +15,11 @@
|
|
|
15
15
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
16
|
// *****************************************************************************
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.AICodeCompletionPreferencesSchema = exports.PREF_AI_INLINE_COMPLETION_STRIP_BACKTICKS = exports.PREF_AI_INLINE_COMPLETION_MAX_CONTEXT_LINES = exports.PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS = exports.PREF_AI_INLINE_COMPLETION_AUTOMATIC_ENABLE = void 0;
|
|
18
|
+
exports.AICodeCompletionPreferencesSchema = exports.PREF_AI_INLINE_COMPLETION_STRIP_BACKTICKS = exports.PREF_AI_INLINE_COMPLETION_MAX_CONTEXT_LINES = exports.PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS = exports.PREF_AI_INLINE_COMPLETION_DEBOUNCE_DELAY = exports.PREF_AI_INLINE_COMPLETION_AUTOMATIC_ENABLE = void 0;
|
|
19
19
|
const ai_core_preferences_1 = require("@theia/ai-core/lib/browser/ai-core-preferences");
|
|
20
20
|
const core_1 = require("@theia/core");
|
|
21
21
|
exports.PREF_AI_INLINE_COMPLETION_AUTOMATIC_ENABLE = 'ai-features.codeCompletion.automaticCodeCompletion';
|
|
22
|
+
exports.PREF_AI_INLINE_COMPLETION_DEBOUNCE_DELAY = 'ai-features.codeCompletion.debounceDelay';
|
|
22
23
|
exports.PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS = 'ai-features.codeCompletion.excludedFileExtensions';
|
|
23
24
|
exports.PREF_AI_INLINE_COMPLETION_MAX_CONTEXT_LINES = 'ai-features.codeCompletion.maxContextLines';
|
|
24
25
|
exports.PREF_AI_INLINE_COMPLETION_STRIP_BACKTICKS = 'ai-features.codeCompletion.stripBackticks';
|
|
@@ -33,6 +34,13 @@ exports.AICodeCompletionPreferencesSchema = {
|
|
|
33
34
|
Alternatively, you can manually trigger the code via the command "Trigger Inline Suggestion" or the default shortcut "Ctrl+Alt+Space".'),
|
|
34
35
|
default: false
|
|
35
36
|
},
|
|
37
|
+
[exports.PREF_AI_INLINE_COMPLETION_DEBOUNCE_DELAY]: {
|
|
38
|
+
title: core_1.nls.localize('theia/ai/completion/debounceDelay/title', 'Debounce Delay'),
|
|
39
|
+
type: 'number',
|
|
40
|
+
description: core_1.nls.localize('theia/ai/completion/debounceDelay/description', 'Controls the delay in milliseconds before triggering AI completions after changes have been detected in the editor.\
|
|
41
|
+
Requires `Automatic Code Completion` to be enabled. Enter 0 to disable the debounce delay.'),
|
|
42
|
+
default: 300
|
|
43
|
+
},
|
|
36
44
|
[exports.PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS]: {
|
|
37
45
|
title: core_1.nls.localize('theia/ai/completion/excludedFileExts/title', 'Excluded File Extensions'),
|
|
38
46
|
type: 'array',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-code-completion-preference.js","sourceRoot":"","sources":["../../src/browser/ai-code-completion-preference.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAGhF,wFAA2F;AAC3F,sCAAkC;AAErB,QAAA,0CAA0C,GAAG,oDAAoD,CAAC;AAClG,QAAA,6CAA6C,GAAG,mDAAmD,CAAC;AACpG,QAAA,2CAA2C,GAAG,4CAA4C,CAAC;AAC3F,QAAA,yCAAyC,GAAG,2CAA2C,CAAC;AAExF,QAAA,iCAAiC,GAAqB;IAC/D,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,CAAC,kDAA0C,CAAC,EAAE;YAC1C,KAAK,EAAE,+CAAyB;YAChC,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,iDAAiD,EACvE;;mJAEmI,CAAC;YACxI,OAAO,EAAE,KAAK;SACjB;QACD,CAAC,qDAA6C,CAAC,EAAE;YAC7C,KAAK,EAAE,UAAG,CAAC,QAAQ,CAAC,4CAA4C,EAAE,0BAA0B,CAAC;YAC7F,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,kDAAkD,EAAE,oFAAoF,CAAC;YACnK,KAAK,EAAE;gBACH,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,EAAE;SACd;QACD,CAAC,mDAA2C,CAAC,EAAE;YAC3C,KAAK,EAAE,UAAG,CAAC,QAAQ,CAAC,2CAA2C,EAAE,uBAAuB,CAAC;YACzF,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,iDAAiD,EACvE;sHACsG,CAAC;YAC3G,OAAO,EAAE,CAAC,CAAC;YACX,OAAO,EAAE,CAAC,CAAC;SACd;QACD,CAAC,iDAAyC,CAAC,EAAE;YACzC,KAAK,EAAE,UAAG,CAAC,QAAQ,CAAC,0CAA0C,EAAE,yCAAyC,CAAC;YAC1G,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,gDAAgD,EACtE;+IAC+H,CAAC;YACpI,OAAO,EAAE,IAAI;SAChB;KACJ;CACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"ai-code-completion-preference.js","sourceRoot":"","sources":["../../src/browser/ai-code-completion-preference.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAGhF,wFAA2F;AAC3F,sCAAkC;AAErB,QAAA,0CAA0C,GAAG,oDAAoD,CAAC;AAClG,QAAA,wCAAwC,GAAG,0CAA0C,CAAC;AACtF,QAAA,6CAA6C,GAAG,mDAAmD,CAAC;AACpG,QAAA,2CAA2C,GAAG,4CAA4C,CAAC;AAC3F,QAAA,yCAAyC,GAAG,2CAA2C,CAAC;AAExF,QAAA,iCAAiC,GAAqB;IAC/D,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,CAAC,kDAA0C,CAAC,EAAE;YAC1C,KAAK,EAAE,+CAAyB;YAChC,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,iDAAiD,EACvE;;mJAEmI,CAAC;YACxI,OAAO,EAAE,KAAK;SACjB;QACD,CAAC,gDAAwC,CAAC,EAAE;YACxC,KAAK,EAAE,UAAG,CAAC,QAAQ,CAAC,yCAAyC,EAAE,gBAAgB,CAAC;YAChF,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,+CAA+C,EACrE;2GAC2F,CAAC;YAChG,OAAO,EAAE,GAAG;SACf;QACD,CAAC,qDAA6C,CAAC,EAAE;YAC7C,KAAK,EAAE,UAAG,CAAC,QAAQ,CAAC,4CAA4C,EAAE,0BAA0B,CAAC;YAC7F,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,kDAAkD,EAAE,oFAAoF,CAAC;YACnK,KAAK,EAAE;gBACH,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,EAAE;SACd;QACD,CAAC,mDAA2C,CAAC,EAAE;YAC3C,KAAK,EAAE,UAAG,CAAC,QAAQ,CAAC,2CAA2C,EAAE,uBAAuB,CAAC;YACzF,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,iDAAiD,EACvE;sHACsG,CAAC;YAC3G,OAAO,EAAE,CAAC,CAAC;YACX,OAAO,EAAE,CAAC,CAAC;SACd;QACD,CAAC,iDAAyC,CAAC,EAAE;YACzC,KAAK,EAAE,UAAG,CAAC,QAAQ,CAAC,0CAA0C,EAAE,yCAAyC,CAAC;YAC1G,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,gDAAgD,EACtE;+IAC+H,CAAC;YACpI,OAAO,EAAE,IAAI;SAChB;KACJ;CACJ,CAAC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { FrontendApplicationContribution, KeybindingContribution, KeybindingRegistry, PreferenceService } from '@theia/core/lib/browser';
|
|
2
1
|
import { AIActivationService } from '@theia/ai-core/lib/browser';
|
|
3
2
|
import { Disposable } from '@theia/core';
|
|
3
|
+
import { FrontendApplicationContribution, KeybindingContribution, KeybindingRegistry, PreferenceService } from '@theia/core/lib/browser';
|
|
4
4
|
export declare class AIFrontendApplicationContribution implements FrontendApplicationContribution, KeybindingContribution {
|
|
5
5
|
private inlineCodeCompletionProvider;
|
|
6
6
|
protected readonly preferenceService: PreferenceService;
|
|
7
7
|
protected readonly activationService: AIActivationService;
|
|
8
|
+
private debouncer;
|
|
9
|
+
private debounceDelay;
|
|
8
10
|
private toDispose;
|
|
9
11
|
onDidInitializeLayout(): void;
|
|
10
12
|
protected handlePreferences(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-code-frontend-application-contribution.d.ts","sourceRoot":"","sources":["../../src/browser/ai-code-frontend-application-contribution.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE
|
|
1
|
+
{"version":3,"file":"ai-code-frontend-application-contribution.d.ts","sourceRoot":"","sources":["../../src/browser/ai-code-frontend-application-contribution.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,+BAA+B,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAWzI,qBACa,iCAAkC,YAAW,+BAA+B,EAAE,sBAAsB;IAE7G,OAAO,CAAC,4BAA4B,CAAkC;IAGtE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAGxD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;IAE1D,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,SAAS,CAAiC;IAElD,qBAAqB,IAAI,IAAI;IAM7B,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAwBnC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,GAAG,IAAI;IAQ1D,SAAS,CAAC,uBAAuB,IAAI,UAAU;CA6ClD"}
|
|
@@ -18,15 +18,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
18
18
|
exports.AIFrontendApplicationContribution = void 0;
|
|
19
19
|
const tslib_1 = require("tslib");
|
|
20
20
|
const monaco = require("@theia/monaco-editor-core");
|
|
21
|
-
const browser_1 = require("@theia/core/lib/browser");
|
|
22
|
-
const inversify_1 = require("@theia/core/shared/inversify");
|
|
23
|
-
const browser_2 = require("@theia/ai-core/lib/browser");
|
|
21
|
+
const browser_1 = require("@theia/ai-core/lib/browser");
|
|
24
22
|
const core_1 = require("@theia/core");
|
|
25
|
-
const
|
|
26
|
-
const
|
|
23
|
+
const browser_2 = require("@theia/core/lib/browser");
|
|
24
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
27
25
|
const languages_1 = require("@theia/monaco-editor-core/esm/vs/editor/common/languages");
|
|
26
|
+
const ai_code_completion_preference_1 = require("./ai-code-completion-preference");
|
|
27
|
+
const ai_code_inline_completion_provider_1 = require("./ai-code-inline-completion-provider");
|
|
28
|
+
const code_completion_debouncer_1 = require("./code-completion-debouncer");
|
|
28
29
|
let AIFrontendApplicationContribution = class AIFrontendApplicationContribution {
|
|
29
30
|
constructor() {
|
|
31
|
+
this.debouncer = new code_completion_debouncer_1.InlineCompletionDebouncer();
|
|
30
32
|
this.toDispose = new Map();
|
|
31
33
|
}
|
|
32
34
|
onDidInitializeLayout() {
|
|
@@ -37,6 +39,7 @@ let AIFrontendApplicationContribution = class AIFrontendApplicationContribution
|
|
|
37
39
|
handlePreferences() {
|
|
38
40
|
const handler = () => this.handleInlineCompletions();
|
|
39
41
|
this.toDispose.set('inlineCompletions', handler());
|
|
42
|
+
this.debounceDelay = this.preferenceService.get(ai_code_completion_preference_1.PREF_AI_INLINE_COMPLETION_DEBOUNCE_DELAY, 300);
|
|
40
43
|
this.preferenceService.onPreferenceChanged(event => {
|
|
41
44
|
var _a;
|
|
42
45
|
if (event.preferenceName === ai_code_completion_preference_1.PREF_AI_INLINE_COMPLETION_AUTOMATIC_ENABLE
|
|
@@ -44,6 +47,9 @@ let AIFrontendApplicationContribution = class AIFrontendApplicationContribution
|
|
|
44
47
|
(_a = this.toDispose.get('inlineCompletions')) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
45
48
|
this.toDispose.set('inlineCompletions', handler());
|
|
46
49
|
}
|
|
50
|
+
if (event.preferenceName === ai_code_completion_preference_1.PREF_AI_INLINE_COMPLETION_DEBOUNCE_DELAY) {
|
|
51
|
+
this.debounceDelay = event.newValue;
|
|
52
|
+
}
|
|
47
53
|
});
|
|
48
54
|
this.activationService.onDidChangeActiveStatus(change => {
|
|
49
55
|
var _a;
|
|
@@ -73,7 +79,21 @@ let AIFrontendApplicationContribution = class AIFrontendApplicationContribution
|
|
|
73
79
|
if (excludedExtensions.some(ext => fileName.endsWith(ext))) {
|
|
74
80
|
return { items: [] };
|
|
75
81
|
}
|
|
76
|
-
|
|
82
|
+
const completionHandler = () => {
|
|
83
|
+
try {
|
|
84
|
+
return this.inlineCodeCompletionProvider.provideInlineCompletions(model, position, context, token);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
console.error('Error providing inline completions:', error);
|
|
88
|
+
return { items: [] };
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
if (context.triggerKind === languages_1.InlineCompletionTriggerKind.Automatic) {
|
|
92
|
+
return this.debouncer.debounce(async () => completionHandler(), this.debounceDelay);
|
|
93
|
+
}
|
|
94
|
+
else if (context.triggerKind === languages_1.InlineCompletionTriggerKind.Explicit) {
|
|
95
|
+
return completionHandler();
|
|
96
|
+
}
|
|
77
97
|
},
|
|
78
98
|
freeInlineCompletions: completions => {
|
|
79
99
|
this.inlineCodeCompletionProvider.freeInlineCompletions(completions);
|
|
@@ -87,12 +107,12 @@ tslib_1.__decorate([
|
|
|
87
107
|
tslib_1.__metadata("design:type", ai_code_inline_completion_provider_1.AICodeInlineCompletionsProvider)
|
|
88
108
|
], AIFrontendApplicationContribution.prototype, "inlineCodeCompletionProvider", void 0);
|
|
89
109
|
tslib_1.__decorate([
|
|
90
|
-
(0, inversify_1.inject)(
|
|
110
|
+
(0, inversify_1.inject)(browser_2.PreferenceService),
|
|
91
111
|
tslib_1.__metadata("design:type", Object)
|
|
92
112
|
], AIFrontendApplicationContribution.prototype, "preferenceService", void 0);
|
|
93
113
|
tslib_1.__decorate([
|
|
94
|
-
(0, inversify_1.inject)(
|
|
95
|
-
tslib_1.__metadata("design:type",
|
|
114
|
+
(0, inversify_1.inject)(browser_1.AIActivationService),
|
|
115
|
+
tslib_1.__metadata("design:type", browser_1.AIActivationService)
|
|
96
116
|
], AIFrontendApplicationContribution.prototype, "activationService", void 0);
|
|
97
117
|
exports.AIFrontendApplicationContribution = AIFrontendApplicationContribution = tslib_1.__decorate([
|
|
98
118
|
(0, inversify_1.injectable)()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-code-frontend-application-contribution.js","sourceRoot":"","sources":["../../src/browser/ai-code-frontend-application-contribution.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,oDAAoD;AAEpD,qDAAyI;AACzI,4DAAkE;AAClE,
|
|
1
|
+
{"version":3,"file":"ai-code-frontend-application-contribution.js","sourceRoot":"","sources":["../../src/browser/ai-code-frontend-application-contribution.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LanguageModelService } from '@theia/ai-core/lib/browser';
|
|
2
|
-
import { Agent, AgentSpecificVariables,
|
|
2
|
+
import { Agent, AgentSpecificVariables, LanguageModelRegistry, LanguageModelRequirement, PromptService, PromptVariantSet } from '@theia/ai-core/lib/common';
|
|
3
3
|
import { ILogger, ProgressService } from '@theia/core';
|
|
4
4
|
import { PreferenceService } from '@theia/core/lib/browser';
|
|
5
5
|
import * as monaco from '@theia/monaco-editor-core';
|
|
@@ -14,14 +14,13 @@ export declare class CodeCompletionAgentImpl implements CodeCompletionAgent {
|
|
|
14
14
|
protected logger: ILogger;
|
|
15
15
|
protected languageModelRegistry: LanguageModelRegistry;
|
|
16
16
|
protected promptService: PromptService;
|
|
17
|
-
protected recordingService: CommunicationRecordingService;
|
|
18
17
|
protected progressService: ProgressService;
|
|
19
18
|
protected preferences: PreferenceService;
|
|
20
19
|
protected postProcessor: CodeCompletionPostProcessor;
|
|
21
20
|
id: string;
|
|
22
21
|
name: string;
|
|
23
22
|
description: string;
|
|
24
|
-
|
|
23
|
+
prompts: PromptVariantSet[];
|
|
25
24
|
languageModelRequirements: LanguageModelRequirement[];
|
|
26
25
|
readonly variables: string[];
|
|
27
26
|
readonly functions: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-completion-agent.d.ts","sourceRoot":"","sources":["../../src/browser/code-completion-agent.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EACH,KAAK,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"code-completion-agent.d.ts","sourceRoot":"","sources":["../../src/browser/code-completion-agent.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EACH,KAAK,EAAE,sBAAsB,EAC7B,qBAAqB,EAAE,wBAAwB,EAAE,aAAa,EAC9D,gBAAgB,EAEnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAgB,OAAO,EAAO,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,KAAK,MAAM,MAAM,2BAA2B,CAAC;AAGpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAE9E,eAAO,MAAM,mBAAmB,eAAgC,CAAC;AACjE,MAAM,WAAW,mBAAoB,SAAQ,KAAK;IAC9C,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAC/E,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,uBAAuB,EAAE,KAAK,EAAE,MAAM,CAAC,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAA;CACnJ;AAED,qBACa,uBAAwB,YAAW,mBAAmB;IAE/D,SAAS,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IAE/C,wBAAwB,CAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,uBAAuB,EACjD,KAAK,EAAE,MAAM,CAAC,iBAAiB,GAChC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAsH1D,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;IAG1B,SAAS,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAGvD,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IAGvC,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAG3C,SAAS,CAAC,WAAW,EAAE,iBAAiB,CAAC;IAGzC,SAAS,CAAC,aAAa,EAAE,2BAA2B,CAAC;IAErD,EAAE,SAAqB;IACvB,IAAI,SAAqB;IACzB,WAAW,SACkI;IAC7I,OAAO,EAAE,gBAAgB,EAAE,CAAyB;IACpD,yBAAyB,EAAE,wBAAwB,EAAE,CAKnD;IACF,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAM;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAM;IAClC,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB,EAAE,CAKvD;IACF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CACxC"}
|
|
@@ -32,7 +32,7 @@ let CodeCompletionAgentImpl = class CodeCompletionAgentImpl {
|
|
|
32
32
|
this.id = 'Code Completion';
|
|
33
33
|
this.name = 'Code Completion';
|
|
34
34
|
this.description = core_1.nls.localize('theia/ai/completion/agent/description', 'This agent provides inline code completion in the code editor in the Theia IDE.');
|
|
35
|
-
this.
|
|
35
|
+
this.prompts = code_completion_prompt_template_1.codeCompletionPrompts;
|
|
36
36
|
this.languageModelRequirements = [
|
|
37
37
|
{
|
|
38
38
|
purpose: 'code-completion',
|
|
@@ -95,7 +95,7 @@ let CodeCompletionAgentImpl = class CodeCompletionAgentImpl {
|
|
|
95
95
|
return undefined;
|
|
96
96
|
}
|
|
97
97
|
const prompt = await this.promptService
|
|
98
|
-
.
|
|
98
|
+
.getResolvedPromptFragment('code-completion-prompt', { prefix, suffix, file, language })
|
|
99
99
|
.then(p => p === null || p === void 0 ? void 0 : p.text);
|
|
100
100
|
if (!prompt) {
|
|
101
101
|
this.logger.error('No prompt found for code-completion-agent');
|
|
@@ -117,12 +117,6 @@ let CodeCompletionAgentImpl = class CodeCompletionAgentImpl {
|
|
|
117
117
|
if (token.isCancellationRequested) {
|
|
118
118
|
return undefined;
|
|
119
119
|
}
|
|
120
|
-
this.recordingService.recordRequest({
|
|
121
|
-
agentId: this.id,
|
|
122
|
-
sessionId,
|
|
123
|
-
requestId,
|
|
124
|
-
request: request.messages
|
|
125
|
-
});
|
|
126
120
|
const response = await this.languageModelService.sendRequest(languageModel, request);
|
|
127
121
|
if (token.isCancellationRequested) {
|
|
128
122
|
return undefined;
|
|
@@ -131,12 +125,6 @@ let CodeCompletionAgentImpl = class CodeCompletionAgentImpl {
|
|
|
131
125
|
if (token.isCancellationRequested) {
|
|
132
126
|
return undefined;
|
|
133
127
|
}
|
|
134
|
-
this.recordingService.recordResponse({
|
|
135
|
-
agentId: this.id,
|
|
136
|
-
sessionId,
|
|
137
|
-
requestId,
|
|
138
|
-
response: [{ actor: 'ai', text: completionText, type: 'text' }]
|
|
139
|
-
});
|
|
140
128
|
const postProcessedCompletionText = this.postProcessor.postProcess(completionText);
|
|
141
129
|
return {
|
|
142
130
|
items: [{
|
|
@@ -174,10 +162,6 @@ tslib_1.__decorate([
|
|
|
174
162
|
(0, inversify_1.inject)(common_1.PromptService),
|
|
175
163
|
tslib_1.__metadata("design:type", Object)
|
|
176
164
|
], CodeCompletionAgentImpl.prototype, "promptService", void 0);
|
|
177
|
-
tslib_1.__decorate([
|
|
178
|
-
(0, inversify_1.inject)(common_1.CommunicationRecordingService),
|
|
179
|
-
tslib_1.__metadata("design:type", Object)
|
|
180
|
-
], CodeCompletionAgentImpl.prototype, "recordingService", void 0);
|
|
181
165
|
tslib_1.__decorate([
|
|
182
166
|
(0, inversify_1.inject)(core_1.ProgressService),
|
|
183
167
|
tslib_1.__metadata("design:type", core_1.ProgressService)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-completion-agent.js","sourceRoot":"","sources":["../../src/browser/code-completion-agent.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,wDAAkE;AAClE,
|
|
1
|
+
{"version":3,"file":"code-completion-agent.js","sourceRoot":"","sources":["../../src/browser/code-completion-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-completion-debouncer.d.ts","sourceRoot":"","sources":["../../src/browser/code-completion-debouncer.ts"],"names":[],"mappings":"AAgBA,qBAAa,yBAAyB;IAElC,OAAO,CAAC,SAAS,CAAC,CAAS;IAE3B,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAc7E"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2025 EclipseSource GmbH.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.InlineCompletionDebouncer = void 0;
|
|
19
|
+
class InlineCompletionDebouncer {
|
|
20
|
+
debounce(callback, debounceDelay) {
|
|
21
|
+
return new Promise((resolve, reject) => {
|
|
22
|
+
if (this.timeoutId) {
|
|
23
|
+
window.clearTimeout(this.timeoutId);
|
|
24
|
+
}
|
|
25
|
+
this.timeoutId = window.setTimeout(() => {
|
|
26
|
+
callback()
|
|
27
|
+
.then(resolve)
|
|
28
|
+
.catch(reject);
|
|
29
|
+
this.timeoutId = undefined;
|
|
30
|
+
}, debounceDelay);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.InlineCompletionDebouncer = InlineCompletionDebouncer;
|
|
35
|
+
//# sourceMappingURL=code-completion-debouncer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-completion-debouncer.js","sourceRoot":"","sources":["../../src/browser/code-completion-debouncer.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAEhF,MAAa,yBAAyB;IAIlC,QAAQ,CAAI,QAA0B,EAAE,aAAqB;QACzD,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxC,CAAC;YAED,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;gBACpC,QAAQ,EAAE;qBACL,IAAI,CAAC,OAAO,CAAC;qBACb,KAAK,CAAC,MAAM,CAAC,CAAC;gBACnB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC/B,CAAC,EAAE,aAAa,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAlBD,8DAkBC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare const
|
|
1
|
+
import { PromptVariantSet } from '@theia/ai-core/lib/common';
|
|
2
|
+
export declare const codeCompletionPrompts: PromptVariantSet[];
|
|
3
3
|
//# sourceMappingURL=code-completion-prompt-template.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-completion-prompt-template.d.ts","sourceRoot":"","sources":["../../src/browser/code-completion-prompt-template.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"code-completion-prompt-template.d.ts","sourceRoot":"","sources":["../../src/browser/code-completion-prompt-template.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,eAAO,MAAM,qBAAqB,EAAE,gBAAgB,EAgCnD,CAAC"}
|
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
// SPDX-License-Identifier: MIT
|
|
11
11
|
// *****************************************************************************
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.
|
|
14
|
-
exports.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
exports.codeCompletionPrompts = void 0;
|
|
14
|
+
exports.codeCompletionPrompts = [{
|
|
15
|
+
id: 'code-completion-prompt',
|
|
16
|
+
variants: [{
|
|
17
|
+
id: 'code-completion-prompt-previous',
|
|
18
|
+
template: `{{!-- This prompt is licensed under the MIT License (https://opensource.org/license/mit).
|
|
19
19
|
Made improvements or adaptations to this prompt template? We’d love for you to share it with the community! Contribute back here:
|
|
20
20
|
https://github.com/eclipse-theia/theia/discussions/new?category=prompt-template-contribution --}}
|
|
21
21
|
You are a code completion agent. The current file you have to complete is named {{file}}.
|
|
@@ -25,10 +25,10 @@ Finish the following code snippet.
|
|
|
25
25
|
{{prefix}}[[MARKER]]{{suffix}}
|
|
26
26
|
|
|
27
27
|
Only return the exact replacement for [[MARKER]] to complete the snippet.`
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
}],
|
|
29
|
+
defaultVariant: {
|
|
30
|
+
id: 'code-completion-prompt-default',
|
|
31
|
+
template: `{{!-- This prompt is licensed under the MIT License (https://opensource.org/license/mit).
|
|
32
32
|
Made improvements or adaptations to this prompt template? We’d love for you to share it with the community! Contribute back here:
|
|
33
33
|
https://github.com/eclipse-theia/theia/discussions/new?category=prompt-template-contribution --}}
|
|
34
34
|
## Code snippet
|
|
@@ -41,6 +41,7 @@ https://github.com/eclipse-theia/theia/discussions/new?category=prompt-template-
|
|
|
41
41
|
- Language: {{language}}
|
|
42
42
|
|
|
43
43
|
Replace [[MARKER]] with the exact code to complete the code snippet. Return only the replacement of [[MARKER]] as plain text.`,
|
|
44
|
-
|
|
44
|
+
},
|
|
45
|
+
}
|
|
45
46
|
];
|
|
46
47
|
//# sourceMappingURL=code-completion-prompt-template.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-completion-prompt-template.js","sourceRoot":"","sources":["../../src/browser/code-completion-prompt-template.ts"],"names":[],"mappings":";AAAA,qDAAqD;AACrD,gFAAgF;AAChF,oDAAoD;AACpD,EAAE;AACF,+CAA+C;AAC/C,mEAAmE;AACnE,sCAAsC;AACtC,EAAE;AACF,+BAA+B;AAC/B,gFAAgF;;;AAInE,QAAA,
|
|
1
|
+
{"version":3,"file":"code-completion-prompt-template.js","sourceRoot":"","sources":["../../src/browser/code-completion-prompt-template.ts"],"names":[],"mappings":";AAAA,qDAAqD;AACrD,gFAAgF;AAChF,oDAAoD;AACpD,EAAE;AACF,+CAA+C;AAC/C,mEAAmE;AACnE,sCAAsC;AACtC,EAAE;AACF,+BAA+B;AAC/B,gFAAgF;;;AAInE,QAAA,qBAAqB,GAAuB,CAAC;QACtD,EAAE,EAAE,wBAAwB;QAC5B,QAAQ,EAAE,CAAC;gBACP,EAAE,EAAE,iCAAiC;gBACrC,QAAQ,EAAE;;;;;;;;;0EASwD;aACrE,CAAC;QACF,cAAc,EAAE;YACZ,EAAE,EAAE,gCAAgC;YACpC,QAAQ,EAAE;;;;;;;;;;;;8HAY4G;SACzH;KACJ;CACA,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/ai-code-completion",
|
|
3
|
-
"version": "1.62.
|
|
3
|
+
"version": "1.62.1",
|
|
4
4
|
"description": "Theia - AI Core",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@theia/ai-core": "1.62.
|
|
7
|
-
"@theia/core": "1.62.
|
|
8
|
-
"@theia/filesystem": "1.62.
|
|
6
|
+
"@theia/ai-core": "1.62.1",
|
|
7
|
+
"@theia/core": "1.62.1",
|
|
8
|
+
"@theia/filesystem": "1.62.1",
|
|
9
9
|
"@theia/monaco-editor-core": "1.96.302",
|
|
10
|
-
"@theia/output": "1.62.
|
|
11
|
-
"@theia/workspace": "1.62.
|
|
10
|
+
"@theia/output": "1.62.1",
|
|
11
|
+
"@theia/workspace": "1.62.1",
|
|
12
12
|
"minimatch": "^5.1.0",
|
|
13
13
|
"tslib": "^2.6.2"
|
|
14
14
|
},
|
|
@@ -46,10 +46,10 @@
|
|
|
46
46
|
"watch": "theiaext watch"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@theia/ext-scripts": "1.
|
|
49
|
+
"@theia/ext-scripts": "1.62.1"
|
|
50
50
|
},
|
|
51
51
|
"nyc": {
|
|
52
52
|
"extends": "../../configs/nyc.json"
|
|
53
53
|
},
|
|
54
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "0cdb67623c7b5ce0a2d41a1440ed0a78bce890de"
|
|
55
55
|
}
|
|
@@ -19,6 +19,7 @@ import { AI_CORE_PREFERENCES_TITLE } from '@theia/ai-core/lib/browser/ai-core-pr
|
|
|
19
19
|
import { nls } from '@theia/core';
|
|
20
20
|
|
|
21
21
|
export const PREF_AI_INLINE_COMPLETION_AUTOMATIC_ENABLE = 'ai-features.codeCompletion.automaticCodeCompletion';
|
|
22
|
+
export const PREF_AI_INLINE_COMPLETION_DEBOUNCE_DELAY = 'ai-features.codeCompletion.debounceDelay';
|
|
22
23
|
export const PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS = 'ai-features.codeCompletion.excludedFileExtensions';
|
|
23
24
|
export const PREF_AI_INLINE_COMPLETION_MAX_CONTEXT_LINES = 'ai-features.codeCompletion.maxContextLines';
|
|
24
25
|
export const PREF_AI_INLINE_COMPLETION_STRIP_BACKTICKS = 'ai-features.codeCompletion.stripBackticks';
|
|
@@ -35,6 +36,14 @@ export const AICodeCompletionPreferencesSchema: PreferenceSchema = {
|
|
|
35
36
|
Alternatively, you can manually trigger the code via the command "Trigger Inline Suggestion" or the default shortcut "Ctrl+Alt+Space".'),
|
|
36
37
|
default: false
|
|
37
38
|
},
|
|
39
|
+
[PREF_AI_INLINE_COMPLETION_DEBOUNCE_DELAY]: {
|
|
40
|
+
title: nls.localize('theia/ai/completion/debounceDelay/title', 'Debounce Delay'),
|
|
41
|
+
type: 'number',
|
|
42
|
+
description: nls.localize('theia/ai/completion/debounceDelay/description',
|
|
43
|
+
'Controls the delay in milliseconds before triggering AI completions after changes have been detected in the editor.\
|
|
44
|
+
Requires `Automatic Code Completion` to be enabled. Enter 0 to disable the debounce delay.'),
|
|
45
|
+
default: 300
|
|
46
|
+
},
|
|
38
47
|
[PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS]: {
|
|
39
48
|
title: nls.localize('theia/ai/completion/excludedFileExts/title', 'Excluded File Extensions'),
|
|
40
49
|
type: 'array',
|
|
@@ -16,13 +16,18 @@
|
|
|
16
16
|
|
|
17
17
|
import * as monaco from '@theia/monaco-editor-core';
|
|
18
18
|
|
|
19
|
-
import { FrontendApplicationContribution, KeybindingContribution, KeybindingRegistry, PreferenceService } from '@theia/core/lib/browser';
|
|
20
|
-
import { inject, injectable } from '@theia/core/shared/inversify';
|
|
21
19
|
import { AIActivationService } from '@theia/ai-core/lib/browser';
|
|
22
20
|
import { Disposable } from '@theia/core';
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
21
|
+
import { FrontendApplicationContribution, KeybindingContribution, KeybindingRegistry, PreferenceService } from '@theia/core/lib/browser';
|
|
22
|
+
import { inject, injectable } from '@theia/core/shared/inversify';
|
|
25
23
|
import { InlineCompletionTriggerKind } from '@theia/monaco-editor-core/esm/vs/editor/common/languages';
|
|
24
|
+
import {
|
|
25
|
+
PREF_AI_INLINE_COMPLETION_AUTOMATIC_ENABLE,
|
|
26
|
+
PREF_AI_INLINE_COMPLETION_DEBOUNCE_DELAY,
|
|
27
|
+
PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS
|
|
28
|
+
} from './ai-code-completion-preference';
|
|
29
|
+
import { AICodeInlineCompletionsProvider } from './ai-code-inline-completion-provider';
|
|
30
|
+
import { InlineCompletionDebouncer } from './code-completion-debouncer';
|
|
26
31
|
|
|
27
32
|
@injectable()
|
|
28
33
|
export class AIFrontendApplicationContribution implements FrontendApplicationContribution, KeybindingContribution {
|
|
@@ -35,6 +40,9 @@ export class AIFrontendApplicationContribution implements FrontendApplicationCon
|
|
|
35
40
|
@inject(AIActivationService)
|
|
36
41
|
protected readonly activationService: AIActivationService;
|
|
37
42
|
|
|
43
|
+
private debouncer = new InlineCompletionDebouncer();
|
|
44
|
+
private debounceDelay: number;
|
|
45
|
+
|
|
38
46
|
private toDispose = new Map<string, Disposable>();
|
|
39
47
|
|
|
40
48
|
onDidInitializeLayout(): void {
|
|
@@ -48,12 +56,17 @@ export class AIFrontendApplicationContribution implements FrontendApplicationCon
|
|
|
48
56
|
|
|
49
57
|
this.toDispose.set('inlineCompletions', handler());
|
|
50
58
|
|
|
59
|
+
this.debounceDelay = this.preferenceService.get<number>(PREF_AI_INLINE_COMPLETION_DEBOUNCE_DELAY, 300);
|
|
60
|
+
|
|
51
61
|
this.preferenceService.onPreferenceChanged(event => {
|
|
52
62
|
if (event.preferenceName === PREF_AI_INLINE_COMPLETION_AUTOMATIC_ENABLE
|
|
53
63
|
|| event.preferenceName === PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS) {
|
|
54
64
|
this.toDispose.get('inlineCompletions')?.dispose();
|
|
55
65
|
this.toDispose.set('inlineCompletions', handler());
|
|
56
66
|
}
|
|
67
|
+
if (event.preferenceName === PREF_AI_INLINE_COMPLETION_DEBOUNCE_DELAY) {
|
|
68
|
+
this.debounceDelay = event.newValue;
|
|
69
|
+
}
|
|
57
70
|
});
|
|
58
71
|
|
|
59
72
|
this.activationService.onDidChangeActiveStatus(change => {
|
|
@@ -88,7 +101,26 @@ export class AIFrontendApplicationContribution implements FrontendApplicationCon
|
|
|
88
101
|
if (excludedExtensions.some(ext => fileName.endsWith(ext))) {
|
|
89
102
|
return { items: [] };
|
|
90
103
|
}
|
|
91
|
-
|
|
104
|
+
|
|
105
|
+
const completionHandler = () => {
|
|
106
|
+
try {
|
|
107
|
+
return this.inlineCodeCompletionProvider.provideInlineCompletions(
|
|
108
|
+
model,
|
|
109
|
+
position,
|
|
110
|
+
context,
|
|
111
|
+
token
|
|
112
|
+
);
|
|
113
|
+
} catch (error) {
|
|
114
|
+
console.error('Error providing inline completions:', error);
|
|
115
|
+
return { items: [] };
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
if (context.triggerKind === InlineCompletionTriggerKind.Automatic) {
|
|
120
|
+
return this.debouncer.debounce(async () => completionHandler(), this.debounceDelay);
|
|
121
|
+
} else if (context.triggerKind === InlineCompletionTriggerKind.Explicit) {
|
|
122
|
+
return completionHandler();
|
|
123
|
+
}
|
|
92
124
|
},
|
|
93
125
|
freeInlineCompletions: completions => {
|
|
94
126
|
this.inlineCodeCompletionProvider.freeInlineCompletions(completions);
|
|
@@ -16,8 +16,9 @@
|
|
|
16
16
|
|
|
17
17
|
import { LanguageModelService } from '@theia/ai-core/lib/browser';
|
|
18
18
|
import {
|
|
19
|
-
Agent, AgentSpecificVariables,
|
|
20
|
-
LanguageModelRegistry, LanguageModelRequirement, PromptService,
|
|
19
|
+
Agent, AgentSpecificVariables, getTextOfResponse,
|
|
20
|
+
LanguageModelRegistry, LanguageModelRequirement, PromptService,
|
|
21
|
+
PromptVariantSet,
|
|
21
22
|
UserRequest
|
|
22
23
|
} from '@theia/ai-core/lib/common';
|
|
23
24
|
import { generateUuid, ILogger, nls, ProgressService } from '@theia/core';
|
|
@@ -25,7 +26,7 @@ import { PreferenceService } from '@theia/core/lib/browser';
|
|
|
25
26
|
import { inject, injectable, named } from '@theia/core/shared/inversify';
|
|
26
27
|
import * as monaco from '@theia/monaco-editor-core';
|
|
27
28
|
import { PREF_AI_INLINE_COMPLETION_MAX_CONTEXT_LINES } from './ai-code-completion-preference';
|
|
28
|
-
import {
|
|
29
|
+
import { codeCompletionPrompts } from './code-completion-prompt-template';
|
|
29
30
|
import { CodeCompletionPostProcessor } from './code-completion-postprocessor';
|
|
30
31
|
|
|
31
32
|
export const CodeCompletionAgent = Symbol('CodeCompletionAgent');
|
|
@@ -110,7 +111,7 @@ export class CodeCompletionAgentImpl implements CodeCompletionAgent {
|
|
|
110
111
|
return undefined;
|
|
111
112
|
}
|
|
112
113
|
const prompt = await this.promptService
|
|
113
|
-
.
|
|
114
|
+
.getResolvedPromptFragment('code-completion-prompt', { prefix, suffix, file, language })
|
|
114
115
|
.then(p => p?.text);
|
|
115
116
|
if (!prompt) {
|
|
116
117
|
this.logger.error('No prompt found for code-completion-agent');
|
|
@@ -132,12 +133,6 @@ export class CodeCompletionAgentImpl implements CodeCompletionAgent {
|
|
|
132
133
|
if (token.isCancellationRequested) {
|
|
133
134
|
return undefined;
|
|
134
135
|
}
|
|
135
|
-
this.recordingService.recordRequest({
|
|
136
|
-
agentId: this.id,
|
|
137
|
-
sessionId,
|
|
138
|
-
requestId,
|
|
139
|
-
request: request.messages
|
|
140
|
-
});
|
|
141
136
|
const response = await this.languageModelService.sendRequest(languageModel, request);
|
|
142
137
|
if (token.isCancellationRequested) {
|
|
143
138
|
return undefined;
|
|
@@ -146,12 +141,6 @@ export class CodeCompletionAgentImpl implements CodeCompletionAgent {
|
|
|
146
141
|
if (token.isCancellationRequested) {
|
|
147
142
|
return undefined;
|
|
148
143
|
}
|
|
149
|
-
this.recordingService.recordResponse({
|
|
150
|
-
agentId: this.id,
|
|
151
|
-
sessionId,
|
|
152
|
-
requestId,
|
|
153
|
-
response: [{ actor: 'ai', text: completionText, type: 'text' }]
|
|
154
|
-
});
|
|
155
144
|
|
|
156
145
|
const postProcessedCompletionText = this.postProcessor.postProcess(completionText);
|
|
157
146
|
|
|
@@ -182,9 +171,6 @@ export class CodeCompletionAgentImpl implements CodeCompletionAgent {
|
|
|
182
171
|
@inject(PromptService)
|
|
183
172
|
protected promptService: PromptService;
|
|
184
173
|
|
|
185
|
-
@inject(CommunicationRecordingService)
|
|
186
|
-
protected recordingService: CommunicationRecordingService;
|
|
187
|
-
|
|
188
174
|
@inject(ProgressService)
|
|
189
175
|
protected progressService: ProgressService;
|
|
190
176
|
|
|
@@ -198,7 +184,7 @@ export class CodeCompletionAgentImpl implements CodeCompletionAgent {
|
|
|
198
184
|
name = 'Code Completion';
|
|
199
185
|
description =
|
|
200
186
|
nls.localize('theia/ai/completion/agent/description', 'This agent provides inline code completion in the code editor in the Theia IDE.');
|
|
201
|
-
|
|
187
|
+
prompts: PromptVariantSet[] = codeCompletionPrompts;
|
|
202
188
|
languageModelRequirements: LanguageModelRequirement[] = [
|
|
203
189
|
{
|
|
204
190
|
purpose: 'code-completion',
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2025 EclipseSource GmbH.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
export class InlineCompletionDebouncer {
|
|
18
|
+
|
|
19
|
+
private timeoutId?: number;
|
|
20
|
+
|
|
21
|
+
debounce<T>(callback: () => Promise<T>, debounceDelay: number): Promise<T> {
|
|
22
|
+
return new Promise<T>((resolve, reject) => {
|
|
23
|
+
if (this.timeoutId) {
|
|
24
|
+
window.clearTimeout(this.timeoutId);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
this.timeoutId = window.setTimeout(() => {
|
|
28
|
+
callback()
|
|
29
|
+
.then(resolve)
|
|
30
|
+
.catch(reject);
|
|
31
|
+
this.timeoutId = undefined;
|
|
32
|
+
}, debounceDelay);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -9,12 +9,12 @@
|
|
|
9
9
|
// SPDX-License-Identifier: MIT
|
|
10
10
|
// *****************************************************************************
|
|
11
11
|
|
|
12
|
-
import {
|
|
12
|
+
import { PromptVariantSet } from '@theia/ai-core/lib/common';
|
|
13
13
|
|
|
14
|
-
export const
|
|
15
|
-
|
|
14
|
+
export const codeCompletionPrompts: PromptVariantSet[] = [{
|
|
15
|
+
id: 'code-completion-prompt',
|
|
16
|
+
variants: [{
|
|
16
17
|
id: 'code-completion-prompt-previous',
|
|
17
|
-
variantOf: 'code-completion-prompt',
|
|
18
18
|
template: `{{!-- This prompt is licensed under the MIT License (https://opensource.org/license/mit).
|
|
19
19
|
Made improvements or adaptations to this prompt template? We’d love for you to share it with the community! Contribute back here:
|
|
20
20
|
https://github.com/eclipse-theia/theia/discussions/new?category=prompt-template-contribution --}}
|
|
@@ -25,9 +25,9 @@ Finish the following code snippet.
|
|
|
25
25
|
{{prefix}}[[MARKER]]{{suffix}}
|
|
26
26
|
|
|
27
27
|
Only return the exact replacement for [[MARKER]] to complete the snippet.`
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
id: 'code-completion-prompt',
|
|
28
|
+
}],
|
|
29
|
+
defaultVariant: {
|
|
30
|
+
id: 'code-completion-prompt-default',
|
|
31
31
|
template: `{{!-- This prompt is licensed under the MIT License (https://opensource.org/license/mit).
|
|
32
32
|
Made improvements or adaptations to this prompt template? We’d love for you to share it with the community! Contribute back here:
|
|
33
33
|
https://github.com/eclipse-theia/theia/discussions/new?category=prompt-template-contribution --}}
|
|
@@ -42,4 +42,5 @@ https://github.com/eclipse-theia/theia/discussions/new?category=prompt-template-
|
|
|
42
42
|
|
|
43
43
|
Replace [[MARKER]] with the exact code to complete the code snippet. Return only the replacement of [[MARKER]] as plain text.`,
|
|
44
44
|
},
|
|
45
|
+
}
|
|
45
46
|
];
|