diff --git a/web/src/app/(main)/function/findings/detail/page.tsx b/web/src/app/(main)/function/findings/detail/page.tsx index afeeffe..5aa9db9 100644 --- a/web/src/app/(main)/function/findings/detail/page.tsx +++ b/web/src/app/(main)/function/findings/detail/page.tsx @@ -12,6 +12,7 @@ import { CopyButton } from "@/components/copy-button"; import { FindingRetestPanel } from "@/components/finding-retest-panel"; import { FindingTrafficPanel } from "@/components/finding-traffic-panel"; import { Markdown } from "@/components/markdown"; +import { SideQuestionButton, SideQuestionWorkspace } from "@/components/side-question-workspace"; import { StatusBadge } from "@/components/status-badge"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { Badge } from "@/components/ui/badge"; @@ -21,6 +22,7 @@ import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger } from "@ import { Separator } from "@/components/ui/separator"; import { SidebarTrigger } from "@/components/ui/sidebar"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { useSideQuestions } from "@/hooks/use-side-questions"; import { api } from "@/lib/api"; import { statusMeta } from "@/lib/status"; import type { Finding, FindingStatus, Severity } from "@/lib/types"; @@ -62,6 +64,7 @@ function FindingDetailInner() { const [finding, setFinding] = React.useState(null); const [loaded, setLoaded] = React.useState(false); const [tab, setTab] = React.useState("overview"); + const side = useSideQuestions(finding?.task_id ? `/api/tasks/${finding.task_id}/chat` : null); const load = React.useCallback(() => { if (!id) { @@ -130,7 +133,13 @@ function FindingDetailInner() { const title = finding.name || finding.vulnclass || "未分类"; return ( - + + {/* Sticky header */}
@@ -157,6 +166,7 @@ function FindingDetailInner() { + {finding.inherited && finding.source_task_id && ( 来源任务 #{finding.source_task_id} · 只读 )} @@ -347,7 +357,8 @@ function FindingDetailInner() {
- + + ); } diff --git a/web/src/components/side-question-workspace.tsx b/web/src/components/side-question-workspace.tsx index 5034c2a..f59e814 100644 --- a/web/src/components/side-question-workspace.tsx +++ b/web/src/components/side-question-workspace.tsx @@ -37,12 +37,12 @@ const preparationLabels = { answering: "正在回答…", }; -export function SideQuestionButton({ side }: { side: SideQuestions }) { +export function SideQuestionButton({ side, label = "旁路提问" }: { side: SideQuestions; label?: string }) { if (!side.enabled) return null; return ( - ); }