@theia/ai-chat-ui 1.68.0-next.8 → 1.68.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 (132) hide show
  1. package/README.md +33 -0
  2. package/lib/browser/ai-chat-ui-contribution.d.ts +2 -1
  3. package/lib/browser/ai-chat-ui-contribution.d.ts.map +1 -1
  4. package/lib/browser/ai-chat-ui-contribution.js +41 -32
  5. package/lib/browser/ai-chat-ui-contribution.js.map +1 -1
  6. package/lib/browser/ai-chat-ui-frontend-module.d.ts.map +1 -1
  7. package/lib/browser/ai-chat-ui-frontend-module.js +15 -6
  8. package/lib/browser/ai-chat-ui-frontend-module.js.map +1 -1
  9. package/lib/browser/change-set-actions/change-set-accept-action.d.ts +0 -1
  10. package/lib/browser/change-set-actions/change-set-accept-action.d.ts.map +1 -1
  11. package/lib/browser/change-set-actions/change-set-action-service.d.ts +0 -1
  12. package/lib/browser/change-set-actions/change-set-action-service.d.ts.map +1 -1
  13. package/lib/browser/change-set-actions/change-set-action-service.js +2 -2
  14. package/lib/browser/change-set-actions/change-set-action-service.js.map +1 -1
  15. package/lib/browser/chat-focus-contribution.d.ts +14 -0
  16. package/lib/browser/chat-focus-contribution.d.ts.map +1 -0
  17. package/lib/browser/chat-focus-contribution.js +102 -0
  18. package/lib/browser/chat-focus-contribution.js.map +1 -0
  19. package/lib/browser/chat-input-agent-suggestions.d.ts +0 -1
  20. package/lib/browser/chat-input-agent-suggestions.d.ts.map +1 -1
  21. package/lib/browser/chat-input-agent-suggestions.js +1 -1
  22. package/lib/browser/chat-input-agent-suggestions.js.map +1 -1
  23. package/lib/browser/chat-input-history-contribution.js +6 -10
  24. package/lib/browser/chat-input-history-contribution.js.map +1 -1
  25. package/lib/browser/chat-input-mode-contribution.js +1 -2
  26. package/lib/browser/chat-input-mode-contribution.js.map +1 -1
  27. package/lib/browser/chat-input-widget.d.ts +0 -1
  28. package/lib/browser/chat-input-widget.d.ts.map +1 -1
  29. package/lib/browser/chat-input-widget.js +106 -96
  30. package/lib/browser/chat-input-widget.js.map +1 -1
  31. package/lib/browser/chat-progress-message.d.ts +0 -1
  32. package/lib/browser/chat-progress-message.d.ts.map +1 -1
  33. package/lib/browser/chat-response-part-renderer.d.ts +0 -1
  34. package/lib/browser/chat-response-part-renderer.d.ts.map +1 -1
  35. package/lib/browser/chat-response-renderer/ai-selection-resolver.js +4 -5
  36. package/lib/browser/chat-response-renderer/ai-selection-resolver.js.map +1 -1
  37. package/lib/browser/chat-response-renderer/code-part-renderer.d.ts +0 -1
  38. package/lib/browser/chat-response-renderer/code-part-renderer.d.ts.map +1 -1
  39. package/lib/browser/chat-response-renderer/code-part-renderer.js +6 -9
  40. package/lib/browser/chat-response-renderer/code-part-renderer.js.map +1 -1
  41. package/lib/browser/chat-response-renderer/command-part-renderer.d.ts +0 -1
  42. package/lib/browser/chat-response-renderer/command-part-renderer.d.ts.map +1 -1
  43. package/lib/browser/chat-response-renderer/command-part-renderer.js +7 -4
  44. package/lib/browser/chat-response-renderer/command-part-renderer.js.map +1 -1
  45. package/lib/browser/chat-response-renderer/delegation-response-renderer.d.ts +0 -1
  46. package/lib/browser/chat-response-renderer/delegation-response-renderer.d.ts.map +1 -1
  47. package/lib/browser/chat-response-renderer/delegation-response-renderer.js +3 -4
  48. package/lib/browser/chat-response-renderer/delegation-response-renderer.js.map +1 -1
  49. package/lib/browser/chat-response-renderer/error-part-renderer.d.ts +0 -1
  50. package/lib/browser/chat-response-renderer/error-part-renderer.d.ts.map +1 -1
  51. package/lib/browser/chat-response-renderer/horizontal-layout-part-renderer.d.ts +0 -1
  52. package/lib/browser/chat-response-renderer/horizontal-layout-part-renderer.d.ts.map +1 -1
  53. package/lib/browser/chat-response-renderer/index.d.ts +1 -0
  54. package/lib/browser/chat-response-renderer/index.d.ts.map +1 -1
  55. package/lib/browser/chat-response-renderer/index.js +1 -0
  56. package/lib/browser/chat-response-renderer/index.js.map +1 -1
  57. package/lib/browser/chat-response-renderer/markdown-part-renderer.d.ts +0 -1
  58. package/lib/browser/chat-response-renderer/markdown-part-renderer.d.ts.map +1 -1
  59. package/lib/browser/chat-response-renderer/markdown-part-renderer.js +7 -9
  60. package/lib/browser/chat-response-renderer/markdown-part-renderer.js.map +1 -1
  61. package/lib/browser/chat-response-renderer/not-available-toolcall-renderer.d.ts +17 -0
  62. package/lib/browser/chat-response-renderer/not-available-toolcall-renderer.d.ts.map +1 -0
  63. package/lib/browser/chat-response-renderer/not-available-toolcall-renderer.js +56 -0
  64. package/lib/browser/chat-response-renderer/not-available-toolcall-renderer.js.map +1 -0
  65. package/lib/browser/chat-response-renderer/progress-part-renderer.d.ts +0 -1
  66. package/lib/browser/chat-response-renderer/progress-part-renderer.d.ts.map +1 -1
  67. package/lib/browser/chat-response-renderer/question-part-renderer.d.ts +0 -1
  68. package/lib/browser/chat-response-renderer/question-part-renderer.d.ts.map +1 -1
  69. package/lib/browser/chat-response-renderer/question-part-renderer.js +6 -9
  70. package/lib/browser/chat-response-renderer/question-part-renderer.js.map +1 -1
  71. package/lib/browser/chat-response-renderer/text-part-renderer.d.ts +0 -1
  72. package/lib/browser/chat-response-renderer/text-part-renderer.d.ts.map +1 -1
  73. package/lib/browser/chat-response-renderer/thinking-part-renderer.d.ts +0 -1
  74. package/lib/browser/chat-response-renderer/thinking-part-renderer.d.ts.map +1 -1
  75. package/lib/browser/chat-response-renderer/tool-confirmation.d.ts +29 -10
  76. package/lib/browser/chat-response-renderer/tool-confirmation.d.ts.map +1 -1
  77. package/lib/browser/chat-response-renderer/tool-confirmation.js +219 -65
  78. package/lib/browser/chat-response-renderer/tool-confirmation.js.map +1 -1
  79. package/lib/browser/chat-response-renderer/tool-confirmation.spec.d.ts +2 -0
  80. package/lib/browser/chat-response-renderer/tool-confirmation.spec.d.ts.map +1 -0
  81. package/lib/browser/chat-response-renderer/tool-confirmation.spec.js +100 -0
  82. package/lib/browser/chat-response-renderer/tool-confirmation.spec.js.map +1 -0
  83. package/lib/browser/chat-response-renderer/toolcall-part-renderer.d.ts +5 -3
  84. package/lib/browser/chat-response-renderer/toolcall-part-renderer.d.ts.map +1 -1
  85. package/lib/browser/chat-response-renderer/toolcall-part-renderer.js +21 -11
  86. package/lib/browser/chat-response-renderer/toolcall-part-renderer.js.map +1 -1
  87. package/lib/browser/chat-response-renderer/unknown-part-renderer.d.ts +0 -1
  88. package/lib/browser/chat-response-renderer/unknown-part-renderer.d.ts.map +1 -1
  89. package/lib/browser/chat-response-renderer/unknown-part-renderer.js +1 -2
  90. package/lib/browser/chat-response-renderer/unknown-part-renderer.js.map +1 -1
  91. package/lib/browser/chat-tree-view/chat-view-tree-container.js +1 -2
  92. package/lib/browser/chat-tree-view/chat-view-tree-container.js.map +1 -1
  93. package/lib/browser/chat-tree-view/chat-view-tree-input-widget.js +2 -3
  94. package/lib/browser/chat-tree-view/chat-view-tree-input-widget.js.map +1 -1
  95. package/lib/browser/chat-tree-view/chat-view-tree-widget.d.ts +3 -1
  96. package/lib/browser/chat-tree-view/chat-view-tree-widget.d.ts.map +1 -1
  97. package/lib/browser/chat-tree-view/chat-view-tree-widget.js +49 -42
  98. package/lib/browser/chat-tree-view/chat-view-tree-widget.js.map +1 -1
  99. package/lib/browser/chat-tree-view/prompt-variant-badge.d.ts +0 -1
  100. package/lib/browser/chat-tree-view/prompt-variant-badge.d.ts.map +1 -1
  101. package/lib/browser/chat-tree-view/sub-chat-widget.d.ts +0 -1
  102. package/lib/browser/chat-tree-view/sub-chat-widget.d.ts.map +1 -1
  103. package/lib/browser/chat-view-commands.d.ts.map +1 -1
  104. package/lib/browser/chat-view-commands.js +2 -2
  105. package/lib/browser/chat-view-commands.js.map +1 -1
  106. package/lib/browser/chat-view-contribution.js +7 -7
  107. package/lib/browser/chat-view-contribution.js.map +1 -1
  108. package/lib/browser/chat-view-language-contribution.js +3 -4
  109. package/lib/browser/chat-view-language-contribution.js.map +1 -1
  110. package/lib/browser/chat-view-widget.js +9 -10
  111. package/lib/browser/chat-view-widget.js.map +1 -1
  112. package/lib/browser/context-variable-picker.js +9 -13
  113. package/lib/browser/context-variable-picker.js.map +1 -1
  114. package/lib/browser/session-storage-preference-renderer.d.ts +127 -0
  115. package/lib/browser/session-storage-preference-renderer.d.ts.map +1 -0
  116. package/lib/browser/session-storage-preference-renderer.js +490 -0
  117. package/lib/browser/session-storage-preference-renderer.js.map +1 -0
  118. package/package.json +12 -11
  119. package/src/browser/ai-chat-ui-contribution.ts +19 -7
  120. package/src/browser/ai-chat-ui-frontend-module.ts +13 -0
  121. package/src/browser/chat-focus-contribution.ts +102 -0
  122. package/src/browser/chat-input-widget.tsx +99 -27
  123. package/src/browser/chat-response-renderer/index.ts +1 -0
  124. package/src/browser/chat-response-renderer/not-available-toolcall-renderer.tsx +57 -0
  125. package/src/browser/chat-response-renderer/tool-confirmation.spec.ts +108 -0
  126. package/src/browser/chat-response-renderer/tool-confirmation.tsx +379 -95
  127. package/src/browser/chat-response-renderer/toolcall-part-renderer.tsx +27 -13
  128. package/src/browser/chat-tree-view/chat-view-tree-widget.tsx +33 -5
  129. package/src/browser/chat-view-commands.ts +2 -2
  130. package/src/browser/session-storage-preference-renderer.ts +657 -0
  131. package/src/browser/style/index.css +73 -26
  132. package/src/browser/style/session-storage-preference.css +134 -0
