@codingame/monaco-vscode-chat-service-override 23.2.2 → 24.1.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 (273) hide show
  1. package/index.js +13 -10
  2. package/package.json +5 -41
  3. package/vscode/src/vs/platform/domWidget/browser/domWidget.d.ts +52 -0
  4. package/vscode/src/vs/platform/domWidget/browser/domWidget.js +53 -0
  5. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +10 -10
  6. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +61 -50
  7. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.d.ts +18 -0
  8. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +152 -0
  9. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.d.ts +2 -2
  10. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +14 -14
  11. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +37 -28
  12. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +9 -9
  13. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +2 -2
  14. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +4 -4
  15. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.d.ts +3 -5
  16. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.js +7 -11
  17. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +10 -10
  18. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +12 -14
  19. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +21 -18
  20. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +27 -18
  21. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +4 -4
  22. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.d.ts +1 -1
  23. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +11 -11
  24. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatSessionActions.d.ts +6 -27
  25. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatSessionActions.js +44 -208
  26. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +17 -17
  27. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +17 -17
  28. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.d.ts +1 -1
  29. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +23 -24
  30. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.d.ts +1 -0
  31. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +140 -0
  32. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.d.ts +85 -0
  33. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +358 -0
  34. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.d.ts +55 -0
  35. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.js +222 -0
  36. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.d.ts +37 -0
  37. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +241 -0
  38. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsService.d.ts +13 -0
  39. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsService.js +27 -0
  40. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsView.d.ts +11 -19
  41. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsView.js +67 -230
  42. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.d.ts +65 -33
  43. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.js +186 -62
  44. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.d.ts +23 -0
  45. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.js +140 -0
  46. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsview.css +2 -7
  47. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +115 -29
  48. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +389 -166
  49. package/vscode/src/vs/workbench/contrib/chat/browser/chatAccessibilityService.d.ts +9 -6
  50. package/vscode/src/vs/workbench/contrib/chat/browser/chatAccessibilityService.js +22 -16
  51. package/vscode/src/vs/workbench/contrib/chat/browser/chatAttachmentResolveService.d.ts +1 -1
  52. package/vscode/src/vs/workbench/contrib/chat/browser/chatAttachmentResolveService.js +8 -8
  53. package/vscode/src/vs/workbench/contrib/chat/browser/chatContentParts/chatMarkdownAnchorService.d.ts +1 -1
  54. package/vscode/src/vs/workbench/contrib/chat/browser/chatContextService.d.ts +10 -3
  55. package/vscode/src/vs/workbench/contrib/chat/browser/chatContextService.js +63 -3
  56. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimeline.d.ts +7 -3
  57. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.d.ts +14 -5
  58. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.js +173 -32
  59. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.d.ts +1 -0
  60. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +66 -17
  61. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +32 -29
  62. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +12 -12
  63. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.d.ts +4 -2
  64. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +9 -6
  65. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.d.ts +2 -2
  66. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +6 -4
  67. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +4 -4
  68. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +8 -18
  69. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingOperations.d.ts +1 -0
  70. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingOperations.js +12 -1
  71. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.d.ts +5 -6
  72. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +15 -24
  73. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.d.ts +13 -11
  74. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +66 -50
  75. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.d.ts +3 -2
  76. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.js +6 -5
  77. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.d.ts +3 -1
  78. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +7 -0
  79. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.d.ts +2 -2
  80. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.js +6 -7
  81. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingModifiedNotebookSnapshot.d.ts +3 -3
  82. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingModifiedNotebookSnapshot.js +4 -4
  83. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.d.ts +2 -2
  84. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.js +1 -1
  85. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.d.ts +1 -1
  86. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +15 -4
  87. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.d.ts +1 -1
  88. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.js +3 -4
  89. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/simpleBrowserEditorOverlay.js +30 -37
  90. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.d.ts +13 -10
  91. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.js +23 -32
  92. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +8 -9
  93. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.d.ts +1 -1
  94. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.js +20 -19
  95. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +4 -4
  96. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.d.ts +47 -15
  97. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +270 -143
  98. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.d.ts +3 -2
  99. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +310 -170
  100. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.js +10 -10
  101. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/media/chatModelsWidget.css +12 -2
  102. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.d.ts +1 -1
  103. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +4 -4
  104. package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +42 -42
  105. package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.d.ts +3 -1
  106. package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.js +35 -25
  107. package/vscode/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.d.ts +1 -1
  108. package/vscode/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.js +4 -4
  109. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/chatSessionsView.d.ts +1 -4
  110. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/chatSessionsView.js +22 -26
  111. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/sessionsTreeRenderer.d.ts +18 -14
  112. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/sessionsTreeRenderer.js +80 -72
  113. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/sessionsViewPane.d.ts +2 -8
  114. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/sessionsViewPane.js +48 -77
  115. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.d.ts +16 -17
  116. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.js +257 -77
  117. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.d.ts +55 -0
  118. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.js +34 -0
  119. package/vscode/src/vs/workbench/contrib/chat/browser/{chatSetup.d.ts → chatSetup/chatSetupContributions.d.ts} +4 -11
  120. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +622 -0
  121. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.d.ts +53 -0
  122. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +359 -0
  123. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.d.ts +89 -0
  124. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +667 -0
  125. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.d.ts +37 -0
  126. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +260 -0
  127. package/vscode/src/vs/workbench/contrib/chat/browser/{media → chatSetup/media}/chatSetup.css +4 -6
  128. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.d.ts +4 -0
  129. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.js +21 -0
  130. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.d.ts +55 -0
  131. package/vscode/src/vs/workbench/contrib/chat/browser/{chatStatus.js → chatStatus/chatStatusDashboard.js} +193 -325
  132. package/vscode/src/vs/workbench/contrib/chat/browser/{chatStatus.d.ts → chatStatus/chatStatusEntry.d.ts} +1 -1
  133. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +190 -0
  134. package/vscode/src/vs/workbench/contrib/chat/browser/{chatStatusItemService.d.ts → chatStatus/chatStatusItemService.d.ts} +1 -1
  135. package/vscode/src/vs/workbench/contrib/chat/browser/{media → chatStatus/media}/chatStatus.css +22 -1
  136. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatusWidget.d.ts +25 -0
  137. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatusWidget.js +108 -0
  138. package/vscode/src/vs/workbench/contrib/chat/browser/chatTerminalOutputAccessibleView.d.ts +10 -0
  139. package/vscode/src/vs/workbench/contrib/chat/browser/chatTerminalOutputAccessibleView.js +34 -0
  140. package/vscode/src/vs/workbench/contrib/chat/browser/chatVariables.js +1 -1
  141. package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.d.ts +57 -18
  142. package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.js +478 -146
  143. package/vscode/src/vs/workbench/contrib/chat/browser/chatViewTitleControl.d.ts +43 -0
  144. package/vscode/src/vs/workbench/contrib/chat/browser/chatViewTitleControl.js +204 -0
  145. package/vscode/src/vs/workbench/contrib/chat/browser/chatWidgetService.d.ts +44 -0
  146. package/vscode/src/vs/workbench/contrib/chat/browser/chatWidgetService.js +187 -0
  147. package/vscode/src/vs/workbench/contrib/chat/browser/codeBlockContextProviderService.d.ts +1 -1
  148. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorContrib.js +108 -62
  149. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorHover.d.ts +1 -1
  150. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorHover.js +3 -3
  151. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsConfirmationService.d.ts +1 -1
  152. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsConfirmationService.js +37 -32
  153. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsService.d.ts +37 -20
  154. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsService.js +232 -97
  155. package/vscode/src/vs/workbench/contrib/chat/browser/media/chatStatusWidget.css +57 -0
  156. package/vscode/src/vs/workbench/contrib/chat/browser/media/chatViewPane.css +142 -0
  157. package/vscode/src/vs/workbench/contrib/chat/browser/media/chatViewTitleControl.css +39 -0
  158. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +51 -35
  159. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionContribution.js +1 -1
  160. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +5 -4
  161. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptFileActions.js +2 -2
  162. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +5 -5
  163. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +12 -12
  164. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +19 -21
  165. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.d.ts +1 -1
  166. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +8 -8
  167. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +16 -16
  168. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +6 -6
  169. package/vscode/src/vs/workbench/contrib/chat/common/chatCodeMapperService.d.ts +1 -1
  170. package/vscode/src/vs/workbench/contrib/chat/common/chatModelStore.d.ts +49 -0
  171. package/vscode/src/vs/workbench/contrib/chat/common/chatModelStore.js +100 -0
  172. package/vscode/src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.d.ts +1 -0
  173. package/vscode/src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.js +2 -1
  174. package/vscode/src/vs/workbench/contrib/chat/common/chatResponseResourceFileSystemProvider.js +3 -4
  175. package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.d.ts +41 -15
  176. package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.js +208 -162
  177. package/vscode/src/vs/workbench/contrib/chat/common/chatServiceTelemetry.d.ts +3 -3
  178. package/vscode/src/vs/workbench/contrib/chat/common/chatSessionStore.d.ts +15 -7
  179. package/vscode/src/vs/workbench/contrib/chat/common/chatSessionStore.js +61 -7
  180. package/vscode/src/vs/workbench/contrib/chat/common/chatSlashCommands.d.ts +3 -2
  181. package/vscode/src/vs/workbench/contrib/chat/common/chatSlashCommands.js +2 -2
  182. package/vscode/src/vs/workbench/contrib/chat/common/chatTodoListService.js +1 -1
  183. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +10 -10
  184. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +2 -2
  185. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptBodyAutocompletion.js +3 -3
  186. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.d.ts +5 -1
  187. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +60 -43
  188. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptDocumentSemanticTokensProvider.js +1 -1
  189. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +27 -4
  190. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +37 -47
  191. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.d.ts +5 -3
  192. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +120 -87
  193. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/promptFileContributions.js +1 -1
  194. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +49 -42
  195. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +293 -187
  196. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +17 -5
  197. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +43 -9
  198. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.d.ts +2 -0
  199. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +48 -29
  200. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.d.ts +1 -1
  201. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +2 -2
  202. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +8 -13
  203. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibilityHelp.js +1 -1
  204. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.js +2 -2
  205. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +3 -3
  206. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +36 -41
  207. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatNotebook.js +3 -3
  208. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.d.ts +2 -2
  209. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.js +2 -2
  210. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +7 -7
  211. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminal.chat.contribution.js +1 -1
  212. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +18 -18
  213. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibleView.js +1 -1
  214. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +142 -38
  215. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.d.ts +1 -1
  216. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.js +3 -7
  217. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatEnabler.js +1 -1
  218. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.d.ts +19 -2
  219. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.js +78 -6
  220. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.d.ts +7 -11
  221. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +26 -44
  222. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.js +3 -3
  223. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.d.ts +1 -1
  224. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.js +9 -0
  225. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.d.ts +0 -1
  226. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.js +23 -17
  227. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.d.ts +1 -1
  228. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.js +4 -2
  229. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.d.ts +2 -0
  230. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +26 -5
  231. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.d.ts +3 -1
  232. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +32 -4
  233. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +15 -29
  234. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +10 -7
  235. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAnalyzer.d.ts +12 -0
  236. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.d.ts +3 -1
  237. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +38 -19
  238. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.d.ts +1 -0
  239. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +32 -7
  240. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +5 -4
  241. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +4 -3
  242. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +4 -3
  243. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +1 -0
  244. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +128 -62
  245. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.d.ts +2 -2
  246. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +12 -2
  247. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.d.ts +5 -2
  248. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +68 -22
  249. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +20 -22
  250. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +13 -12
  251. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +20 -19
  252. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.d.ts +1 -1
  253. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +1 -1
  254. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.d.ts +12 -0
  255. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.js +72 -0
  256. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.d.ts +1 -2
  257. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.js +5 -17
  258. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionViewModel.d.ts +0 -53
  259. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionViewModel.js +0 -154
  260. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.d.ts +0 -7
  261. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.js +0 -13
  262. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionTracker.d.ts +0 -25
  263. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessionTracker.js +0 -135
  264. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/localChatSessionsProvider.d.ts +0 -35
  265. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/localChatSessionsProvider.js +0 -216
  266. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup.js +0 -1617
  267. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatCurrentLine.d.ts +0 -44
  268. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatCurrentLine.js +0 -313
  269. /package/vscode/src/vs/workbench/contrib/chat/browser/{media → chatSetup/media}/apple-dark.svg +0 -0
  270. /package/vscode/src/vs/workbench/contrib/chat/browser/{media → chatSetup/media}/apple-light.svg +0 -0
  271. /package/vscode/src/vs/workbench/contrib/chat/browser/{media → chatSetup/media}/github.svg +0 -0
  272. /package/vscode/src/vs/workbench/contrib/chat/browser/{media → chatSetup/media}/google.svg +0 -0
  273. /package/vscode/src/vs/workbench/contrib/chat/browser/{chatStatusItemService.js → chatStatus/chatStatusItemService.js} +0 -0
