@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
@@ -156,7 +156,8 @@ div:last-child > .theia-ChatNode {
156
156
  }
157
157
 
158
158
  .theia-RequestNode .theia-RequestNode-AgentLabel,
159
- .theia-RequestNode .theia-RequestNode-VariableLabel {
159
+ .theia-RequestNode .theia-RequestNode-VariableLabel,
160
+ .theia-RequestNode .theia-RequestNode-FunctionLabel {
160
161
  padding: calc(var(--theia-ui-padding) * 2 / 3);
161
162
  padding-top: 0px;
162
163
  padding-bottom: 0px;
@@ -345,6 +346,29 @@ div:last-child > .theia-ChatNode {
345
346
  margin: 4px;
346
347
  }
347
348
 
349
+ .theia-ChatInput-ChangeSet-Header-Title {
350
+ display: flex;
351
+ align-items: center;
352
+ gap: 4px;
353
+ }
354
+
355
+ .theia-ChatInput-ChangeSet-Toggle {
356
+ cursor: pointer;
357
+ border-radius: 4px;
358
+ display: inline-flex;
359
+ align-items: center;
360
+ justify-content: center;
361
+ }
362
+
363
+ .theia-ChatInput-ChangeSet-Toggle:hover {
364
+ background-color: var(--theia-toolbar-hoverBackground);
365
+ }
366
+
367
+ .theia-ChatInput-ChangeSet-Toggle:focus {
368
+ outline: 1px solid var(--theia-focusBorder);
369
+ outline-offset: -1px;
370
+ }
371
+
348
372
  .theia-ChatInput-ChangeSet-Box h3 {
349
373
  font-size: 12px;
350
374
  color: var(--theia-disabledForeground);
@@ -361,6 +385,22 @@ div:last-child > .theia-ChatNode {
361
385
  margin: 0;
362
386
  }
363
387
 
388
+ .theia-ChatInput-ChangeSet-List {
389
+ overflow: hidden;
390
+ transition: max-height 0.1s ease-in-out, opacity 0.1s ease-in-out;
391
+ }
392
+
393
+ .theia-ChatInput-ChangeSet-List.expanded {
394
+ max-height: 150px;
395
+ opacity: 1;
396
+ overflow-y: auto;
397
+ }
398
+
399
+ .theia-ChatInput-ChangeSet-List.collapsed {
400
+ max-height: 0;
401
+ opacity: 0;
402
+ }
403
+
364
404
  .theia-ChatInput-ChangeSet-List ul {
365
405
  list-style-type: none;
366
406
  padding: 0;
@@ -386,11 +426,6 @@ div:last-child > .theia-ChatNode {
386
426
  display: none;
387
427
  }
388
428
 
389
- .theia-ChatInput-ChangeSet-List ul {
390
- max-height: 150px;
391
- overflow-y: auto;
392
- }
393
-
394
429
  .theia-ChatInput-ChangeSet-List ul li {
395
430
  cursor: pointer;
396
431
  }
@@ -605,6 +640,10 @@ div:last-child > .theia-ChatNode {
605
640
  display: flex;
606
641
  }
607
642
 
643
+ .theia-ChatInputOptions .theia-ChatInputOptions-left {
644
+ order: -1;
645
+ }
646
+
608
647
  .theia-ChatInputOptions .theia-ChatInputOptions-right {
609
648
  margin-right: 8px;
610
649
  }
@@ -825,29 +864,28 @@ div:last-child > .theia-ChatNode {
825
864
  justify-content: center !important;
826
865
  }
827
866
 
828
- .theia-tool-confirmation-dropdown-menu {
829
- position: absolute;
830
- top: 100%;
831
- left: 0;
832
- z-index: 10;
833
- min-width: 180px;
834
- background: var(--theia-menu-background);
835
- border: 1px solid var(--theia-menu-border);
836
- border-radius: 4px;
837
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
838
- margin: 0;
839
- padding: 0;
840
- list-style: none;
867
+ /* Split buttons have no margin between them, so the default outline-offset: 1px
868
+ causes focus outlines to overlap with the adjacent button. Use inset outline instead. */
869
+ .theia-tool-confirmation-main-btn:focus,
870
+ .theia-tool-confirmation-chevron-btn:focus {
871
+ outline-offset: -2px;
841
872
  }
842
873
 
843
- .theia-tool-confirmation-dropdown-item {
844
- padding: 6px 16px;
845
- cursor: pointer;
846
- white-space: nowrap;
874
+ .theia-tool-confirmation-deny-reason {
875
+ display: flex;
876
+ flex-direction: column;
877
+ gap: var(--theia-ui-padding);
847
878
  }
848
879
 
849
- .theia-tool-confirmation-dropdown-item:hover {
850
- background: var(--theia-list-hoverBackground, #e5e5e5);
880
+ .theia-tool-confirmation-deny-reason-input {
881
+ width: 100%;
882
+ box-sizing: border-box;
883
+ }
884
+
885
+ .theia-tool-confirmation-deny-reason-actions {
886
+ display: flex;
887
+ justify-content: flex-end;
888
+ gap: var(--theia-ui-padding);
851
889
  }
852
890
 
853
891
  .theia-tool-confirmation-status {
@@ -918,6 +956,8 @@ div:last-child > .theia-ChatNode {
918
956
  }
919
957
 
920
958
  .theia-toolCall-denied,
959
+ .theia-toolCall-rejected,
960
+ .theia-toolCall-unavailable,
921
961
  .theia-toolCall-finished summary,
922
962
  .theia-toolCall-allowed,
923
963
  .theia-toolCall-waiting {
@@ -932,8 +972,15 @@ div:last-child > .theia-ChatNode {
932
972
  color: var(--theia-descriptionForeground);
933
973
  }
934
974
 
935
- .theia-toolCall-denied {
975
+ .theia-toolCall-denied,
976
+ .theia-toolCall-rejected {
936
977
  color: var(--theia-errorForeground);
978
+ cursor: default;
979
+ }
980
+
981
+ .theia-toolCall-unavailable {
982
+ color: var(--theia-editorWarning-foreground);
983
+ cursor: default;
937
984
  }
938
985
 
939
986
  .theia-toolCall-response-result {
@@ -0,0 +1,134 @@
1
+ /********************************************************************************
2
+ * Copyright (C) 2026 EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the Eclipse Public License v. 2.0 which is available at
6
+ * http://www.eclipse.org/legal/epl-2.0.
7
+ *
8
+ * This Source Code may also be made available under the following Secondary
9
+ * Licenses when the conditions for such availability set forth in the Eclipse
10
+ * Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ * with the GNU Classpath Exception which is available at
12
+ * https://www.gnu.org/software/classpath/license.html.
13
+ *
14
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ ********************************************************************************/
16
+
17
+ /* Override max-width constraint from pref-input for session storage preference */
18
+ .theia-settings-container .pref-input:has(.session-storage-preference-container) {
19
+ max-width: none;
20
+ }
21
+
22
+ .theia-settings-container .session-storage-preference-container {
23
+ width: 100%;
24
+ }
25
+
26
+ .theia-settings-container .session-storage-scope-section {
27
+ margin-bottom: var(--theia-ui-padding);
28
+ }
29
+
30
+ .theia-settings-container .session-storage-disclosure-row {
31
+ display: flex;
32
+ align-items: center;
33
+ cursor: pointer;
34
+ padding: calc(var(--theia-ui-padding) / 2) 0;
35
+ user-select: none;
36
+ }
37
+
38
+ .theia-settings-container .session-storage-disclosure-button {
39
+ display: inline-flex;
40
+ align-items: center;
41
+ justify-content: center;
42
+ width: 20px;
43
+ height: 20px;
44
+ cursor: pointer;
45
+ }
46
+
47
+ .theia-settings-container .session-storage-disclosure-button:focus {
48
+ outline: 1px solid var(--theia-focusBorder);
49
+ outline-offset: -1px;
50
+ }
51
+
52
+ .theia-settings-container .session-storage-disclosure-label {
53
+ font-size: var(--theia-ui-font-size1);
54
+ color: var(--theia-descriptionForeground);
55
+ padding-left: calc(var(--theia-ui-padding) / 2);
56
+ }
57
+
58
+ .theia-settings-container .session-storage-expanded-section {
59
+ margin-left: 20px;
60
+ padding-left: calc(var(--theia-ui-padding) * 2);
61
+ border-left: 1px solid var(--theia-panel-border);
62
+ }
63
+
64
+ .theia-settings-container .session-storage-expanded-section.hidden {
65
+ display: none;
66
+ }
67
+
68
+ .theia-settings-container .session-storage-path-row {
69
+ padding-bottom: var(--theia-ui-padding);
70
+ }
71
+
72
+ .theia-settings-container .session-storage-path-label {
73
+ display: block;
74
+ font-weight: bold;
75
+ padding-top: var(--theia-ui-padding);
76
+ padding-bottom: calc(var(--theia-ui-padding) / 2);
77
+ }
78
+
79
+ .theia-settings-container .session-storage-path-description {
80
+ display: block;
81
+ font-size: var(--theia-ui-font-size1);
82
+ color: var(--theia-descriptionForeground);
83
+ padding-bottom: calc(var(--theia-ui-padding) / 2);
84
+ line-height: 18px;
85
+ }
86
+
87
+ .theia-settings-container .session-storage-path-input-container {
88
+ display: flex;
89
+ align-items: center;
90
+ gap: var(--theia-ui-padding);
91
+ }
92
+
93
+ .theia-settings-container .session-storage-path-input {
94
+ flex: 1;
95
+ max-width: 320px;
96
+ }
97
+
98
+ /* In simplified no-workspace view, the input fills the pref-input container */
99
+ .theia-settings-container .session-storage-no-workspace > .session-storage-path-input {
100
+ width: 100%;
101
+ }
102
+
103
+ .theia-settings-container .session-storage-reset-button {
104
+ padding: 2px 6px;
105
+ min-width: auto;
106
+ }
107
+
108
+ .theia-settings-container .session-storage-reset-button:disabled {
109
+ opacity: 0.5;
110
+ cursor: not-allowed;
111
+ }
112
+
113
+ /* Message styling for session storage path (errors and info) */
114
+ .theia-settings-container .session-storage-path-row .session-storage-message,
115
+ .theia-settings-container .session-storage-no-workspace .session-storage-message {
116
+ border-style: solid;
117
+ border-width: 1px;
118
+ max-width: 320px;
119
+ box-sizing: border-box;
120
+ padding: var(--theia-ui-padding);
121
+ margin-top: calc(var(--theia-ui-padding) / 2);
122
+ }
123
+
124
+ .theia-settings-container .session-storage-path-row .session-storage-message.error,
125
+ .theia-settings-container .session-storage-no-workspace .session-storage-message.error {
126
+ border-color: var(--theia-inputValidation-errorBorder);
127
+ background-color: var(--theia-inputValidation-errorBackground);
128
+ }
129
+
130
+ .theia-settings-container .session-storage-path-row .session-storage-message.info,
131
+ .theia-settings-container .session-storage-no-workspace .session-storage-message.info {
132
+ border-color: var(--theia-inputValidation-infoBorder);
133
+ background-color: var(--theia-inputValidation-infoBackground);
134
+ }