import React, { memo } from 'react'; import { Icon } from '@/components/icon/Icon'; import { BusyDots } from '@/components/chat/message/parts/BusyDots'; import { Button } from '@/components/ui/button'; import { useI18n } from '@/lib/i18n'; import { getRuntimeKey } from '@/lib/runtime-switch'; import { useAutoReviewStore } from '@/stores/useAutoReviewStore'; import { useUIStore } from '@/stores/useUIStore'; import { useSessionUIStore } from '@/sync/session-ui-store'; export const AutoReviewBanner = memo(() => { const { t } = useI18n(); const currentSessionId = useSessionUIStore((state) => state.currentSessionId); const run = useAutoReviewStore(React.useCallback((state) => { if (!currentSessionId) return null; const run = state.runsByOriginalSessionID[currentSessionId] ?? null; return run?.runtimeKey === getRuntimeKey() ? run : null; }, [currentSessionId])); const stopRun = useAutoReviewStore((state) => state.stopRun); const openContextPanelTab = useUIStore((state) => state.openContextPanelTab); if (!currentSessionId || !run || run.status !== 'running') { return null; } const statusLabel = run.phase === 'waiting_for_reviewer' ? t('chat.autoReview.status.waitingForReviewer') : t('chat.autoReview.status.waitingForImplementer'); const handleOpenReviewSession = () => { openContextPanelTab(run.directory, { mode: 'chat', dedupeKey: `session:${run.reviewSessionID}`, label: t('chat.autoReview.reviewSessionLabel'), readOnly: true, }); }; return (