fix: /retry 丢失视频帧和文件附件,重试时完整恢复

This commit is contained in:
thzxx
2026-06-20 14:58:10 +08:00
parent 072fb10df0
commit 6099c2ad21
+13 -2
View File
@@ -482,7 +482,7 @@ async function handleRetry(): Promise<void> {
const fileParts = buildFileContentParts(m._fileContents); const fileParts = buildFileContentParts(m._fileContents);
content = content ? content + '\n\n---\n' + fileParts.join('\n\n---\n') : fileParts.join('\n\n---\n'); content = content ? content + '\n\n---\n' + fileParts.join('\n\n---\n') : fileParts.join('\n\n---\n');
} }
return { role: m.role, content, ...(m.images?.length && { images: m.images }) }; return { role: m.role, content, ...(m.images?.length && { images: m.images }), ...((m as any)._videoFrames?.length && { images: [...(m.images || []), ...(m as any)._videoFrames.map((f: any) => f.base64)] }) };
}); });
let retryMonitor: ReturnType<typeof setInterval> | null = null; let retryMonitor: ReturnType<typeof setInterval> | null = null;
@@ -492,13 +492,24 @@ async function handleRetry(): Promise<void> {
let retryThinkContent = ''; let retryThinkContent = '';
let retryIterations = 0; let retryIterations = 0;
// 构建重试用的完整内容和 images(含文件内容和视频帧)
let retryUserContent = userMsg.content || '';
const retryImages: string[] = [...(userMsg.images || [])];
if ((userMsg as any)._fileContents?.length) {
const fileParts = buildFileContentParts((userMsg as any)._fileContents);
retryUserContent = retryUserContent ? retryUserContent + '\n\n---\n' + fileParts.join('\n\n---\n') : fileParts.join('\n\n---\n');
}
if ((userMsg as any)._videoFrames?.length) {
retryImages.push(...(userMsg as any)._videoFrames.map((f: any) => f.base64));
}
// ── 监控定时器 ── // ── 监控定时器 ──
retryMonitor = setInterval(() => { retryMonitor = setInterval(() => {
if (!hasActiveCards()) { if (!hasActiveCards()) {
showWorkingHint('⏳ AI 正在处理中...'); showWorkingHint('⏳ AI 正在处理中...');
} }
}, 2000); }, 2000);
await runAgentLoop(userMsg.content || '', userMsg.images || [], historyMessages, { await runAgentLoop(retryUserContent, retryImages, historyMessages, {
onToolCallPrepare: (call) => { onToolCallPrepare: (call) => {
addToolCard({ addToolCard({
name: call.function.name, arguments: call.function.arguments, name: call.function.name, arguments: call.function.arguments,