@theia/ai-code-completion 1.55.0-next.4 → 1.55.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.
@@ -1,4 +1,5 @@
1
1
  import { PreferenceSchema } from '@theia/core/lib/browser/preferences/preference-contribution';
2
2
  export declare const PREF_AI_INLINE_COMPLETION_ENABLE = "ai-features.codeCompletion.enableCodeCompletion";
3
+ export declare const PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS = "ai-features.codeCompletion.excludedFileExtensions";
3
4
  export declare const AICodeCompletionPreferencesSchema: PreferenceSchema;
4
5
  //# sourceMappingURL=ai-code-completion-preference.d.ts.map
@@ -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;AAG/F,eAAO,MAAM,gCAAgC,oDAAoD,CAAC;AAElG,eAAO,MAAM,iCAAiC,EAAE,gBAU/C,CAAC"}
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;AAG/F,eAAO,MAAM,gCAAgC,oDAAoD,CAAC;AAClG,eAAO,MAAM,6CAA6C,sDAAsD,CAAC;AAEjH,eAAO,MAAM,iCAAiC,EAAE,gBAmB/C,CAAC"}
@@ -15,9 +15,10 @@
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_ENABLE = void 0;
18
+ exports.AICodeCompletionPreferencesSchema = exports.PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS = exports.PREF_AI_INLINE_COMPLETION_ENABLE = void 0;
19
19
  const ai_core_preferences_1 = require("@theia/ai-core/lib/browser/ai-core-preferences");
20
20
  exports.PREF_AI_INLINE_COMPLETION_ENABLE = 'ai-features.codeCompletion.enableCodeCompletion';
21
+ exports.PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS = 'ai-features.codeCompletion.excludedFileExtensions';
21
22
  exports.AICodeCompletionPreferencesSchema = {
22
23
  type: 'object',
23
24
  properties: {
@@ -26,6 +27,15 @@ exports.AICodeCompletionPreferencesSchema = {
26
27
  type: 'boolean',
27
28
  description: 'Enable AI completions inline within any (Monaco) editor.',
28
29
  default: false
30
+ },
31
+ [exports.PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS]: {
32
+ title: 'Excluded File Extensions',
33
+ type: 'array',
34
+ description: 'Specify file extensions (e.g., .md, .txt) where AI completions should be disabled.',
35
+ items: {
36
+ type: 'string'
37
+ },
38
+ default: []
29
39
  }
30
40
  }
31
41
  };
@@ -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;AAE9E,QAAA,gCAAgC,GAAG,iDAAiD,CAAC;AAErF,QAAA,iCAAiC,GAAqB;IAC/D,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,CAAC,wCAAgC,CAAC,EAAE;YAChC,KAAK,EAAE,+CAAyB;YAChC,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,0DAA0D;YACvE,OAAO,EAAE,KAAK;SACjB;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;AAE9E,QAAA,gCAAgC,GAAG,iDAAiD,CAAC;AACrF,QAAA,6CAA6C,GAAG,mDAAmD,CAAC;AAEpG,QAAA,iCAAiC,GAAqB;IAC/D,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,CAAC,wCAAgC,CAAC,EAAE;YAChC,KAAK,EAAE,+CAAyB;YAChC,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,0DAA0D;YACvE,OAAO,EAAE,KAAK;SACjB;QACD,CAAC,qDAA6C,CAAC,EAAE;YAC7C,KAAK,EAAE,0BAA0B;YACjC,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,oFAAoF;YACjG,KAAK,EAAE;gBACH,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,EAAE;SACd;KACJ;CACJ,CAAC"}
@@ -7,7 +7,7 @@ export declare class AIFrontendApplicationContribution implements FrontendApplic
7
7
  protected readonly activationService: AIActivationService;
8
8
  private toDispose;
9
9
  onDidInitializeLayout(): void;
10
- protected handlePreference(name: string, handler: (enable: boolean) => Disposable): void;
11
- protected handleInlineCompletions(enable: boolean): Disposable;
10
+ protected handlePreferences(): void;
11
+ protected handleInlineCompletions(): Disposable;
12
12
  }
13
13
  //# sourceMappingURL=ai-code-frontend-application-contribution.d.ts.map
@@ -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,+BAA+B,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,qBACa,iCAAkC,YAAW,+BAA+B;IAErF,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,CAAiC;IAElD,qBAAqB,IAAI,IAAI;IAM7B,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,UAAU,GAAG,IAAI;IAgBxF,SAAS,CAAC,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU;CAGjE"}
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,+BAA+B,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,qBACa,iCAAkC,YAAW,+BAA+B;IAErF,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,CAAiC;IAElD,qBAAqB,IAAI,IAAI;IAM7B,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAkBnC,SAAS,CAAC,uBAAuB,IAAI,UAAU;CA0BlD"}
@@ -30,27 +30,43 @@ let AIFrontendApplicationContribution = class AIFrontendApplicationContribution
30
30
  }
