Path: blob/main/extensions/copilot/src/extension/chatSessions/claude/node/toolPermissionHandlers/editToolHandler.ts
13406 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { FileEditInput, FileWriteInput } from '@anthropic-ai/claude-agent-sdk/sdk-tools';6import { URI } from '../../../../../util/vs/base/common/uri';7import { IInstantiationService } from '../../../../../util/vs/platform/instantiation/common/instantiation';8import { isFileOkForTool } from '../../../../tools/node/toolUtils';9import { ClaudeToolPermissionContext, IClaudeToolPermissionHandler } from '../../common/claudeToolPermission';10import { registerToolPermissionHandler } from '../../common/claudeToolPermissionRegistry';11import { ClaudeToolNames } from '../../common/claudeTools';1213type EditToolName = ClaudeToolNames.Edit | ClaudeToolNames.Write | ClaudeToolNames.MultiEdit;1415/**16* Handler for edit tools (Edit, Write, MultiEdit).17* Auto-approves edits to files within the workspace, or when permission mode is 'acceptEdits'.18*/19export class EditToolHandler implements IClaudeToolPermissionHandler<EditToolName> {20public readonly toolNames = [ClaudeToolNames.Edit, ClaudeToolNames.Write, ClaudeToolNames.MultiEdit] as const;2122constructor(23@IInstantiationService private readonly instantiationService: IInstantiationService,24) { }2526public async canAutoApprove(27_toolName: EditToolName,28input: FileEditInput | FileWriteInput,29context: ClaudeToolPermissionContext30): Promise<boolean> {31// Auto-approve all edits in 'acceptEdits' mode32if (context.permissionMode === 'acceptEdits') {33return true;34} else if (context.permissionMode === 'bypassPermissions') {35return true;36} else if (context.permissionMode === 'default') {37return false;38}39// Otherwise, only auto-approve files within the workspace40return this.instantiationService.invokeFunction(isFileOkForTool, URI.file(input.file_path));41}42}4344// Self-register the handler45registerToolPermissionHandler(46[ClaudeToolNames.Edit, ClaudeToolNames.Write, ClaudeToolNames.MultiEdit],47EditToolHandler48);495051