@codingame/monaco-vscode-chat-service-override 19.1.4 → 20.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/index.js +20 -8
  2. package/package.json +36 -31
  3. package/vscode/src/vs/base/common/policy.d.ts +14 -0
  4. package/vscode/src/vs/base/common/policy.js +11 -0
  5. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +53 -43
  6. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatClearActions.js +54 -24
  7. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.d.ts +2 -2
  8. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +14 -14
  9. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContext.js +15 -15
  10. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +37 -25
  11. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +4 -4
  12. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +2 -2
  13. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +4 -4
  14. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.js +1 -1
  15. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +6 -6
  16. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +23 -11
  17. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +9 -9
  18. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.d.ts +1 -1
  19. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +11 -11
  20. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +83 -14
  21. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +421 -21
  22. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.d.ts +1 -1
  23. package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +20 -20
  24. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +215 -104
  25. package/vscode/src/vs/workbench/contrib/chat/browser/chatAccessibilityService.d.ts +3 -1
  26. package/vscode/src/vs/workbench/contrib/chat/browser/chatAccessibilityService.js +9 -3
  27. package/vscode/src/vs/workbench/contrib/chat/browser/chatAttachmentResolveService.d.ts +3 -1
  28. package/vscode/src/vs/workbench/contrib/chat/browser/chatAttachmentResolveService.js +18 -6
  29. package/vscode/src/vs/workbench/contrib/chat/browser/chatContentParts/chatMarkdownAnchorService.d.ts +1 -1
  30. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +4 -4
  31. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +20 -20
  32. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +14 -14
  33. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.d.ts +1 -1
  34. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +6 -3
  35. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.d.ts +4 -2
  36. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +9 -6
  37. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +1 -1
  38. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +11 -8
  39. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.d.ts +5 -3
  40. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +16 -11
  41. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.d.ts +7 -23
  42. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +58 -326
  43. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.d.ts +0 -1
  44. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.js +33 -30
  45. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.d.ts +12 -1
  46. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +39 -17
  47. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTimeline.d.ts +55 -0
  48. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTimeline.js +380 -0
  49. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingModifiedNotebookSnapshot.js +3 -2
  50. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.d.ts +1 -1
  51. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.js +1 -1
  52. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +5 -5
  53. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/notebookCellChanges.js +4 -2
  54. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.d.ts +1 -1
  55. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.js +1 -1
  56. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/simpleBrowserEditorOverlay.js +22 -22
  57. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.d.ts +9 -4
  58. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.js +44 -10
  59. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.d.ts +38 -0
  60. package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +145 -0
  61. package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +34 -34
  62. package/vscode/src/vs/workbench/contrib/chat/browser/chatPasteProviders.js +7 -7
  63. package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.d.ts +1 -1
  64. package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.js +3 -3
  65. package/vscode/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.d.ts +1 -1
  66. package/vscode/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.js +36 -11
  67. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.d.ts +49 -0
  68. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.js +407 -0
  69. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.d.ts +12 -0
  70. package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.js +738 -0
  71. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup.d.ts +1 -1
  72. package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup.js +142 -151
  73. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus.d.ts +1 -1
  74. package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus.js +54 -54
  75. package/vscode/src/vs/workbench/contrib/chat/browser/chatVariables.js +20 -0
  76. package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.d.ts +4 -3
  77. package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.js +5 -4
  78. package/vscode/src/vs/workbench/contrib/chat/browser/codeBlockContextProviderService.d.ts +1 -1
  79. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorContrib.js +23 -7
  80. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorHover.d.ts +1 -1
  81. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorHover.js +3 -3
  82. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsService.d.ts +1 -0
  83. package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsService.js +13 -8
  84. package/vscode/src/vs/workbench/contrib/chat/browser/media/apple-dark.svg +3 -0
  85. package/vscode/src/vs/workbench/contrib/chat/browser/media/apple-light.svg +3 -0
  86. package/vscode/src/vs/workbench/contrib/chat/browser/media/chatSessions.css +28 -0
  87. package/vscode/src/vs/workbench/contrib/chat/browser/media/chatSetup.css +7 -7
  88. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/attachInstructionsAction.d.ts +2 -2
  89. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/attachInstructionsAction.js +14 -14
  90. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +8 -8
  91. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/newPromptFileActions.js +10 -10
  92. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptName.d.ts +1 -1
  93. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptName.js +11 -11
  94. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptSourceFolder.d.ts +1 -1
  95. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptSourceFolder.js +19 -19
  96. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/promptFilePickers.d.ts +1 -1
  97. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/promptFilePickers.js +14 -14
  98. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionContribution.js +1 -1
  99. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +3 -3
  100. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +4 -4
  101. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +10 -10
  102. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +11 -11
  103. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveToPromptAction.d.ts +1 -7
  104. package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveToPromptAction.js +52 -90
  105. package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +15 -15
  106. package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +6 -6
  107. package/vscode/src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.d.ts +2 -2
  108. package/vscode/src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.js +6 -2
  109. package/vscode/src/vs/workbench/contrib/chat/common/chatResponseResourceFileSystemProvider.js +9 -6
  110. package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.d.ts +11 -6
  111. package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.js +137 -30
  112. package/vscode/src/vs/workbench/contrib/chat/common/chatServiceTelemetry.js +8 -0
  113. package/vscode/src/vs/workbench/contrib/chat/common/chatSessionStore.d.ts +1 -1
  114. package/vscode/src/vs/workbench/contrib/chat/common/chatSessionStore.js +3 -3
  115. package/vscode/src/vs/workbench/contrib/chat/common/chatTodoListService.d.ts +27 -0
  116. package/vscode/src/vs/workbench/contrib/chat/common/chatTodoListService.js +44 -0
  117. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/config/configMigration.js +1 -1
  118. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contentProviders/filePromptContentsProvider.js +2 -2
  119. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contentProviders/promptContentsProviderBase.d.ts +1 -1
  120. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/contentProviders/promptContentsProviderBase.js +1 -1
  121. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +1 -1
  122. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.js +3 -5
  123. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderHovers.js +14 -14
  124. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptLinkDiagnosticsProvider.js +1 -1
  125. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptPathAutocompletion.js +1 -1
  126. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/providerInstanceManagerBase.js +2 -2
  127. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.js +1 -1
  128. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/headerBase.js +4 -4
  129. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/instructionsHeader.d.ts +1 -1
  130. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/applyTo.js +3 -3
  131. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/base/enum.js +1 -1
  132. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/base/string.js +1 -1
  133. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/tools.js +4 -4
  134. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/modeHeader.d.ts +1 -1
  135. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/promptHeader.d.ts +1 -1
  136. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/promptHeader.js +1 -1
  137. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/topError.js +9 -9
  138. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +1 -1
  139. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +8 -8
  140. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +1 -1
  141. package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +2 -2
  142. package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +27 -27
  143. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.d.ts +1 -1
  144. package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +2 -2
  145. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +9 -9
  146. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibilityHelp.js +1 -1
  147. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.js +4 -4
  148. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +104 -0
  149. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +667 -0
  150. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatCurrentLine.js +14 -14
  151. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatNotebook.js +1 -1
  152. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.d.ts +1 -1
  153. package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.js +2 -2
  154. package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +7 -7
  155. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/media/terminalChatWidget.css +56 -0
  156. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminal.chat.contribution.d.ts +1 -0
  157. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminal.chat.contribution.js +14 -0
  158. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.d.ts +11 -0
  159. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +111 -0
  160. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibleView.d.ts +10 -0
  161. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibleView.js +52 -0
  162. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.d.ts +1 -0
  163. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +262 -0
  164. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.d.ts +35 -0
  165. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.js +129 -0
  166. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatControllerHolder.d.ts +3 -0
  167. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatControllerHolder.js +8 -0
  168. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatEnabler.d.ts +9 -0
  169. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatEnabler.js +30 -0
  170. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.d.ts +72 -0
  171. package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +411 -0
  172. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.d.ts +3 -0
  173. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.js +59 -0
  174. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/bufferOutputPolling.d.ts +51 -0
  175. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/bufferOutputPolling.js +163 -0
  176. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.d.ts +24 -0
  177. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.js +164 -0
  178. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.d.ts +14 -0
  179. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.js +101 -0
  180. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.d.ts +16 -0
  181. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.js +52 -0
  182. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.d.ts +12 -0
  183. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.js +71 -0
  184. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.d.ts +14 -0
  185. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.js +94 -0
  186. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/getTerminalOutputTool.d.ts +11 -0
  187. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/getTerminalOutputTool.js +44 -0
  188. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.d.ts +3 -0
  189. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.js +18 -0
  190. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.d.ts +3 -0
  191. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +13 -0
  192. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.d.ts +55 -0
  193. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.js +603 -0
  194. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/subCommands.d.ts +3 -0
  195. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/subCommands.js +113 -0
  196. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/createAndRunTaskTool.d.ts +21 -0
  197. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/createAndRunTaskTool.js +227 -0
  198. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/getTaskOutputTool.d.ts +19 -0
  199. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/getTaskOutputTool.js +88 -0
  200. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/runTaskTool.d.ts +21 -0
  201. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/runTaskTool.js +140 -0
  202. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/taskHelpers.d.ts +22 -0
  203. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/taskHelpers.js +80 -0
  204. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task.chatAgentTools.contribution.d.ts +1 -0
  205. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task.chatAgentTools.contribution.js +40 -0
  206. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.d.ts +1 -0
  207. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +36 -0
  208. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.d.ts +20 -0
  209. package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +114 -0
  210. package/vscode/src/vs/workbench/contrib/chat/browser/media/google-mono-dark.svg +0 -3
  211. package/vscode/src/vs/workbench/contrib/chat/browser/media/google-mono-light.svg +0 -3
