@theia/ai-chat-ui 1.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +32 -0
  2. package/lib/browser/ai-chat-ui-contribution.d.ts +24 -0
  3. package/lib/browser/ai-chat-ui-contribution.d.ts.map +1 -0
  4. package/lib/browser/ai-chat-ui-contribution.js +161 -0
  5. package/lib/browser/ai-chat-ui-contribution.js.map +1 -0
  6. package/lib/browser/ai-chat-ui-frontend-module.d.ts +5 -0
  7. package/lib/browser/ai-chat-ui-frontend-module.d.ts.map +1 -0
  8. package/lib/browser/ai-chat-ui-frontend-module.js +83 -0
  9. package/lib/browser/ai-chat-ui-frontend-module.js.map +1 -0
  10. package/lib/browser/chat-input-widget.d.ts +32 -0
  11. package/lib/browser/chat-input-widget.d.ts.map +1 -0
  12. package/lib/browser/chat-input-widget.js +205 -0
  13. package/lib/browser/chat-input-widget.js.map +1 -0
  14. package/lib/browser/chat-node-toolbar-action-contribution.d.ts +47 -0
  15. package/lib/browser/chat-node-toolbar-action-contribution.d.ts.map +1 -0
  16. package/lib/browser/chat-node-toolbar-action-contribution.js +25 -0
  17. package/lib/browser/chat-node-toolbar-action-contribution.js.map +1 -0
  18. package/lib/browser/chat-response-part-renderer.d.ts +10 -0
  19. package/lib/browser/chat-response-part-renderer.d.ts.map +1 -0
  20. package/lib/browser/chat-response-part-renderer.js +20 -0
  21. package/lib/browser/chat-response-part-renderer.js.map +1 -0
  22. package/lib/browser/chat-response-renderer/ai-editor-manager.d.ts +36 -0
  23. package/lib/browser/chat-response-renderer/ai-editor-manager.d.ts.map +1 -0
  24. package/lib/browser/chat-response-renderer/ai-editor-manager.js +184 -0
  25. package/lib/browser/chat-response-renderer/ai-editor-manager.js.map +1 -0
  26. package/lib/browser/chat-response-renderer/code-part-renderer.d.ts +45 -0
  27. package/lib/browser/chat-response-renderer/code-part-renderer.d.ts.map +1 -0
  28. package/lib/browser/chat-response-renderer/code-part-renderer.js +186 -0
  29. package/lib/browser/chat-response-renderer/code-part-renderer.js.map +1 -0
  30. package/lib/browser/chat-response-renderer/command-part-renderer.d.ts +12 -0
  31. package/lib/browser/chat-response-renderer/command-part-renderer.d.ts.map +1 -0
  32. package/lib/browser/chat-response-renderer/command-part-renderer.js +70 -0
  33. package/lib/browser/chat-response-renderer/command-part-renderer.js.map +1 -0
  34. package/lib/browser/chat-response-renderer/error-part-renderer.d.ts +9 -0
  35. package/lib/browser/chat-response-renderer/error-part-renderer.d.ts.map +1 -0
  36. package/lib/browser/chat-response-renderer/error-part-renderer.js +40 -0
  37. package/lib/browser/chat-response-renderer/error-part-renderer.js.map +1 -0
  38. package/lib/browser/chat-response-renderer/horizontal-layout-part-renderer.d.ts +12 -0
  39. package/lib/browser/chat-response-renderer/horizontal-layout-part-renderer.d.ts.map +1 -0
  40. package/lib/browser/chat-response-renderer/horizontal-layout-part-renderer.js +54 -0
  41. package/lib/browser/chat-response-renderer/horizontal-layout-part-renderer.js.map +1 -0
  42. package/lib/browser/chat-response-renderer/index.d.ts +9 -0
  43. package/lib/browser/chat-response-renderer/index.d.ts.map +1 -0
  44. package/lib/browser/chat-response-renderer/index.js +27 -0
  45. package/lib/browser/chat-response-renderer/index.js.map +1 -0
  46. package/lib/browser/chat-response-renderer/markdown-part-renderer.d.ts +17 -0
  47. package/lib/browser/chat-response-renderer/markdown-part-renderer.d.ts.map +1 -0
  48. package/lib/browser/chat-response-renderer/markdown-part-renderer.js +70 -0
  49. package/lib/browser/chat-response-renderer/markdown-part-renderer.js.map +1 -0
  50. package/lib/browser/chat-response-renderer/text-part-renderer.d.ts +9 -0
  51. package/lib/browser/chat-response-renderer/text-part-renderer.d.ts.map +1 -0
  52. package/lib/browser/chat-response-renderer/text-part-renderer.js +41 -0
  53. package/lib/browser/chat-response-renderer/text-part-renderer.js.map +1 -0
  54. package/lib/browser/chat-response-renderer/text-part-renderer.spec.d.ts +2 -0
  55. package/lib/browser/chat-response-renderer/text-part-renderer.spec.d.ts.map +1 -0
  56. package/lib/browser/chat-response-renderer/text-part-renderer.spec.js +46 -0
  57. package/lib/browser/chat-response-renderer/text-part-renderer.spec.js.map +1 -0
  58. package/lib/browser/chat-response-renderer/toolcall-part-renderer.d.ts +9 -0
  59. package/lib/browser/chat-response-renderer/toolcall-part-renderer.d.ts.map +1 -0
  60. package/lib/browser/chat-response-renderer/toolcall-part-renderer.js +49 -0
  61. package/lib/browser/chat-response-renderer/toolcall-part-renderer.js.map +1 -0
  62. package/lib/browser/chat-tree-view/chat-view-tree-container.d.ts +4 -0
  63. package/lib/browser/chat-tree-view/chat-view-tree-container.d.ts.map +1 -0
  64. package/lib/browser/chat-tree-view/chat-view-tree-container.js +33 -0
  65. package/lib/browser/chat-tree-view/chat-view-tree-container.js.map +1 -0
  66. package/lib/browser/chat-tree-view/chat-view-tree-widget.d.ts +53 -0
  67. package/lib/browser/chat-tree-view/chat-view-tree-widget.d.ts.map +1 -0
  68. package/lib/browser/chat-tree-view/chat-view-tree-widget.js +324 -0
  69. package/lib/browser/chat-tree-view/chat-view-tree-widget.js.map +1 -0
  70. package/lib/browser/chat-tree-view/index.d.ts +3 -0
  71. package/lib/browser/chat-tree-view/index.d.ts.map +1 -0
  72. package/lib/browser/chat-tree-view/index.js +21 -0
  73. package/lib/browser/chat-tree-view/index.js.map +1 -0
  74. package/lib/browser/chat-view-commands.d.ts +8 -0
  75. package/lib/browser/chat-view-commands.d.ts.map +1 -0
  76. package/lib/browser/chat-view-commands.js +44 -0
  77. package/lib/browser/chat-view-commands.js.map +1 -0
  78. package/lib/browser/chat-view-contribution.d.ts +18 -0
  79. package/lib/browser/chat-view-contribution.d.ts.map +1 -0
  80. package/lib/browser/chat-view-contribution.js +153 -0
  81. package/lib/browser/chat-view-contribution.js.map +1 -0
  82. package/lib/browser/chat-view-language-contribution.d.ts +20 -0
  83. package/lib/browser/chat-view-language-contribution.d.ts.map +1 -0
  84. package/lib/browser/chat-view-language-contribution.js +98 -0
  85. package/lib/browser/chat-view-language-contribution.js.map +1 -0
  86. package/lib/browser/chat-view-widget-toolbar-contribution.d.ts +11 -0
  87. package/lib/browser/chat-view-widget-toolbar-contribution.d.ts.map +1 -0
  88. package/lib/browser/chat-view-widget-toolbar-contribution.js +65 -0
  89. package/lib/browser/chat-view-widget-toolbar-contribution.js.map +1 -0
  90. package/lib/browser/chat-view-widget.d.ts +41 -0
  91. package/lib/browser/chat-view-widget.d.ts.map +1 -0
  92. package/lib/browser/chat-view-widget.js +182 -0
  93. package/lib/browser/chat-view-widget.js.map +1 -0
  94. package/package.json +59 -0
  95. package/src/browser/ai-chat-ui-contribution.ts +171 -0
  96. package/src/browser/ai-chat-ui-frontend-module.ts +101 -0
  97. package/src/browser/chat-input-widget.tsx +247 -0
  98. package/src/browser/chat-node-toolbar-action-contribution.ts +63 -0
  99. package/src/browser/chat-response-part-renderer.ts +25 -0
  100. package/src/browser/chat-response-renderer/ai-editor-manager.ts +183 -0
  101. package/src/browser/chat-response-renderer/code-part-renderer.tsx +208 -0
  102. package/src/browser/chat-response-renderer/command-part-renderer.tsx +60 -0
  103. package/src/browser/chat-response-renderer/error-part-renderer.tsx +35 -0
  104. package/src/browser/chat-response-renderer/horizontal-layout-part-renderer.tsx +59 -0
  105. package/src/browser/chat-response-renderer/index.ts +23 -0
  106. package/src/browser/chat-response-renderer/markdown-part-renderer.tsx +71 -0
  107. package/src/browser/chat-response-renderer/text-part-renderer.spec.ts +50 -0
  108. package/src/browser/chat-response-renderer/text-part-renderer.tsx +35 -0
  109. package/src/browser/chat-response-renderer/toolcall-part-renderer.tsx +49 -0
  110. package/src/browser/chat-tree-view/chat-view-tree-container.ts +32 -0
  111. package/src/browser/chat-tree-view/chat-view-tree-widget.tsx +410 -0
  112. package/src/browser/chat-tree-view/index.ts +18 -0
  113. package/src/browser/chat-view-commands.ts +45 -0
  114. package/src/browser/chat-view-contribution.ts +154 -0
  115. package/src/browser/chat-view-language-contribution.ts +141 -0
  116. package/src/browser/chat-view-widget-toolbar-contribution.tsx +54 -0
  117. package/src/browser/chat-view-widget.tsx +194 -0
  118. package/src/browser/style/index.css +328 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-node-toolbar-action-contribution.d.ts","sourceRoot":"","sources":["../../src/browser/chat-node-toolbar-action-contribution.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,WAAW,qBAAqB;IAClC;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,iCAAiC,eAA8C,CAAC;AAC7F,MAAM,WAAW,iCAAiC;IAC9C;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,GAAG,qBAAqB,EAAE,CAAC;CAChF"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChatNodeToolbarActionContribution = void 0;
