import React from 'react'; import type { PendingPermissionRequest } from '../types'; import { buildClaudeToolPermissionEntry, formatToolInputForDisplay } from '../utils/chatPermissions'; import { getClaudeSettings } from '../utils/chatStorage'; interface PermissionRequestsBannerProps { pendingPermissionRequests: PendingPermissionRequest[]; handlePermissionDecision: ( requestIds: string | string[], decision: { allow?: boolean; message?: string; rememberEntry?: string | null; updatedInput?: unknown }, ) => void; handleGrantToolPermission: (suggestion: { entry: string; toolName: string }) => { success: boolean }; } export default function PermissionRequestsBanner({ pendingPermissionRequests, handlePermissionDecision, handleGrantToolPermission, }: PermissionRequestsBannerProps) { if (!pendingPermissionRequests.length) { return null; } return (
{pendingPermissionRequests.map((request) => { const rawInput = formatToolInputForDisplay(request.input); const permissionEntry = buildClaudeToolPermissionEntry(request.toolName, rawInput); const settings = getClaudeSettings(); const alreadyAllowed = permissionEntry ? settings.allowedTools.includes(permissionEntry) : false; const rememberLabel = alreadyAllowed ? 'Allow (saved)' : 'Allow & remember'; const matchingRequestIds = permissionEntry ? pendingPermissionRequests .filter( (item) => buildClaudeToolPermissionEntry(item.toolName, formatToolInputForDisplay(item.input)) === permissionEntry, ) .map((item) => item.requestId) : [request.requestId]; return (
Permission required
Tool: {request.toolName}
{permissionEntry && (
Allow rule: {permissionEntry}
)}
{rawInput && (
View tool input
                  {rawInput}
                
)}
); })}
); }