From 451e0a92db93a24f0b0e966c54a950a9311a4866 Mon Sep 17 00:00:00 2001 From: balibabu Date: Tue, 15 Jul 2025 11:28:36 +0800 Subject: [PATCH] Feat: Adjust agent mcp style #3221 (#8841) ### What problem does this PR solve? Feat: Adjust agent mcp style #3221 ### Type of change - [x] New Feature (non-breaking change which adds functionality) --- web/src/locales/en.ts | 3 +- web/src/pages/agent/form/agent-form/index.tsx | 8 +- web/src/pages/agent/form/begin-form/index.tsx | 7 +- .../agent/form/categorize-form/index.tsx | 7 +- web/src/pages/agent/form/code-form/index.tsx | 7 +- .../pages/agent/form/iteration-form/index.tsx | 8 +- .../agent/form/iteration-start-from/index.tsx | 7 +- .../pages/agent/form/message-form/index.tsx | 7 +- .../pages/agent/form/retrieval-form/next.tsx | 8 +- .../pages/agent/form/tavily-form/index.tsx | 8 +- web/src/pages/agent/form/tool-form/index.tsx | 7 +- .../agent/form/tool-form/mcp-form/index.tsx | 8 +- .../form/tool-form/mcp-form/mcp-card.tsx | 6 +- .../agent/form/user-fill-up-form/index.tsx | 7 +- .../form/waiting-dialogue-form/index.tsx | 77 ------------------- .../profile-setting/mcp/edit-mcp-dialog.tsx | 2 +- web/src/pages/profile-setting/mcp/index.tsx | 2 +- 17 files changed, 55 insertions(+), 124 deletions(-) delete mode 100644 web/src/pages/agent/form/waiting-dialogue-form/index.tsx diff --git a/web/src/locales/en.ts b/web/src/locales/en.ts index 58e3d921d..7073c9a6a 100644 --- a/web/src/locales/en.ts +++ b/web/src/locales/en.ts @@ -1306,9 +1306,10 @@ This delimiter is used to split the input text into several text pieces echo of mcp: { export: 'Export', import: 'Import', - addMcp: 'Add MCP', url: 'URL', serverType: 'Server Type', + addMCP: 'Add MCP', + editMCP: 'Edit MCP', }, }, }; diff --git a/web/src/pages/agent/form/agent-form/index.tsx b/web/src/pages/agent/form/agent-form/index.tsx index 8aeab368c..20966b6f6 100644 --- a/web/src/pages/agent/form/agent-form/index.tsx +++ b/web/src/pages/agent/form/agent-form/index.tsx @@ -15,7 +15,7 @@ import { RAGFlowSelect } from '@/components/ui/select'; import { Textarea } from '@/components/ui/textarea'; import { buildOptions } from '@/utils/form'; import { zodResolver } from '@hookform/resolvers/zod'; -import { useMemo } from 'react'; +import { memo, useMemo } from 'react'; import { useForm } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { z } from 'zod'; @@ -68,7 +68,7 @@ const FormSchema = z.object({ exception_goto: z.string().optional(), }); -const AgentForm = ({ node }: INextOperatorForm) => { +function AgentForm({ node }: INextOperatorForm) { const { t } = useTranslation(); const { edges } = useGraphStore((state) => state); @@ -243,6 +243,6 @@ const AgentForm = ({ node }: INextOperatorForm) => { ); -}; +} -export default AgentForm; +export default memo(AgentForm); diff --git a/web/src/pages/agent/form/begin-form/index.tsx b/web/src/pages/agent/form/begin-form/index.tsx index 95c519abb..6e918fc5d 100644 --- a/web/src/pages/agent/form/begin-form/index.tsx +++ b/web/src/pages/agent/form/begin-form/index.tsx @@ -15,6 +15,7 @@ import { FormTooltip } from '@/components/ui/tooltip'; import { buildSelectOptions } from '@/utils/component-util'; import { zodResolver } from '@hookform/resolvers/zod'; import { Plus } from 'lucide-react'; +import { memo } from 'react'; import { useForm, useWatch } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { z } from 'zod'; @@ -31,7 +32,7 @@ const ModeOptions = buildSelectOptions([ AgentDialogueMode.Task, ]); -const BeginForm = ({ node }: INextOperatorForm) => { +function BeginForm({ node }: INextOperatorForm) { const { t } = useTranslation(); const values = useValues(node); @@ -186,6 +187,6 @@ const BeginForm = ({ node }: INextOperatorForm) => { ); -}; +} -export default BeginForm; +export default memo(BeginForm); diff --git a/web/src/pages/agent/form/categorize-form/index.tsx b/web/src/pages/agent/form/categorize-form/index.tsx index 96d159a74..5bf0b91d3 100644 --- a/web/src/pages/agent/form/categorize-form/index.tsx +++ b/web/src/pages/agent/form/categorize-form/index.tsx @@ -4,6 +4,7 @@ import { LlmSettingSchema } from '@/components/llm-setting-items/next'; import { MessageHistoryWindowSizeFormField } from '@/components/message-history-window-size-item'; import { Form } from '@/components/ui/form'; import { zodResolver } from '@hookform/resolvers/zod'; +import { memo } from 'react'; import { useForm } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { z } from 'zod'; @@ -13,7 +14,7 @@ import DynamicCategorize from './dynamic-categorize'; import { useValues } from './use-values'; import { useWatchFormChange } from './use-watch-change'; -const CategorizeForm = ({ node }: INextOperatorForm) => { +function CategorizeForm({ node }: INextOperatorForm) { const { t } = useTranslation(); const values = useValues(node); @@ -64,6 +65,6 @@ const CategorizeForm = ({ node }: INextOperatorForm) => { ); -}; +} -export default CategorizeForm; +export default memo(CategorizeForm); diff --git a/web/src/pages/agent/form/code-form/index.tsx b/web/src/pages/agent/form/code-form/index.tsx index edeb609d6..d34f5da3d 100644 --- a/web/src/pages/agent/form/code-form/index.tsx +++ b/web/src/pages/agent/form/code-form/index.tsx @@ -15,6 +15,7 @@ import { RAGFlowSelect } from '@/components/ui/select'; import { ProgrammingLanguage } from '@/constants/agent'; import { ICodeForm } from '@/interfaces/database/agent'; import { zodResolver } from '@hookform/resolvers/zod'; +import { memo } from 'react'; import { useForm } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { buildOutputList } from '../../utils/build-output-list'; @@ -40,7 +41,7 @@ const options = [ const DynamicFieldName = 'outputs'; -const CodeForm = ({ node }: INextOperatorForm) => { +function CodeForm({ node }: INextOperatorForm) { const formData = node?.data.form as ICodeForm; const { t } = useTranslation(); const values = useValues(node); @@ -164,6 +165,6 @@ const CodeForm = ({ node }: INextOperatorForm) => { ); -}; +} -export default CodeForm; +export default memo(CodeForm); diff --git a/web/src/pages/agent/form/iteration-form/index.tsx b/web/src/pages/agent/form/iteration-form/index.tsx index 7ff631252..af405d7b6 100644 --- a/web/src/pages/agent/form/iteration-form/index.tsx +++ b/web/src/pages/agent/form/iteration-form/index.tsx @@ -1,7 +1,7 @@ import { FormContainer } from '@/components/form-container'; import { Form } from '@/components/ui/form'; import { zodResolver } from '@hookform/resolvers/zod'; -import { useMemo } from 'react'; +import { memo, useMemo } from 'react'; import { useForm, useWatch } from 'react-hook-form'; import { z } from 'zod'; import { VariableType } from '../../constant'; @@ -18,7 +18,7 @@ const FormSchema = z.object({ outputs: z.array(z.object({ name: z.string(), value: z.any() })).optional(), }); -const IterationForm = ({ node }: INextOperatorForm) => { +function IterationForm({ node }: INextOperatorForm) { const defaultValues = useValues(node); const form = useForm({ @@ -56,6 +56,6 @@ const IterationForm = ({ node }: INextOperatorForm) => { ); -}; +} -export default IterationForm; +export default memo(IterationForm); diff --git a/web/src/pages/agent/form/iteration-start-from/index.tsx b/web/src/pages/agent/form/iteration-start-from/index.tsx index f4257c2d4..ba58b92d1 100644 --- a/web/src/pages/agent/form/iteration-start-from/index.tsx +++ b/web/src/pages/agent/form/iteration-start-from/index.tsx @@ -1,4 +1,5 @@ import { Output, OutputType } from '@/pages/agent/form/components/output'; +import { memo } from 'react'; import { initialIterationStartValues } from '../../constant'; const outputs = initialIterationStartValues.outputs; @@ -11,12 +12,12 @@ const outputList = Object.entries(outputs).reduce( }, [], ); -const IterationStartForm = () => { +function IterationStartForm() { return (
); -}; +} -export default IterationStartForm; +export default memo(IterationStartForm); diff --git a/web/src/pages/agent/form/message-form/index.tsx b/web/src/pages/agent/form/message-form/index.tsx index b6f67b5d8..2ca44c725 100644 --- a/web/src/pages/agent/form/message-form/index.tsx +++ b/web/src/pages/agent/form/message-form/index.tsx @@ -10,6 +10,7 @@ import { } from '@/components/ui/form'; import { zodResolver } from '@hookform/resolvers/zod'; import { X } from 'lucide-react'; +import { memo } from 'react'; import { useFieldArray, useForm } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { z } from 'zod'; @@ -18,7 +19,7 @@ import { PromptEditor } from '../components/prompt-editor'; import { useValues } from './use-values'; import { useWatchFormChange } from './use-watch-change'; -const MessageForm = ({ node }: INextOperatorForm) => { +function MessageForm({ node }: INextOperatorForm) { const { t } = useTranslation(); const values = useValues(node); @@ -100,6 +101,6 @@ const MessageForm = ({ node }: INextOperatorForm) => { ); -}; +} -export default MessageForm; +export default memo(MessageForm); diff --git a/web/src/pages/agent/form/retrieval-form/next.tsx b/web/src/pages/agent/form/retrieval-form/next.tsx index fdef95d7f..ac5ba4f35 100644 --- a/web/src/pages/agent/form/retrieval-form/next.tsx +++ b/web/src/pages/agent/form/retrieval-form/next.tsx @@ -13,7 +13,7 @@ import { } from '@/components/ui/form'; import { Textarea } from '@/components/ui/textarea'; import { zodResolver } from '@hookform/resolvers/zod'; -import { useMemo } from 'react'; +import { memo, useMemo } from 'react'; import { useForm, useFormContext } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { z } from 'zod'; @@ -67,7 +67,7 @@ export function EmptyResponseField() { ); } -const RetrievalForm = ({ node }: INextOperatorForm) => { +function RetrievalForm({ node }: INextOperatorForm) { const outputList = useMemo(() => { return [ { @@ -111,6 +111,6 @@ const RetrievalForm = ({ node }: INextOperatorForm) => { ); -}; +} -export default RetrievalForm; +export default memo(RetrievalForm); diff --git a/web/src/pages/agent/form/tavily-form/index.tsx b/web/src/pages/agent/form/tavily-form/index.tsx index 461d00910..91aa6fafe 100644 --- a/web/src/pages/agent/form/tavily-form/index.tsx +++ b/web/src/pages/agent/form/tavily-form/index.tsx @@ -12,7 +12,7 @@ import { RAGFlowSelect } from '@/components/ui/select'; import { Switch } from '@/components/ui/switch'; import { buildOptions } from '@/utils/form'; import { zodResolver } from '@hookform/resolvers/zod'; -import { useMemo } from 'react'; +import { memo, useMemo } from 'react'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import { @@ -27,7 +27,7 @@ import { DynamicDomain } from './dynamic-domain'; import { useValues } from './use-values'; import { useWatchFormChange } from './use-watch-change'; -const TavilyForm = ({ node }: INextOperatorForm) => { +function TavilyForm({ node }: INextOperatorForm) { const values = useValues(node); const FormSchema = z.object({ @@ -227,6 +227,6 @@ const TavilyForm = ({ node }: INextOperatorForm) => { ); -}; +} -export default TavilyForm; +export default memo(TavilyForm); diff --git a/web/src/pages/agent/form/tool-form/index.tsx b/web/src/pages/agent/form/tool-form/index.tsx index 7bc68d127..9c03870b4 100644 --- a/web/src/pages/agent/form/tool-form/index.tsx +++ b/web/src/pages/agent/form/tool-form/index.tsx @@ -1,10 +1,11 @@ +import { memo } from 'react'; import useGraphStore from '../../store'; import { ToolFormConfigMap } from './constant'; import MCPForm from './mcp-form'; const EmptyContent = () =>
; -const ToolForm = () => { +function ToolForm() { const clickedToolId = useGraphStore((state) => state.clickedToolId); const ToolForm = @@ -17,6 +18,6 @@ const ToolForm = () => { ); -}; +} -export default ToolForm; +export default memo(ToolForm); diff --git a/web/src/pages/agent/form/tool-form/mcp-form/index.tsx b/web/src/pages/agent/form/tool-form/mcp-form/index.tsx index 9fd0802dc..a2eff18e3 100644 --- a/web/src/pages/agent/form/tool-form/mcp-form/index.tsx +++ b/web/src/pages/agent/form/tool-form/mcp-form/index.tsx @@ -1,4 +1,4 @@ -import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { Card, CardContent, CardHeader } from '@/components/ui/card'; import { Checkbox } from '@/components/ui/checkbox'; import { Form, @@ -42,9 +42,9 @@ function MCPForm() { > - {data.name} +
{data.name}
- + URL: {data.url} @@ -71,7 +71,7 @@ function MCPForm() { { return checked diff --git a/web/src/pages/agent/form/tool-form/mcp-form/mcp-card.tsx b/web/src/pages/agent/form/tool-form/mcp-form/mcp-card.tsx index d541fea33..b2a80f6f6 100644 --- a/web/src/pages/agent/form/tool-form/mcp-form/mcp-card.tsx +++ b/web/src/pages/agent/form/tool-form/mcp-form/mcp-card.tsx @@ -1,4 +1,4 @@ -import { Card, CardContent, CardTitle } from '@/components/ui/card'; +import { Card, CardContent } from '@/components/ui/card'; import { IMCPTool } from '@/interfaces/database/mcp'; import { PropsWithChildren } from 'react'; @@ -11,8 +11,8 @@ export function MCPCard({ {children}
- {data.name} -

{data.description}

+
{data.name}
+

{data.description}

diff --git a/web/src/pages/agent/form/user-fill-up-form/index.tsx b/web/src/pages/agent/form/user-fill-up-form/index.tsx index 240eed0e7..5eea1b96a 100644 --- a/web/src/pages/agent/form/user-fill-up-form/index.tsx +++ b/web/src/pages/agent/form/user-fill-up-form/index.tsx @@ -13,6 +13,7 @@ import { Textarea } from '@/components/ui/textarea'; import { FormTooltip } from '@/components/ui/tooltip'; import { zodResolver } from '@hookform/resolvers/zod'; import { Plus } from 'lucide-react'; +import { memo } from 'react'; import { useForm, useWatch } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { z } from 'zod'; @@ -23,7 +24,7 @@ import { useEditQueryRecord } from '../begin-form/use-edit-query'; import { useValues } from './use-values'; import { useWatchFormChange } from './use-watch-change'; -const UserFillUpForm = ({ node }: INextOperatorForm) => { +function UserFillUpForm({ node }: INextOperatorForm) { const { t } = useTranslation(); const values = useValues(node); @@ -150,6 +151,6 @@ const UserFillUpForm = ({ node }: INextOperatorForm) => { ); -}; +} -export default UserFillUpForm; +export default memo(UserFillUpForm); diff --git a/web/src/pages/agent/form/waiting-dialogue-form/index.tsx b/web/src/pages/agent/form/waiting-dialogue-form/index.tsx deleted file mode 100644 index c38874c21..000000000 --- a/web/src/pages/agent/form/waiting-dialogue-form/index.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import Editor, { loader } from '@monaco-editor/react'; -import { INextOperatorForm } from '../../interface'; - -import { - Form, - FormControl, - FormField, - FormItem, - FormLabel, - FormMessage, -} from '@/components/ui/form'; -import { RAGFlowSelect } from '@/components/ui/select'; -import { ProgrammingLanguage } from '@/constants/agent'; -import { ICodeForm } from '@/interfaces/database/flow'; -import { useTranslation } from 'react-i18next'; - -loader.config({ paths: { vs: '/vs' } }); - -const options = [ - ProgrammingLanguage.Python, - ProgrammingLanguage.Javascript, -].map((x) => ({ value: x, label: x })); - -const CodeForm = ({ form, node }: INextOperatorForm) => { - const formData = node?.data.form as ICodeForm; - const { t } = useTranslation(); - - return ( -
- { - e.preventDefault(); - }} - > - ( - - - Code - ( - - - - - - - )} - /> - - - - - - - )} - /> - - - ); -}; - -export default CodeForm; diff --git a/web/src/pages/profile-setting/mcp/edit-mcp-dialog.tsx b/web/src/pages/profile-setting/mcp/edit-mcp-dialog.tsx index 37b52dfdf..b94b8bf38 100644 --- a/web/src/pages/profile-setting/mcp/edit-mcp-dialog.tsx +++ b/web/src/pages/profile-setting/mcp/edit-mcp-dialog.tsx @@ -110,7 +110,7 @@ export function EditMcpDialog({ - {t('common.edit')} + {id ? t('mcp.editMCP') : t('mcp.addMCP')} {t('mcp.import')}