import { useParams } from 'common' import { EyeOff, Globe } from 'lucide-react' import Link from 'next/link' import { Button, Tooltip, TooltipContent, TooltipTrigger } from 'ui' import type { AdvisorSignalItem } from './AdvisorPanel.types' import { useAdvisorSignals } from './useAdvisorSignals' import { SIDEBAR_KEYS } from '@/components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider' import { AiAssistantDropdown } from '@/components/ui/AiAssistantDropdown' import { InlineLink } from '@/components/ui/InlineLink' import { useAdvisorStateSnapshot } from '@/state/advisor-state' import { useAiAssistantStateSnapshot } from '@/state/ai-assistant-state' import { useSidebarManagerSnapshot } from '@/state/sidebar-manager-state' interface AdvisorSignalDetailProps { item: AdvisorSignalItem } const buildSignalAssistantPrompt = (item: AdvisorSignalItem) => { return [ `I'm reviewing an Advisor signal for a banned IP address: ${item.sourceData.ip}.`, item.description ?? item.summary, 'Help me assess whether this ban should remain in place, what I should investigate before removing it, and what the safest next step is.', 'Please include when it is reasonable to dismiss this signal versus remove the ban.', ].join('\n\n') } export const AdvisorSignalDetail = ({ item }: AdvisorSignalDetailProps) => { const { ref: projectRef } = useParams() const snap = useAiAssistantStateSnapshot() const { openSidebar } = useSidebarManagerSnapshot() const { setSelectedItem } = useAdvisorStateSnapshot() const { dismissSignal } = useAdvisorSignals({ projectRef }) const issueDescription = ( <> The IP address {item.sourceData.ip} is temporarily blocked because of suspicious traffic or repeated failed password attempts. If this block is expected, you can dismiss this signal or remove the ban. ) const handleAskAssistant = () => { openSidebar(SIDEBAR_KEYS.AI_ASSISTANT) snap.newChat({ name: `Review ${item.title.toLowerCase()}`, initialInput: buildSignalAssistantPrompt(item), }) } const onDismissSignal = () => { dismissSignal(item.dismissalKey) setSelectedItem(undefined) } return (

Entity

{item.sourceData.ip}
IP address currently blocked by network bans

Issue

{issueDescription}{' '} {item.docsUrl !== undefined && ( <> Learn more. )}

Resolve

buildSignalAssistantPrompt(item)} onOpenAssistant={handleAskAssistant} telemetrySource="advisor_signal_detail" /> {item.actions.map((action) => ( ))}
) }