import React from 'react'
import { Box, Text, useTheme } from '../../../ink.js'
import { FallbackPermissionRequest } from '../FallbackPermissionRequest.js'
import { FilePermissionDialog } from '../FilePermissionDialog/FilePermissionDialog.js'
import type { ToolInput } from '../FilePermissionDialog/useFilePermissionDialog.js'
import type {
PermissionRequestProps,
ToolUseConfirm,
} from '../PermissionRequest.js'
function pathFromToolUse(toolUseConfirm: ToolUseConfirm): string | null {
const tool = toolUseConfirm.tool
if ('getPath' in tool && typeof tool.getPath === 'function') {
try {
return tool.getPath(toolUseConfirm.input)
} catch {
return null
}
}
return null
}
export function FilesystemPermissionRequest({
toolUseConfirm,
onDone,
onReject,
verbose,
toolUseContext,
workerBadge,
}: PermissionRequestProps): React.ReactNode {
const [theme] = useTheme()
const path = pathFromToolUse(toolUseConfirm)
const userFacingName = toolUseConfirm.tool.userFacingName(
toolUseConfirm.input as never,
)
const isReadOnly = toolUseConfirm.tool.isReadOnly(toolUseConfirm.input)
const userFacingReadOrEdit = isReadOnly ? 'Read' : 'Edit'
// Use simple singular form - the actual operation details are shown in content
const title = `${userFacingReadOrEdit} file`
// Simple pass-through parser since we don't need to transform the input
const parseInput = (input: unknown): ToolInput => input as ToolInput
// Fall back to generic permission request if no path is found
if (!path) {
return (
)
}
// Render tool use message content
const content = (
{userFacingName}(
{toolUseConfirm.tool.renderToolUseMessage(
toolUseConfirm.input as never,
{ theme, verbose },
)}
)
)
return (
)
}