@codingame/monaco-vscode-chat-service-override 25.1.2 → 26.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/index.js +24 -3
  2. package/package.json +5 -5
  3. package/vscode/src/vs/platform/browserElements/common/browserElements.d.ts +23 -3
  4. package/vscode/src/vs/platform/browserElements/common/browserElements.js +13 -6
  5. package/vscode/src/vs/platform/domWidget/browser/domWidget.js +4 -4
  6. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.d.ts +1 -1
  7. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.js +42 -27
  8. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.d.ts +14 -0
  9. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.js +218 -74
  10. package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatTerminalOutputAccessibleView.js +6 -8
  11. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +14 -9
  12. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +165 -168
  13. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +27 -25
  14. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +141 -140
  15. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +189 -121
  16. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +14 -15
  17. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.d.ts +60 -0
  18. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.js +435 -0
  19. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +28 -12
  20. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +10 -12
  21. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.d.ts +3 -1
  22. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.js +37 -16
  23. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.d.ts +11 -0
  24. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +54 -24
  25. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +73 -34
  26. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +71 -30
  27. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +151 -89
  28. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +12 -15
  29. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +39 -40
  30. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +90 -125
  31. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.d.ts +5 -2
  32. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +263 -143
  33. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTransfer.js +4 -4
  34. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +188 -126
  35. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.d.ts +1 -1
  36. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +37 -28
  37. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.d.ts +21 -9
  38. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +392 -226
  39. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +31 -27
  40. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +25 -23
  41. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsService.js +1 -3
  42. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.d.ts +2 -0
  43. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.js +13 -0
  44. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.d.ts +20 -0
  45. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +83 -0
  46. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.d.ts +68 -0
  47. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +319 -0
  48. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.d.ts +1 -0
  49. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +215 -0
  50. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.d.ts +179 -0
  51. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +951 -0
  52. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agentsessionprojection.css +20 -0
  53. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agenttitlebarstatuswidget.css +388 -0
  54. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/unifiedQuickAccess.css +195 -0
  55. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.d.ts +120 -0
  56. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +394 -0
  57. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.d.ts +38 -0
  58. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +95 -0
  59. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.d.ts +3 -1
  60. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.js +31 -29
  61. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +49 -47
  62. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatVariables.js +4 -6
  63. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/media/simpleBrowserOverlay.css +0 -1
  64. package/vscode/src/vs/workbench/contrib/chat/browser/attachments/simpleBrowserEditorOverlay.js +188 -151
  65. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +1012 -639
  66. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.js +256 -151
  67. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.d.ts +8 -1
  68. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +182 -101
  69. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingDeletedFileEntry.d.ts +79 -0
  70. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingDeletedFileEntry.js +193 -0
  71. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorAccessibility.js +9 -7
  72. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.d.ts +68 -0
  73. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +253 -0
  74. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.d.ts +4 -5
  75. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +69 -50
  76. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.d.ts +3 -4
  77. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +52 -33
  78. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +5 -6
  79. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +274 -155
  80. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingOperations.js +1 -1
  81. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.d.ts +2 -10
  82. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +130 -104
  83. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.d.ts +12 -2
  84. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +385 -160
  85. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.js +53 -36
  86. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +112 -75
  87. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.js +19 -10
  88. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/media/chatEditorController.css +31 -11
  89. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingModifiedNotebookSnapshot.js +39 -17
  90. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNewNotebookContentEdits.js +10 -14
  91. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.d.ts +0 -2
  92. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.js +25 -16
  93. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.d.ts +1 -1
  94. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +265 -203
  95. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookFileSystemProvider.js +29 -26
  96. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/helpers.js +114 -60
  97. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/notebookCellChanges.js +16 -19
  98. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.js +44 -30
  99. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +119 -45
  100. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.d.ts +1 -0
  101. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.js +152 -136
  102. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +12 -8
  103. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.d.ts +51 -31
  104. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +323 -217
  105. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.d.ts +4 -3
  106. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +653 -401
  107. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.js +52 -40
  108. package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/media/chatModelsWidget.css +22 -3
  109. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.d.ts +5 -2
  110. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +43 -28
  111. package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +182 -136
  112. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.d.ts +33 -0
  113. package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +548 -0
  114. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.d.ts +0 -1
  115. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +222 -138
  116. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.d.ts +3 -3
  117. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +151 -113
  118. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.d.ts +6 -4
  119. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +453 -217
  120. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.d.ts +1 -1
  121. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +162 -88
  122. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/media/chatSetup.css +2 -1
  123. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.d.ts +0 -2
  124. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.js +1 -13
  125. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.d.ts +1 -0
  126. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.js +309 -233
  127. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +55 -53
  128. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusItemService.js +3 -1
  129. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.d.ts +37 -0
  130. package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +109 -0
  131. package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +35 -23
  132. package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.d.ts +9 -4
  133. package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.js +73 -33
  134. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.d.ts +47 -0
  135. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.js +333 -0
  136. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +39 -25
  137. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionContribution.js +9 -5
  138. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +23 -20
  139. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptFileActions.js +2 -0
  140. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +20 -16
  141. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +65 -57
  142. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +48 -36
  143. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +20 -12
  144. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.d.ts +4 -0
  145. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.js +52 -0
  146. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +155 -159
  147. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.d.ts +24 -14
  148. package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +521 -246
  149. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +107 -76
  150. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +28 -24
  151. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownAnchorService.js +10 -6
  152. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputStateCache.d.ts +16 -0
  153. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputStateCache.js +57 -0
  154. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatLayoutService.js +4 -6
  155. package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.js +56 -44
  156. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.d.ts +0 -3
  157. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.js +37 -47
  158. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatEditorInputContentProvider.js +5 -7
  159. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.d.ts +10 -0
  160. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +1284 -0
  161. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +179 -125
  162. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +9 -11
  163. package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/editorHoverWrapper.js +7 -6
  164. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/chatQuick.js +96 -78
  165. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +58 -53
  166. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.d.ts +25 -11
  167. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +484 -292
  168. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.d.ts +1 -6
  169. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +65 -92
  170. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewPane.css +16 -19
  171. package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewTitleControl.css +1 -0
  172. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +9 -1
  173. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +331 -189
  174. package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +81 -93
  175. package/vscode/src/vs/workbench/contrib/chat/common/ignoredFiles.js +1 -3
  176. package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.d.ts +5 -3
  177. package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.js +6 -7
  178. package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.d.ts +36 -8
  179. package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.js +169 -31
  180. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionOperationLog.d.ts +6 -0
  181. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionOperationLog.js +141 -0
  182. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.d.ts +6 -4
  183. package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +218 -144
  184. package/vscode/src/vs/workbench/contrib/chat/common/model/chatTransferService.js +20 -10
  185. package/vscode/src/vs/workbench/contrib/chat/common/model/objectMutationLog.d.ts +109 -0
  186. package/vscode/src/vs/workbench/contrib/chat/common/model/objectMutationLog.js +349 -0
  187. package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.js +9 -8
  188. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.d.ts +9 -0
  189. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +139 -36
  190. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +3 -6
  191. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptBodyAutocompletion.js +64 -51
  192. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +49 -34
  193. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptDocumentSemanticTokensProvider.js +21 -13
  194. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.d.ts +1 -1
  195. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +125 -97
  196. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +91 -131
  197. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptLinkProvider.js +8 -5
  198. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.d.ts +5 -0
  199. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +488 -222
  200. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/promptFileContributions.js +32 -12
  201. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +58 -13
  202. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +717 -200
  203. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +79 -18
  204. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +371 -130
  205. package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.d.ts +0 -1
  206. package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.js +3 -7
  207. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +79 -61
  208. package/vscode/src/vs/workbench/contrib/chat/common/widget/chatResponseResourceFileSystemProvider.js +27 -21
  209. package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/aiEditTelemetry/aiEditTelemetryServiceImpl.js +7 -10
  210. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.d.ts +1 -1
  211. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +26 -32
  212. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibilityHelp.js +2 -2
  213. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +8 -60
  214. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +115 -426
  215. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.d.ts +15 -0
  216. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +127 -0
  217. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatNotebook.js +1 -37
  218. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.d.ts +16 -0
  219. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.js +21 -0
  220. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.d.ts +51 -0
  221. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +334 -0
  222. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.d.ts +41 -0
  223. package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.js +424 -0
  224. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.d.ts +4 -0
  225. package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +58 -0
  226. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.d.ts +7 -0
  227. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +195 -0
  228. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.d.ts +8 -0
  229. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +368 -0
  230. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.d.ts +2 -0
  231. package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +7 -0
  232. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.d.ts +1 -1
  233. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.js +1 -1
  234. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +23 -25
  235. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/common/remoteCodingAgentsService.js +7 -8
  236. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +34 -38
  237. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibleView.js +8 -12
  238. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +103 -95
  239. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.js +28 -16
  240. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatEnabler.js +4 -5
  241. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.d.ts +12 -8
  242. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.js +65 -54
  243. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +86 -60
  244. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.js +13 -26
  245. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/commandFileWriteParser.d.ts +24 -0
  246. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/sedFileWriteParser.d.ts +26 -0
  247. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/sedFileWriteParser.js +142 -0
  248. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.d.ts +2 -1
  249. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.js +56 -46
  250. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.d.ts +2 -2
  251. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.js +63 -31
  252. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.d.ts +2 -1
  253. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.js +35 -30
  254. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.d.ts +2 -1
  255. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.js +44 -37
  256. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/strategyHelpers.js +3 -4
  257. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.js +3 -3
  258. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.d.ts +11 -0
  259. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +70 -50
  260. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalToolTelemetry.js +26 -394
  261. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +85 -49
  262. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +68 -27
  263. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.d.ts +1 -0
  264. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +67 -45
  265. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.d.ts +12 -0
  266. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.js +106 -0
  267. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/commandLineAutoApprover.d.ts +2 -2
  268. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/commandLineAutoApprover.js +177 -97
  269. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +136 -49
  270. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAnalyzer.d.ts +2 -1
  271. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +128 -112
  272. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +51 -49
  273. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineSandboxAnalyzer.d.ts +8 -0
  274. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineSandboxAnalyzer.js +25 -0
  275. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/commandLinePresenter.d.ts +41 -0
  276. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/nodeCommandLinePresenter.d.ts +19 -0
  277. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/nodeCommandLinePresenter.js +37 -0
  278. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/pythonCommandLinePresenter.d.ts +19 -0
  279. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/pythonCommandLinePresenter.js +37 -0
  280. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/rubyCommandLinePresenter.d.ts +19 -0
  281. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/rubyCommandLinePresenter.js +44 -0
  282. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/sandboxedCommandLinePresenter.d.ts +12 -0
  283. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/sandboxedCommandLinePresenter.js +21 -0
  284. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineCdPrefixRewriter.js +5 -14
  285. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLinePreventHistoryRewriter.js +2 -4
  286. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineRewriter.d.ts +1 -0
  287. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineSandboxRewriter.d.ts +8 -0
  288. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineSandboxRewriter.js +29 -0
  289. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +30 -31
  290. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +16 -17
  291. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +19 -20
  292. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.d.ts +11 -0
  293. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +58 -0
  294. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +31 -3
  295. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +325 -199
  296. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.d.ts +1 -1
  297. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.js +1 -1
  298. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +33 -38
  299. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.d.ts +45 -5
  300. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +746 -456
  301. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +145 -98
  302. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +88 -37
  303. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +120 -51
  304. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +25 -28
  305. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.d.ts +5 -0
  306. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.js +58 -12
  307. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/toolIds.d.ts +12 -0
  308. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/toolIds.js +17 -0
  309. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.d.ts +8 -1
  310. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.js +47 -28
  311. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.d.ts +37 -0
  312. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +171 -0
  313. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.d.ts +0 -58
  314. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.js +0 -213
  315. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.d.ts +0 -39
  316. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +0 -243
  317. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.d.ts +0 -7
  318. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.js +0 -41
  319. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.d.ts +0 -166
  320. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.js +0 -607
  321. package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +0 -255
  322. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.d.ts +0 -46
  323. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +0 -396
  324. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.d.ts +0 -9
  325. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +0 -379
  326. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/media/chatEditingEditorOverlay.css +0 -117
  327. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.d.ts +0 -141
  328. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.js +0 -961
  329. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.d.ts +0 -36
  330. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +0 -447
  331. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsParametersSchema.d.ts +0 -6
  332. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsParametersSchema.js +0 -251
  333. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.d.ts +0 -10
  334. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.js +0 -42
