@theia/ai-chat-ui 1.59.0-next.62 → 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-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 +56 -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/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-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 +10 -10
- 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 +87 -61
- package/src/browser/chat-response-renderer/{ai-editor-manager.ts → ai-selection-resolver.ts} +6 -45
- package/src/browser/chat-response-renderer/index.ts +1 -1
- package/src/browser/chat-view-widget.tsx +2 -3
- package/src/browser/style/index.css +15 -3
- 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":"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"}
|
|
@@ -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,13 +131,12 @@ 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({
|
|
@@ -138,12 +145,8 @@ let AIChatInputWidget = AIChatInputWidget_1 = class AIChatInputWidget extends br
|
|
|
138
145
|
});
|
|
139
146
|
event.preventDefault();
|
|
140
147
|
}
|
|
141
|
-
addContext(
|
|
142
|
-
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
this.context.push(variableRequest);
|
|
146
|
-
this.update();
|
|
148
|
+
addContext(variable) {
|
|
149
|
+
this._chatModel.context.addVariables(variable);
|
|
147
150
|
}
|
|
148
151
|
};
|
|
149
152
|
exports.AIChatInputWidget = AIChatInputWidget;
|
|
@@ -178,6 +181,10 @@ tslib_1.__decorate([
|
|
|
178
181
|
(0, inversify_1.inject)(context_variable_picker_1.ContextVariablePicker),
|
|
179
182
|
tslib_1.__metadata("design:type", context_variable_picker_1.ContextVariablePicker)
|
|
180
183
|
], AIChatInputWidget.prototype, "contextVariablePicker", void 0);
|
|
184
|
+
tslib_1.__decorate([
|
|
185
|
+
(0, inversify_1.inject)(change_set_action_service_1.ChangeSetActionService),
|
|
186
|
+
tslib_1.__metadata("design:type", change_set_action_service_1.ChangeSetActionService)
|
|
187
|
+
], AIChatInputWidget.prototype, "changeSetActionService", void 0);
|
|
181
188
|
tslib_1.__decorate([
|
|
182
189
|
(0, inversify_1.postConstruct)(),
|
|
183
190
|
tslib_1.__metadata("design:type", Function),
|
|
@@ -192,7 +199,9 @@ const ChatInput = (props) => {
|
|
|
192
199
|
const onDeleteChangeSetElement = (index) => props.onDeleteChangeSetElement(props.chatModel.id, index);
|
|
193
200
|
const [inProgress, setInProgress] = React.useState(false);
|
|
194
201
|
const [isInputEmpty, setIsInputEmpty] = React.useState(true);
|
|
195
|
-
const [changeSetUI, setChangeSetUI] = React.useState(() => props.chatModel.changeSet
|
|
202
|
+
const [changeSetUI, setChangeSetUI] = React.useState(() => props.chatModel.changeSet
|
|
203
|
+
? buildChangeSetUI(props.chatModel.changeSet, props.labelProvider, props.actionService.getActionsForChangeset(props.chatModel.changeSet), onDeleteChangeSet, onDeleteChangeSetElement)
|
|
204
|
+
: undefined);
|
|
196
205
|
// eslint-disable-next-line no-null/no-null
|
|
197
206
|
const editorContainerRef = React.useRef(null);
|
|
198
207
|
// eslint-disable-next-line no-null/no-null
|
|
@@ -285,15 +294,17 @@ const ChatInput = (props) => {
|
|
|
285
294
|
responseListenerRef.current = event.request.response.onDidChange(() => setInProgress(ai_chat_1.ChatRequestModel.isInProgress(event.request)));
|
|
286
295
|
}
|
|
287
296
|
else if (ai_chat_1.ChatChangeEvent.isChangeSetEvent(event)) {
|
|
288
|
-
if (event.
|
|
289
|
-
setChangeSetUI(buildChangeSetUI(event.changeSet, props.labelProvider, onDeleteChangeSet, onDeleteChangeSetElement));
|
|
290
|
-
}
|
|
291
|
-
else {
|
|
297
|
+
if (event.kind === 'removeChangeSet') {
|
|
292
298
|
setChangeSetUI(undefined);
|
|
293
299
|
}
|
|
300
|
+
else if (event.kind === 'setChangeSet' || 'updateChangeSet') {
|
|
301
|
+
setChangeSetUI(buildChangeSetUI(event.changeSet, props.labelProvider, props.actionService.getActionsForChangeset(event.changeSet), onDeleteChangeSet, onDeleteChangeSetElement));
|
|
302
|
+
}
|
|
294
303
|
}
|
|
295
304
|
});
|
|
296
|
-
setChangeSetUI(props.chatModel.changeSet
|
|
305
|
+
setChangeSetUI(props.chatModel.changeSet
|
|
306
|
+
? buildChangeSetUI(props.chatModel.changeSet, props.labelProvider, props.actionService.getActionsForChangeset(props.chatModel.changeSet), onDeleteChangeSet, onDeleteChangeSetElement)
|
|
307
|
+
: undefined);
|
|
297
308
|
return () => {
|
|
298
309
|
var _a;
|
|
299
310
|
listener === null || listener === void 0 ? void 0 : listener.dispose();
|
|
@@ -301,16 +312,26 @@ const ChatInput = (props) => {
|
|
|
301
312
|
responseListenerRef.current = undefined;
|
|
302
313
|
};
|
|
303
314
|
}, [props.chatModel]);
|
|
304
|
-
|
|
315
|
+
React.useEffect(() => {
|
|
316
|
+
const disposable = props.actionService.onDidChange(() => {
|
|
317
|
+
if (!props.chatModel.changeSet) {
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
const newActions = props.actionService.getActionsForChangeset(props.chatModel.changeSet);
|
|
321
|
+
setChangeSetUI(current => !current ? current : { ...current, actions: newActions });
|
|
322
|
+
});
|
|
323
|
+
return () => disposable.dispose();
|
|
324
|
+
});
|
|
325
|
+
const submit = React.useCallback(function submit(value) {
|
|
305
326
|
if (!value || value.trim().length === 0) {
|
|
306
327
|
return;
|
|
307
328
|
}
|
|
308
329
|
setInProgress(true);
|
|
309
|
-
props.onQuery(value
|
|
330
|
+
props.onQuery(value);
|
|
310
331
|
if (editorRef.current) {
|
|
311
332
|
editorRef.current.document.textEditorModel.setValue('');
|
|
312
333
|
}
|
|
313
|
-
}
|
|
334
|
+
}, [props.context, props.onQuery, editorRef]);
|
|
314
335
|
const onKeyDown = React.useCallback((event) => {
|
|
315
336
|
var _a;
|
|
316
337
|
if (!props.isEnabled) {
|
|
@@ -320,7 +341,7 @@ const ChatInput = (props) => {
|
|
|
320
341
|
event.preventDefault();
|
|
321
342
|
submit(((_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.document.textEditorModel.getValue()) || '');
|
|
322
343
|
}
|
|
323
|
-
}, [props.isEnabled]);
|
|
344
|
+
}, [props.isEnabled, submit]);
|
|
324
345
|
const handleInputFocus = () => {
|
|
325
346
|
hidePlaceholderIfEditorFilled();
|
|
326
347
|
};
|
|
@@ -418,15 +439,14 @@ const noPropagation = (handler) => (e) => {
|
|
|
418
439
|
handler();
|
|
419
440
|
e.stopPropagation();
|
|
420
441
|
};
|
|
421
|
-
const buildChangeSetUI = (changeSet, labelProvider, onDeleteChangeSet, onDeleteChangeSetElement) => ({
|
|
442
|
+
const buildChangeSetUI = (changeSet, labelProvider, actions, onDeleteChangeSet, onDeleteChangeSetElement) => ({
|
|
422
443
|
title: changeSet.title,
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
delete: () => onDeleteChangeSet(),
|
|
444
|
+
changeSet,
|
|
445
|
+
deleteChangeSet: onDeleteChangeSet,
|
|
426
446
|
elements: changeSet.getElements().map(element => {
|
|
427
447
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
428
448
|
return ({
|
|
429
|
-
open: (_a = element
|
|
449
|
+
open: (_a = element.open) === null || _a === void 0 ? void 0 : _a.bind(element),
|
|
430
450
|
iconClass: (_c = (_b = element.icon) !== null && _b !== void 0 ? _b : labelProvider.getIcon(element.uri)) !== null && _c !== void 0 ? _c : labelProvider.fileIcon,
|
|
431
451
|
nameClass: `${element.type} ${element.state}`,
|
|
432
452
|
name: (_d = element.name) !== null && _d !== void 0 ? _d : labelProvider.getName(element.uri),
|
|
@@ -436,16 +456,18 @@ const buildChangeSetUI = (changeSet, labelProvider, onDeleteChangeSet, onDeleteC
|
|
|
436
456
|
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
457
|
delete: () => onDeleteChangeSetElement(changeSet.getElements().indexOf(element))
|
|
438
458
|
});
|
|
439
|
-
})
|
|
459
|
+
}),
|
|
460
|
+
actions
|
|
440
461
|
});
|
|
441
|
-
|
|
462
|
+
/** Memo because the parent element rerenders on every key press in the chat widget. */
|
|
463
|
+
const ChangeSetBox = React.memo(({ changeSet: { changeSet, title, deleteChangeSet, elements, actions } }) => (React.createElement("div", { className: 'theia-ChatInput-ChangeSet-Box' },
|
|
442
464
|
React.createElement("div", { className: 'theia-ChatInput-ChangeSet-Header' },
|
|
443
|
-
React.createElement("h3", null,
|
|
465
|
+
React.createElement("h3", null, title),
|
|
444
466
|
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: () =>
|
|
467
|
+
actions.map(action => React.createElement("div", { key: action.id, className: 'theia-changeSet-Action' }, action.render(changeSet))),
|
|
468
|
+
React.createElement("span", { className: 'codicon codicon-close action', title: core_1.nls.localize('theia/ai/chat-ui/deleteChangeSet', 'Delete Change Set'), onClick: () => deleteChangeSet() }))),
|
|
447
469
|
React.createElement("div", { className: 'theia-ChatInput-ChangeSet-List' },
|
|
448
|
-
React.createElement("ul", null,
|
|
470
|
+
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
471
|
React.createElement("div", { className: `theia-ChatInput-ChangeSet-Icon ${element.iconClass}` }),
|
|
450
472
|
React.createElement("span", { className: 'theia-ChatInput-ChangeSet-labelParts' },
|
|
451
473
|
React.createElement("span", { className: `theia-ChatInput-ChangeSet-title ${element.nameClass}` }, element.name),
|
|
@@ -454,7 +476,7 @@ const ChangeSetBox = ({ changeSet }) => (React.createElement("div", { className:
|
|
|
454
476
|
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
477
|
element.revert && (React.createElement("span", { className: 'codicon codicon-discard action', title: core_1.nls.localizeByDefault('Revert'), onClick: noPropagation(() => element.revert()) })),
|
|
456
478
|
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()) })))))))));
|
|
479
|
+
React.createElement("span", { className: 'codicon codicon-close action', title: core_1.nls.localizeByDefault('Delete'), onClick: noPropagation(() => element.delete()) }))))))))));
|
|
458
480
|
const ChatInputOptions = ({ leftOptions, rightOptions }) => (React.createElement("div", { className: "theia-ChatInputOptions" },
|
|
459
481
|
React.createElement("div", { className: "theia-ChatInputOptions-left" }, leftOptions.map((option, index) => {
|
|
460
482
|
var _a, _b;
|
|
@@ -468,15 +490,6 @@ const ChatInputOptions = ({ leftOptions, rightOptions }) => (React.createElement
|
|
|
468
490
|
React.createElement("span", null, (_b = option.text) === null || _b === void 0 ? void 0 : _b.content),
|
|
469
491
|
React.createElement("span", { className: `codicon ${option.className}` })));
|
|
470
492
|
}))));
|
|
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
493
|
function getLatestRequest(chatModel) {
|
|
481
494
|
const requests = chatModel.getRequests();
|
|
482
495
|
return requests.length > 0 ? requests[requests.length - 1] : undefined;
|