From 57dca46e9806f5c1f55e6dc9c68f70fc0b84adb7 Mon Sep 17 00:00:00 2001 From: puzhen <1303385763@qq.com> Date: Thu, 6 Nov 2025 10:30:55 +0100 Subject: [PATCH 1/2] fix: add isHumanReply logic to prevent duplicate task boxes Add isHumanReply check from main branch (#577, #602) to prevent duplicate task boxes in human_toolkit multi-turn conversations. This resolves the conflict with main branch by preserving the bug fix while keeping chatbox-ux's UI improvements. --- src/components/ChatBox/UserQueryGroup.tsx | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/components/ChatBox/UserQueryGroup.tsx b/src/components/ChatBox/UserQueryGroup.tsx index 7f2748d3..4fba6dd3 100644 --- a/src/components/ChatBox/UserQueryGroup.tsx +++ b/src/components/ChatBox/UserQueryGroup.tsx @@ -40,7 +40,25 @@ export const UserQueryGroup: React.FC = ({ // Show task if this query group has a task message OR if it's the most recent user query during splitting // During splitting phase (no to_sub_tasks yet), show task for the most recent query only + // Exclude human-reply scenarios (when user is replying to an activeAsk) + const isHumanReply = queryGroup.userMessage && + activeTaskId && + chatState.tasks[activeTaskId] && + (chatState.tasks[activeTaskId].activeAsk || + // Check if this user message follows an 'ask' message in the message sequence + (() => { + const messages = chatState.tasks[activeTaskId].messages; + const userMessageIndex = messages.findIndex((m: any) => m.id === queryGroup.userMessage.id); + if (userMessageIndex > 0) { + // Check the previous message - if it's an agent message with step 'ask', this is a human-reply + const prevMessage = messages[userMessageIndex - 1]; + return prevMessage?.role === 'agent' && prevMessage?.step === 'ask'; + } + return false; + })()); + const isLastUserQuery = !queryGroup.taskMessage && + !isHumanReply && activeTaskId && chatState.tasks[activeTaskId] && queryGroup.userMessage && @@ -151,7 +169,7 @@ export const UserQueryGroup: React.FC = ({ {/* Sticky Task Box - Show only when task exists and NOT in skeleton phase */} - {task && !isSkeletonPhase && ( + {task && !isSkeletonPhase && !isHumanReply && ( Date: Thu, 6 Nov 2025 10:39:40 +0100 Subject: [PATCH 2/2] update --- utils/__pycache__/__init__.cpython-310.pyc | Bin 150 -> 193 bytes .../traceroot_wrapper.cpython-310.pyc | Bin 2354 -> 2523 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/utils/__pycache__/__init__.cpython-310.pyc b/utils/__pycache__/__init__.cpython-310.pyc index ff3c84b3e30be08256dc9dc392a9678165af8d8a..10d1d4a69c028b0fa2e5b31e6afd01340e2b871d 100644 GIT binary patch literal 193 zcmd1j<>g`kg7uOdnT|mEF^Gc>lA4US1WSq%lT(ZG^Go8(ixLY8Qj3Z}`u#MSZ!v&bx7g$36LWIn<5w~iu>xhl z#4ig`kf}nu!8H_;sF^Gcs diff --git a/utils/__pycache__/traceroot_wrapper.cpython-310.pyc b/utils/__pycache__/traceroot_wrapper.cpython-310.pyc index 8a7166a1508ae29d727cf39e1190149d77a36c7a..d695ee21dc2c1d82d5dfa3d82d7694ce6bef45e3 100644 GIT binary patch delta 693 zcmY+B&ubGw6vyZ7&*^59G@CZgrFqw3Sinl&( zRT6~!jLqes$}FnAH-9o)JTf}wuEi`MhZG6w9h=!`GWwVVNrUjA=d(cKg%+czGkcQ+ z@RXp9^q4S*15fmz?+!>ii96$8q$vhPjs-kf4ZT zIIae{fSt4a|5y_jETf-CZvd>IhC1Pe{v_rHYQ(@d&rKmVI|L`+0GmSnAt_DC8&J}! zE2o>#fQh-Kg<82Q!ZvS4HQw6cK~&q1TAjU`{G}BkEi?KTD9P{o3z(A)_?a)T2<`mR)l}J}^h*C(}ybihsjU;%SB^W=_AF0^qJ(v1?Z= zDk};~4p*z9-sBr$7){p?>a9+_(c#mLefi$L=^rlqD+ZSv zQX~OS9%S&QkoYImKf;@TKm;$Iym|BLtccV%%!m2DdGqD*=4<85-;N7~Jkhat|JUGK zj*#z}I3G-ln|deY?RMwXh!|%`(2T5Oo7+H;p*17i5g>9?nCBN{w1RenpwlAU6}E7v z07S5PVL{}+ewmAk$0c6QawCs>!aoAci^>tj6?A8em#`pKwJKt1X7Z|Vri9l-8Ou}P z^#f5Kt)Yj$sA1(j#nm?y$aoX0Skq0MH>>|=w)WS|oHww%0NxbMc?%m0-CCbu^CR$e zG#-+mr3MguQg8@iH+-B3nS>ah^rK!9-WJKTG@gXFViXs;y+nj!*can8JV}R95~`BX z0Y~i`Utmiy^A&W|Yx47|2ccqpmXODlab z8IJohvz46;n}5<6r(*nEX1}XGJ9nY2yxa}Aq#oq%?OfJLm$=~QrD@bWhdR^+i~6)^ RTFil(&iYo-&9gkX#&56+ef