diff --git a/web/src/hooks/logic-hooks/navigate-hooks.ts b/web/src/hooks/logic-hooks/navigate-hooks.ts
index aaa4557d2..785b5add7 100644
--- a/web/src/hooks/logic-hooks/navigate-hooks.ts
+++ b/web/src/hooks/logic-hooks/navigate-hooks.ts
@@ -38,6 +38,14 @@ export const useNavigatePage = () => {
navigate(Routes.Chat);
}, [navigate]);
+ const navigateToAgentList = useCallback(() => {
+ navigate(Routes.Agents);
+ }, [navigate]);
+
+ const navigateToAgent = useCallback(() => {
+ navigate(Routes.Agent);
+ }, [navigate]);
+
const navigateToChunkParsedResult = useCallback(
(id: string, knowledgeId?: string) => () => {
navigate(
@@ -81,5 +89,7 @@ export const useNavigatePage = () => {
navigateToChunkParsedResult,
getQueryString,
navigateToChunk,
+ navigateToAgentList,
+ navigateToAgent,
};
};
diff --git a/web/src/layouts/next-header.tsx b/web/src/layouts/next-header.tsx
index fe0dc175b..ec7d08080 100644
--- a/web/src/layouts/next-header.tsx
+++ b/web/src/layouts/next-header.tsx
@@ -33,7 +33,7 @@ export function Header() {
{ path: Routes.Datasets, name: t('knowledgeBase'), icon: Library },
{ path: Routes.Chats, name: t('chat'), icon: MessageSquareText },
{ path: Routes.Search, name: t('search'), icon: Search },
- { path: Routes.Agent, name: t('flow'), icon: Cpu },
+ { path: Routes.Agents, name: t('flow'), icon: Cpu },
{ path: Routes.Files, name: t('fileManager'), icon: File },
],
[t],
diff --git a/web/src/pages/agent/index.tsx b/web/src/pages/agent/index.tsx
index fe5b35f96..0822716aa 100644
--- a/web/src/pages/agent/index.tsx
+++ b/web/src/pages/agent/index.tsx
@@ -1,3 +1,33 @@
+import { PageHeader } from '@/components/page-header';
+import { Button } from '@/components/ui/button';
+import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks';
+import { Trash2 } from 'lucide-react';
+
export default function Agent() {
- return
Agent
;
+ const { navigateToAgentList } = useNavigatePage();
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ );
}
diff --git a/web/src/pages/agents/agent-card.tsx b/web/src/pages/agents/agent-card.tsx
new file mode 100644
index 000000000..7524f96c6
--- /dev/null
+++ b/web/src/pages/agents/agent-card.tsx
@@ -0,0 +1,53 @@
+import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
+import { Button } from '@/components/ui/button';
+import { Card, CardContent } from '@/components/ui/card';
+import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks';
+import { IFlow } from '@/interfaces/database/flow';
+import { formatPureDate } from '@/utils/date';
+import { ChevronRight, Trash2 } from 'lucide-react';
+
+interface IProps {
+ data: IFlow;
+}
+
+export function AgentCard({ data }: IProps) {
+ const { navigateToAgent } = useNavigatePage();
+
+ return (
+
+
+
+ {data.avatar ? (
+
+ ) : (
+
+
+ CN
+
+ )}
+
+ {data.title}
+ An app that does things An app that does things
+
+
+ Search app
+
+ {formatPureDate(data.update_time)}
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/web/src/pages/agents/index.tsx b/web/src/pages/agents/index.tsx
new file mode 100644
index 000000000..7a037758c
--- /dev/null
+++ b/web/src/pages/agents/index.tsx
@@ -0,0 +1,24 @@
+import ListFilterBar from '@/components/list-filter-bar';
+import { useFetchFlowList } from '@/hooks/flow-hooks';
+import { Plus } from 'lucide-react';
+import { AgentCard } from './agent-card';
+
+export default function Agent() {
+ const { data } = useFetchFlowList();
+
+ return (
+
+
+
+ {data.map((x) => {
+ return
;
+ })}
+
+
+ );
+}
diff --git a/web/src/routes.ts b/web/src/routes.ts
index d3689f5b6..88bbf9858 100644
--- a/web/src/routes.ts
+++ b/web/src/routes.ts
@@ -5,6 +5,7 @@ export enum Routes {
DatasetBase = '/dataset',
Dataset = `${Routes.DatasetBase}${Routes.DatasetBase}`,
Agent = '/agent',
+ Agents = '/agents',
Search = '/next-search',
Chats = '/next-chats',
Chat = '/next-chat',
@@ -196,16 +197,21 @@ const routes = [
],
},
{
- path: Routes.Agent,
+ path: Routes.Agents,
layout: false,
component: '@/layouts/next',
routes: [
{
- path: Routes.Agent,
- component: `@/pages${Routes.Agent}`,
+ path: Routes.Agents,
+ component: `@/pages${Routes.Agents}`,
},
],
},
+ {
+ path: Routes.Agent,
+ layout: false,
+ component: `@/pages${Routes.Agent}`,
+ },
{
path: Routes.Files,
layout: false,