diff --git a/components/frontend/src/app/projects/[name]/sessions/[sessionName]/page.tsx b/components/frontend/src/app/projects/[name]/sessions/[sessionName]/page.tsx index 169ec1697..80e467a79 100644 --- a/components/frontend/src/app/projects/[name]/sessions/[sessionName]/page.tsx +++ b/components/frontend/src/app/projects/[name]/sessions/[sessionName]/page.tsx @@ -219,9 +219,11 @@ export default function ProjectSessionDetailPage({ const aguiState = aguiStream.state; const aguiSendMessage = aguiStream.sendMessage; const aguiInterrupt = aguiStream.interrupt; - const isRunActive = aguiStream.isRunActive; + // Fix #404: Force isRunActive to false when session is in terminal state (Failed, Completed, Stopped) + const rawIsRunActive = aguiStream.isRunActive; + const isRunActive = rawIsRunActive && !["Failed", "Completed", "Stopped"].includes(phase); const aguiConnectRef = useRef(aguiStream.connect); - + // Keep connect ref up to date useEffect(() => { aguiConnectRef.current = aguiStream.connect; diff --git a/components/frontend/src/components/session/MessagesTab.tsx b/components/frontend/src/components/session/MessagesTab.tsx index f717d580c..9513f4e4e 100644 --- a/components/frontend/src/components/session/MessagesTab.tsx +++ b/components/frontend/src/components/session/MessagesTab.tsx @@ -351,8 +351,8 @@ const MessagesTab: React.FC = ({ session, streamMessages, chat )} - {/* Show loading indicator when agent is actively processing */} - {shouldShowMessages && isRunActive && filteredMessages.length > 0 && ( + {/* Show loading indicator when agent is actively processing (Fix #403) */} + {shouldShowMessages && isRunActive && (