重构 Agent 聊天,支持分支管理与消息克隆
This commit is contained in:
@@ -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),
|
||||
})),
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user