mirror of
https://github.com/YspCoder/clawgo.git
synced 2026-05-06 15:38:59 +08:00
fix: keep agents stream panel dismissed
This commit is contained in:
@@ -336,6 +336,7 @@ const Subagents: React.FC = () => {
|
|||||||
const [items, setItems] = useState<SubagentTask[]>([]);
|
const [items, setItems] = useState<SubagentTask[]>([]);
|
||||||
const [selectedId, setSelectedId] = useState<string>('');
|
const [selectedId, setSelectedId] = useState<string>('');
|
||||||
const [selectedAgentID, setSelectedAgentID] = useState<string>('');
|
const [selectedAgentID, setSelectedAgentID] = useState<string>('');
|
||||||
|
const [streamPanelDismissed, setStreamPanelDismissed] = useState(false);
|
||||||
const [spawnTask, setSpawnTask] = useState('');
|
const [spawnTask, setSpawnTask] = useState('');
|
||||||
const [spawnAgentID, setSpawnAgentID] = useState('');
|
const [spawnAgentID, setSpawnAgentID] = useState('');
|
||||||
const [spawnRole, setSpawnRole] = useState('');
|
const [spawnRole, setSpawnRole] = useState('');
|
||||||
@@ -396,6 +397,21 @@ const Subagents: React.FC = () => {
|
|||||||
const apiPath = '/webui/api/subagents_runtime';
|
const apiPath = '/webui/api/subagents_runtime';
|
||||||
const withAction = (action: string) => `${apiPath}${q}${q ? '&' : '?'}action=${encodeURIComponent(action)}`;
|
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 () => {
|
const load = async () => {
|
||||||
try {
|
try {
|
||||||
const [tasksRes, registryRes] = await Promise.all([
|
const [tasksRes, registryRes] = await Promise.all([
|
||||||
@@ -416,7 +432,7 @@ const Subagents: React.FC = () => {
|
|||||||
} else {
|
} else {
|
||||||
const nextAgentID = selectedAgentID && registryItems.find((x: RegistrySubagent) => x.agent_id === selectedAgentID)
|
const nextAgentID = selectedAgentID && registryItems.find((x: RegistrySubagent) => x.agent_id === selectedAgentID)
|
||||||
? selectedAgentID
|
? selectedAgentID
|
||||||
: (registryItems[0]?.agent_id || '');
|
: (streamPanelDismissed ? '' : (registryItems[0]?.agent_id || ''));
|
||||||
setSelectedAgentID(nextAgentID);
|
setSelectedAgentID(nextAgentID);
|
||||||
const nextTask = arr.find((x: SubagentTask) => x.agent_id === nextAgentID);
|
const nextTask = arr.find((x: SubagentTask) => x.agent_id === nextAgentID);
|
||||||
setSelectedId(nextTask?.id || '');
|
setSelectedId(nextTask?.id || '');
|
||||||
@@ -431,14 +447,14 @@ const Subagents: React.FC = () => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
load().catch(() => { });
|
load().catch(() => { });
|
||||||
}, [q, selectedAgentID]);
|
}, [q, selectedAgentID, streamPanelDismissed]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const timer = window.setInterval(() => {
|
const timer = window.setInterval(() => {
|
||||||
load().catch(() => { });
|
load().catch(() => { });
|
||||||
}, 5000);
|
}, 5000);
|
||||||
return () => window.clearInterval(timer);
|
return () => window.clearInterval(timer);
|
||||||
}, [q, selectedAgentID]);
|
}, [q, selectedAgentID, streamPanelDismissed]);
|
||||||
|
|
||||||
const selected = useMemo(() => items.find((x) => x.id === selectedId) || null, [items, selectedId]);
|
const selected = useMemo(() => items.find((x) => x.id === selectedId) || null, [items, selectedId]);
|
||||||
const selectedRegistryItem = useMemo(
|
const selectedRegistryItem = useMemo(
|
||||||
@@ -561,9 +577,7 @@ const Subagents: React.FC = () => {
|
|||||||
clickable: true,
|
clickable: true,
|
||||||
scale,
|
scale,
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
setSelectedTopologyBranch(localBranch);
|
openAgentStream(normalizeTitle(localRoot.agent_id, 'main'), localMainTask?.id || '', localBranch);
|
||||||
setSelectedAgentID(normalizeTitle(localRoot.agent_id, 'main'));
|
|
||||||
if (localMainTask?.id) setSelectedId(localMainTask.id);
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
cards.push(localMainCard);
|
cards.push(localMainCard);
|
||||||
@@ -598,9 +612,7 @@ const Subagents: React.FC = () => {
|
|||||||
clickable: true,
|
clickable: true,
|
||||||
scale,
|
scale,
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
setSelectedTopologyBranch(localBranch);
|
openAgentStream(normalizeTitle(child.agent_id, ''), task?.id || '', localBranch);
|
||||||
setSelectedAgentID(normalizeTitle(child.agent_id, ''));
|
|
||||||
if (task?.id) setSelectedId(task.id);
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
lines.push({
|
lines.push({
|
||||||
@@ -637,9 +649,7 @@ const Subagents: React.FC = () => {
|
|||||||
clickable: true,
|
clickable: true,
|
||||||
scale,
|
scale,
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
setSelectedTopologyBranch(branch);
|
openAgentStream(normalizeTitle(treeRoot.agent_id, ''), '', branch);
|
||||||
setSelectedAgentID(normalizeTitle(treeRoot.agent_id, ''));
|
|
||||||
setSelectedId('');
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
cards.push(rootCard);
|
cards.push(rootCard);
|
||||||
@@ -672,9 +682,7 @@ const Subagents: React.FC = () => {
|
|||||||
clickable: true,
|
clickable: true,
|
||||||
scale,
|
scale,
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
setSelectedTopologyBranch(branch);
|
openAgentStream(normalizeTitle(child.agent_id, ''), '', branch);
|
||||||
setSelectedAgentID(normalizeTitle(child.agent_id, ''));
|
|
||||||
setSelectedId('');
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
lines.push({
|
lines.push({
|
||||||
@@ -1184,10 +1192,7 @@ const Subagents: React.FC = () => {
|
|||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setSelectedAgentID('');
|
closeAgentStream();
|
||||||
setSelectedId('');
|
|
||||||
setStreamTask(null);
|
|
||||||
setStreamItems([]);
|
|
||||||
}}
|
}}
|
||||||
className="px-2 py-1 rounded-xl text-[11px] control-chip"
|
className="px-2 py-1 rounded-xl text-[11px] control-chip"
|
||||||
>
|
>
|
||||||
|
|||||||
Reference in New Issue
Block a user