@theia/ai-core 1.58.3 → 1.59.0-next.72
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-activation-service.d.ts +4 -4
- package/lib/browser/ai-activation-service.d.ts.map +1 -1
- package/lib/browser/ai-activation-service.js +10 -10
- package/lib/browser/ai-activation-service.js.map +1 -1
- package/lib/browser/ai-core-frontend-module.d.ts.map +1 -1
- package/lib/browser/ai-core-frontend-module.js +6 -32
- package/lib/browser/ai-core-frontend-module.js.map +1 -1
- package/lib/browser/ai-core-preferences.d.ts +3 -3
- package/lib/browser/ai-core-preferences.d.ts.map +1 -1
- package/lib/browser/ai-core-preferences.js +14 -13
- package/lib/browser/ai-core-preferences.js.map +1 -1
- package/lib/browser/ai-view-contribution.d.ts.map +1 -1
- package/lib/browser/ai-view-contribution.js +3 -3
- package/lib/browser/ai-view-contribution.js.map +1 -1
- package/lib/browser/file-variable-contribution.d.ts +17 -0
- package/lib/browser/file-variable-contribution.d.ts.map +1 -0
- package/lib/browser/file-variable-contribution.js +96 -0
- package/lib/browser/file-variable-contribution.js.map +1 -0
- package/lib/browser/frontend-variable-service.d.ts +21 -2
- package/lib/browser/frontend-variable-service.d.ts.map +1 -1
- package/lib/browser/frontend-variable-service.js +33 -5
- package/lib/browser/frontend-variable-service.js.map +1 -1
- package/lib/browser/index.d.ts +1 -0
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js +1 -0
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/prompttemplate-contribution.d.ts.map +1 -1
- package/lib/browser/prompttemplate-contribution.js +1 -1
- package/lib/browser/prompttemplate-contribution.js.map +1 -1
- package/lib/browser/theia-variable-contribution.d.ts +4 -0
- package/lib/browser/theia-variable-contribution.d.ts.map +1 -1
- package/lib/browser/theia-variable-contribution.js +15 -1
- package/lib/browser/theia-variable-contribution.js.map +1 -1
- package/lib/common/agents-variable-contribution.d.ts.map +1 -1
- package/lib/common/agents-variable-contribution.js +2 -1
- package/lib/common/agents-variable-contribution.js.map +1 -1
- package/lib/common/index.d.ts +1 -1
- package/lib/common/index.d.ts.map +1 -1
- package/lib/common/index.js +1 -1
- package/lib/common/index.js.map +1 -1
- package/lib/common/language-model-util.d.ts.map +1 -1
- package/lib/common/language-model-util.js +1 -18
- package/lib/common/language-model-util.js.map +1 -1
- package/lib/common/prompt-service.d.ts +3 -3
- package/lib/common/prompt-service.d.ts.map +1 -1
- package/lib/common/prompt-service.js +2 -2
- package/lib/common/prompt-service.js.map +1 -1
- package/lib/common/prompt-text.d.ts +7 -0
- package/lib/common/prompt-text.d.ts.map +1 -0
- package/lib/common/prompt-text.js +26 -0
- package/lib/common/prompt-text.js.map +1 -0
- package/lib/common/today-variable-contribution.d.ts.map +1 -1
- package/lib/common/today-variable-contribution.js +23 -3
- package/lib/common/today-variable-contribution.js.map +1 -1
- package/lib/common/variable-service.d.ts +64 -1
- package/lib/common/variable-service.d.ts.map +1 -1
- package/lib/common/variable-service.js +87 -2
- package/lib/common/variable-service.js.map +1 -1
- package/package.json +10 -10
- package/src/browser/ai-activation-service.ts +11 -11
- package/src/browser/ai-core-frontend-module.ts +11 -37
- package/src/browser/ai-core-preferences.ts +16 -13
- package/src/browser/ai-view-contribution.ts +4 -4
- package/src/browser/file-variable-contribution.ts +102 -0
- package/src/browser/frontend-variable-service.ts +48 -3
- package/src/browser/index.ts +1 -0
- package/src/browser/prompttemplate-contribution.ts +2 -2
- package/src/browser/theia-variable-contribution.ts +14 -1
- package/src/common/agents-variable-contribution.ts +2 -2
- package/src/common/index.ts +1 -1
- package/src/common/language-model-util.ts +1 -18
- package/src/common/prompt-service.ts +4 -4
- package/src/common/prompt-text.ts +22 -0
- package/src/common/today-variable-contribution.ts +8 -4
- package/src/common/variable-service.ts +130 -2
- package/lib/browser/ai-configuration/agent-configuration-widget.d.ts +0 -28
- package/lib/browser/ai-configuration/agent-configuration-widget.d.ts.map +0 -1
- package/lib/browser/ai-configuration/agent-configuration-widget.js +0 -242
- package/lib/browser/ai-configuration/agent-configuration-widget.js.map +0 -1
- package/lib/browser/ai-configuration/ai-configuration-service.d.ts +0 -13
- package/lib/browser/ai-configuration/ai-configuration-service.d.ts.map +0 -1
- package/lib/browser/ai-configuration/ai-configuration-service.js +0 -44
- package/lib/browser/ai-configuration/ai-configuration-service.js.map +0 -1
- package/lib/browser/ai-configuration/ai-configuration-view-contribution.d.ts +0 -12
- package/lib/browser/ai-configuration/ai-configuration-view-contribution.d.ts.map +0 -1
- package/lib/browser/ai-configuration/ai-configuration-view-contribution.js +0 -41
- package/lib/browser/ai-configuration/ai-configuration-view-contribution.js.map +0 -1
- package/lib/browser/ai-configuration/ai-configuration-widget.d.ts +0 -20
- package/lib/browser/ai-configuration/ai-configuration-widget.d.ts.map +0 -1
- package/lib/browser/ai-configuration/ai-configuration-widget.js +0 -88
- package/lib/browser/ai-configuration/ai-configuration-widget.js.map +0 -1
- package/lib/browser/ai-configuration/language-model-renderer.d.ts +0 -13
- package/lib/browser/ai-configuration/language-model-renderer.d.ts.map +0 -1
- package/lib/browser/ai-configuration/language-model-renderer.js +0 -104
- package/lib/browser/ai-configuration/language-model-renderer.js.map +0 -1
- package/lib/browser/ai-configuration/template-settings-renderer.d.ts +0 -13
- package/lib/browser/ai-configuration/template-settings-renderer.d.ts.map +0 -1
- package/lib/browser/ai-configuration/template-settings-renderer.js +0 -71
- package/lib/browser/ai-configuration/template-settings-renderer.js.map +0 -1
- package/lib/browser/ai-configuration/variable-configuration-widget.d.ts +0 -20
- package/lib/browser/ai-configuration/variable-configuration-widget.d.ts.map +0 -1
- package/lib/browser/ai-configuration/variable-configuration-widget.js +0 -99
- package/lib/browser/ai-configuration/variable-configuration-widget.js.map +0 -1
- package/lib/common/tomorrow-variable-contribution.d.ts +0 -17
- package/lib/common/tomorrow-variable-contribution.d.ts.map +0 -1
- package/lib/common/tomorrow-variable-contribution.js +0 -48
- package/lib/common/tomorrow-variable-contribution.js.map +0 -1
- package/src/browser/ai-configuration/agent-configuration-widget.tsx +0 -324
- package/src/browser/ai-configuration/ai-configuration-service.ts +0 -43
- package/src/browser/ai-configuration/ai-configuration-view-contribution.ts +0 -54
- package/src/browser/ai-configuration/ai-configuration-widget.tsx +0 -80
- package/src/browser/ai-configuration/language-model-renderer.tsx +0 -113
- package/src/browser/ai-configuration/template-settings-renderer.tsx +0 -128
- package/src/browser/ai-configuration/variable-configuration-widget.tsx +0 -110
- package/src/browser/style/index.css +0 -127
- package/src/common/tomorrow-variable-contribution.ts +0 -66
|
@@ -20,17 +20,66 @@
|
|
|
20
20
|
*--------------------------------------------------------------------------------------------*/
|
|
21
21
|
// Partially copied from https://github.com/microsoft/vscode/blob/a2cab7255c0df424027be05d58e1b7b941f4ea60/src/vs/workbench/contrib/chat/common/chatVariables.ts
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.DefaultAIVariableService = exports.AIVariableContribution = exports.AIVariableService = void 0;
|
|
23
|
+
exports.DefaultAIVariableService = exports.AIVariableContribution = exports.AIVariableService = exports.AIVariableResolutionRequest = exports.ResolvedAIContextVariable = exports.ResolvedAIVariable = exports.AIContextVariable = exports.AIVariable = void 0;
|
|
24
24
|
const tslib_1 = require("tslib");
|
|
25
25
|
const core_1 = require("@theia/core");
|
|
26
26
|
const inversify_1 = require("@theia/core/shared/inversify");
|
|
27
|
+
var AIVariable;
|
|
28
|
+
(function (AIVariable) {
|
|
29
|
+
function is(arg) {
|
|
30
|
+
return !!arg && typeof arg === 'object' &&
|
|
31
|
+
'id' in arg &&
|
|
32
|
+
'name' in arg &&
|
|
33
|
+
'description' in arg;
|
|
34
|
+
}
|
|
35
|
+
AIVariable.is = is;
|
|
36
|
+
})(AIVariable || (exports.AIVariable = AIVariable = {}));
|
|
37
|
+
var AIContextVariable;
|
|
38
|
+
(function (AIContextVariable) {
|
|
39
|
+
function is(arg) {
|
|
40
|
+
return AIVariable.is(arg) && 'isContextVariable' in arg && arg.isContextVariable === true;
|
|
41
|
+
}
|
|
42
|
+
AIContextVariable.is = is;
|
|
43
|
+
})(AIContextVariable || (exports.AIContextVariable = AIContextVariable = {}));
|
|
44
|
+
var ResolvedAIVariable;
|
|
45
|
+
(function (ResolvedAIVariable) {
|
|
46
|
+
function is(arg) {
|
|
47
|
+
return !!arg && typeof arg === 'object' &&
|
|
48
|
+
'variable' in arg &&
|
|
49
|
+
'value' in arg &&
|
|
50
|
+
typeof arg.variable === 'object' &&
|
|
51
|
+
typeof arg.value === 'string';
|
|
52
|
+
}
|
|
53
|
+
ResolvedAIVariable.is = is;
|
|
54
|
+
})(ResolvedAIVariable || (exports.ResolvedAIVariable = ResolvedAIVariable = {}));
|
|
55
|
+
var ResolvedAIContextVariable;
|
|
56
|
+
(function (ResolvedAIContextVariable) {
|
|
57
|
+
function is(arg) {
|
|
58
|
+
return ResolvedAIVariable.is(arg) &&
|
|
59
|
+
'contextValue' in arg &&
|
|
60
|
+
typeof arg.contextValue === 'string';
|
|
61
|
+
}
|
|
62
|
+
ResolvedAIContextVariable.is = is;
|
|
63
|
+
})(ResolvedAIContextVariable || (exports.ResolvedAIContextVariable = ResolvedAIContextVariable = {}));
|
|
64
|
+
var AIVariableResolutionRequest;
|
|
65
|
+
(function (AIVariableResolutionRequest) {
|
|
66
|
+
function is(arg) {
|
|
67
|
+
return !!arg && typeof arg === 'object' &&
|
|
68
|
+
'variable' in arg &&
|
|
69
|
+
typeof arg.variable.name === 'string';
|
|
70
|
+
}
|
|
71
|
+
AIVariableResolutionRequest.is = is;
|
|
72
|
+
})(AIVariableResolutionRequest || (exports.AIVariableResolutionRequest = AIVariableResolutionRequest = {}));
|
|
27
73
|
exports.AIVariableService = Symbol('AIVariableService');
|
|
74
|
+
/** Contributions on the frontend can optionally implement `FrontendVariableContribution`. */
|
|
28
75
|
exports.AIVariableContribution = Symbol('AIVariableContribution');
|
|
29
76
|
let DefaultAIVariableService = class DefaultAIVariableService {
|
|
30
77
|
constructor(contributionProvider) {
|
|
31
78
|
this.contributionProvider = contributionProvider;
|
|
32
79
|
this.variables = new Map();
|
|
33
80
|
this.resolvers = new Map();
|
|
81
|
+
this.argPickers = new Map();
|
|
82
|
+
this.argCompletionProviders = new Map();
|
|
34
83
|
this.onDidChangeVariablesEmitter = new core_1.Emitter();
|
|
35
84
|
this.onDidChangeVariables = this.onDidChangeVariablesEmitter.event;
|
|
36
85
|
}
|
|
@@ -72,6 +121,9 @@ let DefaultAIVariableService = class DefaultAIVariableService {
|
|
|
72
121
|
getVariables() {
|
|
73
122
|
return [...this.variables.values()];
|
|
74
123
|
}
|
|
124
|
+
getContextVariables() {
|
|
125
|
+
return this.getVariables().filter(AIContextVariable.is);
|
|
126
|
+
}
|
|
75
127
|
registerResolver(variable, resolver) {
|
|
76
128
|
var _a;
|
|
77
129
|
const key = this.getKey(variable.name);
|
|
@@ -97,6 +149,38 @@ let DefaultAIVariableService = class DefaultAIVariableService {
|
|
|
97
149
|
this.resolvers.delete(this.getKey(name));
|
|
98
150
|
this.onDidChangeVariablesEmitter.fire();
|
|
99
151
|
}
|
|
152
|
+
registerArgumentPicker(variable, argPicker) {
|
|
153
|
+
const key = this.getKey(variable.name);
|
|
154
|
+
this.argPickers.set(key, argPicker);
|
|
155
|
+
return core_1.Disposable.create(() => this.unregisterArgumentPicker(variable, argPicker));
|
|
156
|
+
}
|
|
157
|
+
unregisterArgumentPicker(variable, argPicker) {
|
|
158
|
+
const key = this.getKey(variable.name);
|
|
159
|
+
const registeredArgPicker = this.argPickers.get(key);
|
|
160
|
+
if (registeredArgPicker === argPicker) {
|
|
161
|
+
this.argPickers.delete(key);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
async getArgumentPicker(name) {
|
|
165
|
+
var _a;
|
|
166
|
+
return (_a = this.argPickers.get(this.getKey(name))) !== null && _a !== void 0 ? _a : undefined;
|
|
167
|
+
}
|
|
168
|
+
registerArgumentCompletionProvider(variable, completionProvider) {
|
|
169
|
+
const key = this.getKey(variable.name);
|
|
170
|
+
this.argCompletionProviders.set(key, completionProvider);
|
|
171
|
+
return core_1.Disposable.create(() => this.unregisterArgumentCompletionProvider(variable, completionProvider));
|
|
172
|
+
}
|
|
173
|
+
unregisterArgumentCompletionProvider(variable, completionProvider) {
|
|
174
|
+
const key = this.getKey(variable.name);
|
|
175
|
+
const registeredCompletionProvider = this.argCompletionProviders.get(key);
|
|
176
|
+
if (registeredCompletionProvider === completionProvider) {
|
|
177
|
+
this.argCompletionProviders.delete(key);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
async getArgumentCompletionProvider(name) {
|
|
181
|
+
var _a;
|
|
182
|
+
return (_a = this.argCompletionProviders.get(this.getKey(name))) !== null && _a !== void 0 ? _a : undefined;
|
|
183
|
+
}
|
|
100
184
|
async resolveVariable(request, context) {
|
|
101
185
|
const variableName = typeof request === 'string' ? request : typeof request.variable === 'string' ? request.variable : request.variable.name;
|
|
102
186
|
const variable = this.getVariable(variableName);
|
|
@@ -105,7 +189,8 @@ let DefaultAIVariableService = class DefaultAIVariableService {
|
|
|
105
189
|
}
|
|
106
190
|
const arg = typeof request === 'string' ? undefined : request.arg;
|
|
107
191
|
const resolver = await this.getResolver(variableName, arg, context);
|
|
108
|
-
|
|
192
|
+
const resolved = await (resolver === null || resolver === void 0 ? void 0 : resolver.resolve({ variable, arg }, context));
|
|
193
|
+
return resolved ? { ...resolved, arg } : undefined;
|
|
109
194
|
}
|
|
110
195
|
};
|
|
111
196
|
exports.DefaultAIVariableService = DefaultAIVariableService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variable-service.js","sourceRoot":"","sources":["../../src/common/variable-service.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;AAChF;;;gGAGgG;AAChG,gKAAgK;;;;AAEhK,sCAAsH;AACtH,4DAAyE;
|
|
1
|
+
{"version":3,"file":"variable-service.js","sourceRoot":"","sources":["../../src/common/variable-service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/ai-core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.59.0-next.72+f41d8efcd",
|
|
4
4
|
"description": "Theia - AI Core",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@theia/core": "1.
|
|
7
|
-
"@theia/editor": "1.
|
|
8
|
-
"@theia/filesystem": "1.
|
|
9
|
-
"@theia/monaco": "1.
|
|
6
|
+
"@theia/core": "1.59.0-next.72+f41d8efcd",
|
|
7
|
+
"@theia/editor": "1.59.0-next.72+f41d8efcd",
|
|
8
|
+
"@theia/filesystem": "1.59.0-next.72+f41d8efcd",
|
|
9
|
+
"@theia/monaco": "1.59.0-next.72+f41d8efcd",
|
|
10
10
|
"@theia/monaco-editor-core": "1.96.302",
|
|
11
|
-
"@theia/output": "1.
|
|
12
|
-
"@theia/variable-resolver": "1.
|
|
13
|
-
"@theia/workspace": "1.
|
|
11
|
+
"@theia/output": "1.59.0-next.72+f41d8efcd",
|
|
12
|
+
"@theia/variable-resolver": "1.59.0-next.72+f41d8efcd",
|
|
13
|
+
"@theia/workspace": "1.59.0-next.72+f41d8efcd",
|
|
14
14
|
"@types/js-yaml": "^4.0.9",
|
|
15
15
|
"js-yaml": "^4.1.0",
|
|
16
16
|
"minimatch": "^5.1.0",
|
|
@@ -52,10 +52,10 @@
|
|
|
52
52
|
"watch": "theiaext watch"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@theia/ext-scripts": "1.58.
|
|
55
|
+
"@theia/ext-scripts": "1.58.0"
|
|
56
56
|
},
|
|
57
57
|
"nyc": {
|
|
58
58
|
"extends": "../../configs/nyc.json"
|
|
59
59
|
},
|
|
60
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "f41d8efcd4abb79167b74bf476eafc7857e97306"
|
|
61
61
|
}
|
|
@@ -17,13 +17,13 @@ import { inject, injectable } from '@theia/core/shared/inversify';
|
|
|
17
17
|
import { FrontendApplicationContribution, PreferenceService } from '@theia/core/lib/browser';
|
|
18
18
|
import { Emitter, MaybePromise, Event, } from '@theia/core';
|
|
19
19
|
import { ContextKeyService, ContextKey } from '@theia/core/lib/browser/context-key-service';
|
|
20
|
-
import {
|
|
20
|
+
import { PREFERENCE_NAME_ENABLE_AI } from './ai-core-preferences';
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
|
-
* Context key for the
|
|
23
|
+
* Context key for the AI features. It is set to `true` if the feature is enabled.
|
|
24
24
|
*/
|
|
25
25
|
// We reuse the enablement preference for the context key
|
|
26
|
-
export const
|
|
26
|
+
export const ENABLE_AI_CONTEXT_KEY = PREFERENCE_NAME_ENABLE_AI;
|
|
27
27
|
|
|
28
28
|
@injectable()
|
|
29
29
|
export class AIActivationService implements FrontendApplicationContribution {
|
|
@@ -33,23 +33,23 @@ export class AIActivationService implements FrontendApplicationContribution {
|
|
|
33
33
|
@inject(PreferenceService)
|
|
34
34
|
protected preferenceService: PreferenceService;
|
|
35
35
|
|
|
36
|
-
protected
|
|
36
|
+
protected isAiEnabledKey: ContextKey<boolean>;
|
|
37
37
|
|
|
38
|
-
protected
|
|
38
|
+
protected onDidChangeAIEnabled = new Emitter<boolean>();
|
|
39
39
|
get onDidChangeActiveStatus(): Event<boolean> {
|
|
40
|
-
return this.
|
|
40
|
+
return this.onDidChangeAIEnabled.event;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
get isActive(): boolean {
|
|
44
|
-
return this.
|
|
44
|
+
return this.isAiEnabledKey.get() ?? false;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
initialize(): MaybePromise<void> {
|
|
48
|
-
this.
|
|
48
|
+
this.isAiEnabledKey = this.contextKeyService.createKey(ENABLE_AI_CONTEXT_KEY, false);
|
|
49
49
|
this.preferenceService.onPreferenceChanged(e => {
|
|
50
|
-
if (e.preferenceName ===
|
|
51
|
-
this.
|
|
52
|
-
this.
|
|
50
|
+
if (e.preferenceName === PREFERENCE_NAME_ENABLE_AI) {
|
|
51
|
+
this.isAiEnabledKey.set(e.newValue);
|
|
52
|
+
this.onDidChangeAIEnabled.fire(e.newValue);
|
|
53
53
|
}
|
|
54
54
|
});
|
|
55
55
|
}
|
|
@@ -42,21 +42,17 @@ import {
|
|
|
42
42
|
LanguageModelDelegateClientImpl,
|
|
43
43
|
} from './frontend-language-model-registry';
|
|
44
44
|
|
|
45
|
-
import {
|
|
45
|
+
import { FrontendApplicationContribution } from '@theia/core/lib/browser';
|
|
46
46
|
import { TabBarToolbarContribution } from '@theia/core/lib/browser/shell/tab-bar-toolbar';
|
|
47
47
|
import { LanguageGrammarDefinitionContribution } from '@theia/monaco/lib/browser/textmate';
|
|
48
|
-
|
|
49
|
-
import { AIConfigurationSelectionService } from './ai-configuration/ai-configuration-service';
|
|
50
|
-
import { AIAgentConfigurationViewContribution } from './ai-configuration/ai-configuration-view-contribution';
|
|
51
|
-
import { AIConfigurationContainerWidget } from './ai-configuration/ai-configuration-widget';
|
|
52
|
-
import { AIVariableConfigurationWidget } from './ai-configuration/variable-configuration-widget';
|
|
48
|
+
|
|
53
49
|
import { AICoreFrontendApplicationContribution } from './ai-core-frontend-application-contribution';
|
|
54
50
|
import { bindAICorePreferences } from './ai-core-preferences';
|
|
55
51
|
import { AISettingsServiceImpl } from './ai-settings-service';
|
|
56
52
|
import { FrontendPromptCustomizationServiceImpl } from './frontend-prompt-customization-service';
|
|
57
|
-
import { FrontendVariableService } from './frontend-variable-service';
|
|
53
|
+
import { DefaultFrontendVariableService, FrontendVariableService } from './frontend-variable-service';
|
|
58
54
|
import { PromptTemplateContribution } from './prompttemplate-contribution';
|
|
59
|
-
import {
|
|
55
|
+
import { FileVariableContribution } from './file-variable-contribution';
|
|
60
56
|
import { TheiaVariableContribution } from './theia-variable-contribution';
|
|
61
57
|
import { TodayVariableContribution } from '../common/today-variable-contribution';
|
|
62
58
|
import { AgentsVariableContribution } from '../common/agents-variable-contribution';
|
|
@@ -103,44 +99,22 @@ export default new ContainerModule(bind => {
|
|
|
103
99
|
bind(CommandContribution).toService(PromptTemplateContribution);
|
|
104
100
|
bind(TabBarToolbarContribution).toService(PromptTemplateContribution);
|
|
105
101
|
|
|
106
|
-
bind(AIConfigurationSelectionService).toSelf().inSingletonScope();
|
|
107
|
-
bind(AIConfigurationContainerWidget).toSelf();
|
|
108
|
-
bind(WidgetFactory)
|
|
109
|
-
.toDynamicValue(ctx => ({
|
|
110
|
-
id: AIConfigurationContainerWidget.ID,
|
|
111
|
-
createWidget: () => ctx.container.get(AIConfigurationContainerWidget)
|
|
112
|
-
}))
|
|
113
|
-
.inSingletonScope();
|
|
114
|
-
|
|
115
|
-
bindViewContribution(bind, AIAgentConfigurationViewContribution);
|
|
116
102
|
bind(AISettingsService).to(AISettingsServiceImpl).inRequestScope();
|
|
117
103
|
bindContributionProvider(bind, AIVariableContribution);
|
|
118
|
-
bind(
|
|
104
|
+
bind(DefaultFrontendVariableService).toSelf().inSingletonScope();
|
|
105
|
+
bind(FrontendVariableService).toService(DefaultFrontendVariableService);
|
|
119
106
|
bind(AIVariableService).toService(FrontendVariableService);
|
|
120
107
|
bind(FrontendApplicationContribution).toService(FrontendVariableService);
|
|
121
|
-
|
|
108
|
+
|
|
109
|
+
bind(TheiaVariableContribution).toSelf().inSingletonScope();
|
|
110
|
+
bind(AIVariableContribution).toService(TheiaVariableContribution);
|
|
111
|
+
|
|
122
112
|
bind(AIVariableContribution).to(TodayVariableContribution).inSingletonScope();
|
|
123
|
-
bind(AIVariableContribution).to(
|
|
113
|
+
bind(AIVariableContribution).to(FileVariableContribution).inSingletonScope();
|
|
124
114
|
bind(AIVariableContribution).to(AgentsVariableContribution).inSingletonScope();
|
|
125
115
|
|
|
126
116
|
bind(FrontendApplicationContribution).to(AICoreFrontendApplicationContribution).inSingletonScope();
|
|
127
117
|
|
|
128
|
-
bind(AIVariableConfigurationWidget).toSelf();
|
|
129
|
-
bind(WidgetFactory)
|
|
130
|
-
.toDynamicValue(ctx => ({
|
|
131
|
-
id: AIVariableConfigurationWidget.ID,
|
|
132
|
-
createWidget: () => ctx.container.get(AIVariableConfigurationWidget)
|
|
133
|
-
}))
|
|
134
|
-
.inSingletonScope();
|
|
135
|
-
|
|
136
|
-
bind(AIAgentConfigurationWidget).toSelf();
|
|
137
|
-
bind(WidgetFactory)
|
|
138
|
-
.toDynamicValue(ctx => ({
|
|
139
|
-
id: AIAgentConfigurationWidget.ID,
|
|
140
|
-
createWidget: () => ctx.container.get(AIAgentConfigurationWidget)
|
|
141
|
-
}))
|
|
142
|
-
.inSingletonScope();
|
|
143
|
-
|
|
144
118
|
bind(ToolInvocationRegistry).to(ToolInvocationRegistryImpl).inSingletonScope();
|
|
145
119
|
bindContributionProvider(bind, ToolProvider);
|
|
146
120
|
|
|
@@ -14,37 +14,40 @@
|
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
|
+
import { nls } from '@theia/core';
|
|
17
18
|
import { PreferenceContribution, PreferenceProxy, PreferenceSchema } from '@theia/core/lib/browser';
|
|
18
19
|
import { PreferenceProxyFactory } from '@theia/core/lib/browser/preferences/injectable-preference-proxy';
|
|
19
20
|
import { interfaces } from '@theia/core/shared/inversify';
|
|
20
21
|
|
|
21
|
-
export const AI_CORE_PREFERENCES_TITLE = '✨ AI Features [
|
|
22
|
-
export const
|
|
22
|
+
export const AI_CORE_PREFERENCES_TITLE = nls.localize('theia/ai/core/prefs/title', '✨ AI Features [Alpha]');
|
|
23
|
+
export const PREFERENCE_NAME_ENABLE_AI = 'ai-features.AiEnable.enableAI';
|
|
23
24
|
export const PREFERENCE_NAME_PROMPT_TEMPLATES = 'ai-features.promptTemplates.promptTemplatesFolder';
|
|
24
25
|
export const PREFERENCE_NAME_REQUEST_SETTINGS = 'ai-features.modelSettings.requestSettings';
|
|
25
26
|
|
|
26
27
|
export const aiCorePreferenceSchema: PreferenceSchema = {
|
|
27
28
|
type: 'object',
|
|
28
29
|
properties: {
|
|
29
|
-
[
|
|
30
|
+
[PREFERENCE_NAME_ENABLE_AI]: {
|
|
30
31
|
title: AI_CORE_PREFERENCES_TITLE,
|
|
31
|
-
markdownDescription: '
|
|
32
|
+
markdownDescription: nls.localize('theia/ai/core/enableAI/mdDescription',
|
|
33
|
+
'❗ This setting allows you to access the latest AI capabilities (Alpha version).\
|
|
32
34
|
\n\
|
|
33
|
-
Please note that these features are in an
|
|
34
|
-
undergo
|
|
35
|
+
Please note that these features are in an alpha phase, which means they may \
|
|
36
|
+
undergo changes and will be further improved. It is important to be aware that these features may generate\
|
|
35
37
|
continuous requests to the language models (LLMs) you provide access to. This might incur costs that you\
|
|
36
38
|
need to monitor closely. By enabling this option, you acknowledge these risks.\
|
|
37
39
|
\n\
|
|
38
40
|
**Please note! The settings below in this section will only take effect\n\
|
|
39
41
|
once the main feature setting is enabled. After enabling the feature, you need to configure at least one\
|
|
40
|
-
LLM provider below. Also see [the documentation](https://theia-ide.org/docs/user_ai/)**.',
|
|
42
|
+
LLM provider below. Also see [the documentation](https://theia-ide.org/docs/user_ai/)**.'),
|
|
41
43
|
type: 'boolean',
|
|
42
44
|
default: false,
|
|
43
45
|
},
|
|
44
46
|
[PREFERENCE_NAME_PROMPT_TEMPLATES]: {
|
|
45
47
|
title: AI_CORE_PREFERENCES_TITLE,
|
|
46
|
-
description: '
|
|
47
|
-
|
|
48
|
+
description: nls.localize('theia/ai/core/promptTemplates/description',
|
|
49
|
+
'Folder for storing customized prompt templates. If not customized the user config directory is used. Please consider to use a folder, which is\
|
|
50
|
+
under version control to manage your variants of prompt templates.'),
|
|
48
51
|
type: 'string',
|
|
49
52
|
default: '',
|
|
50
53
|
typeDetails: {
|
|
@@ -58,12 +61,12 @@ export const aiCorePreferenceSchema: PreferenceSchema = {
|
|
|
58
61
|
},
|
|
59
62
|
},
|
|
60
63
|
[PREFERENCE_NAME_REQUEST_SETTINGS]: {
|
|
61
|
-
title: 'Custom Request Settings',
|
|
62
|
-
markdownDescription: 'Allows specifying custom request settings for multiple models.\n\
|
|
64
|
+
title: nls.localize('theia/ai/core/requestSettings/title', 'Custom Request Settings'),
|
|
65
|
+
markdownDescription: nls.localize('theia/ai/core/requestSettings/mdDescription', 'Allows specifying custom request settings for multiple models.\n\
|
|
63
66
|
Each object represents the configuration for a specific model. The `modelId` field specifies the model ID, `requestSettings` defines model-specific settings.\n\
|
|
64
67
|
The `providerId` field is optional and allows you to apply the settings to a specific provider. If not set, the settings will be applied to all providers.\n\
|
|
65
68
|
Example providerIds: huggingface, openai, ollama, llamafile.\n\
|
|
66
|
-
Refer to [our documentation](https://theia-ide.org/docs/user_ai/#custom-request-settings) for more information.',
|
|
69
|
+
Refer to [our documentation](https://theia-ide.org/docs/user_ai/#custom-request-settings) for more information.'),
|
|
67
70
|
type: 'array',
|
|
68
71
|
items: {
|
|
69
72
|
type: 'object',
|
|
@@ -88,7 +91,7 @@ export const aiCorePreferenceSchema: PreferenceSchema = {
|
|
|
88
91
|
}
|
|
89
92
|
};
|
|
90
93
|
export interface AICoreConfiguration {
|
|
91
|
-
[
|
|
94
|
+
[PREFERENCE_NAME_ENABLE_AI]: boolean | undefined;
|
|
92
95
|
[PREFERENCE_NAME_PROMPT_TEMPLATES]: string | undefined;
|
|
93
96
|
[PREFERENCE_NAME_REQUEST_SETTINGS]: Array<{
|
|
94
97
|
modelId: string;
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
import { CommandRegistry, MenuModelRegistry } from '@theia/core';
|
|
17
17
|
import { AbstractViewContribution, CommonMenus, KeybindingRegistry, PreferenceService, Widget } from '@theia/core/lib/browser';
|
|
18
18
|
import { inject, injectable, postConstruct } from '@theia/core/shared/inversify';
|
|
19
|
-
import { AIActivationService,
|
|
19
|
+
import { AIActivationService, ENABLE_AI_CONTEXT_KEY } from './ai-activation-service';
|
|
20
20
|
import { AICommandHandlerFactory } from './ai-command-handler-factory';
|
|
21
21
|
|
|
22
22
|
@injectable()
|
|
@@ -49,7 +49,7 @@ export class AIViewContribution<T extends Widget> extends AbstractViewContributi
|
|
|
49
49
|
}
|
|
50
50
|
this.quickView?.registerItem({
|
|
51
51
|
label: this.viewLabel,
|
|
52
|
-
when:
|
|
52
|
+
when: ENABLE_AI_CONTEXT_KEY,
|
|
53
53
|
open: () => this.openView({ activate: true })
|
|
54
54
|
});
|
|
55
55
|
|
|
@@ -59,7 +59,7 @@ export class AIViewContribution<T extends Widget> extends AbstractViewContributi
|
|
|
59
59
|
if (this.toggleCommand) {
|
|
60
60
|
menus.registerMenuAction(CommonMenus.VIEW_VIEWS, {
|
|
61
61
|
commandId: this.toggleCommand.id,
|
|
62
|
-
when:
|
|
62
|
+
when: ENABLE_AI_CONTEXT_KEY,
|
|
63
63
|
label: this.viewLabel
|
|
64
64
|
});
|
|
65
65
|
}
|
|
@@ -68,7 +68,7 @@ export class AIViewContribution<T extends Widget> extends AbstractViewContributi
|
|
|
68
68
|
if (this.toggleCommand && this.options.toggleKeybinding) {
|
|
69
69
|
keybindings.registerKeybinding({
|
|
70
70
|
command: this.toggleCommand.id,
|
|
71
|
-
when:
|
|
71
|
+
when: ENABLE_AI_CONTEXT_KEY,
|
|
72
72
|
keybinding: this.options.toggleKeybinding
|
|
73
73
|
});
|
|
74
74
|
}
|
|
@@ -0,0 +1,102 @@
|
|
|
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
|
+
import { Path, URI } from '@theia/core';
|
|
18
|
+
import { codiconArray } from '@theia/core/lib/browser';
|
|
19
|
+
import { inject, injectable } from '@theia/core/shared/inversify';
|
|
20
|
+
import { FileService } from '@theia/filesystem/lib/browser/file-service';
|
|
21
|
+
import { WorkspaceService } from '@theia/workspace/lib/browser/workspace-service';
|
|
22
|
+
import {
|
|
23
|
+
AIVariable,
|
|
24
|
+
AIVariableContext,
|
|
25
|
+
AIVariableContribution,
|
|
26
|
+
AIVariableResolutionRequest,
|
|
27
|
+
AIVariableResolver,
|
|
28
|
+
AIVariableService,
|
|
29
|
+
ResolvedAIContextVariable,
|
|
30
|
+
} from '../common/variable-service';
|
|
31
|
+
|
|
32
|
+
export namespace FileVariableArgs {
|
|
33
|
+
export const uri = 'uri';
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export const FILE_VARIABLE: AIVariable = {
|
|
37
|
+
id: 'file-provider',
|
|
38
|
+
description: 'Resolves the contents of a file',
|
|
39
|
+
name: 'file',
|
|
40
|
+
label: 'File',
|
|
41
|
+
iconClasses: codiconArray('file'),
|
|
42
|
+
isContextVariable: true,
|
|
43
|
+
args: [{ name: FileVariableArgs.uri, description: 'The URI of the requested file.' }]
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
@injectable()
|
|
47
|
+
export class FileVariableContribution implements AIVariableContribution, AIVariableResolver {
|
|
48
|
+
@inject(FileService)
|
|
49
|
+
protected readonly fileService: FileService;
|
|
50
|
+
|
|
51
|
+
@inject(WorkspaceService)
|
|
52
|
+
protected readonly wsService: WorkspaceService;
|
|
53
|
+
|
|
54
|
+
registerVariables(service: AIVariableService): void {
|
|
55
|
+
service.registerResolver(FILE_VARIABLE, this);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async canResolve(request: AIVariableResolutionRequest, _: AIVariableContext): Promise<number> {
|
|
59
|
+
return request.variable.name === FILE_VARIABLE.name ? 1 : 0;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async resolve(request: AIVariableResolutionRequest, _: AIVariableContext): Promise<ResolvedAIContextVariable | undefined> {
|
|
63
|
+
if (request.variable.name !== FILE_VARIABLE.name || request.arg === undefined) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const path = request.arg;
|
|
68
|
+
const absoluteUri = await this.makeAbsolute(path);
|
|
69
|
+
if (!absoluteUri) {
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
try {
|
|
74
|
+
const content = await this.fileService.readFile(absoluteUri);
|
|
75
|
+
return {
|
|
76
|
+
variable: request.variable,
|
|
77
|
+
value: await this.wsService.getWorkspaceRelativePath(absoluteUri),
|
|
78
|
+
contextValue: content.value.toString(),
|
|
79
|
+
};
|
|
80
|
+
} catch (error) {
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
protected async makeAbsolute(pathStr: string): Promise<URI | undefined> {
|
|
86
|
+
const path = new Path(Path.normalizePathSeparator(pathStr));
|
|
87
|
+
if (!path.isAbsolute) {
|
|
88
|
+
const workspaceRoots = this.wsService.tryGetRoots();
|
|
89
|
+
const wsUris = workspaceRoots.map(root => root.resource.resolve(path));
|
|
90
|
+
for (const uri of wsUris) {
|
|
91
|
+
if (await this.fileService.exists(uri)) {
|
|
92
|
+
return uri;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const argUri = new URI(pathStr);
|
|
97
|
+
if (await this.fileService.exists(argUri)) {
|
|
98
|
+
return argUri;
|
|
99
|
+
}
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -14,13 +14,58 @@
|
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
|
-
import {
|
|
18
|
-
import { DefaultAIVariableService } from '../common';
|
|
17
|
+
import { Disposable } from '@theia/core';
|
|
19
18
|
import { FrontendApplicationContribution } from '@theia/core/lib/browser';
|
|
19
|
+
import { injectable } from '@theia/core/shared/inversify';
|
|
20
|
+
import { AIVariableContext, AIVariableResolutionRequest, AIVariableService, DefaultAIVariableService } from '../common';
|
|
21
|
+
|
|
22
|
+
export type AIVariableDropHandler = (event: DragEvent, context: AIVariableContext) => Promise<AIVariableDropResult | undefined>;
|
|
23
|
+
|
|
24
|
+
export interface AIVariableDropResult {
|
|
25
|
+
variables: AIVariableResolutionRequest[],
|
|
26
|
+
text?: string
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const FrontendVariableService = Symbol('FrontendVariableService');
|
|
30
|
+
export interface FrontendVariableService extends AIVariableService {
|
|
31
|
+
registerDropHandler(handler: AIVariableDropHandler): Disposable;
|
|
32
|
+
unregisterDropHandler(handler: AIVariableDropHandler): void;
|
|
33
|
+
getDropResult(event: DragEvent, context: AIVariableContext): Promise<AIVariableDropResult>;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface FrontendVariableContribution {
|
|
37
|
+
registerVariables(service: FrontendVariableService): void;
|
|
38
|
+
}
|
|
20
39
|
|
|
21
40
|
@injectable()
|
|
22
|
-
export class
|
|
41
|
+
export class DefaultFrontendVariableService extends DefaultAIVariableService implements FrontendApplicationContribution {
|
|
42
|
+
protected dropHandlers = new Set<AIVariableDropHandler>();
|
|
43
|
+
|
|
23
44
|
onStart(): void {
|
|
24
45
|
this.initContributions();
|
|
25
46
|
}
|
|
47
|
+
|
|
48
|
+
registerDropHandler(handler: AIVariableDropHandler): Disposable {
|
|
49
|
+
this.dropHandlers.add(handler);
|
|
50
|
+
return Disposable.create(() => this.unregisterDropHandler(handler));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
unregisterDropHandler(handler: AIVariableDropHandler): void {
|
|
54
|
+
this.dropHandlers.delete(handler);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async getDropResult(event: DragEvent, context: AIVariableContext): Promise<AIVariableDropResult> {
|
|
58
|
+
let text: string | undefined = undefined;
|
|
59
|
+
const variables: AIVariableResolutionRequest[] = [];
|
|
60
|
+
for (const handler of this.dropHandlers) {
|
|
61
|
+
const result = await handler(event, context);
|
|
62
|
+
if (result) {
|
|
63
|
+
variables.push(...result.variables);
|
|
64
|
+
if (text === undefined) {
|
|
65
|
+
text = result.text;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return { variables, text };
|
|
70
|
+
}
|
|
26
71
|
}
|
package/src/browser/index.ts
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
import { inject, injectable } from '@theia/core/shared/inversify';
|
|
18
18
|
import { GrammarDefinition, GrammarDefinitionProvider, LanguageGrammarDefinitionContribution, TextmateRegistry } from '@theia/monaco/lib/browser/textmate';
|
|
19
19
|
import * as monaco from '@theia/monaco-editor-core';
|
|
20
|
-
import { Command, CommandContribution, CommandRegistry, MessageService } from '@theia/core';
|
|
20
|
+
import { Command, CommandContribution, CommandRegistry, MessageService, nls } from '@theia/core';
|
|
21
21
|
import { TabBarToolbarContribution, TabBarToolbarRegistry } from '@theia/core/lib/browser/shell/tab-bar-toolbar';
|
|
22
22
|
|
|
23
23
|
import { codicon, Widget } from '@theia/core/lib/browser';
|
|
@@ -245,7 +245,7 @@ export class PromptTemplateContribution implements LanguageGrammarDefinitionCont
|
|
|
245
245
|
registry.registerItem({
|
|
246
246
|
id: DISCARD_PROMPT_TEMPLATE_CUSTOMIZATIONS.id,
|
|
247
247
|
command: DISCARD_PROMPT_TEMPLATE_CUSTOMIZATIONS.id,
|
|
248
|
-
tooltip: 'Discard Customizations'
|
|
248
|
+
tooltip: nls.localize('theia/ai/core/discardCustomPrompt/tooltip', 'Discard Customizations')
|
|
249
249
|
});
|
|
250
250
|
}
|
|
251
251
|
}
|