@codingame/monaco-vscode-chat-service-override 20.4.1 → 21.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 (200) hide show
  1. package/index.js +15 -7
  2. package/package.json +38 -36
  3. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.d.ts +2 -0
  4. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +60 -0
  5. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +56 -46
  6. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatClearActions.js +18 -16
  7. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +52 -11
  8. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContext.js +28 -26
  9. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +19 -13
  10. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +2 -2
  11. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +2 -2
  12. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +2 -2
  13. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +15 -12
  14. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +11 -11
  15. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +6 -6
  16. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +10 -10
  17. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatSessionActions.d.ts +68 -0
  18. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatSessionActions.js +433 -0
  19. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +17 -18
  20. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.d.ts +7 -3
  21. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +205 -551
  22. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.d.ts +7 -5
  23. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +52 -29
  24. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +277 -163
  25. package/vscode/src/vs/workbench/contrib/chat/browser/chatAttachmentResolveService.js +1 -1
  26. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +20 -5
  27. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +17 -17
  28. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +11 -14
  29. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.d.ts +4 -1
  30. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +32 -6
  31. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.d.ts +3 -1
  32. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +22 -3
  33. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +2 -1
  34. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +22 -9
  35. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +6 -8
  36. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.d.ts +1 -0
  37. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +47 -15
  38. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.js +12 -2
  39. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.d.ts +8 -2
  40. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +33 -8
  41. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.js +3 -3
  42. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTimeline.d.ts +3 -0
  43. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTimeline.js +74 -19
  44. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingModifiedNotebookSnapshot.js +1 -1
  45. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +2 -2
  46. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/simpleBrowserEditorOverlay.js +19 -19
  47. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.d.ts +3 -1
  48. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.js +23 -19
  49. package/vscode/src/vs/workbench/contrib/chat/browser/chatLayoutService.d.ts +12 -0
  50. package/vscode/src/vs/workbench/contrib/chat/browser/chatLayoutService.js +36 -0
  51. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +3 -3
  52. package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +36 -35
  53. package/vscode/src/vs/workbench/contrib/chat/browser/chatPasteProviders.js +6 -6
  54. package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.d.ts +1 -1
  55. package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.js +2 -2
  56. package/vscode/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.js +1 -1
  57. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.d.ts +37 -9
  58. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.js +238 -52
  59. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup.d.ts +23 -1
  60. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup.js +257 -148
  61. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus.d.ts +3 -1
  62. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus.js +126 -77
  63. package/vscode/src/vs/workbench/contrib/chat/browser/chatVariables.d.ts +2 -3
  64. package/vscode/src/vs/workbench/contrib/chat/browser/chatVariables.js +3 -13
  65. package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.d.ts +4 -2
  66. package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.js +55 -45
  67. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorContrib.js +6 -3
  68. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorHover.js +1 -1
  69. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsService.d.ts +13 -7
  70. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsService.js +130 -47
  71. package/vscode/src/vs/workbench/contrib/chat/browser/media/apple-dark.svg +1 -1
  72. package/vscode/src/vs/workbench/contrib/chat/browser/media/apple-light.svg +1 -1
  73. package/vscode/src/vs/workbench/contrib/chat/browser/media/chatEditingEditorOverlay.css +5 -3
  74. package/vscode/src/vs/workbench/contrib/chat/browser/media/chatStatus.css +6 -6
  75. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/attachInstructionsAction.js +9 -9
  76. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +4 -4
  77. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/newPromptFileActions.js +39 -35
  78. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptName.js +9 -9
  79. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptSourceFolder.js +18 -18
  80. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/promptFilePickers.js +12 -12
  81. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +2 -2
  82. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +2 -2
  83. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +8 -8
  84. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +7 -7
  85. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveToPromptAction.js +2 -2
  86. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +14 -14
  87. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +5 -5
  88. package/vscode/src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.d.ts +5 -4
  89. package/vscode/src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.js +7 -4
  90. package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.d.ts +4 -8
  91. package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.js +153 -168
  92. package/vscode/src/vs/workbench/contrib/chat/common/chatServiceTelemetry.d.ts +127 -1
  93. package/vscode/src/vs/workbench/contrib/chat/common/chatServiceTelemetry.js +111 -1
  94. package/vscode/src/vs/workbench/contrib/chat/common/chatSessionStore.js +3 -3
  95. package/vscode/src/vs/workbench/contrib/chat/common/chatTodoListService.d.ts +2 -1
  96. package/vscode/src/vs/workbench/contrib/chat/common/chatTodoListService.js +6 -3
  97. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.d.ts +20 -0
  98. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +66 -0
  99. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptBodyAutocompletion.d.ts +38 -0
  100. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptBodyAutocompletion.js +143 -0
  101. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.d.ts +3 -1
  102. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +12 -3
  103. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.d.ts +8 -3
  104. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.js +41 -8
  105. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderHovers.d.ts +4 -1
  106. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderHovers.js +55 -22
  107. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptLinkDiagnosticsProvider.js +1 -1
  108. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.js +1 -1
  109. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/headerBase.js +4 -4
  110. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/applyTo.js +2 -2
  111. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/base/string.d.ts +2 -0
  112. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/base/string.js +5 -2
  113. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/mode.d.ts +3 -3
  114. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/mode.js +3 -4
  115. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/tools.js +4 -4
  116. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/promptHeader.d.ts +0 -5
  117. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/promptHeader.js +8 -23
  118. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/topError.js +9 -9
  119. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/promptFileContributions.js +4 -5
  120. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +11 -5
  121. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +28 -28
  122. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +1 -1
  123. package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/aiEditTelemetry/aiEditTelemetryServiceImpl.d.ts +12 -0
  124. package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/aiEditTelemetry/aiEditTelemetryServiceImpl.js +54 -0
  125. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +4 -4
  126. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +33 -31
  127. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatCurrentLine.js +9 -9
  128. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.d.ts +1 -3
  129. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +9 -13
  130. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +16 -16
  131. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +20 -18
  132. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.d.ts +2 -1
  133. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.js +11 -4
  134. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +1 -1
  135. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.d.ts +1 -2
  136. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.js +1 -6
  137. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.d.ts +16 -1
  138. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.js +84 -25
  139. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandSimplifier.d.ts +10 -0
  140. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandSimplifier.js +55 -0
  141. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.d.ts +8 -2
  142. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.js +15 -7
  143. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.d.ts +23 -0
  144. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.js +72 -1
  145. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.d.ts +8 -2
  146. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.js +19 -9
  147. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.d.ts +5 -0
  148. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.js +7 -5
  149. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.js +12 -8
  150. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.d.ts +6 -0
  151. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +85 -1
  152. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalToolTelemetry.d.ts +35 -0
  153. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalToolTelemetry.js +448 -0
  154. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/subCommands.d.ts +0 -1
  155. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/subCommands.js +30 -77
  156. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.d.ts +62 -0
  157. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +174 -0
  158. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +75 -10
  159. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.d.ts +15 -2
  160. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +81 -38
  161. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.d.ts +11 -0
  162. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +106 -0
  163. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{getTerminalOutputTool.js → tools/getTerminalOutputTool.js} +5 -3
  164. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.d.ts +11 -0
  165. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +59 -0
  166. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +57 -0
  167. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +452 -0
  168. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.d.ts +45 -0
  169. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.js +23 -0
  170. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/utils.d.ts +2 -0
  171. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/utils.js +31 -0
  172. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{runInTerminalTool.d.ts → tools/runInTerminalTool.d.ts} +11 -13
  173. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{runInTerminalTool.js → tools/runInTerminalTool.js} +282 -133
  174. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{task → tools/task}/createAndRunTaskTool.d.ts +5 -5
  175. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{task → tools/task}/createAndRunTaskTool.js +51 -50
  176. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{task → tools/task}/getTaskOutputTool.d.ts +6 -1
  177. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +117 -0
  178. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{task → tools/task}/runTaskTool.d.ts +3 -5
  179. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{task → tools/task}/runTaskTool.js +54 -50
  180. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.d.ts +19 -0
  181. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +36 -0
  182. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminal.chatAgentTools.d.ts +3 -0
  183. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminal.chatAgentTools.js +8 -0
  184. package/vscode/src/vs/base/common/policy.d.ts +0 -41
  185. package/vscode/src/vs/base/common/policy.js +0 -11
  186. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.d.ts +0 -12
  187. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.js +0 -738
  188. package/vscode/src/vs/workbench/contrib/chat/browser/media/chatSessions.css +0 -42
  189. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptPathAutocompletion.d.ts +0 -67
  190. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptPathAutocompletion.js +0 -167
  191. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/base/enum.d.ts +0 -23
  192. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/base/enum.js +0 -63
  193. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/bufferOutputPolling.d.ts +0 -55
  194. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/bufferOutputPolling.js +0 -163
  195. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/getTaskOutputTool.js +0 -88
  196. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/taskHelpers.d.ts +0 -35
  197. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/taskHelpers.js +0 -80
  198. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task.chatAgentTools.contribution.d.ts +0 -1
  199. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task.chatAgentTools.contribution.js +0 -40
  200. /package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{getTerminalOutputTool.d.ts → tools/getTerminalOutputTool.d.ts} +0 -0
