'use client'; import React from 'react'; import type { ChatMessage, ProcessArtifact, ProcessEvent, ProcessRun } from '@/types'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { MessageList } from '@/components/chat-workbench/MessageList'; import { ArtifactSidebar } from '@/components/chat-workbench/ArtifactSidebar'; export function ChatWorkbench({ messages, isThinking, messagesEndRef, messageViewportRef, processRuns, processEvents, processArtifacts, selectedRunId, onSelectRun, onCancelRun, }: { messages: ChatMessage[]; isThinking: boolean; messagesEndRef: React.RefObject; messageViewportRef: React.RefObject; processRuns: ProcessRun[]; processEvents: ProcessEvent[]; processArtifacts: ProcessArtifact[]; selectedRunId: string | null; onSelectRun: (runId: string) => void; onCancelRun: (runId: string) => void; }) { const selectedRun = selectedRunId ? processRuns.find((item) => item.run_id === selectedRunId) || null : null; const selectedRunEvents = selectedRun ? processEvents.filter((item) => item.run_id === selectedRun.run_id) : []; const selectedRunArtifacts = selectedRun ? processArtifacts.filter((item) => item.run_id === selectedRun.run_id) : []; const hasResultsPanel = Boolean( selectedRun && ( selectedRun.summary || selectedRunEvents.length > 0 || selectedRunArtifacts.length > 0 ) ); const desktopColumns = hasResultsPanel ? 'lg:grid-cols-[minmax(0,1fr)_360px]' : 'lg:grid-cols-[minmax(0,1fr)]'; return ( <>
{hasResultsPanel && (
)}
{!hasResultsPanel ? ( ) : (
聊天 {hasResultsPanel && 结果}
{hasResultsPanel && ( )}
)}
); }