From b1b5c1e6811411a31bb8fb8bd3708c4cbf673667 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 31 Dec 2025 07:11:50 -0800 Subject: [PATCH 01/10] Auto approve npm scripts by default Fixes #285509 --- ...commandLineNpmScriptAutoApproveAnalyzer.ts | 265 ++++++++++++++ .../browser/tools/runInTerminalTool.ts | 2 + .../terminalChatAgentToolsConfiguration.ts | 8 + ...ndLineNpmScriptAutoApproveAnalyzer.test.ts | 329 ++++++++++++++++++ 4 files changed, 604 insertions(+) create mode 100644 src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineNpmScriptAutoApproveAnalyzer.ts create mode 100644 src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/electron-browser/commandLineAnalyzer/commandLineNpmScriptAutoApproveAnalyzer.test.ts diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineNpmScriptAutoApproveAnalyzer.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineNpmScriptAutoApproveAnalyzer.ts new file mode 100644 index 0000000000000..6b913ce3716a0 --- /dev/null +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/commandLineAnalyzer/commandLineNpmScriptAutoApproveAnalyzer.ts @@ -0,0 +1,265 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { visit, type JSONVisitor } from '../../../../../../../base/common/json.js'; +import { Disposable } from '../../../../../../../base/common/lifecycle.js'; +import { URI } from '../../../../../../../base/common/uri.js'; +import { IConfigurationService } from '../../../../../../../platform/configuration/common/configuration.js'; +import { IFileService } from '../../../../../../../platform/files/common/files.js'; +import { IWorkspaceContextService } from '../../../../../../../platform/workspace/common/workspace.js'; +import { TerminalChatAgentToolsSettingId } from '../../../common/terminalChatAgentToolsConfiguration.js'; +import type { TreeSitterCommandParser } from '../../treeSitterCommandParser.js'; +import type { ICommandLineAnalyzer, ICommandLineAnalyzerOptions, ICommandLineAnalyzerResult } from './commandLineAnalyzer.js'; +import { MarkdownString } from '../../../../../../../base/common/htmlContent.js'; +import { localize } from '../../../../../../../nls.js'; +import { IStorageService, StorageScope } from '../../../../../../../platform/storage/common/storage.js'; +import { TerminalToolConfirmationStorageKeys } from '../../../../../chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolConfirmationSubPart.js'; + +/** + * Regex patterns to match npm/yarn/pnpm run commands and extract the script name. + * Captures the script name in group 1. + */ +const npmRunPatterns = [ + // npm run