@@ -1,18 +1,14 @@
1
1
 
2
2
  import { assertNever } from '@codingame/monaco-vscode-api/vscode/vs/base/common/assert';
3
3
  import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
4
- import { diffSets } from '@codingame/monaco-vscode-api/vscode/vs/base/common/collections';
5
4
  import { Event } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
6
5
  import { DisposableStore } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
7
6
  import { ThemeIcon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/themables';
8
- import { assertType } from '@codingame/monaco-vscode-api/vscode/vs/base/common/types';
9
- import { generateUuid } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uuid';
10
7
  import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
11
8
  import { CommandsRegistry } from '@codingame/monaco-vscode-api/vscode/vs/platform/commands/common/commands';
12
9
  import { ICommandService } from '@codingame/monaco-vscode-api/vscode/vs/platform/commands/common/commands.service';
13
10
  import { ExtensionIdentifier } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensions/common/extensions';
14
11
  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';
16
12
  import { IEditorService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/editor/common/editorService.service';
17
13
  import { ExtensionEditorTab } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/extensions/common/extensions';
18
14
  import { IExtensionsWorkbenchService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/extensions/common/extensions.service';
@@ -20,12 +16,11 @@ import { McpCommandIds } from '@codingame/monaco-vscode-dc3fa21d-a483-5b99-a7ab-
20
16
  import { IMcpRegistry } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpRegistryTypes.service';
21
17
  import { McpServerEditorTab, McpConnectionState } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpTypes';
22
18
  import { IMcpService, IMcpWorkbenchService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/mcp/common/mcpTypes.service';
23
- import { ToolDataSource, ToolSet } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService';
19
+ import { ToolDataSource } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService';
24
20
  import { ILanguageModelToolsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService.service';
25
21
  import { ConfigureToolSets } from '../tools/toolSetsContribution.js';
26
22
  import { IContextKeyService } from '@codingame/monaco-vscode-api/vscode/vs/platform/contextkey/common/contextkey.service';
27
23
  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
24
  import Severity from '@codingame/monaco-vscode-api/vscode/vs/base/common/severity';
30
25
  import { markdownCommandLink } from '@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent';
31
26
 
@@ -36,21 +31,6 @@ var BucketOrdinal;
36
31
  BucketOrdinal[BucketOrdinal["Mcp"] = 2] = "Mcp";
37
32
  BucketOrdinal[BucketOrdinal["Extension"] = 3] = "Extension";
38
33
  })(BucketOrdinal || (BucketOrdinal = {}));
39
- function isBucketPick(obj) {
40
- return Boolean(obj.children);
41
- }
42
- function isToolSetPick(obj) {
43
- return Boolean(obj.toolset);
44
- }
45
- function isToolPick(obj) {
46
- return Boolean(obj.tool);
47
- }
48
- function isCallbackPick(obj) {
49
- return Boolean(obj.run);
50
- }
51
- function isActionableButton(obj) {
52
- return typeof obj.action === 'function';
53
- }
54
34
  function isBucketTreeItem(item) {
55
35
  return item.itemType === 'bucket';
56
36
  }
@@ -89,7 +69,31 @@ function createToolTreeItemFromData(tool, checked) {
89
69
  ...iconProps
90
70
  };
91
71
  }
92
- async function showToolsPickerTree(accessor, placeHolder, description, toolsEntries, onUpdate) {
72
+ function createToolSetTreeItem(toolset, checked, editorService) {
73
+ const iconProps = mapIconToTreeItem(toolset.icon);
74
+ const buttons = [];
75
+ if (toolset.source.type === 'user') {
76
+ const resource = toolset.source.file;
77
+ buttons.push({
78
+ iconClass: ThemeIcon.asClassName(Codicon.edit),
79
+ tooltip: ( localize(4715, "Edit Tool Set")),
80
+ action: () => editorService.openEditor({ resource })
81
+ });
82
+ }
83
+ return {
84
+ itemType: 'toolset',
85
+ toolset,
86
+ buttons,
87
+ id: toolset.id,
88
+ label: toolset.referenceName,
89
+ description: toolset.description,
90
+ checked,
91
+ children: undefined,
92
+ collapsed: true,
93
+ ...iconProps
94
+ };
95
+ }
96
+ async function showToolsPicker(accessor, placeHolder, description, toolsEntries) {
93
97
  const quickPickService = accessor.get(IQuickInputService);
94
98
  const mcpService = accessor.get(IMcpService);
95
99
  const mcpRegistry = accessor.get(IMcpRegistry);
@@ -119,149 +123,157 @@ async function showToolsPickerTree(accessor, placeHolder, description, toolsEntr
119
123
  }
120
124
  const treeItems = [];
121
125
  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;
126
+ const getKey = (source) => {
127
+ switch (source.type) {
128
+ case 'mcp':
129
+ case 'extension':
130
+ return ToolDataSource.toKey(source);
131
+ case 'internal':
132
+ return ( BucketOrdinal.BuiltIn.toString());
133
+ case 'user':
134
+ return ( BucketOrdinal.User.toString());
135
+ case 'external':
136
+ throw ( new Error('should not be reachable'));
137
+ default:
138
+ assertNever();
139
+ }
140
+ };
141
+ const createBucket = (source, key) => {
142
+ if (source.type === 'mcp') {
143
+ const { definitionId } = source;
128
144
  const mcpServer = mcpService.servers.get().find(candidate => candidate.definition.id === definitionId);
129
145
  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;
146
+ return undefined;
175
147
  }
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;
148
+ const buttons = [];
149
+ const collection = mcpRegistry.collections.get().find(c => c.id === mcpServer.collection.id);
150
+ if (collection?.source) {
151
+ buttons.push({
152
+ iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
153
+ tooltip: ( localize(4716, "Configure {0}", collection.label)),
154
+ 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
155
+ });
191
156
  }
192
- else if (toolSetOrTool.source.type === 'internal') {
193
- ordinal = BucketOrdinal.BuiltIn;
194
- label = ( localize(4666, "Built-In"));
195
- key = ( ordinal.toString());
157
+ else if (collection?.presentation?.origin) {
158
+ buttons.push({
159
+ iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
160
+ tooltip: ( localize(4716, "Configure {0}", collection.label)),
161
+ action: () => editorService.openEditor({
162
+ resource: collection.presentation.origin,
163
+ })
164
+ });
196
165
  }
197
- else if (toolSetOrTool.source.type === 'user') {
198
- ordinal = BucketOrdinal.User;
199
- label = ( localize(4667, "User Defined Tool Sets"));
200
- key = ( ordinal.toString());
166
+ if (mcpServer.connectionState.get().state === McpConnectionState.Kind.Error) {
201
167
  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
- }
168
+ iconClass: ThemeIcon.asClassName(Codicon.warning),
169
+ tooltip: ( localize(4717, "Show Output")),
170
+ action: () => mcpServer.showOutput(),
208
171
  });
209
172
  }
210
- else {
211
- assertNever();
173
+ return {
174
+ itemType: 'bucket',
175
+ ordinal: BucketOrdinal.Mcp,
176
+ id: key,
177
+ label: ( localize(4718, "MCP Server: {0}", source.label)),
178
+ checked: undefined,
179
+ collapsed: true,
180
+ children: [],
181
+ buttons,
182
+ iconClass: ThemeIcon.asClassName(Codicon.mcp)
183
+ };
184
+ }
185
+ else if (source.type === 'extension') {
186
+ return {
187
+ itemType: 'bucket',
188
+ ordinal: BucketOrdinal.Extension,
189
+ id: key,
190
+ label: ( localize(4719, 'Extension: {0}', source.label)),
191
+ checked: undefined,
192
+ children: [],
193
+ buttons: [],
194
+ collapsed: true,
195
+ iconClass: ThemeIcon.asClassName(Codicon.extensions)
196
+ };
197
+ }
198
+ else if (source.type === 'internal') {
199
+ return {
200
+ itemType: 'bucket',
201
+ ordinal: BucketOrdinal.BuiltIn,
202
+ id: key,
203
+ label: ( localize(4720, "Built-In")),
204
+ checked: undefined,
205
+ children: [],
206
+ buttons: [],
207
+ collapsed: false
208
+ };
209
+ }
210
+ else {
211
+ return {
212
+ itemType: 'bucket',
213
+ ordinal: BucketOrdinal.User,
214
+ id: key,
215
+ label: ( localize(4721, "User Defined Tool Sets")),
216
+ checked: undefined,
217
+ children: [],
218
+ buttons: [],
219
+ collapsed: true
220
+ };
221
+ }
222
+ };
223
+ const getBucket = (source) => {
224
+ const key = getKey(source);
225
+ let bucket = bucketMap.get(key);
226
+ if (!bucket) {
227
+ bucket = createBucket(source, key);
228
+ if (bucket) {
229
+ bucketMap.set(key, bucket);
212
230
  }
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
+ return bucket;
233
+ };
234
+ for (const toolSet of toolsService.toolSets.get()) {
235
+ if (!( toolsEntries.has(toolSet))) {
236
+ continue;
237
+ }
238
+ const bucket = getBucket(toolSet.source);
239
+ if (!bucket) {
240
+ continue;
241
+ }
242
+ const toolSetChecked = toolsEntries.get(toolSet) === true;
243
+ if (toolSet.source.type === 'mcp') {
244
+ bucket.toolset = toolSet;
245
+ if (toolSetChecked) {
246
+ bucket.checked = toolSetChecked;
231
247
  }
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];
248
+ }
249
+ else {
250
+ const treeItem = createToolSetTreeItem(toolSet, toolSetChecked, editorService);
251
+ bucket.children.push(treeItem);
252
+ const children = [];
253
+ for (const tool of toolSet.getTools()) {
254
+ const toolChecked = toolSetChecked || toolsEntries.get(tool) === true;
255
+ const toolTreeItem = createToolTreeItemFromData(tool, toolChecked);
256
+ children.push(toolTreeItem);
246
257
  }
247
- else if (toolSetOrTool.canBeReferencedInPrompt) {
248
- const toolTreeItem = createToolTreeItemFromData(toolSetOrTool, picked);
249
- bucketItem.children = [...(bucketItem.children || []), toolTreeItem];
258
+ if (children.length > 0) {
259
+ treeItem.children = children;
250
260
  }
251
261
  }
252
262
  }
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
- });
263
+ for (const tool of toolsService.getTools()) {
264
+ if (!tool.canBeReferencedInPrompt || !( toolsEntries.has(tool))) {
265
+ continue;
260
266
  }
261
- else {
262
- bucketItem.checked = bucketItem.children?.some(child => child.checked) || false;
267
+ const bucket = getBucket(tool.source);
268
+ if (!bucket) {
269
+ continue;
263
270
  }
271
+ const toolChecked = bucket.checked === true || toolsEntries.get(tool) === true;
272
+ const toolTreeItem = createToolTreeItemFromData(tool, toolChecked);
273
+ bucket.children.push(toolTreeItem);
264
274
  }
275
+ const sortedBuckets = Array.from(( bucketMap.values())).sort((a, b) => a.ordinal - b.ordinal);
276
+ treeItems.push(...sortedBuckets);
265
277
  const store = ( new DisposableStore());
266
278
  const treePicker = store.add(quickPickService.createQuickTree());
267
279
  treePicker.placeholder = placeHolder;
@@ -270,7 +282,7 @@ async function showToolsPickerTree(accessor, placeHolder, description, toolsEntr
270
282
  treePicker.matchOnDescription = true;
271
283
  treePicker.matchOnLabel = true;
272
284
  if (treeItems.length === 0) {
273
- treePicker.placeholder = ( localize(4669, "Add tools to chat"));
285
+ treePicker.placeholder = ( localize(4722, "Add tools to chat"));
274
286
  }
275
287
  treePicker.setItemTree(treeItems);
276
288
  store.add(treePicker.onDidTriggerItemButton(e => {
@@ -279,43 +291,26 @@ async function showToolsPickerTree(accessor, placeHolder, description, toolsEntr
279
291
  store.dispose();
280
292
  }
281
293
  }));
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);
294
+ const updateToolLimitMessage = () => {
295
+ if (toolLimit) {
296
+ let count = 0;
297
+ const traverse = (items) => {
298
+ for (const item of items) {
299
+ if (isBucketTreeItem(item) || isToolSetTreeItem(item)) {
300
+ if (item.children) {
301
+ traverse(item.children);
302
+ }
302
303
  }
303
- }
304
- else if (isToolTreeItem(item)) {
305
- const checked = typeof item.checked === 'boolean' ? item.checked : false;
306
- if (checked) {
304
+ else if (isToolTreeItem(item) && item.checked) {
307
305
  count++;
308
306
  }
309
- result.set(item.tool, checked);
310
307
  }
311
- }
312
- };
313
- traverse(treeItems);
314
- if (toolLimit) {
308
+ };
309
+ traverse(treeItems);
315
310
  if (count > toolLimit) {
316
311
  treePicker.severity = Severity.Warning;
317
312
  treePicker.validationMessage = ( localize(
318
- 4670,
313
+ 4723,
319
314
  "{0} tools are enabled. You may experience degraded tool calling above {1} tools.",
320
315
  count,
321
316
  markdownCommandLink({ title: String(toolLimit), id: '_chat.toolPicker.closeAndOpenVirtualThreshold' })
@@ -326,14 +321,33 @@ async function showToolsPickerTree(accessor, placeHolder, description, toolsEntr
326
321
  treePicker.validationMessage = undefined;
327
322
  }
328
323
  }
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)));
324
+ };
325
+ updateToolLimitMessage();
326
+ const collectResults = () => {
327
+ const result = ( new Map());
328
+ const traverse = (items) => {
329
+ for (const item of items) {
330
+ if (isBucketTreeItem(item)) {
331
+ if (item.toolset) {
332
+ const allChecked = item.checked === true;
333
+ result.set(item.toolset, allChecked);
334
+ }
335
+ traverse(item.children);
336
+ }
337
+ else if (isToolSetTreeItem(item)) {
338
+ result.set(item.toolset, item.checked === true);
339
+ if (item.children) {
340
+ traverse(item.children);
341
+ }
342
+ }
343
+ else if (isToolTreeItem(item)) {
344
+ result.set(item.tool, item.checked);
345
+ }
333
346
  }
334
- }
347
+ };
348
+ traverse(treeItems);
349
+ return result;
335
350
  };
336
- collectResults();
337
351
  store.add(CommandsRegistry.registerCommand({
338
352
  id: '_chat.toolPicker.closeAndOpenVirtualThreshold',
339
353
  handler: () => {
@@ -341,21 +355,7 @@ async function showToolsPickerTree(accessor, placeHolder, description, toolsEntr
341
355
  commandService.executeCommand('workbench.action.openSettings', 'github.copilot.chat.virtualTools.threshold');
342
356
  }
343
357
  }));
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
- }));
358
+ store.add(treePicker.onDidChangeCheckedLeafItems(() => updateToolLimitMessage()));
359
359
  let didAccept = false;
