fix: sync subtask list and agent canvas task status (#1131)

Co-authored-by: Wendong-Fan <w3ndong.fan@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
Dream 2026-02-03 17:30:43 -05:00 committed by GitHub
parent efa991a220
commit 5b5e1f3fad
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 37 additions and 22 deletions

View file

@ -224,7 +224,7 @@ export default function Home() {
}
done={
activeAgent?.tasks?.filter(
(task) => task.status === TaskStatus.COMPLETED
(task) => task.status === TaskStatus.COMPLETED && !task.reAssignTo
).length || 0
}
progress={
@ -233,17 +233,23 @@ export default function Home() {
task.status !== TaskStatus.FAILED &&
task.status !== TaskStatus.COMPLETED &&
task.status !== TaskStatus.SKIPPED &&
task.status !== TaskStatus.WAITING
task.status !== TaskStatus.WAITING &&
task.status !== TaskStatus.EMPTY &&
!task.reAssignTo
).length || 0
}
failed={
activeAgent?.tasks?.filter((task) => task.status === TaskStatus.FAILED)
.length || 0
activeAgent?.tasks?.filter(
(task) => task.status === TaskStatus.FAILED && !task.reAssignTo
).length || 0
}
skipped={
activeAgent?.tasks?.filter(
(task) =>
task.status === TaskStatus.SKIPPED || task.status === TaskStatus.WAITING
(task.status === TaskStatus.SKIPPED ||
task.status === TaskStatus.WAITING ||
task.status === TaskStatus.EMPTY) &&
!task.reAssignTo
).length || 0
}
/>

View file

@ -89,13 +89,16 @@ export function TaskCard({
switch (selectedState) {
case "done":
return task.status === TaskStatus.COMPLETED && !task.reAssignTo;
case "reassigned":
return !!task.reAssignTo;
case "ongoing":
return (
task.status !== TaskStatus.FAILED &&
task.status !== TaskStatus.COMPLETED &&
task.status !== TaskStatus.SKIPPED &&
task.status !== TaskStatus.WAITING &&
task.status !== TaskStatus.EMPTY
task.status !== TaskStatus.EMPTY &&
!task.reAssignTo
);
case "pending":
return (
@ -105,7 +108,7 @@ export function TaskCard({
!task.reAssignTo
);
case "failed":
return task.status === TaskStatus.FAILED;
return task.status === TaskStatus.FAILED && !task.reAssignTo;
default:
return false;
}
@ -244,8 +247,12 @@ export function TaskCard({
<TaskState
all={taskRunning?.length || 0}
done={
taskRunning?.filter((task) => task.status === TaskStatus.COMPLETED)
.length || 0
taskRunning?.filter(
(task) => task.status === TaskStatus.COMPLETED && !task.reAssignTo
).length || 0
}
reAssignTo={
taskRunning?.filter((task) => task.reAssignTo)?.length || 0
}
progress={
taskRunning?.filter(
@ -254,20 +261,23 @@ export function TaskCard({
task.status !== TaskStatus.FAILED &&
task.status !== TaskStatus.SKIPPED &&
task.status !== TaskStatus.WAITING &&
task.status !== TaskStatus.EMPTY
task.status !== TaskStatus.EMPTY &&
!task.reAssignTo
).length || 0
}
skipped={
taskRunning?.filter(
(task) =>
task.status === TaskStatus.SKIPPED ||
task.status === TaskStatus.WAITING ||
task.status === TaskStatus.EMPTY
(task.status === TaskStatus.SKIPPED ||
task.status === TaskStatus.WAITING ||
task.status === TaskStatus.EMPTY) &&
!task.reAssignTo
).length || 0
}
failed={
taskRunning?.filter((task) => task.status === TaskStatus.FAILED)
.length || 0
taskRunning?.filter(
(task) => task.status === TaskStatus.FAILED && !task.reAssignTo
).length || 0
}
forceVisible={true}
selectedState={selectedState}

View file

@ -105,7 +105,7 @@ export function Node({ id, data }: NodeProps) {
!task.reAssignTo
);
case "failed":
return task.status === TaskStatus.FAILED;
return task.status === TaskStatus.FAILED && !task.reAssignTo;
default:
return false;
}
@ -579,7 +579,7 @@ export function Node({ id, data }: NodeProps) {
}
failed={
data.agent?.tasks?.filter(
(task) => task.status === TaskStatus.FAILED
(task) => task.status === TaskStatus.FAILED && !task.reAssignTo
).length || 0
}
selectedState={selectedState}

View file

@ -1398,11 +1398,10 @@ const chatStore = (initial?: Partial<ChatStore>) =>
setTaskAssigning(currentTaskId, [...taskAssigning]);
}
}
// const taskIndex = taskRunning.findIndex((task) => task.id === process_task_id);
// if (taskIndex !== -1) {
// taskRunning![taskIndex].agent!.status = "completed";
// taskRunning![taskIndex]!.status = "completed";
// }
const taskIndex = taskRunning.findIndex((task) => task.id === process_task_id);
if (taskIndex !== -1 && taskRunning[taskIndex].agent) {
taskRunning[taskIndex].agent!.status = 'completed';
}
if (!type && historyId) {
const obj = {