@codingame/monaco-vscode-chat-service-override 20.4.1 → 21.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +15 -7
- package/package.json +38 -36
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +60 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +56 -46
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatClearActions.js +18 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +52 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContext.js +28 -26
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +19 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +15 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +11 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +10 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatSessionActions.d.ts +68 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatSessionActions.js +433 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +17 -18
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.d.ts +7 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +205 -551
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.d.ts +7 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +52 -29
- package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +277 -163
- package/vscode/src/vs/workbench/contrib/chat/browser/chatAttachmentResolveService.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +20 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +17 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +11 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.d.ts +4 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +32 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +22 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +22 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +6 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +47 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.js +12 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.d.ts +8 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +33 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTimeline.d.ts +3 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTimeline.js +74 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingModifiedNotebookSnapshot.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/simpleBrowserEditorOverlay.js +19 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.js +23 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/chatLayoutService.d.ts +12 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatLayoutService.js +36 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +36 -35
- package/vscode/src/vs/workbench/contrib/chat/browser/chatPasteProviders.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.d.ts +37 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.js +238 -52
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup.d.ts +23 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup.js +257 -148
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus.js +126 -77
- package/vscode/src/vs/workbench/contrib/chat/browser/chatVariables.d.ts +2 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatVariables.js +3 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.d.ts +4 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.js +55 -45
- package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorContrib.js +6 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorHover.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsService.d.ts +13 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/languageModelToolsService.js +130 -47
- package/vscode/src/vs/workbench/contrib/chat/browser/media/apple-dark.svg +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/media/apple-light.svg +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/media/chatEditingEditorOverlay.css +5 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/media/chatStatus.css +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/attachInstructionsAction.js +9 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/newPromptFileActions.js +39 -35
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptName.js +9 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/askForPromptSourceFolder.js +18 -18
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/pickers/promptFilePickers.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveToPromptAction.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +14 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.d.ts +5 -4
- package/vscode/src/vs/workbench/contrib/chat/common/chatProgressTypes/chatToolInvocation.js +7 -4
- package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.d.ts +4 -8
- package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.js +153 -168
- package/vscode/src/vs/workbench/contrib/chat/common/chatServiceTelemetry.d.ts +127 -1
- package/vscode/src/vs/workbench/contrib/chat/common/chatServiceTelemetry.js +111 -1
- package/vscode/src/vs/workbench/contrib/chat/common/chatSessionStore.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/common/chatTodoListService.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/chat/common/chatTodoListService.js +6 -3
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.d.ts +20 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +66 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptBodyAutocompletion.d.ts +38 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptBodyAutocompletion.js +143 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +12 -3
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.d.ts +8 -3
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.js +41 -8
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderHovers.d.ts +4 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderHovers.js +55 -22
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptLinkDiagnosticsProvider.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/headerBase.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/applyTo.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/base/string.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/base/string.js +5 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/mode.d.ts +3 -3
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/mode.js +3 -4
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/tools.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/promptHeader.d.ts +0 -5
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/promptHeader.js +8 -23
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/topError.js +9 -9
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/promptFileContributions.js +4 -5
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +11 -5
- package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +28 -28
- package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +1 -1
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/aiEditTelemetry/aiEditTelemetryServiceImpl.d.ts +12 -0
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/aiEditTelemetry/aiEditTelemetryServiceImpl.js +54 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +4 -4
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +33 -31
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatCurrentLine.js +9 -9
- package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.d.ts +1 -3
- package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +9 -13
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +16 -16
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +20 -18
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.js +11 -4
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.d.ts +1 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.js +1 -6
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.d.ts +16 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.js +84 -25
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandSimplifier.d.ts +10 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandSimplifier.js +55 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.d.ts +8 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.js +15 -7
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.d.ts +23 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.js +72 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.d.ts +8 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.js +19 -9
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.d.ts +5 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.js +7 -5
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.js +12 -8
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.d.ts +6 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +85 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalToolTelemetry.d.ts +35 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalToolTelemetry.js +448 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/subCommands.d.ts +0 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/subCommands.js +30 -77
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.d.ts +62 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +174 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +75 -10
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.d.ts +15 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +81 -38
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.d.ts +11 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +106 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{getTerminalOutputTool.js → tools/getTerminalOutputTool.js} +5 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.d.ts +11 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +59 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +57 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +452 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.d.ts +45 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.js +23 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/utils.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/utils.js +31 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{runInTerminalTool.d.ts → tools/runInTerminalTool.d.ts} +11 -13
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{runInTerminalTool.js → tools/runInTerminalTool.js} +282 -133
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{task → tools/task}/createAndRunTaskTool.d.ts +5 -5
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{task → tools/task}/createAndRunTaskTool.js +51 -50
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{task → tools/task}/getTaskOutputTool.d.ts +6 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +117 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{task → tools/task}/runTaskTool.d.ts +3 -5
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{task → tools/task}/runTaskTool.js +54 -50
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.d.ts +19 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +36 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminal.chatAgentTools.d.ts +3 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminal.chatAgentTools.js +8 -0
- package/vscode/src/vs/base/common/policy.d.ts +0 -41
- package/vscode/src/vs/base/common/policy.js +0 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.d.ts +0 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions.js +0 -738
- package/vscode/src/vs/workbench/contrib/chat/browser/media/chatSessions.css +0 -42
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptPathAutocompletion.d.ts +0 -67
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptPathAutocompletion.js +0 -167
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/base/enum.d.ts +0 -23
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/base/enum.js +0 -63
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/bufferOutputPolling.d.ts +0 -55
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/bufferOutputPolling.js +0 -163
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/getTaskOutputTool.js +0 -88
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/taskHelpers.d.ts +0 -35
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/taskHelpers.js +0 -80
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task.chatAgentTools.contribution.d.ts +0 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task.chatAgentTools.contribution.js +0 -40
- /package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{getTerminalOutputTool.d.ts → tools/getTerminalOutputTool.d.ts} +0 -0
|
@@ -0,0 +1,452 @@
|
|
|
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 { Emitter } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
|
|
5
|
+
import { MarkdownString } from '@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent';
|
|
6
|
+
import { Disposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
7
|
+
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
8
|
+
import { ExtensionIdentifier } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensions/common/extensions';
|
|
9
|
+
import { ChatElicitationRequestPart } from '@codingame/monaco-vscode-dc3fa21d-a483-5b99-a7ab-173235644a34-common/vscode/vs/workbench/contrib/chat/browser/chatElicitationRequestPart';
|
|
10
|
+
import { ChatModel } from '@codingame/monaco-vscode-c2deffc4-ad68-5e63-8f95-9b89e0fc6898-common/vscode/vs/workbench/contrib/chat/common/chatModel';
|
|
11
|
+
import { IChatService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService.service';
|
|
12
|
+
import { ChatMessageRole } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels';
|
|
13
|
+
import { ILanguageModelsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels.service';
|
|
14
|
+
import { ITaskService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/tasks/common/taskService.service';
|
|
15
|
+
import { OutputMonitorState, PollingConsts } from './types.js';
|
|
16
|
+
import { getTextResponseFromStream } from './utils.js';
|
|
17
|
+
import { IChatWidgetService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chat.service';
|
|
18
|
+
import { ChatAgentLocation } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
|
|
19
|
+
import { isObject, isString } from '@codingame/monaco-vscode-api/vscode/vs/base/common/types';
|
|
20
|
+
import { detectsInputRequiredPattern } from '../../executeStrategy/executeStrategy.js';
|
|
21
|
+
|
|
22
|
+
let OutputMonitor = class OutputMonitor extends Disposable {
|
|
23
|
+
get state() { return this._state; }
|
|
24
|
+
get pollingResult() { return this._pollingResult; }
|
|
25
|
+
get outputMonitorTelemetryCounters() { return this._outputMonitorTelemetryCounters; }
|
|
26
|
+
constructor(_execution, _pollFn, invocationContext, token, command, _languageModelsService, _taskService, _chatService, _chatWidgetService) {
|
|
27
|
+
super();
|
|
28
|
+
this._execution = _execution;
|
|
29
|
+
this._pollFn = _pollFn;
|
|
30
|
+
this._languageModelsService = _languageModelsService;
|
|
31
|
+
this._taskService = _taskService;
|
|
32
|
+
this._chatService = _chatService;
|
|
33
|
+
this._chatWidgetService = _chatWidgetService;
|
|
34
|
+
this._state = OutputMonitorState.PollingForIdle;
|
|
35
|
+
this._outputMonitorTelemetryCounters = {
|
|
36
|
+
inputToolManualAcceptCount: 0,
|
|
37
|
+
inputToolManualRejectCount: 0,
|
|
38
|
+
inputToolManualChars: 0
|
|
39
|
+
};
|
|
40
|
+
this._onDidFinishCommand = this._register(( new Emitter()));
|
|
41
|
+
this.onDidFinishCommand = this._onDidFinishCommand.event;
|
|
42
|
+
timeout(0).then(() => {
|
|
43
|
+
this._startMonitoring(command, invocationContext, token);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
async _startMonitoring(command, invocationContext, token) {
|
|
47
|
+
const pollStartTime = Date.now();
|
|
48
|
+
let modelOutputEvalResponse;
|
|
49
|
+
let resources;
|
|
50
|
+
let extended = false;
|
|
51
|
+
try {
|
|
52
|
+
while (!token.isCancellationRequested) {
|
|
53
|
+
switch (this._state) {
|
|
54
|
+
case OutputMonitorState.PollingForIdle: {
|
|
55
|
+
this._state = await this._waitForIdle(this._execution, extended, token);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
case OutputMonitorState.Timeout: {
|
|
59
|
+
const shouldContinuePolling = await this._handleTimeoutState(command, invocationContext, extended, token);
|
|
60
|
+
if (shouldContinuePolling) {
|
|
61
|
+
extended = true;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
this._promptPart?.hide();
|
|
66
|
+
this._promptPart?.dispose();
|
|
67
|
+
this._promptPart = undefined;
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
case OutputMonitorState.Cancelled:
|
|
72
|
+
break;
|
|
73
|
+
case OutputMonitorState.Idle: {
|
|
74
|
+
const idleResult = await this._handleIdleState(token);
|
|
75
|
+
if (idleResult.shouldContinuePollling) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
resources = idleResult.resources;
|
|
80
|
+
modelOutputEvalResponse = idleResult.modelOutputEvalResponse;
|
|
81
|
+
}
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (this._state === OutputMonitorState.Idle || this._state === OutputMonitorState.Cancelled || this._state === OutputMonitorState.Timeout) {
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (token.isCancellationRequested) {
|
|
90
|
+
this._state = OutputMonitorState.Cancelled;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
this._pollingResult = {
|
|
95
|
+
state: this._state,
|
|
96
|
+
output: this._execution.getOutput(),
|
|
97
|
+
modelOutputEvalResponse: token.isCancellationRequested ? 'Cancelled' : modelOutputEvalResponse,
|
|
98
|
+
pollDurationMs: Date.now() - pollStartTime,
|
|
99
|
+
resources
|
|
100
|
+
};
|
|
101
|
+
this._promptPart?.hide();
|
|
102
|
+
this._promptPart?.dispose();
|
|
103
|
+
this._promptPart = undefined;
|
|
104
|
+
this._onDidFinishCommand.fire();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async _handleIdleState(token) {
|
|
108
|
+
const confirmationPrompt = await this._determineUserInputOptions(this._execution, token);
|
|
109
|
+
const suggestedOption = await this._selectAndHandleOption(confirmationPrompt, token);
|
|
110
|
+
if (confirmationPrompt?.options.length) {
|
|
111
|
+
const confirmed = await this._confirmRunInTerminal(suggestedOption ?? confirmationPrompt.options[0], this._execution, confirmationPrompt);
|
|
112
|
+
if (confirmed) {
|
|
113
|
+
return { shouldContinuePollling: true };
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
this._execution.instance.focus(true);
|
|
117
|
+
return { shouldContinuePollling: false };
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const custom = await this._pollFn?.(this._execution, token, this._taskService);
|
|
121
|
+
const resources = custom?.resources;
|
|
122
|
+
const modelOutputEvalResponse = await this._assessOutputForErrors(this._execution.getOutput(), token);
|
|
123
|
+
return { resources, modelOutputEvalResponse, shouldContinuePollling: false };
|
|
124
|
+
}
|
|
125
|
+
async _handleTimeoutState(command, invocationContext, extended, token) {
|
|
126
|
+
let continuePollingPart;
|
|
127
|
+
if (extended) {
|
|
128
|
+
this._state = OutputMonitorState.Cancelled;
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
extended = true;
|
|
132
|
+
const { promise: p, part } = await this._promptForMorePolling(command, token, invocationContext);
|
|
133
|
+
let continuePollingDecisionP = p;
|
|
134
|
+
continuePollingPart = part;
|
|
135
|
+
const nextPollP = this._waitForIdle(this._execution, extended, token)
|
|
136
|
+
.catch(() => ({
|
|
137
|
+
state: OutputMonitorState.Cancelled,
|
|
138
|
+
output: this._execution.getOutput(),
|
|
139
|
+
modelOutputEvalResponse: 'Cancelled'
|
|
140
|
+
}));
|
|
141
|
+
const race = await Promise.race([
|
|
142
|
+
continuePollingDecisionP.then(v => ({ kind: 'decision', v })),
|
|
143
|
+
nextPollP.then(r => ({ kind: 'poll', r }))
|
|
144
|
+
]);
|
|
145
|
+
if (race.kind === 'decision') {
|
|
146
|
+
try {
|
|
147
|
+
continuePollingPart?.hide();
|
|
148
|
+
continuePollingPart?.dispose?.();
|
|
149
|
+
}
|
|
150
|
+
catch { }
|
|
151
|
+
continuePollingPart = undefined;
|
|
152
|
+
if (race.v === false) {
|
|
153
|
+
this._state = OutputMonitorState.Cancelled;
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
continuePollingDecisionP = undefined;
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
const r = race.r;
|
|
161
|
+
if (r === OutputMonitorState.Idle || r === OutputMonitorState.Cancelled || r === OutputMonitorState.Timeout) {
|
|
162
|
+
try {
|
|
163
|
+
continuePollingPart?.hide();
|
|
164
|
+
continuePollingPart?.dispose?.();
|
|
165
|
+
}
|
|
166
|
+
catch { }
|
|
167
|
+
continuePollingPart = undefined;
|
|
168
|
+
continuePollingDecisionP = undefined;
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async _waitForIdle(execution, extendedPolling, token) {
|
|
175
|
+
const maxWaitMs = extendedPolling ? PollingConsts.ExtendedPollingMaxDuration : PollingConsts.FirstPollingMaxDuration;
|
|
176
|
+
const maxInterval = PollingConsts.MaxPollingIntervalDuration;
|
|
177
|
+
let currentInterval = PollingConsts.MinPollingDuration;
|
|
178
|
+
let waited = 0;
|
|
179
|
+
let consecutiveIdleEvents = 0;
|
|
180
|
+
let hasReceivedData = false;
|
|
181
|
+
let currentOutput;
|
|
182
|
+
let onDataDisposable = Disposable.None;
|
|
183
|
+
try {
|
|
184
|
+
while (!token.isCancellationRequested && waited < maxWaitMs) {
|
|
185
|
+
const waitTime = Math.min(currentInterval, maxWaitMs - waited);
|
|
186
|
+
await timeout(waitTime, token);
|
|
187
|
+
waited += waitTime;
|
|
188
|
+
currentInterval = Math.min(currentInterval * 2, maxInterval);
|
|
189
|
+
if (currentOutput === undefined) {
|
|
190
|
+
currentOutput = execution.getOutput();
|
|
191
|
+
onDataDisposable = execution.instance.onData((data) => {
|
|
192
|
+
hasReceivedData = true;
|
|
193
|
+
currentOutput += data;
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
const promptResult = detectsInputRequiredPattern(currentOutput);
|
|
197
|
+
if (promptResult) {
|
|
198
|
+
this._state = OutputMonitorState.Idle;
|
|
199
|
+
return this._state;
|
|
200
|
+
}
|
|
201
|
+
if (hasReceivedData) {
|
|
202
|
+
consecutiveIdleEvents = 0;
|
|
203
|
+
hasReceivedData = false;
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
consecutiveIdleEvents++;
|
|
207
|
+
}
|
|
208
|
+
const recentlyIdle = consecutiveIdleEvents >= PollingConsts.MinIdleEvents;
|
|
209
|
+
const isActive = execution.isActive ? await execution.isActive() : undefined;
|
|
210
|
+
if (recentlyIdle && isActive === true) {
|
|
211
|
+
consecutiveIdleEvents = 0;
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
if (recentlyIdle || isActive === false) {
|
|
215
|
+
return OutputMonitorState.Idle;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
finally {
|
|
220
|
+
onDataDisposable.dispose();
|
|
221
|
+
}
|
|
222
|
+
if (token.isCancellationRequested) {
|
|
223
|
+
return OutputMonitorState.Cancelled;
|
|
224
|
+
}
|
|
225
|
+
return OutputMonitorState.Timeout;
|
|
226
|
+
}
|
|
227
|
+
async _promptForMorePolling(command, token, context) {
|
|
228
|
+
if (token.isCancellationRequested || this._state === OutputMonitorState.Cancelled) {
|
|
229
|
+
return { promise: Promise.resolve(false) };
|
|
230
|
+
}
|
|
231
|
+
const chatModel = this._chatService.getSession(context.sessionId);
|
|
232
|
+
if (chatModel instanceof ChatModel) {
|
|
233
|
+
const request = chatModel.getRequests().at(-1);
|
|
234
|
+
if (request) {
|
|
235
|
+
let part = undefined;
|
|
236
|
+
const promise = ( new Promise(resolve => {
|
|
237
|
+
const thePart = part = this._register(( new ChatElicitationRequestPart(( new MarkdownString(( localize(11443, "Continue waiting for `{0}`?", command)))), ( new MarkdownString(( localize(
|
|
238
|
+
11444,
|
|
239
|
+
"This will continue to poll for output to determine when the terminal becomes idle for up to 2 minutes."
|
|
240
|
+
)))), '', ( localize(11445, 'Yes')), ( localize(11446, 'No')), async () => {
|
|
241
|
+
thePart.state = 'accepted';
|
|
242
|
+
thePart.hide();
|
|
243
|
+
thePart.dispose();
|
|
244
|
+
this._promptPart = undefined;
|
|
245
|
+
resolve(true);
|
|
246
|
+
}, async () => {
|
|
247
|
+
thePart.state = 'rejected';
|
|
248
|
+
thePart.hide();
|
|
249
|
+
this._state = OutputMonitorState.Cancelled;
|
|
250
|
+
this._promptPart = undefined;
|
|
251
|
+
resolve(false);
|
|
252
|
+
})));
|
|
253
|
+
chatModel.acceptResponseProgress(request, thePart);
|
|
254
|
+
this._promptPart = thePart;
|
|
255
|
+
}));
|
|
256
|
+
return { promise, part };
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return { promise: Promise.resolve(false) };
|
|
260
|
+
}
|
|
261
|
+
async _assessOutputForErrors(buffer, token) {
|
|
262
|
+
const models = await this._languageModelsService.selectLanguageModels({ vendor: 'copilot', family: 'gpt-4o-mini' });
|
|
263
|
+
if (!models.length) {
|
|
264
|
+
return 'No models available';
|
|
265
|
+
}
|
|
266
|
+
const response = await this._languageModelsService.sendChatRequest(models[0], ( new ExtensionIdentifier('core')), [{ role: ChatMessageRole.User, content: [{ type: 'text', value: `Evaluate this terminal output to determine if there were errors. If there are errors, return them. Otherwise, return undefined: ${buffer}.` }] }], {}, token);
|
|
267
|
+
try {
|
|
268
|
+
const responseFromStream = getTextResponseFromStream(response);
|
|
269
|
+
await Promise.all([response.result, responseFromStream]);
|
|
270
|
+
return await responseFromStream;
|
|
271
|
+
}
|
|
272
|
+
catch (err) {
|
|
273
|
+
return 'Error occurred ' + err;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
async _determineUserInputOptions(execution, token) {
|
|
277
|
+
if (token.isCancellationRequested) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
const models = await this._languageModelsService.selectLanguageModels({ vendor: 'copilot', family: 'gpt-4o-mini' });
|
|
281
|
+
if (!models.length) {
|
|
282
|
+
return undefined;
|
|
283
|
+
}
|
|
284
|
+
const lastFiveLines = execution.getOutput(this._lastPromptMarker).trimEnd().split('\n').slice(-5).join('\n');
|
|
285
|
+
const promptText = `Analyze the following terminal output. If it contains a prompt requesting user input (such as a confirmation, selection, or yes/no question) and that prompt has NOT already been answered, extract the prompt text and the possible options as a JSON object with keys 'prompt' and 'options' (an array of strings or an object with option to description mappings). For example, if the options are "[Y] Yes [A] Yes to All [N] No [L] No to All [C] Cancel", the option to description mappings would be {"Y": "Yes", "A": "Yes to All", "N": "No", "L": "No to All", "C": "Cancel"}. If there is no such prompt, return null.
|
|
286
|
+
Examples:
|
|
287
|
+
1. Output: "Do you want to overwrite? (y/n)"
|
|
288
|
+
Response: {"prompt": "Do you want to overwrite?", "options": ["y", "n"]}
|
|
289
|
+
|
|
290
|
+
2. Output: "Confirm: [Y] Yes [A] Yes to All [N] No [L] No to All [C] Cancel"
|
|
291
|
+
Response: {"prompt": "Confirm", "options": ["Y", "A", "N", "L", "C"]}
|
|
292
|
+
|
|
293
|
+
3. Output: "Accept license terms? (yes/no)"
|
|
294
|
+
Response: {"prompt": "Accept license terms?", "options": ["yes", "no"]}
|
|
295
|
+
|
|
296
|
+
4. Output: "Press Enter to continue"
|
|
297
|
+
Response: {"prompt": "Press Enter to continue", "options": ["Enter"]}
|
|
298
|
+
|
|
299
|
+
5. Output: "Type Yes to proceed"
|
|
300
|
+
Response: {"prompt": "Type Yes to proceed", "options": ["Yes"]}
|
|
301
|
+
|
|
302
|
+
6. Output: "Continue [y/N]"
|
|
303
|
+
Response: {"prompt": "Continue", "options": ["y", "N"]}
|
|
304
|
+
|
|
305
|
+
Now, analyze this output:
|
|
306
|
+
${lastFiveLines}
|
|
307
|
+
`;
|
|
308
|
+
const response = await this._languageModelsService.sendChatRequest(models[0], ( new ExtensionIdentifier('core')), [
|
|
309
|
+
{ role: ChatMessageRole.User, content: [{ type: 'text', value: promptText }] }
|
|
310
|
+
], {}, token);
|
|
311
|
+
const responseText = await getTextResponseFromStream(response);
|
|
312
|
+
try {
|
|
313
|
+
const match = responseText.match(/\{[\s\S]*\}/);
|
|
314
|
+
if (match) {
|
|
315
|
+
const obj = JSON.parse(match[0]);
|
|
316
|
+
if (isObject(obj) &&
|
|
317
|
+
'prompt' in obj && isString(obj.prompt) &&
|
|
318
|
+
'options' in obj) {
|
|
319
|
+
if (Array.isArray(obj.options) && obj.options.every(isString)) {
|
|
320
|
+
return { prompt: obj.prompt, options: obj.options };
|
|
321
|
+
}
|
|
322
|
+
else if (isObject(obj.options) && ( Object.values(obj.options)).every(isString)) {
|
|
323
|
+
return { prompt: obj.prompt, options: ( Object.keys(obj.options)), descriptions: ( Object.values(obj.options)) };
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
catch (err) {
|
|
329
|
+
console.error('Failed to parse confirmation prompt from language model response:', err);
|
|
330
|
+
}
|
|
331
|
+
return undefined;
|
|
332
|
+
}
|
|
333
|
+
async _selectAndHandleOption(confirmationPrompt, token) {
|
|
334
|
+
if (!confirmationPrompt?.options.length) {
|
|
335
|
+
return undefined;
|
|
336
|
+
}
|
|
337
|
+
const model = this._chatWidgetService.getWidgetsByLocations(ChatAgentLocation.Panel)[0]?.input.currentLanguageModel;
|
|
338
|
+
if (!model) {
|
|
339
|
+
return undefined;
|
|
340
|
+
}
|
|
341
|
+
const models = await this._languageModelsService.selectLanguageModels({ vendor: 'copilot', family: model.replaceAll('copilot/', '') });
|
|
342
|
+
if (!models.length) {
|
|
343
|
+
return undefined;
|
|
344
|
+
}
|
|
345
|
+
const prompt = confirmationPrompt.prompt;
|
|
346
|
+
const options = confirmationPrompt.options;
|
|
347
|
+
const currentMarker = this._execution.instance.registerMarker();
|
|
348
|
+
if (!currentMarker) {
|
|
349
|
+
return undefined;
|
|
350
|
+
}
|
|
351
|
+
if (this._lastPrompt === prompt) {
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
this._lastPromptMarker = currentMarker;
|
|
355
|
+
this._lastPrompt = prompt;
|
|
356
|
+
const promptText = `Given the following confirmation prompt and options from a terminal output, which option is the default?\nPrompt: "${prompt}"\nOptions: ${JSON.stringify(options)}\nRespond with only the option string.`;
|
|
357
|
+
const response = await this._languageModelsService.sendChatRequest(models[0], ( new ExtensionIdentifier('core')), [
|
|
358
|
+
{ role: ChatMessageRole.User, content: [{ type: 'text', value: promptText }] }
|
|
359
|
+
], {}, token);
|
|
360
|
+
const suggestedOption = (await getTextResponseFromStream(response)).trim();
|
|
361
|
+
if (suggestedOption) {
|
|
362
|
+
const index = confirmationPrompt.options.indexOf(suggestedOption);
|
|
363
|
+
const validOption = confirmationPrompt.options.find(opt => suggestedOption.replace(/['"`]/g, '').trim() === opt.replace(/['"`]/g, '').trim());
|
|
364
|
+
if (validOption && index > -1) {
|
|
365
|
+
const description = confirmationPrompt.descriptions?.[index];
|
|
366
|
+
return description ? { description, option: validOption } : validOption;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return undefined;
|
|
370
|
+
}
|
|
371
|
+
async _confirmRunInTerminal(suggestedOption, execution, confirmationPrompt) {
|
|
372
|
+
const chatModel = this._chatService.getSession(execution.sessionId);
|
|
373
|
+
if (!(chatModel instanceof ChatModel)) {
|
|
374
|
+
return undefined;
|
|
375
|
+
}
|
|
376
|
+
const request = chatModel.getRequests().at(-1);
|
|
377
|
+
if (!request) {
|
|
378
|
+
return undefined;
|
|
379
|
+
}
|
|
380
|
+
const suggestedOptionValue = typeof suggestedOption === 'string' ? suggestedOption : suggestedOption.option;
|
|
381
|
+
const userPrompt = ( new Promise(resolve => {
|
|
382
|
+
const thePart = this._register(( new ChatElicitationRequestPart(( new MarkdownString(( localize(11447, "The terminal is awaiting input.")))), ( new MarkdownString(( localize(
|
|
383
|
+
11448,
|
|
384
|
+
"{0}\n Do you want to send `{1}`{2} followed by `Enter` to the terminal?",
|
|
385
|
+
confirmationPrompt.prompt,
|
|
386
|
+
suggestedOptionValue,
|
|
387
|
+
typeof suggestedOption === 'string' ? '' : suggestedOption.description ? ' (' + suggestedOption.description + ')' : ''
|
|
388
|
+
)))), '', ( localize(11449, 'Allow')), ( localize(11450, 'Focus Terminal')), async (value) => {
|
|
389
|
+
thePart.state = 'accepted';
|
|
390
|
+
thePart.hide();
|
|
391
|
+
thePart.dispose();
|
|
392
|
+
let option = undefined;
|
|
393
|
+
if (value === true) {
|
|
394
|
+
option = suggestedOptionValue;
|
|
395
|
+
}
|
|
396
|
+
else if (typeof value === 'object' && 'label' in value) {
|
|
397
|
+
option = value.label.split(' (')[0];
|
|
398
|
+
}
|
|
399
|
+
this._outputMonitorTelemetryCounters.inputToolManualAcceptCount++;
|
|
400
|
+
this._outputMonitorTelemetryCounters.inputToolManualChars += option?.length || 0;
|
|
401
|
+
resolve(option);
|
|
402
|
+
}, async () => {
|
|
403
|
+
thePart.state = 'rejected';
|
|
404
|
+
thePart.hide();
|
|
405
|
+
this._state = OutputMonitorState.Cancelled;
|
|
406
|
+
this._outputMonitorTelemetryCounters.inputToolManualRejectCount++;
|
|
407
|
+
inputDataDisposable.dispose();
|
|
408
|
+
resolve(undefined);
|
|
409
|
+
}, undefined, getMoreActions(suggestedOption, confirmationPrompt))));
|
|
410
|
+
const inputDataDisposable = this._register(execution.instance.onDidInputData(() => {
|
|
411
|
+
thePart.hide();
|
|
412
|
+
thePart.dispose();
|
|
413
|
+
inputDataDisposable.dispose();
|
|
414
|
+
this._state = OutputMonitorState.PollingForIdle;
|
|
415
|
+
resolve(undefined);
|
|
416
|
+
}));
|
|
417
|
+
chatModel.acceptResponseProgress(request, thePart);
|
|
418
|
+
}));
|
|
419
|
+
const optionToRun = await userPrompt;
|
|
420
|
+
if (optionToRun) {
|
|
421
|
+
await execution.instance.sendText(optionToRun, true);
|
|
422
|
+
}
|
|
423
|
+
return optionToRun;
|
|
424
|
+
}
|
|
425
|
+
};
|
|
426
|
+
OutputMonitor = ( __decorate([
|
|
427
|
+
( __param(5, ILanguageModelsService)),
|
|
428
|
+
( __param(6, ITaskService)),
|
|
429
|
+
( __param(7, IChatService)),
|
|
430
|
+
( __param(8, IChatWidgetService))
|
|
431
|
+
], OutputMonitor));
|
|
432
|
+
function getMoreActions(suggestedOption, confirmationPrompt) {
|
|
433
|
+
const moreActions = [];
|
|
434
|
+
const moreOptions = confirmationPrompt.options.filter(a => a !== (typeof suggestedOption === 'string' ? suggestedOption : suggestedOption.option));
|
|
435
|
+
let i = 0;
|
|
436
|
+
for (const option of moreOptions) {
|
|
437
|
+
const label = option + (confirmationPrompt.descriptions ? ' (' + confirmationPrompt.descriptions[i] + ')' : '');
|
|
438
|
+
const action = {
|
|
439
|
+
label,
|
|
440
|
+
tooltip: label,
|
|
441
|
+
id: `terminal.poll.send.${option}`,
|
|
442
|
+
class: undefined,
|
|
443
|
+
enabled: true,
|
|
444
|
+
run: async () => { }
|
|
445
|
+
};
|
|
446
|
+
i++;
|
|
447
|
+
moreActions.push(action);
|
|
448
|
+
}
|
|
449
|
+
return moreActions.length ? moreActions : undefined;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
export { OutputMonitor };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Task } from "@codingame/monaco-vscode-05a2a821-e4de-5941-b7f9-bbf01c09f229-common/vscode/vs/workbench/contrib/tasks/common/taskService";
|
|
2
|
+
import type { ITerminalInstance } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminal/browser/terminal";
|
|
3
|
+
import type { ILinkLocation } from "../../taskHelpers.js";
|
|
4
|
+
import type { IMarker as XtermMarker } from "@xterm/xterm";
|
|
5
|
+
export interface IConfirmationPrompt {
|
|
6
|
+
prompt: string;
|
|
7
|
+
options: string[];
|
|
8
|
+
descriptions?: string[];
|
|
9
|
+
}
|
|
10
|
+
export interface IExecution {
|
|
11
|
+
getOutput: (marker?: XtermMarker) => string;
|
|
12
|
+
isActive?: () => Promise<boolean>;
|
|
13
|
+
task?: Task | Pick<Task, "configurationProperties">;
|
|
14
|
+
instance: Pick<ITerminalInstance, "sendText" | "instanceId" | "onDidInputData" | "onData" | "focus" | "registerMarker">;
|
|
15
|
+
sessionId: string;
|
|
16
|
+
}
|
|
17
|
+
export interface IPollingResult {
|
|
18
|
+
output: string;
|
|
19
|
+
resources?: ILinkLocation[];
|
|
20
|
+
modelOutputEvalResponse?: string;
|
|
21
|
+
state: OutputMonitorState;
|
|
22
|
+
}
|
|
23
|
+
export declare enum OutputMonitorState {
|
|
24
|
+
Initial = "Initial",
|
|
25
|
+
Idle = "Idle",
|
|
26
|
+
PollingForIdle = "PollingForIdle",
|
|
27
|
+
Prompting = "Prompting",
|
|
28
|
+
Timeout = "Timeout",
|
|
29
|
+
Active = "Active",
|
|
30
|
+
Cancelled = "Cancelled"
|
|
31
|
+
}
|
|
32
|
+
export interface IRacePollingOrPromptResult {
|
|
33
|
+
output: string;
|
|
34
|
+
pollDurationMs?: number;
|
|
35
|
+
modelOutputEvalResponse?: string;
|
|
36
|
+
state: OutputMonitorState;
|
|
37
|
+
}
|
|
38
|
+
export declare enum PollingConsts {
|
|
39
|
+
MinIdleEvents = 2,// Minimum number of idle checks before considering the terminal idle
|
|
40
|
+
MinPollingDuration = 500,
|
|
41
|
+
FirstPollingMaxDuration = 20000,// 20 seconds
|
|
42
|
+
ExtendedPollingMaxDuration = 120000,// 2 minutes
|
|
43
|
+
MaxPollingIntervalDuration = 2000,// 2 seconds
|
|
44
|
+
MaxRecursionCount = 5
|
|
45
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
var OutputMonitorState;
|
|
4
|
+
(function (OutputMonitorState) {
|
|
5
|
+
OutputMonitorState["Initial"] = "Initial";
|
|
6
|
+
OutputMonitorState["Idle"] = "Idle";
|
|
7
|
+
OutputMonitorState["PollingForIdle"] = "PollingForIdle";
|
|
8
|
+
OutputMonitorState["Prompting"] = "Prompting";
|
|
9
|
+
OutputMonitorState["Timeout"] = "Timeout";
|
|
10
|
+
OutputMonitorState["Active"] = "Active";
|
|
11
|
+
OutputMonitorState["Cancelled"] = "Cancelled";
|
|
12
|
+
})(OutputMonitorState || (OutputMonitorState = {}));
|
|
13
|
+
var PollingConsts;
|
|
14
|
+
(function (PollingConsts) {
|
|
15
|
+
PollingConsts[PollingConsts["MinIdleEvents"] = 2] = "MinIdleEvents";
|
|
16
|
+
PollingConsts[PollingConsts["MinPollingDuration"] = 500] = "MinPollingDuration";
|
|
17
|
+
PollingConsts[PollingConsts["FirstPollingMaxDuration"] = 20000] = "FirstPollingMaxDuration";
|
|
18
|
+
PollingConsts[PollingConsts["ExtendedPollingMaxDuration"] = 120000] = "ExtendedPollingMaxDuration";
|
|
19
|
+
PollingConsts[PollingConsts["MaxPollingIntervalDuration"] = 2000] = "MaxPollingIntervalDuration";
|
|
20
|
+
PollingConsts[PollingConsts["MaxRecursionCount"] = 5] = "MaxRecursionCount";
|
|
21
|
+
})(PollingConsts || (PollingConsts = {}));
|
|
22
|
+
|
|
23
|
+
export { OutputMonitorState, PollingConsts };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
async function getTextResponseFromStream(response) {
|
|
4
|
+
let responseText = '';
|
|
5
|
+
const streaming = (async () => {
|
|
6
|
+
if (!response || !response.stream) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
for await (const part of response.stream) {
|
|
10
|
+
if (Array.isArray(part)) {
|
|
11
|
+
for (const p of part) {
|
|
12
|
+
if (p.type === 'text') {
|
|
13
|
+
responseText += p.value;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
else if (part.type === 'text') {
|
|
18
|
+
responseText += part.value;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
})();
|
|
22
|
+
try {
|
|
23
|
+
await Promise.all([response.result, streaming]);
|
|
24
|
+
return responseText;
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
return 'Error occurred ' + err;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { getTextResponseFromStream };
|
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
import { CancellationToken } from "@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation";
|
|
2
2
|
import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
|
|
3
3
|
import { OperatingSystem } from "@codingame/monaco-vscode-api/vscode/vs/base/common/platform";
|
|
4
|
+
import { IConfigurationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service";
|
|
4
5
|
import { IInstantiationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation";
|
|
5
6
|
import { IStorageService } from "@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage.service";
|
|
6
|
-
import { ITelemetryService } from "@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service";
|
|
7
7
|
import { ITerminalLogService } from "@codingame/monaco-vscode-api/vscode/vs/platform/terminal/common/terminal.service";
|
|
8
|
-
import { IWorkspaceContextService } from "@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspace.service";
|
|
9
8
|
import { IRemoteAgentService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/remote/common/remoteAgentService.service";
|
|
10
9
|
import { IChatService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService.service";
|
|
11
|
-
import { ILanguageModelsService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels.service";
|
|
12
10
|
import { CountTokensCallback, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolInvocationPreparationContext, IToolResult, ToolProgress } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService";
|
|
13
11
|
import { ILanguageModelToolsService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModelToolsService.service";
|
|
14
|
-
import { type ITerminalInstance } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminal/browser/terminal";
|
|
15
12
|
import { ITerminalService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminal/browser/terminal.service";
|
|
16
13
|
import { ITerminalProfileResolverService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminal/common/terminal.service";
|
|
17
|
-
import { CommandLineAutoApprover } from "
|
|
18
|
-
import { type IToolTerminal } from "
|
|
14
|
+
import { CommandLineAutoApprover } from "../commandLineAutoApprover.js";
|
|
15
|
+
import { type IToolTerminal } from "../toolTerminalCreator.js";
|
|
19
16
|
export declare const RunInTerminalToolData: IToolData;
|
|
20
17
|
export interface IRunInTerminalInputParams {
|
|
21
18
|
command: string;
|
|
@@ -24,32 +21,33 @@ export interface IRunInTerminalInputParams {
|
|
|
24
21
|
}
|
|
25
22
|
export declare class RunInTerminalTool extends Disposable implements IToolImpl {
|
|
26
23
|
private readonly _instantiationService;
|
|
24
|
+
private readonly _configurationService;
|
|
27
25
|
private readonly _languageModelToolsService;
|
|
28
26
|
private readonly _storageService;
|
|
29
|
-
private readonly _telemetryService;
|
|
30
27
|
private readonly _logService;
|
|
31
28
|
private readonly _terminalProfileResolverService;
|
|
32
29
|
private readonly _terminalService;
|
|
33
30
|
private readonly _remoteAgentService;
|
|
34
31
|
private readonly _chatService;
|
|
35
|
-
private readonly
|
|
36
|
-
private readonly
|
|
32
|
+
private readonly _terminalToolCreator;
|
|
33
|
+
private readonly _commandSimplifier;
|
|
34
|
+
private readonly _telemetry;
|
|
37
35
|
protected readonly _commandLineAutoApprover: CommandLineAutoApprover;
|
|
38
36
|
protected readonly _sessionTerminalAssociations: Map<string, IToolTerminal>;
|
|
39
37
|
protected readonly _osBackend: Promise<OperatingSystem>;
|
|
40
|
-
private _alternativeRecommendation?;
|
|
41
38
|
private static readonly _backgroundExecutions;
|
|
42
39
|
static getBackgroundOutput(id: string): string;
|
|
43
|
-
constructor(_instantiationService: IInstantiationService, _languageModelToolsService: ILanguageModelToolsService, _storageService: IStorageService,
|
|
40
|
+
constructor(_instantiationService: IInstantiationService, _configurationService: IConfigurationService, _languageModelToolsService: ILanguageModelToolsService, _storageService: IStorageService, _logService: ITerminalLogService, _terminalProfileResolverService: ITerminalProfileResolverService, _terminalService: ITerminalService, _remoteAgentService: IRemoteAgentService, _chatService: IChatService);
|
|
44
41
|
prepareToolInvocation(context: IToolInvocationPreparationContext, token: CancellationToken): Promise<IPreparedToolInvocation | undefined>;
|
|
45
42
|
invoke(invocation: IToolInvocation, _countTokens: CountTokensCallback, _progress: ToolProgress, token: CancellationToken): Promise<IToolResult>;
|
|
43
|
+
private _getCopilotShell;
|
|
46
44
|
private _initBackgroundTerminal;
|
|
47
45
|
private _initForegroundTerminal;
|
|
48
|
-
|
|
46
|
+
private _registerInputListener;
|
|
49
47
|
private _restoreTerminalAssociations;
|
|
50
48
|
private _setupProcessIdAssociation;
|
|
51
49
|
private _associateProcessIdWithSession;
|
|
52
50
|
private _removeProcessIdAssociation;
|
|
53
51
|
private _cleanupSessionTerminals;
|
|
54
|
-
private
|
|
52
|
+
private _createAutoApproveInfo;
|
|
55
53
|
}
|