360
360
  store.add(treePicker.onDidAccept(() => {
361
361
  const activeItems = treePicker.activeItems;
@@ -369,17 +369,17 @@ async function showToolsPickerTree(accessor, placeHolder, description, toolsEntr
369
369
  }));
370
370
  const addMcpServerButton = {
371
371
  iconClass: ThemeIcon.asClassName(Codicon.mcp),
372
- tooltip: ( localize(4671, 'Add MCP Server...'))
372
+ tooltip: ( localize(4724, 'Add MCP Server...'))
373
373
  };
374
374
  const installExtension = {
375
375
  iconClass: ThemeIcon.asClassName(Codicon.extensions),
376
- tooltip: ( localize(4672, 'Install Extension...'))
376
+ tooltip: ( localize(4725, 'Install Extension...'))
377
377
  };
378
378
  const configureToolSets = {
379
379
  iconClass: ThemeIcon.asClassName(Codicon.gear),
380
- tooltip: ( localize(4673, 'Configure Tool Sets...'))
380
+ tooltip: ( localize(4726, 'Configure Tool Sets...'))
381
381
  };
382
- treePicker.title = ( localize(4674, "Configure Tools"));
382
+ treePicker.title = ( localize(4727, "Configure Tools"));
383
383
  treePicker.buttons = [addMcpServerButton, installExtension, configureToolSets];
384
384
  store.add(treePicker.onDidTriggerButton(button => {
385
385
  if (button === addMcpServerButton) {
@@ -396,353 +396,7 @@ async function showToolsPickerTree(accessor, placeHolder, description, toolsEntr
396
396
  treePicker.show();
397
397
  await Promise.race([Event.toPromise(Event.any(treePicker.onDidAccept, treePicker.onDidHide), store)]);
398
398
  store.dispose();
399
- collectResults();
400
- return didAccept ? result : undefined;
401
- }
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) {
413
- const quickPickService = accessor.get(IQuickInputService);
414
- const mcpService = accessor.get(IMcpService);
415
- const mcpRegistry = accessor.get(IMcpRegistry);
416
- const commandService = accessor.get(ICommandService);
417
- const extensionsWorkbenchService = accessor.get(IExtensionsWorkbenchService);
418
- const editorService = accessor.get(IEditorService);
419
- const mcpWorkbenchService = accessor.get(IMcpWorkbenchService);
420
- const toolsService = accessor.get(ILanguageModelToolsService);
421
- const mcpServerByTool = ( new Map());
422
- for (const server of mcpService.servers.get()) {
423
- for (const tool of server.tools.get()) {
424
- mcpServerByTool.set(tool.id, server);
425
- }
426
- }
427
- const builtinBucket = {
428
- type: 'item',
429
- children: [],
430
- label: ( localize(4666, "Built-In")),
431
- ordinal: BucketOrdinal.BuiltIn,
432
- picked: false,
433
- };
434
- const userBucket = {
435
- type: 'item',
436
- children: [],
437
- label: ( localize(4667, "User Defined Tool Sets")),
438
- ordinal: BucketOrdinal.User,
439
- alwaysShow: true,
440
- picked: false,
441
- };
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') };
446
- const addPick = {
447
- type: 'item', label: ( localize(4678, "Add More Tools...")), iconClass: ThemeIcon.asClassName(Codicon.add), pickable: false, run: async () => {
448
- const pick = await quickPickService.pick([addMcpPick, addExpPick], {
449
- canPickMany: false,
450
- placeHolder: ( localize(4669, "Add tools to chat"))
451
- });
452
- pick?.run();
453
- }
454
- };
455
- const toolBuckets = ( new Map());
456
- if (!toolsEntries) {
457
- const defaultEntries = ( new Map());
458
- for (const tool of toolsService.getTools()) {
459
- if (tool.canBeReferencedInPrompt) {
460
- defaultEntries.set(tool, false);
461
- }
462
- }
463
- for (const toolSet of toolsService.toolSets.get()) {
464
- defaultEntries.set(toolSet, false);
465
- }
466
- toolsEntries = defaultEntries;
467
- }
468
- for (const [toolSetOrTool, picked] of toolsEntries) {
469
- let bucket;
470
- const buttons = [];
471
- if (toolSetOrTool.source.type === 'mcp') {
472
- const key = ToolDataSource.toKey(toolSetOrTool.source);
473
- const { definitionId } = toolSetOrTool.source;
474
- const mcpServer = mcpService.servers.get().find(candidate => candidate.definition.id === definitionId);
475
- if (!mcpServer) {
476
- continue;
477
- }
478
- const buttons = [];
479
- bucket = toolBuckets.get(key) ?? {
480
- type: 'item',
481
- label: ( localize(4664, "MCP Server: {0}", toolSetOrTool.source.label)),
482
- ordinal: BucketOrdinal.Mcp,
483
- picked: false,
484
- alwaysShow: true,
485
- children: [],
486
- buttons
487
- };
488
- toolBuckets.set(key, bucket);
489
- const collection = mcpRegistry.collections.get().find(c => c.id === mcpServer.collection.id);
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) {
498
- buttons.push({
499
- iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
500
- tooltip: ( localize(4662, "Configure {0}", collection.label)),
501
- action: () => editorService.openEditor({
502
- resource: collection.presentation.origin,
503
- })
504
- });
505
- }
506
- if (mcpServer.connectionState.get().state === McpConnectionState.Kind.Error) {
507
- buttons.push({
508
- iconClass: ThemeIcon.asClassName(Codicon.warning),
509
- tooltip: ( localize(4663, "Show Output")),
510
- action: () => mcpServer.showOutput(),
511
- });
512
- }
513
- }
514
- else if (toolSetOrTool.source.type === 'extension') {
515
- const key = ToolDataSource.toKey(toolSetOrTool.source);
516
- bucket = toolBuckets.get(key) ?? {
517
- type: 'item',
518
- label: ( localize(4665, 'Extension: {0}', toolSetOrTool.source.label)),
519
- ordinal: BucketOrdinal.Extension,
520
- picked: false,
521
- alwaysShow: true,
522
- children: []
523
- };
524
- toolBuckets.set(key, bucket);
525
- }
526
- else if (toolSetOrTool.source.type === 'internal') {
527
- bucket = builtinBucket;
528
- }
529
- else if (toolSetOrTool.source.type === 'user') {
530
- bucket = userBucket;
531
- buttons.push({
532
- iconClass: ThemeIcon.asClassName(Codicon.edit),
533
- tooltip: ( localize(4668, "Edit Tool Set")),
534
- action: () => {
535
- assertType(toolSetOrTool.source.type === 'user');
536
- editorService.openEditor({ resource: toolSetOrTool.source.file });
537
- }
538
- });
539
- }
540
- else {
541
- assertNever();
542
- }
543
- if (toolSetOrTool instanceof ToolSet) {
544
- if (toolSetOrTool.source.type !== 'mcp') {
545
- bucket.children.push({
546
- parent: bucket,
547
- type: 'item',
548
- picked,
549
- toolset: toolSetOrTool,
550
- label: toolSetOrTool.referenceName,
551
- description: toolSetOrTool.description,
552
- indented: true,
553
- buttons
554
- });
555
- }
556
- else {
557
- bucket.toolset = toolSetOrTool;
558
- bucket.picked = picked;
559
- }
560
- }
561
- else if (toolSetOrTool.canBeReferencedInPrompt) {
562
- bucket.children.push({
563
- parent: bucket,
564
- type: 'item',
565
- picked,
566
- tool: toolSetOrTool,
567
- label: toolSetOrTool.toolReferenceName ?? toolSetOrTool.displayName,
568
- description: toolSetOrTool.userDescription ?? toolSetOrTool.modelDescription,
569
- indented: true,
570
- });
571
- }
572
- }
573
- for (const bucket of [builtinBucket, userBucket]) {
574
- if (bucket.children.length > 0) {
575
- toolBuckets.set(generateUuid(), bucket);
576
- }
577
- }
578
- for (const bucket of ( toolBuckets.values())) {
579
- if (bucket.picked) {
580
- for (const child of bucket.children) {
581
- child.picked = true;
582
- }
583
- }
584
- else {
585
- bucket.picked = ( bucket.children.some(child => child.picked));
586
- }
587
- }
588
- const store = ( new DisposableStore());
589
- const picks = [];
590
- for (const bucket of Array.from(( toolBuckets.values())).sort((a, b) => a.ordinal - b.ordinal)) {
591
- picks.push({
592
- type: 'separator',
593
- label: bucket.status
594
- });
595
- picks.push(bucket);
596
- picks.push(...bucket.children.sort((a, b) => a.label.localeCompare(b.label)));
597
- }
598
- const picker = store.add(quickPickService.createQuickPick({ useSeparators: true }));
599
- picker.placeholder = placeHolder;
600
- picker.ignoreFocusOut = true;
601
- picker.description = description;
602
- picker.canSelectMany = true;
603
- picker.keepScrollPosition = true;
604
- picker.sortByLabel = false;
605
- picker.matchOnDescription = true;
606
- if (picks.length === 0) {
607
- picker.placeholder = ( localize(4669, "Add tools to chat"));
608
- picker.canSelectMany = false;
609
- picks.push(addMcpPick, addExpPick);
610
- }
611
- else {
612
- picks.push({ type: 'separator' }, configureToolSetsPick, addPick);
613
- }
614
- let lastSelectedItems = ( new Set());
615
- let ignoreEvent = false;
616
- const result = ( new Map());
617
- const _update = () => {
618
- ignoreEvent = true;
619
- try {
620
- const items = picks.filter((p) => p.type === 'item' && Boolean(p.picked));
621
- lastSelectedItems = ( new Set(items));
622
- picker.selectedItems = items;
623
- let count = 0;
624
- result.clear();
625
- for (const item of picks) {
626
- if (item.type !== 'item') {
627
- continue;
628
- }
629
- if (isToolSetPick(item)) {
630
- result.set(item.toolset, item.picked);
631
- count += Iterable.length(item.toolset.getTools());
632
- }
633
- else if (isToolPick(item)) {
634
- result.set(item.tool, item.picked);
635
- count++;
636
- }
637
- else if (isBucketPick(item)) {
638
- if (item.toolset) {
639
- result.set(item.toolset, item.picked);
640
- }
641
- for (const child of item.children) {
642
- if (isToolSetPick(child)) {
643
- result.set(child.toolset, item.picked);
644
- count += Iterable.length(child.toolset.getTools());
645
- }
646
- else if (isToolPick(child)) {
647
- result.set(child.tool, item.picked);
648
- count++;
649
- }
650
- }
651
- }
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
- }
668
- if (onUpdate) {
669
- let didChange = toolsEntries.size !== result.size;
670
- for (const [key, value] of toolsEntries) {
671
- if (didChange) {
672
- break;
673
- }
674
- didChange = result.get(key) !== value;
675
- }
676
- if (didChange) {
677
- onUpdate(result);
678
- }
679
- }
680
- }
681
- finally {
682
- ignoreEvent = false;
683
- }
684
- };
685
- _update();
686
- picker.items = picks;
687
- picker.show();
688
- store.add(picker.onDidTriggerItemButton(e => {
689
- if (isActionableButton(e.button)) {
690
- e.button.action();
691
- store.dispose();
692
- }
693
- }));
694
- store.add(picker.onDidChangeSelection(selectedPicks => {
695
- if (ignoreEvent) {
696
- return;
697
- }
698
- const addPick = selectedPicks.find(isCallbackPick);
699
- if (addPick) {
700
- return;
701
- }
702
- const { added, removed } = diffSets(lastSelectedItems, ( new Set(selectedPicks)));
703
- for (const item of added) {
704
- item.picked = true;
705
- if (isBucketPick(item)) {
706
- for (const toolPick of item.children) {
707
- toolPick.picked = true;
708
- }
709
- }
710
- else if (isToolPick(item) || isToolSetPick(item)) {
711
- item.parent.picked = true;
712
- }
713
- }
714
- for (const item of removed) {
715
- item.picked = false;
716
- if (isBucketPick(item)) {
717
- for (const toolPick of item.children) {
718
- toolPick.picked = false;
719
- }
720
- }
721
- else if ((isToolPick(item) || isToolSetPick(item)) && item.parent.children.every(child => !child.picked)) {
722
- item.parent.picked = false;
723
- }
724
- }
725
- _update();
726
- }));
727
- let didAccept = false;
728
- store.add(picker.onDidAccept(() => {
729
- const callbackPick = picker.activeItems.find(isCallbackPick);
730
- if (callbackPick) {
731
- callbackPick.run();
732
- }
733
- else {
734
- didAccept = true;
735
- }
736
- }));
737
- await Promise.race([Event.toPromise(Event.any(picker.onDidAccept, picker.onDidHide))]);
738
- store.dispose();
739
- for (const item of toolsService.toolSets.get()) {
740
- if (item.source.type === 'mcp') {
741
- const toolsInSet = Array.from(item.getTools());
742
- result.set(item, toolsInSet.every(tool => result.get(tool)));
743
- }
744
- }
745
- return didAccept ? result : undefined;
399
+ return didAccept ? collectResults() : undefined;
746
400
  }
747
401
 
748
402
  export { showToolsPicker };