@theia/ai-chat-ui 1.55.1 → 1.57.0-next.112
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/README.md +2 -1
- package/lib/browser/ai-chat-ui-contribution.js +1 -1
- package/lib/browser/ai-chat-ui-contribution.js.map +1 -1
- package/lib/browser/ai-chat-ui-frontend-module.d.ts.map +1 -1
- package/lib/browser/ai-chat-ui-frontend-module.js +11 -1
- package/lib/browser/ai-chat-ui-frontend-module.js.map +1 -1
- package/lib/browser/chat-input-widget.d.ts +18 -5
- package/lib/browser/chat-input-widget.d.ts.map +1 -1
- package/lib/browser/chat-input-widget.js +239 -79
- package/lib/browser/chat-input-widget.js.map +1 -1
- package/lib/browser/chat-response-renderer/code-part-renderer.d.ts +30 -2
- package/lib/browser/chat-response-renderer/code-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/code-part-renderer.js +45 -10
- package/lib/browser/chat-response-renderer/code-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/markdown-part-renderer.d.ts +10 -4
- package/lib/browser/chat-response-renderer/markdown-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/markdown-part-renderer.js +41 -11
- package/lib/browser/chat-response-renderer/markdown-part-renderer.js.map +1 -1
- package/lib/browser/chat-response-renderer/question-part-renderer.d.ts +10 -0
- package/lib/browser/chat-response-renderer/question-part-renderer.d.ts.map +1 -0
- package/lib/browser/chat-response-renderer/question-part-renderer.js +43 -0
- package/lib/browser/chat-response-renderer/question-part-renderer.js.map +1 -0
- package/lib/browser/chat-response-renderer/toolcall-part-renderer.d.ts +2 -0
- package/lib/browser/chat-response-renderer/toolcall-part-renderer.d.ts.map +1 -1
- package/lib/browser/chat-response-renderer/toolcall-part-renderer.js +38 -12
- package/lib/browser/chat-response-renderer/toolcall-part-renderer.js.map +1 -1
- package/lib/browser/chat-tree-view/chat-view-tree-widget.d.ts +6 -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 +85 -14
- package/lib/browser/chat-tree-view/chat-view-tree-widget.js.map +1 -1
- package/lib/browser/chat-view-language-contribution.d.ts.map +1 -1
- package/lib/browser/chat-view-language-contribution.js +0 -1
- package/lib/browser/chat-view-language-contribution.js.map +1 -1
- package/lib/browser/chat-view-widget.d.ts +4 -1
- package/lib/browser/chat-view-widget.d.ts.map +1 -1
- package/lib/browser/chat-view-widget.js +14 -4
- package/lib/browser/chat-view-widget.js.map +1 -1
- package/package.json +12 -12
- package/src/browser/ai-chat-ui-contribution.ts +1 -1
- package/src/browser/ai-chat-ui-frontend-module.ts +29 -5
- package/src/browser/chat-input-widget.tsx +351 -99
- package/src/browser/chat-response-renderer/code-part-renderer.tsx +48 -9
- package/src/browser/chat-response-renderer/markdown-part-renderer.tsx +42 -13
- package/src/browser/chat-response-renderer/question-part-renderer.tsx +59 -0
- package/src/browser/chat-response-renderer/toolcall-part-renderer.tsx +46 -11
- package/src/browser/chat-tree-view/chat-view-tree-widget.tsx +141 -12
- package/src/browser/chat-view-language-contribution.ts +0 -1
- package/src/browser/chat-view-widget.tsx +19 -6
- package/src/browser/style/index.css +243 -22
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { ChatResponseContent, CodeChatResponseContent } from '@theia/ai-chat/lib/common';
|
|
3
|
-
import { UntitledResourceResolver, URI } from '@theia/core';
|
|
3
|
+
import { ContributionProvider, UntitledResourceResolver, URI } from '@theia/core';
|
|
4
4
|
import { ContextMenuRenderer, TreeNode } from '@theia/core/lib/browser';
|
|
5
5
|
import { ClipboardService } from '@theia/core/lib/browser/clipboard-service';
|
|
6
6
|
import * as React from '@theia/core/shared/react';
|
|
@@ -12,13 +12,31 @@ import { MonacoLanguages } from '@theia/monaco/lib/browser/monaco-languages';
|
|
|
12
12
|
import { ChatResponsePartRenderer } from '../chat-response-part-renderer';
|
|
13
13
|
import { ResponseNode } from '../chat-tree-view/chat-view-tree-widget';
|
|
14
14
|
import { IMouseEvent } from '@theia/monaco-editor-core';
|
|
15
|
+
export declare const CodePartRendererAction: unique symbol;
|
|
16
|
+
/**
|
|
17
|
+
* The CodePartRenderer offers to contribute arbitrary React nodes to the rendered code part.
|
|
18
|
+
* Technically anything can be rendered, however it is intended to be used for actions, like
|
|
19
|
+
* "Copy to Clipboard" or "Insert at Cursor".
|
|
20
|
+
*/
|
|
21
|
+
export interface CodePartRendererAction {
|
|
22
|
+
render(response: CodeChatResponseContent, parentNode: ResponseNode): ReactNode;
|
|
23
|
+
/**
|
|
24
|
+
* Determines if the action should be rendered for the given response.
|
|
25
|
+
*/
|
|
26
|
+
canRender?(response: CodeChatResponseContent, parentNode: ResponseNode): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* The priority determines the order in which the actions are rendered.
|
|
29
|
+
* The default priorities are 10 and 20.
|
|
30
|
+
*/
|
|
31
|
+
priority: number;
|
|
32
|
+
}
|
|
15
33
|
export declare class CodePartRenderer implements ChatResponsePartRenderer<CodeChatResponseContent> {
|
|
16
|
-
protected readonly clipboardService: ClipboardService;
|
|
17
34
|
protected readonly editorManager: EditorManager;
|
|
18
35
|
protected readonly untitledResourceResolver: UntitledResourceResolver;
|
|
19
36
|
protected readonly editorProvider: MonacoEditorProvider;
|
|
20
37
|
protected readonly languageService: MonacoLanguages;
|
|
21
38
|
protected readonly contextMenuRenderer: ContextMenuRenderer;
|
|
39
|
+
protected readonly codePartRendererActions: ContributionProvider<CodePartRendererAction>;
|
|
22
40
|
canHandle(response: ChatResponseContent): number;
|
|
23
41
|
render(response: CodeChatResponseContent, parentNode: ResponseNode): ReactNode;
|
|
24
42
|
protected renderTitle(response: CodeChatResponseContent): ReactNode;
|
|
@@ -32,6 +50,16 @@ export declare class CodePartRenderer implements ChatResponsePartRenderer<CodeCh
|
|
|
32
50
|
openFileAtPosition(uri: URI, position: Position): Promise<void>;
|
|
33
51
|
protected handleContextMenuEvent(node: TreeNode | undefined, event: IMouseEvent, code: string): void;
|
|
34
52
|
}
|
|
53
|
+
export declare class CopyToClipboardButtonAction implements CodePartRendererAction {
|
|
54
|
+
protected readonly clipboardService: ClipboardService;
|
|
55
|
+
priority: number;
|
|
56
|
+
render(response: CodeChatResponseContent): ReactNode;
|
|
57
|
+
}
|
|
58
|
+
export declare class InsertCodeAtCursorButtonAction implements CodePartRendererAction {
|
|
59
|
+
protected readonly editorManager: EditorManager;
|
|
60
|
+
priority: number;
|
|
61
|
+
render(response: CodeChatResponseContent): ReactNode;
|
|
62
|
+
}
|
|
35
63
|
/**
|
|
36
64
|
* Renders the given code within a Monaco Editor
|
|
37
65
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-part-renderer.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/code-part-renderer.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"code-part-renderer.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/code-part-renderer.tsx"],"names":[],"mappings":";AAeA,OAAO,EACH,mBAAmB,EACnB,uBAAuB,EAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAE7E,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,mDAAmD,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAgB,MAAM,2BAA2B,CAAC;AAExE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAC;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAsB,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,eAAO,MAAM,sBAAsB,eAAmC,CAAC;AACvE;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACnC,MAAM,CAAC,QAAQ,EAAE,uBAAuB,EAAE,UAAU,EAAE,YAAY,GAAG,SAAS,CAAC;IAC/E;;OAEG;IACH,SAAS,CAAC,CAAC,QAAQ,EAAE,uBAAuB,EAAE,UAAU,EAAE,YAAY,GAAG,OAAO,CAAC;IACjF;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,qBACa,gBACT,YAAW,wBAAwB,CAAC,uBAAuB,CAAC;IAG5D,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAEhD,SAAS,CAAC,QAAQ,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;IAEtE,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,oBAAoB,CAAC;IAExD,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAEpD,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAE5D,SAAS,CAAC,QAAQ,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,sBAAsB,CAAC,CAAC;IAEzF,SAAS,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM;IAOhD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,EAAE,UAAU,EAAE,YAAY,GAAG,SAAS;IA0B9E,SAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,uBAAuB,GAAG,SAAS;IASnE,OAAO,CAAC,QAAQ;IAMhB;;;;;OAKG;IACG,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrE,SAAS,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;CAQvG;AAED,qBACa,2BAA4B,YAAW,sBAAsB;IAEtE,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACtD,QAAQ,SAAM;IACd,MAAM,CAAC,QAAQ,EAAE,uBAAuB,GAAG,SAAS;CAGvD;AAUD,qBACa,8BAA+B,YAAW,sBAAsB;IAEzE,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAChD,QAAQ,SAAM;IACd,MAAM,CAAC,QAAQ,EAAE,uBAAuB,GAAG,SAAS;CAGvD;AAwBD;;GAEG;AACH,eAAO,MAAM,WAAW,UAAW;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wBAAwB,EAAE,wBAAwB,CAAC;IACnD,cAAc,EAAE,oBAAoB,CAAC;IACrC,mBAAmB,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI,CAAA;CAChD,sBA8CA,CAAC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CodeWrapper = exports.InsertCodeAtCursorButtonAction = exports.CopyToClipboardButtonAction = exports.CodePartRenderer = exports.CodePartRendererAction = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
2
5
|
// *****************************************************************************
|
|
3
6
|
// Copyright (C) 2024 EclipseSource GmbH.
|
|
4
7
|
//
|
|
@@ -14,9 +17,6 @@
|
|
|
14
17
|
//
|
|
15
18
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
19
|
// *****************************************************************************
|
|
17
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.CodeWrapper = exports.CodePartRenderer = void 0;
|
|
19
|
-
const tslib_1 = require("tslib");
|
|
20
20
|
const common_1 = require("@theia/ai-chat/lib/common");
|
|
21
21
|
const core_1 = require("@theia/core");
|
|
22
22
|
const browser_1 = require("@theia/core/lib/browser");
|
|
@@ -27,6 +27,7 @@ const browser_2 = require("@theia/editor/lib/browser");
|
|
|
27
27
|
const monaco_editor_provider_1 = require("@theia/monaco/lib/browser/monaco-editor-provider");
|
|
28
28
|
const monaco_languages_1 = require("@theia/monaco/lib/browser/monaco-languages");
|
|
29
29
|
const chat_view_tree_widget_1 = require("../chat-tree-view/chat-view-tree-widget");
|
|
30
|
+
exports.CodePartRendererAction = Symbol('CodePartRendererAction');
|
|
30
31
|
let CodePartRenderer = class CodePartRenderer {
|
|
31
32
|
canHandle(response) {
|
|
32
33
|
if (common_1.CodeChatResponseContent.is(response)) {
|
|
@@ -39,9 +40,10 @@ let CodePartRenderer = class CodePartRenderer {
|
|
|
39
40
|
return (React.createElement("div", { className: "theia-CodePartRenderer-root" },
|
|
40
41
|
React.createElement("div", { className: "theia-CodePartRenderer-top" },
|
|
41
42
|
React.createElement("div", { className: "theia-CodePartRenderer-left" }, this.renderTitle(response)),
|
|
42
|
-
React.createElement("div", { className: "theia-CodePartRenderer-right" },
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
React.createElement("div", { className: "theia-CodePartRenderer-right theia-CodePartRenderer-actions" }, this.codePartRendererActions.getContributions()
|
|
44
|
+
.filter(action => action.canRender ? action.canRender(response, parentNode) : true)
|
|
45
|
+
.sort((a, b) => a.priority - b.priority)
|
|
46
|
+
.map(action => action.render(response, parentNode)))),
|
|
45
47
|
React.createElement("div", { className: "theia-CodePartRenderer-separator" }),
|
|
46
48
|
React.createElement("div", { className: "theia-CodePartRenderer-bottom" },
|
|
47
49
|
React.createElement(exports.CodeWrapper, { content: response.code, language: language, editorProvider: this.editorProvider, untitledResourceResolver: this.untitledResourceResolver, contextMenuCallback: e => this.handleContextMenuEvent(parentNode, e, response.code) }))));
|
|
@@ -86,10 +88,6 @@ let CodePartRenderer = class CodePartRenderer {
|
|
|
86
88
|
}
|
|
87
89
|
};
|
|
88
90
|
exports.CodePartRenderer = CodePartRenderer;
|
|
89
|
-
tslib_1.__decorate([
|
|
90
|
-
(0, inversify_1.inject)(clipboard_service_1.ClipboardService),
|
|
91
|
-
tslib_1.__metadata("design:type", Object)
|
|
92
|
-
], CodePartRenderer.prototype, "clipboardService", void 0);
|
|
93
91
|
tslib_1.__decorate([
|
|
94
92
|
(0, inversify_1.inject)(browser_2.EditorManager),
|
|
95
93
|
tslib_1.__metadata("design:type", browser_2.EditorManager)
|
|
@@ -110,9 +108,30 @@ tslib_1.__decorate([
|
|
|
110
108
|
(0, inversify_1.inject)(browser_1.ContextMenuRenderer),
|
|
111
109
|
tslib_1.__metadata("design:type", browser_1.ContextMenuRenderer)
|
|
112
110
|
], CodePartRenderer.prototype, "contextMenuRenderer", void 0);
|
|
111
|
+
tslib_1.__decorate([
|
|
112
|
+
(0, inversify_1.inject)(core_1.ContributionProvider),
|
|
113
|
+
(0, inversify_1.named)(exports.CodePartRendererAction),
|
|
114
|
+
tslib_1.__metadata("design:type", Object)
|
|
115
|
+
], CodePartRenderer.prototype, "codePartRendererActions", void 0);
|
|
113
116
|
exports.CodePartRenderer = CodePartRenderer = tslib_1.__decorate([
|
|
114
117
|
(0, inversify_1.injectable)()
|
|
115
118
|
], CodePartRenderer);
|
|
119
|
+
let CopyToClipboardButtonAction = class CopyToClipboardButtonAction {
|
|
120
|
+
constructor() {
|
|
121
|
+
this.priority = 10;
|
|
122
|
+
}
|
|
123
|
+
render(response) {
|
|
124
|
+
return React.createElement(CopyToClipboardButton, { key: 'copyToClipBoard', code: response.code, clipboardService: this.clipboardService });
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
exports.CopyToClipboardButtonAction = CopyToClipboardButtonAction;
|
|
128
|
+
tslib_1.__decorate([
|
|
129
|
+
(0, inversify_1.inject)(clipboard_service_1.ClipboardService),
|
|
130
|
+
tslib_1.__metadata("design:type", Object)
|
|
131
|
+
], CopyToClipboardButtonAction.prototype, "clipboardService", void 0);
|
|
132
|
+
exports.CopyToClipboardButtonAction = CopyToClipboardButtonAction = tslib_1.__decorate([
|
|
133
|
+
(0, inversify_1.injectable)()
|
|
134
|
+
], CopyToClipboardButtonAction);
|
|
116
135
|
const CopyToClipboardButton = (props) => {
|
|
117
136
|
const { code, clipboardService } = props;
|
|
118
137
|
const copyCodeToClipboard = React.useCallback(() => {
|
|
@@ -120,6 +139,22 @@ const CopyToClipboardButton = (props) => {
|
|
|
120
139
|
}, [code, clipboardService]);
|
|
121
140
|
return React.createElement("div", { className: 'button codicon codicon-copy', title: 'Copy', role: 'button', onClick: copyCodeToClipboard });
|
|
122
141
|
};
|
|
142
|
+
let InsertCodeAtCursorButtonAction = class InsertCodeAtCursorButtonAction {
|
|
143
|
+
constructor() {
|
|
144
|
+
this.priority = 20;
|
|
145
|
+
}
|
|
146
|
+
render(response) {
|
|
147
|
+
return React.createElement(InsertCodeAtCursorButton, { key: 'insertCodeAtCursor', code: response.code, editorManager: this.editorManager });
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
exports.InsertCodeAtCursorButtonAction = InsertCodeAtCursorButtonAction;
|
|
151
|
+
tslib_1.__decorate([
|
|
152
|
+
(0, inversify_1.inject)(browser_2.EditorManager),
|
|
153
|
+
tslib_1.__metadata("design:type", browser_2.EditorManager)
|
|
154
|
+
], InsertCodeAtCursorButtonAction.prototype, "editorManager", void 0);
|
|
155
|
+
exports.InsertCodeAtCursorButtonAction = InsertCodeAtCursorButtonAction = tslib_1.__decorate([
|
|
156
|
+
(0, inversify_1.injectable)()
|
|
157
|
+
], InsertCodeAtCursorButtonAction);
|
|
123
158
|
const InsertCodeAtCursorButton = (props) => {
|
|
124
159
|
const { code, editorManager } = props;
|
|
125
160
|
const insertCode = React.useCallback(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-part-renderer.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/code-part-renderer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"code-part-renderer.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/code-part-renderer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,9 @@ import { ReactNode } from '@theia/core/shared/react';
|
|
|
5
5
|
import * as React from '@theia/core/shared/react';
|
|
6
6
|
import * as markdownit from '@theia/core/shared/markdown-it';
|
|
7
7
|
import { MarkdownString } from '@theia/core/lib/common/markdown-rendering';
|
|
8
|
+
import { OpenerService } from '@theia/core/lib/browser';
|
|
8
9
|
export declare class MarkdownPartRenderer implements ChatResponsePartRenderer<MarkdownChatResponseContent | InformationalChatResponseContent> {
|
|
10
|
+
protected readonly openerService: OpenerService;
|
|
9
11
|
protected readonly markdownIt: markdownit;
|
|
10
12
|
canHandle(response: ChatResponseContent): number;
|
|
11
13
|
render(response: MarkdownChatResponseContent | InformationalChatResponseContent): ReactNode;
|
|
@@ -13,12 +15,16 @@ export declare class MarkdownPartRenderer implements ChatResponsePartRenderer<Ma
|
|
|
13
15
|
/**
|
|
14
16
|
* This hook uses markdown-it directly to render markdown.
|
|
15
17
|
* The reason to use markdown-it directly is that the MarkdownRenderer is
|
|
16
|
-
*
|
|
17
|
-
* tags from the markdown with empty content.
|
|
18
|
-
*
|
|
18
|
+
* overridden by theia with a monaco version. This monaco version strips all html
|
|
19
|
+
* tags from the markdown with empty content. This leads to unexpected behavior when
|
|
20
|
+
* rendering markdown with html tags.
|
|
21
|
+
*
|
|
22
|
+
* Moreover, we want to intercept link clicks to use the Theia OpenerService instead of the default browser behavior.
|
|
19
23
|
*
|
|
20
24
|
* @param markdown the string to render as markdown
|
|
25
|
+
* @param skipSurroundingParagraph whether to remove a surrounding paragraph element (default: false)
|
|
26
|
+
* @param openerService the service to handle link opening
|
|
21
27
|
* @returns the ref to use in an element to render the markdown
|
|
22
28
|
*/
|
|
23
|
-
export declare const useMarkdownRendering: (markdown: string | MarkdownString) => React.MutableRefObject<HTMLDivElement | null>;
|
|
29
|
+
export declare const useMarkdownRendering: (markdown: string | MarkdownString, openerService: OpenerService, skipSurroundingParagraph?: boolean) => React.MutableRefObject<HTMLDivElement | null>;
|
|
24
30
|
//# sourceMappingURL=markdown-part-renderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-part-renderer.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/markdown-part-renderer.tsx"],"names":[],"mappings":";AAgBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,EACH,mBAAmB,EACnB,gCAAgC,EAChC,2BAA2B,EAC9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,SAAS,EAAqB,MAAM,0BAA0B,CAAC;AACxE,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAClD,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"markdown-part-renderer.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/markdown-part-renderer.tsx"],"names":[],"mappings":";AAgBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,EACH,mBAAmB,EACnB,gCAAgC,EAChC,2BAA2B,EAC9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,SAAS,EAAqB,MAAM,0BAA0B,CAAC;AACxE,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAClD,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAQ,MAAM,yBAAyB,CAAC;AAG9D,qBACa,oBAAqB,YAAW,wBAAwB,CAAC,2BAA2B,GAAG,gCAAgC,CAAC;IAC1G,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACvE,SAAS,CAAC,QAAQ,CAAC,UAAU,aAAgB;IAC7C,SAAS,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM;IAShD,MAAM,CAAC,QAAQ,EAAE,2BAA2B,GAAG,gCAAgC,GAAG,SAAS;CAU9F;AAQD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,oBAAoB,aAAc,MAAM,GAAG,cAAc,iBAAiB,aAAa,6BAA4B,OAAO,kDA0CtI,CAAC"}
|
|
@@ -23,6 +23,8 @@ const react_1 = require("@theia/core/shared/react");
|
|
|
23
23
|
const React = require("@theia/core/shared/react");
|
|
24
24
|
const markdownit = require("@theia/core/shared/markdown-it");
|
|
25
25
|
const DOMPurify = require("@theia/core/shared/dompurify");
|
|
26
|
+
const browser_1 = require("@theia/core/lib/browser");
|
|
27
|
+
const core_1 = require("@theia/core");
|
|
26
28
|
let MarkdownPartRenderer = class MarkdownPartRenderer {
|
|
27
29
|
constructor() {
|
|
28
30
|
this.markdownIt = markdownit();
|
|
@@ -43,44 +45,72 @@ let MarkdownPartRenderer = class MarkdownPartRenderer {
|
|
|
43
45
|
// eslint-disable-next-line no-null/no-null
|
|
44
46
|
return null;
|
|
45
47
|
}
|
|
46
|
-
return React.createElement(MarkdownRender, { response: response });
|
|
48
|
+
return React.createElement(MarkdownRender, { response: response, openerService: this.openerService });
|
|
47
49
|
}
|
|
48
50
|
};
|
|
49
51
|
exports.MarkdownPartRenderer = MarkdownPartRenderer;
|
|
52
|
+
tslib_1.__decorate([
|
|
53
|
+
(0, inversify_1.inject)(browser_1.OpenerService),
|
|
54
|
+
tslib_1.__metadata("design:type", Object)
|
|
55
|
+
], MarkdownPartRenderer.prototype, "openerService", void 0);
|
|
50
56
|
exports.MarkdownPartRenderer = MarkdownPartRenderer = tslib_1.__decorate([
|
|
51
57
|
(0, inversify_1.injectable)()
|
|
52
58
|
], MarkdownPartRenderer);
|
|
53
|
-
const MarkdownRender = ({ response }) => {
|
|
54
|
-
const ref = (0, exports.useMarkdownRendering)(response.content);
|
|
59
|
+
const MarkdownRender = ({ response, openerService }) => {
|
|
60
|
+
const ref = (0, exports.useMarkdownRendering)(response.content, openerService);
|
|
55
61
|
return React.createElement("div", { ref: ref });
|
|
56
62
|
};
|
|
57
63
|
/**
|
|
58
64
|
* This hook uses markdown-it directly to render markdown.
|
|
59
65
|
* The reason to use markdown-it directly is that the MarkdownRenderer is
|
|
60
|
-
*
|
|
61
|
-
* tags from the markdown with empty content.
|
|
62
|
-
*
|
|
66
|
+
* overridden by theia with a monaco version. This monaco version strips all html
|
|
67
|
+
* tags from the markdown with empty content. This leads to unexpected behavior when
|
|
68
|
+
* rendering markdown with html tags.
|
|
69
|
+
*
|
|
70
|
+
* Moreover, we want to intercept link clicks to use the Theia OpenerService instead of the default browser behavior.
|
|
63
71
|
*
|
|
64
72
|
* @param markdown the string to render as markdown
|
|
73
|
+
* @param skipSurroundingParagraph whether to remove a surrounding paragraph element (default: false)
|
|
74
|
+
* @param openerService the service to handle link opening
|
|
65
75
|
* @returns the ref to use in an element to render the markdown
|
|
66
76
|
*/
|
|
67
|
-
const useMarkdownRendering = (markdown) => {
|
|
77
|
+
const useMarkdownRendering = (markdown, openerService, skipSurroundingParagraph = false) => {
|
|
78
|
+
// null is valid in React
|
|
68
79
|
// eslint-disable-next-line no-null/no-null
|
|
69
80
|
const ref = (0, react_1.useRef)(null);
|
|
70
81
|
const markdownString = typeof markdown === 'string' ? markdown : markdown.value;
|
|
71
82
|
(0, react_1.useEffect)(() => {
|
|
72
|
-
var _a, _b;
|
|
83
|
+
var _a, _b, _c;
|
|
73
84
|
const markdownIt = markdownit();
|
|
74
85
|
const host = document.createElement('div');
|
|
75
|
-
|
|
86
|
+
// markdownIt always puts the content in a paragraph element, so we remove it if we don't want that
|
|
87
|
+
const html = skipSurroundingParagraph ? markdownIt.render(markdownString).replace(/^<p>|<\/p>|<p><\/p>$/g, '') : markdownIt.render(markdownString);
|
|
76
88
|
host.innerHTML = DOMPurify.sanitize(html, {
|
|
77
|
-
|
|
89
|
+
// DOMPurify usually strips non http(s) links from hrefs
|
|
90
|
+
// but we want to allow them (see handleClick via OpenerService below)
|
|
91
|
+
ALLOW_UNKNOWN_PROTOCOLS: true
|
|
78
92
|
});
|
|
79
93
|
while ((_a = ref === null || ref === void 0 ? void 0 : ref.current) === null || _a === void 0 ? void 0 : _a.firstChild) {
|
|
80
94
|
ref.current.removeChild(ref.current.firstChild);
|
|
81
95
|
}
|
|
82
96
|
(_b = ref === null || ref === void 0 ? void 0 : ref.current) === null || _b === void 0 ? void 0 : _b.appendChild(host);
|
|
83
|
-
|
|
97
|
+
// intercept link clicks to use the Theia OpenerService instead of the default browser behavior
|
|
98
|
+
const handleClick = (event) => {
|
|
99
|
+
let target = event.target;
|
|
100
|
+
while (target && target.tagName !== 'A') {
|
|
101
|
+
target = target.parentElement;
|
|
102
|
+
}
|
|
103
|
+
if (target && target.tagName === 'A') {
|
|
104
|
+
const href = target.getAttribute('href');
|
|
105
|
+
if (href) {
|
|
106
|
+
(0, browser_1.open)(openerService, new core_1.URI(href));
|
|
107
|
+
event.preventDefault();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
(_c = ref === null || ref === void 0 ? void 0 : ref.current) === null || _c === void 0 ? void 0 : _c.addEventListener('click', handleClick);
|
|
112
|
+
return () => { var _a; return (_a = ref.current) === null || _a === void 0 ? void 0 : _a.removeEventListener('click', handleClick); };
|
|
113
|
+
}, [markdownString, skipSurroundingParagraph, openerService]);
|
|
84
114
|
return ref;
|
|
85
115
|
};
|
|
86
116
|
exports.useMarkdownRendering = useMarkdownRendering;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-part-renderer.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/markdown-part-renderer.tsx"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAGhF,
|
|
1
|
+
{"version":3,"file":"markdown-part-renderer.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/markdown-part-renderer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { ChatResponseContent, QuestionResponseContent } from '@theia/ai-chat';
|
|
3
|
+
import { ReactNode } from '@theia/core/shared/react';
|
|
4
|
+
import { ChatResponsePartRenderer } from '../chat-response-part-renderer';
|
|
5
|
+
import { ResponseNode } from '../chat-tree-view';
|
|
6
|
+
export declare class QuestionPartRenderer implements ChatResponsePartRenderer<QuestionResponseContent> {
|
|
7
|
+
canHandle(response: ChatResponseContent): number;
|
|
8
|
+
render(question: QuestionResponseContent, node: ResponseNode): ReactNode;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=question-part-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"question-part-renderer.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/question-part-renderer.tsx"],"names":[],"mappings":";AAeA,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAG9E,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,qBACa,oBACT,YAAW,wBAAwB,CAAC,uBAAuB,CAAC;IAE5D,SAAS,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM;IAOhD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,EAAE,IAAI,EAAE,YAAY,GAAG,SAAS;CAyB3E"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QuestionPartRenderer = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
// *****************************************************************************
|
|
6
|
+
// Copyright (C) 2024 EclipseSource GmbH.
|
|
7
|
+
//
|
|
8
|
+
// This program and the accompanying materials are made available under the
|
|
9
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
10
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
11
|
+
//
|
|
12
|
+
// This Source Code may also be made available under the following Secondary
|
|
13
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
14
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
15
|
+
// with the GNU Classpath Exception which is available at
|
|
16
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
17
|
+
//
|
|
18
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
19
|
+
// *****************************************************************************
|
|
20
|
+
const ai_chat_1 = require("@theia/ai-chat");
|
|
21
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
22
|
+
const React = require("@theia/core/shared/react");
|
|
23
|
+
let QuestionPartRenderer = class QuestionPartRenderer {
|
|
24
|
+
canHandle(response) {
|
|
25
|
+
if (ai_chat_1.QuestionResponseContent.is(response)) {
|
|
26
|
+
return 10;
|
|
27
|
+
}
|
|
28
|
+
return -1;
|
|
29
|
+
}
|
|
30
|
+
render(question, node) {
|
|
31
|
+
return (React.createElement("div", { className: "theia-QuestionPartRenderer-root" },
|
|
32
|
+
React.createElement("div", { className: "theia-QuestionPartRenderer-question" }, question.question),
|
|
33
|
+
React.createElement("div", { className: "theia-QuestionPartRenderer-options" }, question.options.map((option, index) => (React.createElement("button", { className: `theia-button theia-QuestionPartRenderer-option ${question.selectedOption === option ? 'selected' : ''}`, onClick: () => {
|
|
34
|
+
question.selectedOption = option;
|
|
35
|
+
question.handler(option);
|
|
36
|
+
}, disabled: question.selectedOption !== undefined || !node.response.isWaitingForInput, key: index }, option.text))))));
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
exports.QuestionPartRenderer = QuestionPartRenderer;
|
|
40
|
+
exports.QuestionPartRenderer = QuestionPartRenderer = tslib_1.__decorate([
|
|
41
|
+
(0, inversify_1.injectable)()
|
|
42
|
+
], QuestionPartRenderer);
|
|
43
|
+
//# sourceMappingURL=question-part-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"question-part-renderer.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/question-part-renderer.tsx"],"names":[],"mappings":";;;;AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,4CAA8E;AAC9E,4DAA0D;AAC1D,kDAAkD;AAM3C,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAG7B,SAAS,CAAC,QAA6B;QACnC,IAAI,iCAAuB,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,CAAC;QACd,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;IAED,MAAM,CAAC,QAAiC,EAAE,IAAkB;QACxD,OAAO,CACH,6BAAK,SAAS,EAAC,iCAAiC;YAC5C,6BAAK,SAAS,EAAC,qCAAqC,IAAE,QAAQ,CAAC,QAAQ,CAAO;YAC9E,6BAAK,SAAS,EAAC,oCAAoC,IAE3C,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CACpC,gCACI,SAAS,EAAE,kDAAkD,QAAQ,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EACnH,OAAO,EAAE,GAAG,EAAE;oBACV,QAAQ,CAAC,cAAc,GAAG,MAAM,CAAC;oBACjC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC7B,CAAC,EACD,QAAQ,EAAE,QAAQ,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EACnF,GAAG,EAAE,KAAK,IAET,MAAM,CAAC,IAAI,CACP,CACZ,CAAC,CAEJ,CACJ,CACT,CAAC;IACN,CAAC;CAEJ,CAAA;AAnCY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,sBAAU,GAAE;GACA,oBAAoB,CAmChC"}
|
|
@@ -5,6 +5,8 @@ import { ReactNode } from '@theia/core/shared/react';
|
|
|
5
5
|
export declare class ToolCallPartRenderer implements ChatResponsePartRenderer<ToolCallChatResponseContent> {
|
|
6
6
|
canHandle(response: ChatResponseContent): number;
|
|
7
7
|
render(response: ToolCallChatResponseContent): ReactNode;
|
|
8
|
+
protected renderCollapsibleArguments(args: string | undefined): ReactNode;
|
|
9
|
+
private prettyPrintArgs;
|
|
8
10
|
private tryPrettyPrintJson;
|
|
9
11
|
}
|
|
10
12
|
//# sourceMappingURL=toolcall-part-renderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolcall-part-renderer.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/toolcall-part-renderer.tsx"],"names":[],"mappings":";AAgBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGrD,qBACa,oBAAqB,YAAW,wBAAwB,CAAC,2BAA2B,CAAC;IAE9F,SAAS,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"toolcall-part-renderer.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/toolcall-part-renderer.tsx"],"names":[],"mappings":";AAgBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGrD,qBACa,oBAAqB,YAAW,wBAAwB,CAAC,2BAA2B,CAAC;IAE9F,SAAS,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM;IAOhD,MAAM,CAAC,QAAQ,EAAE,2BAA2B,GAAG,SAAS;IAmBxD,SAAS,CAAC,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAazE,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,kBAAkB;CAiB7B"}
|
|
@@ -28,26 +28,52 @@ let ToolCallPartRenderer = class ToolCallPartRenderer {
|
|
|
28
28
|
return -1;
|
|
29
29
|
}
|
|
30
30
|
render(response) {
|
|
31
|
-
return React.createElement("h4", { className: 'theia-toolCall' }, response.finished ?
|
|
32
|
-
React.createElement("
|
|
33
|
-
|
|
34
|
-
"Ran ",
|
|
35
|
-
response.name),
|
|
36
|
-
React.createElement("pre", null, this.tryPrettyPrintJson(response)))
|
|
37
|
-
: React.createElement("span", null,
|
|
38
|
-
React.createElement(Spinner, null),
|
|
39
|
-
" Running [",
|
|
31
|
+
return (React.createElement("h4", { className: 'theia-toolCall' }, response.finished ? (React.createElement("details", null,
|
|
32
|
+
React.createElement("summary", null,
|
|
33
|
+
"Ran ",
|
|
40
34
|
response.name,
|
|
41
|
-
"
|
|
35
|
+
"(",
|
|
36
|
+
this.renderCollapsibleArguments(response.arguments),
|
|
37
|
+
")"),
|
|
38
|
+
React.createElement("pre", null, this.tryPrettyPrintJson(response)))) : (React.createElement("span", null,
|
|
39
|
+
React.createElement(Spinner, null),
|
|
40
|
+
" Running ",
|
|
41
|
+
response.name,
|
|
42
|
+
"(",
|
|
43
|
+
this.renderCollapsibleArguments(response.arguments),
|
|
44
|
+
")"))));
|
|
45
|
+
}
|
|
46
|
+
renderCollapsibleArguments(args) {
|
|
47
|
+
if (!args || !args.trim() || args.trim() === '{}') {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
return (React.createElement("details", { className: "collapsible-arguments" },
|
|
51
|
+
React.createElement("summary", { className: "collapsible-arguments-summary" }, "..."),
|
|
52
|
+
React.createElement("span", null, this.prettyPrintArgs(args))));
|
|
53
|
+
}
|
|
54
|
+
prettyPrintArgs(args) {
|
|
55
|
+
try {
|
|
56
|
+
return JSON.stringify(JSON.parse(args), undefined, 2);
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
// fall through
|
|
60
|
+
return args;
|
|
61
|
+
}
|
|
42
62
|
}
|
|
43
63
|
tryPrettyPrintJson(response) {
|
|
44
64
|
let responseContent = response.result;
|
|
45
65
|
try {
|
|
46
|
-
if (
|
|
47
|
-
responseContent
|
|
66
|
+
if (responseContent) {
|
|
67
|
+
if (typeof responseContent === 'string') {
|
|
68
|
+
responseContent = JSON.parse(responseContent);
|
|
69
|
+
}
|
|
70
|
+
responseContent = JSON.stringify(responseContent, undefined, 2);
|
|
48
71
|
}
|
|
49
72
|
}
|
|
50
73
|
catch (e) {
|
|
74
|
+
if (typeof responseContent !== 'string') {
|
|
75
|
+
responseContent = `The content could not be converted to string: '${e.message}'. This is the original content: '${responseContent}'.`;
|
|
76
|
+
}
|
|
51
77
|
// fall through
|
|
52
78
|
}
|
|
53
79
|
return responseContent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolcall-part-renderer.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/toolcall-part-renderer.tsx"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAGhF,4DAA0D;AAC1D,sDAA6F;AAE7F,kDAAkD;AAG3C,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAE7B,SAAS,CAAC,QAA6B;QACnC,IAAI,oCAA2B,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3C,OAAO,EAAE,CAAC;QACd,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;
|
|
1
|
+
{"version":3,"file":"toolcall-part-renderer.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/toolcall-part-renderer.tsx"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAGhF,4DAA0D;AAC1D,sDAA6F;AAE7F,kDAAkD;AAG3C,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAE7B,SAAS,CAAC,QAA6B;QACnC,IAAI,oCAA2B,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3C,OAAO,EAAE,CAAC;QACd,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;IAED,MAAM,CAAC,QAAqC;QACxC,OAAO,CACH,4BAAI,SAAS,EAAC,gBAAgB,IACzB,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CACjB;YACI;;gBAAc,QAAQ,CAAC,IAAI;;gBACrB,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAC/C;YACV,iCAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAO,CACxC,CACb,CAAC,CAAC,CAAC,CACA;YACI,oBAAC,OAAO,OAAG;;YAAU,QAAQ,CAAC,IAAI;;YAAG,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,SAAS,CAAC;gBACrF,CACV,CACA,CACR,CAAC;IACN,CAAC;IAES,0BAA0B,CAAC,IAAwB;QACzD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChD,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,OAAO,CACH,iCAAS,SAAS,EAAC,uBAAuB;YACtC,iCAAS,SAAS,EAAC,+BAA+B,UAAc;YAChE,kCAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAQ,CACnC,CACb,CAAC;IACN,CAAC;IAEO,eAAe,CAAC,IAAY;QAChC,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,eAAe;YACf,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,QAAqC;QAC5D,IAAI,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC;YACD,IAAI,eAAe,EAAE,CAAC;gBAClB,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;oBACtC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gBAClD,CAAC;gBACD,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;gBACtC,eAAe,GAAG,kDAAkD,CAAC,CAAC,OAAO,qCAAqC,eAAe,IAAI,CAAC;YAC1I,CAAC;YACD,eAAe;QACnB,CAAC;QACD,OAAO,eAAe,CAAC;IAC3B,CAAC;CACJ,CAAA;AAnEY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,sBAAU,GAAE;GACA,oBAAoB,CAmEhC;AAED,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,CAClB,2BAAG,SAAS,EAAC,uBAAuB,GAAK,CAC5C,CAAC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { ChatAgentService, ChatModel, ChatRequestModel, ChatResponseContent, ChatResponseModel } from '@theia/ai-chat';
|
|
3
3
|
import { ContributionProvider } from '@theia/core';
|
|
4
|
-
import { ContextMenuRenderer, NodeProps, TreeModel, TreeNode, TreeProps, TreeWidget } from '@theia/core/lib/browser';
|
|
4
|
+
import { ContextMenuRenderer, NodeProps, OpenerService, TreeModel, TreeNode, TreeProps, TreeWidget } from '@theia/core/lib/browser';
|
|
5
5
|
import * as React from '@theia/core/shared/react';
|
|
6
6
|
import { ChatNodeToolbarActionContribution } from '../chat-node-toolbar-action-contribution';
|
|
7
7
|
import { ChatResponsePartRenderer } from '../chat-response-part-renderer';
|
|
8
|
+
import { AIVariableService } from '@theia/ai-core';
|
|
8
9
|
export interface RequestNode extends TreeNode {
|
|
9
10
|
request: ChatRequestModel;
|
|
10
11
|
}
|
|
@@ -19,7 +20,10 @@ export declare class ChatViewTreeWidget extends TreeWidget {
|
|
|
19
20
|
protected readonly chatResponsePartRenderers: ContributionProvider<ChatResponsePartRenderer<ChatResponseContent>>;
|
|
20
21
|
protected readonly chatNodeToolbarActionContributions: ContributionProvider<ChatNodeToolbarActionContribution>;
|
|
21
22
|
protected chatAgentService: ChatAgentService;
|
|
23
|
+
protected readonly variableService: AIVariableService;
|
|
22
24
|
private commandRegistry;
|
|
25
|
+
protected readonly openerService: OpenerService;
|
|
26
|
+
private hoverService;
|
|
23
27
|
protected _shouldScrollToEnd: boolean;
|
|
24
28
|
protected isEnabled: boolean;
|
|
25
29
|
set shouldScrollToEnd(shouldScrollToEnd: boolean);
|
|
@@ -42,6 +46,7 @@ export declare class ChatViewTreeWidget extends TreeWidget {
|
|
|
42
46
|
protected renderNode(node: TreeNode, props: NodeProps): React.ReactNode;
|
|
43
47
|
private renderAgent;
|
|
44
48
|
private getAgentLabel;
|
|
49
|
+
private getAgent;
|
|
45
50
|
private getAgentIconClassName;
|
|
46
51
|
private renderDetail;
|
|
47
52
|
private renderChatRequest;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-view-tree-widget.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-tree-view/chat-view-tree-widget.tsx"],"names":[],"mappings":";AAeA,OAAO,
|
|
1
|
+
{"version":3,"file":"chat-view-tree-widget.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-tree-view/chat-view-tree-widget.tsx"],"names":[],"mappings":";AAeA,OAAO,EAEH,gBAAgB,EAChB,SAAS,EAET,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EAGpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAmB,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAIH,mBAAmB,EAInB,SAAS,EACT,aAAa,EACb,SAAS,EACT,QAAQ,EACR,SAAS,EACT,UAAU,EACb,MAAM,yBAAyB,CAAC;AAOjC,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,iCAAiC,EAAE,MAAM,0CAA0C,CAAC;AAC7F,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnD,MAAM,WAAW,WAAY,SAAQ,QAAQ;IACzC,OAAO,EAAE,gBAAgB,CAAA;CAC5B;AACD,eAAO,MAAM,aAAa,SAAU,QAAQ,wBAA2C,CAAC;AAGxF,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC1C,QAAQ,EAAE,iBAAiB,CAAA;CAC9B;AACD,eAAO,MAAM,cAAc,SAAU,QAAQ,yBAA6C,CAAC;AAM3F,qBACa,kBAAmB,SAAQ,UAAU;IAC9C,MAAM,CAAC,QAAQ,CAAC,EAAE,sBAAsB;IACxC,MAAM,CAAC,QAAQ,CAAC,YAAY,WAA8B;IAG1D,SAAS,CAAC,QAAQ,CAAC,yBAAyB,EAAE,oBAAoB,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAGlH,SAAS,CAAC,QAAQ,CAAC,kCAAkC,EAAE,oBAAoB,CAAC,iCAAiC,CAAC,CAAC;IAG/G,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAG7C,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,iBAAiB,CAAC;IAGtD,OAAO,CAAC,eAAe,CAAkB;IAGzC,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IAGhD,OAAO,CAAC,YAAY,CAAe;IAEnC,SAAS,CAAC,kBAAkB,UAAQ;IAEpC,SAAS,CAAC,SAAS,UAAS;IAE5B,IAAI,iBAAiB,CAAC,iBAAiB,EAAE,OAAO,EAG/C;IAED,IAAI,iBAAiB,IAAI,OAAO,CAE/B;gBAGsB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EACN,mBAAmB,EAAE,mBAAmB;cAiBtD,IAAI,IAAI,IAAI;IAOxB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;cAKtB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK,CAAC,SAAS;IAOhE,OAAO,CAAC,qBAAqB;IAiD7B,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,iBAAiB;IAQzB;;;OAGG;IACI,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;cAiB9B,cAAc,IAAI,MAAM,GAAG,SAAS;YAOzC,iBAAiB;cAYZ,UAAU,CACzB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,SAAS,GACjB,KAAK,CAAC,SAAS;IAelB,OAAO,CAAC,WAAW;IAuDnB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,kBAAkB;IA+B1B,OAAO,CAAC,2BAA2B;IAgBnC,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI;CAQtG"}
|