@codingame/monaco-vscode-chat-service-override 19.1.4 → 20.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 (211) hide show
  1. package/index.js +20 -8
  2. package/package.json +36 -31
  3. package/vscode/src/vs/base/common/policy.d.ts +14 -0
  4. package/vscode/src/vs/base/common/policy.js +11 -0
  5. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +53 -43
  6. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatClearActions.js +54 -24
  7. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.d.ts +2 -2
  8. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +14 -14
  9. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContext.js +15 -15
  10. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +37 -25
  11. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +4 -4
  12. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +2 -2
  13. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +4 -4
  14. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.js +1 -1
  15. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +6 -6
  16. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +23 -11
  17. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +9 -9
  18. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.d.ts +1 -1
  19. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +11 -11
  20. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +83 -14
  21. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +421 -21
  22. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.d.ts +1 -1
  23. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +20 -20
  24. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +215 -104
  25. package/vscode/src/vs/workbench/contrib/chat/browser/chatAccessibilityService.d.ts +3 -1
  26. package/vscode/src/vs/workbench/contrib/chat/browser/chatAccessibilityService.js +9 -3
  27. package/vscode/src/vs/workbench/contrib/chat/browser/chatAttachmentResolveService.d.ts +3 -1
  28. package/vscode/src/vs/workbench/contrib/chat/browser/chatAttachmentResolveService.js +18 -6
  29. package/vscode/src/vs/workbench/contrib/chat/browser/chatContentParts/chatMarkdownAnchorService.d.ts +1 -1
  30. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +4 -4
  31. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +20 -20
  32. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +14 -14
  33. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.d.ts +1 -1
  34. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +6 -3
  35. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.d.ts +4 -2
  36. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +9 -6
  37. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +1 -1
  38. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +11 -8
  39. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.d.ts +5 -3
  40. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +16 -11
  41. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.d.ts +7 -23
  42. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +58 -326
  43. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.d.ts +0 -1
  44. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.js +33 -30
  45. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.d.ts +12 -1
  46. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +39 -17
  47. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTimeline.d.ts +55 -0
  48. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTimeline.js +380 -0
  49. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingModifiedNotebookSnapshot.js +3 -2
  50. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.d.ts +1 -1
  51. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.js +1 -1
  52. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +5 -5
  53. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/notebookCellChanges.js +4 -2
  54. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.d.ts +1 -1
  55. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.js +1 -1
  56. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/simpleBrowserEditorOverlay.js +22 -22
  57. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.d.ts +9 -4
  58. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.js +44 -10
  59. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.d.ts +38 -0
  60. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +145 -0
  61. package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +34 -34
  62. package/vscode/src/vs/workbench/contrib/chat/browser/chatPasteProviders.js +7 -7
  63. package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.d.ts +1 -1
  64. package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.js +3 -3
  65. package/vscode/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.d.ts +1 -1
  66. package/vscode/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.js +36 -11
  67. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.d.ts +49 -0
  68. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.js +407 -0
  69. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.d.ts +12 -0
  70. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.js +738 -0
  71. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup.d.ts +1 -1
  72. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup.js +142 -151
  73. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus.d.ts +1 -1
  74. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus.js +54 -54
  75. package/vscode/src/vs/workbench/contrib/chat/browser/chatVariables.js +20 -0
  76. package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.d.ts +4 -3
  77. package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.js +5 -4
  78. package/vscode/src/vs/workbench/contrib/chat/browser/codeBlockContextProviderService.d.ts +1 -1
  79. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorContrib.js +23 -7
  80. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorHover.d.ts +1 -1
  81. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorHover.js +3 -3
  82. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsService.d.ts +1 -0
  83. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsService.js +13 -8
  84. package/vscode/src/vs/workbench/contrib/chat/browser/media/apple-dark.svg +3 -0
  85. package/vscode/src/vs/workbench/contrib/chat/browser/media/apple-light.svg +3 -0
  86. package/vscode/src/vs/workbench/contrib/chat/browser/media/chatSessions.css +28 -0
  87. package/vscode/src/vs/workbench/contrib/chat/browser/media/chatSetup.css +7 -7
  88. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/attachInstructionsAction.d.ts +2 -2
  89. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/attachInstructionsAction.js +14 -14
  90. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +8 -8
  91. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/newPromptFileActions.js +10 -10
  92. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptName.d.ts +1 -1
  93. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptName.js +11 -11
  94. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptSourceFolder.d.ts +1 -1
  95. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptSourceFolder.js +19 -19
  96. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/promptFilePickers.d.ts +1 -1
  97. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/promptFilePickers.js +14 -14
  98. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionContribution.js +1 -1
  99. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +3 -3
  100. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +4 -4
  101. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +10 -10
  102. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +11 -11
  103. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveToPromptAction.d.ts +1 -7
  104. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveToPromptAction.js +52 -90
  105. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +15 -15
  106. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +6 -6
  107. package/vscode/src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.d.ts +2 -2
  108. package/vscode/src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.js +6 -2
  109. package/vscode/src/vs/workbench/contrib/chat/common/chatResponseResourceFileSystemProvider.js +9 -6
  110. package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.d.ts +11 -6
  111. package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.js +137 -30
  112. package/vscode/src/vs/workbench/contrib/chat/common/chatServiceTelemetry.js +8 -0
  113. package/vscode/src/vs/workbench/contrib/chat/common/chatSessionStore.d.ts +1 -1
  114. package/vscode/src/vs/workbench/contrib/chat/common/chatSessionStore.js +3 -3
  115. package/vscode/src/vs/workbench/contrib/chat/common/chatTodoListService.d.ts +27 -0
  116. package/vscode/src/vs/workbench/contrib/chat/common/chatTodoListService.js +44 -0
  117. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/config/configMigration.js +1 -1
  118. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contentProviders/filePromptContentsProvider.js +2 -2
  119. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contentProviders/promptContentsProviderBase.d.ts +1 -1
  120. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contentProviders/promptContentsProviderBase.js +1 -1
  121. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +1 -1
  122. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.js +3 -5
  123. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderHovers.js +14 -14
  124. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptLinkDiagnosticsProvider.js +1 -1
  125. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptPathAutocompletion.js +1 -1
  126. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/providerInstanceManagerBase.js +2 -2
  127. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.js +1 -1
  128. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/headerBase.js +4 -4
  129. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/instructionsHeader.d.ts +1 -1
  130. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/applyTo.js +3 -3
  131. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/base/enum.js +1 -1
  132. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/base/string.js +1 -1
  133. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/tools.js +4 -4
  134. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/modeHeader.d.ts +1 -1
  135. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/promptHeader.d.ts +1 -1
  136. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/promptHeader.js +1 -1
  137. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/topError.js +9 -9
  138. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +1 -1
  139. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +8 -8
  140. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +1 -1
  141. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +2 -2
  142. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +27 -27
  143. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.d.ts +1 -1
  144. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +2 -2
  145. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +9 -9
  146. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibilityHelp.js +1 -1
  147. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.js +4 -4
  148. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +104 -0
  149. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +667 -0
  150. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatCurrentLine.js +14 -14
  151. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatNotebook.js +1 -1
  152. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.d.ts +1 -1
  153. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.js +2 -2
  154. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +7 -7
  155. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/media/terminalChatWidget.css +56 -0
  156. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminal.chat.contribution.d.ts +1 -0
  157. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminal.chat.contribution.js +14 -0
  158. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.d.ts +11 -0
  159. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +111 -0
  160. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibleView.d.ts +10 -0
  161. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibleView.js +52 -0
  162. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.d.ts +1 -0
  163. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +262 -0
  164. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.d.ts +35 -0
  165. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.js +129 -0
  166. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatControllerHolder.d.ts +3 -0
  167. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatControllerHolder.js +8 -0
  168. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatEnabler.d.ts +9 -0
  169. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatEnabler.js +30 -0
  170. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.d.ts +72 -0
  171. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +411 -0
  172. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.d.ts +3 -0
  173. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.js +59 -0
  174. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/bufferOutputPolling.d.ts +51 -0
  175. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/bufferOutputPolling.js +163 -0
  176. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.d.ts +24 -0
  177. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.js +164 -0
  178. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.d.ts +14 -0
  179. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.js +101 -0
  180. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.d.ts +16 -0
  181. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.js +52 -0
  182. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.d.ts +12 -0
  183. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.js +71 -0
  184. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.d.ts +14 -0
  185. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.js +94 -0
  186. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/getTerminalOutputTool.d.ts +11 -0
  187. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/getTerminalOutputTool.js +44 -0
  188. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.d.ts +3 -0
  189. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.js +18 -0
  190. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.d.ts +3 -0
  191. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +13 -0
  192. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.d.ts +55 -0
  193. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.js +603 -0
  194. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/subCommands.d.ts +3 -0
  195. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/subCommands.js +113 -0
  196. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/createAndRunTaskTool.d.ts +21 -0
  197. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/createAndRunTaskTool.js +227 -0
  198. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/getTaskOutputTool.d.ts +19 -0
  199. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/getTaskOutputTool.js +88 -0
  200. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/runTaskTool.d.ts +21 -0
  201. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/runTaskTool.js +140 -0
  202. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/taskHelpers.d.ts +22 -0
  203. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/taskHelpers.js +80 -0
  204. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task.chatAgentTools.contribution.d.ts +1 -0
  205. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task.chatAgentTools.contribution.js +40 -0
  206. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.d.ts +1 -0
  207. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +36 -0
  208. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.d.ts +20 -0
  209. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +114 -0
  210. package/vscode/src/vs/workbench/contrib/chat/browser/media/google-mono-dark.svg +0 -3
  211. package/vscode/src/vs/workbench/contrib/chat/browser/media/google-mono-light.svg +0 -3
