diff --git a/src/components/layout/openclaw-doctor-banner.tsx b/src/components/layout/openclaw-doctor-banner.tsx index 29ac1f9..bc88ccf 100644 --- a/src/components/layout/openclaw-doctor-banner.tsx +++ b/src/components/layout/openclaw-doctor-banner.tsx @@ -2,6 +2,7 @@ import { useEffect, useState } from 'react' import { Button } from '@/components/ui/button' +import { useMissionControl } from '@/store' interface OpenClawDoctorStatus { level: 'healthy' | 'warning' | 'error' @@ -23,7 +24,8 @@ type BannerState = 'idle' | 'fixing' | 'success' | 'error' export function OpenClawDoctorBanner() { const [doctor, setDoctor] = useState(null) const [loading, setLoading] = useState(true) - const [dismissed, setDismissed] = useState(false) + const doctorDismissedAt = useMissionControl(s => s.doctorDismissedAt) + const dismissDoctor = useMissionControl(s => s.dismissDoctor) const [state, setState] = useState('idle') const [errorMsg, setErrorMsg] = useState(null) const [showDetails, setShowDetails] = useState(false) @@ -38,7 +40,6 @@ export function OpenClawDoctorBanner() { } const data = await res.json() setDoctor(data) - setDismissed(false) } catch { setDoctor(null) } finally { @@ -95,6 +96,9 @@ export function OpenClawDoctorBanner() { } } + const TWENTY_FOUR_HOURS = 24 * 60 * 60 * 1000 + const dismissed = doctorDismissedAt != null && (Date.now() - doctorDismissedAt) < TWENTY_FOUR_HOURS + if (loading || dismissed || !doctor || doctor.healthy) return null const tone = @@ -176,7 +180,7 @@ export function OpenClawDoctorBanner() {