返回 JoyAI-Echo
ThreadMessages.tsx
根目录 / echo_longvideo / Director_Agent / webui / src / components / thread / ThreadMessages.tsx
1 import { MessageBubble } from "@/components/MessageBubble";
2 import type { NextContinuousControl } from "@/components/thread/MemoryReviewCard";
3 import type {
4 MemoryReview,
5 MemoryWorkspaceAsset,
6 ShotMemoryAssetCreate,
7 UIMessage,
8 } from "@/lib/types";
9
10 interface ThreadMessagesProps {
11 messages: UIMessage[];
12 onAnswerQuestion?: (messageId: string, cardId: string, value: string) => void;
13 questionsReady?: boolean;
14 onMemoryReviewAction?: (
15 review: MemoryReview,
16 action: "approve" | "reselect" | "manual_select" | "select_mode",
17 memoryId?: string,
18 timestampSec?: number,
19 selectionMode?: "manual" | "vlm",
20 retainedMemoryIds?: string[],
21 ) => void | Promise<void>;
22 memoryAssets?: MemoryWorkspaceAsset[];
23 onCreateMemoryAsset?: (
24 shotId: number,
25 asset: ShotMemoryAssetCreate,
26 ) => Promise<void>;
27 getNextContinuous?: (
28 review: MemoryReview,
29 ) => NextContinuousControl | null;
30 }
31
32 export function ThreadMessages({
33 messages,
34 onAnswerQuestion,
35 questionsReady = true,
36 onMemoryReviewAction,
37 memoryAssets = [],
38 onCreateMemoryAsset,
39 getNextContinuous,
40 }: ThreadMessagesProps) {
41 return (
42 <div className="flex w-full flex-col gap-5">
43 {messages.map((message) => (
44 <MessageBubble
45 key={message.id}
46 message={message}
47 questionsReady={questionsReady}
48 onAnswerQuestion={onAnswerQuestion}
49 onMemoryReviewAction={onMemoryReviewAction}
50 memoryAssets={memoryAssets}
51 onCreateMemoryAsset={onCreateMemoryAsset}
52 getNextContinuous={getNextContinuous}
53 />
54 ))}
55 </div>
56 );
57 }
58
58 lines Plain Text