@@ -4,7 +4,7 @@ import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib
4
4
  import * as chatModelsWidget from './media/chatModelsWidget.css';
5
5
  import { DisposableStore, Disposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
6
6
  import { Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
7
- import { $ as $$1, addDisposableListener, EventType, append, clearNode, getTotalWidth, Dimension } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/dom';
7
+ import { $ as $$1, append, clearNode, getTotalWidth, isMouseEvent, Dimension } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/dom';
8
8
  import { Button } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/button/button';
9
9
  import { ThemeIcon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/themables';
10
10
  import { ILanguageModelsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels.service';
@@ -16,26 +16,26 @@ import { IHoverService } from '@codingame/monaco-vscode-api/vscode/vs/platform/h
16
16
  import { MarkdownString } from '@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent';
17
17
  import { IExtensionService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions.service';
18
18
  import { IContextMenuService } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextview/browser/contextView.service';
19
- import { Action, Separator, toAction } from '@codingame/monaco-vscode-api/vscode/vs/base/common/actions';
19
+ import { Action, Separator, SubmenuAction, toAction } from '@codingame/monaco-vscode-api/vscode/vs/base/common/actions';
20
20
  import { ActionBar } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/actionbar/actionbar';
21
21
  import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
22
- import { isVendorEntry, ChatModelsViewModel, SEARCH_SUGGESTIONS } from './chatModelsViewModel.js';
22
+ import { ChatModelGroup, isVendorEntry, isGroupEntry, ChatModelsViewModel, SEARCH_SUGGESTIONS } from './chatModelsViewModel.js';
23
23
  import { HighlightedLabel } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/highlightedlabel/highlightedLabel';
24
- import { SuggestEnabledInput } from '@codingame/monaco-vscode-3692fc2f-920d-56ed-accd-d988be683cc3-common/vscode/vs/workbench/contrib/codeEditor/browser/suggestEnabledInput/suggestEnabledInput';
24
+ import { SuggestEnabledInput } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/codeEditor/browser/suggestEnabledInput/suggestEnabledInput';
25
25
  import { Delayer } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
26
- import { settingsTextInputBorder } from '@codingame/monaco-vscode-02fe61a6-05e4-5021-8c27-16e910b9182c-common/vscode/vs/workbench/contrib/preferences/common/settingsEditorColorRegistry';
26
+ import { settingsTextInputBorder } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/preferences/common/settingsEditorColorRegistry';
27
27
  import { ChatEntitlement } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/chat/common/chatEntitlementService';
28
28
  import { IChatEntitlementService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/chat/common/chatEntitlementService.service';
29
29
  import { DropdownMenuActionViewItem } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/dropdown/dropdownActionViewItem';
30
30
  import { AnchorAlignment } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/contextview/contextview';
31
31
  import { ToolBar } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/toolbar/toolbar';
32
- import { preferencesClearInputIcon } from '@codingame/monaco-vscode-2808e692-5fb9-54bf-bc21-1d3bff81e651-common/vscode/vs/workbench/contrib/preferences/browser/preferencesIcons';
32
+ import { preferencesClearInputIcon } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/preferences/browser/preferencesIcons';
33
33
  import { ICommandService } from '@codingame/monaco-vscode-api/vscode/vs/platform/commands/common/commands.service';
34
34
  import { IEditorProgressService } from '@codingame/monaco-vscode-api/vscode/vs/platform/progress/common/progress.service';
35
35
  import { IContextKeyService } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service';
36
36
  import { CONTEXT_MODELS_SEARCH_FOCUS } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
37
37
 
38
- var GutterColumnRenderer_1, ModelNameColumnRenderer_1, TokenLimitsColumnRenderer_1, ActionsColumnRenderer_1, ChatModelsWidget_1;
38
+ var ModelNameColumnRenderer_1, MultiplierColumnRenderer_1, TokenLimitsColumnRenderer_1, ActionsColumnRenderer_1, ChatModelsWidget_1;
39
39
  registerCss(chatModelsWidget);
40
40
  const $ = $$1;
41
41
  const HEADER_HEIGHT = 30;
@@ -43,7 +43,7 @@ const VENDOR_ROW_HEIGHT = 30;
43
43
  const MODEL_ROW_HEIGHT = 26;
44
44
  class ModelsFilterAction extends Action {
45
45
  constructor() {
46
- super('workbench.models.filter', ( localize(5303, "Filter")), ThemeIcon.asClassName(Codicon.filter));
46
+ super('workbench.models.filter', ( localize(5370, "Filter")), ThemeIcon.asClassName(Codicon.filter));
47
47
  }
48
48
  async run() {
49
49
  }
@@ -74,6 +74,19 @@ let ModelsSearchFilterDropdownMenuActionViewItem = class ModelsSearchFilterDropd
74
74
  this.searchWidget = searchWidget;
75
75
  this.viewModel = viewModel;
76
76
  }
77
+ createGroupByAction(grouping, label) {
78
+ return {
79
+ id: `groupBy.${grouping}`,
80
+ label,
81
+ class: undefined,
82
+ enabled: true,
83
+ tooltip: ( localize(5371, "Group by {0}", label)),
84
+ checked: this.viewModel.groupBy === grouping,
85
+ run: () => {
86
+ this.viewModel.groupBy = grouping;
87
+ }
88
+ };
89
+ }
77
90
  createProviderAction(vendor, displayName) {
78
91
  const query = `@provider:"${displayName}"`;
79
92
  const currentQuery = this.searchWidget.getValue();
@@ -81,7 +94,7 @@ let ModelsSearchFilterDropdownMenuActionViewItem = class ModelsSearchFilterDropd
81
94
  return {
82
95
  id: `provider-${vendor}`,
83
96
  label: displayName,
84
- tooltip: ( localize(5304, "Filter by {0}", displayName)),
97
+ tooltip: ( localize(5372, "Filter by {0}", displayName)),
85
98
  class: undefined,
86
99
  enabled: true,
87
100
  checked: isChecked,
@@ -95,7 +108,7 @@ let ModelsSearchFilterDropdownMenuActionViewItem = class ModelsSearchFilterDropd
95
108
  return {
96
109
  id: `capability-${capability}`,
97
110
  label,
98
- tooltip: ( localize(5305, "Filter by {0}", label)),
111
+ tooltip: ( localize(5373, "Filter by {0}", label)),
99
112
  class: undefined,
100
113
  enabled: true,
101
114
  checked: isChecked,
@@ -110,7 +123,7 @@ let ModelsSearchFilterDropdownMenuActionViewItem = class ModelsSearchFilterDropd
110
123
  return {
111
124
  id: `visible-${visible}`,
112
125
  label,
113
- tooltip: ( localize(5306, "Filter by {0}", label)),
126
+ tooltip: ( localize(5374, "Filter by {0}", label)),
114
127
  class: undefined,
115
128
  enabled: true,
116
129
  checked: isChecked,
@@ -125,17 +138,22 @@ let ModelsSearchFilterDropdownMenuActionViewItem = class ModelsSearchFilterDropd
125
138
  }
126
139
  getActions() {
127
140
  const actions = [];
128
- actions.push(this.createVisibleAction(true, ( localize(5307, 'Visible'))));
129
- actions.push(this.createVisibleAction(false, ( localize(5308, 'Hidden'))));
141
+ actions.push(this.createVisibleAction(true, ( localize(5375, 'Visible'))));
142
+ actions.push(this.createVisibleAction(false, ( localize(5376, 'Hidden'))));
130
143
  actions.push(( new Separator()));
131
- actions.push(this.createCapabilityAction('tools', ( localize(5309, 'Tools'))), this.createCapabilityAction('vision', ( localize(5310, 'Vision'))), this.createCapabilityAction('agent', ( localize(5311, 'Agent Mode'))));
144
+ actions.push(this.createCapabilityAction('tools', ( localize(5377, 'Tools'))), this.createCapabilityAction('vision', ( localize(5378, 'Vision'))), this.createCapabilityAction('agent', ( localize(5379, 'Agent Mode'))));
132
145
  const configuredVendors = this.viewModel.getConfiguredVendors();
133
146
  if (configuredVendors.length > 1) {
134
147
  actions.push(( new Separator()));
135
148
  actions.push(...( configuredVendors.map(
136
- vendor => this.createProviderAction(vendor.vendorEntry.vendor, vendor.vendorEntry.vendorDisplayName)
149
+ vendor => this.createProviderAction(vendor.vendor, vendor.vendorDisplayName)
137
150
  )));
138
151
  }
152
+ actions.push(( new Separator()));
153
+ const groupByActions = [];
154
+ groupByActions.push(this.createGroupByAction(ChatModelGroup.Vendor, ( localize(5380, 'Provider'))));
155
+ groupByActions.push(this.createGroupByAction(ChatModelGroup.Visibility, ( localize(5381, 'Visibility'))));
156
+ actions.push(( new SubmenuAction('groupBy', ( localize(5382, "Group By")), groupByActions)));
139
157
  return actions;
140
158
  }
141
159
  };
@@ -147,20 +165,24 @@ class Delegate {
147
165
  this.headerRowHeight = HEADER_HEIGHT;
148
166
  }
149
167
  getHeight(element) {
150
- return isVendorEntry(element) ? VENDOR_ROW_HEIGHT : MODEL_ROW_HEIGHT;
168
+ return isVendorEntry(element) || isGroupEntry(element) ? VENDOR_ROW_HEIGHT : MODEL_ROW_HEIGHT;
151
169
  }
152
170
  }
153
171
  class ModelsTableColumnRenderer {
154
172
  renderElement(element, index, templateData) {
155
173
  templateData.elementDisposables.clear();
156
174
  const isVendor = isVendorEntry(element);
175
+ const isGroup = isGroupEntry(element);
157
176
  templateData.container.classList.add('models-table-column');
158
- templateData.container.parentElement.classList.toggle('models-vendor-row', isVendor);
159
- templateData.container.parentElement.classList.toggle('models-model-row', !isVendor);
160
- templateData.container.parentElement.classList.toggle('model-hidden', !isVendor && !element.modelEntry.metadata.isUserSelectable);
177
+ templateData.container.parentElement.classList.toggle('models-vendor-row', isVendor || isGroup);
178
+ templateData.container.parentElement.classList.toggle('models-model-row', !isVendor && !isGroup);
179
+ templateData.container.parentElement.classList.toggle('model-hidden', !isVendor && !isGroup && !element.modelEntry.metadata.isUserSelectable);
161
180
  if (isVendor) {
162
181
  this.renderVendorElement(element, index, templateData);
163
182
  }
183
+ else if (isGroup) {
184
+ this.renderGroupElement(element, index, templateData);
185
+ }
164
186
  else {
165
187
  this.renderModelElement(element, index, templateData);
166
188
  }
@@ -170,17 +192,12 @@ class ModelsTableColumnRenderer {
170
192
  templateData.disposables.dispose();
171
193
  }
172
194
  }
173
- let GutterColumnRenderer = class GutterColumnRenderer extends ModelsTableColumnRenderer {
174
- static { GutterColumnRenderer_1 = this; }
195
+ class GutterColumnRenderer extends ModelsTableColumnRenderer {
175
196
  static { this.TEMPLATE_ID = 'gutter'; }
176
- constructor(languageModelsService) {
197
+ constructor(viewModel) {
177
198
  super();
178
- this.languageModelsService = languageModelsService;
179
- this.templateId = GutterColumnRenderer_1.TEMPLATE_ID;
180
- this._onDidToggleCollapse = ( new Emitter());
181
- this.onDidToggleCollapse = this._onDidToggleCollapse.event;
182
- this._onDidChange = ( new Emitter());
183
- this.onDidChange = this._onDidChange.event;
199
+ this.viewModel = viewModel;
200
+ this.templateId = GutterColumnRenderer.TEMPLATE_ID;
184
201
  }
185
202
  renderTemplate(container) {
186
203
  const disposables = ( new DisposableStore());
@@ -188,7 +205,7 @@ let GutterColumnRenderer = class GutterColumnRenderer extends ModelsTableColumnR
188
205
  container.classList.add('models-gutter-column');
189
206
  const actionBar = disposables.add(( new ActionBar(container)));
190
207
  return {
191
- rowContainer: container.parentElement,
208
+ listRowElement: container.parentElement?.parentElement ?? null,
192
209
  container,
193
210
  actionBar,
194
211
  disposables,
@@ -200,45 +217,40 @@ let GutterColumnRenderer = class GutterColumnRenderer extends ModelsTableColumnR
200
217
  super.renderElement(entry, index, templateData);
201
218
  }
202
219
  renderVendorElement(entry, index, templateData) {
203
- templateData.actionBar.push(this.createToggleCollapseAction(entry), { icon: true, label: false });
204
- if (templateData.rowContainer) {
205
- templateData.elementDisposables.add(addDisposableListener(templateData.rowContainer, EventType.CLICK, () => this._onDidToggleCollapse.fire(entry.vendorEntry.vendor)));
206
- }
220
+ this.renderCollapsableElement(entry, templateData);
207
221
  }
208
- createToggleCollapseAction(entry) {
209
- const label = entry.collapsed ? ( localize(5312, 'Expand')) : ( localize(5313, 'Collapse'));
210
- return {
222
+ renderGroupElement(entry, index, templateData) {
223
+ this.renderCollapsableElement(entry, templateData);
224
+ }
225
+ renderCollapsableElement(entry, templateData) {
226
+ if (templateData.listRowElement) {
227
+ templateData.listRowElement.setAttribute('aria-expanded', entry.collapsed ? 'false' : 'true');
228
+ }
229
+ const label = entry.collapsed ? ( localize(5383, 'Expand')) : ( localize(5384, 'Collapse'));
230
+ const toggleCollapseAction = {
211
231
  id: 'toggleCollapse',
212
232
  label,
213
233
  tooltip: label,
214
234
  enabled: true,
215
235
  class: ThemeIcon.asClassName(entry.collapsed ? Codicon.chevronRight : Codicon.chevronDown),
216
- run: () => {
217
- this._onDidToggleCollapse.fire(entry.vendorEntry.vendor);
218
- }
236
+ run: () => this.viewModel.toggleCollapsed(entry)
219
237
  };
238
+ templateData.actionBar.push(toggleCollapseAction, { icon: true, label: false });
220
239
  }
221
240
  renderModelElement(entry, index, templateData) {
222
241
  const { modelEntry } = entry;
223
242
  const isVisible = modelEntry.metadata.isUserSelectable ?? false;
224
243
  const toggleVisibilityAction = toAction({
225
244
  id: 'toggleVisibility',
226
- label: isVisible ? ( localize(5314, 'Hide')) : ( localize(5315, 'Show')),
227
- class: `model-visibility-toggle ${isVisible ? `${ThemeIcon.asClassName(Codicon.eyeClosed)} model-visible` : `${ThemeIcon.asClassName(Codicon.eye)} model-hidden`}`,
228
- tooltip: isVisible ? ( localize(5316, 'Hide in the chat model picker')) : ( localize(5317, 'Show in the chat model picker')),
245
+ label: isVisible ? ( localize(5385, 'Hide')) : ( localize(5386, 'Show')),
246
+ class: `model-visibility-toggle ${isVisible ? `${ThemeIcon.asClassName(Codicon.eye)} model-visible` : `${ThemeIcon.asClassName(Codicon.eyeClosed)} model-hidden`}`,
247
+ tooltip: isVisible ? ( localize(5387, 'Hide in the chat model picker')) : ( localize(5388, 'Show in the chat model picker')),
229
248
  checked: !isVisible,
230
- run: async () => {
231
- const newVisibility = !isVisible;
232
- this.languageModelsService.updateModelPickerPreference(modelEntry.identifier, newVisibility);
233
- this._onDidChange.fire();
234
- }
249
+ run: async () => this.viewModel.toggleVisibility(entry)
235
250
  });
236
251
  templateData.actionBar.push(toggleVisibilityAction, { icon: true, label: false });
237
252
  }
238
- };
239
- GutterColumnRenderer = GutterColumnRenderer_1 = ( __decorate([
240
- ( __param(0, ILanguageModelsService))
241
- ], GutterColumnRenderer));
253
+ }
242
254
  let ModelNameColumnRenderer = class ModelNameColumnRenderer extends ModelsTableColumnRenderer {
243
255
  static { ModelNameColumnRenderer_1 = this; }
244
256
  static { this.TEMPLATE_ID = 'modelName'; }
@@ -271,6 +283,9 @@ let ModelNameColumnRenderer = class ModelNameColumnRenderer extends ModelsTableC
271
283
  renderVendorElement(entry, index, templateData) {
272
284
  templateData.nameLabel.set(entry.vendorEntry.vendorDisplayName, undefined);
273
285
  }
286
+ renderGroupElement(entry, index, templateData) {
287
+ templateData.nameLabel.set(entry.label, undefined);
288
+ }
274
289
  renderModelElement(entry, index, templateData) {
275
290
  const { modelEntry, modelNameMatches } = entry;
276
291
  templateData.statusIcon.className = 'model-status-icon';
@@ -299,7 +314,7 @@ let ModelNameColumnRenderer = class ModelNameColumnRenderer extends ModelsTableC
299
314
  markdown.appendText(`\n`);
300
315
  }
301
316
  if (!entry.modelEntry.metadata.isUserSelectable) {
302
- markdown.appendMarkdown(`\n\n${( localize(5318, 'This model is hidden in the chat model picker'))}`);
317
+ markdown.appendMarkdown(`\n\n${( localize(5389, 'This model is hidden in the chat model picker'))}`);
303
318
  }
304
319
  templateData.elementDisposables.add(this.hoverService.setupDelayedHoverAtMouse(templateData.container, () => ({
305
320
  content: markdown,
@@ -313,12 +328,14 @@ let ModelNameColumnRenderer = class ModelNameColumnRenderer extends ModelsTableC
313
328
  ModelNameColumnRenderer = ModelNameColumnRenderer_1 = ( __decorate([
314
329
  ( __param(0, IHoverService))
315
330
  ], ModelNameColumnRenderer));
316
- class MultiplierColumnRenderer extends ModelsTableColumnRenderer {
317
- constructor() {
318
- super(...arguments);
319
- this.templateId = MultiplierColumnRenderer.TEMPLATE_ID;
320
- }
331
+ let MultiplierColumnRenderer = class MultiplierColumnRenderer extends ModelsTableColumnRenderer {
332
+ static { MultiplierColumnRenderer_1 = this; }
321
333
  static { this.TEMPLATE_ID = 'multiplier'; }
334
+ constructor(hoverService) {
335
+ super();
336
+ this.hoverService = hoverService;
337
+ this.templateId = MultiplierColumnRenderer_1.TEMPLATE_ID;
338
+ }
322
339
  renderTemplate(container) {
323
340
  const disposables = ( new DisposableStore());
324
341
  const elementDisposables = ( new DisposableStore());
@@ -333,10 +350,30 @@ class MultiplierColumnRenderer extends ModelsTableColumnRenderer {
333
350
  renderVendorElement(entry, index, templateData) {
334
351
  templateData.multiplierElement.textContent = '';
335
352
  }
353
+ renderGroupElement(entry, index, templateData) {
354
+ templateData.multiplierElement.textContent = '';
355
+ }
336
356
  renderModelElement(entry, index, templateData) {
337
- templateData.multiplierElement.textContent = (entry.modelEntry.metadata.detail && entry.modelEntry.metadata.detail.trim().toLowerCase() !== entry.modelEntry.vendor.trim().toLowerCase()) ? entry.modelEntry.metadata.detail : '-';
357
+ const multiplierText = (entry.modelEntry.metadata.detail && entry.modelEntry.metadata.detail.trim().toLowerCase() !== entry.modelEntry.vendor.trim().toLowerCase()) ? entry.modelEntry.metadata.detail : '-';
358
+ templateData.multiplierElement.textContent = multiplierText;
359
+ if (multiplierText !== '-') {
360
+ templateData.elementDisposables.add(this.hoverService.setupDelayedHoverAtMouse(templateData.container, () => ({
361
+ content: ( localize(
362
+ 5390,
363
+ "Every chat message counts {0} towards your premium model request quota",
364
+ multiplierText
365
+ )),
366
+ appearance: {
367
+ compact: true,
368
+ skipFadeInAnimation: true
369
+ }
370
+ })));
371
+ }
338
372
  }
339
- }
373
+ };
374
+ MultiplierColumnRenderer = MultiplierColumnRenderer_1 = ( __decorate([
375
+ ( __param(0, IHoverService))
376
+ ], MultiplierColumnRenderer));
340
377
  let TokenLimitsColumnRenderer = class TokenLimitsColumnRenderer extends ModelsTableColumnRenderer {
341
378
  static { TokenLimitsColumnRenderer_1 = this; }
342
379
  static { this.TEMPLATE_ID = 'tokenLimits'; }
@@ -362,18 +399,20 @@ let TokenLimitsColumnRenderer = class TokenLimitsColumnRenderer extends ModelsTa
362
399
  }
363
400
  renderVendorElement(entry, index, templateData) {
364
401
  }
402
+ renderGroupElement(entry, index, templateData) {
403
+ }
365
404
  renderModelElement(entry, index, templateData) {
366
405
  const { modelEntry } = entry;
367
406
  const markdown = ( new MarkdownString('', { isTrusted: true, supportThemeIcons: true }));
368
407
  if (modelEntry.metadata.maxInputTokens || modelEntry.metadata.maxOutputTokens) {
369
408
  let addSeparator = false;
370
- markdown.appendMarkdown(`${( localize(5319, 'Context Size'))}: `);
409
+ markdown.appendMarkdown(`${( localize(5391, 'Context Size'))}: `);
371
410
  if (modelEntry.metadata.maxInputTokens) {
372
411
  const inputDiv = append(templateData.tokenLimitsElement, $('.token-limit-item'));
373
412
  append(inputDiv, $('span.codicon.codicon-arrow-down'));
374
413
  const inputText = append(inputDiv, $('span'));
375
414
  inputText.textContent = formatTokenCount(modelEntry.metadata.maxInputTokens);
376
- markdown.appendMarkdown(`$(arrow-down) ${modelEntry.metadata.maxInputTokens} (${( localize(5320, 'Input'))})`);
415
+ markdown.appendMarkdown(`$(arrow-down) ${modelEntry.metadata.maxInputTokens} (${( localize(5392, 'Input'))})`);
377
416
  addSeparator = true;
378
417
  }
379
418
  if (modelEntry.metadata.maxOutputTokens) {
@@ -384,7 +423,7 @@ let TokenLimitsColumnRenderer = class TokenLimitsColumnRenderer extends ModelsTa
384
423
  if (addSeparator) {
385
424
  markdown.appendText(` | `);
386
425
  }
387
- markdown.appendMarkdown(`$(arrow-up) ${modelEntry.metadata.maxOutputTokens} (${( localize(5321, 'Output'))})`);
426
+ markdown.appendMarkdown(`$(arrow-up) ${modelEntry.metadata.maxOutputTokens} (${( localize(5393, 'Output'))})`);
388
427
  }
389
428
  }
390
429
  templateData.elementDisposables.add(this.hoverService.setupDelayedHoverAtMouse(templateData.container, () => ({
@@ -410,7 +449,8 @@ class CapabilitiesColumnRenderer extends ModelsTableColumnRenderer {
410
449
  renderTemplate(container) {
411
450
  const disposables = ( new DisposableStore());
412
451
  const elementDisposables = ( new DisposableStore());
413
- const metadataRow = append(container, $('.model-metadata'));
452
+ container.classList.add('model-capability-column');
453
+ const metadataRow = append(container, $('.model-capabilities'));
414
454
  return {
415
455
  container,
416
456
  metadataRow,
@@ -424,13 +464,15 @@ class CapabilitiesColumnRenderer extends ModelsTableColumnRenderer {
424
464
  }
425
465
  renderVendorElement(entry, index, templateData) {
426
466
  }
467
+ renderGroupElement(entry, index, templateData) {
468
+ }
427
469
  renderModelElement(entry, index, templateData) {
428
470
  const { modelEntry, capabilityMatches } = entry;
429
471
  if (modelEntry.metadata.capabilities?.toolCalling) {
430
- templateData.elementDisposables.add(this.createCapabilityButton(templateData.metadataRow, capabilityMatches?.includes('toolCalling') || false, ( localize(5322, 'Tools')), 'tools'));
472
+ templateData.elementDisposables.add(this.createCapabilityButton(templateData.metadataRow, capabilityMatches?.includes('toolCalling') || false, ( localize(5394, 'Tools')), 'tools'));
431
473
  }
432
474
  if (modelEntry.metadata.capabilities?.vision) {
433
- templateData.elementDisposables.add(this.createCapabilityButton(templateData.metadataRow, capabilityMatches?.includes('vision') || false, ( localize(5323, 'Vision')), 'vision'));
475
+ templateData.elementDisposables.add(this.createCapabilityButton(templateData.metadataRow, capabilityMatches?.includes('vision') || false, ( localize(5395, 'Vision')), 'vision'));
434
476
  }
435
477
  }
436
478
  createCapabilityButton(container, isActive, label, capability) {
@@ -447,12 +489,11 @@ class CapabilitiesColumnRenderer extends ModelsTableColumnRenderer {
447
489
  let ActionsColumnRenderer = class ActionsColumnRenderer extends ModelsTableColumnRenderer {
448
490
  static { ActionsColumnRenderer_1 = this; }
449
491
  static { this.TEMPLATE_ID = 'actions'; }
450
- constructor(commandService) {
492
+ constructor(viewModel, commandService) {
451
493
  super();
494
+ this.viewModel = viewModel;
452
495
  this.commandService = commandService;
453
496
  this.templateId = ActionsColumnRenderer_1.TEMPLATE_ID;
454
- this._onDidChange = ( new Emitter());
455
- this.onDidChange = this._onDidChange.event;
456
497
  }
457
498
  renderTemplate(container) {
458
499
  const disposables = ( new DisposableStore());
@@ -475,22 +516,51 @@ let ActionsColumnRenderer = class ActionsColumnRenderer extends ModelsTableColum
475
516
  const { vendorEntry } = entry;
476
517
  const action = toAction({
477
518
  id: 'manageVendor',
478
- label: ( localize(5324, 'Manage {0}...', entry.vendorEntry.vendorDisplayName)),
519
+ label: ( localize(5396, 'Manage {0}...', entry.vendorEntry.vendorDisplayName)),
479
520
  class: ThemeIcon.asClassName(Codicon.gear),
480
521
  run: async () => {
481
522
  await this.commandService.executeCommand(vendorEntry.managementCommand, vendorEntry.vendor);
482
- this._onDidChange.fire();
523
+ this.viewModel.refresh();
483
524
  }
484
525
  });
485
526
  templateData.actionBar.push(action, { icon: true, label: false });
486
527
  }
487
528
  }
529
+ renderGroupElement(entry, index, templateData) {
530
+ }
488
531
  renderModelElement(entry, index, templateData) {
489
532
  }
490
533
  };
491
534
  ActionsColumnRenderer = ActionsColumnRenderer_1 = ( __decorate([
492
- ( __param(0, ICommandService))
535
+ ( __param(1, ICommandService))
493
536
  ], ActionsColumnRenderer));
537
+ class ProviderColumnRenderer extends ModelsTableColumnRenderer {
538
+ constructor() {
539
+ super(...arguments);
540
+ this.templateId = ProviderColumnRenderer.TEMPLATE_ID;
541
+ }
542
+ static { this.TEMPLATE_ID = 'provider'; }
543
+ renderTemplate(container) {
544
+ const disposables = ( new DisposableStore());
545
+ const elementDisposables = ( new DisposableStore());
546
+ const providerElement = append(container, $('.model-provider'));
547
+ return {
548
+ container,
549
+ providerElement,
550
+ disposables,
551
+ elementDisposables
552
+ };
553
+ }
554
+ renderVendorElement(entry, index, templateData) {
555
+ templateData.providerElement.textContent = '';
556
+ }
557
+ renderGroupElement(entry, index, templateData) {
558
+ templateData.providerElement.textContent = '';
559
+ }
560
+ renderModelElement(entry, index, templateData) {
561
+ templateData.providerElement.textContent = entry.modelEntry.vendorDisplayName;
562
+ }
563
+ }
494
564
  function formatTokenCount(count) {
495
565
  if (count >= 1000000) {
496
566
  return `${(count / 1000000).toFixed(1)}M`;
@@ -513,30 +583,35 @@ let ChatModelsWidget = class ChatModelsWidget extends Disposable {
513
583
  this.editorProgressService = editorProgressService;
514
584
  this.commandService = commandService;
515
585
  this.dropdownActions = [];
586
+ this.tableDisposables = this._register(( new DisposableStore()));
516
587
  this.searchFocusContextKey = CONTEXT_MODELS_SEARCH_FOCUS.bindTo(contextKeyService);
517
- this.delayedFiltering = ( new Delayer(300));
588
+ this.delayedFiltering = ( new Delayer(200));
518
589
  this.viewModel = this._register(this.instantiationService.createInstance(ChatModelsViewModel));
519
590
  this.element = $$1('.models-widget');
520
591
  this.create(this.element);
521
- const loadingPromise = this.extensionService.whenInstalledExtensionsRegistered().then(async () => {
522
- await this.viewModel.resolve();
523
- this.refreshTable();
524
- });
592
+ const loadingPromise = this.extensionService.whenInstalledExtensionsRegistered().then(() => this.viewModel.refresh());
525
593
  this.editorProgressService.showWhile(loadingPromise, 300);
526
- this._register(this.viewModel.onDidChangeModelEntries(() => this.refreshTable()));
527
594
  }
528
595
  create(container) {
529
596
  const searchAndButtonContainer = append(container, $('.models-search-and-button-container'));
530
- const placeholder = ( localize(5325, "Type to search..."));
597
+ const placeholder = ( localize(5397, "Type to search..."));
531
598
  const searchContainer = append(searchAndButtonContainer, $('.models-search-container'));
532
599
  this.searchWidget = this._register(this.instantiationService.createInstance(SuggestEnabledInput, 'chatModelsWidget.searchbox', searchContainer, {
533
600
  triggerCharacters: ['@', ':'],
534
601
  provideResults: (query) => {
602
+ const providerSuggestions = ( this.viewModel.getVendors().map(v => `@provider:"${v.displayName}"`));
603
+ const allSuggestions = [
604
+ ...providerSuggestions,
605
+ ...SEARCH_SUGGESTIONS.CAPABILITIES,
606
+ ...SEARCH_SUGGESTIONS.VISIBILITY,
607
+ ];
608
+ if (!query.trim()) {
609
+ return allSuggestions;
610
+ }
535
611
  const queryParts = query.split(/\s/g);
536
612
  const lastPart = queryParts[queryParts.length - 1];
537
613
  if (lastPart.startsWith('@provider:')) {
538
- const vendors = this.viewModel.getVendors();
539
- return ( vendors.map(v => `@provider:"${v.displayName}"`));
614
+ return providerSuggestions;
540
615
  }
541
616
  else if (lastPart.startsWith('@capability:')) {
542
617
  return SEARCH_SUGGESTIONS.CAPABILITIES;
@@ -545,7 +620,7 @@ let ChatModelsWidget = class ChatModelsWidget extends Disposable {
545
620
  return SEARCH_SUGGESTIONS.VISIBILITY;
546
621
  }
547
622
  else if (lastPart.startsWith('@')) {
548
- return SEARCH_SUGGESTIONS.FILTER_TYPES;
623
+ return allSuggestions;
549
624
  }
550
625
  return [];
551
626
  }
@@ -556,17 +631,22 @@ let ChatModelsWidget = class ChatModelsWidget extends Disposable {
556
631
  },
557
632
  focusContextKey: this.searchFocusContextKey,
558
633
  }));
559
- this._register(this.searchWidget.onInputDidChange(() => this.filterModels()));
560
634
  const filterAction = this._register(( new ModelsFilterAction()));
561
- const clearSearchAction = this._register(( new Action('workbench.models.clearSearch', ( localize(5326, "Clear Search")), ThemeIcon.asClassName(preferencesClearInputIcon), false, () => {
635
+ const clearSearchAction = this._register(( new Action('workbench.models.clearSearch', ( localize(5398, "Clear Search")), ThemeIcon.asClassName(preferencesClearInputIcon), false, () => {
562
636
  this.searchWidget.setValue('');
563
637
  this.searchWidget.focus();
564
638
  })));
639
+ const collapseAllAction = this._register(( new Action('workbench.models.collapseAll', ( localize(5399, "Collapse All")), ThemeIcon.asClassName(Codicon.collapseAll), false, () => {
640
+ this.viewModel.collapseAll();
641
+ })));
642
+ collapseAllAction.enabled = ( this.viewModel.viewModelEntries.some(e => isVendorEntry(e) || isGroupEntry(e)));
643
+ this._register(this.viewModel.onDidChange(() => collapseAllAction.enabled = ( this.viewModel.viewModelEntries.some(e => isVendorEntry(e) || isGroupEntry(e)))));
565
644
  this._register(this.searchWidget.onInputDidChange(() => {
566
645
  clearSearchAction.enabled = !!this.searchWidget.getValue();
646
+ this.filterModels();
567
647
  }));
568
648
  this.searchActionsContainer = append(searchContainer, $('.models-search-actions'));
569
- const actions = [clearSearchAction, filterAction];
649
+ const actions = [clearSearchAction, collapseAllAction, filterAction];
570
650
  const toolBar = this._register(( new ToolBar(this.searchActionsContainer, this.contextMenuService, {
571
651
  actionViewItemProvider: (action, options) => {
572
652
  if (action.id === filterAction.id) {
@@ -584,7 +664,7 @@ let ChatModelsWidget = class ChatModelsWidget extends Disposable {
584
664
  supportIcons: true,
585
665
  };
586
666
  this.addButton = this._register(( new Button(this.addButtonContainer, buttonOptions)));
587
- this.addButton.label = `$(${Codicon.add.id}) ${( localize(5327, 'Add Models...'))}`;
667
+ this.addButton.label = `$(${Codicon.add.id}) ${( localize(5400, 'Add Models...'))}`;
588
668
  this.addButton.element.classList.add('models-add-model-button');
589
669
  this.addButton.enabled = false;
590
670
  this._register(this.addButton.onDidClick((e) => {
@@ -596,33 +676,27 @@ let ChatModelsWidget = class ChatModelsWidget extends Disposable {
596
676
  }
597
677
  }));
598
678
  this.tableContainer = append(container, $('.models-table-container'));
599
- const gutterColumnRenderer = this.instantiationService.createInstance(GutterColumnRenderer);
679
+ this.createTable();
680
+ this._register(this.viewModel.onDidChangeGrouping(() => this.createTable()));
681
+ }
682
+ createTable() {
683
+ this.tableDisposables.clear();
684
+ clearNode(this.tableContainer);
685
+ const gutterColumnRenderer = this.instantiationService.createInstance(GutterColumnRenderer, this.viewModel);
600
686
  const modelNameColumnRenderer = this.instantiationService.createInstance(ModelNameColumnRenderer);
601
687
  const costColumnRenderer = this.instantiationService.createInstance(MultiplierColumnRenderer);
602
688
  const tokenLimitsColumnRenderer = this.instantiationService.createInstance(TokenLimitsColumnRenderer);
603
689
  const capabilitiesColumnRenderer = this.instantiationService.createInstance(CapabilitiesColumnRenderer);
604
- const actionsColumnRenderer = this.instantiationService.createInstance(ActionsColumnRenderer);
605
- this._register(gutterColumnRenderer.onDidToggleCollapse(vendorId => {
606
- this.viewModel.toggleVendorCollapsed(vendorId);
607
- }));
608
- this._register(gutterColumnRenderer.onDidChange(e => {
609
- this.viewModel.resolve().then(() => {
610
- this.refreshTable();
611
- });
612
- }));
613
- this._register(actionsColumnRenderer.onDidChange(e => {
614
- this.viewModel.resolve().then(() => {
615
- this.refreshTable();
616
- });
617
- }));
618
- this._register(capabilitiesColumnRenderer.onDidClickCapability(capability => {
690
+ const actionsColumnRenderer = this.instantiationService.createInstance(ActionsColumnRenderer, this.viewModel);
691
+ const providerColumnRenderer = this.instantiationService.createInstance(ProviderColumnRenderer);
692
+ this.tableDisposables.add(capabilitiesColumnRenderer.onDidClickCapability(capability => {
619
693
  const currentQuery = this.searchWidget.getValue();
620
694
  const query = `@capability:${capability}`;
621
695
  const newQuery = toggleFilter(currentQuery, query);
622
696
  this.searchWidget.setValue(newQuery);
623
697
  this.searchWidget.focus();
624
698
  }));
625
- this.table = this._register(this.instantiationService.createInstance(WorkbenchTable, 'ModelsWidget', this.tableContainer, ( new Delegate()), [
699
+ const columns = [
626
700
  {
627
701
  label: '',
628
702
  tooltip: '',
@@ -633,76 +707,119 @@ let ChatModelsWidget = class ChatModelsWidget extends Disposable {
633
707
  project(row) { return row; }
634
708
  },
635
709
  {
636
- label: ( localize(5328, 'Name')),
710
+ label: ( localize(5401, 'Name')),
637
711
  tooltip: '',
638
- weight: 0.40,
712
+ weight: 0.35,
639
713
  minimumWidth: 200,
640
714
  templateId: ModelNameColumnRenderer.TEMPLATE_ID,
641
715
  project(row) { return row; }
642
- },
643
- {
644
- label: ( localize(5329, 'Capabilities')),
645
- tooltip: '',
646
- weight: 0.30,
647
- minimumWidth: 180,
648
- templateId: CapabilitiesColumnRenderer.TEMPLATE_ID,
649
- project(row) { return row; }
650
- },
651
- {
652
- label: ( localize(5330, 'Context Size')),
653
- tooltip: '',
654
- weight: 0.1,
655
- minimumWidth: 140,
656
- templateId: TokenLimitsColumnRenderer.TEMPLATE_ID,
657
- project(row) { return row; }
658
- },
659
- {
660
- label: ( localize(5331, 'Multiplier')),
661
- tooltip: '',
662
- weight: 0.1,
663
- minimumWidth: 60,
664
- templateId: MultiplierColumnRenderer.TEMPLATE_ID,
665
- project(row) { return row; }
666
- },
667
- {
668
- label: '',
716
+ }
717
+ ];
718
+ if (this.viewModel.groupBy === ChatModelGroup.Visibility) {
719
+ columns.push({
720
+ label: ( localize(5402, 'Provider')),
669
721
  tooltip: '',
670
- weight: 0.05,
671
- minimumWidth: 64,
672
- maximumWidth: 64,
673
- templateId: ActionsColumnRenderer.TEMPLATE_ID,
722
+ weight: 0.15,
723
+ minimumWidth: 100,
724
+ templateId: ProviderColumnRenderer.TEMPLATE_ID,
674
725
  project(row) { return row; }
675
- },
676
- ], [
726
+ });
727
+ }
728
+ columns.push({
729
+ label: ( localize(5403, 'Context Size')),
730
+ tooltip: '',
731
+ weight: 0.1,
732
+ minimumWidth: 140,
733
+ templateId: TokenLimitsColumnRenderer.TEMPLATE_ID,
734
+ project(row) { return row; }
735
+ }, {
736
+ label: ( localize(5404, 'Capabilities')),
737
+ tooltip: '',
738
+ weight: 0.25,
739
+ minimumWidth: 180,
740
+ templateId: CapabilitiesColumnRenderer.TEMPLATE_ID,
741
+ project(row) { return row; }
742
+ }, {
743
+ label: ( localize(5405, 'Multiplier')),
744
+ tooltip: '',
745
+ weight: 0.05,
746
+ minimumWidth: 60,
747
+ templateId: MultiplierColumnRenderer.TEMPLATE_ID,
748
+ project(row) { return row; }
749
+ }, {
750
+ label: '',
751
+ tooltip: '',
752
+ weight: 0.05,
753
+ minimumWidth: 64,
754
+ maximumWidth: 64,
755
+ templateId: ActionsColumnRenderer.TEMPLATE_ID,
756
+ project(row) { return row; }
757
+ });
758
+ this.table = this.tableDisposables.add(this.instantiationService.createInstance(WorkbenchTable, 'ModelsWidget', this.tableContainer, ( new Delegate()), columns, [
677
759
  gutterColumnRenderer,
678
760
  modelNameColumnRenderer,
679
761
  costColumnRenderer,
680
762
  tokenLimitsColumnRenderer,
681
763
  capabilitiesColumnRenderer,
682
764
  actionsColumnRenderer,
765
+ providerColumnRenderer
683
766
  ], {
684
767
  identityProvider: { getId: (e) => e.id },
685
768
  horizontalScrolling: false,
686
769
  accessibilityProvider: {
687
770
  getAriaLabel: (e) => {
688
771
  if (isVendorEntry(e)) {
689
- return localize(5332, '{0} provider', e.vendorEntry.vendorDisplayName);
772
+ return localize(5406, '{0} Models', e.vendorEntry.vendorDisplayName);
773
+ }
774
+ else if (isGroupEntry(e)) {
775
+ return e.id === 'visible' ? ( localize(5407, 'Visible Models')) : ( localize(5408, 'Hidden Models'));
690
776
  }
691
- return localize(
692
- 5333,
777
+ const ariaLabels = [];
778
+ ariaLabels.push(( localize(
779
+ 5409,
693
780
  '{0} from {1}',
694
781
  e.modelEntry.metadata.name,
695
782
  e.modelEntry.vendorDisplayName
696
- );
783
+ )));
784
+ if (e.modelEntry.metadata.maxInputTokens && e.modelEntry.metadata.maxOutputTokens) {
785
+ ariaLabels.push(( localize(
786
+ 5410,
787
+ 'Context size: {0} input tokens and {1} output tokens',
788
+ formatTokenCount(e.modelEntry.metadata.maxInputTokens),
789
+ formatTokenCount(e.modelEntry.metadata.maxOutputTokens)
790
+ )));
791
+ }
792
+ if (e.modelEntry.metadata.capabilities) {
793
+ ariaLabels.push(( localize(
794
+ 5411,
795
+ 'Capabilities: {0}',
796
+ ( Object.keys(e.modelEntry.metadata.capabilities)).join(', ')
797
+ )));
798
+ }
799
+ const multiplierText = (e.modelEntry.metadata.detail && e.modelEntry.metadata.detail.trim().toLowerCase() !== e.modelEntry.vendor.trim().toLowerCase()) ? e.modelEntry.metadata.detail : '-';
800
+ if (multiplierText !== '-') {
801
+ ariaLabels.push(( localize(
802
+ 5390,
803
+ "Every chat message counts {0} towards your premium model request quota",
804
+ multiplierText
805
+ )));
806
+ }
807
+ if (e.modelEntry.metadata.isUserSelectable) {
808
+ ariaLabels.push(( localize(5412, 'This model is visible in the chat model picker')));
809
+ }
810
+ else {
811
+ ariaLabels.push(( localize(5413, 'This model is hidden in the chat model picker')));
812
+ }
813
+ return ariaLabels.join('. ');
697
814
  },
698
- getWidgetAriaLabel: () => ( localize(5334, 'Language Models'))
815
+ getWidgetAriaLabel: () => ( localize(5414, 'Language Models'))
699
816
  },
700
817
  multipleSelectionSupport: false,
701
818
  setRowLineHeight: false,
702
- openOnSingleClick: false,
819
+ openOnSingleClick: true,
703
820
  alwaysConsumeMouseWheel: false,
704
821
  }));
705
- this._register(this.table.onContextMenu(e => {
822
+ this.tableDisposables.add(this.table.onContextMenu(e => {
706
823
  if (!e.element) {
707
824
  return;
708
825
  }
@@ -711,11 +828,10 @@ let ChatModelsWidget = class ChatModelsWidget extends Disposable {
711
828
  const actions = [
712
829
  toAction({
713
830
  id: 'manageVendor',
714
- label: ( localize(5324, 'Manage {0}...', entry.vendorEntry.vendorDisplayName)),
831
+ label: ( localize(5396, 'Manage {0}...', entry.vendorEntry.vendorDisplayName)),
715
832
  run: async () => {
716
833
  await this.commandService.executeCommand(entry.vendorEntry.managementCommand, entry.vendorEntry.vendor);
717
- await this.viewModel.resolve();
718
- this.refreshTable();
834
+ await this.viewModel.refresh();
719
835
  }
720
836
  })
721
837
  ];
@@ -725,31 +841,54 @@ let ChatModelsWidget = class ChatModelsWidget extends Disposable {
725
841
  });
726
842
  }
727
843
  }));
844
+ this.table.splice(0, this.table.length, this.viewModel.viewModelEntries);
845
+ this.tableDisposables.add(this.viewModel.onDidChange(({ at, removed, added }) => {
846
+ this.table.splice(at, removed, added);
847
+ if (this.viewModel.selectedEntry) {
848
+ const selectedEntryIndex = this.viewModel.viewModelEntries.indexOf(this.viewModel.selectedEntry);
849
+ this.table.setFocus([selectedEntryIndex]);
850
+ this.table.setSelection([selectedEntryIndex]);
851
+ }
852
+ const vendors = this.viewModel.getVendors();
853
+ const configuredVendors = ( new Set(( this.viewModel.getConfiguredVendors().map(cv => cv.vendor))));
854
+ const vendorsWithoutModels = vendors.filter(v => !( configuredVendors.has(v.vendor)));
855
+ const hasPlan = this.chatEntitlementService.entitlement !== ChatEntitlement.Unknown && this.chatEntitlementService.entitlement !== ChatEntitlement.Available;
856
+ this.addButton.enabled = hasPlan && vendorsWithoutModels.length > 0;
857
+ this.dropdownActions = ( vendorsWithoutModels.map(vendor => toAction({
858
+ id: `enable-${vendor.vendor}`,
859
+ label: vendor.displayName,
860
+ run: async () => {
861
+ await this.enableProvider(vendor.vendor);
862
+ }
863
+ })));
864
+ }));
865
+ this.tableDisposables.add(this.table.onDidOpen(async ({ element, browserEvent }) => {
866
+ if (!element) {
867
+ return;
868
+ }
869
+ if (isVendorEntry(element) || isGroupEntry(element)) {
870
+ this.viewModel.toggleCollapsed(element);
871
+ }
872
+ else if (!isMouseEvent(browserEvent) || browserEvent.detail === 2) {
873
+ this.viewModel.toggleVisibility(element);
874
+ }
875
+ }));
876
+ this.tableDisposables.add(this.table.onDidChangeSelection(e => this.viewModel.selectedEntry = e.elements[0]));
877
+ this.tableDisposables.add(this.table.onDidBlur(() => {
878
+ if (this.viewModel.shouldRefilter()) {
879
+ this.viewModel.filter(this.searchWidget.getValue());
880
+ }
881
+ }));
882
+ this.layout(this.element.clientHeight, this.element.clientWidth);
728
883
  }
729
884
  filterModels() {
730
- this.delayedFiltering.trigger(() => this.refreshTable());
731
- }
732
- async refreshTable() {
733
- const searchValue = this.searchWidget.getValue();
734
- const modelItems = this.viewModel.fetch(searchValue);
735
- const vendors = this.viewModel.getVendors();
736
- const configuredVendors = ( new Set(( this.viewModel.getConfiguredVendors().map(cv => cv.vendorEntry.vendor))));
737
- const vendorsWithoutModels = vendors.filter(v => !( configuredVendors.has(v.vendor)));
738
- this.table.splice(0, this.table.length, modelItems);
739
- const hasPlan = this.chatEntitlementService.entitlement !== ChatEntitlement.Unknown && this.chatEntitlementService.entitlement !== ChatEntitlement.Available;
740
- this.addButton.enabled = hasPlan && vendorsWithoutModels.length > 0;
741
- this.dropdownActions = ( vendorsWithoutModels.map(vendor => toAction({
742
- id: `enable-${vendor.vendor}`,
743
- label: vendor.displayName,
744
- run: async () => {
745
- await this.enableProvider(vendor.vendor);
746
- }
747
- })));
885
+ this.delayedFiltering.trigger(() => {
886
+ this.viewModel.filter(this.searchWidget.getValue());
887
+ });
748
888
  }
749
889
  async enableProvider(vendorId) {
750
890
  await this.languageModelsService.selectLanguageModels({ vendor: vendorId }, true);
751
- await this.viewModel.resolve();
752
- this.refreshTable();
891
+ await this.viewModel.refresh();
753
892
  }
754
893
  layout(height, width) {
755
894
  width = width - 24;
@@ -768,9 +907,10 @@ let ChatModelsWidget = class ChatModelsWidget extends Disposable {
768
907
  clearSearch() {
769
908
  this.searchWidget.setValue('');
770
909
  }
771
- async refresh() {
772
- const refreshPromise = this.viewModel.resolve().then(() => this.refreshTable());
773
- await this.editorProgressService.showWhile(refreshPromise, 300);
910
+ render() {
911
+ if (this.viewModel.shouldRefilter()) {
912
+ this.viewModel.filter(this.searchWidget.getValue());
913
+ }
774
914
  }
775
915
  };
776
916
  ChatModelsWidget = ChatModelsWidget_1 = ( __decorate([