|
|
@@ -672,19 +672,27 @@
|
|
|
|
|
|
const handleAskUserSubmit = async (answers: string[]) => {
|
|
|
const found = await findPendingApprovalTask();
|
|
|
- if (!found) return;
|
|
|
|
|
|
- const { approval } = found;
|
|
|
- const sessionId = approval.sessionId;
|
|
|
- if (!sessionId) return;
|
|
|
+ // 优先从 taskPendingApprovals 获取,若被清除则从消息的 pendingApprovalData 回退
|
|
|
+ let sessionId = found?.approval.sessionId;
|
|
|
+ let threadId = found?.approval.threadId;
|
|
|
+ let taskId = found?.taskId;
|
|
|
|
|
|
- const task = taskList.value.find((t) => t.sessionId === sessionId);
|
|
|
+ // 查找当前任务中处于审批状态的消息
|
|
|
+ const task = taskId ? taskList.value.find((t) => t.id === taskId) : taskList.value.find((t) => t.id === currentTaskId.value);
|
|
|
if (!task) return;
|
|
|
|
|
|
const taskMessages = task.messages;
|
|
|
const lastMsg = taskMessages[taskMessages.length - 1];
|
|
|
if (!lastMsg || !lastMsg.isPendingApproval) return;
|
|
|
|
|
|
+ // 若 taskPendingApprovals 已被清除,从消息的 pendingApprovalData 回退取值
|
|
|
+ if (!sessionId && lastMsg.pendingApprovalData) {
|
|
|
+ sessionId = lastMsg.pendingApprovalData.sessionId;
|
|
|
+ threadId = lastMsg.pendingApprovalData.threadId;
|
|
|
+ }
|
|
|
+ if (!sessionId) return;
|
|
|
+
|
|
|
lastMsg.isPendingApproval = false;
|
|
|
lastMsg.pendingApprovalData = undefined;
|
|
|
lastMsg.isLoading = true;
|
|
|
@@ -707,7 +715,7 @@
|
|
|
const result = await chatResumeStream(
|
|
|
{
|
|
|
session_id: sessionId,
|
|
|
- thread_id: approval.threadId || undefined,
|
|
|
+ thread_id: threadId || undefined,
|
|
|
status: 'answered',
|
|
|
answers,
|
|
|
signal: controller.signal,
|
|
|
@@ -740,7 +748,10 @@
|
|
|
} finally {
|
|
|
setTaskAbortController(task.id, null);
|
|
|
task.isStreaming = false;
|
|
|
- clearTaskPendingApproval(task.id);
|
|
|
+ // 仅当消息不再处于审批状态时才清除(避免 resume 流返回新 interrupt 被误清)
|
|
|
+ if (!lastMsg.isPendingApproval) {
|
|
|
+ clearTaskPendingApproval(task.id);
|
|
|
+ }
|
|
|
if (currentTaskId.value === task.id) {
|
|
|
await scrollToBottom();
|
|
|
}
|
|
|
@@ -749,19 +760,26 @@
|
|
|
|
|
|
const handleAskUserCancel = async () => {
|
|
|
const found = await findPendingApprovalTask();
|
|
|
- if (!found) return;
|
|
|
|
|
|
- const { approval } = found;
|
|
|
- const sessionId = approval.sessionId;
|
|
|
- if (!sessionId) return;
|
|
|
+ // 优先从 taskPendingApprovals 获取,若被清除则从消息的 pendingApprovalData 回退
|
|
|
+ let sessionId = found?.approval.sessionId;
|
|
|
+ let threadId = found?.approval.threadId;
|
|
|
|
|
|
- const task = taskList.value.find((t) => t.sessionId === sessionId);
|
|
|
+ // 查找当前任务中处于审批状态的消息
|
|
|
+ const task = found?.taskId ? taskList.value.find((t) => t.id === found.taskId) : taskList.value.find((t) => t.id === currentTaskId.value);
|
|
|
if (!task) return;
|
|
|
|
|
|
const taskMessages = task.messages;
|
|
|
const lastMsg = taskMessages[taskMessages.length - 1];
|
|
|
if (!lastMsg || !lastMsg.isPendingApproval) return;
|
|
|
|
|
|
+ // 若 taskPendingApprovals 已被清除,从消息的 pendingApprovalData 回退取值
|
|
|
+ if (!sessionId && lastMsg.pendingApprovalData) {
|
|
|
+ sessionId = lastMsg.pendingApprovalData.sessionId;
|
|
|
+ threadId = lastMsg.pendingApprovalData.threadId;
|
|
|
+ }
|
|
|
+ if (!sessionId) return;
|
|
|
+
|
|
|
// 冻结累计耗时到 durationMs,避免取消后计时消失
|
|
|
lastMsg.durationMs = (lastMsg.baseDurationMs || 0) + (lastMsg.generateStartTime ? Date.now() - lastMsg.generateStartTime : 0);
|
|
|
lastMsg.isPendingApproval = false;
|
|
|
@@ -776,7 +794,7 @@
|
|
|
await chatResumeStream(
|
|
|
{
|
|
|
session_id: sessionId,
|
|
|
- thread_id: approval.threadId || undefined,
|
|
|
+ thread_id: threadId || undefined,
|
|
|
status: 'cancelled',
|
|
|
},
|
|
|
() => {}
|