@codingame/monaco-vscode-chat-service-override 25.1.2 → 26.0.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 (334) hide show
  1. package/index.js +24 -3
  2. package/package.json +5 -5
  3. package/vscode/src/vs/platform/browserElements/common/browserElements.d.ts +23 -3
  4. package/vscode/src/vs/platform/browserElements/common/browserElements.js +13 -6
  5. package/vscode/src/vs/platform/domWidget/browser/domWidget.js +4 -4
  6. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.d.ts +1 -1
  7. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.js +42 -27
  8. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.d.ts +14 -0
  9. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.js +218 -74
  10. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatTerminalOutputAccessibleView.js +6 -8
  11. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +14 -9
  12. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +165 -168
  13. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +27 -25
  14. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +141 -140
  15. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +189 -121
  16. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +14 -15
  17. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.d.ts +60 -0
  18. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.js +435 -0
  19. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +28 -12
  20. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +10 -12
  21. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.d.ts +3 -1
  22. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.js +37 -16
  23. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.d.ts +11 -0
  24. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +54 -24
  25. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +73 -34
  26. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +71 -30
  27. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +151 -89
  28. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +12 -15
  29. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +39 -40
  30. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +90 -125
  31. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.d.ts +5 -2
  32. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +263 -143
  33. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTransfer.js +4 -4
  34. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +188 -126
  35. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.d.ts +1 -1
  36. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +37 -28
  37. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.d.ts +21 -9
  38. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +392 -226
  39. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +31 -27
  40. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +25 -23
  41. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsService.js +1 -3
  42. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.d.ts +2 -0
  43. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.js +13 -0
  44. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.d.ts +20 -0
  45. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +83 -0
  46. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.d.ts +68 -0
  47. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +319 -0
  48. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.d.ts +1 -0
  49. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +215 -0
  50. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.d.ts +179 -0
  51. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +951 -0
  52. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agentsessionprojection.css +20 -0
  53. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agenttitlebarstatuswidget.css +388 -0
  54. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/unifiedQuickAccess.css +195 -0
  55. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.d.ts +120 -0
  56. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +394 -0
  57. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.d.ts +38 -0
  58. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +95 -0
  59. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.d.ts +3 -1
  60. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.js +31 -29
  61. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +49 -47
  62. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatVariables.js +4 -6
  63. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/media/simpleBrowserOverlay.css +0 -1
  64. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/simpleBrowserEditorOverlay.js +188 -151
  65. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +1012 -639
  66. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.js +256 -151
  67. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.d.ts +8 -1
  68. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +182 -101
  69. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingDeletedFileEntry.d.ts +79 -0
  70. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingDeletedFileEntry.js +193 -0
  71. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorAccessibility.js +9 -7
  72. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.d.ts +68 -0
  73. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +253 -0
  74. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.d.ts +4 -5
  75. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +69 -50
  76. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.d.ts +3 -4
  77. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +52 -33
  78. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +5 -6
  79. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +274 -155
  80. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingOperations.js +1 -1
  81. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.d.ts +2 -10
  82. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +130 -104
  83. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.d.ts +12 -2
  84. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +385 -160
  85. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.js +53 -36
  86. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +112 -75
  87. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.js +19 -10
  88. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/media/chatEditorController.css +31 -11
  89. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingModifiedNotebookSnapshot.js +39 -17
  90. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNewNotebookContentEdits.js +10 -14
  91. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.d.ts +0 -2
  92. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.js +25 -16
  93. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.d.ts +1 -1
  94. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +265 -203
  95. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookFileSystemProvider.js +29 -26
  96. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/helpers.js +114 -60
  97. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/notebookCellChanges.js +16 -19
  98. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.js +44 -30
  99. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +119 -45
  100. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.d.ts +1 -0
  101. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.js +152 -136
  102. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +12 -8
  103. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.d.ts +51 -31
  104. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +323 -217
  105. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.d.ts +4 -3
  106. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +653 -401
  107. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.js +52 -40
  108. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/media/chatModelsWidget.css +22 -3
  109. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.d.ts +5 -2
  110. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +43 -28
  111. package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +182 -136
  112. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.d.ts +33 -0
  113. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +548 -0
  114. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.d.ts +0 -1
  115. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +222 -138
  116. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.d.ts +3 -3
  117. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +151 -113
  118. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.d.ts +6 -4
  119. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +453 -217
  120. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.d.ts +1 -1
  121. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +162 -88
  122. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/media/chatSetup.css +2 -1
  123. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.d.ts +0 -2
  124. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.js +1 -13
  125. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.d.ts +1 -0
  126. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.js +309 -233
  127. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +55 -53
  128. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusItemService.js +3 -1
  129. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.d.ts +37 -0
  130. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +109 -0
  131. package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +35 -23
  132. package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.d.ts +9 -4
  133. package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.js +73 -33
  134. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.d.ts +47 -0
  135. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.js +333 -0
  136. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +39 -25
  137. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionContribution.js +9 -5
  138. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +23 -20
  139. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptFileActions.js +2 -0
  140. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +20 -16
  141. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +65 -57
  142. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +48 -36
  143. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +20 -12
  144. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.d.ts +4 -0
  145. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.js +52 -0
  146. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +155 -159
  147. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.d.ts +24 -14
  148. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +521 -246
  149. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +107 -76
  150. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +28 -24
  151. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownAnchorService.js +10 -6
  152. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputStateCache.d.ts +16 -0
  153. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputStateCache.js +57 -0
  154. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatLayoutService.js +4 -6
  155. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.js +56 -44
  156. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.d.ts +0 -3
  157. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.js +37 -47
  158. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatEditorInputContentProvider.js +5 -7
  159. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.d.ts +10 -0
  160. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +1284 -0
  161. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +179 -125
  162. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +9 -11
  163. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/editorHoverWrapper.js +7 -6
  164. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/chatQuick.js +96 -78
  165. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +58 -53
  166. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.d.ts +25 -11
  167. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +484 -292
  168. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.d.ts +1 -6
  169. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +65 -92
  170. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewPane.css +16 -19
  171. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewTitleControl.css +1 -0
  172. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +9 -1
  173. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +331 -189
  174. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +81 -93
  175. package/vscode/src/vs/workbench/contrib/chat/common/ignoredFiles.js +1 -3
  176. package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.d.ts +5 -3
  177. package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.js +6 -7
  178. package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.d.ts +36 -8
  179. package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.js +169 -31
  180. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionOperationLog.d.ts +6 -0
  181. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionOperationLog.js +141 -0
  182. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.d.ts +6 -4
  183. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +218 -144
  184. package/vscode/src/vs/workbench/contrib/chat/common/model/chatTransferService.js +20 -10
  185. package/vscode/src/vs/workbench/contrib/chat/common/model/objectMutationLog.d.ts +109 -0
  186. package/vscode/src/vs/workbench/contrib/chat/common/model/objectMutationLog.js +349 -0
  187. package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.js +9 -8
  188. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.d.ts +9 -0
  189. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +139 -36
  190. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +3 -6
  191. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptBodyAutocompletion.js +64 -51
  192. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +49 -34
  193. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptDocumentSemanticTokensProvider.js +21 -13
  194. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.d.ts +1 -1
  195. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +125 -97
  196. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +91 -131
  197. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptLinkProvider.js +8 -5
  198. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.d.ts +5 -0
  199. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +488 -222
  200. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/promptFileContributions.js +32 -12
  201. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +58 -13
  202. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +717 -200
  203. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +79 -18
  204. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +371 -130
  205. package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.d.ts +0 -1
  206. package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.js +3 -7
  207. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +79 -61
  208. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatResponseResourceFileSystemProvider.js +27 -21
  209. package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/aiEditTelemetry/aiEditTelemetryServiceImpl.js +7 -10
  210. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.d.ts +1 -1
  211. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +26 -32
  212. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibilityHelp.js +2 -2
  213. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +8 -60
  214. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +115 -426
  215. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.d.ts +15 -0
  216. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +127 -0
  217. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatNotebook.js +1 -37
  218. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.d.ts +16 -0
  219. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.js +21 -0
  220. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.d.ts +51 -0
  221. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +334 -0
  222. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.d.ts +41 -0
  223. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.js +424 -0
  224. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.d.ts +4 -0
  225. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +58 -0
  226. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.d.ts +7 -0
  227. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +195 -0
  228. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.d.ts +8 -0
  229. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +368 -0
  230. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.d.ts +2 -0
  231. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +7 -0
  232. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.d.ts +1 -1
  233. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.js +1 -1
  234. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +23 -25
  235. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/common/remoteCodingAgentsService.js +7 -8
  236. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +34 -38
  237. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibleView.js +8 -12
  238. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +103 -95
  239. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.js +28 -16
  240. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatEnabler.js +4 -5
  241. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.d.ts +12 -8
  242. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.js +65 -54
  243. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +86 -60
  244. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.js +13 -26
  245. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/commandFileWriteParser.d.ts +24 -0
  246. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/sedFileWriteParser.d.ts +26 -0
  247. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/sedFileWriteParser.js +142 -0
  248. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.d.ts +2 -1
  249. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.js +56 -46
  250. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.d.ts +2 -2
  251. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.js +63 -31
  252. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.d.ts +2 -1
  253. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.js +35 -30
  254. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.d.ts +2 -1
  255. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.js +44 -37
  256. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/strategyHelpers.js +3 -4
  257. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.js +3 -3
  258. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.d.ts +11 -0
  259. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +70 -50
  260. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalToolTelemetry.js +26 -394
  261. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +85 -49
  262. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +68 -27
  263. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.d.ts +1 -0
  264. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +67 -45
  265. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.d.ts +12 -0
  266. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.js +106 -0
  267. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/commandLineAutoApprover.d.ts +2 -2
  268. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/commandLineAutoApprover.js +177 -97
  269. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +136 -49
  270. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAnalyzer.d.ts +2 -1
  271. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +128 -112
  272. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +51 -49
  273. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineSandboxAnalyzer.d.ts +8 -0
  274. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineSandboxAnalyzer.js +25 -0
  275. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/commandLinePresenter.d.ts +41 -0
  276. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/nodeCommandLinePresenter.d.ts +19 -0
  277. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/nodeCommandLinePresenter.js +37 -0
  278. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/pythonCommandLinePresenter.d.ts +19 -0
  279. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/pythonCommandLinePresenter.js +37 -0
  280. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/rubyCommandLinePresenter.d.ts +19 -0
  281. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/rubyCommandLinePresenter.js +44 -0
  282. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/sandboxedCommandLinePresenter.d.ts +12 -0
  283. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/sandboxedCommandLinePresenter.js +21 -0
  284. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineCdPrefixRewriter.js +5 -14
  285. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLinePreventHistoryRewriter.js +2 -4
  286. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineRewriter.d.ts +1 -0
  287. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineSandboxRewriter.d.ts +8 -0
  288. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineSandboxRewriter.js +29 -0
  289. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +30 -31
  290. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +16 -17
  291. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +19 -20
  292. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.d.ts +11 -0
  293. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +58 -0
  294. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +31 -3
  295. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +325 -199
  296. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.d.ts +1 -1
  297. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.js +1 -1
  298. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +33 -38
  299. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.d.ts +45 -5
  300. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +746 -456
  301. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +145 -98
  302. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +88 -37
  303. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +120 -51
  304. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +25 -28
  305. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.d.ts +5 -0
  306. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.js +58 -12
  307. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/toolIds.d.ts +12 -0
  308. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/toolIds.js +17 -0
  309. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.d.ts +8 -1
  310. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.js +47 -28
  311. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.d.ts +37 -0
  312. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +171 -0
  313. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.d.ts +0 -58
  314. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.js +0 -213
  315. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.d.ts +0 -39
  316. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +0 -243
  317. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.d.ts +0 -7
  318. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.js +0 -41
  319. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.d.ts +0 -166
  320. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.js +0 -607
  321. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +0 -255
  322. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.d.ts +0 -46
  323. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +0 -396
  324. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.d.ts +0 -9
  325. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +0 -379
  326. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/media/chatEditingEditorOverlay.css +0 -117
  327. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.d.ts +0 -141
  328. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.js +0 -961
  329. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.d.ts +0 -36
  330. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +0 -447
  331. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsParametersSchema.d.ts +0 -6
  332. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsParametersSchema.js +0 -251
  333. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.d.ts +0 -10
  334. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.js +0 -42
