import { useCallback, useEffect } from 'react'; import { fetchAccessibilityStatus, fetchAccessibilityVisionRecent, runCaptureTest, } from '../../store/accessibilitySlice'; import { useAppDispatch, useAppSelector } from '../../store/hooks'; const formatBytes = (bytes: number | null | undefined): string => { if (bytes == null) return '-'; if (bytes < 1024) return `${bytes} B`; if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; return `${(bytes / (1024 * 1024)).toFixed(2)} MB`; }; const ScreenIntelligenceDebugPanel = () => { const dispatch = useAppDispatch(); const { status, captureTestResult, isCaptureTestRunning, recentVisionSummaries, lastError } = useAppSelector(state => state.accessibility); useEffect(() => { void dispatch(fetchAccessibilityStatus()); void dispatch(fetchAccessibilityVisionRecent(5)); }, [dispatch]); const handleCaptureTest = useCallback(() => { void dispatch(runCaptureTest()); }, [dispatch]); const handleRefreshStatus = useCallback(() => { void dispatch(fetchAccessibilityStatus()); void dispatch(fetchAccessibilityVisionRecent(5)); }, [dispatch]); const permissions = status?.permissions; const session = status?.session; return (

Debug & Diagnostics

{/* Permissions */}

Permissions

{/* Session Status */}

Session

Active {session?.active ? 'Yes' : 'No'}
Frames {session?.frames_in_memory ?? 0}
Vision State {session?.vision_state ?? 'idle'}
Vision Queue {session?.vision_queue_depth ?? 0}
{session?.last_context && (
Last App {session.last_context}
)}
{/* Capture Test */}

Capture Test

{captureTestResult && (
Status {captureTestResult.ok ? 'Success' : 'Failed'}
Mode {captureTestResult.capture_mode}
Time {captureTestResult.timing_ms}ms
{captureTestResult.bytes_estimate != null && (
Size {formatBytes(captureTestResult.bytes_estimate)}
)} {captureTestResult.context && (
App {captureTestResult.context.app_name ?? 'Unknown'}
)} {captureTestResult.context?.bounds_width != null && (
Bounds {captureTestResult.context.bounds_width}x {captureTestResult.context.bounds_height} at ( {captureTestResult.context.bounds_x},{captureTestResult.context.bounds_y})
)}
{captureTestResult.error && (
{captureTestResult.error}
)} {captureTestResult.image_ref && (
Capture test result
)}
)}
{/* Recent Vision Summaries */} {recentVisionSummaries.length > 0 && (

Recent Vision Summaries

{recentVisionSummaries.map(summary => (
{summary.app_name ?? 'Unknown'} {new Date(summary.captured_at_ms).toLocaleTimeString()} ·{' '} {(summary.confidence * 100).toFixed(0)}%
{summary.actionable_notes}
))}
)} {/* Error Display */} {lastError && (
{lastError}
)}
); }; const PermissionDot = ({ label, value }: { label: string; value?: string }) => { const color = value === 'granted' ? 'bg-green-500' : value === 'denied' ? 'bg-red-500' : 'bg-stone-600'; return (
{label}
); }; export default ScreenIntelligenceDebugPanel;