diff --git a/app/w/[id]/components/workflow-block/components/sub-block/components/condition-input.tsx b/app/w/[id]/components/workflow-block/components/sub-block/components/condition-input.tsx
index 65a4c1b0dd..eb3afafc0e 100644
--- a/app/w/[id]/components/workflow-block/components/sub-block/components/condition-input.tsx
+++ b/app/w/[id]/components/workflow-block/components/sub-block/components/condition-input.tsx
@@ -440,6 +440,11 @@ export function ConditionInput({ blockId, subBlockId, isConnecting }: ConditionI
}}
isConnectableStart={true}
isConnectableEnd={false}
+ isValidConnection={(connection) => {
+ const sourceNodeId = connection.source?.split('-')[0]
+ const targetNodeId = connection.target?.split('-')[0]
+ return sourceNodeId !== targetNodeId
+ }}
/>
diff --git a/app/w/[id]/components/workflow-block/workflow-block.tsx b/app/w/[id]/components/workflow-block/workflow-block.tsx
index 482091a916..d617fb05eb 100644
--- a/app/w/[id]/components/workflow-block/workflow-block.tsx
+++ b/app/w/[id]/components/workflow-block/workflow-block.tsx
@@ -191,6 +191,7 @@ export function WorkflowBlock({ id, data, selected }: NodeProps connection.source !== id}
/>
{/* Block Header */}
@@ -284,6 +285,7 @@ export function WorkflowBlock({ id, data, selected }: NodeProps connection.target !== id}
/>
)}
diff --git a/stores/workflow/store.ts b/stores/workflow/store.ts
index 883e7a7188..d39efc30dc 100644
--- a/stores/workflow/store.ts
+++ b/stores/workflow/store.ts
@@ -186,6 +186,20 @@ export const useWorkflowStore = create()(
},
addEdge: (edge: Edge) => {
+ // Check for duplicate connections
+ const isDuplicate = get().edges.some(
+ (existingEdge) =>
+ existingEdge.source === edge.source &&
+ existingEdge.target === edge.target &&
+ existingEdge.sourceHandle === edge.sourceHandle &&
+ existingEdge.targetHandle === edge.targetHandle
+ )
+
+ // If it's a duplicate connection, return early without adding the edge
+ if (isDuplicate) {
+ return
+ }
+
const newEdge = {
id: edge.id || crypto.randomUUID(),
source: edge.source,