@@ -0,0 +1,113 @@
1
+
2
+ import { isPowerShell } from './runInTerminalHelpers.js';
3
+
4
+ const shellTypeResetChars = ( new Map([
5
+ ['sh', ['&>>', '2>>', '>>', '2>', '&>', '||', '&&', '|&', '<<', '&', ';', '{', '>', '<', '|']],
6
+ ['zsh', ['<<<', '2>>', '&>>', '>>', '2>', '&>', '<(', '<>', '||', '&&', '|&', '&', ';', '{', '<<', '<(', '>', '<', '|']],
7
+ ['pwsh', ['*>>', '2>>', '>>', '2>', '&&', '*>', '>', '<', '|', ';', '!', '&']],
8
+ ]));
9
+ function splitCommandLineIntoSubCommands(commandLine, envShell, envOS) {
10
+ let shellType;
11
+ const envShellWithoutExe = envShell.replace(/\.exe$/, '');
12
+ if (isPowerShell(envShell, envOS)) {
13
+ shellType = 'pwsh';
14
+ }
15
+ else {
16
+ switch (envShellWithoutExe) {
17
+ case 'zsh':
18
+ shellType = 'zsh';
19
+ break;
20
+ default:
21
+ shellType = 'sh';
22
+ break;
23
+ }
24
+ }
25
+ const subCommands = [commandLine];
26
+ const resetChars = shellTypeResetChars.get(shellType);
27
+ if (resetChars) {
28
+ for (const chars of resetChars) {
29
+ for (let i = 0; i < subCommands.length; i++) {
30
+ const subCommand = subCommands[i];
31
+ if (subCommand.includes(chars)) {
32
+ subCommands.splice(i, 1, ...( subCommand.split(chars).map(e => e.trim())));
33
+ i--;
34
+ }
35
+ }
36
+ }
37
+ }
38
+ return subCommands;
39
+ }
40
+ function extractInlineSubCommands(commandLine, envShell, envOS) {
41
+ const inlineCommands = [];
42
+ const shellType = isPowerShell(envShell, envOS) ? 'pwsh' : 'sh';
43
+ function extractWithPrefix(text, prefix) {
44
+ const results = [];
45
+ let i = 0;
46
+ while (i < text.length) {
47
+ const startIndex = text.indexOf(prefix, i);
48
+ if (startIndex === -1) {
49
+ break;
50
+ }
51
+ const contentStart = startIndex + prefix.length;
52
+ if (contentStart >= text.length || text[contentStart] !== '(') {
53
+ i = startIndex + 1;
54
+ continue;
55
+ }
56
+ let parenCount = 1;
57
+ let j = contentStart + 1;
58
+ while (j < text.length && parenCount > 0) {
59
+ if (text[j] === '(') {
60
+ parenCount++;
61
+ }
62
+ else if (text[j] === ')') {
63
+ parenCount--;
64
+ }
65
+ j++;
66
+ }
67
+ if (parenCount === 0) {
68
+ const innerCommand = text.substring(contentStart + 1, j - 1).trim();
69
+ if (innerCommand) {
70
+ results.push(innerCommand);
71
+ results.push(...extractInlineSubCommands(innerCommand, envShell, envOS));
72
+ }
73
+ }
74
+ i = startIndex + 1;
75
+ }
76
+ return results;
77
+ }
78
+ function extractBackticks(text) {
79
+ const results = [];
80
+ let i = 0;
81
+ while (i < text.length) {
82
+ const startIndex = text.indexOf('`', i);
83
+ if (startIndex === -1) {
84
+ break;
85
+ }
86
+ const endIndex = text.indexOf('`', startIndex + 1);
87
+ if (endIndex === -1) {
88
+ break;
89
+ }
90
+ const innerCommand = text.substring(startIndex + 1, endIndex).trim();
91
+ if (innerCommand) {
92
+ results.push(innerCommand);
93
+ results.push(...extractInlineSubCommands(innerCommand, envShell, envOS));
94
+ }
95
+ i = endIndex + 1;
96
+ }
97
+ return results;
98
+ }
99
+ if (shellType === 'pwsh') {
100
+ inlineCommands.push(...extractWithPrefix(commandLine, '$'));
101
+ inlineCommands.push(...extractWithPrefix(commandLine, '@'));
102
+ inlineCommands.push(...extractWithPrefix(commandLine, '&'));
103
+ }
104
+ else {
105
+ inlineCommands.push(...extractWithPrefix(commandLine, '$'));
106
+ inlineCommands.push(...extractWithPrefix(commandLine, '<'));
107
+ inlineCommands.push(...extractWithPrefix(commandLine, '>'));
108
+ inlineCommands.push(...extractBackticks(commandLine));
109
+ }
110
+ return ( new Set(inlineCommands));
111
+ }
112
+
113
+ export { extractInlineSubCommands, splitCommandLineIntoSubCommands };
@@ -0,0 +1,21 @@
1
+ import { CancellationToken } from "@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation";
2
+ import { ITelemetryService } from "@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service";
3
+ import { IChatService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService.service";
4
+ import { ILanguageModelsService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels.service";
5
+ import { CountTokensCallback, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolInvocationPreparationContext, IToolResult, ToolProgress } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService";
6
+ import { ITaskService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/tasks/common/taskService.service";
7
+ import { ITerminalService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminal/browser/terminal.service";
8
+ import { IFileService } from "@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service";
9
+ export declare class CreateAndRunTaskTool implements IToolImpl {
10
+ private readonly _tasksService;
11
+ private readonly _telemetryService;
12
+ private readonly _terminalService;
13
+ private readonly _languageModelsService;
14
+ private readonly _chatService;
15
+ private readonly _fileService;
16
+ constructor(_tasksService: ITaskService, _telemetryService: ITelemetryService, _terminalService: ITerminalService, _languageModelsService: ILanguageModelsService, _chatService: IChatService, _fileService: IFileService);
17
+ invoke(invocation: IToolInvocation, _countTokens: CountTokensCallback, _progress: ToolProgress, token: CancellationToken): Promise<IToolResult>;
18
+ private _isTaskActive;
19
+ prepareToolInvocation(context: IToolInvocationPreparationContext, token: CancellationToken): Promise<IPreparedToolInvocation | undefined>;
20
+ }
21
+ export declare const CreateAndRunTaskToolData: IToolData;
@@ -0,0 +1,227 @@
1
+
2
+ import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
3
+ import { timeout } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
4
+ import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
5
+ import { ITelemetryService } from '@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service';
6
+ import { IChatService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService.service';
7
+ import { ILanguageModelsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels.service';
8
+ import { ToolDataSource } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService';
9
+ import { ITaskService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/tasks/common/taskService.service';
10
+ import { ITerminalService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminal/browser/terminal.service';
11
+ import { pollForOutputAndIdle, racePollingOrPrompt, promptForMorePolling } from '../bufferOutputPolling.js';
12
+ import { getOutput } from '../outputHelpers.js';
13
+ import { MarkdownString } from '@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent';
14
+ import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
15
+ import { IFileService } from '@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service';
16
+ import { VSBuffer } from '@codingame/monaco-vscode-api/vscode/vs/base/common/buffer';
17
+
18
+ let CreateAndRunTaskTool = class CreateAndRunTaskTool {
19
+ constructor(_tasksService, _telemetryService, _terminalService, _languageModelsService, _chatService, _fileService) {
20
+ this._tasksService = _tasksService;
21
+ this._telemetryService = _telemetryService;
22
+ this._terminalService = _terminalService;
23
+ this._languageModelsService = _languageModelsService;
24
+ this._chatService = _chatService;
25
+ this._fileService = _fileService;
26
+ }
27
+ async invoke(invocation, _countTokens, _progress, token) {
28
+ const args = invocation.parameters;
29
+ if (!invocation.context) {
30
+ return { content: [{ kind: 'text', value: `No invocation context` }], toolResultMessage: `No invocation context` };
31
+ }
32
+ const tasksJsonUri = URI.file(args.workspaceFolder).with({ path: `${args.workspaceFolder}/.vscode/tasks.json` });
33
+ const exists = await this._fileService.exists(tasksJsonUri);
34
+ const newTask = {
35
+ label: args.task.label,
36
+ type: args.task.type,
37
+ command: args.task.command,
38
+ args: args.task.args,
39
+ isBackground: args.task.isBackground,
40
+ problemMatcher: args.task.problemMatcher,
41
+ group: args.task.group
42
+ };
43
+ const tasksJsonContent = JSON.stringify({
44
+ version: '2.0.0',
45
+ tasks: [newTask]
46
+ }, null, '\t');
47
+ if (!exists) {
48
+ await this._fileService.createFile(tasksJsonUri, VSBuffer.fromString(tasksJsonContent), { overwrite: true });
49
+ _progress.report({ message: 'Created tasks.json file' });
50
+ }
51
+ else {
52
+ const content = await this._fileService.readFile(tasksJsonUri);
53
+ const tasksJson = JSON.parse(( content.value.toString()));
54
+ tasksJson.tasks.push(newTask);
55
+ await this._fileService.writeFile(tasksJsonUri, VSBuffer.fromString(JSON.stringify(tasksJson, null, '\t')));
56
+ _progress.report({ message: 'Updated tasks.json file' });
57
+ }
58
+ _progress.report({ message: ( new MarkdownString(( localize(11266, 'Resolving the task')))) });
59
+ let task;
60
+ const start = Date.now();
61
+ while (Date.now() - start < 5000 && !token.isCancellationRequested) {
62
+ task = (await this._tasksService.tasks())?.find(t => t._label === args.task.label);
63
+ if (task) {
64
+ break;
65
+ }
66
+ await timeout(100);
67
+ }
68
+ if (!task) {
69
+ return { content: [{ kind: 'text', value: `Task not found: ${args.task.label}` }], toolResultMessage: ( new MarkdownString(( localize(11267, 'Task not found: `{0}`', args.task.label)))) };
70
+ }
71
+ _progress.report({ message: ( new MarkdownString(( localize(11268, 'Running task `{0}`', args.task.label)))) });
72
+ const raceResult = await Promise.race([this._tasksService.run(task), timeout(3000)]);
73
+ const result = raceResult && typeof raceResult === 'object' ? raceResult : undefined;
74
+ const resource = this._tasksService.getTerminalForTask(task);
75
+ const terminal = this._terminalService.instances.find(t => t.resource.path === resource?.path && t.resource.scheme === resource.scheme);
76
+ if (!terminal) {
77
+ return { content: [{ kind: 'text', value: `Task started but no terminal was found for: ${args.task.label}` }], toolResultMessage: ( new MarkdownString(( localize(
78
+ 11269,
79
+ 'Task started but no terminal was found for: `{0}`',
80
+ args.task.label
81
+ )))) };
82
+ }
83
+ _progress.report({ message: ( new MarkdownString(( localize(11270, 'Checking output for `{0}`', args.task.label)))) });
84
+ let outputAndIdle = await pollForOutputAndIdle({ getOutput: () => getOutput(terminal), isActive: () => this._isTaskActive(task) }, false, token, this._languageModelsService);
85
+ if (!outputAndIdle.terminalExecutionIdleBeforeTimeout) {
86
+ outputAndIdle = await racePollingOrPrompt(() => pollForOutputAndIdle({ getOutput: () => getOutput(terminal), isActive: () => this._isTaskActive(task) }, true, token, this._languageModelsService), () => promptForMorePolling(args.task.label, token, invocation.context, this._chatService), outputAndIdle, token, this._languageModelsService, { getOutput: () => getOutput(terminal), isActive: () => this._isTaskActive(task) });
87
+ }
88
+ let output = '';
89
+ if (result?.exitCode) {
90
+ output = `Task \`${args.task.label}\` failed with exit code ${result.exitCode}.`;
91
+ }
92
+ else {
93
+ if (outputAndIdle.terminalExecutionIdleBeforeTimeout) {
94
+ output += `Task \`${args.task.label}\` finished`;
95
+ }
96
+ else {
97
+ output += `Task \`${args.task.label}\` started and will continue to run in the background.`;
98
+ }
99
+ }
100
+ this._telemetryService.publicLog2?.('copilotChat.runTaskTool.createAndRunTask', {
101
+ taskLabel: args.task.label,
102
+ bufferLength: outputAndIdle.output.length,
103
+ pollDurationMs: outputAndIdle?.pollDurationMs ?? 0,
104
+ });
105
+ return { content: [{ kind: 'text', value: `The output was ${outputAndIdle.output}` }], toolResultMessage: output };
106
+ }
107
+ async _isTaskActive(task) {
108
+ const activeTasks = await this._tasksService.getActiveTasks();
109
+ return activeTasks?.includes(task) ?? false;
110
+ }
111
+ async prepareToolInvocation(context, token) {
112
+ const args = context.parameters;
113
+ const task = args.task;
114
+ const allTasks = await this._tasksService.tasks();
115
+ if (allTasks?.find(t => t._label === task.label)) {
116
+ return {
117
+ invocationMessage: ( new MarkdownString(( localize(11271, 'Task `{0}` already exists.', task.label)))),
118
+ pastTenseMessage: ( new MarkdownString(( localize(11272, 'Task `{0}` already exists.', task.label)))),
119
+ confirmationMessages: undefined
120
+ };
121
+ }
122
+ const activeTasks = await this._tasksService.getActiveTasks();
123
+ if (activeTasks.find(t => t._label === task.label)) {
124
+ return {
125
+ invocationMessage: ( new MarkdownString(( localize(11273, 'Task \`{0}\` is already running.', task.label)))),
126
+ pastTenseMessage: ( new MarkdownString(( localize(11273, 'Task \`{0}\` is already running.', task.label)))),
127
+ confirmationMessages: undefined
128
+ };
129
+ }
130
+ return {
131
+ invocationMessage: ( new MarkdownString(( localize(11274, 'Created task \`{0}\`', task.label)))),
132
+ pastTenseMessage: ( new MarkdownString(( localize(11275, 'Created task \`{0}\`', task.label)))),
133
+ confirmationMessages: {
134
+ title: ( localize(11276, 'Allow task creation and execution?')),
135
+ message: ( new MarkdownString(( localize(
136
+ 11277,
137
+ 'Copilot will create the task \`{0}\` with command \`{1}\`{2}.',
138
+ task.label,
139
+ task.command,
140
+ task.args?.length ? ` and args \`${task.args.join(' ')}\`` : ''
141
+ ))))
142
+ }
143
+ };
144
+ }
145
+ };
146
+ CreateAndRunTaskTool = ( __decorate([
147
+ ( __param(0, ITaskService)),
148
+ ( __param(1, ITelemetryService)),
149
+ ( __param(2, ITerminalService)),
150
+ ( __param(3, ILanguageModelsService)),
151
+ ( __param(4, IChatService)),
152
+ ( __param(5, IFileService))
153
+ ], CreateAndRunTaskTool));
154
+ const CreateAndRunTaskToolData = {
155
+ id: 'create_and_run_task',
156
+ toolReferenceName: 'createAndRunTask',
157
+ displayName: ( localize(11278, 'Create and run Task')),
158
+ modelDescription: ( localize(
159
+ 11279,
160
+ 'Creates and runs a build, run, or custom task for the workspace by generating or adding to a tasks.json file based on the project structure (such as package.json or README.md). If the user asks to build, run, launch and they have no tasks.json file, use this tool. If they ask to create or add a task, use this tool.'
161
+ )),
162
+ userDescription: ( localize(11280, "Create and run a task in the workspace")),
163
+ source: ToolDataSource.Internal,
164
+ inputSchema: {
165
+ 'type': 'object',
166
+ 'properties': {
167
+ 'workspaceFolder': {
168
+ 'type': 'string',
169
+ 'description': 'The absolute path of the workspace folder where the tasks.json file will be created.'
170
+ },
171
+ 'task': {
172
+ 'type': 'object',
173
+ 'description': 'The task to add to the new tasks.json file.',
174
+ 'properties': {
175
+ 'label': {
176
+ 'type': 'string',
177
+ 'description': 'The label of the task.'
178
+ },
179
+ 'type': {
180
+ 'type': 'string',
181
+ 'description': `The type of the task. The only supported value is 'shell'.`,
182
+ 'enum': [
183
+ 'shell'
184
+ ]
185
+ },
186
+ 'command': {
187
+ 'type': 'string',
188
+ 'description': 'The shell command to run for the task. Use this to specify commands for building or running the application.'
189
+ },
190
+ 'args': {
191
+ 'type': 'array',
192
+ 'description': 'The arguments to pass to the command.',
193
+ 'items': {
194
+ 'type': 'string'
195
+ }
196
+ },
197
+ 'isBackground': {
198
+ 'type': 'boolean',
199
+ 'description': 'Whether the task runs in the background without blocking the UI or other tasks. Set to true for long-running processes like watch tasks or servers that should continue executing without requiring user attention. When false, the task will block the terminal until completion.'
200
+ },
201
+ 'problemMatcher': {
202
+ 'type': 'array',
203
+ 'description': `The problem matcher to use to parse task output for errors and warnings. Can be a predefined matcher like '$tsc' (TypeScript), '$eslint - stylish', '$gcc', etc., or a custom pattern defined in tasks.json. This helps VS Code display errors in the Problems panel and enables quick navigation to error locations.`,
204
+ 'items': {
205
+ 'type': 'string'
206
+ }
207
+ },
208
+ 'group': {
209
+ 'type': 'string',
210
+ 'description': 'The group to which the task belongs.'
211
+ }
212
+ },
213
+ 'required': [
214
+ 'label',
215
+ 'type',
216
+ 'command'
217
+ ]
218
+ }
219
+ },
220
+ 'required': [
221
+ 'task',
222
+ 'workspaceFolder'
223
+ ]
224
+ },
225
+ };
226
+
227
+ export { CreateAndRunTaskTool, CreateAndRunTaskToolData };
@@ -0,0 +1,19 @@
1
+ import type { CancellationToken } from "@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation";
2
+ import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
3
+ import { IConfigurationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service";
4
+ import { type CountTokensCallback, type IPreparedToolInvocation, type IToolData, type IToolImpl, type IToolInvocation, type IToolInvocationPreparationContext, type IToolResult, type ToolProgress } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService";
5
+ import { ITaskService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/tasks/common/taskService.service";
6
+ import { ITerminalService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminal/browser/terminal.service";
7
+ export declare const GetTaskOutputToolData: IToolData;
8
+ export interface IGetTaskOutputInputParams {
9
+ id: string;
10
+ workspaceFolder: string;
11
+ }
12
+ export declare class GetTaskOutputTool extends Disposable implements IToolImpl {
13
+ private readonly _tasksService;
14
+ private readonly _terminalService;
15
+ private readonly _configurationService;
16
+ constructor(_tasksService: ITaskService, _terminalService: ITerminalService, _configurationService: IConfigurationService);
17
+ prepareToolInvocation(context: IToolInvocationPreparationContext, token: CancellationToken): Promise<IPreparedToolInvocation | undefined>;
18
+ invoke(invocation: IToolInvocation, _countTokens: CountTokensCallback, _progress: ToolProgress, token: CancellationToken): Promise<IToolResult>;
19
+ }
@@ -0,0 +1,88 @@
1
+
2
+ import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
3
+ import { MarkdownString } from '@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent';
4
+ import { Disposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
5
+ import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
6
+ import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
7
+ import { ToolDataSource } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService';
8
+ import { ITaskService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/tasks/common/taskService.service';
9
+ import { ITerminalService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminal/browser/terminal.service';
10
+ import { getOutput } from '../bufferOutputPolling.js';
11
+ import { getTaskDefinition, getTaskForTool } from './taskHelpers.js';
12
+
13
+ const GetTaskOutputToolData = {
14
+ id: 'get_task_output',
15
+ toolReferenceName: 'getTaskOutput',
16
+ displayName: ( localize(11281, 'Get Task Output')),
17
+ modelDescription: 'Get the output of a task',
18
+ source: ToolDataSource.Internal,
19
+ inputSchema: {
20
+ type: 'object',
21
+ properties: {
22
+ id: {
23
+ type: 'string',
24
+ description: 'The task ID for which to get the output.'
25
+ },
26
+ workspaceFolder: {
27
+ type: 'string',
28
+ description: 'The workspace folder path containing the task'
29
+ },
30
+ },
31
+ required: [
32
+ 'id',
33
+ 'workspaceFolder'
34
+ ]
35
+ }
36
+ };
37
+ let GetTaskOutputTool = class GetTaskOutputTool extends Disposable {
38
+ constructor(_tasksService, _terminalService, _configurationService) {
39
+ super();
40
+ this._tasksService = _tasksService;
41
+ this._terminalService = _terminalService;
42
+ this._configurationService = _configurationService;
43
+ }
44
+ async prepareToolInvocation(context, token) {
45
+ const args = context.parameters;
46
+ const taskDefinition = getTaskDefinition(args.id);
47
+ const task = await getTaskForTool(args.id, taskDefinition, args.workspaceFolder, this._configurationService, this._tasksService);
48
+ if (!task) {
49
+ return { invocationMessage: ( new MarkdownString(( localize(11282, 'Task not found: `{0}`', args.id)))) };
50
+ }
51
+ const taskLabel = task._label;
52
+ const activeTasks = await this._tasksService.getActiveTasks();
53
+ if (activeTasks.includes(task)) {
54
+ return { invocationMessage: ( new MarkdownString(( localize(11283, 'The task `{0}` is already running.', taskLabel)))) };
55
+ }
56
+ return {
57
+ invocationMessage: ( new MarkdownString(( localize(11284, 'Checking output for task `{0}`', taskLabel)))),
58
+ pastTenseMessage: ( new MarkdownString(( localize(11285, 'Checked output for task `{0}`', taskLabel)))),
59
+ };
60
+ }
61
+ async invoke(invocation, _countTokens, _progress, token) {
62
+ const args = invocation.parameters;
63
+ const taskDefinition = getTaskDefinition(args.id);
64
+ const task = await getTaskForTool(args.id, taskDefinition, args.workspaceFolder, this._configurationService, this._tasksService);
65
+ if (!task) {
66
+ return { content: [{ kind: 'text', value: `Task not found: ${args.id}` }], toolResultMessage: ( new MarkdownString(( localize(11282, 'Task not found: `{0}`', args.id)))) };
67
+ }
68
+ const resource = this._tasksService.getTerminalForTask(task);
69
+ const taskLabel = task._label;
70
+ const terminal = this._terminalService.instances.find(t => t.resource.path === resource?.path && t.resource.scheme === resource.scheme);
71
+ if (!terminal) {
72
+ return { content: [{ kind: 'text', value: `Terminal not found for task ${taskLabel}` }], toolResultMessage: ( new MarkdownString(( localize(11286, 'Terminal not found for task `{0}`', taskLabel)))) };
73
+ }
74
+ return {
75
+ content: [{
76
+ kind: 'text',
77
+ value: `Output of task \`${taskLabel}\`: ${getOutput(terminal)}`
78
+ }]
79
+ };
80
+ }
81
+ };
82
+ GetTaskOutputTool = ( __decorate([
83
+ ( __param(0, ITaskService)),
84
+ ( __param(1, ITerminalService)),
85
+ ( __param(2, IConfigurationService))
86
+ ], GetTaskOutputTool));
87
+
88
+ export { GetTaskOutputTool, GetTaskOutputToolData };
@@ -0,0 +1,21 @@
1
+ import { CancellationToken } from "@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation";
2
+ import { ITelemetryService } from "@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service";
3
+ import { IChatService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService.service";
4
+ import { ILanguageModelsService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels.service";
5
+ import { CountTokensCallback, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolInvocationPreparationContext, IToolResult, ToolProgress } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService";
6
+ import { ITaskService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/tasks/common/taskService.service";
7
+ import { ITerminalService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminal/browser/terminal.service";
8
+ import { IConfigurationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service";
9
+ export declare class RunTaskTool implements IToolImpl {
10
+ private readonly _tasksService;
11
+ private readonly _telemetryService;
12
+ private readonly _terminalService;
13
+ private readonly _languageModelsService;
14
+ private readonly _chatService;
15
+ private readonly _configurationService;
16
+ constructor(_tasksService: ITaskService, _telemetryService: ITelemetryService, _terminalService: ITerminalService, _languageModelsService: ILanguageModelsService, _chatService: IChatService, _configurationService: IConfigurationService);
17
+ invoke(invocation: IToolInvocation, _countTokens: CountTokensCallback, _progress: ToolProgress, token: CancellationToken): Promise<IToolResult>;
18
+ private _isTaskActive;
19
+ prepareToolInvocation(context: IToolInvocationPreparationContext, token: CancellationToken): Promise<IPreparedToolInvocation | undefined>;
20
+ }
21
+ export declare const RunTaskToolData: IToolData;
@@ -0,0 +1,140 @@
1
+
2
+ import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
3
+ import { timeout } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
4
+ import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
5
+ import { ITelemetryService } from '@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service';
6
+ import { IChatService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService.service';
7
+ import { ILanguageModelsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels.service';
8
+ import { ToolDataSource } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService';
9
+ import { ITaskService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/tasks/common/taskService.service';
10
+ import { ITerminalService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminal/browser/terminal.service';
11
+ import { pollForOutputAndIdle, racePollingOrPrompt, promptForMorePolling } from '../bufferOutputPolling.js';
12
+ import { getOutput } from '../outputHelpers.js';
13
+ import { getTaskDefinition, getTaskForTool } from './taskHelpers.js';
14
+ import { MarkdownString } from '@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent';
15
+ import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
16
+
17
+ let RunTaskTool = class RunTaskTool {
18
+ constructor(_tasksService, _telemetryService, _terminalService, _languageModelsService, _chatService, _configurationService) {
19
+ this._tasksService = _tasksService;
20
+ this._telemetryService = _telemetryService;
21
+ this._terminalService = _terminalService;
22
+ this._languageModelsService = _languageModelsService;
23
+ this._chatService = _chatService;
24
+ this._configurationService = _configurationService;
25
+ }
26
+ async invoke(invocation, _countTokens, _progress, token) {
27
+ const args = invocation.parameters;
28
+ if (!invocation.context) {
29
+ return { content: [{ kind: 'text', value: `No invocation context` }], toolResultMessage: `No invocation context` };
30
+ }
31
+ const taskDefinition = getTaskDefinition(args.id);
32
+ const task = await getTaskForTool(args.id, taskDefinition, args.workspaceFolder, this._configurationService, this._tasksService);
33
+ if (!task) {
34
+ return { content: [{ kind: 'text', value: `Task not found: ${args.id}` }], toolResultMessage: ( new MarkdownString(( localize(11287, 'Task not found: `{0}`', args.id)))) };
35
+ }
36
+ const taskLabel = task._label;
37
+ const activeTasks = await this._tasksService.getActiveTasks();
38
+ if (activeTasks.includes(task)) {
39
+ return { content: [{ kind: 'text', value: `The task ${taskLabel} is already running.` }], toolResultMessage: ( new MarkdownString(( localize(11288, 'The task `{0}` is already running.', taskLabel)))) };
40
+ }
41
+ const raceResult = await Promise.race([this._tasksService.run(task), timeout(3000)]);
42
+ const result = raceResult && typeof raceResult === 'object' ? raceResult : undefined;
43
+ const resource = this._tasksService.getTerminalForTask(task);
44
+ const terminal = this._terminalService.instances.find(t => t.resource.path === resource?.path && t.resource.scheme === resource.scheme);
45
+ if (!terminal) {
46
+ return { content: [{ kind: 'text', value: `Task started but no terminal was found for: ${taskLabel}` }], toolResultMessage: ( new MarkdownString(( localize(11289, 'Task started but no terminal was found for: `{0}`', taskLabel)))) };
47
+ }
48
+ _progress.report({ message: ( new MarkdownString(( localize(11290, 'Checking output for `{0}`', taskLabel)))) });
49
+ let outputAndIdle = await pollForOutputAndIdle({ getOutput: () => getOutput(terminal), isActive: () => this._isTaskActive(task) }, false, token, this._languageModelsService);
50
+ if (!outputAndIdle.terminalExecutionIdleBeforeTimeout) {
51
+ outputAndIdle = await racePollingOrPrompt(() => pollForOutputAndIdle({ getOutput: () => getOutput(terminal), isActive: () => this._isTaskActive(task) }, true, token, this._languageModelsService), () => promptForMorePolling(taskLabel, token, invocation.context, this._chatService), outputAndIdle, token, this._languageModelsService, { getOutput: () => getOutput(terminal), isActive: () => this._isTaskActive(task) });
52
+ }
53
+ let output = '';
54
+ if (result?.exitCode) {
55
+ output = `Task \`${taskLabel}\` failed with exit code ${result.exitCode}.`;
56
+ }
57
+ else {
58
+ if (outputAndIdle.terminalExecutionIdleBeforeTimeout) {
59
+ output += `Task \`${taskLabel}\` finished`;
60
+ }
61
+ else {
62
+ output += `Task \`${taskLabel}\` started and will continue to run in the background.`;
63
+ }
64
+ }
65
+ this._telemetryService.publicLog2?.('copilotChat.runTaskTool.run', {
66
+ taskId: args.id,
67
+ bufferLength: outputAndIdle.output.length,
68
+ pollDurationMs: outputAndIdle?.pollDurationMs ?? 0,
69
+ });
70
+ return { content: [{ kind: 'text', value: `The output was ${outputAndIdle.output}` }], toolResultMessage: output };
71
+ }
72
+ async _isTaskActive(task) {
73
+ const activeTasks = await this._tasksService.getActiveTasks();
74
+ return Promise.resolve(activeTasks?.includes(task));
75
+ }
76
+ async prepareToolInvocation(context, token) {
77
+ const args = context.parameters;
78
+ const taskDefinition = getTaskDefinition(args.id);
79
+ const task = await getTaskForTool(args.id, taskDefinition, args.workspaceFolder, this._configurationService, this._tasksService);
80
+ if (!task) {
81
+ return { invocationMessage: ( new MarkdownString(( localize(11287, 'Task not found: `{0}`', args.id)))) };
82
+ }
83
+ const taskLabel = task._label;
84
+ const activeTasks = await this._tasksService.getActiveTasks();
85
+ if (task && activeTasks.includes(task)) {
86
+ return { invocationMessage: ( new MarkdownString(( localize(11291, 'The task is already running.')))) };
87
+ }
88
+ if (await this._isTaskActive(task)) {
89
+ return {
90
+ invocationMessage: ( new MarkdownString(( localize(11292, '`{0}` is already running.', taskLabel)))),
91
+ pastTenseMessage: ( new MarkdownString(( localize(11293, '`{0}` was already running.', taskLabel)))),
92
+ confirmationMessages: undefined
93
+ };
94
+ }
95
+ return {
96
+ invocationMessage: ( new MarkdownString(( localize(11294, 'Running `{0}`', taskLabel)))),
97
+ pastTenseMessage: ( new MarkdownString(task?.configurationProperties.isBackground
98
+ ? ( localize(11295, 'Started `{0}`', taskLabel))
99
+ : ( localize(11296, 'Ran `{0}`', taskLabel)))),
100
+ confirmationMessages: task
101
+ ? { title: ( localize(11297, 'Allow task run?')), message: ( localize(11298, 'Allow Copilot to run the task `{0}`?', taskLabel)) }
102
+ : undefined
103
+ };
104
+ }
105
+ };
106
+ RunTaskTool = ( __decorate([
107
+ ( __param(0, ITaskService)),
108
+ ( __param(1, ITelemetryService)),
109
+ ( __param(2, ITerminalService)),
110
+ ( __param(3, ILanguageModelsService)),
111
+ ( __param(4, IChatService)),
112
+ ( __param(5, IConfigurationService))
113
+ ], RunTaskTool));
114
+ const RunTaskToolData = {
115
+ id: 'run_task',
116
+ toolReferenceName: 'runTask',
117
+ displayName: ( localize(11299, 'Run Task')),
118
+ modelDescription: 'Runs a VS Code task.\n\n- If you see that an appropriate task exists for building or running code, prefer to use this tool to run the task instead of using the run_in_terminal tool.\n- Make sure that any appropriate build or watch task is running before trying to run tests or execute code.\n- If the user asks to run a task, use this tool to do so.',
119
+ userDescription: ( localize(11300, 'Tool for running tasks in the workspace')),
120
+ source: ToolDataSource.Internal,
121
+ inputSchema: {
122
+ 'type': 'object',
123
+ 'properties': {
124
+ 'workspaceFolder': {
125
+ 'type': 'string',
126
+ 'description': 'The workspace folder path containing the task'
127
+ },
128
+ 'id': {
129
+ 'type': 'string',
130
+ 'description': 'The task ID to run.'
131
+ }
132
+ },
133
+ 'required': [
134
+ 'workspaceFolder',
135
+ 'id'
136
+ ]
137
+ }
138
+ };
139
+
140
+ export { RunTaskTool, RunTaskToolData };