@theia/ai-editor 1.63.0-next.52 → 1.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/ai-code-action-provider.d.ts +2 -0
- package/lib/browser/ai-code-action-provider.d.ts.map +1 -1
- package/lib/browser/ai-code-action-provider.js +18 -0
- package/lib/browser/ai-code-action-provider.js.map +1 -1
- package/lib/browser/ai-editor-command-contribution.d.ts +9 -2
- package/lib/browser/ai-editor-command-contribution.d.ts.map +1 -1
- package/lib/browser/ai-editor-command-contribution.js +68 -70
- package/lib/browser/ai-editor-command-contribution.js.map +1 -1
- package/lib/browser/ai-editor-frontend-module.d.ts.map +1 -1
- package/lib/browser/ai-editor-frontend-module.js +13 -0
- package/lib/browser/ai-editor-frontend-module.js.map +1 -1
- package/lib/browser/ask-ai-input-monaco-zone-widget.d.ts +25 -0
- package/lib/browser/ask-ai-input-monaco-zone-widget.d.ts.map +1 -0
- package/lib/browser/ask-ai-input-monaco-zone-widget.js +93 -0
- package/lib/browser/ask-ai-input-monaco-zone-widget.js.map +1 -0
- package/lib/browser/ask-ai-input-widget.d.ts +26 -23
- package/lib/browser/ask-ai-input-widget.d.ts.map +1 -1
- package/lib/browser/ask-ai-input-widget.js +65 -72
- package/lib/browser/ask-ai-input-widget.js.map +1 -1
- package/package.json +11 -10
- package/src/browser/ai-code-action-provider.ts +20 -0
- package/src/browser/ai-editor-command-contribution.ts +72 -76
- package/src/browser/ai-editor-frontend-module.ts +19 -0
- package/src/browser/ask-ai-input-monaco-zone-widget.ts +114 -0
- package/src/browser/ask-ai-input-widget.ts +54 -88
- package/style/ask-ai-input.css +7 -22
|
@@ -2,12 +2,14 @@ import { FrontendApplicationContribution } from '@theia/core/lib/browser';
|
|
|
2
2
|
import { CommandService } from '@theia/core/lib/common/command';
|
|
3
3
|
import { DisposableCollection } from '@theia/core/lib/common/disposable';
|
|
4
4
|
import { MonacoEditorService } from '@theia/monaco/lib/browser/monaco-editor-service';
|
|
5
|
+
import { AIActivationService } from '@theia/ai-core/lib/browser/ai-activation-service';
|
|
5
6
|
export declare const AI_EDITOR_SEND_TO_CHAT: {
|
|
6
7
|
id: string;
|
|
7
8
|
};
|
|
8
9
|
export declare class AICodeActionProvider implements FrontendApplicationContribution {
|
|
9
10
|
protected readonly commandService: CommandService;
|
|
10
11
|
protected readonly monacoEditorService: MonacoEditorService;
|
|
12
|
+
protected readonly activationService: AIActivationService;
|
|
11
13
|
protected readonly toDispose: DisposableCollection;
|
|
12
14
|
onStart(): void;
|
|
13
15
|
dispose(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-code-action-provider.d.ts","sourceRoot":"","sources":["../../src/browser/ai-code-action-provider.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAGzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-code-action-provider.d.ts","sourceRoot":"","sources":["../../src/browser/ai-code-action-provider.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAGzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AAEvF,eAAO,MAAM,sBAAsB;;CAElC,CAAC;AAEF,qBACa,oBAAqB,YAAW,+BAA+B;IAGxE,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAGlD,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAG5D,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;IAE1D,SAAS,CAAC,QAAQ,CAAC,SAAS,uBAA8B;IAE1D,OAAO,IAAI,IAAI;IAUf,OAAO,IAAI,IAAI;IAIf,SAAS,CAAC,0BAA0B,IAAI,IAAI;CA6D/C"}
|
|
@@ -22,6 +22,7 @@ const disposable_1 = require("@theia/core/lib/common/disposable");
|
|
|
22
22
|
const inversify_1 = require("@theia/core/shared/inversify");
|
|
23
23
|
const monaco = require("@theia/monaco-editor-core");
|
|
24
24
|
const monaco_editor_service_1 = require("@theia/monaco/lib/browser/monaco-editor-service");
|
|
25
|
+
const ai_activation_service_1 = require("@theia/ai-core/lib/browser/ai-activation-service");
|
|
25
26
|
exports.AI_EDITOR_SEND_TO_CHAT = {
|
|
26
27
|
id: 'ai-editor.sendToChat',
|
|
27
28
|
};
|
|
@@ -31,13 +32,26 @@ let AICodeActionProvider = class AICodeActionProvider {
|
|
|
31
32
|
}
|
|
32
33
|
onStart() {
|
|
33
34
|
this.registerCodeActionProvider();
|
|
35
|
+
// Listen to AI activation changes and re-register the provider
|
|
36
|
+
this.activationService.onDidChangeActiveStatus(() => {
|
|
37
|
+
this.toDispose.dispose();
|
|
38
|
+
this.registerCodeActionProvider();
|
|
39
|
+
});
|
|
34
40
|
}
|
|
35
41
|
dispose() {
|
|
36
42
|
this.toDispose.dispose();
|
|
37
43
|
}
|
|
38
44
|
registerCodeActionProvider() {
|
|
45
|
+
if (!this.activationService.isActive) {
|
|
46
|
+
// AI is disabled, don't register the provider
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
39
49
|
const disposable = monaco.languages.registerCodeActionProvider('*', {
|
|
40
50
|
provideCodeActions: (model, range, context, token) => {
|
|
51
|
+
// Double-check activation status in the provider
|
|
52
|
+
if (!this.activationService.isActive) {
|
|
53
|
+
return { actions: [], dispose: () => { } };
|
|
54
|
+
}
|
|
41
55
|
// Filter for error markers only
|
|
42
56
|
const errorMarkers = context.markers.filter(marker => marker.severity === monaco.MarkerSeverity.Error);
|
|
43
57
|
if (errorMarkers.length === 0) {
|
|
@@ -91,6 +105,10 @@ tslib_1.__decorate([
|
|
|
91
105
|
(0, inversify_1.inject)(monaco_editor_service_1.MonacoEditorService),
|
|
92
106
|
tslib_1.__metadata("design:type", monaco_editor_service_1.MonacoEditorService)
|
|
93
107
|
], AICodeActionProvider.prototype, "monacoEditorService", void 0);
|
|
108
|
+
tslib_1.__decorate([
|
|
109
|
+
(0, inversify_1.inject)(ai_activation_service_1.AIActivationService),
|
|
110
|
+
tslib_1.__metadata("design:type", ai_activation_service_1.AIActivationService)
|
|
111
|
+
], AICodeActionProvider.prototype, "activationService", void 0);
|
|
94
112
|
exports.AICodeActionProvider = AICodeActionProvider = tslib_1.__decorate([
|
|
95
113
|
(0, inversify_1.injectable)()
|
|
96
114
|
], AICodeActionProvider);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-code-action-provider.js","sourceRoot":"","sources":["../../src/browser/ai-code-action-provider.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,4DAAgE;AAChE,kEAAyE;AACzE,4DAAkE;AAClE,oDAAoD;AACpD,2FAAsF;
|
|
1
|
+
{"version":3,"file":"ai-code-action-provider.js","sourceRoot":"","sources":["../../src/browser/ai-code-action-provider.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,4DAAgE;AAChE,kEAAyE;AACzE,4DAAkE;AAClE,oDAAoD;AACpD,2FAAsF;AACtF,4FAAuF;AAE1E,QAAA,sBAAsB,GAAG;IAClC,EAAE,EAAE,sBAAsB;CAC7B,CAAC;AAGK,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAA1B;QAWgB,cAAS,GAAG,IAAI,iCAAoB,EAAE,CAAC;IA6E9D,CAAC;IA3EG,OAAO;QACH,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAElC,+DAA+D;QAC/D,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,GAAG,EAAE;YAChD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,OAAO;QACH,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAES,0BAA0B;QAChC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;YACnC,8CAA8C;YAC9C,OAAO;QACX,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,0BAA0B,CAAC,GAAG,EAAE;YAChE,kBAAkB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;gBACjD,iDAAiD;gBACjD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;oBACnC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC/C,CAAC;gBAED,gCAAgC;gBAChC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CACjD,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAErD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC5B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC/C,CAAC;gBAED,MAAM,OAAO,GAAkC,EAAE,CAAC;gBAElD,6EAA6E;gBAC7E,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;oBAC1B,OAAO,CAAC,IAAI,CAAC;wBACT,KAAK,EAAE,aAAa;wBACpB,WAAW,EAAE,CAAC,MAAM,CAAC;wBACrB,IAAI,EAAE,IAAI;wBACV,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE;4BACL,EAAE,EAAE,8BAAsB,CAAC,EAAE;4BAC7B,KAAK,EAAE,aAAa;4BACpB,SAAS,EAAE,CAAC;oCACR,MAAM,EAAE,mCAAmC,MAAM,CAAC,OAAO,GAAG;iCAC/D,CAAC;yBACL;qBACJ,CAAC,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC;wBACT,KAAK,EAAE,iBAAiB;wBACxB,WAAW,EAAE,CAAC,MAAM,CAAC;wBACrB,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,IAAI;wBACV,OAAO,EAAE;4BACL,EAAE,EAAE,8BAAsB,CAAC,EAAE;4BAC7B,KAAK,EAAE,iBAAiB;4BACxB,SAAS,EAAE,CAAC;oCACR,MAAM,EAAE,mCAAmC,MAAM,CAAC,OAAO,GAAG;iCAC/D,CAAC;yBACL;qBACJ,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;gBACH,OAAO;oBACH,OAAO,EAAE,OAAO;oBAChB,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC;iBACrB,CAAC;YACN,CAAC;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;CACJ,CAAA;AAxFY,oDAAoB;AAGV;IADlB,IAAA,kBAAM,EAAC,wBAAc,CAAC;;4DAC2B;AAG/B;IADlB,IAAA,kBAAM,EAAC,2CAAmB,CAAC;sCACY,2CAAmB;iEAAC;AAGzC;IADlB,IAAA,kBAAM,EAAC,2CAAmB,CAAC;sCACU,2CAAmB;+DAAC;+BATjD,oBAAoB;IADhC,IAAA,sBAAU,GAAE;GACA,oBAAoB,CAwFhC"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { ChatService } from '@theia/ai-chat';
|
|
2
|
+
import { AICommandHandlerFactory } from '@theia/ai-core/lib/browser';
|
|
2
3
|
import { MenuContribution, MenuModelRegistry } from '@theia/core';
|
|
3
|
-
import { KeybindingContribution, KeybindingRegistry } from '@theia/core/lib/browser';
|
|
4
|
+
import { ApplicationShell, KeybindingContribution, KeybindingRegistry } from '@theia/core/lib/browser';
|
|
4
5
|
import { Command, CommandContribution, CommandRegistry } from '@theia/core/lib/common';
|
|
5
6
|
import { MonacoCommandRegistry, MonacoEditorCommandHandler } from '@theia/monaco/lib/browser/monaco-command-registry';
|
|
7
|
+
import { AskAIInputMonacoZoneWidget } from './ask-ai-input-monaco-zone-widget';
|
|
8
|
+
import { AskAIInputFactory } from './ask-ai-input-widget';
|
|
6
9
|
export declare namespace AI_EDITOR_COMMANDS {
|
|
7
10
|
const AI_EDITOR_ASK_AI: Command;
|
|
8
11
|
const AI_EDITOR_SEND_TO_CHAT: Command;
|
|
@@ -10,13 +13,17 @@ export declare namespace AI_EDITOR_COMMANDS {
|
|
|
10
13
|
export declare class AiEditorCommandContribution implements CommandContribution, MenuContribution, KeybindingContribution {
|
|
11
14
|
protected readonly monacoCommandRegistry: MonacoCommandRegistry;
|
|
12
15
|
protected readonly chatService: ChatService;
|
|
13
|
-
|
|
16
|
+
protected readonly commandHandlerFactory: AICommandHandlerFactory;
|
|
17
|
+
protected readonly askAIInputFactory: AskAIInputFactory;
|
|
18
|
+
protected readonly shell: ApplicationShell;
|
|
19
|
+
protected askAiInputWidget: AskAIInputMonacoZoneWidget | undefined;
|
|
14
20
|
registerCommands(registry: CommandRegistry): void;
|
|
15
21
|
protected showInputWidgetHandler(): MonacoEditorCommandHandler;
|
|
16
22
|
private showInputWidget;
|
|
17
23
|
private cleanupInputWidget;
|
|
18
24
|
protected sendToChatHandler(): MonacoEditorCommandHandler;
|
|
19
25
|
private createNewChatSession;
|
|
26
|
+
protected wrapMonacoHandler(handler: MonacoEditorCommandHandler): MonacoEditorCommandHandler;
|
|
20
27
|
registerMenus(menus: MenuModelRegistry): void;
|
|
21
28
|
registerKeybindings(registry: KeybindingRegistry): void;
|
|
22
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-editor-command-contribution.d.ts","sourceRoot":"","sources":["../../src/browser/ai-editor-command-contribution.ts"],"names":[],"mappings":"AAgBA,OAAO,
|
|
1
|
+
{"version":3,"file":"ai-editor-command-contribution.d.ts","sourceRoot":"","sources":["../../src/browser/ai-editor-command-contribution.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAkC,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAyB,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAsB,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAW,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAChH,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGvF,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAC;AAEtH,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,yBAAiB,kBAAkB,CAAC;IACzB,MAAM,gBAAgB,EAAE,OAIE,CAAC;IAC3B,MAAM,sBAAsB,EAAE,OAGL,CAAC;CACpC;AAED,qBACa,2BAA4B,YAAW,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB;IAG7G,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAGhE,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAG5C,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,uBAAuB,CAAC;IAGlE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAGxD,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IAE3C,SAAS,CAAC,gBAAgB,EAAE,0BAA0B,GAAG,SAAS,CAAC;IAEnE,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAQjD,SAAS,CAAC,sBAAsB,IAAI,0BAA0B;IAU9D,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,kBAAkB;IAO1B,SAAS,CAAC,iBAAiB,IAAI,0BAA0B;IAezD,OAAO,CAAC,oBAAoB;IAQ5B,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,0BAA0B,GAAG,0BAA0B;IAQ5F,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAS7C,mBAAmB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;CAO1D"}
|
|
@@ -19,88 +19,53 @@ exports.AiEditorCommandContribution = exports.AI_EDITOR_COMMANDS = void 0;
|
|
|
19
19
|
const tslib_1 = require("tslib");
|
|
20
20
|
const ai_chat_1 = require("@theia/ai-chat");
|
|
21
21
|
const browser_1 = require("@theia/ai-core/lib/browser");
|
|
22
|
-
const
|
|
22
|
+
const core_1 = require("@theia/core");
|
|
23
|
+
const browser_2 = require("@theia/core/lib/browser");
|
|
24
|
+
const common_1 = require("@theia/core/lib/common");
|
|
23
25
|
const inversify_1 = require("@theia/core/shared/inversify");
|
|
24
|
-
const
|
|
26
|
+
const browser_3 = require("@theia/editor/lib/browser");
|
|
25
27
|
const monaco_command_registry_1 = require("@theia/monaco/lib/browser/monaco-command-registry");
|
|
28
|
+
const ask_ai_input_monaco_zone_widget_1 = require("./ask-ai-input-monaco-zone-widget");
|
|
26
29
|
const ask_ai_input_widget_1 = require("./ask-ai-input-widget");
|
|
27
30
|
var AI_EDITOR_COMMANDS;
|
|
28
31
|
(function (AI_EDITOR_COMMANDS) {
|
|
29
|
-
AI_EDITOR_COMMANDS.AI_EDITOR_ASK_AI = {
|
|
32
|
+
AI_EDITOR_COMMANDS.AI_EDITOR_ASK_AI = common_1.Command.toLocalizedCommand({
|
|
30
33
|
id: 'ai-editor.contextAction',
|
|
31
|
-
label:
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
label: 'Ask AI',
|
|
35
|
+
iconClass: (0, browser_2.codicon)('sparkle')
|
|
36
|
+
}, 'theia/ai-editor/contextMenu');
|
|
37
|
+
AI_EDITOR_COMMANDS.AI_EDITOR_SEND_TO_CHAT = common_1.Command.toLocalizedCommand({
|
|
34
38
|
id: 'ai-editor.sendToChat',
|
|
35
|
-
label:
|
|
36
|
-
};
|
|
39
|
+
label: 'Send to AI Chat'
|
|
40
|
+
}, 'theia/ai-editor/sendToChat');
|
|
37
41
|
})(AI_EDITOR_COMMANDS || (exports.AI_EDITOR_COMMANDS = AI_EDITOR_COMMANDS = {}));
|
|
38
42
|
;
|
|
39
43
|
let AiEditorCommandContribution = class AiEditorCommandContribution {
|
|
40
44
|
registerCommands(registry) {
|
|
41
45
|
registry.registerCommand(AI_EDITOR_COMMANDS.AI_EDITOR_ASK_AI);
|
|
42
46
|
registry.registerCommand(AI_EDITOR_COMMANDS.AI_EDITOR_SEND_TO_CHAT);
|
|
43
|
-
this.monacoCommandRegistry.registerHandler(AI_EDITOR_COMMANDS.AI_EDITOR_ASK_AI.id, this.showInputWidgetHandler());
|
|
44
|
-
this.monacoCommandRegistry.registerHandler(AI_EDITOR_COMMANDS.AI_EDITOR_SEND_TO_CHAT.id, this.sendToChatHandler());
|
|
47
|
+
this.monacoCommandRegistry.registerHandler(AI_EDITOR_COMMANDS.AI_EDITOR_ASK_AI.id, this.wrapMonacoHandler(this.showInputWidgetHandler()));
|
|
48
|
+
this.monacoCommandRegistry.registerHandler(AI_EDITOR_COMMANDS.AI_EDITOR_SEND_TO_CHAT.id, this.wrapMonacoHandler(this.sendToChatHandler()));
|
|
45
49
|
}
|
|
46
50
|
showInputWidgetHandler() {
|
|
47
51
|
return {
|
|
48
|
-
execute: (editor
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
coordinates = { x: position.x, y: position.y + 10 };
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
// Called from keybinding - calculate position from cursor in editor
|
|
56
|
-
const cursorPosition = editor.getControl().getPosition();
|
|
57
|
-
if (cursorPosition) {
|
|
58
|
-
const editorNode = editor.getControl().getDomNode();
|
|
59
|
-
if (editorNode) {
|
|
60
|
-
const editorRect = editorNode.getBoundingClientRect();
|
|
61
|
-
const coordinatesInEditor = editor.getControl().getScrolledVisiblePosition(cursorPosition);
|
|
62
|
-
if (coordinatesInEditor) {
|
|
63
|
-
// Calculate screen coordinates from editor-relative coordinates
|
|
64
|
-
coordinates = {
|
|
65
|
-
x: editorRect.left + coordinatesInEditor.left,
|
|
66
|
-
y: editorRect.top + coordinatesInEditor.top + coordinatesInEditor.height + 5
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
// Fallback: center of editor viewport
|
|
71
|
-
coordinates = {
|
|
72
|
-
x: editorRect.left + editorRect.width / 2,
|
|
73
|
-
y: editorRect.top + editorRect.height / 2
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
// Ultimate fallback: center of screen
|
|
79
|
-
coordinates = {
|
|
80
|
-
x: window.innerWidth / 2,
|
|
81
|
-
y: window.innerHeight / 2
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
// Fallback if no cursor position available
|
|
87
|
-
coordinates = {
|
|
88
|
-
x: window.innerWidth / 2,
|
|
89
|
-
y: window.innerHeight / 2
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
this.showInputWidget(coordinates);
|
|
94
|
-
}
|
|
52
|
+
execute: (editor) => {
|
|
53
|
+
this.showInputWidget(editor);
|
|
54
|
+
},
|
|
55
|
+
isEnabled: (editor) => this.shell.currentWidget instanceof browser_3.EditorWidget && this.shell.currentWidget.editor === editor
|
|
95
56
|
};
|
|
96
57
|
}
|
|
97
|
-
showInputWidget(
|
|
58
|
+
showInputWidget(editor) {
|
|
59
|
+
var _a, _b;
|
|
98
60
|
this.cleanupInputWidget();
|
|
99
|
-
|
|
100
|
-
this.askAiInputWidget.
|
|
101
|
-
|
|
61
|
+
// Create the input widget using the factory
|
|
62
|
+
this.askAiInputWidget = new ask_ai_input_monaco_zone_widget_1.AskAIInputMonacoZoneWidget(editor.getControl(), this.askAIInputFactory);
|
|
63
|
+
this.askAiInputWidget.onSubmit(request => {
|
|
64
|
+
this.createNewChatSession(request);
|
|
65
|
+
this.cleanupInputWidget();
|
|
102
66
|
});
|
|
103
|
-
|
|
67
|
+
const line = (_b = (_a = editor.getControl().getPosition()) === null || _a === void 0 ? void 0 : _a.lineNumber) !== null && _b !== void 0 ? _b : 1;
|
|
68
|
+
this.askAiInputWidget.showAtLine(line);
|
|
104
69
|
this.askAiInputWidget.onCancel(() => {
|
|
105
70
|
this.cleanupInputWidget();
|
|
106
71
|
});
|
|
@@ -113,23 +78,38 @@ let AiEditorCommandContribution = class AiEditorCommandContribution {
|
|
|
113
78
|
}
|
|
114
79
|
sendToChatHandler() {
|
|
115
80
|
return {
|
|
116
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
117
81
|
execute: (_editor, ...args) => {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
82
|
+
if (containsPrompt(args)) {
|
|
83
|
+
const prompt = args
|
|
84
|
+
.filter(isPromptArg)
|
|
85
|
+
.map(arg => arg.prompt)
|
|
86
|
+
.join();
|
|
87
|
+
this.createNewChatSession({ text: prompt });
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
isEnabled: (_editor, ...args) => containsPrompt(args)
|
|
121
91
|
};
|
|
122
92
|
}
|
|
123
|
-
createNewChatSession(
|
|
93
|
+
createNewChatSession(request) {
|
|
124
94
|
const session = this.chatService.createSession(ai_chat_1.ChatAgentLocation.Panel, { focus: true });
|
|
125
95
|
this.chatService.sendRequest(session.id, {
|
|
126
|
-
|
|
96
|
+
...request,
|
|
97
|
+
text: `${request.text} #editorContext`,
|
|
127
98
|
});
|
|
128
99
|
}
|
|
100
|
+
wrapMonacoHandler(handler) {
|
|
101
|
+
const wrappedHandler = this.commandHandlerFactory(handler);
|
|
102
|
+
return {
|
|
103
|
+
execute: wrappedHandler.execute,
|
|
104
|
+
isEnabled: wrappedHandler.isEnabled
|
|
105
|
+
};
|
|
106
|
+
}
|
|
129
107
|
registerMenus(menus) {
|
|
130
|
-
menus.registerMenuAction(
|
|
108
|
+
menus.registerMenuAction(browser_3.EditorContextMenu.NAVIGATION, {
|
|
131
109
|
commandId: AI_EDITOR_COMMANDS.AI_EDITOR_ASK_AI.id,
|
|
132
|
-
label: AI_EDITOR_COMMANDS.AI_EDITOR_ASK_AI.label
|
|
110
|
+
label: AI_EDITOR_COMMANDS.AI_EDITOR_ASK_AI.label,
|
|
111
|
+
icon: AI_EDITOR_COMMANDS.AI_EDITOR_ASK_AI.iconClass,
|
|
112
|
+
when: browser_1.ENABLE_AI_CONTEXT_KEY
|
|
133
113
|
});
|
|
134
114
|
}
|
|
135
115
|
registerKeybindings(registry) {
|
|
@@ -149,7 +129,25 @@ tslib_1.__decorate([
|
|
|
149
129
|
(0, inversify_1.inject)(ai_chat_1.ChatService),
|
|
150
130
|
tslib_1.__metadata("design:type", Object)
|
|
151
131
|
], AiEditorCommandContribution.prototype, "chatService", void 0);
|
|
132
|
+
tslib_1.__decorate([
|
|
133
|
+
(0, inversify_1.inject)(browser_1.AICommandHandlerFactory),
|
|
134
|
+
tslib_1.__metadata("design:type", Function)
|
|
135
|
+
], AiEditorCommandContribution.prototype, "commandHandlerFactory", void 0);
|
|
136
|
+
tslib_1.__decorate([
|
|
137
|
+
(0, inversify_1.inject)(ask_ai_input_widget_1.AskAIInputFactory),
|
|
138
|
+
tslib_1.__metadata("design:type", Function)
|
|
139
|
+
], AiEditorCommandContribution.prototype, "askAIInputFactory", void 0);
|
|
140
|
+
tslib_1.__decorate([
|
|
141
|
+
(0, inversify_1.inject)(browser_2.ApplicationShell),
|
|
142
|
+
tslib_1.__metadata("design:type", browser_2.ApplicationShell)
|
|
143
|
+
], AiEditorCommandContribution.prototype, "shell", void 0);
|
|
152
144
|
exports.AiEditorCommandContribution = AiEditorCommandContribution = tslib_1.__decorate([
|
|
153
145
|
(0, inversify_1.injectable)()
|
|
154
146
|
], AiEditorCommandContribution);
|
|
147
|
+
function containsPrompt(args) {
|
|
148
|
+
return args.some(arg => isPromptArg(arg));
|
|
149
|
+
}
|
|
150
|
+
function isPromptArg(arg) {
|
|
151
|
+
return (0, core_1.isObject)(arg) && 'prompt' in arg && (0, core_1.isString)(arg.prompt);
|
|
152
|
+
}
|
|
155
153
|
//# sourceMappingURL=ai-editor-command-contribution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-editor-command-contribution.js","sourceRoot":"","sources":["../../src/browser/ai-editor-command-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,
|
|
1
|
+
{"version":3,"file":"ai-editor-command-contribution.js","sourceRoot":"","sources":["../../src/browser/ai-editor-command-contribution.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-editor-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/ai-editor-frontend-module.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,8BAA8B,CAAC;;
|
|
1
|
+
{"version":3,"file":"ai-editor-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/ai-editor-frontend-module.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,8BAA8B,CAAC;;AAWtC,wBAwBG"}
|
|
@@ -23,6 +23,7 @@ require("../../style/ask-ai-input.css");
|
|
|
23
23
|
const ai_code_action_provider_1 = require("./ai-code-action-provider");
|
|
24
24
|
const ai_editor_command_contribution_1 = require("./ai-editor-command-contribution");
|
|
25
25
|
const ai_editor_context_variable_1 = require("./ai-editor-context-variable");
|
|
26
|
+
const ask_ai_input_widget_1 = require("./ask-ai-input-widget");
|
|
26
27
|
exports.default = new inversify_1.ContainerModule(bind => {
|
|
27
28
|
bind(ai_editor_command_contribution_1.AiEditorCommandContribution).toSelf().inSingletonScope();
|
|
28
29
|
bind(common_1.CommandContribution).toService(ai_editor_command_contribution_1.AiEditorCommandContribution);
|
|
@@ -31,5 +32,17 @@ exports.default = new inversify_1.ContainerModule(bind => {
|
|
|
31
32
|
bind(ai_core_1.AIVariableContribution).to(ai_editor_context_variable_1.EditorContextVariableContribution).inSingletonScope();
|
|
32
33
|
bind(ai_code_action_provider_1.AICodeActionProvider).toSelf().inSingletonScope();
|
|
33
34
|
bind(browser_1.FrontendApplicationContribution).toService(ai_code_action_provider_1.AICodeActionProvider);
|
|
35
|
+
bind(ask_ai_input_widget_1.AskAIInputFactory).toFactory(ctx => (args) => {
|
|
36
|
+
const container = ctx.container.createChild();
|
|
37
|
+
container.bind(ask_ai_input_widget_1.AskAIInputArgs).toConstantValue(args);
|
|
38
|
+
container.bind(ask_ai_input_widget_1.AskAIInputConfiguration).toConstantValue({
|
|
39
|
+
showContext: true,
|
|
40
|
+
showPinnedAgent: true,
|
|
41
|
+
showChangeSet: false,
|
|
42
|
+
showSuggestions: false
|
|
43
|
+
});
|
|
44
|
+
container.bind(ask_ai_input_widget_1.AskAIInputWidget).toSelf().inSingletonScope();
|
|
45
|
+
return container.get(ask_ai_input_widget_1.AskAIInputWidget);
|
|
46
|
+
});
|
|
34
47
|
});
|
|
35
48
|
//# sourceMappingURL=ai-editor-frontend-module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-editor-frontend-module.js","sourceRoot":"","sources":["../../src/browser/ai-editor-frontend-module.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,4CAAwD;AACxD,qDAAkG;AAClG,mDAA+E;AAC/E,4DAA+D;AAC/D,wCAAsC;AACtC,uEAAiE;AACjE,qFAA+E;AAC/E,6EAAiF;
|
|
1
|
+
{"version":3,"file":"ai-editor-frontend-module.js","sourceRoot":"","sources":["../../src/browser/ai-editor-frontend-module.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,4CAAwD;AACxD,qDAAkG;AAClG,mDAA+E;AAC/E,4DAA+D;AAC/D,wCAAsC;AACtC,uEAAiE;AACjE,qFAA+E;AAC/E,6EAAiF;AACjF,+DAK+B;AAE/B,kBAAe,IAAI,2BAAe,CAAC,IAAI,CAAC,EAAE;IACtC,IAAI,CAAC,4DAA2B,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAE9D,IAAI,CAAC,4BAAmB,CAAC,CAAC,SAAS,CAAC,4DAA2B,CAAC,CAAC;IACjE,IAAI,CAAC,yBAAgB,CAAC,CAAC,SAAS,CAAC,4DAA2B,CAAC,CAAC;IAC9D,IAAI,CAAC,gCAAsB,CAAC,CAAC,SAAS,CAAC,4DAA2B,CAAC,CAAC;IAEpE,IAAI,CAAC,gCAAsB,CAAC,CAAC,EAAE,CAAC,8DAAiC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAEtF,IAAI,CAAC,8CAAoB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACvD,IAAI,CAAC,yCAA+B,CAAC,CAAC,SAAS,CAAC,8CAAoB,CAAC,CAAC;IAEtE,IAAI,CAAC,uCAAiB,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAoB,EAAE,EAAE;QAC9D,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAC9C,SAAS,CAAC,IAAI,CAAC,oCAAc,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACrD,SAAS,CAAC,IAAI,CAAC,6CAAuB,CAAC,CAAC,eAAe,CAAC;YACpD,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE,IAAI;YACrB,aAAa,EAAE,KAAK;YACpB,eAAe,EAAE,KAAK;SACS,CAAC,CAAC;QACrC,SAAS,CAAC,IAAI,CAAC,sCAAgB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;QAC7D,OAAO,SAAS,CAAC,GAAG,CAAC,sCAAgB,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ChatRequest } from '@theia/ai-chat';
|
|
2
|
+
import { Disposable } from '@theia/core/lib/common/disposable';
|
|
3
|
+
import { Emitter, Event } from '@theia/core/lib/common/event';
|
|
4
|
+
import * as monaco from '@theia/monaco-editor-core';
|
|
5
|
+
import { MonacoEditorZoneWidget } from '@theia/monaco/lib/browser/monaco-editor-zone-widget';
|
|
6
|
+
import { AskAIInputFactory, AskAIInputWidget } from './ask-ai-input-widget';
|
|
7
|
+
/**
|
|
8
|
+
* A widget that shows the Ask AI input UI in a Monaco editor zone.
|
|
9
|
+
*/
|
|
10
|
+
export declare class AskAIInputMonacoZoneWidget extends MonacoEditorZoneWidget implements Disposable {
|
|
11
|
+
protected readonly inputWidget: AskAIInputWidget;
|
|
12
|
+
protected readonly onSubmitEmitter: Emitter<ChatRequest>;
|
|
13
|
+
protected readonly onCancelEmitter: Emitter<void>;
|
|
14
|
+
readonly onSubmit: Event<ChatRequest>;
|
|
15
|
+
readonly onCancel: Event<void>;
|
|
16
|
+
constructor(editorInstance: monaco.editor.ICodeEditor, inputWidgetFactory: AskAIInputFactory);
|
|
17
|
+
show(options: MonacoEditorZoneWidget.Options): void;
|
|
18
|
+
showAtLine(lineNumber: number): void;
|
|
19
|
+
protected renderReactWidget(): void;
|
|
20
|
+
protected adjustZoneHeight(): void;
|
|
21
|
+
protected handleSubmit(request: ChatRequest): void;
|
|
22
|
+
protected handleCancel(): void;
|
|
23
|
+
protected registerListeners(): void;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=ask-ai-input-monaco-zone-widget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask-ai-input-monaco-zone-widget.d.ts","sourceRoot":"","sources":["../../src/browser/ask-ai-input-monaco-zone-widget.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,KAAK,MAAM,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE5E;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,sBAAuB,YAAW,UAAU;IACxF,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IAEjD,SAAS,CAAC,QAAQ,CAAC,eAAe,uBAA8B;IAChE,SAAS,CAAC,QAAQ,CAAC,eAAe,gBAAuB;IAEzD,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAA8B;IACnE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAA8B;gBAGxD,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,EACzC,kBAAkB,EAAE,iBAAiB;IAoBhC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,OAAO,GAAG,IAAI;IAM5D,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAUpC,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAMnC,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAelC,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAKlD,SAAS,CAAC,YAAY,IAAI,IAAI;IAK9B,SAAS,CAAC,iBAAiB,IAAI,IAAI;CAStC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
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.AskAIInputMonacoZoneWidget = void 0;
|
|
19
|
+
const event_1 = require("@theia/core/lib/common/event");
|
|
20
|
+
const monaco = require("@theia/monaco-editor-core");
|
|
21
|
+
const monaco_editor_zone_widget_1 = require("@theia/monaco/lib/browser/monaco-editor-zone-widget");
|
|
22
|
+
/**
|
|
23
|
+
* A widget that shows the Ask AI input UI in a Monaco editor zone.
|
|
24
|
+
*/
|
|
25
|
+
class AskAIInputMonacoZoneWidget extends monaco_editor_zone_widget_1.MonacoEditorZoneWidget {
|
|
26
|
+
constructor(editorInstance, inputWidgetFactory) {
|
|
27
|
+
super(editorInstance, false /* showArrow */);
|
|
28
|
+
this.onSubmitEmitter = new event_1.Emitter();
|
|
29
|
+
this.onCancelEmitter = new event_1.Emitter();
|
|
30
|
+
this.onSubmit = this.onSubmitEmitter.event;
|
|
31
|
+
this.onCancel = this.onCancelEmitter.event;
|
|
32
|
+
this.containerNode.classList.add('ask-ai-input-monaco-zone-widget');
|
|
33
|
+
this.inputWidget = inputWidgetFactory({
|
|
34
|
+
onSubmit: event => this.handleSubmit(event),
|
|
35
|
+
onCancel: () => this.handleCancel()
|
|
36
|
+
});
|
|
37
|
+
this.inputWidget.onDidResize(() => this.adjustZoneHeight());
|
|
38
|
+
this.toDispose.pushAll([
|
|
39
|
+
this.onSubmitEmitter,
|
|
40
|
+
this.onCancelEmitter,
|
|
41
|
+
this.inputWidget,
|
|
42
|
+
]);
|
|
43
|
+
}
|
|
44
|
+
show(options) {
|
|
45
|
+
super.show(options);
|
|
46
|
+
this.renderReactWidget();
|
|
47
|
+
this.registerListeners();
|
|
48
|
+
}
|
|
49
|
+
showAtLine(lineNumber) {
|
|
50
|
+
const options = {
|
|
51
|
+
afterLineNumber: lineNumber,
|
|
52
|
+
heightInLines: 5,
|
|
53
|
+
frameWidth: 1,
|
|
54
|
+
showFrame: true,
|
|
55
|
+
};
|
|
56
|
+
this.show(options);
|
|
57
|
+
}
|
|
58
|
+
renderReactWidget() {
|
|
59
|
+
this.containerNode.append(this.inputWidget.node);
|
|
60
|
+
this.inputWidget.activate();
|
|
61
|
+
this.inputWidget.update();
|
|
62
|
+
}
|
|
63
|
+
adjustZoneHeight() {
|
|
64
|
+
if (!this.viewZone) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const editorLineHeight = this.editor.getOption(monaco.editor.EditorOption.lineHeight);
|
|
68
|
+
const zoneWidgetHeight = this.inputWidget.node.parentElement ? this.inputWidget.node.parentElement.scrollHeight : this.inputWidget.node.scrollHeight;
|
|
69
|
+
const requiredLines = Math.max(5, Math.ceil(zoneWidgetHeight / editorLineHeight));
|
|
70
|
+
if (this.viewZone.heightInLines !== requiredLines) {
|
|
71
|
+
this.layout(requiredLines);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
handleSubmit(request) {
|
|
75
|
+
this.onSubmitEmitter.fire(request);
|
|
76
|
+
this.hide();
|
|
77
|
+
}
|
|
78
|
+
handleCancel() {
|
|
79
|
+
this.onCancelEmitter.fire();
|
|
80
|
+
this.hide();
|
|
81
|
+
}
|
|
82
|
+
registerListeners() {
|
|
83
|
+
this.toHide.push(this.editor.onKeyDown(e => {
|
|
84
|
+
if (e.keyCode === monaco.KeyCode.Escape) {
|
|
85
|
+
this.handleCancel();
|
|
86
|
+
e.preventDefault();
|
|
87
|
+
e.stopPropagation();
|
|
88
|
+
}
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.AskAIInputMonacoZoneWidget = AskAIInputMonacoZoneWidget;
|
|
93
|
+
//# sourceMappingURL=ask-ai-input-monaco-zone-widget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask-ai-input-monaco-zone-widget.js","sourceRoot":"","sources":["../../src/browser/ask-ai-input-monaco-zone-widget.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
export
|
|
5
|
-
|
|
1
|
+
import { ChatRequest } from '@theia/ai-chat';
|
|
2
|
+
import { AIChatInputConfiguration, AIChatInputWidget } from '@theia/ai-chat-ui/lib/browser/chat-input-widget';
|
|
3
|
+
import { URI } from '@theia/core';
|
|
4
|
+
export declare const AskAIInputConfiguration: unique symbol;
|
|
5
|
+
export interface AskAIInputConfiguration extends AIChatInputConfiguration {
|
|
6
6
|
}
|
|
7
|
-
export declare
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
7
|
+
export declare const AskAIInputArgs: unique symbol;
|
|
8
|
+
export interface AskAIInputArgs {
|
|
9
|
+
onSubmit: (request: ChatRequest) => void;
|
|
10
|
+
onCancel: () => void;
|
|
11
|
+
}
|
|
12
|
+
export declare const AskAIInputFactory: unique symbol;
|
|
13
|
+
export type AskAIInputFactory = (args: AskAIInputArgs) => AskAIInputWidget;
|
|
14
|
+
/**
|
|
15
|
+
* React input widget for Ask AI functionality, extending the AIChatInputWidget.
|
|
16
|
+
*/
|
|
17
|
+
export declare class AskAIInputWidget extends AIChatInputWidget {
|
|
18
|
+
static ID: string;
|
|
19
|
+
protected readonly args: AskAIInputArgs | undefined;
|
|
20
|
+
protected readonly configuration: AskAIInputConfiguration | undefined;
|
|
21
|
+
protected readonly resourceId: string;
|
|
22
|
+
protected heightInLines: number;
|
|
23
|
+
protected init(): void;
|
|
24
|
+
protected getResourceUri(): URI;
|
|
25
|
+
protected handleSubmit(query: string): Promise<void>;
|
|
26
|
+
protected handleCancel(): void;
|
|
27
|
+
protected onEscape(): void;
|
|
25
28
|
}
|
|
26
29
|
//# sourceMappingURL=ask-ai-input-widget.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-ai-input-widget.d.ts","sourceRoot":"","sources":["../../src/browser/ask-ai-input-widget.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ask-ai-input-widget.d.ts","sourceRoot":"","sources":["../../src/browser/ask-ai-input-widget.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,WAAW,EAAoB,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAE9G,OAAO,EAAgB,GAAG,EAAE,MAAM,aAAa,CAAC;AAGhD,eAAO,MAAM,uBAAuB,eAAoC,CAAC;AACzE,MAAM,WAAW,uBAAwB,SAAQ,wBAAwB;CAAI;AAE7E,eAAO,MAAM,cAAc,eAA2B,CAAC;AACvD,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,eAAO,MAAM,iBAAiB,eAA8B,CAAC;AAC7D,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,gBAAgB,CAAC;AAE3E;;GAEG;AACH,qBACa,gBAAiB,SAAQ,iBAAiB;IACnD,OAAuB,EAAE,SAAyB;IAGlD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,CAAC;IAEpD,mBAC4B,aAAa,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAE/E,SAAS,CAAC,QAAQ,CAAC,UAAU,SAAkB;IAC/C,UAAmB,aAAa,SAAK;cAGlB,IAAI,IAAI,IAAI;cAoBZ,cAAc,IAAI,GAAG;IAIxC,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpD,SAAS,CAAC,YAAY,IAAI,IAAI;cAIX,QAAQ,IAAI,IAAI;CAGtC"}
|