@@ -0,0 +1,490 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 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
+ var SessionStoragePreferenceRendererContribution_1;
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.SessionStoragePreferenceRendererContribution = exports.SessionStoragePreferenceRenderer = void 0;
20
+ const tslib_1 = require("tslib");
21
+ require("../../src/browser/style/session-storage-preference.css");
22
+ const inversify_1 = require("@theia/core/shared/inversify");
23
+ const browser_1 = require("@theia/core/lib/browser");
24
+ const path_1 = require("@theia/core/lib/common/path");
25
+ const select_component_1 = require("@theia/core/lib/browser/widgets/select-component");
26
+ const preference_node_renderer_1 = require("@theia/preferences/lib/browser/views/components/preference-node-renderer");
27
+ const preference_node_renderer_creator_1 = require("@theia/preferences/lib/browser/views/components/preference-node-renderer-creator");
28
+ const React = require("@theia/core/shared/react");
29
+ const client_1 = require("@theia/core/shared/react-dom/client");
30
+ const ai_chat_preferences_1 = require("@theia/ai-chat/lib/common/ai-chat-preferences");
31
+ const session_storage_defaults_provider_1 = require("@theia/ai-chat/lib/browser/session-storage-defaults-provider");
32
+ const workspace_service_1 = require("@theia/workspace/lib/browser/workspace-service");
33
+ const debounce = require("@theia/core/shared/lodash.debounce");
34
+ let SessionStoragePreferenceRenderer = class SessionStoragePreferenceRenderer extends preference_node_renderer_1.PreferenceLeafNodeRenderer {
35
+ constructor() {
36
+ super(...arguments);
37
+ this.scopeSelectRef = React.createRef();
38
+ this.isExpanded = false;
39
+ this.delegateContext = this.createDelegateContext();
40
+ this.workspacePathDelegate = this.createWorkspacePathDelegate();
41
+ this.globalPathDelegate = this.createGlobalPathDelegate();
42
+ this.debouncedSetPreference = debounce((value) => {
43
+ this.setPreferenceImmediately(value);
44
+ }, 500, { leading: false, trailing: true });
45
+ }
46
+ /**
47
+ * Initialize dynamic defaults asynchronously. This is called lazily when the UI is created,
48
+ * not in @postConstruct() to avoid issues with InversifyJS synchronous instantiation.
49
+ */
50
+ async initDynamicDefaults() {
51
+ await this.defaultsProvider.initialize();
52
+ this.updatePlaceholders();
53
+ }
54
+ updatePlaceholders() {
55
+ // Update placeholder texts with computed defaults
56
+ const workspaceInput = this.workspacePathDelegate.getInput();
57
+ if (workspaceInput) {
58
+ workspaceInput.placeholder = this.defaultsProvider.getDefaultWorkspacePath();
59
+ }
60
+ const globalInput = this.globalPathDelegate.getInput();
61
+ if (globalInput) {
62
+ globalInput.placeholder = this.defaultsProvider.getDefaultGlobalPath();
63
+ }
64
+ }
65
+ createDelegateContext() {
66
+ return {
67
+ getValue: () => this.getValueWithDefaults(),
68
+ setPreferenceDebounced: value => this.debouncedSetPreference(this.stripDefaultValues(value)),
69
+ setPreferenceImmediately: value => this.setPreferenceImmediately(this.stripDefaultValues(value)),
70
+ updateResetButtonStates: () => this.updateResetButtonStates(),
71
+ handleValueChange: () => this.handleValueChange(),
72
+ flushDebouncedPreference: () => this.debouncedSetPreference.flush()
73
+ };
74
+ }
75
+ /**
76
+ * Get the current preference value merged with dynamic defaults.
77
+ * This handles the case where sparse serialization stores only non-default properties.
78
+ */
79
+ getValueWithDefaults() {
80
+ return this.defaultsProvider.mergeWithDefaults(this.getValue() ?? undefined);
81
+ }
82
+ /**
83
+ * Strip properties that have their default values from the preference object.
84
+ * This ensures that only non-default values are written to settings.json.
85
+ * Returns undefined if all values are at their defaults (so the preference is removed entirely).
86
+ */
87
+ stripDefaultValues(value) {
88
+ const defaultScope = 'workspace';
89
+ const result = {};
90
+ let hasNonDefault = false;
91
+ if (value.scope !== defaultScope) {
92
+ result.scope = value.scope;
93
+ hasNonDefault = true;
94
+ }
95
+ if (value.workspacePath !== this.defaultsProvider.getDefaultWorkspacePath()) {
96
+ result.workspacePath = value.workspacePath;
97
+ hasNonDefault = true;
98
+ }
99
+ if (value.globalPath !== this.defaultsProvider.getDefaultGlobalPath()) {
100
+ result.globalPath = value.globalPath;
101
+ hasNonDefault = true;
102
+ }
103
+ return hasNonDefault ? result : undefined;
104
+ }
105
+ createWorkspacePathDelegate() {
106
+ return this.createPathDelegate(() => this.defaultsProvider.getDefaultWorkspacePath(), scope => scope === 'workspace', value => value.workspacePath, (currentValue, newInputValue) => ({ ...currentValue, workspacePath: newInputValue }), (value) => {
107
+ if (!value.trim()) {
108
+ return ai_chat_preferences_1.SessionStorageValue.Labels.pathRequired();
109
+ }
110
+ const path = new path_1.Path(value);
111
+ if (path.isAbsolute) {
112
+ return ai_chat_preferences_1.SessionStorageValue.Labels.workspacePathInvalidRelative();
113
+ }
114
+ // Check for workspace escape: normalize and check for leading ..
115
+ const normalized = path.normalize();
116
+ if (normalized.toString().startsWith('..')) {
117
+ return ai_chat_preferences_1.SessionStorageValue.Labels.workspacePathEscapesWorkspace();
118
+ }
119
+ return undefined;
120
+ }, () => ai_chat_preferences_1.SessionStorageValue.Labels.pathNotUsedForScope(ai_chat_preferences_1.SessionStorageValue.Labels.scopeGlobal()));
121
+ }
122
+ createGlobalPathDelegate() {
123
+ return this.createPathDelegate(() => this.defaultsProvider.getDefaultGlobalPath(),
124
+ // Global path is active when scope is 'global' OR when no workspace is available
125
+ // (since ChatSessionStoreImpl falls back to global storage without a workspace)
126
+ scope => scope === 'global' || this.workspaceService.tryGetRoots().length === 0, value => value.globalPath, (currentValue, newInputValue) => ({ ...currentValue, globalPath: newInputValue }), (value) => {
127
+ if (!value.trim()) {
128
+ return ai_chat_preferences_1.SessionStorageValue.Labels.pathRequired();
129
+ }
130
+ const path = new path_1.Path(value);
131
+ if (!path.isAbsolute) {
132
+ return ai_chat_preferences_1.SessionStorageValue.Labels.globalPathInvalidAbsolute();
133
+ }
134
+ return undefined;
135
+ }, () => ai_chat_preferences_1.SessionStorageValue.Labels.pathNotUsedForScope(ai_chat_preferences_1.SessionStorageValue.Labels.scopeWorkspace()));
136
+ }
137
+ /** Create a delegate to handle UI interactions in the storage path input for one of the supported scopes. */
138
+ createPathDelegate(getDefaultValue, isActiveForScope, getPathFromValue, updatePreferenceValue, validateFn, getInactiveInfoMessage) {
139
+ let input;
140
+ let messageElement;
141
+ let row;
142
+ const context = this.delegateContext;
143
+ const showMessage = (message, severity) => {
144
+ if (messageElement && row) {
145
+ messageElement.textContent = message;
146
+ messageElement.classList.remove('error', 'info');
147
+ messageElement.classList.add(severity);
148
+ if (!messageElement.parentElement) {
149
+ row.appendChild(messageElement);
150
+ }
151
+ }
152
+ };
153
+ const hideMessage = () => {
154
+ messageElement?.remove();
155
+ };
156
+ /** Update the message based on validation and scope */
157
+ const updateMessage = (scope) => {
158
+ if (!input) {
159
+ return;
160
+ }
161
+ const error = validateFn(input.value);
162
+ if (error) {
163
+ showMessage(error, 'error');
164
+ }
165
+ else if (!isActiveForScope(scope)) {
166
+ showMessage(getInactiveInfoMessage(), 'info');
167
+ }
168
+ else {
169
+ hideMessage();
170
+ }
171
+ };
172
+ return {
173
+ getInput: () => input,
174
+ setInput: (element) => { input = element; },
175
+ getDefaultValue,
176
+ isActiveForScope,
177
+ getPathFromValue,
178
+ setMessageElement: (element) => { messageElement = element; },
179
+ getMessageElement: () => messageElement,
180
+ getInactiveInfoMessage,
181
+ setRow: (element) => { row = element; },
182
+ getRow: () => row,
183
+ validate: validateFn,
184
+ handleInputChange: () => {
185
+ if (!input) {
186
+ return;
187
+ }
188
+ const currentValue = context.getValue();
189
+ const error = validateFn(input.value);
190
+ if (error) {
191
+ showMessage(error, 'error');
192
+ }
193
+ else {
194
+ // Update message (may show info or hide)
195
+ updateMessage(currentValue.scope);
196
+ // Only update preference if valid
197
+ const newValue = updatePreferenceValue(currentValue, input.value);
198
+ context.setPreferenceDebounced(newValue);
199
+ }
200
+ context.updateResetButtonStates();
201
+ },
202
+ handleInputBlur: () => {
203
+ context.flushDebouncedPreference();
204
+ context.handleValueChange();
205
+ },
206
+ handleReset: () => {
207
+ if (!input) {
208
+ return;
209
+ }
210
+ const defaultValue = getDefaultValue();
211
+ input.value = defaultValue;
212
+ const currentValue = context.getValue();
213
+ updateMessage(currentValue.scope);
214
+ const newValue = updatePreferenceValue(currentValue, defaultValue);
215
+ context.setPreferenceImmediately(newValue);
216
+ context.updateResetButtonStates();
217
+ },
218
+ updateResetButtonState: (currentValue) => {
219
+ if (!input) {
220
+ return;
221
+ }
222
+ const resetButton = row?.querySelector('.session-storage-reset-button');
223
+ if (resetButton) {
224
+ const isDefault = input.value === getDefaultValue();
225
+ resetButton.disabled = isDefault;
226
+ }
227
+ },
228
+ syncFromPreference: (value) => {
229
+ if (input) {
230
+ if (document.activeElement !== input) {
231
+ input.value = getPathFromValue(value);
232
+ }
233
+ updateMessage(value.scope);
234
+ }
235
+ }
236
+ };
237
+ }
238
+ get scopeOptions() {
239
+ return [
240
+ {
241
+ value: 'workspace',
242
+ label: ai_chat_preferences_1.SessionStorageValue.Labels.scopeWorkspace(),
243
+ detail: 'default',
244
+ description: ai_chat_preferences_1.SessionStorageValue.Labels.scopeWorkspaceDescription()
245
+ },
246
+ {
247
+ value: 'global',
248
+ label: ai_chat_preferences_1.SessionStorageValue.Labels.scopeGlobal(),
249
+ description: ai_chat_preferences_1.SessionStorageValue.Labels.scopeGlobalDescription()
250
+ }
251
+ ];
252
+ }
253
+ createInteractable(parent) {
254
+ const hasWorkspace = this.workspaceService.tryGetRoots().length > 0;
255
+ if (hasWorkspace) {
256
+ this.createFullInteractable(parent);
257
+ }
258
+ else {
259
+ this.createSimplifiedInteractable(parent);
260
+ }
261
+ }
262
+ /**
263
+ * Create the full UI with scope dropdown, disclosure button, and expandable path settings.
264
+ * Used when a workspace is available.
265
+ */
266
+ createFullInteractable(parent) {
267
+ // Initialize dynamic defaults asynchronously - will update UI when ready
268
+ this.initDynamicDefaults();
269
+ const container = document.createElement('div');
270
+ container.classList.add('session-storage-preference-container');
271
+ this.interactable = container;
272
+ // Scope dropdown section
273
+ const scopeSection = document.createElement('div');
274
+ scopeSection.classList.add('session-storage-scope-section');
275
+ const scopeSelectContainer = document.createElement('div');
276
+ scopeSelectContainer.classList.add('session-storage-scope-select');
277
+ scopeSection.appendChild(scopeSelectContainer);
278
+ const currentValue = this.getValue();
279
+ const selectedIndex = currentValue?.scope === 'global' ? 1 : 0;
280
+ const selectComponent = React.createElement(select_component_1.SelectComponent, {
281
+ options: this.scopeOptions,
282
+ defaultValue: selectedIndex,
283
+ onChange: (option, index) => this.onScopeSelectionChange(option.value),
284
+ ref: this.scopeSelectRef
285
+ });
286
+ this.reactRoot = (0, client_1.createRoot)(scopeSelectContainer);
287
+ this.reactRoot.render(selectComponent);
288
+ container.appendChild(scopeSection);
289
+ // Disclosure triangle and expanded section
290
+ const disclosureRow = document.createElement('div');
291
+ disclosureRow.classList.add('session-storage-disclosure-row');
292
+ this.disclosureButton = document.createElement('span');
293
+ this.disclosureButton.classList.add('session-storage-disclosure-button');
294
+ this.disclosureButton.innerHTML = `<i class="${(0, browser_1.codicon)('chevron-right')}"></i>`;
295
+ this.disclosureButton.onclick = () => this.toggleExpanded();
296
+ this.disclosureButton.setAttribute('role', 'button');
297
+ this.disclosureButton.setAttribute('tabindex', '0');
298
+ this.disclosureButton.onkeydown = e => {
299
+ if (e.key === 'Enter' || e.key === ' ') {
300
+ this.toggleExpanded();
301
+ e.preventDefault();
302
+ }
303
+ };
304
+ disclosureRow.appendChild(this.disclosureButton);
305
+ const disclosureLabel = document.createElement('span');
306
+ disclosureLabel.classList.add('session-storage-disclosure-label');
307
+ disclosureLabel.textContent = ai_chat_preferences_1.SessionStorageValue.Labels.pathSettings();
308
+ disclosureLabel.onclick = () => this.toggleExpanded();
309
+ disclosureRow.appendChild(disclosureLabel);
310
+ container.appendChild(disclosureRow);
311
+ // Expanded section with path inputs
312
+ this.expandedSection = document.createElement('div');
313
+ this.expandedSection.classList.add('session-storage-expanded-section', 'hidden');
314
+ // Workspace path input
315
+ const workspacePathRow = this.createPathInputRow(this.workspacePathDelegate, ai_chat_preferences_1.SessionStorageValue.Labels.workspacePathLabel(), ai_chat_preferences_1.SessionStorageValue.Labels.workspacePathDescription(), currentValue?.workspacePath ?? this.workspacePathDelegate.getDefaultValue(), !this.workspacePathDelegate.isActiveForScope(currentValue?.scope ?? 'workspace'), this.defaultsProvider.getDefaultWorkspacePath(), true);
316
+ this.expandedSection.appendChild(workspacePathRow);
317
+ // Global path input
318
+ const globalPathRow = this.createPathInputRow(this.globalPathDelegate, ai_chat_preferences_1.SessionStorageValue.Labels.globalPathLabel(), ai_chat_preferences_1.SessionStorageValue.Labels.globalPathDescription(), currentValue?.globalPath ?? this.globalPathDelegate.getDefaultValue(), !this.globalPathDelegate.isActiveForScope(currentValue?.scope ?? 'workspace'), this.defaultsProvider.getDefaultGlobalPath(), true);
319
+ this.expandedSection.appendChild(globalPathRow);
320
+ container.appendChild(this.expandedSection);
321
+ parent.appendChild(container);
322
+ }
323
+ /**
324
+ * Create a simplified UI with just the global storage path input.
325
+ * Used when no workspace is available - scope falls back to 'global'.
326
+ * No additional label/description needed since the preference title "Session Storage" is sufficient.
327
+ */
328
+ createSimplifiedInteractable(parent) {
329
+ // Initialize dynamic defaults asynchronously
330
+ this.initDynamicDefaults();
331
+ const container = document.createElement('div');
332
+ container.classList.add('session-storage-preference-container', 'session-storage-no-workspace', 'pref-input');
333
+ this.interactable = container;
334
+ const input = document.createElement('input');
335
+ input.type = 'text';
336
+ input.classList.add('theia-input', 'session-storage-path-input');
337
+ input.value = this.getValueWithDefaults().globalPath;
338
+ input.placeholder = this.defaultsProvider.getDefaultGlobalPath();
339
+ input.oninput = () => this.globalPathDelegate.handleInputChange();
340
+ input.onblur = () => this.globalPathDelegate.handleInputBlur();
341
+ this.globalPathDelegate.setInput(input);
342
+ // Message element for validation errors
343
+ const messageElement = document.createElement('div');
344
+ messageElement.classList.add('session-storage-message');
345
+ this.globalPathDelegate.setMessageElement(messageElement);
346
+ this.globalPathDelegate.setRow(container);
347
+ container.appendChild(input);
348
+ parent.appendChild(container);
349
+ }
350
+ /** Create a row for input of the storage path for one of the supported scopes. */
351
+ createPathInputRow(delegate, label, description, value, isInactive, placeholder, showResetButton = true) {
352
+ const row = document.createElement('div');
353
+ row.classList.add('session-storage-path-row');
354
+ const labelElement = document.createElement('label');
355
+ labelElement.classList.add('session-storage-path-label');
356
+ labelElement.textContent = label;
357
+ row.appendChild(labelElement);
358
+ const descriptionElement = document.createElement('span');
359
+ descriptionElement.classList.add('session-storage-path-description');
360
+ descriptionElement.textContent = description;
361
+ row.appendChild(descriptionElement);
362
+ const inputContainer = document.createElement('div');
363
+ inputContainer.classList.add('session-storage-path-input-container');
364
+ const input = document.createElement('input');
365
+ input.type = 'text';
366
+ input.classList.add('theia-input', 'session-storage-path-input');
367
+ input.value = value;
368
+ input.placeholder = placeholder;
369
+ input.oninput = () => delegate.handleInputChange();
370
+ input.onblur = () => delegate.handleInputBlur();
371
+ delegate.setInput(input);
372
+ inputContainer.appendChild(input);
373
+ if (showResetButton) {
374
+ // Reset button
375
+ const resetButton = document.createElement('button');
376
+ resetButton.classList.add('theia-button', 'session-storage-reset-button');
377
+ resetButton.title = ai_chat_preferences_1.SessionStorageValue.Labels.resetToDefault();
378
+ resetButton.innerHTML = `<i class="${(0, browser_1.codicon)('discard')}"></i>`;
379
+ resetButton.disabled = value === delegate.getDefaultValue();
380
+ resetButton.onclick = () => delegate.handleReset();
381
+ inputContainer.appendChild(resetButton);
382
+ }
383
+ // Message element for errors and info (with severity class)
384
+ const messageElement = document.createElement('div');
385
+ messageElement.classList.add('session-storage-message');
386
+ delegate.setMessageElement(messageElement);
387
+ delegate.setRow(row);
388
+ row.appendChild(inputContainer);
389
+ // Show info message initially if this path is not active for the current scope
390
+ if (isInactive) {
391
+ messageElement.textContent = delegate.getInactiveInfoMessage();
392
+ messageElement.classList.add('info');
393
+ row.appendChild(messageElement);
394
+ }
395
+ return row;
396
+ }
397
+ toggleExpanded() {
398
+ this.isExpanded = !this.isExpanded;
399
+ if (this.isExpanded) {
400
+ this.expandedSection.classList.remove('hidden');
401
+ this.disclosureButton.innerHTML = `<i class="${(0, browser_1.codicon)('chevron-down')}"></i>`;
402
+ }
403
+ else {
404
+ this.expandedSection.classList.add('hidden');
405
+ this.disclosureButton.innerHTML = `<i class="${(0, browser_1.codicon)('chevron-right')}"></i>`;
406
+ }
407
+ }
408
+ onScopeSelectionChange(newScope) {
409
+ const currentValue = this.getValueWithDefaults();
410
+ const newValue = {
411
+ ...currentValue,
412
+ scope: newScope
413
+ };
414
+ this.setPreferenceImmediately(this.stripDefaultValues(newValue));
415
+ this.updateInputActiveStates(newScope);
416
+ this.updateResetButtonStates();
417
+ }
418
+ updateInputActiveStates(scope) {
419
+ const value = this.getValueWithDefaults();
420
+ for (const delegate of this.getInputRowDelegates()) {
421
+ delegate.syncFromPreference(value);
422
+ }
423
+ }
424
+ getInputRowDelegates() {
425
+ return [this.workspacePathDelegate, this.globalPathDelegate];
426
+ }
427
+ updateResetButtonStates() {
428
+ const currentValue = this.getValueWithDefaults();
429
+ for (const delegate of this.getInputRowDelegates()) {
430
+ delegate.updateResetButtonState(currentValue);
431
+ }
432
+ }
433
+ getFallbackValue() {
434
+ return this.defaultsProvider.getDefaultValue();
435
+ }
436
+ doHandleValueChange() {
437
+ this.updateInspection();
438
+ const newValue = this.getValueWithDefaults();
439
+ this.updateModificationStatus();
440
+ // Update scope dropdown
441
+ if (this.scopeSelectRef.current) {
442
+ const selectedIndex = newValue.scope === 'global' ? 1 : 0;
443
+ this.scopeSelectRef.current.value = selectedIndex;
444
+ }
445
+ // Update path inputs if not focused, and update enabled states
446
+ for (const delegate of this.getInputRowDelegates()) {
447
+ delegate.syncFromPreference(newValue);
448
+ }
449
+ this.updateResetButtonStates();
450
+ }
451
+ dispose() {
452
+ this.debouncedSetPreference.cancel();
453
+ if (this.reactRoot) {
454
+ this.reactRoot.unmount();
455
+ }
456
+ super.dispose();
457
+ }
458
+ };
459
+ exports.SessionStoragePreferenceRenderer = SessionStoragePreferenceRenderer;
460
+ tslib_1.__decorate([
461
+ (0, inversify_1.inject)(session_storage_defaults_provider_1.SessionStorageDefaultsProvider),
462
+ tslib_1.__metadata("design:type", session_storage_defaults_provider_1.SessionStorageDefaultsProvider)
463
+ ], SessionStoragePreferenceRenderer.prototype, "defaultsProvider", void 0);
464
+ tslib_1.__decorate([
465
+ (0, inversify_1.inject)(workspace_service_1.WorkspaceService),
466
+ tslib_1.__metadata("design:type", workspace_service_1.WorkspaceService)
467
+ ], SessionStoragePreferenceRenderer.prototype, "workspaceService", void 0);
468
+ exports.SessionStoragePreferenceRenderer = SessionStoragePreferenceRenderer = tslib_1.__decorate([
469
+ (0, inversify_1.injectable)()
470
+ ], SessionStoragePreferenceRenderer);
471
+ let SessionStoragePreferenceRendererContribution = class SessionStoragePreferenceRendererContribution extends preference_node_renderer_creator_1.PreferenceLeafNodeRendererContribution {
472
+ constructor() {
473
+ super(...arguments);
474
+ this.id = SessionStoragePreferenceRendererContribution_1.ID;
475
+ }
476
+ static { SessionStoragePreferenceRendererContribution_1 = this; }
477
+ static { this.ID = 'session-storage-preference-renderer'; }
478
+ canHandleLeafNode(node) {
479
+ const typeDetails = node.preference.data.typeDetails;
480
+ return ai_chat_preferences_1.SessionStorageTypeDetails.is(typeDetails) ? 10 : 0;
481
+ }
482
+ createLeafNodeRenderer(container) {
483
+ return container.get(SessionStoragePreferenceRenderer);
484
+ }
485
+ };
486
+ exports.SessionStoragePreferenceRendererContribution = SessionStoragePreferenceRendererContribution;
487
+ exports.SessionStoragePreferenceRendererContribution = SessionStoragePreferenceRendererContribution = SessionStoragePreferenceRendererContribution_1 = tslib_1.__decorate([
488
+ (0, inversify_1.injectable)()
489
+ ], SessionStoragePreferenceRendererContribution);
490
+ //# sourceMappingURL=session-storage-preference-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-storage-preference-renderer.js","sourceRoot":"","sources":["../../src/browser/session-storage-preference-renderer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,17 +1,18 @@
1
1
  {
2
2
  "name": "@theia/ai-chat-ui",
3
- "version": "1.68.0-next.8+e54dfb735",
3
+ "version": "1.68.0",
4
4
  "description": "Theia - AI Chat UI Extension",
5
5
  "dependencies": {
6
- "@theia/ai-chat": "1.68.0-next.8+e54dfb735",
7
- "@theia/ai-core": "1.68.0-next.8+e54dfb735",
8
- "@theia/core": "1.68.0-next.8+e54dfb735",
9
- "@theia/editor": "1.68.0-next.8+e54dfb735",
10
- "@theia/editor-preview": "1.68.0-next.8+e54dfb735",
11
- "@theia/filesystem": "1.68.0-next.8+e54dfb735",
12
- "@theia/monaco": "1.68.0-next.8+e54dfb735",
6
+ "@theia/ai-chat": "1.68.0",
7
+ "@theia/ai-core": "1.68.0",
8
+ "@theia/core": "1.68.0",
9
+ "@theia/editor": "1.68.0",
10
+ "@theia/editor-preview": "1.68.0",
11
+ "@theia/filesystem": "1.68.0",
12
+ "@theia/monaco": "1.68.0",
13
13
  "@theia/monaco-editor-core": "1.96.302",
14
- "@theia/workspace": "1.68.0-next.8+e54dfb735",
14
+ "@theia/preferences": "1.68.0",
15
+ "@theia/workspace": "1.68.0",
15
16
  "date-fns": "^4.1.0",
16
17
  "tslib": "^2.6.2",
17
18
  "uuid": "^9.0.1"
@@ -50,10 +51,10 @@
50
51
  "watch": "theiaext watch"
51
52
  },
52
53
  "devDependencies": {
53
- "@theia/ext-scripts": "1.67.0"
54
+ "@theia/ext-scripts": "1.68.0"
54
55
  },
55
56
  "nyc": {
56
57
  "extends": "../../configs/nyc.json"
57
58
  },
58
- "gitHead": "e54dfb7358bda02385e9c3d881e3620432f4955c"
59
+ "gitHead": "d844a76de68367f16a726f1eae0c2032ecb85f63"
59
60
  }