@@ -8,17 +8,26 @@ import { ThemeIcon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/th
8
8
  import { assertType } from '@codingame/monaco-vscode-api/vscode/vs/base/common/types';
9
9
  import { generateUuid } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uuid';
10
10
  import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
11
+ import { CommandsRegistry } from '@codingame/monaco-vscode-api/vscode/vs/platform/commands/common/commands';
11
12
  import { ICommandService } from '@codingame/monaco-vscode-api/vscode/vs/platform/commands/common/commands.service';
13
+ import { ExtensionIdentifier } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensions/common/extensions';
12
14
  import { IQuickInputService } from '@codingame/monaco-vscode-api/vscode/vs/platform/quickinput/common/quickInput.service';
15
+ import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
13
16
  import { IEditorService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/editor/common/editorService.service';
17
+ import { ExtensionEditorTab } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/extensions/common/extensions';
14
18
  import { IExtensionsWorkbenchService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/extensions/common/extensions.service';
15
19
  import { McpCommandIds } from '@codingame/monaco-vscode-dc3fa21d-a483-5b99-a7ab-173235644a34-common/vscode/vs/workbench/contrib/mcp/common/mcpCommandIds';
16
20
  import { IMcpRegistry } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpRegistryTypes.service';
17
- import { McpConnectionState } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpTypes';
18
- import { IMcpService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpTypes.service';
21
+ import { McpServerEditorTab, McpConnectionState } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpTypes';
22
+ import { IMcpService, IMcpWorkbenchService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpTypes.service';
19
23
  import { ToolDataSource, ToolSet } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService';
20
24
  import { ILanguageModelToolsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService.service';
21
25
  import { ConfigureToolSets } from '../tools/toolSetsContribution.js';
26
+ import { IContextKeyService } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service';
27
+ import { ChatContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatContextKeys';
28
+ import { Iterable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/iterator';
29
+ import Severity from '@codingame/monaco-vscode-api/vscode/vs/base/common/severity';
30
+ import { markdownCommandLink } from '@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent';
22
31
 
23
32
  var BucketOrdinal;
24
33
  (function (BucketOrdinal) {
@@ -42,13 +51,372 @@ function isCallbackPick(obj) {
42
51
  function isActionableButton(obj) {
43
52
  return typeof obj.action === 'function';
44
53
  }
54
+ function isBucketTreeItem(item) {
55
+ return item.itemType === 'bucket';
56
+ }
57
+ function isToolSetTreeItem(item) {
58
+ return item.itemType === 'toolset';
59
+ }
60
+ function isToolTreeItem(item) {
61
+ return item.itemType === 'tool';
62
+ }
63
+ function isCallbackTreeItem(item) {
64
+ return item.itemType === 'callback';
65
+ }
66
+ function mapIconToTreeItem(icon, useDefaultToolIcon = false) {
67
+ if (!icon) {
68
+ if (useDefaultToolIcon) {
69
+ return { iconClass: ThemeIcon.asClassName(Codicon.tools) };
70
+ }
71
+ return {};
72
+ }
73
+ if (ThemeIcon.isThemeIcon(icon)) {
74
+ return { iconClass: ThemeIcon.asClassName(icon) };
75
+ }
76
+ else {
77
+ return { iconPath: icon };
78
+ }
79
+ }
80
+ function createToolTreeItemFromData(tool, checked) {
81
+ const iconProps = mapIconToTreeItem(tool.icon, true);
82
+ return {
83
+ itemType: 'tool',
84
+ tool,
85
+ id: tool.id,
86
+ label: tool.toolReferenceName ?? tool.displayName,
87
+ description: tool.userDescription ?? tool.modelDescription,
88
+ checked,
89
+ ...iconProps
90
+ };
91
+ }
92
+ async function showToolsPickerTree(accessor, placeHolder, description, toolsEntries, onUpdate) {
93
+ const quickPickService = accessor.get(IQuickInputService);
94
+ const mcpService = accessor.get(IMcpService);
95
+ const mcpRegistry = accessor.get(IMcpRegistry);
96
+ const commandService = accessor.get(ICommandService);
97
+ const extensionsWorkbenchService = accessor.get(IExtensionsWorkbenchService);
98
+ const editorService = accessor.get(IEditorService);
99
+ const mcpWorkbenchService = accessor.get(IMcpWorkbenchService);
100
+ const toolsService = accessor.get(ILanguageModelToolsService);
101
+ const toolLimit = accessor.get(IContextKeyService).getContextKeyValue(ChatContextKeys.chatToolGroupingThreshold.key);
102
+ const mcpServerByTool = ( new Map());
103
+ for (const server of mcpService.servers.get()) {
104
+ for (const tool of server.tools.get()) {
105
+ mcpServerByTool.set(tool.id, server);
106
+ }
107
+ }
108
+ if (!toolsEntries) {
109
+ const defaultEntries = ( new Map());
110
+ for (const tool of toolsService.getTools()) {
111
+ if (tool.canBeReferencedInPrompt) {
112
+ defaultEntries.set(tool, false);
113
+ }
114
+ }
115
+ for (const toolSet of toolsService.toolSets.get()) {
116
+ defaultEntries.set(toolSet, false);
117
+ }
118
+ toolsEntries = defaultEntries;
119
+ }
120
+ const treeItems = [];
121
+ const bucketMap = ( new Map());
122
+ for (const [toolSetOrTool, picked] of toolsEntries) {
123
+ let bucketItem;
124
+ const buttons = [];
125
+ if (toolSetOrTool.source.type === 'mcp') {
126
+ const key = ToolDataSource.toKey(toolSetOrTool.source);
127
+ const { definitionId } = toolSetOrTool.source;
128
+ const mcpServer = mcpService.servers.get().find(candidate => candidate.definition.id === definitionId);
129
+ if (!mcpServer) {
130
+ continue;
131
+ }
132
+ bucketItem = bucketMap.get(key);
133
+ if (!bucketItem) {
134
+ const collection = mcpRegistry.collections.get().find(c => c.id === mcpServer.collection.id);
135
+ if (collection?.source) {
136
+ buttons.push({
137
+ iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
138
+ tooltip: ( localize(4662, "Configure {0}", collection.label)),
139
+ action: () => collection.source ? collection.source instanceof ExtensionIdentifier ? extensionsWorkbenchService.open(collection.source.value, { tab: ExtensionEditorTab.Features, feature: 'mcp' }) : mcpWorkbenchService.open(collection.source, { tab: McpServerEditorTab.Configuration }) : undefined
140
+ });
141
+ }
142
+ else if (collection?.presentation?.origin) {
143
+ buttons.push({
144
+ iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
145
+ tooltip: ( localize(4662, "Configure {0}", collection.label)),
146
+ action: () => editorService.openEditor({
147
+ resource: collection.presentation.origin,
148
+ })
149
+ });
150
+ }
151
+ if (mcpServer.connectionState.get().state === McpConnectionState.Kind.Error) {
152
+ buttons.push({
153
+ iconClass: ThemeIcon.asClassName(Codicon.warning),
154
+ tooltip: ( localize(4663, "Show Output")),
155
+ action: () => mcpServer.showOutput(),
156
+ });
157
+ }
158
+ bucketItem = {
159
+ itemType: 'bucket',
160
+ ordinal: BucketOrdinal.Mcp,
161
+ id: key,
162
+ label: ( localize(4664, "MCP Server: {0}", toolSetOrTool.source.label)),
163
+ checked: false,
164
+ collapsed: true,
165
+ children: [],
166
+ buttons,
167
+ alwaysShow: true,
168
+ iconClass: ThemeIcon.asClassName(Codicon.mcp)
169
+ };
170
+ bucketMap.set(key, bucketItem);
171
+ }
172
+ if (toolSetOrTool instanceof ToolSet) {
173
+ bucketItem.toolset = toolSetOrTool;
174
+ bucketItem.checked = picked;
175
+ }
176
+ else if (toolSetOrTool.canBeReferencedInPrompt) {
177
+ const toolTreeItem = createToolTreeItemFromData(toolSetOrTool, picked);
178
+ bucketItem.children = [...(bucketItem.children || []), toolTreeItem];
179
+ }
180
+ }
181
+ else {
182
+ let ordinal;
183
+ let label;
184
+ let key;
185
+ let collapsed;
186
+ if (toolSetOrTool.source.type === 'extension') {
187
+ ordinal = BucketOrdinal.Extension;
188
+ label = ( localize(4665, 'Extension: {0}', toolSetOrTool.source.label));
189
+ key = ToolDataSource.toKey(toolSetOrTool.source);
190
+ collapsed = true;
191
+ }
192
+ else if (toolSetOrTool.source.type === 'internal') {
193
+ ordinal = BucketOrdinal.BuiltIn;
194
+ label = ( localize(4666, "Built-In"));
195
+ key = ( ordinal.toString());
196
+ }
197
+ else if (toolSetOrTool.source.type === 'user') {
198
+ ordinal = BucketOrdinal.User;
199
+ label = ( localize(4667, "User Defined Tool Sets"));
200
+ key = ( ordinal.toString());
201
+ buttons.push({
202
+ iconClass: ThemeIcon.asClassName(Codicon.edit),
203
+ tooltip: ( localize(4668, "Edit Tool Set")),
204
+ action: () => {
205
+ assertType(toolSetOrTool.source.type === 'user');
206
+ editorService.openEditor({ resource: toolSetOrTool.source.file });
207
+ }
208
+ });
209
+ }
210
+ else {
211
+ assertNever();
212
+ }
213
+ bucketItem = bucketMap.get(key);
214
+ if (!bucketItem) {
215
+ const iconProps = toolSetOrTool.source.type === 'extension'
216
+ ? { iconClass: ThemeIcon.asClassName(Codicon.extensions) }
217
+ : {};
218
+ bucketItem = {
219
+ itemType: 'bucket',
220
+ ordinal,
221
+ id: key,
222
+ label,
223
+ checked: false,
224
+ children: [],
225
+ buttons,
226
+ collapsed,
227
+ alwaysShow: true,
228
+ ...iconProps
229
+ };
230
+ bucketMap.set(key, bucketItem);
231
+ }
232
+ if (toolSetOrTool instanceof ToolSet) {
233
+ const iconProps = mapIconToTreeItem(toolSetOrTool.icon);
234
+ const toolSetTreeItem = {
235
+ itemType: 'toolset',
236
+ toolset: toolSetOrTool,
237
+ buttons,
238
+ id: toolSetOrTool.id,
239
+ label: toolSetOrTool.referenceName,
240
+ description: toolSetOrTool.description,
241
+ checked: picked,
242
+ collapsed: true,
243
+ ...iconProps
244
+ };
245
+ bucketItem.children = [...(bucketItem.children || []), toolSetTreeItem];
246
+ }
247
+ else if (toolSetOrTool.canBeReferencedInPrompt) {
248
+ const toolTreeItem = createToolTreeItemFromData(toolSetOrTool, picked);
249
+ bucketItem.children = [...(bucketItem.children || []), toolTreeItem];
250
+ }
251
+ }
252
+ }
253
+ const sortedBuckets = Array.from(( bucketMap.values())).sort((a, b) => a.ordinal - b.ordinal);
254
+ treeItems.push(...sortedBuckets);
255
+ for (const bucketItem of treeItems.filter(isBucketTreeItem)) {
256
+ if (bucketItem.checked) {
257
+ bucketItem.children?.forEach(child => {
258
+ child.checked = true;
259
+ });
260
+ }
261
+ else {
262
+ bucketItem.checked = bucketItem.children?.some(child => child.checked) || false;
263
+ }
264
+ }
265
+ const store = ( new DisposableStore());
266
+ const treePicker = store.add(quickPickService.createQuickTree());
267
+ treePicker.placeholder = placeHolder;
268
+ treePicker.ignoreFocusOut = true;
269
+ treePicker.description = description;
270
+ treePicker.matchOnDescription = true;
271
+ treePicker.matchOnLabel = true;
272
+ if (treeItems.length === 0) {
273
+ treePicker.placeholder = ( localize(4669, "Add tools to chat"));
274
+ }
275
+ treePicker.setItemTree(treeItems);
276
+ store.add(treePicker.onDidTriggerItemButton(e => {
277
+ if (e.button && typeof e.button.action === 'function') {
278
+ e.button.action();
279
+ store.dispose();
280
+ }
281
+ }));
282
+ const result = ( new Map());
283
+ const collectResults = () => {
284
+ result.clear();
285
+ let count = 0;
286
+ const traverse = (items) => {
287
+ for (const item of items) {
288
+ if (isBucketTreeItem(item)) {
289
+ if (item.toolset) {
290
+ const checked = typeof item.checked === 'boolean' ? item.checked : false;
291
+ result.set(item.toolset, checked);
292
+ }
293
+ if (item.children) {
294
+ traverse(item.children);
295
+ }
296
+ }
297
+ else if (isToolSetTreeItem(item)) {
298
+ const checked = typeof item.checked === 'boolean' ? item.checked : false;
299
+ result.set(item.toolset, checked);
300
+ if (item.children) {
301
+ traverse(item.children);
302
+ }
303
+ }
304
+ else if (isToolTreeItem(item)) {
305
+ const checked = typeof item.checked === 'boolean' ? item.checked : false;
306
+ if (checked) {
307
+ count++;
308
+ }
309
+ result.set(item.tool, checked);
310
+ }
311
+ }
312
+ };
313
+ traverse(treeItems);
314
+ if (toolLimit) {
315
+ if (count > toolLimit) {
316
+ treePicker.severity = Severity.Warning;
317
+ treePicker.validationMessage = ( localize(
318
+ 4670,
319
+ "{0} tools are enabled. You may experience degraded tool calling above {1} tools.",
320
+ count,
321
+ markdownCommandLink({ title: String(toolLimit), id: '_chat.toolPicker.closeAndOpenVirtualThreshold' })
322
+ ));
323
+ }
324
+ else {
325
+ treePicker.severity = Severity.Ignore;
326
+ treePicker.validationMessage = undefined;
327
+ }
328
+ }
329
+ for (const item of toolsService.toolSets.get()) {
330
+ if (item.source.type === 'mcp') {
331
+ const toolsInSet = Array.from(item.getTools());
332
+ result.set(item, toolsInSet.every(tool => result.get(tool)));
333
+ }
334
+ }
335
+ };
336
+ collectResults();
337
+ store.add(CommandsRegistry.registerCommand({
338
+ id: '_chat.toolPicker.closeAndOpenVirtualThreshold',
339
+ handler: () => {
340
+ treePicker.hide();
341
+ commandService.executeCommand('workbench.action.openSettings', 'github.copilot.chat.virtualTools.threshold');
342
+ }
343
+ }));
344
+ store.add(treePicker.onDidChangeCheckedLeafItems(() => {
345
+ collectResults();
346
+ if (onUpdate) {
347
+ let didChange = toolsEntries.size !== result.size;
348
+ for (const [key, value] of toolsEntries) {
349
+ if (didChange) {
350
+ break;
351
+ }
352
+ didChange = result.get(key) !== value;
353
+ }
354
+ if (didChange) {
355
+ onUpdate(result);
356
+ }
357
+ }
358
+ }));
359
+ let didAccept = false;
360
+ store.add(treePicker.onDidAccept(() => {
361
+ const activeItems = treePicker.activeItems;
362
+ const callbackItem = activeItems.find(isCallbackTreeItem);
363
+ if (callbackItem) {
364
+ callbackItem.run();
365
+ }
366
+ else {
367
+ didAccept = true;
368
+ }
369
+ }));
370
+ const addMcpServerButton = {
371
+ iconClass: ThemeIcon.asClassName(Codicon.mcp),
372
+ tooltip: ( localize(4671, 'Add MCP Server...'))
373
+ };
374
+ const installExtension = {
375
+ iconClass: ThemeIcon.asClassName(Codicon.extensions),
376
+ tooltip: ( localize(4672, 'Install Extension...'))
377
+ };
378
+ const configureToolSets = {
379
+ iconClass: ThemeIcon.asClassName(Codicon.gear),
380
+ tooltip: ( localize(4673, 'Configure Tool Sets...'))
381
+ };
382
+ treePicker.title = ( localize(4674, "Configure Tools"));
383
+ treePicker.buttons = [addMcpServerButton, installExtension, configureToolSets];
384
+ store.add(treePicker.onDidTriggerButton(button => {
385
+ if (button === addMcpServerButton) {
386
+ commandService.executeCommand(McpCommandIds.AddConfiguration);
387
+ }
388
+ else if (button === installExtension) {
389
+ extensionsWorkbenchService.openSearch('@tag:language-model-tools');
390
+ }
391
+ else if (button === configureToolSets) {
392
+ commandService.executeCommand(ConfigureToolSets.ID);
393
+ }
394
+ treePicker.hide();
395
+ }));
396
+ treePicker.show();
397
+ await Promise.race([Event.toPromise(Event.any(treePicker.onDidAccept, treePicker.onDidHide), store)]);
398
+ store.dispose();
399
+ collectResults();
400
+ return didAccept ? result : undefined;
401
+ }
45
402
  async function showToolsPicker(accessor, placeHolder, description, toolsEntries, onUpdate) {
403
+ const configurationService = accessor.get(IConfigurationService);
404
+ const useTreePicker = configurationService.getValue('chat.tools.useTreePicker');
405
+ if (useTreePicker) {
406
+ return showToolsPickerTree(accessor, placeHolder, description, toolsEntries, onUpdate);
407
+ }
408
+ else {
409
+ return showToolsPickerLegacy(accessor, placeHolder, description, toolsEntries, onUpdate);
410
+ }
411
+ }
412
+ async function showToolsPickerLegacy(accessor, placeHolder, description, toolsEntries, onUpdate) {
46
413
  const quickPickService = accessor.get(IQuickInputService);
47
414
  const mcpService = accessor.get(IMcpService);
48
415
  const mcpRegistry = accessor.get(IMcpRegistry);
49
416
  const commandService = accessor.get(ICommandService);
50
- const extensionWorkbenchService = accessor.get(IExtensionsWorkbenchService);
417
+ const extensionsWorkbenchService = accessor.get(IExtensionsWorkbenchService);
51
418
  const editorService = accessor.get(IEditorService);
419
+ const mcpWorkbenchService = accessor.get(IMcpWorkbenchService);
52
420
  const toolsService = accessor.get(ILanguageModelToolsService);
53
421
  const mcpServerByTool = ( new Map());
54
422
  for (const server of mcpService.servers.get()) {
@@ -59,26 +427,27 @@ async function showToolsPicker(accessor, placeHolder, description, toolsEntries,
59
427
  const builtinBucket = {
60
428
  type: 'item',
61
429
  children: [],
62
- label: ( localize(4612, "Built-In")),
430
+ label: ( localize(4666, "Built-In")),
63
431
  ordinal: BucketOrdinal.BuiltIn,
64
432
  picked: false,
65
433
  };
66
434
  const userBucket = {
67
435
  type: 'item',
68
436
  children: [],
69
- label: ( localize(4613, "User Defined Tool Sets")),
437
+ label: ( localize(4667, "User Defined Tool Sets")),
70
438
  ordinal: BucketOrdinal.User,
71
439
  alwaysShow: true,
72
440
  picked: false,
73
441
  };
74
- const addMcpPick = { type: 'item', label: ( localize(4614, "Add MCP Server...")), iconClass: ThemeIcon.asClassName(Codicon.add), pickable: false, run: () => commandService.executeCommand(McpCommandIds.AddConfiguration) };
75
- const configureToolSetsPick = { type: 'item', label: ( localize(4615, "Configure Tool Sets...")), iconClass: ThemeIcon.asClassName(Codicon.gear), pickable: false, run: () => commandService.executeCommand(ConfigureToolSets.ID) };
76
- const addExpPick = { type: 'item', label: ( localize(4616, "Install Extension...")), iconClass: ThemeIcon.asClassName(Codicon.add), pickable: false, run: () => extensionWorkbenchService.openSearch('@tag:language-model-tools') };
442
+ const toolLimit = accessor.get(IContextKeyService).getContextKeyValue(ChatContextKeys.chatToolGroupingThreshold.key);
443
+ const addMcpPick = { type: 'item', label: ( localize(4675, "Add MCP Server...")), iconClass: ThemeIcon.asClassName(Codicon.add), pickable: false, run: () => commandService.executeCommand(McpCommandIds.AddConfiguration) };
444
+ const configureToolSetsPick = { type: 'item', label: ( localize(4676, "Configure Tool Sets...")), iconClass: ThemeIcon.asClassName(Codicon.gear), pickable: false, run: () => commandService.executeCommand(ConfigureToolSets.ID) };
445
+ const addExpPick = { type: 'item', label: ( localize(4677, "Install Extension...")), iconClass: ThemeIcon.asClassName(Codicon.add), pickable: false, run: () => extensionsWorkbenchService.openSearch('@tag:language-model-tools') };
77
446
  const addPick = {
78
- type: 'item', label: ( localize(4617, "Add More Tools...")), iconClass: ThemeIcon.asClassName(Codicon.add), pickable: false, run: async () => {
447
+ type: 'item', label: ( localize(4678, "Add More Tools...")), iconClass: ThemeIcon.asClassName(Codicon.add), pickable: false, run: async () => {
79
448
  const pick = await quickPickService.pick([addMcpPick, addExpPick], {
80
449
  canPickMany: false,
81
- placeHolder: ( localize(4618, "Add tools to chat"))
450
+ placeHolder: ( localize(4669, "Add tools to chat"))
82
451
  });
83
452
  pick?.run();
84
453
  }
@@ -109,7 +478,7 @@ async function showToolsPicker(accessor, placeHolder, description, toolsEntries,
109
478
  const buttons = [];
110
479
  bucket = toolBuckets.get(key) ?? {
111
480
  type: 'item',
112
- label: ( localize(4619, "MCP Server: {0}", toolSetOrTool.source.label)),
481
+ label: ( localize(4664, "MCP Server: {0}", toolSetOrTool.source.label)),
113
482
  ordinal: BucketOrdinal.Mcp,
114
483
  picked: false,
115
484
  alwaysShow: true,
@@ -118,10 +487,17 @@ async function showToolsPicker(accessor, placeHolder, description, toolsEntries,
118
487
  };
119
488
  toolBuckets.set(key, bucket);
120
489
  const collection = mcpRegistry.collections.get().find(c => c.id === mcpServer.collection.id);
121
- if (collection?.presentation?.origin) {
490
+ if (collection?.source) {
491
+ buttons.push({
492
+ iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
493
+ tooltip: ( localize(4662, "Configure {0}", collection.label)),
494
+ action: () => collection.source ? collection.source instanceof ExtensionIdentifier ? extensionsWorkbenchService.open(collection.source.value, { tab: ExtensionEditorTab.Features, feature: 'mcp' }) : mcpWorkbenchService.open(collection.source, { tab: McpServerEditorTab.Configuration }) : undefined
495
+ });
496
+ }
497
+ else if (collection?.presentation?.origin) {
122
498
  buttons.push({
123
499
  iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
124
- tooltip: ( localize(4620, "Configure {0}", collection.label)),
500
+ tooltip: ( localize(4662, "Configure {0}", collection.label)),
125
501
  action: () => editorService.openEditor({
126
502
  resource: collection.presentation.origin,
127
503
  })
@@ -130,7 +506,7 @@ async function showToolsPicker(accessor, placeHolder, description, toolsEntries,
130
506
  if (mcpServer.connectionState.get().state === McpConnectionState.Kind.Error) {
131
507
  buttons.push({
132
508
  iconClass: ThemeIcon.asClassName(Codicon.warning),
133
- tooltip: ( localize(4621, "Show Output")),
509
+ tooltip: ( localize(4663, "Show Output")),
134
510
  action: () => mcpServer.showOutput(),
135
511
  });
136
512
  }
@@ -139,7 +515,7 @@ async function showToolsPicker(accessor, placeHolder, description, toolsEntries,
139
515
  const key = ToolDataSource.toKey(toolSetOrTool.source);
140
516
  bucket = toolBuckets.get(key) ?? {
141
517
  type: 'item',
142
- label: ( localize(4622, 'Extension: {0}', toolSetOrTool.source.label)),
518
+ label: ( localize(4665, 'Extension: {0}', toolSetOrTool.source.label)),
143
519
  ordinal: BucketOrdinal.Extension,
144
520
  picked: false,
145
521
  alwaysShow: true,
@@ -154,7 +530,7 @@ async function showToolsPicker(accessor, placeHolder, description, toolsEntries,
154
530
  bucket = userBucket;
155
531
  buttons.push({
156
532
  iconClass: ThemeIcon.asClassName(Codicon.edit),
157
- tooltip: ( localize(4623, "Edit Tool Set")),
533
+ tooltip: ( localize(4668, "Edit Tool Set")),
158
534
  action: () => {
159
535
  assertType(toolSetOrTool.source.type === 'user');
160
536
  editorService.openEditor({ resource: toolSetOrTool.source.file });
@@ -221,13 +597,14 @@ async function showToolsPicker(accessor, placeHolder, description, toolsEntries,
221
597
  }
222
598
  const picker = store.add(quickPickService.createQuickPick({ useSeparators: true }));
223
599
  picker.placeholder = placeHolder;
600
+ picker.ignoreFocusOut = true;
224
601
  picker.description = description;
225
602
  picker.canSelectMany = true;
226
603
  picker.keepScrollPosition = true;
227
604
  picker.sortByLabel = false;
228
605
  picker.matchOnDescription = true;
229
606
  if (picks.length === 0) {
230
- picker.placeholder = ( localize(4618, "Add tools to chat"));
607
+ picker.placeholder = ( localize(4669, "Add tools to chat"));
231
608
  picker.canSelectMany = false;
232
609
  picks.push(addMcpPick, addExpPick);
233
610
  }
@@ -243,6 +620,7 @@ async function showToolsPicker(accessor, placeHolder, description, toolsEntries,
243
620
  const items = picks.filter((p) => p.type === 'item' && Boolean(p.picked));
244
621
  lastSelectedItems = ( new Set(items));
245
622
  picker.selectedItems = items;
623
+ let count = 0;
246
624
  result.clear();
247
625
  for (const item of picks) {
248
626
  if (item.type !== 'item') {
@@ -250,9 +628,11 @@ async function showToolsPicker(accessor, placeHolder, description, toolsEntries,
250
628
  }
251
629
  if (isToolSetPick(item)) {
252
630
  result.set(item.toolset, item.picked);
631
+ count += Iterable.length(item.toolset.getTools());
253
632
  }
254
633
  else if (isToolPick(item)) {
255
634
  result.set(item.tool, item.picked);
635
+ count++;
256
636
  }
257
637
  else if (isBucketPick(item)) {
258
638
  if (item.toolset) {
@@ -261,13 +641,30 @@ async function showToolsPicker(accessor, placeHolder, description, toolsEntries,
261
641
  for (const child of item.children) {
262
642
  if (isToolSetPick(child)) {
263
643
  result.set(child.toolset, item.picked);
644
+ count += Iterable.length(child.toolset.getTools());
264
645
  }
265
646
  else if (isToolPick(child)) {
266
647
  result.set(child.tool, item.picked);
648
+ count++;
267
649
  }
268
650
  }
269
651
  }
270
652
  }
653
+ if (toolLimit) {
654
+ if (count > toolLimit) {
655
+ picker.severity = Severity.Warning;
656
+ picker.validationMessage = ( localize(
657
+ 4670,
658
+ "{0} tools are enabled. You may experience degraded tool calling above {1} tools.",
659
+ count,
660
+ toolLimit
661
+ ));
662
+ }
663
+ else {
664
+ picker.severity = Severity.Ignore;
665
+ picker.validationMessage = undefined;
666
+ }
667
+ }
271
668
  if (onUpdate) {
272
669
  let didChange = toolsEntries.size !== result.size;
273
670
  for (const [key, value] of toolsEntries) {
@@ -300,8 +697,6 @@ async function showToolsPicker(accessor, placeHolder, description, toolsEntries,
300
697
  }
301
698
  const addPick = selectedPicks.find(isCallbackPick);
302
699
  if (addPick) {
303
- addPick.run();
304
- picker.hide();
305
700
  return;
306
701
  }
307
702
  const { added, removed } = diffSets(lastSelectedItems, ( new Set(selectedPicks)));
@@ -331,8 +726,13 @@ async function showToolsPicker(accessor, placeHolder, description, toolsEntries,
331
726
  }));
332
727
  let didAccept = false;
333
728
  store.add(picker.onDidAccept(() => {
334
- picker.activeItems.find(isCallbackPick)?.run();
335
- didAccept = true;
729
+ const callbackPick = picker.activeItems.find(isCallbackPick);
730
+ if (callbackPick) {
731
+ callbackPick.run();
732
+ }
733
+ else {
734
+ didAccept = true;
735
+ }
336
736
  }));
337
737
  await Promise.race([Event.toPromise(Event.any(picker.onDidAccept, picker.onDidHide))]);
338
738
  store.dispose();
@@ -9,7 +9,7 @@ import { IEditorService } from "@codingame/monaco-vscode-api/vscode/vs/workbench
9
9
  import { ITextFileService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/textfile/common/textfiles.service";
10
10
  import { ICodeMapperService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatCodeMapperService.service";
11
11
  import { IChatService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService.service";
12
- import { ICodeBlockActionContext } from "@codingame/monaco-vscode-c465110a-57c0-59d7-a6b2-be0a4db7e517-common/vscode/vs/workbench/contrib/chat/browser/codeBlockPart";
12
+ import { ICodeBlockActionContext } from "@codingame/monaco-vscode-e28ac690-06d5-5ee9-92d1-02df70296354-common/vscode/vs/workbench/contrib/chat/browser/codeBlockPart";
13
13
  import { IQuickInputService } from "@codingame/monaco-vscode-api/vscode/vs/platform/quickinput/common/quickInput.service";
14
14
  import { ILabelService } from "@codingame/monaco-vscode-api/vscode/vs/platform/label/common/label.service";
15
15
  import { IInstantiationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation";