@codingame/monaco-vscode-chat-service-override 26.2.2 → 28.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 +35 -2
- 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 +89 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/aiCustomizationWorkspaceService.js +251 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/newSession.d.ts +123 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/newSession.js +278 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/sessionsConfigurationService.d.ts +76 -0
- package/vscode/src/vs/sessions/contrib/chat/browser/sessionsConfigurationService.js +299 -0
- package/vscode/src/vs/sessions/contrib/fileTreeView/browser/githubFileSystemProvider.d.ts +67 -0
- package/vscode/src/vs/sessions/contrib/fileTreeView/browser/githubFileSystemProvider.js +263 -0
- package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.d.ts +85 -0
- package/vscode/src/vs/sessions/contrib/sessions/browser/sessionsManagementService.js +397 -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 +13 -5
- 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 +85 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPluginActions.d.ts +8 -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 +18 -32
- 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 +17 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +49 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +18 -18
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditor.d.ts +58 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditor.js +537 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditorInput.d.ts +17 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginEditorInput.js +55 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginItems.d.ts +26 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/agentPluginItems.js +9 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginEditor/media/agentPluginEditor.css +32 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.d.ts +48 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginRepositoryService.js +282 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.d.ts +55 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentPluginsView.js +634 -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 +74 -67
- 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 +52 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationIcons.js +20 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.d.ts +179 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationListWidget.js +987 -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 +246 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.d.ts +56 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.js +26 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.d.ts +130 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagementEditor.js +878 -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 +83 -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 +692 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/media/aiCustomizationManagement.css +936 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.d.ts +62 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/aiCustomization/pluginListWidget.js +702 -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/simpleBrowserEditorOverlay.js +36 -26
- package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +622 -391
- 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 +314 -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 +46 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugFilters.js +170 -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 +61 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatDebug/chatDebugLogsView.js +467 -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 +47 -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 +788 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.d.ts +2 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.js +32 -36
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +6 -24
- 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/media/chatEditorController.css +2 -2
- 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 +24 -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 +17 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSlashCommands.js +394 -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/chatTipCatalog.d.ts +66 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipCatalog.js +245 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipEligibilityTracker.d.ts +78 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipEligibilityTracker.js +234 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.d.ts +88 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +624 -68
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipStorageKeys.d.ts +41 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipStorageKeys.js +22 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.d.ts +5 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +88 -24
- 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 +26 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginInstallService.js +175 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginSources.d.ts +99 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/pluginSources.js +489 -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 +19 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookActions.js +364 -279
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.d.ts +18 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/hookUtils.js +69 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +9 -9
- 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.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +67 -38
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.d.ts +20 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +187 -74
- 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.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatQueuePickerActionItem.js +29 -14
- 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 +126 -30
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +9 -5
- 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 +46 -9
- 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 +65 -37
- 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 +16 -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 +40 -0
- package/vscode/src/vs/workbench/contrib/chat/common/aiCustomizationWorkspaceService.js +28 -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 +44 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatDebugServiceImpl.js +208 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +19 -9
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +261 -105
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.d.ts +21 -2
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +7 -2
- 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 +13 -4
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +144 -11
- package/vscode/src/vs/workbench/contrib/chat/common/model/objectMutationLog.js +36 -3
- package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.d.ts +5 -3
- package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginService.d.ts +57 -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 +119 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/agentPluginServiceImpl.js +748 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.d.ts +146 -0
- package/vscode/src/vs/workbench/contrib/chat/common/plugins/pluginMarketplaceService.js +672 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +35 -16
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookClaudeCompat.d.ts +3 -16
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookClaudeCompat.js +7 -50
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCompatibility.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCompatibility.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.d.ts +1 -6
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/hookCopilotCliCompat.js +4 -8
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +10 -9
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptDocumentSemanticTokensProvider.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.d.ts +26 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +293 -94
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.d.ts +10 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +86 -30
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.d.ts +121 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +1422 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/promptFileContributions.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +48 -14
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +404 -132
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +17 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +40 -28
- 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/chat/common/widget/chatResponseResourceFileSystemProvider.d.ts +14 -2
- package/vscode/src/vs/workbench/contrib/chat/common/widget/chatResponseResourceFileSystemProvider.js +54 -5
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +12 -5
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +27 -4
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +265 -25
- 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 +17 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +302 -69
- 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 +7 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +63 -21
- 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 +7 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +46 -17
- 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/browser/attachments/chatVariables.d.ts +0 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatVariables.js +0 -51
- 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
|
@@ -6,28 +6,47 @@ import { MarkdownString } from '@codingame/monaco-vscode-api/vscode/vs/base/comm
|
|
|
6
6
|
import { Disposable, MutableDisposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
7
7
|
import { isObject, isString } from '@codingame/monaco-vscode-api/vscode/vs/base/common/types';
|
|
8
8
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
9
|
-
import { ExtensionIdentifier } from '@codingame/monaco-vscode-api/vscode/vs/platform/extensions/common/extensions';
|
|
10
9
|
import { IChatWidgetService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/browser/chat.service';
|
|
11
10
|
import { ChatElicitationRequestPart } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatElicitationRequestPart';
|
|
12
11
|
import { ChatModel } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/model/chatModel';
|
|
13
12
|
import { ElicitationState } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService/chatService';
|
|
14
13
|
import { IChatService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService/chatService.service';
|
|
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';
|
|
14
|
+
import { ChatPermissionLevel, ChatAgentLocation } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
|
|
15
|
+
import { ChatMessageRole, getTextResponseFromStream } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels';
|
|
17
16
|
import { ILanguageModelsService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/languageModels.service';
|
|
18
17
|
import { ITaskService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/tasks/common/taskService.service';
|
|
19
18
|
import { OutputMonitorState, PollingConsts } from './types.js';
|
|
20
|
-
import { getTextResponseFromStream } from './utils.js';
|
|
21
19
|
import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
|
|
22
20
|
import { TerminalChatAgentToolsSettingId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration';
|
|
23
21
|
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
22
|
import { ITerminalLogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/terminal/common/terminal.service';
|
|
26
23
|
|
|
27
24
|
let OutputMonitor = class OutputMonitor extends Disposable {
|
|
28
25
|
get state() {
|
|
29
26
|
return this._state;
|
|
30
27
|
}
|
|
28
|
+
_formatLastLineForLog(output) {
|
|
29
|
+
if (!output) {
|
|
30
|
+
return "<empty>";
|
|
31
|
+
}
|
|
32
|
+
const lastLine = output.trimEnd().split(/\r?\n/).pop() ?? "";
|
|
33
|
+
if (!lastLine) {
|
|
34
|
+
return "<empty>";
|
|
35
|
+
}
|
|
36
|
+
if (this._isSensitivePrompt(lastLine)) {
|
|
37
|
+
return "<redacted>";
|
|
38
|
+
}
|
|
39
|
+
return lastLine.length > 200 ? lastLine.slice(0, 200) + "…" : lastLine;
|
|
40
|
+
}
|
|
41
|
+
_formatOptionsForLog(options) {
|
|
42
|
+
if (!options.length) {
|
|
43
|
+
return "[]";
|
|
44
|
+
}
|
|
45
|
+
const maxOptions = 12;
|
|
46
|
+
const shown = ( options.slice(0, maxOptions).map(o => o.replace(/\r?\n/g, "return")));
|
|
47
|
+
const suffix = options.length > maxOptions ? `, …(+${options.length - maxOptions})` : "";
|
|
48
|
+
return `[${shown.join(", ")}${suffix}]`;
|
|
49
|
+
}
|
|
31
50
|
get pollingResult() {
|
|
32
51
|
return this._pollingResult;
|
|
33
52
|
}
|
|
@@ -73,6 +92,7 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
73
92
|
};
|
|
74
93
|
this._onDidFinishCommand = this._register(( new Emitter()));
|
|
75
94
|
this.onDidFinishCommand = this._onDidFinishCommand.event;
|
|
95
|
+
this._sessionResource = invocationContext?.sessionResource;
|
|
76
96
|
timeout(0).then(() => {
|
|
77
97
|
this._startMonitoring(command, invocationContext, token);
|
|
78
98
|
});
|
|
@@ -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,24 @@ 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("OutputMonitor: Idle -> generic \"press any key\" detected");
|
|
209
|
+
if (this._isAutopilotMode()) {
|
|
210
|
+
this._logService.trace("OutputMonitor: Autopilot mode -> auto-replying to \"press any key\"");
|
|
211
|
+
await this._execution.instance.sendText("", true);
|
|
212
|
+
return {
|
|
213
|
+
shouldContinuePollling: true
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
this._logService.trace("OutputMonitor: Requesting free-form input for \"press any key\"");
|
|
168
217
|
const currentMarker = this._execution.instance.registerMarker();
|
|
169
218
|
if (currentMarker) {
|
|
170
219
|
this._lastPromptMarker = currentMarker;
|
|
@@ -178,24 +227,38 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
178
227
|
detectedRequestForFreeFormInput: true
|
|
179
228
|
}, true );
|
|
180
229
|
if (receivedTerminalInput) {
|
|
230
|
+
this._logService.trace(
|
|
231
|
+
"OutputMonitor: Free-form input received for \"press any key\", continue polling"
|
|
232
|
+
);
|
|
181
233
|
await timeout(200);
|
|
182
234
|
return {
|
|
183
235
|
shouldContinuePollling: true
|
|
184
236
|
};
|
|
185
237
|
} else {
|
|
238
|
+
this._logService.trace("OutputMonitor: Free-form input declined for \"press any key\", stopping");
|
|
186
239
|
return {
|
|
187
240
|
shouldContinuePollling: false
|
|
188
241
|
};
|
|
189
242
|
}
|
|
190
243
|
}
|
|
191
244
|
if (this._userInputtedSinceIdleDetected) {
|
|
245
|
+
this._logService.trace(
|
|
246
|
+
"OutputMonitor: User input detected since idle; skipping prompt and continuing polling"
|
|
247
|
+
);
|
|
192
248
|
this._cleanupIdleInputListener();
|
|
193
249
|
return {
|
|
194
250
|
shouldContinuePollling: true
|
|
195
251
|
};
|
|
196
252
|
}
|
|
253
|
+
this._logService.trace("OutputMonitor: Determining user input options via language model");
|
|
197
254
|
const confirmationPrompt = await this._determineUserInputOptions(this._execution, token);
|
|
255
|
+
this._logService.trace(
|
|
256
|
+
`OutputMonitor: Input options result: ${confirmationPrompt ? `prompt=${this._formatLastLineForLog(confirmationPrompt.prompt)}, options=${confirmationPrompt.options.length} ${this._formatOptionsForLog(confirmationPrompt.options)}, freeForm=${!!confirmationPrompt.detectedRequestForFreeFormInput}` : "none"}`
|
|
257
|
+
);
|
|
198
258
|
if (this._userInputtedSinceIdleDetected) {
|
|
259
|
+
this._logService.trace(
|
|
260
|
+
"OutputMonitor: User input arrived during input-option analysis; continuing polling"
|
|
261
|
+
);
|
|
199
262
|
this._cleanupIdleInputListener();
|
|
200
263
|
return {
|
|
201
264
|
shouldContinuePollling: true
|
|
@@ -203,27 +266,53 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
203
266
|
}
|
|
204
267
|
if (confirmationPrompt?.detectedRequestForFreeFormInput) {
|
|
205
268
|
if (this._userInputtedSinceIdleDetected) {
|
|
269
|
+
this._logService.trace(
|
|
270
|
+
"OutputMonitor: User input arrived before showing free-form prompt; continuing polling"
|
|
271
|
+
);
|
|
206
272
|
this._cleanupIdleInputListener();
|
|
207
273
|
return {
|
|
208
274
|
shouldContinuePollling: true
|
|
209
275
|
};
|
|
210
276
|
}
|
|
277
|
+
const autoReply = this._configurationService.getValue(TerminalChatAgentToolsSettingId.AutoReplyToPrompts) || this._isAutopilotMode();
|
|
278
|
+
if (autoReply && !this._isSensitivePrompt(confirmationPrompt.prompt)) {
|
|
279
|
+
const explicitInput = confirmationPrompt.suggestedInput ?? this._extractExplicitInputFromPrompt(confirmationPrompt.prompt);
|
|
280
|
+
const normalizedInput = this._normalizeAutoReplyInput(explicitInput);
|
|
281
|
+
if (normalizedInput !== undefined) {
|
|
282
|
+
this._logService.trace("OutputMonitor: Auto-replying to free-form prompt");
|
|
283
|
+
await this._execution.instance.sendText(normalizedInput, true);
|
|
284
|
+
this._outputMonitorTelemetryCounters.inputToolAutoAcceptCount++;
|
|
285
|
+
this._outputMonitorTelemetryCounters.inputToolAutoChars += normalizedInput.length;
|
|
286
|
+
return {
|
|
287
|
+
shouldContinuePollling: true
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
}
|
|
211
291
|
this._cleanupIdleInputListener();
|
|
212
292
|
this._outputMonitorTelemetryCounters.inputToolFreeFormInputShownCount++;
|
|
293
|
+
this._logService.trace("OutputMonitor: Showing free-form input elicitation");
|
|
213
294
|
const receivedTerminalInput = await this._requestFreeFormTerminalInput(token, this._execution, confirmationPrompt);
|
|
214
295
|
if (receivedTerminalInput) {
|
|
296
|
+
this._logService.trace("OutputMonitor: Free-form input received; continuing polling");
|
|
215
297
|
await timeout(200);
|
|
216
298
|
return {
|
|
217
299
|
shouldContinuePollling: true
|
|
218
300
|
};
|
|
219
301
|
} else {
|
|
302
|
+
this._logService.trace("OutputMonitor: Free-form input declined; stopping");
|
|
220
303
|
return {
|
|
221
304
|
shouldContinuePollling: false
|
|
222
305
|
};
|
|
223
306
|
}
|
|
224
307
|
}
|
|
225
308
|
if (confirmationPrompt?.options.length) {
|
|
309
|
+
this._logService.trace(
|
|
310
|
+
`OutputMonitor: Showing option-based input flow (options=${confirmationPrompt.options.length})`
|
|
311
|
+
);
|
|
226
312
|
const suggestedOptionResult = await this._selectAndHandleOption(confirmationPrompt, token);
|
|
313
|
+
this._logService.trace(
|
|
314
|
+
`OutputMonitor: Suggested option result: ${suggestedOptionResult?.suggestedOption ? "hasSuggestion" : "none"} (autoSent=${!!suggestedOptionResult?.sentToTerminal})`
|
|
315
|
+
);
|
|
227
316
|
if (suggestedOptionResult?.sentToTerminal) {
|
|
228
317
|
this._cleanupIdleInputListener();
|
|
229
318
|
return {
|
|
@@ -231,12 +320,16 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
231
320
|
};
|
|
232
321
|
}
|
|
233
322
|
if (this._userInputtedSinceIdleDetected) {
|
|
323
|
+
this._logService.trace(
|
|
324
|
+
"OutputMonitor: User input arrived during option selection; continuing polling"
|
|
325
|
+
);
|
|
234
326
|
this._cleanupIdleInputListener();
|
|
235
327
|
return {
|
|
236
328
|
shouldContinuePollling: true
|
|
237
329
|
};
|
|
238
330
|
}
|
|
239
331
|
this._cleanupIdleInputListener();
|
|
332
|
+
this._logService.trace("OutputMonitor: Showing confirmation elicitation for suggested option");
|
|
240
333
|
const confirmed = await this._confirmRunInTerminal(
|
|
241
334
|
token,
|
|
242
335
|
suggestedOptionResult?.suggestedOption ?? confirmationPrompt.options[0],
|
|
@@ -244,10 +337,12 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
244
337
|
confirmationPrompt
|
|
245
338
|
);
|
|
246
339
|
if (confirmed) {
|
|
340
|
+
this._logService.trace("OutputMonitor: Option confirmed/sent; continuing polling");
|
|
247
341
|
return {
|
|
248
342
|
shouldContinuePollling: true
|
|
249
343
|
};
|
|
250
344
|
} else {
|
|
345
|
+
this._logService.trace("OutputMonitor: Option declined; stopping");
|
|
251
346
|
this._execution.instance.focus(true);
|
|
252
347
|
return {
|
|
253
348
|
shouldContinuePollling: false
|
|
@@ -256,8 +351,9 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
256
351
|
}
|
|
257
352
|
this._cleanupIdleInputListener();
|
|
258
353
|
const custom = await this._pollFn?.(this._execution, token, this._taskService);
|
|
354
|
+
this._logService.trace(`OutputMonitor: Custom poller result: ${custom ? "provided" : "none"}`);
|
|
259
355
|
const resources = custom?.resources;
|
|
260
|
-
const modelOutputEvalResponse = await this._assessOutputForErrors(this._execution.getOutput(), token);
|
|
356
|
+
const modelOutputEvalResponse = this._pollFn ? undefined : await this._assessOutputForErrors(this._execution.getOutput(), token);
|
|
261
357
|
return {
|
|
262
358
|
resources,
|
|
263
359
|
modelOutputEvalResponse,
|
|
@@ -291,12 +387,18 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
291
387
|
currentInterval = Math.min(currentInterval * 2, maxInterval);
|
|
292
388
|
const currentOutput = execution.getOutput();
|
|
293
389
|
if (detectsNonInteractiveHelpPattern(currentOutput)) {
|
|
390
|
+
this._logService.trace(
|
|
391
|
+
`OutputMonitor: waitForIdle -> non-interactive help detected (waited=${waited}ms)`
|
|
392
|
+
);
|
|
294
393
|
this._state = OutputMonitorState.Idle;
|
|
295
394
|
this._setupIdleInputListener();
|
|
296
395
|
return this._state;
|
|
297
396
|
}
|
|
298
397
|
const promptResult = detectsInputRequiredPattern(currentOutput);
|
|
299
398
|
if (promptResult) {
|
|
399
|
+
this._logService.trace(
|
|
400
|
+
`OutputMonitor: waitForIdle -> input-required pattern detected (waited=${waited}ms, lastLine=${this._formatLastLineForLog(currentOutput)})`
|
|
401
|
+
);
|
|
300
402
|
this._state = OutputMonitorState.Idle;
|
|
301
403
|
this._setupIdleInputListener();
|
|
302
404
|
return this._state;
|
|
@@ -313,6 +415,9 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
313
415
|
`OutputMonitor: waitForIdle check: waited=${waited}ms, recentlyIdle=${recentlyIdle}, isActive=${isActive}`
|
|
314
416
|
);
|
|
315
417
|
if (recentlyIdle && isActive !== true) {
|
|
418
|
+
this._logService.trace(
|
|
419
|
+
`OutputMonitor: waitForIdle -> recentlyIdle && !active (waited=${waited}ms, lastLine=${this._formatLastLineForLog(currentOutput)})`
|
|
420
|
+
);
|
|
316
421
|
this._state = OutputMonitorState.Idle;
|
|
317
422
|
this._setupIdleInputListener();
|
|
318
423
|
return this._state;
|
|
@@ -328,8 +433,10 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
328
433
|
}
|
|
329
434
|
_setupIdleInputListener() {
|
|
330
435
|
this._userInputtedSinceIdleDetected = false;
|
|
436
|
+
this._logService.trace("OutputMonitor: Setting up idle input listener");
|
|
331
437
|
this._userInputListener.value = this._execution.instance.onDidInputData(() => {
|
|
332
438
|
this._userInputtedSinceIdleDetected = true;
|
|
439
|
+
this._logService.trace("OutputMonitor: Detected user terminal input while idle");
|
|
333
440
|
});
|
|
334
441
|
}
|
|
335
442
|
_cleanupIdleInputListener() {
|
|
@@ -341,7 +448,7 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
341
448
|
if (!model) {
|
|
342
449
|
return "No models available";
|
|
343
450
|
}
|
|
344
|
-
const response = await this._languageModelsService.sendChatRequest(model,
|
|
451
|
+
const response = await this._languageModelsService.sendChatRequest(model, undefined, [{
|
|
345
452
|
role: ChatMessageRole.User,
|
|
346
453
|
content: [{
|
|
347
454
|
type: "text",
|
|
@@ -349,26 +456,29 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
349
456
|
}]
|
|
350
457
|
}], {}, token);
|
|
351
458
|
try {
|
|
352
|
-
|
|
353
|
-
await Promise.all([response.result, responseFromStream]);
|
|
354
|
-
return await responseFromStream;
|
|
459
|
+
return await getTextResponseFromStream(response);
|
|
355
460
|
} catch (err) {
|
|
356
461
|
return "Error occurred " + err;
|
|
357
462
|
}
|
|
358
463
|
}
|
|
359
464
|
async _determineUserInputOptions(execution, token) {
|
|
360
465
|
if (token.isCancellationRequested) {
|
|
466
|
+
this._logService.trace("OutputMonitor: determineUserInputOptions cancelled before start");
|
|
361
467
|
return;
|
|
362
468
|
}
|
|
363
469
|
const model = await this._getLanguageModel();
|
|
364
470
|
if (!model) {
|
|
471
|
+
this._logService.trace("OutputMonitor: determineUserInputOptions no language model available");
|
|
365
472
|
return undefined;
|
|
366
473
|
}
|
|
367
474
|
const lastLines = execution.getOutput(this._lastPromptMarker).trimEnd().split("\n").slice(-15).join("\n");
|
|
475
|
+
this._logService.trace(
|
|
476
|
+
`OutputMonitor: determineUserInputOptions analyzing lastLines (len=${lastLines.length})`
|
|
477
|
+
);
|
|
368
478
|
if (detectsNonInteractiveHelpPattern(lastLines)) {
|
|
369
479
|
return undefined;
|
|
370
480
|
}
|
|
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,
|
|
481
|
+
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
482
|
Examples:
|
|
373
483
|
1. Output: "Do you want to overwrite? (y/n)"
|
|
374
484
|
Response: {"prompt": "Do you want to overwrite?", "options": ["y", "n"], "freeFormInput": false}
|
|
@@ -389,7 +499,7 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
389
499
|
Response: {"prompt": "Continue", "options": ["y", "N"], "freeFormInput": false}
|
|
390
500
|
|
|
391
501
|
7. Output: "Password:"
|
|
392
|
-
Response: {"prompt": "Password:", "freeFormInput": true, "options": []}
|
|
502
|
+
Response: {"prompt": "Password:", "freeFormInput": true, "options": [], "input": null}
|
|
393
503
|
8. Output: "press ctrl-c to detach, ctrl-d to kill"
|
|
394
504
|
Response: null
|
|
395
505
|
9. Output: "Continue (y/n)? y"
|
|
@@ -399,15 +509,17 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
399
509
|
|
|
400
510
|
Alternatively, the prompt may request free form input, for example:
|
|
401
511
|
1. Output: "Enter your username:"
|
|
402
|
-
Response: {"prompt": "Enter your username:", "freeFormInput": true, "options": []}
|
|
512
|
+
Response: {"prompt": "Enter your username:", "freeFormInput": true, "options": [], "input": null}
|
|
403
513
|
2. Output: "Password:"
|
|
404
|
-
Response: {"prompt": "Password:", "freeFormInput": true, "options": []}
|
|
514
|
+
Response: {"prompt": "Password:", "freeFormInput": true, "options": [], "input": null}
|
|
405
515
|
3. Output: "Press any key to continue..."
|
|
406
|
-
Response: {"prompt": "Press any key to continue...", "freeFormInput": true, "options": []}
|
|
516
|
+
Response: {"prompt": "Press any key to continue...", "freeFormInput": true, "options": [], "input": "\\r"}
|
|
517
|
+
4. Output: "Type 'exit' to quit the game."
|
|
518
|
+
Response: {"prompt": "Type 'exit' to quit the game.", "freeFormInput": true, "options": [], "input": "exit"}
|
|
407
519
|
Now, analyze this output:
|
|
408
520
|
${lastLines}
|
|
409
521
|
`;
|
|
410
|
-
const response = await this._languageModelsService.sendChatRequest(model,
|
|
522
|
+
const response = await this._languageModelsService.sendChatRequest(model, undefined, [{
|
|
411
523
|
role: ChatMessageRole.User,
|
|
412
524
|
content: [{
|
|
413
525
|
type: "text",
|
|
@@ -418,16 +530,20 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
418
530
|
try {
|
|
419
531
|
const match = responseText.match(/\{[\s\S]*\}/);
|
|
420
532
|
if (match) {
|
|
421
|
-
const
|
|
422
|
-
if (isObject(
|
|
533
|
+
const parsed = JSON.parse(match[0]);
|
|
534
|
+
if (isObject(parsed) && Object.hasOwn(parsed, "prompt") && isString(parsed.prompt) && Object.hasOwn(parsed, "options") && Object.hasOwn(parsed, "freeFormInput") && typeof parsed.freeFormInput === "boolean") {
|
|
535
|
+
const obj = parsed;
|
|
423
536
|
if (this._lastPrompt === obj.prompt) {
|
|
537
|
+
this._logService.trace("OutputMonitor: determineUserInputOptions ignoring duplicate prompt");
|
|
424
538
|
return;
|
|
425
539
|
}
|
|
426
540
|
if (obj.freeFormInput === true) {
|
|
541
|
+
const suggestedInput = isString(obj.input) && obj.input.trim().length ? obj.input.trim() : undefined;
|
|
427
542
|
return {
|
|
428
543
|
prompt: obj.prompt,
|
|
429
544
|
options: [],
|
|
430
|
-
detectedRequestForFreeFormInput: true
|
|
545
|
+
detectedRequestForFreeFormInput: true,
|
|
546
|
+
suggestedInput
|
|
431
547
|
};
|
|
432
548
|
}
|
|
433
549
|
if (Array.isArray(obj.options) && obj.options.every(isString)) {
|
|
@@ -452,25 +568,73 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
452
568
|
}
|
|
453
569
|
}
|
|
454
570
|
} catch (err) {
|
|
455
|
-
|
|
571
|
+
this._logService.trace(
|
|
572
|
+
"OutputMonitor: Failed to parse confirmation prompt from language model response",
|
|
573
|
+
err
|
|
574
|
+
);
|
|
456
575
|
}
|
|
457
576
|
return undefined;
|
|
458
577
|
}
|
|
459
|
-
|
|
460
|
-
|
|
578
|
+
_isSensitivePrompt(prompt) {
|
|
579
|
+
return /(password|passphrase|token|api\s*key|secret)/i.test(prompt);
|
|
580
|
+
}
|
|
581
|
+
_isAutopilotMode() {
|
|
582
|
+
if (!this._sessionResource) {
|
|
583
|
+
return false;
|
|
584
|
+
}
|
|
585
|
+
const widget = this._chatWidgetService.getWidgetBySessionResource(this._sessionResource) ?? this._chatWidgetService.lastFocusedWidget;
|
|
586
|
+
if (widget?.input.currentModeInfo.permissionLevel === ChatPermissionLevel.Autopilot) {
|
|
587
|
+
return true;
|
|
588
|
+
}
|
|
589
|
+
const model = this._chatService.getSession(this._sessionResource);
|
|
590
|
+
const request = model?.getRequests().at(-1);
|
|
591
|
+
return request?.modeInfo?.permissionLevel === ChatPermissionLevel.Autopilot;
|
|
592
|
+
}
|
|
593
|
+
_normalizeAutoReplyInput(input) {
|
|
594
|
+
if (!input) {
|
|
461
595
|
return undefined;
|
|
462
596
|
}
|
|
463
|
-
const
|
|
464
|
-
if (!
|
|
597
|
+
const trimmed = input.trim();
|
|
598
|
+
if (!trimmed) {
|
|
465
599
|
return undefined;
|
|
466
600
|
}
|
|
467
|
-
const
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
}
|
|
471
|
-
|
|
601
|
+
const lowered = trimmed.toLowerCase();
|
|
602
|
+
if (lowered === "\\r" || lowered === "\\n" || lowered === "enter" || lowered === "return") {
|
|
603
|
+
return "";
|
|
604
|
+
}
|
|
605
|
+
return trimmed;
|
|
606
|
+
}
|
|
607
|
+
_extractExplicitInputFromPrompt(prompt) {
|
|
608
|
+
const normalizedPrompt = prompt.trim();
|
|
609
|
+
if (!normalizedPrompt) {
|
|
472
610
|
return undefined;
|
|
473
611
|
}
|
|
612
|
+
const directCommandMatch = normalizedPrompt.match(/\b(?:type|enter|input)\s+["'`]([^"'`]+)["'`]/i);
|
|
613
|
+
if (directCommandMatch?.[1]) {
|
|
614
|
+
return directCommandMatch[1];
|
|
615
|
+
}
|
|
616
|
+
const bareCommandMatch = normalizedPrompt.match(/\b(?:type|enter|input)\s+([\w.-]+)\b/i);
|
|
617
|
+
if (bareCommandMatch?.[1]) {
|
|
618
|
+
return bareCommandMatch[1];
|
|
619
|
+
}
|
|
620
|
+
return undefined;
|
|
621
|
+
}
|
|
622
|
+
async _selectAndHandleOption(confirmationPrompt, token) {
|
|
623
|
+
if (!confirmationPrompt?.options.length) {
|
|
624
|
+
return undefined;
|
|
625
|
+
}
|
|
626
|
+
const autoReply = this._configurationService.getValue(TerminalChatAgentToolsSettingId.AutoReplyToPrompts) || this._isAutopilotMode();
|
|
627
|
+
let model = this._chatWidgetService.getWidgetsByLocations(ChatAgentLocation.Chat)[0]?.input.currentLanguageModel;
|
|
628
|
+
if (model) {
|
|
629
|
+
const models = await this._languageModelsService.selectLanguageModels({
|
|
630
|
+
vendor: "copilot",
|
|
631
|
+
family: model.replaceAll("copilot/", "")
|
|
632
|
+
});
|
|
633
|
+
model = models[0];
|
|
634
|
+
}
|
|
635
|
+
if (!model) {
|
|
636
|
+
model = await this._getLanguageModel();
|
|
637
|
+
}
|
|
474
638
|
const prompt = confirmationPrompt.prompt;
|
|
475
639
|
const options = confirmationPrompt.options;
|
|
476
640
|
const currentMarker = this._execution.instance.registerMarker();
|
|
@@ -479,26 +643,55 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
479
643
|
}
|
|
480
644
|
this._lastPromptMarker = currentMarker;
|
|
481
645
|
this._lastPrompt = prompt;
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
646
|
+
let suggestedOption = "";
|
|
647
|
+
if (model) {
|
|
648
|
+
try {
|
|
649
|
+
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.`;
|
|
650
|
+
const response = await this._languageModelsService.sendChatRequest(model, undefined, [{
|
|
651
|
+
role: ChatMessageRole.User,
|
|
652
|
+
content: [{
|
|
653
|
+
type: "text",
|
|
654
|
+
value: promptText
|
|
655
|
+
}]
|
|
656
|
+
}], {}, token);
|
|
657
|
+
suggestedOption = (await getTextResponseFromStream(response)).trim();
|
|
658
|
+
} catch (err) {
|
|
659
|
+
this._logService.trace("OutputMonitor: Failed to get suggested option from model", err);
|
|
660
|
+
}
|
|
661
|
+
} else if (!autoReply) {
|
|
662
|
+
return undefined;
|
|
493
663
|
}
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
664
|
+
let validOption;
|
|
665
|
+
let index;
|
|
666
|
+
if (!suggestedOption) {
|
|
667
|
+
if (autoReply) {
|
|
668
|
+
validOption = options[0];
|
|
669
|
+
index = 0;
|
|
670
|
+
this._logService.trace(
|
|
671
|
+
`OutputMonitor: No LLM suggestion, falling back to first option: ${validOption}`
|
|
672
|
+
);
|
|
673
|
+
} else {
|
|
674
|
+
return;
|
|
675
|
+
}
|
|
676
|
+
} else {
|
|
677
|
+
const match = matchTerminalPromptOption(confirmationPrompt.options, suggestedOption);
|
|
678
|
+
if (!match.option || match.index === -1) {
|
|
679
|
+
if (autoReply) {
|
|
680
|
+
validOption = options[0];
|
|
681
|
+
index = 0;
|
|
682
|
+
this._logService.trace(
|
|
683
|
+
`OutputMonitor: LLM suggestion '${suggestedOption}' didn't match options, falling back to first option: ${validOption}`
|
|
684
|
+
);
|
|
685
|
+
} else {
|
|
686
|
+
return;
|
|
687
|
+
}
|
|
688
|
+
} else {
|
|
689
|
+
validOption = match.option;
|
|
690
|
+
index = match.index;
|
|
691
|
+
}
|
|
499
692
|
}
|
|
500
693
|
let sentToTerminal = false;
|
|
501
|
-
if (
|
|
694
|
+
if (autoReply) {
|
|
502
695
|
await this._execution.instance.sendText(validOption, true);
|
|
503
696
|
this._outputMonitorTelemetryCounters.inputToolAutoAcceptCount++;
|
|
504
697
|
this._outputMonitorTelemetryCounters.inputToolAutoChars += validOption?.length || 0;
|
|
@@ -521,11 +714,11 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
521
714
|
const {
|
|
522
715
|
promise: userPrompt,
|
|
523
716
|
part
|
|
524
|
-
} = this._createElicitationPart(token, execution.
|
|
525
|
-
|
|
717
|
+
} = this._createElicitationPart(token, execution.sessionResource, ( new MarkdownString(( localize(13580, "The terminal is awaiting input.")))), ( new MarkdownString(( localize(
|
|
718
|
+
13581,
|
|
526
719
|
"{0}\nPlease provide the required input to the terminal.\n\n",
|
|
527
720
|
confirmationPrompt.prompt
|
|
528
|
-
)))), "", ( localize(
|
|
721
|
+
)))), "", ( localize(13582, "Focus terminal")), undefined, () => {
|
|
529
722
|
this._showInstance(execution.instance.instanceId);
|
|
530
723
|
return focusTerminalSelection;
|
|
531
724
|
});
|
|
@@ -578,17 +771,17 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
578
771
|
const {
|
|
579
772
|
promise: userPrompt,
|
|
580
773
|
part
|
|
581
|
-
} = this._createElicitationPart(token, execution.
|
|
582
|
-
|
|
774
|
+
} = this._createElicitationPart(token, execution.sessionResource, ( new MarkdownString(( localize(13583, "The terminal is awaiting input.")))), ( new MarkdownString(( localize(
|
|
775
|
+
13584,
|
|
583
776
|
"{0}\n Do you want to send `{1}`{2} followed by `Enter` to the terminal?",
|
|
584
777
|
confirmationPrompt.prompt,
|
|
585
778
|
suggestedOptionValue,
|
|
586
779
|
isString(suggestedOption) ? "" : suggestedOption.description ? " (" + suggestedOption.description + ")" : ""
|
|
587
|
-
)))), "", ( localize(
|
|
780
|
+
)))), "", ( localize(13585, "Allow")), ( localize(13586, "Focus Terminal")), async value => {
|
|
588
781
|
let option = undefined;
|
|
589
782
|
if (value === true) {
|
|
590
783
|
option = suggestedOptionValue;
|
|
591
|
-
} else if (typeof value === "object" && "label"
|
|
784
|
+
} else if (typeof value === "object" && Object.hasOwn(value, "label")) {
|
|
592
785
|
option = value.label.split(" (")[0];
|
|
593
786
|
}
|
|
594
787
|
this._outputMonitorTelemetryCounters.inputToolManualAcceptCount++;
|
|
@@ -654,7 +847,7 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
654
847
|
}
|
|
655
848
|
_createElicitationPart(
|
|
656
849
|
token,
|
|
657
|
-
|
|
850
|
+
sessionResource,
|
|
658
851
|
title,
|
|
659
852
|
detail,
|
|
660
853
|
subtitle,
|
|
@@ -664,7 +857,7 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
664
857
|
onReject,
|
|
665
858
|
moreActions
|
|
666
859
|
) {
|
|
667
|
-
const chatModel =
|
|
860
|
+
const chatModel = sessionResource && this._chatService.getSession(sessionResource);
|
|
668
861
|
if (!(chatModel instanceof ChatModel)) {
|
|
669
862
|
throw ( new Error("No model"));
|
|
670
863
|
}
|
|
@@ -675,24 +868,30 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
675
868
|
let part;
|
|
676
869
|
const promise = ( new Promise(resolve => {
|
|
677
870
|
const thePart = part = ( new ChatElicitationRequestPart(title, detail, subtitle, acceptLabel, rejectLabel, async value => {
|
|
678
|
-
thePart.hide();
|
|
679
|
-
this._promptPart = undefined;
|
|
680
871
|
try {
|
|
681
872
|
const r = await (onAccept ? onAccept(value) : undefined);
|
|
682
873
|
resolve(r);
|
|
874
|
+
if (typeof r === "symbol") {
|
|
875
|
+
return ElicitationState.Pending;
|
|
876
|
+
}
|
|
683
877
|
} catch {
|
|
684
878
|
resolve(undefined);
|
|
685
879
|
}
|
|
686
|
-
return ElicitationState.Accepted;
|
|
687
|
-
}, async () => {
|
|
688
880
|
thePart.hide();
|
|
689
881
|
this._promptPart = undefined;
|
|
882
|
+
return ElicitationState.Accepted;
|
|
883
|
+
}, async () => {
|
|
690
884
|
try {
|
|
691
885
|
const r = await (onReject ? onReject() : undefined);
|
|
692
886
|
resolve(r);
|
|
887
|
+
if (typeof r === "symbol") {
|
|
888
|
+
return ElicitationState.Pending;
|
|
889
|
+
}
|
|
693
890
|
} catch {
|
|
694
891
|
resolve(undefined);
|
|
695
892
|
}
|
|
893
|
+
thePart.hide();
|
|
894
|
+
this._promptPart = undefined;
|
|
696
895
|
return ElicitationState.Rejected;
|
|
697
896
|
},
|
|
698
897
|
undefined, moreActions, () => this._outputMonitorTelemetryCounters.inputToolManualShownCount++));
|
|
@@ -706,16 +905,10 @@ let OutputMonitor = class OutputMonitor extends Disposable {
|
|
|
706
905
|
};
|
|
707
906
|
}
|
|
708
907
|
async _getLanguageModel() {
|
|
709
|
-
|
|
908
|
+
const models = await this._languageModelsService.selectLanguageModels({
|
|
710
909
|
vendor: "copilot",
|
|
711
910
|
id: "copilot-fast"
|
|
712
911
|
});
|
|
713
|
-
if (!models.length) {
|
|
714
|
-
models = await this._languageModelsService.selectLanguageModels({
|
|
715
|
-
vendor: "copilot",
|
|
716
|
-
family: "gpt-4o-mini"
|
|
717
|
-
});
|
|
718
|
-
}
|
|
719
912
|
return models.length ? models[0] : undefined;
|
|
720
913
|
}
|
|
721
914
|
};
|
|
@@ -741,6 +934,46 @@ function getMoreActions(suggestedOption, confirmationPrompt) {
|
|
|
741
934
|
}
|
|
742
935
|
return moreActions.length ? moreActions : undefined;
|
|
743
936
|
}
|
|
937
|
+
function matchTerminalPromptOption(options, suggestedOption) {
|
|
938
|
+
const normalize = value => value.replace(/['"`]/g, "").trim().replace(/[.,:;]+$/, "");
|
|
939
|
+
const normalizedSuggestion = normalize(suggestedOption);
|
|
940
|
+
if (!normalizedSuggestion) {
|
|
941
|
+
return {
|
|
942
|
+
option: undefined,
|
|
943
|
+
index: -1
|
|
944
|
+
};
|
|
945
|
+
}
|
|
946
|
+
const candidates = [normalizedSuggestion];
|
|
947
|
+
const firstWhitespaceToken = normalizedSuggestion.split(/\s+/)[0];
|
|
948
|
+
if (firstWhitespaceToken && firstWhitespaceToken !== normalizedSuggestion) {
|
|
949
|
+
candidates.push(firstWhitespaceToken);
|
|
950
|
+
}
|
|
951
|
+
const firstAlphaNum = normalizedSuggestion.match(/[A-Za-z0-9]+/);
|
|
952
|
+
if (firstAlphaNum?.[0] && firstAlphaNum[0] !== normalizedSuggestion && firstAlphaNum[0] !== firstWhitespaceToken) {
|
|
953
|
+
candidates.push(firstAlphaNum[0]);
|
|
954
|
+
}
|
|
955
|
+
for (const candidate of candidates) {
|
|
956
|
+
const exactIndex = options.findIndex(opt => normalize(opt) === candidate);
|
|
957
|
+
if (exactIndex !== -1) {
|
|
958
|
+
return {
|
|
959
|
+
option: options[exactIndex],
|
|
960
|
+
index: exactIndex
|
|
961
|
+
};
|
|
962
|
+
}
|
|
963
|
+
const lowerCandidate = candidate.toLowerCase();
|
|
964
|
+
const ciIndex = options.findIndex(opt => normalize(opt).toLowerCase() === lowerCandidate);
|
|
965
|
+
if (ciIndex !== -1) {
|
|
966
|
+
return {
|
|
967
|
+
option: options[ciIndex],
|
|
968
|
+
index: ciIndex
|
|
969
|
+
};
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
return {
|
|
973
|
+
option: undefined,
|
|
974
|
+
index: -1
|
|
975
|
+
};
|
|
976
|
+
}
|
|
744
977
|
function detectsInputRequiredPattern(cursorLine) {
|
|
745
978
|
return ([
|
|
746
979
|
/\s*(?:\[[^\]]\]\s+[^\[\s][^\[]*\s*)+(?:\(default is\s+"[^"]+"\):)?\s+$/,
|
|
@@ -768,8 +1001,8 @@ function detectsNonInteractiveHelpPattern(cursorLine) {
|
|
|
768
1001
|
].some(e => e.test(cursorLine)));
|
|
769
1002
|
}
|
|
770
1003
|
const taskFinishMessages = [(
|
|
771
|
-
localize(
|
|
772
|
-
localize(
|
|
1004
|
+
localize(13587, "Terminal will be reused by tasks, press any key to close it.")), ( localize(13588, "Terminal will be reused by tasks, press any key to close it.")), (
|
|
1005
|
+
localize(13589, "Press any key to close the terminal.")), ( localize(13590, "Press any key to close the terminal."))];
|
|
773
1006
|
function detectsVSCodeTaskFinishMessage(cursorLine) {
|
|
774
1007
|
const normalized = cursorLine.replace(/\s/g, "").toLowerCase();
|
|
775
1008
|
return (taskFinishMessages.some(msg => normalized.includes(msg.replace(/\s/g, "").toLowerCase())));
|
|
@@ -781,4 +1014,4 @@ function detectsGenericPressAnyKeyPattern(cursorLine) {
|
|
|
781
1014
|
return /press a(?:ny)? key/i.test(cursorLine);
|
|
782
1015
|
}
|
|
783
1016
|
|
|
784
|
-
export { OutputMonitor, detectsGenericPressAnyKeyPattern, detectsInputRequiredPattern, detectsNonInteractiveHelpPattern, detectsVSCodeTaskFinishMessage };
|
|
1017
|
+
export { OutputMonitor, detectsGenericPressAnyKeyPattern, detectsInputRequiredPattern, detectsNonInteractiveHelpPattern, detectsVSCodeTaskFinishMessage, matchTerminalPromptOption };
|