31
31
  onDidInitializeLayout() {
32
32
  this.preferenceService.ready.then(() => {
33
- this.handlePreference(ai_code_completion_preference_1.PREF_AI_INLINE_COMPLETION_ENABLE, enable => this.handleInlineCompletions(enable));
33
+ this.handlePreferences();
34
34
  });
35
35
  }
36
- handlePreference(name, handler) {
37
- const enable = this.preferenceService.get(name, false) && this.activationService.isActive;
38
- this.toDispose.set(name, handler(enable));
36
+ handlePreferences() {
37
+ const handler = () => this.handleInlineCompletions();
38
+ this.toDispose.set('inlineCompletions', handler());
39
39
  this.preferenceService.onPreferenceChanged(event => {
40
40
  var _a;
41
- if (event.preferenceName === name) {
42
- (_a = this.toDispose.get(name)) === null || _a === void 0 ? void 0 : _a.dispose();
43
- this.toDispose.set(name, handler(event.newValue && this.activationService.isActive));
41
+ if (event.preferenceName === ai_code_completion_preference_1.PREF_AI_INLINE_COMPLETION_ENABLE || event.preferenceName === ai_code_completion_preference_1.PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS) {
42
+ (_a = this.toDispose.get('inlineCompletions')) === null || _a === void 0 ? void 0 : _a.dispose();
43
+ this.toDispose.set('inlineCompletions', handler());
44
44
  }
45
45
  });
46
46
  this.activationService.onDidChangeActiveStatus(change => {
47
47
  var _a;
48
- (_a = this.toDispose.get(name)) === null || _a === void 0 ? void 0 : _a.dispose();
49
- this.toDispose.set(name, handler(this.preferenceService.get(name, false) && change));
48
+ (_a = this.toDispose.get('inlineCompletions')) === null || _a === void 0 ? void 0 : _a.dispose();
49
+ this.toDispose.set('inlineCompletions', handler());
50
50
  });
51
51
  }
52
- handleInlineCompletions(enable) {
53
- return enable ? monaco.languages.registerInlineCompletionsProvider({ scheme: 'file' }, this.inlineCodeCompletionProvider) : core_1.Disposable.NULL;
52
+ handleInlineCompletions() {
53
+ const enable = this.preferenceService.get(ai_code_completion_preference_1.PREF_AI_INLINE_COMPLETION_ENABLE, false) && this.activationService.isActive;
54
+ if (!enable) {
55
+ return core_1.Disposable.NULL;
56
+ }
57
+ const excludedExtensions = this.preferenceService.get(ai_code_completion_preference_1.PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS, []);
58
+ return monaco.languages.registerInlineCompletionsProvider({ scheme: 'file' }, {
59
+ provideInlineCompletions: (model, position, context, token) => {
60
+ const fileName = model.uri.toString();
61
+ if (excludedExtensions.some(ext => fileName.endsWith(ext))) {
62
+ return { items: [] };
63
+ }
64
+ return this.inlineCodeCompletionProvider.provideInlineCompletions(model, position, context, token);
65
+ },
66
+ freeInlineCompletions: completions => {
67
+ this.inlineCodeCompletionProvider.freeInlineCompletions(completions);
68
+ }
69
+ });
54
70
  }
55
71
  };
56
72
  exports.AIFrontendApplicationContribution = AIFrontendApplicationContribution;
@@ -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,qDAA6F;AAC7F,4DAAkE;AAClE,wDAAiE;AACjE,sCAAyC;AACzC,6FAAuF;AACvF,mFAAmF;AAG5E,IAAM,iCAAiC,GAAvC,MAAM,iCAAiC;IAAvC;QAUK,cAAS,GAAG,IAAI,GAAG,EAAsB,CAAC;IA2BtD,CAAC;IAzBG,qBAAqB;QACjB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;YACnC,IAAI,CAAC,gBAAgB,CAAC,gEAAgC,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5G,CAAC,CAAC,CAAC;IACP,CAAC;IAES,gBAAgB,CAAC,IAAY,EAAE,OAAwC;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAU,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QACnG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAE1C,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;;YAC/C,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;gBAChC,MAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,0CAAE,OAAO,EAAE,CAAC;gBACpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;YACzF,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE;;YACpD,MAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,0CAAE,OAAO,EAAE,CAAC;YACpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAU,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;QAClG,CAAC,CAAC,CAAC;IACP,CAAC;IAES,uBAAuB,CAAC,MAAe;QAC7C,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,iCAAiC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,iBAAU,CAAC,IAAI,CAAC;IAChJ,CAAC;CACJ,CAAA;AArCY,8EAAiC;AAElC;IADP,IAAA,kBAAM,EAAC,oEAA+B,CAAC;sCACF,oEAA+B;uFAAC;AAGnD;IADlB,IAAA,kBAAM,EAAC,2BAAiB,CAAC;;4EAC8B;AAGrC;IADlB,IAAA,kBAAM,EAAC,6BAAmB,CAAC;sCACU,6BAAmB;4EAAC;4CARjD,iCAAiC;IAD7C,IAAA,sBAAU,GAAE;GACA,iCAAiC,CAqC7C"}
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,qDAA6F;AAC7F,4DAAkE;AAClE,wDAAiE;AACjE,sCAAyC;AACzC,6FAAuF;AACvF,mFAAkI;AAG3H,IAAM,iCAAiC,GAAvC,MAAM,iCAAiC;IAAvC;QAUK,cAAS,GAAG,IAAI,GAAG,EAAsB,CAAC;IAoDtD,CAAC;IAlDG,qBAAqB;QACjB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;YACnC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;IACP,CAAC;IAES,iBAAiB;QACvB,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAErD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,EAAE,OAAO,EAAE,CAAC,CAAC;QAEnD,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;;YAC/C,IAAI,KAAK,CAAC,cAAc,KAAK,gEAAgC,IAAI,KAAK,CAAC,cAAc,KAAK,6EAA6C,EAAE,CAAC;gBACtI,MAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,0CAAE,OAAO,EAAE,CAAC;gBACnD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,EAAE,OAAO,EAAE,CAAC,CAAC;YACvD,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE;;YACpD,MAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,0CAAE,OAAO,EAAE,CAAC;YACnD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACP,CAAC;IAES,uBAAuB;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAU,gEAAgC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAE/H,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,iBAAU,CAAC,IAAI,CAAC;QAC3B,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAW,6EAA6C,EAAE,EAAE,CAAC,CAAC;QAEnH,OAAO,MAAM,CAAC,SAAS,CAAC,iCAAiC,CACrD,EAAE,MAAM,EAAE,MAAM,EAAE,EAClB;YACI,wBAAwB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;gBAC1D,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAEtC,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBACzD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;gBACzB,CAAC;gBACD,OAAO,IAAI,CAAC,4BAA4B,CAAC,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACvG,CAAC;YACD,qBAAqB,EAAE,WAAW,CAAC,EAAE;gBACjC,IAAI,CAAC,4BAA4B,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;YACzE,CAAC;SACJ,CACJ,CAAC;IACN,CAAC;CACJ,CAAA;AA9DY,8EAAiC;AAElC;IADP,IAAA,kBAAM,EAAC,oEAA+B,CAAC;sCACF,oEAA+B;uFAAC;AAGnD;IADlB,IAAA,kBAAM,EAAC,2BAAiB,CAAC;;4EAC8B;AAGrC;IADlB,IAAA,kBAAM,EAAC,6BAAmB,CAAC;sCACU,6BAAmB;4EAAC;4CARjD,iCAAiC;IAD7C,IAAA,sBAAU,GAAE;GACA,iCAAiC,CA8D7C"}
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@theia/ai-code-completion",
3
- "version": "1.55.0-next.4+f6ace675e",
3
+ "version": "1.55.0",
4
4
  "description": "Theia - AI Core",
5
5
  "dependencies": {
6
- "@theia/ai-core": "1.55.0-next.4+f6ace675e",
7
- "@theia/core": "1.55.0-next.4+f6ace675e",
8
- "@theia/filesystem": "1.55.0-next.4+f6ace675e",
6
+ "@theia/ai-core": "1.55.0",
7
+ "@theia/core": "1.55.0",
8
+ "@theia/filesystem": "1.55.0",
9
9
  "@theia/monaco-editor-core": "1.83.101",
10
- "@theia/output": "1.55.0-next.4+f6ace675e",
11
- "@theia/workspace": "1.55.0-next.4+f6ace675e",
10
+ "@theia/output": "1.55.0",
11
+ "@theia/workspace": "1.55.0",
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.54.0"
49
+ "@theia/ext-scripts": "1.55.0"
50
50
  },
51
51
  "nyc": {
52
52
  "extends": "../../configs/nyc.json"
53
53
  },
54
- "gitHead": "f6ace675e712c3d2227d1cd19e9c905a6e4d9ad6"
54
+ "gitHead": "0e7a523b8e798679d2e098709c63bd7060e54c8a"
55
55
  }
@@ -18,6 +18,7 @@ import { PreferenceSchema } from '@theia/core/lib/browser/preferences/preference
18
18
  import { AI_CORE_PREFERENCES_TITLE } from '@theia/ai-core/lib/browser/ai-core-preferences';
19
19
 
20
20
  export const PREF_AI_INLINE_COMPLETION_ENABLE = 'ai-features.codeCompletion.enableCodeCompletion';
21
+ export const PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS = 'ai-features.codeCompletion.excludedFileExtensions';
21
22
 
22
23
  export const AICodeCompletionPreferencesSchema: PreferenceSchema = {
23
24
  type: 'object',
@@ -27,6 +28,15 @@ export const AICodeCompletionPreferencesSchema: PreferenceSchema = {
27
28
  type: 'boolean',
28
29
  description: 'Enable AI completions inline within any (Monaco) editor.',
29
30
  default: false
31
+ },
32
+ [PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS]: {
33
+ title: 'Excluded File Extensions',
34
+ type: 'array',
35
+ description: 'Specify file extensions (e.g., .md, .txt) where AI completions should be disabled.',
36
+ items: {
37
+ type: 'string'
38
+ },
39
+ default: []
30
40
  }
31
41
  }
32
42
  };
