diff --git a/web/client/src/components/chat/ChatView.tsx b/web/client/src/components/chat/ChatView.tsx index 8321fc0..e46c010 100644 --- a/web/client/src/components/chat/ChatView.tsx +++ b/web/client/src/components/chat/ChatView.tsx @@ -1,13 +1,16 @@ -import { useEffect } from 'react'; +import { useEffect, useState } from 'react'; import { useAppStore } from '@/store'; import { useChat } from '@/hooks/useChat'; import { ChatMessage } from './ChatMessage'; import { ChatInput } from './ChatInput'; import { ScrollArea } from '@/components/ui/scroll-area'; +import { Button } from '@/components/ui/button'; +import { RefreshCw } from 'lucide-react'; export function ChatView() { - const { activeConversationId, conversations, setConversations } = useAppStore(); + const { activeConversationId, conversations, setConversations, selectedAccountId } = useAppStore(); const { messages, connected, send, createConversation } = useChat(activeConversationId); + const [manifestPath, setManifestPath] = useState(null); useEffect(() => { fetch('/api/pipeline/conversations') @@ -16,8 +19,19 @@ export function ChatView() { .catch(() => {}); }, [messages]); + // Check for associated manifest in messages + useEffect(() => { + const toolMsgs = messages.filter((m) => m.role === 'tool'); + if (toolMsgs.length > 0) { + try { + const lastTool = JSON.parse(toolMsgs[toolMsgs.length - 1].content); + if (lastTool.manifest) setManifestPath(lastTool.manifest); + } catch {} + } + }, [messages]); + const handleNewConversation = () => { - createConversation('新对话'); + createConversation('新对话', selectedAccountId || undefined); setTimeout(() => { fetch('/api/pipeline/conversations') .then((r) => r.json()) @@ -25,6 +39,19 @@ export function ChatView() { }, 300); }; + const handleResume = async () => { + if (!manifestPath) return; + try { + await fetch('/api/pipeline/resume', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ manifest: manifestPath }), + }); + } catch (e) { + console.error('Resume failed:', e); + } + }; + if (!activeConversationId) { return (
@@ -41,9 +68,17 @@ export function ChatView() { return (
-
-
- {connected ? '已连接' : '连接中...'} +
+
+
+ {connected ? '已连接' : '连接中...'} +
+ {manifestPath && ( + + )}
{messages.map((msg) => (