@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.
Files changed (40) hide show
  1. package/lib/browser/ai-chat-ui-frontend-module.d.ts +1 -1
  2. package/lib/browser/ai-chat-ui-frontend-module.d.ts.map +1 -1
  3. package/lib/browser/ai-chat-ui-frontend-module.js +12 -11
  4. package/lib/browser/ai-chat-ui-frontend-module.js.map +1 -1
  5. package/lib/browser/change-set-actions/change-set-accept-action.d.ts +10 -0
  6. package/lib/browser/change-set-actions/change-set-accept-action.d.ts.map +1 -0
  7. package/lib/browser/change-set-actions/change-set-accept-action.js +47 -0
  8. package/lib/browser/change-set-actions/change-set-accept-action.js.map +1 -0
  9. package/lib/browser/change-set-actions/change-set-action-service.d.ts +31 -0
  10. package/lib/browser/change-set-actions/change-set-action-service.d.ts.map +1 -0
  11. package/lib/browser/change-set-actions/change-set-action-service.js +57 -0
  12. package/lib/browser/change-set-actions/change-set-action-service.js.map +1 -0
  13. package/lib/browser/chat-input-widget.d.ts +6 -4
  14. package/lib/browser/chat-input-widget.d.ts.map +1 -1
  15. package/lib/browser/chat-input-widget.js +56 -43
  16. package/lib/browser/chat-input-widget.js.map +1 -1
  17. package/lib/browser/chat-response-renderer/ai-selection-resolver.d.ts +23 -0
  18. package/lib/browser/chat-response-renderer/ai-selection-resolver.d.ts.map +1 -0
  19. package/lib/browser/chat-response-renderer/{ai-editor-manager.js → ai-selection-resolver.js} +2 -38
  20. package/lib/browser/chat-response-renderer/ai-selection-resolver.js.map +1 -0
  21. package/lib/browser/chat-response-renderer/index.d.ts +1 -1
  22. package/lib/browser/chat-response-renderer/index.d.ts.map +1 -1
  23. package/lib/browser/chat-response-renderer/index.js +1 -1
  24. package/lib/browser/chat-response-renderer/index.js.map +1 -1
  25. package/lib/browser/chat-view-widget.d.ts +1 -1
  26. package/lib/browser/chat-view-widget.d.ts.map +1 -1
  27. package/lib/browser/chat-view-widget.js +2 -3
  28. package/lib/browser/chat-view-widget.js.map +1 -1
  29. package/package.json +10 -10
  30. package/src/browser/ai-chat-ui-frontend-module.ts +12 -14
  31. package/src/browser/change-set-actions/change-set-accept-action.tsx +52 -0
  32. package/src/browser/change-set-actions/change-set-action-service.ts +65 -0
  33. package/src/browser/chat-input-widget.tsx +87 -61
  34. package/src/browser/chat-response-renderer/{ai-editor-manager.ts → ai-selection-resolver.ts} +6 -45
  35. package/src/browser/chat-response-renderer/index.ts +1 -1
  36. package/src/browser/chat-view-widget.tsx +2 -3
  37. package/src/browser/style/index.css +15 -3
  38. package/lib/browser/chat-response-renderer/ai-editor-manager.d.ts +0 -36
  39. package/lib/browser/chat-response-renderer/ai-editor-manager.d.ts.map +0 -1
  40. 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":"AAmBA,OAAO,EAAE,eAAe,EAAc,MAAM,8BAA8B,CAAC;AAG3E,OAAO,mCAAmC,CAAC;;AAgC3C,wBA6DG"}
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 editor_preview_manager_1 = require("@theia/editor-preview/lib/browser/editor-preview-manager");
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 ai_editor_manager_1 = require("./chat-response-renderer/ai-editor-manager");
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(ai_editor_manager_1.AIEditorManager).toSelf().inSingletonScope();
74
- rebind(browser_2.EditorManager).toService(ai_editor_manager_1.AIEditorManager);
75
- rebind(editor_preview_manager_1.EditorPreviewManager).toService(ai_editor_manager_1.AIEditorManager);
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":"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"}
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
- type Query = (query: string, context?: AIVariableResolutionRequest[]) => Promise<void>;
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(variableRequest: AIVariableResolutionRequest): void;
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":"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"}
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.context = [];
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.addContext(contextElement);
134
+ this._chatModel.context.addVariables(contextElement);
127
135
  }
128
136
  });
129
137
  }
130
138
  deleteContextElement(index) {
131
- this.context.splice(index, 1);
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(variableRequest) {
142
- if (this.context.some(existing => existing.variable.id === variableRequest.variable.id && existing.arg === variableRequest.arg)) {
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 ? buildChangeSetUI(props.chatModel.changeSet, props.labelProvider, onDeleteChangeSet, onDeleteChangeSetElement) : undefined);
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.changeSet) {
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 ? buildChangeSetUI(props.chatModel.changeSet, props.labelProvider, onDeleteChangeSet, onDeleteChangeSetElement) : undefined);
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
- function submit(value) {
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, props.context);
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
- disabled: !hasPendingElementsToAccept(changeSet),
424
- applyAllPendingElements: () => applyAllPendingElements(changeSet),
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 === null || element === void 0 ? void 0 : element.open) === null || _a === void 0 ? void 0 : _a.bind(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
- const ChangeSetBox = ({ changeSet }) => (React.createElement("div", { className: 'theia-ChatInput-ChangeSet-Box' },
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, changeSet.title),
465
+ React.createElement("h3", null, title),
444
466
  React.createElement("div", { className: 'theia-ChatInput-ChangeSet-Header-Actions' },
445
- React.createElement("button", { className: 'theia-button', disabled: changeSet.disabled, title: core_1.nls.localize('theia/ai/chat-ui/applyAllTitle', 'Apply all pending suggestions'), onClick: () => changeSet.applyAllPendingElements() }, core_1.nls.localize('theia/ai/chat-ui/acceptAll', 'Apply All')),
446
- React.createElement("span", { className: 'codicon codicon-close action', title: core_1.nls.localize('theia/ai/chat-ui/deleteChangeSet', 'Delete Change Set'), onClick: () => changeSet.delete() }))),
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, changeSet.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); } },
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;