@theia/ai-chat-ui 1.59.0-next.62 → 1.59.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-chat-ui-frontend-module.d.ts +1 -1
- package/lib/browser/ai-chat-ui-frontend-module.d.ts.map +1 -1
- package/lib/browser/ai-chat-ui-frontend-module.js +12 -11
- package/lib/browser/ai-chat-ui-frontend-module.js.map +1 -1
- package/lib/browser/change-set-actions/change-set-accept-action.d.ts +10 -0
- package/lib/browser/change-set-actions/change-set-accept-action.d.ts.map +1 -0
- package/lib/browser/change-set-actions/change-set-accept-action.js +47 -0
- package/lib/browser/change-set-actions/change-set-accept-action.js.map +1 -0
- package/lib/browser/change-set-actions/change-set-action-service.d.ts +31 -0
- package/lib/browser/change-set-actions/change-set-action-service.d.ts.map +1 -0
- package/lib/browser/change-set-actions/change-set-action-service.js +57 -0
- package/lib/browser/change-set-actions/change-set-action-service.js.map +1 -0
- package/lib/browser/chat-input-widget.d.ts +6 -4
- package/lib/browser/chat-input-widget.d.ts.map +1 -1
- package/lib/browser/chat-input-widget.js +57 -43
- package/lib/browser/chat-input-widget.js.map +1 -1
- package/lib/browser/chat-response-renderer/ai-selection-resolver.d.ts +23 -0
- package/lib/browser/chat-response-renderer/ai-selection-resolver.d.ts.map +1 -0
- package/lib/browser/chat-response-renderer/{ai-editor-manager.js → ai-selection-resolver.js} +2 -38
- package/lib/browser/chat-response-renderer/ai-selection-resolver.js.map +1 -0
- package/lib/browser/chat-response-renderer/code-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/code-part-renderer.js +3 -2
- package/lib/browser/chat-response-renderer/code-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/index.d.ts +1 -1
- package/lib/browser/chat-response-renderer/index.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/index.js +1 -1
- package/lib/browser/chat-response-renderer/index.js.map +1 -1
- package/lib/browser/chat-tree-view/chat-view-tree-widget.d.ts.map +1 -1
- package/lib/browser/chat-tree-view/chat-view-tree-widget.js +2 -1
- package/lib/browser/chat-tree-view/chat-view-tree-widget.js.map +1 -1
- package/lib/browser/chat-view-contribution.d.ts.map +1 -1
- package/lib/browser/chat-view-contribution.js +2 -2
- package/lib/browser/chat-view-contribution.js.map +1 -1
- package/lib/browser/chat-view-language-contribution.d.ts +1 -0
- package/lib/browser/chat-view-language-contribution.d.ts.map +1 -1
- package/lib/browser/chat-view-language-contribution.js +19 -9
- package/lib/browser/chat-view-language-contribution.js.map +1 -1
- package/lib/browser/chat-view-widget.d.ts +1 -1
- package/lib/browser/chat-view-widget.d.ts.map +1 -1
- package/lib/browser/chat-view-widget.js +2 -3
- package/lib/browser/chat-view-widget.js.map +1 -1
- package/package.json +11 -11
- package/src/browser/ai-chat-ui-frontend-module.ts +12 -14
- package/src/browser/change-set-actions/change-set-accept-action.tsx +52 -0
- package/src/browser/change-set-actions/change-set-action-service.ts +65 -0
- package/src/browser/chat-input-widget.tsx +88 -61
- package/src/browser/chat-response-renderer/{ai-editor-manager.ts → ai-selection-resolver.ts} +6 -45
- package/src/browser/chat-response-renderer/code-part-renderer.tsx +3 -2
- package/src/browser/chat-response-renderer/index.ts +1 -1
- package/src/browser/chat-tree-view/chat-view-tree-widget.tsx +2 -1
- package/src/browser/chat-view-contribution.ts +2 -2
- package/src/browser/chat-view-language-contribution.ts +22 -10
- package/src/browser/chat-view-widget.tsx +2 -3
- package/src/browser/style/index.css +20 -4
- package/lib/browser/chat-response-renderer/ai-editor-manager.d.ts +0 -36
- package/lib/browser/chat-response-renderer/ai-editor-manager.d.ts.map +0 -1
- package/lib/browser/chat-response-renderer/ai-editor-manager.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ContainerModule } from '@theia/core/shared/inversify';
|
|
2
1
|
import '../../src/browser/style/index.css';
|
|
2
|
+
import { ContainerModule } from '@theia/core/shared/inversify';
|
|
3
3
|
declare const _default: ContainerModule;
|
|
4
4
|
export default _default;
|
|
5
5
|
//# sourceMappingURL=ai-chat-ui-frontend-module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-chat-ui-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/ai-chat-ui-frontend-module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ai-chat-ui-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/ai-chat-ui-frontend-module.ts"],"names":[],"mappings":"AAgBA,OAAO,mCAAmC,CAAC;AAI3C,OAAO,EAAE,eAAe,EAAc,MAAM,8BAA8B,CAAC;;AAiC3E,wBA4DG"}
|
|
@@ -15,19 +15,18 @@
|
|
|
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
|
+
require("../../src/browser/style/index.css");
|
|
18
19
|
const core_1 = require("@theia/core");
|
|
19
20
|
const browser_1 = require("@theia/core/lib/browser");
|
|
20
21
|
const tab_bar_toolbar_1 = require("@theia/core/lib/browser/shell/tab-bar-toolbar");
|
|
21
22
|
const inversify_1 = require("@theia/core/shared/inversify");
|
|
22
|
-
const
|
|
23
|
-
const browser_2 = require("@theia/editor/lib/browser");
|
|
24
|
-
require("../../src/browser/style/index.css");
|
|
23
|
+
const editor_manager_1 = require("@theia/editor/lib/browser/editor-manager");
|
|
25
24
|
const ai_chat_ui_contribution_1 = require("./ai-chat-ui-contribution");
|
|
26
25
|
const chat_input_widget_1 = require("./chat-input-widget");
|
|
27
26
|
const chat_node_toolbar_action_contribution_1 = require("./chat-node-toolbar-action-contribution");
|
|
28
27
|
const chat_response_part_renderer_1 = require("./chat-response-part-renderer");
|
|
29
28
|
const chat_response_renderer_1 = require("./chat-response-renderer");
|
|
30
|
-
const
|
|
29
|
+
const ai_selection_resolver_1 = require("./chat-response-renderer/ai-selection-resolver");
|
|
31
30
|
const question_part_renderer_1 = require("./chat-response-renderer/question-part-renderer");
|
|
32
31
|
const chat_tree_view_1 = require("./chat-tree-view");
|
|
33
32
|
const chat_view_tree_widget_1 = require("./chat-tree-view/chat-view-tree-widget");
|
|
@@ -36,6 +35,8 @@ const chat_view_language_contribution_1 = require("./chat-view-language-contribu
|
|
|
36
35
|
const chat_view_widget_1 = require("./chat-view-widget");
|
|
37
36
|
const chat_view_widget_toolbar_contribution_1 = require("./chat-view-widget-toolbar-contribution");
|
|
38
37
|
const context_variable_picker_1 = require("./context-variable-picker");
|
|
38
|
+
const change_set_action_service_1 = require("./change-set-actions/change-set-action-service");
|
|
39
|
+
const change_set_accept_action_1 = require("./change-set-actions/change-set-accept-action");
|
|
39
40
|
exports.default = new inversify_1.ContainerModule((bind, _unbind, _isBound, rebind) => {
|
|
40
41
|
(0, browser_1.bindViewContribution)(bind, ai_chat_ui_contribution_1.AIChatContribution);
|
|
41
42
|
bind(tab_bar_toolbar_1.TabBarToolbarContribution).toService(ai_chat_ui_contribution_1.AIChatContribution);
|
|
@@ -66,20 +67,20 @@ exports.default = new inversify_1.ContainerModule((bind, _unbind, _isBound, rebi
|
|
|
66
67
|
bind(chat_response_part_renderer_1.ChatResponsePartRenderer).to(question_part_renderer_1.QuestionPartRenderer).inSingletonScope();
|
|
67
68
|
[core_1.CommandContribution, core_1.MenuContribution].forEach(serviceIdentifier => bind(serviceIdentifier).to(chat_view_contribution_1.ChatViewMenuContribution).inSingletonScope());
|
|
68
69
|
(0, core_1.bindContributionProvider)(bind, chat_response_renderer_1.CodePartRendererAction);
|
|
70
|
+
(0, core_1.bindContributionProvider)(bind, change_set_action_service_1.ChangeSetActionRenderer);
|
|
69
71
|
bind(chat_response_renderer_1.CopyToClipboardButtonAction).toSelf().inSingletonScope();
|
|
70
72
|
bind(chat_response_renderer_1.CodePartRendererAction).toService(chat_response_renderer_1.CopyToClipboardButtonAction);
|
|
71
73
|
bind(chat_response_renderer_1.InsertCodeAtCursorButtonAction).toSelf().inSingletonScope();
|
|
72
74
|
bind(chat_response_renderer_1.CodePartRendererAction).toService(chat_response_renderer_1.InsertCodeAtCursorButtonAction);
|
|
73
|
-
bind(
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
(0, core_1.bindContributionProvider)(bind, ai_editor_manager_1.AIEditorSelectionResolver);
|
|
77
|
-
bind(ai_editor_manager_1.AIEditorSelectionResolver).to(ai_editor_manager_1.GitHubSelectionResolver).inSingletonScope();
|
|
78
|
-
bind(ai_editor_manager_1.AIEditorSelectionResolver).to(ai_editor_manager_1.TypeDocSymbolSelectionResolver).inSingletonScope();
|
|
79
|
-
bind(ai_editor_manager_1.AIEditorSelectionResolver).to(ai_editor_manager_1.TextFragmentSelectionResolver).inSingletonScope();
|
|
75
|
+
bind(editor_manager_1.EditorSelectionResolver).to(ai_selection_resolver_1.GitHubSelectionResolver).inSingletonScope();
|
|
76
|
+
bind(editor_manager_1.EditorSelectionResolver).to(ai_selection_resolver_1.TypeDocSymbolSelectionResolver).inSingletonScope();
|
|
77
|
+
bind(editor_manager_1.EditorSelectionResolver).to(ai_selection_resolver_1.TextFragmentSelectionResolver).inSingletonScope();
|
|
80
78
|
bind(chat_view_widget_toolbar_contribution_1.ChatViewWidgetToolbarContribution).toSelf().inSingletonScope();
|
|
81
79
|
bind(tab_bar_toolbar_1.TabBarToolbarContribution).toService(chat_view_widget_toolbar_contribution_1.ChatViewWidgetToolbarContribution);
|
|
82
80
|
bind(browser_1.FrontendApplicationContribution).to(chat_view_language_contribution_1.ChatViewLanguageContribution).inSingletonScope();
|
|
81
|
+
bind(change_set_action_service_1.ChangeSetActionService).toSelf().inSingletonScope();
|
|
82
|
+
bind(change_set_accept_action_1.ChangeSetAcceptAction).toSelf().inSingletonScope();
|
|
83
|
+
bind(change_set_action_service_1.ChangeSetActionRenderer).toService(change_set_accept_action_1.ChangeSetAcceptAction);
|
|
83
84
|
(0, core_1.bindContributionProvider)(bind, chat_node_toolbar_action_contribution_1.ChatNodeToolbarActionContribution);
|
|
84
85
|
});
|
|
85
86
|
function bindChatViewWidget(bind) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-chat-ui-frontend-module.js","sourceRoot":"","sources":["../../src/browser/ai-chat-ui-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,sCAA8F;AAC9F,qDAA+G;AAC/G,mFAA0F;AAC1F,4DAA2E;AAC3E,
|
|
1
|
+
{"version":3,"file":"ai-chat-ui-frontend-module.js","sourceRoot":"","sources":["../../src/browser/ai-chat-ui-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,6CAA2C;AAC3C,sCAA8F;AAC9F,qDAA+G;AAC/G,mFAA0F;AAC1F,4DAA2E;AAC3E,6EAAmF;AACnF,uEAA+D;AAC/D,2DAAkF;AAClF,mGAA4F;AAC5F,+EAAyE;AACzE,qEAUkC;AAClC,0FAIwD;AACxD,4FAAuF;AACvF,qDAA4D;AAC5D,kFAA4E;AAC5E,qEAAoE;AACpE,uFAAiF;AACjF,yDAAoD;AACpD,mGAA4F;AAC5F,uEAAkE;AAClE,8FAAiH;AACjH,4FAAsF;AAEtF,kBAAe,IAAI,2BAAe,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;IACnE,IAAA,8BAAoB,EAAC,IAAI,EAAE,4CAAkB,CAAC,CAAC;IAC/C,IAAI,CAAC,2CAAyB,CAAC,CAAC,SAAS,CAAC,4CAAkB,CAAC,CAAC;IAE9D,IAAA,+BAAwB,EAAC,IAAI,EAAE,sDAAwB,CAAC,CAAC;IAEzD,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEzB,IAAI,CAAC,qCAAiB,CAAC,CAAC,MAAM,EAAE,CAAC;IACjC,IAAI,CAAC,4CAAwB,CAAC,CAAC,eAAe,CAAC;QAC3C,WAAW,EAAE,IAAI;QACjB,eAAe,EAAE,IAAI;KACxB,CAAC,CAAC;IACH,IAAI,CAAC,uBAAa,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACnD,EAAE,EAAE,qCAAiB,CAAC,EAAE;QACxB,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,qCAAiB,CAAC;KACvD,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAEvB,IAAI,CAAC,0CAAkB,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAC1C,IAAA,yCAAwB,EAAC,GAAG,CAAC,SAAS,CAAC,CAC1C,CAAC;IACF,IAAI,CAAC,uBAAa,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACnD,EAAE,EAAE,0CAAkB,CAAC,EAAE;QACzB,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,0CAAkB,CAAC;KACxD,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAEvB,IAAI,CAAC,+CAAqB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAExD,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,qDAA4B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACnF,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,0CAAiB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACxE,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,6CAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC3E,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,yCAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACvE,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,4CAAmB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC1E,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,6CAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC3E,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,0CAAiB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACxE,IAAI,CAAC,sDAAwB,CAAC,CAAC,EAAE,CAAC,6CAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC3E,CAAC,0BAAmB,EAAE,uBAAgB,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAChE,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,iDAAwB,CAAC,CAAC,gBAAgB,EAAE,CAC1E,CAAC;IAEF,IAAA,+BAAwB,EAAC,IAAI,EAAE,+CAAsB,CAAC,CAAC;IACvD,IAAA,+BAAwB,EAAC,IAAI,EAAE,mDAAuB,CAAC,CAAC;IACxD,IAAI,CAAC,oDAA2B,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC9D,IAAI,CAAC,+CAAsB,CAAC,CAAC,SAAS,CAAC,oDAA2B,CAAC,CAAC;IACpE,IAAI,CAAC,uDAA8B,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACjE,IAAI,CAAC,+CAAsB,CAAC,CAAC,SAAS,CAAC,uDAA8B,CAAC,CAAC;IAEvE,IAAI,CAAC,wCAAuB,CAAC,CAAC,EAAE,CAAC,+CAAuB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC7E,IAAI,CAAC,wCAAuB,CAAC,CAAC,EAAE,CAAC,sDAA8B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACpF,IAAI,CAAC,wCAAuB,CAAC,CAAC,EAAE,CAAC,qDAA6B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAEnF,IAAI,CAAC,yEAAiC,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACpE,IAAI,CAAC,2CAAyB,CAAC,CAAC,SAAS,CAAC,yEAAiC,CAAC,CAAC;IAE7E,IAAI,CAAC,yCAA+B,CAAC,CAAC,EAAE,CAAC,8DAA4B,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC1F,IAAI,CAAC,kDAAsB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACzD,IAAI,CAAC,gDAAqB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACxD,IAAI,CAAC,mDAAuB,CAAC,CAAC,SAAS,CAAC,gDAAqB,CAAC,CAAC;IAE/D,IAAA,+BAAwB,EAAC,IAAI,EAAE,yEAAiC,CAAC,CAAC;AACtE,CAAC,CAAC,CAAC;AAEH,SAAS,kBAAkB,CAAC,IAAqB;IAC7C,IAAI,cAA0C,CAAC;IAC/C,IAAI,CAAC,iCAAc,CAAC,CAAC,MAAM,EAAE,CAAC;IAE9B,IAAI,CAAC,uBAAa,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3C,EAAE,EAAE,iCAAc,CAAC,EAAE;QACrB,YAAY,EAAE,GAAG,EAAE;YACf,IAAI,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,UAAU,MAAK,KAAK,EAAE,CAAC;gBACvC,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAiB,iCAAc,CAAC,CAAC;YAC3E,CAAC;YACD,OAAO,cAAc,CAAC;QAC1B,CAAC;KACJ,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import * as React from '@theia/core/shared/react';
|
|
3
|
+
import { ChangeSetActionRenderer } from './change-set-action-service';
|
|
4
|
+
import { ChangeSet } from '@theia/ai-chat';
|
|
5
|
+
export declare class ChangeSetAcceptAction implements ChangeSetActionRenderer {
|
|
6
|
+
readonly id = "change-set-accept-action";
|
|
7
|
+
canRender(changeSet: ChangeSet): boolean;
|
|
8
|
+
render(changeSet: ChangeSet): React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=change-set-accept-action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-set-accept-action.d.ts","sourceRoot":"","sources":["../../../src/browser/change-set-actions/change-set-accept-action.tsx"],"names":[],"mappings":";AAgBA,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AAG7D,qBACa,qBAAsB,YAAW,uBAAuB;IACjE,QAAQ,CAAC,EAAE,8BAA8B;IACzC,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAIxC,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,KAAK,CAAC,SAAS;CAUhD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2025 EclipseSource GmbH and others.
|
|
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.ChangeSetAcceptAction = void 0;
|
|
19
|
+
const tslib_1 = require("tslib");
|
|
20
|
+
const React = require("@theia/core/shared/react");
|
|
21
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
22
|
+
const core_1 = require("@theia/core");
|
|
23
|
+
let ChangeSetAcceptAction = class ChangeSetAcceptAction {
|
|
24
|
+
constructor() {
|
|
25
|
+
this.id = 'change-set-accept-action';
|
|
26
|
+
}
|
|
27
|
+
canRender(changeSet) {
|
|
28
|
+
return changeSet.getElements().length > 0;
|
|
29
|
+
}
|
|
30
|
+
render(changeSet) {
|
|
31
|
+
return React.createElement("button", { className: 'theia-button', disabled: !hasPendingElementsToAccept(changeSet), title: core_1.nls.localize('theia/ai/chat-ui/applyAllTitle', 'Apply all pending changes'), onClick: () => acceptAllPendingElements(changeSet) }, core_1.nls.localize('theia/ai/chat-ui/applyAll', 'Apply All'));
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
exports.ChangeSetAcceptAction = ChangeSetAcceptAction;
|
|
35
|
+
exports.ChangeSetAcceptAction = ChangeSetAcceptAction = tslib_1.__decorate([
|
|
36
|
+
(0, inversify_1.injectable)()
|
|
37
|
+
], ChangeSetAcceptAction);
|
|
38
|
+
function acceptAllPendingElements(changeSet) {
|
|
39
|
+
acceptablePendingElements(changeSet).forEach(e => e.apply());
|
|
40
|
+
}
|
|
41
|
+
function hasPendingElementsToAccept(changeSet) {
|
|
42
|
+
return acceptablePendingElements(changeSet).length > 0;
|
|
43
|
+
}
|
|
44
|
+
function acceptablePendingElements(changeSet) {
|
|
45
|
+
return changeSet.getElements().filter(e => e.apply && (e.state === undefined || e.state === 'pending'));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=change-set-accept-action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-set-accept-action.js","sourceRoot":"","sources":["../../../src/browser/change-set-actions/change-set-accept-action.tsx"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,oDAAoD;AACpD,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,kDAAkD;AAClD,4DAA0D;AAG1D,sCAAkC;AAG3B,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAA3B;QACM,OAAE,GAAG,0BAA0B,CAAC;IAe7C,CAAC;IAdG,SAAS,CAAC,SAAoB;QAC1B,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,SAAoB;QACvB,OAAO,gCACH,SAAS,EAAC,cAAc,EACxB,QAAQ,EAAE,CAAC,0BAA0B,CAAC,SAAS,CAAC,EAChD,KAAK,EAAE,UAAG,CAAC,QAAQ,CAAC,gCAAgC,EAAE,2BAA2B,CAAC,EAClF,OAAO,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,SAAS,CAAC,IAEjD,UAAG,CAAC,QAAQ,CAAC,2BAA2B,EAAE,WAAW,CAAC,CAClD,CAAC;IACd,CAAC;CACJ,CAAA;AAhBY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,sBAAU,GAAE;GACA,qBAAqB,CAgBjC;AAED,SAAS,wBAAwB,CAAC,SAAoB;IAClD,yBAAyB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAM,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,0BAA0B,CAAC,SAAoB;IACpD,OAAO,yBAAyB,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,yBAAyB,CAAC,SAAoB;IACnD,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC;AAC5G,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { ContributionProvider, Event, Emitter } from '@theia/core';
|
|
3
|
+
import { ChangeSet } from '@theia/ai-chat';
|
|
4
|
+
export declare const ChangeSetActionRenderer: unique symbol;
|
|
5
|
+
/**
|
|
6
|
+
* The CodePartRenderer offers to contribute arbitrary React nodes to the rendered code part.
|
|
7
|
+
* Technically anything can be rendered, however it is intended to be used for actions, like
|
|
8
|
+
* "Copy to Clipboard" or "Insert at Cursor".
|
|
9
|
+
*/
|
|
10
|
+
export interface ChangeSetActionRenderer {
|
|
11
|
+
readonly id: string;
|
|
12
|
+
onDidChange?: Event<void>;
|
|
13
|
+
render(changeSet: ChangeSet): React.ReactNode;
|
|
14
|
+
/**
|
|
15
|
+
* Determines if the action should be rendered for the given response.
|
|
16
|
+
*/
|
|
17
|
+
canRender?(changeSet: ChangeSet): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Actions are ordered by descending priority. (Highest on left).
|
|
20
|
+
*/
|
|
21
|
+
readonly priority?: number;
|
|
22
|
+
}
|
|
23
|
+
export declare class ChangeSetActionService {
|
|
24
|
+
protected readonly onDidChangeEmitter: Emitter<void>;
|
|
25
|
+
get onDidChange(): Event<void>;
|
|
26
|
+
protected readonly contributions: ContributionProvider<ChangeSetActionRenderer>;
|
|
27
|
+
protected init(): void;
|
|
28
|
+
getActions(): readonly ChangeSetActionRenderer[];
|
|
29
|
+
getActionsForChangeset(changeSet: ChangeSet): ChangeSetActionRenderer[];
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=change-set-action-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-set-action-service.d.ts","sourceRoot":"","sources":["../../../src/browser/change-set-actions/change-set-action-service.ts"],"names":[],"mappings":";AAgBA,OAAO,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,eAAO,MAAM,uBAAuB,eAAoC,CAAC;AACzE;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAC9C;;OAEG;IACH,SAAS,CAAC,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1C;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,qBACa,sBAAsB;IAC/B,SAAS,CAAC,QAAQ,CAAC,kBAAkB,gBAAuB;IAC5D,IAAI,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,CAE7B;IAGD,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC,uBAAuB,CAAC,CAAC;IAGhF,SAAS,CAAC,IAAI,IAAI,IAAI;IAMtB,UAAU,IAAI,SAAS,uBAAuB,EAAE;IAIhD,sBAAsB,CAAC,SAAS,EAAE,SAAS,GAAG,uBAAuB,EAAE;CAG1E"}
|
|
@@ -0,0 +1,57 @@
|
|
|
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.ChangeSetActionService = exports.ChangeSetActionRenderer = void 0;
|
|
19
|
+
const tslib_1 = require("tslib");
|
|
20
|
+
const core_1 = require("@theia/core");
|
|
21
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
22
|
+
exports.ChangeSetActionRenderer = Symbol('ChangeSetActionRenderer');
|
|
23
|
+
let ChangeSetActionService = class ChangeSetActionService {
|
|
24
|
+
constructor() {
|
|
25
|
+
this.onDidChangeEmitter = new core_1.Emitter();
|
|
26
|
+
}
|
|
27
|
+
get onDidChange() {
|
|
28
|
+
return this.onDidChangeEmitter.event;
|
|
29
|
+
}
|
|
30
|
+
init() {
|
|
31
|
+
const actions = this.contributions.getContributions();
|
|
32
|
+
actions.sort((a, b) => { var _a, _b; return ((_a = b.priority) !== null && _a !== void 0 ? _a : 0) - ((_b = a.priority) !== null && _b !== void 0 ? _b : 0); });
|
|
33
|
+
actions.forEach(contribution => { var _a; return (_a = contribution.onDidChange) === null || _a === void 0 ? void 0 : _a.call(contribution, this.onDidChangeEmitter.fire, this.onDidChangeEmitter); });
|
|
34
|
+
}
|
|
35
|
+
getActions() {
|
|
36
|
+
return this.contributions.getContributions();
|
|
37
|
+
}
|
|
38
|
+
getActionsForChangeset(changeSet) {
|
|
39
|
+
return this.getActions().filter(candidate => !candidate.canRender || candidate.canRender(changeSet));
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
exports.ChangeSetActionService = ChangeSetActionService;
|
|
43
|
+
tslib_1.__decorate([
|
|
44
|
+
(0, inversify_1.inject)(core_1.ContributionProvider),
|
|
45
|
+
(0, inversify_1.named)(exports.ChangeSetActionRenderer),
|
|
46
|
+
tslib_1.__metadata("design:type", Object)
|
|
47
|
+
], ChangeSetActionService.prototype, "contributions", void 0);
|
|
48
|
+
tslib_1.__decorate([
|
|
49
|
+
(0, inversify_1.postConstruct)(),
|
|
50
|
+
tslib_1.__metadata("design:type", Function),
|
|
51
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
52
|
+
tslib_1.__metadata("design:returntype", void 0)
|
|
53
|
+
], ChangeSetActionService.prototype, "init", null);
|
|
54
|
+
exports.ChangeSetActionService = ChangeSetActionService = tslib_1.__decorate([
|
|
55
|
+
(0, inversify_1.injectable)()
|
|
56
|
+
], ChangeSetActionService);
|
|
57
|
+
//# sourceMappingURL=change-set-action-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-set-action-service.js","sourceRoot":"","sources":["../../../src/browser/change-set-actions/change-set-action-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;;;;AAEhF,sCAAmE;AAEnE,4DAAwF;AAE3E,QAAA,uBAAuB,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAqBlE,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAA5B;QACgB,uBAAkB,GAAG,IAAI,cAAO,EAAQ,CAAC;IAsBhE,CAAC;IArBG,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;IACzC,CAAC;IAMS,IAAI;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,eAAC,OAAA,CAAC,MAAA,CAAC,CAAC,QAAQ,mCAAI,CAAC,CAAC,GAAG,CAAC,MAAA,CAAC,CAAC,QAAQ,mCAAI,CAAC,CAAC,CAAA,EAAA,CAAC,CAAC;QAC9D,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,WAAC,OAAA,MAAA,YAAY,CAAC,WAAW,6DAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA,EAAA,CAAC,CAAC;IACvH,CAAC;IAED,UAAU;QACN,OAAO,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;IACjD,CAAC;IAED,sBAAsB,CAAC,SAAoB;QACvC,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IACzG,CAAC;CACJ,CAAA;AAvBY,wDAAsB;AAOZ;IADlB,IAAA,kBAAM,EAAC,2BAAoB,CAAC;IAAE,IAAA,iBAAK,EAAC,+BAAuB,CAAC;;6DACmB;AAGtE;IADT,IAAA,yBAAa,GAAE;;;;kDAKf;iCAdQ,sBAAsB;IADlC,IAAA,sBAAU,GAAE;GACA,sBAAsB,CAuBlC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { ChatAgent, ChatModel, ChatRequestModel } from '@theia/ai-chat';
|
|
3
|
-
import { InMemoryResources } from '@theia/core';
|
|
3
|
+
import { DisposableCollection, InMemoryResources } from '@theia/core';
|
|
4
4
|
import { ContextMenuRenderer, LabelProvider, Message, ReactWidget } from '@theia/core/lib/browser';
|
|
5
5
|
import * as React from '@theia/core/shared/react';
|
|
6
6
|
import { IMouseEvent } from '@theia/monaco-editor-core';
|
|
@@ -9,7 +9,8 @@ import { MonacoEditorProvider } from '@theia/monaco/lib/browser/monaco-editor-pr
|
|
|
9
9
|
import { AIVariableResolutionRequest } from '@theia/ai-core';
|
|
10
10
|
import { FrontendVariableService } from '@theia/ai-core/lib/browser';
|
|
11
11
|
import { ContextVariablePicker } from './context-variable-picker';
|
|
12
|
-
|
|
12
|
+
import { ChangeSetActionService } from './change-set-actions/change-set-action-service';
|
|
13
|
+
type Query = (query: string) => Promise<void>;
|
|
13
14
|
type Unpin = () => void;
|
|
14
15
|
type Cancel = (requestModel: ChatRequestModel) => void;
|
|
15
16
|
type DeleteChangeSet = (requestModel: ChatRequestModel) => void;
|
|
@@ -29,10 +30,10 @@ export declare class AIChatInputWidget extends ReactWidget {
|
|
|
29
30
|
protected readonly variableService: FrontendVariableService;
|
|
30
31
|
protected readonly labelProvider: LabelProvider;
|
|
31
32
|
protected readonly contextVariablePicker: ContextVariablePicker;
|
|
33
|
+
protected readonly changeSetActionService: ChangeSetActionService;
|
|
32
34
|
protected editorRef: MonacoEditor | undefined;
|
|
33
35
|
private editorReady;
|
|
34
36
|
protected isEnabled: boolean;
|
|
35
|
-
protected context: AIVariableResolutionRequest[];
|
|
36
37
|
private _onQuery;
|
|
37
38
|
set onQuery(query: Query);
|
|
38
39
|
private _onUnpin;
|
|
@@ -43,6 +44,7 @@ export declare class AIChatInputWidget extends ReactWidget {
|
|
|
43
44
|
set onDeleteChangeSet(deleteChangeSet: DeleteChangeSet);
|
|
44
45
|
private _onDeleteChangeSetElement;
|
|
45
46
|
set onDeleteChangeSetElement(deleteChangeSetElement: DeleteChangeSetElement);
|
|
47
|
+
protected onDisposeForChatModel: DisposableCollection;
|
|
46
48
|
private _chatModel;
|
|
47
49
|
set chatModel(chatModel: ChatModel);
|
|
48
50
|
private _pinnedAgent;
|
|
@@ -56,7 +58,7 @@ export declare class AIChatInputWidget extends ReactWidget {
|
|
|
56
58
|
protected addContextElement(): void;
|
|
57
59
|
protected deleteContextElement(index: number): void;
|
|
58
60
|
protected handleContextMenu(event: IMouseEvent): void;
|
|
59
|
-
addContext(
|
|
61
|
+
addContext(variable: AIVariableResolutionRequest): void;
|
|
60
62
|
}
|
|
61
63
|
export {};
|
|
62
64
|
//# sourceMappingURL=chat-input-widget.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-input-widget.d.ts","sourceRoot":"","sources":["../../src/browser/chat-input-widget.tsx"],"names":[],"mappings":";AAeA,OAAO,
|
|
1
|
+
{"version":3,"file":"chat-input-widget.d.ts","sourceRoot":"","sources":["../../src/browser/chat-input-widget.tsx"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,7 @@ const monaco_editor_provider_1 = require("@theia/monaco/lib/browser/monaco-edito
|
|
|
28
28
|
const chat_view_language_contribution_1 = require("./chat-view-language-contribution");
|
|
29
29
|
const browser_2 = require("@theia/ai-core/lib/browser");
|
|
30
30
|
const context_variable_picker_1 = require("./context-variable-picker");
|
|
31
|
+
const change_set_action_service_1 = require("./change-set-actions/change-set-action-service");
|
|
31
32
|
exports.AIChatInputConfiguration = Symbol('AIChatInputConfiguration');
|
|
32
33
|
let AIChatInputWidget = AIChatInputWidget_1 = class AIChatInputWidget extends browser_1.ReactWidget {
|
|
33
34
|
constructor() {
|
|
@@ -35,7 +36,7 @@ let AIChatInputWidget = AIChatInputWidget_1 = class AIChatInputWidget extends br
|
|
|
35
36
|
this.editorRef = undefined;
|
|
36
37
|
this.editorReady = new promise_util_1.Deferred();
|
|
37
38
|
this.isEnabled = false;
|
|
38
|
-
this.
|
|
39
|
+
this.onDisposeForChatModel = new core_1.DisposableCollection();
|
|
39
40
|
}
|
|
40
41
|
set onQuery(query) {
|
|
41
42
|
this._onQuery = query;
|
|
@@ -53,6 +54,13 @@ let AIChatInputWidget = AIChatInputWidget_1 = class AIChatInputWidget extends br
|
|
|
53
54
|
this._onDeleteChangeSetElement = deleteChangeSetElement;
|
|
54
55
|
}
|
|
55
56
|
set chatModel(chatModel) {
|
|
57
|
+
this.onDisposeForChatModel.dispose();
|
|
58
|
+
this.onDisposeForChatModel = new core_1.DisposableCollection();
|
|
59
|
+
this.onDisposeForChatModel.push(chatModel.onDidChange(event => {
|
|
60
|
+
if (event.kind === 'addVariable' || event.kind === 'removeVariable') {
|
|
61
|
+
this.update();
|
|
62
|
+
}
|
|
63
|
+
}));
|
|
56
64
|
this._chatModel = chatModel;
|
|
57
65
|
this.update();
|
|
58
66
|
}
|
|
@@ -75,10 +83,10 @@ let AIChatInputWidget = AIChatInputWidget_1 = class AIChatInputWidget extends br
|
|
|
75
83
|
}
|
|
76
84
|
render() {
|
|
77
85
|
var _a, _b;
|
|
78
|
-
return (React.createElement(ChatInput, { onQuery: this._onQuery.bind(this), onUnpin: this._onUnpin.bind(this), onCancel: this._onCancel.bind(this), onDragOver: this.onDragOver.bind(this), onDrop: this.onDrop.bind(this), onDeleteChangeSet: this._onDeleteChangeSet.bind(this), onDeleteChangeSetElement: this._onDeleteChangeSetElement.bind(this), onAddContextElement: this.addContextElement.bind(this), onDeleteContextElement: this.deleteContextElement.bind(this), context: this.context, chatModel: this._chatModel, pinnedAgent: this._pinnedAgent, editorProvider: this.editorProvider, resources: this.resources, contextMenuCallback: this.handleContextMenu.bind(this), isEnabled: this.isEnabled, setEditorRef: editor => {
|
|
86
|
+
return (React.createElement(ChatInput, { onQuery: this._onQuery.bind(this), onUnpin: this._onUnpin.bind(this), onCancel: this._onCancel.bind(this), onDragOver: this.onDragOver.bind(this), onDrop: this.onDrop.bind(this), onDeleteChangeSet: this._onDeleteChangeSet.bind(this), onDeleteChangeSetElement: this._onDeleteChangeSetElement.bind(this), onAddContextElement: this.addContextElement.bind(this), onDeleteContextElement: this.deleteContextElement.bind(this), context: this._chatModel.context.getVariables(), chatModel: this._chatModel, pinnedAgent: this._pinnedAgent, editorProvider: this.editorProvider, resources: this.resources, contextMenuCallback: this.handleContextMenu.bind(this), isEnabled: this.isEnabled, setEditorRef: editor => {
|
|
79
87
|
this.editorRef = editor;
|
|
80
88
|
this.editorReady.resolve();
|
|
81
|
-
}, showContext: (_a = this.configuration) === null || _a === void 0 ? void 0 : _a.showContext, showPinnedAgent: (_b = this.configuration) === null || _b === void 0 ? void 0 : _b.showPinnedAgent, labelProvider: this.labelProvider }));
|
|
89
|
+
}, showContext: (_a = this.configuration) === null || _a === void 0 ? void 0 : _a.showContext, showPinnedAgent: (_b = this.configuration) === null || _b === void 0 ? void 0 : _b.showPinnedAgent, labelProvider: this.labelProvider, actionService: this.changeSetActionService }));
|
|
82
90
|
}
|
|
83
91
|
onDragOver(event) {
|
|
84
92
|
var _a;
|
|
@@ -123,27 +131,23 @@ let AIChatInputWidget = AIChatInputWidget_1 = class AIChatInputWidget extends br
|
|
|
123
131
|
addContextElement() {
|
|
124
132
|
this.contextVariablePicker.pickContextVariable().then(contextElement => {
|
|
125
133
|
if (contextElement) {
|
|
126
|
-
this.
|
|
134
|
+
this._chatModel.context.addVariables(contextElement);
|
|
127
135
|
}
|
|
128
136
|
});
|
|
129
137
|
}
|
|
130
138
|
deleteContextElement(index) {
|
|
131
|
-
this.context.
|
|
132
|
-
this.update();
|
|
139
|
+
this._chatModel.context.deleteVariables(index);
|
|
133
140
|
}
|
|
134
141
|
handleContextMenu(event) {
|
|
135
142
|
this.contextMenuRenderer.render({
|
|
136
143
|
menuPath: AIChatInputWidget_1.CONTEXT_MENU,
|
|
137
144
|
anchor: { x: event.posx, y: event.posy },
|
|
145
|
+
context: event.target
|
|
138
146
|
});
|
|
139
147
|
event.preventDefault();
|
|
140
148
|
}
|
|
141
|
-
addContext(
|
|
142
|
-
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
this.context.push(variableRequest);
|
|
146
|
-
this.update();
|
|
149
|
+
addContext(variable) {
|
|
150
|
+
this._chatModel.context.addVariables(variable);
|
|
147
151
|
}
|
|
148
152
|
};
|
|
149
153
|
exports.AIChatInputWidget = AIChatInputWidget;
|
|
@@ -178,6 +182,10 @@ tslib_1.__decorate([
|
|
|
178
182
|
(0, inversify_1.inject)(context_variable_picker_1.ContextVariablePicker),
|
|
179
183
|
tslib_1.__metadata("design:type", context_variable_picker_1.ContextVariablePicker)
|
|
180
184
|
], AIChatInputWidget.prototype, "contextVariablePicker", void 0);
|
|
185
|
+
tslib_1.__decorate([
|
|
186
|
+
(0, inversify_1.inject)(change_set_action_service_1.ChangeSetActionService),
|
|
187
|
+
tslib_1.__metadata("design:type", change_set_action_service_1.ChangeSetActionService)
|
|
188
|
+
], AIChatInputWidget.prototype, "changeSetActionService", void 0);
|
|
181
189
|
tslib_1.__decorate([
|
|
182
190
|
(0, inversify_1.postConstruct)(),
|
|
183
191
|
tslib_1.__metadata("design:type", Function),
|
|
@@ -192,7 +200,9 @@ const ChatInput = (props) => {
|
|
|
192
200
|
const onDeleteChangeSetElement = (index) => props.onDeleteChangeSetElement(props.chatModel.id, index);
|
|
193
201
|
const [inProgress, setInProgress] = React.useState(false);
|
|
194
202
|
const [isInputEmpty, setIsInputEmpty] = React.useState(true);
|
|
195
|
-
const [changeSetUI, setChangeSetUI] = React.useState(() => props.chatModel.changeSet
|
|
203
|
+
const [changeSetUI, setChangeSetUI] = React.useState(() => props.chatModel.changeSet
|
|
204
|
+
? buildChangeSetUI(props.chatModel.changeSet, props.labelProvider, props.actionService.getActionsForChangeset(props.chatModel.changeSet), onDeleteChangeSet, onDeleteChangeSetElement)
|
|
205
|
+
: undefined);
|
|
196
206
|
// eslint-disable-next-line no-null/no-null
|
|
197
207
|
const editorContainerRef = React.useRef(null);
|
|
198
208
|
// eslint-disable-next-line no-null/no-null
|
|
@@ -285,15 +295,17 @@ const ChatInput = (props) => {
|
|
|
285
295
|
responseListenerRef.current = event.request.response.onDidChange(() => setInProgress(ai_chat_1.ChatRequestModel.isInProgress(event.request)));
|
|
286
296
|
}
|
|
287
297
|
else if (ai_chat_1.ChatChangeEvent.isChangeSetEvent(event)) {
|
|
288
|
-
if (event.
|
|
289
|
-
setChangeSetUI(buildChangeSetUI(event.changeSet, props.labelProvider, onDeleteChangeSet, onDeleteChangeSetElement));
|
|
290
|
-
}
|
|
291
|
-
else {
|
|
298
|
+
if (event.kind === 'removeChangeSet') {
|
|
292
299
|
setChangeSetUI(undefined);
|
|
293
300
|
}
|
|
301
|
+
else if (event.kind === 'setChangeSet' || 'updateChangeSet') {
|
|
302
|
+
setChangeSetUI(buildChangeSetUI(event.changeSet, props.labelProvider, props.actionService.getActionsForChangeset(event.changeSet), onDeleteChangeSet, onDeleteChangeSetElement));
|
|
303
|
+
}
|
|
294
304
|
}
|
|
295
305
|
});
|
|
296
|
-
setChangeSetUI(props.chatModel.changeSet
|
|
306
|
+
setChangeSetUI(props.chatModel.changeSet
|
|
307
|
+
? buildChangeSetUI(props.chatModel.changeSet, props.labelProvider, props.actionService.getActionsForChangeset(props.chatModel.changeSet), onDeleteChangeSet, onDeleteChangeSetElement)
|
|
308
|
+
: undefined);
|
|
297
309
|
return () => {
|
|
298
310
|
var _a;
|
|
299
311
|
listener === null || listener === void 0 ? void 0 : listener.dispose();
|
|
@@ -301,16 +313,26 @@ const ChatInput = (props) => {
|
|
|
301
313
|
responseListenerRef.current = undefined;
|
|
302
314
|
};
|
|
303
315
|
}, [props.chatModel]);
|
|
304
|
-
|
|
316
|
+
React.useEffect(() => {
|
|
317
|
+
const disposable = props.actionService.onDidChange(() => {
|
|
318
|
+
if (!props.chatModel.changeSet) {
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
const newActions = props.actionService.getActionsForChangeset(props.chatModel.changeSet);
|
|
322
|
+
setChangeSetUI(current => !current ? current : { ...current, actions: newActions });
|
|
323
|
+
});
|
|
324
|
+
return () => disposable.dispose();
|
|
325
|
+
});
|
|
326
|
+
const submit = React.useCallback(function submit(value) {
|
|
305
327
|
if (!value || value.trim().length === 0) {
|
|
306
328
|
return;
|
|
307
329
|
}
|
|
308
330
|
setInProgress(true);
|
|
309
|
-
props.onQuery(value
|
|
331
|
+
props.onQuery(value);
|
|
310
332
|
if (editorRef.current) {
|
|
311
333
|
editorRef.current.document.textEditorModel.setValue('');
|
|
312
334
|
}
|
|
313
|
-
}
|
|
335
|
+
}, [props.context, props.onQuery, editorRef]);
|
|
314
336
|
const onKeyDown = React.useCallback((event) => {
|
|
315
337
|
var _a;
|
|
316
338
|
if (!props.isEnabled) {
|
|
@@ -320,7 +342,7 @@ const ChatInput = (props) => {
|
|
|
320
342
|
event.preventDefault();
|
|
321
343
|
submit(((_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.document.textEditorModel.getValue()) || '');
|
|
322
344
|
}
|
|
323
|
-
}, [props.isEnabled]);
|
|
345
|
+
}, [props.isEnabled, submit]);
|
|
324
346
|
const handleInputFocus = () => {
|
|
325
347
|
hidePlaceholderIfEditorFilled();
|
|
326
348
|
};
|
|
@@ -418,15 +440,14 @@ const noPropagation = (handler) => (e) => {
|
|
|
418
440
|
handler();
|
|
419
441
|
e.stopPropagation();
|
|
420
442
|
};
|
|
421
|
-
const buildChangeSetUI = (changeSet, labelProvider, onDeleteChangeSet, onDeleteChangeSetElement) => ({
|
|
443
|
+
const buildChangeSetUI = (changeSet, labelProvider, actions, onDeleteChangeSet, onDeleteChangeSetElement) => ({
|
|
422
444
|
title: changeSet.title,
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
delete: () => onDeleteChangeSet(),
|
|
445
|
+
changeSet,
|
|
446
|
+
deleteChangeSet: onDeleteChangeSet,
|
|
426
447
|
elements: changeSet.getElements().map(element => {
|
|
427
448
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
428
449
|
return ({
|
|
429
|
-
open: (_a = element
|
|
450
|
+
open: (_a = element.open) === null || _a === void 0 ? void 0 : _a.bind(element),
|
|
430
451
|
iconClass: (_c = (_b = element.icon) !== null && _b !== void 0 ? _b : labelProvider.getIcon(element.uri)) !== null && _c !== void 0 ? _c : labelProvider.fileIcon,
|
|
431
452
|
nameClass: `${element.type} ${element.state}`,
|
|
432
453
|
name: (_d = element.name) !== null && _d !== void 0 ? _d : labelProvider.getName(element.uri),
|
|
@@ -436,16 +457,18 @@ const buildChangeSetUI = (changeSet, labelProvider, onDeleteChangeSet, onDeleteC
|
|
|
436
457
|
revert: element.state === 'applied' || element.state === 'stale' ? (_h = element === null || element === void 0 ? void 0 : element.revert) === null || _h === void 0 ? void 0 : _h.bind(element) : undefined,
|
|
437
458
|
delete: () => onDeleteChangeSetElement(changeSet.getElements().indexOf(element))
|
|
438
459
|
});
|
|
439
|
-
})
|
|
460
|
+
}),
|
|
461
|
+
actions
|
|
440
462
|
});
|
|
441
|
-
|
|
463
|
+
/** Memo because the parent element rerenders on every key press in the chat widget. */
|
|
464
|
+
const ChangeSetBox = React.memo(({ changeSet: { changeSet, title, deleteChangeSet, elements, actions } }) => (React.createElement("div", { className: 'theia-ChatInput-ChangeSet-Box' },
|
|
442
465
|
React.createElement("div", { className: 'theia-ChatInput-ChangeSet-Header' },
|
|
443
|
-
React.createElement("h3", null,
|
|
466
|
+
React.createElement("h3", null, title),
|
|
444
467
|
React.createElement("div", { className: 'theia-ChatInput-ChangeSet-Header-Actions' },
|
|
445
|
-
React.createElement("
|
|
446
|
-
React.createElement("span", { className: 'codicon codicon-close action', title: core_1.nls.localize('theia/ai/chat-ui/deleteChangeSet', 'Delete Change Set'), onClick: () =>
|
|
468
|
+
actions.map(action => React.createElement("div", { key: action.id, className: 'theia-changeSet-Action' }, action.render(changeSet))),
|
|
469
|
+
React.createElement("span", { className: 'codicon codicon-close action', title: core_1.nls.localize('theia/ai/chat-ui/deleteChangeSet', 'Delete Change Set'), onClick: () => deleteChangeSet() }))),
|
|
447
470
|
React.createElement("div", { className: 'theia-ChatInput-ChangeSet-List' },
|
|
448
|
-
React.createElement("ul", null,
|
|
471
|
+
React.createElement("ul", null, elements.map((element, index) => (React.createElement("li", { key: index, title: core_1.nls.localize('theia/ai/chat-ui/openDiff', 'Open Diff'), onClick: () => { var _a; return (_a = element.openChange) === null || _a === void 0 ? void 0 : _a.call(element); } },
|
|
449
472
|
React.createElement("div", { className: `theia-ChatInput-ChangeSet-Icon ${element.iconClass}` }),
|
|
450
473
|
React.createElement("span", { className: 'theia-ChatInput-ChangeSet-labelParts' },
|
|
451
474
|
React.createElement("span", { className: `theia-ChatInput-ChangeSet-title ${element.nameClass}` }, element.name),
|
|
@@ -454,7 +477,7 @@ const ChangeSetBox = ({ changeSet }) => (React.createElement("div", { className:
|
|
|
454
477
|
element.open && (React.createElement("span", { className: 'codicon codicon-file action', title: core_1.nls.localize('theia/ai/chat-ui/openOriginalFile', 'Open Original File'), onClick: noPropagation(() => element.open()) })),
|
|
455
478
|
element.revert && (React.createElement("span", { className: 'codicon codicon-discard action', title: core_1.nls.localizeByDefault('Revert'), onClick: noPropagation(() => element.revert()) })),
|
|
456
479
|
element.apply && (React.createElement("span", { className: 'codicon codicon-check action', title: core_1.nls.localizeByDefault('Apply'), onClick: noPropagation(() => element.apply()) })),
|
|
457
|
-
React.createElement("span", { className: 'codicon codicon-close action', title: core_1.nls.localizeByDefault('Delete'), onClick: noPropagation(() => element.delete()) })))))))));
|
|
480
|
+
React.createElement("span", { className: 'codicon codicon-close action', title: core_1.nls.localizeByDefault('Delete'), onClick: noPropagation(() => element.delete()) }))))))))));
|
|
458
481
|
const ChatInputOptions = ({ leftOptions, rightOptions }) => (React.createElement("div", { className: "theia-ChatInputOptions" },
|
|
459
482
|
React.createElement("div", { className: "theia-ChatInputOptions-left" }, leftOptions.map((option, index) => {
|
|
460
483
|
var _a, _b;
|
|
@@ -468,15 +491,6 @@ const ChatInputOptions = ({ leftOptions, rightOptions }) => (React.createElement
|
|
|
468
491
|
React.createElement("span", null, (_b = option.text) === null || _b === void 0 ? void 0 : _b.content),
|
|
469
492
|
React.createElement("span", { className: `codicon ${option.className}` })));
|
|
470
493
|
}))));
|
|
471
|
-
function applyAllPendingElements(changeSet) {
|
|
472
|
-
getPendingElements(changeSet).forEach(e => e.apply());
|
|
473
|
-
}
|
|
474
|
-
function hasPendingElementsToAccept(changeSet) {
|
|
475
|
-
return getPendingElements(changeSet).length > 0;
|
|
476
|
-
}
|
|
477
|
-
function getPendingElements(changeSet) {
|
|
478
|
-
return changeSet.getElements().filter(e => e.apply && (e.state === undefined || e.state === 'pending'));
|
|
479
|
-
}
|
|
480
494
|
function getLatestRequest(chatModel) {
|
|
481
495
|
const requests = chatModel.getRequests();
|
|
482
496
|
return requests.length > 0 ? requests[requests.length - 1] : undefined;
|