@@ -21,7 +21,7 @@ import { inject, injectable } from '@theia/core/shared/inversify';
21
21
  import { AIActivationService } from '@theia/ai-core/lib/browser';
22
22
  import { Disposable } from '@theia/core';
23
23
  import { AICodeInlineCompletionsProvider } from './ai-code-inline-completion-provider';
24
- import { PREF_AI_INLINE_COMPLETION_ENABLE } from './ai-code-completion-preference';
24
+ import { PREF_AI_INLINE_COMPLETION_ENABLE, PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS } from './ai-code-completion-preference';
25
25
 
26
26
  @injectable()
27
27
  export class AIFrontendApplicationContribution implements FrontendApplicationContribution {
@@ -38,27 +38,52 @@ export class AIFrontendApplicationContribution implements FrontendApplicationCon
38
38
 
39
39
  onDidInitializeLayout(): void {
40
40
  this.preferenceService.ready.then(() => {
41
- this.handlePreference(PREF_AI_INLINE_COMPLETION_ENABLE, enable => this.handleInlineCompletions(enable));
41
+ this.handlePreferences();
42
42
  });
43
43
  }
44
44
 
45
- protected handlePreference(name: string, handler: (enable: boolean) => Disposable): void {
46
- const enable = this.preferenceService.get<boolean>(name, false) && this.activationService.isActive;
47
- this.toDispose.set(name, handler(enable));
45
+ protected handlePreferences(): void {
46
+ const handler = () => this.handleInlineCompletions();
47
+
48
+ this.toDispose.set('inlineCompletions', handler());
48
49
 
49
50
  this.preferenceService.onPreferenceChanged(event => {
50
- if (event.preferenceName === name) {
51
- this.toDispose.get(name)?.dispose();
52
- this.toDispose.set(name, handler(event.newValue && this.activationService.isActive));
51
+ if (event.preferenceName === PREF_AI_INLINE_COMPLETION_ENABLE || event.preferenceName === PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS) {
52
+ this.toDispose.get('inlineCompletions')?.dispose();
53
+ this.toDispose.set('inlineCompletions', handler());
53
54
  }
54
55
  });
56
+
55
57
  this.activationService.onDidChangeActiveStatus(change => {
56
- this.toDispose.get(name)?.dispose();
57
- this.toDispose.set(name, handler(this.preferenceService.get<boolean>(name, false) && change));
58
+ this.toDispose.get('inlineCompletions')?.dispose();
59
+ this.toDispose.set('inlineCompletions', handler());
58
60
  });
59
61
  }
60
62
 
61
- protected handleInlineCompletions(enable: boolean): Disposable {
62
- return enable ? monaco.languages.registerInlineCompletionsProvider({ scheme: 'file' }, this.inlineCodeCompletionProvider) : Disposable.NULL;
63
+ protected handleInlineCompletions(): Disposable {
64
+ const enable = this.preferenceService.get<boolean>(PREF_AI_INLINE_COMPLETION_ENABLE, false) && this.activationService.isActive;
65
+
66
+ if (!enable) {
67
+ return Disposable.NULL;
68
+ }
69
+
70
+ const excludedExtensions = this.preferenceService.get<string[]>(PREF_AI_INLINE_COMPLETION_EXCLUDED_EXTENSIONS, []);
71
+
72
+ return monaco.languages.registerInlineCompletionsProvider(
73
+ { scheme: 'file' },
74
+ {
75
+ provideInlineCompletions: (model, position, context, token) => {
76
+ const fileName = model.uri.toString();
77
+
78
+ if (excludedExtensions.some(ext => fileName.endsWith(ext))) {
79
+ return { items: [] };
80
+ }
81
+ return this.inlineCodeCompletionProvider.provideInlineCompletions(model, position, context, token);
82
+ },
83
+ freeInlineCompletions: completions => {
84
+ this.inlineCodeCompletionProvider.freeInlineCompletions(completions);
85
+ }
86
+ }
87
+ );
63
88
  }
64
89
  }