4
+ /**
5
+ * Clients implement this interface if they want to contribute to the toolbar of chat nodes.
6
+ *
7
+ * ### Example
8
+ * ```ts
9
+ * bind(ChatNodeToolbarActionContribution).toDynamicValue(context => ({
10
+ * getToolbarActions: (args: RequestNode | ResponseNode) => {
11
+ * if (isResponseNode(args)) {
12
+ * return [{
13
+ * commandId: 'core.about',
14
+ * icon: 'codicon codicon-feedback',
15
+ * tooltip: 'Show about dialog on response nodes'
16
+ * }];
17
+ * } else {
18
+ * return [];
19
+ * }
20
+ * }
21
+ * }));
22
+ * ```
23
+ */
24
+ exports.ChatNodeToolbarActionContribution = Symbol('ChatNodeToolbarActionContribution');
25
+ //# sourceMappingURL=chat-node-toolbar-action-contribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-node-toolbar-action-contribution.js","sourceRoot":"","sources":["../../src/browser/chat-node-toolbar-action-contribution.ts"],"names":[],"mappings":";;;AAoCA;;;;;;;;;;;;;;;;;;;GAmBG;AACU,QAAA,iCAAiC,GAAG,MAAM,CAAC,mCAAmC,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import { ChatResponseContent } from '@theia/ai-chat/lib/common';
3
+ import { ReactNode } from '@theia/core/shared/react';
4
+ import { ResponseNode } from './chat-tree-view/chat-view-tree-widget';
5
+ export declare const ChatResponsePartRenderer: unique symbol;
6
+ export interface ChatResponsePartRenderer<T extends ChatResponseContent> {
7
+ canHandle(response: ChatResponseContent): number;
8
+ render(response: T, parentNode: ResponseNode): ReactNode;
9
+ }
10
+ //# sourceMappingURL=chat-response-part-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-response-part-renderer.d.ts","sourceRoot":"","sources":["../../src/browser/chat-response-part-renderer.ts"],"names":[],"mappings":";AAgBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAEtE,eAAO,MAAM,wBAAwB,eAAqC,CAAC;AAC3E,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,mBAAmB;IACnE,SAAS,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,CAAC;IACjD,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,YAAY,GAAG,SAAS,CAAC;CAC5D"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2024 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.ChatResponsePartRenderer = void 0;
19
+ exports.ChatResponsePartRenderer = Symbol('ChatResponsePartRenderer');
20
+ //# sourceMappingURL=chat-response-part-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-response-part-renderer.js","sourceRoot":"","sources":["../../src/browser/chat-response-part-renderer.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;;;AAMnE,QAAA,wBAAwB,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { ContributionProvider, RecursivePartial, URI } from '@theia/core';
2
+ import { EditorOpenerOptions, EditorWidget, Range } from '@theia/editor/lib/browser';
3
+ import { EditorPreviewManager } from '@theia/editor-preview/lib/browser/editor-preview-manager';
4
+ import { DocumentSymbol } from '@theia/monaco-editor-core/esm/vs/editor/common/languages';
5
+ import { MonacoToProtocolConverter } from '@theia/monaco/lib/browser/monaco-to-protocol-converter';
6
+ /** Regex to match GitHub-style position and range declaration with line (L) and column (C) */
7
+ export declare const LOCATION_REGEX: RegExp;
8
+ export declare const AIEditorSelectionResolver: unique symbol;
9
+ export interface AIEditorSelectionResolver {
10
+ /**
11
+ * The priority of the resolver. A higher value resolver will be called before others.
12
+ */
13
+ priority?: number;
14
+ resolveSelection(widget: EditorWidget, options: EditorOpenerOptions, uri?: URI): Promise<RecursivePartial<Range> | undefined>;
15
+ }
16
+ export declare class GitHubSelectionResolver implements AIEditorSelectionResolver {
17
+ priority: number;
18
+ resolveSelection(widget: EditorWidget, options: EditorOpenerOptions, uri?: URI): Promise<RecursivePartial<Range> | undefined>;
19
+ }
20
+ export declare class TypeDocSymbolSelectionResolver implements AIEditorSelectionResolver {
21
+ priority: number;
22
+ protected readonly m2p: MonacoToProtocolConverter;
23
+ resolveSelection(widget: EditorWidget, options: EditorOpenerOptions, uri?: URI): Promise<RecursivePartial<Range> | undefined>;
24
+ protected findSymbolPath(uri: URI): string[] | undefined;
25
+ protected findSymbolByPath(symbols: DocumentSymbol[], symbolPath: string[]): DocumentSymbol | undefined;
26
+ }
27
+ export declare class TextFragmentSelectionResolver implements AIEditorSelectionResolver {
28
+ resolveSelection(widget: EditorWidget, options: EditorOpenerOptions, uri?: URI): Promise<RecursivePartial<Range> | undefined>;
29
+ protected findFragment(uri: URI): string | undefined;
30
+ }
31
+ export declare class AIEditorManager extends EditorPreviewManager {
32
+ protected readonly resolvers: ContributionProvider<AIEditorSelectionResolver>;
33
+ protected revealSelection(widget: EditorWidget, options?: EditorOpenerOptions, uri?: URI): Promise<void>;
34
+ protected resolveSelection(options: EditorOpenerOptions, widget: EditorWidget, uri: URI | undefined): Promise<RecursivePartial<Range> | undefined>;
35
+ }
36
+ //# sourceMappingURL=ai-editor-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-editor-manager.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/ai-editor-manager.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAqB,oBAAoB,EAAkB,gBAAgB,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAE7G,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAErF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0DAA0D,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,0DAA0D,CAAC;AAK1F,OAAO,EAAE,yBAAyB,EAAE,MAAM,wDAAwD,CAAC;AAEnG,8FAA8F;AAC9F,eAAO,MAAM,cAAc,QAAiD,CAAC;AAE7E,eAAO,MAAM,yBAAyB,eAAsC,CAAC;AAC7E,MAAM,WAAW,yBAAyB;IACtC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,mBAAmB,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAAA;CAChI;AAED,qBACa,uBAAwB,YAAW,yBAAyB;IACrE,QAAQ,SAAO;IAET,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,mBAAmB,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;CAsBtI;AAED,qBACa,8BAA+B,YAAW,yBAAyB;IAC5E,QAAQ,SAAM;IAEqB,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,yBAAyB,CAAC;IAE/E,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,mBAAmB,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IA6BnI,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,SAAS;IAIxD,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,cAAc,GAAG,SAAS;CAe1G;AAED,qBACa,6BAA8B,YAAW,yBAAyB;IACrE,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,mBAAmB,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IAuBnI,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS;CAGvD;AAED,qBACa,eAAgB,SAAQ,oBAAoB;IAErD,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC,yBAAyB,CAAC,CAAC;cAErD,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,mBAAwB,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;cAO3G,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,GAAG,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;CAgB3J"}
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2024 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.AIEditorManager = exports.TextFragmentSelectionResolver = exports.TypeDocSymbolSelectionResolver = exports.GitHubSelectionResolver = exports.AIEditorSelectionResolver = exports.LOCATION_REGEX = 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
+ const editor_preview_manager_1 = require("@theia/editor-preview/lib/browser/editor-preview-manager");
23
+ const languageFeatures_1 = require("@theia/monaco-editor-core/esm/vs/editor/common/services/languageFeatures");
24
+ const standaloneServices_1 = require("@theia/monaco-editor-core/esm/vs/editor/standalone/browser/standaloneServices");
25
+ const monaco_editor_1 = require("@theia/monaco/lib/browser/monaco-editor");
26
+ const monaco_to_protocol_converter_1 = require("@theia/monaco/lib/browser/monaco-to-protocol-converter");
27
+ /** Regex to match GitHub-style position and range declaration with line (L) and column (C) */
28
+ exports.LOCATION_REGEX = /#L(\d+)?(?:C(\d+))?(?:-L(\d+)?(?:C(\d+))?)?$/;
29
+ exports.AIEditorSelectionResolver = Symbol('AIEditorSelectionResolver');
30
+ let GitHubSelectionResolver = class GitHubSelectionResolver {
31
+ constructor() {
32
+ this.priority = 100;
33
+ }
34
+ async resolveSelection(widget, options, uri) {
35
+ if (!uri) {
36
+ return;
37
+ }
38
+ // We allow the GitHub syntax of selecting a range in markdown 'L1', 'L1-L2' 'L1-C1_L2-C2' (starting at line 1 and column 1)
39
+ const match = uri === null || uri === void 0 ? void 0 : uri.toString().match(exports.LOCATION_REGEX);
40
+ if (!match) {
41
+ return;
42
+ }
43
+ // we need to adapt the position information from one-based (in GitHub) to zero-based (in Theia)
44
+ const startLine = match[1] ? parseInt(match[1], 10) - 1 : undefined;
45
+ // if no start column is given, we assume the start of the line
46
+ const startColumn = match[2] ? parseInt(match[2], 10) - 1 : 0;
47
+ const endLine = match[3] ? parseInt(match[3], 10) - 1 : undefined;
48
+ // if no end column is given, we assume the end of the line
49
+ const endColumn = match[4] ? parseInt(match[4], 10) - 1 : endLine ? widget.editor.document.getLineMaxColumn(endLine) : undefined;
50
+ return {
51
+ start: { line: startLine, character: startColumn },
52
+ end: { line: endLine, character: endColumn }
53
+ };
54
+ }
55
+ };
56
+ exports.GitHubSelectionResolver = GitHubSelectionResolver;
57
+ exports.GitHubSelectionResolver = GitHubSelectionResolver = tslib_1.__decorate([
58
+ (0, inversify_1.injectable)()
59
+ ], GitHubSelectionResolver);
60
+ let TypeDocSymbolSelectionResolver = class TypeDocSymbolSelectionResolver {
61
+ constructor() {
62
+ this.priority = 50;
63
+ }
64
+ async resolveSelection(widget, options, uri) {
65
+ if (!uri) {
66
+ return;
67
+ }
68
+ const editor = monaco_editor_1.MonacoEditor.get(widget);
69
+ const monacoEditor = editor === null || editor === void 0 ? void 0 : editor.getControl();
70
+ if (!monacoEditor) {
71
+ return;
72
+ }
73
+ const symbolPath = this.findSymbolPath(uri);
74
+ if (!symbolPath) {
75
+ return;
76
+ }
77
+ const textModel = monacoEditor.getModel();
78
+ if (!textModel) {
79
+ return;
80
+ }
81
+ // try to find the symbol through the document symbol provider
82
+ // support referencing nested symbols by separating a dot path similar to TypeDoc
83
+ for (const provider of standaloneServices_1.StandaloneServices.get(languageFeatures_1.ILanguageFeaturesService).documentSymbolProvider.ordered(textModel)) {
84
+ const symbols = await provider.provideDocumentSymbols(textModel, core_1.CancellationToken.None);
85
+ const match = this.findSymbolByPath(symbols !== null && symbols !== void 0 ? symbols : [], symbolPath);
86
+ if (match) {
87
+ return this.m2p.asRange(match.selectionRange);
88
+ }
89
+ }
90
+ }
91
+ findSymbolPath(uri) {
92
+ return uri.fragment.split('.');
93
+ }
94
+ findSymbolByPath(symbols, symbolPath) {
95
+ if (!symbols || symbolPath.length === 0) {
96
+ return undefined;
97
+ }
98
+ let matchedSymbol = undefined;
99
+ let currentSymbols = symbols;
100
+ for (const part of symbolPath) {
101
+ matchedSymbol = currentSymbols.find(symbol => symbol.name === part);
102
+ if (!matchedSymbol) {
103
+ return undefined;
104
+ }
105
+ currentSymbols = matchedSymbol.children || [];
106
+ }
107
+ return matchedSymbol;
108
+ }
109
+ };
110
+ exports.TypeDocSymbolSelectionResolver = TypeDocSymbolSelectionResolver;
111
+ tslib_1.__decorate([
112
+ (0, inversify_1.inject)(monaco_to_protocol_converter_1.MonacoToProtocolConverter),
113
+ tslib_1.__metadata("design:type", monaco_to_protocol_converter_1.MonacoToProtocolConverter)
114
+ ], TypeDocSymbolSelectionResolver.prototype, "m2p", void 0);
115
+ exports.TypeDocSymbolSelectionResolver = TypeDocSymbolSelectionResolver = tslib_1.__decorate([
116
+ (0, inversify_1.injectable)()
117
+ ], TypeDocSymbolSelectionResolver);
118
+ let TextFragmentSelectionResolver = class TextFragmentSelectionResolver {
119
+ async resolveSelection(widget, options, uri) {
120
+ var _a, _b, _c;
121
+ if (!uri) {
122
+ return;
123
+ }
124
+ const fragment = this.findFragment(uri);
125
+ if (!fragment) {
126
+ return;
127
+ }
128
+ const matches = (_c = (_b = (_a = widget.editor.document).findMatches) === null || _b === void 0 ? void 0 : _b.call(_a, { isRegex: false, matchCase: false, matchWholeWord: false, searchString: fragment })) !== null && _c !== void 0 ? _c : [];
129
+ if (matches.length > 0) {
130
+ return {
131
+ start: {
132
+ line: matches[0].range.start.line - 1,
133
+ character: matches[0].range.start.character - 1
134
+ },
135
+ end: {
136
+ line: matches[0].range.end.line - 1,
137
+ character: matches[0].range.end.character - 1
138
+ }
139
+ };
140
+ }
141
+ }
142
+ findFragment(uri) {
143
+ return uri.fragment;
144
+ }
145
+ };
146
+ exports.TextFragmentSelectionResolver = TextFragmentSelectionResolver;
147
+ exports.TextFragmentSelectionResolver = TextFragmentSelectionResolver = tslib_1.__decorate([
148
+ (0, inversify_1.injectable)()
149
+ ], TextFragmentSelectionResolver);
150
+ let AIEditorManager = class AIEditorManager extends editor_preview_manager_1.EditorPreviewManager {
151
+ async revealSelection(widget, options = {}, uri) {
152
+ if (!options.selection) {
153
+ options.selection = await this.resolveSelection(options, widget, uri);
154
+ }
155
+ super.revealSelection(widget, options, uri);
156
+ }
157
+ async resolveSelection(options, widget, uri) {
158
+ if (!options.selection) {
159
+ const orderedResolvers = core_1.Prioritizeable.prioritizeAllSync(this.resolvers.getContributions(), resolver => { var _a; return (_a = resolver.priority) !== null && _a !== void 0 ? _a : 1; });
160
+ for (const linkResolver of orderedResolvers) {
161
+ try {
162
+ const selection = await linkResolver.value.resolveSelection(widget, options, uri);
163
+ if (selection) {
164
+ return selection;
165
+ }
166
+ }
167
+ catch (error) {
168
+ console.error(error);
169
+ }
170
+ }
171
+ }
172
+ return undefined;
173
+ }
174
+ };
175
+ exports.AIEditorManager = AIEditorManager;
176
+ tslib_1.__decorate([
177
+ (0, inversify_1.inject)(core_1.ContributionProvider),
178
+ (0, inversify_1.named)(exports.AIEditorSelectionResolver),
179
+ tslib_1.__metadata("design:type", Object)
180
+ ], AIEditorManager.prototype, "resolvers", void 0);
181
+ exports.AIEditorManager = AIEditorManager = tslib_1.__decorate([
182
+ (0, inversify_1.injectable)()
183
+ ], AIEditorManager);
184
+ //# sourceMappingURL=ai-editor-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-editor-manager.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/ai-editor-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /// <reference types="react" />
2
+ import { ChatResponseContent, CodeChatResponseContent } from '@theia/ai-chat/lib/common';
3
+ import { UntitledResourceResolver, URI } from '@theia/core';
4
+ import { ContextMenuRenderer, TreeNode } from '@theia/core/lib/browser';
5
+ import { ClipboardService } from '@theia/core/lib/browser/clipboard-service';
6
+ import * as React from '@theia/core/shared/react';
7
+ import { ReactNode } from '@theia/core/shared/react';
8
+ import { Position } from '@theia/core/shared/vscode-languageserver-protocol';
9
+ import { EditorManager } from '@theia/editor/lib/browser';
10
+ import { MonacoEditorProvider } from '@theia/monaco/lib/browser/monaco-editor-provider';
11
+ import { MonacoLanguages } from '@theia/monaco/lib/browser/monaco-languages';
12
+ import { ChatResponsePartRenderer } from '../chat-response-part-renderer';
13
+ import { ResponseNode } from '../chat-tree-view/chat-view-tree-widget';
14
+ import { IMouseEvent } from '@theia/monaco-editor-core';
15
+ export declare class CodePartRenderer implements ChatResponsePartRenderer<CodeChatResponseContent> {
16
+ protected readonly clipboardService: ClipboardService;
17
+ protected readonly editorManager: EditorManager;
18
+ protected readonly untitledResourceResolver: UntitledResourceResolver;
19
+ protected readonly editorProvider: MonacoEditorProvider;
20
+ protected readonly languageService: MonacoLanguages;
21
+ protected readonly contextMenuRenderer: ContextMenuRenderer;
22
+ canHandle(response: ChatResponseContent): number;
23
+ render(response: CodeChatResponseContent, parentNode: ResponseNode): ReactNode;
24
+ protected renderTitle(response: CodeChatResponseContent): ReactNode;
25
+ private getTitle;
26
+ /**
27
+ * Opens a file and moves the cursor to the specified position.
28
+ *
29
+ * @param uri - The URI of the file to open.
30
+ * @param position - The position to move the cursor to, specified as {line, character}.
31
+ */
32
+ openFileAtPosition(uri: URI, position: Position): Promise<void>;
33
+ protected handleContextMenuEvent(node: TreeNode | undefined, event: IMouseEvent, code: string): void;
34
+ }
35
+ /**
36
+ * Renders the given code within a Monaco Editor
37
+ */
38
+ export declare const CodeWrapper: (props: {
39
+ content: string;
40
+ language?: string;
41
+ untitledResourceResolver: UntitledResourceResolver;
42
+ editorProvider: MonacoEditorProvider;
43
+ contextMenuCallback: (e: IMouseEvent) => void;
44
+ }) => React.JSX.Element;
45
+ //# sourceMappingURL=code-part-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-part-renderer.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/code-part-renderer.tsx"],"names":[],"mappings":";AAgBA,OAAO,EACH,mBAAmB,EACnB,uBAAuB,EAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAC5D,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,qBACa,gBACT,YAAW,wBAAwB,CAAC,uBAAuB,CAAC;IAG5D,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAEtD,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,EAAE,mBAAmB,GAAG,MAAM;IAOhD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,EAAE,UAAU,EAAE,YAAY,GAAG,SAAS;IAyB9E,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;AAgCD;;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,sBA0CA,CAAC"}
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2024 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.CodeWrapper = exports.CodePartRenderer = void 0;
19
+ const tslib_1 = require("tslib");
20
+ const common_1 = require("@theia/ai-chat/lib/common");
21
+ const core_1 = require("@theia/core");
22
+ const browser_1 = require("@theia/core/lib/browser");
23
+ const clipboard_service_1 = require("@theia/core/lib/browser/clipboard-service");
24
+ const inversify_1 = require("@theia/core/shared/inversify");
25
+ const React = require("@theia/core/shared/react");
26
+ const browser_2 = require("@theia/editor/lib/browser");
27
+ const monaco_editor_provider_1 = require("@theia/monaco/lib/browser/monaco-editor-provider");
28
+ const monaco_languages_1 = require("@theia/monaco/lib/browser/monaco-languages");
29
+ const chat_view_tree_widget_1 = require("../chat-tree-view/chat-view-tree-widget");
30
+ let CodePartRenderer = class CodePartRenderer {
31
+ canHandle(response) {
32
+ if (common_1.CodeChatResponseContent.is(response)) {
33
+ return 10;
34
+ }
35
+ return -1;
36
+ }
37
+ render(response, parentNode) {
38
+ const language = response.language ? this.languageService.getExtension(response.language) : undefined;
39
+ return (React.createElement("div", { className: "theia-CodePartRenderer-root" },
40
+ React.createElement("div", { className: "theia-CodePartRenderer-top" },
41
+ React.createElement("div", { className: "theia-CodePartRenderer-left" }, this.renderTitle(response)),
42
+ React.createElement("div", { className: "theia-CodePartRenderer-right" },
43
+ React.createElement(CopyToClipboardButton, { code: response.code, clipboardService: this.clipboardService }),
44
+ React.createElement(InsertCodeAtCursorButton, { code: response.code, editorManager: this.editorManager }))),
45
+ React.createElement("div", { className: "theia-CodePartRenderer-separator" }),
46
+ React.createElement("div", { className: "theia-CodePartRenderer-bottom" },
47
+ React.createElement(exports.CodeWrapper, { content: response.code, language: language, editorProvider: this.editorProvider, untitledResourceResolver: this.untitledResourceResolver, contextMenuCallback: e => this.handleContextMenuEvent(parentNode, e, response.code) }))));
48
+ }
49
+ renderTitle(response) {
50
+ var _a, _b, _c, _d;
51
+ const uri = (_a = response.location) === null || _a === void 0 ? void 0 : _a.uri;
52
+ const position = (_b = response.location) === null || _b === void 0 ? void 0 : _b.position;
53
+ if (uri && position) {
54
+ return React.createElement("a", { onClick: this.openFileAtPosition.bind(this, uri, position) }, this.getTitle((_c = response.location) === null || _c === void 0 ? void 0 : _c.uri, response.language));
55
+ }
56
+ return this.getTitle((_d = response.location) === null || _d === void 0 ? void 0 : _d.uri, response.language);
57
+ }
58
+ getTitle(uri, language) {
59
+ var _a, _b, _c;
60
+ // If there is a URI, use the file name as the title. Otherwise, use the language as the title.
61
+ // If there is no language, use a generic fallback title.
62
+ return (_c = (_b = (_a = uri === null || uri === void 0 ? void 0 : uri.path) === null || _a === void 0 ? void 0 : _a.toString().split('/').pop()) !== null && _b !== void 0 ? _b : language) !== null && _c !== void 0 ? _c : 'Generated Code';
63
+ }
64
+ /**
65
+ * Opens a file and moves the cursor to the specified position.
66
+ *
67
+ * @param uri - The URI of the file to open.
68
+ * @param position - The position to move the cursor to, specified as {line, character}.
69
+ */
70
+ async openFileAtPosition(uri, position) {
71
+ const editorWidget = await this.editorManager.open(uri);
72
+ if (editorWidget) {
73
+ const editor = editorWidget.editor;
74
+ editor.revealPosition(position);
75
+ editor.focus();
76
+ editor.cursor = position;
77
+ }
78
+ }
79
+ handleContextMenuEvent(node, event, code) {
80
+ this.contextMenuRenderer.render({
81
+ menuPath: chat_view_tree_widget_1.ChatViewTreeWidget.CONTEXT_MENU,
82
+ anchor: { x: event.posx, y: event.posy },
83
+ args: [node, { code }]
84
+ });
85
+ event.preventDefault();
86
+ }
87
+ };
88
+ 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
+ tslib_1.__decorate([
94
+ (0, inversify_1.inject)(browser_2.EditorManager),
95
+ tslib_1.__metadata("design:type", browser_2.EditorManager)
96
+ ], CodePartRenderer.prototype, "editorManager", void 0);
97
+ tslib_1.__decorate([
98
+ (0, inversify_1.inject)(core_1.UntitledResourceResolver),
99
+ tslib_1.__metadata("design:type", core_1.UntitledResourceResolver)
100
+ ], CodePartRenderer.prototype, "untitledResourceResolver", void 0);
101
+ tslib_1.__decorate([
102
+ (0, inversify_1.inject)(monaco_editor_provider_1.MonacoEditorProvider),
103
+ tslib_1.__metadata("design:type", monaco_editor_provider_1.MonacoEditorProvider)
104
+ ], CodePartRenderer.prototype, "editorProvider", void 0);
105
+ tslib_1.__decorate([
106
+ (0, inversify_1.inject)(monaco_languages_1.MonacoLanguages),
107
+ tslib_1.__metadata("design:type", monaco_languages_1.MonacoLanguages)
108
+ ], CodePartRenderer.prototype, "languageService", void 0);
109
+ tslib_1.__decorate([
110
+ (0, inversify_1.inject)(browser_1.ContextMenuRenderer),
111
+ tslib_1.__metadata("design:type", browser_1.ContextMenuRenderer)
112
+ ], CodePartRenderer.prototype, "contextMenuRenderer", void 0);
113
+ exports.CodePartRenderer = CodePartRenderer = tslib_1.__decorate([
114
+ (0, inversify_1.injectable)()
115
+ ], CodePartRenderer);
116
+ const CopyToClipboardButton = (props) => {
117
+ const { code, clipboardService } = props;
118
+ const copyCodeToClipboard = React.useCallback(() => {
119
+ clipboardService.writeText(code);
120
+ }, [code, clipboardService]);
121
+ return React.createElement("button", { className: 'theia-button main', onClick: copyCodeToClipboard }, "Copy");
122
+ };
123
+ const InsertCodeAtCursorButton = (props) => {
124
+ const { code, editorManager } = props;
125
+ const insertCode = React.useCallback(() => {
126
+ const editor = editorManager.currentEditor;
127
+ if (editor) {
128
+ const currentEditor = editor.editor;
129
+ const selection = currentEditor.selection;
130
+ // Insert the text at the current cursor position
131
+ // If there is a selection, replace the selection with the text
132
+ currentEditor.executeEdits([{
133
+ range: {
134
+ start: selection.start,
135
+ end: selection.end
136
+ },
137
+ newText: code
138
+ }]);
139
+ }
140
+ }, [code, editorManager]);
141
+ return React.createElement("button", { className: 'theia-button main', onClick: insertCode }, "Insert at Cursor");
142
+ };
143
+ /**
144
+ * Renders the given code within a Monaco Editor
145
+ */
146
+ const CodeWrapper = (props) => {
147
+ var _a;
148
+ // eslint-disable-next-line no-null/no-null
149
+ const ref = React.useRef(null);
150
+ const editorRef = React.useRef(undefined);
151
+ const createInputElement = async () => {
152
+ const resource = await props.untitledResourceResolver.createUntitledResource(undefined, props.language);
153
+ const editor = await props.editorProvider.createInline(resource.uri, ref.current, {
154
+ readOnly: true,
155
+ autoSizing: true,
156
+ scrollBeyondLastLine: false,
157
+ scrollBeyondLastColumn: 0,
158
+ renderFinalNewline: 'on',
159
+ maxHeight: -1,
160
+ scrollbar: { vertical: 'hidden', horizontal: 'hidden' },
161
+ codeLens: false,
162
+ inlayHints: { enabled: 'off' },
163
+ hover: { enabled: false }
164
+ });
165
+ editor.document.textEditorModel.setValue(props.content);
166
+ editor.getControl().onContextMenu(e => props.contextMenuCallback(e.event));
167
+ editorRef.current = editor;
168
+ };
169
+ React.useEffect(() => {
170
+ createInputElement();
171
+ return () => {
172
+ if (editorRef.current) {
173
+ editorRef.current.dispose();
174
+ }
175
+ };
176
+ }, []);
177
+ React.useEffect(() => {
178
+ if (editorRef.current) {
179
+ editorRef.current.document.textEditorModel.setValue(props.content);
180
+ }
181
+ }, [props.content]);
182
+ (_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.resizeToFit();
183
+ return React.createElement("div", { ref: ref });
184
+ };
185
+ exports.CodeWrapper = CodeWrapper;
186
+ //# sourceMappingURL=code-part-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-part-renderer.js","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/code-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;;;;AAEhF,sDAGmC;AACnC,sCAA4D;AAC5D,qDAAwE;AACxE,iFAA6E;AAC7E,4DAAkE;AAClE,kDAAkD;AAGlD,uDAAwE;AAExE,6FAAwF;AACxF,iFAA6E;AAE7E,mFAA2F;AAIpF,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAgBzB,SAAS,CAAC,QAA6B;QACnC,IAAI,gCAAuB,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,UAAwB;QAC9D,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEtG,OAAO,CACH,6BAAK,SAAS,EAAC,6BAA6B;YACxC,6BAAK,SAAS,EAAC,4BAA4B;gBACvC,6BAAK,SAAS,EAAC,6BAA6B,IAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAO;gBAC/E,6BAAK,SAAS,EAAC,8BAA8B;oBACzC,oBAAC,qBAAqB,IAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,GAAI;oBACvF,oBAAC,wBAAwB,IAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,GAAI,CAClF,CACJ;YACN,6BAAK,SAAS,EAAC,kCAAkC,GAAO;YACxD,6BAAK,SAAS,EAAC,+BAA+B;gBAC1C,oBAAC,mBAAW,IACR,OAAO,EAAE,QAAQ,CAAC,IAAI,EACtB,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,IAAI,CAAC,cAAc,EACnC,wBAAwB,EAAE,IAAI,CAAC,wBAAwB,EACvD,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAgB,CACrG,CACJ,CACT,CAAC;IACN,CAAC;IAES,WAAW,CAAC,QAAiC;;QACnD,MAAM,GAAG,GAAG,MAAA,QAAQ,CAAC,QAAQ,0CAAE,GAAG,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAA,QAAQ,CAAC,QAAQ,0CAAE,QAAQ,CAAC;QAC7C,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;YAClB,OAAO,2BAAG,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAG,IAAI,CAAC,QAAQ,CAAC,MAAA,QAAQ,CAAC,QAAQ,0CAAE,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAK,CAAC;QACzI,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAA,QAAQ,CAAC,QAAQ,0CAAE,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACpE,CAAC;IAEO,QAAQ,CAAC,GAAoB,EAAE,QAA4B;;QAC/D,+FAA+F;QAC/F,yDAAyD;QACzD,OAAO,MAAA,MAAA,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,0CAAE,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,mCAAI,QAAQ,mCAAI,gBAAgB,CAAC;IAClF,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,kBAAkB,CAAC,GAAQ,EAAE,QAAkB;QACjD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAiB,CAAC;QACxE,IAAI,YAAY,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;YACnC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAChC,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;QAC7B,CAAC;IACL,CAAC;IAES,sBAAsB,CAAC,IAA0B,EAAE,KAAkB,EAAE,IAAY;QACzF,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;YAC5B,QAAQ,EAAE,0CAAkB,CAAC,YAAY;YACzC,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE;YACxC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;SACzB,CAAC,CAAC;QACH,KAAK,CAAC,cAAc,EAAE,CAAC;IAC3B,CAAC;CACJ,CAAA;AAvFY,4CAAgB;AAIN;IADlB,IAAA,kBAAM,EAAC,oCAAgB,CAAC;;0DAC6B;AAEnC;IADlB,IAAA,kBAAM,EAAC,uBAAa,CAAC;sCACY,uBAAa;uDAAC;AAE7B;IADlB,IAAA,kBAAM,EAAC,+BAAwB,CAAC;sCACY,+BAAwB;kEAAC;AAEnD;IADlB,IAAA,kBAAM,EAAC,6CAAoB,CAAC;sCACM,6CAAoB;wDAAC;AAErC;IADlB,IAAA,kBAAM,EAAC,kCAAe,CAAC;sCACY,kCAAe;yDAAC;AAEjC;IADlB,IAAA,kBAAM,EAAC,6BAAmB,CAAC;sCACY,6BAAmB;6DAAC;2BAdnD,gBAAgB;IAD5B,IAAA,sBAAU,GAAE;GACA,gBAAgB,CAuF5B;AAED,MAAM,qBAAqB,GAAG,CAAC,KAA2D,EAAE,EAAE;IAC1F,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IACzC,MAAM,mBAAmB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC/C,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC7B,OAAO,gCAAQ,SAAS,EAAC,mBAAmB,EAAC,OAAO,EAAE,mBAAmB,WAAe,CAAC;AAC7F,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,KAAqD,EAAE,EAAE;IACvF,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IACtC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACtC,MAAM,MAAM,GAAG,aAAa,CAAC,aAAa,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;YACpC,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;YAE1C,iDAAiD;YACjD,+DAA+D;YAC/D,aAAa,CAAC,YAAY,CAAC,CAAC;oBACxB,KAAK,EAAE;wBACH,KAAK,EAAE,SAAS,CAAC,KAAK;wBACtB,GAAG,EAAE,SAAS,CAAC,GAAG;qBACrB;oBACD,OAAO,EAAE,IAAI;iBAChB,CAAC,CAAC,CAAC;QACR,CAAC;IACL,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;IAC1B,OAAO,gCAAQ,SAAS,EAAC,mBAAmB,EAAC,OAAO,EAAE,UAAU,uBAA2B,CAAC;AAChG,CAAC,CAAC;AAEF;;GAEG;AACI,MAAM,WAAW,GAAG,CAAC,KAM3B,EAAE,EAAE;;IACD,2CAA2C;IAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAwB,IAAI,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAA2B,SAAS,CAAC,CAAC;IAEpE,MAAM,kBAAkB,GAAG,KAAK,IAAI,EAAE;QAClC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,wBAAwB,CAAC,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxG,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,OAAQ,EAAE;YAC/E,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;YAChB,oBAAoB,EAAE,KAAK;YAC3B,sBAAsB,EAAE,CAAC;YACzB,kBAAkB,EAAE,IAAI;YACxB,SAAS,EAAE,CAAC,CAAC;YACb,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE;YACvD,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;YAC9B,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;SAC5B,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3E,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;IAC/B,CAAC,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,kBAAkB,EAAE,CAAC;QACrB,OAAO,GAAG,EAAE;YACR,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gBACpB,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAChC,CAAC;QACL,CAAC,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACpB,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvE,CAAC;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAEpB,MAAA,SAAS,CAAC,OAAO,0CAAE,WAAW,EAAE,CAAC;IAEjC,OAAO,6BAAK,GAAG,EAAE,GAAG,GAAQ,CAAC;AACjC,CAAC,CAAC;AAhDW,QAAA,WAAW,eAgDtB"}
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ import { ChatResponsePartRenderer } from '../chat-response-part-renderer';
3
+ import { ChatResponseContent, CommandChatResponseContent } from '@theia/ai-chat/lib/common';
4
+ import { ReactNode } from '@theia/core/shared/react';
5
+ export declare class CommandPartRenderer implements ChatResponsePartRenderer<CommandChatResponseContent> {
6
+ private commandService;
7
+ private commandRegistry;
8
+ canHandle(response: ChatResponseContent): number;
9
+ render(response: CommandChatResponseContent): ReactNode;
10
+ private onCommand;
11
+ }
12
+ //# sourceMappingURL=command-part-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-part-renderer.d.ts","sourceRoot":"","sources":["../../../src/browser/chat-response-renderer/command-part-renderer.tsx"],"names":[],"mappings":";AAgBA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAIrD,qBACa,mBAAoB,YAAW,wBAAwB,CAAC,0BAA0B,CAAC;IACpE,OAAO,CAAC,cAAc,CAAiB;IACtC,OAAO,CAAC,eAAe,CAAkB;IAClE,SAAS,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM;IAMhD,MAAM,CAAC,QAAQ,EAAE,0BAA0B,GAAG,SAAS;IAiBvD,OAAO,CAAC,SAAS;CASpB"}