@codingame/monaco-vscode-chat-service-override 24.3.0 → 25.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 -35
- package/package.json +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatAccessibilityService.d.ts → accessibility/chatAccessibilityService.d.ts} +10 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatAccessibilityService.js → accessibility/chatAccessibilityService.js} +23 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatResponseAccessibleView.d.ts → accessibility/chatResponseAccessibleView.d.ts} +6 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatResponseAccessibleView.js → accessibility/chatResponseAccessibleView.js} +38 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatTerminalOutputAccessibleView.js → accessibility/chatTerminalOutputAccessibleView.js} +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +69 -60
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +2 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatClear.d.ts +3 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatClear.js +25 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +24 -22
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +13 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +48 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +10 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +16 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +9 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +35 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.d.ts +4 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +22 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTransfer.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTransfer.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.d.ts +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +21 -21
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +31 -53
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.d.ts +61 -25
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +482 -125
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.d.ts +16 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.js +84 -93
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +10 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.d.ts +7 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.js +41 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.d.ts +23 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +137 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.d.ts +15 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +92 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.d.ts +81 -32
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.js +335 -102
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.d.ts +3 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.js +47 -51
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +80 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatAttachmentResolveService.d.ts → attachments/chatAttachmentResolveService.d.ts} +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatAttachmentResolveService.js → attachments/chatAttachmentResolveService.js} +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatVariables.d.ts → attachments/chatVariables.d.ts} +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatVariables.js → attachments/chatVariables.js} +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatEditing → attachments}/simpleBrowserEditorOverlay.js +21 -21
- package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +171 -206
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditing.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimeline.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorAccessibility.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorAccessibility.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +20 -20
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +14 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.d.ts +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.d.ts +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingOperations.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingOperations.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.d.ts +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +10 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.d.ts +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +6 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookEditorIntegration.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookFileSystemProvider.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookFileSystemProvider.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditor.js +18 -18
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +41 -41
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.js +10 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +35 -35
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatSessions.contribution.d.ts → chatSessions/chatSessions.contribution.d.ts} +7 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatSessions.contribution.js → chatSessions/chatSessions.contribution.js} +53 -106
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +18 -22
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +10 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.d.ts +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +29 -29
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +13 -13
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.d.ts +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusDashboard.js +64 -64
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +12 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.d.ts +22 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +90 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatContextService.d.ts → contextContrib/chatContextService.d.ts} +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatContextService.js → contextContrib/chatContextService.js} +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +7 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +8 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/{languageModelToolsConfirmationService.d.ts → tools/languageModelToolsConfirmationService.d.ts} +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/{languageModelToolsConfirmationService.js → tools/languageModelToolsConfirmationService.js} +47 -58
- package/vscode/src/vs/workbench/contrib/chat/browser/{languageModelToolsService.d.ts → tools/languageModelToolsService.d.ts} +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/{languageModelToolsService.js → tools/languageModelToolsService.js} +21 -21
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +16 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +5 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatContentParts → widget/chatContentParts}/chatMarkdownAnchorService.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatLayoutService.d.ts → widget/chatLayoutService.d.ts} +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatWidgetService.d.ts → widget/chatWidgetService.d.ts} +6 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatWidgetService.js → widget/chatWidgetService.js} +27 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatStatusWidget.d.ts → widget/input/chatStatusWidget.d.ts} +4 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatStatusWidget.js → widget/input/chatStatusWidget.js} +17 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/{contrib → widget/input/editor}/chatInputEditorContrib.js +12 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/{contrib → widget/input/editor}/chatInputEditorHover.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/{contrib → widget/input/editor}/chatInputEditorHover.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatQuick.d.ts → widgetHosts/chatQuick.d.ts} +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatQuick.js → widgetHosts/chatQuick.js} +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatEditor.d.ts → widgetHosts/editor/chatEditor.d.ts} +4 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatEditor.js → widgetHosts/editor/chatEditor.js} +6 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatViewPane.d.ts → widgetHosts/viewPane/chatViewPane.d.ts} +46 -31
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatViewPane.js → widgetHosts/viewPane/chatViewPane.js} +258 -154
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatViewTitleControl.d.ts → widgetHosts/viewPane/chatViewTitleControl.d.ts} +5 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/{chatViewTitleControl.js → widgetHosts/viewPane/chatViewTitleControl.js} +97 -85
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewPane.css +176 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewTitleControl.css +89 -0
- package/vscode/src/vs/workbench/contrib/chat/common/{chatServiceImpl.d.ts → chatService/chatServiceImpl.d.ts} +16 -20
- package/vscode/src/vs/workbench/contrib/chat/common/{chatServiceImpl.js → chatService/chatServiceImpl.js} +97 -151
- package/vscode/src/vs/workbench/contrib/chat/common/{chatServiceTelemetry.d.ts → chatService/chatServiceTelemetry.d.ts} +4 -4
- package/vscode/src/vs/workbench/contrib/chat/common/{chatServiceTelemetry.js → chatService/chatServiceTelemetry.js} +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/{chatCodeMapperService.d.ts → editing/chatCodeMapperService.d.ts} +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/{chatModelStore.d.ts → model/chatModelStore.d.ts} +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/{chatProgressTypes → model/chatProgressTypes}/chatToolInvocation.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/{chatProgressTypes → model/chatProgressTypes}/chatToolInvocation.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/common/{chatSessionStore.d.ts → model/chatSessionStore.d.ts} +14 -7
- package/vscode/src/vs/workbench/contrib/chat/common/{chatSessionStore.js → model/chatSessionStore.js} +164 -39
- package/vscode/src/vs/workbench/contrib/chat/common/{chatTransferService.d.ts → model/chatTransferService.d.ts} +3 -3
- package/vscode/src/vs/workbench/contrib/chat/common/{chatTransferService.js → model/chatTransferService.js} +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/{chatSlashCommands.d.ts → participants/chatSlashCommands.d.ts} +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +25 -49
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptBodyAutocompletion.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptBodyAutocompletion.js +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +6 -6
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +29 -29
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +54 -54
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +11 -4
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +83 -18
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +11 -5
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +27 -10
- package/vscode/src/vs/workbench/contrib/chat/common/{chatTodoListService.d.ts → tools/chatTodoListService.d.ts} +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/{chatTodoListService.js → tools/chatTodoListService.js} +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +29 -29
- package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +3 -3
- package/vscode/src/vs/workbench/contrib/chat/common/{chatResponseResourceFileSystemProvider.d.ts → widget/chatResponseResourceFileSystemProvider.d.ts} +1 -1
- package/vscode/src/vs/workbench/contrib/chat/common/{chatResponseResourceFileSystemProvider.js → widget/chatResponseResourceFileSystemProvider.js} +4 -4
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +5 -5
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibilityHelp.js +1 -1
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +23 -23
- package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +7 -7
- package/vscode/src/vs/workbench/contrib/remoteCodingAgents/common/remoteCodingAgentsService.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/media/terminalChatWidget.css +1 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +16 -16
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +47 -30
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatEnabler.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatEnabler.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.d.ts +15 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.js +33 -11
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.d.ts +4 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +6 -5
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.js +12 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.js +17 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.js +12 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/strategyHelpers.d.ts +10 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/strategyHelpers.js +22 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.d.ts +3 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +100 -23
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +6 -6
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +19 -6
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{commandLineAutoApprover.d.ts → tools/commandLineAnalyzer/autoApprove/commandLineAutoApprover.d.ts} +11 -12
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{commandLineAutoApprover.js → tools/commandLineAnalyzer/autoApprove/commandLineAutoApprover.js} +83 -6
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.d.ts +45 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +156 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAnalyzer.d.ts +17 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAnalyzer.js +10 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +64 -26
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +16 -8
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLinePreventHistoryRewriter.d.ts +14 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLinePreventHistoryRewriter.js +31 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +4 -4
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +4 -4
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +4 -4
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +3 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +55 -23
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.d.ts +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +85 -46
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +16 -16
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +9 -9
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +16 -16
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +9 -5
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatSessionActions.d.ts +0 -46
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatSessionActions.js +0 -248
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsView.d.ts +0 -36
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsView.js +0 -184
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsview.css +0 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/chatSessionsView.d.ts +0 -22
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/chatSessionsView.js +0 -229
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/sessionsTreeRenderer.d.ts +0 -102
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/sessionsTreeRenderer.js +0 -495
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/sessionsViewPane.d.ts +0 -64
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/view/sessionsViewPane.js +0 -386
- package/vscode/src/vs/workbench/contrib/chat/browser/media/chatSessions.css +0 -299
- package/vscode/src/vs/workbench/contrib/chat/browser/media/chatViewPane.css +0 -142
- package/vscode/src/vs/workbench/contrib/chat/browser/media/chatViewTitleControl.css +0 -39
- /package/vscode/src/vs/workbench/contrib/chat/browser/{chatTerminalOutputAccessibleView.d.ts → accessibility/chatTerminalOutputAccessibleView.d.ts} +0 -0
- /package/vscode/src/vs/workbench/contrib/chat/browser/{media → attachments/media}/simpleBrowserOverlay.css +0 -0
- /package/vscode/src/vs/workbench/contrib/chat/browser/{chatEditing → attachments}/simpleBrowserEditorOverlay.d.ts +0 -0
- /package/vscode/src/vs/workbench/contrib/chat/browser/{media → chatEditing/media}/chatEditingEditorOverlay.css +0 -0
- /package/vscode/src/vs/workbench/contrib/chat/browser/{media → chatEditing/media}/chatEditorController.css +0 -0
- /package/vscode/src/vs/workbench/contrib/chat/browser/{chatContentParts → widget/chatContentParts}/chatMarkdownAnchorService.js +0 -0
- /package/vscode/src/vs/workbench/contrib/chat/browser/{chatLayoutService.js → widget/chatLayoutService.js} +0 -0
- /package/vscode/src/vs/workbench/contrib/chat/browser/{chatEdinputInputContentProvider.d.ts → widget/input/editor/chatEditorInputContentProvider.d.ts} +0 -0
- /package/vscode/src/vs/workbench/contrib/chat/browser/{chatEdinputInputContentProvider.js → widget/input/editor/chatEditorInputContentProvider.js} +0 -0
- /package/vscode/src/vs/workbench/contrib/chat/browser/{contrib → widget/input/editor}/chatInputEditorContrib.d.ts +0 -0
- /package/vscode/src/vs/workbench/contrib/chat/browser/{contrib → widget/input/editor}/editorHoverWrapper.d.ts +0 -0
- /package/vscode/src/vs/workbench/contrib/chat/browser/{contrib → widget/input/editor}/editorHoverWrapper.js +0 -0
- /package/vscode/src/vs/workbench/contrib/chat/browser/{contrib → widget/input/editor}/media/editorHoverWrapper.css +0 -0
- /package/vscode/src/vs/workbench/contrib/chat/browser/{media → widget/input/media}/chatStatusWidget.css +0 -0
- /package/vscode/src/vs/workbench/contrib/chat/common/{chatCodeMapperService.js → editing/chatCodeMapperService.js} +0 -0
- /package/vscode/src/vs/workbench/contrib/chat/common/{chatModelStore.js → model/chatModelStore.js} +0 -0
- /package/vscode/src/vs/workbench/contrib/chat/common/{chatSlashCommands.js → participants/chatSlashCommands.js} +0 -0
|
@@ -1,24 +1,29 @@
|
|
|
1
1
|
|
|
2
2
|
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
|
|
3
|
+
import { structuralEquals } from '@codingame/monaco-vscode-api/vscode/vs/base/common/equals';
|
|
3
4
|
import { Disposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
4
5
|
import { regExpLeadsToEndlessLoop, escapeRegExpCharacters } from '@codingame/monaco-vscode-api/vscode/vs/base/common/strings';
|
|
5
6
|
import { isObject } from '@codingame/monaco-vscode-api/vscode/vs/base/common/types';
|
|
6
|
-
import { structuralEquals } from '@codingame/monaco-vscode-api/vscode/vs/base/common/equals';
|
|
7
7
|
import { ConfigurationTarget } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration';
|
|
8
8
|
import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
|
|
9
|
+
import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
|
|
10
|
+
import { ITerminalChatService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminal/browser/terminal.service';
|
|
9
11
|
import { TerminalChatAgentToolsSettingId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration';
|
|
10
|
-
import { isPowerShell } from '
|
|
12
|
+
import { isPowerShell } from '../../../runInTerminalHelpers.js';
|
|
13
|
+
import { NpmScriptAutoApprover } from './npmScriptAutoApprover.js';
|
|
11
14
|
|
|
12
15
|
const neverMatchRegex = /(?!.*)/;
|
|
13
16
|
const transientEnvVarRegex = /^[A-Z_][A-Z0-9_]*=/i;
|
|
14
17
|
let CommandLineAutoApprover = class CommandLineAutoApprover extends Disposable {
|
|
15
|
-
constructor(_configurationService) {
|
|
18
|
+
constructor(_configurationService, instantiationService, _terminalChatService) {
|
|
16
19
|
super();
|
|
17
20
|
this._configurationService = _configurationService;
|
|
21
|
+
this._terminalChatService = _terminalChatService;
|
|
18
22
|
this._denyListRules = [];
|
|
19
23
|
this._allowListRules = [];
|
|
20
24
|
this._allowListCommandLineRules = [];
|
|
21
25
|
this._denyListCommandLineRules = [];
|
|
26
|
+
this._npmScriptAutoApprover = this._register(instantiationService.createInstance(NpmScriptAutoApprover));
|
|
22
27
|
this.updateConfiguration();
|
|
23
28
|
this._register(this._configurationService.onDidChangeConfiguration(e => {
|
|
24
29
|
if (e.affectsConfiguration(TerminalChatAgentToolsSettingId.AutoApprove) ||
|
|
@@ -44,7 +49,7 @@ let CommandLineAutoApprover = class CommandLineAutoApprover extends Disposable {
|
|
|
44
49
|
this._allowListCommandLineRules = allowListCommandLineRules;
|
|
45
50
|
this._denyListCommandLineRules = denyListCommandLineRules;
|
|
46
51
|
}
|
|
47
|
-
isCommandAutoApproved(command, shell, os) {
|
|
52
|
+
async isCommandAutoApproved(command, shell, os, cwd, chatSessionId) {
|
|
48
53
|
if (transientEnvVarRegex.test(command)) {
|
|
49
54
|
return {
|
|
50
55
|
result: 'denied',
|
|
@@ -60,6 +65,15 @@ let CommandLineAutoApprover = class CommandLineAutoApprover extends Disposable {
|
|
|
60
65
|
};
|
|
61
66
|
}
|
|
62
67
|
}
|
|
68
|
+
for (const rule of this._getSessionRules(chatSessionId).allowListRules) {
|
|
69
|
+
if (this._commandMatchesRule(rule, command, shell, os)) {
|
|
70
|
+
return {
|
|
71
|
+
result: 'approved',
|
|
72
|
+
rule,
|
|
73
|
+
reason: `Command '${command}' is approved by session allow list rule: ${rule.sourceText}`
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
63
77
|
for (const rule of this._allowListRules) {
|
|
64
78
|
if (this._commandMatchesRule(rule, command, shell, os)) {
|
|
65
79
|
return {
|
|
@@ -69,12 +83,20 @@ let CommandLineAutoApprover = class CommandLineAutoApprover extends Disposable {
|
|
|
69
83
|
};
|
|
70
84
|
}
|
|
71
85
|
}
|
|
86
|
+
const npmScriptResult = await this._npmScriptAutoApprover.isCommandAutoApproved(command, cwd);
|
|
87
|
+
if (npmScriptResult.isAutoApproved) {
|
|
88
|
+
return {
|
|
89
|
+
result: 'approved',
|
|
90
|
+
rule: { type: 'npmScript', npmScriptResult },
|
|
91
|
+
reason: `Command '${command}' is approved as npm script '${npmScriptResult.scriptName}' is defined in package.json`
|
|
92
|
+
};
|
|
93
|
+
}
|
|
72
94
|
return {
|
|
73
95
|
result: 'noMatch',
|
|
74
96
|
reason: `Command '${command}' has no matching auto approve entries`
|
|
75
97
|
};
|
|
76
98
|
}
|
|
77
|
-
isCommandLineAutoApproved(commandLine) {
|
|
99
|
+
isCommandLineAutoApproved(commandLine, chatSessionId) {
|
|
78
100
|
for (const rule of this._denyListCommandLineRules) {
|
|
79
101
|
if (rule.regex.test(commandLine)) {
|
|
80
102
|
return {
|
|
@@ -84,6 +106,15 @@ let CommandLineAutoApprover = class CommandLineAutoApprover extends Disposable {
|
|
|
84
106
|
};
|
|
85
107
|
}
|
|
86
108
|
}
|
|
109
|
+
for (const rule of this._getSessionRules(chatSessionId).allowListCommandLineRules) {
|
|
110
|
+
if (rule.regex.test(commandLine)) {
|
|
111
|
+
return {
|
|
112
|
+
result: 'approved',
|
|
113
|
+
rule,
|
|
114
|
+
reason: `Command line '${commandLine}' is approved by session allow list rule: ${rule.sourceText}`
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
87
118
|
for (const rule of this._allowListCommandLineRules) {
|
|
88
119
|
if (rule.regex.test(commandLine)) {
|
|
89
120
|
return {
|
|
@@ -98,6 +129,50 @@ let CommandLineAutoApprover = class CommandLineAutoApprover extends Disposable {
|
|
|
98
129
|
reason: `Command line '${commandLine}' has no matching auto approve entries`
|
|
99
130
|
};
|
|
100
131
|
}
|
|
132
|
+
_getSessionRules(chatSessionId) {
|
|
133
|
+
const denyListRules = [];
|
|
134
|
+
const allowListRules = [];
|
|
135
|
+
const allowListCommandLineRules = [];
|
|
136
|
+
const denyListCommandLineRules = [];
|
|
137
|
+
if (!chatSessionId) {
|
|
138
|
+
return { denyListRules, allowListRules, allowListCommandLineRules, denyListCommandLineRules };
|
|
139
|
+
}
|
|
140
|
+
const sessionRulesConfig = this._terminalChatService.getSessionAutoApproveRules(chatSessionId);
|
|
141
|
+
for (const [key, value] of Object.entries(sessionRulesConfig)) {
|
|
142
|
+
if (typeof value === 'boolean') {
|
|
143
|
+
const { regex, regexCaseInsensitive } = this._convertAutoApproveEntryToRegex(key);
|
|
144
|
+
if (value === true) {
|
|
145
|
+
allowListRules.push({ regex, regexCaseInsensitive, sourceText: key, sourceTarget: 'session', isDefaultRule: false });
|
|
146
|
+
}
|
|
147
|
+
else if (value === false) {
|
|
148
|
+
denyListRules.push({ regex, regexCaseInsensitive, sourceText: key, sourceTarget: 'session', isDefaultRule: false });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else if (typeof value === 'object' && value !== null) {
|
|
152
|
+
const objectValue = value;
|
|
153
|
+
if (typeof objectValue.approve === 'boolean') {
|
|
154
|
+
const { regex, regexCaseInsensitive } = this._convertAutoApproveEntryToRegex(key);
|
|
155
|
+
if (objectValue.approve === true) {
|
|
156
|
+
if (objectValue.matchCommandLine === true) {
|
|
157
|
+
allowListCommandLineRules.push({ regex, regexCaseInsensitive, sourceText: key, sourceTarget: 'session', isDefaultRule: false });
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
allowListRules.push({ regex, regexCaseInsensitive, sourceText: key, sourceTarget: 'session', isDefaultRule: false });
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else if (objectValue.approve === false) {
|
|
164
|
+
if (objectValue.matchCommandLine === true) {
|
|
165
|
+
denyListCommandLineRules.push({ regex, regexCaseInsensitive, sourceText: key, sourceTarget: 'session', isDefaultRule: false });
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
denyListRules.push({ regex, regexCaseInsensitive, sourceText: key, sourceTarget: 'session', isDefaultRule: false });
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return { denyListRules, allowListRules, allowListCommandLineRules, denyListCommandLineRules };
|
|
175
|
+
}
|
|
101
176
|
_commandMatchesRule(rule, command, shell, os) {
|
|
102
177
|
const isPwsh = isPowerShell(shell, os);
|
|
103
178
|
if ((isPwsh ? rule.regexCaseInsensitive : rule.regex).test(command)) {
|
|
@@ -229,7 +304,9 @@ let CommandLineAutoApprover = class CommandLineAutoApprover extends Disposable {
|
|
|
229
304
|
}
|
|
230
305
|
};
|
|
231
306
|
CommandLineAutoApprover = ( __decorate([
|
|
232
|
-
( __param(0, IConfigurationService))
|
|
307
|
+
( __param(0, IConfigurationService)),
|
|
308
|
+
( __param(1, IInstantiationService)),
|
|
309
|
+
( __param(2, ITerminalChatService))
|
|
233
310
|
], CommandLineAutoApprover));
|
|
234
311
|
|
|
235
312
|
export { CommandLineAutoApprover };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type IMarkdownString } from "@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent";
|
|
2
|
+
import { Disposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
|
|
3
|
+
import { URI } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
|
|
4
|
+
import { IUriIdentityService } from "@codingame/monaco-vscode-api/vscode/vs/platform/uriIdentity/common/uriIdentity.service";
|
|
5
|
+
import { IConfigurationService } from "@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service";
|
|
6
|
+
import { IFileService } from "@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service";
|
|
7
|
+
import { IWorkspaceContextService } from "@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspace.service";
|
|
8
|
+
export interface INpmScriptAutoApproveResult {
|
|
9
|
+
isAutoApproved: boolean;
|
|
10
|
+
scriptName?: string;
|
|
11
|
+
autoApproveInfo?: IMarkdownString;
|
|
12
|
+
}
|
|
13
|
+
export declare class NpmScriptAutoApprover extends Disposable {
|
|
14
|
+
private readonly _configurationService;
|
|
15
|
+
private readonly _fileService;
|
|
16
|
+
private readonly _uriIdentityService;
|
|
17
|
+
private readonly _workspaceContextService;
|
|
18
|
+
constructor(_configurationService: IConfigurationService, _fileService: IFileService, _uriIdentityService: IUriIdentityService, _workspaceContextService: IWorkspaceContextService);
|
|
19
|
+
/**
|
|
20
|
+
* Checks if a single command is an npm/yarn/pnpm script that exists in package.json.
|
|
21
|
+
* Returns auto-approve result if the command is a valid script.
|
|
22
|
+
*/
|
|
23
|
+
isCommandAutoApproved(command: string, cwd: URI | undefined): Promise<INpmScriptAutoApproveResult>;
|
|
24
|
+
/**
|
|
25
|
+
* Extracts script name from an npm/yarn/pnpm run command.
|
|
26
|
+
*/
|
|
27
|
+
private _extractScriptName;
|
|
28
|
+
/**
|
|
29
|
+
* Checks if a URI is within any workspace folder.
|
|
30
|
+
*/
|
|
31
|
+
private _isWithinWorkspace;
|
|
32
|
+
/**
|
|
33
|
+
* Finds and parses package.json to get the scripts section.
|
|
34
|
+
* Only looks within the workspace for security.
|
|
35
|
+
*/
|
|
36
|
+
private _getPackageJsonScripts;
|
|
37
|
+
/**
|
|
38
|
+
* Reads and parses the scripts section from a package.json file.
|
|
39
|
+
*/
|
|
40
|
+
private _readPackageJsonScripts;
|
|
41
|
+
/**
|
|
42
|
+
* Parses the scripts section from package.json content using jsonc-parser.
|
|
43
|
+
*/
|
|
44
|
+
private _parsePackageJsonScripts;
|
|
45
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
|
|
2
|
+
import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
|
|
3
|
+
import { MarkdownString } from '@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent';
|
|
4
|
+
import { visit } from '@codingame/monaco-vscode-api/vscode/vs/base/common/json';
|
|
5
|
+
import { Disposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
6
|
+
import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
|
|
7
|
+
import { IUriIdentityService } from '@codingame/monaco-vscode-api/vscode/vs/platform/uriIdentity/common/uriIdentity.service';
|
|
8
|
+
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
9
|
+
import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
|
|
10
|
+
import { IFileService } from '@codingame/monaco-vscode-api/vscode/vs/platform/files/common/files.service';
|
|
11
|
+
import { IWorkspaceContextService } from '@codingame/monaco-vscode-api/vscode/vs/platform/workspace/common/workspace.service';
|
|
12
|
+
import { TerminalChatAgentToolsSettingId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration';
|
|
13
|
+
|
|
14
|
+
const npmRunPatterns = [
|
|
15
|
+
/^(?<command>npm)\s+(?:run(?:-script)?)\s+(?<scriptName>[^\s&|;]+)/i,
|
|
16
|
+
/^(?<command>npm)\s+(?<scriptName>test|start|stop|restart)\b/i,
|
|
17
|
+
/^(?<command>yarn)\s+(?:run\s+)?(?<scriptName>[^\s&|;]+)/i,
|
|
18
|
+
/^(?<command>pnpm)\s+(?:run\s+)?(?<scriptName>[^\s&|;]+)/i,
|
|
19
|
+
];
|
|
20
|
+
const yarnBuiltinCommands = ( new Set([
|
|
21
|
+
'add', 'audit', 'autoclean', 'bin', 'cache', 'check', 'config',
|
|
22
|
+
'create', 'dedupe', 'dlx', 'exec', 'explain', 'generate-lock-entry',
|
|
23
|
+
'global', 'help', 'import', 'info', 'init', 'install', 'licenses',
|
|
24
|
+
'link', 'list', 'login', 'logout', 'node', 'outdated', 'owner',
|
|
25
|
+
'pack', 'patch', 'patch-commit', 'plugin', 'policies', 'publish',
|
|
26
|
+
'rebuild', 'remove', 'run', 'search', 'set', 'stage', 'tag', 'team',
|
|
27
|
+
'unlink', 'unplug', 'up', 'upgrade', 'upgrade-interactive',
|
|
28
|
+
'version', 'versions', 'why', 'workspace', 'workspaces',
|
|
29
|
+
]));
|
|
30
|
+
const pnpmBuiltinCommands = ( new Set([
|
|
31
|
+
'add', 'audit', 'bin', 'config', 'dedupe', 'deploy', 'dlx', 'doctor',
|
|
32
|
+
'env', 'exec', 'fetch', 'import', 'init', 'install', 'install-test',
|
|
33
|
+
'licenses', 'link', 'list', 'ln', 'ls', 'outdated', 'pack', 'patch',
|
|
34
|
+
'patch-commit', 'patch-remove', 'prune', 'publish', 'rb', 'rebuild',
|
|
35
|
+
'remove', 'rm', 'root', 'run', 'server', 'setup', 'store',
|
|
36
|
+
'un', 'uninstall', 'unlink', 'up', 'update', 'why',
|
|
37
|
+
]));
|
|
38
|
+
let NpmScriptAutoApprover = class NpmScriptAutoApprover extends Disposable {
|
|
39
|
+
constructor(_configurationService, _fileService, _uriIdentityService, _workspaceContextService) {
|
|
40
|
+
super();
|
|
41
|
+
this._configurationService = _configurationService;
|
|
42
|
+
this._fileService = _fileService;
|
|
43
|
+
this._uriIdentityService = _uriIdentityService;
|
|
44
|
+
this._workspaceContextService = _workspaceContextService;
|
|
45
|
+
}
|
|
46
|
+
async isCommandAutoApproved(command, cwd) {
|
|
47
|
+
const isNpmScriptAutoApproveEnabled = this._configurationService.getValue(TerminalChatAgentToolsSettingId.AutoApproveWorkspaceNpmScripts) === true;
|
|
48
|
+
if (!isNpmScriptAutoApproveEnabled) {
|
|
49
|
+
return { isAutoApproved: false };
|
|
50
|
+
}
|
|
51
|
+
const scriptName = this._extractScriptName(command);
|
|
52
|
+
if (!scriptName) {
|
|
53
|
+
return { isAutoApproved: false };
|
|
54
|
+
}
|
|
55
|
+
const packageJsonScripts = await this._getPackageJsonScripts(cwd);
|
|
56
|
+
if (!packageJsonScripts) {
|
|
57
|
+
return { isAutoApproved: false };
|
|
58
|
+
}
|
|
59
|
+
if (!( packageJsonScripts.scripts.has(scriptName))) {
|
|
60
|
+
return { isAutoApproved: false };
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
isAutoApproved: true,
|
|
64
|
+
scriptName,
|
|
65
|
+
autoApproveInfo: ( new MarkdownString(( localize(
|
|
66
|
+
12021,
|
|
67
|
+
'Auto approved as {0} is defined in package.json',
|
|
68
|
+
`\`${scriptName}\``
|
|
69
|
+
)))),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
_extractScriptName(command) {
|
|
73
|
+
const trimmedCommand = command.trim();
|
|
74
|
+
for (const pattern of npmRunPatterns) {
|
|
75
|
+
const match = trimmedCommand.match(pattern);
|
|
76
|
+
if (match?.groups?.scriptName) {
|
|
77
|
+
const { command: pkgManager, scriptName } = match.groups;
|
|
78
|
+
if (pkgManager.toLowerCase() === 'yarn' && ( yarnBuiltinCommands.has(scriptName.toLowerCase()))) {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (pkgManager.toLowerCase() === 'pnpm' && ( pnpmBuiltinCommands.has(scriptName.toLowerCase()))) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
return scriptName;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
_isWithinWorkspace(uri) {
|
|
90
|
+
const workspaceFolders = this._workspaceContextService.getWorkspace().folders;
|
|
91
|
+
return ( workspaceFolders.some(
|
|
92
|
+
(folder) => this._uriIdentityService.extUri.isEqualOrParent(uri, folder.uri)
|
|
93
|
+
));
|
|
94
|
+
}
|
|
95
|
+
async _getPackageJsonScripts(cwd) {
|
|
96
|
+
if (!cwd || !this._isWithinWorkspace(cwd)) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
const packageJsonUri = URI.joinPath(cwd, 'package.json');
|
|
100
|
+
const scripts = await this._readPackageJsonScripts(packageJsonUri);
|
|
101
|
+
if (scripts) {
|
|
102
|
+
return { uri: packageJsonUri, scripts };
|
|
103
|
+
}
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
async _readPackageJsonScripts(packageJsonUri) {
|
|
107
|
+
try {
|
|
108
|
+
const exists = await this._fileService.exists(packageJsonUri);
|
|
109
|
+
if (!exists) {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
const content = await this._fileService.readFile(packageJsonUri);
|
|
113
|
+
const text = ( content.value.toString());
|
|
114
|
+
return this._parsePackageJsonScripts(text);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return undefined;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
_parsePackageJsonScripts(content) {
|
|
121
|
+
const scripts = ( new Set());
|
|
122
|
+
let inScripts = false;
|
|
123
|
+
let level = 0;
|
|
124
|
+
const visitor = {
|
|
125
|
+
onError() {
|
|
126
|
+
},
|
|
127
|
+
onObjectBegin() {
|
|
128
|
+
level++;
|
|
129
|
+
},
|
|
130
|
+
onObjectEnd() {
|
|
131
|
+
if (inScripts && level === 2) {
|
|
132
|
+
inScripts = false;
|
|
133
|
+
}
|
|
134
|
+
level--;
|
|
135
|
+
},
|
|
136
|
+
onObjectProperty(property) {
|
|
137
|
+
if (level === 1 && property === 'scripts') {
|
|
138
|
+
inScripts = true;
|
|
139
|
+
}
|
|
140
|
+
else if (inScripts && level === 2) {
|
|
141
|
+
scripts.add(property);
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
visit(content, visitor);
|
|
146
|
+
return scripts.size > 0 ? scripts : undefined;
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
NpmScriptAutoApprover = ( __decorate([
|
|
150
|
+
( __param(0, IConfigurationService)),
|
|
151
|
+
( __param(1, IFileService)),
|
|
152
|
+
( __param(2, IUriIdentityService)),
|
|
153
|
+
( __param(3, IWorkspaceContextService))
|
|
154
|
+
], NpmScriptAutoApprover));
|
|
155
|
+
|
|
156
|
+
export { NpmScriptAutoApprover };
|
|
@@ -2,8 +2,23 @@ import type { IMarkdownString } from "@codingame/monaco-vscode-api/vscode/vs/bas
|
|
|
2
2
|
import type { IDisposable } from "@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle";
|
|
3
3
|
import type { OperatingSystem } from "@codingame/monaco-vscode-api/vscode/vs/base/common/platform";
|
|
4
4
|
import type { URI } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
|
|
5
|
-
import type {
|
|
5
|
+
import type { ConfigurationTarget } from "@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration";
|
|
6
|
+
import type { ToolConfirmationAction } from "@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/tools/languageModelToolsService";
|
|
7
|
+
import type { INpmScriptAutoApproveResult } from "./autoApprove/npmScriptAutoApprover.js";
|
|
6
8
|
import type { TreeSitterCommandParserLanguage } from "../../treeSitterCommandParser.js";
|
|
9
|
+
export interface IAutoApproveRule {
|
|
10
|
+
regex: RegExp;
|
|
11
|
+
regexCaseInsensitive: RegExp;
|
|
12
|
+
sourceText: string;
|
|
13
|
+
sourceTarget: ConfigurationTarget | "session";
|
|
14
|
+
isDefaultRule: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface INpmScriptAutoApproveRule {
|
|
17
|
+
type: "npmScript";
|
|
18
|
+
npmScriptResult: INpmScriptAutoApproveResult;
|
|
19
|
+
}
|
|
20
|
+
export declare function isAutoApproveRule(rule: IAutoApproveRule | INpmScriptAutoApproveRule | undefined): rule is IAutoApproveRule;
|
|
21
|
+
export declare function isNpmScriptAutoApproveRule(rule: IAutoApproveRule | INpmScriptAutoApproveRule | undefined): rule is INpmScriptAutoApproveRule;
|
|
7
22
|
export interface ICommandLineAnalyzer extends IDisposable {
|
|
8
23
|
analyze(options: ICommandLineAnalyzerOptions): Promise<ICommandLineAnalyzerResult>;
|
|
9
24
|
}
|
|
@@ -29,7 +44,7 @@ export interface ICommandLineAnalyzerResult {
|
|
|
29
44
|
* - `undefined`: This analyzer does not make an approval/denial decision
|
|
30
45
|
*/
|
|
31
46
|
readonly isAutoApproved?: boolean;
|
|
32
|
-
readonly disclaimers?: readonly string[];
|
|
47
|
+
readonly disclaimers?: readonly (string | IMarkdownString)[];
|
|
33
48
|
readonly autoApproveInfo?: IMarkdownString;
|
|
34
49
|
readonly customActions?: ToolConfirmationAction[];
|
|
35
50
|
}
|
|
@@ -5,7 +5,7 @@ import { ITerminalChatService } from "@codingame/monaco-vscode-api/vscode/vs/wor
|
|
|
5
5
|
import { IStorageService } from "@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage.service";
|
|
6
6
|
import type { RunInTerminalToolTelemetry } from "../../runInTerminalToolTelemetry.js";
|
|
7
7
|
import { type TreeSitterCommandParser } from "../../treeSitterCommandParser.js";
|
|
8
|
-
import type
|
|
8
|
+
import { type ICommandLineAnalyzer, type ICommandLineAnalyzerOptions, type ICommandLineAnalyzerResult } from "./commandLineAnalyzer.js";
|
|
9
9
|
export declare class CommandLineAutoApproveAnalyzer extends Disposable implements ICommandLineAnalyzer {
|
|
10
10
|
private readonly _treeSitterCommandParser;
|
|
11
11
|
private readonly _telemetry;
|
|
@@ -4,17 +4,19 @@ import { asArray } from '@codingame/monaco-vscode-api/vscode/vs/base/common/arra
|
|
|
4
4
|
import { createCommandUri, MarkdownString } from '@codingame/monaco-vscode-api/vscode/vs/base/common/htmlContent';
|
|
5
5
|
import { Disposable } from '@codingame/monaco-vscode-api/vscode/vs/base/common/lifecycle';
|
|
6
6
|
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
7
|
+
import { ConfigurationTarget } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration';
|
|
7
8
|
import { IConfigurationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/configuration/common/configuration.service';
|
|
8
9
|
import { IInstantiationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/instantiation';
|
|
9
10
|
import { ITerminalChatService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminal/browser/terminal.service';
|
|
10
11
|
import { StorageScope } from '@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage';
|
|
11
12
|
import { IStorageService } from '@codingame/monaco-vscode-api/vscode/vs/platform/storage/common/storage.service';
|
|
12
|
-
import { TerminalToolConfirmationStorageKeys } from '@codingame/monaco-vscode-katex-common/vscode/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolConfirmationSubPart';
|
|
13
|
+
import { TerminalToolConfirmationStorageKeys } from '@codingame/monaco-vscode-katex-common/vscode/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatTerminalToolConfirmationSubPart';
|
|
13
14
|
import { ChatConfiguration } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
|
|
14
15
|
import { TerminalChatAgentToolsSettingId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration';
|
|
15
|
-
import { CommandLineAutoApprover } from '../../commandLineAutoApprover.js';
|
|
16
16
|
import { isPowerShell, generateAutoApproveActions, dedupeRules } from '../../runInTerminalHelpers.js';
|
|
17
|
+
import { isAutoApproveRule, isNpmScriptAutoApproveRule } from './commandLineAnalyzer.js';
|
|
17
18
|
import { TerminalChatCommandId } from '@codingame/monaco-vscode-xterm-common/vscode/vs/workbench/contrib/terminalContrib/chat/browser/terminalChat';
|
|
19
|
+
import { CommandLineAutoApprover } from './autoApprove/commandLineAutoApprover.js';
|
|
18
20
|
|
|
19
21
|
const promptInjectionWarningCommandsLower = [
|
|
20
22
|
'curl',
|
|
@@ -50,12 +52,13 @@ let CommandLineAutoApproveAnalyzer = class CommandLineAutoApproveAnalyzer extend
|
|
|
50
52
|
isAutoApproved: true,
|
|
51
53
|
isAutoApproveAllowed: true,
|
|
52
54
|
disclaimers: [],
|
|
53
|
-
autoApproveInfo: ( new MarkdownString(`${( localize(
|
|
55
|
+
autoApproveInfo: ( new MarkdownString(`${( localize(12022, 'Auto approved for this session'))} ([${( localize(12023, 'Disable'))}](${( disableUri.toString())}))`, mdTrustSettings)),
|
|
54
56
|
};
|
|
55
57
|
}
|
|
58
|
+
const trimmedCommandLine = options.commandLine.trimStart();
|
|
56
59
|
let subCommands;
|
|
57
60
|
try {
|
|
58
|
-
subCommands = await this._treeSitterCommandParser.extractSubCommands(options.treeSitterLanguage,
|
|
61
|
+
subCommands = await this._treeSitterCommandParser.extractSubCommands(options.treeSitterLanguage, trimmedCommandLine);
|
|
59
62
|
this._log(`Parsed sub-commands via ${options.treeSitterLanguage} grammar`, subCommands);
|
|
60
63
|
}
|
|
61
64
|
catch (e) {
|
|
@@ -71,10 +74,10 @@ let CommandLineAutoApproveAnalyzer = class CommandLineAutoApproveAnalyzer extend
|
|
|
71
74
|
disclaimers: [],
|
|
72
75
|
};
|
|
73
76
|
}
|
|
74
|
-
const subCommandResults = ( subCommands.map(
|
|
75
|
-
e => this._commandLineAutoApprover.isCommandAutoApproved(e, options.shell, options.os)
|
|
76
|
-
));
|
|
77
|
-
const commandLineResult = this._commandLineAutoApprover.isCommandLineAutoApproved(options.
|
|
77
|
+
const subCommandResults = await Promise.all(( subCommands.map(
|
|
78
|
+
e => this._commandLineAutoApprover.isCommandAutoApproved(e, options.shell, options.os, options.cwd, options.chatSessionId)
|
|
79
|
+
)));
|
|
80
|
+
const commandLineResult = this._commandLineAutoApprover.isCommandLineAutoApproved(trimmedCommandLine, options.chatSessionId);
|
|
78
81
|
const autoApproveReasons = [
|
|
79
82
|
...( subCommandResults.map(e => e.reason)),
|
|
80
83
|
commandLineResult.reason,
|
|
@@ -86,21 +89,21 @@ let CommandLineAutoApproveAnalyzer = class CommandLineAutoApproveAnalyzer extend
|
|
|
86
89
|
if (deniedSubCommandResult) {
|
|
87
90
|
this._log('Sub-command DENIED auto approval');
|
|
88
91
|
isDenied = true;
|
|
89
|
-
autoApproveDefault = deniedSubCommandResult.rule
|
|
92
|
+
autoApproveDefault = isAutoApproveRule(deniedSubCommandResult.rule) ? deniedSubCommandResult.rule.isDefaultRule : undefined;
|
|
90
93
|
autoApproveReason = 'subCommand';
|
|
91
94
|
}
|
|
92
95
|
else if (commandLineResult.result === 'denied') {
|
|
93
96
|
this._log('Command line DENIED auto approval');
|
|
94
97
|
isDenied = true;
|
|
95
|
-
autoApproveDefault = commandLineResult.rule
|
|
98
|
+
autoApproveDefault = isAutoApproveRule(commandLineResult.rule) ? commandLineResult.rule.isDefaultRule : undefined;
|
|
96
99
|
autoApproveReason = 'commandLine';
|
|
97
100
|
}
|
|
98
101
|
else {
|
|
99
102
|
if (subCommandResults.every(e => e.result === 'approved')) {
|
|
100
103
|
this._log('All sub-commands auto-approved');
|
|
101
|
-
autoApproveReason = 'subCommand';
|
|
102
104
|
isAutoApproved = true;
|
|
103
|
-
|
|
105
|
+
autoApproveReason = 'subCommand';
|
|
106
|
+
autoApproveDefault = subCommandResults.every(e => isAutoApproveRule(e.rule) && e.rule.isDefaultRule);
|
|
104
107
|
}
|
|
105
108
|
else {
|
|
106
109
|
this._log('All sub-commands NOT auto-approved');
|
|
@@ -108,7 +111,7 @@ let CommandLineAutoApproveAnalyzer = class CommandLineAutoApproveAnalyzer extend
|
|
|
108
111
|
this._log('Command line auto-approved');
|
|
109
112
|
autoApproveReason = 'commandLine';
|
|
110
113
|
isAutoApproved = true;
|
|
111
|
-
autoApproveDefault = commandLineResult.rule
|
|
114
|
+
autoApproveDefault = isAutoApproveRule(commandLineResult.rule) ? commandLineResult.rule.isDefaultRule : undefined;
|
|
112
115
|
}
|
|
113
116
|
else {
|
|
114
117
|
this._log('Command line NOT auto-approved');
|
|
@@ -139,12 +142,18 @@ let CommandLineAutoApproveAnalyzer = class CommandLineAutoApproveAnalyzer extend
|
|
|
139
142
|
if (!isAutoApproved && (( subCommandsLowerFirstWordOnly.some(command => promptInjectionWarningCommandsLower.includes(command))) ||
|
|
140
143
|
(isPowerShell(options.shell, options.os) && ( subCommandsLowerFirstWordOnly.some(command => promptInjectionWarningCommandsLowerPwshOnly.includes(command)))))) {
|
|
141
144
|
disclaimers.push(( localize(
|
|
142
|
-
|
|
145
|
+
12024,
|
|
143
146
|
'Web content may contain malicious code or attempt prompt injection attacks.'
|
|
144
147
|
)));
|
|
145
148
|
}
|
|
149
|
+
if (isAutoApproveEnabled && isDenied) {
|
|
150
|
+
const denialInfo = this._createAutoApproveInfo(isAutoApproved, isDenied, autoApproveReason, subCommandResults, commandLineResult);
|
|
151
|
+
if (denialInfo) {
|
|
152
|
+
disclaimers.push(denialInfo);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
146
155
|
if (!isAutoApproved && isAutoApproveEnabled) {
|
|
147
|
-
customActions = generateAutoApproveActions(
|
|
156
|
+
customActions = generateAutoApproveActions(trimmedCommandLine, subCommands, { subCommandResults, commandLineResult });
|
|
148
157
|
}
|
|
149
158
|
return {
|
|
150
159
|
isAutoApproved,
|
|
@@ -156,9 +165,32 @@ let CommandLineAutoApproveAnalyzer = class CommandLineAutoApproveAnalyzer extend
|
|
|
156
165
|
}
|
|
157
166
|
_createAutoApproveInfo(isAutoApproved, isDenied, autoApproveReason, subCommandResults, commandLineResult) {
|
|
158
167
|
const formatRuleLinks = (result) => {
|
|
159
|
-
return ( asArray(result)
|
|
168
|
+
return ( asArray(result)
|
|
169
|
+
.filter((e) => isAutoApproveRule(e.rule))
|
|
170
|
+
.map(e => {
|
|
171
|
+
if (e.rule.sourceTarget === 'session') {
|
|
172
|
+
return localize(12025, '{0} (session)', `\`${e.rule.sourceText}\``);
|
|
173
|
+
}
|
|
160
174
|
const settingsUri = createCommandUri(TerminalChatCommandId.OpenTerminalSettingsLink, e.rule.sourceTarget);
|
|
161
|
-
|
|
175
|
+
const tooltip = ( localize(12026, 'View rule in settings'));
|
|
176
|
+
let label = e.rule.sourceText;
|
|
177
|
+
switch (e.rule?.sourceTarget) {
|
|
178
|
+
case ConfigurationTarget.DEFAULT:
|
|
179
|
+
label = `${label} (default)`;
|
|
180
|
+
break;
|
|
181
|
+
case ConfigurationTarget.USER:
|
|
182
|
+
case ConfigurationTarget.USER_LOCAL:
|
|
183
|
+
label = `${label} (user)`;
|
|
184
|
+
break;
|
|
185
|
+
case ConfigurationTarget.USER_REMOTE:
|
|
186
|
+
label = `${label} (remote)`;
|
|
187
|
+
break;
|
|
188
|
+
case ConfigurationTarget.WORKSPACE:
|
|
189
|
+
case ConfigurationTarget.WORKSPACE_FOLDER:
|
|
190
|
+
label = `${label} (workspace)`;
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
return `[\`${label}\`](${( settingsUri.toString())} "${tooltip}")`;
|
|
162
194
|
})).join(', ');
|
|
163
195
|
};
|
|
164
196
|
const mdTrustSettings = {
|
|
@@ -171,33 +203,37 @@ let CommandLineAutoApproveAnalyzer = class CommandLineAutoApproveAnalyzer extend
|
|
|
171
203
|
if (isGlobalAutoApproved) {
|
|
172
204
|
const settingsUri = createCommandUri(TerminalChatCommandId.OpenTerminalSettingsLink, 'global');
|
|
173
205
|
return (new MarkdownString(`${( localize(
|
|
174
|
-
|
|
206
|
+
12027,
|
|
175
207
|
'Auto approved by setting {0}',
|
|
176
|
-
`[\`${ChatConfiguration.GlobalAutoApprove}\`](${( settingsUri.toString())} "${( localize(
|
|
208
|
+
`[\`${ChatConfiguration.GlobalAutoApprove}\`](${( settingsUri.toString())} "${( localize(12028, 'View settings'))}")`
|
|
177
209
|
))}`, mdTrustSettings));
|
|
178
210
|
}
|
|
179
211
|
if (isAutoApproved) {
|
|
180
212
|
switch (autoApproveReason) {
|
|
181
213
|
case 'commandLine': {
|
|
182
|
-
if (commandLineResult.rule) {
|
|
214
|
+
if (isAutoApproveRule(commandLineResult.rule)) {
|
|
183
215
|
return (new MarkdownString(
|
|
184
|
-
localize(
|
|
216
|
+
localize(12029, 'Auto approved by rule {0}', formatRuleLinks(commandLineResult)),
|
|
185
217
|
mdTrustSettings
|
|
186
218
|
));
|
|
187
219
|
}
|
|
188
220
|
break;
|
|
189
221
|
}
|
|
190
222
|
case 'subCommand': {
|
|
223
|
+
const npmScriptApproval = subCommandResults.find(e => isNpmScriptAutoApproveRule(e.rule));
|
|
224
|
+
if (npmScriptApproval && isNpmScriptAutoApproveRule(npmScriptApproval.rule) && npmScriptApproval.rule.npmScriptResult.autoApproveInfo) {
|
|
225
|
+
return npmScriptApproval.rule.npmScriptResult.autoApproveInfo;
|
|
226
|
+
}
|
|
191
227
|
const uniqueRules = dedupeRules(subCommandResults);
|
|
192
228
|
if (uniqueRules.length === 1) {
|
|
193
229
|
return (new MarkdownString(
|
|
194
|
-
localize(
|
|
230
|
+
localize(12029, 'Auto approved by rule {0}', formatRuleLinks(uniqueRules)),
|
|
195
231
|
mdTrustSettings
|
|
196
232
|
));
|
|
197
233
|
}
|
|
198
234
|
else if (uniqueRules.length > 1) {
|
|
199
235
|
return (new MarkdownString(
|
|
200
|
-
localize(
|
|
236
|
+
localize(12030, 'Auto approved by rules {0}', formatRuleLinks(uniqueRules)),
|
|
201
237
|
mdTrustSettings
|
|
202
238
|
));
|
|
203
239
|
}
|
|
@@ -210,7 +246,7 @@ let CommandLineAutoApproveAnalyzer = class CommandLineAutoApproveAnalyzer extend
|
|
|
210
246
|
case 'commandLine': {
|
|
211
247
|
if (commandLineResult.rule) {
|
|
212
248
|
return (new MarkdownString(localize(
|
|
213
|
-
|
|
249
|
+
12031,
|
|
214
250
|
'Auto approval denied by rule {0}',
|
|
215
251
|
formatRuleLinks(commandLineResult)
|
|
216
252
|
), mdTrustSettings));
|
|
@@ -221,12 +257,14 @@ let CommandLineAutoApproveAnalyzer = class CommandLineAutoApproveAnalyzer extend
|
|
|
221
257
|
const uniqueRules = dedupeRules(subCommandResults.filter(e => e.result === 'denied'));
|
|
222
258
|
if (uniqueRules.length === 1) {
|
|
223
259
|
return (new MarkdownString(
|
|
224
|
-
localize(
|
|
260
|
+
localize(12031, 'Auto approval denied by rule {0}', formatRuleLinks(uniqueRules)),
|
|
261
|
+
mdTrustSettings
|
|
225
262
|
));
|
|
226
263
|
}
|
|
227
264
|
else if (uniqueRules.length > 1) {
|
|
228
265
|
return (new MarkdownString(
|
|
229
|
-
localize(
|
|
266
|
+
localize(12032, 'Auto approval denied by rules {0}', formatRuleLinks(uniqueRules)),
|
|
267
|
+
mdTrustSettings
|
|
230
268
|
));
|
|
231
269
|
}
|
|
232
270
|
break;
|
|
@@ -13,6 +13,7 @@ export declare class CommandLineFileWriteAnalyzer extends Disposable implements
|
|
|
13
13
|
constructor(_treeSitterCommandParser: TreeSitterCommandParser, _log: (message: string, ...args: unknown[]) => void, _configurationService: IConfigurationService, _labelService: ILabelService, _workspaceContextService: IWorkspaceContextService);
|
|
14
14
|
analyze(options: ICommandLineAnalyzerOptions): Promise<ICommandLineAnalyzerResult>;
|
|
15
15
|
private _getFileWrites;
|
|
16
|
+
private _stripSurroundingQuotes;
|
|
16
17
|
private _mapNullDevice;
|
|
17
18
|
private _getResult;
|
|
18
19
|
}
|