fix(chat): remove regenerate action
Build Push and Deploy / docker-image (push) Successful in 1m7s
Build Push and Deploy / deploy-fallback-log (push) Has been skipped

This commit is contained in:
2026-06-08 19:33:06 +08:00
parent 36cdb1df8d
commit e5f13c3d46
9 changed files with 0 additions and 149 deletions
@@ -359,84 +359,6 @@ describe("useAgentChatSession actions", () => {
);
});
it("asks the backend to undo the previous user turn before regenerating", async () => {
listChatSessions.mockResolvedValue([]);
const { result } = renderHook(() =>
useAgentChatSession({
projectId: "project-1",
onToolCall: jest.fn(),
}),
);
await waitFor(() => expect(result.current.isHydrating).toBe(false));
await act(async () => {
await result.current.sendPrompt("重新分析压力异常");
});
const assistantMessageId = result.current.messages[1]?.id ?? "";
await act(async () => {
await result.current.regenerate(assistantMessageId);
});
expect(streamAgentChat).toHaveBeenNthCalledWith(
2,
expect.objectContaining({
message: "重新分析压力异常",
regenerateFromMessageIndex: 0,
}),
);
});
it("replaces the current chain when regenerating a middle assistant message", async () => {
listChatSessions.mockResolvedValue([]);
const { result } = renderHook(() =>
useAgentChatSession({
projectId: "project-1",
onToolCall: jest.fn(),
}),
);
await waitFor(() => expect(result.current.isHydrating).toBe(false));
await act(async () => {
await result.current.sendPrompt("第一轮");
});
await act(async () => {
await result.current.sendPrompt("第二轮");
});
const firstAssistantMessageId = result.current.messages[1]?.id ?? "";
await act(async () => {
await result.current.regenerate(firstAssistantMessageId);
});
expect(result.current.messages).toHaveLength(2);
expect(result.current.messages[0]).toEqual(
expect.objectContaining({
role: "user",
content: "第一轮",
}),
);
expect(result.current.messages[1]).toEqual(
expect.objectContaining({
role: "assistant",
content: "",
}),
);
expect(streamAgentChat).toHaveBeenNthCalledWith(
3,
expect.objectContaining({
message: "第一轮",
regenerateFromMessageIndex: 0,
}),
);
});
it("forks a copied conversation from an assistant message", async () => {
listChatSessions.mockResolvedValue([]);
@@ -407,7 +407,6 @@ export const useAgentChatSession = ({
async ({
prompt: rawPrompt,
sessionIdOverride,
regenerateFromMessageIndex,
preparedMessages,
userMessage,
assistantMessage,
@@ -442,7 +441,6 @@ export const useAgentChatSession = ({
sessionId: sessionIdOverride ?? sessionIdRef.current,
model: getModel?.(),
approvalMode: getApprovalMode?.(),
regenerateFromMessageIndex,
signal: controller.signal,
onEvent: (event) =>
applyStreamEvent(event, {
@@ -893,43 +891,6 @@ export const useAgentChatSession = ({
[isHydrating, messages],
);
const regenerate = useCallback(async (messageId: string) => {
if (isHydrating || isStreaming || messages.length === 0) return;
const targetAssistantIndex = messages.findIndex(
(message) => message.id === messageId && message.role === "assistant",
);
if (targetAssistantIndex < 0) {
return;
}
let targetUserIndex = targetAssistantIndex - 1;
while (targetUserIndex >= 0 && messages[targetUserIndex].role !== "user") {
targetUserIndex--;
}
if (targetUserIndex < 0) return;
const targetUser = messages[targetUserIndex];
const targetUserContent = targetUser.content;
const nextMessages = cloneMessages(messages.slice(0, targetUserIndex));
const nextUserMessage = createUserMessage(targetUserContent);
const nextAssistantMessage = createAssistantMessage();
setMessages(nextMessages);
await runPrompt({
prompt: targetUserContent,
regenerateFromMessageIndex: targetUserIndex,
preparedMessages: [
...nextMessages,
nextUserMessage,
nextAssistantMessage,
],
userMessage: nextUserMessage,
assistantMessage: nextAssistantMessage,
});
}, [isHydrating, isStreaming, messages, runPrompt]);
const createBranch = useCallback(
async (messageId: string) => {
if (isHydrating || isStreaming) return;
@@ -975,7 +936,6 @@ export const useAgentChatSession = ({
sessionTitle,
sessionId,
sendPrompt,
regenerate,
createBranch,
abort,
replyPermission,
@@ -18,7 +18,6 @@ export type UseAgentChatSessionOptions = {
export type PromptRunOptions = {
prompt: string;
sessionIdOverride?: string;
regenerateFromMessageIndex?: number;
preparedMessages?: Message[];
userMessage?: Message;
assistantMessage?: Message;