@@ -15,7 +15,7 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { inject, injectable, named, postConstruct } from '@theia/core/shared/inversify';
18
- import { CommandRegistry, Emitter, isOSX, MessageService, nls, QuickInputButton, QuickInputService, QuickPickItem } from '@theia/core';
18
+ import { CommandRegistry, Emitter, isOSX, MessageService, nls, PreferenceService, QuickInputButton, QuickInputService, QuickPickItem } from '@theia/core';
19
19
  import { ILogger } from '@theia/core/lib/common/logger';
20
20
  import { Widget } from '@theia/core/lib/browser';
21
21
  import {
@@ -38,6 +38,7 @@ import { ChatNodeToolbarCommands } from './chat-node-toolbar-action-contribution
38
38
  import { isEditableRequestNode, isResponseNode, type EditableRequestNode, type ResponseNode } from './chat-tree-view';
39
39
  import { TASK_CONTEXT_VARIABLE } from '@theia/ai-chat/lib/browser/task-context-variable';
40
40
  import { TaskContextService } from '@theia/ai-chat/lib/browser/task-context-service';
41
+ import { SESSION_STORAGE_PREF } from '@theia/ai-chat/lib/common/ai-chat-preferences';
41
42
 
42
43
  export const AI_CHAT_TOGGLE_COMMAND_ID = 'aiChat:toggle';
43
44
 
@@ -60,6 +61,8 @@ export class AIChatContribution extends AbstractViewContribution<ChatViewWidget>
60
61
  protected readonly activationService: AIActivationService;
61
62
  @inject(ILogger) @named('AIChatContribution')
62
63
  protected readonly logger: ILogger;
64
+ @inject(PreferenceService)
65
+ protected readonly preferenceService: PreferenceService;
63
66
 
64
67
  /**
65
68
  * Store whether there are persisted sessions to make this information available in
@@ -103,13 +106,19 @@ export class AIChatContribution extends AbstractViewContribution<ChatViewWidget>
103
106
  }
104
107
  });
105
108
 
109
+ // Re-check persisted sessions when storage preferences change
110
+ this.preferenceService.onPreferenceChanged(event => {
111
+ if (event.preferenceName === SESSION_STORAGE_PREF) {
112
+ this.checkPersistedSessions();
113
+ }
114
+ });
115
+
106
116
  this.checkPersistedSessions();
107
117
  }
108
118
 
109
119
  protected async checkPersistedSessions(): Promise<void> {
110
120
  try {
111
- const index = await this.chatService.getPersistedSessions();
112
- this.hasPersistedSessions = Object.keys(index).length > 0;
121
+ this.hasPersistedSessions = await this.chatService.hasPersistedSessions();
113
122
  } catch (e) {
114
123
  this.logger.error('Failed to check persisted AI sessions', e);
115
124
  this.hasPersistedSessions = false;
@@ -198,15 +207,18 @@ export class AIChatContribution extends AbstractViewContribution<ChatViewWidget>
198
207
  isEnabled: () => this.activationService.isActive
199
208
  });
200
209
  registry.registerCommand(AI_CHAT_SHOW_CHATS_COMMAND, {
201
- execute: () => this.selectChat(),
202
- isEnabled: widget => {
203
- if (!this.activationService.isActive || !this.withWidget(widget)) {
210
+ execute: async () => {
211
+ await this.openView();
212
+ return this.selectChat();
213
+ },
214
+ isEnabled: () => {
215
+ if (!this.activationService.isActive) {
204
216
  return false;
205
217
  }
206
218
  // Enable if there are active sessions with titles OR persisted sessions
207
219
  return this.chatService.getSessions().some(session => !!session.title) || this.hasPersistedSessions;
208
220
  },
209
- isVisible: widget => this.activationService.isActive && this.withWidget(widget)
221
+ isVisible: () => this.activationService.isActive
210
222
  });
211
223
  registry.registerCommand(ChatNodeToolbarCommands.EDIT, {
212
224
  isEnabled: node => isEditableRequestNode(node) && !node.request.isEditing,