@codingame/monaco-vscode-chat-service-override 26.2.2 → 27.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 +31 -1
- package/package.json +5 -5
- package/vscode/src/vs/platform/browserElements/common/browserElements.d.ts +15 -0
- package/vscode/src/vs/sessions/contrib/agentFeedback/browser/agentFeedbackService.d.ts +53 -0
- package/vscode/src/vs/sessions/contrib/agentFeedback/browser/agentFeedbackService.js +219 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/aiCustomizationWorkspaceService.d.ts +39 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/aiCustomizationWorkspaceService.js +83 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/newSession.d.ts +123 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/newSession.js +274 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/sessionsConfigurationService.d.ts +71 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/sessionsConfigurationService.js +284 -0
- package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.d.ts +79 -0
- package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.js +378 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.d.ts +1 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.js +27 -40
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.d.ts +9 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.js +74 -18
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +54 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +87 -53
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +71 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +43 -21
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +22 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatForkActions.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatForkActions.js +154 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +6 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +13 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +53 -43
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatOpenAgentDebugPanelAction.d.ts +4 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatOpenAgentDebugPanelAction.js +84 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.js +33 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQueueActions.js +15 -29
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.d.ts +13 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +16 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +18 -18
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.d.ts +33 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.js +204 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.d.ts +77 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.js +541 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +10 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +70 -65
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.d.ts +7 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +27 -18
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +4 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +90 -51
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +20 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +43 -27
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agenttitlebarstatuswidget.css +7 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +84 -22
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/{localAgentSessionsProvider.d.ts → localAgentSessionsController.d.ts} +7 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/{localAgentSessionsProvider.js → localAgentSessionsController.js} +24 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.d.ts +23 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationDebugPanel.js +171 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.d.ts +48 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.js +19 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.d.ts +181 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.js +943 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.contribution.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.contribution.js +248 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.d.ts +57 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.js +27 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.d.ts +118 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.js +727 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.d.ts +22 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditorInput.js +38 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWorkspaceService.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationWorkspaceService.js +72 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCreatorService.d.ts +45 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/customizationCreatorService.js +165 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.d.ts +75 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/mcpListWidget.js +623 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationManagement.css +858 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +30 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgetRegistry.d.ts +32 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentWidgetRegistry.js +26 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatVariables.js +19 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/simpleBrowserEditorOverlay.js +36 -26
- package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +529 -363
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.d.ts +18 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatCustomizationDiscoveryRenderer.js +419 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCollapsible.d.ts +12 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugCollapsible.js +46 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.d.ts +34 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugDetailPanel.js +198 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditor.d.ts +55 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditor.js +305 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditorInput.d.ts +23 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEditorInput.js +64 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.d.ts +5 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventDetailRenderer.js +84 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.d.ts +27 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugEventList.js +110 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.d.ts +34 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.js +111 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowChartView.d.ts +71 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowChartView.js +611 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.d.ts +125 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowGraph.js +504 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowLayout.d.ts +10 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFlowLayout.js +914 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHomeView.d.ts +19 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugHomeView.js +128 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.d.ts +58 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.js +429 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.d.ts +31 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugMessageContentRenderer.js +113 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.d.ts +14 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugModelTurnContentRenderer.js +126 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.d.ts +38 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugOverviewView.js +279 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.d.ts +18 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugToolCallContentRenderer.js +122 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugTypes.d.ts +45 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugTypes.js +85 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/media/chatDebug.css +781 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +5 -22
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +2 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.js +16 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +63 -76
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.js +26 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/media/chatManagementEditor.css +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +30 -30
- package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.d.ts +15 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +40 -413
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.d.ts +10 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetup.js +38 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.d.ts +5 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +56 -46
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +15 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.d.ts +52 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupGrowthSession.js +138 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.d.ts +11 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +166 -41
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.d.ts +6 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +37 -23
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.d.ts +15 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.js +351 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.js +118 -63
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/media/chatStatus.css +28 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.d.ts +182 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +892 -41
- package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.d.ts +5 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +55 -25
- package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.js +28 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/createSlashCommandsUsageTracker.d.ts +14 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/createSlashCommandsUsageTracker.js +62 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/defaultModelContribution.d.ts +36 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/defaultModelContribution.js +110 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/exploreAgentDefaultModel.d.ts +10 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/exploreAgentDefaultModel.js +39 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.d.ts +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/planAgentDefaultModel.d.ts +10 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/planAgentDefaultModel.js +39 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.d.ts +27 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.js +102 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.d.ts +16 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.js +69 -47
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.js +2 -41
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.d.ts +4 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.d.ts +4 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/skillActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.d.ts +22 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptsDebugContribution.js +76 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/sessionResourceMatching.d.ts +5 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/sessionResourceMatching.js +30 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +43 -31
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +67 -42
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.d.ts +31 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/renameTool.js +242 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolHelpers.d.ts +34 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolHelpers.js +45 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +13 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.d.ts +33 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/usagesTool.js +311 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.d.ts +4 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.js +10 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.js +10 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.js +8 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +64 -26
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +4 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/chatQuick.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.d.ts +15 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +42 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.d.ts +8 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +58 -31
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +6 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewPane.css +8 -20
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewTitleControl.css +15 -6
- package/vscode/src/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.d.ts +39 -0
- package/vscode/src/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.js +27 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatDebugService.d.ts +190 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatDebugService.js +11 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.d.ts +36 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.js +188 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +18 -8
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +192 -85
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +2 -1
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.d.ts +5 -6
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.js +16 -8
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.d.ts +8 -4
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +111 -7
- package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.d.ts +52 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.js +29 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.d.ts +73 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.js +622 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.d.ts +64 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.js +478 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +35 -16
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCompatibility.js +1 -30
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.d.ts +0 -5
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.js +2 -8
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +9 -9
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +23 -22
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +44 -14
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +345 -113
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +14 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +34 -24
- package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.d.ts +3 -0
- package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.js +13 -0
- package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +1 -1
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +11 -5
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +23 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +248 -24
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.d.ts +6 -11
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +18 -81
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.js +2 -3
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +10 -10
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.js +14 -14
- package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +1 -1
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +10 -10
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +6 -6
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +1 -1
- package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +7 -7
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/media/terminalChatWidget.css +6 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +16 -16
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +35 -26
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.d.ts +0 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.js +1 -5
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +6 -6
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.d.ts +4 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +13 -11
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +3 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +12 -12
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +2 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +9 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +280 -65
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/outputAnalyzer.d.ts +8 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +2 -10
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +47 -19
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sandboxOutputAnalyzer.d.ts +8 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/sandboxOutputAnalyzer.js +31 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +14 -14
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +7 -7
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +14 -14
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.d.ts +6 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +38 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.d.ts +0 -72
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.js +0 -587
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.d.ts +0 -71
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.js +0 -293
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/utils.d.ts +0 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/utils.js +0 -31
|
@@ -13,21 +13,41 @@ import { ChatModel } from '@codingame/monaco-vscode-api/vscode/vs/workbench/cont
|
|
|
13
13
|
import { ElicitationState } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService/chatService';
|
|
14
14
|
import { IChatService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService/chatService.service';
|
|
15
15
|
import { ChatAgentLocation } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
|
|
16
|
-
import { ChatMessageRole } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels';
|
|
16
|
+
import { ChatMessageRole, getTextResponseFromStream } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels';
|
|
17
17
|
import { ILanguageModelsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels.service';
|
|
18
18
|
import { ITaskService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/tasks/common/taskService.service';
|
|
19
19
|
import { OutputMonitorState, PollingConsts } from './types.js';
|
|
20
|
-
import { getTextResponseFromStream } from './utils.js';
|
|
21
20
|
import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
|
|
22
21
|
import { TerminalChatAgentToolsSettingId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration';
|
|
23
22
|
import { ITerminalService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminal/browser/terminal.service';
|
|
24
|
-
import { LocalChatSessionUri } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/model/chatUri';
|
|
25
23
|
import { ITerminalLogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/terminal/common/terminal.service';
|
|
26
24
|
|
|
27
25
|
let OutputMonitor = class OutputMonitor extends Disposable {
|
|
28
26
|
get state() {
|
|
29
27
|
return this._state;
|
|
30
28
|
}
|
|
29
|
+
_formatLastLineForLog(output) {
|
|
30
|
+
if (!output) {
|
|
31
|
+
return "<empty>";
|
|
32
|
+
}
|
|
33
|
+
const lastLine = output.trimEnd().split(/\r?\n/).pop() ?? "";
|
|
34
|
+
if (!lastLine) {
|
|
35
|
+
return "<empty>";
|
|
36
|
+
}
|
|
37
|
+
if (this._isSensitivePrompt(lastLine)) {
|
|
38
|
+
return "<redacted>";
|
|
39
|
+
}
|
|
40
|
+
return lastLine.length > 200 ? lastLine.slice(0, 200) + "…" : lastLine;
|
|
41
|
+
}
|
|
42
|
+
_formatOptionsForLog(options) {
|
|
43
|
+
if (!options.length) {
|
|
44
|
+
return "[]";
|
|
45
|
+
}
|
|
46
|
+
const maxOptions = 12;
|
|
47
|
+
const shown = ( options.slice(0, maxOptions).map(o => o.replace(/\r?\n/g, "return")));
|
|
48
|
+
const suffix = options.length > maxOptions ? `, …(+${options.length - maxOptions})` : "";
|
|
49
|
+
return `[${shown.join(", ")}${suffix}]`;
|
|
50
|
+
}
|
|
31
51
|
get pollingResult() {
|
|
32
52
|
return this._pollingResult;
|
|
33
53
|
}
|
|
@@ -88,11 +108,16 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
88
108
|
switch (this._state) {
|
|
89
109
|
case OutputMonitorState.PollingForIdle:
|
|
90
110
|
{
|
|
111
|
+
this._logService.trace(`OutputMonitor: Entering PollingForIdle (extended=${extended})`);
|
|
91
112
|
this._state = await this._waitForIdle(this._execution, extended, token);
|
|
113
|
+
this._logService.trace(
|
|
114
|
+
`OutputMonitor: PollingForIdle completed -> state=${OutputMonitorState[this._state]}`
|
|
115
|
+
);
|
|
92
116
|
continue;
|
|
93
117
|
}
|
|
94
118
|
case OutputMonitorState.Timeout:
|
|
95
119
|
{
|
|
120
|
+
this._logService.trace(`OutputMonitor: Entering Timeout state (extended=${extended})`);
|
|
96
121
|
const shouldContinuePolling = await this._handleTimeoutState(command, invocationContext, extended, token);
|
|
97
122
|
if (shouldContinuePolling) {
|
|
98
123
|
extended = true;
|
|
@@ -108,11 +133,16 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
108
133
|
break;
|
|
109
134
|
case OutputMonitorState.Idle:
|
|
110
135
|
{
|
|
136
|
+
this._logService.trace("OutputMonitor: Entering Idle handler");
|
|
111
137
|
const idleResult = await this._handleIdleState(token);
|
|
112
138
|
if (idleResult.shouldContinuePollling) {
|
|
139
|
+
this._logService.trace("OutputMonitor: Idle handler -> continue polling");
|
|
113
140
|
this._state = OutputMonitorState.PollingForIdle;
|
|
114
141
|
continue;
|
|
115
142
|
} else {
|
|
143
|
+
this._logService.trace(
|
|
144
|
+
`OutputMonitor: Idle handler -> stop polling (hasResources=${!!idleResult.resources}, hasModelEval=${!!idleResult.modelOutputEvalResponse}, outputLen=${idleResult.output?.length ?? 0})`
|
|
145
|
+
);
|
|
116
146
|
resources = idleResult.resources;
|
|
117
147
|
modelOutputEvalResponse = idleResult.modelOutputEvalResponse;
|
|
118
148
|
output = idleResult.output;
|
|
@@ -128,6 +158,9 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
128
158
|
this._state = OutputMonitorState.Cancelled;
|
|
129
159
|
}
|
|
130
160
|
} finally {
|
|
161
|
+
this._logService.trace(
|
|
162
|
+
`OutputMonitor: Monitoring finished (state=${OutputMonitorState[this._state]}, duration=${Date.now() - pollStartTime}ms)`
|
|
163
|
+
);
|
|
131
164
|
this._pollingResult = {
|
|
132
165
|
state: this._state,
|
|
133
166
|
output: output ?? this._execution.getOutput(),
|
|
@@ -150,7 +183,11 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
150
183
|
}
|
|
151
184
|
async _handleIdleState(token) {
|
|
152
185
|
const output = this._execution.getOutput(this._lastPromptMarker);
|
|
186
|
+
this._logService.trace(
|
|
187
|
+
`OutputMonitor: Idle output summary: len=${output.length}, lastLine=${this._formatLastLineForLog(output)}`
|
|
188
|
+
);
|
|
153
189
|
if (detectsNonInteractiveHelpPattern(output)) {
|
|
190
|
+
this._logService.trace("OutputMonitor: Idle -> non-interactive help pattern detected, stopping");
|
|
154
191
|
return {
|
|
155
192
|
shouldContinuePollling: false,
|
|
156
193
|
output
|
|
@@ -159,12 +196,18 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
159
196
|
const isTask = this._execution.task !== undefined;
|
|
160
197
|
const isTaskInactive = this._execution.isActive ? !(await this._execution.isActive()) : true;
|
|
161
198
|
if (isTask && isTaskInactive && detectsVSCodeTaskFinishMessage(output)) {
|
|
199
|
+
this._logService.trace(
|
|
200
|
+
"OutputMonitor: Idle -> VS Code task finish message detected for inactive task, stopping"
|
|
201
|
+
);
|
|
162
202
|
return {
|
|
163
203
|
shouldContinuePollling: false,
|
|
164
204
|
output
|
|
165
205
|
};
|
|
166
206
|
}
|
|
167
207
|
if ((!isTask || !isTaskInactive) && detectsGenericPressAnyKeyPattern(output)) {
|
|
208
|
+
this._logService.trace(
|
|
209
|
+
"OutputMonitor: Idle -> generic \"press any key\" detected, requesting free-form input"
|
|
210
|
+
);
|
|
168
211
|
const currentMarker = this._execution.instance.registerMarker();
|
|
169
212
|
if (currentMarker) {
|
|
170
213
|
this._lastPromptMarker = currentMarker;
|
|
@@ -178,24 +221,38 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
178
221
|
detectedRequestForFreeFormInput: true
|
|
179
222
|
}, true );
|
|
180
223
|
if (receivedTerminalInput) {
|
|
224
|
+
this._logService.trace(
|
|
225
|
+
"OutputMonitor: Free-form input received for \"press any key\", continue polling"
|
|
226
|
+
);
|
|
181
227
|
await timeout(200);
|
|
182
228
|
return {
|
|
183
229
|
shouldContinuePollling: true
|
|
184
230
|
};
|
|
185
231
|
} else {
|
|
232
|
+
this._logService.trace("OutputMonitor: Free-form input declined for \"press any key\", stopping");
|
|
186
233
|
return {
|
|
187
234
|
shouldContinuePollling: false
|
|
188
235
|
};
|
|
189
236
|
}
|
|
190
237
|
}
|
|
191
238
|
if (this._userInputtedSinceIdleDetected) {
|
|
239
|
+
this._logService.trace(
|
|
240
|
+
"OutputMonitor: User input detected since idle; skipping prompt and continuing polling"
|
|
241
|
+
);
|
|
192
242
|
this._cleanupIdleInputListener();
|
|
193
243
|
return {
|
|
194
244
|
shouldContinuePollling: true
|
|
195
245
|
};
|
|
196
246
|
}
|
|
247
|
+
this._logService.trace("OutputMonitor: Determining user input options via language model");
|
|
197
248
|
const confirmationPrompt = await this._determineUserInputOptions(this._execution, token);
|
|
249
|
+
this._logService.trace(
|
|
250
|
+
`OutputMonitor: Input options result: ${confirmationPrompt ? `prompt=${this._formatLastLineForLog(confirmationPrompt.prompt)}, options=${confirmationPrompt.options.length} ${this._formatOptionsForLog(confirmationPrompt.options)}, freeForm=${!!confirmationPrompt.detectedRequestForFreeFormInput}` : "none"}`
|
|
251
|
+
);
|
|
198
252
|
if (this._userInputtedSinceIdleDetected) {
|
|
253
|
+
this._logService.trace(
|
|
254
|
+
"OutputMonitor: User input arrived during input-option analysis; continuing polling"
|
|
255
|
+
);
|
|
199
256
|
this._cleanupIdleInputListener();
|
|
200
257
|
return {
|
|
201
258
|
shouldContinuePollling: true
|
|
@@ -203,27 +260,53 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
203
260
|
}
|
|
204
261
|
if (confirmationPrompt?.detectedRequestForFreeFormInput) {
|
|
205
262
|
if (this._userInputtedSinceIdleDetected) {
|
|
263
|
+
this._logService.trace(
|
|
264
|
+
"OutputMonitor: User input arrived before showing free-form prompt; continuing polling"
|
|
265
|
+
);
|
|
206
266
|
this._cleanupIdleInputListener();
|
|
207
267
|
return {
|
|
208
268
|
shouldContinuePollling: true
|
|
209
269
|
};
|
|
210
270
|
}
|
|
271
|
+
const autoReply = this._configurationService.getValue(TerminalChatAgentToolsSettingId.AutoReplyToPrompts);
|
|
272
|
+
if (autoReply && !this._isSensitivePrompt(confirmationPrompt.prompt)) {
|
|
273
|
+
const explicitInput = confirmationPrompt.suggestedInput ?? this._extractExplicitInputFromPrompt(confirmationPrompt.prompt);
|
|
274
|
+
const normalizedInput = this._normalizeAutoReplyInput(explicitInput);
|
|
275
|
+
if (normalizedInput !== undefined) {
|
|
276
|
+
this._logService.trace("OutputMonitor: Auto-replying to free-form prompt");
|
|
277
|
+
await this._execution.instance.sendText(normalizedInput, true);
|
|
278
|
+
this._outputMonitorTelemetryCounters.inputToolAutoAcceptCount++;
|
|
279
|
+
this._outputMonitorTelemetryCounters.inputToolAutoChars += normalizedInput.length;
|
|
280
|
+
return {
|
|
281
|
+
shouldContinuePollling: true
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
}
|
|
211
285
|
this._cleanupIdleInputListener();
|
|
212
286
|
this._outputMonitorTelemetryCounters.inputToolFreeFormInputShownCount++;
|
|
287
|
+
this._logService.trace("OutputMonitor: Showing free-form input elicitation");
|
|
213
288
|
const receivedTerminalInput = await this._requestFreeFormTerminalInput(token, this._execution, confirmationPrompt);
|
|
214
289
|
if (receivedTerminalInput) {
|
|
290
|
+
this._logService.trace("OutputMonitor: Free-form input received; continuing polling");
|
|
215
291
|
await timeout(200);
|
|
216
292
|
return {
|
|
217
293
|
shouldContinuePollling: true
|
|
218
294
|
};
|
|
219
295
|
} else {
|
|
296
|
+
this._logService.trace("OutputMonitor: Free-form input declined; stopping");
|
|
220
297
|
return {
|
|
221
298
|
shouldContinuePollling: false
|
|
222
299
|
};
|
|
223
300
|
}
|
|
224
301
|
}
|
|
225
302
|
if (confirmationPrompt?.options.length) {
|
|
303
|
+
this._logService.trace(
|
|
304
|
+
`OutputMonitor: Showing option-based input flow (options=${confirmationPrompt.options.length})`
|
|
305
|
+
);
|
|
226
306
|
const suggestedOptionResult = await this._selectAndHandleOption(confirmationPrompt, token);
|
|
307
|
+
this._logService.trace(
|
|
308
|
+
`OutputMonitor: Suggested option result: ${suggestedOptionResult?.suggestedOption ? "hasSuggestion" : "none"} (autoSent=${!!suggestedOptionResult?.sentToTerminal})`
|
|
309
|
+
);
|
|
227
310
|
if (suggestedOptionResult?.sentToTerminal) {
|
|
228
311
|
this._cleanupIdleInputListener();
|
|
229
312
|
return {
|
|
@@ -231,12 +314,16 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
231
314
|
};
|
|
232
315
|
}
|
|
233
316
|
if (this._userInputtedSinceIdleDetected) {
|
|
317
|
+
this._logService.trace(
|
|
318
|
+
"OutputMonitor: User input arrived during option selection; continuing polling"
|
|
319
|
+
);
|
|
234
320
|
this._cleanupIdleInputListener();
|
|
235
321
|
return {
|
|
236
322
|
shouldContinuePollling: true
|
|
237
323
|
};
|
|
238
324
|
}
|
|
239
325
|
this._cleanupIdleInputListener();
|
|
326
|
+
this._logService.trace("OutputMonitor: Showing confirmation elicitation for suggested option");
|
|
240
327
|
const confirmed = await this._confirmRunInTerminal(
|
|
241
328
|
token,
|
|
242
329
|
suggestedOptionResult?.suggestedOption ?? confirmationPrompt.options[0],
|
|
@@ -244,10 +331,12 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
244
331
|
confirmationPrompt
|
|
245
332
|
);
|
|
246
333
|
if (confirmed) {
|
|
334
|
+
this._logService.trace("OutputMonitor: Option confirmed/sent; continuing polling");
|
|
247
335
|
return {
|
|
248
336
|
shouldContinuePollling: true
|
|
249
337
|
};
|
|
250
338
|
} else {
|
|
339
|
+
this._logService.trace("OutputMonitor: Option declined; stopping");
|
|
251
340
|
this._execution.instance.focus(true);
|
|
252
341
|
return {
|
|
253
342
|
shouldContinuePollling: false
|
|
@@ -256,8 +345,9 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
256
345
|
}
|
|
257
346
|
this._cleanupIdleInputListener();
|
|
258
347
|
const custom = await this._pollFn?.(this._execution, token, this._taskService);
|
|
348
|
+
this._logService.trace(`OutputMonitor: Custom poller result: ${custom ? "provided" : "none"}`);
|
|
259
349
|
const resources = custom?.resources;
|
|
260
|
-
const modelOutputEvalResponse = await this._assessOutputForErrors(this._execution.getOutput(), token);
|
|
350
|
+
const modelOutputEvalResponse = this._pollFn ? undefined : await this._assessOutputForErrors(this._execution.getOutput(), token);
|
|
261
351
|
return {
|
|
262
352
|
resources,
|
|
263
353
|
modelOutputEvalResponse,
|
|
@@ -291,12 +381,18 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
291
381
|
currentInterval = Math.min(currentInterval * 2, maxInterval);
|
|
292
382
|
const currentOutput = execution.getOutput();
|
|
293
383
|
if (detectsNonInteractiveHelpPattern(currentOutput)) {
|
|
384
|
+
this._logService.trace(
|
|
385
|
+
`OutputMonitor: waitForIdle -> non-interactive help detected (waited=${waited}ms)`
|
|
386
|
+
);
|
|
294
387
|
this._state = OutputMonitorState.Idle;
|
|
295
388
|
this._setupIdleInputListener();
|
|
296
389
|
return this._state;
|
|
297
390
|
}
|
|
298
391
|
const promptResult = detectsInputRequiredPattern(currentOutput);
|
|
299
392
|
if (promptResult) {
|
|
393
|
+
this._logService.trace(
|
|
394
|
+
`OutputMonitor: waitForIdle -> input-required pattern detected (waited=${waited}ms, lastLine=${this._formatLastLineForLog(currentOutput)})`
|
|
395
|
+
);
|
|
300
396
|
this._state = OutputMonitorState.Idle;
|
|
301
397
|
this._setupIdleInputListener();
|
|
302
398
|
return this._state;
|
|
@@ -313,6 +409,9 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
313
409
|
`OutputMonitor: waitForIdle check: waited=${waited}ms, recentlyIdle=${recentlyIdle}, isActive=${isActive}`
|
|
314
410
|
);
|
|
315
411
|
if (recentlyIdle && isActive !== true) {
|
|
412
|
+
this._logService.trace(
|
|
413
|
+
`OutputMonitor: waitForIdle -> recentlyIdle && !active (waited=${waited}ms, lastLine=${this._formatLastLineForLog(currentOutput)})`
|
|
414
|
+
);
|
|
316
415
|
this._state = OutputMonitorState.Idle;
|
|
317
416
|
this._setupIdleInputListener();
|
|
318
417
|
return this._state;
|
|
@@ -328,8 +427,10 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
328
427
|
}
|
|
329
428
|
_setupIdleInputListener() {
|
|
330
429
|
this._userInputtedSinceIdleDetected = false;
|
|
430
|
+
this._logService.trace("OutputMonitor: Setting up idle input listener");
|
|
331
431
|
this._userInputListener.value = this._execution.instance.onDidInputData(() => {
|
|
332
432
|
this._userInputtedSinceIdleDetected = true;
|
|
433
|
+
this._logService.trace("OutputMonitor: Detected user terminal input while idle");
|
|
333
434
|
});
|
|
334
435
|
}
|
|
335
436
|
_cleanupIdleInputListener() {
|
|
@@ -349,26 +450,29 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
349
450
|
}]
|
|
350
451
|
}], {}, token);
|
|
351
452
|
try {
|
|
352
|
-
|
|
353
|
-
await Promise.all([response.result, responseFromStream]);
|
|
354
|
-
return await responseFromStream;
|
|
453
|
+
return await getTextResponseFromStream(response);
|
|
355
454
|
} catch (err) {
|
|
356
455
|
return "Error occurred " + err;
|
|
357
456
|
}
|
|
358
457
|
}
|
|
359
458
|
async _determineUserInputOptions(execution, token) {
|
|
360
459
|
if (token.isCancellationRequested) {
|
|
460
|
+
this._logService.trace("OutputMonitor: determineUserInputOptions cancelled before start");
|
|
361
461
|
return;
|
|
362
462
|
}
|
|
363
463
|
const model = await this._getLanguageModel();
|
|
364
464
|
if (!model) {
|
|
465
|
+
this._logService.trace("OutputMonitor: determineUserInputOptions no language model available");
|
|
365
466
|
return undefined;
|
|
366
467
|
}
|
|
367
468
|
const lastLines = execution.getOutput(this._lastPromptMarker).trimEnd().split("\n").slice(-15).join("\n");
|
|
469
|
+
this._logService.trace(
|
|
470
|
+
`OutputMonitor: determineUserInputOptions analyzing lastLines (len=${lastLines.length})`
|
|
471
|
+
);
|
|
368
472
|
if (detectsNonInteractiveHelpPattern(lastLines)) {
|
|
369
473
|
return undefined;
|
|
370
474
|
}
|
|
371
|
-
const promptText = `Analyze the following terminal output. If it contains a prompt requesting user input (such as a confirmation, selection, or yes/no question) that appears at the VERY END of the output and has NOT already been answered (i.e., there is no user response or subsequent output after the prompt), extract the prompt text. IMPORTANT: Only detect prompts that are at the end of the output with no content following them - if there is any output after the prompt, the prompt has already been answered and you should return null. The prompt may ask to choose from a set. If so, extract the possible options as a JSON object with keys 'prompt', 'options' (an array of strings or an object with option to description mappings), and 'freeFormInput': false. If no options are provided, and free form input is requested,
|
|
475
|
+
const promptText = `Analyze the following terminal output. If it contains a prompt requesting user input (such as a confirmation, selection, or yes/no question) that appears at the VERY END of the output and has NOT already been answered (i.e., there is no user response or subsequent output after the prompt), extract the prompt text. IMPORTANT: Only detect prompts that are at the end of the output with no content following them - if there is any output after the prompt, the prompt has already been answered and you should return null. The prompt may ask to choose from a set. If so, extract the possible options as a JSON object with keys 'prompt', 'options' (an array of strings or an object with option to description mappings), and 'freeFormInput': false. If no options are provided, and free form input is requested, return a JSON object with keys 'prompt', 'options', 'freeFormInput': true, and 'input'. The 'input' field should be the exact text to type only when the output explicitly states what to type (for example, Type "exit" to quit). If there is no explicit input, set 'input' to null. For Enter, set 'input' to "\\r". If the option is ambiguous, return null.
|
|
372
476
|
Examples:
|
|
373
477
|
1. Output: "Do you want to overwrite? (y/n)"
|
|
374
478
|
Response: {"prompt": "Do you want to overwrite?", "options": ["y", "n"], "freeFormInput": false}
|
|
@@ -389,7 +493,7 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
389
493
|
Response: {"prompt": "Continue", "options": ["y", "N"], "freeFormInput": false}
|
|
390
494
|
|
|
391
495
|
7. Output: "Password:"
|
|
392
|
-
Response: {"prompt": "Password:", "freeFormInput": true, "options": []}
|
|
496
|
+
Response: {"prompt": "Password:", "freeFormInput": true, "options": [], "input": null}
|
|
393
497
|
8. Output: "press ctrl-c to detach, ctrl-d to kill"
|
|
394
498
|
Response: null
|
|
395
499
|
9. Output: "Continue (y/n)? y"
|
|
@@ -399,11 +503,13 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
399
503
|
|
|
400
504
|
Alternatively, the prompt may request free form input, for example:
|
|
401
505
|
1. Output: "Enter your username:"
|
|
402
|
-
Response: {"prompt": "Enter your username:", "freeFormInput": true, "options": []}
|
|
506
|
+
Response: {"prompt": "Enter your username:", "freeFormInput": true, "options": [], "input": null}
|
|
403
507
|
2. Output: "Password:"
|
|
404
|
-
Response: {"prompt": "Password:", "freeFormInput": true, "options": []}
|
|
508
|
+
Response: {"prompt": "Password:", "freeFormInput": true, "options": [], "input": null}
|
|
405
509
|
3. Output: "Press any key to continue..."
|
|
406
|
-
Response: {"prompt": "Press any key to continue...", "freeFormInput": true, "options": []}
|
|
510
|
+
Response: {"prompt": "Press any key to continue...", "freeFormInput": true, "options": [], "input": "\\r"}
|
|
511
|
+
4. Output: "Type 'exit' to quit the game."
|
|
512
|
+
Response: {"prompt": "Type 'exit' to quit the game.", "freeFormInput": true, "options": [], "input": "exit"}
|
|
407
513
|
Now, analyze this output:
|
|
408
514
|
${lastLines}
|
|
409
515
|
`;
|
|
@@ -418,16 +524,20 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
418
524
|
try {
|
|
419
525
|
const match = responseText.match(/\{[\s\S]*\}/);
|
|
420
526
|
if (match) {
|
|
421
|
-
const
|
|
422
|
-
if (isObject(
|
|
527
|
+
const parsed = JSON.parse(match[0]);
|
|
528
|
+
if (isObject(parsed) && Object.hasOwn(parsed, "prompt") && isString(parsed.prompt) && Object.hasOwn(parsed, "options") && Object.hasOwn(parsed, "freeFormInput") && typeof parsed.freeFormInput === "boolean") {
|
|
529
|
+
const obj = parsed;
|
|
423
530
|
if (this._lastPrompt === obj.prompt) {
|
|
531
|
+
this._logService.trace("OutputMonitor: determineUserInputOptions ignoring duplicate prompt");
|
|
424
532
|
return;
|
|
425
533
|
}
|
|
426
534
|
if (obj.freeFormInput === true) {
|
|
535
|
+
const suggestedInput = isString(obj.input) && obj.input.trim().length ? obj.input.trim() : undefined;
|
|
427
536
|
return {
|
|
428
537
|
prompt: obj.prompt,
|
|
429
538
|
options: [],
|
|
430
|
-
detectedRequestForFreeFormInput: true
|
|
539
|
+
detectedRequestForFreeFormInput: true,
|
|
540
|
+
suggestedInput
|
|
431
541
|
};
|
|
432
542
|
}
|
|
433
543
|
if (Array.isArray(obj.options) && obj.options.every(isString)) {
|
|
@@ -452,25 +562,61 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
452
562
|
}
|
|
453
563
|
}
|
|
454
564
|
} catch (err) {
|
|
455
|
-
|
|
565
|
+
this._logService.trace(
|
|
566
|
+
"OutputMonitor: Failed to parse confirmation prompt from language model response",
|
|
567
|
+
err
|
|
568
|
+
);
|
|
456
569
|
}
|
|
457
570
|
return undefined;
|
|
458
571
|
}
|
|
459
|
-
|
|
460
|
-
|
|
572
|
+
_isSensitivePrompt(prompt) {
|
|
573
|
+
return /(password|passphrase|token|api\s*key|secret)/i.test(prompt);
|
|
574
|
+
}
|
|
575
|
+
_normalizeAutoReplyInput(input) {
|
|
576
|
+
if (!input) {
|
|
461
577
|
return undefined;
|
|
462
578
|
}
|
|
463
|
-
const
|
|
464
|
-
if (!
|
|
579
|
+
const trimmed = input.trim();
|
|
580
|
+
if (!trimmed) {
|
|
465
581
|
return undefined;
|
|
466
582
|
}
|
|
467
|
-
const
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
}
|
|
471
|
-
|
|
583
|
+
const lowered = trimmed.toLowerCase();
|
|
584
|
+
if (lowered === "\\r" || lowered === "\\n" || lowered === "enter" || lowered === "return") {
|
|
585
|
+
return "";
|
|
586
|
+
}
|
|
587
|
+
return trimmed;
|
|
588
|
+
}
|
|
589
|
+
_extractExplicitInputFromPrompt(prompt) {
|
|
590
|
+
const normalizedPrompt = prompt.trim();
|
|
591
|
+
if (!normalizedPrompt) {
|
|
472
592
|
return undefined;
|
|
473
593
|
}
|
|
594
|
+
const directCommandMatch = normalizedPrompt.match(/\b(?:type|enter|input)\s+["'`]([^"'`]+)["'`]/i);
|
|
595
|
+
if (directCommandMatch?.[1]) {
|
|
596
|
+
return directCommandMatch[1];
|
|
597
|
+
}
|
|
598
|
+
const bareCommandMatch = normalizedPrompt.match(/\b(?:type|enter|input)\s+([\w.-]+)\b/i);
|
|
599
|
+
if (bareCommandMatch?.[1]) {
|
|
600
|
+
return bareCommandMatch[1];
|
|
601
|
+
}
|
|
602
|
+
return undefined;
|
|
603
|
+
}
|
|
604
|
+
async _selectAndHandleOption(confirmationPrompt, token) {
|
|
605
|
+
if (!confirmationPrompt?.options.length) {
|
|
606
|
+
return undefined;
|
|
607
|
+
}
|
|
608
|
+
const autoReply = this._configurationService.getValue(TerminalChatAgentToolsSettingId.AutoReplyToPrompts);
|
|
609
|
+
let model = this._chatWidgetService.getWidgetsByLocations(ChatAgentLocation.Chat)[0]?.input.currentLanguageModel;
|
|
610
|
+
if (model) {
|
|
611
|
+
const models = await this._languageModelsService.selectLanguageModels({
|
|
612
|
+
vendor: "copilot",
|
|
613
|
+
family: model.replaceAll("copilot/", "")
|
|
614
|
+
});
|
|
615
|
+
model = models[0];
|
|
616
|
+
}
|
|
617
|
+
if (!model) {
|
|
618
|
+
model = await this._getLanguageModel();
|
|
619
|
+
}
|
|
474
620
|
const prompt = confirmationPrompt.prompt;
|
|
475
621
|
const options = confirmationPrompt.options;
|
|
476
622
|
const currentMarker = this._execution.instance.registerMarker();
|
|
@@ -479,26 +625,55 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
479
625
|
}
|
|
480
626
|
this._lastPromptMarker = currentMarker;
|
|
481
627
|
this._lastPrompt = prompt;
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
628
|
+
let suggestedOption = "";
|
|
629
|
+
if (model) {
|
|
630
|
+
try {
|
|
631
|
+
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.`;
|
|
632
|
+
const response = await this._languageModelsService.sendChatRequest(model, ( new ExtensionIdentifier("core")), [{
|
|
633
|
+
role: ChatMessageRole.User,
|
|
634
|
+
content: [{
|
|
635
|
+
type: "text",
|
|
636
|
+
value: promptText
|
|
637
|
+
}]
|
|
638
|
+
}], {}, token);
|
|
639
|
+
suggestedOption = (await getTextResponseFromStream(response)).trim();
|
|
640
|
+
} catch (err) {
|
|
641
|
+
this._logService.trace("OutputMonitor: Failed to get suggested option from model", err);
|
|
642
|
+
}
|
|
643
|
+
} else if (!autoReply) {
|
|
644
|
+
return undefined;
|
|
493
645
|
}
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
646
|
+
let validOption;
|
|
647
|
+
let index;
|
|
648
|
+
if (!suggestedOption) {
|
|
649
|
+
if (autoReply) {
|
|
650
|
+
validOption = options[0];
|
|
651
|
+
index = 0;
|
|
652
|
+
this._logService.trace(
|
|
653
|
+
`OutputMonitor: No LLM suggestion, falling back to first option: ${validOption}`
|
|
654
|
+
);
|
|
655
|
+
} else {
|
|
656
|
+
return;
|
|
657
|
+
}
|
|
658
|
+
} else {
|
|
659
|
+
const match = matchTerminalPromptOption(confirmationPrompt.options, suggestedOption);
|
|
660
|
+
if (!match.option || match.index === -1) {
|
|
661
|
+
if (autoReply) {
|
|
662
|
+
validOption = options[0];
|
|
663
|
+
index = 0;
|
|
664
|
+
this._logService.trace(
|
|
665
|
+
`OutputMonitor: LLM suggestion '${suggestedOption}' didn't match options, falling back to first option: ${validOption}`
|
|
666
|
+
);
|
|
667
|
+
} else {
|
|
668
|
+
return;
|
|
669
|
+
}
|
|
670
|
+
} else {
|
|
671
|
+
validOption = match.option;
|
|
672
|
+
index = match.index;
|
|
673
|
+
}
|
|
499
674
|
}
|
|
500
675
|
let sentToTerminal = false;
|
|
501
|
-
if (
|
|
676
|
+
if (autoReply) {
|
|
502
677
|
await this._execution.instance.sendText(validOption, true);
|
|
503
678
|
this._outputMonitorTelemetryCounters.inputToolAutoAcceptCount++;
|
|
504
679
|
this._outputMonitorTelemetryCounters.inputToolAutoChars += validOption?.length || 0;
|
|
@@ -521,11 +696,11 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
521
696
|
const {
|
|
522
697
|
promise: userPrompt,
|
|
523
698
|
part
|
|
524
|
-
} = this._createElicitationPart(token, execution.
|
|
525
|
-
|
|
699
|
+
} = this._createElicitationPart(token, execution.sessionResource, ( new MarkdownString(( localize(13383, "The terminal is awaiting input.")))), ( new MarkdownString(( localize(
|
|
700
|
+
13384,
|
|
526
701
|
"{0}\nPlease provide the required input to the terminal.\n\n",
|
|
527
702
|
confirmationPrompt.prompt
|
|
528
|
-
)))), "", ( localize(
|
|
703
|
+
)))), "", ( localize(13385, "Focus terminal")), undefined, () => {
|
|
529
704
|
this._showInstance(execution.instance.instanceId);
|
|
530
705
|
return focusTerminalSelection;
|
|
531
706
|
});
|
|
@@ -578,17 +753,17 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
578
753
|
const {
|
|
579
754
|
promise: userPrompt,
|
|
580
755
|
part
|
|
581
|
-
} = this._createElicitationPart(token, execution.
|
|
582
|
-
|
|
756
|
+
} = this._createElicitationPart(token, execution.sessionResource, ( new MarkdownString(( localize(13386, "The terminal is awaiting input.")))), ( new MarkdownString(( localize(
|
|
757
|
+
13387,
|
|
583
758
|
"{0}\n Do you want to send `{1}`{2} followed by `Enter` to the terminal?",
|
|
584
759
|
confirmationPrompt.prompt,
|
|
585
760
|
suggestedOptionValue,
|
|
586
761
|
isString(suggestedOption) ? "" : suggestedOption.description ? " (" + suggestedOption.description + ")" : ""
|
|
587
|
-
)))), "", ( localize(
|
|
762
|
+
)))), "", ( localize(13388, "Allow")), ( localize(13389, "Focus Terminal")), async value => {
|
|
588
763
|
let option = undefined;
|
|
589
764
|
if (value === true) {
|
|
590
765
|
option = suggestedOptionValue;
|
|
591
|
-
} else if (typeof value === "object" && "label"
|
|
766
|
+
} else if (typeof value === "object" && Object.hasOwn(value, "label")) {
|
|
592
767
|
option = value.label.split(" (")[0];
|
|
593
768
|
}
|
|
594
769
|
this._outputMonitorTelemetryCounters.inputToolManualAcceptCount++;
|
|
@@ -654,7 +829,7 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
654
829
|
}
|
|
655
830
|
_createElicitationPart(
|
|
656
831
|
token,
|
|
657
|
-
|
|
832
|
+
sessionResource,
|
|
658
833
|
title,
|
|
659
834
|
detail,
|
|
660
835
|
subtitle,
|
|
@@ -664,7 +839,7 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
664
839
|
onReject,
|
|
665
840
|
moreActions
|
|
666
841
|
) {
|
|
667
|
-
const chatModel =
|
|
842
|
+
const chatModel = sessionResource && this._chatService.getSession(sessionResource);
|
|
668
843
|
if (!(chatModel instanceof ChatModel)) {
|
|
669
844
|
throw ( new Error("No model"));
|
|
670
845
|
}
|
|
@@ -675,24 +850,30 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
675
850
|
let part;
|
|
676
851
|
const promise = ( new Promise(resolve => {
|
|
677
852
|
const thePart = part = ( new ChatElicitationRequestPart(title, detail, subtitle, acceptLabel, rejectLabel, async value => {
|
|
678
|
-
thePart.hide();
|
|
679
|
-
this._promptPart = undefined;
|
|
680
853
|
try {
|
|
681
854
|
const r = await (onAccept ? onAccept(value) : undefined);
|
|
682
855
|
resolve(r);
|
|
856
|
+
if (typeof r === "symbol") {
|
|
857
|
+
return ElicitationState.Pending;
|
|
858
|
+
}
|
|
683
859
|
} catch {
|
|
684
860
|
resolve(undefined);
|
|
685
861
|
}
|
|
686
|
-
return ElicitationState.Accepted;
|
|
687
|
-
}, async () => {
|
|
688
862
|
thePart.hide();
|
|
689
863
|
this._promptPart = undefined;
|
|
864
|
+
return ElicitationState.Accepted;
|
|
865
|
+
}, async () => {
|
|
690
866
|
try {
|
|
691
867
|
const r = await (onReject ? onReject() : undefined);
|
|
692
868
|
resolve(r);
|
|
869
|
+
if (typeof r === "symbol") {
|
|
870
|
+
return ElicitationState.Pending;
|
|
871
|
+
}
|
|
693
872
|
} catch {
|
|
694
873
|
resolve(undefined);
|
|
695
874
|
}
|
|
875
|
+
thePart.hide();
|
|
876
|
+
this._promptPart = undefined;
|
|
696
877
|
return ElicitationState.Rejected;
|
|
697
878
|
},
|
|
698
879
|
undefined, moreActions, () => this._outputMonitorTelemetryCounters.inputToolManualShownCount++));
|
|
@@ -706,16 +887,10 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
706
887
|
};
|
|
707
888
|
}
|
|
708
889
|
async _getLanguageModel() {
|
|
709
|
-
|
|
890
|
+
const models = await this._languageModelsService.selectLanguageModels({
|
|
710
891
|
vendor: "copilot",
|
|
711
892
|
id: "copilot-fast"
|
|
712
893
|
});
|
|
713
|
-
if (!models.length) {
|
|
714
|
-
models = await this._languageModelsService.selectLanguageModels({
|
|
715
|
-
vendor: "copilot",
|
|
716
|
-
family: "gpt-4o-mini"
|
|
717
|
-
});
|
|
718
|
-
}
|
|
719
894
|
return models.length ? models[0] : undefined;
|
|
720
895
|
}
|
|
721
896
|
};
|
|
@@ -741,6 +916,46 @@ function getMoreActions(suggestedOption, confirmationPrompt) {
|
|
|
741
916
|
}
|
|
742
917
|
return moreActions.length ? moreActions : undefined;
|
|
743
918
|
}
|
|
919
|
+
function matchTerminalPromptOption(options, suggestedOption) {
|
|
920
|
+
const normalize = value => value.replace(/['"`]/g, "").trim().replace(/[.,:;]+$/, "");
|
|
921
|
+
const normalizedSuggestion = normalize(suggestedOption);
|
|
922
|
+
if (!normalizedSuggestion) {
|
|
923
|
+
return {
|
|
924
|
+
option: undefined,
|
|
925
|
+
index: -1
|
|
926
|
+
};
|
|
927
|
+
}
|
|
928
|
+
const candidates = [normalizedSuggestion];
|
|
929
|
+
const firstWhitespaceToken = normalizedSuggestion.split(/\s+/)[0];
|
|
930
|
+
if (firstWhitespaceToken && firstWhitespaceToken !== normalizedSuggestion) {
|
|
931
|
+
candidates.push(firstWhitespaceToken);
|
|
932
|
+
}
|
|
933
|
+
const firstAlphaNum = normalizedSuggestion.match(/[A-Za-z0-9]+/);
|
|
934
|
+
if (firstAlphaNum?.[0] && firstAlphaNum[0] !== normalizedSuggestion && firstAlphaNum[0] !== firstWhitespaceToken) {
|
|
935
|
+
candidates.push(firstAlphaNum[0]);
|
|
936
|
+
}
|
|
937
|
+
for (const candidate of candidates) {
|
|
938
|
+
const exactIndex = options.findIndex(opt => normalize(opt) === candidate);
|
|
939
|
+
if (exactIndex !== -1) {
|
|
940
|
+
return {
|
|
941
|
+
option: options[exactIndex],
|
|
942
|
+
index: exactIndex
|
|
943
|
+
};
|
|
944
|
+
}
|
|
945
|
+
const lowerCandidate = candidate.toLowerCase();
|
|
946
|
+
const ciIndex = options.findIndex(opt => normalize(opt).toLowerCase() === lowerCandidate);
|
|
947
|
+
if (ciIndex !== -1) {
|
|
948
|
+
return {
|
|
949
|
+
option: options[ciIndex],
|
|
950
|
+
index: ciIndex
|
|
951
|
+
};
|
|
952
|
+
}
|
|
953
|
+
}
|
|
954
|
+
return {
|
|
955
|
+
option: undefined,
|
|
956
|
+
index: -1
|
|
957
|
+
};
|
|
958
|
+
}
|
|
744
959
|
function detectsInputRequiredPattern(cursorLine) {
|
|
745
960
|
return ([
|
|
746
961
|
/\s*(?:\[[^\]]\]\s+[^\[\s][^\[]*\s*)+(?:\(default is\s+"[^"]+"\):)?\s+$/,
|
|
@@ -768,8 +983,8 @@ function detectsNonInteractiveHelpPattern(cursorLine) {
|
|
|
768
983
|
].some(e => e.test(cursorLine)));
|
|
769
984
|
}
|
|
770
985
|
const taskFinishMessages = [(
|
|
771
|
-
localize(
|
|
772
|
-
localize(
|
|
986
|
+
localize(13390, "Terminal will be reused by tasks, press any key to close it.")), ( localize(13391, "Terminal will be reused by tasks, press any key to close it.")), (
|
|
987
|
+
localize(13392, "Press any key to close the terminal.")), ( localize(13393, "Press any key to close the terminal."))];
|
|
773
988
|
function detectsVSCodeTaskFinishMessage(cursorLine) {
|
|
774
989
|
const normalized = cursorLine.replace(/\s/g, "").toLowerCase();
|
|
775
990
|
return (taskFinishMessages.some(msg => normalized.includes(msg.replace(/\s/g, "").toLowerCase())));
|
|
@@ -781,4 +996,4 @@ function detectsGenericPressAnyKeyPattern(cursorLine) {
|
|
|
781
996
|
return /press a(?:ny)? key/i.test(cursorLine);
|
|
782
997
|
}
|
|
783
998
|
|
|
784
|
-
export { OutputMonitor, detectsGenericPressAnyKeyPattern, detectsInputRequiredPattern, detectsNonInteractiveHelpPattern, detectsVSCodeTaskFinishMessage };
|
|
999
|
+
export { OutputMonitor, detectsGenericPressAnyKeyPattern, detectsInputRequiredPattern, detectsNonInteractiveHelpPattern, detectsVSCodeTaskFinishMessage, matchTerminalPromptOption };
|