@@ -4,7 +4,7 @@ import { renderAsPlaintext } from '@codingame/monaco-vscode-api/vscode/vs/base/b
4
4
  import { assertNever } from '@codingame/monaco-vscode-api/vscode/vs/base/common/assert';
5
5
  import { RunOnceScheduler, timeout } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
6
6
  import { encodeBase64 } from '@codingame/monaco-vscode-api/vscode/vs/base/common/buffer';
7
- import { CancellationTokenSource } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
7
+ import { CancellationTokenSource, CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
8
8
  import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
9
9
  import { arrayEqualsC } from '@codingame/monaco-vscode-api/vscode/vs/base/common/equals';
10
10
  import { toErrorMessage } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errorMessage';
@@ -34,32 +34,50 @@ import { IStorageService } from '@codingame/monaco-vscode-api/vscode/vs/platform
34
34
  import { ITelemetryService } from '@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service';
35
35
  import { IExtensionService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions.service';
36
36
  import { ChatContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/actions/chatContextKeys';
37
- import { ChatToolInvocation } from '../../common/model/chatProgressTypes/chatToolInvocation.js';
37
+ import { toToolSetVariableEntry, toToolVariableEntry } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/attachments/chatVariableEntries';
38
38
  import { IChatToolInvocation, ToolConfirmKind } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService/chatService';
39
39
  import { IChatService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService/chatService.service';
40
- import { toToolSetVariableEntry, toToolVariableEntry } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/attachments/chatVariableEntries';
41
40
  import { ChatConfiguration } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
41
+ import { ChatToolInvocation } from '../../common/model/chatProgressTypes/chatToolInvocation.js';
42
42
  import { ILanguageModelToolsConfirmationService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/tools/languageModelToolsConfirmationService.service';
43
- import { ToolDataSource, VSCodeToolReference, SpecedToolAliases, ToolSet, createToolSchemaUri, stringifyPromptTsxPart } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/tools/languageModelToolsService';
43
+ import { ToolDataSource, VSCodeToolReference, SpecedToolAliases, isToolSet, createToolSchemaUri, toolMatchesModel, stringifyPromptTsxPart, ToolSetForModel, ToolSet } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/tools/languageModelToolsService';
44
44
  import { getToolConfirmationAlert } from '@codingame/monaco-vscode-katex-common/vscode/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityProvider';
45
- import { observableFromEventOpts } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableFromEvent';
45
+ import { chatSessionResourceToId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/model/chatUri';
46
46
  import { ObservableSet } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/set';
47
- import { derived } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/derived';
47
+ import { derived, derivedOpts } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/derived';
48
+ import { observableFromEventOpts } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableFromEvent';
49
+ import { observableSignal } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableSignal';
50
+ import { transaction } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/transaction';
48
51
 
49
52
  var LanguageModelToolsService_1;
50
53
  const jsonSchemaRegistry = ( Registry.as(Extensions.JSONContribution));
51
54
  var AutoApproveStorageKeys;
52
- (function (AutoApproveStorageKeys) {
55
+ (function(AutoApproveStorageKeys) {
53
56
  AutoApproveStorageKeys["GlobalAutoApproveOptIn"] = "chat.tools.global.autoApprove.optIn";
54
57
  })(AutoApproveStorageKeys || (AutoApproveStorageKeys = {}));
55
- const SkipAutoApproveConfirmationKey = 'vscode.chat.tools.global.autoApprove.testMode';
58
+ const SkipAutoApproveConfirmationKey = "vscode.chat.tools.global.autoApprove.testMode";
56
59
  const globalAutoApproveDescription = ( localize2(
57
- 5574,
58
- 'Global auto approve also known as "YOLO mode" disables manual approval completely for _all tools in all workspaces_, allowing the agent to act fully autonomously. This is extremely dangerous and is *never* recommended, even containerized environments like [Codespaces](https://github.com/features/codespaces) and [Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) have user keys forwarded into the container that could be compromised.\n\n**This feature disables [critical security protections](https://code.visualstudio.com/docs/copilot/security) and makes it much easier for an attacker to compromise the machine.**'
60
+ 5792,
61
+ "Global auto approve also known as \"YOLO mode\" disables manual approval completely for _all tools in all workspaces_, allowing the agent to act fully autonomously. This is extremely dangerous and is *never* recommended, even containerized environments like [Codespaces](https://github.com/features/codespaces) and [Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) have user keys forwarded into the container that could be compromised.\n\n**This feature disables [critical security protections](https://code.visualstudio.com/docs/copilot/security) and makes it much easier for an attacker to compromise the machine.**"
59
62
  ));
60
63
  let LanguageModelToolsService = class LanguageModelToolsService extends Disposable {
61
- static { LanguageModelToolsService_1 = this; }
62
- constructor(_instantiationService, _extensionService, _contextKeyService, _chatService, _dialogService, _telemetryService, _logService, _configurationService, _accessibilityService, _accessibilitySignalService, _storageService, _confirmationService) {
64
+ static {
65
+ LanguageModelToolsService_1 = this;
66
+ }
67
+ constructor(
68
+ _instantiationService,
69
+ _extensionService,
70
+ _contextKeyService,
71
+ _chatService,
72
+ _dialogService,
73
+ _telemetryService,
74
+ _logService,
75
+ _configurationService,
76
+ _accessibilityService,
77
+ _accessibilitySignalService,
78
+ _storageService,
79
+ _confirmationService
80
+ ) {
63
81
  super();
64
82
  this._instantiationService = _instantiationService;
65
83
  this._extensionService = _extensionService;
@@ -77,21 +95,26 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
77
95
  this.onDidChangeTools = this._onDidChangeTools.event;
78
96
  this._onDidPrepareToolCallBecomeUnresponsive = this._register(( new Emitter()));
79
97
  this.onDidPrepareToolCallBecomeUnresponsive = this._onDidPrepareToolCallBecomeUnresponsive.event;
98
+ this._onDidInvokeTool = this._register(( new Emitter()));
99
+ this.onDidInvokeTool = this._onDidInvokeTool.event;
80
100
  this._onDidChangeToolsScheduler = ( new RunOnceScheduler(() => this._onDidChangeTools.fire(), 750));
81
101
  this._tools = ( new Map());
82
102
  this._toolContextKeys = ( new Set());
83
103
  this._callsByRequestId = ( new Map());
84
- this.toolsObservable = observableFromEventOpts({ equalsFn: arrayEqualsC() }, this.onDidChangeTools, () => Array.from(this.getTools()));
104
+ this._pendingToolCalls = ( new Map());
85
105
  this._toolSets = ( new ObservableSet());
86
106
  this.toolSets = derived(this, reader => {
87
107
  const allToolSets = Array.from(this._toolSets.observable.read(reader));
88
108
  return allToolSets.filter(toolSet => this.isPermitted(toolSet, reader));
89
109
  });
110
+ this.allToolsIncludingDisableObs = observableFromEventOpts({
111
+ equalsFn: arrayEqualsC()
112
+ }, this.onDidChangeTools, () => Array.from(this.getAllToolsIncludingDisabled()));
90
113
  this.toolsWithFullReferenceName = derived(reader => {
91
114
  const result = [];
92
115
  const coveredByToolSets = ( new Set());
93
116
  for (const toolSet of this.toolSets.read(reader)) {
94
- if (toolSet.source.type !== 'user') {
117
+ if (toolSet.source.type !== "user") {
95
118
  result.push([toolSet, getToolSetFullReferenceName(toolSet)]);
96
119
  for (const tool of toolSet.getTools()) {
97
120
  result.push([tool, getToolFullReferenceName(tool, toolSet)]);
@@ -99,7 +122,10 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
99
122
  }
100
123
  }
101
124
  }
102
- for (const tool of this.toolsObservable.read(reader)) {
125
+ for (const tool of this.allToolsIncludingDisableObs.read(reader)) {
126
+ if (tool.when && !this._contextKeyService.contextMatchesRules(tool.when)) {
127
+ continue;
128
+ }
103
129
  if (tool.canBeReferencedInPrompt && !( coveredByToolSets.has(tool)) && this.isPermitted(tool, reader)) {
104
130
  result.push([tool, getToolFullReferenceName(tool)]);
105
131
  }
@@ -117,26 +143,40 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
117
143
  this._onDidChangeToolsScheduler.schedule();
118
144
  }
119
145
  }));
120
- this._register(Event.runAndSubscribe(this._configurationService.onDidChangeConfiguration, e => {
121
- if (!e || e.affectsConfiguration(ChatConfiguration.GlobalAutoApprove)) {
122
- if (this._configurationService.getValue(ChatConfiguration.GlobalAutoApprove) !== true) {
123
- this._storageService.remove(AutoApproveStorageKeys.GlobalAutoApproveOptIn, StorageScope.APPLICATION);
146
+ this._register(
147
+ Event.runAndSubscribe(this._configurationService.onDidChangeConfiguration, e => {
148
+ if (!e || e.affectsConfiguration(ChatConfiguration.GlobalAutoApprove)) {
149
+ if (this._configurationService.getValue(ChatConfiguration.GlobalAutoApprove) !== true) {
150
+ this._storageService.remove(AutoApproveStorageKeys.GlobalAutoApproveOptIn, StorageScope.APPLICATION);
151
+ }
124
152
  }
125
- }
126
- }));
153
+ })
154
+ );
127
155
  this._ctxToolsCount = ChatContextKeys.Tools.toolsCount.bindTo(_contextKeyService);
128
- this.vscodeToolSet = this._register(this.createToolSet(ToolDataSource.Internal, 'vscode', VSCodeToolReference.vscode, {
129
- icon: ThemeIcon.fromId(Codicon.vscode.id),
130
- description: ( localize(5575, 'Use VS Code features')),
131
- }));
132
- this.executeToolSet = this._register(this.createToolSet(ToolDataSource.Internal, 'execute', SpecedToolAliases.execute, {
133
- icon: ThemeIcon.fromId(Codicon.terminal.id),
134
- description: ( localize(5576, 'Execute code and applications on your machine')),
135
- }));
136
- this.readToolSet = this._register(this.createToolSet(ToolDataSource.Internal, 'read', SpecedToolAliases.read, {
137
- icon: ThemeIcon.fromId(Codicon.eye.id),
138
- description: ( localize(5577, 'Read files in your workspace')),
139
- }));
156
+ this.vscodeToolSet = this._register(
157
+ this.createToolSet(ToolDataSource.Internal, "vscode", VSCodeToolReference.vscode, {
158
+ icon: ThemeIcon.fromId(Codicon.vscode.id),
159
+ description: ( localize(5793, "Use VS Code features"))
160
+ })
161
+ );
162
+ this.executeToolSet = this._register(
163
+ this.createToolSet(ToolDataSource.Internal, "execute", SpecedToolAliases.execute, {
164
+ icon: ThemeIcon.fromId(Codicon.terminal.id),
165
+ description: ( localize(5794, "Execute code and applications on your machine"))
166
+ })
167
+ );
168
+ this.readToolSet = this._register(
169
+ this.createToolSet(ToolDataSource.Internal, "read", SpecedToolAliases.read, {
170
+ icon: ThemeIcon.fromId(Codicon.book.id),
171
+ description: ( localize(5795, "Read files in your workspace"))
172
+ })
173
+ );
174
+ this.agentToolSet = this._register(
175
+ this.createToolSet(ToolDataSource.Internal, "agent", SpecedToolAliases.agent, {
176
+ icon: ThemeIcon.fromId(Codicon.agent.id),
177
+ description: ( localize(5796, "Delegate tasks to other agents"))
178
+ })
179
+ );
140
180
  }
141
181
  isPermitted(toolOrToolSet, reader) {
142
182
  const agentModeEnabled = this._isAgentModeEnabled.read(reader);
@@ -144,40 +184,71 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
144
184
  return true;
145
185
  }
146
186
  const permittedInternalToolSetIds = [SpecedToolAliases.read, SpecedToolAliases.search, SpecedToolAliases.web];
147
- if (toolOrToolSet instanceof ToolSet) {
148
- const permitted = toolOrToolSet.source.type === 'internal' && permittedInternalToolSetIds.includes(toolOrToolSet.referenceName);
149
- this._logService.trace(`LanguageModelToolsService#isPermitted: ToolSet ${toolOrToolSet.id} (${toolOrToolSet.referenceName}) permitted=${permitted}`);
187
+ if (isToolSet(toolOrToolSet)) {
188
+ const permitted = toolOrToolSet.source.type === "internal" && permittedInternalToolSetIds.includes(toolOrToolSet.referenceName);
189
+ this._logService.trace(
190
+ `LanguageModelToolsService#isPermitted: ToolSet ${toolOrToolSet.id} (${toolOrToolSet.referenceName}) permitted=${permitted}`
191
+ );
150
192
  return permitted;
151
193
  }
152
- this._logService.trace(`LanguageModelToolsService#isPermitted: Tool ${toolOrToolSet.id} (${toolOrToolSet.toolReferenceName}) permitted=false`);
194
+ for (const toolSet of this._toolSets) {
195
+ if (toolSet.source.type === "internal" && permittedInternalToolSetIds.includes(toolSet.referenceName)) {
196
+ for (const memberTool of toolSet.getTools()) {
197
+ if (memberTool.id === toolOrToolSet.id) {
198
+ this._logService.trace(
199
+ `LanguageModelToolsService#isPermitted: Tool ${toolOrToolSet.id} (${toolOrToolSet.toolReferenceName}) permitted=true (member of ${toolSet.referenceName})`
200
+ );
201
+ return true;
202
+ }
203
+ }
204
+ }
205
+ }
206
+ if (toolOrToolSet.id === "vscode_fetchWebPage_internal" && permittedInternalToolSetIds.includes(SpecedToolAliases.web)) {
207
+ this._logService.trace(
208
+ `LanguageModelToolsService#isPermitted: Tool ${toolOrToolSet.id} (${toolOrToolSet.toolReferenceName}) permitted=true (special case)`
209
+ );
210
+ return true;
211
+ }
212
+ this._logService.trace(
213
+ `LanguageModelToolsService#isPermitted: Tool ${toolOrToolSet.id} (${toolOrToolSet.toolReferenceName}) permitted=false`
214
+ );
153
215
  return false;
154
216
  }
155
217
  dispose() {
156
218
  super.dispose();
157
219
  this._callsByRequestId.forEach(calls => calls.forEach(call => call.store.dispose()));
220
+ this._pendingToolCalls.clear();
158
221
  this._ctxToolsCount.reset();
159
222
  }
160
223
  registerToolData(toolData) {
161
224
  if (( this._tools.has(toolData.id))) {
162
225
  throw ( new Error(`Tool "${toolData.id}" is already registered.`));
163
226
  }
164
- this._tools.set(toolData.id, { data: toolData });
227
+ this._tools.set(toolData.id, {
228
+ data: toolData
229
+ });
165
230
  this._ctxToolsCount.set(this._tools.size);
166
- this._onDidChangeToolsScheduler.schedule();
231
+ if (!this._onDidChangeToolsScheduler.isScheduled()) {
232
+ this._onDidChangeToolsScheduler.schedule();
233
+ }
167
234
  toolData.when?.keys().forEach(key => this._toolContextKeys.add(key));
168
235
  let store;
169
236
  if (toolData.inputSchema) {
170
237
  store = ( new DisposableStore());
171
238
  const schemaUrl = ( createToolSchemaUri(toolData.id).toString());
172
239
  jsonSchemaRegistry.registerSchema(schemaUrl, toolData.inputSchema, store);
173
- store.add(jsonSchemaRegistry.registerSchemaAssociation(schemaUrl, `/lm/tool/${toolData.id}/tool_input.json`));
240
+ store.add(
241
+ jsonSchemaRegistry.registerSchemaAssociation(schemaUrl, `/lm/tool/${toolData.id}/tool_input.json`)
242
+ );
174
243
  }
175
244
  return toDisposable(() => {
176
245
  store?.dispose();
177
246
  this._tools.delete(toolData.id);
178
247
  this._ctxToolsCount.set(this._tools.size);
179
248
  this._refreshAllToolContextKeys();
180
- this._onDidChangeToolsScheduler.schedule();
249
+ if (!this._onDidChangeToolsScheduler.isScheduled()) {
250
+ this._onDidChangeToolsScheduler.schedule();
251
+ }
181
252
  });
182
253
  }
183
254
  flushToolUpdates() {
@@ -203,32 +274,50 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
203
274
  });
204
275
  }
205
276
  registerTool(toolData, tool) {
206
- return combinedDisposable(this.registerToolData(toolData), this.registerToolImplementation(toolData.id, tool));
277
+ return combinedDisposable(
278
+ this.registerToolData(toolData),
279
+ this.registerToolImplementation(toolData.id, tool)
280
+ );
207
281
  }
208
- getTools(includeDisabled) {
282
+ getTools(model) {
209
283
  const toolDatas = ( Iterable.map(( this._tools.values()), i => i.data));
210
284
  const extensionToolsEnabled = this._configurationService.getValue(ChatConfiguration.ExtensionToolsEnabled);
211
285
  return Iterable.filter(toolDatas, toolData => {
212
- const satisfiesWhenClause = includeDisabled || !toolData.when || this._contextKeyService.contextMatchesRules(toolData.when);
213
- const satisfiesExternalToolCheck = toolData.source.type !== 'extension' || !!extensionToolsEnabled;
214
- const satisfiesPermittedCheck = includeDisabled || this.isPermitted(toolData);
215
- return satisfiesWhenClause && satisfiesExternalToolCheck && satisfiesPermittedCheck;
286
+ const satisfiesWhenClause = !toolData.when || this._contextKeyService.contextMatchesRules(toolData.when);
287
+ const satisfiesExternalToolCheck = toolData.source.type !== "extension" || !!extensionToolsEnabled;
288
+ const satisfiesPermittedCheck = this.isPermitted(toolData);
289
+ const satisfiesModelFilter = toolMatchesModel(toolData, model);
290
+ return satisfiesWhenClause && satisfiesExternalToolCheck && satisfiesPermittedCheck && satisfiesModelFilter;
216
291
  });
217
292
  }
218
- getTool(id) {
219
- return this._getToolEntry(id)?.data;
293
+ observeTools(model) {
294
+ const meta = derived(reader => {
295
+ const signal = observableSignal("observeToolsContext");
296
+ const trigger = () => transaction(tx => signal.trigger(tx));
297
+ reader.store.add(this.onDidChangeTools(trigger));
298
+ return signal;
299
+ });
300
+ return derivedOpts({
301
+ equalsFn: arrayEqualsC()
302
+ }, reader => {
303
+ meta.read(reader).read(reader);
304
+ return Array.from(this.getTools(model));
305
+ });
220
306
  }
221
- _getToolEntry(id) {
222
- const entry = this._tools.get(id);
223
- if (entry && (!entry.data.when || this._contextKeyService.contextMatchesRules(entry.data.when))) {
224
- return entry;
225
- }
226
- else {
227
- return undefined;
228
- }
307
+ getAllToolsIncludingDisabled() {
308
+ const toolDatas = ( Iterable.map(( this._tools.values()), i => i.data));
309
+ const extensionToolsEnabled = this._configurationService.getValue(ChatConfiguration.ExtensionToolsEnabled);
310
+ return Iterable.filter(toolDatas, toolData => {
311
+ const satisfiesExternalToolCheck = toolData.source.type !== "extension" || !!extensionToolsEnabled;
312
+ const satisfiesPermittedCheck = this.isPermitted(toolData);
313
+ return satisfiesExternalToolCheck && satisfiesPermittedCheck;
314
+ });
229
315
  }
230
- getToolByName(name, includeDisabled) {
231
- for (const tool of this.getTools(!!includeDisabled)) {
316
+ getTool(id) {
317
+ return this._tools.get(id)?.data;
318
+ }
319
+ getToolByName(name) {
320
+ for (const tool of this.getAllToolsIncludingDisabled()) {
232
321
  if (tool.toolReferenceName === name) {
233
322
  return tool;
234
323
  }
@@ -236,7 +325,15 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
236
325
  return undefined;
237
326
  }
238
327
  async invokeTool(dto, countTokens, token) {
239
- this._logService.trace(`[LanguageModelToolsService#invokeTool] Invoking tool ${dto.toolId} with parameters ${JSON.stringify(dto.parameters)}`);
328
+ this._logService.trace(
329
+ `[LanguageModelToolsService#invokeTool] Invoking tool ${dto.toolId} with parameters ${JSON.stringify(dto.parameters)}`
330
+ );
331
+ this._onDidInvokeTool.fire({
332
+ toolId: dto.toolId,
333
+ sessionResource: dto.context?.sessionResource,
334
+ requestId: dto.chatRequestId,
335
+ subagentInvocationId: dto.subAgentInvocationId
336
+ });
240
337
  let tool = this._tools.get(dto.toolId);
241
338
  if (!tool) {
242
339
  throw ( new Error(`Tool ${dto.toolId} was not contributed`));
@@ -248,7 +345,19 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
248
345
  throw ( new Error(`Tool ${dto.toolId} does not have an implementation registered.`));
249
346
  }
250
347
  }
348
+ let pendingToolCallKey;
251
349
  let toolInvocation;
350
+ if (( this._pendingToolCalls.has(dto.callId))) {
351
+ pendingToolCallKey = dto.callId;
352
+ toolInvocation = this._pendingToolCalls.get(dto.callId);
353
+ } else if (dto.chatStreamToolCallId && ( this._pendingToolCalls.has(dto.chatStreamToolCallId))) {
354
+ pendingToolCallKey = dto.chatStreamToolCallId;
355
+ toolInvocation = this._pendingToolCalls.get(dto.chatStreamToolCallId);
356
+ }
357
+ const hadPendingInvocation = !!toolInvocation;
358
+ if (hadPendingInvocation && pendingToolCallKey) {
359
+ this._pendingToolCalls.delete(pendingToolCallKey);
360
+ }
252
361
  let requestId;
253
362
  let store;
254
363
  let toolResult;
@@ -265,40 +374,57 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
265
374
  const request = model.getRequests().at(-1);
266
375
  requestId = request.id;
267
376
  dto.modelId = request.modelId;
268
- dto.userSelectedTools = request.userSelectedTools && { ...request.userSelectedTools };
377
+ dto.userSelectedTools = request.userSelectedTools && {
378
+ ...request.userSelectedTools
379
+ };
269
380
  if (!( this._callsByRequestId.has(requestId))) {
270
381
  this._callsByRequestId.set(requestId, []);
271
382
  }
272
- const trackedCall = { store };
383
+ const trackedCall = {
384
+ store
385
+ };
273
386
  this._callsByRequestId.get(requestId).push(trackedCall);
274
387
  const source = ( new CancellationTokenSource());
275
388
  store.add(toDisposable(() => {
276
389
  source.dispose(true);
277
390
  }));
278
391
  store.add(token.onCancellationRequested(() => {
279
- IChatToolInvocation.confirmWith(toolInvocation, { type: ToolConfirmKind.Denied });
392
+ IChatToolInvocation.confirmWith(toolInvocation, {
393
+ type: ToolConfirmKind.Denied
394
+ });
280
395
  source.cancel();
281
396
  }));
282
397
  store.add(source.token.onCancellationRequested(() => {
283
- IChatToolInvocation.confirmWith(toolInvocation, { type: ToolConfirmKind.Denied });
398
+ IChatToolInvocation.confirmWith(toolInvocation, {
399
+ type: ToolConfirmKind.Denied
400
+ });
284
401
  }));
285
402
  token = source.token;
286
403
  prepareTimeWatch = StopWatch.create(true);
287
404
  preparedInvocation = await this.prepareToolInvocation(tool, dto, token);
288
405
  prepareTimeWatch.stop();
289
- toolInvocation = ( new ChatToolInvocation(
290
- preparedInvocation,
291
- tool.data,
292
- dto.callId,
293
- dto.fromSubAgent,
294
- dto.parameters
295
- ));
296
- trackedCall.invocation = toolInvocation;
297
- const autoConfirmed = await this.shouldAutoConfirm(tool.data.id, tool.data.runsInWorkspace, tool.data.source, dto.parameters);
298
- if (autoConfirmed) {
299
- IChatToolInvocation.confirmWith(toolInvocation, autoConfirmed);
300
- }
301
- this._chatService.appendProgress(request, toolInvocation);
406
+ const autoConfirmed = await this.shouldAutoConfirm(
407
+ tool.data.id,
408
+ tool.data.runsInWorkspace,
409
+ tool.data.source,
410
+ dto.parameters,
411
+ dto.context?.sessionResource
412
+ );
413
+ if (hadPendingInvocation && toolInvocation) {
414
+ toolInvocation.transitionFromStreaming(preparedInvocation, dto.parameters, autoConfirmed);
415
+ } else {
416
+ toolInvocation = ( new ChatToolInvocation(
417
+ preparedInvocation,
418
+ tool.data,
419
+ dto.callId,
420
+ dto.subAgentInvocationId,
421
+ dto.parameters
422
+ ));
423
+ if (autoConfirmed) {
424
+ IChatToolInvocation.confirmWith(toolInvocation, autoConfirmed);
425
+ }
426
+ this._chatService.appendProgress(request, toolInvocation);
427
+ }
302
428
  dto.toolSpecificData = toolInvocation?.toolSpecificData;
303
429
  if (preparedInvocation?.confirmationMessages?.title) {
304
430
  if (!IChatToolInvocation.executionConfirmedOrDenied(toolInvocation) && !autoConfirmed) {
@@ -311,24 +437,32 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
311
437
  if (userConfirmed.type === ToolConfirmKind.Skipped) {
312
438
  toolResult = {
313
439
  content: [{
314
- kind: 'text',
315
- value: 'The user chose to skip the tool call, they want to proceed without running it'
316
- }]
440
+ kind: "text",
441
+ value: "The user chose to skip the tool call, they want to proceed without running it"
442
+ }]
317
443
  };
318
444
  return toolResult;
319
445
  }
320
- if (dto.toolSpecificData?.kind === 'input') {
446
+ if (dto.toolSpecificData?.kind === "input") {
321
447
  dto.parameters = dto.toolSpecificData.rawInput;
322
448
  dto.toolSpecificData = undefined;
323
449
  }
324
450
  }
325
- }
326
- else {
451
+ } else {
327
452
  prepareTimeWatch = StopWatch.create(true);
328
453
  preparedInvocation = await this.prepareToolInvocation(tool, dto, token);
329
454
  prepareTimeWatch.stop();
330
- if (preparedInvocation?.confirmationMessages?.title && !(await this.shouldAutoConfirm(tool.data.id, tool.data.runsInWorkspace, tool.data.source, dto.parameters))) {
331
- const result = await this._dialogService.confirm({ message: renderAsPlaintext(preparedInvocation.confirmationMessages.title), detail: renderAsPlaintext(preparedInvocation.confirmationMessages.message) });
455
+ if (preparedInvocation?.confirmationMessages?.title && !(await this.shouldAutoConfirm(
456
+ tool.data.id,
457
+ tool.data.runsInWorkspace,
458
+ tool.data.source,
459
+ dto.parameters,
460
+ undefined
461
+ ))) {
462
+ const result = await this._dialogService.confirm({
463
+ message: renderAsPlaintext(preparedInvocation.confirmationMessages.title),
464
+ detail: renderAsPlaintext(preparedInvocation.confirmationMessages.message)
465
+ });
332
466
  if (!result.confirmed) {
333
467
  throw ( new CancellationError());
334
468
  }
@@ -347,7 +481,13 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
347
481
  invocationTimeWatch.stop();
348
482
  this.ensureToolDetails(dto, toolResult, tool.data);
349
483
  if (toolInvocation?.didExecuteTool(toolResult).type === IChatToolInvocation.StateKind.WaitingForPostApproval) {
350
- const autoConfirmedPost = await this.shouldAutoConfirmPostExecution(tool.data.id, tool.data.runsInWorkspace, tool.data.source, dto.parameters);
484
+ const autoConfirmedPost = await this.shouldAutoConfirmPostExecution(
485
+ tool.data.id,
486
+ tool.data.runsInWorkspace,
487
+ tool.data.source,
488
+ dto.parameters,
489
+ dto.context?.sessionResource
490
+ );
351
491
  if (autoConfirmedPost) {
352
492
  IChatToolInvocation.confirmWith(toolInvocation, autoConfirmedPost);
353
493
  }
@@ -358,43 +498,55 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
358
498
  if (postConfirm.type === ToolConfirmKind.Skipped) {
359
499
  toolResult = {
360
500
  content: [{
361
- kind: 'text',
362
- value: 'The tool executed but the user chose not to share the results'
363
- }]
501
+ kind: "text",
502
+ value: "The tool executed but the user chose not to share the results"
503
+ }]
364
504
  };
365
505
  }
366
506
  }
367
- this._telemetryService.publicLog2('languageModelToolInvoked', {
368
- result: 'success',
369
- chatSessionId: dto.context?.sessionId,
507
+ this._telemetryService.publicLog2("languageModelToolInvoked", {
508
+ result: "success",
509
+ chatSessionId: dto.context?.sessionResource ? chatSessionResourceToId(dto.context.sessionResource) : undefined,
370
510
  toolId: tool.data.id,
371
- toolExtensionId: tool.data.source.type === 'extension' ? tool.data.source.extensionId.value : undefined,
511
+ toolExtensionId: tool.data.source.type === "extension" ? tool.data.source.extensionId.value : undefined,
372
512
  toolSourceKind: tool.data.source.type,
373
513
  prepareTimeMs: prepareTimeWatch?.elapsed(),
374
- invocationTimeMs: invocationTimeWatch?.elapsed(),
514
+ invocationTimeMs: invocationTimeWatch?.elapsed()
375
515
  });
376
516
  return toolResult;
377
- }
378
- catch (err) {
379
- const result = isCancellationError(err) ? 'userCancelled' : 'error';
380
- this._telemetryService.publicLog2('languageModelToolInvoked', {
517
+ } catch (err) {
518
+ const result = isCancellationError(err) ? "userCancelled" : "error";
519
+ this._telemetryService.publicLog2("languageModelToolInvoked", {
381
520
  result,
382
521
  chatSessionId: dto.context?.sessionId,
383
522
  toolId: tool.data.id,
384
- toolExtensionId: tool.data.source.type === 'extension' ? tool.data.source.extensionId.value : undefined,
523
+ toolExtensionId: tool.data.source.type === "extension" ? tool.data.source.extensionId.value : undefined,
385
524
  toolSourceKind: tool.data.source.type,
386
525
  prepareTimeMs: prepareTimeWatch?.elapsed(),
387
- invocationTimeMs: invocationTimeWatch?.elapsed(),
526
+ invocationTimeMs: invocationTimeWatch?.elapsed()
388
527
  });
389
- this._logService.error(`[LanguageModelToolsService#invokeTool] Error from tool ${dto.toolId} with parameters ${JSON.stringify(dto.parameters)}:\n${toErrorMessage(err, true)}`);
390
- toolResult ??= { content: [] };
528
+ if (!isCancellationError(err)) {
529
+ this._logService.error(
530
+ `[LanguageModelToolsService#invokeTool] Error from tool ${dto.toolId} with parameters ${JSON.stringify(dto.parameters)}:\n${toErrorMessage(err, true)}`
531
+ );
532
+ }
533
+ toolResult ??= {
534
+ content: []
535
+ };
391
536
  toolResult.toolResultError = err instanceof Error ? err.message : String(err);
392
537
  if (tool.data.alwaysDisplayInputOutput) {
393
- toolResult.toolResultDetails = { input: this.formatToolInput(dto), output: [{ type: 'embed', isText: true, value: String(err) }], isError: true };
538
+ toolResult.toolResultDetails = {
539
+ input: this.formatToolInput(dto),
540
+ output: [{
541
+ type: "embed",
542
+ isText: true,
543
+ value: String(err)
544
+ }],
545
+ isError: true
546
+ };
394
547
  }
395
548
  throw err;
396
- }
397
- finally {
549
+ } finally {
398
550
  toolInvocation?.didExecuteTool(toolResult, true);
399
551
  if (store) {
400
552
  this.cleanupCallDisposables(requestId, store);
@@ -408,15 +560,13 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
408
560
  parameters: dto.parameters,
409
561
  chatRequestId: dto.chatRequestId,
410
562
  chatSessionId: dto.context?.sessionId,
563
+ chatSessionResource: dto.context?.sessionResource,
411
564
  chatInteractionId: dto.chatInteractionId
412
565
  }, token);
413
- const raceResult = await Promise.race([
414
- timeout(3000, token).then(() => 'timeout'),
415
- preparePromise
416
- ]);
417
- if (raceResult === 'timeout') {
566
+ const raceResult = await Promise.race([timeout(3000, token).then(() => "timeout"), preparePromise]);
567
+ if (raceResult === "timeout" && dto.context) {
418
568
  this._onDidPrepareToolCallBecomeUnresponsive.fire({
419
- sessionId: dto.context?.sessionId ?? '',
569
+ sessionResource: dto.context.sessionResource,
420
570
  toolData: tool.data
421
571
  });
422
572
  }
@@ -430,38 +580,115 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
430
580
  const fullReferenceName = getToolFullReferenceName(tool.data);
431
581
  prepared.confirmationMessages = {
432
582
  ...prepared.confirmationMessages,
433
- title: ( localize(5578, 'Confirm tool execution')),
434
- message: ( localize(5579, 'Run the \'{0}\' tool?', fullReferenceName)),
583
+ title: ( localize(5797, "Confirm tool execution")),
584
+ message: ( localize(5798, "Run the '{0}' tool?", fullReferenceName)),
435
585
  disclaimer: ( new MarkdownString(( localize(
436
- 5580,
437
- 'Auto approval for \'{0}\' is restricted via {1}.',
586
+ 5799,
587
+ "Auto approval for '{0}' is restricted via {1}.",
438
588
  getToolFullReferenceName(tool.data),
439
- createMarkdownCommandLink({ title: '`' + ChatConfiguration.EligibleForAutoApproval + '`', id: 'workbench.action.openSettings', arguments: [ChatConfiguration.EligibleForAutoApproval] }, false)
440
- )), { isTrusted: true })),
441
- allowAutoConfirm: false,
589
+ createMarkdownCommandLink({
590
+ title: "`" + ChatConfiguration.EligibleForAutoApproval + "`",
591
+ id: "workbench.action.openSettings",
592
+ arguments: [ChatConfiguration.EligibleForAutoApproval]
593
+ }, false)
594
+ )), {
595
+ isTrusted: true
596
+ })),
597
+ allowAutoConfirm: false
442
598
  };
443
599
  }
444
600
  if (!isEligibleForAutoApproval && prepared?.confirmationMessages?.title) {
445
601
  prepared.confirmationMessages.disclaimer = ( new MarkdownString(( localize(
446
- 5580,
447
- 'Auto approval for \'{0}\' is restricted via {1}.',
602
+ 5799,
603
+ "Auto approval for '{0}' is restricted via {1}.",
448
604
  getToolFullReferenceName(tool.data),
449
- createMarkdownCommandLink({ title: '`' + ChatConfiguration.EligibleForAutoApproval + '`', id: 'workbench.action.openSettings', arguments: [ChatConfiguration.EligibleForAutoApproval] }, false)
450
- )), { isTrusted: true }));
605
+ createMarkdownCommandLink({
606
+ title: "`" + ChatConfiguration.EligibleForAutoApproval + "`",
607
+ id: "workbench.action.openSettings",
608
+ arguments: [ChatConfiguration.EligibleForAutoApproval]
609
+ }, false)
610
+ )), {
611
+ isTrusted: true
612
+ }));
451
613
  }
452
614
  if (prepared?.confirmationMessages?.title) {
453
- if (prepared.toolSpecificData?.kind !== 'terminal' && prepared.confirmationMessages.allowAutoConfirm !== false) {
615
+ if (prepared.toolSpecificData?.kind !== "terminal" && prepared.confirmationMessages.allowAutoConfirm !== false) {
454
616
  prepared.confirmationMessages.allowAutoConfirm = isEligibleForAutoApproval;
455
617
  }
456
618
  if (!prepared.toolSpecificData && tool.data.alwaysDisplayInputOutput) {
457
619
  prepared.toolSpecificData = {
458
- kind: 'input',
459
- rawInput: dto.parameters,
620
+ kind: "input",
621
+ rawInput: dto.parameters
460
622
  };
461
623
  }
462
624
  }
463
625
  return prepared;
464
626
  }
627
+ beginToolCall(options) {
628
+ const toolEntry = this._tools.get(options.toolId);
629
+ if (!toolEntry) {
630
+ return undefined;
631
+ }
632
+ if (!toolEntry.impl?.handleToolStream) {
633
+ return undefined;
634
+ }
635
+ const invocation = ChatToolInvocation.createStreaming({
636
+ toolCallId: options.toolCallId,
637
+ toolId: options.toolId,
638
+ toolData: toolEntry.data,
639
+ subagentInvocationId: options.subagentInvocationId,
640
+ chatRequestId: options.chatRequestId
641
+ });
642
+ this._pendingToolCalls.set(options.toolCallId, invocation);
643
+ if (options.sessionResource) {
644
+ const model = this._chatService.getSession(options.sessionResource);
645
+ if (model) {
646
+ const request = (options.chatRequestId ? model.getRequests().find(r => r.id === options.chatRequestId) : undefined) ?? model.getRequests().at(-1);
647
+ if (request) {
648
+ this._chatService.appendProgress(request, invocation);
649
+ }
650
+ }
651
+ }
652
+ this._callHandleToolStream(
653
+ toolEntry,
654
+ invocation,
655
+ options.toolCallId,
656
+ undefined,
657
+ CancellationToken.None
658
+ );
659
+ return invocation;
660
+ }
661
+ async _callHandleToolStream(toolEntry, invocation, toolCallId, rawInput, token) {
662
+ if (!toolEntry.impl?.handleToolStream) {
663
+ return;
664
+ }
665
+ try {
666
+ const result = await toolEntry.impl.handleToolStream({
667
+ toolCallId,
668
+ rawInput,
669
+ chatRequestId: invocation.chatRequestId
670
+ }, token);
671
+ if (result?.invocationMessage) {
672
+ invocation.updateStreamingMessage(result.invocationMessage);
673
+ }
674
+ } catch (error) {
675
+ this._logService.error(
676
+ `[LanguageModelToolsService#_callHandleToolStream] Error calling handleToolStream for tool ${toolEntry.data.id}:`,
677
+ error
678
+ );
679
+ }
680
+ }
681
+ async updateToolStream(toolCallId, partialInput, token) {
682
+ const invocation = this._pendingToolCalls.get(toolCallId);
683
+ if (!invocation) {
684
+ return;
685
+ }
686
+ invocation.updatePartialInput(partialInput);
687
+ const toolEntry = this._tools.get(invocation.toolId);
688
+ if (toolEntry) {
689
+ await this._callHandleToolStream(toolEntry, invocation, toolCallId, partialInput, token);
690
+ }
691
+ }
465
692
  playAccessibilitySignal(toolInvocations) {
466
693
  const autoApproved = this._configurationService.getValue(ChatConfiguration.GlobalAutoApprove);
467
694
  if (autoApproved) {
@@ -471,17 +698,21 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
471
698
  if (!setting) {
472
699
  return;
473
700
  }
474
- const soundEnabled = setting.sound === 'on' || (setting.sound === 'auto' && (this._accessibilityService.isScreenReaderOptimized()));
475
- const announcementEnabled = this._accessibilityService.isScreenReaderOptimized() && setting.announcement === 'auto';
701
+ const soundEnabled = setting.sound === "on" || (setting.sound === "auto" && (this._accessibilityService.isScreenReaderOptimized()));
702
+ const announcementEnabled = this._accessibilityService.isScreenReaderOptimized() && setting.announcement === "auto";
476
703
  if (soundEnabled || announcementEnabled) {
477
- this._accessibilitySignalService.playSignal(AccessibilitySignal.chatUserActionRequired, { customAlertMessage: this._instantiationService.invokeFunction(getToolConfirmationAlert, toolInvocations), userGesture: true, modality: !soundEnabled ? 'announcement' : undefined });
704
+ this._accessibilitySignalService.playSignal(AccessibilitySignal.chatUserActionRequired, {
705
+ customAlertMessage: this._instantiationService.invokeFunction(getToolConfirmationAlert, toolInvocations),
706
+ userGesture: true,
707
+ modality: !soundEnabled ? "announcement" : undefined
708
+ });
478
709
  }
479
710
  }
480
711
  ensureToolDetails(dto, toolResult, toolData) {
481
712
  if (!toolResult.toolResultDetails && toolData.alwaysDisplayInputOutput) {
482
713
  toolResult.toolResultDetails = {
483
714
  input: this.formatToolInput(dto),
484
- output: this.toolResultToIO(toolResult),
715
+ output: this.toolResultToIO(toolResult)
485
716
  };
486
717
  }
487
718
  }
@@ -490,33 +721,42 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
490
721
  }
491
722
  toolResultToIO(toolResult) {
492
723
  return ( toolResult.content.map(part => {
493
- if (part.kind === 'text') {
494
- return { type: 'embed', isText: true, value: part.value };
495
- }
496
- else if (part.kind === 'promptTsx') {
497
- return { type: 'embed', isText: true, value: stringifyPromptTsxPart(part) };
498
- }
499
- else if (part.kind === 'data') {
500
- return { type: 'embed', value: encodeBase64(part.value.data), mimeType: part.value.mimeType };
501
- }
502
- else {
724
+ if (part.kind === "text") {
725
+ return {
726
+ type: "embed",
727
+ isText: true,
728
+ value: part.value
729
+ };
730
+ } else if (part.kind === "promptTsx") {
731
+ return {
732
+ type: "embed",
733
+ isText: true,
734
+ value: stringifyPromptTsxPart(part)
735
+ };
736
+ } else if (part.kind === "data") {
737
+ return {
738
+ type: "embed",
739
+ value: encodeBase64(part.value.data),
740
+ mimeType: part.value.mimeType
741
+ };
742
+ } else {
503
743
  assertNever();
504
744
  }
505
745
  }));
506
746
  }
507
747
  getEligibleForAutoApprovalSpecialCase(toolData) {
508
- if (toolData.id === 'vscode_fetchWebPage_internal') {
509
- return 'fetch';
748
+ if (toolData.id === "vscode_fetchWebPage_internal") {
749
+ return "fetch";
510
750
  }
511
751
  return undefined;
512
752
  }
513
753
  isToolEligibleForAutoApproval(toolData) {
514
754
  const fullReferenceName = this.getEligibleForAutoApprovalSpecialCase(toolData) ?? getToolFullReferenceName(toolData);
515
- if (toolData.id === 'copilot_fetchWebPage') {
755
+ if (toolData.id === "copilot_fetchWebPage") {
516
756
  return true;
517
757
  }
518
758
  const eligibilityConfig = this._configurationService.getValue(ChatConfiguration.EligibleForAutoApproval);
519
- if (eligibilityConfig && typeof eligibilityConfig === 'object' && fullReferenceName) {
759
+ if (eligibilityConfig && typeof eligibilityConfig === "object" && fullReferenceName) {
520
760
  if (Object.prototype.hasOwnProperty.call(eligibilityConfig, fullReferenceName)) {
521
761
  return eligibilityConfig[fullReferenceName];
522
762
  }
@@ -525,8 +765,8 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
525
765
  if (Object.prototype.hasOwnProperty.call(eligibilityConfig, legacyName)) {
526
766
  return eligibilityConfig[legacyName];
527
767
  }
528
- if (legacyName.includes('/')) {
529
- const trimmedLegacyName = legacyName.split('/').pop();
768
+ if (legacyName.includes("/")) {
769
+ const trimmedLegacyName = legacyName.split("/").pop();
530
770
  if (trimmedLegacyName && Object.prototype.hasOwnProperty.call(eligibilityConfig, trimmedLegacyName)) {
531
771
  return eligibilityConfig[trimmedLegacyName];
532
772
  }
@@ -536,7 +776,7 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
536
776
  }
537
777
  return true;
538
778
  }
539
- async shouldAutoConfirm(toolId, runsInWorkspace, source, parameters) {
779
+ async shouldAutoConfirm(toolId, runsInWorkspace, source, parameters, chatSessionResource) {
540
780
  const tool = this._tools.get(toolId);
541
781
  if (!tool) {
542
782
  return undefined;
@@ -544,34 +784,54 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
544
784
  if (!this.isToolEligibleForAutoApproval(tool.data)) {
545
785
  return undefined;
546
786
  }
547
- const reason = this._confirmationService.getPreConfirmAction({ toolId, source, parameters });
787
+ const reason = this._confirmationService.getPreConfirmAction({
788
+ toolId,
789
+ source,
790
+ parameters,
791
+ chatSessionResource
792
+ });
548
793
  if (reason) {
549
794
  return reason;
550
795
  }
551
796
  const config = this._configurationService.inspect(ChatConfiguration.GlobalAutoApprove);
552
797
  let value = config.value ?? config.defaultValue;
553
- if (typeof runsInWorkspace === 'boolean') {
798
+ if (typeof runsInWorkspace === "boolean") {
554
799
  value = config.userLocalValue ?? config.applicationValue;
555
800
  if (runsInWorkspace) {
556
801
  value = config.workspaceValue ?? config.workspaceFolderValue ?? config.userRemoteValue ?? value;
557
802
  }
558
803
  }
559
- const autoConfirm = value === true || (typeof value === 'object' && value.hasOwnProperty(toolId) && value[toolId] === true);
804
+ const autoConfirm = value === true || (typeof value === "object" && value.hasOwnProperty(toolId) && value[toolId] === true);
560
805
  if (autoConfirm) {
561
806
  if (await this._checkGlobalAutoApprove()) {
562
- return { type: ToolConfirmKind.Setting, id: ChatConfiguration.GlobalAutoApprove };
807
+ return {
808
+ type: ToolConfirmKind.Setting,
809
+ id: ChatConfiguration.GlobalAutoApprove
810
+ };
563
811
  }
564
812
  }
565
813
  return undefined;
566
814
  }
567
- async shouldAutoConfirmPostExecution(toolId, runsInWorkspace, source, parameters) {
815
+ async shouldAutoConfirmPostExecution(toolId, runsInWorkspace, source, parameters, chatSessionResource) {
568
816
  if (this._configurationService.getValue(ChatConfiguration.GlobalAutoApprove) && (await this._checkGlobalAutoApprove())) {
569
- return { type: ToolConfirmKind.Setting, id: ChatConfiguration.GlobalAutoApprove };
817
+ return {
818
+ type: ToolConfirmKind.Setting,
819
+ id: ChatConfiguration.GlobalAutoApprove
820
+ };
570
821
  }
571
- return this._confirmationService.getPostConfirmAction({ toolId, source, parameters });
822
+ return this._confirmationService.getPostConfirmAction({
823
+ toolId,
824
+ source,
825
+ parameters,
826
+ chatSessionResource
827
+ });
572
828
  }
573
829
  async _checkGlobalAutoApprove() {
574
- const optedIn = this._storageService.getBoolean(AutoApproveStorageKeys.GlobalAutoApproveOptIn, StorageScope.APPLICATION, false);
830
+ const optedIn = this._storageService.getBoolean(
831
+ AutoApproveStorageKeys.GlobalAutoApproveOptIn,
832
+ StorageScope.APPLICATION,
833
+ false
834
+ );
575
835
  if (optedIn) {
576
836
  return true;
577
837
  }
@@ -580,30 +840,32 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
580
840
  }
581
841
  const promptResult = await this._dialogService.prompt({
582
842
  type: Severity.Warning,
583
- message: ( localize(5581, 'Enable global auto approve?')),
584
- buttons: [
585
- {
586
- label: ( localize(5582, 'Enable')),
587
- run: () => true
588
- },
589
- {
590
- label: ( localize(5583, 'Disable')),
591
- run: () => false
592
- },
593
- ],
843
+ message: ( localize(5800, "Enable global auto approve?")),
844
+ buttons: [{
845
+ label: ( localize(5801, "Enable")),
846
+ run: () => true
847
+ }, {
848
+ label: ( localize(5802, "Disable")),
849
+ run: () => false
850
+ }],
594
851
  custom: {
595
852
  icon: Codicon.warning,
596
853
  disableCloseAction: true,
597
854
  markdownDetails: [{
598
- markdown: ( new MarkdownString(globalAutoApproveDescription.value)),
599
- }],
855
+ markdown: ( new MarkdownString(globalAutoApproveDescription.value))
856
+ }]
600
857
  }
601
858
  });
602
859
  if (promptResult.result !== true) {
603
860
  await this._configurationService.updateValue(ChatConfiguration.GlobalAutoApprove, false);
604
861
  return false;
605
862
  }
606
- this._storageService.store(AutoApproveStorageKeys.GlobalAutoApproveOptIn, true, StorageScope.APPLICATION, StorageTarget.USER);
863
+ this._storageService.store(
864
+ AutoApproveStorageKeys.GlobalAutoApproveOptIn,
865
+ true,
866
+ StorageScope.APPLICATION,
867
+ StorageTarget.USER
868
+ );
607
869
  return true;
608
870
  }
609
871
  cleanupCallDisposables(requestId, store) {
@@ -627,9 +889,22 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
627
889
  calls.forEach(call => call.store.dispose());
628
890
  this._callsByRequestId.delete(requestId);
629
891
  }
892
+ for (const [toolCallId, invocation] of this._pendingToolCalls) {
893
+ if (invocation.chatRequestId === requestId) {
894
+ this._pendingToolCalls.delete(toolCallId);
895
+ }
896
+ }
897
+ }
898
+ static {
899
+ this.githubMCPServerAliases = [
900
+ "github/github-mcp-server",
901
+ "io.github.github/github-mcp-server",
902
+ "github-mcp-server"
903
+ ];
904
+ }
905
+ static {
906
+ this.playwrightMCPServerAliases = ["microsoft/playwright-mcp", "com.microsoft/playwright-mcp"];
630
907
  }
631
- static { this.githubMCPServerAliases = ['github/github-mcp-server', 'io.github.github/github-mcp-server', 'github-mcp-server']; }
632
- static { this.playwrightMCPServerAliases = ['microsoft/playwright-mcp', 'com.microsoft/playwright-mcp']; }
633
908
  *getToolSetAliases(toolSet, fullReferenceName) {
634
909
  if (fullReferenceName !== toolSet.referenceName) {
635
910
  yield toolSet.referenceName;
@@ -638,23 +913,25 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
638
913
  yield* toolSet.legacyFullNames;
639
914
  }
640
915
  switch (toolSet.referenceName) {
641
- case 'github':
642
- for (const alias of LanguageModelToolsService_1.githubMCPServerAliases) {
643
- yield alias + '/*';
644
- }
645
- break;
646
- case 'playwright':
647
- for (const alias of LanguageModelToolsService_1.playwrightMCPServerAliases) {
648
- yield alias + '/*';
649
- }
650
- break;
651
- case SpecedToolAliases.execute:
652
- yield 'shell';
653
- break;
654
- case SpecedToolAliases.agent:
655
- yield VSCodeToolReference.runSubagent;
656
- yield 'custom-agent';
657
- break;
916
+ case "github":
917
+ for (const alias of LanguageModelToolsService_1.githubMCPServerAliases) {
918
+ yield alias + "/*";
919
+ }
920
+ break;
921
+ case "playwright":
922
+ for (const alias of LanguageModelToolsService_1.playwrightMCPServerAliases) {
923
+ yield alias + "/*";
924
+ }
925
+ break;
926
+ case
927
+ SpecedToolAliases.execute:
928
+ yield "shell";
929
+ break;
930
+ case
931
+ SpecedToolAliases.agent:
932
+ yield VSCodeToolReference.runSubagent;
933
+ yield "custom-agent";
934
+ break;
658
935
  }
659
936
  }
660
937
  *getToolAliases(toolSet, fullReferenceName) {
@@ -665,55 +942,56 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
665
942
  if (toolSet.legacyToolReferenceFullNames) {
666
943
  for (const legacyName of toolSet.legacyToolReferenceFullNames) {
667
944
  yield legacyName;
668
- const lastSlashIndex = legacyName.lastIndexOf('/');
945
+ const lastSlashIndex = legacyName.lastIndexOf("/");
669
946
  if (lastSlashIndex !== -1) {
670
947
  yield legacyName.substring(lastSlashIndex + 1);
671
948
  }
672
949
  }
673
950
  }
674
- const slashIndex = fullReferenceName.lastIndexOf('/');
951
+ const slashIndex = fullReferenceName.lastIndexOf("/");
675
952
  if (slashIndex !== -1) {
676
953
  switch (fullReferenceName.substring(0, slashIndex)) {
677
- case 'github':
678
- for (const alias of LanguageModelToolsService_1.githubMCPServerAliases) {
679
- yield alias + fullReferenceName.substring(slashIndex);
680
- }
681
- break;
682
- case 'playwright':
683
- for (const alias of LanguageModelToolsService_1.playwrightMCPServerAliases) {
684
- yield alias + fullReferenceName.substring(slashIndex);
685
- }
686
- break;
954
+ case "github":
955
+ for (const alias of LanguageModelToolsService_1.githubMCPServerAliases) {
956
+ yield alias + fullReferenceName.substring(slashIndex);
957
+ }
958
+ break;
959
+ case "playwright":
960
+ for (const alias of LanguageModelToolsService_1.playwrightMCPServerAliases) {
961
+ yield alias + fullReferenceName.substring(slashIndex);
962
+ }
963
+ break;
687
964
  }
688
965
  }
689
966
  }
690
- toToolAndToolSetEnablementMap(fullReferenceNames, _target) {
967
+ toToolAndToolSetEnablementMap(fullReferenceNames, _target, model) {
691
968
  const toolOrToolSetNames = ( new Set(fullReferenceNames));
692
969
  const result = ( new Map());
693
970
  for (const [tool, fullReferenceName] of this.toolsWithFullReferenceName.get()) {
694
- if (tool instanceof ToolSet) {
971
+ if (isToolSet(tool)) {
695
972
  const enabled = ( toolOrToolSetNames.has(fullReferenceName)) || ( Iterable.some(this.getToolSetAliases(tool, fullReferenceName), name => ( toolOrToolSetNames.has(name))));
696
- result.set(tool, enabled);
973
+ const scoped = model ? ( new ToolSetForModel(tool, model)) : tool;
974
+ result.set(scoped, enabled);
697
975
  if (enabled) {
698
- for (const memberTool of tool.getTools()) {
976
+ for (const memberTool of scoped.getTools()) {
699
977
  result.set(memberTool, true);
700
978
  }
701
979
  }
702
- }
703
- else {
980
+ } else {
981
+ if (model && !toolMatchesModel(tool, model)) {
982
+ continue;
983
+ }
704
984
  if (!( result.has(tool))) {
705
- const enabled = ( toolOrToolSetNames.has(fullReferenceName))
706
- || ( Iterable.some(this.getToolAliases(tool, fullReferenceName), name => ( toolOrToolSetNames.has(name))))
707
- || !!tool.legacyToolReferenceFullNames?.some(toolFullName => {
708
- const index = toolFullName.lastIndexOf('/');
709
- return index !== -1 && ( toolOrToolSetNames.has(toolFullName.substring(0, index)));
710
- });
985
+ const enabled = ( toolOrToolSetNames.has(fullReferenceName)) || ( Iterable.some(this.getToolAliases(tool, fullReferenceName), name => ( toolOrToolSetNames.has(name)))) || !!tool.legacyToolReferenceFullNames?.some(toolFullName => {
986
+ const index = toolFullName.lastIndexOf("/");
987
+ return index !== -1 && ( toolOrToolSetNames.has(toolFullName.substring(0, index)));
988
+ });
711
989
  result.set(tool, enabled);
712
990
  }
713
991
  }
714
992
  }
715
993
  for (const toolSet of this._toolSets) {
716
- if (toolSet.source.type === 'user') {
994
+ if (toolSet.source.type === "user") {
717
995
  const enabled = Iterable.every(toolSet.getTools(), t => result.get(t) === true);
718
996
  result.set(toolSet, enabled);
719
997
  }
@@ -724,15 +1002,14 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
724
1002
  const result = [];
725
1003
  const toolsCoveredByEnabledToolSet = ( new Set());
726
1004
  for (const [tool, fullReferenceName] of this.toolsWithFullReferenceName.get()) {
727
- if (tool instanceof ToolSet) {
1005
+ if (isToolSet(tool)) {
728
1006
  if (map.get(tool)) {
729
1007
  result.push(fullReferenceName);
730
1008
  for (const memberTool of tool.getTools()) {
731
1009
  toolsCoveredByEnabledToolSet.add(memberTool);
732
1010
  }
733
1011
  }
734
- }
735
- else {
1012
+ } else {
736
1013
  if (map.get(tool) && !( toolsCoveredByEnabledToolSet.has(tool))) {
737
1014
  result.push(fullReferenceName);
738
1015
  }
@@ -749,16 +1026,21 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
749
1026
  for (const ref of variableReferences) {
750
1027
  const toolOrToolSet = toolsOrToolSetByName.get(ref.name);
751
1028
  if (toolOrToolSet) {
752
- if (toolOrToolSet instanceof ToolSet) {
1029
+ if (isToolSet(toolOrToolSet)) {
753
1030
  result.push(toToolSetVariableEntry(toolOrToolSet, ref.range));
754
- }
755
- else {
1031
+ } else {
756
1032
  result.push(toToolVariableEntry(toolOrToolSet, ref.range));
757
1033
  }
758
1034
  }
759
1035
  }
760
1036
  return result;
761
1037
  }
1038
+ getToolSetsForModel(model, reader) {
1039
+ if (!model) {
1040
+ return this.toolSets.read(reader);
1041
+ }
1042
+ return ( Iterable.map(this.toolSets.read(reader), ts => ( new ToolSetForModel(ts, model))));
1043
+ }
762
1044
  getToolSet(id) {
763
1045
  for (const toolSet of this._toolSets) {
764
1046
  if (toolSet.id === id) {
@@ -777,10 +1059,10 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
777
1059
  }
778
1060
  getSpecedToolSetName(referenceName) {
779
1061
  if (LanguageModelToolsService_1.githubMCPServerAliases.includes(referenceName)) {
780
- return 'github';
1062
+ return "github";
781
1063
  }
782
1064
  if (LanguageModelToolsService_1.playwrightMCPServerAliases.includes(referenceName)) {
783
- return 'playwright';
1065
+ return "playwright";
784
1066
  }
785
1067
  return referenceName;
786
1068
  }
@@ -794,7 +1076,15 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
794
1076
  that._toolSets.delete(result);
795
1077
  }
796
1078
  }
797
- })(id, referenceName, options?.icon ?? Codicon.tools, source, options?.description, options?.legacyFullNames);
1079
+ })(
1080
+ id,
1081
+ referenceName,
1082
+ options?.icon ?? Codicon.tools,
1083
+ source,
1084
+ options?.description,
1085
+ options?.legacyFullNames,
1086
+ this._contextKeyService
1087
+ );
798
1088
  this._toolSets.add(result);
799
1089
  return result;
800
1090
  }
@@ -815,7 +1105,7 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
815
1105
  }
816
1106
  };
817
1107
  for (const [tool, _] of this.toolsWithFullReferenceName.get()) {
818
- if (tool instanceof ToolSet) {
1108
+ if (isToolSet(tool)) {
819
1109
  knownToolSetNames.add(tool.referenceName);
820
1110
  if (tool.legacyFullNames) {
821
1111
  for (const legacyName of tool.legacyFullNames) {
@@ -825,19 +1115,18 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
825
1115
  }
826
1116
  }
827
1117
  for (const [tool, fullReferenceName] of this.toolsWithFullReferenceName.get()) {
828
- if (tool instanceof ToolSet) {
1118
+ if (isToolSet(tool)) {
829
1119
  for (const alias of this.getToolSetAliases(tool, fullReferenceName)) {
830
1120
  add(alias, fullReferenceName);
831
1121
  }
832
- }
833
- else {
1122
+ } else {
834
1123
  for (const alias of this.getToolAliases(tool, fullReferenceName)) {
835
1124
  add(alias, fullReferenceName);
836
1125
  }
837
1126
  if (tool.legacyToolReferenceFullNames) {
838
1127
  for (const legacyName of tool.legacyToolReferenceFullNames) {
839
- if (legacyName.includes('/')) {
840
- const toolSetFullName = legacyName.substring(0, legacyName.lastIndexOf('/'));
1128
+ if (legacyName.includes("/")) {
1129
+ const toolSetFullName = legacyName.substring(0, legacyName.lastIndexOf("/"));
841
1130
  if (!( knownToolSetNames.has(toolSetFullName))) {
842
1131
  add(toolSetFullName, fullReferenceName);
843
1132
  }
@@ -853,7 +1142,7 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
853
1142
  if (fullReferenceName === toolFullReferenceName) {
854
1143
  return tool;
855
1144
  }
856
- const aliases = tool instanceof ToolSet ? this.getToolSetAliases(tool, toolFullReferenceName) : this.getToolAliases(tool, toolFullReferenceName);
1145
+ const aliases = isToolSet(tool) ? this.getToolSetAliases(tool, toolFullReferenceName) : this.getToolAliases(tool, toolFullReferenceName);
857
1146
  if (( Iterable.some(aliases, alias => fullReferenceName === alias))) {
858
1147
  return tool;
859
1148
  }
@@ -861,38 +1150,24 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
861
1150
  return undefined;
862
1151
  }
863
1152
  getFullReferenceName(tool, toolSet) {
864
- if (tool instanceof ToolSet) {
1153
+ if (isToolSet(tool)) {
865
1154
  return getToolSetFullReferenceName(tool);
866
1155
  }
867
1156
  return getToolFullReferenceName(tool, toolSet);
868
1157
  }
869
1158
  };
870
- LanguageModelToolsService = LanguageModelToolsService_1 = ( __decorate([
871
- ( __param(0, IInstantiationService)),
872
- ( __param(1, IExtensionService)),
873
- ( __param(2, IContextKeyService)),
874
- ( __param(3, IChatService)),
875
- ( __param(4, IDialogService)),
876
- ( __param(5, ITelemetryService)),
877
- ( __param(6, ILogService)),
878
- ( __param(7, IConfigurationService)),
879
- ( __param(8, IAccessibilityService)),
880
- ( __param(9, IAccessibilitySignalService)),
881
- ( __param(10, IStorageService)),
882
- ( __param(11, ILanguageModelToolsConfirmationService))
883
- ], LanguageModelToolsService));
1159
+ LanguageModelToolsService = LanguageModelToolsService_1 = ( __decorate([( __param(0, IInstantiationService)), ( __param(1, IExtensionService)), ( __param(2, IContextKeyService)), ( __param(3, IChatService)), ( __param(4, IDialogService)), ( __param(5, ITelemetryService)), ( __param(6, ILogService)), ( __param(7, IConfigurationService)), ( __param(8, IAccessibilityService)), ( __param(9, IAccessibilitySignalService)), ( __param(10, IStorageService)), ( __param(11, ILanguageModelToolsConfirmationService))], LanguageModelToolsService));
884
1160
  function getToolFullReferenceName(tool, toolSet) {
885
1161
  const toolName = tool.toolReferenceName ?? tool.displayName;
886
1162
  if (toolSet) {
887
1163
  return `${toolSet.referenceName}/${toolName}`;
888
- }
889
- else if (tool.source.type === 'extension') {
1164
+ } else if (tool.source.type === "extension") {
890
1165
  return `${tool.source.extensionId.value.toLowerCase()}/${toolName}`;
891
1166
  }
892
1167
  return toolName;
893
1168
  }
894
1169
  function getToolSetFullReferenceName(toolSet) {
895
- if (toolSet.source.type === 'mcp') {
1170
+ if (toolSet.source.type === "mcp") {
896
1171
  return `${toolSet.referenceName}/*`;
897
1172
  }
898
1173
  return toolSet.referenceName;