@codingame/monaco-vscode-chat-service-override 25.1.2 → 26.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 +24 -3
- package/package.json +5 -5
- package/vscode/src/vs/platform/browserElements/common/browserElements.d.ts +23 -3
- package/vscode/src/vs/platform/browserElements/common/browserElements.js +13 -6
- package/vscode/src/vs/platform/domWidget/browser/domWidget.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityService.js +42 -27
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.d.ts +14 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatResponseAccessibleView.js +218 -74
- package/vscode/src/vs/workbench/contrib/chat/browser/accessibility/chatTerminalOutputAccessibleView.js +6 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityActions.js +14 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.js +165 -168
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatAgentRecommendationActions.js +27 -25
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +141 -140
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatContextActions.js +189 -121
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +14 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.d.ts +60 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCustomizationDiagnosticsAction.js +435 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatDeveloperActions.js +28 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +10 -12
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatGettingStarted.js +37 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.d.ts +11 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +54 -24
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatLanguageModelActions.js +73 -34
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +71 -30
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatNewActions.js +151 -89
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatPromptNavigationActions.js +12 -15
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatQuickInputActions.js +39 -40
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolActions.js +90 -125
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.d.ts +5 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.js +263 -143
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTransfer.js +4 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/actions/codeBlockOperations.js +188 -126
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessions.contribution.js +37 -28
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.d.ts +21 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsActions.js +392 -226
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsPicker.js +31 -27
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsQuickAccess.js +25 -23
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsService.js +1 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjection.js +13 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.d.ts +20 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionActions.js +83 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.d.ts +68 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionProjectionService.js +319 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentSessionsExperiments.contribution.js +215 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.d.ts +179 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/agentTitleBarStatusWidget.js +951 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agentsessionprojection.css +20 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/agenttitlebarstatuswidget.css +388 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/media/unifiedQuickAccess.css +195 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.d.ts +120 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccess.js +394 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.d.ts +38 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/experiments/unifiedQuickAccessActions.js +95 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.d.ts +3 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/localAgentSessionsProvider.js +31 -29
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatAttachmentResolveService.js +49 -47
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/chatVariables.js +4 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/media/simpleBrowserOverlay.css +0 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/attachments/simpleBrowserEditorOverlay.js +188 -151
- package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +1012 -639
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCheckpointTimelineImpl.js +256 -151
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.d.ts +8 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingCodeEditorIntegration.js +182 -101
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingDeletedFileEntry.d.ts +79 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingDeletedFileEntry.js +193 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorAccessibility.js +9 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.d.ts +68 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingExplanationModelManager.js +253 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.d.ts +4 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedDocumentEntry.js +69 -50
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.d.ts +3 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedFileEntry.js +52 -33
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.d.ts +5 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingModifiedNotebookEntry.js +274 -155
- 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 +2 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.js +130 -104
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.d.ts +12 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSession.js +385 -160
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingSessionStorage.js +53 -36
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelChangeService.js +112 -75
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.js +19 -10
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/media/chatEditorController.css +31 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingModifiedNotebookSnapshot.js +39 -17
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNewNotebookContentEdits.js +10 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.d.ts +0 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookCellEntry.js +25 -16
- 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 +265 -203
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/chatEditingNotebookFileSystemProvider.js +29 -26
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/helpers.js +114 -60
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/notebookCellChanges.js +16 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/notebook/overlayToolbarDecorator.js +44 -30
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagement.contribution.js +119 -45
- 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 +152 -136
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatManagementEditorInput.js +12 -8
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.d.ts +51 -31
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsViewModel.js +323 -217
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.d.ts +4 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatModelsWidget.js +653 -401
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/chatUsageWidget.js +52 -40
- package/vscode/src/vs/workbench/contrib/chat/browser/chatManagement/media/chatModelsWidget.css +22 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.d.ts +5 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.js +43 -28
- package/vscode/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.js +182 -136
- package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.d.ts +33 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatRepoInfo.js +548 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.d.ts +0 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupContributions.js +222 -138
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.d.ts +3 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupController.js +151 -113
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.d.ts +6 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.js +453 -217
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupRunner.js +162 -88
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSetup/media/chatSetup.css +2 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.d.ts +0 -2
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatus.js +1 -13
- 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 +309 -233
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusEntry.js +55 -53
- package/vscode/src/vs/workbench/contrib/chat/browser/chatStatus/chatStatusItemService.js +3 -1
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.d.ts +37 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatTipService.js +109 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/chatWindowNotifier.js +35 -23
- package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.d.ts +9 -4
- package/vscode/src/vs/workbench/contrib/chat/browser/contextContrib/chatContextService.js +73 -33
- package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.d.ts +47 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/languageModelsConfigurationService.js +333 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/chatModeActions.js +39 -25
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionContribution.js +9 -5
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptCodingAgentActionOverlay.js +23 -20
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptFileActions.js +2 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptToolsCodeLensProvider.js +20 -16
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/promptUrlHandler.js +65 -57
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/runPromptAction.js +48 -36
- package/vscode/src/vs/workbench/contrib/chat/browser/promptSyntax/saveAsPromptFileActions.js +20 -12
- 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 +52 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsConfirmationService.js +155 -159
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.d.ts +24 -14
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/languageModelToolsService.js +521 -246
- package/vscode/src/vs/workbench/contrib/chat/browser/tools/toolSetsContribution.js +107 -76
- package/vscode/src/vs/workbench/contrib/chat/browser/viewsWelcome/chatViewsWelcomeHandler.js +28 -24
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/chatMarkdownAnchorService.js +10 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputStateCache.d.ts +16 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatContentParts/toolInvocationParts/chatToolOutputStateCache.js +57 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatLayoutService.js +4 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/chatWidgetService.js +56 -44
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.d.ts +0 -3
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/chatStatusWidget.js +37 -47
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatEditorInputContentProvider.js +5 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.d.ts +10 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputCompletions.js +1284 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorContrib.js +179 -125
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/chatInputEditorHover.js +9 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/widget/input/editor/editorHoverWrapper.js +7 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/chatQuick.js +96 -78
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/editor/chatEditor.js +58 -53
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.d.ts +25 -11
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewPane.js +484 -292
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.d.ts +1 -6
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/chatViewTitleControl.js +65 -92
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewPane.css +16 -19
- package/vscode/src/vs/workbench/contrib/chat/browser/widgetHosts/viewPane/media/chatViewTitleControl.css +1 -0
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.d.ts +9 -1
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceImpl.js +331 -189
- package/vscode/src/vs/workbench/contrib/chat/common/chatService/chatServiceTelemetry.js +81 -93
- package/vscode/src/vs/workbench/contrib/chat/common/ignoredFiles.js +1 -3
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.d.ts +5 -3
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatModelStore.js +6 -7
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.d.ts +36 -8
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatProgressTypes/chatToolInvocation.js +169 -31
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionOperationLog.d.ts +6 -0
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionOperationLog.js +141 -0
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.d.ts +6 -4
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatSessionStore.js +218 -144
- package/vscode/src/vs/workbench/contrib/chat/common/model/chatTransferService.js +20 -10
- package/vscode/src/vs/workbench/contrib/chat/common/model/objectMutationLog.d.ts +109 -0
- package/vscode/src/vs/workbench/contrib/chat/common/model/objectMutationLog.js +349 -0
- package/vscode/src/vs/workbench/contrib/chat/common/participants/chatSlashCommands.js +9 -8
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.d.ts +9 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/chatPromptFilesContribution.js +139 -36
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/PromptHeaderDefinitionProvider.js +3 -6
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptBodyAutocompletion.js +64 -51
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptCodeActions.js +49 -34
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptDocumentSemanticTokensProvider.js +21 -13
- 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 +125 -97
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHovers.js +91 -131
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptLinkProvider.js +8 -5
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.d.ts +5 -0
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.js +488 -222
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/promptFileContributions.js +32 -12
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.d.ts +58 -13
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/service/promptsServiceImpl.js +717 -200
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.d.ts +79 -18
- package/vscode/src/vs/workbench/contrib/chat/common/promptSyntax/utils/promptFilesLocator.js +371 -130
- package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.d.ts +0 -1
- package/vscode/src/vs/workbench/contrib/chat/common/tools/chatTodoListService.js +3 -7
- package/vscode/src/vs/workbench/contrib/chat/common/voiceChatService.js +79 -61
- package/vscode/src/vs/workbench/contrib/chat/common/widget/chatResponseResourceFileSystemProvider.js +27 -21
- package/vscode/src/vs/workbench/contrib/editTelemetry/browser/telemetry/aiEditTelemetry/aiEditTelemetryServiceImpl.js +7 -10
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +26 -32
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibilityHelp.js +2 -2
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.d.ts +8 -60
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.js +115 -426
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.d.ts +15 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatDefaultModel.js +127 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatNotebook.js +1 -37
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.d.ts +16 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionService.js +21 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.d.ts +51 -0
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSessionServiceImpl.js +334 -0
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.d.ts +41 -0
- package/vscode/src/vs/workbench/contrib/mcp/browser/mcpPromptArgumentPick.js +424 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.d.ts +4 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/contrib/chat/notebookChatUtils.js +58 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.d.ts +7 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/cellChatActions.js +195 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.d.ts +8 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebook.chat.contribution.js +368 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.d.ts +2 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatContext.js +7 -0
- package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/notebook/browser/diff/inlineDiff/notebookModifiedCellDecorator.js +1 -1
- package/vscode/src/vs/workbench/contrib/remoteCodingAgents/browser/remoteCodingAgents.contribution.js +23 -25
- package/vscode/src/vs/workbench/contrib/remoteCodingAgents/common/remoteCodingAgentsService.js +7 -8
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibilityHelp.js +34 -38
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatAccessibleView.js +8 -12
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatActions.js +103 -95
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.js +28 -16
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatEnabler.js +4 -5
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.d.ts +12 -8
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatService.js +65 -54
- package/vscode/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget.js +86 -60
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/alternativeRecommendation.js +13 -26
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/commandFileWriteParser.d.ts +24 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/sedFileWriteParser.d.ts +26 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandParsers/sedFileWriteParser.js +142 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/basicExecuteStrategy.js +56 -46
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/executeStrategy.js +63 -31
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/noneExecuteStrategy.js +35 -30
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/richExecuteStrategy.js +44 -37
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/executeStrategy/strategyHelpers.js +3 -4
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputHelpers.js +3 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.d.ts +11 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalHelpers.js +70 -50
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalToolTelemetry.js +26 -394
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.js +85 -49
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js +68 -27
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/toolTerminalCreator.js +67 -45
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.d.ts +12 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/awaitTerminalTool.js +106 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/commandLineAutoApprover.d.ts +2 -2
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/commandLineAutoApprover.js +177 -97
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/autoApprove/npmScriptAutoApprover.js +136 -49
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAnalyzer.d.ts +2 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineAutoApproveAnalyzer.js +128 -112
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineFileWriteAnalyzer.js +51 -49
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineSandboxAnalyzer.d.ts +8 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineSandboxAnalyzer.js +25 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/commandLinePresenter.d.ts +41 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/nodeCommandLinePresenter.d.ts +19 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/nodeCommandLinePresenter.js +37 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/pythonCommandLinePresenter.d.ts +19 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/pythonCommandLinePresenter.js +37 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/rubyCommandLinePresenter.d.ts +19 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/rubyCommandLinePresenter.js +44 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/sandboxedCommandLinePresenter.d.ts +12 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLinePresenter/sandboxedCommandLinePresenter.js +21 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineCdPrefixRewriter.js +5 -14
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLinePreventHistoryRewriter.js +2 -4
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineRewriter.d.ts +1 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineSandboxRewriter.d.ts +8 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineRewriter/commandLineSandboxRewriter.js +29 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalLastCommandTool.js +30 -31
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.js +16 -17
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalSelectionTool.js +19 -20
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.d.ts +11 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/killTerminalTool.js +58 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.d.ts +31 -3
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/outputMonitor.js +325 -199
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/monitoring/types.js +1 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalConfirmationTool.js +33 -38
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.d.ts +45 -5
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.js +746 -456
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.js +145 -98
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.js +88 -37
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.js +120 -51
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/taskHelpers.js +25 -28
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.d.ts +5 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/terminalCommandArtifactCollector.js +58 -12
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/toolIds.d.ts +12 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/toolIds.js +17 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.d.ts +8 -1
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/treeSitterCommandParser.js +47 -28
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.d.ts +37 -0
- package/vscode/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalSandboxService.js +171 -0
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.d.ts +0 -58
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsControl.js +0 -213
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.d.ts +0 -39
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsFilter.js +0 -243
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.d.ts +0 -7
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsOpener.js +0 -41
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.d.ts +0 -166
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/agentSessionsViewer.js +0 -607
- package/vscode/src/vs/workbench/contrib/chat/browser/agentSessions/media/agentsessionsviewer.css +0 -255
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.d.ts +0 -46
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorActions.js +0 -396
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.d.ts +0 -9
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorOverlay.js +0 -379
- package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/media/chatEditingEditorOverlay.css +0 -117
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.d.ts +0 -141
- package/vscode/src/vs/workbench/contrib/chat/browser/chatSessions/chatSessions.contribution.js +0 -961
- package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.d.ts +0 -36
- package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.js +0 -447
- package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsParametersSchema.d.ts +0 -6
- package/vscode/src/vs/workbench/contrib/chat/common/tools/languageModelToolsParametersSchema.js +0 -251
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.d.ts +0 -10
- package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.js +0 -42
|
@@ -4,7 +4,7 @@ import { renderAsPlaintext } from '@codingame/monaco-vscode-api/vscode/vs/base/b
|
|
|
4
4
|
import { assertNever } from '@codingame/monaco-vscode-api/vscode/vs/base/common/assert';
|
|
5
5
|
import { RunOnceScheduler, timeout } from '@codingame/monaco-vscode-api/vscode/vs/base/common/async';
|
|
6
6
|
import { encodeBase64 } from '@codingame/monaco-vscode-api/vscode/vs/base/common/buffer';
|
|
7
|
-
import { CancellationTokenSource } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
|
|
7
|
+
import { CancellationTokenSource, CancellationToken } from '@codingame/monaco-vscode-api/vscode/vs/base/common/cancellation';
|
|
8
8
|
import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
|
|
9
9
|
import { arrayEqualsC } from '@codingame/monaco-vscode-api/vscode/vs/base/common/equals';
|
|
10
10
|
import { toErrorMessage } from '@codingame/monaco-vscode-api/vscode/vs/base/common/errorMessage';
|
|
@@ -34,32 +34,50 @@ import { IStorageService } from '@codingame/monaco-vscode-api/vscode/vs/platform
|
|
|
34
34
|
import { ITelemetryService } from '@codingame/monaco-vscode-api/vscode/vs/platform/telemetry/common/telemetry.service';
|
|
35
35
|
import { IExtensionService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions.service';
|
|
36
36
|
import { ChatContextKeys } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/actions/chatContextKeys';
|
|
37
|
-
import {
|
|
37
|
+
import { toToolSetVariableEntry, toToolVariableEntry } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/attachments/chatVariableEntries';
|
|
38
38
|
import { IChatToolInvocation, ToolConfirmKind } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService/chatService';
|
|
39
39
|
import { IChatService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/chatService/chatService.service';
|
|
40
|
-
import { toToolSetVariableEntry, toToolVariableEntry } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/attachments/chatVariableEntries';
|
|
41
40
|
import { ChatConfiguration } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/constants';
|
|
41
|
+
import { ChatToolInvocation } from '../../common/model/chatProgressTypes/chatToolInvocation.js';
|
|
42
42
|
import { ILanguageModelToolsConfirmationService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/tools/languageModelToolsConfirmationService.service';
|
|
43
|
-
import { ToolDataSource, VSCodeToolReference, SpecedToolAliases,
|
|
43
|
+
import { ToolDataSource, VSCodeToolReference, SpecedToolAliases, isToolSet, createToolSchemaUri, toolMatchesModel, stringifyPromptTsxPart, ToolSetForModel, ToolSet } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/tools/languageModelToolsService';
|
|
44
44
|
import { getToolConfirmationAlert } from '@codingame/monaco-vscode-katex-common/vscode/vs/workbench/contrib/chat/browser/accessibility/chatAccessibilityProvider';
|
|
45
|
-
import {
|
|
45
|
+
import { chatSessionResourceToId } from '@codingame/monaco-vscode-api/vscode/vs/workbench/contrib/chat/common/model/chatUri';
|
|
46
46
|
import { ObservableSet } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/set';
|
|
47
|
-
import { derived } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/derived';
|
|
47
|
+
import { derived, derivedOpts } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/derived';
|
|
48
|
+
import { observableFromEventOpts } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableFromEvent';
|
|
49
|
+
import { observableSignal } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/observables/observableSignal';
|
|
50
|
+
import { transaction } from '@codingame/monaco-vscode-api/vscode/vs/base/common/observableInternal/transaction';
|
|
48
51
|
|
|
49
52
|
var LanguageModelToolsService_1;
|
|
50
53
|
const jsonSchemaRegistry = ( Registry.as(Extensions.JSONContribution));
|
|
51
54
|
var AutoApproveStorageKeys;
|
|
52
|
-
(function
|
|
55
|
+
(function(AutoApproveStorageKeys) {
|
|
53
56
|
AutoApproveStorageKeys["GlobalAutoApproveOptIn"] = "chat.tools.global.autoApprove.optIn";
|
|
54
57
|
})(AutoApproveStorageKeys || (AutoApproveStorageKeys = {}));
|
|
55
|
-
const SkipAutoApproveConfirmationKey =
|
|
58
|
+
const SkipAutoApproveConfirmationKey = "vscode.chat.tools.global.autoApprove.testMode";
|
|
56
59
|
const globalAutoApproveDescription = ( localize2(
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
5792,
|
|
61
|
+
"Global auto approve also known as \"YOLO mode\" disables manual approval completely for _all tools in all workspaces_, allowing the agent to act fully autonomously. This is extremely dangerous and is *never* recommended, even containerized environments like [Codespaces](https://github.com/features/codespaces) and [Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) have user keys forwarded into the container that could be compromised.\n\n**This feature disables [critical security protections](https://code.visualstudio.com/docs/copilot/security) and makes it much easier for an attacker to compromise the machine.**"
|
|
59
62
|
));
|
|
60
63
|
let LanguageModelToolsService = class LanguageModelToolsService extends Disposable {
|
|
61
|
-
static {
|
|
62
|
-
|
|
64
|
+
static {
|
|
65
|
+
LanguageModelToolsService_1 = this;
|
|
66
|
+
}
|
|
67
|
+
constructor(
|
|
68
|
+
_instantiationService,
|
|
69
|
+
_extensionService,
|
|
70
|
+
_contextKeyService,
|
|
71
|
+
_chatService,
|
|
72
|
+
_dialogService,
|
|
73
|
+
_telemetryService,
|
|
74
|
+
_logService,
|
|
75
|
+
_configurationService,
|
|
76
|
+
_accessibilityService,
|
|
77
|
+
_accessibilitySignalService,
|
|
78
|
+
_storageService,
|
|
79
|
+
_confirmationService
|
|
80
|
+
) {
|
|
63
81
|
super();
|
|
64
82
|
this._instantiationService = _instantiationService;
|
|
65
83
|
this._extensionService = _extensionService;
|
|
@@ -77,21 +95,26 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
77
95
|
this.onDidChangeTools = this._onDidChangeTools.event;
|
|
78
96
|
this._onDidPrepareToolCallBecomeUnresponsive = this._register(( new Emitter()));
|
|
79
97
|
this.onDidPrepareToolCallBecomeUnresponsive = this._onDidPrepareToolCallBecomeUnresponsive.event;
|
|
98
|
+
this._onDidInvokeTool = this._register(( new Emitter()));
|
|
99
|
+
this.onDidInvokeTool = this._onDidInvokeTool.event;
|
|
80
100
|
this._onDidChangeToolsScheduler = ( new RunOnceScheduler(() => this._onDidChangeTools.fire(), 750));
|
|
81
101
|
this._tools = ( new Map());
|
|
82
102
|
this._toolContextKeys = ( new Set());
|
|
83
103
|
this._callsByRequestId = ( new Map());
|
|
84
|
-
this.
|
|
104
|
+
this._pendingToolCalls = ( new Map());
|
|
85
105
|
this._toolSets = ( new ObservableSet());
|
|
86
106
|
this.toolSets = derived(this, reader => {
|
|
87
107
|
const allToolSets = Array.from(this._toolSets.observable.read(reader));
|
|
88
108
|
return allToolSets.filter(toolSet => this.isPermitted(toolSet, reader));
|
|
89
109
|
});
|
|
110
|
+
this.allToolsIncludingDisableObs = observableFromEventOpts({
|
|
111
|
+
equalsFn: arrayEqualsC()
|
|
112
|
+
}, this.onDidChangeTools, () => Array.from(this.getAllToolsIncludingDisabled()));
|
|
90
113
|
this.toolsWithFullReferenceName = derived(reader => {
|
|
91
114
|
const result = [];
|
|
92
115
|
const coveredByToolSets = ( new Set());
|
|
93
116
|
for (const toolSet of this.toolSets.read(reader)) {
|
|
94
|
-
if (toolSet.source.type !==
|
|
117
|
+
if (toolSet.source.type !== "user") {
|
|
95
118
|
result.push([toolSet, getToolSetFullReferenceName(toolSet)]);
|
|
96
119
|
for (const tool of toolSet.getTools()) {
|
|
97
120
|
result.push([tool, getToolFullReferenceName(tool, toolSet)]);
|
|
@@ -99,7 +122,10 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
99
122
|
}
|
|
100
123
|
}
|
|
101
124
|
}
|
|
102
|
-
for (const tool of this.
|
|
125
|
+
for (const tool of this.allToolsIncludingDisableObs.read(reader)) {
|
|
126
|
+
if (tool.when && !this._contextKeyService.contextMatchesRules(tool.when)) {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
103
129
|
if (tool.canBeReferencedInPrompt && !( coveredByToolSets.has(tool)) && this.isPermitted(tool, reader)) {
|
|
104
130
|
result.push([tool, getToolFullReferenceName(tool)]);
|
|
105
131
|
}
|
|
@@ -117,26 +143,40 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
117
143
|
this._onDidChangeToolsScheduler.schedule();
|
|
118
144
|
}
|
|
119
145
|
}));
|
|
120
|
-
this._register(
|
|
121
|
-
|
|
122
|
-
if (
|
|
123
|
-
this.
|
|
146
|
+
this._register(
|
|
147
|
+
Event.runAndSubscribe(this._configurationService.onDidChangeConfiguration, e => {
|
|
148
|
+
if (!e || e.affectsConfiguration(ChatConfiguration.GlobalAutoApprove)) {
|
|
149
|
+
if (this._configurationService.getValue(ChatConfiguration.GlobalAutoApprove) !== true) {
|
|
150
|
+
this._storageService.remove(AutoApproveStorageKeys.GlobalAutoApproveOptIn, StorageScope.APPLICATION);
|
|
151
|
+
}
|
|
124
152
|
}
|
|
125
|
-
}
|
|
126
|
-
|
|
153
|
+
})
|
|
154
|
+
);
|
|
127
155
|
this._ctxToolsCount = ChatContextKeys.Tools.toolsCount.bindTo(_contextKeyService);
|
|
128
|
-
this.vscodeToolSet = this._register(
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
156
|
+
this.vscodeToolSet = this._register(
|
|
157
|
+
this.createToolSet(ToolDataSource.Internal, "vscode", VSCodeToolReference.vscode, {
|
|
158
|
+
icon: ThemeIcon.fromId(Codicon.vscode.id),
|
|
159
|
+
description: ( localize(5793, "Use VS Code features"))
|
|
160
|
+
})
|
|
161
|
+
);
|
|
162
|
+
this.executeToolSet = this._register(
|
|
163
|
+
this.createToolSet(ToolDataSource.Internal, "execute", SpecedToolAliases.execute, {
|
|
164
|
+
icon: ThemeIcon.fromId(Codicon.terminal.id),
|
|
165
|
+
description: ( localize(5794, "Execute code and applications on your machine"))
|
|
166
|
+
})
|
|
167
|
+
);
|
|
168
|
+
this.readToolSet = this._register(
|
|
169
|
+
this.createToolSet(ToolDataSource.Internal, "read", SpecedToolAliases.read, {
|
|
170
|
+
icon: ThemeIcon.fromId(Codicon.book.id),
|
|
171
|
+
description: ( localize(5795, "Read files in your workspace"))
|
|
172
|
+
})
|
|
173
|
+
);
|
|
174
|
+
this.agentToolSet = this._register(
|
|
175
|
+
this.createToolSet(ToolDataSource.Internal, "agent", SpecedToolAliases.agent, {
|
|
176
|
+
icon: ThemeIcon.fromId(Codicon.agent.id),
|
|
177
|
+
description: ( localize(5796, "Delegate tasks to other agents"))
|
|
178
|
+
})
|
|
179
|
+
);
|
|
140
180
|
}
|
|
141
181
|
isPermitted(toolOrToolSet, reader) {
|
|
142
182
|
const agentModeEnabled = this._isAgentModeEnabled.read(reader);
|
|
@@ -144,40 +184,71 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
144
184
|
return true;
|
|
145
185
|
}
|
|
146
186
|
const permittedInternalToolSetIds = [SpecedToolAliases.read, SpecedToolAliases.search, SpecedToolAliases.web];
|
|
147
|
-
if (toolOrToolSet
|
|
148
|
-
const permitted = toolOrToolSet.source.type ===
|
|
149
|
-
this._logService.trace(
|
|
187
|
+
if (isToolSet(toolOrToolSet)) {
|
|
188
|
+
const permitted = toolOrToolSet.source.type === "internal" && permittedInternalToolSetIds.includes(toolOrToolSet.referenceName);
|
|
189
|
+
this._logService.trace(
|
|
190
|
+
`LanguageModelToolsService#isPermitted: ToolSet ${toolOrToolSet.id} (${toolOrToolSet.referenceName}) permitted=${permitted}`
|
|
191
|
+
);
|
|
150
192
|
return permitted;
|
|
151
193
|
}
|
|
152
|
-
|
|
194
|
+
for (const toolSet of this._toolSets) {
|
|
195
|
+
if (toolSet.source.type === "internal" && permittedInternalToolSetIds.includes(toolSet.referenceName)) {
|
|
196
|
+
for (const memberTool of toolSet.getTools()) {
|
|
197
|
+
if (memberTool.id === toolOrToolSet.id) {
|
|
198
|
+
this._logService.trace(
|
|
199
|
+
`LanguageModelToolsService#isPermitted: Tool ${toolOrToolSet.id} (${toolOrToolSet.toolReferenceName}) permitted=true (member of ${toolSet.referenceName})`
|
|
200
|
+
);
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (toolOrToolSet.id === "vscode_fetchWebPage_internal" && permittedInternalToolSetIds.includes(SpecedToolAliases.web)) {
|
|
207
|
+
this._logService.trace(
|
|
208
|
+
`LanguageModelToolsService#isPermitted: Tool ${toolOrToolSet.id} (${toolOrToolSet.toolReferenceName}) permitted=true (special case)`
|
|
209
|
+
);
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
212
|
+
this._logService.trace(
|
|
213
|
+
`LanguageModelToolsService#isPermitted: Tool ${toolOrToolSet.id} (${toolOrToolSet.toolReferenceName}) permitted=false`
|
|
214
|
+
);
|
|
153
215
|
return false;
|
|
154
216
|
}
|
|
155
217
|
dispose() {
|
|
156
218
|
super.dispose();
|
|
157
219
|
this._callsByRequestId.forEach(calls => calls.forEach(call => call.store.dispose()));
|
|
220
|
+
this._pendingToolCalls.clear();
|
|
158
221
|
this._ctxToolsCount.reset();
|
|
159
222
|
}
|
|
160
223
|
registerToolData(toolData) {
|
|
161
224
|
if (( this._tools.has(toolData.id))) {
|
|
162
225
|
throw ( new Error(`Tool "${toolData.id}" is already registered.`));
|
|
163
226
|
}
|
|
164
|
-
this._tools.set(toolData.id, {
|
|
227
|
+
this._tools.set(toolData.id, {
|
|
228
|
+
data: toolData
|
|
229
|
+
});
|
|
165
230
|
this._ctxToolsCount.set(this._tools.size);
|
|
166
|
-
this._onDidChangeToolsScheduler.
|
|
231
|
+
if (!this._onDidChangeToolsScheduler.isScheduled()) {
|
|
232
|
+
this._onDidChangeToolsScheduler.schedule();
|
|
233
|
+
}
|
|
167
234
|
toolData.when?.keys().forEach(key => this._toolContextKeys.add(key));
|
|
168
235
|
let store;
|
|
169
236
|
if (toolData.inputSchema) {
|
|
170
237
|
store = ( new DisposableStore());
|
|
171
238
|
const schemaUrl = ( createToolSchemaUri(toolData.id).toString());
|
|
172
239
|
jsonSchemaRegistry.registerSchema(schemaUrl, toolData.inputSchema, store);
|
|
173
|
-
store.add(
|
|
240
|
+
store.add(
|
|
241
|
+
jsonSchemaRegistry.registerSchemaAssociation(schemaUrl, `/lm/tool/${toolData.id}/tool_input.json`)
|
|
242
|
+
);
|
|
174
243
|
}
|
|
175
244
|
return toDisposable(() => {
|
|
176
245
|
store?.dispose();
|
|
177
246
|
this._tools.delete(toolData.id);
|
|
178
247
|
this._ctxToolsCount.set(this._tools.size);
|
|
179
248
|
this._refreshAllToolContextKeys();
|
|
180
|
-
this._onDidChangeToolsScheduler.
|
|
249
|
+
if (!this._onDidChangeToolsScheduler.isScheduled()) {
|
|
250
|
+
this._onDidChangeToolsScheduler.schedule();
|
|
251
|
+
}
|
|
181
252
|
});
|
|
182
253
|
}
|
|
183
254
|
flushToolUpdates() {
|
|
@@ -203,32 +274,50 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
203
274
|
});
|
|
204
275
|
}
|
|
205
276
|
registerTool(toolData, tool) {
|
|
206
|
-
return combinedDisposable(
|
|
277
|
+
return combinedDisposable(
|
|
278
|
+
this.registerToolData(toolData),
|
|
279
|
+
this.registerToolImplementation(toolData.id, tool)
|
|
280
|
+
);
|
|
207
281
|
}
|
|
208
|
-
getTools(
|
|
282
|
+
getTools(model) {
|
|
209
283
|
const toolDatas = ( Iterable.map(( this._tools.values()), i => i.data));
|
|
210
284
|
const extensionToolsEnabled = this._configurationService.getValue(ChatConfiguration.ExtensionToolsEnabled);
|
|
211
285
|
return Iterable.filter(toolDatas, toolData => {
|
|
212
|
-
const satisfiesWhenClause =
|
|
213
|
-
const satisfiesExternalToolCheck = toolData.source.type !==
|
|
214
|
-
const satisfiesPermittedCheck =
|
|
215
|
-
|
|
286
|
+
const satisfiesWhenClause = !toolData.when || this._contextKeyService.contextMatchesRules(toolData.when);
|
|
287
|
+
const satisfiesExternalToolCheck = toolData.source.type !== "extension" || !!extensionToolsEnabled;
|
|
288
|
+
const satisfiesPermittedCheck = this.isPermitted(toolData);
|
|
289
|
+
const satisfiesModelFilter = toolMatchesModel(toolData, model);
|
|
290
|
+
return satisfiesWhenClause && satisfiesExternalToolCheck && satisfiesPermittedCheck && satisfiesModelFilter;
|
|
216
291
|
});
|
|
217
292
|
}
|
|
218
|
-
|
|
219
|
-
|
|
293
|
+
observeTools(model) {
|
|
294
|
+
const meta = derived(reader => {
|
|
295
|
+
const signal = observableSignal("observeToolsContext");
|
|
296
|
+
const trigger = () => transaction(tx => signal.trigger(tx));
|
|
297
|
+
reader.store.add(this.onDidChangeTools(trigger));
|
|
298
|
+
return signal;
|
|
299
|
+
});
|
|
300
|
+
return derivedOpts({
|
|
301
|
+
equalsFn: arrayEqualsC()
|
|
302
|
+
}, reader => {
|
|
303
|
+
meta.read(reader).read(reader);
|
|
304
|
+
return Array.from(this.getTools(model));
|
|
305
|
+
});
|
|
220
306
|
}
|
|
221
|
-
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
return
|
|
228
|
-
}
|
|
307
|
+
getAllToolsIncludingDisabled() {
|
|
308
|
+
const toolDatas = ( Iterable.map(( this._tools.values()), i => i.data));
|
|
309
|
+
const extensionToolsEnabled = this._configurationService.getValue(ChatConfiguration.ExtensionToolsEnabled);
|
|
310
|
+
return Iterable.filter(toolDatas, toolData => {
|
|
311
|
+
const satisfiesExternalToolCheck = toolData.source.type !== "extension" || !!extensionToolsEnabled;
|
|
312
|
+
const satisfiesPermittedCheck = this.isPermitted(toolData);
|
|
313
|
+
return satisfiesExternalToolCheck && satisfiesPermittedCheck;
|
|
314
|
+
});
|
|
229
315
|
}
|
|
230
|
-
|
|
231
|
-
|
|
316
|
+
getTool(id) {
|
|
317
|
+
return this._tools.get(id)?.data;
|
|
318
|
+
}
|
|
319
|
+
getToolByName(name) {
|
|
320
|
+
for (const tool of this.getAllToolsIncludingDisabled()) {
|
|
232
321
|
if (tool.toolReferenceName === name) {
|
|
233
322
|
return tool;
|
|
234
323
|
}
|
|
@@ -236,7 +325,15 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
236
325
|
return undefined;
|
|
237
326
|
}
|
|
238
327
|
async invokeTool(dto, countTokens, token) {
|
|
239
|
-
this._logService.trace(
|
|
328
|
+
this._logService.trace(
|
|
329
|
+
`[LanguageModelToolsService#invokeTool] Invoking tool ${dto.toolId} with parameters ${JSON.stringify(dto.parameters)}`
|
|
330
|
+
);
|
|
331
|
+
this._onDidInvokeTool.fire({
|
|
332
|
+
toolId: dto.toolId,
|
|
333
|
+
sessionResource: dto.context?.sessionResource,
|
|
334
|
+
requestId: dto.chatRequestId,
|
|
335
|
+
subagentInvocationId: dto.subAgentInvocationId
|
|
336
|
+
});
|
|
240
337
|
let tool = this._tools.get(dto.toolId);
|
|
241
338
|
if (!tool) {
|
|
242
339
|
throw ( new Error(`Tool ${dto.toolId} was not contributed`));
|
|
@@ -248,7 +345,19 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
248
345
|
throw ( new Error(`Tool ${dto.toolId} does not have an implementation registered.`));
|
|
249
346
|
}
|
|
250
347
|
}
|
|
348
|
+
let pendingToolCallKey;
|
|
251
349
|
let toolInvocation;
|
|
350
|
+
if (( this._pendingToolCalls.has(dto.callId))) {
|
|
351
|
+
pendingToolCallKey = dto.callId;
|
|
352
|
+
toolInvocation = this._pendingToolCalls.get(dto.callId);
|
|
353
|
+
} else if (dto.chatStreamToolCallId && ( this._pendingToolCalls.has(dto.chatStreamToolCallId))) {
|
|
354
|
+
pendingToolCallKey = dto.chatStreamToolCallId;
|
|
355
|
+
toolInvocation = this._pendingToolCalls.get(dto.chatStreamToolCallId);
|
|
356
|
+
}
|
|
357
|
+
const hadPendingInvocation = !!toolInvocation;
|
|
358
|
+
if (hadPendingInvocation && pendingToolCallKey) {
|
|
359
|
+
this._pendingToolCalls.delete(pendingToolCallKey);
|
|
360
|
+
}
|
|
252
361
|
let requestId;
|
|
253
362
|
let store;
|
|
254
363
|
let toolResult;
|
|
@@ -265,40 +374,57 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
265
374
|
const request = model.getRequests().at(-1);
|
|
266
375
|
requestId = request.id;
|
|
267
376
|
dto.modelId = request.modelId;
|
|
268
|
-
dto.userSelectedTools = request.userSelectedTools && {
|
|
377
|
+
dto.userSelectedTools = request.userSelectedTools && {
|
|
378
|
+
...request.userSelectedTools
|
|
379
|
+
};
|
|
269
380
|
if (!( this._callsByRequestId.has(requestId))) {
|
|
270
381
|
this._callsByRequestId.set(requestId, []);
|
|
271
382
|
}
|
|
272
|
-
const trackedCall = {
|
|
383
|
+
const trackedCall = {
|
|
384
|
+
store
|
|
385
|
+
};
|
|
273
386
|
this._callsByRequestId.get(requestId).push(trackedCall);
|
|
274
387
|
const source = ( new CancellationTokenSource());
|
|
275
388
|
store.add(toDisposable(() => {
|
|
276
389
|
source.dispose(true);
|
|
277
390
|
}));
|
|
278
391
|
store.add(token.onCancellationRequested(() => {
|
|
279
|
-
IChatToolInvocation.confirmWith(toolInvocation, {
|
|
392
|
+
IChatToolInvocation.confirmWith(toolInvocation, {
|
|
393
|
+
type: ToolConfirmKind.Denied
|
|
394
|
+
});
|
|
280
395
|
source.cancel();
|
|
281
396
|
}));
|
|
282
397
|
store.add(source.token.onCancellationRequested(() => {
|
|
283
|
-
IChatToolInvocation.confirmWith(toolInvocation, {
|
|
398
|
+
IChatToolInvocation.confirmWith(toolInvocation, {
|
|
399
|
+
type: ToolConfirmKind.Denied
|
|
400
|
+
});
|
|
284
401
|
}));
|
|
285
402
|
token = source.token;
|
|
286
403
|
prepareTimeWatch = StopWatch.create(true);
|
|
287
404
|
preparedInvocation = await this.prepareToolInvocation(tool, dto, token);
|
|
288
405
|
prepareTimeWatch.stop();
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
tool.data,
|
|
292
|
-
|
|
293
|
-
dto.
|
|
294
|
-
dto.
|
|
295
|
-
)
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
406
|
+
const autoConfirmed = await this.shouldAutoConfirm(
|
|
407
|
+
tool.data.id,
|
|
408
|
+
tool.data.runsInWorkspace,
|
|
409
|
+
tool.data.source,
|
|
410
|
+
dto.parameters,
|
|
411
|
+
dto.context?.sessionResource
|
|
412
|
+
);
|
|
413
|
+
if (hadPendingInvocation && toolInvocation) {
|
|
414
|
+
toolInvocation.transitionFromStreaming(preparedInvocation, dto.parameters, autoConfirmed);
|
|
415
|
+
} else {
|
|
416
|
+
toolInvocation = ( new ChatToolInvocation(
|
|
417
|
+
preparedInvocation,
|
|
418
|
+
tool.data,
|
|
419
|
+
dto.callId,
|
|
420
|
+
dto.subAgentInvocationId,
|
|
421
|
+
dto.parameters
|
|
422
|
+
));
|
|
423
|
+
if (autoConfirmed) {
|
|
424
|
+
IChatToolInvocation.confirmWith(toolInvocation, autoConfirmed);
|
|
425
|
+
}
|
|
426
|
+
this._chatService.appendProgress(request, toolInvocation);
|
|
427
|
+
}
|
|
302
428
|
dto.toolSpecificData = toolInvocation?.toolSpecificData;
|
|
303
429
|
if (preparedInvocation?.confirmationMessages?.title) {
|
|
304
430
|
if (!IChatToolInvocation.executionConfirmedOrDenied(toolInvocation) && !autoConfirmed) {
|
|
@@ -311,24 +437,32 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
311
437
|
if (userConfirmed.type === ToolConfirmKind.Skipped) {
|
|
312
438
|
toolResult = {
|
|
313
439
|
content: [{
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
440
|
+
kind: "text",
|
|
441
|
+
value: "The user chose to skip the tool call, they want to proceed without running it"
|
|
442
|
+
}]
|
|
317
443
|
};
|
|
318
444
|
return toolResult;
|
|
319
445
|
}
|
|
320
|
-
if (dto.toolSpecificData?.kind ===
|
|
446
|
+
if (dto.toolSpecificData?.kind === "input") {
|
|
321
447
|
dto.parameters = dto.toolSpecificData.rawInput;
|
|
322
448
|
dto.toolSpecificData = undefined;
|
|
323
449
|
}
|
|
324
450
|
}
|
|
325
|
-
}
|
|
326
|
-
else {
|
|
451
|
+
} else {
|
|
327
452
|
prepareTimeWatch = StopWatch.create(true);
|
|
328
453
|
preparedInvocation = await this.prepareToolInvocation(tool, dto, token);
|
|
329
454
|
prepareTimeWatch.stop();
|
|
330
|
-
if (preparedInvocation?.confirmationMessages?.title && !(await this.shouldAutoConfirm(
|
|
331
|
-
|
|
455
|
+
if (preparedInvocation?.confirmationMessages?.title && !(await this.shouldAutoConfirm(
|
|
456
|
+
tool.data.id,
|
|
457
|
+
tool.data.runsInWorkspace,
|
|
458
|
+
tool.data.source,
|
|
459
|
+
dto.parameters,
|
|
460
|
+
undefined
|
|
461
|
+
))) {
|
|
462
|
+
const result = await this._dialogService.confirm({
|
|
463
|
+
message: renderAsPlaintext(preparedInvocation.confirmationMessages.title),
|
|
464
|
+
detail: renderAsPlaintext(preparedInvocation.confirmationMessages.message)
|
|
465
|
+
});
|
|
332
466
|
if (!result.confirmed) {
|
|
333
467
|
throw ( new CancellationError());
|
|
334
468
|
}
|
|
@@ -347,7 +481,13 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
347
481
|
invocationTimeWatch.stop();
|
|
348
482
|
this.ensureToolDetails(dto, toolResult, tool.data);
|
|
349
483
|
if (toolInvocation?.didExecuteTool(toolResult).type === IChatToolInvocation.StateKind.WaitingForPostApproval) {
|
|
350
|
-
const autoConfirmedPost = await this.shouldAutoConfirmPostExecution(
|
|
484
|
+
const autoConfirmedPost = await this.shouldAutoConfirmPostExecution(
|
|
485
|
+
tool.data.id,
|
|
486
|
+
tool.data.runsInWorkspace,
|
|
487
|
+
tool.data.source,
|
|
488
|
+
dto.parameters,
|
|
489
|
+
dto.context?.sessionResource
|
|
490
|
+
);
|
|
351
491
|
if (autoConfirmedPost) {
|
|
352
492
|
IChatToolInvocation.confirmWith(toolInvocation, autoConfirmedPost);
|
|
353
493
|
}
|
|
@@ -358,43 +498,55 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
358
498
|
if (postConfirm.type === ToolConfirmKind.Skipped) {
|
|
359
499
|
toolResult = {
|
|
360
500
|
content: [{
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
501
|
+
kind: "text",
|
|
502
|
+
value: "The tool executed but the user chose not to share the results"
|
|
503
|
+
}]
|
|
364
504
|
};
|
|
365
505
|
}
|
|
366
506
|
}
|
|
367
|
-
this._telemetryService.publicLog2(
|
|
368
|
-
result:
|
|
369
|
-
chatSessionId: dto.context?.
|
|
507
|
+
this._telemetryService.publicLog2("languageModelToolInvoked", {
|
|
508
|
+
result: "success",
|
|
509
|
+
chatSessionId: dto.context?.sessionResource ? chatSessionResourceToId(dto.context.sessionResource) : undefined,
|
|
370
510
|
toolId: tool.data.id,
|
|
371
|
-
toolExtensionId: tool.data.source.type ===
|
|
511
|
+
toolExtensionId: tool.data.source.type === "extension" ? tool.data.source.extensionId.value : undefined,
|
|
372
512
|
toolSourceKind: tool.data.source.type,
|
|
373
513
|
prepareTimeMs: prepareTimeWatch?.elapsed(),
|
|
374
|
-
invocationTimeMs: invocationTimeWatch?.elapsed()
|
|
514
|
+
invocationTimeMs: invocationTimeWatch?.elapsed()
|
|
375
515
|
});
|
|
376
516
|
return toolResult;
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
this._telemetryService.publicLog2('languageModelToolInvoked', {
|
|
517
|
+
} catch (err) {
|
|
518
|
+
const result = isCancellationError(err) ? "userCancelled" : "error";
|
|
519
|
+
this._telemetryService.publicLog2("languageModelToolInvoked", {
|
|
381
520
|
result,
|
|
382
521
|
chatSessionId: dto.context?.sessionId,
|
|
383
522
|
toolId: tool.data.id,
|
|
384
|
-
toolExtensionId: tool.data.source.type ===
|
|
523
|
+
toolExtensionId: tool.data.source.type === "extension" ? tool.data.source.extensionId.value : undefined,
|
|
385
524
|
toolSourceKind: tool.data.source.type,
|
|
386
525
|
prepareTimeMs: prepareTimeWatch?.elapsed(),
|
|
387
|
-
invocationTimeMs: invocationTimeWatch?.elapsed()
|
|
526
|
+
invocationTimeMs: invocationTimeWatch?.elapsed()
|
|
388
527
|
});
|
|
389
|
-
|
|
390
|
-
|
|
528
|
+
if (!isCancellationError(err)) {
|
|
529
|
+
this._logService.error(
|
|
530
|
+
`[LanguageModelToolsService#invokeTool] Error from tool ${dto.toolId} with parameters ${JSON.stringify(dto.parameters)}:\n${toErrorMessage(err, true)}`
|
|
531
|
+
);
|
|
532
|
+
}
|
|
533
|
+
toolResult ??= {
|
|
534
|
+
content: []
|
|
535
|
+
};
|
|
391
536
|
toolResult.toolResultError = err instanceof Error ? err.message : String(err);
|
|
392
537
|
if (tool.data.alwaysDisplayInputOutput) {
|
|
393
|
-
toolResult.toolResultDetails = {
|
|
538
|
+
toolResult.toolResultDetails = {
|
|
539
|
+
input: this.formatToolInput(dto),
|
|
540
|
+
output: [{
|
|
541
|
+
type: "embed",
|
|
542
|
+
isText: true,
|
|
543
|
+
value: String(err)
|
|
544
|
+
}],
|
|
545
|
+
isError: true
|
|
546
|
+
};
|
|
394
547
|
}
|
|
395
548
|
throw err;
|
|
396
|
-
}
|
|
397
|
-
finally {
|
|
549
|
+
} finally {
|
|
398
550
|
toolInvocation?.didExecuteTool(toolResult, true);
|
|
399
551
|
if (store) {
|
|
400
552
|
this.cleanupCallDisposables(requestId, store);
|
|
@@ -408,15 +560,13 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
408
560
|
parameters: dto.parameters,
|
|
409
561
|
chatRequestId: dto.chatRequestId,
|
|
410
562
|
chatSessionId: dto.context?.sessionId,
|
|
563
|
+
chatSessionResource: dto.context?.sessionResource,
|
|
411
564
|
chatInteractionId: dto.chatInteractionId
|
|
412
565
|
}, token);
|
|
413
|
-
const raceResult = await Promise.race([
|
|
414
|
-
|
|
415
|
-
preparePromise
|
|
416
|
-
]);
|
|
417
|
-
if (raceResult === 'timeout') {
|
|
566
|
+
const raceResult = await Promise.race([timeout(3000, token).then(() => "timeout"), preparePromise]);
|
|
567
|
+
if (raceResult === "timeout" && dto.context) {
|
|
418
568
|
this._onDidPrepareToolCallBecomeUnresponsive.fire({
|
|
419
|
-
|
|
569
|
+
sessionResource: dto.context.sessionResource,
|
|
420
570
|
toolData: tool.data
|
|
421
571
|
});
|
|
422
572
|
}
|
|
@@ -430,38 +580,115 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
430
580
|
const fullReferenceName = getToolFullReferenceName(tool.data);
|
|
431
581
|
prepared.confirmationMessages = {
|
|
432
582
|
...prepared.confirmationMessages,
|
|
433
|
-
title: ( localize(
|
|
434
|
-
message: ( localize(
|
|
583
|
+
title: ( localize(5797, "Confirm tool execution")),
|
|
584
|
+
message: ( localize(5798, "Run the '{0}' tool?", fullReferenceName)),
|
|
435
585
|
disclaimer: ( new MarkdownString(( localize(
|
|
436
|
-
|
|
437
|
-
|
|
586
|
+
5799,
|
|
587
|
+
"Auto approval for '{0}' is restricted via {1}.",
|
|
438
588
|
getToolFullReferenceName(tool.data),
|
|
439
|
-
createMarkdownCommandLink({
|
|
440
|
-
|
|
441
|
-
|
|
589
|
+
createMarkdownCommandLink({
|
|
590
|
+
title: "`" + ChatConfiguration.EligibleForAutoApproval + "`",
|
|
591
|
+
id: "workbench.action.openSettings",
|
|
592
|
+
arguments: [ChatConfiguration.EligibleForAutoApproval]
|
|
593
|
+
}, false)
|
|
594
|
+
)), {
|
|
595
|
+
isTrusted: true
|
|
596
|
+
})),
|
|
597
|
+
allowAutoConfirm: false
|
|
442
598
|
};
|
|
443
599
|
}
|
|
444
600
|
if (!isEligibleForAutoApproval && prepared?.confirmationMessages?.title) {
|
|
445
601
|
prepared.confirmationMessages.disclaimer = ( new MarkdownString(( localize(
|
|
446
|
-
|
|
447
|
-
|
|
602
|
+
5799,
|
|
603
|
+
"Auto approval for '{0}' is restricted via {1}.",
|
|
448
604
|
getToolFullReferenceName(tool.data),
|
|
449
|
-
createMarkdownCommandLink({
|
|
450
|
-
|
|
605
|
+
createMarkdownCommandLink({
|
|
606
|
+
title: "`" + ChatConfiguration.EligibleForAutoApproval + "`",
|
|
607
|
+
id: "workbench.action.openSettings",
|
|
608
|
+
arguments: [ChatConfiguration.EligibleForAutoApproval]
|
|
609
|
+
}, false)
|
|
610
|
+
)), {
|
|
611
|
+
isTrusted: true
|
|
612
|
+
}));
|
|
451
613
|
}
|
|
452
614
|
if (prepared?.confirmationMessages?.title) {
|
|
453
|
-
if (prepared.toolSpecificData?.kind !==
|
|
615
|
+
if (prepared.toolSpecificData?.kind !== "terminal" && prepared.confirmationMessages.allowAutoConfirm !== false) {
|
|
454
616
|
prepared.confirmationMessages.allowAutoConfirm = isEligibleForAutoApproval;
|
|
455
617
|
}
|
|
456
618
|
if (!prepared.toolSpecificData && tool.data.alwaysDisplayInputOutput) {
|
|
457
619
|
prepared.toolSpecificData = {
|
|
458
|
-
kind:
|
|
459
|
-
rawInput: dto.parameters
|
|
620
|
+
kind: "input",
|
|
621
|
+
rawInput: dto.parameters
|
|
460
622
|
};
|
|
461
623
|
}
|
|
462
624
|
}
|
|
463
625
|
return prepared;
|
|
464
626
|
}
|
|
627
|
+
beginToolCall(options) {
|
|
628
|
+
const toolEntry = this._tools.get(options.toolId);
|
|
629
|
+
if (!toolEntry) {
|
|
630
|
+
return undefined;
|
|
631
|
+
}
|
|
632
|
+
if (!toolEntry.impl?.handleToolStream) {
|
|
633
|
+
return undefined;
|
|
634
|
+
}
|
|
635
|
+
const invocation = ChatToolInvocation.createStreaming({
|
|
636
|
+
toolCallId: options.toolCallId,
|
|
637
|
+
toolId: options.toolId,
|
|
638
|
+
toolData: toolEntry.data,
|
|
639
|
+
subagentInvocationId: options.subagentInvocationId,
|
|
640
|
+
chatRequestId: options.chatRequestId
|
|
641
|
+
});
|
|
642
|
+
this._pendingToolCalls.set(options.toolCallId, invocation);
|
|
643
|
+
if (options.sessionResource) {
|
|
644
|
+
const model = this._chatService.getSession(options.sessionResource);
|
|
645
|
+
if (model) {
|
|
646
|
+
const request = (options.chatRequestId ? model.getRequests().find(r => r.id === options.chatRequestId) : undefined) ?? model.getRequests().at(-1);
|
|
647
|
+
if (request) {
|
|
648
|
+
this._chatService.appendProgress(request, invocation);
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
this._callHandleToolStream(
|
|
653
|
+
toolEntry,
|
|
654
|
+
invocation,
|
|
655
|
+
options.toolCallId,
|
|
656
|
+
undefined,
|
|
657
|
+
CancellationToken.None
|
|
658
|
+
);
|
|
659
|
+
return invocation;
|
|
660
|
+
}
|
|
661
|
+
async _callHandleToolStream(toolEntry, invocation, toolCallId, rawInput, token) {
|
|
662
|
+
if (!toolEntry.impl?.handleToolStream) {
|
|
663
|
+
return;
|
|
664
|
+
}
|
|
665
|
+
try {
|
|
666
|
+
const result = await toolEntry.impl.handleToolStream({
|
|
667
|
+
toolCallId,
|
|
668
|
+
rawInput,
|
|
669
|
+
chatRequestId: invocation.chatRequestId
|
|
670
|
+
}, token);
|
|
671
|
+
if (result?.invocationMessage) {
|
|
672
|
+
invocation.updateStreamingMessage(result.invocationMessage);
|
|
673
|
+
}
|
|
674
|
+
} catch (error) {
|
|
675
|
+
this._logService.error(
|
|
676
|
+
`[LanguageModelToolsService#_callHandleToolStream] Error calling handleToolStream for tool ${toolEntry.data.id}:`,
|
|
677
|
+
error
|
|
678
|
+
);
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
async updateToolStream(toolCallId, partialInput, token) {
|
|
682
|
+
const invocation = this._pendingToolCalls.get(toolCallId);
|
|
683
|
+
if (!invocation) {
|
|
684
|
+
return;
|
|
685
|
+
}
|
|
686
|
+
invocation.updatePartialInput(partialInput);
|
|
687
|
+
const toolEntry = this._tools.get(invocation.toolId);
|
|
688
|
+
if (toolEntry) {
|
|
689
|
+
await this._callHandleToolStream(toolEntry, invocation, toolCallId, partialInput, token);
|
|
690
|
+
}
|
|
691
|
+
}
|
|
465
692
|
playAccessibilitySignal(toolInvocations) {
|
|
466
693
|
const autoApproved = this._configurationService.getValue(ChatConfiguration.GlobalAutoApprove);
|
|
467
694
|
if (autoApproved) {
|
|
@@ -471,17 +698,21 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
471
698
|
if (!setting) {
|
|
472
699
|
return;
|
|
473
700
|
}
|
|
474
|
-
const soundEnabled = setting.sound ===
|
|
475
|
-
const announcementEnabled = this._accessibilityService.isScreenReaderOptimized() && setting.announcement ===
|
|
701
|
+
const soundEnabled = setting.sound === "on" || (setting.sound === "auto" && (this._accessibilityService.isScreenReaderOptimized()));
|
|
702
|
+
const announcementEnabled = this._accessibilityService.isScreenReaderOptimized() && setting.announcement === "auto";
|
|
476
703
|
if (soundEnabled || announcementEnabled) {
|
|
477
|
-
this._accessibilitySignalService.playSignal(AccessibilitySignal.chatUserActionRequired, {
|
|
704
|
+
this._accessibilitySignalService.playSignal(AccessibilitySignal.chatUserActionRequired, {
|
|
705
|
+
customAlertMessage: this._instantiationService.invokeFunction(getToolConfirmationAlert, toolInvocations),
|
|
706
|
+
userGesture: true,
|
|
707
|
+
modality: !soundEnabled ? "announcement" : undefined
|
|
708
|
+
});
|
|
478
709
|
}
|
|
479
710
|
}
|
|
480
711
|
ensureToolDetails(dto, toolResult, toolData) {
|
|
481
712
|
if (!toolResult.toolResultDetails && toolData.alwaysDisplayInputOutput) {
|
|
482
713
|
toolResult.toolResultDetails = {
|
|
483
714
|
input: this.formatToolInput(dto),
|
|
484
|
-
output: this.toolResultToIO(toolResult)
|
|
715
|
+
output: this.toolResultToIO(toolResult)
|
|
485
716
|
};
|
|
486
717
|
}
|
|
487
718
|
}
|
|
@@ -490,33 +721,42 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
490
721
|
}
|
|
491
722
|
toolResultToIO(toolResult) {
|
|
492
723
|
return ( toolResult.content.map(part => {
|
|
493
|
-
if (part.kind ===
|
|
494
|
-
return {
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
else if (part.kind ===
|
|
500
|
-
return {
|
|
501
|
-
|
|
502
|
-
|
|
724
|
+
if (part.kind === "text") {
|
|
725
|
+
return {
|
|
726
|
+
type: "embed",
|
|
727
|
+
isText: true,
|
|
728
|
+
value: part.value
|
|
729
|
+
};
|
|
730
|
+
} else if (part.kind === "promptTsx") {
|
|
731
|
+
return {
|
|
732
|
+
type: "embed",
|
|
733
|
+
isText: true,
|
|
734
|
+
value: stringifyPromptTsxPart(part)
|
|
735
|
+
};
|
|
736
|
+
} else if (part.kind === "data") {
|
|
737
|
+
return {
|
|
738
|
+
type: "embed",
|
|
739
|
+
value: encodeBase64(part.value.data),
|
|
740
|
+
mimeType: part.value.mimeType
|
|
741
|
+
};
|
|
742
|
+
} else {
|
|
503
743
|
assertNever();
|
|
504
744
|
}
|
|
505
745
|
}));
|
|
506
746
|
}
|
|
507
747
|
getEligibleForAutoApprovalSpecialCase(toolData) {
|
|
508
|
-
if (toolData.id ===
|
|
509
|
-
return
|
|
748
|
+
if (toolData.id === "vscode_fetchWebPage_internal") {
|
|
749
|
+
return "fetch";
|
|
510
750
|
}
|
|
511
751
|
return undefined;
|
|
512
752
|
}
|
|
513
753
|
isToolEligibleForAutoApproval(toolData) {
|
|
514
754
|
const fullReferenceName = this.getEligibleForAutoApprovalSpecialCase(toolData) ?? getToolFullReferenceName(toolData);
|
|
515
|
-
if (toolData.id ===
|
|
755
|
+
if (toolData.id === "copilot_fetchWebPage") {
|
|
516
756
|
return true;
|
|
517
757
|
}
|
|
518
758
|
const eligibilityConfig = this._configurationService.getValue(ChatConfiguration.EligibleForAutoApproval);
|
|
519
|
-
if (eligibilityConfig && typeof eligibilityConfig ===
|
|
759
|
+
if (eligibilityConfig && typeof eligibilityConfig === "object" && fullReferenceName) {
|
|
520
760
|
if (Object.prototype.hasOwnProperty.call(eligibilityConfig, fullReferenceName)) {
|
|
521
761
|
return eligibilityConfig[fullReferenceName];
|
|
522
762
|
}
|
|
@@ -525,8 +765,8 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
525
765
|
if (Object.prototype.hasOwnProperty.call(eligibilityConfig, legacyName)) {
|
|
526
766
|
return eligibilityConfig[legacyName];
|
|
527
767
|
}
|
|
528
|
-
if (legacyName.includes(
|
|
529
|
-
const trimmedLegacyName = legacyName.split(
|
|
768
|
+
if (legacyName.includes("/")) {
|
|
769
|
+
const trimmedLegacyName = legacyName.split("/").pop();
|
|
530
770
|
if (trimmedLegacyName && Object.prototype.hasOwnProperty.call(eligibilityConfig, trimmedLegacyName)) {
|
|
531
771
|
return eligibilityConfig[trimmedLegacyName];
|
|
532
772
|
}
|
|
@@ -536,7 +776,7 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
536
776
|
}
|
|
537
777
|
return true;
|
|
538
778
|
}
|
|
539
|
-
async shouldAutoConfirm(toolId, runsInWorkspace, source, parameters) {
|
|
779
|
+
async shouldAutoConfirm(toolId, runsInWorkspace, source, parameters, chatSessionResource) {
|
|
540
780
|
const tool = this._tools.get(toolId);
|
|
541
781
|
if (!tool) {
|
|
542
782
|
return undefined;
|
|
@@ -544,34 +784,54 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
544
784
|
if (!this.isToolEligibleForAutoApproval(tool.data)) {
|
|
545
785
|
return undefined;
|
|
546
786
|
}
|
|
547
|
-
const reason = this._confirmationService.getPreConfirmAction({
|
|
787
|
+
const reason = this._confirmationService.getPreConfirmAction({
|
|
788
|
+
toolId,
|
|
789
|
+
source,
|
|
790
|
+
parameters,
|
|
791
|
+
chatSessionResource
|
|
792
|
+
});
|
|
548
793
|
if (reason) {
|
|
549
794
|
return reason;
|
|
550
795
|
}
|
|
551
796
|
const config = this._configurationService.inspect(ChatConfiguration.GlobalAutoApprove);
|
|
552
797
|
let value = config.value ?? config.defaultValue;
|
|
553
|
-
if (typeof runsInWorkspace ===
|
|
798
|
+
if (typeof runsInWorkspace === "boolean") {
|
|
554
799
|
value = config.userLocalValue ?? config.applicationValue;
|
|
555
800
|
if (runsInWorkspace) {
|
|
556
801
|
value = config.workspaceValue ?? config.workspaceFolderValue ?? config.userRemoteValue ?? value;
|
|
557
802
|
}
|
|
558
803
|
}
|
|
559
|
-
const autoConfirm = value === true || (typeof value ===
|
|
804
|
+
const autoConfirm = value === true || (typeof value === "object" && value.hasOwnProperty(toolId) && value[toolId] === true);
|
|
560
805
|
if (autoConfirm) {
|
|
561
806
|
if (await this._checkGlobalAutoApprove()) {
|
|
562
|
-
return {
|
|
807
|
+
return {
|
|
808
|
+
type: ToolConfirmKind.Setting,
|
|
809
|
+
id: ChatConfiguration.GlobalAutoApprove
|
|
810
|
+
};
|
|
563
811
|
}
|
|
564
812
|
}
|
|
565
813
|
return undefined;
|
|
566
814
|
}
|
|
567
|
-
async shouldAutoConfirmPostExecution(toolId, runsInWorkspace, source, parameters) {
|
|
815
|
+
async shouldAutoConfirmPostExecution(toolId, runsInWorkspace, source, parameters, chatSessionResource) {
|
|
568
816
|
if (this._configurationService.getValue(ChatConfiguration.GlobalAutoApprove) && (await this._checkGlobalAutoApprove())) {
|
|
569
|
-
return {
|
|
817
|
+
return {
|
|
818
|
+
type: ToolConfirmKind.Setting,
|
|
819
|
+
id: ChatConfiguration.GlobalAutoApprove
|
|
820
|
+
};
|
|
570
821
|
}
|
|
571
|
-
return this._confirmationService.getPostConfirmAction({
|
|
822
|
+
return this._confirmationService.getPostConfirmAction({
|
|
823
|
+
toolId,
|
|
824
|
+
source,
|
|
825
|
+
parameters,
|
|
826
|
+
chatSessionResource
|
|
827
|
+
});
|
|
572
828
|
}
|
|
573
829
|
async _checkGlobalAutoApprove() {
|
|
574
|
-
const optedIn = this._storageService.getBoolean(
|
|
830
|
+
const optedIn = this._storageService.getBoolean(
|
|
831
|
+
AutoApproveStorageKeys.GlobalAutoApproveOptIn,
|
|
832
|
+
StorageScope.APPLICATION,
|
|
833
|
+
false
|
|
834
|
+
);
|
|
575
835
|
if (optedIn) {
|
|
576
836
|
return true;
|
|
577
837
|
}
|
|
@@ -580,30 +840,32 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
580
840
|
}
|
|
581
841
|
const promptResult = await this._dialogService.prompt({
|
|
582
842
|
type: Severity.Warning,
|
|
583
|
-
message: ( localize(
|
|
584
|
-
buttons: [
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
run: () => false
|
|
592
|
-
},
|
|
593
|
-
],
|
|
843
|
+
message: ( localize(5800, "Enable global auto approve?")),
|
|
844
|
+
buttons: [{
|
|
845
|
+
label: ( localize(5801, "Enable")),
|
|
846
|
+
run: () => true
|
|
847
|
+
}, {
|
|
848
|
+
label: ( localize(5802, "Disable")),
|
|
849
|
+
run: () => false
|
|
850
|
+
}],
|
|
594
851
|
custom: {
|
|
595
852
|
icon: Codicon.warning,
|
|
596
853
|
disableCloseAction: true,
|
|
597
854
|
markdownDetails: [{
|
|
598
|
-
|
|
599
|
-
|
|
855
|
+
markdown: ( new MarkdownString(globalAutoApproveDescription.value))
|
|
856
|
+
}]
|
|
600
857
|
}
|
|
601
858
|
});
|
|
602
859
|
if (promptResult.result !== true) {
|
|
603
860
|
await this._configurationService.updateValue(ChatConfiguration.GlobalAutoApprove, false);
|
|
604
861
|
return false;
|
|
605
862
|
}
|
|
606
|
-
this._storageService.store(
|
|
863
|
+
this._storageService.store(
|
|
864
|
+
AutoApproveStorageKeys.GlobalAutoApproveOptIn,
|
|
865
|
+
true,
|
|
866
|
+
StorageScope.APPLICATION,
|
|
867
|
+
StorageTarget.USER
|
|
868
|
+
);
|
|
607
869
|
return true;
|
|
608
870
|
}
|
|
609
871
|
cleanupCallDisposables(requestId, store) {
|
|
@@ -627,9 +889,22 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
627
889
|
calls.forEach(call => call.store.dispose());
|
|
628
890
|
this._callsByRequestId.delete(requestId);
|
|
629
891
|
}
|
|
892
|
+
for (const [toolCallId, invocation] of this._pendingToolCalls) {
|
|
893
|
+
if (invocation.chatRequestId === requestId) {
|
|
894
|
+
this._pendingToolCalls.delete(toolCallId);
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
static {
|
|
899
|
+
this.githubMCPServerAliases = [
|
|
900
|
+
"github/github-mcp-server",
|
|
901
|
+
"io.github.github/github-mcp-server",
|
|
902
|
+
"github-mcp-server"
|
|
903
|
+
];
|
|
904
|
+
}
|
|
905
|
+
static {
|
|
906
|
+
this.playwrightMCPServerAliases = ["microsoft/playwright-mcp", "com.microsoft/playwright-mcp"];
|
|
630
907
|
}
|
|
631
|
-
static { this.githubMCPServerAliases = ['github/github-mcp-server', 'io.github.github/github-mcp-server', 'github-mcp-server']; }
|
|
632
|
-
static { this.playwrightMCPServerAliases = ['microsoft/playwright-mcp', 'com.microsoft/playwright-mcp']; }
|
|
633
908
|
*getToolSetAliases(toolSet, fullReferenceName) {
|
|
634
909
|
if (fullReferenceName !== toolSet.referenceName) {
|
|
635
910
|
yield toolSet.referenceName;
|
|
@@ -638,23 +913,25 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
638
913
|
yield* toolSet.legacyFullNames;
|
|
639
914
|
}
|
|
640
915
|
switch (toolSet.referenceName) {
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
916
|
+
case "github":
|
|
917
|
+
for (const alias of LanguageModelToolsService_1.githubMCPServerAliases) {
|
|
918
|
+
yield alias + "/*";
|
|
919
|
+
}
|
|
920
|
+
break;
|
|
921
|
+
case "playwright":
|
|
922
|
+
for (const alias of LanguageModelToolsService_1.playwrightMCPServerAliases) {
|
|
923
|
+
yield alias + "/*";
|
|
924
|
+
}
|
|
925
|
+
break;
|
|
926
|
+
case
|
|
927
|
+
SpecedToolAliases.execute:
|
|
928
|
+
yield "shell";
|
|
929
|
+
break;
|
|
930
|
+
case
|
|
931
|
+
SpecedToolAliases.agent:
|
|
932
|
+
yield VSCodeToolReference.runSubagent;
|
|
933
|
+
yield "custom-agent";
|
|
934
|
+
break;
|
|
658
935
|
}
|
|
659
936
|
}
|
|
660
937
|
*getToolAliases(toolSet, fullReferenceName) {
|
|
@@ -665,55 +942,56 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
665
942
|
if (toolSet.legacyToolReferenceFullNames) {
|
|
666
943
|
for (const legacyName of toolSet.legacyToolReferenceFullNames) {
|
|
667
944
|
yield legacyName;
|
|
668
|
-
const lastSlashIndex = legacyName.lastIndexOf(
|
|
945
|
+
const lastSlashIndex = legacyName.lastIndexOf("/");
|
|
669
946
|
if (lastSlashIndex !== -1) {
|
|
670
947
|
yield legacyName.substring(lastSlashIndex + 1);
|
|
671
948
|
}
|
|
672
949
|
}
|
|
673
950
|
}
|
|
674
|
-
const slashIndex = fullReferenceName.lastIndexOf(
|
|
951
|
+
const slashIndex = fullReferenceName.lastIndexOf("/");
|
|
675
952
|
if (slashIndex !== -1) {
|
|
676
953
|
switch (fullReferenceName.substring(0, slashIndex)) {
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
954
|
+
case "github":
|
|
955
|
+
for (const alias of LanguageModelToolsService_1.githubMCPServerAliases) {
|
|
956
|
+
yield alias + fullReferenceName.substring(slashIndex);
|
|
957
|
+
}
|
|
958
|
+
break;
|
|
959
|
+
case "playwright":
|
|
960
|
+
for (const alias of LanguageModelToolsService_1.playwrightMCPServerAliases) {
|
|
961
|
+
yield alias + fullReferenceName.substring(slashIndex);
|
|
962
|
+
}
|
|
963
|
+
break;
|
|
687
964
|
}
|
|
688
965
|
}
|
|
689
966
|
}
|
|
690
|
-
toToolAndToolSetEnablementMap(fullReferenceNames, _target) {
|
|
967
|
+
toToolAndToolSetEnablementMap(fullReferenceNames, _target, model) {
|
|
691
968
|
const toolOrToolSetNames = ( new Set(fullReferenceNames));
|
|
692
969
|
const result = ( new Map());
|
|
693
970
|
for (const [tool, fullReferenceName] of this.toolsWithFullReferenceName.get()) {
|
|
694
|
-
if (tool
|
|
971
|
+
if (isToolSet(tool)) {
|
|
695
972
|
const enabled = ( toolOrToolSetNames.has(fullReferenceName)) || ( Iterable.some(this.getToolSetAliases(tool, fullReferenceName), name => ( toolOrToolSetNames.has(name))));
|
|
696
|
-
|
|
973
|
+
const scoped = model ? ( new ToolSetForModel(tool, model)) : tool;
|
|
974
|
+
result.set(scoped, enabled);
|
|
697
975
|
if (enabled) {
|
|
698
|
-
for (const memberTool of
|
|
976
|
+
for (const memberTool of scoped.getTools()) {
|
|
699
977
|
result.set(memberTool, true);
|
|
700
978
|
}
|
|
701
979
|
}
|
|
702
|
-
}
|
|
703
|
-
|
|
980
|
+
} else {
|
|
981
|
+
if (model && !toolMatchesModel(tool, model)) {
|
|
982
|
+
continue;
|
|
983
|
+
}
|
|
704
984
|
if (!( result.has(tool))) {
|
|
705
|
-
const enabled = ( toolOrToolSetNames.has(fullReferenceName))
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
return index !== -1 && ( toolOrToolSetNames.has(toolFullName.substring(0, index)));
|
|
710
|
-
});
|
|
985
|
+
const enabled = ( toolOrToolSetNames.has(fullReferenceName)) || ( Iterable.some(this.getToolAliases(tool, fullReferenceName), name => ( toolOrToolSetNames.has(name)))) || !!tool.legacyToolReferenceFullNames?.some(toolFullName => {
|
|
986
|
+
const index = toolFullName.lastIndexOf("/");
|
|
987
|
+
return index !== -1 && ( toolOrToolSetNames.has(toolFullName.substring(0, index)));
|
|
988
|
+
});
|
|
711
989
|
result.set(tool, enabled);
|
|
712
990
|
}
|
|
713
991
|
}
|
|
714
992
|
}
|
|
715
993
|
for (const toolSet of this._toolSets) {
|
|
716
|
-
if (toolSet.source.type ===
|
|
994
|
+
if (toolSet.source.type === "user") {
|
|
717
995
|
const enabled = Iterable.every(toolSet.getTools(), t => result.get(t) === true);
|
|
718
996
|
result.set(toolSet, enabled);
|
|
719
997
|
}
|
|
@@ -724,15 +1002,14 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
724
1002
|
const result = [];
|
|
725
1003
|
const toolsCoveredByEnabledToolSet = ( new Set());
|
|
726
1004
|
for (const [tool, fullReferenceName] of this.toolsWithFullReferenceName.get()) {
|
|
727
|
-
if (tool
|
|
1005
|
+
if (isToolSet(tool)) {
|
|
728
1006
|
if (map.get(tool)) {
|
|
729
1007
|
result.push(fullReferenceName);
|
|
730
1008
|
for (const memberTool of tool.getTools()) {
|
|
731
1009
|
toolsCoveredByEnabledToolSet.add(memberTool);
|
|
732
1010
|
}
|
|
733
1011
|
}
|
|
734
|
-
}
|
|
735
|
-
else {
|
|
1012
|
+
} else {
|
|
736
1013
|
if (map.get(tool) && !( toolsCoveredByEnabledToolSet.has(tool))) {
|
|
737
1014
|
result.push(fullReferenceName);
|
|
738
1015
|
}
|
|
@@ -749,16 +1026,21 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
749
1026
|
for (const ref of variableReferences) {
|
|
750
1027
|
const toolOrToolSet = toolsOrToolSetByName.get(ref.name);
|
|
751
1028
|
if (toolOrToolSet) {
|
|
752
|
-
if (toolOrToolSet
|
|
1029
|
+
if (isToolSet(toolOrToolSet)) {
|
|
753
1030
|
result.push(toToolSetVariableEntry(toolOrToolSet, ref.range));
|
|
754
|
-
}
|
|
755
|
-
else {
|
|
1031
|
+
} else {
|
|
756
1032
|
result.push(toToolVariableEntry(toolOrToolSet, ref.range));
|
|
757
1033
|
}
|
|
758
1034
|
}
|
|
759
1035
|
}
|
|
760
1036
|
return result;
|
|
761
1037
|
}
|
|
1038
|
+
getToolSetsForModel(model, reader) {
|
|
1039
|
+
if (!model) {
|
|
1040
|
+
return this.toolSets.read(reader);
|
|
1041
|
+
}
|
|
1042
|
+
return ( Iterable.map(this.toolSets.read(reader), ts => ( new ToolSetForModel(ts, model))));
|
|
1043
|
+
}
|
|
762
1044
|
getToolSet(id) {
|
|
763
1045
|
for (const toolSet of this._toolSets) {
|
|
764
1046
|
if (toolSet.id === id) {
|
|
@@ -777,10 +1059,10 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
777
1059
|
}
|
|
778
1060
|
getSpecedToolSetName(referenceName) {
|
|
779
1061
|
if (LanguageModelToolsService_1.githubMCPServerAliases.includes(referenceName)) {
|
|
780
|
-
return
|
|
1062
|
+
return "github";
|
|
781
1063
|
}
|
|
782
1064
|
if (LanguageModelToolsService_1.playwrightMCPServerAliases.includes(referenceName)) {
|
|
783
|
-
return
|
|
1065
|
+
return "playwright";
|
|
784
1066
|
}
|
|
785
1067
|
return referenceName;
|
|
786
1068
|
}
|
|
@@ -794,7 +1076,15 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
794
1076
|
that._toolSets.delete(result);
|
|
795
1077
|
}
|
|
796
1078
|
}
|
|
797
|
-
})(
|
|
1079
|
+
})(
|
|
1080
|
+
id,
|
|
1081
|
+
referenceName,
|
|
1082
|
+
options?.icon ?? Codicon.tools,
|
|
1083
|
+
source,
|
|
1084
|
+
options?.description,
|
|
1085
|
+
options?.legacyFullNames,
|
|
1086
|
+
this._contextKeyService
|
|
1087
|
+
);
|
|
798
1088
|
this._toolSets.add(result);
|
|
799
1089
|
return result;
|
|
800
1090
|
}
|
|
@@ -815,7 +1105,7 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
815
1105
|
}
|
|
816
1106
|
};
|
|
817
1107
|
for (const [tool, _] of this.toolsWithFullReferenceName.get()) {
|
|
818
|
-
if (tool
|
|
1108
|
+
if (isToolSet(tool)) {
|
|
819
1109
|
knownToolSetNames.add(tool.referenceName);
|
|
820
1110
|
if (tool.legacyFullNames) {
|
|
821
1111
|
for (const legacyName of tool.legacyFullNames) {
|
|
@@ -825,19 +1115,18 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
825
1115
|
}
|
|
826
1116
|
}
|
|
827
1117
|
for (const [tool, fullReferenceName] of this.toolsWithFullReferenceName.get()) {
|
|
828
|
-
if (tool
|
|
1118
|
+
if (isToolSet(tool)) {
|
|
829
1119
|
for (const alias of this.getToolSetAliases(tool, fullReferenceName)) {
|
|
830
1120
|
add(alias, fullReferenceName);
|
|
831
1121
|
}
|
|
832
|
-
}
|
|
833
|
-
else {
|
|
1122
|
+
} else {
|
|
834
1123
|
for (const alias of this.getToolAliases(tool, fullReferenceName)) {
|
|
835
1124
|
add(alias, fullReferenceName);
|
|
836
1125
|
}
|
|
837
1126
|
if (tool.legacyToolReferenceFullNames) {
|
|
838
1127
|
for (const legacyName of tool.legacyToolReferenceFullNames) {
|
|
839
|
-
if (legacyName.includes(
|
|
840
|
-
const toolSetFullName = legacyName.substring(0, legacyName.lastIndexOf(
|
|
1128
|
+
if (legacyName.includes("/")) {
|
|
1129
|
+
const toolSetFullName = legacyName.substring(0, legacyName.lastIndexOf("/"));
|
|
841
1130
|
if (!( knownToolSetNames.has(toolSetFullName))) {
|
|
842
1131
|
add(toolSetFullName, fullReferenceName);
|
|
843
1132
|
}
|
|
@@ -853,7 +1142,7 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
853
1142
|
if (fullReferenceName === toolFullReferenceName) {
|
|
854
1143
|
return tool;
|
|
855
1144
|
}
|
|
856
|
-
const aliases = tool
|
|
1145
|
+
const aliases = isToolSet(tool) ? this.getToolSetAliases(tool, toolFullReferenceName) : this.getToolAliases(tool, toolFullReferenceName);
|
|
857
1146
|
if (( Iterable.some(aliases, alias => fullReferenceName === alias))) {
|
|
858
1147
|
return tool;
|
|
859
1148
|
}
|
|
@@ -861,38 +1150,24 @@ let LanguageModelToolsService = class LanguageModelToolsService extends Disposab
|
|
|
861
1150
|
return undefined;
|
|
862
1151
|
}
|
|
863
1152
|
getFullReferenceName(tool, toolSet) {
|
|
864
|
-
if (tool
|
|
1153
|
+
if (isToolSet(tool)) {
|
|
865
1154
|
return getToolSetFullReferenceName(tool);
|
|
866
1155
|
}
|
|
867
1156
|
return getToolFullReferenceName(tool, toolSet);
|
|
868
1157
|
}
|
|
869
1158
|
};
|
|
870
|
-
LanguageModelToolsService = LanguageModelToolsService_1 = ( __decorate([
|
|
871
|
-
( __param(0, IInstantiationService)),
|
|
872
|
-
( __param(1, IExtensionService)),
|
|
873
|
-
( __param(2, IContextKeyService)),
|
|
874
|
-
( __param(3, IChatService)),
|
|
875
|
-
( __param(4, IDialogService)),
|
|
876
|
-
( __param(5, ITelemetryService)),
|
|
877
|
-
( __param(6, ILogService)),
|
|
878
|
-
( __param(7, IConfigurationService)),
|
|
879
|
-
( __param(8, IAccessibilityService)),
|
|
880
|
-
( __param(9, IAccessibilitySignalService)),
|
|
881
|
-
( __param(10, IStorageService)),
|
|
882
|
-
( __param(11, ILanguageModelToolsConfirmationService))
|
|
883
|
-
], LanguageModelToolsService));
|
|
1159
|
+
LanguageModelToolsService = LanguageModelToolsService_1 = ( __decorate([( __param(0, IInstantiationService)), ( __param(1, IExtensionService)), ( __param(2, IContextKeyService)), ( __param(3, IChatService)), ( __param(4, IDialogService)), ( __param(5, ITelemetryService)), ( __param(6, ILogService)), ( __param(7, IConfigurationService)), ( __param(8, IAccessibilityService)), ( __param(9, IAccessibilitySignalService)), ( __param(10, IStorageService)), ( __param(11, ILanguageModelToolsConfirmationService))], LanguageModelToolsService));
|
|
884
1160
|
function getToolFullReferenceName(tool, toolSet) {
|
|
885
1161
|
const toolName = tool.toolReferenceName ?? tool.displayName;
|
|
886
1162
|
if (toolSet) {
|
|
887
1163
|
return `${toolSet.referenceName}/${toolName}`;
|
|
888
|
-
}
|
|
889
|
-
else if (tool.source.type === 'extension') {
|
|
1164
|
+
} else if (tool.source.type === "extension") {
|
|
890
1165
|
return `${tool.source.extensionId.value.toLowerCase()}/${toolName}`;
|
|
891
1166
|
}
|
|
892
1167
|
return toolName;
|
|
893
1168
|
}
|
|
894
1169
|
function getToolSetFullReferenceName(toolSet) {
|
|
895
|
-
if (toolSet.source.type ===
|
|
1170
|
+
if (toolSet.source.type === "mcp") {
|
|
896
1171
|
return `${toolSet.referenceName}/*`;
|
|
897
1172
|
}
|
|
898
1173
|
return toolSet.referenceName;
|