From 2a2a0bd4355ca22d1410e4049b90b2139a17ebba Mon Sep 17 00:00:00 2001 From: lpf Date: Sat, 7 Mar 2026 22:31:08 +0800 Subject: [PATCH] fix: keep agents stream panel dismissed --- webui/src/pages/Subagents.tsx | 43 +++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/webui/src/pages/Subagents.tsx b/webui/src/pages/Subagents.tsx index 594fac4..e3d30ff 100644 --- a/webui/src/pages/Subagents.tsx +++ b/webui/src/pages/Subagents.tsx @@ -336,6 +336,7 @@ const Subagents: React.FC = () => { const [items, setItems] = useState([]); const [selectedId, setSelectedId] = useState(''); const [selectedAgentID, setSelectedAgentID] = useState(''); + const [streamPanelDismissed, setStreamPanelDismissed] = useState(false); const [spawnTask, setSpawnTask] = useState(''); const [spawnAgentID, setSpawnAgentID] = useState(''); const [spawnRole, setSpawnRole] = useState(''); @@ -396,6 +397,21 @@ const Subagents: React.FC = () => { const apiPath = '/webui/api/subagents_runtime'; const withAction = (action: string) => `${apiPath}${q}${q ? '&' : '?'}action=${encodeURIComponent(action)}`; + const openAgentStream = (agentID: string, taskID = '', branch = '') => { + setStreamPanelDismissed(false); + if (branch) setSelectedTopologyBranch(branch); + setSelectedAgentID(agentID); + setSelectedId(taskID); + }; + + const closeAgentStream = () => { + setStreamPanelDismissed(true); + setSelectedAgentID(''); + setSelectedId(''); + setStreamTask(null); + setStreamItems([]); + }; + const load = async () => { try { const [tasksRes, registryRes] = await Promise.all([ @@ -416,7 +432,7 @@ const Subagents: React.FC = () => { } else { const nextAgentID = selectedAgentID && registryItems.find((x: RegistrySubagent) => x.agent_id === selectedAgentID) ? selectedAgentID - : (registryItems[0]?.agent_id || ''); + : (streamPanelDismissed ? '' : (registryItems[0]?.agent_id || '')); setSelectedAgentID(nextAgentID); const nextTask = arr.find((x: SubagentTask) => x.agent_id === nextAgentID); setSelectedId(nextTask?.id || ''); @@ -431,14 +447,14 @@ const Subagents: React.FC = () => { useEffect(() => { load().catch(() => { }); - }, [q, selectedAgentID]); + }, [q, selectedAgentID, streamPanelDismissed]); useEffect(() => { const timer = window.setInterval(() => { load().catch(() => { }); }, 5000); return () => window.clearInterval(timer); - }, [q, selectedAgentID]); + }, [q, selectedAgentID, streamPanelDismissed]); const selected = useMemo(() => items.find((x) => x.id === selectedId) || null, [items, selectedId]); const selectedRegistryItem = useMemo( @@ -561,9 +577,7 @@ const Subagents: React.FC = () => { clickable: true, scale, onClick: () => { - setSelectedTopologyBranch(localBranch); - setSelectedAgentID(normalizeTitle(localRoot.agent_id, 'main')); - if (localMainTask?.id) setSelectedId(localMainTask.id); + openAgentStream(normalizeTitle(localRoot.agent_id, 'main'), localMainTask?.id || '', localBranch); }, }; cards.push(localMainCard); @@ -598,9 +612,7 @@ const Subagents: React.FC = () => { clickable: true, scale, onClick: () => { - setSelectedTopologyBranch(localBranch); - setSelectedAgentID(normalizeTitle(child.agent_id, '')); - if (task?.id) setSelectedId(task.id); + openAgentStream(normalizeTitle(child.agent_id, ''), task?.id || '', localBranch); }, }); lines.push({ @@ -637,9 +649,7 @@ const Subagents: React.FC = () => { clickable: true, scale, onClick: () => { - setSelectedTopologyBranch(branch); - setSelectedAgentID(normalizeTitle(treeRoot.agent_id, '')); - setSelectedId(''); + openAgentStream(normalizeTitle(treeRoot.agent_id, ''), '', branch); }, }; cards.push(rootCard); @@ -672,9 +682,7 @@ const Subagents: React.FC = () => { clickable: true, scale, onClick: () => { - setSelectedTopologyBranch(branch); - setSelectedAgentID(normalizeTitle(child.agent_id, '')); - setSelectedId(''); + openAgentStream(normalizeTitle(child.agent_id, ''), '', branch); }, }); lines.push({ @@ -1184,10 +1192,7 @@ const Subagents: React.FC = () => {