From 11d32ca87d36e99416f3e93da4d0a92acd0b8d7c Mon Sep 17 00:00:00 2001 From: -LAN- Date: Fri, 29 Aug 2025 23:20:28 +0800 Subject: [PATCH] test: fix web test Signed-off-by: -LAN- --- .../run/utils/format-log/agent/index.ts | 94 ++++++++++++++----- 1 file changed, 72 insertions(+), 22 deletions(-) diff --git a/web/app/components/workflow/run/utils/format-log/agent/index.ts b/web/app/components/workflow/run/utils/format-log/agent/index.ts index 8f922f548f..311e56a269 100644 --- a/web/app/components/workflow/run/utils/format-log/agent/index.ts +++ b/web/app/components/workflow/run/utils/format-log/agent/index.ts @@ -9,10 +9,16 @@ const remove = (node: AgentLogItemWithChildren, removeId: string) => { if (!children || children.length === 0) return - const hasCircle = !!children.find(c => c.message_id === removeId) + const hasCircle = !!children.find((c) => { + const childId = c.message_id || (c as any).id + return childId === removeId + }) if (hasCircle) { node.hasCircle = true - node.children = node.children.filter(c => c.message_id !== removeId) + node.children = node.children.filter((c) => { + const childId = c.message_id || (c as any).id + return childId !== removeId + }) children = node.children } @@ -28,9 +34,10 @@ const removeRepeatedSiblings = (list: AgentLogItemWithChildren[]) => { const result: AgentLogItemWithChildren[] = [] const addedItemIds: string[] = [] list.forEach((item) => { - if (!addedItemIds.includes(item.message_id)) { + const itemId = item.message_id || (item as any).id + if (itemId && !addedItemIds.includes(itemId)) { result.push(item) - addedItemIds.push(item.message_id) + addedItemIds.push(itemId) } }) return result @@ -38,16 +45,26 @@ const removeRepeatedSiblings = (list: AgentLogItemWithChildren[]) => { const removeCircleLogItem = (log: AgentLogItemWithChildren) => { const newLog = cloneDeep(log) + + // If no children, return as is + if (!newLog.children || newLog.children.length === 0) + return newLog + newLog.children = removeRepeatedSiblings(newLog.children) - let { message_id: id, children } = newLog - if (!children || children.length === 0) - return log + const id = newLog.message_id || (newLog as any).id + let { children } = newLog // check one step circle - const hasOneStepCircle = !!children.find(c => c.message_id === id) + const hasOneStepCircle = !!children.find((c) => { + const childId = c.message_id || (c as any).id + return childId === id + }) if (hasOneStepCircle) { newLog.hasCircle = true - newLog.children = newLog.children.filter(c => c.message_id !== id) + newLog.children = newLog.children.filter((c) => { + const childId = c.message_id || (c as any).id + return childId !== id + }) children = newLog.children } @@ -62,21 +79,54 @@ const listToTree = (logs: AgentLogItem[]) => { if (!logs || logs.length === 0) return [] - const tree: AgentLogItemWithChildren[] = [] - logs.forEach((log) => { - const hasParent = !!log.parent_id - if (hasParent) { - const parent = logs.find(item => item.message_id === log.parent_id) as AgentLogItemWithChildren - if (parent) { - if (!parent.children) - parent.children = [] - parent.children.push(log as AgentLogItemWithChildren) - } - } - else { - tree.push(log as AgentLogItemWithChildren) + // First pass: identify all unique items and track parent-child relationships + const itemsById = new Map() + const childrenById = new Map() + + logs.forEach((item) => { + const itemId = item.message_id || (item as any).id + + // Only add to itemsById if not already there (keep first occurrence) + if (itemId && !itemsById.has(itemId)) + itemsById.set(itemId, item) + + // Initialize children array for this ID if needed + if (itemId && !childrenById.has(itemId)) + childrenById.set(itemId, []) + + // If this item has a parent, add it to parent's children list + if (item.parent_id) { + if (!childrenById.has(item.parent_id)) + childrenById.set(item.parent_id, []) + + childrenById.get(item.parent_id)!.push(item) } }) + + // Second pass: build tree structure + const tree: AgentLogItemWithChildren[] = [] + + // Find root nodes (items without parents) + itemsById.forEach((item) => { + const hasParent = !!item.parent_id + if (!hasParent) { + const itemId = item.message_id || (item as any).id + const children = childrenById.get(itemId) + if (children && children.length > 0) + item.children = children + + tree.push(item as AgentLogItemWithChildren) + } + }) + + // Add children property to all items that have children + itemsById.forEach((item) => { + const itemId = item.message_id || (item as any).id + const children = childrenById.get(itemId) + if (children && children.length > 0) + item.children = children + }) + return tree }