diff --git a/frontend-web/src/components/workspace/agents/agent-chat-sidebar.tsx b/frontend-web/src/components/workspace/agents/agent-chat-sidebar.tsx index 01fc66ef..03fddad8 100644 --- a/frontend-web/src/components/workspace/agents/agent-chat-sidebar.tsx +++ b/frontend-web/src/components/workspace/agents/agent-chat-sidebar.tsx @@ -1,10 +1,11 @@ "use client"; -import { Bot, Loader2 } from "lucide-react"; +import { Bot, Loader2, Search, X } from "lucide-react"; import Link from "next/link"; import { useEffect, useMemo, useState } from "react"; import { agentColor } from "@/components/workspace/agent-icon-color"; +import { Input } from "@/components/ui/input"; import { Select, SelectContent, @@ -52,6 +53,15 @@ export function AgentChatSidebar({ activeAgentId }: { activeAgentId?: string }) // 作用域:MINE_SCOPE 或某个广场 id。默认「我的」。 const [scope, setScope] = useState(MINE_SCOPE); + // 模糊搜索智能体名称:防抖 300ms 后走服务端 search(后端按原始名 / 脱敏名匹配), + // 在当前来源(我的 / 某广场)内过滤,能搜全量而非仅当前 50 条。 + const [searchInput, setSearchInput] = useState(""); + const [search, setSearch] = useState(""); + useEffect(() => { + const timer = setTimeout(() => setSearch(searchInput.trim()), 300); + return () => clearTimeout(timer); + }, [searchInput]); + // 若所选广场被管理员删除,回退到「我的」,避免指向不存在的广场。 useEffect(() => { if ( @@ -70,13 +80,14 @@ export function AgentChatSidebar({ activeAgentId }: { activeAgentId?: string }) page: 1, pageSize: LIST_PAGE_SIZE, square: isMine ? undefined : scope, + search: search || undefined, }); return ( // 配色与 AgentModuleSidebar 一致:浅色白底,深蓝主题半透明深蓝玻璃面板。