代码修改

This commit is contained in:
董宏凯 committed 2026-09-05 11:28:25 +08:00
1 parent b80433f091
commit 814a44f0b9
8 files changed
+225 -5

No files matched your search

@@ -1,7 +1,7 @@
import type { Message } from "@langchain/langgraph-sdk";
import type { BaseStream } from "@langchain/langgraph-sdk/react";
import { CheckIcon, PenLineIcon, SendIcon, XIcon } from "lucide-react";
import { useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
import { useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode } from "react";
import { useStickToBottomContext } from "use-stick-to-bottom";
import {
@@ -137,6 +137,7 @@ export function MessageList({
researchApprovalSlot,
taskReportImportSlot,
businessCardSlot,
speakerShell,
onOpenArtifact,
onDownloadArtifact,
afterDocumentRewriteItems,
@@ -185,6 +186,11 @@ export function MessageList({
* 层定义,MessageList 不感知具体业务字段。
*/
businessCardSlot?: (message: Message) => React.ReactNode;
/**
* 可选说话人壳(报告协作对齐会商第二步):包住 assistant / processing 分组。
* 不传则问答页零变化。
*/
speakerShell?: (messages: Message[], children: ReactNode) => ReactNode;
onOpenArtifact?: (filepath: string) => void;
/** Host override for downloading virtual/session-owned files in a present-files card. */
onDownloadArtifact?: (filepath: string) => void | Promise<void>;
@@ -536,7 +542,7 @@ export function MessageList({
let didRenderRewriteAboveFile = false;
const grouped = groupMessages(messages, (group) => {
if (group.type === "human" || group.type === "assistant") {
return group.messages.map((msg) => {
const items = group.messages.map((msg) => {
// 深度研究的报告摘要由独立 SSE 作业驱动;把它接入既有 assistant 流式状态,
// 便于 Streamdown 在每次 summary_delta 到达时立即更新该普通消息行。
const messageIsLoading =
@@ -582,6 +588,14 @@ export function MessageList({
/>
);
});
if (speakerShell && group.type === "assistant") {
return (
<div key={group.id} className="w-full">
{speakerShell(group.messages, items)}
</div>
);
}
return items;
} else if (group.type === "assistant:clarification") {
const message = group.messages[0];
if (message && hasContent(message)) {
@@ -851,8 +865,8 @@ export function MessageList({
const processingAi = [...group.messages]
.reverse()
.find((message) => message.type === "ai");
return (
<div key={"group-" + group.id} className="w-full">
const processingBody = (
<div className="w-full">
<MessageGroup
messages={group.messages}
isLoading={thread.isLoading}
@@ -866,6 +880,11 @@ export function MessageList({
/>
</div>
);
return (
<div key={"group-" + group.id} className="w-full">
{speakerShell ? speakerShell(group.messages, processingBody) : processingBody}
</div>
);
});
const leftoverRewriteItems = didRenderRewriteAboveFile
? rewriteItemsBelowFile