@@ -19,7 +19,7 @@ import { IContextMenuService } from '@codingame/monaco-vscode-api/vscode/vs/plat
19
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 { ChatModelGroup, isVendorEntry, isGroupEntry, ChatModelsViewModel, SEARCH_SUGGESTIONS } from './chatModelsViewModel.js';
22
+ import { ChatModelGroup, isLanguageModelProviderEntry, isLanguageModelGroupEntry, isStatusEntry, ChatModelsViewModel, SEARCH_SUGGESTIONS } from './chatModelsViewModel.js';
23
23
  import { HighlightedLabel } from '@codingame/monaco-vscode-api/vscode/vs/base/browser/ui/highlightedlabel/highlightedLabel';
24
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';
@@ -34,6 +34,8 @@ import { ICommandService } from '@codingame/monaco-vscode-api/vscode/vs/platform
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
+ import { IDialogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/dialogs/common/dialogs.service';
38
+ import Severity from '@codingame/monaco-vscode-api/vscode/vs/base/common/severity';
37
39
 
38
40
  var ModelNameColumnRenderer_1, MultiplierColumnRenderer_1, TokenLimitsColumnRenderer_1, ActionsColumnRenderer_1, ChatModelsWidget_1;
39
41
  registerCss(chatModelsWidget);
@@ -43,35 +45,48 @@ const VENDOR_ROW_HEIGHT = 30;
43
45
  const MODEL_ROW_HEIGHT = 26;
44
46
  class ModelsFilterAction extends Action {
45
47
  constructor() {
46
- super('workbench.models.filter', ( localize(5205, "Filter")), ThemeIcon.asClassName(Codicon.filter));
47
- }
48
- async run() {
48
+ super("workbench.models.filter", ( localize(5373, "Filter")), ThemeIcon.asClassName(Codicon.filter));
49
49
  }
50
+ async run() {}
50
51
  }
51
- function toggleFilter(currentQuery, query, alternativeQueries = []) {
52
- const allQueries = [query, ...alternativeQueries];
53
- const isChecked = ( allQueries.some(q => currentQuery.includes(q)));
54
- if (!isChecked) {
55
- const trimmedQuery = currentQuery.trim();
56
- return trimmedQuery ? `${trimmedQuery} ${query}` : query;
57
- }
58
- else {
52
+ function toggleFilter(currentQuery, filter) {
53
+ const {
54
+ query,
55
+ synonyms = [],
56
+ excludes = []
57
+ } = filter;
58
+ const allSynonyms = [query, ...synonyms];
59
+ const isChecked = ( allSynonyms.some(q => currentQuery.includes(q)));
60
+ const hasExcludedQuery = ( excludes.some(q => currentQuery.includes(q)));
61
+ if (isChecked) {
59
62
  let queryWithRemovedFilter = currentQuery;
60
- for (const q of allQueries) {
61
- queryWithRemovedFilter = queryWithRemovedFilter.replace(q, '');
63
+ for (const q of allSynonyms) {
64
+ queryWithRemovedFilter = queryWithRemovedFilter.replace(q, "");
65
+ }
66
+ return queryWithRemovedFilter.replace(/\s+/g, " ").trim();
67
+ } else if (hasExcludedQuery) {
68
+ let newQuery = currentQuery;
69
+ for (const q of excludes) {
70
+ newQuery = newQuery.replace(q, "");
62
71
  }
63
- return queryWithRemovedFilter.replace(/\s+/g, ' ').trim();
72
+ newQuery = newQuery.replace(/\s+/g, " ").trim();
73
+ return newQuery ? `${newQuery} ${query}` : query;
74
+ } else {
75
+ const trimmedQuery = currentQuery.trim();
76
+ return trimmedQuery ? `${trimmedQuery} ${query}` : query;
64
77
  }
65
78
  }
66
79
  let ModelsSearchFilterDropdownMenuActionViewItem = class ModelsSearchFilterDropdownMenuActionViewItem extends DropdownMenuActionViewItem {
67
- constructor(action, options, searchWidget, viewModel, contextMenuService) {
68
- super(action, { getActions: () => this.getActions() }, contextMenuService, {
80
+ constructor(action, options, search, viewModel, contextMenuService) {
81
+ super(action, {
82
+ getActions: () => this.getActions()
83
+ }, contextMenuService, {
69
84
  ...options,
70
85
  classNames: action.class,
71
86
  anchorAlignmentProvider: () => AnchorAlignment.RIGHT,
72
87
  menuAsChild: true
73
88
  });
74
- this.searchWidget = searchWidget;
89
+ this.search = search;
75
90
  this.viewModel = viewModel;
76
91
  }
77
92
  createGroupByAction(grouping, label) {
@@ -80,7 +95,7 @@ let ModelsSearchFilterDropdownMenuActionViewItem = class ModelsSearchFilterDropd
80
95
  label,
81
96
  class: undefined,
82
97
  enabled: true,
83
- tooltip: ( localize(5206, "Group by {0}", label)),
98
+ tooltip: ( localize(5374, "Group by {0}", label)),
84
99
  checked: this.viewModel.groupBy === grouping,
85
100
  run: () => {
86
101
  this.viewModel.groupBy = grouping;
@@ -89,111 +104,123 @@ let ModelsSearchFilterDropdownMenuActionViewItem = class ModelsSearchFilterDropd
89
104
  }
90
105
  createProviderAction(vendor, displayName) {
91
106
  const query = `@provider:"${displayName}"`;
92
- const currentQuery = this.searchWidget.getValue();
107
+ const currentQuery = this.search.getValue();
93
108
  const isChecked = currentQuery.includes(query) || currentQuery.includes(`@provider:${vendor}`);
94
109
  return {
95
110
  id: `provider-${vendor}`,
96
111
  label: displayName,
97
- tooltip: ( localize(5207, "Filter by {0}", displayName)),
112
+ tooltip: ( localize(5375, "Filter by {0}", displayName)),
98
113
  class: undefined,
99
114
  enabled: true,
100
115
  checked: isChecked,
101
- run: () => this.toggleFilterAndSearch(query, [`@provider:${vendor}`])
116
+ run: () => this.toggleFilterAndSearch({
117
+ query,
118
+ synonyms: [`@provider:${vendor}`]
119
+ })
102
120
  };
103
121
  }
104
122
  createCapabilityAction(capability, label) {
105
123
  const query = `@capability:${capability}`;
106
- const currentQuery = this.searchWidget.getValue();
124
+ const currentQuery = this.search.getValue();
107
125
  const isChecked = currentQuery.includes(query);
108
126
  return {
109
127
  id: `capability-${capability}`,
110
128
  label,
111
- tooltip: ( localize(5208, "Filter by {0}", label)),
129
+ tooltip: ( localize(5376, "Filter by {0}", label)),
112
130
  class: undefined,
113
131
  enabled: true,
114
132
  checked: isChecked,
115
- run: () => this.toggleFilterAndSearch(query)
133
+ run: () => this.toggleFilterAndSearch({
134
+ query
135
+ })
116
136
  };
117
137
  }
118
138
  createVisibleAction(visible, label) {
119
139
  const query = `@visible:${visible}`;
120
- const oppositeQuery = `@visible:${!visible}`;
121
- const currentQuery = this.searchWidget.getValue();
140
+ const currentQuery = this.search.getValue();
122
141
  const isChecked = currentQuery.includes(query);
123
142
  return {
124
143
  id: `visible-${visible}`,
125
144
  label,
126
- tooltip: ( localize(5209, "Filter by {0}", label)),
145
+ tooltip: ( localize(5377, "Filter by {0}", label)),
127
146
  class: undefined,
128
147
  enabled: true,
129
148
  checked: isChecked,
130
- run: () => this.toggleFilterAndSearch(query, [oppositeQuery])
149
+ run: () => this.toggleFilterAndSearch({
150
+ query,
151
+ excludes: [`@visible:${!visible}`]
152
+ })
131
153
  };
132
154
  }
133
- toggleFilterAndSearch(query, alternativeQueries = []) {
134
- const currentQuery = this.searchWidget.getValue();
135
- const newQuery = toggleFilter(currentQuery, query, alternativeQueries);
136
- this.searchWidget.setValue(newQuery);
137
- this.searchWidget.focus();
155
+ toggleFilterAndSearch(filter) {
156
+ const currentQuery = this.search.getValue();
157
+ const newQuery = toggleFilter(currentQuery, filter);
158
+ this.search.setValue(newQuery);
138
159
  }
139
160
  getActions() {
140
161
  const actions = [];
141
- actions.push(this.createVisibleAction(true, ( localize(5210, 'Visible'))));
142
- actions.push(this.createVisibleAction(false, ( localize(5211, 'Hidden'))));
162
+ actions.push(this.createCapabilityAction("tools", ( localize(5378, "Tools"))), this.createCapabilityAction("vision", ( localize(5379, "Vision"))), this.createCapabilityAction("agent", ( localize(5380, "Agent Mode"))));
143
163
  actions.push(( new Separator()));
144
- actions.push(this.createCapabilityAction('tools', ( localize(5212, 'Tools'))), this.createCapabilityAction('vision', ( localize(5213, 'Vision'))), this.createCapabilityAction('agent', ( localize(5214, 'Agent Mode'))));
164
+ actions.push(this.createVisibleAction(true, ( localize(5381, "Visible in Chat Model Picker"))));
165
+ actions.push(this.createVisibleAction(false, ( localize(5382, "Hidden in Chat Model Picker"))));
145
166
  const configuredVendors = this.viewModel.getConfiguredVendors();
146
167
  if (configuredVendors.length > 1) {
147
168
  actions.push(( new Separator()));
148
169
  actions.push(...( configuredVendors.map(
149
- vendor => this.createProviderAction(vendor.vendor, vendor.vendorDisplayName)
170
+ vendor => this.createProviderAction(vendor.vendor.vendor, vendor.group.name)
150
171
  )));
151
172
  }
152
173
  actions.push(( new Separator()));
153
174
  const groupByActions = [];
154
- groupByActions.push(this.createGroupByAction(ChatModelGroup.Vendor, ( localize(5215, 'Provider'))));
155
- groupByActions.push(this.createGroupByAction(ChatModelGroup.Visibility, ( localize(5216, 'Visibility'))));
156
- actions.push(( new SubmenuAction('groupBy', ( localize(5217, "Group By")), groupByActions)));
175
+ groupByActions.push(this.createGroupByAction(ChatModelGroup.Vendor, ( localize(5383, "Provider"))));
176
+ groupByActions.push(this.createGroupByAction(ChatModelGroup.Visibility, ( localize(5384, "Visibility (Chat Model Picker)"))));
177
+ actions.push(( new SubmenuAction("groupBy", ( localize(5385, "Group By")), groupByActions)));
157
178
  return actions;
158
179
  }
159
180
  };
160
- ModelsSearchFilterDropdownMenuActionViewItem = ( __decorate([
161
- ( __param(4, IContextMenuService))
162
- ], ModelsSearchFilterDropdownMenuActionViewItem));
181
+ ModelsSearchFilterDropdownMenuActionViewItem = ( __decorate([( __param(4, IContextMenuService))], ModelsSearchFilterDropdownMenuActionViewItem));
163
182
  class Delegate {
164
183
  constructor() {
165
184
  this.headerRowHeight = HEADER_HEIGHT;
166
185
  }
167
186
  getHeight(element) {
168
- return isVendorEntry(element) || isGroupEntry(element) ? VENDOR_ROW_HEIGHT : MODEL_ROW_HEIGHT;
187
+ return isLanguageModelProviderEntry(element) || isLanguageModelGroupEntry(element) ? VENDOR_ROW_HEIGHT : MODEL_ROW_HEIGHT;
169
188
  }
170
189
  }
171
190
  class ModelsTableColumnRenderer {
172
191
  renderElement(element, index, templateData) {
173
192
  templateData.elementDisposables.clear();
174
- const isVendor = isVendorEntry(element);
175
- const isGroup = isGroupEntry(element);
176
- templateData.container.classList.add('models-table-column');
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);
193
+ const isVendor = isLanguageModelProviderEntry(element);
194
+ const isGroup = isLanguageModelGroupEntry(element);
195
+ const isStatus = isStatusEntry(element);
196
+ templateData.container.classList.add("models-table-column");
197
+ templateData.container.parentElement.classList.toggle("models-vendor-row", isVendor || isGroup);
198
+ templateData.container.parentElement.classList.toggle("models-model-row", !isVendor && !isGroup);
199
+ templateData.container.parentElement.classList.toggle("models-status-row", isStatus);
200
+ templateData.container.parentElement.classList.toggle(
201
+ "model-hidden",
202
+ !isVendor && !isGroup && !isStatus && !element.model.visible
203
+ );
180
204
  if (isVendor) {
181
205
  this.renderVendorElement(element, index, templateData);
182
- }
183
- else if (isGroup) {
206
+ } else if (isGroup) {
184
207
  this.renderGroupElement(element, index, templateData);
185
- }
186
- else {
208
+ } else if (isStatus) {
209
+ this.renderStatusElement(element, index, templateData);
210
+ } else {
187
211
  this.renderModelElement(element, index, templateData);
188
212
  }
189
213
  }
214
+ renderStatusElement(element, index, templateData) {}
190
215
  disposeTemplate(templateData) {
191
216
  templateData.elementDisposables.dispose();
192
217
  templateData.disposables.dispose();
193
218
  }
194
219
  }
195
220
  class GutterColumnRenderer extends ModelsTableColumnRenderer {
196
- static { this.TEMPLATE_ID = 'gutter'; }
221
+ static {
222
+ this.TEMPLATE_ID = "gutter";
223
+ }
197
224
  constructor(viewModel) {
198
225
  super();
199
226
  this.viewModel = viewModel;
@@ -202,7 +229,7 @@ class GutterColumnRenderer extends ModelsTableColumnRenderer {
202
229
  renderTemplate(container) {
203
230
  const disposables = ( new DisposableStore());
204
231
  const elementDisposables = ( new DisposableStore());
205
- container.classList.add('models-gutter-column');
232
+ container.classList.add("models-gutter-column");
206
233
  const actionBar = disposables.add(( new ActionBar(container)));
207
234
  return {
208
235
  listRowElement: container.parentElement?.parentElement ?? null,
@@ -224,36 +251,48 @@ class GutterColumnRenderer extends ModelsTableColumnRenderer {
224
251
  }
225
252
  renderCollapsableElement(entry, templateData) {
226
253
  if (templateData.listRowElement) {
227
- templateData.listRowElement.setAttribute('aria-expanded', entry.collapsed ? 'false' : 'true');
254
+ templateData.listRowElement.setAttribute("aria-expanded", entry.collapsed ? "false" : "true");
228
255
  }
229
- const label = entry.collapsed ? ( localize(5218, 'Expand')) : ( localize(5219, 'Collapse'));
256
+ const label = entry.collapsed ? ( localize(5386, "Expand")) : ( localize(5387, "Collapse"));
230
257
  const toggleCollapseAction = {
231
- id: 'toggleCollapse',
258
+ id: "toggleCollapse",
232
259
  label,
233
260
  tooltip: label,
234
261
  enabled: true,
235
262
  class: ThemeIcon.asClassName(entry.collapsed ? Codicon.chevronRight : Codicon.chevronDown),
236
263
  run: () => this.viewModel.toggleCollapsed(entry)
237
264
  };
238
- templateData.actionBar.push(toggleCollapseAction, { icon: true, label: false });
265
+ templateData.actionBar.push(toggleCollapseAction, {
266
+ icon: true,
267
+ label: false
268
+ });
239
269
  }
240
270
  renderModelElement(entry, index, templateData) {
241
- const { modelEntry } = entry;
242
- const isVisible = modelEntry.metadata.isUserSelectable ?? false;
271
+ const {
272
+ model: modelEntry
273
+ } = entry;
274
+ const isVisible = modelEntry.visible;
243
275
  const toggleVisibilityAction = toAction({
244
- id: 'toggleVisibility',
245
- label: isVisible ? ( localize(5220, 'Hide')) : ( localize(5221, 'Show')),
276
+ id: "toggleVisibility",
277
+ label: isVisible ? ( localize(5388, "Hide")) : ( localize(5389, "Show")),
246
278
  class: `model-visibility-toggle ${isVisible ? `${ThemeIcon.asClassName(Codicon.eye)} model-visible` : `${ThemeIcon.asClassName(Codicon.eyeClosed)} model-hidden`}`,
247
- tooltip: isVisible ? ( localize(5222, 'Hide in the chat model picker')) : ( localize(5223, 'Show in the chat model picker')),
279
+ tooltip: isVisible ? ( localize(5390, "Hide in the chat model picker")) : ( localize(5391, "Show in the chat model picker")),
248
280
  checked: !isVisible,
249
281
  run: async () => this.viewModel.toggleVisibility(entry)
250
282
  });
251
- templateData.actionBar.push(toggleVisibilityAction, { icon: true, label: false });
283
+ templateData.actionBar.push(toggleVisibilityAction, {
284
+ icon: true,
285
+ label: false
286
+ });
252
287
  }
253
288
  }
254
289
  let ModelNameColumnRenderer = class ModelNameColumnRenderer extends ModelsTableColumnRenderer {
255
- static { ModelNameColumnRenderer_1 = this; }
256
- static { this.TEMPLATE_ID = 'modelName'; }
290
+ static {
291
+ ModelNameColumnRenderer_1 = this;
292
+ }
293
+ static {
294
+ this.TEMPLATE_ID = "modelName";
295
+ }
257
296
  constructor(hoverService) {
258
297
  super();
259
298
  this.hoverService = hoverService;
@@ -262,75 +301,110 @@ let ModelNameColumnRenderer = class ModelNameColumnRenderer extends ModelsTableC
262
301
  renderTemplate(container) {
263
302
  const disposables = ( new DisposableStore());
264
303
  const elementDisposables = ( new DisposableStore());
265
- const nameContainer = append(container, $('.model-name-container'));
266
- const nameLabel = disposables.add(( new HighlightedLabel(append(nameContainer, $('.model-name')))));
267
- const statusIcon = append(nameContainer, $('.model-status-icon'));
268
- const actionBar = disposables.add(( new ActionBar(append(nameContainer, $('.model-name-actions')))));
304
+ const nameContainer = append(container, $(".model-name-container"));
305
+ const statusIcon = append(nameContainer, $(".status-icon"));
306
+ const nameLabel = disposables.add(( new HighlightedLabel(append(nameContainer, $(".model-name")))));
307
+ const modelStatusIcon = append(nameContainer, $(".model-status-icon"));
308
+ const actionBar = disposables.add(( new ActionBar(append(nameContainer, $(".model-name-actions")))));
269
309
  return {
270
310
  container,
271
311
  statusIcon,
272
312
  nameLabel,
313
+ modelStatusIcon,
273
314
  actionBar,
274
315
  disposables,
275
316
  elementDisposables
276
317
  };
277
318
  }
278
319
  renderElement(entry, index, templateData) {
279
- clearNode(templateData.statusIcon);
320
+ clearNode(templateData.modelStatusIcon);
280
321
  templateData.actionBar.clear();
322
+ templateData.nameLabel.element.classList.remove("error-status", "warning-status", "info-status");
281
323
  super.renderElement(entry, index, templateData);
282
324
  }
283
325
  renderVendorElement(entry, index, templateData) {
284
- templateData.nameLabel.set(entry.vendorEntry.vendorDisplayName, undefined);
326
+ templateData.nameLabel.set(entry.vendorEntry.group.name, undefined);
285
327
  }
286
328
  renderGroupElement(entry, index, templateData) {
287
329
  templateData.nameLabel.set(entry.label, undefined);
288
330
  }
289
331
  renderModelElement(entry, index, templateData) {
290
- const { modelEntry, modelNameMatches } = entry;
291
- templateData.statusIcon.className = 'model-status-icon';
332
+ const {
333
+ model: modelEntry,
334
+ modelNameMatches
335
+ } = entry;
336
+ templateData.statusIcon.style.display = "none";
337
+ templateData.modelStatusIcon.className = "model-status-icon";
292
338
  if (modelEntry.metadata.statusIcon) {
293
- templateData.statusIcon.classList.add(...ThemeIcon.asClassNameArray(modelEntry.metadata.statusIcon));
294
- templateData.statusIcon.style.display = '';
295
- }
296
- else {
297
- templateData.statusIcon.style.display = 'none';
339
+ templateData.modelStatusIcon.classList.add(...ThemeIcon.asClassNameArray(modelEntry.metadata.statusIcon));
340
+ templateData.modelStatusIcon.style.display = "";
341
+ } else {
342
+ templateData.modelStatusIcon.style.display = "none";
298
343
  }
299
344
  templateData.nameLabel.set(modelEntry.metadata.name, modelNameMatches);
300
- const markdown = ( new MarkdownString('', { isTrusted: true, supportThemeIcons: true }));
301
- markdown.appendMarkdown(`**${entry.modelEntry.metadata.name}**`);
302
- if (entry.modelEntry.metadata.id !== entry.modelEntry.metadata.version) {
303
- markdown.appendMarkdown(`&nbsp;<span style="background-color:#8080802B;">&nbsp;_${entry.modelEntry.metadata.id}@${entry.modelEntry.metadata.version}_&nbsp;</span>`);
304
- }
305
- else {
306
- markdown.appendMarkdown(`&nbsp;<span style="background-color:#8080802B;">&nbsp;_${entry.modelEntry.metadata.id}_&nbsp;</span>`);
345
+ const markdown = ( new MarkdownString("", {
346
+ isTrusted: true,
347
+ supportThemeIcons: true
348
+ }));
349
+ markdown.appendMarkdown(`**${entry.model.metadata.name}**`);
350
+ if (entry.model.metadata.id !== entry.model.metadata.version) {
351
+ markdown.appendMarkdown(
352
+ `&nbsp;<span style="background-color:#8080802B;">&nbsp;_${entry.model.metadata.id}@${entry.model.metadata.version}_&nbsp;</span>`
353
+ );
354
+ } else {
355
+ markdown.appendMarkdown(
356
+ `&nbsp;<span style="background-color:#8080802B;">&nbsp;_${entry.model.metadata.id}_&nbsp;</span>`
357
+ );
307
358
  }
308
359
  markdown.appendText(`\n`);
309
- if (entry.modelEntry.metadata.statusIcon && entry.modelEntry.metadata.tooltip) {
310
- if (entry.modelEntry.metadata.statusIcon) {
311
- markdown.appendMarkdown(`$(${entry.modelEntry.metadata.statusIcon.id})&nbsp;`);
360
+ if (entry.model.metadata.statusIcon && entry.model.metadata.tooltip) {
361
+ if (entry.model.metadata.statusIcon) {
362
+ markdown.appendMarkdown(`$(${entry.model.metadata.statusIcon.id})&nbsp;`);
312
363
  }
313
- markdown.appendMarkdown(`${entry.modelEntry.metadata.tooltip}`);
364
+ markdown.appendMarkdown(`${entry.model.metadata.tooltip}`);
314
365
  markdown.appendText(`\n`);
315
366
  }
316
- if (!entry.modelEntry.metadata.isUserSelectable) {
317
- markdown.appendMarkdown(`\n\n${( localize(5224, 'This model is hidden in the chat model picker'))}`);
367
+ if (!entry.model.visible) {
368
+ markdown.appendMarkdown(`\n\n${( localize(5392, "This model is hidden in the chat model picker"))}`);
318
369
  }
319
- templateData.elementDisposables.add(this.hoverService.setupDelayedHoverAtMouse(templateData.container, () => ({
320
- content: markdown,
321
- appearance: {
322
- compact: true,
323
- skipFadeInAnimation: true,
324
- }
325
- })));
370
+ templateData.elementDisposables.add(
371
+ this.hoverService.setupDelayedHoverAtMouse(templateData.container, () => ({
372
+ content: markdown,
373
+ appearance: {
374
+ compact: true,
375
+ skipFadeInAnimation: true
376
+ }
377
+ }))
378
+ );
379
+ }
380
+ renderStatusElement(entry, index, templateData) {
381
+ templateData.statusIcon.style.display = "";
382
+ templateData.statusIcon.className = "status-icon";
383
+ switch (entry.severity) {
384
+ case Severity.Error:
385
+ templateData.nameLabel.element.classList.add("error-status");
386
+ templateData.statusIcon.classList.add(...ThemeIcon.asClassNameArray(Codicon.error));
387
+ break;
388
+ case Severity.Warning:
389
+ templateData.nameLabel.element.classList.add("warning-status");
390
+ templateData.statusIcon.classList.add(...ThemeIcon.asClassNameArray(Codicon.warning));
391
+ break;
392
+ case Severity.Info:
393
+ templateData.nameLabel.element.classList.add("info-status");
394
+ templateData.statusIcon.classList.add(...ThemeIcon.asClassNameArray(Codicon.info));
395
+ break;
396
+ }
397
+ templateData.nameLabel.set(entry.message, undefined, entry.message);
326
398
  }
327
399
  };
328
- ModelNameColumnRenderer = ModelNameColumnRenderer_1 = ( __decorate([
329
- ( __param(0, IHoverService))
330
- ], ModelNameColumnRenderer));
400
+ ModelNameColumnRenderer = ModelNameColumnRenderer_1 = ( __decorate([( __param(0, IHoverService))], ModelNameColumnRenderer));
331
401
  let MultiplierColumnRenderer = class MultiplierColumnRenderer extends ModelsTableColumnRenderer {
332
- static { MultiplierColumnRenderer_1 = this; }
333
- static { this.TEMPLATE_ID = 'multiplier'; }
402
+ static {
403
+ MultiplierColumnRenderer_1 = this;
404
+ }
405
+ static {
406
+ this.TEMPLATE_ID = "multiplier";
407
+ }
334
408
  constructor(hoverService) {
335
409
  super();
336
410
  this.hoverService = hoverService;
@@ -339,7 +413,7 @@ let MultiplierColumnRenderer = class MultiplierColumnRenderer extends ModelsTabl
339
413
  renderTemplate(container) {
340
414
  const disposables = ( new DisposableStore());
341
415
  const elementDisposables = ( new DisposableStore());
342
- const multiplierElement = append(container, $('.model-multiplier'));
416
+ const multiplierElement = append(container, $(".model-multiplier"));
343
417
  return {
344
418
  container,
345
419
  multiplierElement,
@@ -347,36 +421,40 @@ let MultiplierColumnRenderer = class MultiplierColumnRenderer extends ModelsTabl
347
421
  elementDisposables
348
422
  };
349
423
  }
350
- renderVendorElement(entry, index, templateData) {
351
- templateData.multiplierElement.textContent = '';
352
- }
353
- renderGroupElement(entry, index, templateData) {
354
- templateData.multiplierElement.textContent = '';
424
+ renderElement(entry, index, templateData) {
425
+ templateData.multiplierElement.textContent = "";
426
+ super.renderElement(entry, index, templateData);
355
427
  }
428
+ renderGroupElement(element, index, templateData) {}
429
+ renderVendorElement(element, index, templateData) {}
356
430
  renderModelElement(entry, index, templateData) {
357
- const multiplierText = (entry.modelEntry.metadata.detail && entry.modelEntry.metadata.detail.trim().toLowerCase() !== entry.modelEntry.vendor.trim().toLowerCase()) ? entry.modelEntry.metadata.detail : '-';
431
+ const multiplierText = entry.model.metadata.multiplier ?? "-";
358
432
  templateData.multiplierElement.textContent = multiplierText;
359
- if (multiplierText !== '-') {
360
- templateData.elementDisposables.add(this.hoverService.setupDelayedHoverAtMouse(templateData.container, () => ({
361
- content: ( localize(
362
- 5225,
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
- })));
433
+ if (multiplierText !== "-") {
434
+ templateData.elementDisposables.add(
435
+ this.hoverService.setupDelayedHoverAtMouse(templateData.container, () => ({
436
+ content: ( localize(
437
+ 5393,
438
+ "Every chat message counts {0} towards your premium model request quota",
439
+ multiplierText
440
+ )),
441
+ appearance: {
442
+ compact: true,
443
+ skipFadeInAnimation: true
444
+ }
445
+ }))
446
+ );
371
447
  }
372
448
  }
373
449
  };
374
- MultiplierColumnRenderer = MultiplierColumnRenderer_1 = ( __decorate([
375
- ( __param(0, IHoverService))
376
- ], MultiplierColumnRenderer));
450
+ MultiplierColumnRenderer = MultiplierColumnRenderer_1 = ( __decorate([( __param(0, IHoverService))], MultiplierColumnRenderer));
377
451
  let TokenLimitsColumnRenderer = class TokenLimitsColumnRenderer extends ModelsTableColumnRenderer {
378
- static { TokenLimitsColumnRenderer_1 = this; }
379
- static { this.TEMPLATE_ID = 'tokenLimits'; }
452
+ static {
453
+ TokenLimitsColumnRenderer_1 = this;
454
+ }
455
+ static {
456
+ this.TEMPLATE_ID = "tokenLimits";
457
+ }
380
458
  constructor(hoverService) {
381
459
  super();
382
460
  this.hoverService = hoverService;
@@ -385,7 +463,7 @@ let TokenLimitsColumnRenderer = class TokenLimitsColumnRenderer extends ModelsTa
385
463
  renderTemplate(container) {
386
464
  const disposables = ( new DisposableStore());
387
465
  const elementDisposables = ( new DisposableStore());
388
- const tokenLimitsElement = append(container, $('.model-token-limits'));
466
+ const tokenLimitsElement = append(container, $(".model-token-limits"));
389
467
  return {
390
468
  container,
391
469
  tokenLimitsElement,
@@ -397,47 +475,50 @@ let TokenLimitsColumnRenderer = class TokenLimitsColumnRenderer extends ModelsTa
397
475
  clearNode(templateData.tokenLimitsElement);
398
476
  super.renderElement(entry, index, templateData);
399
477
  }
400
- renderVendorElement(entry, index, templateData) {
401
- }
402
- renderGroupElement(entry, index, templateData) {
403
- }
478
+ renderVendorElement(entry, index, templateData) {}
479
+ renderGroupElement(entry, index, templateData) {}
404
480
  renderModelElement(entry, index, templateData) {
405
- const { modelEntry } = entry;
406
- const markdown = ( new MarkdownString('', { isTrusted: true, supportThemeIcons: true }));
481
+ const {
482
+ model: modelEntry
483
+ } = entry;
484
+ const markdown = ( new MarkdownString("", {
485
+ isTrusted: true,
486
+ supportThemeIcons: true
487
+ }));
407
488
  if (modelEntry.metadata.maxInputTokens || modelEntry.metadata.maxOutputTokens) {
408
489
  let addSeparator = false;
409
- markdown.appendMarkdown(`${( localize(5226, 'Context Size'))}: `);
490
+ markdown.appendMarkdown(`${( localize(5394, "Context Size"))}: `);
410
491
  if (modelEntry.metadata.maxInputTokens) {
411
- const inputDiv = append(templateData.tokenLimitsElement, $('.token-limit-item'));
412
- append(inputDiv, $('span.codicon.codicon-arrow-down'));
413
- const inputText = append(inputDiv, $('span'));
492
+ const inputDiv = append(templateData.tokenLimitsElement, $(".token-limit-item"));
493
+ append(inputDiv, $("span.codicon.codicon-arrow-down"));
494
+ const inputText = append(inputDiv, $("span"));
414
495
  inputText.textContent = formatTokenCount(modelEntry.metadata.maxInputTokens);
415
- markdown.appendMarkdown(`$(arrow-down) ${modelEntry.metadata.maxInputTokens} (${( localize(5227, 'Input'))})`);
496
+ markdown.appendMarkdown(`$(arrow-down) ${modelEntry.metadata.maxInputTokens} (${( localize(5395, "Input"))})`);
416
497
  addSeparator = true;
417
498
  }
418
499
  if (modelEntry.metadata.maxOutputTokens) {
419
- const outputDiv = append(templateData.tokenLimitsElement, $('.token-limit-item'));
420
- append(outputDiv, $('span.codicon.codicon-arrow-up'));
421
- const outputText = append(outputDiv, $('span'));
500
+ const outputDiv = append(templateData.tokenLimitsElement, $(".token-limit-item"));
501
+ append(outputDiv, $("span.codicon.codicon-arrow-up"));
502
+ const outputText = append(outputDiv, $("span"));
422
503
  outputText.textContent = formatTokenCount(modelEntry.metadata.maxOutputTokens);
423
504
  if (addSeparator) {
424
505
  markdown.appendText(` | `);
425
506
  }
426
- markdown.appendMarkdown(`$(arrow-up) ${modelEntry.metadata.maxOutputTokens} (${( localize(5228, 'Output'))})`);
507
+ markdown.appendMarkdown(`$(arrow-up) ${modelEntry.metadata.maxOutputTokens} (${( localize(5396, "Output"))})`);
427
508
  }
428
509
  }
429
- templateData.elementDisposables.add(this.hoverService.setupDelayedHoverAtMouse(templateData.container, () => ({
430
- content: markdown,
431
- appearance: {
432
- compact: true,
433
- skipFadeInAnimation: true,
434
- }
435
- })));
510
+ templateData.elementDisposables.add(
511
+ this.hoverService.setupDelayedHoverAtMouse(templateData.container, () => ({
512
+ content: markdown,
513
+ appearance: {
514
+ compact: true,
515
+ skipFadeInAnimation: true
516
+ }
517
+ }))
518
+ );
436
519
  }
437
520
  };
438
- TokenLimitsColumnRenderer = TokenLimitsColumnRenderer_1 = ( __decorate([
439
- ( __param(0, IHoverService))
440
- ], TokenLimitsColumnRenderer));
521
+ TokenLimitsColumnRenderer = TokenLimitsColumnRenderer_1 = ( __decorate([( __param(0, IHoverService))], TokenLimitsColumnRenderer));
441
522
  class CapabilitiesColumnRenderer extends ModelsTableColumnRenderer {
442
523
  constructor() {
443
524
  super(...arguments);
@@ -445,12 +526,14 @@ class CapabilitiesColumnRenderer extends ModelsTableColumnRenderer {
445
526
  this._onDidClickCapability = ( new Emitter());
446
527
  this.onDidClickCapability = this._onDidClickCapability.event;
447
528
  }
448
- static { this.TEMPLATE_ID = 'capabilities'; }
529
+ static {
530
+ this.TEMPLATE_ID = "capabilities";
531
+ }
449
532
  renderTemplate(container) {
450
533
  const disposables = ( new DisposableStore());
451
534
  const elementDisposables = ( new DisposableStore());
452
- container.classList.add('model-capability-column');
453
- const metadataRow = append(container, $('.model-capabilities'));
535
+ container.classList.add("model-capability-column");
536
+ const metadataRow = append(container, $(".model-capabilities"));
454
537
  return {
455
538
  container,
456
539
  metadataRow,
@@ -462,44 +545,80 @@ class CapabilitiesColumnRenderer extends ModelsTableColumnRenderer {
462
545
  clearNode(templateData.metadataRow);
463
546
  super.renderElement(entry, index, templateData);
464
547
  }
465
- renderVendorElement(entry, index, templateData) {
466
- }
467
- renderGroupElement(entry, index, templateData) {
468
- }
548
+ renderVendorElement(entry, index, templateData) {}
549
+ renderGroupElement(entry, index, templateData) {}
469
550
  renderModelElement(entry, index, templateData) {
470
- const { modelEntry, capabilityMatches } = entry;
551
+ const {
552
+ model: modelEntry,
553
+ capabilityMatches
554
+ } = entry;
471
555
  if (modelEntry.metadata.capabilities?.toolCalling) {
472
- templateData.elementDisposables.add(this.createCapabilityButton(templateData.metadataRow, capabilityMatches?.includes('toolCalling') || false, ( localize(5229, 'Tools')), 'tools'));
556
+ templateData.elementDisposables.add(this.createCapabilityButton(
557
+ templateData.metadataRow,
558
+ capabilityMatches?.includes("toolCalling") || false,
559
+ ( localize(5397, "Tools")),
560
+ "tools"
561
+ ));
473
562
  }
474
563
  if (modelEntry.metadata.capabilities?.vision) {
475
- templateData.elementDisposables.add(this.createCapabilityButton(templateData.metadataRow, capabilityMatches?.includes('vision') || false, ( localize(5230, 'Vision')), 'vision'));
564
+ templateData.elementDisposables.add(this.createCapabilityButton(
565
+ templateData.metadataRow,
566
+ capabilityMatches?.includes("vision") || false,
567
+ ( localize(5398, "Vision")),
568
+ "vision"
569
+ ));
476
570
  }
477
571
  }
478
572
  createCapabilityButton(container, isActive, label, capability) {
479
573
  const disposables = ( new DisposableStore());
480
- const buttonContainer = append(container, $('.model-badge-container'));
481
- const button = disposables.add(( new Button(buttonContainer, { secondary: true })));
482
- button.element.classList.add('model-capability');
483
- button.element.classList.toggle('active', isActive);
574
+ const buttonContainer = append(container, $(".model-badge-container"));
575
+ const button = disposables.add(( new Button(buttonContainer, {
576
+ secondary: true
577
+ })));
578
+ button.element.classList.add("model-capability");
579
+ button.element.classList.toggle("active", isActive);
484
580
  button.label = label;
485
581
  disposables.add(button.onDidClick(() => this._onDidClickCapability.fire(capability)));
486
582
  return disposables;
487
583
  }
488
584
  }
489
585
  let ActionsColumnRenderer = class ActionsColumnRenderer extends ModelsTableColumnRenderer {
490
- static { ActionsColumnRenderer_1 = this; }
491
- static { this.TEMPLATE_ID = 'actions'; }
492
- constructor(viewModel, commandService) {
586
+ static {
587
+ ActionsColumnRenderer_1 = this;
588
+ }
589
+ static {
590
+ this.TEMPLATE_ID = "actions";
591
+ }
592
+ constructor(
593
+ viewModel,
594
+ instantiationService,
595
+ languageModelsService,
596
+ dialogService,
597
+ commandService,
598
+ contextMenuService
599
+ ) {
493
600
  super();
494
601
  this.viewModel = viewModel;
602
+ this.instantiationService = instantiationService;
603
+ this.languageModelsService = languageModelsService;
604
+ this.dialogService = dialogService;
495
605
  this.commandService = commandService;
606
+ this.contextMenuService = contextMenuService;
496
607
  this.templateId = ActionsColumnRenderer_1.TEMPLATE_ID;
497
608
  }
498
609
  renderTemplate(container) {
499
610
  const disposables = ( new DisposableStore());
500
611
  const elementDisposables = ( new DisposableStore());
501
- const parent = append(container, $('.actions-column'));
502
- const actionBar = disposables.add(( new ActionBar(parent)));
612
+ container.classList.add("models-actions-column");
613
+ const parent = append(container, $(".actions-container"));
614
+ const actionBar = disposables.add(
615
+ this.instantiationService.createInstance(ToolBar, parent, this.contextMenuService, {
616
+ icon: true,
617
+ label: false,
618
+ moreIcon: Codicon.gear,
619
+ anchorAlignmentProvider: () => AnchorAlignment.RIGHT
620
+ })
621
+ );
503
622
  return {
504
623
  container,
505
624
  actionBar,
@@ -508,42 +627,65 @@ let ActionsColumnRenderer = class ActionsColumnRenderer extends ModelsTableColum
508
627
  };
509
628
  }
510
629
  renderElement(entry, index, templateData) {
511
- templateData.actionBar.clear();
630
+ templateData.actionBar.setActions([]);
512
631
  super.renderElement(entry, index, templateData);
513
632
  }
514
633
  renderVendorElement(entry, index, templateData) {
515
- if (entry.vendorEntry.managementCommand) {
516
- const { vendorEntry } = entry;
517
- const action = toAction({
518
- id: 'manageVendor',
519
- label: ( localize(5231, 'Manage {0}...', entry.vendorEntry.vendorDisplayName)),
634
+ const {
635
+ vendorEntry
636
+ } = entry;
637
+ const primaryActions = [];
638
+ const secondaryActions = [];
639
+ if (vendorEntry.vendor.configuration) {
640
+ secondaryActions.push(toAction({
641
+ id: "configureAction",
642
+ label: ( localize(5399, "Configure...")),
643
+ run: () => this.languageModelsService.configureLanguageModelsProviderGroup(vendorEntry.vendor.vendor, vendorEntry.group.name)
644
+ }));
645
+ secondaryActions.push(toAction({
646
+ id: "deleteAction",
647
+ label: ( localize(5400, "Delete")),
648
+ class: ThemeIcon.asClassName(Codicon.trash),
649
+ run: async () => {
650
+ const result = await this.dialogService.confirm({
651
+ type: "info",
652
+ message: ( localize(5401, "Would you like to delete {0}?", vendorEntry.group.name))
653
+ });
654
+ if (!result.confirmed) {
655
+ return;
656
+ }
657
+ await this.languageModelsService.removeLanguageModelsProviderGroup(vendorEntry.vendor.vendor, vendorEntry.group.name);
658
+ }
659
+ }));
660
+ } else if (vendorEntry.vendor.managementCommand) {
661
+ primaryActions.push(toAction({
662
+ id: "manageVendor",
663
+ label: ( localize(5402, "Manage {0}...", vendorEntry.group.name)),
520
664
  class: ThemeIcon.asClassName(Codicon.gear),
521
665
  run: async () => {
522
- await this.commandService.executeCommand(vendorEntry.managementCommand, vendorEntry.vendor);
666
+ await this.commandService.executeCommand(vendorEntry.vendor.managementCommand, vendorEntry.vendor.vendor);
523
667
  this.viewModel.refresh();
524
668
  }
525
- });
526
- templateData.actionBar.push(action, { icon: true, label: false });
669
+ }));
527
670
  }
671
+ templateData.actionBar.setActions(primaryActions, secondaryActions);
528
672
  }
529
- renderGroupElement(entry, index, templateData) {
530
- }
531
- renderModelElement(entry, index, templateData) {
532
- }
673
+ renderGroupElement(entry, index, templateData) {}
674
+ renderModelElement(entry, index, templateData) {}
533
675
  };
534
- ActionsColumnRenderer = ActionsColumnRenderer_1 = ( __decorate([
535
- ( __param(1, ICommandService))
536
- ], ActionsColumnRenderer));
676
+ ActionsColumnRenderer = ActionsColumnRenderer_1 = ( __decorate([( __param(1, IInstantiationService)), ( __param(2, ILanguageModelsService)), ( __param(3, IDialogService)), ( __param(4, ICommandService)), ( __param(5, IContextMenuService))], ActionsColumnRenderer));
537
677
  class ProviderColumnRenderer extends ModelsTableColumnRenderer {
538
678
  constructor() {
539
679
  super(...arguments);
540
680
  this.templateId = ProviderColumnRenderer.TEMPLATE_ID;
541
681
  }
542
- static { this.TEMPLATE_ID = 'provider'; }
682
+ static {
683
+ this.TEMPLATE_ID = "provider";
684
+ }
543
685
  renderTemplate(container) {
544
686
  const disposables = ( new DisposableStore());
545
687
  const elementDisposables = ( new DisposableStore());
546
- const providerElement = append(container, $('.model-provider'));
688
+ const providerElement = append(container, $(".model-provider"));
547
689
  return {
548
690
  container,
549
691
  providerElement,
@@ -552,28 +694,40 @@ class ProviderColumnRenderer extends ModelsTableColumnRenderer {
552
694
  };
553
695
  }
554
696
  renderVendorElement(entry, index, templateData) {
555
- templateData.providerElement.textContent = '';
697
+ templateData.providerElement.textContent = "";
556
698
  }
557
699
  renderGroupElement(entry, index, templateData) {
558
- templateData.providerElement.textContent = '';
700
+ templateData.providerElement.textContent = "";
559
701
  }
560
702
  renderModelElement(entry, index, templateData) {
561
- templateData.providerElement.textContent = entry.modelEntry.vendorDisplayName;
703
+ templateData.providerElement.textContent = entry.model.provider.vendor.displayName;
562
704
  }
563
705
  }
564
706
  function formatTokenCount(count) {
565
707
  if (count >= 1000000) {
566
708
  return `${(count / 1000000).toFixed(1)}M`;
567
- }
568
- else if (count >= 1000) {
709
+ } else if (count >= 1000) {
569
710
  return `${(count / 1000).toFixed(0)}K`;
570
711
  }
571
712
  return ( count.toString());
572
713
  }
573
714
  let ChatModelsWidget = class ChatModelsWidget extends Disposable {
574
- static { ChatModelsWidget_1 = this; }
575
- static { this.NUM_INSTANCES = 0; }
576
- constructor(languageModelsService, instantiationService, extensionService, contextMenuService, chatEntitlementService, editorProgressService, commandService, contextKeyService) {
715
+ static {
716
+ ChatModelsWidget_1 = this;
717
+ }
718
+ static {
719
+ this.NUM_INSTANCES = 0;
720
+ }
721
+ constructor(
722
+ languageModelsService,
723
+ instantiationService,
724
+ extensionService,
725
+ contextMenuService,
726
+ chatEntitlementService,
727
+ editorProgressService,
728
+ commandService,
729
+ contextKeyService
730
+ ) {
577
731
  super();
578
732
  this.languageModelsService = languageModelsService;
579
733
  this.instantiationService = instantiationService;
@@ -587,70 +741,71 @@ let ChatModelsWidget = class ChatModelsWidget extends Disposable {
587
741
  this.searchFocusContextKey = CONTEXT_MODELS_SEARCH_FOCUS.bindTo(contextKeyService);
588
742
  this.delayedFiltering = ( new Delayer(200));
589
743
  this.viewModel = this._register(this.instantiationService.createInstance(ChatModelsViewModel));
590
- this.element = $$1('.models-widget');
744
+ this.element = $$1(".models-widget");
591
745
  this.create(this.element);
592
746
  const loadingPromise = this.extensionService.whenInstalledExtensionsRegistered().then(() => this.viewModel.refresh());
593
747
  this.editorProgressService.showWhile(loadingPromise, 300);
594
748
  }
595
749
  create(container) {
596
- const searchAndButtonContainer = append(container, $('.models-search-and-button-container'));
597
- const placeholder = ( localize(5232, "Type to search..."));
598
- const searchContainer = append(searchAndButtonContainer, $('.models-search-container'));
599
- this.searchWidget = this._register(this.instantiationService.createInstance(SuggestEnabledInput, 'chatModelsWidget.searchbox', searchContainer, {
600
- triggerCharacters: ['@', ':'],
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
- }
611
- const queryParts = query.split(/\s/g);
612
- const lastPart = queryParts[queryParts.length - 1];
613
- if (lastPart.startsWith('@provider:')) {
614
- return providerSuggestions;
615
- }
616
- else if (lastPart.startsWith('@capability:')) {
617
- return SEARCH_SUGGESTIONS.CAPABILITIES;
618
- }
619
- else if (lastPart.startsWith('@visible:')) {
620
- return SEARCH_SUGGESTIONS.VISIBILITY;
621
- }
622
- else if (lastPart.startsWith('@')) {
623
- return allSuggestions;
750
+ const searchAndButtonContainer = append(container, $(".models-search-and-button-container"));
751
+ const placeholder = ( localize(5403, "Type to search..."));
752
+ const searchContainer = append(searchAndButtonContainer, $(".models-search-container"));
753
+ this.searchWidget = this._register(
754
+ this.instantiationService.createInstance(SuggestEnabledInput, "chatModelsWidget.searchbox", searchContainer, {
755
+ triggerCharacters: ["@", ":"],
756
+ provideResults: query => {
757
+ const providerSuggestions = ( this.viewModel.getVendors().map(v => `@provider:"${v.displayName}"`));
758
+ const allSuggestions = [
759
+ ...providerSuggestions,
760
+ ...SEARCH_SUGGESTIONS.CAPABILITIES,
761
+ ...SEARCH_SUGGESTIONS.VISIBILITY
762
+ ];
763
+ if (!query.trim()) {
764
+ return allSuggestions;
765
+ }
766
+ const queryParts = query.split(/\s/g);
767
+ const lastPart = queryParts[queryParts.length - 1];
768
+ if (lastPart.startsWith("@provider:")) {
769
+ return providerSuggestions;
770
+ } else if (lastPart.startsWith("@capability:")) {
771
+ return SEARCH_SUGGESTIONS.CAPABILITIES;
772
+ } else if (lastPart.startsWith("@visible:")) {
773
+ return SEARCH_SUGGESTIONS.VISIBILITY;
774
+ } else if (lastPart.startsWith("@")) {
775
+ return allSuggestions;
776
+ }
777
+ return [];
624
778
  }
625
- return [];
626
- }
627
- }, placeholder, `chatModelsWidget:searchinput:${ChatModelsWidget_1.NUM_INSTANCES++}`, {
628
- placeholderText: placeholder,
629
- styleOverrides: {
630
- inputBorder: settingsTextInputBorder
631
- },
632
- focusContextKey: this.searchFocusContextKey,
633
- }));
779
+ }, placeholder, `chatModelsWidget:searchinput:${ChatModelsWidget_1.NUM_INSTANCES++}`, {
780
+ placeholderText: placeholder,
781
+ styleOverrides: {
782
+ inputBorder: settingsTextInputBorder
783
+ },
784
+ focusContextKey: this.searchFocusContextKey
785
+ })
786
+ );
634
787
  const filterAction = this._register(( new ModelsFilterAction()));
635
- const clearSearchAction = this._register(( new Action('workbench.models.clearSearch', ( localize(5233, "Clear Search")), ThemeIcon.asClassName(preferencesClearInputIcon), false, () => {
636
- this.searchWidget.setValue('');
637
- this.searchWidget.focus();
638
- })));
639
- const collapseAllAction = this._register(( new Action('workbench.models.collapseAll', ( localize(5234, "Collapse All")), ThemeIcon.asClassName(Codicon.collapseAll), false, () => {
788
+ const clearSearchAction = this._register(( new Action("workbench.models.clearSearch", ( localize(5404, "Clear Search")), ThemeIcon.asClassName(preferencesClearInputIcon), false, () => this.clearSearch())));
789
+ const collapseAllAction = this._register(( new Action("workbench.models.collapseAll", ( localize(5405, "Collapse All")), ThemeIcon.asClassName(Codicon.collapseAll), false, () => {
640
790
  this.viewModel.collapseAll();
641
791
  })));
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)))));
792
+ collapseAllAction.enabled = ( this.viewModel.viewModelEntries.some(e => isLanguageModelGroupEntry(e) || isLanguageModelProviderEntry(e)));
793
+ this._register(
794
+ this.viewModel.onDidChange(() => collapseAllAction.enabled = ( this.viewModel.viewModelEntries.some(e => isLanguageModelProviderEntry(e) || isLanguageModelGroupEntry(e))))
795
+ );
644
796
  this._register(this.searchWidget.onInputDidChange(() => {
645
797
  clearSearchAction.enabled = !!this.searchWidget.getValue();
646
798
  this.filterModels();
647
799
  }));
648
- this.searchActionsContainer = append(searchContainer, $('.models-search-actions'));
800
+ this.searchActionsContainer = append(searchContainer, $(".models-search-actions"));
649
801
  const actions = [clearSearchAction, collapseAllAction, filterAction];
650
802
  const toolBar = this._register(( new ToolBar(this.searchActionsContainer, this.contextMenuService, {
651
803
  actionViewItemProvider: (action, options) => {
652
804
  if (action.id === filterAction.id) {
653
- return this.instantiationService.createInstance(ModelsSearchFilterDropdownMenuActionViewItem, action, options, this.searchWidget, this.viewModel);
805
+ return this.instantiationService.createInstance(ModelsSearchFilterDropdownMenuActionViewItem, action, options, {
806
+ getValue: () => this.searchWidget.getValue(),
807
+ setValue: searchValue => this.search(searchValue)
808
+ }, this.viewModel);
654
809
  }
655
810
  return undefined;
656
811
  },
@@ -658,26 +813,32 @@ let ChatModelsWidget = class ChatModelsWidget extends Disposable {
658
813
  })));
659
814
  toolBar.setActions(actions);
660
815
  this.searchWidget.inputWidget.getContainerDomNode().style.paddingRight = `${getTotalWidth(this.searchActionsContainer) + 12}px`;
661
- this.addButtonContainer = append(searchAndButtonContainer, $('.section-title-actions'));
816
+ this.addButtonContainer = append(searchAndButtonContainer, $(".section-title-actions"));
662
817
  const buttonOptions = {
663
818
  ...defaultButtonStyles,
664
- supportIcons: true,
819
+ supportIcons: true
665
820
  };
666
821
  this.addButton = this._register(( new Button(this.addButtonContainer, buttonOptions)));
667
- this.addButton.label = `$(${Codicon.add.id}) ${( localize(5235, 'Add Models...'))}`;
668
- this.addButton.element.classList.add('models-add-model-button');
669
- this.addButton.enabled = false;
670
- this._register(this.addButton.onDidClick((e) => {
822
+ this.addButton.label = `$(${Codicon.add.id}) ${( localize(5406, "Add Models..."))}`;
823
+ this.addButton.element.classList.add("models-add-model-button");
824
+ this.updateAddModelsButton();
825
+ this._register(this.addButton.onDidClick(e => {
671
826
  if (this.dropdownActions.length > 0) {
672
827
  this.contextMenuService.showContextMenu({
673
828
  getAnchor: () => this.addButton.element,
674
- getActions: () => this.dropdownActions,
829
+ getActions: () => this.dropdownActions
675
830
  });
676
831
  }
677
832
  }));
678
- this.tableContainer = append(container, $('.models-table-container'));
833
+ this.tableContainer = append(container, $(".models-table-container"));
679
834
  this.createTable();
680
835
  this._register(this.viewModel.onDidChangeGrouping(() => this.createTable()));
836
+ this._register(
837
+ this.chatEntitlementService.onDidChangeEntitlement(() => this.updateAddModelsButton())
838
+ );
839
+ this._register(
840
+ this.languageModelsService.onDidChangeLanguageModelVendors(() => this.updateAddModelsButton())
841
+ );
681
842
  }
682
843
  createTable() {
683
844
  this.tableDisposables.clear();
@@ -692,149 +853,227 @@ let ChatModelsWidget = class ChatModelsWidget extends Disposable {
692
853
  this.tableDisposables.add(capabilitiesColumnRenderer.onDidClickCapability(capability => {
693
854
  const currentQuery = this.searchWidget.getValue();
694
855
  const query = `@capability:${capability}`;
695
- const newQuery = toggleFilter(currentQuery, query);
696
- this.searchWidget.setValue(newQuery);
697
- this.searchWidget.focus();
856
+ const newQuery = toggleFilter(currentQuery, {
857
+ query
858
+ });
859
+ this.search(newQuery);
698
860
  }));
699
- const columns = [
700
- {
701
- label: '',
702
- tooltip: '',
703
- weight: 0.05,
704
- minimumWidth: 40,
705
- maximumWidth: 40,
706
- templateId: GutterColumnRenderer.TEMPLATE_ID,
707
- project(row) { return row; }
708
- },
709
- {
710
- label: ( localize(5236, 'Name')),
711
- tooltip: '',
712
- weight: 0.35,
713
- minimumWidth: 200,
714
- templateId: ModelNameColumnRenderer.TEMPLATE_ID,
715
- project(row) { return row; }
861
+ const columns = [{
862
+ label: "",
863
+ tooltip: "",
864
+ weight: 0.05,
865
+ minimumWidth: 40,
866
+ maximumWidth: 40,
867
+ templateId: GutterColumnRenderer.TEMPLATE_ID,
868
+ project(row) {
869
+ return row;
870
+ }
871
+ }, {
872
+ label: ( localize(5407, "Name")),
873
+ tooltip: "",
874
+ weight: 0.35,
875
+ minimumWidth: 200,
876
+ templateId: ModelNameColumnRenderer.TEMPLATE_ID,
877
+ project(row) {
878
+ return row;
716
879
  }
717
- ];
880
+ }];
718
881
  if (this.viewModel.groupBy === ChatModelGroup.Visibility) {
719
882
  columns.push({
720
- label: ( localize(5237, 'Provider')),
721
- tooltip: '',
883
+ label: ( localize(5408, "Provider")),
884
+ tooltip: "",
722
885
  weight: 0.15,
723
886
  minimumWidth: 100,
724
887
  templateId: ProviderColumnRenderer.TEMPLATE_ID,
725
- project(row) { return row; }
888
+ project(row) {
889
+ return row;
890
+ }
726
891
  });
727
892
  }
728
893
  columns.push({
729
- label: ( localize(5238, 'Context Size')),
730
- tooltip: '',
894
+ label: ( localize(5409, "Context Size")),
895
+ tooltip: "",
731
896
  weight: 0.1,
732
897
  minimumWidth: 140,
733
898
  templateId: TokenLimitsColumnRenderer.TEMPLATE_ID,
734
- project(row) { return row; }
899
+ project(row) {
900
+ return row;
901
+ }
735
902
  }, {
736
- label: ( localize(5239, 'Capabilities')),
737
- tooltip: '',
738
- weight: 0.25,
903
+ label: ( localize(5410, "Capabilities")),
904
+ tooltip: "",
905
+ weight: 0.2,
739
906
  minimumWidth: 180,
740
907
  templateId: CapabilitiesColumnRenderer.TEMPLATE_ID,
741
- project(row) { return row; }
908
+ project(row) {
909
+ return row;
910
+ }
742
911
  }, {
743
- label: ( localize(5240, 'Multiplier')),
744
- tooltip: '',
745
- weight: 0.05,
912
+ label: ( localize(5411, "Request Multiplier")),
913
+ tooltip: "",
914
+ weight: 0.1,
746
915
  minimumWidth: 60,
747
916
  templateId: MultiplierColumnRenderer.TEMPLATE_ID,
748
- project(row) { return row; }
917
+ project(row) {
918
+ return row;
919
+ }
749
920
  }, {
750
- label: '',
751
- tooltip: '',
921
+ label: "",
922
+ tooltip: "",
752
923
  weight: 0.05,
753
924
  minimumWidth: 64,
754
925
  maximumWidth: 64,
755
926
  templateId: ActionsColumnRenderer.TEMPLATE_ID,
756
- project(row) { return row; }
927
+ project(row) {
928
+ return row;
929
+ }
757
930
  });
758
- this.table = this.tableDisposables.add(this.instantiationService.createInstance(WorkbenchTable, 'ModelsWidget', this.tableContainer, ( new Delegate()), columns, [
759
- gutterColumnRenderer,
760
- modelNameColumnRenderer,
761
- costColumnRenderer,
762
- tokenLimitsColumnRenderer,
763
- capabilitiesColumnRenderer,
764
- actionsColumnRenderer,
765
- providerColumnRenderer
766
- ], {
767
- identityProvider: { getId: (e) => e.id },
768
- horizontalScrolling: false,
769
- accessibilityProvider: {
770
- getAriaLabel: (e) => {
771
- if (isVendorEntry(e)) {
772
- return localize(5241, '{0} Models', e.vendorEntry.vendorDisplayName);
773
- }
774
- else if (isGroupEntry(e)) {
775
- return e.id === 'visible' ? ( localize(5242, 'Visible Models')) : ( localize(5243, 'Hidden Models'));
776
- }
777
- const ariaLabels = [];
778
- ariaLabels.push(( localize(
779
- 5244,
780
- '{0} from {1}',
781
- e.modelEntry.metadata.name,
782
- e.modelEntry.vendorDisplayName
783
- )));
784
- if (e.modelEntry.metadata.maxInputTokens && e.modelEntry.metadata.maxOutputTokens) {
785
- ariaLabels.push(( localize(
786
- 5245,
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
- 5246,
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 !== '-') {
931
+ this.table = this.tableDisposables.add(
932
+ this.instantiationService.createInstance(WorkbenchTable, "ModelsWidget", this.tableContainer, ( new Delegate()), columns, [
933
+ gutterColumnRenderer,
934
+ modelNameColumnRenderer,
935
+ costColumnRenderer,
936
+ tokenLimitsColumnRenderer,
937
+ capabilitiesColumnRenderer,
938
+ actionsColumnRenderer,
939
+ providerColumnRenderer
940
+ ], {
941
+ identityProvider: {
942
+ getId: e => e.id
943
+ },
944
+ horizontalScrolling: false,
945
+ accessibilityProvider: {
946
+ getAriaLabel: e => {
947
+ if (isLanguageModelProviderEntry(e)) {
948
+ return localize(5412, "{0} Models", e.vendorEntry.group.name);
949
+ } else if (isLanguageModelGroupEntry(e)) {
950
+ return e.id === "visible" ? ( localize(5413, "Visible Models")) : ( localize(5414, "Hidden Models"));
951
+ } else if (isStatusEntry(e)) {
952
+ return localize(5415, "Status: {0}", e.message);
953
+ }
954
+ const ariaLabels = [];
801
955
  ariaLabels.push(( localize(
802
- 5225,
803
- "Every chat message counts {0} towards your premium model request quota",
804
- multiplierText
956
+ 5416,
957
+ "{0} from {1}",
958
+ e.model.metadata.name,
959
+ e.model.provider.vendor.displayName
805
960
  )));
806
- }
807
- if (e.modelEntry.metadata.isUserSelectable) {
808
- ariaLabels.push(( localize(5247, 'This model is visible in the chat model picker')));
809
- }
810
- else {
811
- ariaLabels.push(( localize(5248, 'This model is hidden in the chat model picker')));
812
- }
813
- return ariaLabels.join('. ');
961
+ if (e.model.metadata.maxInputTokens && e.model.metadata.maxOutputTokens) {
962
+ ariaLabels.push(( localize(
963
+ 5417,
964
+ "Context size: {0} input tokens and {1} output tokens",
965
+ formatTokenCount(e.model.metadata.maxInputTokens),
966
+ formatTokenCount(e.model.metadata.maxOutputTokens)
967
+ )));
968
+ }
969
+ if (e.model.metadata.capabilities) {
970
+ ariaLabels.push(( localize(
971
+ 5418,
972
+ "Capabilities: {0}",
973
+ ( Object.keys(e.model.metadata.capabilities)).join(", ")
974
+ )));
975
+ }
976
+ const multiplierText = e.model.metadata.multiplier ?? "-";
977
+ if (multiplierText !== "-") {
978
+ ariaLabels.push(( localize(
979
+ 5393,
980
+ "Every chat message counts {0} towards your premium model request quota",
981
+ multiplierText
982
+ )));
983
+ }
984
+ if (e.model.visible) {
985
+ ariaLabels.push(( localize(5419, "This model is visible in the chat model picker")));
986
+ } else {
987
+ ariaLabels.push(( localize(5420, "This model is hidden in the chat model picker")));
988
+ }
989
+ return ariaLabels.join(". ");
990
+ },
991
+ getWidgetAriaLabel: () => ( localize(5421, "Language Models"))
814
992
  },
815
- getWidgetAriaLabel: () => ( localize(5249, 'Language Models'))
816
- },
817
- multipleSelectionSupport: false,
818
- setRowLineHeight: false,
819
- openOnSingleClick: true,
820
- alwaysConsumeMouseWheel: false,
821
- }));
993
+ multipleSelectionSupport: true,
994
+ setRowLineHeight: false,
995
+ openOnSingleClick: true,
996
+ alwaysConsumeMouseWheel: false
997
+ })
998
+ );
822
999
  this.tableDisposables.add(this.table.onContextMenu(e => {
823
1000
  if (!e.element) {
824
1001
  return;
825
1002
  }
826
- const entry = e.element;
827
- if (isVendorEntry(entry) && entry.vendorEntry.managementCommand) {
828
- const actions = [
829
- toAction({
830
- id: 'manageVendor',
831
- label: ( localize(5231, 'Manage {0}...', entry.vendorEntry.vendorDisplayName)),
832
- run: async () => {
833
- await this.commandService.executeCommand(entry.vendorEntry.managementCommand, entry.vendorEntry.vendor);
834
- await this.viewModel.refresh();
835
- }
836
- })
837
- ];
1003
+ const selection = this.table.getSelection();
1004
+ const selectedEntries = selection.every(i => i !== e.index) ? [e.element] : ( selection.map(i => this.viewModel.viewModelEntries[i])).filter(e => !!e);
1005
+ const selectedModelEntries = selectedEntries.filter(
1006
+ entry => !isLanguageModelProviderEntry(entry) && !isLanguageModelGroupEntry(entry) && !isStatusEntry(entry)
1007
+ );
1008
+ const actions = [];
1009
+ let configureGroup;
1010
+ let configureVendor;
1011
+ if (selectedModelEntries.length) {
1012
+ const visibleModels = selectedModelEntries.filter(entry => entry.model.visible);
1013
+ const hiddenModels = selectedModelEntries.filter(entry => !entry.model.visible);
1014
+ actions.push(toAction({
1015
+ id: "hideSelectedModels",
1016
+ label: ( localize(5422, "Hide in the Chat Model Picker")),
1017
+ enabled: visibleModels.length > 0,
1018
+ run: () => this.viewModel.setModelsVisibility(selectedModelEntries, false)
1019
+ }));
1020
+ actions.push(toAction({
1021
+ id: "showSelectedModels",
1022
+ label: ( localize(5423, "Show in the Chat Model Picker")),
1023
+ enabled: hiddenModels.length > 0,
1024
+ run: () => this.viewModel.setModelsVisibility(selectedModelEntries, true)
1025
+ }));
1026
+ configureGroup = selectedModelEntries[0].model.provider.group.name;
1027
+ configureVendor = selectedModelEntries[0].model.provider.vendor;
1028
+ if (( selectedModelEntries.some(
1029
+ entry => entry.model.provider.vendor.isDefault || entry.model.provider.group.name !== configureGroup
1030
+ ))) {
1031
+ configureGroup = undefined;
1032
+ configureVendor = undefined;
1033
+ }
1034
+ } else if (selectedEntries.length === 1) {
1035
+ const entry = e.element;
1036
+ if (isLanguageModelProviderEntry(entry)) {
1037
+ if (!entry.vendorEntry.vendor.isDefault) {
1038
+ actions.push(toAction({
1039
+ id: "hideAllModels",
1040
+ label: ( localize(5424, "Hide in the Chat Model Picker")),
1041
+ run: () => this.viewModel.setGroupVisibility(entry, false)
1042
+ }));
1043
+ actions.push(toAction({
1044
+ id: "showAllModels",
1045
+ label: ( localize(5425, "Show in the Chat Model Picker")),
1046
+ run: () => this.viewModel.setGroupVisibility(entry, true)
1047
+ }));
1048
+ }
1049
+ configureGroup = entry.vendorEntry.group.name;
1050
+ configureVendor = entry.vendorEntry.vendor;
1051
+ }
1052
+ }
1053
+ if (configureGroup && configureVendor) {
1054
+ if (configureVendor.managementCommand || configureVendor.configuration) {
1055
+ if (actions.length) {
1056
+ actions.push(( new Separator()));
1057
+ }
1058
+ if (configureVendor.managementCommand) {
1059
+ actions.push(toAction({
1060
+ id: "configureVendor",
1061
+ label: ( localize(5426, "Configure")),
1062
+ run: async () => {
1063
+ await this.commandService.executeCommand(configureVendor.managementCommand, configureVendor.vendor);
1064
+ await this.viewModel.refresh();
1065
+ }
1066
+ }));
1067
+ } else {
1068
+ actions.push(toAction({
1069
+ id: "configureVendor",
1070
+ label: ( localize(5426, "Configure")),
1071
+ run: () => this.languageModelsService.configureLanguageModelsProviderGroup(configureVendor.vendor, configureGroup)
1072
+ }));
1073
+ }
1074
+ }
1075
+ }
1076
+ if (actions.length > 0) {
838
1077
  this.contextMenuService.showContextMenu({
839
1078
  getAnchor: () => e.anchor,
840
1079
  getActions: () => actions
@@ -842,38 +1081,41 @@ let ChatModelsWidget = class ChatModelsWidget extends Disposable {
842
1081
  }
843
1082
  }));
844
1083
  this.table.splice(0, this.table.length, this.viewModel.viewModelEntries);
845
- this.tableDisposables.add(this.viewModel.onDidChange(({ at, removed, added }) => {
1084
+ this.tableDisposables.add(this.viewModel.onDidChange((
1085
+ {
1086
+ at,
1087
+ removed,
1088
+ added
1089
+ }
1090
+ ) => {
846
1091
  this.table.splice(at, removed, added);
847
1092
  if (this.viewModel.selectedEntry) {
848
1093
  const selectedEntryIndex = this.viewModel.viewModelEntries.indexOf(this.viewModel.selectedEntry);
849
1094
  this.table.setFocus([selectedEntryIndex]);
850
1095
  this.table.setSelection([selectedEntryIndex]);
851
1096
  }
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
1097
  }));
865
- this.tableDisposables.add(this.table.onDidOpen(async ({ element, browserEvent }) => {
1098
+ this.tableDisposables.add(this.table.onDidOpen(async (
1099
+ {
1100
+ element,
1101
+ browserEvent
1102
+ }
1103
+ ) => {
866
1104
  if (!element) {
867
1105
  return;
868
1106
  }
869
- if (isVendorEntry(element) || isGroupEntry(element)) {
870
- this.viewModel.toggleCollapsed(element);
1107
+ if (isStatusEntry(element)) {
1108
+ return;
871
1109
  }
872
- else if (!isMouseEvent(browserEvent) || browserEvent.detail === 2) {
1110
+ if (isLanguageModelProviderEntry(element) || isLanguageModelGroupEntry(element)) {
1111
+ this.viewModel.toggleCollapsed(element);
1112
+ } else if (!isMouseEvent(browserEvent) || browserEvent.detail === 2) {
873
1113
  this.viewModel.toggleVisibility(element);
874
1114
  }
875
1115
  }));
876
- this.tableDisposables.add(this.table.onDidChangeSelection(e => this.viewModel.selectedEntry = e.elements[0]));
1116
+ this.tableDisposables.add(
1117
+ this.table.onDidChangeSelection(e => this.viewModel.selectedEntry = e.elements[0])
1118
+ );
877
1119
  this.tableDisposables.add(this.table.onDidBlur(() => {
878
1120
  if (this.viewModel.shouldRefilter()) {
879
1121
  this.viewModel.filter(this.searchWidget.getValue());
@@ -881,18 +1123,35 @@ let ChatModelsWidget = class ChatModelsWidget extends Disposable {
881
1123
  }));
882
1124
  this.layout(this.element.clientHeight, this.element.clientWidth);
883
1125
  }
1126
+ updateAddModelsButton() {
1127
+ const configurableVendors = this.languageModelsService.getVendors().filter(vendor => vendor.managementCommand || vendor.configuration);
1128
+ const entitlement = this.chatEntitlementService.entitlement;
1129
+ const isManagedEntitlement = entitlement === ChatEntitlement.Business || entitlement === ChatEntitlement.Enterprise;
1130
+ const supportsAddingModels = this.chatEntitlementService.isInternal || (entitlement !== ChatEntitlement.Unknown && entitlement !== ChatEntitlement.Available && !isManagedEntitlement);
1131
+ this.addButton.enabled = supportsAddingModels && configurableVendors.length > 0;
1132
+ this.addButton.setTitle(!supportsAddingModels && isManagedEntitlement ? ( localize(5427, "Adding models is managed by your organization")) : "");
1133
+ this.dropdownActions = ( configurableVendors.map(vendor => toAction({
1134
+ id: `enable-${vendor.vendor}`,
1135
+ label: vendor.displayName,
1136
+ run: async () => {
1137
+ await this.addModelsForVendor(vendor);
1138
+ }
1139
+ })));
1140
+ }
884
1141
  filterModels() {
885
1142
  this.delayedFiltering.trigger(() => {
886
1143
  this.viewModel.filter(this.searchWidget.getValue());
887
1144
  });
888
1145
  }
889
- async enableProvider(vendorId) {
890
- await this.languageModelsService.selectLanguageModels({ vendor: vendorId }, true);
891
- await this.viewModel.refresh();
1146
+ async addModelsForVendor(vendor) {
1147
+ this.languageModelsService.configureLanguageModelsProviderGroup(vendor.vendor);
892
1148
  }
893
1149
  layout(height, width) {
894
1150
  width = width - 24;
895
- this.searchWidget.layout(new Dimension(width - this.searchActionsContainer.clientWidth - this.addButtonContainer.clientWidth - 8, 22));
1151
+ this.searchWidget.layout(new Dimension(
1152
+ width - this.searchActionsContainer.clientWidth - this.addButtonContainer.clientWidth - 8,
1153
+ 22
1154
+ ));
896
1155
  const tableHeight = height - 40;
897
1156
  this.tableContainer.style.height = `${tableHeight}px`;
898
1157
  this.table.layout(tableHeight, width);
@@ -903,9 +1162,11 @@ let ChatModelsWidget = class ChatModelsWidget extends Disposable {
903
1162
  search(filter) {
904
1163
  this.focusSearch();
905
1164
  this.searchWidget.setValue(filter);
1165
+ this.viewModel.filter(filter);
906
1166
  }
907
1167
  clearSearch() {
908
- this.searchWidget.setValue('');
1168
+ this.focusSearch();
1169
+ this.searchWidget.setValue("");
909
1170
  }
910
1171
  render() {
911
1172
  if (this.viewModel.shouldRefilter()) {
@@ -913,15 +1174,6 @@ let ChatModelsWidget = class ChatModelsWidget extends Disposable {
913
1174
  }
914
1175
  }
915
1176
  };
916
- ChatModelsWidget = ChatModelsWidget_1 = ( __decorate([
917
- ( __param(0, ILanguageModelsService)),
918
- ( __param(1, IInstantiationService)),
919
- ( __param(2, IExtensionService)),
920
- ( __param(3, IContextMenuService)),
921
- ( __param(4, IChatEntitlementService)),
922
- ( __param(5, IEditorProgressService)),
923
- ( __param(6, ICommandService)),
924
- ( __param(7, IContextKeyService))
925
- ], ChatModelsWidget));
1177
+ ChatModelsWidget = ChatModelsWidget_1 = ( __decorate([( __param(0, ILanguageModelsService)), ( __param(1, IInstantiationService)), ( __param(2, IExtensionService)), ( __param(3, IContextMenuService)), ( __param(4, IChatEntitlementService)), ( __param(5, IEditorProgressService)), ( __param(6, ICommandService)), ( __param(7, IContextKeyService))], ChatModelsWidget));
926
1178
 
927
1179
  export { ChatModelsWidget };