diff --git a/web/src/pages/agent/canvas/node/dropdown/accordion-operators.tsx b/web/src/pages/agent/canvas/node/dropdown/accordion-operators.tsx
index 1ab0dde1f..232ab78ff 100644
--- a/web/src/pages/agent/canvas/node/dropdown/accordion-operators.tsx
+++ b/web/src/pages/agent/canvas/node/dropdown/accordion-operators.tsx
@@ -79,7 +79,7 @@ export function AccordionOperators({
Operator.Code,
Operator.StringTransform,
Operator.DataOperations,
- Operator.VariableAssigner,
+ // Operator.VariableAssigner,
Operator.VariableAggregator,
]}
isCustomDropdown={isCustomDropdown}
diff --git a/web/src/pages/agent/canvas/node/variable-aggregator-node.tsx b/web/src/pages/agent/canvas/node/variable-aggregator-node.tsx
index 1643dc600..697a1784e 100644
--- a/web/src/pages/agent/canvas/node/variable-aggregator-node.tsx
+++ b/web/src/pages/agent/canvas/node/variable-aggregator-node.tsx
@@ -22,7 +22,7 @@ export function VariableAggregatorNode({
{x.type}
- {x.variables.map((y, index) => (
+ {x.variables?.map((y, index) => (
{getLabel(y.value)}
diff --git a/web/src/pages/agent/form/components/key-input.tsx b/web/src/pages/agent/form/components/key-input.tsx
new file mode 100644
index 000000000..da780f08e
--- /dev/null
+++ b/web/src/pages/agent/form/components/key-input.tsx
@@ -0,0 +1,25 @@
+import { Input } from '@/components/ui/input';
+import { ChangeEvent, useCallback } from 'react';
+
+type KeyInputProps = {
+ value?: string;
+ onChange?: (value: string) => void;
+ searchValue?: string | RegExp;
+};
+
+export function KeyInput({
+ value,
+ onChange,
+ searchValue = /[^a-zA-Z0-9_]/g,
+}: KeyInputProps) {
+ const handleChange = useCallback(
+ (e: ChangeEvent
) => {
+ const value = e.target.value ?? '';
+ const filteredValue = value.replace(searchValue, '');
+ onChange?.(filteredValue);
+ },
+ [onChange, searchValue],
+ );
+
+ return ;
+}
diff --git a/web/src/pages/agent/form/data-operations-form/filter-values.tsx b/web/src/pages/agent/form/data-operations-form/filter-values.tsx
index 72a80cb09..ae167e57d 100644
--- a/web/src/pages/agent/form/data-operations-form/filter-values.tsx
+++ b/web/src/pages/agent/form/data-operations-form/filter-values.tsx
@@ -1,7 +1,6 @@
import { SelectWithSearch } from '@/components/originui/select-with-search';
import { RAGFlowFormItem } from '@/components/ragflow-form';
import { Button } from '@/components/ui/button';
-import { Input } from '@/components/ui/input';
import { Separator } from '@/components/ui/separator';
import { useBuildSwitchOperatorOptions } from '@/hooks/logic-hooks/use-build-operator-options';
import { X } from 'lucide-react';
@@ -9,6 +8,7 @@ import { ReactNode } from 'react';
import { useFieldArray, useFormContext } from 'react-hook-form';
import { DataOperationsOperatorOptions } from '../../constant';
import { DynamicFormHeader } from '../components/dynamic-fom-header';
+import { KeyInput } from '../components/key-input';
import { PromptEditor } from '../components/prompt-editor';
type SelectKeysProps = {
@@ -55,7 +55,7 @@ export function FilterValues({
return (
-
+
diff --git a/web/src/pages/agent/form/data-operations-form/updates.tsx b/web/src/pages/agent/form/data-operations-form/updates.tsx
index d401e0463..886b7507b 100644
--- a/web/src/pages/agent/form/data-operations-form/updates.tsx
+++ b/web/src/pages/agent/form/data-operations-form/updates.tsx
@@ -1,11 +1,11 @@
import { RAGFlowFormItem } from '@/components/ragflow-form';
import { Button } from '@/components/ui/button';
-import { Input } from '@/components/ui/input';
import { Separator } from '@/components/ui/separator';
import { X } from 'lucide-react';
import { ReactNode } from 'react';
import { useFieldArray, useFormContext } from 'react-hook-form';
import { DynamicFormHeader } from '../components/dynamic-fom-header';
+import { KeyInput } from '../components/key-input';
import { PromptEditor } from '../components/prompt-editor';
type SelectKeysProps = {
@@ -44,7 +44,7 @@ export function Updates({
return (
-
+
diff --git a/web/src/pages/agent/form/variable-aggregator-form/index.tsx b/web/src/pages/agent/form/variable-aggregator-form/index.tsx
index 3807ba021..7b46e50a7 100644
--- a/web/src/pages/agent/form/variable-aggregator-form/index.tsx
+++ b/web/src/pages/agent/form/variable-aggregator-form/index.tsx
@@ -35,7 +35,7 @@ function VariableAggregatorForm({ node }: INextOperatorForm) {
});
const appendItem = useCallback(() => {
- append({ group_name: `Group ${fields.length}`, variables: [] });
+ append({ group_name: `Group${fields.length}`, variables: [] });
}, [append, fields.length]);
const outputList = buildOutputList(
diff --git a/web/src/pages/agent/form/variable-aggregator-form/use-handle-name-change.ts b/web/src/pages/agent/form/variable-aggregator-form/use-handle-name-change.ts
index 386016efd..3daad0daa 100644
--- a/web/src/pages/agent/form/variable-aggregator-form/use-handle-name-change.ts
+++ b/web/src/pages/agent/form/variable-aggregator-form/use-handle-name-change.ts
@@ -21,8 +21,10 @@ export const useHandleNameChange = (previousName: string) => {
return name;
}, [form, name, previousName]);
- const handleNameChange = useCallback((e: ChangeEvent) => {
- setName(e.target.value);
+ const handleNameChange = useCallback((e: ChangeEvent) => {
+ const value = e.target.value;
+ const filteredValue = value.replace(/[^a-zA-Z0-9_]/g, '');
+ setName(filteredValue);
}, []);
useEffect(() => {
diff --git a/web/src/pages/profile-setting/mcp/index.tsx b/web/src/pages/profile-setting/mcp/index.tsx
index d2563034b..d790ac6d3 100644
--- a/web/src/pages/profile-setting/mcp/index.tsx
+++ b/web/src/pages/profile-setting/mcp/index.tsx
@@ -80,13 +80,13 @@ export default function McpServer() {
)}
{t(`mcp.${isSelectionMode ? 'exitBulkManage' : 'bulkManage'}`)}
-
-
>