import React from 'react'; import type { PendingPermissionRequest } from '../../types/types'; import { buildClaudeToolPermissionEntry, formatToolInputForDisplay } from '../../utils/chatPermissions'; import { getClaudeSettings } from '../../utils/chatStorage'; import { getPermissionPanel, registerPermissionPanel } from '../../tools/configs/permissionPanelRegistry'; import { AskUserQuestionPanel } from '../../tools/components/InteractiveRenderers'; registerPermissionPanel('AskUserQuestion', AskUserQuestionPanel); 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 CustomPanel = getPermissionPanel(request.toolName); if (CustomPanel) { return ( ); } 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}
                
)}
); })}
); }