import { Select } from '../../CustomSelect/select' import chalk from 'chalk' import { Box, Text } from 'ink' import { basename, extname } from 'path' import React, { useMemo } from 'react' import { UnaryEvent, usePermissionRequestLogging, } from '../../../hooks/usePermissionRequestLogging.js' import { savePermission } from '../../../permissions' import { env } from '../../../utils/env' import { getTheme } from '../../../utils/theme' import { logUnaryEvent } from '../../../utils/unaryLogging' import { type ToolUseConfirm, toolUseConfirmGetPrefix, } from '../PermissionRequest.js' import { PermissionRequestTitle, textColorForRiskScore, } from '../PermissionRequestTitle.js' import { FileEditToolDiff } from './FileEditToolDiff' import { useTerminalSize } from '../../../hooks/useTerminalSize' import { pathInOriginalCwd } from '../../../utils/permissions/filesystem' function getOptions(path: string) { // Only show don't ask again option for edits in original working directory const showDontAskAgainOptions = pathInOriginalCwd(path) ? [ { label: "Yes, and don't ask again this session", value: 'yes-dont-ask-again', }, ] : [] return [ { label: 'Yes', value: 'yes', }, ...showDontAskAgainOptions, { label: `No, and provide instructions (${chalk.bold.hex(getTheme().warning)('esc')})`, value: 'no', }, ] } type Props = { toolUseConfirm: ToolUseConfirm onDone(): void verbose: boolean } export function FileEditPermissionRequest({ toolUseConfirm, onDone, verbose, }: Props): React.ReactNode { const { columns } = useTerminalSize() const { file_path, new_string, old_string } = toolUseConfirm.input as { file_path: string new_string: string old_string: string } const unaryEvent = useMemo( () => ({ completion_type: 'str_replace_single', language_name: extractLanguageName(file_path), }), [file_path], ) usePermissionRequestLogging(toolUseConfirm, unaryEvent) return ( Do you want to make this edit to{' '} {basename(file_path)}?