重构 Agent 聊天,支持分支管理与消息克隆

This commit is contained in:
2026-04-30 13:05:45 +08:00
parent e5ca9e24aa
commit 36d1a8d6ea
20 changed files with 1722 additions and 586 deletions
+23 -2
View File
@@ -1,4 +1,4 @@
import type { PersistedChatState } from "./GlobalChatbox.types";
import type { BranchGroup, Message, PersistedChatState } from "./GlobalChatbox.types";
export const createId = () =>
`${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
@@ -42,7 +42,11 @@ export const getInitialChatState = (): PersistedChatState => {
window.localStorage.removeItem(CHAT_STORAGE_KEY);
return { messages: [], sessionId: undefined };
}
return { messages: parsed.messages, sessionId: parsed.sessionId };
return {
messages: Array.isArray(parsed.messages) ? parsed.messages : [],
sessionId: parsed.sessionId,
branchGroups: Array.isArray(parsed.branchGroups) ? parsed.branchGroups : [],
};
} catch (error) {
console.error(
"[GlobalChatbox] Failed to read persisted chat state:",
@@ -52,3 +56,20 @@ export const getInitialChatState = (): PersistedChatState => {
return { messages: [], sessionId: undefined };
}
};
export const cloneMessage = (message: Message): Message => ({
...message,
progress: message.progress ? [...message.progress] : undefined,
artifacts: message.artifacts ? [...message.artifacts] : undefined,
});
export const cloneMessages = (messages: Message[]) => messages.map(cloneMessage);
export const cloneBranchGroups = (branchGroups: BranchGroup[]) =>
branchGroups.map((group) => ({
...group,
branches: group.branches.map((branch) => ({
...branch,
messages: cloneMessages(branch.messages),
})),
}));