@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
@@ -23,6 +23,7 @@ import {
23
23
  ChatService,
24
24
  EditableChatRequestModel,
25
25
  ParsedChatRequestAgentPart,
26
+ ParsedChatRequestFunctionPart,
26
27
  ParsedChatRequestVariablePart,
27
28
  type ChatRequest,
28
29
  type ChatHierarchyBranch,
@@ -46,6 +47,7 @@ import {
46
47
  Widget,
47
48
  type ReactWidget
48
49
  } from '@theia/core/lib/browser';
50
+ import { ContextKey, ContextKeyService } from '@theia/core/lib/browser/context-key-service';
49
51
  import { nls } from '@theia/core/lib/common/nls';
50
52
  import {
51
53
  inject,
@@ -135,6 +137,11 @@ export class ChatViewTreeWidget extends TreeWidget {
135
137
  @inject(ChatService)
136
138
  protected readonly chatService: ChatService;
137
139
 
140
+ @inject(ContextKeyService)
141
+ protected readonly contextKeyService: ContextKeyService;
142
+
143
+ protected chatResponseFocusKey: ContextKey<boolean>;
144
+
138
145
  protected readonly onDidSubmitEditEmitter = new Emitter<ChatRequest>();
139
146
  onDidSubmitEdit = this.onDidSubmitEditEmitter.event;
140
147
 
@@ -202,6 +209,12 @@ export class ChatViewTreeWidget extends TreeWidget {
202
209
  this.id = ChatViewTreeWidget.ID + '-treeContainer';
203
210
  this.addClass('treeContainer');
204
211
 
212
+ this.chatResponseFocusKey = this.contextKeyService.createKey<boolean>('chatResponseFocus', false);
213
+ this.node.setAttribute('tabindex', '0');
214
+ this.node.setAttribute('aria-label', nls.localize('theia/ai/chat-ui/chatResponses', 'Chat responses'));
215
+ this.addEventListener(this.node, 'focusin', () => this.chatResponseFocusKey.set(true));
216
+ this.addEventListener(this.node, 'focusout', () => this.chatResponseFocusKey.set(false));
217
+
205
218
  this.toDispose.pushAll([
206
219
  this.toDisposeOnChatModelChange,
207
220
  this.activationService.onDidChangeActiveStatus(change => {
@@ -504,8 +517,16 @@ export class ChatViewTreeWidget extends TreeWidget {
504
517
  if (!(isRequestNode(node) || isResponseNode(node))) {
505
518
  return super.renderNode(node, props);
506
519
  }
520
+ const ariaLabel = isRequestNode(node)
521
+ ? nls.localize('theia/ai/chat-ui/yourMessage', 'Your message')
522
+ : nls.localize('theia/ai/chat-ui/responseFrom', 'Response from {0}', this.getAgentLabel(node));
507
523
  return <React.Fragment key={node.id}>
508
- <div className='theia-ChatNode' onContextMenu={e => this.handleContextMenu(node, e)}>
524
+ <div
525
+ className='theia-ChatNode'
526
+ role='article'
527
+ aria-label={ariaLabel}
528
+ onContextMenu={e => this.handleContextMenu(node, e)}
529
+ >
509
530
  {this.renderAgent(node)}
510
531
  {this.renderDetail(node)}
511
532
  </div>
@@ -551,11 +572,13 @@ export class ChatViewTreeWidget extends TreeWidget {
551
572
  />
552
573
  )}
553
574
  {inProgress && !waitingForInput &&
554
- <span className='theia-ChatContentInProgress'>
575
+ <span className='theia-ChatContentInProgress' role='status' aria-live='polite'>
555
576
  {nls.localize('theia/ai/chat-ui/chat-view-tree-widget/generating', 'Generating')}
556
577
  </span>}
557
- {inProgress && waitingForInput && <span className='theia-ChatContentInProgress'>{
558
- nls.localize('theia/ai/chat-ui/chat-view-tree-widget/waitingForInput', 'Waiting for input')}</span>}
578
+ {inProgress && waitingForInput &&
579
+ <span className='theia-ChatContentInProgress' role='status' aria-live='polite'>
580
+ {nls.localize('theia/ai/chat-ui/chat-view-tree-widget/waitingForInput', 'Waiting for input')}
581
+ </span>}
559
582
  <div className='theia-ChatNodeToolbar'>
560
583
  {!inProgress &&
561
584
  toolbarContributions.length > 0 &&
@@ -564,6 +587,8 @@ export class ChatViewTreeWidget extends TreeWidget {
564
587
  key={action.commandId}
565
588
  className={`theia-ChatNodeToolbarAction ${action.icon}`}
566
589
  title={action.tooltip}
590
+ aria-label={action.tooltip}
591
+ tabIndex={0}
567
592
  onClick={e => {
568
593
  e.stopPropagation();
569
594
  this.commandRegistry.executeCommand(action.commandId, node);
@@ -808,7 +833,7 @@ const ChatRequestRender = (
808
833
  <div className="theia-RequestNode">
809
834
  <p>
810
835
  {parts.map((part, index) => {
811
- if (part instanceof ParsedChatRequestAgentPart || part instanceof ParsedChatRequestVariablePart) {
836
+ if (part instanceof ParsedChatRequestAgentPart || part instanceof ParsedChatRequestVariablePart || part instanceof ParsedChatRequestFunctionPart) {
812
837
  let description = undefined;
813
838
  let className = '';
814
839
  if (part instanceof ParsedChatRequestAgentPart) {
@@ -817,6 +842,9 @@ const ChatRequestRender = (
817
842
  } else if (part instanceof ParsedChatRequestVariablePart) {
818
843
  description = variableService.getVariable(part.variableName)?.description;
819
844
  className = 'theia-RequestNode-VariableLabel';
845
+ } else if (part instanceof ParsedChatRequestFunctionPart) {
846
+ description = part.toolRequest?.description;
847
+ className = 'theia-RequestNode-FunctionLabel';
820
848
  }
821
849
  return (
822
850
  <HoverableLabel
@@ -74,9 +74,9 @@ export const AI_CHAT_NEW_CHAT_WINDOW_COMMAND = Command.toDefaultLocalizedCommand
74
74
  label: 'New Chat'
75
75
  });
76
76
 
77
- export const AI_CHAT_SHOW_CHATS_COMMAND = Command.toDefaultLocalizedCommand({
77
+ export const AI_CHAT_SHOW_CHATS_COMMAND = Command.toLocalizedCommand({
78
78
  id: 'ai-chat-ui.show-chats',
79
79
  iconClass: codicon('history'),
80
80
  category: ChatCommands.CHAT_CATEGORY,
81
81
  label: 'Show Chats...'
82
- });
82
+ }, 'theia/ai-chat-ui/showChats');